@@ -251,7 +251,7 @@ discard block |
||
| 251 | 251 | /** |
| 252 | 252 | * Add one or multiple addresses to Cc |
| 253 | 253 | * |
| 254 | - * @param string|array|Horde_Mail_Rfc822_List $address |
|
| 254 | + * @param string $address |
|
| 255 | 255 | * @param string $personal ='' only used if $address is a string |
| 256 | 256 | */ |
| 257 | 257 | function addCc($address, $personal=null) |
@@ -270,7 +270,7 @@ discard block |
||
| 270 | 270 | /** |
| 271 | 271 | * Add one or multiple addresses to Bcc |
| 272 | 272 | * |
| 273 | - * @param string|array|Horde_Mail_Rfc822_List $address |
|
| 273 | + * @param string $address |
|
| 274 | 274 | * @param string $personal ='' only used if $address is a string |
| 275 | 275 | */ |
| 276 | 276 | function addBcc($address, $personal=null) |
@@ -381,7 +381,7 @@ discard block |
||
| 381 | 381 | /** |
| 382 | 382 | * Adds an embedded image or other inline attachment |
| 383 | 383 | * |
| 384 | - * @param string|resource $data Path to the attachment or open file-descriptor |
|
| 384 | + * @param string $data Path to the attachment or open file-descriptor |
|
| 385 | 385 | * @param string $cid Content ID of the attachment. Use this to identify |
| 386 | 386 | * the Id for accessing the image in an HTML form. |
| 387 | 387 | * @param string $name Overrides the attachment name. |
@@ -481,10 +481,10 @@ discard block |
||
| 481 | 481 | * Log mails to log file specified in $GLOBALS['egw_info']['server']['log_mail'] |
| 482 | 482 | * or regular error_log for true (can be set either in DB or header.inc.php). |
| 483 | 483 | * |
| 484 | - * @param Horde_Mail_Transport $transport =null using transport from mail-account |
|
| 484 | + * @param Horde_Mail_Transport $transport =null using transport from mail-account |
|
| 485 | 485 | * specified in construct, or default one, if not specified |
| 486 | - * @param boolean $resend =true allways true in EGroupware! |
|
| 487 | - * @param boolean $flowed =null send message in flowed text format, |
|
| 486 | + * @param boolean $resend =true allways true in EGroupware! |
|
| 487 | + * @param boolean $flowed =null send message in flowed text format, |
|
| 488 | 488 | * default null used flowed by default for everything but multipart/encrypted, |
| 489 | 489 | * unless disabled in site configuration ("disable_rfc3676_flowed") |
| 490 | 490 | * |
@@ -642,15 +642,15 @@ discard block |
||
| 642 | 642 | } |
| 643 | 643 | |
| 644 | 644 | /** |
| 645 | - * Get the raw email data sent by this object. |
|
| 646 | - * |
|
| 645 | + * Get the raw email data sent by this object. |
|
| 646 | + * |
|
| 647 | 647 | * Reimplement to be able to call it for saveAsDraft by calling |
| 648 | 648 | * $this->send(new Horde_Mail_Transport_Null()), |
| 649 | 649 | * if no base-part is set, because send is not called before. |
| 650 | 650 | * |
| 651 | - * @param boolean $stream If true, return a stream resource, otherwise |
|
| 652 | - * @return stream|string The raw email data. |
|
| 653 | - */ |
|
| 651 | + * @param boolean $stream If true, return a stream resource, otherwise |
|
| 652 | + * @return stream|string The raw email data. |
|
| 653 | + */ |
|
| 654 | 654 | function getRaw($stream=true) |
| 655 | 655 | { |
| 656 | 656 | try { |
@@ -663,20 +663,20 @@ discard block |
||
| 663 | 663 | } |
| 664 | 664 | // code copied from Horde_Mime_Mail::getRaw(), as there is no way to inject charset in |
| 665 | 665 | // _headers->toString(), which is required to encode headers containing non-ascii chars correct |
| 666 | - if ($stream) { |
|
| 667 | - $hdr = new Horde_Stream(); |
|
| 668 | - $hdr->add($this->_headers->toString(array('charset' => 'utf-8', 'canonical' => true)), true); |
|
| 669 | - return Horde_Stream_Wrapper_Combine::getStream( |
|
| 670 | - array($hdr->stream, |
|
| 671 | - $this->getBasePart()->toString( |
|
| 672 | - array('stream' => true, 'canonical' => true, 'encode' => Horde_Mime_Part::ENCODE_7BIT | Horde_Mime_Part::ENCODE_8BIT | Horde_Mime_Part::ENCODE_BINARY)) |
|
| 673 | - ) |
|
| 674 | - ); |
|
| 675 | - } |
|
| 676 | - |
|
| 677 | - return $this->_headers->toString(array('charset' => 'utf-8', 'canonical' => true)) . |
|
| 666 | + if ($stream) { |
|
| 667 | + $hdr = new Horde_Stream(); |
|
| 668 | + $hdr->add($this->_headers->toString(array('charset' => 'utf-8', 'canonical' => true)), true); |
|
| 669 | + return Horde_Stream_Wrapper_Combine::getStream( |
|
| 670 | + array($hdr->stream, |
|
| 671 | + $this->getBasePart()->toString( |
|
| 672 | + array('stream' => true, 'canonical' => true, 'encode' => Horde_Mime_Part::ENCODE_7BIT | Horde_Mime_Part::ENCODE_8BIT | Horde_Mime_Part::ENCODE_BINARY)) |
|
| 673 | + ) |
|
| 674 | + ); |
|
| 675 | + } |
|
| 676 | + |
|
| 677 | + return $this->_headers->toString(array('charset' => 'utf-8', 'canonical' => true)) . |
|
| 678 | 678 | $this->getBasePart()->toString(array('canonical' => true)); |
| 679 | - } |
|
| 679 | + } |
|
| 680 | 680 | |
| 681 | 681 | /** |
| 682 | 682 | * Convert charset of text-parts of message to utf-8 |
@@ -66,7 +66,7 @@ discard block |
||
| 66 | 66 | * @param int|Mail\Account|boolean $account =null mail account to use, default use Mail\Account::get_default($smtp=true) |
| 67 | 67 | * false: no NOT initialise account and set other EGroupware specific headers, used to parse mails (not sending them!) |
| 68 | 68 | */ |
| 69 | - function __construct($account=null) |
|
| 69 | + function __construct($account = null) |
|
| 70 | 70 | { |
| 71 | 71 | // Horde use locale for translation of error messages |
| 72 | 72 | Preferences::setlocale(LC_MESSAGES); |
@@ -105,7 +105,7 @@ discard block |
||
| 105 | 105 | * @param int|Mail\Account $account =null mail account to use, default use Mail\Account::get_default($smtp=true) |
| 106 | 106 | * @throws Exception\NotFound if account was not found (or not valid for current user) |
| 107 | 107 | */ |
| 108 | - function setAccount($account=null) |
|
| 108 | + function setAccount($account = null) |
|
| 109 | 109 | { |
| 110 | 110 | if (is_a($account, 'Mail\Account')) |
| 111 | 111 | { |
@@ -127,7 +127,7 @@ discard block |
||
| 127 | 127 | { |
| 128 | 128 | $identity = Mail\Account::read_identity($this->account->ident_id, true, null, $this->account); |
| 129 | 129 | } |
| 130 | - catch(Exception $e) |
|
| 130 | + catch (Exception $e) |
|
| 131 | 131 | { |
| 132 | 132 | unset($e); |
| 133 | 133 | error_log(__METHOD__.__LINE__.' Could not read_identity for account:'.$account['acc_id'].' with IdentID:'.$account['ident_id']); |
@@ -149,7 +149,7 @@ discard block |
||
| 149 | 149 | * @param string $address |
| 150 | 150 | * @param string $personal ='' |
| 151 | 151 | */ |
| 152 | - public function setFrom($address, $personal='') |
|
| 152 | + public function setFrom($address, $personal = '') |
|
| 153 | 153 | { |
| 154 | 154 | $this->addHeader('From', self::add_personal($address, $personal)); |
| 155 | 155 | } |
@@ -161,13 +161,13 @@ discard block |
||
| 161 | 161 | * @param string $personal ='' only used if $address is a string |
| 162 | 162 | * @param string $type ='to' type of address to add "to", "cc", "bcc" or "replyto" |
| 163 | 163 | */ |
| 164 | - function addAddress($address, $personal='', $type='to') |
|
| 164 | + function addAddress($address, $personal = '', $type = 'to') |
|
| 165 | 165 | { |
| 166 | 166 | if (!isset(self::$type2header[$type])) |
| 167 | 167 | { |
| 168 | 168 | throw new Exception\WrongParameter("Unknown type '$type'!"); |
| 169 | 169 | } |
| 170 | - if ($personal) $address = self::add_personal ($address, $personal); |
|
| 170 | + if ($personal) $address = self::add_personal($address, $personal); |
|
| 171 | 171 | |
| 172 | 172 | // add to our local list |
| 173 | 173 | $this->$type->add($address); |
@@ -181,7 +181,7 @@ discard block |
||
| 181 | 181 | * |
| 182 | 182 | * @param string $type ='to' type of address to add "to", "cc", "bcc" or "replyto" |
| 183 | 183 | */ |
| 184 | - function clearAddresses($type='to') |
|
| 184 | + function clearAddresses($type = 'to') |
|
| 185 | 185 | { |
| 186 | 186 | $this->$type = new Horde_Mail_Rfc822_List(); |
| 187 | 187 | |
@@ -195,12 +195,12 @@ discard block |
||
| 195 | 195 | * @param boolean $return_array =false true: return array of string, false: Horde_Mail_Rfc822_List |
| 196 | 196 | * @return array|Horde_Mail_Rfc822_List supporting arrayAccess and Iterable |
| 197 | 197 | */ |
| 198 | - function getAddresses($type='to', $return_array=false) |
|
| 198 | + function getAddresses($type = 'to', $return_array = false) |
|
| 199 | 199 | { |
| 200 | 200 | if ($return_array) |
| 201 | 201 | { |
| 202 | 202 | $addresses = array(); |
| 203 | - foreach($this->$type as $addr) |
|
| 203 | + foreach ($this->$type as $addr) |
|
| 204 | 204 | { |
| 205 | 205 | $addresses[] = (string)$addr; |
| 206 | 206 | } |
@@ -241,7 +241,7 @@ discard block |
||
| 241 | 241 | //if (!preg_match('/^[!#$%&\'*+/0-9=?A-Z^_`a-z{|}~-]+$/u', $personal)) // that's how I read the rfc(2)822 |
| 242 | 242 | if ($personal && !preg_match('/^[0-9A-Z -]*$/iu', $personal)) // but quoting is never wrong, so quote more then necessary |
| 243 | 243 | { |
| 244 | - $personal = '"'.str_replace(array('\\', '"'),array('\\\\', '\\"'), $personal).'"'; |
|
| 244 | + $personal = '"'.str_replace(array('\\', '"'), array('\\\\', '\\"'), $personal).'"'; |
|
| 245 | 245 | } |
| 246 | 246 | $address = ($personal ? $personal.' <' : '').$address.($personal ? '>' : ''); |
| 247 | 247 | } |
@@ -254,7 +254,7 @@ discard block |
||
| 254 | 254 | * @param string|array|Horde_Mail_Rfc822_List $address |
| 255 | 255 | * @param string $personal ='' only used if $address is a string |
| 256 | 256 | */ |
| 257 | - function addCc($address, $personal=null) |
|
| 257 | + function addCc($address, $personal = null) |
|
| 258 | 258 | { |
| 259 | 259 | $this->addAddress($address, $personal, 'cc'); |
| 260 | 260 | } |
@@ -273,7 +273,7 @@ discard block |
||
| 273 | 273 | * @param string|array|Horde_Mail_Rfc822_List $address |
| 274 | 274 | * @param string $personal ='' only used if $address is a string |
| 275 | 275 | */ |
| 276 | - function addBcc($address, $personal=null) |
|
| 276 | + function addBcc($address, $personal = null) |
|
| 277 | 277 | { |
| 278 | 278 | $this->addAddress($address, $personal, 'bcc'); |
| 279 | 279 | } |
@@ -292,7 +292,7 @@ discard block |
||
| 292 | 292 | * @param string|array|Horde_Mail_Rfc822_List $address |
| 293 | 293 | * @param string $personal ='' only used if $address is a string |
| 294 | 294 | */ |
| 295 | - function addReplyTo($address, $personal=null) |
|
| 295 | + function addReplyTo($address, $personal = null) |
|
| 296 | 296 | { |
| 297 | 297 | $this->addAddress($address, $personal, 'replyto'); |
| 298 | 298 | } |
@@ -327,7 +327,7 @@ discard block |
||
| 327 | 327 | * @return integer part-number |
| 328 | 328 | * @throws Exception\NotFound if $file could not be opened for reading |
| 329 | 329 | */ |
| 330 | - public function addAttachment($data, $name = null, $type = null, $old_type=null) |
|
| 330 | + public function addAttachment($data, $name = null, $type = null, $old_type = null) |
|
| 331 | 331 | { |
| 332 | 332 | // deprecated PHPMailer::AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') call |
| 333 | 333 | if ($type === 'base64') |
@@ -360,7 +360,7 @@ discard block |
||
| 360 | 360 | // set content-type parameters, which get ignored by setType |
| 361 | 361 | if (preg_match_all('/;\s*([^=]+)=([^;]*)/', $type, $matches)) |
| 362 | 362 | { |
| 363 | - foreach($matches[1] as $n => $label) |
|
| 363 | + foreach ($matches[1] as $n => $label) |
|
| 364 | 364 | { |
| 365 | 365 | $part->setContentTypeParameter($label, $matches[2][$n]); |
| 366 | 366 | } |
@@ -462,11 +462,11 @@ discard block |
||
| 462 | 462 | * @param array $parameters =array() eg. array('method' => 'REQUEST') |
| 463 | 463 | * @param string $charset =null default to $this->_charset="utf-8" |
| 464 | 464 | */ |
| 465 | - function setAlternativBody($content, $type, $parameters=array(), $charset=null) |
|
| 465 | + function setAlternativBody($content, $type, $parameters = array(), $charset = null) |
|
| 466 | 466 | { |
| 467 | 467 | $this->_alternativBody = new Horde_Mime_Part(); |
| 468 | 468 | $this->_alternativBody->setType($type); |
| 469 | - foreach($parameters as $label => $data) |
|
| 469 | + foreach ($parameters as $label => $data) |
|
| 470 | 470 | { |
| 471 | 471 | $this->_alternativBody->setContentTypeParameter($label, $data); |
| 472 | 472 | } |
@@ -491,9 +491,9 @@ discard block |
||
| 491 | 491 | * @throws Exception\NotFound for no smtp account available |
| 492 | 492 | * @throws Horde_Mime_Exception |
| 493 | 493 | */ |
| 494 | - function send(Horde_Mail_Transport $transport=null, $resend=true, $flowed=null) |
|
| 494 | + function send(Horde_Mail_Transport $transport = null, $resend = true, $flowed = null) |
|
| 495 | 495 | { |
| 496 | - unset($resend); // parameter is not used, but required by function signature |
|
| 496 | + unset($resend); // parameter is not used, but required by function signature |
|
| 497 | 497 | |
| 498 | 498 | if (!($message_id = $this->getHeader('Message-ID')) && |
| 499 | 499 | class_exists('Horde_Mime_Headers_MessageId')) // since 2.5.0 |
@@ -501,24 +501,24 @@ discard block |
||
| 501 | 501 | $message_id = Horde_Mime_Headers_MessageId::create('EGroupware'); |
| 502 | 502 | $this->addHeader('Message-ID', $message_id); |
| 503 | 503 | } |
| 504 | - $body_sha1 = null; // skip sha1, it requires whole mail in memory, which we traing to avoid now |
|
| 504 | + $body_sha1 = null; // skip sha1, it requires whole mail in memory, which we traing to avoid now |
|
| 505 | 505 | |
| 506 | 506 | $mail_id = Hooks::process(array( |
| 507 | 507 | 'location' => 'send_mail', |
| 508 | - 'subject' => $subject=$this->getHeader('Subject'), |
|
| 508 | + 'subject' => $subject = $this->getHeader('Subject'), |
|
| 509 | 509 | 'from' => $this->getHeader('Return-Path') ? $this->getHeader('Return-Path') : $this->getHeader('From'), |
| 510 | - 'to' => $to=$this->getAddresses('to', true), |
|
| 511 | - 'cc' => $cc=$this->getAddresses('cc', true), |
|
| 512 | - 'bcc' => $bcc=$this->getAddresses('bcc', true), |
|
| 510 | + 'to' => $to = $this->getAddresses('to', true), |
|
| 511 | + 'cc' => $cc = $this->getAddresses('cc', true), |
|
| 512 | + 'bcc' => $bcc = $this->getAddresses('bcc', true), |
|
| 513 | 513 | 'body_sha1' => $body_sha1, |
| 514 | 514 | 'message_id' => (string)$message_id, |
| 515 | - ), array(), true); // true = call all apps |
|
| 515 | + ), array(), true); // true = call all apps |
|
| 516 | 516 | |
| 517 | 517 | // check if we are sending an html mail with inline images |
| 518 | 518 | if (!empty($this->_htmlBody) && count($this->_parts)) |
| 519 | 519 | { |
| 520 | 520 | $related = null; |
| 521 | - foreach($this->_parts as $n => $part) |
|
| 521 | + foreach ($this->_parts as $n => $part) |
|
| 522 | 522 | { |
| 523 | 523 | if ($part->getDisposition() == 'inline' && $part->getContentId()) |
| 524 | 524 | { |
@@ -574,7 +574,7 @@ discard block |
||
| 574 | 574 | $this->_body = $body; |
| 575 | 575 | $flowed = false; |
| 576 | 576 | } |
| 577 | - parent::send($transport ? $transport : $this->account->smtpTransport(), true, $flowed); // true: keep Message-ID |
|
| 577 | + parent::send($transport ? $transport : $this->account->smtpTransport(), true, $flowed); // true: keep Message-ID |
|
| 578 | 578 | } |
| 579 | 579 | catch (\Exception $e) { |
| 580 | 580 | // in case of errors/exceptions call hook again with previous returned mail_id and error-message to log |
@@ -589,7 +589,7 @@ discard block |
||
| 589 | 589 | 'message_id' => (string)$message_id, |
| 590 | 590 | 'mail_id' => $mail_id, |
| 591 | 591 | 'error' => $e->getMessage(), |
| 592 | - ), array(), true); // true = call all apps |
|
| 592 | + ), array(), true); // true = call all apps |
|
| 593 | 593 | } |
| 594 | 594 | |
| 595 | 595 | // log mails to file specified in $GLOBALS['egw_info']['server']['log_mail'] or error_log for true |
@@ -602,7 +602,7 @@ discard block |
||
| 602 | 602 | $msg .= ' from instance '.$GLOBALS['egw_info']['user']['domain'].' and IP '.Session::getuser_ip(); |
| 603 | 603 | $msg .= ' from user #'.$GLOBALS['egw_info']['user']['account_id']; |
| 604 | 604 | |
| 605 | - if ($GLOBALS['egw_info']['user']['account_id'] && class_exists(__NAMESPACE__.'\\Accounts',false)) |
|
| 605 | + if ($GLOBALS['egw_info']['user']['account_id'] && class_exists(__NAMESPACE__.'\\Accounts', false)) |
|
| 606 | 606 | { |
| 607 | 607 | $msg .= ' ('.Accounts::username($GLOBALS['egw_info']['user']['account_id']).')'; |
| 608 | 608 | } |
@@ -614,7 +614,7 @@ discard block |
||
| 614 | 614 | $msg .= ' cc='.implode(', ', $cc).', bcc='.implode(', ', $bcc); |
| 615 | 615 | if ($GLOBALS['egw_info']['server']['log_mail'] !== true) $msg .= "\n\n"; |
| 616 | 616 | |
| 617 | - error_log($msg,$GLOBALS['egw_info']['server']['log_mail'] === true ? 0 : 3, |
|
| 617 | + error_log($msg, $GLOBALS['egw_info']['server']['log_mail'] === true ? 0 : 3, |
|
| 618 | 618 | $GLOBALS['egw_info']['server']['log_mail']); |
| 619 | 619 | } |
| 620 | 620 | // rethrow error |
@@ -651,15 +651,15 @@ discard block |
||
| 651 | 651 | * @param boolean $stream If true, return a stream resource, otherwise |
| 652 | 652 | * @return stream|string The raw email data. |
| 653 | 653 | */ |
| 654 | - function getRaw($stream=true) |
|
| 654 | + function getRaw($stream = true) |
|
| 655 | 655 | { |
| 656 | 656 | try { |
| 657 | 657 | $this->getBasePart(); |
| 658 | 658 | } |
| 659 | - catch(Horde_Mail_Exception $e) |
|
| 659 | + catch (Horde_Mail_Exception $e) |
|
| 660 | 660 | { |
| 661 | 661 | unset($e); |
| 662 | - parent::send(new Horde_Mail_Transport_Null(), true); // true: keep Message-ID |
|
| 662 | + parent::send(new Horde_Mail_Transport_Null(), true); // true: keep Message-ID |
|
| 663 | 663 | } |
| 664 | 664 | // code copied from Horde_Mime_Mail::getRaw(), as there is no way to inject charset in |
| 665 | 665 | // _headers->toString(), which is required to encode headers containing non-ascii chars correct |
@@ -669,12 +669,12 @@ discard block |
||
| 669 | 669 | return Horde_Stream_Wrapper_Combine::getStream( |
| 670 | 670 | array($hdr->stream, |
| 671 | 671 | $this->getBasePart()->toString( |
| 672 | - array('stream' => true, 'canonical' => true, 'encode' => Horde_Mime_Part::ENCODE_7BIT | Horde_Mime_Part::ENCODE_8BIT | Horde_Mime_Part::ENCODE_BINARY)) |
|
| 672 | + array('stream' => true, 'canonical' => true, 'encode' => Horde_Mime_Part::ENCODE_7BIT|Horde_Mime_Part::ENCODE_8BIT|Horde_Mime_Part::ENCODE_BINARY)) |
|
| 673 | 673 | ) |
| 674 | 674 | ); |
| 675 | 675 | } |
| 676 | 676 | |
| 677 | - return $this->_headers->toString(array('charset' => 'utf-8', 'canonical' => true)) . |
|
| 677 | + return $this->_headers->toString(array('charset' => 'utf-8', 'canonical' => true)). |
|
| 678 | 678 | $this->getBasePart()->toString(array('canonical' => true)); |
| 679 | 679 | } |
| 680 | 680 | |
@@ -687,23 +687,23 @@ discard block |
||
| 687 | 687 | * @param boolean &$converted =false on return if conversation was necessary |
| 688 | 688 | * @return string|stream |
| 689 | 689 | */ |
| 690 | - static function convert($message, $stream=false, $charset='utf-8', &$converted=false) |
|
| 690 | + static function convert($message, $stream = false, $charset = 'utf-8', &$converted = false) |
|
| 691 | 691 | { |
| 692 | - $mailer = new Mailer(false); // false = no default headers and mail account |
|
| 692 | + $mailer = new Mailer(false); // false = no default headers and mail account |
|
| 693 | 693 | $mailer->addHeaders(Horde_Mime_Headers::parseHeaders($message)); |
| 694 | 694 | $base = Horde_Mime_Part::parseMessage($message); |
| 695 | - foreach($base->partIterator() as $part) |
|
| 695 | + foreach ($base->partIterator() as $part) |
|
| 696 | 696 | { |
| 697 | - if ($part->getPrimaryType()== 'text') |
|
| 697 | + if ($part->getPrimaryType() == 'text') |
|
| 698 | 698 | { |
| 699 | 699 | $charset = $part->getContentTypeParameter('charset'); |
| 700 | 700 | if ($charset && $charset != 'utf-8') |
| 701 | 701 | { |
| 702 | 702 | $content = Translation::convert($part->toString(array( |
| 703 | - 'encode' => Horde_Mime_Part::ENCODE_BINARY, // otherwise we cant recode charset |
|
| 703 | + 'encode' => Horde_Mime_Part::ENCODE_BINARY, // otherwise we cant recode charset |
|
| 704 | 704 | )), $charset, 'utf-8'); |
| 705 | 705 | $part->setContents($content, array( |
| 706 | - 'encode' => Horde_Mime_Part::ENCODE_BINARY, // $content is NOT encoded |
|
| 706 | + 'encode' => Horde_Mime_Part::ENCODE_BINARY, // $content is NOT encoded |
|
| 707 | 707 | )); |
| 708 | 708 | $part->setContentTypeParameter('charset', 'utf-8'); |
| 709 | 709 | if ($part === $base) |
@@ -736,7 +736,7 @@ discard block |
||
| 736 | 736 | * @param string $subtype =null |
| 737 | 737 | * @return Horde_Mime_Part part with body or null |
| 738 | 738 | */ |
| 739 | - function findBody($subtype=null) |
|
| 739 | + function findBody($subtype = null) |
|
| 740 | 740 | { |
| 741 | 741 | try { |
| 742 | 742 | $base = $this->getBasePart(); |
@@ -768,11 +768,11 @@ discard block |
||
| 768 | 768 | $this->_body = $this->_htmlBody = $this->_alternativBody = null; |
| 769 | 769 | $this->clearParts(); |
| 770 | 770 | |
| 771 | - foreach($base->partIterator() as $part) |
|
| 771 | + foreach ($base->partIterator() as $part) |
|
| 772 | 772 | { |
| 773 | 773 | $id = $part->getMimeId(); |
| 774 | 774 | //error_log(__METHOD__."() plain=$plain_id, html=$html_id: $id: ".$part->getType()); |
| 775 | - switch($id) |
|
| 775 | + switch ($id) |
|
| 776 | 776 | { |
| 777 | 777 | case '0': // base-part itself |
| 778 | 778 | continue 2; |
@@ -816,11 +816,11 @@ discard block |
||
| 816 | 816 | $this->_body = $this->_htmlBody = $this->_alternativBody = null; |
| 817 | 817 | $this->clearParts(); |
| 818 | 818 | |
| 819 | - foreach($base->partIterator() as $part) |
|
| 819 | + foreach ($base->partIterator() as $part) |
|
| 820 | 820 | { |
| 821 | 821 | $id = $part->getMimeId(); |
| 822 | 822 | //error_log(__METHOD__."() plain=$plain_id, html=$html_id: $id: ".$part->getType()); |
| 823 | - switch($id) |
|
| 823 | + switch ($id) |
|
| 824 | 824 | { |
| 825 | 825 | case '0': // base-part itself |
| 826 | 826 | continue 2; |
@@ -892,7 +892,7 @@ discard block |
||
| 892 | 892 | */ |
| 893 | 893 | function clearCustomHeaders() |
| 894 | 894 | { |
| 895 | - foreach($this->_headers->toArray() as $header => $value) |
|
| 895 | + foreach ($this->_headers->toArray() as $header => $value) |
|
| 896 | 896 | { |
| 897 | 897 | if (stripos($header, 'x-') === 0 || $header == 'Received') |
| 898 | 898 | { |
@@ -117,10 +117,13 @@ discard block |
||
| 117 | 117 | } |
| 118 | 118 | else |
| 119 | 119 | { |
| 120 | - if (!($this->account = Mail\Account::get_default(true))) // true = need an SMTP (not just IMAP) account |
|
| 120 | + if (!($this->account = Mail\Account::get_default(true))) |
|
| 121 | + { |
|
| 122 | + // true = need an SMTP (not just IMAP) account |
|
| 121 | 123 | { |
| 122 | 124 | throw new Exception\NotFound('SMTP: '.lang('Account not found!')); |
| 123 | 125 | } |
| 126 | + } |
|
| 124 | 127 | } |
| 125 | 128 | |
| 126 | 129 | try |
@@ -167,7 +170,10 @@ discard block |
||
| 167 | 170 | { |
| 168 | 171 | throw new Exception\WrongParameter("Unknown type '$type'!"); |
| 169 | 172 | } |
| 170 | - if ($personal) $address = self::add_personal ($address, $personal); |
|
| 173 | + if ($personal) |
|
| 174 | + { |
|
| 175 | + $address = self::add_personal ($address, $personal); |
|
| 176 | + } |
|
| 171 | 177 | |
| 172 | 178 | // add to our local list |
| 173 | 179 | $this->$type->add($address); |
@@ -239,10 +245,13 @@ discard block |
||
| 239 | 245 | if (is_string($address) && !empty($personal)) |
| 240 | 246 | { |
| 241 | 247 | //if (!preg_match('/^[!#$%&\'*+/0-9=?A-Z^_`a-z{|}~-]+$/u', $personal)) // that's how I read the rfc(2)822 |
| 242 | - if ($personal && !preg_match('/^[0-9A-Z -]*$/iu', $personal)) // but quoting is never wrong, so quote more then necessary |
|
| 248 | + if ($personal && !preg_match('/^[0-9A-Z -]*$/iu', $personal)) |
|
| 249 | + { |
|
| 250 | + // but quoting is never wrong, so quote more then necessary |
|
| 243 | 251 | { |
| 244 | 252 | $personal = '"'.str_replace(array('\\', '"'),array('\\\\', '\\"'), $personal).'"'; |
| 245 | 253 | } |
| 254 | + } |
|
| 246 | 255 | $address = ($personal ? $personal.' <' : '').$address.($personal ? '>' : ''); |
| 247 | 256 | } |
| 248 | 257 | return $address; |
@@ -345,7 +354,10 @@ discard block |
||
| 345 | 354 | throw new Exception\NotFound("File '$data' not found!"); |
| 346 | 355 | } |
| 347 | 356 | |
| 348 | - if (empty($type) && !is_resource($data)) $type = Vfs::mime_content_type($data); |
|
| 357 | + if (empty($type) && !is_resource($data)) |
|
| 358 | + { |
|
| 359 | + $type = Vfs::mime_content_type($data); |
|
| 360 | + } |
|
| 349 | 361 | |
| 350 | 362 | // set "text/calendar; method=*" as alternativ body |
| 351 | 363 | $matches = null; |
@@ -368,11 +380,17 @@ discard block |
||
| 368 | 380 | $part->setContents($resource); |
| 369 | 381 | |
| 370 | 382 | // setting name, also sets content-disposition attachment (!), therefore we have to do it after "text/calendar; method=" handling |
| 371 | - if ($name || !is_resource($data)) $part->setName($name ? $name : Vfs::basename($data)); |
|
| 383 | + if ($name || !is_resource($data)) |
|
| 384 | + { |
|
| 385 | + $part->setName($name ? $name : Vfs::basename($data)); |
|
| 386 | + } |
|
| 372 | 387 | |
| 373 | 388 | // this should not be necessary, because binary data get detected by mime-type, |
| 374 | 389 | // but at least Cyrus complains about NUL characters |
| 375 | - if (substr($type, 0, 5) != 'text/') $part->setTransferEncoding('base64', array('send' => true)); |
|
| 390 | + if (substr($type, 0, 5) != 'text/') |
|
| 391 | + { |
|
| 392 | + $part->setTransferEncoding('base64', array('send' => true)); |
|
| 393 | + } |
|
| 376 | 394 | $part->setDisposition('attachment'); |
| 377 | 395 | |
| 378 | 396 | return $this->addMimePart($part); |
@@ -496,9 +514,12 @@ discard block |
||
| 496 | 514 | unset($resend); // parameter is not used, but required by function signature |
| 497 | 515 | |
| 498 | 516 | if (!($message_id = $this->getHeader('Message-ID')) && |
| 499 | - class_exists('Horde_Mime_Headers_MessageId')) // since 2.5.0 |
|
| 517 | + class_exists('Horde_Mime_Headers_MessageId')) |
|
| 518 | + { |
|
| 519 | + // since 2.5.0 |
|
| 500 | 520 | { |
| 501 | 521 | $message_id = Horde_Mime_Headers_MessageId::create('EGroupware'); |
| 522 | + } |
|
| 502 | 523 | $this->addHeader('Message-ID', $message_id); |
| 503 | 524 | } |
| 504 | 525 | $body_sha1 = null; // skip sha1, it requires whole mail in memory, which we traing to avoid now |
@@ -538,7 +559,10 @@ discard block |
||
| 538 | 559 | |
| 539 | 560 | try { |
| 540 | 561 | // no flowed for encrypted messages |
| 541 | - if (!isset($flowed)) $flowed = $this->_body && $this->_body->getType() != 'multipart/encrypted'; |
|
| 562 | + if (!isset($flowed)) |
|
| 563 | + { |
|
| 564 | + $flowed = $this->_body && $this->_body->getType() != 'multipart/encrypted'; |
|
| 565 | + } |
|
| 542 | 566 | |
| 543 | 567 | // check if flowed is disabled in mail site configuration |
| 544 | 568 | if (($config = Config::read('mail')) && $config['disable_rfc3676_flowed']) |
@@ -612,13 +636,19 @@ discard block |
||
| 612 | 636 | $msg .= 'ERROR '.$e->getMessage(); |
| 613 | 637 | } |
| 614 | 638 | $msg .= ' cc='.implode(', ', $cc).', bcc='.implode(', ', $bcc); |
| 615 | - if ($GLOBALS['egw_info']['server']['log_mail'] !== true) $msg .= "\n\n"; |
|
| 639 | + if ($GLOBALS['egw_info']['server']['log_mail'] !== true) |
|
| 640 | + { |
|
| 641 | + $msg .= "\n\n"; |
|
| 642 | + } |
|
| 616 | 643 | |
| 617 | 644 | error_log($msg,$GLOBALS['egw_info']['server']['log_mail'] === true ? 0 : 3, |
| 618 | 645 | $GLOBALS['egw_info']['server']['log_mail']); |
| 619 | 646 | } |
| 620 | 647 | // rethrow error |
| 621 | - if (isset($e)) throw $e; |
|
| 648 | + if (isset($e)) |
|
| 649 | + { |
|
| 650 | + throw $e; |
|
| 651 | + } |
|
| 622 | 652 | } |
| 623 | 653 | |
| 624 | 654 | |
@@ -663,7 +693,8 @@ discard block |
||
| 663 | 693 | } |
| 664 | 694 | // code copied from Horde_Mime_Mail::getRaw(), as there is no way to inject charset in |
| 665 | 695 | // _headers->toString(), which is required to encode headers containing non-ascii chars correct |
| 666 | - if ($stream) { |
|
| 696 | + if ($stream) |
|
| 697 | + { |
|
| 667 | 698 | $hdr = new Horde_Stream(); |
| 668 | 699 | $hdr->add($this->_headers->toString(array('charset' => 'utf-8', 'canonical' => true)), true); |
| 669 | 700 | return Horde_Stream_Wrapper_Combine::getStream( |
@@ -740,7 +771,10 @@ discard block |
||
| 740 | 771 | { |
| 741 | 772 | try { |
| 742 | 773 | $base = $this->getBasePart(); |
| 743 | - if (!($part_id = $base->findBody($subtype))) return null; |
|
| 774 | + if (!($part_id = $base->findBody($subtype))) |
|
| 775 | + { |
|
| 776 | + return null; |
|
| 777 | + } |
|
| 744 | 778 | return $base->getPart($part_id); |
| 745 | 779 | } |
| 746 | 780 | catch (Exception $e) { |
@@ -854,7 +888,10 @@ discard block |
||
| 854 | 888 | */ |
| 855 | 889 | public function addMimePart($part) |
| 856 | 890 | { |
| 857 | - if ($this->_base) $this->parseBasePart(); |
|
| 891 | + if ($this->_base) |
|
| 892 | + { |
|
| 893 | + $this->parseBasePart(); |
|
| 894 | + } |
|
| 858 | 895 | |
| 859 | 896 | return parent::addMimePart($part); |
| 860 | 897 | } |
@@ -311,6 +311,7 @@ discard block |
||
| 311 | 311 | * Encrypt the variables in the session |
| 312 | 312 | * |
| 313 | 313 | * Is called by self::__destruct(). |
| 314 | + * @param string $kp3 |
|
| 314 | 315 | */ |
| 315 | 316 | static function encrypt($kp3) |
| 316 | 317 | { |
@@ -439,7 +440,7 @@ discard block |
||
| 439 | 440 | * @param boolean $no_session =false dont create a real session, eg. for GroupDAV clients using only basic auth, no cookie support |
| 440 | 441 | * @param boolean $auth_check =true if false, the user is loged in without checking his password (eg. for single sign on), default = true |
| 441 | 442 | * @param boolean $fail_on_forced_password_change =false true: do NOT create session, if password change requested |
| 442 | - * @return string|boolean session id or false if session was not created, $this->(cd_)reason contains cause |
|
| 443 | + * @return false|string session id or false if session was not created, $this->(cd_)reason contains cause |
|
| 443 | 444 | */ |
| 444 | 445 | function create($login,$passwd = '',$passwd_type = '',$no_session=false,$auth_check=true,$fail_on_forced_password_change=false) |
| 445 | 446 | { |
@@ -1021,7 +1022,7 @@ discard block |
||
| 1021 | 1022 | /** |
| 1022 | 1023 | * Terminate a session |
| 1023 | 1024 | * |
| 1024 | - * @param int|string $sessionid nummeric or php session id of session to be terminated |
|
| 1025 | + * @param string $sessionid nummeric or php session id of session to be terminated |
|
| 1025 | 1026 | * @param string $kp3 |
| 1026 | 1027 | * @return boolean true on success, false on error |
| 1027 | 1028 | */ |
@@ -80,60 +80,60 @@ discard block |
||
| 80 | 80 | const MCRYPT_MODE = MCRYPT_MODE_ECB; |
| 81 | 81 | |
| 82 | 82 | /** |
| 83 | - * current user login (account_lid@domain) |
|
| 84 | - * |
|
| 85 | - * @var string |
|
| 86 | - */ |
|
| 83 | + * current user login (account_lid@domain) |
|
| 84 | + * |
|
| 85 | + * @var string |
|
| 86 | + */ |
|
| 87 | 87 | var $login; |
| 88 | 88 | |
| 89 | 89 | /** |
| 90 | - * current user password |
|
| 91 | - * |
|
| 92 | - * @var string |
|
| 93 | - */ |
|
| 90 | + * current user password |
|
| 91 | + * |
|
| 92 | + * @var string |
|
| 93 | + */ |
|
| 94 | 94 | var $passwd; |
| 95 | 95 | |
| 96 | 96 | /** |
| 97 | - * current user db/ldap account id |
|
| 98 | - * |
|
| 99 | - * @var int |
|
| 100 | - */ |
|
| 97 | + * current user db/ldap account id |
|
| 98 | + * |
|
| 99 | + * @var int |
|
| 100 | + */ |
|
| 101 | 101 | var $account_id; |
| 102 | 102 | |
| 103 | 103 | /** |
| 104 | - * current user account login id (without the eGW-domain/-instance part |
|
| 105 | - * |
|
| 106 | - * @var string |
|
| 107 | - */ |
|
| 104 | + * current user account login id (without the eGW-domain/-instance part |
|
| 105 | + * |
|
| 106 | + * @var string |
|
| 107 | + */ |
|
| 108 | 108 | var $account_lid; |
| 109 | 109 | |
| 110 | 110 | /** |
| 111 | - * domain for current user |
|
| 112 | - * |
|
| 113 | - * @var string |
|
| 114 | - */ |
|
| 111 | + * domain for current user |
|
| 112 | + * |
|
| 113 | + * @var string |
|
| 114 | + */ |
|
| 115 | 115 | var $account_domain; |
| 116 | 116 | |
| 117 | 117 | /** |
| 118 | - * type flag, A - anonymous session, N - None, normal session |
|
| 119 | - * |
|
| 120 | - * @var string |
|
| 121 | - */ |
|
| 118 | + * type flag, A - anonymous session, N - None, normal session |
|
| 119 | + * |
|
| 120 | + * @var string |
|
| 121 | + */ |
|
| 122 | 122 | var $session_flags; |
| 123 | 123 | |
| 124 | 124 | /** |
| 125 | - * current user session id |
|
| 126 | - * |
|
| 127 | - * @var string |
|
| 128 | - */ |
|
| 125 | + * current user session id |
|
| 126 | + * |
|
| 127 | + * @var string |
|
| 128 | + */ |
|
| 129 | 129 | var $sessionid; |
| 130 | 130 | |
| 131 | 131 | /** |
| 132 | - * an other session specific id (md5 from a random string), |
|
| 133 | - * used together with the sessionid for xmlrpc basic auth and the encryption of session-data (if that's enabled) |
|
| 134 | - * |
|
| 135 | - * @var string |
|
| 136 | - */ |
|
| 132 | + * an other session specific id (md5 from a random string), |
|
| 133 | + * used together with the sessionid for xmlrpc basic auth and the encryption of session-data (if that's enabled) |
|
| 134 | + * |
|
| 135 | + * @var string |
|
| 136 | + */ |
|
| 137 | 137 | var $kp3; |
| 138 | 138 | |
| 139 | 139 | /** |
@@ -144,17 +144,17 @@ discard block |
||
| 144 | 144 | var $sessionid_access_log; |
| 145 | 145 | |
| 146 | 146 | /** |
| 147 | - * name of XML-RPC/SOAP method called |
|
| 148 | - * |
|
| 149 | - * @var string |
|
| 150 | - */ |
|
| 147 | + * name of XML-RPC/SOAP method called |
|
| 148 | + * |
|
| 149 | + * @var string |
|
| 150 | + */ |
|
| 151 | 151 | var $xmlrpc_method_called; |
| 152 | 152 | |
| 153 | 153 | /** |
| 154 | - * Array with the name of the system domains |
|
| 155 | - * |
|
| 156 | - * @var array |
|
| 157 | - */ |
|
| 154 | + * Array with the name of the system domains |
|
| 155 | + * |
|
| 156 | + * @var array |
|
| 157 | + */ |
|
| 158 | 158 | private $egw_domains; |
| 159 | 159 | |
| 160 | 160 | /** |
@@ -248,9 +248,9 @@ discard block |
||
| 248 | 248 | |
| 249 | 249 | // set session_timeout from global php.ini and default to 14400=4h, if not set |
| 250 | 250 | if (!($GLOBALS['egw_info']['server']['sessions_timeout'] = ini_get('session.gc_maxlifetime'))) |
| 251 | - { |
|
| 252 | - ini_set('session.gc_maxlifetime', $GLOBALS['egw_info']['server']['sessions_timeout']=14400); |
|
| 253 | - } |
|
| 251 | + { |
|
| 252 | + ini_set('session.gc_maxlifetime', $GLOBALS['egw_info']['server']['sessions_timeout']=14400); |
|
| 253 | + } |
|
| 254 | 254 | } |
| 255 | 255 | |
| 256 | 256 | /** |
@@ -661,14 +661,14 @@ discard block |
||
| 661 | 661 | const ACCESS_LOG_TABLE = 'egw_access_log'; |
| 662 | 662 | |
| 663 | 663 | /** |
| 664 | - * Write or update (for logout) the access_log |
|
| 665 | - * |
|
| 666 | - * @param string|int $sessionid nummeric or PHP session id or 0 for unsuccessful logins |
|
| 667 | - * @param string $login ='' account_lid (evtl. with domain) or '' for setting the logout-time |
|
| 668 | - * @param string $user_ip ='' ip to log |
|
| 669 | - * @param int $account_id =0 numerical account_id |
|
| 670 | - * @return int $sessionid primary key of egw_access_log for login, null otherwise |
|
| 671 | - */ |
|
| 664 | + * Write or update (for logout) the access_log |
|
| 665 | + * |
|
| 666 | + * @param string|int $sessionid nummeric or PHP session id or 0 for unsuccessful logins |
|
| 667 | + * @param string $login ='' account_lid (evtl. with domain) or '' for setting the logout-time |
|
| 668 | + * @param string $user_ip ='' ip to log |
|
| 669 | + * @param int $account_id =0 numerical account_id |
|
| 670 | + * @return int $sessionid primary key of egw_access_log for login, null otherwise |
|
| 671 | + */ |
|
| 672 | 672 | private function log_access($sessionid,$login='',$user_ip='',$account_id=0) |
| 673 | 673 | { |
| 674 | 674 | $now = time(); |
@@ -716,7 +716,7 @@ discard block |
||
| 716 | 716 | |
| 717 | 717 | /** |
| 718 | 718 | * Protect against brute force attacks, block login if too many unsuccessful login attmepts |
| 719 | - * |
|
| 719 | + * |
|
| 720 | 720 | * @param string $login account_lid (evtl. with domain) |
| 721 | 721 | * @param string $ip ip of the user |
| 722 | 722 | * @returns bool login blocked? |
@@ -173,7 +173,7 @@ discard block |
||
| 173 | 173 | const CD_BAD_LOGIN_OR_PASSWORD = 5; |
| 174 | 174 | const CD_FORCE_PASSWORD_CHANGE = 97; |
| 175 | 175 | const CD_ACCOUNT_EXPIRED = 98; |
| 176 | - const CD_BLOCKED = 99; // to many failed attempts to loing |
|
| 176 | + const CD_BLOCKED = 99; // to many failed attempts to loing |
|
| 177 | 177 | |
| 178 | 178 | /** |
| 179 | 179 | * Verbose reason why session creation failed |
@@ -187,7 +187,7 @@ discard block |
||
| 187 | 187 | * |
| 188 | 188 | * @param array $domain_names =null domain-names used in this install |
| 189 | 189 | */ |
| 190 | - function __construct(array $domain_names=null) |
|
| 190 | + function __construct(array $domain_names = null) |
|
| 191 | 191 | { |
| 192 | 192 | $this->required_files = $_SESSION[self::EGW_REQUIRED_FILES]; |
| 193 | 193 | |
@@ -203,27 +203,27 @@ discard block |
||
| 203 | 203 | $save_rep = false; |
| 204 | 204 | if (!isset($GLOBALS['egw_info']['server']['max_access_log_age'])) |
| 205 | 205 | { |
| 206 | - $GLOBALS['egw_info']['server']['max_access_log_age'] = 90; // default 90 days |
|
| 206 | + $GLOBALS['egw_info']['server']['max_access_log_age'] = 90; // default 90 days |
|
| 207 | 207 | $save_rep = true; |
| 208 | 208 | } |
| 209 | 209 | if (!isset($GLOBALS['egw_info']['server']['block_time'])) |
| 210 | 210 | { |
| 211 | - $GLOBALS['egw_info']['server']['block_time'] = 1; // default 1min, its enough to slow down brute force attacks |
|
| 211 | + $GLOBALS['egw_info']['server']['block_time'] = 1; // default 1min, its enough to slow down brute force attacks |
|
| 212 | 212 | $save_rep = true; |
| 213 | 213 | } |
| 214 | 214 | if (!isset($GLOBALS['egw_info']['server']['num_unsuccessful_id'])) |
| 215 | 215 | { |
| 216 | - $GLOBALS['egw_info']['server']['num_unsuccessful_id'] = 3; // default 3 trys per id |
|
| 216 | + $GLOBALS['egw_info']['server']['num_unsuccessful_id'] = 3; // default 3 trys per id |
|
| 217 | 217 | $save_rep = true; |
| 218 | 218 | } |
| 219 | 219 | if (!isset($GLOBALS['egw_info']['server']['num_unsuccessful_ip'])) |
| 220 | 220 | { |
| 221 | - $GLOBALS['egw_info']['server']['num_unsuccessful_ip'] = $GLOBALS['egw_info']['server']['num_unsuccessful_id'] * 5; // default is 5 times as high as the id default; since accessing via proxy is quite common |
|
| 221 | + $GLOBALS['egw_info']['server']['num_unsuccessful_ip'] = $GLOBALS['egw_info']['server']['num_unsuccessful_id'] * 5; // default is 5 times as high as the id default; since accessing via proxy is quite common |
|
| 222 | 222 | $save_rep = true; |
| 223 | 223 | } |
| 224 | 224 | if (!isset($GLOBALS['egw_info']['server']['install_id'])) |
| 225 | 225 | { |
| 226 | - $GLOBALS['egw_info']['server']['install_id'] = md5(Auth::randomstring(15)); |
|
| 226 | + $GLOBALS['egw_info']['server']['install_id'] = md5(Auth::randomstring(15)); |
|
| 227 | 227 | } |
| 228 | 228 | if (!isset($GLOBALS['egw_info']['server']['max_history'])) |
| 229 | 229 | { |
@@ -235,12 +235,12 @@ discard block |
||
| 235 | 235 | { |
| 236 | 236 | $config = new Config('phpgwapi'); |
| 237 | 237 | $config->read_repository(); |
| 238 | - $config->value('max_access_log_age',$GLOBALS['egw_info']['server']['max_access_log_age']); |
|
| 239 | - $config->value('block_time',$GLOBALS['egw_info']['server']['block_time']); |
|
| 240 | - $config->value('num_unsuccessful_id',$GLOBALS['egw_info']['server']['num_unsuccessful_id']); |
|
| 241 | - $config->value('num_unsuccessful_ip',$GLOBALS['egw_info']['server']['num_unsuccessful_ip']); |
|
| 242 | - $config->value('install_id',$GLOBALS['egw_info']['server']['install_id']); |
|
| 243 | - $config->value('max_history',$GLOBALS['egw_info']['server']['max_history']); |
|
| 238 | + $config->value('max_access_log_age', $GLOBALS['egw_info']['server']['max_access_log_age']); |
|
| 239 | + $config->value('block_time', $GLOBALS['egw_info']['server']['block_time']); |
|
| 240 | + $config->value('num_unsuccessful_id', $GLOBALS['egw_info']['server']['num_unsuccessful_id']); |
|
| 241 | + $config->value('num_unsuccessful_ip', $GLOBALS['egw_info']['server']['num_unsuccessful_ip']); |
|
| 242 | + $config->value('install_id', $GLOBALS['egw_info']['server']['install_id']); |
|
| 243 | + $config->value('max_history', $GLOBALS['egw_info']['server']['max_history']); |
|
| 244 | 244 | $config->save_repository(); |
| 245 | 245 | } |
| 246 | 246 | } |
@@ -249,7 +249,7 @@ discard block |
||
| 249 | 249 | // set session_timeout from global php.ini and default to 14400=4h, if not set |
| 250 | 250 | if (!($GLOBALS['egw_info']['server']['sessions_timeout'] = ini_get('session.gc_maxlifetime'))) |
| 251 | 251 | { |
| 252 | - ini_set('session.gc_maxlifetime', $GLOBALS['egw_info']['server']['sessions_timeout']=14400); |
|
| 252 | + ini_set('session.gc_maxlifetime', $GLOBALS['egw_info']['server']['sessions_timeout'] = 14400); |
|
| 253 | 253 | } |
| 254 | 254 | } |
| 255 | 255 | |
@@ -319,15 +319,15 @@ discard block |
||
| 319 | 319 | |
| 320 | 320 | if (!isset($_SESSION[self::EGW_SESSION_ENCRYPTED]) && self::init_crypt($kp3)) |
| 321 | 321 | { |
| 322 | - foreach(self::$egw_session_vars as $name) |
|
| 322 | + foreach (self::$egw_session_vars as $name) |
|
| 323 | 323 | { |
| 324 | 324 | if (isset($_SESSION[$name])) |
| 325 | 325 | { |
| 326 | - $_SESSION[$name] = mcrypt_generic(self::$mcrypt,serialize($_SESSION[$name])); |
|
| 326 | + $_SESSION[$name] = mcrypt_generic(self::$mcrypt, serialize($_SESSION[$name])); |
|
| 327 | 327 | //error_log(__METHOD__."() 'encrypting' session var: $name, len=".strlen($_SESSION[$name])); |
| 328 | 328 | } |
| 329 | 329 | } |
| 330 | - $_SESSION[self::EGW_SESSION_ENCRYPTED] = true; // flag session as encrypted |
|
| 330 | + $_SESSION[self::EGW_SESSION_ENCRYPTED] = true; // flag session as encrypted |
|
| 331 | 331 | |
| 332 | 332 | mcrypt_generic_deinit(self::$mcrypt); |
| 333 | 333 | self::$mcrypt = null; |
@@ -342,24 +342,24 @@ discard block |
||
| 342 | 342 | * @param boolean $recursion =true if true call itself for every item > $limit |
| 343 | 343 | * @param int $limit =1000 log only differences > $limit |
| 344 | 344 | */ |
| 345 | - static function log_session_usage(&$arr,$label,$recursion=true,$limit=1000) |
|
| 345 | + static function log_session_usage(&$arr, $label, $recursion = true, $limit = 1000) |
|
| 346 | 346 | { |
| 347 | 347 | if (!is_array($arr)) return; |
| 348 | 348 | |
| 349 | 349 | $sizes = array(); |
| 350 | - foreach($arr as $key => &$data) |
|
| 350 | + foreach ($arr as $key => &$data) |
|
| 351 | 351 | { |
| 352 | 352 | $sizes[$key] = strlen(serialize($data)); |
| 353 | 353 | } |
| 354 | - arsort($sizes,SORT_NUMERIC); |
|
| 355 | - foreach($sizes as $key => $size) |
|
| 354 | + arsort($sizes, SORT_NUMERIC); |
|
| 355 | + foreach ($sizes as $key => $size) |
|
| 356 | 356 | { |
| 357 | 357 | $diff = $size - (int)$_SESSION[$label.'-sizes'][$key]; |
| 358 | 358 | $_SESSION[$label.'-sizes'][$key] = $size; |
| 359 | 359 | if ($diff > $limit) |
| 360 | 360 | { |
| 361 | 361 | error_log("strlen({$label}[$key])=".Vfs::hsize($size).", diff=".Vfs::hsize($diff)); |
| 362 | - if ($recursion) self::log_session_usage($arr[$key],$label.'['.$key.']',$recursion,$limit); |
|
| 362 | + if ($recursion) self::log_session_usage($arr[$key], $label.'['.$key.']', $recursion, $limit); |
|
| 363 | 363 | } |
| 364 | 364 | } |
| 365 | 365 | } |
@@ -374,15 +374,15 @@ discard block |
||
| 374 | 374 | { |
| 375 | 375 | if ($_SESSION[self::EGW_SESSION_ENCRYPTED] && self::init_crypt(self::get_request('kp3'))) |
| 376 | 376 | { |
| 377 | - foreach(self::$egw_session_vars as $name) |
|
| 377 | + foreach (self::$egw_session_vars as $name) |
|
| 378 | 378 | { |
| 379 | 379 | if (isset($_SESSION[$name])) |
| 380 | 380 | { |
| 381 | - $_SESSION[$name] = unserialize(trim(mdecrypt_generic(self::$mcrypt,$_SESSION[$name]))); |
|
| 381 | + $_SESSION[$name] = unserialize(trim(mdecrypt_generic(self::$mcrypt, $_SESSION[$name]))); |
|
| 382 | 382 | //error_log(__METHOD__."() 'decrypting' session var $name: gettype($name) = ".gettype($_SESSION[$name])); |
| 383 | 383 | } |
| 384 | 384 | } |
| 385 | - unset($_SESSION[self::EGW_SESSION_ENCRYPTED]); // delete encryption flag |
|
| 385 | + unset($_SESSION[self::EGW_SESSION_ENCRYPTED]); // delete encryption flag |
|
| 386 | 386 | } |
| 387 | 387 | } |
| 388 | 388 | |
@@ -395,15 +395,15 @@ discard block |
||
| 395 | 395 | * @param string $mode =self::MCRYPT_MODE |
| 396 | 396 | * @return boolean true if encryption is used, false otherwise |
| 397 | 397 | */ |
| 398 | - static private function init_crypt($kp3,$algo=self::MCRYPT_ALGO,$mode=self::MCRYPT_MODE) |
|
| 398 | + static private function init_crypt($kp3, $algo = self::MCRYPT_ALGO, $mode = self::MCRYPT_MODE) |
|
| 399 | 399 | { |
| 400 | - if(!$GLOBALS['egw_info']['server']['mcrypt_enabled']) |
|
| 400 | + if (!$GLOBALS['egw_info']['server']['mcrypt_enabled']) |
|
| 401 | 401 | { |
| 402 | - return false; // session encryption is switched off |
|
| 402 | + return false; // session encryption is switched off |
|
| 403 | 403 | } |
| 404 | 404 | if ($GLOBALS['egw_info']['currentapp'] == 'syncml' || !$kp3) |
| 405 | 405 | { |
| 406 | - $kp3 = 'staticsyncmlkp3'; // syncml has no kp3! |
|
| 406 | + $kp3 = 'staticsyncmlkp3'; // syncml has no kp3! |
|
| 407 | 407 | } |
| 408 | 408 | if (is_null(self::$mcrypt)) |
| 409 | 409 | { |
@@ -419,9 +419,9 @@ discard block |
||
| 419 | 419 | } |
| 420 | 420 | $iv_size = mcrypt_enc_get_iv_size(self::$mcrypt); |
| 421 | 421 | $iv = !isset($GLOBALS['egw_info']['server']['mcrypt_iv']) || strlen($GLOBALS['egw_info']['server']['mcrypt_iv']) < $iv_size ? |
| 422 | - mcrypt_create_iv ($iv_size, MCRYPT_RAND) : substr($GLOBALS['egw_info']['server']['mcrypt_iv'],0,$iv_size); |
|
| 422 | + mcrypt_create_iv($iv_size, MCRYPT_RAND) : substr($GLOBALS['egw_info']['server']['mcrypt_iv'], 0, $iv_size); |
|
| 423 | 423 | |
| 424 | - if (mcrypt_generic_init(self::$mcrypt,$kp3, $iv) < 0) |
|
| 424 | + if (mcrypt_generic_init(self::$mcrypt, $kp3, $iv) < 0) |
|
| 425 | 425 | { |
| 426 | 426 | error_log(__METHOD__."() could not initialise mcrypt, sessions get NOT encrypted!"); |
| 427 | 427 | return self::$mcrypt = false; |
@@ -441,7 +441,7 @@ discard block |
||
| 441 | 441 | * @param boolean $fail_on_forced_password_change =false true: do NOT create session, if password change requested |
| 442 | 442 | * @return string|boolean session id or false if session was not created, $this->(cd_)reason contains cause |
| 443 | 443 | */ |
| 444 | - function create($login,$passwd = '',$passwd_type = '',$no_session=false,$auth_check=true,$fail_on_forced_password_change=false) |
|
| 444 | + function create($login, $passwd = '', $passwd_type = '', $no_session = false, $auth_check = true, $fail_on_forced_password_change = false) |
|
| 445 | 445 | { |
| 446 | 446 | try { |
| 447 | 447 | if (is_array($login)) |
@@ -459,9 +459,9 @@ discard block |
||
| 459 | 459 | } |
| 460 | 460 | if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) starting ..."); |
| 461 | 461 | |
| 462 | - self::split_login_domain($login,$this->account_lid,$this->account_domain); |
|
| 462 | + self::split_login_domain($login, $this->account_lid, $this->account_domain); |
|
| 463 | 463 | // add domain to the login, if not already there |
| 464 | - if (substr($this->login,-strlen($this->account_domain)-1) != '@'.$this->account_domain) |
|
| 464 | + if (substr($this->login, -strlen($this->account_domain) - 1) != '@'.$this->account_domain) |
|
| 465 | 465 | { |
| 466 | 466 | $this->login .= '@'.$this->account_domain; |
| 467 | 467 | } |
@@ -478,7 +478,7 @@ discard block |
||
| 478 | 478 | { |
| 479 | 479 | $this->account_domain = $GLOBALS['egw_info']['user']['domain']; |
| 480 | 480 | } |
| 481 | - elseif($this->account_domain != $GLOBALS['egw_info']['user']['domain']) |
|
| 481 | + elseif ($this->account_domain != $GLOBALS['egw_info']['user']['domain']) |
|
| 482 | 482 | { |
| 483 | 483 | throw new Exception("Wrong domain! '$this->account_domain' != '{$GLOBALS['egw_info']['user']['domain']}'"); |
| 484 | 484 | } |
@@ -486,9 +486,9 @@ discard block |
||
| 486 | 486 | |
| 487 | 487 | $user_ip = self::getuser_ip(); |
| 488 | 488 | |
| 489 | - $this->account_id = $GLOBALS['egw']->accounts->name2id($this->account_lid,'account_lid','u'); |
|
| 489 | + $this->account_id = $GLOBALS['egw']->accounts->name2id($this->account_lid, 'account_lid', 'u'); |
|
| 490 | 490 | |
| 491 | - if (($blocked = $this->login_blocked($login,$user_ip)) || // too many unsuccessful attempts |
|
| 491 | + if (($blocked = $this->login_blocked($login, $user_ip)) || // too many unsuccessful attempts |
|
| 492 | 492 | $GLOBALS['egw_info']['server']['global_denied_users'][$this->account_lid] || |
| 493 | 493 | $auth_check && !$GLOBALS['egw']->auth->authenticate($this->account_lid, $this->passwd, $this->passwd_type) || |
| 494 | 494 | $this->account_id && $GLOBALS['egw']->accounts->get_type($this->account_id) == 'g') |
@@ -497,9 +497,9 @@ discard block |
||
| 497 | 497 | $this->cd_reason = $blocked ? self::CD_BLOCKED : self::CD_BAD_LOGIN_OR_PASSWORD; |
| 498 | 498 | |
| 499 | 499 | // we dont log anon users as it would block the website |
| 500 | - if (!$GLOBALS['egw']->acl->get_specific_rights_for_account($this->account_id,'anonymous','phpgwapi')) |
|
| 500 | + if (!$GLOBALS['egw']->acl->get_specific_rights_for_account($this->account_id, 'anonymous', 'phpgwapi')) |
|
| 501 | 501 | { |
| 502 | - $this->log_access($this->reason,$login,$user_ip,0); // log unsuccessfull login |
|
| 502 | + $this->log_access($this->reason, $login, $user_ip, 0); // log unsuccessfull login |
|
| 503 | 503 | } |
| 504 | 504 | if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) UNSUCCESSFULL ($this->reason)"); |
| 505 | 505 | return false; |
@@ -521,7 +521,7 @@ discard block |
||
| 521 | 521 | if ($this->account_lid != ($lid = $GLOBALS['egw']->accounts->id2name($this->account_id))) |
| 522 | 522 | { |
| 523 | 523 | $this->account_lid = $lid; |
| 524 | - $this->login = $lid.substr($this->login,strlen($lid)); |
|
| 524 | + $this->login = $lid.substr($this->login, strlen($lid)); |
|
| 525 | 525 | } |
| 526 | 526 | |
| 527 | 527 | $GLOBALS['egw_info']['user']['account_id'] = $this->account_id; |
@@ -543,7 +543,7 @@ discard block |
||
| 543 | 543 | } |
| 544 | 544 | $this->sessionid = session_id(); |
| 545 | 545 | } |
| 546 | - $this->kp3 = Auth::randomstring(24); |
|
| 546 | + $this->kp3 = Auth::randomstring(24); |
|
| 547 | 547 | |
| 548 | 548 | $GLOBALS['egw_info']['user'] = $this->read_repositories(); |
| 549 | 549 | if ($GLOBALS['egw']->accounts->is_expired($GLOBALS['egw_info']['user'])) |
@@ -557,7 +557,7 @@ discard block |
||
| 557 | 557 | |
| 558 | 558 | Cache::setSession('phpgwapi', 'password', base64_encode($this->passwd)); |
| 559 | 559 | |
| 560 | - if ($GLOBALS['egw']->acl->check('anonymous',1,'phpgwapi')) |
|
| 560 | + if ($GLOBALS['egw']->acl->check('anonymous', 1, 'phpgwapi')) |
|
| 561 | 561 | { |
| 562 | 562 | $this->session_flags = 'A'; |
| 563 | 563 | } |
@@ -575,46 +575,46 @@ discard block |
||
| 575 | 575 | 'passwd' => $this->passwd, |
| 576 | 576 | 'account_domain' => $this->account_domain, |
| 577 | 577 | 'user_ip' => $user_ip, |
| 578 | - ),'',true))) // true = run hooks from all apps, not just the ones the current user has perms to run |
|
| 578 | + ), '', true))) // true = run hooks from all apps, not just the ones the current user has perms to run |
|
| 579 | 579 | { |
| 580 | - foreach($hook_result as $reason) |
|
| 580 | + foreach ($hook_result as $reason) |
|
| 581 | 581 | { |
| 582 | 582 | if ($reason) // called hook requests to deny the session |
| 583 | 583 | { |
| 584 | 584 | $this->reason = $this->cd_reason = $reason; |
| 585 | - $this->log_access($this->reason,$login,$user_ip,0); // log unsuccessfull login |
|
| 585 | + $this->log_access($this->reason, $login, $user_ip, 0); // log unsuccessfull login |
|
| 586 | 586 | if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) UNSUCCESSFULL ($this->reason)"); |
| 587 | 587 | return false; |
| 588 | 588 | } |
| 589 | 589 | } |
| 590 | 590 | } |
| 591 | 591 | $GLOBALS['egw']->db->transaction_begin(); |
| 592 | - $this->register_session($this->login,$user_ip,$now,$this->session_flags); |
|
| 592 | + $this->register_session($this->login, $user_ip, $now, $this->session_flags); |
|
| 593 | 593 | if ($this->session_flags != 'A') // dont log anonymous sessions |
| 594 | 594 | { |
| 595 | - $this->sessionid_access_log = $this->log_access($this->sessionid,$login,$user_ip,$this->account_id); |
|
| 595 | + $this->sessionid_access_log = $this->log_access($this->sessionid, $login, $user_ip, $this->account_id); |
|
| 596 | 596 | } |
| 597 | 597 | Cache::setSession('phpgwapi', 'account_previous_login', $GLOBALS['egw']->auth->previous_login); |
| 598 | - $GLOBALS['egw']->accounts->update_lastlogin($this->account_id,$user_ip); |
|
| 598 | + $GLOBALS['egw']->accounts->update_lastlogin($this->account_id, $user_ip); |
|
| 599 | 599 | $GLOBALS['egw']->db->transaction_commit(); |
| 600 | 600 | |
| 601 | 601 | if ($GLOBALS['egw_info']['server']['usecookies'] && !$no_session) |
| 602 | 602 | { |
| 603 | - self::egw_setcookie(self::EGW_SESSION_NAME,$this->sessionid); |
|
| 604 | - self::egw_setcookie('kp3',$this->kp3); |
|
| 605 | - self::egw_setcookie('domain',$this->account_domain); |
|
| 603 | + self::egw_setcookie(self::EGW_SESSION_NAME, $this->sessionid); |
|
| 604 | + self::egw_setcookie('kp3', $this->kp3); |
|
| 605 | + self::egw_setcookie('domain', $this->account_domain); |
|
| 606 | 606 | } |
| 607 | 607 | if ($GLOBALS['egw_info']['server']['usecookies'] && !$no_session || isset($_COOKIE['last_loginid'])) |
| 608 | 608 | { |
| 609 | - self::egw_setcookie('last_loginid', $this->account_lid ,$now+1209600); /* For 2 weeks */ |
|
| 610 | - self::egw_setcookie('last_domain',$this->account_domain,$now+1209600); |
|
| 609 | + self::egw_setcookie('last_loginid', $this->account_lid, $now + 1209600); /* For 2 weeks */ |
|
| 610 | + self::egw_setcookie('last_domain', $this->account_domain, $now + 1209600); |
|
| 611 | 611 | } |
| 612 | 612 | if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) successfull sessionid=$this->sessionid"); |
| 613 | 613 | |
| 614 | 614 | return $this->sessionid; |
| 615 | 615 | } |
| 616 | 616 | // catch all exceptions, as their (allways logged) trace (eg. on a database error) would contain the user password |
| 617 | - catch(Exception $e) { |
|
| 617 | + catch (Exception $e) { |
|
| 618 | 618 | $this->reason = $this->cd_reason = $e->getMessage(); |
| 619 | 619 | error_log(__METHOD__."('$login', ".array2string(str_repeat('*', strlen($passwd))). |
| 620 | 620 | ", '$passwd_type', no_session=".array2string($no_session). |
@@ -633,13 +633,12 @@ discard block |
||
| 633 | 633 | * @param int $now |
| 634 | 634 | * @param string $session_flags |
| 635 | 635 | */ |
| 636 | - private function register_session($login,$user_ip,$now,$session_flags) |
|
| 636 | + private function register_session($login, $user_ip, $now, $session_flags) |
|
| 637 | 637 | { |
| 638 | 638 | // restore session vars set before session was started |
| 639 | 639 | if (is_array($this->required_files)) |
| 640 | 640 | { |
| 641 | - $_SESSION[self::EGW_REQUIRED_FILES] = !is_array($_SESSION[self::EGW_REQUIRED_FILES]) ? $this->required_files : |
|
| 642 | - array_unique(array_merge($_SESSION[self::EGW_REQUIRED_FILES],$this->required_files)); |
|
| 641 | + $_SESSION[self::EGW_REQUIRED_FILES] = !is_array($_SESSION[self::EGW_REQUIRED_FILES]) ? $this->required_files : array_unique(array_merge($_SESSION[self::EGW_REQUIRED_FILES], $this->required_files)); |
|
| 643 | 642 | unset($this->required_files); |
| 644 | 643 | } |
| 645 | 644 | $_SESSION[self::EGW_SESSION_VAR] = array( |
@@ -669,13 +668,13 @@ discard block |
||
| 669 | 668 | * @param int $account_id =0 numerical account_id |
| 670 | 669 | * @return int $sessionid primary key of egw_access_log for login, null otherwise |
| 671 | 670 | */ |
| 672 | - private function log_access($sessionid,$login='',$user_ip='',$account_id=0) |
|
| 671 | + private function log_access($sessionid, $login = '', $user_ip = '', $account_id = 0) |
|
| 673 | 672 | { |
| 674 | 673 | $now = time(); |
| 675 | 674 | |
| 676 | 675 | if ($login) |
| 677 | 676 | { |
| 678 | - $GLOBALS['egw']->db->insert(self::ACCESS_LOG_TABLE,array( |
|
| 677 | + $GLOBALS['egw']->db->insert(self::ACCESS_LOG_TABLE, array( |
|
| 679 | 678 | 'session_php' => $sessionid, |
| 680 | 679 | 'loginid' => $login, |
| 681 | 680 | 'ip' => $user_ip, |
@@ -683,10 +682,10 @@ discard block |
||
| 683 | 682 | 'account_id'=> $account_id, |
| 684 | 683 | 'user_agent'=> $_SERVER['HTTP_USER_AGENT'], |
| 685 | 684 | 'session_dla' => $now, |
| 686 | - 'session_action' => $this->update_dla(false), // dont update egw_access_log |
|
| 687 | - ),false,__LINE__,__FILE__); |
|
| 685 | + 'session_action' => $this->update_dla(false), // dont update egw_access_log |
|
| 686 | + ), false, __LINE__, __FILE__); |
|
| 688 | 687 | |
| 689 | - $ret = $GLOBALS['egw']->db->get_last_insert_id(self::ACCESS_LOG_TABLE,'sessionid'); |
|
| 688 | + $ret = $GLOBALS['egw']->db->get_last_insert_id(self::ACCESS_LOG_TABLE, 'sessionid'); |
|
| 690 | 689 | } |
| 691 | 690 | else |
| 692 | 691 | { |
@@ -694,20 +693,20 @@ discard block |
||
| 694 | 693 | { |
| 695 | 694 | $sessionid = $this->sessionid_access_log; |
| 696 | 695 | } |
| 697 | - $GLOBALS['egw']->db->update(self::ACCESS_LOG_TABLE,array( |
|
| 696 | + $GLOBALS['egw']->db->update(self::ACCESS_LOG_TABLE, array( |
|
| 698 | 697 | 'lo' => $now |
| 699 | - ),is_numeric($sessionid) ? array( |
|
| 698 | + ), is_numeric($sessionid) ? array( |
|
| 700 | 699 | 'sessionid' => $sessionid, |
| 701 | 700 | ) : array( |
| 702 | 701 | 'session_php' => $sessionid, |
| 703 | - ),__LINE__,__FILE__); |
|
| 702 | + ), __LINE__, __FILE__); |
|
| 704 | 703 | |
| 705 | 704 | // run maintenance only on logout, to not delay login |
| 706 | 705 | if ($GLOBALS['egw_info']['server']['max_access_log_age']) |
| 707 | 706 | { |
| 708 | 707 | $max_age = $now - $GLOBALS['egw_info']['server']['max_access_log_age'] * 24 * 60 * 60; |
| 709 | 708 | |
| 710 | - $GLOBALS['egw']->db->delete(self::ACCESS_LOG_TABLE,"li < $max_age",__LINE__,__FILE__); |
|
| 709 | + $GLOBALS['egw']->db->delete(self::ACCESS_LOG_TABLE, "li < $max_age", __LINE__, __FILE__); |
|
| 711 | 710 | } |
| 712 | 711 | } |
| 713 | 712 | //error_log(__METHOD__."('$sessionid', '$login', '$user_ip', $account_id) returning ".array2string($ret)); |
@@ -721,12 +720,12 @@ discard block |
||
| 721 | 720 | * @param string $ip ip of the user |
| 722 | 721 | * @returns bool login blocked? |
| 723 | 722 | */ |
| 724 | - private function login_blocked($login,$ip) |
|
| 723 | + private function login_blocked($login, $ip) |
|
| 725 | 724 | { |
| 726 | 725 | $block_time = time() - $GLOBALS['egw_info']['server']['block_time'] * 60; |
| 727 | 726 | |
| 728 | 727 | $false_id = $false_ip = 0; |
| 729 | - foreach($GLOBALS['egw']->db->union(array( |
|
| 728 | + foreach ($GLOBALS['egw']->db->union(array( |
|
| 730 | 729 | array( |
| 731 | 730 | 'table' => self::ACCESS_LOG_TABLE, |
| 732 | 731 | 'cols' => "'false_ip' AS name,COUNT(*) AS num", |
@@ -763,28 +762,28 @@ discard block |
||
| 763 | 762 | //error_log(__METHOD__."('$login', '$ip') false_ip=$false_ip, false_id=$false_id --> blocked=".array2string($blocked)); |
| 764 | 763 | |
| 765 | 764 | if ($blocked && $GLOBALS['egw_info']['server']['admin_mails'] && |
| 766 | - $GLOBALS['egw_info']['server']['login_blocked_mail_time'] < time()-5*60) // max. one mail every 5mins |
|
| 765 | + $GLOBALS['egw_info']['server']['login_blocked_mail_time'] < time() - 5 * 60) // max. one mail every 5mins |
|
| 767 | 766 | { |
| 768 | 767 | try { |
| 769 | 768 | $mailer = new Mailer(); |
| 770 | 769 | // notify admin(s) via email |
| 771 | 770 | $mailer->setFrom('eGroupWare@'.$GLOBALS['egw_info']['server']['mail_suffix']); |
| 772 | - $mailer->addHeader('Subject', lang("eGroupWare: login blocked for user '%1', IP %2",$login,$ip)); |
|
| 773 | - $mailer->setBody(lang("Too many unsucessful attempts to login: %1 for the user '%2', %3 for the IP %4",$false_id,$login,$false_ip,$ip)); |
|
| 774 | - foreach(preg_split('/,\s*/',$GLOBALS['egw_info']['server']['admin_mails']) as $mail) |
|
| 771 | + $mailer->addHeader('Subject', lang("eGroupWare: login blocked for user '%1', IP %2", $login, $ip)); |
|
| 772 | + $mailer->setBody(lang("Too many unsucessful attempts to login: %1 for the user '%2', %3 for the IP %4", $false_id, $login, $false_ip, $ip)); |
|
| 773 | + foreach (preg_split('/,\s*/', $GLOBALS['egw_info']['server']['admin_mails']) as $mail) |
|
| 775 | 774 | { |
| 776 | 775 | $mailer->addAddress($mail); |
| 777 | 776 | } |
| 778 | 777 | $mailer->send(); |
| 779 | 778 | } |
| 780 | - catch(Exception $e) { |
|
| 779 | + catch (Exception $e) { |
|
| 781 | 780 | // ignore exception, but log it, to block the account and give a correct error-message to user |
| 782 | 781 | error_log(__METHOD__."('$login', '$ip') ".$e->getMessage()); |
| 783 | 782 | } |
| 784 | 783 | // save time of mail, to not send to many mails |
| 785 | 784 | $config = new Config('phpgwapi'); |
| 786 | 785 | $config->read_repository(); |
| 787 | - $config->value('login_blocked_mail_time',time()); |
|
| 786 | + $config->value('login_blocked_mail_time', time()); |
|
| 788 | 787 | $config->save_repository(); |
| 789 | 788 | } |
| 790 | 789 | return $blocked; |
@@ -805,7 +804,7 @@ discard block |
||
| 805 | 804 | * @param boolean $only_basic_auth =false return only a basic auth pseudo sessionid, default no |
| 806 | 805 | * @return string |
| 807 | 806 | */ |
| 808 | - static function get_sessionid($only_basic_auth=false) |
|
| 807 | + static function get_sessionid($only_basic_auth = false) |
|
| 809 | 808 | { |
| 810 | 809 | // for WebDAV and GroupDAV we use a pseudo sessionid created from md5(user:passwd) |
| 811 | 810 | // --> allows this stateless protocolls which use basic auth to use sessions! |
@@ -832,11 +831,11 @@ discard block |
||
| 832 | 831 | EGW_SERVER_ROOT.':'.self::getuser_ip().':'.filemtime(EGW_SERVER_ROOT.'/phpgwapi/setup/setup.inc.php'). |
| 833 | 832 | ':'.$_SERVER['HTTP_USER_AGENT']); |
| 834 | 833 | } |
| 835 | - elseif(!$only_basic_auth && isset($_REQUEST[self::EGW_SESSION_NAME])) |
|
| 834 | + elseif (!$only_basic_auth && isset($_REQUEST[self::EGW_SESSION_NAME])) |
|
| 836 | 835 | { |
| 837 | 836 | $sessionid = $_REQUEST[self::EGW_SESSION_NAME]; |
| 838 | 837 | } |
| 839 | - elseif(!$only_basic_auth && isset($_COOKIE[self::EGW_SESSION_NAME])) |
|
| 838 | + elseif (!$only_basic_auth && isset($_COOKIE[self::EGW_SESSION_NAME])) |
|
| 840 | 839 | { |
| 841 | 840 | $sessionid = $_COOKIE[self::EGW_SESSION_NAME]; |
| 842 | 841 | } |
@@ -844,7 +843,7 @@ discard block |
||
| 844 | 843 | { |
| 845 | 844 | $sessionid = false; |
| 846 | 845 | } |
| 847 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."() _SERVER[REQUEST_URI]='$_SERVER[REQUEST_URI]' returning ".print_r($sessionid,true)); |
|
| 846 | + if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."() _SERVER[REQUEST_URI]='$_SERVER[REQUEST_URI]' returning ".print_r($sessionid, true)); |
|
| 848 | 847 | return $sessionid; |
| 849 | 848 | } |
| 850 | 849 | |
@@ -860,9 +859,7 @@ discard block |
||
| 860 | 859 | */ |
| 861 | 860 | static function get_request($name) |
| 862 | 861 | { |
| 863 | - return isset($_REQUEST[$name]) ? $_REQUEST[$name] : |
|
| 864 | - (isset($_COOKIE[$name]) ? $_COOKIE[$name] : |
|
| 865 | - (isset($_COOKIE[$name=ucfirst($name)]) ? $_COOKIE[$name] : null)); |
|
| 862 | + return isset($_REQUEST[$name]) ? $_REQUEST[$name] : (isset($_COOKIE[$name]) ? $_COOKIE[$name] : (isset($_COOKIE[$name = ucfirst($name)]) ? $_COOKIE[$name] : null)); |
|
| 866 | 863 | } |
| 867 | 864 | |
| 868 | 865 | /** |
@@ -872,13 +869,13 @@ discard block |
||
| 872 | 869 | * @param string $kp3 ?? to be verified |
| 873 | 870 | * @return bool is the session valid? |
| 874 | 871 | */ |
| 875 | - function verify($sessionid=null,$kp3=null) |
|
| 872 | + function verify($sessionid = null, $kp3 = null) |
|
| 876 | 873 | { |
| 877 | 874 | if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."('$sessionid','$kp3') ".function_backtrace()); |
| 878 | 875 | |
| 879 | 876 | $fill_egw_info_and_repositories = !$GLOBALS['egw_info']['flags']['restored_from_session']; |
| 880 | 877 | |
| 881 | - if(!$sessionid) |
|
| 878 | + if (!$sessionid) |
|
| 882 | 879 | { |
| 883 | 880 | $sessionid = self::get_sessionid(); |
| 884 | 881 | $kp3 = self::get_request('kp3'); |
@@ -905,23 +902,23 @@ discard block |
||
| 905 | 902 | if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."('$sessionid') session does NOT exist!"); |
| 906 | 903 | return false; |
| 907 | 904 | } |
| 908 | - $session =& $_SESSION[self::EGW_SESSION_VAR]; |
|
| 905 | + $session = & $_SESSION[self::EGW_SESSION_VAR]; |
|
| 909 | 906 | |
| 910 | 907 | if ($session['session_dla'] <= time() - $GLOBALS['egw_info']['server']['sessions_timeout']) |
| 911 | 908 | { |
| 912 | 909 | if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."('$sessionid') session timed out!"); |
| 913 | - $this->destroy($sessionid,$kp3); |
|
| 910 | + $this->destroy($sessionid, $kp3); |
|
| 914 | 911 | return false; |
| 915 | 912 | } |
| 916 | 913 | |
| 917 | 914 | $this->session_flags = $session['session_flags']; |
| 918 | 915 | |
| 919 | - $this->split_login_domain($session['session_lid'],$this->account_lid,$this->account_domain); |
|
| 916 | + $this->split_login_domain($session['session_lid'], $this->account_lid, $this->account_domain); |
|
| 920 | 917 | |
| 921 | 918 | // This is to ensure that we authenticate to the correct domain (might not be default) |
| 922 | - if($GLOBALS['egw_info']['user']['domain'] && $this->account_domain != $GLOBALS['egw_info']['user']['domain']) |
|
| 919 | + if ($GLOBALS['egw_info']['user']['domain'] && $this->account_domain != $GLOBALS['egw_info']['user']['domain']) |
|
| 923 | 920 | { |
| 924 | - return false; // session not verified, domain changed |
|
| 921 | + return false; // session not verified, domain changed |
|
| 925 | 922 | } |
| 926 | 923 | $GLOBALS['egw_info']['user']['kp3'] = $this->kp3; |
| 927 | 924 | |
@@ -934,7 +931,7 @@ discard block |
||
| 934 | 931 | { |
| 935 | 932 | $this->update_notification_heartbeat(); |
| 936 | 933 | } |
| 937 | - $this->account_id = $GLOBALS['egw']->accounts->name2id($this->account_lid,'account_lid','u'); |
|
| 934 | + $this->account_id = $GLOBALS['egw']->accounts->name2id($this->account_lid, 'account_lid', 'u'); |
|
| 938 | 935 | if (!$this->account_id) |
| 939 | 936 | { |
| 940 | 937 | if (self::ERROR_LOG_DEBUG) error_log("*** Session::verify($sessionid) !accounts::name2id('$this->account_lid')"); |
@@ -972,7 +969,7 @@ discard block |
||
| 972 | 969 | |
| 973 | 970 | if ($GLOBALS['egw_info']['server']['sessions_checkip']) |
| 974 | 971 | { |
| 975 | - if (strtoupper(substr(PHP_OS,0,3)) != 'WIN' && (!$GLOBALS['egw_info']['user']['session_ip'] || |
|
| 972 | + if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN' && (!$GLOBALS['egw_info']['user']['session_ip'] || |
|
| 976 | 973 | $GLOBALS['egw_info']['user']['session_ip'] != $this->getuser_ip())) |
| 977 | 974 | { |
| 978 | 975 | if (self::ERROR_LOG_DEBUG) error_log("*** Session::verify($sessionid) wrong IP"); |
@@ -995,9 +992,9 @@ discard block |
||
| 995 | 992 | // query accesslog-id, if not set in session (session is made persistent after login!) |
| 996 | 993 | if (!$this->sessionid_access_log && $this->session_flags != 'A') |
| 997 | 994 | { |
| 998 | - $this->sessionid_access_log = $GLOBALS['egw']->db->select(self::ACCESS_LOG_TABLE,'sessionid',array( |
|
| 995 | + $this->sessionid_access_log = $GLOBALS['egw']->db->select(self::ACCESS_LOG_TABLE, 'sessionid', array( |
|
| 999 | 996 | 'session_php' => $this->sessionid, |
| 1000 | - ),__LINE__,__FILE__)->fetchColumn(); |
|
| 997 | + ), __LINE__, __FILE__)->fetchColumn(); |
|
| 1001 | 998 | //error_log(__METHOD__."() sessionid=$this->sessionid --> sessionid_access_log=$this->sessionid_access_log"); |
| 1002 | 999 | } |
| 1003 | 1000 | |
@@ -1008,9 +1005,9 @@ discard block |
||
| 1008 | 1005 | (!isset($_COOKIE[self::EGW_SESSION_NAME]) || $_COOKIE[self::EGW_SESSION_NAME] !== $_REQUEST[self::EGW_SESSION_NAME])) |
| 1009 | 1006 | { |
| 1010 | 1007 | if (self::ERROR_LOG_DEBUG) error_log("--> Session::verify($sessionid) SUCCESS, but NO required cookies set --> setting them now"); |
| 1011 | - self::egw_setcookie(self::EGW_SESSION_NAME,$this->sessionid); |
|
| 1012 | - self::egw_setcookie('kp3',$this->kp3); |
|
| 1013 | - self::egw_setcookie('domain',$this->account_domain); |
|
| 1008 | + self::egw_setcookie(self::EGW_SESSION_NAME, $this->sessionid); |
|
| 1009 | + self::egw_setcookie('kp3', $this->kp3); |
|
| 1010 | + self::egw_setcookie('domain', $this->account_domain); |
|
| 1014 | 1011 | } |
| 1015 | 1012 | |
| 1016 | 1013 | if (self::ERROR_LOG_DEBUG) error_log("--> Session::verify($sessionid) SUCCESS"); |
@@ -1025,27 +1022,27 @@ discard block |
||
| 1025 | 1022 | * @param string $kp3 |
| 1026 | 1023 | * @return boolean true on success, false on error |
| 1027 | 1024 | */ |
| 1028 | - function destroy($sessionid, $kp3='') |
|
| 1025 | + function destroy($sessionid, $kp3 = '') |
|
| 1029 | 1026 | { |
| 1030 | 1027 | if (!$sessionid && $kp3) |
| 1031 | 1028 | { |
| 1032 | 1029 | return false; |
| 1033 | 1030 | } |
| 1034 | - $this->log_access($sessionid); // log logout-time |
|
| 1031 | + $this->log_access($sessionid); // log logout-time |
|
| 1035 | 1032 | |
| 1036 | 1033 | if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($sessionid,$kp3)"); |
| 1037 | 1034 | |
| 1038 | 1035 | if (is_numeric($sessionid)) // do we have a access-log-id --> get PHP session id |
| 1039 | 1036 | { |
| 1040 | - $sessionid = $GLOBALS['egw']->db->select(self::ACCESS_LOG_TABLE,'session_php',array( |
|
| 1037 | + $sessionid = $GLOBALS['egw']->db->select(self::ACCESS_LOG_TABLE, 'session_php', array( |
|
| 1041 | 1038 | 'sessionid' => $sessionid, |
| 1042 | - ),__LINE__,__FILE__)->fetchColumn(); |
|
| 1039 | + ), __LINE__, __FILE__)->fetchColumn(); |
|
| 1043 | 1040 | } |
| 1044 | 1041 | |
| 1045 | 1042 | Hooks::process(array( |
| 1046 | 1043 | 'location' => 'session_destroyed', |
| 1047 | 1044 | 'sessionid' => $sessionid, |
| 1048 | - ),'',true); // true = run hooks from all apps, not just the ones the current user has perms to run |
|
| 1045 | + ), '', true); // true = run hooks from all apps, not just the ones the current user has perms to run |
|
| 1049 | 1046 | |
| 1050 | 1047 | // Only do the following, if where working with the current user |
| 1051 | 1048 | if (!$GLOBALS['egw_info']['user']['sessionid'] || $sessionid == $GLOBALS['egw_info']['user']['sessionid']) |
@@ -1066,7 +1063,7 @@ discard block |
||
| 1066 | 1063 | } |
| 1067 | 1064 | else |
| 1068 | 1065 | { |
| 1069 | - $this->commit_session(); // close our own session |
|
| 1066 | + $this->commit_session(); // close our own session |
|
| 1070 | 1067 | |
| 1071 | 1068 | session_id($sessionid); |
| 1072 | 1069 | if (session_start()) |
@@ -1106,25 +1103,25 @@ discard block |
||
| 1106 | 1103 | // as $webserver_url may be part of $url (as /egw is part of phpgwapi/js/egw_instant_load.html) |
| 1107 | 1104 | if (($url[0] != '/' || $webserver_url != '/') && (!$webserver_url || strpos($url, $webserver_url.'/') === false)) |
| 1108 | 1105 | { |
| 1109 | - if($url[0] != '/' && substr($webserver_url,-1) != '/') |
|
| 1106 | + if ($url[0] != '/' && substr($webserver_url, -1) != '/') |
|
| 1110 | 1107 | { |
| 1111 | - $url = $webserver_url .'/'. $url; |
|
| 1108 | + $url = $webserver_url.'/'.$url; |
|
| 1112 | 1109 | } |
| 1113 | 1110 | else |
| 1114 | 1111 | { |
| 1115 | - $url = $webserver_url . $url; |
|
| 1112 | + $url = $webserver_url.$url; |
|
| 1116 | 1113 | } |
| 1117 | 1114 | } |
| 1118 | 1115 | |
| 1119 | - if(isset($GLOBALS['egw_info']['server']['enforce_ssl']) && $GLOBALS['egw_info']['server']['enforce_ssl']) |
|
| 1116 | + if (isset($GLOBALS['egw_info']['server']['enforce_ssl']) && $GLOBALS['egw_info']['server']['enforce_ssl']) |
|
| 1120 | 1117 | { |
| 1121 | - if(substr($url ,0,4) != 'http') |
|
| 1118 | + if (substr($url, 0, 4) != 'http') |
|
| 1122 | 1119 | { |
| 1123 | 1120 | $url = 'https://'.$_SERVER['HTTP_HOST'].$url; |
| 1124 | 1121 | } |
| 1125 | 1122 | else |
| 1126 | 1123 | { |
| 1127 | - $url = str_replace ( 'http:', 'https:', $url); |
|
| 1124 | + $url = str_replace('http:', 'https:', $url); |
|
| 1128 | 1125 | } |
| 1129 | 1126 | } |
| 1130 | 1127 | $vars = array(); |
@@ -1137,7 +1134,7 @@ discard block |
||
| 1137 | 1134 | } |
| 1138 | 1135 | |
| 1139 | 1136 | // check if the url already contains a query and ensure that vars is an array and all strings are in extravars |
| 1140 | - list($ret_url,$othervars) = explode('?', $url, 2); |
|
| 1137 | + list($ret_url, $othervars) = explode('?', $url, 2); |
|
| 1141 | 1138 | if ($extravars && is_array($extravars)) |
| 1142 | 1139 | { |
| 1143 | 1140 | $vars += $extravars; |
@@ -1145,19 +1142,19 @@ discard block |
||
| 1145 | 1142 | } |
| 1146 | 1143 | else |
| 1147 | 1144 | { |
| 1148 | - if ($othervars) $extravars .= ($extravars?'&':'').$othervars; |
|
| 1145 | + if ($othervars) $extravars .= ($extravars ? '&' : '').$othervars; |
|
| 1149 | 1146 | } |
| 1150 | 1147 | |
| 1151 | 1148 | // parse extravars string into the vars array |
| 1152 | 1149 | if ($extravars) |
| 1153 | 1150 | { |
| 1154 | - foreach(explode('&',$extravars) as $expr) |
|
| 1151 | + foreach (explode('&', $extravars) as $expr) |
|
| 1155 | 1152 | { |
| 1156 | - list($var,$val) = explode('=', $expr,2); |
|
| 1157 | - if (strpos($val,'%26') != false) $val = str_replace('%26','&',$val); // make sure to not double encode & |
|
| 1158 | - if (substr($var,-2) == '[]') |
|
| 1153 | + list($var, $val) = explode('=', $expr, 2); |
|
| 1154 | + if (strpos($val, '%26') != false) $val = str_replace('%26', '&', $val); // make sure to not double encode & |
|
| 1155 | + if (substr($var, -2) == '[]') |
|
| 1159 | 1156 | { |
| 1160 | - $vars[substr($var,0,-2)][] = $val; |
|
| 1157 | + $vars[substr($var, 0, -2)][] = $val; |
|
| 1161 | 1158 | } |
| 1162 | 1159 | else |
| 1163 | 1160 | { |
@@ -1170,11 +1167,11 @@ discard block |
||
| 1170 | 1167 | if (count($vars)) |
| 1171 | 1168 | { |
| 1172 | 1169 | $query = array(); |
| 1173 | - foreach($vars as $key => $value) |
|
| 1170 | + foreach ($vars as $key => $value) |
|
| 1174 | 1171 | { |
| 1175 | 1172 | if (is_array($value)) |
| 1176 | 1173 | { |
| 1177 | - foreach($value as $val) |
|
| 1174 | + foreach ($value as $val) |
|
| 1178 | 1175 | { |
| 1179 | 1176 | $query[] = $key.'[]='.urlencode($val); |
| 1180 | 1177 | } |
@@ -1184,7 +1181,7 @@ discard block |
||
| 1184 | 1181 | $query[] = $key.'='.urlencode($value); |
| 1185 | 1182 | } |
| 1186 | 1183 | } |
| 1187 | - $ret_url .= '?' . implode('&',$query); |
|
| 1184 | + $ret_url .= '?'.implode('&', $query); |
|
| 1188 | 1185 | } |
| 1189 | 1186 | return $ret_url; |
| 1190 | 1187 | } |
@@ -1229,7 +1226,7 @@ discard block |
||
| 1229 | 1226 | * @param int $cookietime =0 when cookie should expire, 0 for session only (optional) |
| 1230 | 1227 | * @param string $cookiepath =null optional path (eg. '/') if the eGW install-dir should not be used |
| 1231 | 1228 | */ |
| 1232 | - public static function egw_setcookie($cookiename,$cookievalue='',$cookietime=0,$cookiepath=null) |
|
| 1229 | + public static function egw_setcookie($cookiename, $cookievalue = '', $cookietime = 0, $cookiepath = null) |
|
| 1233 | 1230 | { |
| 1234 | 1231 | if (empty(self::$cookie_domain) || empty(self::$cookie_path)) |
| 1235 | 1232 | { |
@@ -1242,11 +1239,11 @@ discard block |
||
| 1242 | 1239 | static $is_iOS = null; |
| 1243 | 1240 | if (!$cookietime && !isset($is_iOS)) $is_iOS = (bool)preg_match('/^(iPhone|iPad|iPod)/i', Header\UserAgent::mobile()); |
| 1244 | 1241 | |
| 1245 | - if(!headers_sent()) // gives only a warning, but can not send the cookie anyway |
|
| 1242 | + if (!headers_sent()) // gives only a warning, but can not send the cookie anyway |
|
| 1246 | 1243 | { |
| 1247 | 1244 | setcookie($cookiename, $cookievalue, |
| 1248 | - !$cookietime && $is_iOS ? time()+self::IOS_SESSION_COOKIE_LIFETIME : $cookietime, |
|
| 1249 | - is_null($cookiepath) ? self::$cookie_path : $cookiepath,self::$cookie_domain, |
|
| 1245 | + !$cookietime && $is_iOS ? time() + self::IOS_SESSION_COOKIE_LIFETIME : $cookietime, |
|
| 1246 | + is_null($cookiepath) ? self::$cookie_path : $cookiepath, self::$cookie_domain, |
|
| 1250 | 1247 | // if called via HTTPS, only send cookie for https and only allow cookie access via HTTP (true) |
| 1251 | 1248 | empty($GLOBALS['egw_info']['server']['insecure_cookies']) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off', true); |
| 1252 | 1249 | } |
@@ -1265,21 +1262,21 @@ discard block |
||
| 1265 | 1262 | else |
| 1266 | 1263 | { |
| 1267 | 1264 | // Use HTTP_X_FORWARDED_HOST if set, which is the case behind a none-transparent proxy |
| 1268 | - self::$cookie_domain = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']; |
|
| 1265 | + self::$cookie_domain = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']; |
|
| 1269 | 1266 | } |
| 1270 | 1267 | // remove port from HTTP_HOST |
| 1271 | 1268 | $arr = null; |
| 1272 | - if (preg_match("/^(.*):(.*)$/",self::$cookie_domain,$arr)) |
|
| 1269 | + if (preg_match("/^(.*):(.*)$/", self::$cookie_domain, $arr)) |
|
| 1273 | 1270 | { |
| 1274 | 1271 | self::$cookie_domain = $arr[1]; |
| 1275 | 1272 | } |
| 1276 | - if (count(explode('.',self::$cookie_domain)) <= 1) |
|
| 1273 | + if (count(explode('.', self::$cookie_domain)) <= 1) |
|
| 1277 | 1274 | { |
| 1278 | 1275 | // setcookie dont likes domains without dots, leaving it empty, gets setcookie to fill the domain in |
| 1279 | 1276 | self::$cookie_domain = ''; |
| 1280 | 1277 | } |
| 1281 | 1278 | if (!$GLOBALS['egw_info']['server']['cookiepath'] || |
| 1282 | - !(self::$cookie_path = parse_url($GLOBALS['egw_info']['server']['webserver_url'],PHP_URL_PATH))) |
|
| 1279 | + !(self::$cookie_path = parse_url($GLOBALS['egw_info']['server']['webserver_url'], PHP_URL_PATH))) |
|
| 1283 | 1280 | { |
| 1284 | 1281 | self::$cookie_path = '/'; |
| 1285 | 1282 | } |
@@ -1299,7 +1296,7 @@ discard block |
||
| 1299 | 1296 | * @param array $domains =null defaults to $GLOBALS['egw_domain'] from the header |
| 1300 | 1297 | * @return string $GLOBALS['egw_info']['user']['domain'] set with the domain/instance to use |
| 1301 | 1298 | */ |
| 1302 | - public static function search_instance($login,$domain_requested,&$default_domain,$server_names,array $domains=null) |
|
| 1299 | + public static function search_instance($login, $domain_requested, &$default_domain, $server_names, array $domains = null) |
|
| 1303 | 1300 | { |
| 1304 | 1301 | if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."('$login','$domain_requested',".array2string($default_domain).".".array2string($server_names).".".array2string($domains).")"); |
| 1305 | 1302 | |
@@ -1307,10 +1304,10 @@ discard block |
||
| 1307 | 1304 | |
| 1308 | 1305 | if (!isset($default_domain) || !isset($domains[$default_domain])) // allow to overwrite the default domain |
| 1309 | 1306 | { |
| 1310 | - foreach((array)$server_names as $server_name) |
|
| 1307 | + foreach ((array)$server_names as $server_name) |
|
| 1311 | 1308 | { |
| 1312 | - list($server_name) = explode(':', $server_name); // remove port from HTTP_HOST |
|
| 1313 | - if(isset($domains[$server_name])) |
|
| 1309 | + list($server_name) = explode(':', $server_name); // remove port from HTTP_HOST |
|
| 1310 | + if (isset($domains[$server_name])) |
|
| 1314 | 1311 | { |
| 1315 | 1312 | $default_domain = $server_name; |
| 1316 | 1313 | break; |
@@ -1320,7 +1317,7 @@ discard block |
||
| 1320 | 1317 | $parts = explode('.', $server_name); |
| 1321 | 1318 | array_shift($parts); |
| 1322 | 1319 | $domain_part = implode('.', $parts); |
| 1323 | - if(isset($domains[$domain_part])) |
|
| 1320 | + if (isset($domains[$domain_part])) |
|
| 1324 | 1321 | { |
| 1325 | 1322 | $default_domain = $domain_part; |
| 1326 | 1323 | break; |
@@ -1336,11 +1333,11 @@ discard block |
||
| 1336 | 1333 | } |
| 1337 | 1334 | if (isset($login)) // on login |
| 1338 | 1335 | { |
| 1339 | - if (strpos($login,'@') === false || count($domains) == 1) |
|
| 1336 | + if (strpos($login, '@') === false || count($domains) == 1) |
|
| 1340 | 1337 | { |
| 1341 | - $login .= '@' . (isset($_POST['logindomain']) ? $_POST['logindomain'] : $default_domain); |
|
| 1338 | + $login .= '@'.(isset($_POST['logindomain']) ? $_POST['logindomain'] : $default_domain); |
|
| 1342 | 1339 | } |
| 1343 | - $parts = explode('@',$login); |
|
| 1340 | + $parts = explode('@', $login); |
|
| 1344 | 1341 | $domain = array_pop($parts); |
| 1345 | 1342 | $GLOBALS['login'] = $login; |
| 1346 | 1343 | } |
@@ -1363,7 +1360,7 @@ discard block |
||
| 1363 | 1360 | * @param boolean $update_access_log =true false: dont update egw_access_log table |
| 1364 | 1361 | * @return string action as written to egw_access_log.session_action |
| 1365 | 1362 | */ |
| 1366 | - private function update_dla($update_access_log=true) |
|
| 1363 | + private function update_dla($update_access_log = true) |
|
| 1367 | 1364 | { |
| 1368 | 1365 | // This way XML-RPC users aren't always listed as xmlrpc.php |
| 1369 | 1366 | if ($this->xmlrpc_method_called) |
@@ -1379,27 +1376,27 @@ discard block |
||
| 1379 | 1376 | $action = $_SERVER['PHP_SELF']; |
| 1380 | 1377 | // remove EGroupware path, if not installed in webroot |
| 1381 | 1378 | $egw_path = $GLOBALS['egw_info']['server']['webserver_url']; |
| 1382 | - if ($egw_path[0] != '/') $egw_path = parse_url($egw_path,PHP_URL_PATH); |
|
| 1379 | + if ($egw_path[0] != '/') $egw_path = parse_url($egw_path, PHP_URL_PATH); |
|
| 1383 | 1380 | if ($action == '/Microsoft-Server-ActiveSync') |
| 1384 | 1381 | { |
| 1385 | 1382 | $action .= '?Cmd='.$_GET['Cmd'].'&DeviceId='.$_GET['DeviceId']; |
| 1386 | 1383 | } |
| 1387 | 1384 | elseif ($egw_path) |
| 1388 | 1385 | { |
| 1389 | - list(,$action) = explode($egw_path,$action,2); |
|
| 1386 | + list(,$action) = explode($egw_path, $action, 2); |
|
| 1390 | 1387 | } |
| 1391 | 1388 | } |
| 1392 | 1389 | |
| 1393 | 1390 | // update dla in access-log table, if we have an access-log row (non-anonymous session) |
| 1394 | 1391 | if ($this->sessionid_access_log && $update_access_log) |
| 1395 | 1392 | { |
| 1396 | - $GLOBALS['egw']->db->update(self::ACCESS_LOG_TABLE,array( |
|
| 1393 | + $GLOBALS['egw']->db->update(self::ACCESS_LOG_TABLE, array( |
|
| 1397 | 1394 | 'session_dla' => time(), |
| 1398 | 1395 | 'session_action' => $action, |
| 1399 | - 'lo' => null, // just in case it was (automatic) timed out before |
|
| 1400 | - ),array( |
|
| 1396 | + 'lo' => null, // just in case it was (automatic) timed out before |
|
| 1397 | + ), array( |
|
| 1401 | 1398 | 'sessionid' => $this->sessionid_access_log, |
| 1402 | - ),__LINE__,__FILE__); |
|
| 1399 | + ), __LINE__, __FILE__); |
|
| 1403 | 1400 | } |
| 1404 | 1401 | |
| 1405 | 1402 | $_SESSION[self::EGW_SESSION_VAR]['session_dla'] = time(); |
@@ -1417,12 +1414,12 @@ discard block |
||
| 1417 | 1414 | // update dla in access-log table, if we have an access-log row (non-anonymous session) |
| 1418 | 1415 | if ($this->sessionid_access_log) |
| 1419 | 1416 | { |
| 1420 | - $GLOBALS['egw']->db->update(self::ACCESS_LOG_TABLE,array( |
|
| 1417 | + $GLOBALS['egw']->db->update(self::ACCESS_LOG_TABLE, array( |
|
| 1421 | 1418 | 'notification_heartbeat' => time(), |
| 1422 | - ),array( |
|
| 1419 | + ), array( |
|
| 1423 | 1420 | 'sessionid' => $this->sessionid_access_log, |
| 1424 | 1421 | 'lo IS NULL', |
| 1425 | - ),__LINE__,__FILE__); |
|
| 1422 | + ), __LINE__, __FILE__); |
|
| 1426 | 1423 | } |
| 1427 | 1424 | } |
| 1428 | 1425 | |
@@ -1443,7 +1440,7 @@ discard block |
||
| 1443 | 1440 | { |
| 1444 | 1441 | // authentication happens in login.php, which does NOT yet create egw-object in session |
| 1445 | 1442 | // --> need to store homedirectory in session |
| 1446 | - if(isset($GLOBALS['auto_create_acct']['homedirectory'])) |
|
| 1443 | + if (isset($GLOBALS['auto_create_acct']['homedirectory'])) |
|
| 1447 | 1444 | { |
| 1448 | 1445 | Cache::setSession(__CLASS__, 'homedirectory', |
| 1449 | 1446 | $user['homedirectory'] = $GLOBALS['auto_create_acct']['homedirectory']); |
@@ -1456,7 +1453,7 @@ discard block |
||
| 1456 | 1453 | $user['preferences'] = $GLOBALS['egw']->preferences->read_repository(); |
| 1457 | 1454 | if (is_object($GLOBALS['egw']->datetime)) |
| 1458 | 1455 | { |
| 1459 | - $GLOBALS['egw']->datetime->__construct(); // to set tz_offset from the now read prefs |
|
| 1456 | + $GLOBALS['egw']->datetime->__construct(); // to set tz_offset from the now read prefs |
|
| 1460 | 1457 | } |
| 1461 | 1458 | $user['apps'] = $GLOBALS['egw']->applications->read_repository(); |
| 1462 | 1459 | $user['domain'] = $this->account_domain; |
@@ -1479,9 +1476,9 @@ discard block |
||
| 1479 | 1476 | * @param string &$account_lid returned account_lid (ie. user) |
| 1480 | 1477 | * @param string &$domain returned domain (ie. domain) |
| 1481 | 1478 | */ |
| 1482 | - private function split_login_domain($login,&$account_lid,&$domain) |
|
| 1479 | + private function split_login_domain($login, &$account_lid, &$domain) |
|
| 1483 | 1480 | { |
| 1484 | - $parts = explode('@',$login); |
|
| 1481 | + $parts = explode('@', $login); |
|
| 1485 | 1482 | |
| 1486 | 1483 | //conference - for strings like [email protected]@default , |
| 1487 | 1484 | //allows that user have a login that is his e-mail. (viniciuscb) |
@@ -1489,11 +1486,11 @@ discard block |
||
| 1489 | 1486 | { |
| 1490 | 1487 | $probable_domain = array_pop($parts); |
| 1491 | 1488 | //Last part of login string, when separated by @, is a domain name |
| 1492 | - if (in_array($probable_domain,$this->egw_domains)) |
|
| 1489 | + if (in_array($probable_domain, $this->egw_domains)) |
|
| 1493 | 1490 | { |
| 1494 | 1491 | $got_login = true; |
| 1495 | 1492 | $domain = $probable_domain; |
| 1496 | - $account_lid = implode('@',$parts); |
|
| 1493 | + $account_lid = implode('@', $parts); |
|
| 1497 | 1494 | } |
| 1498 | 1495 | } |
| 1499 | 1496 | |
@@ -1516,9 +1513,9 @@ discard block |
||
| 1516 | 1513 | * @param boolean $allow_password_md5 =false can password alread be an md5 hash |
| 1517 | 1514 | * @return string |
| 1518 | 1515 | */ |
| 1519 | - static function user_pw_hash($user,$password,$allow_password_md5=false) |
|
| 1516 | + static function user_pw_hash($user, $password, $allow_password_md5 = false) |
|
| 1520 | 1517 | { |
| 1521 | - $password_md5 = $allow_password_md5 && preg_match('/^[a-f0-9]{32}$/',$password) ? $password : md5($password); |
|
| 1518 | + $password_md5 = $allow_password_md5 && preg_match('/^[a-f0-9]{32}$/', $password) ? $password : md5($password); |
|
| 1522 | 1519 | |
| 1523 | 1520 | $hash = sha1(strtolower($user).$password_md5); |
| 1524 | 1521 | |
@@ -1532,7 +1529,7 @@ discard block |
||
| 1532 | 1529 | { |
| 1533 | 1530 | if (self::ERROR_LOG_DEBUG) error_log(__METHOD__.'() session_handler='.self::$session_handler.', egw_info[server][session_handler]='.$GLOBALS['egw_info']['server']['session_handler'].' called from:'.function_backtrace()); |
| 1534 | 1531 | |
| 1535 | - ini_set('session.use_cookies',0); // disable the automatic use of cookies, as it uses the path / by default |
|
| 1532 | + ini_set('session.use_cookies', 0); // disable the automatic use of cookies, as it uses the path / by default |
|
| 1536 | 1533 | session_name(self::EGW_SESSION_NAME); |
| 1537 | 1534 | if (($sessionid = self::get_sessionid())) |
| 1538 | 1535 | { |
@@ -1559,7 +1556,7 @@ discard block |
||
| 1559 | 1556 | * @param int $expire =null expiration time in seconds, default $GLOBALS['egw_info']['flags']['nocachecontrol'] or php.ini session.cache_expire |
| 1560 | 1557 | * @param int $private =null allows to set private caching with given expiration time, by setting it to true |
| 1561 | 1558 | */ |
| 1562 | - public static function cache_control($expire=null, $private=null) |
|
| 1559 | + public static function cache_control($expire = null, $private = null) |
|
| 1563 | 1560 | { |
| 1564 | 1561 | if (is_null($expire) && isset($GLOBALS['egw_info']['flags']['nocachecontrol']) && is_int($GLOBALS['egw_info']['flags']['nocachecontrol'])) |
| 1565 | 1562 | { |
@@ -1569,7 +1566,7 @@ discard block |
||
| 1569 | 1566 | if (!isset($_SESSION)) |
| 1570 | 1567 | { |
| 1571 | 1568 | // controling caching and expires header |
| 1572 | - if(!isset($expire) && (!isset($GLOBALS['egw_info']['flags']['nocachecontrol']) || |
|
| 1569 | + if (!isset($expire) && (!isset($GLOBALS['egw_info']['flags']['nocachecontrol']) || |
|
| 1573 | 1570 | !$GLOBALS['egw_info']['flags']['nocachecontrol'])) |
| 1574 | 1571 | { |
| 1575 | 1572 | session_cache_limiter('nocache'); |
@@ -1579,7 +1576,7 @@ discard block |
||
| 1579 | 1576 | // allow public caching: proxys, cdns, ... |
| 1580 | 1577 | if (isset($expire)) |
| 1581 | 1578 | { |
| 1582 | - session_cache_expire((int)ceil($expire/60)); // in minutes |
|
| 1579 | + session_cache_expire((int)ceil($expire / 60)); // in minutes |
|
| 1583 | 1580 | } |
| 1584 | 1581 | session_cache_limiter($private ? 'private' : 'public'); |
| 1585 | 1582 | } |
@@ -1592,8 +1589,8 @@ discard block |
||
| 1592 | 1589 | // session already started |
| 1593 | 1590 | if (isset($_SESSION)) |
| 1594 | 1591 | { |
| 1595 | - if ($expire && (session_cache_limiter() !== ($expire===true?'private_no_expire':'public') || |
|
| 1596 | - is_int($expire) && $expire/60 !== session_cache_expire())) |
|
| 1592 | + if ($expire && (session_cache_limiter() !== ($expire === true ? 'private_no_expire' : 'public') || |
|
| 1593 | + is_int($expire) && $expire / 60 !== session_cache_expire())) |
|
| 1597 | 1594 | { |
| 1598 | 1595 | $file = $line = null; |
| 1599 | 1596 | if (headers_sent($file, $line)) |
@@ -1601,20 +1598,20 @@ discard block |
||
| 1601 | 1598 | error_log(__METHOD__."($expire) called, but header already sent in $file: $line"); |
| 1602 | 1599 | return; |
| 1603 | 1600 | } |
| 1604 | - if($expire === true) // same behavior as session_cache_limiter('private_no_expire') |
|
| 1601 | + if ($expire === true) // same behavior as session_cache_limiter('private_no_expire') |
|
| 1605 | 1602 | { |
| 1606 | - header('Cache-Control: private, max-age='.(60*session_cache_expire())); |
|
| 1603 | + header('Cache-Control: private, max-age='.(60 * session_cache_expire())); |
|
| 1607 | 1604 | header_remove('Expires'); |
| 1608 | 1605 | } |
| 1609 | 1606 | elseif ($private) |
| 1610 | 1607 | { |
| 1611 | 1608 | header('Cache-Control: private, max-age='.$expire); |
| 1612 | - header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expire) . ' GMT'); |
|
| 1609 | + header('Expires: '.gmdate('D, d M Y H:i:s', time() + $expire).' GMT'); |
|
| 1613 | 1610 | } |
| 1614 | 1611 | else |
| 1615 | 1612 | { |
| 1616 | 1613 | header('Cache-Control: public, max-age='.$expire); |
| 1617 | - header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expire) . ' GMT'); |
|
| 1614 | + header('Expires: '.gmdate('D, d M Y H:i:s', time() + $expire).' GMT'); |
|
| 1618 | 1615 | } |
| 1619 | 1616 | // remove Pragma header, might be set by old header |
| 1620 | 1617 | if (function_exists('header_remove')) // PHP 5.3+ |
@@ -1639,10 +1636,10 @@ discard block |
||
| 1639 | 1636 | * @param array $filter =array() extra filter for sessions |
| 1640 | 1637 | * @return array with sessions (values for keys as in $sort) |
| 1641 | 1638 | */ |
| 1642 | - public static function session_list($start,$sort='DESC',$order='session_dla',$all_no_sort=False,array $filter=array()) |
|
| 1639 | + public static function session_list($start, $sort = 'DESC', $order = 'session_dla', $all_no_sort = False, array $filter = array()) |
|
| 1643 | 1640 | { |
| 1644 | 1641 | $sessions = array(); |
| 1645 | - if (!preg_match('/^[a-z0-9_ ,]+$/i',$order_by=$order.' '.$sort) || $order_by == ' ') |
|
| 1642 | + if (!preg_match('/^[a-z0-9_ ,]+$/i', $order_by = $order.' '.$sort) || $order_by == ' ') |
|
| 1646 | 1643 | { |
| 1647 | 1644 | $order_by = 'session_dla DESC'; |
| 1648 | 1645 | } |
@@ -1650,7 +1647,7 @@ discard block |
||
| 1650 | 1647 | $filter[] = 'account_id>0'; |
| 1651 | 1648 | $filter[] = 'session_dla > '.(int)(time() - $GLOBALS['egw_info']['server']['sessions_timeout']); |
| 1652 | 1649 | $filter[] = '(notification_heartbeat IS NULL OR notification_heartbeat > '.self::heartbeat_limit().')'; |
| 1653 | - foreach($GLOBALS['egw']->db->select(self::ACCESS_LOG_TABLE, '*', $filter, __LINE__, __FILE__, |
|
| 1650 | + foreach ($GLOBALS['egw']->db->select(self::ACCESS_LOG_TABLE, '*', $filter, __LINE__, __FILE__, |
|
| 1654 | 1651 | $all_no_sort ? false : $start, 'ORDER BY '.$order_by) as $row) |
| 1655 | 1652 | { |
| 1656 | 1653 | $sessions[$row['sessionid']] = $row; |
@@ -1664,7 +1661,7 @@ discard block |
||
| 1664 | 1661 | * @param array $filter =array() extra filter for sessions |
| 1665 | 1662 | * @return int number of active sessions |
| 1666 | 1663 | */ |
| 1667 | - public static function session_count(array $filter=array()) |
|
| 1664 | + public static function session_count(array $filter = array()) |
|
| 1668 | 1665 | { |
| 1669 | 1666 | $filter['lo'] = null; |
| 1670 | 1667 | $filter[] = 'account_id>0'; |
@@ -1680,16 +1677,16 @@ discard block |
||
| 1680 | 1677 | */ |
| 1681 | 1678 | public static function heartbeat_limit() |
| 1682 | 1679 | { |
| 1683 | - static $limit=null; |
|
| 1680 | + static $limit = null; |
|
| 1684 | 1681 | |
| 1685 | 1682 | if (is_null($limit)) |
| 1686 | 1683 | { |
| 1687 | 1684 | $config = Config::read('notifications'); |
| 1688 | - if (!($popup_poll_interval = $config['popup_poll_interval'])) |
|
| 1685 | + if (!($popup_poll_interval = $config['popup_poll_interval'])) |
|
| 1689 | 1686 | { |
| 1690 | 1687 | $popup_poll_interval = 60; |
| 1691 | 1688 | } |
| 1692 | - $limit = (int)(time() - $popup_poll_interval-10); // 10s grace periode |
|
| 1689 | + $limit = (int)(time() - $popup_poll_interval - 10); // 10s grace periode |
|
| 1693 | 1690 | } |
| 1694 | 1691 | return $limit; |
| 1695 | 1692 | } |
@@ -248,7 +248,7 @@ discard block |
||
| 248 | 248 | |
| 249 | 249 | // set session_timeout from global php.ini and default to 14400=4h, if not set |
| 250 | 250 | if (!($GLOBALS['egw_info']['server']['sessions_timeout'] = ini_get('session.gc_maxlifetime'))) |
| 251 | - { |
|
| 251 | + { |
|
| 252 | 252 | ini_set('session.gc_maxlifetime', $GLOBALS['egw_info']['server']['sessions_timeout']=14400); |
| 253 | 253 | } |
| 254 | 254 | } |
@@ -282,7 +282,10 @@ discard block |
||
| 282 | 282 | */ |
| 283 | 283 | function commit_session() |
| 284 | 284 | { |
| 285 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."() sessionid=$this->sessionid, _SESSION[".self::EGW_SESSION_VAR.']='.array2string($_SESSION[self::EGW_SESSION_VAR]).' '.function_backtrace()); |
|
| 285 | + if (self::ERROR_LOG_DEBUG) |
|
| 286 | + { |
|
| 287 | + error_log(__METHOD__."() sessionid=$this->sessionid, _SESSION[".self::EGW_SESSION_VAR.']='.array2string($_SESSION[self::EGW_SESSION_VAR]).' '.function_backtrace()); |
|
| 288 | + } |
|
| 286 | 289 | self::encrypt($this->kp3); |
| 287 | 290 | |
| 288 | 291 | session_write_close(); |
@@ -344,7 +347,10 @@ discard block |
||
| 344 | 347 | */ |
| 345 | 348 | static function log_session_usage(&$arr,$label,$recursion=true,$limit=1000) |
| 346 | 349 | { |
| 347 | - if (!is_array($arr)) return; |
|
| 350 | + if (!is_array($arr)) |
|
| 351 | + { |
|
| 352 | + return; |
|
| 353 | + } |
|
| 348 | 354 | |
| 349 | 355 | $sizes = array(); |
| 350 | 356 | foreach($arr as $key => &$data) |
@@ -359,7 +365,10 @@ discard block |
||
| 359 | 365 | if ($diff > $limit) |
| 360 | 366 | { |
| 361 | 367 | error_log("strlen({$label}[$key])=".Vfs::hsize($size).", diff=".Vfs::hsize($diff)); |
| 362 | - if ($recursion) self::log_session_usage($arr[$key],$label.'['.$key.']',$recursion,$limit); |
|
| 368 | + if ($recursion) |
|
| 369 | + { |
|
| 370 | + self::log_session_usage($arr[$key],$label.'['.$key.']',$recursion,$limit); |
|
| 371 | + } |
|
| 363 | 372 | } |
| 364 | 373 | } |
| 365 | 374 | } |
@@ -457,7 +466,10 @@ discard block |
||
| 457 | 466 | $this->passwd = $passwd; |
| 458 | 467 | $this->passwd_type = $passwd_type; |
| 459 | 468 | } |
| 460 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) starting ..."); |
|
| 469 | + if (self::ERROR_LOG_DEBUG) |
|
| 470 | + { |
|
| 471 | + error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) starting ..."); |
|
| 472 | + } |
|
| 461 | 473 | |
| 462 | 474 | self::split_login_domain($login,$this->account_lid,$this->account_domain); |
| 463 | 475 | // add domain to the login, if not already there |
@@ -501,7 +513,10 @@ discard block |
||
| 501 | 513 | { |
| 502 | 514 | $this->log_access($this->reason,$login,$user_ip,0); // log unsuccessfull login |
| 503 | 515 | } |
| 504 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) UNSUCCESSFULL ($this->reason)"); |
|
| 516 | + if (self::ERROR_LOG_DEBUG) |
|
| 517 | + { |
|
| 518 | + error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) UNSUCCESSFULL ($this->reason)"); |
|
| 519 | + } |
|
| 505 | 520 | return false; |
| 506 | 521 | } |
| 507 | 522 | if ($fail_on_forced_password_change && Auth::check_password_change($this->reason) === false) |
@@ -551,7 +566,10 @@ discard block |
||
| 551 | 566 | $this->reason = 'account is expired'; |
| 552 | 567 | $this->cd_reason = self::CD_ACCOUNT_EXPIRED; |
| 553 | 568 | |
| 554 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) UNSUCCESSFULL ($this->reason)"); |
|
| 569 | + if (self::ERROR_LOG_DEBUG) |
|
| 570 | + { |
|
| 571 | + error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) UNSUCCESSFULL ($this->reason)"); |
|
| 572 | + } |
|
| 555 | 573 | return false; |
| 556 | 574 | } |
| 557 | 575 | |
@@ -575,25 +593,34 @@ discard block |
||
| 575 | 593 | 'passwd' => $this->passwd, |
| 576 | 594 | 'account_domain' => $this->account_domain, |
| 577 | 595 | 'user_ip' => $user_ip, |
| 578 | - ),'',true))) // true = run hooks from all apps, not just the ones the current user has perms to run |
|
| 596 | + ),'',true))) |
|
| 597 | + { |
|
| 598 | + // true = run hooks from all apps, not just the ones the current user has perms to run |
|
| 579 | 599 | { |
| 580 | 600 | foreach($hook_result as $reason) |
| 581 | 601 | { |
| 582 | 602 | if ($reason) // called hook requests to deny the session |
| 583 | 603 | { |
| 584 | 604 | $this->reason = $this->cd_reason = $reason; |
| 605 | + } |
|
| 585 | 606 | $this->log_access($this->reason,$login,$user_ip,0); // log unsuccessfull login |
| 586 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) UNSUCCESSFULL ($this->reason)"); |
|
| 607 | + if (self::ERROR_LOG_DEBUG) |
|
| 608 | + { |
|
| 609 | + error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) UNSUCCESSFULL ($this->reason)"); |
|
| 610 | + } |
|
| 587 | 611 | return false; |
| 588 | 612 | } |
| 589 | 613 | } |
| 590 | 614 | } |
| 591 | 615 | $GLOBALS['egw']->db->transaction_begin(); |
| 592 | 616 | $this->register_session($this->login,$user_ip,$now,$this->session_flags); |
| 593 | - if ($this->session_flags != 'A') // dont log anonymous sessions |
|
| 617 | + if ($this->session_flags != 'A') |
|
| 618 | + { |
|
| 619 | + // dont log anonymous sessions |
|
| 594 | 620 | { |
| 595 | 621 | $this->sessionid_access_log = $this->log_access($this->sessionid,$login,$user_ip,$this->account_id); |
| 596 | 622 | } |
| 623 | + } |
|
| 597 | 624 | Cache::setSession('phpgwapi', 'account_previous_login', $GLOBALS['egw']->auth->previous_login); |
| 598 | 625 | $GLOBALS['egw']->accounts->update_lastlogin($this->account_id,$user_ip); |
| 599 | 626 | $GLOBALS['egw']->db->transaction_commit(); |
@@ -609,7 +636,10 @@ discard block |
||
| 609 | 636 | self::egw_setcookie('last_loginid', $this->account_lid ,$now+1209600); /* For 2 weeks */ |
| 610 | 637 | self::egw_setcookie('last_domain',$this->account_domain,$now+1209600); |
| 611 | 638 | } |
| 612 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) successfull sessionid=$this->sessionid"); |
|
| 639 | + if (self::ERROR_LOG_DEBUG) |
|
| 640 | + { |
|
| 641 | + error_log(__METHOD__."($this->login,$this->passwd,$this->passwd_type,$no_session,$auth_check) successfull sessionid=$this->sessionid"); |
|
| 642 | + } |
|
| 613 | 643 | |
| 614 | 644 | return $this->sessionid; |
| 615 | 645 | } |
@@ -763,10 +793,13 @@ discard block |
||
| 763 | 793 | //error_log(__METHOD__."('$login', '$ip') false_ip=$false_ip, false_id=$false_id --> blocked=".array2string($blocked)); |
| 764 | 794 | |
| 765 | 795 | if ($blocked && $GLOBALS['egw_info']['server']['admin_mails'] && |
| 766 | - $GLOBALS['egw_info']['server']['login_blocked_mail_time'] < time()-5*60) // max. one mail every 5mins |
|
| 796 | + $GLOBALS['egw_info']['server']['login_blocked_mail_time'] < time()-5*60) |
|
| 797 | + { |
|
| 798 | + // max. one mail every 5mins |
|
| 767 | 799 | { |
| 768 | 800 | try { |
| 769 | 801 | $mailer = new Mailer(); |
| 802 | + } |
|
| 770 | 803 | // notify admin(s) via email |
| 771 | 804 | $mailer->setFrom('eGroupWare@'.$GLOBALS['egw_info']['server']['mail_suffix']); |
| 772 | 805 | $mailer->addHeader('Subject', lang("eGroupWare: login blocked for user '%1', IP %2",$login,$ip)); |
@@ -844,7 +877,10 @@ discard block |
||
| 844 | 877 | { |
| 845 | 878 | $sessionid = false; |
| 846 | 879 | } |
| 847 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."() _SERVER[REQUEST_URI]='$_SERVER[REQUEST_URI]' returning ".print_r($sessionid,true)); |
|
| 880 | + if (self::ERROR_LOG_DEBUG) |
|
| 881 | + { |
|
| 882 | + error_log(__METHOD__."() _SERVER[REQUEST_URI]='$_SERVER[REQUEST_URI]' returning ".print_r($sessionid,true)); |
|
| 883 | + } |
|
| 848 | 884 | return $sessionid; |
| 849 | 885 | } |
| 850 | 886 | |
@@ -874,7 +910,10 @@ discard block |
||
| 874 | 910 | */ |
| 875 | 911 | function verify($sessionid=null,$kp3=null) |
| 876 | 912 | { |
| 877 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."('$sessionid','$kp3') ".function_backtrace()); |
|
| 913 | + if (self::ERROR_LOG_DEBUG) |
|
| 914 | + { |
|
| 915 | + error_log(__METHOD__."('$sessionid','$kp3') ".function_backtrace()); |
|
| 916 | + } |
|
| 878 | 917 | |
| 879 | 918 | $fill_egw_info_and_repositories = !$GLOBALS['egw_info']['flags']['restored_from_session']; |
| 880 | 919 | |
@@ -890,7 +929,10 @@ discard block |
||
| 890 | 929 | |
| 891 | 930 | if (!$this->sessionid) |
| 892 | 931 | { |
| 893 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."('$sessionid') get_sessionid()='".self::get_sessionid()."' No session ID"); |
|
| 932 | + if (self::ERROR_LOG_DEBUG) |
|
| 933 | + { |
|
| 934 | + error_log(__METHOD__."('$sessionid') get_sessionid()='".self::get_sessionid()."' No session ID"); |
|
| 935 | + } |
|
| 894 | 936 | return false; |
| 895 | 937 | } |
| 896 | 938 | |
@@ -902,14 +944,20 @@ discard block |
||
| 902 | 944 | // check if we have a eGroupware session --> return false if not (but dont destroy it!) |
| 903 | 945 | if (is_null($_SESSION) || !isset($_SESSION[self::EGW_SESSION_VAR])) |
| 904 | 946 | { |
| 905 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."('$sessionid') session does NOT exist!"); |
|
| 947 | + if (self::ERROR_LOG_DEBUG) |
|
| 948 | + { |
|
| 949 | + error_log(__METHOD__."('$sessionid') session does NOT exist!"); |
|
| 950 | + } |
|
| 906 | 951 | return false; |
| 907 | 952 | } |
| 908 | 953 | $session =& $_SESSION[self::EGW_SESSION_VAR]; |
| 909 | 954 | |
| 910 | 955 | if ($session['session_dla'] <= time() - $GLOBALS['egw_info']['server']['sessions_timeout']) |
| 911 | 956 | { |
| 912 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."('$sessionid') session timed out!"); |
|
| 957 | + if (self::ERROR_LOG_DEBUG) |
|
| 958 | + { |
|
| 959 | + error_log(__METHOD__."('$sessionid') session timed out!"); |
|
| 960 | + } |
|
| 913 | 961 | $this->destroy($sessionid,$kp3); |
| 914 | 962 | return false; |
| 915 | 963 | } |
@@ -937,7 +985,10 @@ discard block |
||
| 937 | 985 | $this->account_id = $GLOBALS['egw']->accounts->name2id($this->account_lid,'account_lid','u'); |
| 938 | 986 | if (!$this->account_id) |
| 939 | 987 | { |
| 940 | - if (self::ERROR_LOG_DEBUG) error_log("*** Session::verify($sessionid) !accounts::name2id('$this->account_lid')"); |
|
| 988 | + if (self::ERROR_LOG_DEBUG) |
|
| 989 | + { |
|
| 990 | + error_log("*** Session::verify($sessionid) !accounts::name2id('$this->account_lid')"); |
|
| 991 | + } |
|
| 941 | 992 | return false; |
| 942 | 993 | } |
| 943 | 994 | |
@@ -955,7 +1006,10 @@ discard block |
||
| 955 | 1006 | |
| 956 | 1007 | if ($GLOBALS['egw']->accounts->is_expired($GLOBALS['egw_info']['user'])) |
| 957 | 1008 | { |
| 958 | - if (self::ERROR_LOG_DEBUG) error_log("*** Session::verify($sessionid) accounts is expired"); |
|
| 1009 | + if (self::ERROR_LOG_DEBUG) |
|
| 1010 | + { |
|
| 1011 | + error_log("*** Session::verify($sessionid) accounts is expired"); |
|
| 1012 | + } |
|
| 959 | 1013 | return false; |
| 960 | 1014 | } |
| 961 | 1015 | $this->passwd = base64_decode(Cache::getSession('phpgwapi', 'password')); |
@@ -966,7 +1020,10 @@ discard block |
||
| 966 | 1020 | } |
| 967 | 1021 | if ($this->account_domain != $GLOBALS['egw_info']['user']['domain']) |
| 968 | 1022 | { |
| 969 | - if (self::ERROR_LOG_DEBUG) error_log("*** Session::verify($sessionid) wrong domain"); |
|
| 1023 | + if (self::ERROR_LOG_DEBUG) |
|
| 1024 | + { |
|
| 1025 | + error_log("*** Session::verify($sessionid) wrong domain"); |
|
| 1026 | + } |
|
| 970 | 1027 | return false; |
| 971 | 1028 | } |
| 972 | 1029 | |
@@ -975,7 +1032,10 @@ discard block |
||
| 975 | 1032 | if (strtoupper(substr(PHP_OS,0,3)) != 'WIN' && (!$GLOBALS['egw_info']['user']['session_ip'] || |
| 976 | 1033 | $GLOBALS['egw_info']['user']['session_ip'] != $this->getuser_ip())) |
| 977 | 1034 | { |
| 978 | - if (self::ERROR_LOG_DEBUG) error_log("*** Session::verify($sessionid) wrong IP"); |
|
| 1035 | + if (self::ERROR_LOG_DEBUG) |
|
| 1036 | + { |
|
| 1037 | + error_log("*** Session::verify($sessionid) wrong IP"); |
|
| 1038 | + } |
|
| 979 | 1039 | return false; |
| 980 | 1040 | } |
| 981 | 1041 | } |
@@ -988,7 +1048,10 @@ discard block |
||
| 988 | 1048 | } |
| 989 | 1049 | if (!$this->account_lid) |
| 990 | 1050 | { |
| 991 | - if (self::ERROR_LOG_DEBUG) error_log("*** Session::verify($sessionid) !account_lid"); |
|
| 1051 | + if (self::ERROR_LOG_DEBUG) |
|
| 1052 | + { |
|
| 1053 | + error_log("*** Session::verify($sessionid) !account_lid"); |
|
| 1054 | + } |
|
| 992 | 1055 | return false; |
| 993 | 1056 | } |
| 994 | 1057 | |
@@ -1007,13 +1070,19 @@ discard block |
||
| 1007 | 1070 | $_REQUEST[self::EGW_SESSION_NAME] === $this->sessionid && |
| 1008 | 1071 | (!isset($_COOKIE[self::EGW_SESSION_NAME]) || $_COOKIE[self::EGW_SESSION_NAME] !== $_REQUEST[self::EGW_SESSION_NAME])) |
| 1009 | 1072 | { |
| 1010 | - if (self::ERROR_LOG_DEBUG) error_log("--> Session::verify($sessionid) SUCCESS, but NO required cookies set --> setting them now"); |
|
| 1073 | + if (self::ERROR_LOG_DEBUG) |
|
| 1074 | + { |
|
| 1075 | + error_log("--> Session::verify($sessionid) SUCCESS, but NO required cookies set --> setting them now"); |
|
| 1076 | + } |
|
| 1011 | 1077 | self::egw_setcookie(self::EGW_SESSION_NAME,$this->sessionid); |
| 1012 | 1078 | self::egw_setcookie('kp3',$this->kp3); |
| 1013 | 1079 | self::egw_setcookie('domain',$this->account_domain); |
| 1014 | 1080 | } |
| 1015 | 1081 | |
| 1016 | - if (self::ERROR_LOG_DEBUG) error_log("--> Session::verify($sessionid) SUCCESS"); |
|
| 1082 | + if (self::ERROR_LOG_DEBUG) |
|
| 1083 | + { |
|
| 1084 | + error_log("--> Session::verify($sessionid) SUCCESS"); |
|
| 1085 | + } |
|
| 1017 | 1086 | |
| 1018 | 1087 | return true; |
| 1019 | 1088 | } |
@@ -1033,14 +1102,20 @@ discard block |
||
| 1033 | 1102 | } |
| 1034 | 1103 | $this->log_access($sessionid); // log logout-time |
| 1035 | 1104 | |
| 1036 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($sessionid,$kp3)"); |
|
| 1105 | + if (self::ERROR_LOG_DEBUG) |
|
| 1106 | + { |
|
| 1107 | + error_log(__METHOD__."($sessionid,$kp3)"); |
|
| 1108 | + } |
|
| 1037 | 1109 | |
| 1038 | - if (is_numeric($sessionid)) // do we have a access-log-id --> get PHP session id |
|
| 1110 | + if (is_numeric($sessionid)) |
|
| 1111 | + { |
|
| 1112 | + // do we have a access-log-id --> get PHP session id |
|
| 1039 | 1113 | { |
| 1040 | 1114 | $sessionid = $GLOBALS['egw']->db->select(self::ACCESS_LOG_TABLE,'session_php',array( |
| 1041 | 1115 | 'sessionid' => $sessionid, |
| 1042 | 1116 | ),__LINE__,__FILE__)->fetchColumn(); |
| 1043 | 1117 | } |
| 1118 | + } |
|
| 1044 | 1119 | |
| 1045 | 1120 | Hooks::process(array( |
| 1046 | 1121 | 'location' => 'session_destroyed', |
@@ -1050,7 +1125,10 @@ discard block |
||
| 1050 | 1125 | // Only do the following, if where working with the current user |
| 1051 | 1126 | if (!$GLOBALS['egw_info']['user']['sessionid'] || $sessionid == $GLOBALS['egw_info']['user']['sessionid']) |
| 1052 | 1127 | { |
| 1053 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__." ********* about to call session_destroy!"); |
|
| 1128 | + if (self::ERROR_LOG_DEBUG) |
|
| 1129 | + { |
|
| 1130 | + error_log(__METHOD__." ********* about to call session_destroy!"); |
|
| 1131 | + } |
|
| 1054 | 1132 | session_unset(); |
| 1055 | 1133 | @session_destroy(); |
| 1056 | 1134 | // we need to (re-)load the eGW session-handler, as session_destroy unloads custom session-handlers |
@@ -1145,7 +1223,10 @@ discard block |
||
| 1145 | 1223 | } |
| 1146 | 1224 | else |
| 1147 | 1225 | { |
| 1148 | - if ($othervars) $extravars .= ($extravars?'&':'').$othervars; |
|
| 1226 | + if ($othervars) |
|
| 1227 | + { |
|
| 1228 | + $extravars .= ($extravars?'&':'').$othervars; |
|
| 1229 | + } |
|
| 1149 | 1230 | } |
| 1150 | 1231 | |
| 1151 | 1232 | // parse extravars string into the vars array |
@@ -1154,7 +1235,11 @@ discard block |
||
| 1154 | 1235 | foreach(explode('&',$extravars) as $expr) |
| 1155 | 1236 | { |
| 1156 | 1237 | list($var,$val) = explode('=', $expr,2); |
| 1157 | - if (strpos($val,'%26') != false) $val = str_replace('%26','&',$val); // make sure to not double encode & |
|
| 1238 | + if (strpos($val,'%26') != false) |
|
| 1239 | + { |
|
| 1240 | + $val = str_replace('%26','&',$val); |
|
| 1241 | + } |
|
| 1242 | + // make sure to not double encode & |
|
| 1158 | 1243 | if (substr($var,-2) == '[]') |
| 1159 | 1244 | { |
| 1160 | 1245 | $vars[substr($var,0,-2)][] = $val; |
@@ -1235,14 +1320,22 @@ discard block |
||
| 1235 | 1320 | { |
| 1236 | 1321 | self::set_cookiedomain(); |
| 1237 | 1322 | } |
| 1238 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."($cookiename,$cookievalue,$cookietime,$cookiepath,".self::$cookie_domain.")"); |
|
| 1323 | + if (self::ERROR_LOG_DEBUG) |
|
| 1324 | + { |
|
| 1325 | + error_log(__METHOD__."($cookiename,$cookievalue,$cookietime,$cookiepath,".self::$cookie_domain.")"); |
|
| 1326 | + } |
|
| 1239 | 1327 | |
| 1240 | 1328 | // if we are installed in iOS as web-app, we must not set a cookietime==0 (session-cookie), |
| 1241 | 1329 | // as every change between apps will cause the cookie to get lost |
| 1242 | 1330 | static $is_iOS = null; |
| 1243 | - if (!$cookietime && !isset($is_iOS)) $is_iOS = (bool)preg_match('/^(iPhone|iPad|iPod)/i', Header\UserAgent::mobile()); |
|
| 1331 | + if (!$cookietime && !isset($is_iOS)) |
|
| 1332 | + { |
|
| 1333 | + $is_iOS = (bool)preg_match('/^(iPhone|iPad|iPod)/i', Header\UserAgent::mobile()); |
|
| 1334 | + } |
|
| 1244 | 1335 | |
| 1245 | - if(!headers_sent()) // gives only a warning, but can not send the cookie anyway |
|
| 1336 | + if(!headers_sent()) |
|
| 1337 | + { |
|
| 1338 | + // gives only a warning, but can not send the cookie anyway |
|
| 1246 | 1339 | { |
| 1247 | 1340 | setcookie($cookiename, $cookievalue, |
| 1248 | 1341 | !$cookietime && $is_iOS ? time()+self::IOS_SESSION_COOKIE_LIFETIME : $cookietime, |
@@ -1250,6 +1343,7 @@ discard block |
||
| 1250 | 1343 | // if called via HTTPS, only send cookie for https and only allow cookie access via HTTP (true) |
| 1251 | 1344 | empty($GLOBALS['egw_info']['server']['insecure_cookies']) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off', true); |
| 1252 | 1345 | } |
| 1346 | + } |
|
| 1253 | 1347 | } |
| 1254 | 1348 | |
| 1255 | 1349 | /** |
@@ -1301,15 +1395,25 @@ discard block |
||
| 1301 | 1395 | */ |
| 1302 | 1396 | public static function search_instance($login,$domain_requested,&$default_domain,$server_names,array $domains=null) |
| 1303 | 1397 | { |
| 1304 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."('$login','$domain_requested',".array2string($default_domain).".".array2string($server_names).".".array2string($domains).")"); |
|
| 1398 | + if (self::ERROR_LOG_DEBUG) |
|
| 1399 | + { |
|
| 1400 | + error_log(__METHOD__."('$login','$domain_requested',".array2string($default_domain).".".array2string($server_names).".".array2string($domains).")"); |
|
| 1401 | + } |
|
| 1305 | 1402 | |
| 1306 | - if (is_null($domains)) $domains = $GLOBALS['egw_domain']; |
|
| 1403 | + if (is_null($domains)) |
|
| 1404 | + { |
|
| 1405 | + $domains = $GLOBALS['egw_domain']; |
|
| 1406 | + } |
|
| 1307 | 1407 | |
| 1308 | - if (!isset($default_domain) || !isset($domains[$default_domain])) // allow to overwrite the default domain |
|
| 1408 | + if (!isset($default_domain) || !isset($domains[$default_domain])) |
|
| 1409 | + { |
|
| 1410 | + // allow to overwrite the default domain |
|
| 1309 | 1411 | { |
| 1310 | 1412 | foreach((array)$server_names as $server_name) |
| 1311 | 1413 | { |
| 1312 | - list($server_name) = explode(':', $server_name); // remove port from HTTP_HOST |
|
| 1414 | + list($server_name) = explode(':', $server_name); |
|
| 1415 | + } |
|
| 1416 | + // remove port from HTTP_HOST |
|
| 1313 | 1417 | if(isset($domains[$server_name])) |
| 1314 | 1418 | { |
| 1315 | 1419 | $default_domain = $server_name; |
@@ -1334,11 +1438,14 @@ discard block |
||
| 1334 | 1438 | } |
| 1335 | 1439 | } |
| 1336 | 1440 | } |
| 1337 | - if (isset($login)) // on login |
|
| 1441 | + if (isset($login)) |
|
| 1442 | + { |
|
| 1443 | + // on login |
|
| 1338 | 1444 | { |
| 1339 | 1445 | if (strpos($login,'@') === false || count($domains) == 1) |
| 1340 | 1446 | { |
| 1341 | 1447 | $login .= '@' . (isset($_POST['logindomain']) ? $_POST['logindomain'] : $default_domain); |
| 1448 | + } |
|
| 1342 | 1449 | } |
| 1343 | 1450 | $parts = explode('@',$login); |
| 1344 | 1451 | $domain = array_pop($parts); |
@@ -1352,7 +1459,10 @@ discard block |
||
| 1352 | 1459 | { |
| 1353 | 1460 | $domain = $default_domain; |
| 1354 | 1461 | } |
| 1355 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."() default_domain=".array2string($default_domain).', login='.array2string($login)." returning ".array2string($domain)); |
|
| 1462 | + if (self::ERROR_LOG_DEBUG) |
|
| 1463 | + { |
|
| 1464 | + error_log(__METHOD__."() default_domain=".array2string($default_domain).', login='.array2string($login)." returning ".array2string($domain)); |
|
| 1465 | + } |
|
| 1356 | 1466 | |
| 1357 | 1467 | return $domain; |
| 1358 | 1468 | } |
@@ -1379,7 +1489,10 @@ discard block |
||
| 1379 | 1489 | $action = $_SERVER['PHP_SELF']; |
| 1380 | 1490 | // remove EGroupware path, if not installed in webroot |
| 1381 | 1491 | $egw_path = $GLOBALS['egw_info']['server']['webserver_url']; |
| 1382 | - if ($egw_path[0] != '/') $egw_path = parse_url($egw_path,PHP_URL_PATH); |
|
| 1492 | + if ($egw_path[0] != '/') |
|
| 1493 | + { |
|
| 1494 | + $egw_path = parse_url($egw_path,PHP_URL_PATH); |
|
| 1495 | + } |
|
| 1383 | 1496 | if ($action == '/Microsoft-Server-ActiveSync') |
| 1384 | 1497 | { |
| 1385 | 1498 | $action .= '?Cmd='.$_GET['Cmd'].'&DeviceId='.$_GET['DeviceId']; |
@@ -1404,7 +1517,10 @@ discard block |
||
| 1404 | 1517 | |
| 1405 | 1518 | $_SESSION[self::EGW_SESSION_VAR]['session_dla'] = time(); |
| 1406 | 1519 | $_SESSION[self::EGW_SESSION_VAR]['session_action'] = $action; |
| 1407 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__.'() _SESSION['.self::EGW_SESSION_VAR.']='.array2string($_SESSION[self::EGW_SESSION_VAR])); |
|
| 1520 | + if (self::ERROR_LOG_DEBUG) |
|
| 1521 | + { |
|
| 1522 | + error_log(__METHOD__.'() _SESSION['.self::EGW_SESSION_VAR.']='.array2string($_SESSION[self::EGW_SESSION_VAR])); |
|
| 1523 | + } |
|
| 1408 | 1524 | |
| 1409 | 1525 | return $action; |
| 1410 | 1526 | } |
@@ -1530,7 +1646,10 @@ discard block |
||
| 1530 | 1646 | */ |
| 1531 | 1647 | public static function init_handler() |
| 1532 | 1648 | { |
| 1533 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__.'() session_handler='.self::$session_handler.', egw_info[server][session_handler]='.$GLOBALS['egw_info']['server']['session_handler'].' called from:'.function_backtrace()); |
|
| 1649 | + if (self::ERROR_LOG_DEBUG) |
|
| 1650 | + { |
|
| 1651 | + error_log(__METHOD__.'() session_handler='.self::$session_handler.', egw_info[server][session_handler]='.$GLOBALS['egw_info']['server']['session_handler'].' called from:'.function_backtrace()); |
|
| 1652 | + } |
|
| 1534 | 1653 | |
| 1535 | 1654 | ini_set('session.use_cookies',0); // disable the automatic use of cookies, as it uses the path / by default |
| 1536 | 1655 | session_name(self::EGW_SESSION_NAME); |
@@ -1540,10 +1659,16 @@ discard block |
||
| 1540 | 1659 | self::cache_control(); |
| 1541 | 1660 | $ok = session_start(); |
| 1542 | 1661 | self::decrypt(); |
| 1543 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."() sessionid=$sessionid, _SESSION[".self::EGW_SESSION_VAR.']='.array2string($_SESSION[self::EGW_SESSION_VAR])); |
|
| 1662 | + if (self::ERROR_LOG_DEBUG) |
|
| 1663 | + { |
|
| 1664 | + error_log(__METHOD__."() sessionid=$sessionid, _SESSION[".self::EGW_SESSION_VAR.']='.array2string($_SESSION[self::EGW_SESSION_VAR])); |
|
| 1665 | + } |
|
| 1544 | 1666 | return $ok; |
| 1545 | 1667 | } |
| 1546 | - if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."() no active session!"); |
|
| 1668 | + if (self::ERROR_LOG_DEBUG) |
|
| 1669 | + { |
|
| 1670 | + error_log(__METHOD__."() no active session!"); |
|
| 1671 | + } |
|
| 1547 | 1672 | |
| 1548 | 1673 | return false; |
| 1549 | 1674 | } |
@@ -1601,9 +1726,12 @@ discard block |
||
| 1601 | 1726 | error_log(__METHOD__."($expire) called, but header already sent in $file: $line"); |
| 1602 | 1727 | return; |
| 1603 | 1728 | } |
| 1604 | - if($expire === true) // same behavior as session_cache_limiter('private_no_expire') |
|
| 1729 | + if($expire === true) |
|
| 1730 | + { |
|
| 1731 | + // same behavior as session_cache_limiter('private_no_expire') |
|
| 1605 | 1732 | { |
| 1606 | 1733 | header('Cache-Control: private, max-age='.(60*session_cache_expire())); |
| 1734 | + } |
|
| 1607 | 1735 | header_remove('Expires'); |
| 1608 | 1736 | } |
| 1609 | 1737 | elseif ($private) |
@@ -1617,10 +1745,13 @@ discard block |
||
| 1617 | 1745 | header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expire) . ' GMT'); |
| 1618 | 1746 | } |
| 1619 | 1747 | // remove Pragma header, might be set by old header |
| 1620 | - if (function_exists('header_remove')) // PHP 5.3+ |
|
| 1748 | + if (function_exists('header_remove')) |
|
| 1749 | + { |
|
| 1750 | + // PHP 5.3+ |
|
| 1621 | 1751 | { |
| 1622 | 1752 | header_remove('Pragma'); |
| 1623 | 1753 | } |
| 1754 | + } |
|
| 1624 | 1755 | else |
| 1625 | 1756 | { |
| 1626 | 1757 | header('Pragma:'); |
@@ -366,7 +366,7 @@ discard block |
||
| 366 | 366 | * @param string $join ='' sql to do a join, added as is after the table-name, eg. ", table2 WHERE x=y" or |
| 367 | 367 | * "LEFT JOIN table2 ON (x=y)", Note: there's no quoting done on $join! |
| 368 | 368 | * @param boolean $need_full_no_count =false If true an unlimited query is run to determine the total number of rows, default false |
| 369 | - * @param mixed $only_keys =false, see search |
|
| 369 | + * @param boolean $only_keys =false, see search |
|
| 370 | 370 | * @param string|array $extra_cols =array() |
| 371 | 371 | * @return int total number of rows |
| 372 | 372 | */ |
@@ -734,7 +734,7 @@ discard block |
||
| 734 | 734 | * Check if cf is stored as 1:N relation in DB and array in memory |
| 735 | 735 | * |
| 736 | 736 | * @param string $name |
| 737 | - * @return string |
|
| 737 | + * @return boolean |
|
| 738 | 738 | */ |
| 739 | 739 | function is_multiple($name) |
| 740 | 740 | { |
@@ -210,12 +210,12 @@ |
||
| 210 | 210 | } |
| 211 | 211 | |
| 212 | 212 | /** |
| 213 | - * saves custom field data |
|
| 214 | - * |
|
| 215 | - * @param array $data data to save (cf's have to be prefixed with self::CF_PREFIX = #) |
|
| 216 | - * @param array $extra_cols =array() extra-data to be saved |
|
| 217 | - * @return bool false on success, errornumber on failure |
|
| 218 | - */ |
|
| 213 | + * saves custom field data |
|
| 214 | + * |
|
| 215 | + * @param array $data data to save (cf's have to be prefixed with self::CF_PREFIX = #) |
|
| 216 | + * @param array $extra_cols =array() extra-data to be saved |
|
| 217 | + * @return bool false on success, errornumber on failure |
|
| 218 | + */ |
|
| 219 | 219 | function save_customfields($data, array $extra_cols=array()) |
| 220 | 220 | { |
| 221 | 221 | foreach (array_keys((array)$this->customfields) as $name) |
@@ -118,41 +118,41 @@ discard block |
||
| 118 | 118 | * @param boolean $allow_multiple_values =false should we allow AND store multiple values (1:N relations) |
| 119 | 119 | * @param string $timestamp_type =null default null=leave them as is, 'ts'|'integer' use integer unix timestamps, 'object' use DateTime objects |
| 120 | 120 | */ |
| 121 | - function __construct($app,$table,$extra_table,$column_prefix='', |
|
| 122 | - $extra_key='_name',$extra_value='_value',$extra_id='_id', |
|
| 123 | - Db $db=null,$no_clone=true,$allow_multiple_values=false,$timestamp_type=null) |
|
| 121 | + function __construct($app, $table, $extra_table, $column_prefix = '', |
|
| 122 | + $extra_key = '_name', $extra_value = '_value', $extra_id = '_id', |
|
| 123 | + Db $db = null, $no_clone = true, $allow_multiple_values = false, $timestamp_type = null) |
|
| 124 | 124 | { |
| 125 | 125 | // calling the Storage\Base constructor |
| 126 | - parent::__construct($app,$table,$db,$column_prefix,$no_clone,$timestamp_type); |
|
| 126 | + parent::__construct($app, $table, $db, $column_prefix, $no_clone, $timestamp_type); |
|
| 127 | 127 | |
| 128 | 128 | $this->allow_multiple_values = $allow_multiple_values; |
| 129 | 129 | $this->extra_table = $extra_table; |
| 130 | - if (!$this->extra_id) $this->extra_id = $this->autoinc_id; // default to auto id of regular table |
|
| 130 | + if (!$this->extra_id) $this->extra_id = $this->autoinc_id; // default to auto id of regular table |
|
| 131 | 131 | |
| 132 | 132 | // if names from columns of extra table are only postfixes (starting with _), prepend column prefix |
| 133 | - if (!($prefix=$column_prefix)) |
|
| 133 | + if (!($prefix = $column_prefix)) |
|
| 134 | 134 | { |
| 135 | - list($prefix) = explode('_',$this->autoinc_id); |
|
| 135 | + list($prefix) = explode('_', $this->autoinc_id); |
|
| 136 | 136 | } |
| 137 | - elseif(substr($prefix,-1) == '_') |
|
| 137 | + elseif (substr($prefix, -1) == '_') |
|
| 138 | 138 | { |
| 139 | - $prefix = substr($prefix,0,-1); // remove trailing underscore from column prefix parameter |
|
| 139 | + $prefix = substr($prefix, 0, -1); // remove trailing underscore from column prefix parameter |
|
| 140 | 140 | } |
| 141 | - foreach(array( |
|
| 141 | + foreach (array( |
|
| 142 | 142 | 'extra_id' => $extra_id, |
| 143 | 143 | 'extra_key' => $extra_key, |
| 144 | 144 | 'extra_value' => $extra_value |
| 145 | 145 | ) as $col => $val) |
| 146 | 146 | { |
| 147 | 147 | $this->$col = $col_name = $val; |
| 148 | - if ($col_name[0] == '_') $this->$col = $prefix . $val; |
|
| 148 | + if ($col_name[0] == '_') $this->$col = $prefix.$val; |
|
| 149 | 149 | } |
| 150 | 150 | // some sanity checks, maybe they should be active only for development |
| 151 | - if (!($extra_defs = $this->db->get_table_definitions($app,$extra_table))) |
|
| 151 | + if (!($extra_defs = $this->db->get_table_definitions($app, $extra_table))) |
|
| 152 | 152 | { |
| 153 | 153 | throw new Exception\WrongParameter("extra table $extra_table is NOT defined!"); |
| 154 | 154 | } |
| 155 | - foreach(array('extra_id','extra_key','extra_value') as $col) |
|
| 155 | + foreach (array('extra_id', 'extra_key', 'extra_value') as $col) |
|
| 156 | 156 | { |
| 157 | 157 | if (!$this->$col || !isset($extra_defs['fd'][$this->$col])) |
| 158 | 158 | { |
@@ -177,23 +177,23 @@ discard block |
||
| 177 | 177 | * @param array $field_names =null custom fields to read, default all |
| 178 | 178 | * @return array id => $this->cf_field(name) => value |
| 179 | 179 | */ |
| 180 | - function read_customfields($ids,$field_names=null) |
|
| 180 | + function read_customfields($ids, $field_names = null) |
|
| 181 | 181 | { |
| 182 | 182 | if (is_null($field_names)) $field_names = array_keys($this->customfields); |
| 183 | 183 | |
| 184 | - foreach((array)$ids as $key => $id) |
|
| 184 | + foreach ((array)$ids as $key => $id) |
|
| 185 | 185 | { |
| 186 | 186 | if (!(int)$id && is_array($ids)) unset($ids[$key]); |
| 187 | 187 | } |
| 188 | - if (!$ids || !$field_names) return array(); // nothing to do |
|
| 188 | + if (!$ids || !$field_names) return array(); // nothing to do |
|
| 189 | 189 | |
| 190 | 190 | $entries = array(); |
| 191 | - foreach($this->db->select($this->extra_table,'*',array( |
|
| 191 | + foreach ($this->db->select($this->extra_table, '*', array( |
|
| 192 | 192 | $this->extra_id => $ids, |
| 193 | 193 | $this->extra_key => $field_names, |
| 194 | - ),__LINE__,__FILE__,false,'',$this->app) as $row) |
|
| 194 | + ), __LINE__, __FILE__, false, '', $this->app) as $row) |
|
| 195 | 195 | { |
| 196 | - $entry =& $entries[$row[$this->extra_id]]; |
|
| 196 | + $entry = & $entries[$row[$this->extra_id]]; |
|
| 197 | 197 | if (!is_array($entry)) $entry = array(); |
| 198 | 198 | $field = $this->get_cf_field($row[$this->extra_key]); |
| 199 | 199 | |
@@ -216,7 +216,7 @@ discard block |
||
| 216 | 216 | * @param array $extra_cols =array() extra-data to be saved |
| 217 | 217 | * @return bool false on success, errornumber on failure |
| 218 | 218 | */ |
| 219 | - function save_customfields($data, array $extra_cols=array()) |
|
| 219 | + function save_customfields($data, array $extra_cols = array()) |
|
| 220 | 220 | { |
| 221 | 221 | foreach (array_keys((array)$this->customfields) as $name) |
| 222 | 222 | { |
@@ -229,22 +229,21 @@ discard block |
||
| 229 | 229 | $is_multiple = $this->is_multiple($name); |
| 230 | 230 | |
| 231 | 231 | // we explicitly need to delete fields, if value is empty or field allows multiple values or we have no unique index |
| 232 | - if(empty($data[$field]) || $is_multiple || !$this->extra_has_unique_index) |
|
| 232 | + if (empty($data[$field]) || $is_multiple || !$this->extra_has_unique_index) |
|
| 233 | 233 | { |
| 234 | - $this->db->delete($this->extra_table,$where,__LINE__,__FILE__,$this->app); |
|
| 235 | - if (empty($data[$field])) continue; // nothing else to do for empty values |
|
| 234 | + $this->db->delete($this->extra_table, $where, __LINE__, __FILE__, $this->app); |
|
| 235 | + if (empty($data[$field])) continue; // nothing else to do for empty values |
|
| 236 | 236 | } |
| 237 | - foreach($is_multiple && !is_array($data[$field]) ? explode(',',$data[$field]) : |
|
| 238 | - // regular custom fields (!$is_multiple) eg. addressbook store multiple values comma-separated |
|
| 237 | + foreach ($is_multiple && !is_array($data[$field]) ? explode(',', $data[$field]) : // regular custom fields (!$is_multiple) eg. addressbook store multiple values comma-separated |
|
| 239 | 238 | (array)(!$is_multiple && is_array($data[$field]) ? implode(',', $data[$field]) : $data[$field]) as $value) |
| 240 | 239 | { |
| 241 | - if (!$this->db->insert($this->extra_table,array($this->extra_value => $value)+$extra_cols,$where,__LINE__,__FILE__,$this->app)) |
|
| 240 | + if (!$this->db->insert($this->extra_table, array($this->extra_value => $value) + $extra_cols, $where, __LINE__, __FILE__, $this->app)) |
|
| 242 | 241 | { |
| 243 | 242 | return $this->db->Errno; |
| 244 | 243 | } |
| 245 | 244 | } |
| 246 | 245 | } |
| 247 | - return false; // no error |
|
| 246 | + return false; // no error |
|
| 248 | 247 | } |
| 249 | 248 | |
| 250 | 249 | /** |
@@ -260,7 +259,7 @@ discard block |
||
| 260 | 259 | |
| 261 | 260 | if ($this->customfields) |
| 262 | 261 | { |
| 263 | - foreach(array_keys($this->customfields) as $name) |
|
| 262 | + foreach (array_keys($this->customfields) as $name) |
|
| 264 | 263 | { |
| 265 | 264 | if (isset($new[$field = $this->get_cf_field($name)])) |
| 266 | 265 | { |
@@ -280,16 +279,16 @@ discard block |
||
| 280 | 279 | * @param string $join sql to do a join, added as is after the table-name, eg. ", table2 WHERE x=y" or |
| 281 | 280 | * @return array|boolean data if row could be retrived else False |
| 282 | 281 | */ |
| 283 | - function read($keys,$extra_cols='',$join='') |
|
| 282 | + function read($keys, $extra_cols = '', $join = '') |
|
| 284 | 283 | { |
| 285 | - if (!parent::read($keys,$extra_cols,$join)) |
|
| 284 | + if (!parent::read($keys, $extra_cols, $join)) |
|
| 286 | 285 | { |
| 287 | 286 | return false; |
| 288 | 287 | } |
| 289 | 288 | if (($id = (int)$this->data[$this->db_key_cols[$this->autoinc_id]]) && $this->customfields && |
| 290 | 289 | ($cfs = $this->read_customfields($id))) |
| 291 | 290 | { |
| 292 | - $this->data = array_merge($this->data,$cfs[$id]); |
|
| 291 | + $this->data = array_merge($this->data, $cfs[$id]); |
|
| 293 | 292 | } |
| 294 | 293 | return $this->data; |
| 295 | 294 | } |
@@ -303,14 +302,14 @@ discard block |
||
| 303 | 302 | * @param string|array $extra_where =null extra where clause, eg. to check an etag, returns true if no affected rows! |
| 304 | 303 | * @return int|boolean 0 on success, or errno != 0 on error, or true if $extra_where is given and no rows affected |
| 305 | 304 | */ |
| 306 | - function save($keys=null,$extra_where=null) |
|
| 305 | + function save($keys = null, $extra_where = null) |
|
| 307 | 306 | { |
| 308 | 307 | if (is_array($keys) && count($keys) && !isset($keys[0])) // allow to use an etag, eg array('etag=etag+1') |
| 309 | 308 | { |
| 310 | 309 | $this->data_merge($keys); |
| 311 | 310 | $keys = null; |
| 312 | 311 | } |
| 313 | - $ret = parent::save($keys,$extra_where); |
|
| 312 | + $ret = parent::save($keys, $extra_where); |
|
| 314 | 313 | |
| 315 | 314 | if ($ret == 0 && $this->customfields) |
| 316 | 315 | { |
@@ -328,26 +327,26 @@ discard block |
||
| 328 | 327 | * @param boolean $only_return_ids =false return $ids of delete call to db object, but not run it (can be used by extending classes!) |
| 329 | 328 | * @return int|array affected rows, should be 1 if ok, 0 if an error or array with id's if $only_return_ids |
| 330 | 329 | */ |
| 331 | - function delete($keys=null,$only_return_ids=false) |
|
| 330 | + function delete($keys = null, $only_return_ids = false) |
|
| 332 | 331 | { |
| 333 | 332 | if ($this->customfields || $only_return_ids) |
| 334 | 333 | { |
| 335 | - $query = parent::delete($keys,true); |
|
| 334 | + $query = parent::delete($keys, true); |
|
| 336 | 335 | // check if query contains more then the id's |
| 337 | 336 | if (!isset($query[$this->autoinc_id]) || count($query) != 1) |
| 338 | 337 | { |
| 339 | - foreach($this->db->select($this->table_name,$this->autoinc_id,$query,__LINE__,__FILE__,false,'',$this->app) as $row) |
|
| 338 | + foreach ($this->db->select($this->table_name, $this->autoinc_id, $query, __LINE__, __FILE__, false, '', $this->app) as $row) |
|
| 340 | 339 | { |
| 341 | 340 | $ids[] = $row[$this->autoinc_id]; |
| 342 | 341 | } |
| 343 | - if (!$ids) return 0; // no rows affected |
|
| 342 | + if (!$ids) return 0; // no rows affected |
|
| 344 | 343 | } |
| 345 | 344 | else |
| 346 | 345 | { |
| 347 | 346 | $ids = (array)$query[$this->autoinc_id]; |
| 348 | 347 | } |
| 349 | 348 | if ($only_return_ids) return $ids; |
| 350 | - $this->db->delete($this->extra_table,array($this->extra_id => $ids),__LINE__,__FILE__); |
|
| 349 | + $this->db->delete($this->extra_table, array($this->extra_id => $ids), __LINE__, __FILE__); |
|
| 351 | 350 | } |
| 352 | 351 | return parent::delete($keys); |
| 353 | 352 | } |
@@ -370,32 +369,32 @@ discard block |
||
| 370 | 369 | * @param string|array $extra_cols =array() |
| 371 | 370 | * @return int total number of rows |
| 372 | 371 | */ |
| 373 | - function get_rows($query,&$rows,&$readonlys,$join='',$need_full_no_count=false,$only_keys=false,$extra_cols=array()) |
|
| 372 | + function get_rows($query, &$rows, &$readonlys, $join = '', $need_full_no_count = false, $only_keys = false, $extra_cols = array()) |
|
| 374 | 373 | { |
| 375 | - parent::get_rows($query,$rows,$readonlys,$join,$need_full_no_count,$only_keys,$extra_cols); |
|
| 374 | + parent::get_rows($query, $rows, $readonlys, $join, $need_full_no_count, $only_keys, $extra_cols); |
|
| 376 | 375 | |
| 377 | - $selectcols = $query['selectcols'] ? explode(',',$query['selectcols']) : array(); |
|
| 376 | + $selectcols = $query['selectcols'] ? explode(',', $query['selectcols']) : array(); |
|
| 378 | 377 | |
| 379 | - if ($rows && $this->customfields && (!$selectcols || in_array('customfields',$selectcols))) |
|
| 378 | + if ($rows && $this->customfields && (!$selectcols || in_array('customfields', $selectcols))) |
|
| 380 | 379 | { |
| 381 | 380 | $id2keys = array(); |
| 382 | - foreach($rows as $key => $row) |
|
| 381 | + foreach ($rows as $key => $row) |
|
| 383 | 382 | { |
| 384 | 383 | $id2keys[$row[$this->db_key_cols[$this->autoinc_id]]] = $key; |
| 385 | 384 | } |
| 386 | 385 | // check if only certain cf's to show |
| 387 | 386 | if (!in_array('customfields', $selectcols)) |
| 388 | 387 | { |
| 389 | - foreach($selectcols as $col) |
|
| 388 | + foreach ($selectcols as $col) |
|
| 390 | 389 | { |
| 391 | 390 | if ($this->is_cf($col)) $fields[] = $this->get_cf_name($col); |
| 392 | 391 | } |
| 393 | 392 | } |
| 394 | - if (($cfs = $this->read_customfields(array_keys($id2keys),$fields))) |
|
| 393 | + if (($cfs = $this->read_customfields(array_keys($id2keys), $fields))) |
|
| 395 | 394 | { |
| 396 | - foreach($cfs as $id => $data) |
|
| 395 | + foreach ($cfs as $id => $data) |
|
| 397 | 396 | { |
| 398 | - $rows[$id2keys[$id]] = array_merge($rows[$id2keys[$id]],$data); |
|
| 397 | + $rows[$id2keys[$id]] = array_merge($rows[$id2keys[$id]], $data); |
|
| 399 | 398 | } |
| 400 | 399 | } |
| 401 | 400 | } |
@@ -422,12 +421,12 @@ discard block |
||
| 422 | 421 | * @param boolean $need_full_no_count =false If true an unlimited query is run to determine the total number of rows, default false |
| 423 | 422 | * @return array|NULL array of matching rows (the row is an array of the cols) or NULL |
| 424 | 423 | */ |
| 425 | - function &search($criteria,$only_keys=True,$order_by='',$extra_cols='',$wildcard='',$empty=False,$op='AND',$start=false,$filter=null,$join='',$need_full_no_count=false) |
|
| 424 | + function &search($criteria, $only_keys = True, $order_by = '', $extra_cols = '', $wildcard = '', $empty = False, $op = 'AND', $start = false, $filter = null, $join = '', $need_full_no_count = false) |
|
| 426 | 425 | { |
| 427 | 426 | //error_log(__METHOD__.'('.array2string(array_combine(array_slice(array('criteria','only_keys','order_by','extra_cols','wildcard','empty','op','start','filter','join','need_full_no_count'), 0, count(func_get_args())), func_get_args())).')'); |
| 428 | 427 | if (!$this->customfields) |
| 429 | 428 | { |
| 430 | - return parent::search($criteria,$only_keys,$order_by,$extra_cols,$wildcard,$empty,$op,$start,$filter,$join,$need_full_no_count); |
|
| 429 | + return parent::search($criteria, $only_keys, $order_by, $extra_cols, $wildcard, $empty, $op, $start, $filter, $join, $need_full_no_count); |
|
| 431 | 430 | } |
| 432 | 431 | if ($only_keys === false) |
| 433 | 432 | { |
@@ -436,7 +435,7 @@ discard block |
||
| 436 | 435 | // if string given as criteria --> search in all (or $this->columns_to_search) columns including custom fields |
| 437 | 436 | if ($criteria && is_string($criteria)) |
| 438 | 437 | { |
| 439 | - $criteria = $this->search2criteria($criteria,$wildcard,$op); |
|
| 438 | + $criteria = $this->search2criteria($criteria, $wildcard, $op); |
|
| 440 | 439 | } |
| 441 | 440 | if ($criteria && is_array($criteria)) |
| 442 | 441 | { |
@@ -445,10 +444,10 @@ discard block |
||
| 445 | 444 | { |
| 446 | 445 | if (($negate = $criteria[$this->extra_value][0] === '!')) |
| 447 | 446 | { |
| 448 | - $criteria[$this->extra_value] = substr($criteria[$this->extra_value],1); |
|
| 447 | + $criteria[$this->extra_value] = substr($criteria[$this->extra_value], 1); |
|
| 449 | 448 | } |
| 450 | - $criteria[] = $this->extra_table.'.'.$this->extra_value . ' ' .($negate ? 'NOT ' : ''). |
|
| 451 | - $this->db->capabilities[Db::CAPABILITY_CASE_INSENSITIV_LIKE]. ' ' . |
|
| 449 | + $criteria[] = $this->extra_table.'.'.$this->extra_value.' '.($negate ? 'NOT ' : ''). |
|
| 450 | + $this->db->capabilities[Db::CAPABILITY_CASE_INSENSITIV_LIKE].' '. |
|
| 452 | 451 | $this->db->quote($wildcard.$criteria[$this->extra_value].$wildcard); |
| 453 | 452 | unset($criteria[$this->extra_value]); |
| 454 | 453 | } |
@@ -457,14 +456,14 @@ discard block |
||
| 457 | 456 | { |
| 458 | 457 | if ($criteria[$this->autoinc_id]) |
| 459 | 458 | { |
| 460 | - $criteria[] = $this->db->expression($this->table_name,$this->table_name.'.', |
|
| 459 | + $criteria[] = $this->db->expression($this->table_name, $this->table_name.'.', |
|
| 461 | 460 | array($this->autoinc_id => $criteria[$this->autoinc_id])); |
| 462 | 461 | } |
| 463 | 462 | unset($criteria[$this->autoinc_id]); |
| 464 | 463 | } |
| 465 | 464 | // replace ambiguous column with (an exact match of) table_name.column |
| 466 | 465 | $extra_join_added = $join && strpos($join, $this->extra_join) !== false; |
| 467 | - foreach($criteria as $name => $val) |
|
| 466 | + foreach ($criteria as $name => $val) |
|
| 468 | 467 | { |
| 469 | 468 | // only add extra_join, if we really need it |
| 470 | 469 | if (!$extra_join_added && ( |
@@ -476,9 +475,9 @@ discard block |
||
| 476 | 475 | $extra_join_added = true; |
| 477 | 476 | } |
| 478 | 477 | $extra_columns = $this->db->get_table_definitions($this->app, $this->extra_table); |
| 479 | - if(is_string($name) && $extra_columns['fd'][array_search($name, $this->db_cols)]) |
|
| 478 | + if (is_string($name) && $extra_columns['fd'][array_search($name, $this->db_cols)]) |
|
| 480 | 479 | { |
| 481 | - $criteria[] = $this->db->expression($this->table_name,$this->table_name.'.',array( |
|
| 480 | + $criteria[] = $this->db->expression($this->table_name, $this->table_name.'.', array( |
|
| 482 | 481 | array_search($name, $this->db_cols) => $val, |
| 483 | 482 | )); |
| 484 | 483 | unset($criteria[$name]); |
@@ -490,12 +489,12 @@ discard block |
||
| 490 | 489 | $name = substr($name, 1); |
| 491 | 490 | if (($negate = $criteria[$name][0] === '!')) |
| 492 | 491 | { |
| 493 | - $val = substr($val,1); |
|
| 492 | + $val = substr($val, 1); |
|
| 494 | 493 | } |
| 495 | - $cfcriteria[] = '(' . $this->extra_table.'.'.$this->extra_value . ' ' .($negate ? 'NOT ' : ''). |
|
| 496 | - $this->db->capabilities[Db::CAPABILITY_CASE_INSENSITIV_LIKE]. ' ' . |
|
| 497 | - $this->db->quote($wildcard.$val.$wildcard) . ' AND ' . |
|
| 498 | - $this->extra_table.'.'.$this->extra_key . ' = ' . $this->db->quote($name) . |
|
| 494 | + $cfcriteria[] = '('.$this->extra_table.'.'.$this->extra_value.' '.($negate ? 'NOT ' : ''). |
|
| 495 | + $this->db->capabilities[Db::CAPABILITY_CASE_INSENSITIV_LIKE].' '. |
|
| 496 | + $this->db->quote($wildcard.$val.$wildcard).' AND '. |
|
| 497 | + $this->extra_table.'.'.$this->extra_key.' = '.$this->db->quote($name). |
|
| 499 | 498 | ')'; |
| 500 | 499 | unset($criteria[self::CF_PREFIX.$name]); |
| 501 | 500 | } |
@@ -507,38 +506,38 @@ discard block |
||
| 507 | 506 | } |
| 508 | 507 | } |
| 509 | 508 | } |
| 510 | - if ($cfcriteria && $op =='OR') $criteria[] = implode(' OR ',$cfcriteria); |
|
| 509 | + if ($cfcriteria && $op == 'OR') $criteria[] = implode(' OR ', $cfcriteria); |
|
| 511 | 510 | } |
| 512 | - if($only_keys === true) |
|
| 511 | + if ($only_keys === true) |
|
| 513 | 512 | { |
| 514 | 513 | // Expand to keys here, so table_name can be prepended below |
| 515 | 514 | $only_keys = array_values($this->db_key_cols); |
| 516 | 515 | } |
| 517 | 516 | // replace ambiguous column with (an exact match of) table_name.column |
| 518 | - if(is_array($only_keys)) |
|
| 517 | + if (is_array($only_keys)) |
|
| 519 | 518 | { |
| 520 | - foreach($only_keys as $key => &$col) |
|
| 519 | + foreach ($only_keys as $key => &$col) |
|
| 521 | 520 | { |
| 522 | - if(is_numeric($key) && in_array($col, $this->db_cols, true)) |
|
| 521 | + if (is_numeric($key) && in_array($col, $this->db_cols, true)) |
|
| 523 | 522 | { |
| 524 | - $col = $this->table_name .'.'.array_search($col, $this->db_cols).' AS '.$col; |
|
| 523 | + $col = $this->table_name.'.'.array_search($col, $this->db_cols).' AS '.$col; |
|
| 525 | 524 | } |
| 526 | 525 | } |
| 527 | 526 | } |
| 528 | 527 | // check if we order by a custom field --> join cf table for given cf and order by it's value |
| 529 | - if (strpos($order_by,self::CF_PREFIX) !== false) |
|
| 528 | + if (strpos($order_by, self::CF_PREFIX) !== false) |
|
| 530 | 529 | { |
| 531 | 530 | // fields to order by, as cutomfields may have names with spaces, we examine each order by criteria |
| 532 | - $fields2order = explode(',',$order_by); |
|
| 533 | - foreach($fields2order as $v) |
|
| 531 | + $fields2order = explode(',', $order_by); |
|
| 532 | + foreach ($fields2order as $v) |
|
| 534 | 533 | { |
| 535 | - if (strpos($v,self::CF_PREFIX) !== false) |
|
| 534 | + if (strpos($v, self::CF_PREFIX) !== false) |
|
| 536 | 535 | { |
| 537 | 536 | // we found a customfield, so we split that part by space char in order to get Sorting Direction and Fieldname |
| 538 | - $buff = explode(' ',trim($v)); |
|
| 537 | + $buff = explode(' ', trim($v)); |
|
| 539 | 538 | $orderDir = array_pop($buff); |
| 540 | - $key = substr(trim(implode(' ',$buff)), 1); |
|
| 541 | - switch($this->customfields[$key]['type']) |
|
| 539 | + $key = substr(trim(implode(' ', $buff)), 1); |
|
| 540 | + switch ($this->customfields[$key]['type']) |
|
| 542 | 541 | { |
| 543 | 542 | case 'int': |
| 544 | 543 | $order_by = str_replace($v, 'extra_order.'.$this->extra_value.' IS NULL,'. |
@@ -571,26 +570,26 @@ discard block |
||
| 571 | 570 | { |
| 572 | 571 | $_cfnames = array_keys($this->customfields); |
| 573 | 572 | $extra_filter = null; |
| 574 | - foreach($filter as $name => $val) |
|
| 573 | + foreach ($filter as $name => $val) |
|
| 575 | 574 | { |
| 576 | 575 | // replace ambiguous auto-id with (an exact match of) table_name.autoid |
| 577 | 576 | if (is_string($name) && $name == $this->autoinc_id) |
| 578 | 577 | { |
| 579 | 578 | if ((int)$filter[$this->autoinc_id]) |
| 580 | 579 | { |
| 581 | - $filter[] = $this->db->expression($this->table_name,$this->table_name.'.',array( |
|
| 580 | + $filter[] = $this->db->expression($this->table_name, $this->table_name.'.', array( |
|
| 582 | 581 | $this->autoinc_id => $filter[$this->autoinc_id], |
| 583 | 582 | )); |
| 584 | 583 | } |
| 585 | 584 | unset($filter[$this->autoinc_id]); |
| 586 | 585 | } |
| 587 | 586 | // replace ambiguous column with (an exact match of) table_name.column |
| 588 | - elseif (is_string($name) && $val!=null && in_array($name, $this->db_cols)) |
|
| 587 | + elseif (is_string($name) && $val != null && in_array($name, $this->db_cols)) |
|
| 589 | 588 | { |
| 590 | 589 | $extra_columns = $this->db->get_table_definitions($this->app, $this->extra_table); |
| 591 | 590 | if ($extra_columns['fd'][array_search($name, $this->db_cols)]) |
| 592 | 591 | { |
| 593 | - $filter[] = $this->db->expression($this->table_name,$this->table_name.'.',array( |
|
| 592 | + $filter[] = $this->db->expression($this->table_name, $this->table_name.'.', array( |
|
| 594 | 593 | array_search($name, $this->db_cols) => $val, |
| 595 | 594 | )); |
| 596 | 595 | unset($filter[$name]); |
@@ -602,61 +601,61 @@ discard block |
||
| 602 | 601 | { |
| 603 | 602 | if ($val[0] === '!') // negative filter |
| 604 | 603 | { |
| 605 | - $sql_filter = 'extra_filter.'.$this->extra_value.'!='.$this->db->quote(substr($val,1)); |
|
| 604 | + $sql_filter = 'extra_filter.'.$this->extra_value.'!='.$this->db->quote(substr($val, 1)); |
|
| 606 | 605 | } |
| 607 | 606 | else // using Db::expression to allow to use array() with possible values or NULL |
| 608 | 607 | { |
| 609 | - if($this->customfields[$this->get_cf_name($name)]['type'] == 'select' && |
|
| 608 | + if ($this->customfields[$this->get_cf_name($name)]['type'] == 'select' && |
|
| 610 | 609 | $this->customfields[$this->get_cf_name($name)]['rows'] > 1) |
| 611 | 610 | { |
| 612 | 611 | // Multi-select - any entry with the filter value selected matches |
| 613 | - $sql_filter = str_replace($this->extra_value,'extra_filter.'. |
|
| 614 | - $this->extra_value,$this->db->expression($this->extra_table,array( |
|
| 615 | - $this->db->concat("','",$this->extra_value,"','").' '.$this->db->capabilities[Db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.$this->db->quote('%,'.$val.',%') |
|
| 612 | + $sql_filter = str_replace($this->extra_value, 'extra_filter.'. |
|
| 613 | + $this->extra_value, $this->db->expression($this->extra_table, array( |
|
| 614 | + $this->db->concat("','", $this->extra_value, "','").' '.$this->db->capabilities[Db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.$this->db->quote('%,'.$val.',%') |
|
| 616 | 615 | )) |
| 617 | 616 | ); |
| 618 | 617 | } |
| 619 | 618 | elseif ($this->customfields[$this->get_cf_name($name)]['type'] == 'text') |
| 620 | 619 | { |
| 621 | - $sql_filter = str_replace($this->extra_value,'extra_filter.'.$this->extra_value, |
|
| 622 | - $this->db->expression($this->extra_table,array( |
|
| 620 | + $sql_filter = str_replace($this->extra_value, 'extra_filter.'.$this->extra_value, |
|
| 621 | + $this->db->expression($this->extra_table, array( |
|
| 623 | 622 | $this->extra_value.' '.$this->db->capabilities[Db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.$this->db->quote($wildcard.$val.$wildcard) |
| 624 | 623 | )) |
| 625 | 624 | ); |
| 626 | 625 | } |
| 627 | 626 | else |
| 628 | 627 | { |
| 629 | - $sql_filter = str_replace($this->extra_value,'extra_filter.'. |
|
| 630 | - $this->extra_value,$this->db->expression($this->extra_table,array($this->extra_value => $val))); |
|
| 628 | + $sql_filter = str_replace($this->extra_value, 'extra_filter.'. |
|
| 629 | + $this->extra_value, $this->db->expression($this->extra_table, array($this->extra_value => $val))); |
|
| 631 | 630 | } |
| 632 | 631 | } |
| 633 | 632 | // need to use a LEFT JOIN for negative search or to allow NULL values |
| 634 | - $need_left_join = $val[0] === '!' || strpos($sql_filter,'IS NULL') !== false ? ' LEFT ' : ''; |
|
| 635 | - $join .= str_replace('extra_filter','extra_filter'.$extra_filter,$need_left_join.$this->extra_join_filter. |
|
| 633 | + $need_left_join = $val[0] === '!' || strpos($sql_filter, 'IS NULL') !== false ? ' LEFT ' : ''; |
|
| 634 | + $join .= str_replace('extra_filter', 'extra_filter'.$extra_filter, $need_left_join.$this->extra_join_filter. |
|
| 636 | 635 | ' AND extra_filter.'.$this->extra_key.'='.$this->db->quote($this->get_cf_name($name)). |
| 637 | 636 | ' AND '.$sql_filter); |
| 638 | 637 | ++$extra_filter; |
| 639 | 638 | } |
| 640 | 639 | unset($filter[$name]); |
| 641 | 640 | } |
| 642 | - elseif(is_int($name) && $this->is_cf($val)) // lettersearch: #cfname LIKE 's%' |
|
| 641 | + elseif (is_int($name) && $this->is_cf($val)) // lettersearch: #cfname LIKE 's%' |
|
| 643 | 642 | { |
| 644 | - $_cf = explode(' ',$val); |
|
| 645 | - foreach($_cf as $cf_np) |
|
| 643 | + $_cf = explode(' ', $val); |
|
| 644 | + foreach ($_cf as $cf_np) |
|
| 646 | 645 | { |
| 647 | 646 | // building cf_name by glueing parts together (, in case someone used whitespace in their custom field names) |
| 648 | - $tcf_name = ($tcf_name?$tcf_name.' ':'').$cf_np; |
|
| 647 | + $tcf_name = ($tcf_name ? $tcf_name.' ' : '').$cf_np; |
|
| 649 | 648 | // reacts on the first one found that matches an existing customfield, should be better then the old behavior of |
| 650 | 649 | // simply splitting by " " and using the first part |
| 651 | - if ($this->is_cf($tcf_name) && ($cfn = $this->get_cf_name($tcf_name)) && array_search($cfn,(array)$_cfnames,true)!==false ) |
|
| 650 | + if ($this->is_cf($tcf_name) && ($cfn = $this->get_cf_name($tcf_name)) && array_search($cfn, (array)$_cfnames, true) !== false) |
|
| 652 | 651 | { |
| 653 | 652 | $cf = $tcf_name; |
| 654 | 653 | break; |
| 655 | 654 | } |
| 656 | 655 | } |
| 657 | - $join .= str_replace('extra_filter','extra_filter'.$extra_filter,$this->extra_join_filter. |
|
| 656 | + $join .= str_replace('extra_filter', 'extra_filter'.$extra_filter, $this->extra_join_filter. |
|
| 658 | 657 | ' AND extra_filter.'.$this->extra_key.'='.$this->db->quote($this->get_cf_name($cf)). |
| 659 | - ' AND '.str_replace($cf,'extra_filter.'.$this->extra_value,$val)); |
|
| 658 | + ' AND '.str_replace($cf, 'extra_filter.'.$this->extra_value, $val)); |
|
| 660 | 659 | ++$extra_filter; |
| 661 | 660 | unset($filter[$name]); |
| 662 | 661 | } |
@@ -668,15 +667,14 @@ discard block |
||
| 668 | 667 | if (is_array($only_keys)) |
| 669 | 668 | { |
| 670 | 669 | $only_keys = array_values($only_keys); |
| 671 | - $only_keys[0] = 'DISTINCT '.($only_keys[0] != $this->autoinc_id ? $only_keys[0] : |
|
| 672 | - $this->table_name.'.'.$this->autoinc_id.' AS '.$this->autoinc_id); |
|
| 670 | + $only_keys[0] = 'DISTINCT '.($only_keys[0] != $this->autoinc_id ? $only_keys[0] : $this->table_name.'.'.$this->autoinc_id.' AS '.$this->autoinc_id); |
|
| 673 | 671 | } |
| 674 | 672 | else |
| 675 | 673 | { |
| 676 | 674 | $only_keys = 'DISTINCT '.$only_keys; |
| 677 | 675 | } |
| 678 | 676 | } |
| 679 | - return parent::search($criteria,$only_keys,$order_by,$extra_cols,$wildcard,$empty,$op,$start,$filter,$join,$need_full_no_count); |
|
| 677 | + return parent::search($criteria, $only_keys, $order_by, $extra_cols, $wildcard, $empty, $op, $start, $filter, $join, $need_full_no_count); |
|
| 680 | 678 | } |
| 681 | 679 | |
| 682 | 680 | /** |
@@ -716,7 +714,7 @@ discard block |
||
| 716 | 714 | */ |
| 717 | 715 | function get_cf_name($field) |
| 718 | 716 | { |
| 719 | - return substr($field,1); |
|
| 717 | + return substr($field, 1); |
|
| 720 | 718 | } |
| 721 | 719 | |
| 722 | 720 | /** |
@@ -738,7 +736,7 @@ discard block |
||
| 738 | 736 | */ |
| 739 | 737 | function is_multiple($name) |
| 740 | 738 | { |
| 741 | - return $this->allow_multiple_values && in_array($this->customfields[$name]['type'],array('select','select-account')) && |
|
| 739 | + return $this->allow_multiple_values && in_array($this->customfields[$name]['type'], array('select', 'select-account')) && |
|
| 742 | 740 | $this->customfields[$name]['rows'] > 1; |
| 743 | 741 | } |
| 744 | 742 | } |
@@ -127,7 +127,11 @@ discard block |
||
| 127 | 127 | |
| 128 | 128 | $this->allow_multiple_values = $allow_multiple_values; |
| 129 | 129 | $this->extra_table = $extra_table; |
| 130 | - if (!$this->extra_id) $this->extra_id = $this->autoinc_id; // default to auto id of regular table |
|
| 130 | + if (!$this->extra_id) |
|
| 131 | + { |
|
| 132 | + $this->extra_id = $this->autoinc_id; |
|
| 133 | + } |
|
| 134 | + // default to auto id of regular table |
|
| 131 | 135 | |
| 132 | 136 | // if names from columns of extra table are only postfixes (starting with _), prepend column prefix |
| 133 | 137 | if (!($prefix=$column_prefix)) |
@@ -145,7 +149,10 @@ discard block |
||
| 145 | 149 | ) as $col => $val) |
| 146 | 150 | { |
| 147 | 151 | $this->$col = $col_name = $val; |
| 148 | - if ($col_name[0] == '_') $this->$col = $prefix . $val; |
|
| 152 | + if ($col_name[0] == '_') |
|
| 153 | + { |
|
| 154 | + $this->$col = $prefix . $val; |
|
| 155 | + } |
|
| 149 | 156 | } |
| 150 | 157 | // some sanity checks, maybe they should be active only for development |
| 151 | 158 | if (!($extra_defs = $this->db->get_table_definitions($app,$extra_table))) |
@@ -179,13 +186,23 @@ discard block |
||
| 179 | 186 | */ |
| 180 | 187 | function read_customfields($ids,$field_names=null) |
| 181 | 188 | { |
| 182 | - if (is_null($field_names)) $field_names = array_keys($this->customfields); |
|
| 189 | + if (is_null($field_names)) |
|
| 190 | + { |
|
| 191 | + $field_names = array_keys($this->customfields); |
|
| 192 | + } |
|
| 183 | 193 | |
| 184 | 194 | foreach((array)$ids as $key => $id) |
| 185 | 195 | { |
| 186 | - if (!(int)$id && is_array($ids)) unset($ids[$key]); |
|
| 196 | + if (!(int)$id && is_array($ids)) |
|
| 197 | + { |
|
| 198 | + unset($ids[$key]); |
|
| 199 | + } |
|
| 187 | 200 | } |
| 188 | - if (!$ids || !$field_names) return array(); // nothing to do |
|
| 201 | + if (!$ids || !$field_names) |
|
| 202 | + { |
|
| 203 | + return array(); |
|
| 204 | + } |
|
| 205 | + // nothing to do |
|
| 189 | 206 | |
| 190 | 207 | $entries = array(); |
| 191 | 208 | foreach($this->db->select($this->extra_table,'*',array( |
@@ -194,7 +211,10 @@ discard block |
||
| 194 | 211 | ),__LINE__,__FILE__,false,'',$this->app) as $row) |
| 195 | 212 | { |
| 196 | 213 | $entry =& $entries[$row[$this->extra_id]]; |
| 197 | - if (!is_array($entry)) $entry = array(); |
|
| 214 | + if (!is_array($entry)) |
|
| 215 | + { |
|
| 216 | + $entry = array(); |
|
| 217 | + } |
|
| 198 | 218 | $field = $this->get_cf_field($row[$this->extra_key]); |
| 199 | 219 | |
| 200 | 220 | if ($this->allow_multiple_values && $this->is_multiple($row[$this->extra_key])) |
@@ -220,7 +240,10 @@ discard block |
||
| 220 | 240 | { |
| 221 | 241 | foreach (array_keys((array)$this->customfields) as $name) |
| 222 | 242 | { |
| 223 | - if (!isset($data[$field = $this->get_cf_field($name)])) continue; |
|
| 243 | + if (!isset($data[$field = $this->get_cf_field($name)])) |
|
| 244 | + { |
|
| 245 | + continue; |
|
| 246 | + } |
|
| 224 | 247 | |
| 225 | 248 | $where = array( |
| 226 | 249 | $this->extra_id => isset($data[$this->autoinc_id]) ? $data[$this->autoinc_id] : $data[$this->db_key_cols[$this->autoinc_id]], |
@@ -232,7 +255,11 @@ discard block |
||
| 232 | 255 | if(empty($data[$field]) || $is_multiple || !$this->extra_has_unique_index) |
| 233 | 256 | { |
| 234 | 257 | $this->db->delete($this->extra_table,$where,__LINE__,__FILE__,$this->app); |
| 235 | - if (empty($data[$field])) continue; // nothing else to do for empty values |
|
| 258 | + if (empty($data[$field])) |
|
| 259 | + { |
|
| 260 | + continue; |
|
| 261 | + } |
|
| 262 | + // nothing else to do for empty values |
|
| 236 | 263 | } |
| 237 | 264 | foreach($is_multiple && !is_array($data[$field]) ? explode(',',$data[$field]) : |
| 238 | 265 | // regular custom fields (!$is_multiple) eg. addressbook store multiple values comma-separated |
@@ -305,9 +332,12 @@ discard block |
||
| 305 | 332 | */ |
| 306 | 333 | function save($keys=null,$extra_where=null) |
| 307 | 334 | { |
| 308 | - if (is_array($keys) && count($keys) && !isset($keys[0])) // allow to use an etag, eg array('etag=etag+1') |
|
| 335 | + if (is_array($keys) && count($keys) && !isset($keys[0])) |
|
| 336 | + { |
|
| 337 | + // allow to use an etag, eg array('etag=etag+1') |
|
| 309 | 338 | { |
| 310 | 339 | $this->data_merge($keys); |
| 340 | + } |
|
| 311 | 341 | $keys = null; |
| 312 | 342 | } |
| 313 | 343 | $ret = parent::save($keys,$extra_where); |
@@ -340,13 +370,20 @@ discard block |
||
| 340 | 370 | { |
| 341 | 371 | $ids[] = $row[$this->autoinc_id]; |
| 342 | 372 | } |
| 343 | - if (!$ids) return 0; // no rows affected |
|
| 373 | + if (!$ids) |
|
| 374 | + { |
|
| 375 | + return 0; |
|
| 376 | + } |
|
| 377 | + // no rows affected |
|
| 344 | 378 | } |
| 345 | 379 | else |
| 346 | 380 | { |
| 347 | 381 | $ids = (array)$query[$this->autoinc_id]; |
| 348 | 382 | } |
| 349 | - if ($only_return_ids) return $ids; |
|
| 383 | + if ($only_return_ids) |
|
| 384 | + { |
|
| 385 | + return $ids; |
|
| 386 | + } |
|
| 350 | 387 | $this->db->delete($this->extra_table,array($this->extra_id => $ids),__LINE__,__FILE__); |
| 351 | 388 | } |
| 352 | 389 | return parent::delete($keys); |
@@ -388,7 +425,10 @@ discard block |
||
| 388 | 425 | { |
| 389 | 426 | foreach($selectcols as $col) |
| 390 | 427 | { |
| 391 | - if ($this->is_cf($col)) $fields[] = $this->get_cf_name($col); |
|
| 428 | + if ($this->is_cf($col)) |
|
| 429 | + { |
|
| 430 | + $fields[] = $this->get_cf_name($col); |
|
| 431 | + } |
|
| 392 | 432 | } |
| 393 | 433 | } |
| 394 | 434 | if (($cfs = $this->read_customfields(array_keys($id2keys),$fields))) |
@@ -507,7 +547,10 @@ discard block |
||
| 507 | 547 | } |
| 508 | 548 | } |
| 509 | 549 | } |
| 510 | - if ($cfcriteria && $op =='OR') $criteria[] = implode(' OR ',$cfcriteria); |
|
| 550 | + if ($cfcriteria && $op =='OR') |
|
| 551 | + { |
|
| 552 | + $criteria[] = implode(' OR ',$cfcriteria); |
|
| 553 | + } |
|
| 511 | 554 | } |
| 512 | 555 | if($only_keys === true) |
| 513 | 556 | { |
@@ -598,11 +641,14 @@ discard block |
||
| 598 | 641 | } |
| 599 | 642 | elseif (is_string($name) && $this->is_cf($name)) |
| 600 | 643 | { |
| 601 | - if (!empty($val)) // empty -> dont filter |
|
| 644 | + if (!empty($val)) |
|
| 645 | + { |
|
| 646 | + // empty -> dont filter |
|
| 602 | 647 | { |
| 603 | 648 | if ($val[0] === '!') // negative filter |
| 604 | 649 | { |
| 605 | 650 | $sql_filter = 'extra_filter.'.$this->extra_value.'!='.$this->db->quote(substr($val,1)); |
| 651 | + } |
|
| 606 | 652 | } |
| 607 | 653 | else // using Db::expression to allow to use array() with possible values or NULL |
| 608 | 654 | { |
@@ -639,9 +685,12 @@ discard block |
||
| 639 | 685 | } |
| 640 | 686 | unset($filter[$name]); |
| 641 | 687 | } |
| 642 | - elseif(is_int($name) && $this->is_cf($val)) // lettersearch: #cfname LIKE 's%' |
|
| 688 | + elseif(is_int($name) && $this->is_cf($val)) |
|
| 689 | + { |
|
| 690 | + // lettersearch: #cfname LIKE 's%' |
|
| 643 | 691 | { |
| 644 | 692 | $_cf = explode(' ',$val); |
| 693 | + } |
|
| 645 | 694 | foreach($_cf as $cf_np) |
| 646 | 695 | { |
| 647 | 696 | // building cf_name by glueing parts together (, in case someone used whitespace in their custom field names) |
@@ -704,7 +704,7 @@ discard block |
||
| 704 | 704 | * |
| 705 | 705 | * @param array $_fields |
| 706 | 706 | * @param boolean $merge =true if true $fields will be merged with $this->data (after update!), otherwise $this->data will be just $fields |
| 707 | - * @return int|boolean 0 on success, or errno != 0 on error, or true if $extra_where is given and no rows affected |
|
| 707 | + * @return integer 0 on success, or errno != 0 on error, or true if $extra_where is given and no rows affected |
|
| 708 | 708 | */ |
| 709 | 709 | function update($_fields,$merge=true) |
| 710 | 710 | { |
@@ -1194,7 +1194,7 @@ discard block |
||
| 1194 | 1194 | * @param string &$wildcard ='' on return wildcard char to use, if pattern does not already contain wildcards! |
| 1195 | 1195 | * @param string &$op ='AND' on return boolean operation to use, if pattern does not start with ! we use OR else AND |
| 1196 | 1196 | * @param string $extra_col =null extra column to search |
| 1197 | - * @param array $search_cols =array() List of columns to search. If not provided, all columns in $this->db_cols will be considered |
|
| 1197 | + * @param string[] $search_cols =array() List of columns to search. If not provided, all columns in $this->db_cols will be considered |
|
| 1198 | 1198 | * @return array or column => value pairs |
| 1199 | 1199 | */ |
| 1200 | 1200 | public function search2criteria($_pattern,&$wildcard='',&$op='AND',$extra_col=null, $search_cols = array()) |
@@ -1367,14 +1367,14 @@ |
||
| 1367 | 1367 | } |
| 1368 | 1368 | |
| 1369 | 1369 | /** |
| 1370 | - * Get a default list of columns to search |
|
| 1371 | - * This is to be used as a fallback, for when the extending class does not define |
|
| 1372 | - * $this->columns_to_search. All the columns are considered, and any with $skip_columns_with in |
|
| 1373 | - * their name are discarded because these columns are expected to be foreign keys or other numeric |
|
| 1374 | - * values with no meaning to the user. |
|
| 1375 | - * |
|
| 1376 | - * @return array of column names |
|
| 1377 | - */ |
|
| 1370 | + * Get a default list of columns to search |
|
| 1371 | + * This is to be used as a fallback, for when the extending class does not define |
|
| 1372 | + * $this->columns_to_search. All the columns are considered, and any with $skip_columns_with in |
|
| 1373 | + * their name are discarded because these columns are expected to be foreign keys or other numeric |
|
| 1374 | + * values with no meaning to the user. |
|
| 1375 | + * |
|
| 1376 | + * @return array of column names |
|
| 1377 | + */ |
|
| 1378 | 1378 | protected function get_default_search_columns() |
| 1379 | 1379 | { |
| 1380 | 1380 | $skip_columns_with = array('_id', 'modified', 'modifier', 'status', 'cat_id', 'owner'); |
@@ -179,7 +179,7 @@ discard block |
||
| 179 | 179 | * @param string $timestamp_type =null default null=leave them as is, 'ts'|'integer' use integer unix timestamps, |
| 180 | 180 | * 'object' use Api\DateTime objects or 'string' use DB timestamp (Y-m-d H:i:s) string |
| 181 | 181 | */ |
| 182 | - function __construct($app='',$table='',Api\Db $db=null,$column_prefix='',$no_clone=false,$timestamp_type=null) |
|
| 182 | + function __construct($app = '', $table = '', Api\Db $db = null, $column_prefix = '', $no_clone = false, $timestamp_type = null) |
|
| 183 | 183 | { |
| 184 | 184 | // ease the transition to api |
| 185 | 185 | if ($app == 'phpgwapi') $app = 'api'; |
@@ -200,11 +200,11 @@ discard block |
||
| 200 | 200 | |
| 201 | 201 | if (!$no_clone) $this->db->set_app($app); |
| 202 | 202 | |
| 203 | - if ($table) $this->setup_table($app,$table,$column_prefix); |
|
| 203 | + if ($table) $this->setup_table($app, $table, $column_prefix); |
|
| 204 | 204 | } |
| 205 | 205 | $this->init(); |
| 206 | 206 | |
| 207 | - if ((int) $this->debug >= 4) |
|
| 207 | + if ((int)$this->debug >= 4) |
|
| 208 | 208 | { |
| 209 | 209 | echo "<p>".__METHOD__."('$app','$table')</p>\n"; |
| 210 | 210 | _debug_array($this); |
@@ -219,21 +219,21 @@ discard block |
||
| 219 | 219 | * null=leave them as is, 'ts'|'integer' use integer unix timestamps, 'object' use Api\DateTime objects, |
| 220 | 220 | * 'string' use DB timestamp (Y-m-d H:i:s) string |
| 221 | 221 | */ |
| 222 | - public function set_times($timestamp_type=false) |
|
| 222 | + public function set_times($timestamp_type = false) |
|
| 223 | 223 | { |
| 224 | 224 | if ($timestamp_type !== false) $this->timestamp_type = $timestamp_type; |
| 225 | 225 | |
| 226 | 226 | // set current time |
| 227 | - switch($this->timestamp_type) |
|
| 227 | + switch ($this->timestamp_type) |
|
| 228 | 228 | { |
| 229 | 229 | case 'object': |
| 230 | 230 | $this->now = new Api\DateTime('now'); |
| 231 | 231 | break; |
| 232 | 232 | case 'string': |
| 233 | - $this->now = Api\DateTime::to('now',Api\DateTime::DATABASE); |
|
| 233 | + $this->now = Api\DateTime::to('now', Api\DateTime::DATABASE); |
|
| 234 | 234 | break; |
| 235 | 235 | default: |
| 236 | - $this->now = Api\DateTime::to('now','ts'); |
|
| 236 | + $this->now = Api\DateTime::to('now', 'ts'); |
|
| 237 | 237 | } |
| 238 | 238 | $this->tz_offset_s = Api\DateTime::tz_offset_s(); |
| 239 | 239 | } |
@@ -247,10 +247,10 @@ discard block |
||
| 247 | 247 | * @param string $table table-name |
| 248 | 248 | * @param string $colum_prefix ='' column prefix to automatic remove from the column-name, if the column name starts with it |
| 249 | 249 | */ |
| 250 | - function setup_table($app,$table,$colum_prefix='') |
|
| 250 | + function setup_table($app, $table, $colum_prefix = '') |
|
| 251 | 251 | { |
| 252 | 252 | $this->table_name = $table; |
| 253 | - $this->table_def = $this->db->get_table_definitions($app,$table); |
|
| 253 | + $this->table_def = $this->db->get_table_definitions($app, $table); |
|
| 254 | 254 | if (!$this->table_def || !is_array($this->table_def['fd'])) |
| 255 | 255 | { |
| 256 | 256 | throw new Api\Exception\WrongParameter(__METHOD__."('$app','$table'): No table definition for '$table' found !!!"); |
@@ -258,14 +258,14 @@ discard block |
||
| 258 | 258 | $this->db_key_cols = $this->db_data_cols = $this->db_cols = array(); |
| 259 | 259 | $this->autoinc_id = ''; |
| 260 | 260 | $len_prefix = strlen($colum_prefix); |
| 261 | - foreach($this->table_def['fd'] as $col => $def) |
|
| 261 | + foreach ($this->table_def['fd'] as $col => $def) |
|
| 262 | 262 | { |
| 263 | 263 | $name = $col; |
| 264 | - if ($len_prefix && substr($name,0,$len_prefix) == $colum_prefix) |
|
| 264 | + if ($len_prefix && substr($name, 0, $len_prefix) == $colum_prefix) |
|
| 265 | 265 | { |
| 266 | - $name = substr($col,$len_prefix); |
|
| 266 | + $name = substr($col, $len_prefix); |
|
| 267 | 267 | } |
| 268 | - if (in_array($col,$this->table_def['pk'])) |
|
| 268 | + if (in_array($col, $this->table_def['pk'])) |
|
| 269 | 269 | { |
| 270 | 270 | $this->db_key_cols[$col] = $name; |
| 271 | 271 | } |
@@ -281,13 +281,13 @@ discard block |
||
| 281 | 281 | } |
| 282 | 282 | if ($def['type'] == 'bool') $this->has_bools = true; |
| 283 | 283 | |
| 284 | - foreach($this->table_def['uc'] as $k => $uni_index) |
|
| 284 | + foreach ($this->table_def['uc'] as $k => $uni_index) |
|
| 285 | 285 | { |
| 286 | - if (is_array($uni_index) && in_array($name,$uni_index)) |
|
| 286 | + if (is_array($uni_index) && in_array($name, $uni_index)) |
|
| 287 | 287 | { |
| 288 | 288 | $this->db_uni_cols[$k][$col] = $name; |
| 289 | 289 | } |
| 290 | - elseif($name === $uni_index) |
|
| 290 | + elseif ($name === $uni_index) |
|
| 291 | 291 | { |
| 292 | 292 | $this->db_uni_cols[$col] = $name; |
| 293 | 293 | } |
@@ -302,9 +302,9 @@ discard block |
||
| 302 | 302 | function convert_all_timestamps() |
| 303 | 303 | { |
| 304 | 304 | $check_already_included = !empty($this->timestamps); |
| 305 | - foreach($this->table_def['fd'] as $name => $data) |
|
| 305 | + foreach ($this->table_def['fd'] as $name => $data) |
|
| 306 | 306 | { |
| 307 | - if ($data['type'] == 'timestamp' && (!$check_already_included || !in_array($name,$this->timestamps))) |
|
| 307 | + if ($data['type'] == 'timestamp' && (!$check_already_included || !in_array($name, $this->timestamps))) |
|
| 308 | 308 | { |
| 309 | 309 | $this->timestamps[] = $name; |
| 310 | 310 | } |
@@ -318,22 +318,22 @@ discard block |
||
| 318 | 318 | */ |
| 319 | 319 | function data_merge($new) |
| 320 | 320 | { |
| 321 | - if ((int) $this->debug >= 4) echo "<p>so_sql::data_merge(".print_r($new,true).")</p>\n"; |
|
| 321 | + if ((int)$this->debug >= 4) echo "<p>so_sql::data_merge(".print_r($new, true).")</p>\n"; |
|
| 322 | 322 | |
| 323 | 323 | if (!is_array($new) || !count($new)) |
| 324 | 324 | { |
| 325 | 325 | return; |
| 326 | 326 | } |
| 327 | - foreach($this->db_cols as $db_col => $col) |
|
| 327 | + foreach ($this->db_cols as $db_col => $col) |
|
| 328 | 328 | { |
| 329 | - if (array_key_exists($col,$new)) |
|
| 329 | + if (array_key_exists($col, $new)) |
|
| 330 | 330 | { |
| 331 | 331 | $this->data[$col] = $new[$col]; |
| 332 | 332 | } |
| 333 | 333 | } |
| 334 | - foreach($this->non_db_cols as $db_col => $col) |
|
| 334 | + foreach ($this->non_db_cols as $db_col => $col) |
|
| 335 | 335 | { |
| 336 | - if (array_key_exists($col,$new)) |
|
| 336 | + if (array_key_exists($col, $new)) |
|
| 337 | 337 | { |
| 338 | 338 | $this->data[$col] = $new[$col]; |
| 339 | 339 | } |
@@ -342,7 +342,7 @@ discard block |
||
| 342 | 342 | { |
| 343 | 343 | $this->data[self::USER_TIMEZONE_READ] = $new[self::USER_TIMEZONE_READ]; |
| 344 | 344 | } |
| 345 | - if ((int) $this->debug >= 4) _debug_array($this->data); |
|
| 345 | + if ((int)$this->debug >= 4) _debug_array($this->data); |
|
| 346 | 346 | } |
| 347 | 347 | |
| 348 | 348 | /** |
@@ -366,7 +366,7 @@ discard block |
||
| 366 | 366 | * @param array $data =null if given works on that array and returns result, else works on internal data-array |
| 367 | 367 | * @return array |
| 368 | 368 | */ |
| 369 | - function db2data($data=null) |
|
| 369 | + function db2data($data = null) |
|
| 370 | 370 | { |
| 371 | 371 | if (!is_array($data)) |
| 372 | 372 | { |
@@ -374,7 +374,7 @@ discard block |
||
| 374 | 374 | } |
| 375 | 375 | if ($this->timestamps) |
| 376 | 376 | { |
| 377 | - foreach($this->timestamps as $name) |
|
| 377 | + foreach ($this->timestamps as $name) |
|
| 378 | 378 | { |
| 379 | 379 | if (isset($data[$name]) && $data[$name]) |
| 380 | 380 | { |
@@ -384,7 +384,7 @@ discard block |
||
| 384 | 384 | } |
| 385 | 385 | else |
| 386 | 386 | { |
| 387 | - $data[$name] = Api\DateTime::server2user($data[$name],$this->timestamp_type); |
|
| 387 | + $data[$name] = Api\DateTime::server2user($data[$name], $this->timestamp_type); |
|
| 388 | 388 | } |
| 389 | 389 | } |
| 390 | 390 | } |
@@ -400,7 +400,7 @@ discard block |
||
| 400 | 400 | throw new Api\Exception\WrongParameter(__METHOD__."(): No table definition for '$this->table' found !!!"); |
| 401 | 401 | } |
| 402 | 402 | } |
| 403 | - foreach($this->table_def['fd'] as $col => $def) |
|
| 403 | + foreach ($this->table_def['fd'] as $col => $def) |
|
| 404 | 404 | { |
| 405 | 405 | if ($def['type'] == 'bool' && isset($data[$col])) |
| 406 | 406 | { |
@@ -432,7 +432,7 @@ discard block |
||
| 432 | 432 | * @param array $data =null if given works on that array and returns result, else works on internal data-array |
| 433 | 433 | * @return array |
| 434 | 434 | */ |
| 435 | - function data2db($data=null) |
|
| 435 | + function data2db($data = null) |
|
| 436 | 436 | { |
| 437 | 437 | if (!is_array($data)) |
| 438 | 438 | { |
@@ -440,11 +440,11 @@ discard block |
||
| 440 | 440 | } |
| 441 | 441 | if ($this->timestamps) |
| 442 | 442 | { |
| 443 | - foreach($this->timestamps as $name) |
|
| 443 | + foreach ($this->timestamps as $name) |
|
| 444 | 444 | { |
| 445 | 445 | if (isset($data[$name]) && $data[$name]) |
| 446 | 446 | { |
| 447 | - $data[$name] = Api\DateTime::user2server($data[$name],$this->timestamp_type); |
|
| 447 | + $data[$name] = Api\DateTime::user2server($data[$name], $this->timestamp_type); |
|
| 448 | 448 | } |
| 449 | 449 | } |
| 450 | 450 | } |
@@ -457,7 +457,7 @@ discard block |
||
| 457 | 457 | * @param array $keys =array() array with keys in form internalName => value |
| 458 | 458 | * @return array internal data after init |
| 459 | 459 | */ |
| 460 | - function init($keys=array()) |
|
| 460 | + function init($keys = array()) |
|
| 461 | 461 | { |
| 462 | 462 | $this->data = array(); |
| 463 | 463 | |
@@ -481,7 +481,7 @@ discard block |
||
| 481 | 481 | * @param string $join ='' sql to do a join, added as is after the table-name, eg. ", table2 WHERE x=y" or |
| 482 | 482 | * @return array|boolean data if row could be retrived else False |
| 483 | 483 | */ |
| 484 | - function read($keys,$extra_cols='',$join='') |
|
| 484 | + function read($keys, $extra_cols = '', $join = '') |
|
| 485 | 485 | { |
| 486 | 486 | if (!is_array($keys)) |
| 487 | 487 | { |
@@ -502,16 +502,16 @@ discard block |
||
| 502 | 502 | } |
| 503 | 503 | if (!$query) // no primary key in keys, lets try the data_cols for a unique key |
| 504 | 504 | { |
| 505 | - foreach($this->db_uni_cols as $db_col => $col) |
|
| 505 | + foreach ($this->db_uni_cols as $db_col => $col) |
|
| 506 | 506 | { |
| 507 | 507 | if (!is_array($col) && $this->data[$col] != '') |
| 508 | 508 | { |
| 509 | 509 | $query[$db_col] = $this->data[$col]; |
| 510 | 510 | } |
| 511 | - elseif(is_array($col)) |
|
| 511 | + elseif (is_array($col)) |
|
| 512 | 512 | { |
| 513 | 513 | $q = array(); |
| 514 | - foreach($col as $db_c => $c) |
|
| 514 | + foreach ($col as $db_c => $c) |
|
| 515 | 515 | { |
| 516 | 516 | if ($this->data[$col] == '') |
| 517 | 517 | { |
@@ -526,7 +526,7 @@ discard block |
||
| 526 | 526 | } |
| 527 | 527 | if (!$query) // no unique key in keys, lets try everything else |
| 528 | 528 | { |
| 529 | - foreach($this->db_data_cols as $db_col => $col) |
|
| 529 | + foreach ($this->db_data_cols as $db_col => $col) |
|
| 530 | 530 | { |
| 531 | 531 | if ($this->data[$col] != '') |
| 532 | 532 | { |
@@ -542,22 +542,22 @@ discard block |
||
| 542 | 542 | } |
| 543 | 543 | if ($join) // Prefix the columns with the table-name, as they might exist in the join |
| 544 | 544 | { |
| 545 | - foreach($query as $col => $val) |
|
| 545 | + foreach ($query as $col => $val) |
|
| 546 | 546 | { |
| 547 | - if (is_int($col) || strpos($join,$col) === false) continue; |
|
| 548 | - $query[] = $this->db->expression($this->table_name,$this->table_name.'.',array($col=>$val)); |
|
| 547 | + if (is_int($col) || strpos($join, $col) === false) continue; |
|
| 548 | + $query[] = $this->db->expression($this->table_name, $this->table_name.'.', array($col=>$val)); |
|
| 549 | 549 | unset($query[$col]); |
| 550 | 550 | } |
| 551 | 551 | } |
| 552 | - foreach($this->db->select($this->table_name,'*'.($extra_cols?','.(is_array($extra_cols)?implode(',',$extra_cols):$extra_cols):''), |
|
| 553 | - $query,__LINE__,__FILE__,False,'',$this->app,0,$join) as $row) |
|
| 552 | + foreach ($this->db->select($this->table_name, '*'.($extra_cols ? ','.(is_array($extra_cols) ? implode(',', $extra_cols) : $extra_cols) : ''), |
|
| 553 | + $query, __LINE__, __FILE__, False, '', $this->app, 0, $join) as $row) |
|
| 554 | 554 | { |
| 555 | 555 | $cols = $this->db_cols; |
| 556 | 556 | if ($extra_cols) // extra columns to report |
| 557 | 557 | { |
| 558 | - foreach(is_array($extra_cols) ? $extra_cols : array($extra_cols) as $col) |
|
| 558 | + foreach (is_array($extra_cols) ? $extra_cols : array($extra_cols) as $col) |
|
| 559 | 559 | { |
| 560 | - if (FALSE!==stripos($col,' as ')) $col = preg_replace('/^.* as *([a-z0-9_]+) *$/i','\\1',$col); |
|
| 560 | + if (FALSE !== stripos($col, ' as ')) $col = preg_replace('/^.* as *([a-z0-9_]+) *$/i', '\\1', $col); |
|
| 561 | 561 | $cols[$col] = $col; |
| 562 | 562 | } |
| 563 | 563 | } |
@@ -570,7 +570,7 @@ discard block |
||
| 570 | 570 | // store user timezone used for reading |
| 571 | 571 | $this->data[self::USER_TIMEZONE_READ] = Api\DateTime::$user_timezone->getName(); |
| 572 | 572 | |
| 573 | - if ((int) $this->debug >= 4) |
|
| 573 | + if ((int)$this->debug >= 4) |
|
| 574 | 574 | { |
| 575 | 575 | echo "data =\n"; _debug_array($this->data); |
| 576 | 576 | } |
@@ -580,7 +580,7 @@ discard block |
||
| 580 | 580 | { |
| 581 | 581 | unset($this->data[$this->db_key_cols[$this->autoinc_id]]); |
| 582 | 582 | } |
| 583 | - if ((int) $this->debug >= 4) echo "nothing found !!!</p>\n"; |
|
| 583 | + if ((int)$this->debug >= 4) echo "nothing found !!!</p>\n"; |
|
| 584 | 584 | |
| 585 | 585 | $this->db2data(); |
| 586 | 586 | |
@@ -594,7 +594,7 @@ discard block |
||
| 594 | 594 | * @param string|array $extra_where =null extra where clause, eg. to check an etag, returns true if no affected rows! |
| 595 | 595 | * @return int|boolean 0 on success, or errno != 0 on error, or true if $extra_where is given and no rows affected |
| 596 | 596 | */ |
| 597 | - function save($keys=null,$extra_where=null) |
|
| 597 | + function save($keys = null, $extra_where = null) |
|
| 598 | 598 | { |
| 599 | 599 | if (is_array($keys) && count($keys)) $this->data_merge($keys); |
| 600 | 600 | |
@@ -613,65 +613,65 @@ discard block |
||
| 613 | 613 | } |
| 614 | 614 | $this->data2db(); |
| 615 | 615 | |
| 616 | - if ((int) $this->debug >= 4) { echo "so_sql::save(".print_r($keys,true).") autoinc_id='$this->autoinc_id', data="; _debug_array($this->data); } |
|
| 616 | + if ((int)$this->debug >= 4) { echo "so_sql::save(".print_r($keys, true).") autoinc_id='$this->autoinc_id', data="; _debug_array($this->data); } |
|
| 617 | 617 | |
| 618 | 618 | if ($this->autoinc_id && !$this->data[$this->db_key_cols[$this->autoinc_id]]) // insert with auto id |
| 619 | 619 | { |
| 620 | - foreach($this->db_cols as $db_col => $col) |
|
| 620 | + foreach ($this->db_cols as $db_col => $col) |
|
| 621 | 621 | { |
| 622 | 622 | if (!$this->autoinc_id || $db_col != $this->autoinc_id) // not write auto-inc-id |
| 623 | 623 | { |
| 624 | - if (!array_key_exists($col,$this->data) && // handling of unset columns in $this->data |
|
| 625 | - (isset($this->table_def['fd'][$db_col]['default']) || // we have a default value |
|
| 624 | + if (!array_key_exists($col, $this->data) && // handling of unset columns in $this->data |
|
| 625 | + (isset($this->table_def['fd'][$db_col]['default']) || // we have a default value |
|
| 626 | 626 | !isset($this->table_def['fd'][$db_col]['nullable']) || $this->table_def['fd'][$db_col]['nullable'])) // column is nullable |
| 627 | 627 | { |
| 628 | - continue; // no need to write that (unset) column |
|
| 628 | + continue; // no need to write that (unset) column |
|
| 629 | 629 | } |
| 630 | 630 | if ($this->table_def['fd'][$db_col]['type'] == 'varchar' && |
| 631 | 631 | strlen($this->data[$col]) > $this->table_def['fd'][$db_col]['precision']) |
| 632 | 632 | { |
| 633 | 633 | // truncate the field to mamimum length, if upper layers didn't care |
| 634 | - $data[$db_col] = substr($this->data[$col],0,$this->table_def['fd'][$db_col]['precision']); |
|
| 634 | + $data[$db_col] = substr($this->data[$col], 0, $this->table_def['fd'][$db_col]['precision']); |
|
| 635 | 635 | } |
| 636 | 636 | else |
| 637 | 637 | { |
| 638 | - $data[$db_col] = (string) $this->data[$col] === '' && $this->empty_on_write == 'NULL' ? null : $this->data[$col]; |
|
| 638 | + $data[$db_col] = (string)$this->data[$col] === '' && $this->empty_on_write == 'NULL' ? null : $this->data[$col]; |
|
| 639 | 639 | } |
| 640 | 640 | } |
| 641 | 641 | } |
| 642 | - $this->db->insert($this->table_name,$data,false,__LINE__,__FILE__,$this->app); |
|
| 642 | + $this->db->insert($this->table_name, $data, false, __LINE__, __FILE__, $this->app); |
|
| 643 | 643 | |
| 644 | 644 | if ($this->autoinc_id) |
| 645 | 645 | { |
| 646 | - $this->data[$this->db_key_cols[$this->autoinc_id]] = $this->db->get_last_insert_id($this->table_name,$this->autoinc_id); |
|
| 646 | + $this->data[$this->db_key_cols[$this->autoinc_id]] = $this->db->get_last_insert_id($this->table_name, $this->autoinc_id); |
|
| 647 | 647 | } |
| 648 | 648 | } |
| 649 | 649 | else // insert in table without auto id or update of existing row, dont write colums unset in $this->data |
| 650 | 650 | { |
| 651 | - foreach($this->db_data_cols as $db_col => $col) |
|
| 651 | + foreach ($this->db_data_cols as $db_col => $col) |
|
| 652 | 652 | { |
| 653 | 653 | // we need to update columns set to null: after a $this->data[$col]=null: |
| 654 | 654 | // - array_key_exits($col,$this->data) === true |
| 655 | 655 | // - isset($this->data[$col]) === false |
| 656 | - if (!array_key_exists($col,$this->data) && // handling of unset columns in $this->data |
|
| 657 | - ($this->autoinc_id || // update of table with auto id or |
|
| 658 | - isset($this->table_def['fd'][$db_col]['default']) || // we have a default value or |
|
| 656 | + if (!array_key_exists($col, $this->data) && // handling of unset columns in $this->data |
|
| 657 | + ($this->autoinc_id || // update of table with auto id or |
|
| 658 | + isset($this->table_def['fd'][$db_col]['default']) || // we have a default value or |
|
| 659 | 659 | !isset($this->table_def['fd'][$db_col]['nullable']) || $this->table_def['fd'][$db_col]['nullable'])) // column is nullable |
| 660 | 660 | { |
| 661 | - continue; // no need to write that (unset) column |
|
| 661 | + continue; // no need to write that (unset) column |
|
| 662 | 662 | } |
| 663 | - $data[$db_col] = !is_object($this->data[$col]) && (string) $this->data[$col] === '' && $this->empty_on_write == 'NULL' ? null : $this->data[$col]; |
|
| 663 | + $data[$db_col] = !is_object($this->data[$col]) && (string)$this->data[$col] === '' && $this->empty_on_write == 'NULL' ? null : $this->data[$col]; |
|
| 664 | 664 | } |
| 665 | 665 | // allow to add direct sql updates, eg. "etag=etag+1" with int keys |
| 666 | 666 | if (is_array($keys) && isset($keys[0])) |
| 667 | 667 | { |
| 668 | - for($n=0; isset($keys[$n]); ++$n) |
|
| 668 | + for ($n = 0; isset($keys[$n]); ++$n) |
|
| 669 | 669 | { |
| 670 | 670 | $data[] = $keys[$n]; |
| 671 | 671 | } |
| 672 | 672 | } |
| 673 | 673 | $keys = $extra_where; |
| 674 | - foreach($this->db_key_cols as $db_col => $col) |
|
| 674 | + foreach ($this->db_key_cols as $db_col => $col) |
|
| 675 | 675 | { |
| 676 | 676 | $keys[$db_col] = $this->data[$col]; |
| 677 | 677 | } |
@@ -682,16 +682,16 @@ discard block |
||
| 682 | 682 | } |
| 683 | 683 | if ($this->autoinc_id) |
| 684 | 684 | { |
| 685 | - $this->db->update($this->table_name,$data,$keys,__LINE__,__FILE__,$this->app); |
|
| 685 | + $this->db->update($this->table_name, $data, $keys, __LINE__, __FILE__, $this->app); |
|
| 686 | 686 | if (($nothing_affected = !$this->db->Errno && !$this->db->affected_rows()) && $extra_where) |
| 687 | 687 | { |
| 688 | - return true; // extra_where not met, eg. etag wrong |
|
| 688 | + return true; // extra_where not met, eg. etag wrong |
|
| 689 | 689 | } |
| 690 | 690 | } |
| 691 | 691 | // always try an insert if we have no autoinc_id, as we dont know if the data exists |
| 692 | 692 | if (!$this->autoinc_id || $nothing_affected) |
| 693 | 693 | { |
| 694 | - $this->db->insert($this->table_name,$data,$keys,__LINE__,__FILE__,$this->app); |
|
| 694 | + $this->db->insert($this->table_name, $data, $keys, __LINE__, __FILE__, $this->app); |
|
| 695 | 695 | } |
| 696 | 696 | } |
| 697 | 697 | $this->db2data(); |
@@ -706,7 +706,7 @@ discard block |
||
| 706 | 706 | * @param boolean $merge =true if true $fields will be merged with $this->data (after update!), otherwise $this->data will be just $fields |
| 707 | 707 | * @return int|boolean 0 on success, or errno != 0 on error, or true if $extra_where is given and no rows affected |
| 708 | 708 | */ |
| 709 | - function update($_fields,$merge=true) |
|
| 709 | + function update($_fields, $merge = true) |
|
| 710 | 710 | { |
| 711 | 711 | if ($merge) $this->data_merge($_fields); |
| 712 | 712 | |
@@ -714,23 +714,23 @@ discard block |
||
| 714 | 714 | |
| 715 | 715 | // extract the keys from $fields or - if not set there - from $this->data |
| 716 | 716 | $keys = array(); |
| 717 | - foreach($this->db_key_cols as $col => $name) |
|
| 717 | + foreach ($this->db_key_cols as $col => $name) |
|
| 718 | 718 | { |
| 719 | 719 | $keys[$col] = isset($fields[$name]) ? $fields[$name] : $this->data[$name]; |
| 720 | 720 | unset($fields[$name]); |
| 721 | 721 | } |
| 722 | 722 | // extract the data from $fields |
| 723 | 723 | $data = array(); |
| 724 | - foreach($this->db_data_cols as $col => $name) |
|
| 724 | + foreach ($this->db_data_cols as $col => $name) |
|
| 725 | 725 | { |
| 726 | - if (array_key_exists($name,$fields)) |
|
| 726 | + if (array_key_exists($name, $fields)) |
|
| 727 | 727 | { |
| 728 | 728 | $data[$col] = $fields[$name]; |
| 729 | 729 | unset($fields[$name]); |
| 730 | 730 | } |
| 731 | 731 | } |
| 732 | 732 | // add direct sql like 'etag=etag+1' (it has integer keys) |
| 733 | - foreach($fields as $key => $value) |
|
| 733 | + foreach ($fields as $key => $value) |
|
| 734 | 734 | { |
| 735 | 735 | if (is_int($key)) |
| 736 | 736 | { |
@@ -739,9 +739,9 @@ discard block |
||
| 739 | 739 | } |
| 740 | 740 | if (!$data) |
| 741 | 741 | { |
| 742 | - return 0; // nothing to update |
|
| 742 | + return 0; // nothing to update |
|
| 743 | 743 | } |
| 744 | - if (!$this->db->update($this->table_name,$data,$keys,__LINE__,__FILE__,$this->app)) |
|
| 744 | + if (!$this->db->update($this->table_name, $data, $keys, __LINE__, __FILE__, $this->app)) |
|
| 745 | 745 | { |
| 746 | 746 | return $this->db->Errno; |
| 747 | 747 | } |
@@ -755,7 +755,7 @@ discard block |
||
| 755 | 755 | * @param boolean $only_return_query =false return $query of delete call to db object, but not run it (used by so_sql_cf!) |
| 756 | 756 | * @return int|array affected rows, should be 1 if ok, 0 if an error or array with id's if $only_return_ids |
| 757 | 757 | */ |
| 758 | - function delete($keys=null,$only_return_query=false) |
|
| 758 | + function delete($keys = null, $only_return_query = false) |
|
| 759 | 759 | { |
| 760 | 760 | if ($this->autoinc_id && $keys && !is_array($keys)) |
| 761 | 761 | { |
@@ -769,7 +769,7 @@ discard block |
||
| 769 | 769 | else // data and keys are supplied in $keys |
| 770 | 770 | { |
| 771 | 771 | $data = $keys; $keys = array(); |
| 772 | - foreach($this->db_cols as $db_col => $col) |
|
| 772 | + foreach ($this->db_cols as $db_col => $col) |
|
| 773 | 773 | { |
| 774 | 774 | if (isset($data[$col])) |
| 775 | 775 | { |
@@ -779,13 +779,13 @@ discard block |
||
| 779 | 779 | } |
| 780 | 780 | $data = $this->data2db($data); |
| 781 | 781 | |
| 782 | - foreach($keys as $db_col => $col) |
|
| 782 | + foreach ($keys as $db_col => $col) |
|
| 783 | 783 | { |
| 784 | 784 | $query[$db_col] = $data[$col]; |
| 785 | 785 | } |
| 786 | 786 | if ($only_return_query) return $query; |
| 787 | 787 | |
| 788 | - $this->db->delete($this->table_name,$query,__LINE__,__FILE__,$this->app); |
|
| 788 | + $this->db->delete($this->table_name, $query, __LINE__, __FILE__, $this->app); |
|
| 789 | 789 | |
| 790 | 790 | return $this->db->affected_rows(); |
| 791 | 791 | } |
@@ -813,15 +813,15 @@ discard block |
||
| 813 | 813 | * @todo return an interator instead of an array |
| 814 | 814 | * @return array|NULL array of matching rows (the row is an array of the cols) or NULL |
| 815 | 815 | */ |
| 816 | - function &search($criteria,$only_keys=True,$order_by='',$extra_cols='',$wildcard='',$empty=False,$op='AND',$start=false,$filter=null,$join='',$need_full_no_count=false) |
|
| 816 | + function &search($criteria, $only_keys = True, $order_by = '', $extra_cols = '', $wildcard = '', $empty = False, $op = 'AND', $start = false, $filter = null, $join = '', $need_full_no_count = false) |
|
| 817 | 817 | { |
| 818 | 818 | //error_log(__METHOD__.'('.array2string(array_combine(array_slice(array('criteria','only_keys','order_by','extra_cols','wildcard','empty','op','start','filter','join','need_full_no_count'), 0, count(func_get_args())), func_get_args())).')'); |
| 819 | - if ((int) $this->debug >= 4) echo "<p>so_sql::search(".print_r($criteria,true).",'$only_keys','$order_by',".print_r($extra_cols,true).",'$wildcard','$empty','$op','$start',".print_r($filter,true).",'$join')</p>\n"; |
|
| 819 | + if ((int)$this->debug >= 4) echo "<p>so_sql::search(".print_r($criteria, true).",'$only_keys','$order_by',".print_r($extra_cols, true).",'$wildcard','$empty','$op','$start',".print_r($filter, true).",'$join')</p>\n"; |
|
| 820 | 820 | |
| 821 | 821 | // if extending class or instanciator set columns to search, convert string criteria to array |
| 822 | 822 | if ($criteria && !is_array($criteria)) |
| 823 | 823 | { |
| 824 | - $search = $this->search2criteria($criteria,$wildcard,$op); |
|
| 824 | + $search = $this->search2criteria($criteria, $wildcard, $op); |
|
| 825 | 825 | $criteria = array($search); |
| 826 | 826 | } |
| 827 | 827 | if (!is_array($criteria)) |
@@ -831,7 +831,7 @@ discard block |
||
| 831 | 831 | else |
| 832 | 832 | { |
| 833 | 833 | $criteria = $this->data2db($criteria); |
| 834 | - foreach($criteria as $col => $val) |
|
| 834 | + foreach ($criteria as $col => $val) |
|
| 835 | 835 | { |
| 836 | 836 | if (is_int($col)) |
| 837 | 837 | { |
@@ -839,7 +839,7 @@ discard block |
||
| 839 | 839 | } |
| 840 | 840 | elseif ($empty || $val != '') |
| 841 | 841 | { |
| 842 | - if (!($db_col = array_search($col,$this->db_cols))) |
|
| 842 | + if (!($db_col = array_search($col, $this->db_cols))) |
|
| 843 | 843 | { |
| 844 | 844 | $db_col = $col; |
| 845 | 845 | } |
@@ -850,7 +850,7 @@ discard block |
||
| 850 | 850 | $this->table_def['fd'][$db_col]['nullable'] !== false) |
| 851 | 851 | { |
| 852 | 852 | unset($criteria[$col]); |
| 853 | - $query[] = '(' . $db_col . ' IS NULL OR ' . $db_col . " = '')"; |
|
| 853 | + $query[] = '('.$db_col.' IS NULL OR '.$db_col." = '')"; |
|
| 854 | 854 | } |
| 855 | 855 | else |
| 856 | 856 | { |
@@ -858,10 +858,10 @@ discard block |
||
| 858 | 858 | } |
| 859 | 859 | } |
| 860 | 860 | elseif ($wildcard || $criteria[$col][0] == '!' || |
| 861 | - is_string($criteria[$col]) && (strpos($criteria[$col],'*')!==false || strpos($criteria[$col],'?')!==false)) |
|
| 861 | + is_string($criteria[$col]) && (strpos($criteria[$col], '*') !== false || strpos($criteria[$col], '?') !== false)) |
|
| 862 | 862 | { |
| 863 | 863 | // if search pattern alread contains a wildcard, do NOT add further ones automatic |
| 864 | - if (is_string($criteria[$col]) && (strpos($criteria[$col],'*')!==false || strpos($criteria[$col],'?')!==false)) |
|
| 864 | + if (is_string($criteria[$col]) && (strpos($criteria[$col], '*') !== false || strpos($criteria[$col], '?') !== false)) |
|
| 865 | 865 | { |
| 866 | 866 | $wildcard = ''; |
| 867 | 867 | } |
@@ -870,19 +870,19 @@ discard block |
||
| 870 | 870 | if ($criteria[$col][0] == '!') |
| 871 | 871 | { |
| 872 | 872 | $cmp_op = ' NOT'.$cmp_op; |
| 873 | - $criteria[$col] = substr($criteria[$col],1); |
|
| 873 | + $criteria[$col] = substr($criteria[$col], 1); |
|
| 874 | 874 | $negate = true; |
| 875 | 875 | } |
| 876 | - foreach(explode(' ',$criteria[$col]) as $crit) |
|
| 876 | + foreach (explode(' ', $criteria[$col]) as $crit) |
|
| 877 | 877 | { |
| 878 | 878 | $query[] = ($negate ? ' ('.$db_col.' IS NULL OR ' : '').$db_col.$cmp_op. |
| 879 | - $this->db->quote($wildcard.str_replace(array('%','_','*','?'),array('\\%','\\_','%','_'),$crit).$wildcard). |
|
| 879 | + $this->db->quote($wildcard.str_replace(array('%', '_', '*', '?'), array('\\%', '\\_', '%', '_'), $crit).$wildcard). |
|
| 880 | 880 | ($negate ? ') ' : ''); |
| 881 | 881 | } |
| 882 | 882 | } |
| 883 | - elseif (strpos($db_col,'.') !== false) // we have a table-name specified |
|
| 883 | + elseif (strpos($db_col, '.') !== false) // we have a table-name specified |
|
| 884 | 884 | { |
| 885 | - list($table,$only_col) = explode('.',$db_col); |
|
| 885 | + list($table, $only_col) = explode('.', $db_col); |
|
| 886 | 886 | $type = $this->db->get_column_attribute($only_col, $table, true, 'type'); |
| 887 | 887 | if (empty($type)) |
| 888 | 888 | { |
@@ -890,15 +890,15 @@ discard block |
||
| 890 | 890 | } |
| 891 | 891 | if (is_array($val) && count($val) > 1) |
| 892 | 892 | { |
| 893 | - foreach($val as &$v) |
|
| 893 | + foreach ($val as &$v) |
|
| 894 | 894 | { |
| 895 | 895 | $v = $this->db->quote($v, $type); |
| 896 | 896 | } |
| 897 | - $query[] = $sql = $db_col.' IN (' .implode(',',$val).')'; |
|
| 897 | + $query[] = $sql = $db_col.' IN ('.implode(',', $val).')'; |
|
| 898 | 898 | } |
| 899 | 899 | else |
| 900 | 900 | { |
| 901 | - $query[] = $db_col.'='.$this->db->quote(is_array($val)?array_shift($val):$val,$type); |
|
| 901 | + $query[] = $db_col.'='.$this->db->quote(is_array($val) ? array_shift($val) : $val, $type); |
|
| 902 | 902 | } |
| 903 | 903 | } |
| 904 | 904 | else |
@@ -907,7 +907,7 @@ discard block |
||
| 907 | 907 | } |
| 908 | 908 | } |
| 909 | 909 | } |
| 910 | - if (is_array($query) && $op != 'AND') $query = $this->db->column_data_implode(' '.$op.' ',$query); |
|
| 910 | + if (is_array($query) && $op != 'AND') $query = $this->db->column_data_implode(' '.$op.' ', $query); |
|
| 911 | 911 | } |
| 912 | 912 | if (is_array($filter)) |
| 913 | 913 | { |
@@ -915,19 +915,19 @@ discard block |
||
| 915 | 915 | $data2db_filter = $this->data2db($filter); |
| 916 | 916 | if (!is_array($data2db_filter)) { |
| 917 | 917 | echo function_backtrace()."<br/>\n"; |
| 918 | - echo "filter=";_debug_array($filter); |
|
| 919 | - echo "data2db(filter)=";_debug_array($data2db_filter); |
|
| 918 | + echo "filter="; _debug_array($filter); |
|
| 919 | + echo "data2db(filter)="; _debug_array($data2db_filter); |
|
| 920 | 920 | } |
| 921 | - foreach($data2db_filter as $col => $val) |
|
| 921 | + foreach ($data2db_filter as $col => $val) |
|
| 922 | 922 | { |
| 923 | 923 | if ($val !== '') |
| 924 | 924 | { |
| 925 | 925 | // check if a db-internal name conversation necessary |
| 926 | - if (!is_int($col) && ($c = array_search($col,$this->db_cols))) |
|
| 926 | + if (!is_int($col) && ($c = array_search($col, $this->db_cols))) |
|
| 927 | 927 | { |
| 928 | - $col = $this->table_name . '.' . $c; |
|
| 928 | + $col = $this->table_name.'.'.$c; |
|
| 929 | 929 | } |
| 930 | - if(is_int($col)) |
|
| 930 | + if (is_int($col)) |
|
| 931 | 931 | { |
| 932 | 932 | $db_filter[] = $val; |
| 933 | 933 | } |
@@ -945,35 +945,35 @@ discard block |
||
| 945 | 945 | { |
| 946 | 946 | if ($op != 'AND') |
| 947 | 947 | { |
| 948 | - $db_filter[] = '('.$this->db->column_data_implode(' '.$op.' ',$query).')'; |
|
| 948 | + $db_filter[] = '('.$this->db->column_data_implode(' '.$op.' ', $query).')'; |
|
| 949 | 949 | } |
| 950 | 950 | else |
| 951 | 951 | { |
| 952 | - $db_filter = array_merge($db_filter,$query); |
|
| 952 | + $db_filter = array_merge($db_filter, $query); |
|
| 953 | 953 | } |
| 954 | 954 | } |
| 955 | 955 | $query = $db_filter; |
| 956 | 956 | } |
| 957 | - if ((int) $this->debug >= 4) |
|
| 957 | + if ((int)$this->debug >= 4) |
|
| 958 | 958 | { |
| 959 | - echo "<p>so_sql::search(,only_keys=$only_keys,order_by='$order_by',wildcard='$wildcard',empty=$empty,$op,start='$start',".print_r($filter,true).") query=".print_r($query,true).", total='$this->total'</p>\n"; |
|
| 959 | + echo "<p>so_sql::search(,only_keys=$only_keys,order_by='$order_by',wildcard='$wildcard',empty=$empty,$op,start='$start',".print_r($filter, true).") query=".print_r($query, true).", total='$this->total'</p>\n"; |
|
| 960 | 960 | echo "<br>criteria = "; _debug_array($criteria); |
| 961 | 961 | } |
| 962 | 962 | if ($only_keys === true) |
| 963 | 963 | { |
| 964 | 964 | $colums = array_keys($this->db_key_cols); |
| 965 | - foreach($colums as &$column) |
|
| 965 | + foreach ($colums as &$column) |
|
| 966 | 966 | { |
| 967 | - $column = $this->table_name . '.' . $column; |
|
| 967 | + $column = $this->table_name.'.'.$column; |
|
| 968 | 968 | } |
| 969 | 969 | } |
| 970 | 970 | elseif (is_array($only_keys)) |
| 971 | 971 | { |
| 972 | 972 | $colums = array(); |
| 973 | - foreach($only_keys as $key => $col) |
|
| 973 | + foreach ($only_keys as $key => $col) |
|
| 974 | 974 | { |
| 975 | 975 | //Convert ambiguous columns to prefixed tablename.column name |
| 976 | - $colums[] = ($db_col = array_search($col,$this->db_cols)) ? $this->table_name .'.'.$db_col.' AS '.$col :$col; |
|
| 976 | + $colums[] = ($db_col = array_search($col, $this->db_cols)) ? $this->table_name.'.'.$db_col.' AS '.$col : $col; |
|
| 977 | 977 | } |
| 978 | 978 | } |
| 979 | 979 | elseif (!$only_keys) |
@@ -1003,20 +1003,20 @@ discard block |
||
| 1003 | 1003 | { |
| 1004 | 1004 | $colums[$key] = $this->table_name.'.'.$this->autoinc_id.' AS '.$this->autoinc_id; |
| 1005 | 1005 | } |
| 1006 | - elseif (!is_array($colums) && strpos($colums,$this->autoinc_id) !== false) |
|
| 1006 | + elseif (!is_array($colums) && strpos($colums, $this->autoinc_id) !== false) |
|
| 1007 | 1007 | { |
| 1008 | - $colums = preg_replace('/(?<! AS)([ ,]+)'.preg_quote($this->autoinc_id).'([ ,]+)/','\\1'.$this->table_name.'.'.$this->autoinc_id.' AS '.$this->autoinc_id.'\\2',$colums); |
|
| 1008 | + $colums = preg_replace('/(?<! AS)([ ,]+)'.preg_quote($this->autoinc_id).'([ ,]+)/', '\\1'.$this->table_name.'.'.$this->autoinc_id.' AS '.$this->autoinc_id.'\\2', $colums); |
|
| 1009 | 1009 | } |
| 1010 | 1010 | } |
| 1011 | - $num_rows = 0; // as spec. in max_matches in the user-prefs |
|
| 1012 | - if (is_array($start)) list($start,$num_rows) = $start; |
|
| 1011 | + $num_rows = 0; // as spec. in max_matches in the user-prefs |
|
| 1012 | + if (is_array($start)) list($start, $num_rows) = $start; |
|
| 1013 | 1013 | |
| 1014 | 1014 | // fix GROUP BY clause to contain all non-aggregate selected columns |
| 1015 | - if ($order_by && stripos($order_by,'GROUP BY') !== false) |
|
| 1015 | + if ($order_by && stripos($order_by, 'GROUP BY') !== false) |
|
| 1016 | 1016 | { |
| 1017 | 1017 | $order_by = $this->fix_group_by_columns($order_by, $colums, $this->table_name, $this->autoinc_id); |
| 1018 | 1018 | } |
| 1019 | - elseif ($order_by && stripos($order_by,'ORDER BY')===false && stripos($order_by,'GROUP BY')===false && stripos($order_by,'HAVING')===false) |
|
| 1019 | + elseif ($order_by && stripos($order_by, 'ORDER BY') === false && stripos($order_by, 'GROUP BY') === false && stripos($order_by, 'HAVING') === false) |
|
| 1020 | 1020 | { |
| 1021 | 1021 | $order_by = 'ORDER BY '.$order_by; |
| 1022 | 1022 | } |
@@ -1039,9 +1039,9 @@ discard block |
||
| 1039 | 1039 | ); |
| 1040 | 1040 | if (!$union_cols) // union used the colum-names of the first query |
| 1041 | 1041 | { |
| 1042 | - $union_cols = $this->_get_columns($only_keys,$extra_cols); |
|
| 1042 | + $union_cols = $this->_get_columns($only_keys, $extra_cols); |
|
| 1043 | 1043 | } |
| 1044 | - return true; // waiting for further calls, before running the union-query |
|
| 1044 | + return true; // waiting for further calls, before running the union-query |
|
| 1045 | 1045 | } |
| 1046 | 1046 | // running the union query now |
| 1047 | 1047 | if ($start !== false) // need to get the total too, saved in $this->total |
@@ -1052,10 +1052,10 @@ discard block |
||
| 1052 | 1052 | } |
| 1053 | 1053 | else // cant do a count, have to run the query without limit |
| 1054 | 1054 | { |
| 1055 | - $this->total = $this->db->union($union,__LINE__,__FILE__)->NumRows(); |
|
| 1055 | + $this->total = $this->db->union($union, __LINE__, __FILE__)->NumRows(); |
|
| 1056 | 1056 | } |
| 1057 | 1057 | } |
| 1058 | - $rs = $this->db->union($union,__LINE__,__FILE__,$order_by,$start,$num_rows); |
|
| 1058 | + $rs = $this->db->union($union, __LINE__, __FILE__, $order_by, $start, $num_rows); |
|
| 1059 | 1059 | if ($this->debug) error_log(__METHOD__."() ".$this->db->Query_ID->sql); |
| 1060 | 1060 | |
| 1061 | 1061 | $cols = $union_cols; |
@@ -1069,21 +1069,21 @@ discard block |
||
| 1069 | 1069 | { |
| 1070 | 1070 | $mysql_calc_rows = 'SQL_CALC_FOUND_ROWS '; |
| 1071 | 1071 | } |
| 1072 | - elseif (!$need_full_no_count && (!$join || stripos($join,'LEFT JOIN')!==false)) |
|
| 1072 | + elseif (!$need_full_no_count && (!$join || stripos($join, 'LEFT JOIN') !== false)) |
|
| 1073 | 1073 | { |
| 1074 | - $this->total = $this->db->select($this->table_name,'COUNT(*)',$query,__LINE__,__FILE__,false,'',$this->app,0,$join)->fetchColumn(); |
|
| 1074 | + $this->total = $this->db->select($this->table_name, 'COUNT(*)', $query, __LINE__, __FILE__, false, '', $this->app, 0, $join)->fetchColumn(); |
|
| 1075 | 1075 | } |
| 1076 | 1076 | else // cant do a count, have to run the query without limit |
| 1077 | 1077 | { |
| 1078 | - $this->total = $this->db->select($this->table_name,$colums,$query,__LINE__,__FILE__,false,$order_by,false,0,$join)->NumRows(); |
|
| 1078 | + $this->total = $this->db->select($this->table_name, $colums, $query, __LINE__, __FILE__, false, $order_by, false, 0, $join)->NumRows(); |
|
| 1079 | 1079 | } |
| 1080 | 1080 | } |
| 1081 | - $rs = $this->db->select($this->table_name,$mysql_calc_rows.$colums,$query,__LINE__,__FILE__, |
|
| 1082 | - $start,$order_by,$this->app,$num_rows,$join); |
|
| 1081 | + $rs = $this->db->select($this->table_name, $mysql_calc_rows.$colums, $query, __LINE__, __FILE__, |
|
| 1082 | + $start, $order_by, $this->app, $num_rows, $join); |
|
| 1083 | 1083 | if ($this->debug) error_log(__METHOD__."() ".$this->db->Query_ID->sql); |
| 1084 | - $cols = $this->_get_columns($only_keys,$extra_cols); |
|
| 1084 | + $cols = $this->_get_columns($only_keys, $extra_cols); |
|
| 1085 | 1085 | } |
| 1086 | - if ((int) $this->debug >= 4) echo "<p>sql='{$this->db->Query_ID->sql}'</p>\n"; |
|
| 1086 | + if ((int)$this->debug >= 4) echo "<p>sql='{$this->db->Query_ID->sql}'</p>\n"; |
|
| 1087 | 1087 | |
| 1088 | 1088 | if ($mysql_calc_rows) |
| 1089 | 1089 | { |
@@ -1092,14 +1092,14 @@ discard block |
||
| 1092 | 1092 | // ToDo: Implement that as an iterator, as $rs is also an interator and we could return one instead of an array |
| 1093 | 1093 | if ($this->search_return_iterator) |
| 1094 | 1094 | { |
| 1095 | - return new Db2DataIterator($this,$rs); |
|
| 1095 | + return new Db2DataIterator($this, $rs); |
|
| 1096 | 1096 | } |
| 1097 | 1097 | $arr = array(); |
| 1098 | 1098 | $n = 0; |
| 1099 | - if ($rs) foreach($rs as $row) |
|
| 1099 | + if ($rs) foreach ($rs as $row) |
|
| 1100 | 1100 | { |
| 1101 | 1101 | $data = array(); |
| 1102 | - foreach($cols as $db_col => $col) |
|
| 1102 | + foreach ($cols as $db_col => $col) |
|
| 1103 | 1103 | { |
| 1104 | 1104 | $data[$col] = (isset($row[$db_col]) ? $row[$db_col] : $row[$col]); |
| 1105 | 1105 | } |
@@ -1129,7 +1129,7 @@ discard block |
||
| 1129 | 1129 | $matches = null; |
| 1130 | 1130 | if (substr($GLOBALS['egw']->db->Type, 0, 5) == 'mysql' || !preg_match('/(GROUP BY .*)(HAVING.*|ORDER BY.*)?$/iU', $group_by, $matches)) |
| 1131 | 1131 | { |
| 1132 | - return $group_by; // nothing to do |
|
| 1132 | + return $group_by; // nothing to do |
|
| 1133 | 1133 | } |
| 1134 | 1134 | $changes = 0; |
| 1135 | 1135 | $group_by_cols = preg_split('/, */', trim(substr($matches[1], 9))); |
@@ -1139,9 +1139,9 @@ discard block |
||
| 1139 | 1139 | $columns = preg_split('/, */', $columns); |
| 1140 | 1140 | |
| 1141 | 1141 | // fix columns containing commas as part of function calls |
| 1142 | - for($n = 0; $n < count($columns); ++$n) |
|
| 1142 | + for ($n = 0; $n < count($columns); ++$n) |
|
| 1143 | 1143 | { |
| 1144 | - $col =& $columns[$n]; |
|
| 1144 | + $col = & $columns[$n]; |
|
| 1145 | 1145 | while (substr_count($col, '(') > substr_count($col, ')') && ++$n < count($columns)) |
| 1146 | 1146 | { |
| 1147 | 1147 | $col .= ','.$columns[$n]; |
@@ -1150,7 +1150,7 @@ discard block |
||
| 1150 | 1150 | } |
| 1151 | 1151 | unset($col); |
| 1152 | 1152 | } |
| 1153 | - foreach($columns as $n => $col) |
|
| 1153 | + foreach ($columns as $n => $col) |
|
| 1154 | 1154 | { |
| 1155 | 1155 | if ($col == '*') |
| 1156 | 1156 | { |
@@ -1163,7 +1163,7 @@ discard block |
||
| 1163 | 1163 | { |
| 1164 | 1164 | if (($pos = stripos($col, 'DISTINCT ')) !== false) |
| 1165 | 1165 | { |
| 1166 | - $col = substr($col, $pos+9); |
|
| 1166 | + $col = substr($col, $pos + 9); |
|
| 1167 | 1167 | } |
| 1168 | 1168 | $alias = $col; |
| 1169 | 1169 | if (stripos($col, ' AS ')) list($col, $alias) = preg_split('/ +AS +/i', $col); |
@@ -1181,7 +1181,7 @@ discard block |
||
| 1181 | 1181 | $ret = $group_by; |
| 1182 | 1182 | if ($changes) |
| 1183 | 1183 | { |
| 1184 | - $ret = str_replace($matches[1], 'GROUP BY '.implode(',', $group_by_cols).' ', $group_by); |
|
| 1184 | + $ret = str_replace($matches[1], 'GROUP BY '.implode(',', $group_by_cols).' ', $group_by); |
|
| 1185 | 1185 | //error_log(__METHOD__."('$group_by', ".array2string($columns).") group_by_cols=".array2string($group_by_cols)." changed to $ret"); |
| 1186 | 1186 | } |
| 1187 | 1187 | return $ret; |
@@ -1197,12 +1197,12 @@ discard block |
||
| 1197 | 1197 | * @param array $search_cols =array() List of columns to search. If not provided, all columns in $this->db_cols will be considered |
| 1198 | 1198 | * @return array or column => value pairs |
| 1199 | 1199 | */ |
| 1200 | - public function search2criteria($_pattern,&$wildcard='',&$op='AND',$extra_col=null, $search_cols = array()) |
|
| 1200 | + public function search2criteria($_pattern, &$wildcard = '', &$op = 'AND', $extra_col = null, $search_cols = array()) |
|
| 1201 | 1201 | { |
| 1202 | 1202 | $pattern = trim($_pattern); |
| 1203 | 1203 | // This function can get called multiple times. Make sure it doesn't re-process. |
| 1204 | 1204 | if (empty($pattern) || is_array($pattern)) return $pattern; |
| 1205 | - if(strpos($pattern, 'CAST(COALESCE(') !== false) |
|
| 1205 | + if (strpos($pattern, 'CAST(COALESCE(') !== false) |
|
| 1206 | 1206 | { |
| 1207 | 1207 | return $pattern; |
| 1208 | 1208 | } |
@@ -1218,20 +1218,20 @@ discard block |
||
| 1218 | 1218 | $numeric_types = array('auto', 'int', 'float', 'double', 'decimal'); |
| 1219 | 1219 | $numeric_columns = array(); |
| 1220 | 1220 | |
| 1221 | - if(!$search_cols) |
|
| 1221 | + if (!$search_cols) |
|
| 1222 | 1222 | { |
| 1223 | 1223 | $search_cols = $this->get_default_search_columns(); |
| 1224 | 1224 | } |
| 1225 | 1225 | // Concat all fields to be searched together, so the conditions operate across the whole record |
| 1226 | - foreach($search_cols as $col) |
|
| 1226 | + foreach ($search_cols as $col) |
|
| 1227 | 1227 | { |
| 1228 | 1228 | $col_name = $col; |
| 1229 | 1229 | $table = $this->table_name; |
| 1230 | - if (strpos($col,'.') !== false) |
|
| 1230 | + if (strpos($col, '.') !== false) |
|
| 1231 | 1231 | { |
| 1232 | - list($table,$col_name) = explode('.',$col); |
|
| 1232 | + list($table, $col_name) = explode('.', $col); |
|
| 1233 | 1233 | } |
| 1234 | - $table_def = $table == $this->table_name ? $this->table_def : $this->db->get_table_definitions(true,$table); |
|
| 1234 | + $table_def = $table == $this->table_name ? $this->table_def : $this->db->get_table_definitions(true, $table); |
|
| 1235 | 1235 | if ($table_def['fd'][$col_name] && in_array($table_def['fd'][$col_name]['type'], $numeric_types)) |
| 1236 | 1236 | { |
| 1237 | 1237 | $numeric_columns[] = $col; |
@@ -1239,11 +1239,11 @@ discard block |
||
| 1239 | 1239 | } |
| 1240 | 1240 | if ($this->db->Type == 'mysql' && $table_def['fd'][$col_name]['type'] === 'ascii' && preg_match('/[\x80-\xFF]/', $_pattern)) |
| 1241 | 1241 | { |
| 1242 | - continue; // will only give sql error |
|
| 1242 | + continue; // will only give sql error |
|
| 1243 | 1243 | } |
| 1244 | - $columns[] = sprintf($this->db->capabilities[Api\Db::CAPABILITY_CAST_AS_VARCHAR],"COALESCE($col,'')"); |
|
| 1244 | + $columns[] = sprintf($this->db->capabilities[Api\Db::CAPABILITY_CAST_AS_VARCHAR], "COALESCE($col,'')"); |
|
| 1245 | 1245 | } |
| 1246 | - if(!$columns) |
|
| 1246 | + if (!$columns) |
|
| 1247 | 1247 | { |
| 1248 | 1248 | return array(); |
| 1249 | 1249 | } |
@@ -1252,9 +1252,9 @@ discard block |
||
| 1252 | 1252 | $break = ' '; |
| 1253 | 1253 | $token = strtok($pattern, $break); |
| 1254 | 1254 | |
| 1255 | - while($token) |
|
| 1255 | + while ($token) |
|
| 1256 | 1256 | { |
| 1257 | - if($token == strtoupper(lang('AND')) || $token == 'AND') |
|
| 1257 | + if ($token == strtoupper(lang('AND')) || $token == 'AND') |
|
| 1258 | 1258 | { |
| 1259 | 1259 | $token = '+'.strtok($break); |
| 1260 | 1260 | } |
@@ -1267,10 +1267,10 @@ discard block |
||
| 1267 | 1267 | { |
| 1268 | 1268 | $token = '-'.strtok($break); |
| 1269 | 1269 | } |
| 1270 | - if ($token[0]=='"') |
|
| 1270 | + if ($token[0] == '"') |
|
| 1271 | 1271 | { |
| 1272 | - $token = substr($token, 1,strlen($token)); |
|
| 1273 | - if(substr($token, -1) != '"') |
|
| 1272 | + $token = substr($token, 1, strlen($token)); |
|
| 1273 | + if (substr($token, -1) != '"') |
|
| 1274 | 1274 | { |
| 1275 | 1275 | $token .= ' '.strtok('"'); |
| 1276 | 1276 | } |
@@ -1281,16 +1281,16 @@ discard block |
||
| 1281 | 1281 | } |
| 1282 | 1282 | |
| 1283 | 1283 | // prepend and append extra wildcard %, if pattern does NOT already contain wildcards |
| 1284 | - if (strpos($token,'*') === false && strpos($token,'?') === false) |
|
| 1284 | + if (strpos($token, '*') === false && strpos($token, '?') === false) |
|
| 1285 | 1285 | { |
| 1286 | - $wildcard = '%'; // if pattern contains no wildcards, add them before AND after the pattern |
|
| 1286 | + $wildcard = '%'; // if pattern contains no wildcards, add them before AND after the pattern |
|
| 1287 | 1287 | } |
| 1288 | 1288 | else |
| 1289 | 1289 | { |
| 1290 | - $wildcard = ''; // no extra wildcard, if pattern already contains some |
|
| 1290 | + $wildcard = ''; // no extra wildcard, if pattern already contains some |
|
| 1291 | 1291 | } |
| 1292 | 1292 | |
| 1293 | - switch($token[0]) |
|
| 1293 | + switch ($token[0]) |
|
| 1294 | 1294 | { |
| 1295 | 1295 | case '+': |
| 1296 | 1296 | $op = 'AND'; |
@@ -1305,32 +1305,32 @@ discard block |
||
| 1305 | 1305 | $op = 'OR'; |
| 1306 | 1306 | break; |
| 1307 | 1307 | } |
| 1308 | - $token_filter = ' '.call_user_func_array(array($GLOBALS['egw']->db,'concat'),$columns).' '. |
|
| 1309 | - $this->db->capabilities['case_insensitive_like'] . ' ' . |
|
| 1310 | - $GLOBALS['egw']->db->quote($wildcard.str_replace(array('%','_','*','?'),array('\\%','\\_','%','_'),$token).$wildcard); |
|
| 1308 | + $token_filter = ' '.call_user_func_array(array($GLOBALS['egw']->db, 'concat'), $columns).' '. |
|
| 1309 | + $this->db->capabilities['case_insensitive_like'].' '. |
|
| 1310 | + $GLOBALS['egw']->db->quote($wildcard.str_replace(array('%', '_', '*', '?'), array('\\%', '\\_', '%', '_'), $token).$wildcard); |
|
| 1311 | 1311 | |
| 1312 | 1312 | // Compare numeric token as equality for numeric columns |
| 1313 | 1313 | // skip user-wildcards (*,?) in is_numeric test, but not SQL wildcards, which get escaped and give sql-error |
| 1314 | - if (is_numeric(str_replace(array('*','?'), '', $token))) |
|
| 1314 | + if (is_numeric(str_replace(array('*', '?'), '', $token))) |
|
| 1315 | 1315 | { |
| 1316 | 1316 | $numeric_filter = array(); |
| 1317 | - foreach($numeric_columns as $col) |
|
| 1317 | + foreach ($numeric_columns as $col) |
|
| 1318 | 1318 | { |
| 1319 | - if($wildcard == '') |
|
| 1319 | + if ($wildcard == '') |
|
| 1320 | 1320 | { |
| 1321 | 1321 | // Token has a wildcard from user, use LIKE |
| 1322 | - $numeric_filter[] = "($col IS NOT NULL AND CAST($col AS CHAR) " . |
|
| 1323 | - $this->db->capabilities['case_insensitive_like'] . ' ' . |
|
| 1324 | - $GLOBALS['egw']->db->quote(str_replace(array('*','?'), array('%','_'), $token)) . ')'; |
|
| 1322 | + $numeric_filter[] = "($col IS NOT NULL AND CAST($col AS CHAR) ". |
|
| 1323 | + $this->db->capabilities['case_insensitive_like'].' '. |
|
| 1324 | + $GLOBALS['egw']->db->quote(str_replace(array('*', '?'), array('%', '_'), $token)).')'; |
|
| 1325 | 1325 | } |
| 1326 | 1326 | else |
| 1327 | 1327 | { |
| 1328 | 1328 | $numeric_filter[] = "($col IS NOT NULL AND $col = $token)"; |
| 1329 | 1329 | } |
| 1330 | 1330 | } |
| 1331 | - if(count($numeric_filter) > 0) |
|
| 1331 | + if (count($numeric_filter) > 0) |
|
| 1332 | 1332 | { |
| 1333 | - $token_filter = '(' . $token_filter . ' OR ' . implode(' OR ', $numeric_filter) . ')'; |
|
| 1333 | + $token_filter = '('.$token_filter.' OR '.implode(' OR ', $numeric_filter).')'; |
|
| 1334 | 1334 | } |
| 1335 | 1335 | } |
| 1336 | 1336 | $criteria[$op][] = $token_filter; |
@@ -1338,32 +1338,32 @@ discard block |
||
| 1338 | 1338 | $token = strtok($break); |
| 1339 | 1339 | } |
| 1340 | 1340 | |
| 1341 | - if($criteria['NOT']) |
|
| 1341 | + if ($criteria['NOT']) |
|
| 1342 | 1342 | { |
| 1343 | - $filter[] = 'NOT (' . implode(' OR ', $criteria['NOT']) . ') '; |
|
| 1343 | + $filter[] = 'NOT ('.implode(' OR ', $criteria['NOT']).') '; |
|
| 1344 | 1344 | } |
| 1345 | - if($criteria['AND']) |
|
| 1345 | + if ($criteria['AND']) |
|
| 1346 | 1346 | { |
| 1347 | - $filter[] = implode(' AND ', $criteria['AND']) . ' '; |
|
| 1347 | + $filter[] = implode(' AND ', $criteria['AND']).' '; |
|
| 1348 | 1348 | } |
| 1349 | - if($criteria['OR']) |
|
| 1349 | + if ($criteria['OR']) |
|
| 1350 | 1350 | { |
| 1351 | - $filter[] = '(' . implode(' OR ', $criteria['OR']) . ') '; |
|
| 1351 | + $filter[] = '('.implode(' OR ', $criteria['OR']).') '; |
|
| 1352 | 1352 | } |
| 1353 | 1353 | |
| 1354 | - if(count($filter)) |
|
| 1354 | + if (count($filter)) |
|
| 1355 | 1355 | { |
| 1356 | - $result = '(' . implode(' AND ', $filter) . ')'; |
|
| 1356 | + $result = '('.implode(' AND ', $filter).')'; |
|
| 1357 | 1357 | } |
| 1358 | 1358 | |
| 1359 | 1359 | // OR extra column on the end so a null or blank won't block a hit in the main columns |
| 1360 | 1360 | if ($extra_col) |
| 1361 | 1361 | { |
| 1362 | - $result .= (strlen($result) ? ' OR ' : ' ') . "$extra_col = " . $GLOBALS['egw']->db->quote($pattern); |
|
| 1362 | + $result .= (strlen($result) ? ' OR ' : ' ')."$extra_col = ".$GLOBALS['egw']->db->quote($pattern); |
|
| 1363 | 1363 | } |
| 1364 | 1364 | |
| 1365 | 1365 | $op = 'OR'; |
| 1366 | - return array('(' . $result . ')'); |
|
| 1366 | + return array('('.$result.')'); |
|
| 1367 | 1367 | } |
| 1368 | 1368 | |
| 1369 | 1369 | /** |
@@ -1382,21 +1382,21 @@ discard block |
||
| 1382 | 1382 | $numeric_types = array('auto', 'int', 'float', 'double'); |
| 1383 | 1383 | |
| 1384 | 1384 | // Skip some numeric columns that don't make sense to search if we have to default to all columns |
| 1385 | - if(is_null($this->columns_to_search)) |
|
| 1385 | + if (is_null($this->columns_to_search)) |
|
| 1386 | 1386 | { |
| 1387 | - foreach($search_cols as $key => &$col) |
|
| 1387 | + foreach ($search_cols as $key => &$col) |
|
| 1388 | 1388 | { |
| 1389 | 1389 | // If the name as given isn't a real column name, and adding the prefix doesn't help, skip it |
| 1390 | - if(!$this->table_def['fd'][$col] && !($col = $this->prefix.array_search($col, $search_cols))) { |
|
| 1390 | + if (!$this->table_def['fd'][$col] && !($col = $this->prefix.array_search($col, $search_cols))) { |
|
| 1391 | 1391 | // Can't search this column |
| 1392 | 1392 | unset($search_cols[$key]); |
| 1393 | 1393 | continue; |
| 1394 | 1394 | } |
| 1395 | - if(in_array($this->table_def['fd'][$col]['type'], $numeric_types)) |
|
| 1395 | + if (in_array($this->table_def['fd'][$col]['type'], $numeric_types)) |
|
| 1396 | 1396 | { |
| 1397 | - foreach($skip_columns_with as $bad) |
|
| 1397 | + foreach ($skip_columns_with as $bad) |
|
| 1398 | 1398 | { |
| 1399 | - if(strpos($col, $bad) !== false) |
|
| 1399 | + if (strpos($col, $bad) !== false) |
|
| 1400 | 1400 | { |
| 1401 | 1401 | unset($search_cols[$key]); |
| 1402 | 1402 | continue 2; |
@@ -1418,7 +1418,7 @@ discard block |
||
| 1418 | 1418 | * @param string|array $extra_cols ='' string or array of strings to be added to the SELECT, eg. "count(*) as num" |
| 1419 | 1419 | * @return array with columns as db-name => internal-name pairs |
| 1420 | 1420 | */ |
| 1421 | - function _get_columns($only_keys,$extra_cols) |
|
| 1421 | + function _get_columns($only_keys, $extra_cols) |
|
| 1422 | 1422 | { |
| 1423 | 1423 | //echo "_get_columns() only_keys="; _debug_array($only_keys); echo "extra_cols="; _debug_array($extra_cols); |
| 1424 | 1424 | if ($only_keys === true) // only primary key |
@@ -1429,7 +1429,7 @@ discard block |
||
| 1429 | 1429 | { |
| 1430 | 1430 | $cols = array(); |
| 1431 | 1431 | $distinct_checked = false; |
| 1432 | - foreach(is_array($only_keys) ? $only_keys : explode(',', $only_keys) as $col) |
|
| 1432 | + foreach (is_array($only_keys) ? $only_keys : explode(',', $only_keys) as $col) |
|
| 1433 | 1433 | { |
| 1434 | 1434 | if (!$distinct_checked) |
| 1435 | 1435 | { |
@@ -1438,17 +1438,17 @@ discard block |
||
| 1438 | 1438 | } |
| 1439 | 1439 | if (!$col || $col == '*' || $col == $this->table_name.'.*') // all columns |
| 1440 | 1440 | { |
| 1441 | - $cols = array_merge($cols,$this->db_cols); |
|
| 1441 | + $cols = array_merge($cols, $this->db_cols); |
|
| 1442 | 1442 | } |
| 1443 | 1443 | else // only the specified columns |
| 1444 | 1444 | { |
| 1445 | - if (stripos($col,'as')) // if there's already an explicit naming of the column, just use it |
|
| 1445 | + if (stripos($col, 'as')) // if there's already an explicit naming of the column, just use it |
|
| 1446 | 1446 | { |
| 1447 | - $col = preg_replace('/^.*as +([a-z0-9_]+) *$/i','\\1',$col); |
|
| 1447 | + $col = preg_replace('/^.*as +([a-z0-9_]+) *$/i', '\\1', $col); |
|
| 1448 | 1448 | $cols[$col] = $col; |
| 1449 | 1449 | continue; |
| 1450 | 1450 | } |
| 1451 | - if (($db_col = array_search($col,$this->db_cols)) !== false) |
|
| 1451 | + if (($db_col = array_search($col, $this->db_cols)) !== false) |
|
| 1452 | 1452 | { |
| 1453 | 1453 | $cols[$db_col] = $col; |
| 1454 | 1454 | } |
@@ -1461,10 +1461,10 @@ discard block |
||
| 1461 | 1461 | } |
| 1462 | 1462 | if ($extra_cols) // extra columns to report |
| 1463 | 1463 | { |
| 1464 | - foreach(is_array($extra_cols) ? $extra_cols : explode(',',$extra_cols) as $col) |
|
| 1464 | + foreach (is_array($extra_cols) ? $extra_cols : explode(',', $extra_cols) as $col) |
|
| 1465 | 1465 | { |
| 1466 | - if (stripos($col,'as ')!==false) $col = preg_replace('/^.*as +([a-z0-9_]+) *$/i','\\1',$col); |
|
| 1467 | - if (($db_col = array_search($col,$this->db_cols)) !== false) |
|
| 1466 | + if (stripos($col, 'as ') !== false) $col = preg_replace('/^.*as +([a-z0-9_]+) *$/i', '\\1', $col); |
|
| 1467 | + if (($db_col = array_search($col, $this->db_cols)) !== false) |
|
| 1468 | 1468 | { |
| 1469 | 1469 | $cols[$db_col] = $col; |
| 1470 | 1470 | } |
@@ -1491,12 +1491,12 @@ discard block |
||
| 1491 | 1491 | * @param string|array $extra_cols =array() |
| 1492 | 1492 | * @return int total number of rows |
| 1493 | 1493 | */ |
| 1494 | - function get_rows($query,&$rows,&$readonlys,$join='',$need_full_no_count=false,$only_keys=false,$extra_cols=array()) |
|
| 1494 | + function get_rows($query, &$rows, &$readonlys, $join = '', $need_full_no_count = false, $only_keys = false, $extra_cols = array()) |
|
| 1495 | 1495 | { |
| 1496 | - unset($readonlys); // required by function signature, but not used in this default implementation |
|
| 1497 | - if ((int) $this->debug >= 4) |
|
| 1496 | + unset($readonlys); // required by function signature, but not used in this default implementation |
|
| 1497 | + if ((int)$this->debug >= 4) |
|
| 1498 | 1498 | { |
| 1499 | - echo "<p>so_sql::get_rows(".print_r($query,true).",,)</p>\n"; |
|
| 1499 | + echo "<p>so_sql::get_rows(".print_r($query, true).",,)</p>\n"; |
|
| 1500 | 1500 | } |
| 1501 | 1501 | $criteria = array(); |
| 1502 | 1502 | $op = 'AND'; |
@@ -1504,11 +1504,11 @@ discard block |
||
| 1504 | 1504 | { |
| 1505 | 1505 | $criteria = $query['search']; |
| 1506 | 1506 | } |
| 1507 | - $rows = $this->search($criteria,$only_keys,$query['order']?$query['order'].' '.$query['sort']:'',$extra_cols, |
|
| 1508 | - '',false,$op,$query['num_rows']?array((int)$query['start'],$query['num_rows']):(int)$query['start'], |
|
| 1509 | - $query['col_filter'],$join,$need_full_no_count); |
|
| 1507 | + $rows = $this->search($criteria, $only_keys, $query['order'] ? $query['order'].' '.$query['sort'] : '', $extra_cols, |
|
| 1508 | + '', false, $op, $query['num_rows'] ? array((int)$query['start'], $query['num_rows']) : (int)$query['start'], |
|
| 1509 | + $query['col_filter'], $join, $need_full_no_count); |
|
| 1510 | 1510 | |
| 1511 | - if (!$rows) $rows = array(); // otherwise false returned from search would be returned as array(false) |
|
| 1511 | + if (!$rows) $rows = array(); // otherwise false returned from search would be returned as array(false) |
|
| 1512 | 1512 | |
| 1513 | 1513 | return $this->total; |
| 1514 | 1514 | } |
@@ -1519,7 +1519,7 @@ discard block |
||
| 1519 | 1519 | * @param array $data =null data-set to check, defaults to $this->data |
| 1520 | 1520 | * @return int 0: all keys are unique, 1: first key not unique, 2: ... |
| 1521 | 1521 | */ |
| 1522 | - function not_unique($data=null) |
|
| 1522 | + function not_unique($data = null) |
|
| 1523 | 1523 | { |
| 1524 | 1524 | if (!is_array($data)) |
| 1525 | 1525 | { |
@@ -1532,12 +1532,12 @@ discard block |
||
| 1532 | 1532 | { |
| 1533 | 1533 | $uni_keys[] = $this->db_key_cols; |
| 1534 | 1534 | } |
| 1535 | - foreach($uni_keys as $db_col => $col) |
|
| 1535 | + foreach ($uni_keys as $db_col => $col) |
|
| 1536 | 1536 | { |
| 1537 | 1537 | if (is_array($col)) |
| 1538 | 1538 | { |
| 1539 | 1539 | $query = array(); |
| 1540 | - foreach($col as $db_c => $c) |
|
| 1540 | + foreach ($col as $db_c => $c) |
|
| 1541 | 1541 | { |
| 1542 | 1542 | $query[$db_c] = $data[$c]; |
| 1543 | 1543 | } |
@@ -1546,17 +1546,17 @@ discard block |
||
| 1546 | 1546 | { |
| 1547 | 1547 | $query = array($db_col => $data[$col]); |
| 1548 | 1548 | } |
| 1549 | - foreach($this->db->select($this->table_name,$this->db_key_cols,$query,__LINE__,__FILE__,false,'',$this->app) as $other) |
|
| 1549 | + foreach ($this->db->select($this->table_name, $this->db_key_cols, $query, __LINE__, __FILE__, false, '', $this->app) as $other) |
|
| 1550 | 1550 | { |
| 1551 | - foreach($this->db_key_cols as $key_col) |
|
| 1551 | + foreach ($this->db_key_cols as $key_col) |
|
| 1552 | 1552 | { |
| 1553 | 1553 | if ($data[$key_col] != $other[$key_col]) |
| 1554 | 1554 | { |
| 1555 | - if ((int) $this->debug >= 4) |
|
| 1555 | + if ((int)$this->debug >= 4) |
|
| 1556 | 1556 | { |
| 1557 | 1557 | echo "<p>not_unique in ".array2string($col)." as for '$key_col': '${data[$key_col]}' != '${other[$key_col]}'</p>\n"; |
| 1558 | 1558 | } |
| 1559 | - return $n; // different entry => $n not unique |
|
| 1559 | + return $n; // different entry => $n not unique |
|
| 1560 | 1560 | } |
| 1561 | 1561 | } |
| 1562 | 1562 | } |
@@ -1577,7 +1577,7 @@ discard block |
||
| 1577 | 1577 | * @param string $order ='' order, default '' = same as (first) $value_col |
| 1578 | 1578 | * @return array with key_col => value_col pairs or array if more then one value_col given (keys as in value_col) |
| 1579 | 1579 | */ |
| 1580 | - function query_list($value_col,$key_col='',$filter=array(),$order='') |
|
| 1580 | + function query_list($value_col, $key_col = '', $filter = array(), $order = '') |
|
| 1581 | 1581 | { |
| 1582 | 1582 | static $cache = array(); |
| 1583 | 1583 | |
@@ -1590,16 +1590,16 @@ discard block |
||
| 1590 | 1590 | if (!is_array($value_col)) $value_col = array($value_col); |
| 1591 | 1591 | |
| 1592 | 1592 | $cols = $ret = array(); |
| 1593 | - foreach($value_col as $key => $col) |
|
| 1593 | + foreach ($value_col as $key => $col) |
|
| 1594 | 1594 | { |
| 1595 | 1595 | $matches = null; |
| 1596 | - $cols[$key] = preg_match('/AS ([a-z_0-9]+)$/i',$col,$matches) ? $matches[1] : $col; |
|
| 1596 | + $cols[$key] = preg_match('/AS ([a-z_0-9]+)$/i', $col, $matches) ? $matches[1] : $col; |
|
| 1597 | 1597 | } |
| 1598 | 1598 | if (!$order) $order = current($cols); |
| 1599 | 1599 | |
| 1600 | - if (($search =& $this->search(array(),($key_col ? $key_col.',' : 'DISTINCT ').implode(',',$value_col),$order,'','',false,'AND',false,$filter))) |
|
| 1600 | + if (($search = & $this->search(array(), ($key_col ? $key_col.',' : 'DISTINCT ').implode(',', $value_col), $order, '', '', false, 'AND', false, $filter))) |
|
| 1601 | 1601 | { |
| 1602 | - if (preg_match('/AS ([a-z_0-9]+)$/i',$key_col,$matches)) |
|
| 1602 | + if (preg_match('/AS ([a-z_0-9]+)$/i', $key_col, $matches)) |
|
| 1603 | 1603 | { |
| 1604 | 1604 | $key_col = $matches[1]; |
| 1605 | 1605 | } |
@@ -1607,12 +1607,12 @@ discard block |
||
| 1607 | 1607 | { |
| 1608 | 1608 | $key_col = current($cols); |
| 1609 | 1609 | } |
| 1610 | - foreach($search as $row) |
|
| 1610 | + foreach ($search as $row) |
|
| 1611 | 1611 | { |
| 1612 | 1612 | if (count($cols) > 1) |
| 1613 | 1613 | { |
| 1614 | 1614 | $data = array(); |
| 1615 | - foreach($cols as $key => $col) |
|
| 1615 | + foreach ($cols as $key => $col) |
|
| 1616 | 1616 | { |
| 1617 | 1617 | $data[$key] = $row[$col]; |
| 1618 | 1618 | } |
@@ -1624,7 +1624,7 @@ discard block |
||
| 1624 | 1624 | if ($data) $ret[$row[$key_col]] = $data; |
| 1625 | 1625 | } |
| 1626 | 1626 | } |
| 1627 | - return $cache[$cache_key] =& $ret; |
|
| 1627 | + return $cache[$cache_key] = & $ret; |
|
| 1628 | 1628 | } |
| 1629 | 1629 | |
| 1630 | 1630 | /** |
@@ -1633,13 +1633,13 @@ discard block |
||
| 1633 | 1633 | * @param string $column =null name of column or null for all (default) |
| 1634 | 1634 | * @return array|string array with internal-name => comment pairs, or string with comment, if $column given |
| 1635 | 1635 | */ |
| 1636 | - public function get_comments($column=null) |
|
| 1636 | + public function get_comments($column = null) |
|
| 1637 | 1637 | { |
| 1638 | - static $comments=null; |
|
| 1638 | + static $comments = null; |
|
| 1639 | 1639 | |
| 1640 | 1640 | if (is_null($comments)) |
| 1641 | 1641 | { |
| 1642 | - foreach($this->db_cols as $db_col => $col) |
|
| 1642 | + foreach ($this->db_cols as $db_col => $col) |
|
| 1643 | 1643 | { |
| 1644 | 1644 | $comments[$col] = $this->table_def['fd'][$db_col]['comment']; |
| 1645 | 1645 | } |
@@ -182,7 +182,10 @@ discard block |
||
| 182 | 182 | function __construct($app='',$table='',Api\Db $db=null,$column_prefix='',$no_clone=false,$timestamp_type=null) |
| 183 | 183 | { |
| 184 | 184 | // ease the transition to api |
| 185 | - if ($app == 'phpgwapi') $app = 'api'; |
|
| 185 | + if ($app == 'phpgwapi') |
|
| 186 | + { |
|
| 187 | + $app = 'api'; |
|
| 188 | + } |
|
| 186 | 189 | |
| 187 | 190 | if ($no_clone) |
| 188 | 191 | { |
@@ -198,9 +201,15 @@ discard block |
||
| 198 | 201 | { |
| 199 | 202 | $this->app = $app; |
| 200 | 203 | |
| 201 | - if (!$no_clone) $this->db->set_app($app); |
|
| 204 | + if (!$no_clone) |
|
| 205 | + { |
|
| 206 | + $this->db->set_app($app); |
|
| 207 | + } |
|
| 202 | 208 | |
| 203 | - if ($table) $this->setup_table($app,$table,$column_prefix); |
|
| 209 | + if ($table) |
|
| 210 | + { |
|
| 211 | + $this->setup_table($app,$table,$column_prefix); |
|
| 212 | + } |
|
| 204 | 213 | } |
| 205 | 214 | $this->init(); |
| 206 | 215 | |
@@ -221,7 +230,10 @@ discard block |
||
| 221 | 230 | */ |
| 222 | 231 | public function set_times($timestamp_type=false) |
| 223 | 232 | { |
| 224 | - if ($timestamp_type !== false) $this->timestamp_type = $timestamp_type; |
|
| 233 | + if ($timestamp_type !== false) |
|
| 234 | + { |
|
| 235 | + $this->timestamp_type = $timestamp_type; |
|
| 236 | + } |
|
| 225 | 237 | |
| 226 | 238 | // set current time |
| 227 | 239 | switch($this->timestamp_type) |
@@ -279,7 +291,10 @@ discard block |
||
| 279 | 291 | { |
| 280 | 292 | $this->autoinc_id = $col; |
| 281 | 293 | } |
| 282 | - if ($def['type'] == 'bool') $this->has_bools = true; |
|
| 294 | + if ($def['type'] == 'bool') |
|
| 295 | + { |
|
| 296 | + $this->has_bools = true; |
|
| 297 | + } |
|
| 283 | 298 | |
| 284 | 299 | foreach($this->table_def['uc'] as $k => $uni_index) |
| 285 | 300 | { |
@@ -318,7 +333,10 @@ discard block |
||
| 318 | 333 | */ |
| 319 | 334 | function data_merge($new) |
| 320 | 335 | { |
| 321 | - if ((int) $this->debug >= 4) echo "<p>so_sql::data_merge(".print_r($new,true).")</p>\n"; |
|
| 336 | + if ((int) $this->debug >= 4) |
|
| 337 | + { |
|
| 338 | + echo "<p>so_sql::data_merge(".print_r($new,true).")</p>\n"; |
|
| 339 | + } |
|
| 322 | 340 | |
| 323 | 341 | if (!is_array($new) || !count($new)) |
| 324 | 342 | { |
@@ -342,7 +360,10 @@ discard block |
||
| 342 | 360 | { |
| 343 | 361 | $this->data[self::USER_TIMEZONE_READ] = $new[self::USER_TIMEZONE_READ]; |
| 344 | 362 | } |
| 345 | - if ((int) $this->debug >= 4) _debug_array($this->data); |
|
| 363 | + if ((int) $this->debug >= 4) |
|
| 364 | + { |
|
| 365 | + _debug_array($this->data); |
|
| 366 | + } |
|
| 346 | 367 | } |
| 347 | 368 | |
| 348 | 369 | /** |
@@ -486,7 +507,10 @@ discard block |
||
| 486 | 507 | if (!is_array($keys)) |
| 487 | 508 | { |
| 488 | 509 | $pk = array_values($this->db_key_cols); |
| 489 | - if ($pk) $keys = array($pk[0] => $keys); |
|
| 510 | + if ($pk) |
|
| 511 | + { |
|
| 512 | + $keys = array($pk[0] => $keys); |
|
| 513 | + } |
|
| 490 | 514 | } |
| 491 | 515 | |
| 492 | 516 | $this->init($keys); |
@@ -500,13 +524,16 @@ discard block |
||
| 500 | 524 | $query[$db_col] = $this->data[$col]; |
| 501 | 525 | } |
| 502 | 526 | } |
| 503 | - if (!$query) // no primary key in keys, lets try the data_cols for a unique key |
|
| 527 | + if (!$query) |
|
| 528 | + { |
|
| 529 | + // no primary key in keys, lets try the data_cols for a unique key |
|
| 504 | 530 | { |
| 505 | 531 | foreach($this->db_uni_cols as $db_col => $col) |
| 506 | 532 | { |
| 507 | 533 | if (!is_array($col) && $this->data[$col] != '') |
| 508 | 534 | { |
| 509 | 535 | $query[$db_col] = $this->data[$col]; |
| 536 | + } |
|
| 510 | 537 | } |
| 511 | 538 | elseif(is_array($col)) |
| 512 | 539 | { |
@@ -520,31 +547,43 @@ discard block |
||
| 520 | 547 | } |
| 521 | 548 | $q[$db_c] = $this->data[$c]; |
| 522 | 549 | } |
| 523 | - if ($q) $query += $q; |
|
| 550 | + if ($q) |
|
| 551 | + { |
|
| 552 | + $query += $q; |
|
| 553 | + } |
|
| 524 | 554 | } |
| 525 | 555 | } |
| 526 | 556 | } |
| 527 | - if (!$query) // no unique key in keys, lets try everything else |
|
| 557 | + if (!$query) |
|
| 558 | + { |
|
| 559 | + // no unique key in keys, lets try everything else |
|
| 528 | 560 | { |
| 529 | 561 | foreach($this->db_data_cols as $db_col => $col) |
| 530 | 562 | { |
| 531 | 563 | if ($this->data[$col] != '') |
| 532 | 564 | { |
| 533 | 565 | $query[$db_col] = $this->data[$col]; |
| 566 | + } |
|
| 534 | 567 | } |
| 535 | 568 | } |
| 536 | 569 | } |
| 537 | - if (!$query) // keys has no cols |
|
| 570 | + if (!$query) |
|
| 571 | + { |
|
| 572 | + // keys has no cols |
|
| 538 | 573 | { |
| 539 | 574 | $this->db2data(); |
| 575 | + } |
|
| 540 | 576 | |
| 541 | 577 | return False; |
| 542 | 578 | } |
| 543 | - if ($join) // Prefix the columns with the table-name, as they might exist in the join |
|
| 579 | + if ($join) |
|
| 580 | + { |
|
| 581 | + // Prefix the columns with the table-name, as they might exist in the join |
|
| 544 | 582 | { |
| 545 | 583 | foreach($query as $col => $val) |
| 546 | 584 | { |
| 547 | 585 | if (is_int($col) || strpos($join,$col) === false) continue; |
| 586 | + } |
|
| 548 | 587 | $query[] = $this->db->expression($this->table_name,$this->table_name.'.',array($col=>$val)); |
| 549 | 588 | unset($query[$col]); |
| 550 | 589 | } |
@@ -553,11 +592,14 @@ discard block |
||
| 553 | 592 | $query,__LINE__,__FILE__,False,'',$this->app,0,$join) as $row) |
| 554 | 593 | { |
| 555 | 594 | $cols = $this->db_cols; |
| 556 | - if ($extra_cols) // extra columns to report |
|
| 595 | + if ($extra_cols) |
|
| 596 | + { |
|
| 597 | + // extra columns to report |
|
| 557 | 598 | { |
| 558 | 599 | foreach(is_array($extra_cols) ? $extra_cols : array($extra_cols) as $col) |
| 559 | 600 | { |
| 560 | 601 | if (FALSE!==stripos($col,' as ')) $col = preg_replace('/^.* as *([a-z0-9_]+) *$/i','\\1',$col); |
| 602 | + } |
|
| 561 | 603 | $cols[$col] = $col; |
| 562 | 604 | } |
| 563 | 605 | } |
@@ -580,7 +622,10 @@ discard block |
||
| 580 | 622 | { |
| 581 | 623 | unset($this->data[$this->db_key_cols[$this->autoinc_id]]); |
| 582 | 624 | } |
| 583 | - if ((int) $this->debug >= 4) echo "nothing found !!!</p>\n"; |
|
| 625 | + if ((int) $this->debug >= 4) |
|
| 626 | + { |
|
| 627 | + echo "nothing found !!!</p>\n"; |
|
| 628 | + } |
|
| 584 | 629 | |
| 585 | 630 | $this->db2data(); |
| 586 | 631 | |
@@ -596,7 +641,10 @@ discard block |
||
| 596 | 641 | */ |
| 597 | 642 | function save($keys=null,$extra_where=null) |
| 598 | 643 | { |
| 599 | - if (is_array($keys) && count($keys)) $this->data_merge($keys); |
|
| 644 | + if (is_array($keys) && count($keys)) |
|
| 645 | + { |
|
| 646 | + $this->data_merge($keys); |
|
| 647 | + } |
|
| 600 | 648 | |
| 601 | 649 | // check if data contains user timezone during read AND user changed timezone since then |
| 602 | 650 | // --> load old timezone for the rest of this request |
@@ -613,9 +661,13 @@ discard block |
||
| 613 | 661 | } |
| 614 | 662 | $this->data2db(); |
| 615 | 663 | |
| 616 | - if ((int) $this->debug >= 4) { echo "so_sql::save(".print_r($keys,true).") autoinc_id='$this->autoinc_id', data="; _debug_array($this->data); } |
|
| 664 | + if ((int) $this->debug >= 4) |
|
| 665 | + { |
|
| 666 | +echo "so_sql::save(".print_r($keys,true).") autoinc_id='$this->autoinc_id', data="; _debug_array($this->data); } |
|
| 617 | 667 | |
| 618 | - if ($this->autoinc_id && !$this->data[$this->db_key_cols[$this->autoinc_id]]) // insert with auto id |
|
| 668 | + if ($this->autoinc_id && !$this->data[$this->db_key_cols[$this->autoinc_id]]) |
|
| 669 | + { |
|
| 670 | + // insert with auto id |
|
| 619 | 671 | { |
| 620 | 672 | foreach($this->db_cols as $db_col => $col) |
| 621 | 673 | { |
@@ -625,7 +677,9 @@ discard block |
||
| 625 | 677 | (isset($this->table_def['fd'][$db_col]['default']) || // we have a default value |
| 626 | 678 | !isset($this->table_def['fd'][$db_col]['nullable']) || $this->table_def['fd'][$db_col]['nullable'])) // column is nullable |
| 627 | 679 | { |
| 628 | - continue; // no need to write that (unset) column |
|
| 680 | + continue; |
|
| 681 | + } |
|
| 682 | + // no need to write that (unset) column |
|
| 629 | 683 | } |
| 630 | 684 | if ($this->table_def['fd'][$db_col]['type'] == 'varchar' && |
| 631 | 685 | strlen($this->data[$col]) > $this->table_def['fd'][$db_col]['precision']) |
@@ -656,9 +710,13 @@ discard block |
||
| 656 | 710 | if (!array_key_exists($col,$this->data) && // handling of unset columns in $this->data |
| 657 | 711 | ($this->autoinc_id || // update of table with auto id or |
| 658 | 712 | isset($this->table_def['fd'][$db_col]['default']) || // we have a default value or |
| 659 | - !isset($this->table_def['fd'][$db_col]['nullable']) || $this->table_def['fd'][$db_col]['nullable'])) // column is nullable |
|
| 713 | + !isset($this->table_def['fd'][$db_col]['nullable']) || $this->table_def['fd'][$db_col]['nullable'])) |
|
| 660 | 714 | { |
| 661 | - continue; // no need to write that (unset) column |
|
| 715 | + // column is nullable |
|
| 716 | + { |
|
| 717 | + continue; |
|
| 718 | + } |
|
| 719 | + // no need to write that (unset) column |
|
| 662 | 720 | } |
| 663 | 721 | $data[$db_col] = !is_object($this->data[$col]) && (string) $this->data[$col] === '' && $this->empty_on_write == 'NULL' ? null : $this->data[$col]; |
| 664 | 722 | } |
@@ -675,9 +733,12 @@ discard block |
||
| 675 | 733 | { |
| 676 | 734 | $keys[$db_col] = $this->data[$col]; |
| 677 | 735 | } |
| 678 | - if (!$data && !$this->autoinc_id) // happens if all columns are in the primary key |
|
| 736 | + if (!$data && !$this->autoinc_id) |
|
| 737 | + { |
|
| 738 | + // happens if all columns are in the primary key |
|
| 679 | 739 | { |
| 680 | 740 | $data = $keys; |
| 741 | + } |
|
| 681 | 742 | $keys = False; |
| 682 | 743 | } |
| 683 | 744 | if ($this->autoinc_id) |
@@ -708,7 +769,10 @@ discard block |
||
| 708 | 769 | */ |
| 709 | 770 | function update($_fields,$merge=true) |
| 710 | 771 | { |
| 711 | - if ($merge) $this->data_merge($_fields); |
|
| 772 | + if ($merge) |
|
| 773 | + { |
|
| 774 | + $this->data_merge($_fields); |
|
| 775 | + } |
|
| 712 | 776 | |
| 713 | 777 | $fields = $this->data2db($_fields); |
| 714 | 778 | |
@@ -761,9 +825,12 @@ discard block |
||
| 761 | 825 | { |
| 762 | 826 | $keys = array($this->autoinc_id => $keys); |
| 763 | 827 | } |
| 764 | - if (!is_array($keys) || !count($keys)) // use internal data |
|
| 828 | + if (!is_array($keys) || !count($keys)) |
|
| 829 | + { |
|
| 830 | + // use internal data |
|
| 765 | 831 | { |
| 766 | 832 | $data = $this->data; |
| 833 | + } |
|
| 767 | 834 | $keys = $this->db_key_cols; |
| 768 | 835 | } |
| 769 | 836 | else // data and keys are supplied in $keys |
@@ -783,7 +850,10 @@ discard block |
||
| 783 | 850 | { |
| 784 | 851 | $query[$db_col] = $data[$col]; |
| 785 | 852 | } |
| 786 | - if ($only_return_query) return $query; |
|
| 853 | + if ($only_return_query) |
|
| 854 | + { |
|
| 855 | + return $query; |
|
| 856 | + } |
|
| 787 | 857 | |
| 788 | 858 | $this->db->delete($this->table_name,$query,__LINE__,__FILE__,$this->app); |
| 789 | 859 | |
@@ -816,7 +886,10 @@ discard block |
||
| 816 | 886 | function &search($criteria,$only_keys=True,$order_by='',$extra_cols='',$wildcard='',$empty=False,$op='AND',$start=false,$filter=null,$join='',$need_full_no_count=false) |
| 817 | 887 | { |
| 818 | 888 | //error_log(__METHOD__.'('.array2string(array_combine(array_slice(array('criteria','only_keys','order_by','extra_cols','wildcard','empty','op','start','filter','join','need_full_no_count'), 0, count(func_get_args())), func_get_args())).')'); |
| 819 | - if ((int) $this->debug >= 4) echo "<p>so_sql::search(".print_r($criteria,true).",'$only_keys','$order_by',".print_r($extra_cols,true).",'$wildcard','$empty','$op','$start',".print_r($filter,true).",'$join')</p>\n"; |
|
| 889 | + if ((int) $this->debug >= 4) |
|
| 890 | + { |
|
| 891 | + echo "<p>so_sql::search(".print_r($criteria,true).",'$only_keys','$order_by',".print_r($extra_cols,true).",'$wildcard','$empty','$op','$start',".print_r($filter,true).",'$join')</p>\n"; |
|
| 892 | + } |
|
| 820 | 893 | |
| 821 | 894 | // if extending class or instanciator set columns to search, convert string criteria to array |
| 822 | 895 | if ($criteria && !is_array($criteria)) |
@@ -880,9 +953,12 @@ discard block |
||
| 880 | 953 | ($negate ? ') ' : ''); |
| 881 | 954 | } |
| 882 | 955 | } |
| 883 | - elseif (strpos($db_col,'.') !== false) // we have a table-name specified |
|
| 956 | + elseif (strpos($db_col,'.') !== false) |
|
| 957 | + { |
|
| 958 | + // we have a table-name specified |
|
| 884 | 959 | { |
| 885 | 960 | list($table,$only_col) = explode('.',$db_col); |
| 961 | + } |
|
| 886 | 962 | $type = $this->db->get_column_attribute($only_col, $table, true, 'type'); |
| 887 | 963 | if (empty($type)) |
| 888 | 964 | { |
@@ -907,13 +983,17 @@ discard block |
||
| 907 | 983 | } |
| 908 | 984 | } |
| 909 | 985 | } |
| 910 | - if (is_array($query) && $op != 'AND') $query = $this->db->column_data_implode(' '.$op.' ',$query); |
|
| 986 | + if (is_array($query) && $op != 'AND') |
|
| 987 | + { |
|
| 988 | + $query = $this->db->column_data_implode(' '.$op.' ',$query); |
|
| 989 | + } |
|
| 911 | 990 | } |
| 912 | 991 | if (is_array($filter)) |
| 913 | 992 | { |
| 914 | 993 | $db_filter = array(); |
| 915 | 994 | $data2db_filter = $this->data2db($filter); |
| 916 | - if (!is_array($data2db_filter)) { |
|
| 995 | + if (!is_array($data2db_filter)) |
|
| 996 | + { |
|
| 917 | 997 | echo function_backtrace()."<br/>\n"; |
| 918 | 998 | echo "filter=";_debug_array($filter); |
| 919 | 999 | echo "data2db(filter)=";_debug_array($data2db_filter); |
@@ -1009,7 +1089,10 @@ discard block |
||
| 1009 | 1089 | } |
| 1010 | 1090 | } |
| 1011 | 1091 | $num_rows = 0; // as spec. in max_matches in the user-prefs |
| 1012 | - if (is_array($start)) list($start,$num_rows) = $start; |
|
| 1092 | + if (is_array($start)) |
|
| 1093 | + { |
|
| 1094 | + list($start,$num_rows) = $start; |
|
| 1095 | + } |
|
| 1013 | 1096 | |
| 1014 | 1097 | // fix GROUP BY clause to contain all non-aggregate selected columns |
| 1015 | 1098 | if ($order_by && stripos($order_by,'GROUP BY') !== false) |
@@ -1037,18 +1120,24 @@ discard block |
||
| 1037 | 1120 | 'append' => $order_by, |
| 1038 | 1121 | 'join' => $join, |
| 1039 | 1122 | ); |
| 1040 | - if (!$union_cols) // union used the colum-names of the first query |
|
| 1123 | + if (!$union_cols) |
|
| 1124 | + { |
|
| 1125 | + // union used the colum-names of the first query |
|
| 1041 | 1126 | { |
| 1042 | 1127 | $union_cols = $this->_get_columns($only_keys,$extra_cols); |
| 1043 | 1128 | } |
| 1129 | + } |
|
| 1044 | 1130 | return true; // waiting for further calls, before running the union-query |
| 1045 | 1131 | } |
| 1046 | 1132 | // running the union query now |
| 1047 | - if ($start !== false) // need to get the total too, saved in $this->total |
|
| 1133 | + if ($start !== false) |
|
| 1134 | + { |
|
| 1135 | + // need to get the total too, saved in $this->total |
|
| 1048 | 1136 | { |
| 1049 | 1137 | if ($this->db->Type == 'mysql' && $this->db->ServerInfo['version'] >= 4.0) |
| 1050 | 1138 | { |
| 1051 | 1139 | $union[0]['cols'] = ($mysql_calc_rows = 'SQL_CALC_FOUND_ROWS ').$union[0]['cols']; |
| 1140 | + } |
|
| 1052 | 1141 | } |
| 1053 | 1142 | else // cant do a count, have to run the query without limit |
| 1054 | 1143 | { |
@@ -1056,18 +1145,24 @@ discard block |
||
| 1056 | 1145 | } |
| 1057 | 1146 | } |
| 1058 | 1147 | $rs = $this->db->union($union,__LINE__,__FILE__,$order_by,$start,$num_rows); |
| 1059 | - if ($this->debug) error_log(__METHOD__."() ".$this->db->Query_ID->sql); |
|
| 1148 | + if ($this->debug) |
|
| 1149 | + { |
|
| 1150 | + error_log(__METHOD__."() ".$this->db->Query_ID->sql); |
|
| 1151 | + } |
|
| 1060 | 1152 | |
| 1061 | 1153 | $cols = $union_cols; |
| 1062 | 1154 | $union = $union_cols = array(); |
| 1063 | 1155 | } |
| 1064 | 1156 | else // no UNION |
| 1065 | 1157 | { |
| 1066 | - if ($start !== false) // need to get the total too, saved in $this->total |
|
| 1158 | + if ($start !== false) |
|
| 1159 | + { |
|
| 1160 | + // need to get the total too, saved in $this->total |
|
| 1067 | 1161 | { |
| 1068 | 1162 | if ($this->db->Type == 'mysql' && $this->db->ServerInfo['version'] >= 4.0) |
| 1069 | 1163 | { |
| 1070 | 1164 | $mysql_calc_rows = 'SQL_CALC_FOUND_ROWS '; |
| 1165 | + } |
|
| 1071 | 1166 | } |
| 1072 | 1167 | elseif (!$need_full_no_count && (!$join || stripos($join,'LEFT JOIN')!==false)) |
| 1073 | 1168 | { |
@@ -1080,10 +1175,16 @@ discard block |
||
| 1080 | 1175 | } |
| 1081 | 1176 | $rs = $this->db->select($this->table_name,$mysql_calc_rows.$colums,$query,__LINE__,__FILE__, |
| 1082 | 1177 | $start,$order_by,$this->app,$num_rows,$join); |
| 1083 | - if ($this->debug) error_log(__METHOD__."() ".$this->db->Query_ID->sql); |
|
| 1178 | + if ($this->debug) |
|
| 1179 | + { |
|
| 1180 | + error_log(__METHOD__."() ".$this->db->Query_ID->sql); |
|
| 1181 | + } |
|
| 1084 | 1182 | $cols = $this->_get_columns($only_keys,$extra_cols); |
| 1085 | 1183 | } |
| 1086 | - if ((int) $this->debug >= 4) echo "<p>sql='{$this->db->Query_ID->sql}'</p>\n"; |
|
| 1184 | + if ((int) $this->debug >= 4) |
|
| 1185 | + { |
|
| 1186 | + echo "<p>sql='{$this->db->Query_ID->sql}'</p>\n"; |
|
| 1187 | + } |
|
| 1087 | 1188 | |
| 1088 | 1189 | if ($mysql_calc_rows) |
| 1089 | 1190 | { |
@@ -1096,9 +1197,12 @@ discard block |
||
| 1096 | 1197 | } |
| 1097 | 1198 | $arr = array(); |
| 1098 | 1199 | $n = 0; |
| 1099 | - if ($rs) foreach($rs as $row) |
|
| 1200 | + if ($rs) |
|
| 1201 | + { |
|
| 1202 | + foreach($rs as $row) |
|
| 1100 | 1203 | { |
| 1101 | 1204 | $data = array(); |
| 1205 | + } |
|
| 1102 | 1206 | foreach($cols as $db_col => $col) |
| 1103 | 1207 | { |
| 1104 | 1208 | $data[$col] = (isset($row[$db_col]) ? $row[$db_col] : $row[$col]); |
@@ -1166,9 +1270,15 @@ discard block |
||
| 1166 | 1270 | $col = substr($col, $pos+9); |
| 1167 | 1271 | } |
| 1168 | 1272 | $alias = $col; |
| 1169 | - if (stripos($col, ' AS ')) list($col, $alias) = preg_split('/ +AS +/i', $col); |
|
| 1273 | + if (stripos($col, ' AS ')) |
|
| 1274 | + { |
|
| 1275 | + list($col, $alias) = preg_split('/ +AS +/i', $col); |
|
| 1276 | + } |
|
| 1170 | 1277 | // do NOT group by constant expressions |
| 1171 | - if (preg_match('/^ *(-?[0-9]+|".*"|\'.*\'|NULL) *$/i', $col)) continue; |
|
| 1278 | + if (preg_match('/^ *(-?[0-9]+|".*"|\'.*\'|NULL) *$/i', $col)) |
|
| 1279 | + { |
|
| 1280 | + continue; |
|
| 1281 | + } |
|
| 1172 | 1282 | if (!in_array($col, $group_by_cols) && !in_array($alias, $group_by_cols)) |
| 1173 | 1283 | { |
| 1174 | 1284 | // instead of aliased primary key, we have to use original column incl. table-name as alias is ambigues |
@@ -1201,7 +1311,10 @@ discard block |
||
| 1201 | 1311 | { |
| 1202 | 1312 | $pattern = trim($_pattern); |
| 1203 | 1313 | // This function can get called multiple times. Make sure it doesn't re-process. |
| 1204 | - if (empty($pattern) || is_array($pattern)) return $pattern; |
|
| 1314 | + if (empty($pattern) || is_array($pattern)) |
|
| 1315 | + { |
|
| 1316 | + return $pattern; |
|
| 1317 | + } |
|
| 1205 | 1318 | if(strpos($pattern, 'CAST(COALESCE(') !== false) |
| 1206 | 1319 | { |
| 1207 | 1320 | return $pattern; |
@@ -1271,7 +1384,7 @@ discard block |
||
| 1271 | 1384 | { |
| 1272 | 1385 | $token = substr($token, 1,strlen($token)); |
| 1273 | 1386 | if(substr($token, -1) != '"') |
| 1274 | - { |
|
| 1387 | + { |
|
| 1275 | 1388 | $token .= ' '.strtok('"'); |
| 1276 | 1389 | } |
| 1277 | 1390 | else |
@@ -1387,7 +1500,8 @@ discard block |
||
| 1387 | 1500 | foreach($search_cols as $key => &$col) |
| 1388 | 1501 | { |
| 1389 | 1502 | // If the name as given isn't a real column name, and adding the prefix doesn't help, skip it |
| 1390 | - if(!$this->table_def['fd'][$col] && !($col = $this->prefix.array_search($col, $search_cols))) { |
|
| 1503 | + if(!$this->table_def['fd'][$col] && !($col = $this->prefix.array_search($col, $search_cols))) |
|
| 1504 | + { |
|
| 1391 | 1505 | // Can't search this column |
| 1392 | 1506 | unset($search_cols[$key]); |
| 1393 | 1507 | continue; |
@@ -1421,10 +1535,13 @@ discard block |
||
| 1421 | 1535 | function _get_columns($only_keys,$extra_cols) |
| 1422 | 1536 | { |
| 1423 | 1537 | //echo "_get_columns() only_keys="; _debug_array($only_keys); echo "extra_cols="; _debug_array($extra_cols); |
| 1424 | - if ($only_keys === true) // only primary key |
|
| 1538 | + if ($only_keys === true) |
|
| 1539 | + { |
|
| 1540 | + // only primary key |
|
| 1425 | 1541 | { |
| 1426 | 1542 | $cols = $this->db_key_cols; |
| 1427 | 1543 | } |
| 1544 | + } |
|
| 1428 | 1545 | else |
| 1429 | 1546 | { |
| 1430 | 1547 | $cols = array(); |
@@ -1433,18 +1550,27 @@ discard block |
||
| 1433 | 1550 | { |
| 1434 | 1551 | if (!$distinct_checked) |
| 1435 | 1552 | { |
| 1436 | - if (stripos($col, 'DISTINCT ') === 0) $col = substr($col, 9); |
|
| 1553 | + if (stripos($col, 'DISTINCT ') === 0) |
|
| 1554 | + { |
|
| 1555 | + $col = substr($col, 9); |
|
| 1556 | + } |
|
| 1437 | 1557 | $distinct_checked = true; |
| 1438 | 1558 | } |
| 1439 | - if (!$col || $col == '*' || $col == $this->table_name.'.*') // all columns |
|
| 1559 | + if (!$col || $col == '*' || $col == $this->table_name.'.*') |
|
| 1560 | + { |
|
| 1561 | + // all columns |
|
| 1440 | 1562 | { |
| 1441 | 1563 | $cols = array_merge($cols,$this->db_cols); |
| 1442 | 1564 | } |
| 1565 | + } |
|
| 1443 | 1566 | else // only the specified columns |
| 1444 | 1567 | { |
| 1445 | - if (stripos($col,'as')) // if there's already an explicit naming of the column, just use it |
|
| 1568 | + if (stripos($col,'as')) |
|
| 1569 | + { |
|
| 1570 | + // if there's already an explicit naming of the column, just use it |
|
| 1446 | 1571 | { |
| 1447 | 1572 | $col = preg_replace('/^.*as +([a-z0-9_]+) *$/i','\\1',$col); |
| 1573 | + } |
|
| 1448 | 1574 | $cols[$col] = $col; |
| 1449 | 1575 | continue; |
| 1450 | 1576 | } |
@@ -1459,11 +1585,14 @@ discard block |
||
| 1459 | 1585 | } |
| 1460 | 1586 | } |
| 1461 | 1587 | } |
| 1462 | - if ($extra_cols) // extra columns to report |
|
| 1588 | + if ($extra_cols) |
|
| 1589 | + { |
|
| 1590 | + // extra columns to report |
|
| 1463 | 1591 | { |
| 1464 | 1592 | foreach(is_array($extra_cols) ? $extra_cols : explode(',',$extra_cols) as $col) |
| 1465 | 1593 | { |
| 1466 | 1594 | if (stripos($col,'as ')!==false) $col = preg_replace('/^.*as +([a-z0-9_]+) *$/i','\\1',$col); |
| 1595 | + } |
|
| 1467 | 1596 | if (($db_col = array_search($col,$this->db_cols)) !== false) |
| 1468 | 1597 | { |
| 1469 | 1598 | $cols[$db_col] = $col; |
@@ -1508,7 +1637,11 @@ discard block |
||
| 1508 | 1637 | '',false,$op,$query['num_rows']?array((int)$query['start'],$query['num_rows']):(int)$query['start'], |
| 1509 | 1638 | $query['col_filter'],$join,$need_full_no_count); |
| 1510 | 1639 | |
| 1511 | - if (!$rows) $rows = array(); // otherwise false returned from search would be returned as array(false) |
|
| 1640 | + if (!$rows) |
|
| 1641 | + { |
|
| 1642 | + $rows = array(); |
|
| 1643 | + } |
|
| 1644 | + // otherwise false returned from search would be returned as array(false) |
|
| 1512 | 1645 | |
| 1513 | 1646 | return $this->total; |
| 1514 | 1647 | } |
@@ -1587,7 +1720,10 @@ discard block |
||
| 1587 | 1720 | { |
| 1588 | 1721 | return $cache[$cache_key]; |
| 1589 | 1722 | } |
| 1590 | - if (!is_array($value_col)) $value_col = array($value_col); |
|
| 1723 | + if (!is_array($value_col)) |
|
| 1724 | + { |
|
| 1725 | + $value_col = array($value_col); |
|
| 1726 | + } |
|
| 1591 | 1727 | |
| 1592 | 1728 | $cols = $ret = array(); |
| 1593 | 1729 | foreach($value_col as $key => $col) |
@@ -1595,7 +1731,10 @@ discard block |
||
| 1595 | 1731 | $matches = null; |
| 1596 | 1732 | $cols[$key] = preg_match('/AS ([a-z_0-9]+)$/i',$col,$matches) ? $matches[1] : $col; |
| 1597 | 1733 | } |
| 1598 | - if (!$order) $order = current($cols); |
|
| 1734 | + if (!$order) |
|
| 1735 | + { |
|
| 1736 | + $order = current($cols); |
|
| 1737 | + } |
|
| 1599 | 1738 | |
| 1600 | 1739 | if (($search =& $this->search(array(),($key_col ? $key_col.',' : 'DISTINCT ').implode(',',$value_col),$order,'','',false,'AND',false,$filter))) |
| 1601 | 1740 | { |
@@ -1621,7 +1760,10 @@ discard block |
||
| 1621 | 1760 | { |
| 1622 | 1761 | $data = $row[current($cols)]; |
| 1623 | 1762 | } |
| 1624 | - if ($data) $ret[$row[$key_col]] = $data; |
|
| 1763 | + if ($data) |
|
| 1764 | + { |
|
| 1765 | + $ret[$row[$key_col]] = $data; |
|
| 1766 | + } |
|
| 1625 | 1767 | } |
| 1626 | 1768 | } |
| 1627 | 1769 | return $cache[$cache_key] =& $ret; |
@@ -159,7 +159,7 @@ |
||
| 159 | 159 | * @param string $app |
| 160 | 160 | * @param boolean $all_private_too =false should all the private fields be returned too, default no |
| 161 | 161 | * @param string $only_type2 =null if given only return fields of type2 == $only_type2 |
| 162 | - * @return boolen true: if there is a custom field useing html, false if not |
|
| 162 | + * @return boolean true: if there is a custom field useing html, false if not |
|
| 163 | 163 | */ |
| 164 | 164 | public static function use_html($app, $all_private_too=false, $only_type2=null) |
| 165 | 165 | { |
@@ -42,7 +42,7 @@ discard block |
||
| 42 | 42 | * |
| 43 | 43 | * @var boolean |
| 44 | 44 | */ |
| 45 | - protected $all_private_too=false; |
|
| 45 | + protected $all_private_too = false; |
|
| 46 | 46 | |
| 47 | 47 | /** |
| 48 | 48 | * Iterator initialised for custom fields |
@@ -62,7 +62,7 @@ discard block |
||
| 62 | 62 | * @param Api\Db $db =null reference to database instance to use |
| 63 | 63 | * @return array with customfields |
| 64 | 64 | */ |
| 65 | - function __construct($app, $all_private_too=false, $only_type2=null, $start=0, $num_rows=null, Api\Db $db=null) |
|
| 65 | + function __construct($app, $all_private_too = false, $only_type2 = null, $start = 0, $num_rows = null, Api\Db $db = null) |
|
| 66 | 66 | { |
| 67 | 67 | $this->app = $app; |
| 68 | 68 | $this->all_private_too = $all_private_too; |
@@ -116,7 +116,7 @@ discard block |
||
| 116 | 116 | protected function commasep_match($column, $values) |
| 117 | 117 | { |
| 118 | 118 | $to_or = array($column.' IS NULL'); |
| 119 | - foreach((array) $values as $value) |
|
| 119 | + foreach ((array)$values as $value) |
|
| 120 | 120 | { |
| 121 | 121 | $to_or[] = self::$db->concat("','", $column, "','").' LIKE '.self::$db->quote('%,'.$value.',%'); |
| 122 | 122 | } |
@@ -132,9 +132,9 @@ discard block |
||
| 132 | 132 | * @param Api\Db $db =null reference to database to use |
| 133 | 133 | * @return array with customfields |
| 134 | 134 | */ |
| 135 | - public static function get($app, $all_private_too=false, $only_type2=null, Api\Db $db=null) |
|
| 135 | + public static function get($app, $all_private_too = false, $only_type2 = null, Api\Db $db = null) |
|
| 136 | 136 | { |
| 137 | - $cache_key = $app.':'.($all_private_too?'all':$GLOBALS['egw_info']['user']['account_id']).':'.$only_type2; |
|
| 137 | + $cache_key = $app.':'.($all_private_too ? 'all' : $GLOBALS['egw_info']['user']['account_id']).':'.$only_type2; |
|
| 138 | 138 | $cfs = Api\Cache::getInstance(__CLASS__, $cache_key); |
| 139 | 139 | |
| 140 | 140 | if (!isset($cfs)) |
@@ -161,9 +161,9 @@ discard block |
||
| 161 | 161 | * @param string $only_type2 =null if given only return fields of type2 == $only_type2 |
| 162 | 162 | * @return boolen true: if there is a custom field useing html, false if not |
| 163 | 163 | */ |
| 164 | - public static function use_html($app, $all_private_too=false, $only_type2=null) |
|
| 164 | + public static function use_html($app, $all_private_too = false, $only_type2 = null) |
|
| 165 | 165 | { |
| 166 | - foreach(self::get($app, $all_private_too, $only_type2) as $data) |
|
| 166 | + foreach (self::get($app, $all_private_too, $only_type2) as $data) |
|
| 167 | 167 | { |
| 168 | 168 | if ($data['type'] == 'htmlarea') return true; |
| 169 | 169 | } |
@@ -186,17 +186,17 @@ discard block |
||
| 186 | 186 | */ |
| 187 | 187 | public static function format(array $field, $value) |
| 188 | 188 | { |
| 189 | - switch($field['type']) |
|
| 189 | + switch ($field['type']) |
|
| 190 | 190 | { |
| 191 | 191 | case 'select-account': |
| 192 | 192 | if ($value) |
| 193 | 193 | { |
| 194 | 194 | $values = array(); |
| 195 | - foreach($field['rows'] > 1 ? explode(',', $value) : (array) $value as $value) |
|
| 195 | + foreach ($field['rows'] > 1 ? explode(',', $value) : (array)$value as $value) |
|
| 196 | 196 | { |
| 197 | 197 | $values[] = Api\Accounts::username($value); |
| 198 | 198 | } |
| 199 | - $value = implode(', ',$values); |
|
| 199 | + $value = implode(', ', $values); |
|
| 200 | 200 | } |
| 201 | 201 | break; |
| 202 | 202 | |
@@ -211,7 +211,7 @@ discard block |
||
| 211 | 211 | $field['values'] = self::get_options_from_file($field['values']['@']); |
| 212 | 212 | } |
| 213 | 213 | $values = array(); |
| 214 | - foreach($field['rows'] > 1 ? explode(',', $value) : (array) $value as $value) |
|
| 214 | + foreach ($field['rows'] > 1 ? explode(',', $value) : (array)$value as $value) |
|
| 215 | 215 | { |
| 216 | 216 | $values[] = isset($field['values'][$value]) ? $field['values'][$value] : '#'.$value; |
| 217 | 217 | } |
@@ -275,12 +275,12 @@ discard block |
||
| 275 | 275 | { |
| 276 | 276 | $options = array(); |
| 277 | 277 | |
| 278 | - if (!($path = realpath($file[0] == '/' ? $file : EGW_SERVER_ROOT.'/'.$file)) || // file does not exist |
|
| 279 | - substr($path,0,strlen(EGW_SERVER_ROOT)+1) != EGW_SERVER_ROOT.'/' || // we are NOT inside the eGW root |
|
| 280 | - basename($path,'.php').'.php' != basename($path) || // extension is NOT .php |
|
| 278 | + if (!($path = realpath($file[0] == '/' ? $file : EGW_SERVER_ROOT.'/'.$file)) || // file does not exist |
|
| 279 | + substr($path, 0, strlen(EGW_SERVER_ROOT) + 1) != EGW_SERVER_ROOT.'/' || // we are NOT inside the eGW root |
|
| 280 | + basename($path, '.php').'.php' != basename($path) || // extension is NOT .php |
|
| 281 | 281 | basename($path) == 'header.inc.php') // dont allow to include our header again |
| 282 | 282 | { |
| 283 | - return array(lang("'%1' is no php file in the eGW server root (%2)!".': '.$path,$file,EGW_SERVER_ROOT)); |
|
| 283 | + return array(lang("'%1' is no php file in the eGW server root (%2)!".': '.$path, $file, EGW_SERVER_ROOT)); |
|
| 284 | 284 | } |
| 285 | 285 | include($path); |
| 286 | 286 | |
@@ -298,7 +298,7 @@ discard block |
||
| 298 | 298 | |
| 299 | 299 | if (is_null($link_types)) |
| 300 | 300 | { |
| 301 | - $link_types = array_keys(array_intersect(Api\Link::app_list('query'),Api\Link::app_list('title'))); |
|
| 301 | + $link_types = array_keys(array_intersect(Api\Link::app_list('query'), Api\Link::app_list('title'))); |
|
| 302 | 302 | $link_types[] = 'link-entry'; |
| 303 | 303 | } |
| 304 | 304 | return $link_types; |
@@ -315,31 +315,31 @@ discard block |
||
| 315 | 315 | * @param array $old =null old values before the update, if existing |
| 316 | 316 | * @param string $id_name ='id' name/key of the (link-)id in $values |
| 317 | 317 | */ |
| 318 | - public static function update_links($own_app,array $values,array $old=null,$id_name='id') |
|
| 318 | + public static function update_links($own_app, array $values, array $old = null, $id_name = 'id') |
|
| 319 | 319 | { |
| 320 | 320 | $link_types = self::get_link_types(); |
| 321 | 321 | |
| 322 | - foreach(self::get($own_app) as $name => $data) |
|
| 322 | + foreach (self::get($own_app) as $name => $data) |
|
| 323 | 323 | { |
| 324 | - if (!in_array($data['type'],$link_types)) continue; |
|
| 324 | + if (!in_array($data['type'], $link_types)) continue; |
|
| 325 | 325 | |
| 326 | 326 | // do we have a different old value --> delete that link |
| 327 | 327 | if ($old && $old['#'.$name] && $old['#'.$name] != $values['#'.$name]) |
| 328 | 328 | { |
| 329 | 329 | if ($data['type'] == 'link-entry') |
| 330 | 330 | { |
| 331 | - list($app,$id) = explode(':',$old['#'.$name]); |
|
| 331 | + list($app, $id) = explode(':', $old['#'.$name]); |
|
| 332 | 332 | } |
| 333 | 333 | else |
| 334 | 334 | { |
| 335 | 335 | $app = $data['type']; |
| 336 | 336 | $id = $old['#'.$name]; |
| 337 | 337 | } |
| 338 | - Api\Link::unlink(false,$own_app,$values[$id_name],'',$app,$id); |
|
| 338 | + Api\Link::unlink(false, $own_app, $values[$id_name], '', $app, $id); |
|
| 339 | 339 | } |
| 340 | 340 | if ($data['type'] == 'link-entry') |
| 341 | 341 | { |
| 342 | - list($app,$id) = explode(':',$values['#'.$name]); |
|
| 342 | + list($app, $id) = explode(':', $values['#'.$name]); |
|
| 343 | 343 | } |
| 344 | 344 | else |
| 345 | 345 | { |
@@ -348,7 +348,7 @@ discard block |
||
| 348 | 348 | } |
| 349 | 349 | if ($id) // create new link, does nothing for already existing links |
| 350 | 350 | { |
| 351 | - Api\Link::link($own_app,$values[$id_name],$app,$id); |
|
| 351 | + Api\Link::link($own_app, $values[$id_name], $app, $id); |
|
| 352 | 352 | } |
| 353 | 353 | } |
| 354 | 354 | } |
@@ -369,25 +369,25 @@ discard block |
||
| 369 | 369 | $old = $cfs[$cf['name']]; |
| 370 | 370 | |
| 371 | 371 | // Add new one in for numbering |
| 372 | - if(!$cf['id']) |
|
| 372 | + if (!$cf['id']) |
|
| 373 | 373 | { |
| 374 | 374 | $cfs[$cf['name']] = $cf; |
| 375 | 375 | } |
| 376 | 376 | |
| 377 | - if($old['order'] != $cf['order'] || $cf['order'] % 10 !== 0) |
|
| 377 | + if ($old['order'] != $cf['order'] || $cf['order'] % 10 !== 0) |
|
| 378 | 378 | { |
| 379 | 379 | $cfs[$cf['name']]['order'] = $cf['order']; |
| 380 | - uasort($cfs, function($a1, $a2){ |
|
| 380 | + uasort($cfs, function($a1, $a2) { |
|
| 381 | 381 | return $a1['order'] - $a2['order']; |
| 382 | 382 | }); |
| 383 | 383 | $n = 0; |
| 384 | - foreach($cfs as $old_cf) |
|
| 384 | + foreach ($cfs as $old_cf) |
|
| 385 | 385 | { |
| 386 | 386 | $n += 10; |
| 387 | - if($old_cf['order'] != $n) |
|
| 387 | + if ($old_cf['order'] != $n) |
|
| 388 | 388 | { |
| 389 | 389 | $old_cf['order'] = $n; |
| 390 | - if($old_cf['name'] != $cf['name']) |
|
| 390 | + if ($old_cf['name'] != $cf['name']) |
|
| 391 | 391 | { |
| 392 | 392 | $update[] = $old_cf; |
| 393 | 393 | } |
@@ -417,7 +417,7 @@ discard block |
||
| 417 | 417 | 'cf_app' => $cf['app'], |
| 418 | 418 | ), __LINE__, __FILE__); |
| 419 | 419 | |
| 420 | - foreach($update as $old_cf) |
|
| 420 | + foreach ($update as $old_cf) |
|
| 421 | 421 | { |
| 422 | 422 | self::$db->$op(self::TABLE, array( |
| 423 | 423 | 'cf_order' => $old_cf['order'], |
@@ -442,7 +442,7 @@ discard block |
||
| 442 | 442 | if ($cfs) $query[] = self::$db->expression(self::TABLE, 'NOT ', array('cf_name' => array_keys($cfs))); |
| 443 | 443 | self::$db->delete(self::TABLE, $query, __LINE__, __FILE__); |
| 444 | 444 | |
| 445 | - foreach($cfs as $name => $cf) |
|
| 445 | + foreach ($cfs as $name => $cf) |
|
| 446 | 446 | { |
| 447 | 447 | if (empty($cf['name'])) $cf['name'] = $name; |
| 448 | 448 | if (empty($cf['app'])) $cf['app'] = $app; |
@@ -461,7 +461,7 @@ discard block |
||
| 461 | 461 | { |
| 462 | 462 | if (($cached = Api\Cache::getInstance(__CLASS__, $app))) |
| 463 | 463 | { |
| 464 | - foreach($cached as $key) |
|
| 464 | + foreach ($cached as $key) |
|
| 465 | 465 | { |
| 466 | 466 | Api\Cache::unsetInstance(__CLASS__, $key); |
| 467 | 467 | } |
@@ -481,12 +481,12 @@ discard block |
||
| 481 | 481 | $total = 0; |
| 482 | 482 | if (($cfs = self::get($app, true))) |
| 483 | 483 | { |
| 484 | - foreach($cfs as &$data) |
|
| 484 | + foreach ($cfs as &$data) |
|
| 485 | 485 | { |
| 486 | 486 | if ($data['private']) |
| 487 | 487 | { |
| 488 | 488 | $changed = 0; |
| 489 | - foreach($data['private'] as &$id) |
|
| 489 | + foreach ($data['private'] as &$id) |
|
| 490 | 490 | { |
| 491 | 491 | if (isset($ids2change[$id])) |
| 492 | 492 | { |
@@ -516,7 +516,7 @@ discard block |
||
| 516 | 516 | $types = array(); |
| 517 | 517 | if (($cfs = self::get($app, true))) |
| 518 | 518 | { |
| 519 | - foreach($cfs as $name => $data) |
|
| 519 | + foreach ($cfs as $name => $data) |
|
| 520 | 520 | { |
| 521 | 521 | if ($data['type'] == 'select-account' || $data['type'] == 'api-accounts') |
| 522 | 522 | { |
@@ -80,7 +80,10 @@ discard block |
||
| 80 | 80 | { |
| 81 | 81 | $query[] = $this->commasep_match('cf_type2', $only_type2); |
| 82 | 82 | } |
| 83 | - if (!$db) $db = self::$db; |
|
| 83 | + if (!$db) |
|
| 84 | + { |
|
| 85 | + $db = self::$db; |
|
| 86 | + } |
|
| 84 | 87 | $this->iterator = $db->select(self::TABLE, '*', $query, __LINE__, __FILE__, |
| 85 | 88 | !isset($num_rows) ? false : $start, 'ORDER BY cf_order ASC', 'phpgwapi', $num_rows); |
| 86 | 89 | } |
@@ -165,7 +168,10 @@ discard block |
||
| 165 | 168 | { |
| 166 | 169 | foreach(self::get($app, $all_private_too, $only_type2) as $data) |
| 167 | 170 | { |
| 168 | - if ($data['type'] == 'htmlarea') return true; |
|
| 171 | + if ($data['type'] == 'htmlarea') |
|
| 172 | + { |
|
| 173 | + return true; |
|
| 174 | + } |
|
| 169 | 175 | } |
| 170 | 176 | return false; |
| 171 | 177 | } |
@@ -227,7 +233,10 @@ discard block |
||
| 227 | 233 | break; |
| 228 | 234 | |
| 229 | 235 | case 'htmlarea': // ToDo: EMail probably has a nicer html2text method |
| 230 | - if ($value) $value = strip_tags(preg_replace('/<(br|p)[^>]*>/i', "\r\n", str_replace(array("\r", "\n"), '', $value))); |
|
| 236 | + if ($value) |
|
| 237 | + { |
|
| 238 | + $value = strip_tags(preg_replace('/<(br|p)[^>]*>/i', "\r\n", str_replace(array("\r", "\n"), '', $value))); |
|
| 239 | + } |
|
| 231 | 240 | break; |
| 232 | 241 | |
| 233 | 242 | case 'ajax_select': // ToDo: returns unchanged value for now |
@@ -245,7 +254,10 @@ discard block |
||
| 245 | 254 | { |
| 246 | 255 | $app = $field['type']; |
| 247 | 256 | } |
| 248 | - if ($value) $value = Api\Link::title($app, $value); |
|
| 257 | + if ($value) |
|
| 258 | + { |
|
| 259 | + $value = Api\Link::title($app, $value); |
|
| 260 | + } |
|
| 249 | 261 | } |
| 250 | 262 | break; |
| 251 | 263 | } |
@@ -278,10 +290,13 @@ discard block |
||
| 278 | 290 | if (!($path = realpath($file[0] == '/' ? $file : EGW_SERVER_ROOT.'/'.$file)) || // file does not exist |
| 279 | 291 | substr($path,0,strlen(EGW_SERVER_ROOT)+1) != EGW_SERVER_ROOT.'/' || // we are NOT inside the eGW root |
| 280 | 292 | basename($path,'.php').'.php' != basename($path) || // extension is NOT .php |
| 281 | - basename($path) == 'header.inc.php') // dont allow to include our header again |
|
| 293 | + basename($path) == 'header.inc.php') |
|
| 294 | + { |
|
| 295 | + // dont allow to include our header again |
|
| 282 | 296 | { |
| 283 | 297 | return array(lang("'%1' is no php file in the eGW server root (%2)!".': '.$path,$file,EGW_SERVER_ROOT)); |
| 284 | 298 | } |
| 299 | + } |
|
| 285 | 300 | include($path); |
| 286 | 301 | |
| 287 | 302 | return $options; |
@@ -321,7 +336,10 @@ discard block |
||
| 321 | 336 | |
| 322 | 337 | foreach(self::get($own_app) as $name => $data) |
| 323 | 338 | { |
| 324 | - if (!in_array($data['type'],$link_types)) continue; |
|
| 339 | + if (!in_array($data['type'],$link_types)) |
|
| 340 | + { |
|
| 341 | + continue; |
|
| 342 | + } |
|
| 325 | 343 | |
| 326 | 344 | // do we have a different old value --> delete that link |
| 327 | 345 | if ($old && $old['#'.$name] && $old['#'.$name] != $values['#'.$name]) |
@@ -346,10 +364,13 @@ discard block |
||
| 346 | 364 | $app = $data['type']; |
| 347 | 365 | $id = $values['#'.$name]; |
| 348 | 366 | } |
| 349 | - if ($id) // create new link, does nothing for already existing links |
|
| 367 | + if ($id) |
|
| 368 | + { |
|
| 369 | + // create new link, does nothing for already existing links |
|
| 350 | 370 | { |
| 351 | 371 | Api\Link::link($own_app,$values[$id_name],$app,$id); |
| 352 | 372 | } |
| 373 | + } |
|
| 353 | 374 | } |
| 354 | 375 | } |
| 355 | 376 | |
@@ -377,7 +398,8 @@ discard block |
||
| 377 | 398 | if($old['order'] != $cf['order'] || $cf['order'] % 10 !== 0) |
| 378 | 399 | { |
| 379 | 400 | $cfs[$cf['name']]['order'] = $cf['order']; |
| 380 | - uasort($cfs, function($a1, $a2){ |
|
| 401 | + uasort($cfs, function($a1, $a2) |
|
| 402 | + { |
|
| 381 | 403 | return $a1['order'] - $a2['order']; |
| 382 | 404 | }); |
| 383 | 405 | $n = 0; |
@@ -439,13 +461,22 @@ discard block |
||
| 439 | 461 | public static function save($app, array $cfs) |
| 440 | 462 | { |
| 441 | 463 | $query = array('cf_app' => $app); |
| 442 | - if ($cfs) $query[] = self::$db->expression(self::TABLE, 'NOT ', array('cf_name' => array_keys($cfs))); |
|
| 464 | + if ($cfs) |
|
| 465 | + { |
|
| 466 | + $query[] = self::$db->expression(self::TABLE, 'NOT ', array('cf_name' => array_keys($cfs))); |
|
| 467 | + } |
|
| 443 | 468 | self::$db->delete(self::TABLE, $query, __LINE__, __FILE__); |
| 444 | 469 | |
| 445 | 470 | foreach($cfs as $name => $cf) |
| 446 | 471 | { |
| 447 | - if (empty($cf['name'])) $cf['name'] = $name; |
|
| 448 | - if (empty($cf['app'])) $cf['app'] = $app; |
|
| 472 | + if (empty($cf['name'])) |
|
| 473 | + { |
|
| 474 | + $cf['name'] = $name; |
|
| 475 | + } |
|
| 476 | + if (empty($cf['app'])) |
|
| 477 | + { |
|
| 478 | + $cf['app'] = $app; |
|
| 479 | + } |
|
| 449 | 480 | |
| 450 | 481 | self::update($cf); |
| 451 | 482 | } |
@@ -112,6 +112,8 @@ |
||
| 112 | 112 | |
| 113 | 113 | /** |
| 114 | 114 | * Static function to add a history record |
| 115 | + * @param string $field_code |
|
| 116 | + * @param string $new_value |
|
| 115 | 117 | */ |
| 116 | 118 | public static function static_add($appname, $id, $user, $field_code, $new_value, $old_value = '') |
| 117 | 119 | { |
@@ -51,7 +51,7 @@ discard block |
||
| 51 | 51 | * @param string $appname app name this instance operates on |
| 52 | 52 | * @return historylog |
| 53 | 53 | */ |
| 54 | - function __construct($appname='',$user=null) |
|
| 54 | + function __construct($appname = '', $user = null) |
|
| 55 | 55 | { |
| 56 | 56 | $this->appname = $appname ? $appname : $GLOBALS['egw_info']['flags']['currentapp']; |
| 57 | 57 | $this->user = !is_null($user) ? $user : $GLOBALS['egw_info']['user']['account_id']; |
@@ -80,7 +80,7 @@ discard block |
||
| 80 | 80 | { |
| 81 | 81 | $where['history_record_id'] = $record_id; |
| 82 | 82 | } |
| 83 | - $this->db->delete(self::TABLE,$where,__LINE__,__FILE__); |
|
| 83 | + $this->db->delete(self::TABLE, $where, __LINE__, __FILE__); |
|
| 84 | 84 | |
| 85 | 85 | return $this->db->affected_rows(); |
| 86 | 86 | } |
@@ -93,11 +93,11 @@ discard block |
||
| 93 | 93 | * @param string $new_value new value |
| 94 | 94 | * @param string $old_value old value |
| 95 | 95 | */ |
| 96 | - function add($status,$record_id,$new_value,$old_value) |
|
| 96 | + function add($status, $record_id, $new_value, $old_value) |
|
| 97 | 97 | { |
| 98 | 98 | if ($new_value != $old_value) |
| 99 | 99 | { |
| 100 | - $this->db->insert(self::TABLE,array( |
|
| 100 | + $this->db->insert(self::TABLE, array( |
|
| 101 | 101 | 'history_record_id' => $record_id, |
| 102 | 102 | 'history_appname' => $this->appname, |
| 103 | 103 | 'history_owner' => $this->user, |
@@ -106,7 +106,7 @@ discard block |
||
| 106 | 106 | 'history_old_value' => $old_value, |
| 107 | 107 | 'history_timestamp' => time(), |
| 108 | 108 | 'sessionid' => $GLOBALS['egw']->session->sessionid_access_log, |
| 109 | - ),false,__LINE__,__FILE__); |
|
| 109 | + ), false, __LINE__, __FILE__); |
|
| 110 | 110 | } |
| 111 | 111 | } |
| 112 | 112 | |
@@ -117,7 +117,7 @@ discard block |
||
| 117 | 117 | { |
| 118 | 118 | if ($new_value != $old_value) |
| 119 | 119 | { |
| 120 | - $GLOBALS['egw']->db->insert(self::TABLE,array( |
|
| 120 | + $GLOBALS['egw']->db->insert(self::TABLE, array( |
|
| 121 | 121 | 'history_record_id' => $id, |
| 122 | 122 | 'history_appname' => $appname, |
| 123 | 123 | 'history_owner' => (int)$user, |
@@ -126,7 +126,7 @@ discard block |
||
| 126 | 126 | 'history_old_value' => $old_value, |
| 127 | 127 | 'history_timestamp' => time(), |
| 128 | 128 | 'sessionid' => $GLOBALS['egw']->session->sessionid_access_log, |
| 129 | - ),false,__LINE__,__FILE__); |
|
| 129 | + ), false, __LINE__, __FILE__); |
|
| 130 | 130 | } |
| 131 | 131 | } |
| 132 | 132 | |
@@ -140,11 +140,11 @@ discard block |
||
| 140 | 140 | * @return array of arrays with keys id, record_id, appname, owner (account_id), status, new_value, old_value, |
| 141 | 141 | * timestamp (Y-m-d H:i:s in servertime), user_ts (timestamp in user-time) |
| 142 | 142 | */ |
| 143 | - function search($filter,$order='history_id',$sort='DESC',$limit=null) |
|
| 143 | + function search($filter, $order = 'history_id', $sort = 'DESC', $limit = null) |
|
| 144 | 144 | { |
| 145 | 145 | if (!is_array($filter)) $filter = is_numeric($filter) ? array('history_record_id' => $filter) : array(); |
| 146 | 146 | |
| 147 | - if (!$order || !preg_match('/^[a-z0-9_]+$/i',$order) || !preg_match('/^(asc|desc)?$/i',$sort)) |
|
| 147 | + if (!$order || !preg_match('/^[a-z0-9_]+$/i', $order) || !preg_match('/^(asc|desc)?$/i', $sort)) |
|
| 148 | 148 | { |
| 149 | 149 | $orderby = 'ORDER BY history_id DESC'; |
| 150 | 150 | } |
@@ -152,9 +152,9 @@ discard block |
||
| 152 | 152 | { |
| 153 | 153 | $orderby = "ORDER BY $order $sort"; |
| 154 | 154 | } |
| 155 | - foreach($filter as $col => $value) |
|
| 155 | + foreach ($filter as $col => $value) |
|
| 156 | 156 | { |
| 157 | - if (!is_numeric($col) && substr($col,0,8) != 'history_') |
|
| 157 | + if (!is_numeric($col) && substr($col, 0, 8) != 'history_') |
|
| 158 | 158 | { |
| 159 | 159 | $filter['history_'.$col] = $value; |
| 160 | 160 | unset($filter[$col]); |
@@ -166,11 +166,11 @@ discard block |
||
| 166 | 166 | if (!$filter['history_record_id']) return array(); |
| 167 | 167 | |
| 168 | 168 | $rows = array(); |
| 169 | - foreach($this->db->select(self::TABLE, '*', $filter, __LINE__, __FILE__, |
|
| 169 | + foreach ($this->db->select(self::TABLE, '*', $filter, __LINE__, __FILE__, |
|
| 170 | 170 | isset($limit) ? 0 : false, $orderby, 'phpgwapi', $limit) as $row) |
| 171 | 171 | { |
| 172 | 172 | $row['user_ts'] = $this->db->from_timestamp($row['history_timestamp']) + 3600 * $GLOBALS['egw_info']['user']['preferences']['common']['tz_offset']; |
| 173 | - $rows[] = Api\Db::strip_array_keys($row,'history_'); |
|
| 173 | + $rows[] = Api\Db::strip_array_keys($row, 'history_'); |
|
| 174 | 174 | } |
| 175 | 175 | return $rows; |
| 176 | 176 | } |
@@ -188,8 +188,8 @@ discard block |
||
| 188 | 188 | $rows = array(); |
| 189 | 189 | $filter['history_appname'] = $query['appname']; |
| 190 | 190 | $filter['history_record_id'] = $query['record_id']; |
| 191 | - if(is_array($query['colfilter'])) { |
|
| 192 | - foreach($query['colfilter'] as $column => $value) { |
|
| 191 | + if (is_array($query['colfilter'])) { |
|
| 192 | + foreach ($query['colfilter'] as $column => $value) { |
|
| 193 | 193 | $filter[$column] = $value; |
| 194 | 194 | } |
| 195 | 195 | } |
@@ -199,20 +199,20 @@ discard block |
||
| 199 | 199 | } |
| 200 | 200 | else |
| 201 | 201 | { |
| 202 | - $total = $GLOBALS['egw']->db->select(self::TABLE,'COUNT(*)',$filter,__LINE__,__FILE__,false,'','phpgwapi',0)->fetchColumn(); |
|
| 202 | + $total = $GLOBALS['egw']->db->select(self::TABLE, 'COUNT(*)', $filter, __LINE__, __FILE__, false, '', 'phpgwapi', 0)->fetchColumn(); |
|
| 203 | 203 | } |
| 204 | 204 | // filter out private (or no longer defined) custom fields |
| 205 | 205 | if ($filter['history_appname']) |
| 206 | 206 | { |
| 207 | 207 | $to_or[] = "history_status NOT LIKE '#%'"; |
| 208 | 208 | // explicitly allow "##" used to store iCal/vCard X-attributes |
| 209 | - if (in_array($filter['history_appname'], array('calendar','infolog','addressbook'))) |
|
| 209 | + if (in_array($filter['history_appname'], array('calendar', 'infolog', 'addressbook'))) |
|
| 210 | 210 | { |
| 211 | 211 | $to_or[] = "history_status LIKE '##%'"; |
| 212 | 212 | } |
| 213 | 213 | if (($cfs = Customfields::get($filter['history_appname']))) |
| 214 | 214 | { |
| 215 | - $to_or[] = 'history_status IN ('.implode(',', array_map(function($str) |
|
| 215 | + $to_or[] = 'history_status IN ('.implode(',', array_map(function($str) |
|
| 216 | 216 | { |
| 217 | 217 | return $GLOBALS['egw']->db->quote('#'.$str); |
| 218 | 218 | }, array_keys($cfs))).')'; |
@@ -221,25 +221,25 @@ discard block |
||
| 221 | 221 | } |
| 222 | 222 | $_query = array(array( |
| 223 | 223 | 'table' => self::TABLE, |
| 224 | - 'cols' => array('history_id', 'history_record_id','history_appname','history_owner','history_status','history_new_value', 'history_timestamp','history_old_value'), |
|
| 224 | + 'cols' => array('history_id', 'history_record_id', 'history_appname', 'history_owner', 'history_status', 'history_new_value', 'history_timestamp', 'history_old_value'), |
|
| 225 | 225 | 'where' => $filter, |
| 226 | 226 | )); |
| 227 | 227 | |
| 228 | 228 | // Add in files, if possible |
| 229 | - if($GLOBALS['egw_info']['user']['apps']['filemanager'] && |
|
| 230 | - $file = Api\Vfs\Sqlfs\StreamWrapper::url_stat("/apps/{$query['appname']}/{$query['record_id']}",STREAM_URL_STAT_LINK)) |
|
| 229 | + if ($GLOBALS['egw_info']['user']['apps']['filemanager'] && |
|
| 230 | + $file = Api\Vfs\Sqlfs\StreamWrapper::url_stat("/apps/{$query['appname']}/{$query['record_id']}", STREAM_URL_STAT_LINK)) |
|
| 231 | 231 | { |
| 232 | 232 | $_query[] = array( |
| 233 | 233 | 'table' => Api\Vfs\Sqlfs\StreamWrapper::TABLE, |
| 234 | - 'cols' =>array('fs_id', 'fs_dir', "'filemanager'",'COALESCE(fs_modifier,fs_creator)',"'~file~'",'fs_name','fs_modified', 'fs_mime'), |
|
| 234 | + 'cols' =>array('fs_id', 'fs_dir', "'filemanager'", 'COALESCE(fs_modifier,fs_creator)', "'~file~'", 'fs_name', 'fs_modified', 'fs_mime'), |
|
| 235 | 235 | 'where' => array('fs_dir' => $file['ino']) |
| 236 | 236 | ); |
| 237 | 237 | } |
| 238 | 238 | $new_file_id = array(); |
| 239 | - foreach($GLOBALS['egw']->db->union( |
|
| 239 | + foreach ($GLOBALS['egw']->db->union( |
|
| 240 | 240 | $_query, |
| 241 | 241 | __LINE__, __FILE__, |
| 242 | - ' ORDER BY ' . ($query['order'] ? $query['order'] : 'history_timestamp') . ' ' . ($query['sort'] ? $query['sort'] : 'DESC'), |
|
| 242 | + ' ORDER BY '.($query['order'] ? $query['order'] : 'history_timestamp').' '.($query['sort'] ? $query['sort'] : 'DESC'), |
|
| 243 | 243 | $query['start'], |
| 244 | 244 | $query['num_rows'] |
| 245 | 245 | ) as $row) |
@@ -247,15 +247,15 @@ discard block |
||
| 247 | 247 | $row['user_ts'] = $GLOBALS['egw']->db->from_timestamp($row['history_timestamp']) + 3600 * $GLOBALS['egw_info']['user']['preferences']['common']['tz_offset']; |
| 248 | 248 | |
| 249 | 249 | // Explode multi-part values |
| 250 | - foreach(array('history_new_value','history_old_value') as $field) |
|
| 250 | + foreach (array('history_new_value', 'history_old_value') as $field) |
|
| 251 | 251 | { |
| 252 | - if(strpos($row[$field],Tracking::ONE2N_SEPERATOR) !== false) |
|
| 252 | + if (strpos($row[$field], Tracking::ONE2N_SEPERATOR) !== false) |
|
| 253 | 253 | { |
| 254 | - $row[$field] = explode(Tracking::ONE2N_SEPERATOR,$row[$field]); |
|
| 254 | + $row[$field] = explode(Tracking::ONE2N_SEPERATOR, $row[$field]); |
|
| 255 | 255 | } |
| 256 | 256 | } |
| 257 | 257 | // Get information needed for proper display |
| 258 | - if($row['history_appname'] == 'filemanager') |
|
| 258 | + if ($row['history_appname'] == 'filemanager') |
|
| 259 | 259 | { |
| 260 | 260 | $new_version = $new_file_id[$row['history_new_value']]; |
| 261 | 261 | $new_file_id[$row['history_new_value']] = count($rows); |
@@ -271,12 +271,12 @@ discard block |
||
| 271 | 271 | 'mime' => $row['history_old_value'] |
| 272 | 272 | ); |
| 273 | 273 | $row['history_old_value'] = ''; |
| 274 | - if($new_version !== null) |
|
| 274 | + if ($new_version !== null) |
|
| 275 | 275 | { |
| 276 | 276 | $rows[$new_version]['old_value'] = $row['history_new_value']; |
| 277 | 277 | } |
| 278 | 278 | } |
| 279 | - $rows[] = Api\Db::strip_array_keys($row,'history_'); |
|
| 279 | + $rows[] = Api\Db::strip_array_keys($row, 'history_'); |
|
| 280 | 280 | } |
| 281 | 281 | if ($mysql_calc_rows) |
| 282 | 282 | { |
@@ -142,7 +142,10 @@ discard block |
||
| 142 | 142 | */ |
| 143 | 143 | function search($filter,$order='history_id',$sort='DESC',$limit=null) |
| 144 | 144 | { |
| 145 | - if (!is_array($filter)) $filter = is_numeric($filter) ? array('history_record_id' => $filter) : array(); |
|
| 145 | + if (!is_array($filter)) |
|
| 146 | + { |
|
| 147 | + $filter = is_numeric($filter) ? array('history_record_id' => $filter) : array(); |
|
| 148 | + } |
|
| 146 | 149 | |
| 147 | 150 | if (!$order || !preg_match('/^[a-z0-9_]+$/i',$order) || !preg_match('/^(asc|desc)?$/i',$sort)) |
| 148 | 151 | { |
@@ -160,10 +163,16 @@ discard block |
||
| 160 | 163 | unset($filter[$col]); |
| 161 | 164 | } |
| 162 | 165 | } |
| 163 | - if (!isset($filter['history_appname'])) $filter['history_appname'] = $this->appname; |
|
| 166 | + if (!isset($filter['history_appname'])) |
|
| 167 | + { |
|
| 168 | + $filter['history_appname'] = $this->appname; |
|
| 169 | + } |
|
| 164 | 170 | |
| 165 | 171 | // do not try to read all history entries of an app |
| 166 | - if (!$filter['history_record_id']) return array(); |
|
| 172 | + if (!$filter['history_record_id']) |
|
| 173 | + { |
|
| 174 | + return array(); |
|
| 175 | + } |
|
| 167 | 176 | |
| 168 | 177 | $rows = array(); |
| 169 | 178 | foreach($this->db->select(self::TABLE, '*', $filter, __LINE__, __FILE__, |
@@ -188,8 +197,10 @@ discard block |
||
| 188 | 197 | $rows = array(); |
| 189 | 198 | $filter['history_appname'] = $query['appname']; |
| 190 | 199 | $filter['history_record_id'] = $query['record_id']; |
| 191 | - if(is_array($query['colfilter'])) { |
|
| 192 | - foreach($query['colfilter'] as $column => $value) { |
|
| 200 | + if(is_array($query['colfilter'])) |
|
| 201 | + { |
|
| 202 | + foreach($query['colfilter'] as $column => $value) |
|
| 203 | + { |
|
| 193 | 204 | $filter[$column] = $value; |
| 194 | 205 | } |
| 195 | 206 | } |
@@ -368,9 +368,9 @@ discard block |
||
| 368 | 368 | * |
| 369 | 369 | * Calls get_links() repeatedly to get all the combinations for the content. |
| 370 | 370 | * |
| 371 | - * @param $app String appname |
|
| 371 | + * @param string $app String appname |
|
| 372 | 372 | * @param $id String ID of record |
| 373 | - * @param $prefix |
|
| 373 | + * @param string $prefix |
|
| 374 | 374 | * @param $content String document content |
| 375 | 375 | */ |
| 376 | 376 | protected function get_all_links($app, $id, $prefix, &$content) |
@@ -530,7 +530,7 @@ discard block |
||
| 530 | 530 | * @param mixed $app_limit app_limit, if not set checks the global limit |
| 531 | 531 | * @param string $checkas [AND|ISALLOWED], AND default; if set to ISALLOWED it is checked if Export is allowed |
| 532 | 532 | * |
| 533 | - * @return bool - true if no export is allowed or a limit is set, false if there is no restriction |
|
| 533 | + * @return boolean|null - true if no export is allowed or a limit is set, false if there is no restriction |
|
| 534 | 534 | */ |
| 535 | 535 | public static function hasExportLimit($app_limit,$checkas='AND') |
| 536 | 536 | { |
@@ -579,6 +579,9 @@ discard block |
||
| 579 | 579 | return $content; |
| 580 | 580 | } |
| 581 | 581 | |
| 582 | + /** |
|
| 583 | + * @param string $mimetype |
|
| 584 | + */ |
|
| 582 | 585 | protected function apply_styles (&$content, $mimetype, $mso_application_progid=null) |
| 583 | 586 | { |
| 584 | 587 | if (!isset($mso_application_progid)) |
@@ -1169,6 +1172,8 @@ discard block |
||
| 1169 | 1172 | |
| 1170 | 1173 | /** |
| 1171 | 1174 | * Convert numeric values in spreadsheets into actual numeric values |
| 1175 | + * @param string $content |
|
| 1176 | + * @param string $mimetype |
|
| 1172 | 1177 | */ |
| 1173 | 1178 | protected function format_spreadsheet_numbers(&$content, $names, $mimetype) |
| 1174 | 1179 | { |
@@ -1238,6 +1243,7 @@ discard block |
||
| 1238 | 1243 | |
| 1239 | 1244 | /** |
| 1240 | 1245 | * Convert date / timestamp values in spreadsheets into actual date / timestamp values |
| 1246 | + * @param string $mimetype |
|
| 1241 | 1247 | */ |
| 1242 | 1248 | protected function format_spreadsheet_dates(&$content, $names, &$values, $mimetype) |
| 1243 | 1249 | { |
@@ -1342,6 +1348,7 @@ discard block |
||
| 1342 | 1348 | /** |
| 1343 | 1349 | * Expand link_to custom fields with the merge replacements from the app |
| 1344 | 1350 | * but only if the template uses them. |
| 1351 | + * @param string $app |
|
| 1345 | 1352 | */ |
| 1346 | 1353 | public function cf_link_to_expand($values, $content, &$replacements, $app = null) |
| 1347 | 1354 | { |
@@ -1407,7 +1414,7 @@ discard block |
||
| 1407 | 1414 | /** |
| 1408 | 1415 | * Process special flags, such as IF or NELF |
| 1409 | 1416 | * |
| 1410 | - * @param content Text to be examined and changed |
|
| 1417 | + * @param content string to be examined and changed |
|
| 1411 | 1418 | * @param replacements array of markers => replacement |
| 1412 | 1419 | * |
| 1413 | 1420 | * @return changed content |
@@ -1720,8 +1727,7 @@ discard block |
||
| 1720 | 1727 | * Get a list of document actions / files from the given directory |
| 1721 | 1728 | * |
| 1722 | 1729 | * @param string $dirs Directory(s comma or space separated) to search |
| 1723 | - * @param string $prefix='document_' prefix for array keys |
|
| 1724 | - * @param array|string $mime_filter=null allowed mime type(s), default all, negative filter if $mime_filter[0] === '!' |
|
| 1730 | + * @param array|string $mime_filter allowed mime type(s), default all, negative filter if $mime_filter[0] === '!' |
|
| 1725 | 1731 | * @return array List of documents, suitable for a selectbox. The key is document_<filename>. |
| 1726 | 1732 | */ |
| 1727 | 1733 | public static function get_documents($dirs, $prefix='document_', $mime_filter=null, $app='') |
@@ -1988,7 +1994,8 @@ discard block |
||
| 1988 | 1994 | * |
| 1989 | 1995 | * @param string &$document maybe relative path of document, on return true absolute path to existing document |
| 1990 | 1996 | * @param string $dirs comma or whitespace separated directories |
| 1991 | - * @return string|boolean false if document exists, otherwise string with error-message |
|
| 1997 | + * @param string $document |
|
| 1998 | + * @return false|string false if document exists, otherwise string with error-message |
|
| 1992 | 1999 | */ |
| 1993 | 2000 | public static function check_document(&$document, $dirs) |
| 1994 | 2001 | { |
@@ -1417,19 +1417,19 @@ discard block |
||
| 1417 | 1417 | if (strpos($content,'$$IF') !== false) |
| 1418 | 1418 | { //Example use to use: $$IF n_prefix~Herr~Sehr geehrter~Sehr geehrte$$ |
| 1419 | 1419 | $this->replacements =& $replacements; |
| 1420 | - $content = preg_replace_callback('/\$\$IF ([#0-9a-z_\/-]+)~(.*)~(.*)~(.*)\$\$/imU',Array($this,'replace_callback'),$content); |
|
| 1420 | + $content = preg_replace_callback('/\$\$IF ([#0-9a-z_\/-]+)~(.*)~(.*)~(.*)\$\$/imU',array($this,'replace_callback'),$content); |
|
| 1421 | 1421 | unset($this->replacements); |
| 1422 | 1422 | } |
| 1423 | 1423 | if (strpos($content,'$$NELF') !== false) |
| 1424 | 1424 | { //Example: $$NEPBR org_unit$$ sets a LF and value of org_unit, only if there is a value |
| 1425 | 1425 | $this->replacements =& $replacements; |
| 1426 | - $content = preg_replace_callback('/\$\$NELF ([#0-9a-z_\/-]+)\$\$/imU',Array($this,'replace_callback'),$content); |
|
| 1426 | + $content = preg_replace_callback('/\$\$NELF ([#0-9a-z_\/-]+)\$\$/imU',array($this,'replace_callback'),$content); |
|
| 1427 | 1427 | unset($this->replacements); |
| 1428 | 1428 | } |
| 1429 | 1429 | if (strpos($content,'$$NENVLF') !== false) |
| 1430 | 1430 | { //Example: $$NEPBRNV org_unit$$ sets only a LF if there is a value for org_units, but did not add any value |
| 1431 | 1431 | $this->replacements =& $replacements; |
| 1432 | - $content = preg_replace_callback('/\$\$NENVLF ([#0-9a-z_\/-]+)\$\$/imU',Array($this,'replace_callback'),$content); |
|
| 1432 | + $content = preg_replace_callback('/\$\$NENVLF ([#0-9a-z_\/-]+)\$\$/imU',array($this,'replace_callback'),$content); |
|
| 1433 | 1433 | unset($this->replacements); |
| 1434 | 1434 | } |
| 1435 | 1435 | if (strpos($content,'$$LETTERPREFIX$$') !== false) |
@@ -1440,7 +1440,7 @@ discard block |
||
| 1440 | 1440 | if (strpos($content,'$$LETTERPREFIXCUSTOM') !== false) |
| 1441 | 1441 | { //Example use to use for a custom Letter Prefix: $$LETTERPREFIX n_prefix title n_family$$ |
| 1442 | 1442 | $this->replacements =& $replacements; |
| 1443 | - $content = preg_replace_callback('/\$\$LETTERPREFIXCUSTOM ([#0-9a-z_-]+)(.*)\$\$/imU',Array($this,'replace_callback'),$content); |
|
| 1443 | + $content = preg_replace_callback('/\$\$LETTERPREFIXCUSTOM ([#0-9a-z_-]+)(.*)\$\$/imU',array($this,'replace_callback'),$content); |
|
| 1444 | 1444 | unset($this->replacements); |
| 1445 | 1445 | } |
| 1446 | 1446 | return $content; |
@@ -1958,7 +1958,7 @@ discard block |
||
| 1958 | 1958 | * @param Array $file Array of information about the document from Api\Vfs::find |
| 1959 | 1959 | * @return void |
| 1960 | 1960 | */ |
| 1961 | - private static function document_mail_action(Array &$action, $file) |
|
| 1961 | + private static function document_mail_action(array &$action, $file) |
|
| 1962 | 1962 | { |
| 1963 | 1963 | unset($action['postSubmit']); |
| 1964 | 1964 | |
@@ -168,19 +168,28 @@ discard block |
||
| 168 | 168 | switch ($mimetype) |
| 169 | 169 | { |
| 170 | 170 | case 'application/msword': |
| 171 | - if (strtolower($extension) != '.rtf') break; |
|
| 171 | + if (strtolower($extension) != '.rtf') |
|
| 172 | + { |
|
| 173 | + break; |
|
| 174 | + } |
|
| 172 | 175 | case 'application/rtf': |
| 173 | 176 | case 'text/rtf': |
| 174 | 177 | return true; // rtf files |
| 175 | 178 | case 'application/vnd.oasis.opendocument.text': // oo text |
| 176 | 179 | case 'application/vnd.oasis.opendocument.spreadsheet': // oo spreadsheet |
| 177 | - if (!$zip_available) break; |
|
| 180 | + if (!$zip_available) |
|
| 181 | + { |
|
| 182 | + break; |
|
| 183 | + } |
|
| 178 | 184 | return true; // open office write xml files |
| 179 | 185 | case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': // ms word 2007 xml format |
| 180 | 186 | case 'application/vnd.openxmlformats-officedocument.wordprocessingml.d': // mimetypes in vfs are limited to 64 chars |
| 181 | 187 | case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': // ms excel 2007 xml format |
| 182 | 188 | case 'application/vnd.openxmlformats-officedocument.spreadsheetml.shee': |
| 183 | - if (!$zip_available) break; |
|
| 189 | + if (!$zip_available) |
|
| 190 | + { |
|
| 191 | + break; |
|
| 192 | + } |
|
| 184 | 193 | return true; // ms word xml format |
| 185 | 194 | case 'application/xml': |
| 186 | 195 | return true; // alias for text/xml, eg. ms office 2003 word format |
@@ -215,7 +224,10 @@ discard block |
||
| 215 | 224 | { |
| 216 | 225 | $contact = $this->contacts->read($contact, $ignore_acl); |
| 217 | 226 | } |
| 218 | - if (!is_array($contact)) return array(); |
|
| 227 | + if (!is_array($contact)) |
|
| 228 | + { |
|
| 229 | + return array(); |
|
| 230 | + } |
|
| 219 | 231 | |
| 220 | 232 | $replacements = array(); |
| 221 | 233 | foreach(array_keys($this->contacts->contact_fields) as $name) |
@@ -224,7 +236,10 @@ discard block |
||
| 224 | 236 | switch($name) |
| 225 | 237 | { |
| 226 | 238 | case 'created': case 'modified': |
| 227 | - if($value) $value = Api\DateTime::to($value); |
|
| 239 | + if($value) |
|
| 240 | + { |
|
| 241 | + $value = Api\DateTime::to($value); |
|
| 242 | + } |
|
| 228 | 243 | break; |
| 229 | 244 | case 'bday': |
| 230 | 245 | if ($value) |
@@ -274,7 +289,10 @@ discard block |
||
| 274 | 289 | } |
| 275 | 290 | break; |
| 276 | 291 | } |
| 277 | - if ($name != 'photo') $replacements['$$'.($prefix ? $prefix.'/':'').$name.'$$'] = $value; |
|
| 292 | + if ($name != 'photo') |
|
| 293 | + { |
|
| 294 | + $replacements['$$'.($prefix ? $prefix.'/':'').$name.'$$'] = $value; |
|
| 295 | + } |
|
| 278 | 296 | } |
| 279 | 297 | // set custom fields, should probably go to a general method all apps can use |
| 280 | 298 | // need to load all cfs for $ignore_acl=true |
@@ -291,17 +309,23 @@ discard block |
||
| 291 | 309 | $cats = array(); |
| 292 | 310 | foreach(is_array($contact['cat_id']) ? $contact['cat_id'] : explode(',',$contact['cat_id']) as $cat_id) |
| 293 | 311 | { |
| 294 | - if(!$cat_id) continue; |
|
| 312 | + if(!$cat_id) |
|
| 313 | + { |
|
| 314 | + continue; |
|
| 315 | + } |
|
| 295 | 316 | if($GLOBALS['egw']->categories->id2name($cat_id,'main') != $cat_id) |
| 296 | 317 | { |
| 297 | 318 | $path = explode(' / ', $GLOBALS['egw']->categories->id2name($cat_id, 'path')); |
| 298 | 319 | unset($path[0]); // Drop main |
| 299 | 320 | $cats[$GLOBALS['egw']->categories->id2name($cat_id,'main')][] = implode(' / ', $path); |
| 300 | - } elseif($cat_id) { |
|
| 321 | + } |
|
| 322 | + elseif($cat_id) |
|
| 323 | + { |
|
| 301 | 324 | $cats[$cat_id] = array(); |
| 302 | 325 | } |
| 303 | 326 | } |
| 304 | - foreach($cats as $main => $cat) { |
|
| 327 | + foreach($cats as $main => $cat) |
|
| 328 | + { |
|
| 305 | 329 | $replacements['$$'.($prefix ? $prefix.'/':'').'categories$$'] .= $GLOBALS['egw']->categories->id2name($main,'name') |
| 306 | 330 | . (count($cat) > 0 ? ': ' : '') . implode(', ', $cats[$main]) . "\n"; |
| 307 | 331 | } |
@@ -336,7 +360,10 @@ discard block |
||
| 336 | 360 | 'id' => $link_info |
| 337 | 361 | ); |
| 338 | 362 | } |
| 339 | - if($exclude && in_array($link_info['id'], $exclude)) continue; |
|
| 363 | + if($exclude && in_array($link_info['id'], $exclude)) |
|
| 364 | + { |
|
| 365 | + continue; |
|
| 366 | + } |
|
| 340 | 367 | |
| 341 | 368 | $title = Api\Link::title($link_info['app'], $link_info['id']); |
| 342 | 369 | if(class_exists('EGroupware\Stylite\Vfs\Links\StreamWrapper') && $link_info['app'] != Api\Link::VFS_APPNAME) |
@@ -455,7 +482,10 @@ discard block |
||
| 455 | 482 | protected function format_datetime($time,$format=null) |
| 456 | 483 | { |
| 457 | 484 | trigger_error(__METHOD__ . ' is deprecated, use Api\DateTime::to($time, $format)', E_USER_DEPRECATED); |
| 458 | - if (is_null($format)) $format = $this->datetime_format; |
|
| 485 | + if (is_null($format)) |
|
| 486 | + { |
|
| 487 | + $format = $this->datetime_format; |
|
| 488 | + } |
|
| 459 | 489 | |
| 460 | 490 | return Api\DateTime::to($time,$format); |
| 461 | 491 | } |
@@ -497,7 +527,10 @@ discard block |
||
| 497 | 527 | public static function getExportLimit($app='common') |
| 498 | 528 | { |
| 499 | 529 | static $exportLimitStore=array(); |
| 500 | - if (empty($app)) $app='common'; |
|
| 530 | + if (empty($app)) |
|
| 531 | + { |
|
| 532 | + $app='common'; |
|
| 533 | + } |
|
| 501 | 534 | //error_log(__METHOD__.__LINE__.' called with app:'.$app); |
| 502 | 535 | if (!array_key_exists($app,$exportLimitStore)) |
| 503 | 536 | { |
@@ -506,7 +539,10 @@ discard block |
||
| 506 | 539 | if ($app !='common') |
| 507 | 540 | { |
| 508 | 541 | $app_limit = Api\Hooks::single('export_limit',$app); |
| 509 | - if ($app_limit) $exportLimitStore[$app] = $app_limit; |
|
| 542 | + if ($app_limit) |
|
| 543 | + { |
|
| 544 | + $exportLimitStore[$app] = $app_limit; |
|
| 545 | + } |
|
| 510 | 546 | } |
| 511 | 547 | //error_log(__METHOD__.__LINE__.' building cache for app:'.$app.' -> '.$exportLimitStore[$app]); |
| 512 | 548 | if (empty($exportLimitStore[$app])) |
@@ -539,10 +575,22 @@ discard block |
||
| 539 | 575 | */ |
| 540 | 576 | public static function hasExportLimit($app_limit,$checkas='AND') |
| 541 | 577 | { |
| 542 | - if (strtoupper($checkas) == 'ISALLOWED') return (empty($app_limit) || ($app_limit !='no' && $app_limit > 0) ); |
|
| 543 | - if (empty($app_limit)) return false; |
|
| 544 | - if ($app_limit == 'no') return true; |
|
| 545 | - if ($app_limit > 0) return true; |
|
| 578 | + if (strtoupper($checkas) == 'ISALLOWED') |
|
| 579 | + { |
|
| 580 | + return (empty($app_limit) || ($app_limit !='no' && $app_limit > 0) ); |
|
| 581 | + } |
|
| 582 | + if (empty($app_limit)) |
|
| 583 | + { |
|
| 584 | + return false; |
|
| 585 | + } |
|
| 586 | + if ($app_limit == 'no') |
|
| 587 | + { |
|
| 588 | + return true; |
|
| 589 | + } |
|
| 590 | + if ($app_limit > 0) |
|
| 591 | + { |
|
| 592 | + return true; |
|
| 593 | + } |
|
| 546 | 594 | } |
| 547 | 595 | |
| 548 | 596 | /** |
@@ -577,7 +625,8 @@ discard block |
||
| 577 | 625 | |
| 578 | 626 | try { |
| 579 | 627 | $content = $this->merge_string($content,$ids,$err,$mimetype,$fix); |
| 580 | - } catch (\Exception $e) { |
|
| 628 | + } |
|
| 629 | + catch (\Exception $e) { |
|
| 581 | 630 | $err = $e->getMessage(); |
| 582 | 631 | return false; |
| 583 | 632 | } |
@@ -666,7 +715,8 @@ discard block |
||
| 666 | 715 | $content = $xslt->transformToXml($element); |
| 667 | 716 | |
| 668 | 717 | // Word 2003 needs two declarations, add extra declaration back in |
| 669 | - if($mimetype == 'application/xml' && $mso_application_progid == 'Word.Document' && strpos($content, '<?xml') !== 0) { |
|
| 718 | + if($mimetype == 'application/xml' && $mso_application_progid == 'Word.Document' && strpos($content, '<?xml') !== 0) |
|
| 719 | + { |
|
| 670 | 720 | $content = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'.$content; |
| 671 | 721 | } |
| 672 | 722 | // Validate |
@@ -726,7 +776,10 @@ discard block |
||
| 726 | 776 | // textdocuments are simple, they do not hold start and end, but they may have content before and after the $$pagerepeat$$ tag |
| 727 | 777 | // header and footer should not hold any $$ tags; if we find $$ tags with the header, we assume it is the pagerepeatcontent |
| 728 | 778 | $nohead = false; |
| 729 | - if (stripos($contentstart,'$$') !== false) $nohead = true; |
|
| 779 | + if (stripos($contentstart,'$$') !== false) |
|
| 780 | + { |
|
| 781 | + $nohead = true; |
|
| 782 | + } |
|
| 730 | 783 | if ($nohead) |
| 731 | 784 | { |
| 732 | 785 | $contentend = $contentrepeat; |
@@ -768,13 +821,19 @@ discard block |
||
| 768 | 821 | preg_match_all('/\$\$labelplacement\$\$/',$contentrepeat,$countlables, PREG_SPLIT_NO_EMPTY); |
| 769 | 822 | $countlables = count($countlables[0]); |
| 770 | 823 | preg_replace('/\$\$labelplacement\$\$/','',$Labelrepeat,1); |
| 771 | - if ($countlables > 1) $lableprint = true; |
|
| 824 | + if ($countlables > 1) |
|
| 825 | + { |
|
| 826 | + $lableprint = true; |
|
| 827 | + } |
|
| 772 | 828 | if (count($ids) > 1 && !$contentrepeat) |
| 773 | 829 | { |
| 774 | 830 | $err = lang('for more than one contact in a document use the tag pagerepeat!'); |
| 775 | 831 | return false; |
| 776 | 832 | } |
| 777 | - if ($this->report_memory_usage) error_log(__METHOD__."(count(ids)=".count($ids).") strlen(contentrepeat)=".strlen($contentrepeat).', strlen(labelrepeat)='.strlen($Labelrepeat)); |
|
| 833 | + if ($this->report_memory_usage) |
|
| 834 | + { |
|
| 835 | + error_log(__METHOD__."(count(ids)=".count($ids).") strlen(contentrepeat)=".strlen($contentrepeat).', strlen(labelrepeat)='.strlen($Labelrepeat)); |
|
| 836 | + } |
|
| 778 | 837 | |
| 779 | 838 | if ($contentrepeat) |
| 780 | 839 | { |
@@ -807,8 +866,15 @@ discard block |
||
| 807 | 866 | } |
| 808 | 867 | foreach ((array)$ids as $n => $id) |
| 809 | 868 | { |
| 810 | - if ($contentrepeat) $content = $contentrepeat; //content to repeat |
|
| 811 | - if ($lableprint) $content = $Labelrepeat; |
|
| 869 | + if ($contentrepeat) |
|
| 870 | + { |
|
| 871 | + $content = $contentrepeat; |
|
| 872 | + } |
|
| 873 | + //content to repeat |
|
| 874 | + if ($lableprint) |
|
| 875 | + { |
|
| 876 | + $content = $Labelrepeat; |
|
| 877 | + } |
|
| 812 | 878 | |
| 813 | 879 | // generate replacements; if exeption is thrown, catch it set error message and return false |
| 814 | 880 | try |
@@ -825,7 +891,10 @@ discard block |
||
| 825 | 891 | $err = $e->getMessage(); |
| 826 | 892 | return false; |
| 827 | 893 | } |
| 828 | - if ($this->report_memory_usage) error_log(__METHOD__."() $n: $id ".Api\Vfs::hsize(memory_get_usage(true))); |
|
| 894 | + if ($this->report_memory_usage) |
|
| 895 | + { |
|
| 896 | + error_log(__METHOD__."() $n: $id ".Api\Vfs::hsize(memory_get_usage(true))); |
|
| 897 | + } |
|
| 829 | 898 | // some general replacements: current user, date and time |
| 830 | 899 | if (strpos($content,'$$user/') !== null && ($user = $GLOBALS['egw']->accounts->id2name($GLOBALS['egw_info']['user']['account_id'],'person_id'))) |
| 831 | 900 | { |
@@ -883,9 +952,12 @@ discard block |
||
| 883 | 952 | { |
| 884 | 953 | $contentrepeatpages[$countpage] = preg_replace('/\$\$labelplacement\$\$/',$Label,$contentrepeatpages[$countpage],1); |
| 885 | 954 | $count=$count+1; |
| 886 | - if (($count % $countlables) == 0 && count($contentrep)>$count) //new page |
|
| 955 | + if (($count % $countlables) == 0 && count($contentrep)>$count) |
|
| 956 | + { |
|
| 957 | + //new page |
|
| 887 | 958 | { |
| 888 | 959 | $countpage = $countpage+1; |
| 960 | + } |
|
| 889 | 961 | $contentrepeatpages[$countpage] = $Labelstart.$Labeltend; |
| 890 | 962 | } |
| 891 | 963 | } |
@@ -916,7 +988,10 @@ discard block |
||
| 916 | 988 | rewind($content_stream); |
| 917 | 989 | return stream_get_contents($content_stream); |
| 918 | 990 | } |
| 919 | - if ($this->report_memory_usage) error_log(__METHOD__."() returning ".Api\Vfs::hsize(memory_get_peak_usage(true))); |
|
| 991 | + if ($this->report_memory_usage) |
|
| 992 | + { |
|
| 993 | + error_log(__METHOD__."() returning ".Api\Vfs::hsize(memory_get_peak_usage(true))); |
|
| 994 | + } |
|
| 920 | 995 | |
| 921 | 996 | return $content; |
| 922 | 997 | } |
@@ -959,7 +1034,10 @@ discard block |
||
| 959 | 1034 | break; |
| 960 | 1035 | |
| 961 | 1036 | default: // div. text files --> use our export-charset, defined in addressbook prefs |
| 962 | - if (empty($charset)) $charset = $this->contacts->prefs['csv_charset']; |
|
| 1037 | + if (empty($charset)) |
|
| 1038 | + { |
|
| 1039 | + $charset = $this->contacts->prefs['csv_charset']; |
|
| 1040 | + } |
|
| 963 | 1041 | break; |
| 964 | 1042 | } |
| 965 | 1043 | //error_log(__METHOD__."('$document', ... ,$mimetype) --> $charset (egw=".Api\Translation::charset().', export='.$this->contacts->prefs['csv_charset'].')'); |
@@ -982,10 +1060,13 @@ discard block |
||
| 982 | 1060 | } |
| 983 | 1061 | } |
| 984 | 1062 | } |
| 985 | - if ($is_xml) // zip'ed xml document (eg. OO) |
|
| 1063 | + if ($is_xml) |
|
| 1064 | + { |
|
| 1065 | + // zip'ed xml document (eg. OO) |
|
| 986 | 1066 | { |
| 987 | 1067 | // Numeric fields |
| 988 | 1068 | $names = array(); |
| 1069 | + } |
|
| 989 | 1070 | |
| 990 | 1071 | // Tags we can replace with the target document's version |
| 991 | 1072 | $replace_tags = array(); |
@@ -1047,7 +1128,8 @@ discard block |
||
| 1047 | 1128 | else if (is_string($value) && (strpos($value,'<') !== false)) |
| 1048 | 1129 | { |
| 1049 | 1130 | // Clean HTML, if it's being kept |
| 1050 | - if($replace_tags && extension_loaded('tidy')) { |
|
| 1131 | + if($replace_tags && extension_loaded('tidy')) |
|
| 1132 | + { |
|
| 1051 | 1133 | $tidy = new tidy(); |
| 1052 | 1134 | $cleaned = $tidy->repairString($value, self::$tidy_config); |
| 1053 | 1135 | // Found errors. Strip it all so there's some output |
@@ -1081,16 +1163,20 @@ discard block |
||
| 1081 | 1163 | // replace all control chars (C0+C1) but CR (\015), LF (\012) and TAB (\011) (eg. vertical tabulators) with space |
| 1082 | 1164 | // as they are not allowed in xml |
| 1083 | 1165 | $value = preg_replace('/[\000-\010\013\014\016-\037\177-\237]/u',' ',$value); |
| 1084 | - if(is_numeric($value) && $name != '$$user/account_id$$') // account_id causes problems with the preg_replace below |
|
| 1166 | + if(is_numeric($value) && $name != '$$user/account_id$$') |
|
| 1167 | + { |
|
| 1168 | + // account_id causes problems with the preg_replace below |
|
| 1085 | 1169 | { |
| 1086 | 1170 | $names[] = preg_quote($name,'/'); |
| 1087 | 1171 | } |
| 1172 | + } |
|
| 1088 | 1173 | } |
| 1089 | 1174 | |
| 1090 | 1175 | // Look for numbers, set their value if needed |
| 1091 | 1176 | if($this->numeric_fields || count($names)) |
| 1092 | 1177 | { |
| 1093 | - foreach((array)$this->numeric_fields as $fieldname) { |
|
| 1178 | + foreach((array)$this->numeric_fields as $fieldname) |
|
| 1179 | + { |
|
| 1094 | 1180 | $names[] = preg_quote($fieldname,'/'); |
| 1095 | 1181 | } |
| 1096 | 1182 | $this->format_spreadsheet_numbers($content, $names, $mimetype.$mso_application_progid); |
@@ -1100,7 +1186,8 @@ discard block |
||
| 1100 | 1186 | if($this->date_fields || count($names)) |
| 1101 | 1187 | { |
| 1102 | 1188 | $names = array(); |
| 1103 | - foreach((array)$this->date_fields as $fieldname) { |
|
| 1189 | + foreach((array)$this->date_fields as $fieldname) |
|
| 1190 | + { |
|
| 1104 | 1191 | $names[] = $fieldname; |
| 1105 | 1192 | } |
| 1106 | 1193 | $this->format_spreadsheet_dates($content, $names, $replacements, $mimetype.$mso_application_progid); |
@@ -1177,7 +1264,8 @@ discard block |
||
| 1177 | 1264 | */ |
| 1178 | 1265 | protected function format_spreadsheet_numbers(&$content, $names, $mimetype) |
| 1179 | 1266 | { |
| 1180 | - foreach((array)$this->numeric_fields as $fieldname) { |
|
| 1267 | + foreach((array)$this->numeric_fields as $fieldname) |
|
| 1268 | + { |
|
| 1181 | 1269 | $names[] = preg_quote($fieldname,'/'); |
| 1182 | 1270 | } |
| 1183 | 1271 | switch($mimetype) |
@@ -1206,7 +1294,11 @@ discard block |
||
| 1206 | 1294 | // try to increase/double pcre.backtrack_limit failure |
| 1207 | 1295 | while(preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR && self::increase_backtrack_limit()); |
| 1208 | 1296 | |
| 1209 | - if ($result) $content = $result; // On failure $result would be NULL |
|
| 1297 | + if ($result) |
|
| 1298 | + { |
|
| 1299 | + $content = $result; |
|
| 1300 | + } |
|
| 1301 | + // On failure $result would be NULL |
|
| 1210 | 1302 | } |
| 1211 | 1303 | } |
| 1212 | 1304 | |
@@ -1250,7 +1342,10 @@ discard block |
||
| 1250 | 1342 | 'application/vnd.oasis.opendocument.spreadsheet', // open office calc |
| 1251 | 1343 | 'application/xmlExcel.Sheet', // Excel 2003 |
| 1252 | 1344 | //'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'//Excel WTF |
| 1253 | - ))) return; |
|
| 1345 | + ))) |
|
| 1346 | + { |
|
| 1347 | + return; |
|
| 1348 | + } |
|
| 1254 | 1349 | |
| 1255 | 1350 | // Some different formats dates could be in, depending what they've been through |
| 1256 | 1351 | $formats = array( |
@@ -1279,8 +1374,12 @@ discard block |
||
| 1279 | 1374 | $values[$key], |
| 1280 | 1375 | Api\DateTime::$user_timezone |
| 1281 | 1376 | ); |
| 1282 | - if($date) break; |
|
| 1283 | - } catch (\Exception $e) { |
|
| 1377 | + if($date) |
|
| 1378 | + { |
|
| 1379 | + break; |
|
| 1380 | + } |
|
| 1381 | + } |
|
| 1382 | + catch (\Exception $e) { |
|
| 1284 | 1383 | |
| 1285 | 1384 | } |
| 1286 | 1385 | } |
@@ -1296,9 +1395,12 @@ discard block |
||
| 1296 | 1395 | { |
| 1297 | 1396 | $date = new Api\DateTime($values[$key]); |
| 1298 | 1397 | } |
| 1299 | - if($mimetype == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')//Excel WTF |
|
| 1398 | + if($mimetype == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') |
|
| 1399 | + { |
|
| 1400 | + //Excel WTF |
|
| 1300 | 1401 | { |
| 1301 | 1402 | $interval = $date->diff(new Api\DateTime('1900-01-00 0:00')); |
| 1403 | + } |
|
| 1302 | 1404 | $values[$key] = $interval->format('%a')+1;// 1900-02-29 did not exist |
| 1303 | 1405 | // 1440 minutes in a day - fractional part |
| 1304 | 1406 | $values[$key] += ($date->format('H') * 60 + $date->format('i'))/1440; |
@@ -1340,7 +1442,11 @@ discard block |
||
| 1340 | 1442 | // try to increase/double pcre.backtrack_limit failure |
| 1341 | 1443 | while(preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR && self::increase_backtrack_limit()); |
| 1342 | 1444 | |
| 1343 | - if ($result) $content = $result; // On failure $result would be NULL |
|
| 1445 | + if ($result) |
|
| 1446 | + { |
|
| 1447 | + $content = $result; |
|
| 1448 | + } |
|
| 1449 | + // On failure $result would be NULL |
|
| 1344 | 1450 | } |
| 1345 | 1451 | } |
| 1346 | 1452 | |
@@ -1404,7 +1510,10 @@ discard block |
||
| 1404 | 1510 | } |
| 1405 | 1511 | else |
| 1406 | 1512 | { |
| 1407 | - if ($cfs[$field]['type'] == 'date' || $cfs[$field]['type'] == 'date-time') $this->date_fields[] = '#'.$field; |
|
| 1513 | + if ($cfs[$field]['type'] == 'date' || $cfs[$field]['type'] == 'date-time') |
|
| 1514 | + { |
|
| 1515 | + $this->date_fields[] = '#'.$field; |
|
| 1516 | + } |
|
| 1408 | 1517 | } |
| 1409 | 1518 | } |
| 1410 | 1519 | } |
@@ -1420,30 +1529,35 @@ discard block |
||
| 1420 | 1529 | private function process_commands($content, $replacements) |
| 1421 | 1530 | { |
| 1422 | 1531 | if (strpos($content,'$$IF') !== false) |
| 1423 | - { //Example use to use: $$IF n_prefix~Herr~Sehr geehrter~Sehr geehrte$$ |
|
| 1532 | + { |
|
| 1533 | +//Example use to use: $$IF n_prefix~Herr~Sehr geehrter~Sehr geehrte$$ |
|
| 1424 | 1534 | $this->replacements =& $replacements; |
| 1425 | 1535 | $content = preg_replace_callback('/\$\$IF ([#0-9a-z_\/-]+)~(.*)~(.*)~(.*)\$\$/imU',Array($this,'replace_callback'),$content); |
| 1426 | 1536 | unset($this->replacements); |
| 1427 | 1537 | } |
| 1428 | 1538 | if (strpos($content,'$$NELF') !== false) |
| 1429 | - { //Example: $$NEPBR org_unit$$ sets a LF and value of org_unit, only if there is a value |
|
| 1539 | + { |
|
| 1540 | +//Example: $$NEPBR org_unit$$ sets a LF and value of org_unit, only if there is a value |
|
| 1430 | 1541 | $this->replacements =& $replacements; |
| 1431 | 1542 | $content = preg_replace_callback('/\$\$NELF ([#0-9a-z_\/-]+)\$\$/imU',Array($this,'replace_callback'),$content); |
| 1432 | 1543 | unset($this->replacements); |
| 1433 | 1544 | } |
| 1434 | 1545 | if (strpos($content,'$$NENVLF') !== false) |
| 1435 | - { //Example: $$NEPBRNV org_unit$$ sets only a LF if there is a value for org_units, but did not add any value |
|
| 1546 | + { |
|
| 1547 | +//Example: $$NEPBRNV org_unit$$ sets only a LF if there is a value for org_units, but did not add any value |
|
| 1436 | 1548 | $this->replacements =& $replacements; |
| 1437 | 1549 | $content = preg_replace_callback('/\$\$NENVLF ([#0-9a-z_\/-]+)\$\$/imU',Array($this,'replace_callback'),$content); |
| 1438 | 1550 | unset($this->replacements); |
| 1439 | 1551 | } |
| 1440 | 1552 | if (strpos($content,'$$LETTERPREFIX$$') !== false) |
| 1441 | - { //Example use to use: $$LETTERPREFIX$$ |
|
| 1553 | + { |
|
| 1554 | +//Example use to use: $$LETTERPREFIX$$ |
|
| 1442 | 1555 | $LETTERPREFIXCUSTOM = '$$LETTERPREFIXCUSTOM n_prefix title n_family$$'; |
| 1443 | 1556 | $content = str_replace('$$LETTERPREFIX$$',$LETTERPREFIXCUSTOM,$content); |
| 1444 | 1557 | } |
| 1445 | 1558 | if (strpos($content,'$$LETTERPREFIXCUSTOM') !== false) |
| 1446 | - { //Example use to use for a custom Letter Prefix: $$LETTERPREFIX n_prefix title n_family$$ |
|
| 1559 | + { |
|
| 1560 | +//Example use to use for a custom Letter Prefix: $$LETTERPREFIX n_prefix title n_family$$ |
|
| 1447 | 1561 | $this->replacements =& $replacements; |
| 1448 | 1562 | $content = preg_replace_callback('/\$\$LETTERPREFIXCUSTOM ([#0-9a-z_-]+)(.*)\$\$/imU',Array($this,'replace_callback'),$content); |
| 1449 | 1563 | unset($this->replacements); |
@@ -1459,8 +1573,14 @@ discard block |
||
| 1459 | 1573 | */ |
| 1460 | 1574 | private function replace_callback($param) |
| 1461 | 1575 | { |
| 1462 | - if (array_key_exists('$$'.$param[4].'$$',$this->replacements)) $param[4] = $this->replacements['$$'.$param[4].'$$']; |
|
| 1463 | - if (array_key_exists('$$'.$param[3].'$$',$this->replacements)) $param[3] = $this->replacements['$$'.$param[3].'$$']; |
|
| 1576 | + if (array_key_exists('$$'.$param[4].'$$',$this->replacements)) |
|
| 1577 | + { |
|
| 1578 | + $param[4] = $this->replacements['$$'.$param[4].'$$']; |
|
| 1579 | + } |
|
| 1580 | + if (array_key_exists('$$'.$param[3].'$$',$this->replacements)) |
|
| 1581 | + { |
|
| 1582 | + $param[3] = $this->replacements['$$'.$param[3].'$$']; |
|
| 1583 | + } |
|
| 1464 | 1584 | |
| 1465 | 1585 | $pattern = '/'.preg_quote($param[2], '/').'/'; |
| 1466 | 1586 | if (strpos($param[0],'$$IF') === 0 && (trim($param[2]) == "EMPTY" || $param[2] === '')) |
@@ -1482,7 +1602,7 @@ discard block |
||
| 1482 | 1602 | } |
| 1483 | 1603 | |
| 1484 | 1604 | switch($this->mimetype) |
| 1485 | - { |
|
| 1605 | + { |
|
| 1486 | 1606 | case 'application/rtf': |
| 1487 | 1607 | case 'text/rtf': |
| 1488 | 1608 | $LF = '}\par \pard\plain{'; |
@@ -1506,25 +1626,38 @@ discard block |
||
| 1506 | 1626 | default: |
| 1507 | 1627 | $LF = "\n"; |
| 1508 | 1628 | } |
| 1509 | - if($is_xml) { |
|
| 1629 | + if($is_xml) |
|
| 1630 | + { |
|
| 1510 | 1631 | $this->replacements = str_replace(array('&','&amp;','<','>',"\r","\n"),array('&','&','<','>','',$LF),$this->replacements); |
| 1511 | 1632 | } |
| 1512 | 1633 | if (strpos($param[0],'$$NELF') === 0) |
| 1513 | - { //sets a Pagebreak and value, only if the field has a value |
|
| 1514 | - if ($this->replacements['$$'.$param[1].'$$'] !='') $replace = $LF.$this->replacements['$$'.$param[1].'$$']; |
|
| 1634 | + { |
|
| 1635 | +//sets a Pagebreak and value, only if the field has a value |
|
| 1636 | + if ($this->replacements['$$'.$param[1].'$$'] !='') |
|
| 1637 | + { |
|
| 1638 | + $replace = $LF.$this->replacements['$$'.$param[1].'$$']; |
|
| 1639 | + } |
|
| 1515 | 1640 | } |
| 1516 | 1641 | if (strpos($param[0],'$$NENVLF') === 0) |
| 1517 | - { //sets a Pagebreak without any value, only if the field has a value |
|
| 1518 | - if ($this->replacements['$$'.$param[1].'$$'] !='') $replace = $LF; |
|
| 1642 | + { |
|
| 1643 | +//sets a Pagebreak without any value, only if the field has a value |
|
| 1644 | + if ($this->replacements['$$'.$param[1].'$$'] !='') |
|
| 1645 | + { |
|
| 1646 | + $replace = $LF; |
|
| 1647 | + } |
|
| 1519 | 1648 | } |
| 1520 | 1649 | if (strpos($param[0],'$$LETTERPREFIXCUSTOM') === 0) |
| 1521 | - { //sets a Letterprefix |
|
| 1650 | + { |
|
| 1651 | +//sets a Letterprefix |
|
| 1522 | 1652 | $replaceprefixsort = array(); |
| 1523 | 1653 | // ToDo Stefan: $contentstart is NOT defined here!!! |
| 1524 | 1654 | $replaceprefix = explode(' ',substr($param[0],21,-2)); |
| 1525 | 1655 | foreach ($replaceprefix as $nameprefix) |
| 1526 | 1656 | { |
| 1527 | - if ($this->replacements['$$'.$nameprefix.'$$'] !='') $replaceprefixsort[] = $this->replacements['$$'.$nameprefix.'$$']; |
|
| 1657 | + if ($this->replacements['$$'.$nameprefix.'$$'] !='') |
|
| 1658 | + { |
|
| 1659 | + $replaceprefixsort[] = $this->replacements['$$'.$nameprefix.'$$']; |
|
| 1660 | + } |
|
| 1528 | 1661 | } |
| 1529 | 1662 | $replace = implode($replaceprefixsort,' '); |
| 1530 | 1663 | } |
@@ -1565,13 +1698,20 @@ discard block |
||
| 1565 | 1698 | } |
| 1566 | 1699 | //error_log(__METHOD__.__LINE__.' Message after importMessageToMergeAndSend:'.array2string($msgs)); |
| 1567 | 1700 | $retString = ''; |
| 1568 | - if (count($msgs['success'])>0) $retString .= count($msgs['success']).' '.(count($msgs['success'])+count($msgs['failed'])==1?lang('Message prepared for sending.'):lang('Message(s) send ok.'));//implode('<br />',$msgs['success']); |
|
| 1701 | + if (count($msgs['success'])>0) |
|
| 1702 | + { |
|
| 1703 | + $retString .= count($msgs['success']).' '.(count($msgs['success'])+count($msgs['failed'])==1?lang('Message prepared for sending.'):lang('Message(s) send ok.')); |
|
| 1704 | + } |
|
| 1705 | + //implode('<br />',$msgs['success']); |
|
| 1569 | 1706 | //if (strlen($retString)>0) $retString .= '<br />'; |
| 1570 | 1707 | foreach($msgs['failed'] as $c =>$e) |
| 1571 | 1708 | { |
| 1572 | 1709 | $errorString .= lang('contact').' '.lang('id').':'.$c.'->'.$e.'.'; |
| 1573 | 1710 | } |
| 1574 | - if (count($msgs['failed'])>0) $retString .= count($msgs['failed']).' '.lang('Message(s) send failed!').'=>'.$errorString; |
|
| 1711 | + if (count($msgs['failed'])>0) |
|
| 1712 | + { |
|
| 1713 | + $retString .= count($msgs['failed']).' '.lang('Message(s) send failed!').'=>'.$errorString; |
|
| 1714 | + } |
|
| 1575 | 1715 | return $retString; |
| 1576 | 1716 | case 'application/vnd.oasis.opendocument.text': |
| 1577 | 1717 | case 'application/vnd.oasis.opendocument.spreadsheet': |
@@ -1643,7 +1783,10 @@ discard block |
||
| 1643 | 1783 | return $err; |
| 1644 | 1784 | } |
| 1645 | 1785 | } |
| 1646 | - if ($this->report_memory_usage) error_log(__METHOD__."() after HTML processing ".Api\Vfs::hsize(memory_get_peak_usage(true))); |
|
| 1786 | + if ($this->report_memory_usage) |
|
| 1787 | + { |
|
| 1788 | + error_log(__METHOD__."() after HTML processing ".Api\Vfs::hsize(memory_get_peak_usage(true))); |
|
| 1789 | + } |
|
| 1647 | 1790 | } |
| 1648 | 1791 | if(!empty($name)) |
| 1649 | 1792 | { |
@@ -1663,18 +1806,33 @@ discard block |
||
| 1663 | 1806 | if ($zip->open($archive, ZipArchive::CHECKCONS) !== true) |
| 1664 | 1807 | { |
| 1665 | 1808 | error_log(__METHOD__.__LINE__." !ZipArchive::open('$archive',ZIPARCHIVE"."::CHECKCONS) failed. Trying open without validating"); |
| 1666 | - if ($zip->open($archive) !== true) throw new Api\Exception("!ZipArchive::open('$archive',|ZIPARCHIVE::CHECKCONS)"); |
|
| 1809 | + if ($zip->open($archive) !== true) |
|
| 1810 | + { |
|
| 1811 | + throw new Api\Exception("!ZipArchive::open('$archive',|ZIPARCHIVE::CHECKCONS)"); |
|
| 1812 | + } |
|
| 1813 | + } |
|
| 1814 | + if ($zip->addFromString($content_file,$merged) !== true) |
|
| 1815 | + { |
|
| 1816 | + throw new Api\Exception("!ZipArchive::addFromString('$content_file',\$merged)"); |
|
| 1817 | + } |
|
| 1818 | + if ($zip->close() !== true) |
|
| 1819 | + { |
|
| 1820 | + throw new Api\Exception("!ZipArchive::close()"); |
|
| 1667 | 1821 | } |
| 1668 | - if ($zip->addFromString($content_file,$merged) !== true) throw new Api\Exception("!ZipArchive::addFromString('$content_file',\$merged)"); |
|
| 1669 | - if ($zip->close() !== true) throw new Api\Exception("!ZipArchive::close()"); |
|
| 1670 | 1822 | unset($zip); |
| 1671 | 1823 | unset($merged); |
| 1672 | 1824 | if (substr($mimetype,0,35) == 'application/vnd.oasis.opendocument.' && // only open office archives need that, ms word files brake |
| 1673 | - file_exists('/usr/bin/zip') && version_compare(PHP_VERSION,'5.3.1','<')) // fix broken zip archives generated by current php |
|
| 1825 | + file_exists('/usr/bin/zip') && version_compare(PHP_VERSION,'5.3.1','<')) |
|
| 1826 | + { |
|
| 1827 | + // fix broken zip archives generated by current php |
|
| 1674 | 1828 | { |
| 1675 | 1829 | exec('/usr/bin/zip -F '.escapeshellarg($archive)); |
| 1676 | 1830 | } |
| 1677 | - if ($this->report_memory_usage) error_log(__METHOD__."() after ZIP processing ".Api\Vfs::hsize(memory_get_peak_usage(true))); |
|
| 1831 | + } |
|
| 1832 | + if ($this->report_memory_usage) |
|
| 1833 | + { |
|
| 1834 | + error_log(__METHOD__."() after ZIP processing ".Api\Vfs::hsize(memory_get_peak_usage(true))); |
|
| 1835 | + } |
|
| 1678 | 1836 | Api\Header\Content::type($name,$mimetype,filesize($archive)); |
| 1679 | 1837 | readfile($archive,'r'); |
| 1680 | 1838 | } |
@@ -1709,9 +1867,18 @@ discard block |
||
| 1709 | 1867 | */ |
| 1710 | 1868 | public function download_by_request() |
| 1711 | 1869 | { |
| 1712 | - if(empty($_POST['data_document_name'])) return false; |
|
| 1713 | - if(empty($_POST['data_document_dir'])) return false; |
|
| 1714 | - if(empty($_POST['data_checked'])) return false; |
|
| 1870 | + if(empty($_POST['data_document_name'])) |
|
| 1871 | + { |
|
| 1872 | + return false; |
|
| 1873 | + } |
|
| 1874 | + if(empty($_POST['data_document_dir'])) |
|
| 1875 | + { |
|
| 1876 | + return false; |
|
| 1877 | + } |
|
| 1878 | + if(empty($_POST['data_checked'])) |
|
| 1879 | + { |
|
| 1880 | + return false; |
|
| 1881 | + } |
|
| 1715 | 1882 | |
| 1716 | 1883 | return $this->download( |
| 1717 | 1884 | $_POST['data_document_name'], |
@@ -1732,7 +1899,10 @@ discard block |
||
| 1732 | 1899 | public static function get_documents($dirs, $prefix='document_', $mime_filter=null, $app='') |
| 1733 | 1900 | { |
| 1734 | 1901 | $export_limit=self::getExportLimit($app); |
| 1735 | - if (!$dirs || (!self::hasExportLimit($export_limit,'ISALLOWED') && !self::is_export_limit_excepted())) return array(); |
|
| 1902 | + if (!$dirs || (!self::hasExportLimit($export_limit,'ISALLOWED') && !self::is_export_limit_excepted())) |
|
| 1903 | + { |
|
| 1904 | + return array(); |
|
| 1905 | + } |
|
| 1736 | 1906 | |
| 1737 | 1907 | // split multiple comma or whitespace separated directories |
| 1738 | 1908 | // to still allow space or comma in dirnames, we also use the trailing slash of all pathes to split |
@@ -1740,7 +1910,11 @@ discard block |
||
| 1740 | 1910 | { |
| 1741 | 1911 | foreach($dirs as $n => &$d) |
| 1742 | 1912 | { |
| 1743 | - if ($n) $d = '/'.$d; // re-adding trailing slash removed by split |
|
| 1913 | + if ($n) |
|
| 1914 | + { |
|
| 1915 | + $d = '/'.$d; |
|
| 1916 | + } |
|
| 1917 | + // re-adding trailing slash removed by split |
|
| 1744 | 1918 | } |
| 1745 | 1919 | } |
| 1746 | 1920 | if ($mime_filter && ($negativ_filter = $mime_filter[0] === '!')) |
@@ -1763,8 +1937,14 @@ discard block |
||
| 1763 | 1937 | { |
| 1764 | 1938 | // return only the mime-types we support |
| 1765 | 1939 | $parts = explode('.',$file['name']); |
| 1766 | - if (!self::is_implemented($file['mime'],'.'.array_pop($parts))) continue; |
|
| 1767 | - if ($mime_filter && $negativ_filter === in_array($file['mime'], (array)$mime_filter)) continue; |
|
| 1940 | + if (!self::is_implemented($file['mime'],'.'.array_pop($parts))) |
|
| 1941 | + { |
|
| 1942 | + continue; |
|
| 1943 | + } |
|
| 1944 | + if ($mime_filter && $negativ_filter === in_array($file['mime'], (array)$mime_filter)) |
|
| 1945 | + { |
|
| 1946 | + continue; |
|
| 1947 | + } |
|
| 1768 | 1948 | $list[$prefix.$file['name']] = Api\Vfs::decodePath($file['name']); |
| 1769 | 1949 | } |
| 1770 | 1950 | } |
@@ -1794,12 +1974,19 @@ discard block |
||
| 1794 | 1974 | $export_limit=null) |
| 1795 | 1975 | { |
| 1796 | 1976 | $documents = array(); |
| 1797 | - if ($export_limit == null) $export_limit = self::getExportLimit(); // check if there is a globalsetting |
|
| 1798 | - if ($default_doc && ($file = Api\Vfs::stat($default_doc))) // put default document on top |
|
| 1977 | + if ($export_limit == null) |
|
| 1978 | + { |
|
| 1979 | + $export_limit = self::getExportLimit(); |
|
| 1980 | + } |
|
| 1981 | + // check if there is a globalsetting |
|
| 1982 | + if ($default_doc && ($file = Api\Vfs::stat($default_doc))) |
|
| 1983 | + { |
|
| 1984 | + // put default document on top |
|
| 1799 | 1985 | { |
| 1800 | 1986 | if(!$file['mime']) |
| 1801 | 1987 | { |
| 1802 | 1988 | $file['mime'] = Api\Vfs::mime_content_type($default_doc); |
| 1989 | + } |
|
| 1803 | 1990 | $file['path'] = $default_doc; |
| 1804 | 1991 | } |
| 1805 | 1992 | $documents['document'] = array( |
@@ -1823,7 +2010,11 @@ discard block |
||
| 1823 | 2010 | { |
| 1824 | 2011 | foreach($dirs as $n => &$d) |
| 1825 | 2012 | { |
| 1826 | - if ($n) $d = '/'.$d; // re-adding trailing slash removed by split |
|
| 2013 | + if ($n) |
|
| 2014 | + { |
|
| 2015 | + $d = '/'.$d; |
|
| 2016 | + } |
|
| 2017 | + // re-adding trailing slash removed by split |
|
| 1827 | 2018 | } |
| 1828 | 2019 | } |
| 1829 | 2020 | foreach($dirs as $dir) |
@@ -1843,10 +2034,13 @@ discard block |
||
| 1843 | 2034 | $parts = explode('.',$file['name']); |
| 1844 | 2035 | if (!self::is_implemented($file['mime'],'.'.array_pop($parts)) || |
| 1845 | 2036 | !Api\Vfs::check_access($file['path'], Api\Vfs::READABLE, $file) || // remove files not readable by user |
| 1846 | - $file['path'] === $default_doc) // default doc already added |
|
| 2037 | + $file['path'] === $default_doc) |
|
| 2038 | + { |
|
| 2039 | + // default doc already added |
|
| 1847 | 2040 | { |
| 1848 | 2041 | unset($files[$key]); |
| 1849 | 2042 | } |
| 2043 | + } |
|
| 1850 | 2044 | else |
| 1851 | 2045 | { |
| 1852 | 2046 | $dirname = Api\Vfs::dirname($file['path']); |
@@ -2005,7 +2199,11 @@ discard block |
||
| 2005 | 2199 | { |
| 2006 | 2200 | foreach($dirs as $n => $dir) |
| 2007 | 2201 | { |
| 2008 | - if ($n) $dir = '/'.$dir; // re-adding trailing slash removed by split |
|
| 2202 | + if ($n) |
|
| 2203 | + { |
|
| 2204 | + $dir = '/'.$dir; |
|
| 2205 | + } |
|
| 2206 | + // re-adding trailing slash removed by split |
|
| 2009 | 2207 | if (Api\Vfs::stat($dir.'/'.$document) && Api\Vfs::is_readable($dir.'/'.$document)) |
| 2010 | 2208 | { |
| 2011 | 2209 | $document = $dir.'/'.$document; |
@@ -2042,7 +2240,10 @@ discard block |
||
| 2042 | 2240 | */ |
| 2043 | 2241 | static public function number_format($number,$num_decimal_places=2,$_mimetype='') |
| 2044 | 2242 | { |
| 2045 | - if ((string)$number === '') return ''; |
|
| 2243 | + if ((string)$number === '') |
|
| 2244 | + { |
|
| 2245 | + return ''; |
|
| 2246 | + } |
|
| 2046 | 2247 | //error_log(__METHOD__.$_mimetype); |
| 2047 | 2248 | switch($_mimetype) |
| 2048 | 2249 | { |
@@ -82,14 +82,14 @@ discard block |
||
| 82 | 82 | * Configuration for HTML Tidy to clean up any HTML content that is kept |
| 83 | 83 | */ |
| 84 | 84 | public static $tidy_config = array( |
| 85 | - 'output-xml' => true, // Entity encoding |
|
| 85 | + 'output-xml' => true, // Entity encoding |
|
| 86 | 86 | 'show-body-only' => true, |
| 87 | 87 | 'output-encoding' => 'utf-8', |
| 88 | 88 | 'input-encoding' => 'utf-8', |
| 89 | - 'quote-ampersand' => false, // Prevent double encoding |
|
| 90 | - 'quote-nbsp' => true, // XSLT can handle spaces easier |
|
| 89 | + 'quote-ampersand' => false, // Prevent double encoding |
|
| 90 | + 'quote-nbsp' => true, // XSLT can handle spaces easier |
|
| 91 | 91 | 'preserve-entities' => true, |
| 92 | - 'wrap' => 0, // Wrapping can break output |
|
| 92 | + 'wrap' => 0, // Wrapping can break output |
|
| 93 | 93 | ); |
| 94 | 94 | |
| 95 | 95 | /** |
@@ -120,7 +120,7 @@ discard block |
||
| 120 | 120 | $this->contacts = new Api\Contacts(); |
| 121 | 121 | |
| 122 | 122 | $this->datetime_format = $GLOBALS['egw_info']['user']['preferences']['common']['dateformat'].' '. |
| 123 | - ($GLOBALS['egw_info']['user']['preferences']['common']['timeformat']==12 ? 'h:i a' : 'H:i'); |
|
| 123 | + ($GLOBALS['egw_info']['user']['preferences']['common']['timeformat'] == 12 ? 'h:i a' : 'H:i'); |
|
| 124 | 124 | |
| 125 | 125 | $this->export_limit = self::getExportLimit(); |
| 126 | 126 | } |
@@ -135,7 +135,7 @@ discard block |
||
| 135 | 135 | $accountsel = new uiaccountsel(); |
| 136 | 136 | |
| 137 | 137 | return '<input type="hidden" value="" name="newsettings[export_limit_excepted]" />'. |
| 138 | - $accountsel->selection('newsettings[export_limit_excepted]','export_limit_excepted',$config['export_limit_excepted'],'both',4); |
|
| 138 | + $accountsel->selection('newsettings[export_limit_excepted]', 'export_limit_excepted', $config['export_limit_excepted'], 'both', 4); |
|
| 139 | 139 | } |
| 140 | 140 | |
| 141 | 141 | /** |
@@ -149,7 +149,7 @@ discard block |
||
| 149 | 149 | * @param string &$content=null content to create some replacements only if they are use |
| 150 | 150 | * @return array|boolean array with replacements or false if entry not found |
| 151 | 151 | */ |
| 152 | - abstract protected function get_replacements($id,&$content=null); |
|
| 152 | + abstract protected function get_replacements($id, &$content = null); |
|
| 153 | 153 | |
| 154 | 154 | /** |
| 155 | 155 | * Return if merge-print is implemented for given mime-type (and/or extension) |
@@ -157,13 +157,13 @@ discard block |
||
| 157 | 157 | * @param string $mimetype eg. text/plain |
| 158 | 158 | * @param string $extension only checked for applications/msword and .rtf |
| 159 | 159 | */ |
| 160 | - static public function is_implemented($mimetype,$extension=null) |
|
| 160 | + static public function is_implemented($mimetype, $extension = null) |
|
| 161 | 161 | { |
| 162 | - static $zip_available=null; |
|
| 162 | + static $zip_available = null; |
|
| 163 | 163 | if (is_null($zip_available)) |
| 164 | 164 | { |
| 165 | 165 | $zip_available = check_load_extension('zip') && |
| 166 | - class_exists('ZipArchive'); // some PHP has zip extension, but no ZipArchive (eg. RHEL5!) |
|
| 166 | + class_exists('ZipArchive'); // some PHP has zip extension, but no ZipArchive (eg. RHEL5!) |
|
| 167 | 167 | } |
| 168 | 168 | switch ($mimetype) |
| 169 | 169 | { |
@@ -171,27 +171,27 @@ discard block |
||
| 171 | 171 | if (strtolower($extension) != '.rtf') break; |
| 172 | 172 | case 'application/rtf': |
| 173 | 173 | case 'text/rtf': |
| 174 | - return true; // rtf files |
|
| 174 | + return true; // rtf files |
|
| 175 | 175 | case 'application/vnd.oasis.opendocument.text': // oo text |
| 176 | 176 | case 'application/vnd.oasis.opendocument.spreadsheet': // oo spreadsheet |
| 177 | 177 | if (!$zip_available) break; |
| 178 | - return true; // open office write xml files |
|
| 178 | + return true; // open office write xml files |
|
| 179 | 179 | case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': // ms word 2007 xml format |
| 180 | 180 | case 'application/vnd.openxmlformats-officedocument.wordprocessingml.d': // mimetypes in vfs are limited to 64 chars |
| 181 | 181 | case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': // ms excel 2007 xml format |
| 182 | 182 | case 'application/vnd.openxmlformats-officedocument.spreadsheetml.shee': |
| 183 | 183 | if (!$zip_available) break; |
| 184 | - return true; // ms word xml format |
|
| 184 | + return true; // ms word xml format |
|
| 185 | 185 | case 'application/xml': |
| 186 | - return true; // alias for text/xml, eg. ms office 2003 word format |
|
| 186 | + return true; // alias for text/xml, eg. ms office 2003 word format |
|
| 187 | 187 | case 'message/rfc822': |
| 188 | 188 | return true; // ToDo: check if you are theoretical able to send mail |
| 189 | 189 | case 'application/x-yaml': |
| 190 | - return true; // yaml file, plain text with marginal syntax support for multiline replacements |
|
| 190 | + return true; // yaml file, plain text with marginal syntax support for multiline replacements |
|
| 191 | 191 | default: |
| 192 | - if (substr($mimetype,0,5) == 'text/') |
|
| 192 | + if (substr($mimetype, 0, 5) == 'text/') |
|
| 193 | 193 | { |
| 194 | - return true; // text files |
|
| 194 | + return true; // text files |
|
| 195 | 195 | } |
| 196 | 196 | break; |
| 197 | 197 | } |
@@ -209,7 +209,7 @@ discard block |
||
| 209 | 209 | * @param boolean $ignore_acl =false true: no acl check |
| 210 | 210 | * @return array |
| 211 | 211 | */ |
| 212 | - public function contact_replacements($contact,$prefix='',$ignore_acl=false) |
|
| 212 | + public function contact_replacements($contact, $prefix = '', $ignore_acl = false) |
|
| 213 | 213 | { |
| 214 | 214 | if (!is_array($contact)) |
| 215 | 215 | { |
@@ -218,13 +218,13 @@ discard block |
||
| 218 | 218 | if (!is_array($contact)) return array(); |
| 219 | 219 | |
| 220 | 220 | $replacements = array(); |
| 221 | - foreach(array_keys($this->contacts->contact_fields) as $name) |
|
| 221 | + foreach (array_keys($this->contacts->contact_fields) as $name) |
|
| 222 | 222 | { |
| 223 | 223 | $value = $contact[$name]; |
| 224 | - switch($name) |
|
| 224 | + switch ($name) |
|
| 225 | 225 | { |
| 226 | 226 | case 'created': case 'modified': |
| 227 | - if($value) $value = Api\DateTime::to($value); |
|
| 227 | + if ($value) $value = Api\DateTime::to($value); |
|
| 228 | 228 | break; |
| 229 | 229 | case 'bday': |
| 230 | 230 | if ($value) |
@@ -233,7 +233,7 @@ discard block |
||
| 233 | 233 | $value = Api\DateTime::to($value, true); |
| 234 | 234 | } |
| 235 | 235 | catch (\Exception $e) { |
| 236 | - unset($e); // ignore exception caused by wrongly formatted date |
|
| 236 | + unset($e); // ignore exception caused by wrongly formatted date |
|
| 237 | 237 | } |
| 238 | 238 | } |
| 239 | 239 | break; |
@@ -246,11 +246,11 @@ discard block |
||
| 246 | 246 | // if cat-tree is displayed, we return a full category path not just the name of the cat |
| 247 | 247 | $use = $GLOBALS['egw_info']['server']['cat_tab'] == 'Tree' ? 'path' : 'name'; |
| 248 | 248 | $cats = array(); |
| 249 | - foreach(is_array($value) ? $value : explode(',',$value) as $cat_id) |
|
| 249 | + foreach (is_array($value) ? $value : explode(',', $value) as $cat_id) |
|
| 250 | 250 | { |
| 251 | - $cats[] = $GLOBALS['egw']->categories->id2name($cat_id,$use); |
|
| 251 | + $cats[] = $GLOBALS['egw']->categories->id2name($cat_id, $use); |
|
| 252 | 252 | } |
| 253 | - $value = implode(', ',$cats); |
|
| 253 | + $value = implode(', ', $cats); |
|
| 254 | 254 | } |
| 255 | 255 | break; |
| 256 | 256 | case 'jpegphoto': // returning a link might make more sense then the binary photo |
@@ -258,7 +258,7 @@ discard block |
||
| 258 | 258 | { |
| 259 | 259 | $value = ($GLOBALS['egw_info']['server']['webserver_url'][0] == '/' ? |
| 260 | 260 | ($_SERVER['HTTPS'] ? 'https://' : 'http://').$_SERVER['HTTP_HOST'] : ''). |
| 261 | - $GLOBALS['egw']->link('/index.php',$contact['photo']); |
|
| 261 | + $GLOBALS['egw']->link('/index.php', $contact['photo']); |
|
| 262 | 262 | } |
| 263 | 263 | break; |
| 264 | 264 | case 'tel_prefer': |
@@ -270,40 +270,39 @@ discard block |
||
| 270 | 270 | case 'account_id': |
| 271 | 271 | if ($value) |
| 272 | 272 | { |
| 273 | - $replacements['$$'.($prefix ? $prefix.'/':'').'account_lid$$'] = $GLOBALS['egw']->accounts->id2name($value); |
|
| 273 | + $replacements['$$'.($prefix ? $prefix.'/' : '').'account_lid$$'] = $GLOBALS['egw']->accounts->id2name($value); |
|
| 274 | 274 | } |
| 275 | 275 | break; |
| 276 | 276 | } |
| 277 | - if ($name != 'photo') $replacements['$$'.($prefix ? $prefix.'/':'').$name.'$$'] = $value; |
|
| 277 | + if ($name != 'photo') $replacements['$$'.($prefix ? $prefix.'/' : '').$name.'$$'] = $value; |
|
| 278 | 278 | } |
| 279 | 279 | // set custom fields, should probably go to a general method all apps can use |
| 280 | 280 | // need to load all cfs for $ignore_acl=true |
| 281 | - foreach($ignore_acl ? Customfields::get('addressbook', true) : $this->contacts->customfields as $name => $field) |
|
| 281 | + foreach ($ignore_acl ? Customfields::get('addressbook', true) : $this->contacts->customfields as $name => $field) |
|
| 282 | 282 | { |
| 283 | 283 | $name = '#'.$name; |
| 284 | - $replacements['$$'.($prefix ? $prefix.'/':'').$name.'$$'] = |
|
| 284 | + $replacements['$$'.($prefix ? $prefix.'/' : '').$name.'$$'] = |
|
| 285 | 285 | // use raw data for yaml, no user-preference specific formatting |
| 286 | - $this->mimetype == 'application/x-yaml' ? (string)$contact[$name] : |
|
| 287 | - Customfields::format($field, (string)$contact[$name]); |
|
| 286 | + $this->mimetype == 'application/x-yaml' ? (string)$contact[$name] : Customfields::format($field, (string)$contact[$name]); |
|
| 288 | 287 | } |
| 289 | 288 | |
| 290 | 289 | // Add in extra cat field |
| 291 | 290 | $cats = array(); |
| 292 | - foreach(is_array($contact['cat_id']) ? $contact['cat_id'] : explode(',',$contact['cat_id']) as $cat_id) |
|
| 291 | + foreach (is_array($contact['cat_id']) ? $contact['cat_id'] : explode(',', $contact['cat_id']) as $cat_id) |
|
| 293 | 292 | { |
| 294 | - if(!$cat_id) continue; |
|
| 295 | - if($GLOBALS['egw']->categories->id2name($cat_id,'main') != $cat_id) |
|
| 293 | + if (!$cat_id) continue; |
|
| 294 | + if ($GLOBALS['egw']->categories->id2name($cat_id, 'main') != $cat_id) |
|
| 296 | 295 | { |
| 297 | 296 | $path = explode(' / ', $GLOBALS['egw']->categories->id2name($cat_id, 'path')); |
| 298 | 297 | unset($path[0]); // Drop main |
| 299 | - $cats[$GLOBALS['egw']->categories->id2name($cat_id,'main')][] = implode(' / ', $path); |
|
| 300 | - } elseif($cat_id) { |
|
| 298 | + $cats[$GLOBALS['egw']->categories->id2name($cat_id, 'main')][] = implode(' / ', $path); |
|
| 299 | + } elseif ($cat_id) { |
|
| 301 | 300 | $cats[$cat_id] = array(); |
| 302 | 301 | } |
| 303 | 302 | } |
| 304 | - foreach($cats as $main => $cat) { |
|
| 305 | - $replacements['$$'.($prefix ? $prefix.'/':'').'categories$$'] .= $GLOBALS['egw']->categories->id2name($main,'name') |
|
| 306 | - . (count($cat) > 0 ? ': ' : '') . implode(', ', $cats[$main]) . "\n"; |
|
| 303 | + foreach ($cats as $main => $cat) { |
|
| 304 | + $replacements['$$'.($prefix ? $prefix.'/' : '').'categories$$'] .= $GLOBALS['egw']->categories->id2name($main, 'name') |
|
| 305 | + . (count($cat) > 0 ? ': ' : '').implode(', ', $cats[$main])."\n"; |
|
| 307 | 306 | } |
| 308 | 307 | return $replacements; |
| 309 | 308 | } |
@@ -322,34 +321,34 @@ discard block |
||
| 322 | 321 | * 'link' - URL to the entry |
| 323 | 322 | * 'href' - HREF tag wrapped around the title |
| 324 | 323 | */ |
| 325 | - protected function get_links($app, $id, $only_app='', $exclude = array(), $style = 'title') |
|
| 324 | + protected function get_links($app, $id, $only_app = '', $exclude = array(), $style = 'title') |
|
| 326 | 325 | { |
| 327 | 326 | $links = Api\Link::get_links($app, $id, $only_app); |
| 328 | 327 | $link_titles = array(); |
| 329 | - foreach($links as $link_info) |
|
| 328 | + foreach ($links as $link_info) |
|
| 330 | 329 | { |
| 331 | 330 | // Using only_app only returns the ID |
| 332 | - if(!is_array($link_info) && $only_app && $only_app[0] !== '!') |
|
| 331 | + if (!is_array($link_info) && $only_app && $only_app[0] !== '!') |
|
| 333 | 332 | { |
| 334 | 333 | $link_info = array( |
| 335 | 334 | 'app' => $only_app, |
| 336 | 335 | 'id' => $link_info |
| 337 | 336 | ); |
| 338 | 337 | } |
| 339 | - if($exclude && in_array($link_info['id'], $exclude)) continue; |
|
| 338 | + if ($exclude && in_array($link_info['id'], $exclude)) continue; |
|
| 340 | 339 | |
| 341 | 340 | $title = Api\Link::title($link_info['app'], $link_info['id']); |
| 342 | - if(class_exists('EGroupware\Stylite\Vfs\Links\StreamWrapper') && $link_info['app'] != Api\Link::VFS_APPNAME) |
|
| 341 | + if (class_exists('EGroupware\Stylite\Vfs\Links\StreamWrapper') && $link_info['app'] != Api\Link::VFS_APPNAME) |
|
| 343 | 342 | { |
| 344 | 343 | $title = Stylite\Vfs\Links\StreamWrapper::entry2name($link_info['app'], $link_info['id'], $title); |
| 345 | 344 | } |
| 346 | - if($style == 'href' || $style == 'link') |
|
| 345 | + if ($style == 'href' || $style == 'link') |
|
| 347 | 346 | { |
| 348 | 347 | $link = Api\Link::view($link_info['app'], $link_info['id'], $link_info); |
| 349 | - if($link_info['app'] != Api\Link::VFS_APPNAME) |
|
| 348 | + if ($link_info['app'] != Api\Link::VFS_APPNAME) |
|
| 350 | 349 | { |
| 351 | 350 | // Set app to false so we always get an external link |
| 352 | - $link = str_replace(',', '%2C', $GLOBALS['egw']->framework->link('/index.php',$link, false)); |
|
| 351 | + $link = str_replace(',', '%2C', $GLOBALS['egw']->framework->link('/index.php', $link, false)); |
|
| 353 | 352 | } |
| 354 | 353 | else |
| 355 | 354 | { |
@@ -365,7 +364,7 @@ discard block |
||
| 365 | 364 | } |
| 366 | 365 | $link_titles[] = $title; |
| 367 | 366 | } |
| 368 | - return implode("\n",$link_titles); |
|
| 367 | + return implode("\n", $link_titles); |
|
| 369 | 368 | } |
| 370 | 369 | |
| 371 | 370 | /** |
@@ -382,33 +381,33 @@ discard block |
||
| 382 | 381 | { |
| 383 | 382 | $array = array(); |
| 384 | 383 | $pattern = '@\$(links_attachments|links|attachments|link)\/?(title|href|link)?\/?([a-z]*)\$@'; |
| 385 | - static $link_cache=null; |
|
| 384 | + static $link_cache = null; |
|
| 386 | 385 | $matches = null; |
| 387 | - if(preg_match_all($pattern, $content, $matches)) |
|
| 386 | + if (preg_match_all($pattern, $content, $matches)) |
|
| 388 | 387 | { |
| 389 | - foreach($matches[0] as $i => $placeholder) |
|
| 388 | + foreach ($matches[0] as $i => $placeholder) |
|
| 390 | 389 | { |
| 391 | 390 | $placeholder = substr($placeholder, 1, -1); |
| 392 | - if($link_cache[$id][$placeholder]) |
|
| 391 | + if ($link_cache[$id][$placeholder]) |
|
| 393 | 392 | { |
| 394 | 393 | $array[$placeholder] = $link_cache[$id][$placeholder]; |
| 395 | 394 | continue; |
| 396 | 395 | } |
| 397 | - switch($matches[1][$i]) |
|
| 396 | + switch ($matches[1][$i]) |
|
| 398 | 397 | { |
| 399 | 398 | case 'link': |
| 400 | 399 | // Link to current record |
| 401 | 400 | $title = Api\Link::title($app, $id); |
| 402 | - if(class_exists('EGroupware\Stylite\Vfs\Links\StreamWrapper') && $app != Api\Link::VFS_APPNAME) |
|
| 401 | + if (class_exists('EGroupware\Stylite\Vfs\Links\StreamWrapper') && $app != Api\Link::VFS_APPNAME) |
|
| 403 | 402 | { |
| 404 | 403 | $title = Stylite\Vfs\Links\StreamWrapper::entry2name($app, $id, $title); |
| 405 | 404 | } |
| 406 | 405 | |
| 407 | 406 | $link = Api\Link::view($app, $id); |
| 408 | - if($app != Api\Link::VFS_APPNAME) |
|
| 407 | + if ($app != Api\Link::VFS_APPNAME) |
|
| 409 | 408 | { |
| 410 | 409 | // Set app to false so we always get an external link |
| 411 | - $link = str_replace(',', '%2C', $GLOBALS['egw']->framework->link('/index.php',$link, false)); |
|
| 410 | + $link = str_replace(',', '%2C', $GLOBALS['egw']->framework->link('/index.php', $link, false)); |
|
| 412 | 411 | } |
| 413 | 412 | else |
| 414 | 413 | { |
@@ -420,26 +419,26 @@ discard block |
||
| 420 | 419 | $link = ($_SERVER['HTTPS'] || $GLOBALS['egw_info']['server']['enforce_ssl'] ? 'https://' : 'http://'). |
| 421 | 420 | ($GLOBALS['egw_info']['server']['hostname'] ? $GLOBALS['egw_info']['server']['hostname'] : $_SERVER['HTTP_HOST']).$link; |
| 422 | 421 | } |
| 423 | - $array[($prefix?$prefix.'/':'').$placeholder] = Api\Html::a_href(Api\Html::htmlspecialchars($title), $link); |
|
| 422 | + $array[($prefix ? $prefix.'/' : '').$placeholder] = Api\Html::a_href(Api\Html::htmlspecialchars($title), $link); |
|
| 424 | 423 | break; |
| 425 | 424 | case 'links': |
| 426 | - $link_app = $matches[3][$i] ? $matches[3][$i] : '!'.Api\Link::VFS_APPNAME; |
|
| 427 | - $array[($prefix?$prefix.'/':'').$placeholder] = $this->get_links($app, $id, $link_app, array(),$matches[2][$i]); |
|
| 425 | + $link_app = $matches[3][$i] ? $matches[3][$i] : '!'.Api\Link::VFS_APPNAME; |
|
| 426 | + $array[($prefix ? $prefix.'/' : '').$placeholder] = $this->get_links($app, $id, $link_app, array(), $matches[2][$i]); |
|
| 428 | 427 | break; |
| 429 | 428 | case 'attachments': |
| 430 | - $array[($prefix?$prefix.'/':'').$placeholder] = $this->get_links($app, $id, Api\Link::VFS_APPNAME,array(),$matches[2][$i]); |
|
| 429 | + $array[($prefix ? $prefix.'/' : '').$placeholder] = $this->get_links($app, $id, Api\Link::VFS_APPNAME, array(), $matches[2][$i]); |
|
| 431 | 430 | break; |
| 432 | 431 | default: |
| 433 | - $array[($prefix?$prefix.'/':'').$placeholder] = $this->get_links($app, $id, $matches[3][$i], array(), $matches[2][$i]); |
|
| 432 | + $array[($prefix ? $prefix.'/' : '').$placeholder] = $this->get_links($app, $id, $matches[3][$i], array(), $matches[2][$i]); |
|
| 434 | 433 | break; |
| 435 | 434 | } |
| 436 | 435 | $link_cache[$id][$placeholder] = $array[$placeholder]; |
| 437 | 436 | } |
| 438 | 437 | } |
| 439 | 438 | // Need to set each app, to make sure placeholders are removed |
| 440 | - foreach(array_keys($GLOBALS['egw_info']['user']['apps']) as $_app) |
|
| 439 | + foreach (array_keys($GLOBALS['egw_info']['user']['apps']) as $_app) |
|
| 441 | 440 | { |
| 442 | - $array[($prefix?$prefix.'/':'')."links/$app"] = $this->get_links($app,$id,$_app); |
|
| 441 | + $array[($prefix ? $prefix.'/' : '')."links/$app"] = $this->get_links($app, $id, $_app); |
|
| 443 | 442 | } |
| 444 | 443 | return $array; |
| 445 | 444 | } |
@@ -452,12 +451,12 @@ discard block |
||
| 452 | 451 | * @deprecated use Api\DateTime::to($time='now',$format='') |
| 453 | 452 | * @return string |
| 454 | 453 | */ |
| 455 | - protected function format_datetime($time,$format=null) |
|
| 454 | + protected function format_datetime($time, $format = null) |
|
| 456 | 455 | { |
| 457 | - trigger_error(__METHOD__ . ' is deprecated, use Api\DateTime::to($time, $format)', E_USER_DEPRECATED); |
|
| 456 | + trigger_error(__METHOD__.' is deprecated, use Api\DateTime::to($time, $format)', E_USER_DEPRECATED); |
|
| 458 | 457 | if (is_null($format)) $format = $this->datetime_format; |
| 459 | 458 | |
| 460 | - return Api\DateTime::to($time,$format); |
|
| 459 | + return Api\DateTime::to($time, $format); |
|
| 461 | 460 | } |
| 462 | 461 | |
| 463 | 462 | /** |
@@ -469,7 +468,7 @@ discard block |
||
| 469 | 468 | */ |
| 470 | 469 | public static function is_export_limit_excepted() |
| 471 | 470 | { |
| 472 | - static $is_excepted=null; |
|
| 471 | + static $is_excepted = null; |
|
| 473 | 472 | |
| 474 | 473 | if (is_null($is_excepted)) |
| 475 | 474 | { |
@@ -479,9 +478,9 @@ discard block |
||
| 479 | 478 | if (!$is_excepted && (is_array($export_limit_excepted = $GLOBALS['egw_info']['server']['export_limit_excepted']) || |
| 480 | 479 | is_array($export_limit_excepted = unserialize($export_limit_excepted)))) |
| 481 | 480 | { |
| 482 | - $id_and_memberships = $GLOBALS['egw']->accounts->memberships($GLOBALS['egw_info']['user']['account_id'],true); |
|
| 481 | + $id_and_memberships = $GLOBALS['egw']->accounts->memberships($GLOBALS['egw_info']['user']['account_id'], true); |
|
| 483 | 482 | $id_and_memberships[] = $GLOBALS['egw_info']['user']['account_id']; |
| 484 | - $is_excepted = (bool) array_intersect($id_and_memberships, $export_limit_excepted); |
|
| 483 | + $is_excepted = (bool)array_intersect($id_and_memberships, $export_limit_excepted); |
|
| 485 | 484 | } |
| 486 | 485 | } |
| 487 | 486 | return $is_excepted; |
@@ -494,18 +493,18 @@ discard block |
||
| 494 | 493 | * @return mixed - no if no export is allowed, false if there is no restriction and int as there is a valid restriction |
| 495 | 494 | * you may have to cast the returned value to int, if you want to use it as number |
| 496 | 495 | */ |
| 497 | - public static function getExportLimit($app='common') |
|
| 496 | + public static function getExportLimit($app = 'common') |
|
| 498 | 497 | { |
| 499 | - static $exportLimitStore=array(); |
|
| 500 | - if (empty($app)) $app='common'; |
|
| 498 | + static $exportLimitStore = array(); |
|
| 499 | + if (empty($app)) $app = 'common'; |
|
| 501 | 500 | //error_log(__METHOD__.__LINE__.' called with app:'.$app); |
| 502 | - if (!array_key_exists($app,$exportLimitStore)) |
|
| 501 | + if (!array_key_exists($app, $exportLimitStore)) |
|
| 503 | 502 | { |
| 504 | 503 | //error_log(__METHOD__.__LINE__.' -> '.$app_limit.' '.function_backtrace()); |
| 505 | 504 | $exportLimitStore[$app] = $GLOBALS['egw_info']['server']['export_limit']; |
| 506 | - if ($app !='common') |
|
| 505 | + if ($app != 'common') |
|
| 507 | 506 | { |
| 508 | - $app_limit = Api\Hooks::single('export_limit',$app); |
|
| 507 | + $app_limit = Api\Hooks::single('export_limit', $app); |
|
| 509 | 508 | if ($app_limit) $exportLimitStore[$app] = $app_limit; |
| 510 | 509 | } |
| 511 | 510 | //error_log(__METHOD__.__LINE__.' building cache for app:'.$app.' -> '.$exportLimitStore[$app]); |
@@ -537,9 +536,9 @@ discard block |
||
| 537 | 536 | * |
| 538 | 537 | * @return bool - true if no export is allowed or a limit is set, false if there is no restriction |
| 539 | 538 | */ |
| 540 | - public static function hasExportLimit($app_limit,$checkas='AND') |
|
| 539 | + public static function hasExportLimit($app_limit, $checkas = 'AND') |
|
| 541 | 540 | { |
| 542 | - if (strtoupper($checkas) == 'ISALLOWED') return (empty($app_limit) || ($app_limit !='no' && $app_limit > 0) ); |
|
| 541 | + if (strtoupper($checkas) == 'ISALLOWED') return (empty($app_limit) || ($app_limit != 'no' && $app_limit > 0)); |
|
| 543 | 542 | if (empty($app_limit)) return false; |
| 544 | 543 | if ($app_limit == 'no') return true; |
| 545 | 544 | if ($app_limit > 0) return true; |
@@ -555,28 +554,28 @@ discard block |
||
| 555 | 554 | * @param array $fix =null regular expression => replacement pairs eg. to fix garbled placeholders |
| 556 | 555 | * @return string|boolean merged document or false on error |
| 557 | 556 | */ |
| 558 | - public function &merge($document,$ids,&$err,$mimetype,array $fix=null) |
|
| 557 | + public function &merge($document, $ids, &$err, $mimetype, array $fix = null) |
|
| 559 | 558 | { |
| 560 | 559 | if (!($content = file_get_contents($document))) |
| 561 | 560 | { |
| 562 | - $err = lang("Document '%1' does not exist or is not readable for you!",$document); |
|
| 561 | + $err = lang("Document '%1' does not exist or is not readable for you!", $document); |
|
| 563 | 562 | return false; |
| 564 | 563 | } |
| 565 | 564 | |
| 566 | 565 | if (self::hasExportLimit($this->export_limit) && !self::is_export_limit_excepted() && count($ids) > (int)$this->export_limit) |
| 567 | 566 | { |
| 568 | - $err = lang('No rights to export more than %1 entries!',(int)$this->export_limit); |
|
| 567 | + $err = lang('No rights to export more than %1 entries!', (int)$this->export_limit); |
|
| 569 | 568 | return false; |
| 570 | 569 | } |
| 571 | 570 | |
| 572 | 571 | // fix application/msword mimetype for rtf files |
| 573 | - if ($mimetype == 'application/msword' && strtolower(substr($document,-4)) == '.rtf') |
|
| 572 | + if ($mimetype == 'application/msword' && strtolower(substr($document, -4)) == '.rtf') |
|
| 574 | 573 | { |
| 575 | 574 | $mimetype = 'application/rtf'; |
| 576 | 575 | } |
| 577 | 576 | |
| 578 | 577 | try { |
| 579 | - $content = $this->merge_string($content,$ids,$err,$mimetype,$fix); |
|
| 578 | + $content = $this->merge_string($content, $ids, $err, $mimetype, $fix); |
|
| 580 | 579 | } catch (\Exception $e) { |
| 581 | 580 | $err = $e->getMessage(); |
| 582 | 581 | return false; |
@@ -584,18 +583,18 @@ discard block |
||
| 584 | 583 | return $content; |
| 585 | 584 | } |
| 586 | 585 | |
| 587 | - protected function apply_styles (&$content, $mimetype, $mso_application_progid=null) |
|
| 586 | + protected function apply_styles(&$content, $mimetype, $mso_application_progid = null) |
|
| 588 | 587 | { |
| 589 | 588 | if (!isset($mso_application_progid)) |
| 590 | 589 | { |
| 591 | 590 | $matches = null; |
| 592 | 591 | $mso_application_progid = $mimetype == 'application/xml' && |
| 593 | - preg_match('/'.preg_quote('<?mso-application progid="').'([^"]+)'.preg_quote('"?>').'/',substr($content,0,200),$matches) ? |
|
| 592 | + preg_match('/'.preg_quote('<?mso-application progid="').'([^"]+)'.preg_quote('"?>').'/', substr($content, 0, 200), $matches) ? |
|
| 594 | 593 | $matches[1] : ''; |
| 595 | 594 | } |
| 596 | 595 | // Tags we can replace with the target document's version |
| 597 | 596 | $replace_tags = array(); |
| 598 | - switch($mimetype.$mso_application_progid) |
|
| 597 | + switch ($mimetype.$mso_application_progid) |
|
| 599 | 598 | { |
| 600 | 599 | case 'application/vnd.oasis.opendocument.text': // open office |
| 601 | 600 | case 'application/vnd.oasis.opendocument.spreadsheet': |
@@ -605,7 +604,7 @@ discard block |
||
| 605 | 604 | '/<\/(ol|ul|table)>/' => '</$1><text:p>', |
| 606 | 605 | //'/<(li)(.*?)>(.*?)<\/\1>/' => '<$1 $2>$3</$1>', |
| 607 | 606 | ); |
| 608 | - $content = preg_replace(array_keys($replace_tags),array_values($replace_tags),$content); |
|
| 607 | + $content = preg_replace(array_keys($replace_tags), array_values($replace_tags), $content); |
|
| 609 | 608 | |
| 610 | 609 | $doc = new DOMDocument(); |
| 611 | 610 | $xslt = new XSLTProcessor(); |
@@ -630,7 +629,7 @@ discard block |
||
| 630 | 629 | // Remove spans with no attributes, linebreaks inside them cause problems |
| 631 | 630 | '/<span>(.*?)<\/span>/' => '$1' |
| 632 | 631 | ); |
| 633 | - $content = preg_replace(array_keys($replace_tags),array_values($replace_tags),$content); |
|
| 632 | + $content = preg_replace(array_keys($replace_tags), array_values($replace_tags), $content); |
|
| 634 | 633 | |
| 635 | 634 | /* |
| 636 | 635 | In the case where you have something like <span><span></w:t><w:br/><w:t></span></span> (invalid - mismatched tags), |
@@ -640,9 +639,9 @@ discard block |
||
| 640 | 639 | $count = $i = 0; |
| 641 | 640 | do |
| 642 | 641 | { |
| 643 | - $content = preg_replace('/<span>(.*?)<\/span>/','$1',$content, -1, $count); |
|
| 642 | + $content = preg_replace('/<span>(.*?)<\/span>/', '$1', $content, -1, $count); |
|
| 644 | 643 | $i++; |
| 645 | - } while($count > 0 && $i < 10); |
|
| 644 | + } while ($count > 0 && $i < 10); |
|
| 646 | 645 | |
| 647 | 646 | $doc = new DOMDocument(); |
| 648 | 647 | $xslt = new XSLTProcessor(); |
@@ -653,20 +652,20 @@ discard block |
||
| 653 | 652 | } |
| 654 | 653 | |
| 655 | 654 | // XSLT transform known tags |
| 656 | - if($xslt) |
|
| 655 | + if ($xslt) |
|
| 657 | 656 | { |
| 658 | 657 | // does NOT work with php 5.2.6: Catchable fatal error: argument 1 to transformToXml() must be of type DOMDocument |
| 659 | 658 | //$element = new SimpleXMLelement($content); |
| 660 | 659 | $element = new DOMDocument('1.0', 'utf-8'); |
| 661 | 660 | $result = $element->loadXML($content); |
| 662 | - if(!$result) |
|
| 661 | + if (!$result) |
|
| 663 | 662 | { |
| 664 | 663 | throw new Api\Exception('Unable to parse merged document for styles. Check warnings in log for details.'); |
| 665 | 664 | } |
| 666 | 665 | $content = $xslt->transformToXml($element); |
| 667 | 666 | |
| 668 | 667 | // Word 2003 needs two declarations, add extra declaration back in |
| 669 | - if($mimetype == 'application/xml' && $mso_application_progid == 'Word.Document' && strpos($content, '<?xml') !== 0) { |
|
| 668 | + if ($mimetype == 'application/xml' && $mso_application_progid == 'Word.Document' && strpos($content, '<?xml') !== 0) { |
|
| 670 | 669 | $content = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'.$content; |
| 671 | 670 | } |
| 672 | 671 | // Validate |
@@ -689,11 +688,11 @@ discard block |
||
| 689 | 688 | * @param string $charset =null charset to override default set by mimetype or export charset |
| 690 | 689 | * @return string|boolean merged document or false on error |
| 691 | 690 | */ |
| 692 | - public function &merge_string($_content,$ids,&$err,$mimetype,array $fix=null,$charset=null) |
|
| 691 | + public function &merge_string($_content, $ids, &$err, $mimetype, array $fix = null, $charset = null) |
|
| 693 | 692 | { |
| 694 | 693 | $matches = null; |
| 695 | 694 | if ($mimetype == 'application/xml' && |
| 696 | - preg_match('/'.preg_quote('<?mso-application progid="').'([^"]+)'.preg_quote('"?>').'/',substr($_content,0,200),$matches)) |
|
| 695 | + preg_match('/'.preg_quote('<?mso-application progid="').'([^"]+)'.preg_quote('"?>').'/', substr($_content, 0, 200), $matches)) |
|
| 697 | 696 | { |
| 698 | 697 | $mso_application_progid = $matches[1]; |
| 699 | 698 | } |
@@ -708,9 +707,9 @@ discard block |
||
| 708 | 707 | return '$$'.strip_tags(substr($matches[0], 2, -2)).'$$'; |
| 709 | 708 | }, $_content); |
| 710 | 709 | // Handle escaped placeholder markers in RTF, they won't match when escaped |
| 711 | - if($mimetype == 'application/rtf') |
|
| 710 | + if ($mimetype == 'application/rtf') |
|
| 712 | 711 | { |
| 713 | - $content = preg_replace('/\\\{\\\{([^\\}]+)\\\}\\\}/i','$$\1$$',$content); |
|
| 712 | + $content = preg_replace('/\\\{\\\{([^\\}]+)\\\}\\\}/i', '$$\1$$', $content); |
|
| 714 | 713 | } |
| 715 | 714 | |
| 716 | 715 | // make currently processed mimetype available to class methods; |
@@ -719,16 +718,16 @@ discard block |
||
| 719 | 718 | // fix garbled placeholders |
| 720 | 719 | if ($fix && is_array($fix)) |
| 721 | 720 | { |
| 722 | - $content = preg_replace(array_keys($fix),array_values($fix),$content); |
|
| 721 | + $content = preg_replace(array_keys($fix), array_values($fix), $content); |
|
| 723 | 722 | //die("<pre>".htmlspecialchars($content)."</pre>\n"); |
| 724 | 723 | } |
| 725 | - list($contentstart,$contentrepeat,$contentend) = preg_split('/\$\$pagerepeat\$\$/',$content,-1, PREG_SPLIT_NO_EMPTY); //get differt parts of document, seperatet by Pagerepeat |
|
| 724 | + list($contentstart, $contentrepeat, $contentend) = preg_split('/\$\$pagerepeat\$\$/', $content, -1, PREG_SPLIT_NO_EMPTY); //get differt parts of document, seperatet by Pagerepeat |
|
| 726 | 725 | if ($mimetype == 'text/plain' && count($ids) > 1) |
| 727 | 726 | { |
| 728 | 727 | // textdocuments are simple, they do not hold start and end, but they may have content before and after the $$pagerepeat$$ tag |
| 729 | 728 | // header and footer should not hold any $$ tags; if we find $$ tags with the header, we assume it is the pagerepeatcontent |
| 730 | 729 | $nohead = false; |
| 731 | - if (stripos($contentstart,'$$') !== false) $nohead = true; |
|
| 730 | + if (stripos($contentstart, '$$') !== false) $nohead = true; |
|
| 732 | 731 | if ($nohead) |
| 733 | 732 | { |
| 734 | 733 | $contentend = $contentrepeat; |
@@ -739,14 +738,14 @@ discard block |
||
| 739 | 738 | } |
| 740 | 739 | if ($mimetype == 'application/vnd.oasis.opendocument.text' && count($ids) > 1) |
| 741 | 740 | { |
| 742 | - if(strpos($content, '$$pagerepeat') === false) |
|
| 741 | + if (strpos($content, '$$pagerepeat') === false) |
|
| 743 | 742 | { |
| 744 | 743 | //for odt files we have to split the content and add a style for page break to the style area |
| 745 | - list($contentstart,$contentrepeat,$contentend) = preg_split('/office:body>/',$content,-1, PREG_SPLIT_NO_EMPTY); //get differt parts of document, seperatet by Pagerepeat |
|
| 746 | - $contentstart = substr($contentstart,0,strlen($contentstart)-1); //remove "<" |
|
| 747 | - $contentrepeat = substr($contentrepeat,0,strlen($contentrepeat)-2); //remove "</"; |
|
| 744 | + list($contentstart, $contentrepeat, $contentend) = preg_split('/office:body>/', $content, -1, PREG_SPLIT_NO_EMPTY); //get differt parts of document, seperatet by Pagerepeat |
|
| 745 | + $contentstart = substr($contentstart, 0, strlen($contentstart) - 1); //remove "<" |
|
| 746 | + $contentrepeat = substr($contentrepeat, 0, strlen($contentrepeat) - 2); //remove "</"; |
|
| 748 | 747 | // need to add page-break style to the style list |
| 749 | - list($stylestart,$stylerepeat,$styleend) = preg_split('/<\/office:automatic-styles>/',$content,-1, PREG_SPLIT_NO_EMPTY); //get differt parts of document style sheets |
|
| 748 | + list($stylestart, $stylerepeat, $styleend) = preg_split('/<\/office:automatic-styles>/', $content, -1, PREG_SPLIT_NO_EMPTY); //get differt parts of document style sheets |
|
| 750 | 749 | $contentstart = $stylestart.'<style:style style:name="P200" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:break-before="page"/></style:style></office:automatic-styles>'; |
| 751 | 750 | $contentstart .= '<office:body>'; |
| 752 | 751 | $contentend = '</office:body></office:document-content>'; |
@@ -754,22 +753,22 @@ discard block |
||
| 754 | 753 | else |
| 755 | 754 | { |
| 756 | 755 | // Template specifies where to repeat |
| 757 | - list($contentstart,$contentrepeat,$contentend) = preg_split('/\$\$pagerepeat\$\$/',$content,-1, PREG_SPLIT_NO_EMPTY); //get different parts of document, seperated by pagerepeat |
|
| 756 | + list($contentstart, $contentrepeat, $contentend) = preg_split('/\$\$pagerepeat\$\$/', $content, -1, PREG_SPLIT_NO_EMPTY); //get different parts of document, seperated by pagerepeat |
|
| 758 | 757 | } |
| 759 | 758 | } |
| 760 | 759 | if ($mimetype == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && count($ids) > 1) |
| 761 | 760 | { |
| 762 | 761 | //for Word 2007 XML files we have to split the content and add a style for page break to the style area |
| 763 | - list($contentstart,$contentrepeat,$contentend) = preg_split('/w:body>/',$content,-1, PREG_SPLIT_NO_EMPTY); //get differt parts of document, seperatet by Pagerepeat |
|
| 764 | - $contentstart = substr($contentstart,0,strlen($contentstart)-1); //remove "</" |
|
| 765 | - $contentrepeat = substr($contentrepeat,0,strlen($contentrepeat)-2); //remove "</"; |
|
| 762 | + list($contentstart, $contentrepeat, $contentend) = preg_split('/w:body>/', $content, -1, PREG_SPLIT_NO_EMPTY); //get differt parts of document, seperatet by Pagerepeat |
|
| 763 | + $contentstart = substr($contentstart, 0, strlen($contentstart) - 1); //remove "</" |
|
| 764 | + $contentrepeat = substr($contentrepeat, 0, strlen($contentrepeat) - 2); //remove "</"; |
|
| 766 | 765 | $contentstart .= '<w:body>'; |
| 767 | 766 | $contentend = '</w:body></w:document>'; |
| 768 | 767 | } |
| 769 | - list($Labelstart,$Labelrepeat,$Labeltend) = preg_split('/\$\$label\$\$/',$contentrepeat,-1, PREG_SPLIT_NO_EMPTY); //get the Lable content |
|
| 770 | - preg_match_all('/\$\$labelplacement\$\$/',$contentrepeat,$countlables, PREG_SPLIT_NO_EMPTY); |
|
| 768 | + list($Labelstart, $Labelrepeat, $Labeltend) = preg_split('/\$\$label\$\$/', $contentrepeat, -1, PREG_SPLIT_NO_EMPTY); //get the Lable content |
|
| 769 | + preg_match_all('/\$\$labelplacement\$\$/', $contentrepeat, $countlables, PREG_SPLIT_NO_EMPTY); |
|
| 771 | 770 | $countlables = count($countlables[0]); |
| 772 | - preg_replace('/\$\$labelplacement\$\$/','',$Labelrepeat,1); |
|
| 771 | + preg_replace('/\$\$labelplacement\$\$/', '', $Labelrepeat, 1); |
|
| 773 | 772 | if ($countlables > 1) $lableprint = true; |
| 774 | 773 | if (count($ids) > 1 && !$contentrepeat) |
| 775 | 774 | { |
@@ -780,10 +779,10 @@ discard block |
||
| 780 | 779 | |
| 781 | 780 | if ($contentrepeat) |
| 782 | 781 | { |
| 783 | - $content_stream = fopen('php://temp','r+'); |
|
| 782 | + $content_stream = fopen('php://temp', 'r+'); |
|
| 784 | 783 | fwrite($content_stream, $contentstart); |
| 785 | 784 | $joiner = ''; |
| 786 | - switch($mimetype) |
|
| 785 | + switch ($mimetype) |
|
| 787 | 786 | { |
| 788 | 787 | case 'application/rtf': |
| 789 | 788 | case 'text/rtf': |
@@ -803,19 +802,19 @@ discard block |
||
| 803 | 802 | $joiner = "\r\n"; |
| 804 | 803 | break; |
| 805 | 804 | default: |
| 806 | - $err = lang('%1 not implemented for %2!','$$pagerepeat$$',$mimetype); |
|
| 805 | + $err = lang('%1 not implemented for %2!', '$$pagerepeat$$', $mimetype); |
|
| 807 | 806 | return false; |
| 808 | 807 | } |
| 809 | 808 | } |
| 810 | 809 | foreach ((array)$ids as $n => $id) |
| 811 | 810 | { |
| 812 | - if ($contentrepeat) $content = $contentrepeat; //content to repeat |
|
| 811 | + if ($contentrepeat) $content = $contentrepeat; //content to repeat |
|
| 813 | 812 | if ($lableprint) $content = $Labelrepeat; |
| 814 | 813 | |
| 815 | 814 | // generate replacements; if exeption is thrown, catch it set error message and return false |
| 816 | 815 | try |
| 817 | 816 | { |
| 818 | - if(!($replacements = $this->get_replacements($id,$content))) |
|
| 817 | + if (!($replacements = $this->get_replacements($id, $content))) |
|
| 819 | 818 | { |
| 820 | 819 | $err = lang('Entry not found!'); |
| 821 | 820 | return false; |
@@ -829,86 +828,86 @@ discard block |
||
| 829 | 828 | } |
| 830 | 829 | if ($this->report_memory_usage) error_log(__METHOD__."() $n: $id ".Api\Vfs::hsize(memory_get_usage(true))); |
| 831 | 830 | // some general replacements: current user, date and time |
| 832 | - if (strpos($content,'$$user/') !== null && ($user = $GLOBALS['egw']->accounts->id2name($GLOBALS['egw_info']['user']['account_id'],'person_id'))) |
|
| 831 | + if (strpos($content, '$$user/') !== null && ($user = $GLOBALS['egw']->accounts->id2name($GLOBALS['egw_info']['user']['account_id'], 'person_id'))) |
|
| 833 | 832 | { |
| 834 | - $replacements += $this->contact_replacements($user,'user'); |
|
| 835 | - $replacements['$$user/primary_group$$'] = $GLOBALS['egw']->accounts->id2name($GLOBALS['egw']->accounts->id2name($GLOBALS['egw_info']['user']['account_id'],'account_primary_group')); |
|
| 833 | + $replacements += $this->contact_replacements($user, 'user'); |
|
| 834 | + $replacements['$$user/primary_group$$'] = $GLOBALS['egw']->accounts->id2name($GLOBALS['egw']->accounts->id2name($GLOBALS['egw_info']['user']['account_id'], 'account_primary_group')); |
|
| 836 | 835 | } |
| 837 | - $replacements['$$date$$'] = Api\DateTime::to('now',true); |
|
| 836 | + $replacements['$$date$$'] = Api\DateTime::to('now', true); |
|
| 838 | 837 | $replacements['$$datetime$$'] = Api\DateTime::to('now'); |
| 839 | - $replacements['$$time$$'] = Api\DateTime::to('now',false); |
|
| 838 | + $replacements['$$time$$'] = Api\DateTime::to('now', false); |
|
| 840 | 839 | |
| 841 | 840 | // does our extending class registered table-plugins AND document contains table tags |
| 842 | - if ($this->table_plugins && preg_match_all('/\\$\\$table\\/([A-Za-z0-9_]+)\\$\\$(.*?)\\$\\$endtable\\$\\$/s',$content,$matches,PREG_SET_ORDER)) |
|
| 841 | + if ($this->table_plugins && preg_match_all('/\\$\\$table\\/([A-Za-z0-9_]+)\\$\\$(.*?)\\$\\$endtable\\$\\$/s', $content, $matches, PREG_SET_ORDER)) |
|
| 843 | 842 | { |
| 844 | 843 | // process each table |
| 845 | - foreach($matches as $match) |
|
| 844 | + foreach ($matches as $match) |
|
| 846 | 845 | { |
| 847 | - $plugin = $match[1]; // plugin name |
|
| 846 | + $plugin = $match[1]; // plugin name |
|
| 848 | 847 | $callback = $this->table_plugins[$plugin]; |
| 849 | - $repeat = $match[2]; // line to repeat |
|
| 848 | + $repeat = $match[2]; // line to repeat |
|
| 850 | 849 | $repeats = ''; |
| 851 | 850 | if (isset($callback)) |
| 852 | 851 | { |
| 853 | - for($n = 0; ($row_replacements = $this->$callback($plugin,$id,$n,$repeat)); ++$n) |
|
| 852 | + for ($n = 0; ($row_replacements = $this->$callback($plugin, $id, $n, $repeat)); ++$n) |
|
| 854 | 853 | { |
| 855 | 854 | $_repeat = $this->process_commands($repeat, $row_replacements); |
| 856 | - $repeats .= $this->replace($_repeat,$row_replacements,$mimetype,$mso_application_progid); |
|
| 855 | + $repeats .= $this->replace($_repeat, $row_replacements, $mimetype, $mso_application_progid); |
|
| 857 | 856 | } |
| 858 | 857 | } |
| 859 | - $content = str_replace($match[0],$repeats,$content); |
|
| 858 | + $content = str_replace($match[0], $repeats, $content); |
|
| 860 | 859 | } |
| 861 | 860 | } |
| 862 | - $content = $this->process_commands($this->replace($content,$replacements,$mimetype,$mso_application_progid,$charset), $replacements); |
|
| 861 | + $content = $this->process_commands($this->replace($content, $replacements, $mimetype, $mso_application_progid, $charset), $replacements); |
|
| 863 | 862 | |
| 864 | 863 | // remove not existing replacements (eg. from calendar array) |
| 865 | - if (strpos($content,'$$') !== null) |
|
| 864 | + if (strpos($content, '$$') !== null) |
|
| 866 | 865 | { |
| 867 | - $content = preg_replace('/\$\$[a-z0-9_\/]+\$\$/i','',$content); |
|
| 866 | + $content = preg_replace('/\$\$[a-z0-9_\/]+\$\$/i', '', $content); |
|
| 868 | 867 | } |
| 869 | 868 | if ($contentrepeat) |
| 870 | 869 | { |
| 871 | - fwrite($content_stream, ($n == 0 ? '' : $joiner) . $content); |
|
| 870 | + fwrite($content_stream, ($n == 0 ? '' : $joiner).$content); |
|
| 872 | 871 | } |
| 873 | - if($lableprint) |
|
| 872 | + if ($lableprint) |
|
| 874 | 873 | { |
| 875 | - $contentrep[is_array($id) ? implode(':',$id) : $id] = $content; |
|
| 874 | + $contentrep[is_array($id) ? implode(':', $id) : $id] = $content; |
|
| 876 | 875 | } |
| 877 | 876 | } |
| 878 | 877 | if ($Labelrepeat) |
| 879 | 878 | { |
| 880 | - $countpage=0; |
|
| 881 | - $count=0; |
|
| 879 | + $countpage = 0; |
|
| 880 | + $count = 0; |
|
| 882 | 881 | $contentrepeatpages[$countpage] = $Labelstart.$Labeltend; |
| 883 | 882 | |
| 884 | 883 | foreach ($contentrep as $Label) |
| 885 | 884 | { |
| 886 | - $contentrepeatpages[$countpage] = preg_replace('/\$\$labelplacement\$\$/',$Label,$contentrepeatpages[$countpage],1); |
|
| 887 | - $count=$count+1; |
|
| 888 | - if (($count % $countlables) == 0 && count($contentrep)>$count) //new page |
|
| 885 | + $contentrepeatpages[$countpage] = preg_replace('/\$\$labelplacement\$\$/', $Label, $contentrepeatpages[$countpage], 1); |
|
| 886 | + $count = $count + 1; |
|
| 887 | + if (($count % $countlables) == 0 && count($contentrep) > $count) //new page |
|
| 889 | 888 | { |
| 890 | - $countpage = $countpage+1; |
|
| 889 | + $countpage = $countpage + 1; |
|
| 891 | 890 | $contentrepeatpages[$countpage] = $Labelstart.$Labeltend; |
| 892 | 891 | } |
| 893 | 892 | } |
| 894 | - $contentrepeatpages[$countpage] = preg_replace('/\$\$labelplacement\$\$/','',$contentrepeatpages[$countpage],-1); //clean empty fields |
|
| 893 | + $contentrepeatpages[$countpage] = preg_replace('/\$\$labelplacement\$\$/', '', $contentrepeatpages[$countpage], -1); //clean empty fields |
|
| 895 | 894 | |
| 896 | - switch($mimetype) |
|
| 895 | + switch ($mimetype) |
|
| 897 | 896 | { |
| 898 | 897 | case 'application/rtf': |
| 899 | 898 | case 'text/rtf': |
| 900 | - return $contentstart.implode('\\par \\page\\pard\\plain',$contentrepeatpages).$contentend; |
|
| 899 | + return $contentstart.implode('\\par \\page\\pard\\plain', $contentrepeatpages).$contentend; |
|
| 901 | 900 | case 'application/vnd.oasis.opendocument.text': |
| 902 | - return $contentstart.implode('<text:line-break />',$contentrepeatpages).$contentend; |
|
| 901 | + return $contentstart.implode('<text:line-break />', $contentrepeatpages).$contentend; |
|
| 903 | 902 | case 'application/vnd.oasis.opendocument.spreadsheet': |
| 904 | - return $contentstart.implode('</text:p><text:p>',$contentrepeatpages).$contentend; |
|
| 903 | + return $contentstart.implode('</text:p><text:p>', $contentrepeatpages).$contentend; |
|
| 905 | 904 | case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': |
| 906 | 905 | case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': |
| 907 | - return $contentstart.implode('<w:br w:type="page" />',$contentrepeatpages).$contentend; |
|
| 906 | + return $contentstart.implode('<w:br w:type="page" />', $contentrepeatpages).$contentend; |
|
| 908 | 907 | case 'text/plain': |
| 909 | - return $contentstart.implode("\r\n",$contentrep).$contentend; |
|
| 908 | + return $contentstart.implode("\r\n", $contentrep).$contentend; |
|
| 910 | 909 | } |
| 911 | - $err = lang('%1 not implemented for %2!','$$labelplacement$$',$mimetype); |
|
| 910 | + $err = lang('%1 not implemented for %2!', '$$labelplacement$$', $mimetype); |
|
| 912 | 911 | return false; |
| 913 | 912 | } |
| 914 | 913 | |
@@ -933,9 +932,9 @@ discard block |
||
| 933 | 932 | * @param string $charset =null charset to override default set by mimetype or export charset |
| 934 | 933 | * @return string |
| 935 | 934 | */ |
| 936 | - protected function replace($content,array $replacements,$mimetype,$mso_application_progid='',$charset=null) |
|
| 935 | + protected function replace($content, array $replacements, $mimetype, $mso_application_progid = '', $charset = null) |
|
| 937 | 936 | { |
| 938 | - switch($mimetype) |
|
| 937 | + switch ($mimetype) |
|
| 939 | 938 | { |
| 940 | 939 | case 'application/vnd.oasis.opendocument.text': // open office |
| 941 | 940 | case 'application/vnd.oasis.opendocument.spreadsheet': |
@@ -944,13 +943,13 @@ discard block |
||
| 944 | 943 | case 'application/xml': |
| 945 | 944 | case 'text/xml': |
| 946 | 945 | $is_xml = true; |
| 947 | - $charset = 'utf-8'; // xml files --> always use utf-8 |
|
| 946 | + $charset = 'utf-8'; // xml files --> always use utf-8 |
|
| 948 | 947 | break; |
| 949 | 948 | |
| 950 | 949 | case 'text/html': |
| 951 | 950 | $is_xml = true; |
| 952 | 951 | $matches = null; |
| 953 | - if (preg_match('/<meta http-equiv="content-type".*charset=([^;"]+)/i',$content,$matches)) |
|
| 952 | + if (preg_match('/<meta http-equiv="content-type".*charset=([^;"]+)/i', $content, $matches)) |
|
| 954 | 953 | { |
| 955 | 954 | $charset = $matches[1]; |
| 956 | 955 | } |
@@ -969,18 +968,18 @@ discard block |
||
| 969 | 968 | // do we need to convert charset |
| 970 | 969 | if ($charset && $charset != Api\Translation::charset()) |
| 971 | 970 | { |
| 972 | - $replacements = Api\Translation::convert($replacements,Api\Translation::charset(),$charset); |
|
| 971 | + $replacements = Api\Translation::convert($replacements, Api\Translation::charset(), $charset); |
|
| 973 | 972 | } |
| 974 | 973 | |
| 975 | 974 | // Date only placeholders for timestamps |
| 976 | - if(is_array($this->date_fields)) |
|
| 975 | + if (is_array($this->date_fields)) |
|
| 977 | 976 | { |
| 978 | - foreach($this->date_fields as $field) |
|
| 977 | + foreach ($this->date_fields as $field) |
|
| 979 | 978 | { |
| 980 | - if(($value = $replacements['$$'.$field.'$$'])) |
|
| 979 | + if (($value = $replacements['$$'.$field.'$$'])) |
|
| 981 | 980 | { |
| 982 | 981 | $time = Api\DateTime::createFromFormat('+'.Api\DateTime::$user_dateformat.' '.Api\DateTime::$user_timeformat.'*', $value); |
| 983 | - $replacements['$$'.$field.'/date$$'] = $time ? $time->format(Api\DateTime::$user_dateformat) : ''; |
|
| 982 | + $replacements['$$'.$field.'/date$$'] = $time ? $time->format(Api\DateTime::$user_dateformat) : ''; |
|
| 984 | 983 | } |
| 985 | 984 | } |
| 986 | 985 | } |
@@ -994,66 +993,66 @@ discard block |
||
| 994 | 993 | // only keep tags, if we have xsl extension available |
| 995 | 994 | if (class_exists(XSLTProcessor) && class_exists(DOMDocument) && $this->parse_html_styles) |
| 996 | 995 | { |
| 997 | - switch($mimetype.$mso_application_progid) |
|
| 996 | + switch ($mimetype.$mso_application_progid) |
|
| 998 | 997 | { |
| 999 | 998 | case 'text/html': |
| 1000 | 999 | $replace_tags = array( |
| 1001 | - '<b>','<strong>','<i>','<em>','<u>','<span>','<ol>','<ul>','<li>', |
|
| 1002 | - '<table>','<tr>','<td>','<a>','<style>', |
|
| 1000 | + '<b>', '<strong>', '<i>', '<em>', '<u>', '<span>', '<ol>', '<ul>', '<li>', |
|
| 1001 | + '<table>', '<tr>', '<td>', '<a>', '<style>', |
|
| 1003 | 1002 | ); |
| 1004 | 1003 | break; |
| 1005 | 1004 | case 'application/vnd.oasis.opendocument.text': // open office |
| 1006 | 1005 | case 'application/vnd.oasis.opendocument.spreadsheet': |
| 1007 | 1006 | $replace_tags = array( |
| 1008 | - '<b>','<strong>','<i>','<em>','<u>','<span>','<ol>','<ul>','<li>', |
|
| 1009 | - '<table>','<tr>','<td>','<a>', |
|
| 1007 | + '<b>', '<strong>', '<i>', '<em>', '<u>', '<span>', '<ol>', '<ul>', '<li>', |
|
| 1008 | + '<table>', '<tr>', '<td>', '<a>', |
|
| 1010 | 1009 | ); |
| 1011 | 1010 | break; |
| 1012 | 1011 | case 'application/xmlWord.Document': // Word 2003*/ |
| 1013 | 1012 | case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': // ms office 2007 |
| 1014 | 1013 | case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': |
| 1015 | 1014 | $replace_tags = array( |
| 1016 | - '<b>','<strong>','<i>','<em>','<u>','<span>','<ol>','<ul>','<li>', |
|
| 1017 | - '<table>','<tr>','<td>', |
|
| 1015 | + '<b>', '<strong>', '<i>', '<em>', '<u>', '<span>', '<ol>', '<ul>', '<li>', |
|
| 1016 | + '<table>', '<tr>', '<td>', |
|
| 1018 | 1017 | ); |
| 1019 | 1018 | break; |
| 1020 | 1019 | } |
| 1021 | 1020 | } |
| 1022 | 1021 | // clean replacements from array values and html or html-entities, which mess up xml |
| 1023 | - foreach($replacements as $name => &$value) |
|
| 1022 | + foreach ($replacements as $name => &$value) |
|
| 1024 | 1023 | { |
| 1025 | 1024 | // set unresolved array values to empty string |
| 1026 | - if(is_array($value)) |
|
| 1025 | + if (is_array($value)) |
|
| 1027 | 1026 | { |
| 1028 | 1027 | $value = ''; |
| 1029 | 1028 | continue; |
| 1030 | 1029 | } |
| 1031 | 1030 | // decode html entities back to utf-8 |
| 1032 | 1031 | |
| 1033 | - if (is_string($value) && (strpos($value,'&') !== false) && $this->parse_html_styles) |
|
| 1032 | + if (is_string($value) && (strpos($value, '&') !== false) && $this->parse_html_styles) |
|
| 1034 | 1033 | { |
| 1035 | - $value = html_entity_decode($value,ENT_QUOTES,$charset); |
|
| 1034 | + $value = html_entity_decode($value, ENT_QUOTES, $charset); |
|
| 1036 | 1035 | |
| 1037 | 1036 | // remove all non-decodable entities |
| 1038 | - if (strpos($value,'&') !== false) |
|
| 1037 | + if (strpos($value, '&') !== false) |
|
| 1039 | 1038 | { |
| 1040 | - $value = preg_replace('/&[^; ]+;/','',$value); |
|
| 1039 | + $value = preg_replace('/&[^; ]+;/', '', $value); |
|
| 1041 | 1040 | } |
| 1042 | 1041 | } |
| 1043 | 1042 | |
| 1044 | - if(!$this->parse_html_styles) |
|
| 1043 | + if (!$this->parse_html_styles) |
|
| 1045 | 1044 | { |
| 1046 | 1045 | // Encode special chars so they don't break the file |
| 1047 | - $value = htmlspecialchars($value,ENT_NOQUOTES); |
|
| 1046 | + $value = htmlspecialchars($value, ENT_NOQUOTES); |
|
| 1048 | 1047 | } |
| 1049 | - else if (is_string($value) && (strpos($value,'<') !== false)) |
|
| 1048 | + else if (is_string($value) && (strpos($value, '<') !== false)) |
|
| 1050 | 1049 | { |
| 1051 | 1050 | // Clean HTML, if it's being kept |
| 1052 | - if($replace_tags && extension_loaded('tidy')) { |
|
| 1051 | + if ($replace_tags && extension_loaded('tidy')) { |
|
| 1053 | 1052 | $tidy = new tidy(); |
| 1054 | 1053 | $cleaned = $tidy->repairString($value, self::$tidy_config); |
| 1055 | 1054 | // Found errors. Strip it all so there's some output |
| 1056 | - if($tidy->getStatus() == 2) |
|
| 1055 | + if ($tidy->getStatus() == 2) |
|
| 1057 | 1056 | { |
| 1058 | 1057 | error_log($tidy->errorBuffer); |
| 1059 | 1058 | $value = strip_tags($value); |
@@ -1064,52 +1063,52 @@ discard block |
||
| 1064 | 1063 | } |
| 1065 | 1064 | } |
| 1066 | 1065 | // replace </p> and <br /> with CRLF (remove <p> and CRLF) |
| 1067 | - $value = strip_tags(str_replace(array("\r","\n",'<p>','</p>','<div>','</div>','<br />'), |
|
| 1068 | - array('','','',"\r\n",'',"\r\n","\r\n"), $value), |
|
| 1066 | + $value = strip_tags(str_replace(array("\r", "\n", '<p>', '</p>', '<div>', '</div>', '<br />'), |
|
| 1067 | + array('', '', '', "\r\n", '', "\r\n", "\r\n"), $value), |
|
| 1069 | 1068 | implode('', $replace_tags)); |
| 1070 | 1069 | |
| 1071 | 1070 | // Change <tag>...\r\n</tag> to <tag>...</tag>\r\n or simplistic line break below will mangle it |
| 1072 | 1071 | // Loop to catch things like <b><span>Break:\r\n</span></b> |
| 1073 | - if($mso_application_progid) |
|
| 1072 | + if ($mso_application_progid) |
|
| 1074 | 1073 | { |
| 1075 | 1074 | $count = $i = 0; |
| 1076 | 1075 | do |
| 1077 | 1076 | { |
| 1078 | - $value = preg_replace('/<(b|strong|i|em|u|span)\b([^>]*?)>(.*?)'."\r\n".'<\/\1>/u', '<$1$2>$3</$1>'."\r\n",$value,-1,$count); |
|
| 1077 | + $value = preg_replace('/<(b|strong|i|em|u|span)\b([^>]*?)>(.*?)'."\r\n".'<\/\1>/u', '<$1$2>$3</$1>'."\r\n", $value, -1, $count); |
|
| 1079 | 1078 | $i++; |
| 1080 | - } while($count > 0 && $i < 10); // Limit of 10 chosen arbitrarily just in case |
|
| 1079 | + } while ($count > 0 && $i < 10); // Limit of 10 chosen arbitrarily just in case |
|
| 1081 | 1080 | } |
| 1082 | 1081 | } |
| 1083 | 1082 | // replace all control chars (C0+C1) but CR (\015), LF (\012) and TAB (\011) (eg. vertical tabulators) with space |
| 1084 | 1083 | // as they are not allowed in xml |
| 1085 | - $value = preg_replace('/[\000-\010\013\014\016-\037\177-\237]/u',' ',$value); |
|
| 1086 | - if(is_numeric($value) && $name != '$$user/account_id$$') // account_id causes problems with the preg_replace below |
|
| 1084 | + $value = preg_replace('/[\000-\010\013\014\016-\037\177-\237]/u', ' ', $value); |
|
| 1085 | + if (is_numeric($value) && $name != '$$user/account_id$$') // account_id causes problems with the preg_replace below |
|
| 1087 | 1086 | { |
| 1088 | - $names[] = preg_quote($name,'/'); |
|
| 1087 | + $names[] = preg_quote($name, '/'); |
|
| 1089 | 1088 | } |
| 1090 | 1089 | } |
| 1091 | 1090 | |
| 1092 | 1091 | // Look for numbers, set their value if needed |
| 1093 | - if($this->numeric_fields || count($names)) |
|
| 1092 | + if ($this->numeric_fields || count($names)) |
|
| 1094 | 1093 | { |
| 1095 | - foreach((array)$this->numeric_fields as $fieldname) { |
|
| 1096 | - $names[] = preg_quote($fieldname,'/'); |
|
| 1094 | + foreach ((array)$this->numeric_fields as $fieldname) { |
|
| 1095 | + $names[] = preg_quote($fieldname, '/'); |
|
| 1097 | 1096 | } |
| 1098 | 1097 | $this->format_spreadsheet_numbers($content, $names, $mimetype.$mso_application_progid); |
| 1099 | 1098 | } |
| 1100 | 1099 | |
| 1101 | 1100 | // Look for dates, set their value if needed |
| 1102 | - if($this->date_fields || count($names)) |
|
| 1101 | + if ($this->date_fields || count($names)) |
|
| 1103 | 1102 | { |
| 1104 | 1103 | $names = array(); |
| 1105 | - foreach((array)$this->date_fields as $fieldname) { |
|
| 1104 | + foreach ((array)$this->date_fields as $fieldname) { |
|
| 1106 | 1105 | $names[] = $fieldname; |
| 1107 | 1106 | } |
| 1108 | 1107 | $this->format_spreadsheet_dates($content, $names, $replacements, $mimetype.$mso_application_progid); |
| 1109 | 1108 | } |
| 1110 | 1109 | |
| 1111 | 1110 | // replace CRLF with linebreak tag of given type |
| 1112 | - switch($mimetype.$mso_application_progid) |
|
| 1111 | + switch ($mimetype.$mso_application_progid) |
|
| 1113 | 1112 | { |
| 1114 | 1113 | case 'application/vnd.oasis.opendocument.text': // open office writer |
| 1115 | 1114 | $break = '<text:line-break/>'; |
@@ -1136,14 +1135,14 @@ discard block |
||
| 1136 | 1135 | } |
| 1137 | 1136 | // now decode &, < and >, which need to be encoded as entities in xml |
| 1138 | 1137 | // Check for encoded >< getting double-encoded |
| 1139 | - if($this->parse_html_styles) |
|
| 1138 | + if ($this->parse_html_styles) |
|
| 1140 | 1139 | { |
| 1141 | - $replacements = str_replace(array('&',"\r","\n",'&lt;','&gt;'),array('&','',$break,'<','>'),$replacements); |
|
| 1140 | + $replacements = str_replace(array('&', "\r", "\n", '&lt;', '&gt;'), array('&', '', $break, '<', '>'), $replacements); |
|
| 1142 | 1141 | } |
| 1143 | 1142 | else |
| 1144 | 1143 | { |
| 1145 | 1144 | // Need to at least handle new lines, or it'll be run together on one line |
| 1146 | - $replacements = str_replace(array("\r","\n"),array('',$break),$replacements); |
|
| 1145 | + $replacements = str_replace(array("\r", "\n"), array('', $break), $replacements); |
|
| 1147 | 1146 | } |
| 1148 | 1147 | } |
| 1149 | 1148 | if ($mimetype == 'application/x-yaml') |
@@ -1154,24 +1153,24 @@ discard block |
||
| 1154 | 1153 | $parts = null; |
| 1155 | 1154 | if (preg_match('|^\$\$([^/]+)/([^/]+)/([^$]*)\$\$$|', $matches[3], $parts) && isset($replacements['$$'.$parts[1].'$$'])) |
| 1156 | 1155 | { |
| 1157 | - $replacement =& $replacements['$$'.$parts[1].'$$']; |
|
| 1156 | + $replacement = & $replacements['$$'.$parts[1].'$$']; |
|
| 1158 | 1157 | $replacement = preg_replace('/'.$parts[2].'/', strtr($parts[3], array( |
| 1159 | 1158 | '\\n' => "\n", '\\r' => "\r", '\\t' => "\t", '\\v' => "\v", '\\\\' => '\\', '\\f' => "\f", |
| 1160 | 1159 | )), $replacement); |
| 1161 | 1160 | } |
| 1162 | 1161 | else |
| 1163 | 1162 | { |
| 1164 | - $replacement =& $replacements[$matches[3]]; |
|
| 1163 | + $replacement = & $replacements[$matches[3]]; |
|
| 1165 | 1164 | } |
| 1166 | 1165 | // replacement with multiple lines --> add same number of space as before placeholder |
| 1167 | 1166 | if (isset($replacement)) |
| 1168 | 1167 | { |
| 1169 | 1168 | return $matches[1].$matches[2].implode("\n".$matches[1], preg_split("/\r?\n/", $replacement)); |
| 1170 | 1169 | } |
| 1171 | - return $matches[0]; // regular replacement below |
|
| 1170 | + return $matches[0]; // regular replacement below |
|
| 1172 | 1171 | }, $content); |
| 1173 | 1172 | } |
| 1174 | - return str_replace(array_keys($replacements),array_values($replacements),$content); |
|
| 1173 | + return str_replace(array_keys($replacements), array_values($replacements), $content); |
|
| 1175 | 1174 | } |
| 1176 | 1175 | |
| 1177 | 1176 | /** |
@@ -1179,36 +1178,36 @@ discard block |
||
| 1179 | 1178 | */ |
| 1180 | 1179 | protected function format_spreadsheet_numbers(&$content, $names, $mimetype) |
| 1181 | 1180 | { |
| 1182 | - foreach((array)$this->numeric_fields as $fieldname) { |
|
| 1183 | - $names[] = preg_quote($fieldname,'/'); |
|
| 1181 | + foreach ((array)$this->numeric_fields as $fieldname) { |
|
| 1182 | + $names[] = preg_quote($fieldname, '/'); |
|
| 1184 | 1183 | } |
| 1185 | - switch($mimetype) |
|
| 1184 | + switch ($mimetype) |
|
| 1186 | 1185 | { |
| 1187 | 1186 | case 'application/vnd.oasis.opendocument.spreadsheet': // open office calc |
| 1188 | - $format = '/<table:table-cell([^>]+?)office:value-type="[^"]+"([^>]*?)(?:calcext:value-type="[^"]+")?>.?<([a-z].*?)[^>]*>('.implode('|',$names).')<\/\3>.?<\/table:table-cell>/s'; |
|
| 1187 | + $format = '/<table:table-cell([^>]+?)office:value-type="[^"]+"([^>]*?)(?:calcext:value-type="[^"]+")?>.?<([a-z].*?)[^>]*>('.implode('|', $names).')<\/\3>.?<\/table:table-cell>/s'; |
|
| 1189 | 1188 | $replacement = '<table:table-cell$1office:value-type="float" office:value="$4"$2 calcext:value-type="float"><$3>$4</$3></table:table-cell>'; |
| 1190 | 1189 | break; |
| 1191 | 1190 | case 'application/vnd.oasis.opendocument.text': // tables in open office writer |
| 1192 | - $format = '/<table:table-cell([^>]+?)office:value-type="[^"]+"([^>]*?)>.?<([a-z].*?)[^>]*>('.implode('|',$names).')<\/\3>.?<\/table:table-cell>/s'; |
|
| 1191 | + $format = '/<table:table-cell([^>]+?)office:value-type="[^"]+"([^>]*?)>.?<([a-z].*?)[^>]*>('.implode('|', $names).')<\/\3>.?<\/table:table-cell>/s'; |
|
| 1193 | 1192 | $replacement = '<table:table-cell$1office:value-type="float" office:value="$4"$2><text:p text:style-name="Standard">$4</text:p></table:table-cell>'; |
| 1194 | 1193 | break; |
| 1195 | 1194 | case 'application/vnd.oasis.opendocument.text': // open office writer |
| 1196 | 1195 | case 'application/xmlExcel.Sheet': // Excel 2003 |
| 1197 | - $format = '/'.preg_quote('<Data ss:Type="String">','/').'('.implode('|',$names).')'.preg_quote('</Data>','/').'/'; |
|
| 1196 | + $format = '/'.preg_quote('<Data ss:Type="String">', '/').'('.implode('|', $names).')'.preg_quote('</Data>', '/').'/'; |
|
| 1198 | 1197 | $replacement = '<Data ss:Type="Number">$1</Data>'; |
| 1199 | 1198 | |
| 1200 | 1199 | break; |
| 1201 | 1200 | } |
| 1202 | - if($format && $names) |
|
| 1201 | + if ($format && $names) |
|
| 1203 | 1202 | { |
| 1204 | 1203 | // Dealing with backtrack limit per AmigoJack 10-Jul-2010 comment on php.net preg-replace docs |
| 1205 | 1204 | do { |
| 1206 | 1205 | $result = preg_replace($format, $replacement, $content, -1); |
| 1207 | 1206 | } |
| 1208 | 1207 | // try to increase/double pcre.backtrack_limit failure |
| 1209 | - while(preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR && self::increase_backtrack_limit()); |
|
| 1208 | + while (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR && self::increase_backtrack_limit()); |
|
| 1210 | 1209 | |
| 1211 | - if ($result) $content = $result; // On failure $result would be NULL |
|
| 1210 | + if ($result) $content = $result; // On failure $result would be NULL |
|
| 1212 | 1211 | } |
| 1213 | 1212 | } |
| 1214 | 1213 | |
@@ -1219,7 +1218,7 @@ discard block |
||
| 1219 | 1218 | */ |
| 1220 | 1219 | protected static function increase_backtrack_limit() |
| 1221 | 1220 | { |
| 1222 | - static $backtrack_limit=null,$memory_limit=null; |
|
| 1221 | + static $backtrack_limit = null, $memory_limit = null; |
|
| 1223 | 1222 | if (!isset($backtrack_limit)) |
| 1224 | 1223 | { |
| 1225 | 1224 | $backtrack_limit = ini_get('pcre.backtrack_limit'); |
@@ -1227,16 +1226,16 @@ discard block |
||
| 1227 | 1226 | if (!isset($memory_limit)) |
| 1228 | 1227 | { |
| 1229 | 1228 | $memory_limit = ini_get('memory_limit'); |
| 1230 | - switch(strtoupper(substr($memory_limit, -1))) |
|
| 1229 | + switch (strtoupper(substr($memory_limit, -1))) |
|
| 1231 | 1230 | { |
| 1232 | 1231 | case 'G': $memory_limit *= 1024; |
| 1233 | 1232 | case 'M': $memory_limit *= 1024; |
| 1234 | 1233 | case 'K': $memory_limit *= 1024; |
| 1235 | 1234 | } |
| 1236 | 1235 | } |
| 1237 | - if ($backtrack_limit < $memory_limit/8) |
|
| 1236 | + if ($backtrack_limit < $memory_limit / 8) |
|
| 1238 | 1237 | { |
| 1239 | - ini_set( 'pcre.backtrack_limit', $backtrack_limit*=2); |
|
| 1238 | + ini_set('pcre.backtrack_limit', $backtrack_limit *= 2); |
|
| 1240 | 1239 | return true; |
| 1241 | 1240 | } |
| 1242 | 1241 | error_log("pcre.backtrack_limit exceeded @ $backtrack_limit, some cells left as text."); |
@@ -1248,32 +1247,32 @@ discard block |
||
| 1248 | 1247 | */ |
| 1249 | 1248 | protected function format_spreadsheet_dates(&$content, $names, &$values, $mimetype) |
| 1250 | 1249 | { |
| 1251 | - if(!in_array($mimetype, array( |
|
| 1252 | - 'application/vnd.oasis.opendocument.spreadsheet', // open office calc |
|
| 1253 | - 'application/xmlExcel.Sheet', // Excel 2003 |
|
| 1250 | + if (!in_array($mimetype, array( |
|
| 1251 | + 'application/vnd.oasis.opendocument.spreadsheet', // open office calc |
|
| 1252 | + 'application/xmlExcel.Sheet', // Excel 2003 |
|
| 1254 | 1253 | //'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'//Excel WTF |
| 1255 | 1254 | ))) return; |
| 1256 | 1255 | |
| 1257 | 1256 | // Some different formats dates could be in, depending what they've been through |
| 1258 | 1257 | $formats = array( |
| 1259 | - '!'.Api\DateTime::$user_dateformat . ' ' .Api\DateTime::$user_timeformat.':s', |
|
| 1260 | - '!'.Api\DateTime::$user_dateformat . '*' .Api\DateTime::$user_timeformat.':s', |
|
| 1261 | - '!'.Api\DateTime::$user_dateformat . '* ' .Api\DateTime::$user_timeformat, |
|
| 1262 | - '!'.Api\DateTime::$user_dateformat . '*', |
|
| 1258 | + '!'.Api\DateTime::$user_dateformat.' '.Api\DateTime::$user_timeformat.':s', |
|
| 1259 | + '!'.Api\DateTime::$user_dateformat.'*'.Api\DateTime::$user_timeformat.':s', |
|
| 1260 | + '!'.Api\DateTime::$user_dateformat.'* '.Api\DateTime::$user_timeformat, |
|
| 1261 | + '!'.Api\DateTime::$user_dateformat.'*', |
|
| 1263 | 1262 | '!'.Api\DateTime::$user_dateformat, |
| 1264 | 1263 | ); |
| 1265 | 1264 | |
| 1266 | 1265 | // Properly format values for spreadsheet |
| 1267 | - foreach($names as $idx => &$field) |
|
| 1266 | + foreach ($names as $idx => &$field) |
|
| 1268 | 1267 | { |
| 1269 | 1268 | $key = '$$'.$field.'$$'; |
| 1270 | 1269 | $field = preg_quote($field, '/'); |
| 1271 | - if($values[$key]) |
|
| 1270 | + if ($values[$key]) |
|
| 1272 | 1271 | { |
| 1273 | - if(!is_numeric($values[$key])) |
|
| 1272 | + if (!is_numeric($values[$key])) |
|
| 1274 | 1273 | { |
| 1275 | 1274 | // Try the different formats, stop when one works |
| 1276 | - foreach($formats as $f) |
|
| 1275 | + foreach ($formats as $f) |
|
| 1277 | 1276 | { |
| 1278 | 1277 | try { |
| 1279 | 1278 | $date = Api\DateTime::createFromFormat( |
@@ -1281,12 +1280,12 @@ discard block |
||
| 1281 | 1280 | $values[$key], |
| 1282 | 1281 | Api\DateTime::$user_timezone |
| 1283 | 1282 | ); |
| 1284 | - if($date) break; |
|
| 1283 | + if ($date) break; |
|
| 1285 | 1284 | } catch (\Exception $e) { |
| 1286 | 1285 | |
| 1287 | 1286 | } |
| 1288 | 1287 | } |
| 1289 | - if(!$date) |
|
| 1288 | + if (!$date) |
|
| 1290 | 1289 | { |
| 1291 | 1290 | // Couldn't get a date out of it... skip it |
| 1292 | 1291 | trigger_error("Unable to parse date $key = '{$values[$key]}' - left as text", E_USER_NOTICE); |
@@ -1298,16 +1297,16 @@ discard block |
||
| 1298 | 1297 | { |
| 1299 | 1298 | $date = new Api\DateTime($values[$key]); |
| 1300 | 1299 | } |
| 1301 | - if($mimetype == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')//Excel WTF |
|
| 1300 | + if ($mimetype == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')//Excel WTF |
|
| 1302 | 1301 | { |
| 1303 | 1302 | $interval = $date->diff(new Api\DateTime('1900-01-00 0:00')); |
| 1304 | - $values[$key] = $interval->format('%a')+1;// 1900-02-29 did not exist |
|
| 1303 | + $values[$key] = $interval->format('%a') + 1; // 1900-02-29 did not exist |
|
| 1305 | 1304 | // 1440 minutes in a day - fractional part |
| 1306 | - $values[$key] += ($date->format('H') * 60 + $date->format('i'))/1440; |
|
| 1305 | + $values[$key] += ($date->format('H') * 60 + $date->format('i')) / 1440; |
|
| 1307 | 1306 | } |
| 1308 | 1307 | else |
| 1309 | 1308 | { |
| 1310 | - $values[$key] = date('Y-m-d\TH:i:s',Api\DateTime::to($date,'ts')); |
|
| 1309 | + $values[$key] = date('Y-m-d\TH:i:s', Api\DateTime::to($date, 'ts')); |
|
| 1311 | 1310 | } |
| 1312 | 1311 | } |
| 1313 | 1312 | else |
@@ -1316,33 +1315,33 @@ discard block |
||
| 1316 | 1315 | } |
| 1317 | 1316 | } |
| 1318 | 1317 | |
| 1319 | - switch($mimetype) |
|
| 1318 | + switch ($mimetype) |
|
| 1320 | 1319 | { |
| 1321 | 1320 | case 'application/vnd.oasis.opendocument.spreadsheet': // open office calc |
| 1322 | 1321 | // Removing these forces calc to respect our set value-type |
| 1323 | - $content = str_ireplace('calcext:value-type="string"','',$content); |
|
| 1322 | + $content = str_ireplace('calcext:value-type="string"', '', $content); |
|
| 1324 | 1323 | |
| 1325 | - $format = '/<table:table-cell([^>]+?)office:value-type="[^"]+"([^>]*?)>.?<([a-z].*?)[^>]*>\$\$('.implode('|',$names).')\$\$<\/\3>.?<\/table:table-cell>/s'; |
|
| 1324 | + $format = '/<table:table-cell([^>]+?)office:value-type="[^"]+"([^>]*?)>.?<([a-z].*?)[^>]*>\$\$('.implode('|', $names).')\$\$<\/\3>.?<\/table:table-cell>/s'; |
|
| 1326 | 1325 | $replacement = '<table:table-cell$1office:value-type="date" office:date-value="\$\$$4\$\$"$2><$3>\$\$$4\$\$</$3></table:table-cell>'; |
| 1327 | 1326 | break; |
| 1328 | 1327 | case 'application/xmlExcel.Sheet': // Excel 2003 |
| 1329 | - $format = '/'.preg_quote('<Data ss:Type="String">','/').'..('.implode('|',$names).')..'.preg_quote('</Data>','/').'/'; |
|
| 1328 | + $format = '/'.preg_quote('<Data ss:Type="String">', '/').'..('.implode('|', $names).')..'.preg_quote('</Data>', '/').'/'; |
|
| 1330 | 1329 | $replacement = '<Data ss:Type="DateTime">\$\$$1\$\$</Data>'; |
| 1331 | 1330 | |
| 1332 | 1331 | break; |
| 1333 | 1332 | case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': |
| 1334 | 1333 | break; |
| 1335 | 1334 | } |
| 1336 | - if($format && $names) |
|
| 1335 | + if ($format && $names) |
|
| 1337 | 1336 | { |
| 1338 | 1337 | // Dealing with backtrack limit per AmigoJack 10-Jul-2010 comment on php.net preg-replace docs |
| 1339 | 1338 | do { |
| 1340 | 1339 | $result = preg_replace($format, $replacement, $content, -1); |
| 1341 | 1340 | } |
| 1342 | 1341 | // try to increase/double pcre.backtrack_limit failure |
| 1343 | - while(preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR && self::increase_backtrack_limit()); |
|
| 1342 | + while (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR && self::increase_backtrack_limit()); |
|
| 1344 | 1343 | |
| 1345 | - if ($result) $content = $result; // On failure $result would be NULL |
|
| 1344 | + if ($result) $content = $result; // On failure $result would be NULL |
|
| 1346 | 1345 | } |
| 1347 | 1346 | } |
| 1348 | 1347 | |
@@ -1352,9 +1351,9 @@ discard block |
||
| 1352 | 1351 | */ |
| 1353 | 1352 | public function cf_link_to_expand($values, $content, &$replacements, $app = null) |
| 1354 | 1353 | { |
| 1355 | - if($app == null) |
|
| 1354 | + if ($app == null) |
|
| 1356 | 1355 | { |
| 1357 | - $app = str_replace('_merge','',get_class($this)); |
|
| 1356 | + $app = str_replace('_merge', '', get_class($this)); |
|
| 1358 | 1357 | } |
| 1359 | 1358 | $cfs = Api\Storage\Customfields::get($app); |
| 1360 | 1359 | |
@@ -1365,13 +1364,13 @@ discard block |
||
| 1365 | 1364 | // Placeholders that need expanded will look like {{#name/placeholder}} |
| 1366 | 1365 | $matches = null; |
| 1367 | 1366 | preg_match_all('/\${2}(([^\/#]*?\/)?)#([^$\/]+)\/(.*?)[$}]{2}/', $content, $matches); |
| 1368 | - list($placeholders, , , $cf, $sub) = $matches; |
|
| 1367 | + list($placeholders,,, $cf, $sub) = $matches; |
|
| 1369 | 1368 | |
| 1370 | - foreach($cf as $index => $field) |
|
| 1369 | + foreach ($cf as $index => $field) |
|
| 1371 | 1370 | { |
| 1372 | - if($cfs[$field]) |
|
| 1371 | + if ($cfs[$field]) |
|
| 1373 | 1372 | { |
| 1374 | - if(in_array($cfs[$field]['type'],array_keys($GLOBALS['egw_info']['apps']))) |
|
| 1373 | + if (in_array($cfs[$field]['type'], array_keys($GLOBALS['egw_info']['apps']))) |
|
| 1375 | 1374 | { |
| 1376 | 1375 | $field_app = $cfs[$field]['type']; |
| 1377 | 1376 | } |
@@ -1382,7 +1381,7 @@ discard block |
||
| 1382 | 1381 | $account = $GLOBALS['egw']->accounts->read($values['#'.$field]); |
| 1383 | 1382 | $app_replacements[$field] = $this->contact_replacements($account['person_id']); |
| 1384 | 1383 | } |
| 1385 | - else if (($list = explode('-',$cfs[$field]['type']) && in_array($list[0], array_keys($GLOBALS['egw_info']['apps'])))) |
|
| 1384 | + else if (($list = explode('-', $cfs[$field]['type']) && in_array($list[0], array_keys($GLOBALS['egw_info']['apps'])))) |
|
| 1386 | 1385 | { |
| 1387 | 1386 | // Sub-type - use app |
| 1388 | 1387 | $field_app = $list[0]; |
@@ -1393,7 +1392,7 @@ discard block |
||
| 1393 | 1392 | } |
| 1394 | 1393 | |
| 1395 | 1394 | // Get replacements for that application |
| 1396 | - if(!$app_replacements[$field]) |
|
| 1395 | + if (!$app_replacements[$field]) |
|
| 1397 | 1396 | { |
| 1398 | 1397 | $classname = "{$field_app}_merge"; |
| 1399 | 1398 | $class = new $classname(); |
@@ -1421,33 +1420,33 @@ discard block |
||
| 1421 | 1420 | */ |
| 1422 | 1421 | private function process_commands($content, $replacements) |
| 1423 | 1422 | { |
| 1424 | - if (strpos($content,'$$IF') !== false) |
|
| 1423 | + if (strpos($content, '$$IF') !== false) |
|
| 1425 | 1424 | { //Example use to use: $$IF n_prefix~Herr~Sehr geehrter~Sehr geehrte$$ |
| 1426 | - $this->replacements =& $replacements; |
|
| 1427 | - $content = preg_replace_callback('/\$\$IF ([#0-9a-z_\/-]+)~(.*)~(.*)~(.*)\$\$/imU',Array($this,'replace_callback'),$content); |
|
| 1425 | + $this->replacements = & $replacements; |
|
| 1426 | + $content = preg_replace_callback('/\$\$IF ([#0-9a-z_\/-]+)~(.*)~(.*)~(.*)\$\$/imU', Array($this, 'replace_callback'), $content); |
|
| 1428 | 1427 | unset($this->replacements); |
| 1429 | 1428 | } |
| 1430 | - if (strpos($content,'$$NELF') !== false) |
|
| 1429 | + if (strpos($content, '$$NELF') !== false) |
|
| 1431 | 1430 | { //Example: $$NEPBR org_unit$$ sets a LF and value of org_unit, only if there is a value |
| 1432 | - $this->replacements =& $replacements; |
|
| 1433 | - $content = preg_replace_callback('/\$\$NELF ([#0-9a-z_\/-]+)\$\$/imU',Array($this,'replace_callback'),$content); |
|
| 1431 | + $this->replacements = & $replacements; |
|
| 1432 | + $content = preg_replace_callback('/\$\$NELF ([#0-9a-z_\/-]+)\$\$/imU', Array($this, 'replace_callback'), $content); |
|
| 1434 | 1433 | unset($this->replacements); |
| 1435 | 1434 | } |
| 1436 | - if (strpos($content,'$$NENVLF') !== false) |
|
| 1435 | + if (strpos($content, '$$NENVLF') !== false) |
|
| 1437 | 1436 | { //Example: $$NEPBRNV org_unit$$ sets only a LF if there is a value for org_units, but did not add any value |
| 1438 | - $this->replacements =& $replacements; |
|
| 1439 | - $content = preg_replace_callback('/\$\$NENVLF ([#0-9a-z_\/-]+)\$\$/imU',Array($this,'replace_callback'),$content); |
|
| 1437 | + $this->replacements = & $replacements; |
|
| 1438 | + $content = preg_replace_callback('/\$\$NENVLF ([#0-9a-z_\/-]+)\$\$/imU', Array($this, 'replace_callback'), $content); |
|
| 1440 | 1439 | unset($this->replacements); |
| 1441 | 1440 | } |
| 1442 | - if (strpos($content,'$$LETTERPREFIX$$') !== false) |
|
| 1441 | + if (strpos($content, '$$LETTERPREFIX$$') !== false) |
|
| 1443 | 1442 | { //Example use to use: $$LETTERPREFIX$$ |
| 1444 | 1443 | $LETTERPREFIXCUSTOM = '$$LETTERPREFIXCUSTOM n_prefix title n_family$$'; |
| 1445 | - $content = str_replace('$$LETTERPREFIX$$',$LETTERPREFIXCUSTOM,$content); |
|
| 1444 | + $content = str_replace('$$LETTERPREFIX$$', $LETTERPREFIXCUSTOM, $content); |
|
| 1446 | 1445 | } |
| 1447 | - if (strpos($content,'$$LETTERPREFIXCUSTOM') !== false) |
|
| 1446 | + if (strpos($content, '$$LETTERPREFIXCUSTOM') !== false) |
|
| 1448 | 1447 | { //Example use to use for a custom Letter Prefix: $$LETTERPREFIX n_prefix title n_family$$ |
| 1449 | - $this->replacements =& $replacements; |
|
| 1450 | - $content = preg_replace_callback('/\$\$LETTERPREFIXCUSTOM ([#0-9a-z_-]+)(.*)\$\$/imU',Array($this,'replace_callback'),$content); |
|
| 1448 | + $this->replacements = & $replacements; |
|
| 1449 | + $content = preg_replace_callback('/\$\$LETTERPREFIXCUSTOM ([#0-9a-z_-]+)(.*)\$\$/imU', Array($this, 'replace_callback'), $content); |
|
| 1451 | 1450 | unset($this->replacements); |
| 1452 | 1451 | } |
| 1453 | 1452 | return $content; |
@@ -1461,16 +1460,16 @@ discard block |
||
| 1461 | 1460 | */ |
| 1462 | 1461 | private function replace_callback($param) |
| 1463 | 1462 | { |
| 1464 | - if (array_key_exists('$$'.$param[4].'$$',$this->replacements)) $param[4] = $this->replacements['$$'.$param[4].'$$']; |
|
| 1465 | - if (array_key_exists('$$'.$param[3].'$$',$this->replacements)) $param[3] = $this->replacements['$$'.$param[3].'$$']; |
|
| 1463 | + if (array_key_exists('$$'.$param[4].'$$', $this->replacements)) $param[4] = $this->replacements['$$'.$param[4].'$$']; |
|
| 1464 | + if (array_key_exists('$$'.$param[3].'$$', $this->replacements)) $param[3] = $this->replacements['$$'.$param[3].'$$']; |
|
| 1466 | 1465 | |
| 1467 | 1466 | $pattern = '/'.preg_quote($param[2], '/').'/'; |
| 1468 | - if (strpos($param[0],'$$IF') === 0 && (trim($param[2]) == "EMPTY" || $param[2] === '')) |
|
| 1467 | + if (strpos($param[0], '$$IF') === 0 && (trim($param[2]) == "EMPTY" || $param[2] === '')) |
|
| 1469 | 1468 | { |
| 1470 | 1469 | $pattern = '/^$/'; |
| 1471 | 1470 | } |
| 1472 | - $replace = preg_match($pattern,$this->replacements['$$'.$param[1].'$$']) ? $param[3] : $param[4]; |
|
| 1473 | - switch($this->mimetype) |
|
| 1471 | + $replace = preg_match($pattern, $this->replacements['$$'.$param[1].'$$']) ? $param[3] : $param[4]; |
|
| 1472 | + switch ($this->mimetype) |
|
| 1474 | 1473 | { |
| 1475 | 1474 | case 'application/vnd.oasis.opendocument.text': // open office |
| 1476 | 1475 | case 'application/vnd.oasis.opendocument.spreadsheet': |
@@ -1483,14 +1482,14 @@ discard block |
||
| 1483 | 1482 | break; |
| 1484 | 1483 | } |
| 1485 | 1484 | |
| 1486 | - switch($this->mimetype) |
|
| 1485 | + switch ($this->mimetype) |
|
| 1487 | 1486 | { |
| 1488 | 1487 | case 'application/rtf': |
| 1489 | 1488 | case 'text/rtf': |
| 1490 | 1489 | $LF = '}\par \pard\plain{'; |
| 1491 | 1490 | break; |
| 1492 | 1491 | case 'application/vnd.oasis.opendocument.text': |
| 1493 | - $LF ='<text:line-break/>'; |
|
| 1492 | + $LF = '<text:line-break/>'; |
|
| 1494 | 1493 | break; |
| 1495 | 1494 | case 'application/vnd.oasis.opendocument.spreadsheet': // open office calc |
| 1496 | 1495 | $LF = '</text:p><text:p>'; |
@@ -1500,35 +1499,35 @@ discard block |
||
| 1500 | 1499 | break; |
| 1501 | 1500 | case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': |
| 1502 | 1501 | case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': |
| 1503 | - $LF ='</w:t></w:r></w:p><w:p><w:r><w:t>'; |
|
| 1502 | + $LF = '</w:t></w:r></w:p><w:p><w:r><w:t>'; |
|
| 1504 | 1503 | break; |
| 1505 | 1504 | case 'application/xml'; |
| 1506 | - $LF ='</w:t></w:r><w:r><w:br w:type="text-wrapping" w:clear="all"/></w:r><w:r><w:t>'; |
|
| 1505 | + $LF = '</w:t></w:r><w:r><w:br w:type="text-wrapping" w:clear="all"/></w:r><w:r><w:t>'; |
|
| 1507 | 1506 | break; |
| 1508 | 1507 | default: |
| 1509 | 1508 | $LF = "\n"; |
| 1510 | 1509 | } |
| 1511 | - if($is_xml) { |
|
| 1512 | - $this->replacements = str_replace(array('&','&amp;','<','>',"\r","\n"),array('&','&','<','>','',$LF),$this->replacements); |
|
| 1510 | + if ($is_xml) { |
|
| 1511 | + $this->replacements = str_replace(array('&', '&amp;', '<', '>', "\r", "\n"), array('&', '&', '<', '>', '', $LF), $this->replacements); |
|
| 1513 | 1512 | } |
| 1514 | - if (strpos($param[0],'$$NELF') === 0) |
|
| 1513 | + if (strpos($param[0], '$$NELF') === 0) |
|
| 1515 | 1514 | { //sets a Pagebreak and value, only if the field has a value |
| 1516 | - if ($this->replacements['$$'.$param[1].'$$'] !='') $replace = $LF.$this->replacements['$$'.$param[1].'$$']; |
|
| 1515 | + if ($this->replacements['$$'.$param[1].'$$'] != '') $replace = $LF.$this->replacements['$$'.$param[1].'$$']; |
|
| 1517 | 1516 | } |
| 1518 | - if (strpos($param[0],'$$NENVLF') === 0) |
|
| 1517 | + if (strpos($param[0], '$$NENVLF') === 0) |
|
| 1519 | 1518 | { //sets a Pagebreak without any value, only if the field has a value |
| 1520 | - if ($this->replacements['$$'.$param[1].'$$'] !='') $replace = $LF; |
|
| 1519 | + if ($this->replacements['$$'.$param[1].'$$'] != '') $replace = $LF; |
|
| 1521 | 1520 | } |
| 1522 | - if (strpos($param[0],'$$LETTERPREFIXCUSTOM') === 0) |
|
| 1521 | + if (strpos($param[0], '$$LETTERPREFIXCUSTOM') === 0) |
|
| 1523 | 1522 | { //sets a Letterprefix |
| 1524 | 1523 | $replaceprefixsort = array(); |
| 1525 | 1524 | // ToDo Stefan: $contentstart is NOT defined here!!! |
| 1526 | - $replaceprefix = explode(' ',substr($param[0],21,-2)); |
|
| 1525 | + $replaceprefix = explode(' ', substr($param[0], 21, -2)); |
|
| 1527 | 1526 | foreach ($replaceprefix as $nameprefix) |
| 1528 | 1527 | { |
| 1529 | - if ($this->replacements['$$'.$nameprefix.'$$'] !='') $replaceprefixsort[] = $this->replacements['$$'.$nameprefix.'$$']; |
|
| 1528 | + if ($this->replacements['$$'.$nameprefix.'$$'] != '') $replaceprefixsort[] = $this->replacements['$$'.$nameprefix.'$$']; |
|
| 1530 | 1529 | } |
| 1531 | - $replace = implode($replaceprefixsort,' '); |
|
| 1530 | + $replace = implode($replaceprefixsort, ' '); |
|
| 1532 | 1531 | } |
| 1533 | 1532 | return $replace; |
| 1534 | 1533 | } |
@@ -1542,7 +1541,7 @@ discard block |
||
| 1542 | 1541 | * @param string $dirs comma or whitespace separated directories, used if $document is a relative path |
| 1543 | 1542 | * @return string with error-message on error, otherwise it does NOT return |
| 1544 | 1543 | */ |
| 1545 | - public function download($document, $ids, $name='', $dirs='') |
|
| 1544 | + public function download($document, $ids, $name = '', $dirs = '') |
|
| 1546 | 1545 | { |
| 1547 | 1546 | //error_log(__METHOD__."('$document', ".array2string($ids).", '$name', dirs='$dirs') ->".function_backtrace()); |
| 1548 | 1547 | if (($error = $this->check_document($document, $dirs))) |
@@ -1558,7 +1557,7 @@ discard block |
||
| 1558 | 1557 | $mail_bo->openConnection(); |
| 1559 | 1558 | try |
| 1560 | 1559 | { |
| 1561 | - $msgs = $mail_bo->importMessageToMergeAndSend($this, $content_url, $ids, $_folder=''); |
|
| 1560 | + $msgs = $mail_bo->importMessageToMergeAndSend($this, $content_url, $ids, $_folder = ''); |
|
| 1562 | 1561 | } |
| 1563 | 1562 | catch (Api\Exception\WrongUserinput $e) |
| 1564 | 1563 | { |
@@ -1567,39 +1566,39 @@ discard block |
||
| 1567 | 1566 | } |
| 1568 | 1567 | //error_log(__METHOD__.__LINE__.' Message after importMessageToMergeAndSend:'.array2string($msgs)); |
| 1569 | 1568 | $retString = ''; |
| 1570 | - if (count($msgs['success'])>0) $retString .= count($msgs['success']).' '.(count($msgs['success'])+count($msgs['failed'])==1?lang('Message prepared for sending.'):lang('Message(s) send ok.'));//implode('<br />',$msgs['success']); |
|
| 1569 | + if (count($msgs['success']) > 0) $retString .= count($msgs['success']).' '.(count($msgs['success']) + count($msgs['failed']) == 1 ? lang('Message prepared for sending.') : lang('Message(s) send ok.')); //implode('<br />',$msgs['success']); |
|
| 1571 | 1570 | //if (strlen($retString)>0) $retString .= '<br />'; |
| 1572 | - foreach($msgs['failed'] as $c =>$e) |
|
| 1571 | + foreach ($msgs['failed'] as $c =>$e) |
|
| 1573 | 1572 | { |
| 1574 | 1573 | $errorString .= lang('contact').' '.lang('id').':'.$c.'->'.$e.'.'; |
| 1575 | 1574 | } |
| 1576 | - if (count($msgs['failed'])>0) $retString .= count($msgs['failed']).' '.lang('Message(s) send failed!').'=>'.$errorString; |
|
| 1575 | + if (count($msgs['failed']) > 0) $retString .= count($msgs['failed']).' '.lang('Message(s) send failed!').'=>'.$errorString; |
|
| 1577 | 1576 | return $retString; |
| 1578 | 1577 | case 'application/vnd.oasis.opendocument.text': |
| 1579 | 1578 | case 'application/vnd.oasis.opendocument.spreadsheet': |
| 1580 | 1579 | $ext = $mimetype == 'application/vnd.oasis.opendocument.text' ? '.odt' : '.ods'; |
| 1581 | - $archive = tempnam($GLOBALS['egw_info']['server']['temp_dir'], basename($document,$ext).'-').$ext; |
|
| 1582 | - copy($content_url,$archive); |
|
| 1580 | + $archive = tempnam($GLOBALS['egw_info']['server']['temp_dir'], basename($document, $ext).'-').$ext; |
|
| 1581 | + copy($content_url, $archive); |
|
| 1583 | 1582 | $content_url = 'zip://'.$archive.'#'.($content_file = 'content.xml'); |
| 1584 | 1583 | $this->parse_html_styles = true; |
| 1585 | 1584 | break; |
| 1586 | 1585 | case 'application/vnd.openxmlformats-officedocument.wordprocessingml.d': // mimetypes in vfs are limited to 64 chars |
| 1587 | 1586 | $mimetype = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; |
| 1588 | 1587 | case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': |
| 1589 | - $archive = tempnam($GLOBALS['egw_info']['server']['temp_dir'], basename($document,'.docx').'-').'.docx'; |
|
| 1590 | - copy($content_url,$archive); |
|
| 1588 | + $archive = tempnam($GLOBALS['egw_info']['server']['temp_dir'], basename($document, '.docx').'-').'.docx'; |
|
| 1589 | + copy($content_url, $archive); |
|
| 1591 | 1590 | $content_url = 'zip://'.$archive.'#'.($content_file = 'word/document.xml'); |
| 1592 | 1591 | $fix = array( // regular expression to fix garbled placeholders |
| 1593 | - '/'.preg_quote('$$</w:t></w:r><w:proofErr w:type="spellStart"/><w:r><w:t>','/').'([a-z0-9_]+)'. |
|
| 1594 | - preg_quote('</w:t></w:r><w:proofErr w:type="spellEnd"/><w:r><w:t>','/').'/i' => '$$\\1$$', |
|
| 1595 | - '/'.preg_quote('$$</w:t></w:r><w:proofErr w:type="spellStart"/><w:r><w:rPr><w:lang w:val="','/'). |
|
| 1596 | - '([a-z]{2}-[A-Z]{2})'.preg_quote('"/></w:rPr><w:t>','/').'([a-z0-9_]+)'. |
|
| 1597 | - preg_quote('</w:t></w:r><w:proofErr w:type="spellEnd"/><w:r><w:rPr><w:lang w:val="','/'). |
|
| 1598 | - '([a-z]{2}-[A-Z]{2})'.preg_quote('"/></w:rPr><w:t>$$','/').'/i' => '$$\\2$$', |
|
| 1599 | - '/'.preg_quote('$</w:t></w:r><w:proofErr w:type="spellStart"/><w:r><w:t>','/').'([a-z0-9_]+)'. |
|
| 1600 | - preg_quote('</w:t></w:r><w:proofErr w:type="spellEnd"/><w:r><w:t>','/').'/i' => '$\\1$', |
|
| 1601 | - '/'.preg_quote('$ $</w:t></w:r><w:proofErr w:type="spellStart"/><w:r><w:t>','/').'([a-z0-9_]+)'. |
|
| 1602 | - preg_quote('</w:t></w:r><w:proofErr w:type="spellEnd"/><w:r><w:t>','/').'/i' => '$ $\\1$ $', |
|
| 1592 | + '/'.preg_quote('$$</w:t></w:r><w:proofErr w:type="spellStart"/><w:r><w:t>', '/').'([a-z0-9_]+)'. |
|
| 1593 | + preg_quote('</w:t></w:r><w:proofErr w:type="spellEnd"/><w:r><w:t>', '/').'/i' => '$$\\1$$', |
|
| 1594 | + '/'.preg_quote('$$</w:t></w:r><w:proofErr w:type="spellStart"/><w:r><w:rPr><w:lang w:val="', '/'). |
|
| 1595 | + '([a-z]{2}-[A-Z]{2})'.preg_quote('"/></w:rPr><w:t>', '/').'([a-z0-9_]+)'. |
|
| 1596 | + preg_quote('</w:t></w:r><w:proofErr w:type="spellEnd"/><w:r><w:rPr><w:lang w:val="', '/'). |
|
| 1597 | + '([a-z]{2}-[A-Z]{2})'.preg_quote('"/></w:rPr><w:t>$$', '/').'/i' => '$$\\2$$', |
|
| 1598 | + '/'.preg_quote('$</w:t></w:r><w:proofErr w:type="spellStart"/><w:r><w:t>', '/').'([a-z0-9_]+)'. |
|
| 1599 | + preg_quote('</w:t></w:r><w:proofErr w:type="spellEnd"/><w:r><w:t>', '/').'/i' => '$\\1$', |
|
| 1600 | + '/'.preg_quote('$ $</w:t></w:r><w:proofErr w:type="spellStart"/><w:r><w:t>', '/').'([a-z0-9_]+)'. |
|
| 1601 | + preg_quote('</w:t></w:r><w:proofErr w:type="spellEnd"/><w:r><w:t>', '/').'/i' => '$ $\\1$ $', |
|
| 1603 | 1602 | ); |
| 1604 | 1603 | break; |
| 1605 | 1604 | case 'application/xml': |
@@ -1613,13 +1612,13 @@ discard block |
||
| 1613 | 1612 | $fix = array( // hack to get Excel 2007 to display additional rows in tables |
| 1614 | 1613 | '/ss:ExpandedRowCount="\d+"/' => 'ss:ExpandedRowCount="9999"', |
| 1615 | 1614 | ); |
| 1616 | - $archive = tempnam($GLOBALS['egw_info']['server']['temp_dir'], basename($document,'.xlsx').'-').'.xlsx'; |
|
| 1617 | - copy($content_url,$archive); |
|
| 1615 | + $archive = tempnam($GLOBALS['egw_info']['server']['temp_dir'], basename($document, '.xlsx').'-').'.xlsx'; |
|
| 1616 | + copy($content_url, $archive); |
|
| 1618 | 1617 | $content_url = 'zip://'.$archive.'#'.($content_file = 'xl/sharedStrings.xml'); |
| 1619 | 1618 | break; |
| 1620 | 1619 | } |
| 1621 | 1620 | $err = null; |
| 1622 | - if (!($merged =& $this->merge($content_url,$ids,$err,$mimetype,$fix))) |
|
| 1621 | + if (!($merged = & $this->merge($content_url, $ids, $err, $mimetype, $fix))) |
|
| 1623 | 1622 | { |
| 1624 | 1623 | //error_log(__METHOD__."() !this->merge() err=$err"); |
| 1625 | 1624 | return $err; |
@@ -1636,22 +1635,22 @@ discard block |
||
| 1636 | 1635 | { |
| 1637 | 1636 | // Error converting HTML styles over |
| 1638 | 1637 | error_log($e->getMessage()); |
| 1639 | - error_log("Target document: $content_url, IDs: ". array2string($ids)); |
|
| 1638 | + error_log("Target document: $content_url, IDs: ".array2string($ids)); |
|
| 1640 | 1639 | |
| 1641 | 1640 | // Try again, but strip HTML so user gets something |
| 1642 | 1641 | $this->parse_html_styles = false; |
| 1643 | - if (!($merged =& $this->merge($content_url,$ids,$err,$mimetype,$fix))) |
|
| 1642 | + if (!($merged = & $this->merge($content_url, $ids, $err, $mimetype, $fix))) |
|
| 1644 | 1643 | { |
| 1645 | 1644 | return $err; |
| 1646 | 1645 | } |
| 1647 | 1646 | } |
| 1648 | 1647 | if ($this->report_memory_usage) error_log(__METHOD__."() after HTML processing ".Api\Vfs::hsize(memory_get_peak_usage(true))); |
| 1649 | 1648 | } |
| 1650 | - if(!empty($name)) |
|
| 1649 | + if (!empty($name)) |
|
| 1651 | 1650 | { |
| 1652 | - if(empty($ext)) |
|
| 1651 | + if (empty($ext)) |
|
| 1653 | 1652 | { |
| 1654 | - $ext = '.'.pathinfo($document,PATHINFO_EXTENSION); |
|
| 1653 | + $ext = '.'.pathinfo($document, PATHINFO_EXTENSION); |
|
| 1655 | 1654 | } |
| 1656 | 1655 | $name .= $ext; |
| 1657 | 1656 | } |
@@ -1667,30 +1666,30 @@ discard block |
||
| 1667 | 1666 | error_log(__METHOD__.__LINE__." !ZipArchive::open('$archive',ZIPARCHIVE"."::CHECKCONS) failed. Trying open without validating"); |
| 1668 | 1667 | if ($zip->open($archive) !== true) throw new Api\Exception("!ZipArchive::open('$archive',|ZIPARCHIVE::CHECKCONS)"); |
| 1669 | 1668 | } |
| 1670 | - if ($zip->addFromString($content_file,$merged) !== true) throw new Api\Exception("!ZipArchive::addFromString('$content_file',\$merged)"); |
|
| 1669 | + if ($zip->addFromString($content_file, $merged) !== true) throw new Api\Exception("!ZipArchive::addFromString('$content_file',\$merged)"); |
|
| 1671 | 1670 | if ($zip->close() !== true) throw new Api\Exception("!ZipArchive::close()"); |
| 1672 | 1671 | unset($zip); |
| 1673 | 1672 | unset($merged); |
| 1674 | - if (substr($mimetype,0,35) == 'application/vnd.oasis.opendocument.' && // only open office archives need that, ms word files brake |
|
| 1675 | - file_exists('/usr/bin/zip') && version_compare(PHP_VERSION,'5.3.1','<')) // fix broken zip archives generated by current php |
|
| 1673 | + if (substr($mimetype, 0, 35) == 'application/vnd.oasis.opendocument.' && // only open office archives need that, ms word files brake |
|
| 1674 | + file_exists('/usr/bin/zip') && version_compare(PHP_VERSION, '5.3.1', '<')) // fix broken zip archives generated by current php |
|
| 1676 | 1675 | { |
| 1677 | 1676 | exec('/usr/bin/zip -F '.escapeshellarg($archive)); |
| 1678 | 1677 | } |
| 1679 | 1678 | if ($this->report_memory_usage) error_log(__METHOD__."() after ZIP processing ".Api\Vfs::hsize(memory_get_peak_usage(true))); |
| 1680 | - Api\Header\Content::type($name,$mimetype,filesize($archive)); |
|
| 1681 | - readfile($archive,'r'); |
|
| 1679 | + Api\Header\Content::type($name, $mimetype, filesize($archive)); |
|
| 1680 | + readfile($archive, 'r'); |
|
| 1682 | 1681 | } |
| 1683 | 1682 | else |
| 1684 | 1683 | { |
| 1685 | 1684 | if ($mimetype == 'application/xml') |
| 1686 | 1685 | { |
| 1687 | - if (strpos($merged,'<?mso-application progid="Word.Document"?>') !== false) |
|
| 1686 | + if (strpos($merged, '<?mso-application progid="Word.Document"?>') !== false) |
|
| 1688 | 1687 | { |
| 1689 | - $mimetype = 'application/msword'; // to open it automatically in word or oowriter |
|
| 1688 | + $mimetype = 'application/msword'; // to open it automatically in word or oowriter |
|
| 1690 | 1689 | } |
| 1691 | - elseif (strpos($merged,'<?mso-application progid="Excel.Sheet"?>') !== false) |
|
| 1690 | + elseif (strpos($merged, '<?mso-application progid="Excel.Sheet"?>') !== false) |
|
| 1692 | 1691 | { |
| 1693 | - $mimetype = 'application/vnd.ms-excel'; // to open it automatically in excel or oocalc |
|
| 1692 | + $mimetype = 'application/vnd.ms-excel'; // to open it automatically in excel or oocalc |
|
| 1694 | 1693 | } |
| 1695 | 1694 | } |
| 1696 | 1695 | Api\Header\Content::type($name, $mimetype); |
@@ -1711,13 +1710,13 @@ discard block |
||
| 1711 | 1710 | */ |
| 1712 | 1711 | public function download_by_request() |
| 1713 | 1712 | { |
| 1714 | - if(empty($_POST['data_document_name'])) return false; |
|
| 1715 | - if(empty($_POST['data_document_dir'])) return false; |
|
| 1716 | - if(empty($_POST['data_checked'])) return false; |
|
| 1713 | + if (empty($_POST['data_document_name'])) return false; |
|
| 1714 | + if (empty($_POST['data_document_dir'])) return false; |
|
| 1715 | + if (empty($_POST['data_checked'])) return false; |
|
| 1717 | 1716 | |
| 1718 | 1717 | return $this->download( |
| 1719 | 1718 | $_POST['data_document_name'], |
| 1720 | - explode(',',$_POST['data_checked']), |
|
| 1719 | + explode(',', $_POST['data_checked']), |
|
| 1721 | 1720 | '', |
| 1722 | 1721 | $_POST['data_document_dir'] |
| 1723 | 1722 | ); |
@@ -1731,18 +1730,18 @@ discard block |
||
| 1731 | 1730 | * @param array|string $mime_filter=null allowed mime type(s), default all, negative filter if $mime_filter[0] === '!' |
| 1732 | 1731 | * @return array List of documents, suitable for a selectbox. The key is document_<filename>. |
| 1733 | 1732 | */ |
| 1734 | - public static function get_documents($dirs, $prefix='document_', $mime_filter=null, $app='') |
|
| 1733 | + public static function get_documents($dirs, $prefix = 'document_', $mime_filter = null, $app = '') |
|
| 1735 | 1734 | { |
| 1736 | - $export_limit=self::getExportLimit($app); |
|
| 1737 | - if (!$dirs || (!self::hasExportLimit($export_limit,'ISALLOWED') && !self::is_export_limit_excepted())) return array(); |
|
| 1735 | + $export_limit = self::getExportLimit($app); |
|
| 1736 | + if (!$dirs || (!self::hasExportLimit($export_limit, 'ISALLOWED') && !self::is_export_limit_excepted())) return array(); |
|
| 1738 | 1737 | |
| 1739 | 1738 | // split multiple comma or whitespace separated directories |
| 1740 | 1739 | // to still allow space or comma in dirnames, we also use the trailing slash of all pathes to split |
| 1741 | 1740 | if (count($dirs = preg_split('/[,\s]+\//', $dirs)) > 1) |
| 1742 | 1741 | { |
| 1743 | - foreach($dirs as $n => &$d) |
|
| 1742 | + foreach ($dirs as $n => &$d) |
|
| 1744 | 1743 | { |
| 1745 | - if ($n) $d = '/'.$d; // re-adding trailing slash removed by split |
|
| 1744 | + if ($n) $d = '/'.$d; // re-adding trailing slash removed by split |
|
| 1746 | 1745 | } |
| 1747 | 1746 | } |
| 1748 | 1747 | if ($mime_filter && ($negativ_filter = $mime_filter[0] === '!')) |
@@ -1757,15 +1756,15 @@ discard block |
||
| 1757 | 1756 | } |
| 1758 | 1757 | } |
| 1759 | 1758 | $list = array(); |
| 1760 | - foreach($dirs as $dir) |
|
| 1759 | + foreach ($dirs as $dir) |
|
| 1761 | 1760 | { |
| 1762 | - if (($files = Api\Vfs::find($dir,array('need_mime'=>true),true))) |
|
| 1761 | + if (($files = Api\Vfs::find($dir, array('need_mime'=>true), true))) |
|
| 1763 | 1762 | { |
| 1764 | - foreach($files as $file) |
|
| 1763 | + foreach ($files as $file) |
|
| 1765 | 1764 | { |
| 1766 | 1765 | // return only the mime-types we support |
| 1767 | - $parts = explode('.',$file['name']); |
|
| 1768 | - if (!self::is_implemented($file['mime'],'.'.array_pop($parts))) continue; |
|
| 1766 | + $parts = explode('.', $file['name']); |
|
| 1767 | + if (!self::is_implemented($file['mime'], '.'.array_pop($parts))) continue; |
|
| 1769 | 1768 | if ($mime_filter && $negativ_filter === in_array($file['mime'], (array)$mime_filter)) continue; |
| 1770 | 1769 | $list[$prefix.$file['name']] = Api\Vfs::decodePath($file['name']); |
| 1771 | 1770 | } |
@@ -1792,14 +1791,14 @@ discard block |
||
| 1792 | 1791 | * @param int|string $export_limit =null export-limit, default $GLOBALS['egw_info']['server']['export_limit'] |
| 1793 | 1792 | * @return array see nextmatch_widget::egw_actions |
| 1794 | 1793 | */ |
| 1795 | - public static function document_action($dirs, $group=0, $caption='Insert in document', $prefix='document_', $default_doc='', |
|
| 1796 | - $export_limit=null) |
|
| 1794 | + public static function document_action($dirs, $group = 0, $caption = 'Insert in document', $prefix = 'document_', $default_doc = '', |
|
| 1795 | + $export_limit = null) |
|
| 1797 | 1796 | { |
| 1798 | 1797 | $documents = array(); |
| 1799 | 1798 | if ($export_limit == null) $export_limit = self::getExportLimit(); // check if there is a globalsetting |
| 1800 | 1799 | if ($default_doc && ($file = Api\Vfs::stat($default_doc))) // put default document on top |
| 1801 | 1800 | { |
| 1802 | - if(!$file['mime']) |
|
| 1801 | + if (!$file['mime']) |
|
| 1803 | 1802 | { |
| 1804 | 1803 | $file['mime'] = Api\Vfs::mime_content_type($default_doc); |
| 1805 | 1804 | $file['path'] = $default_doc; |
@@ -1808,7 +1807,7 @@ discard block |
||
| 1808 | 1807 | 'icon' => Api\Vfs::mime_icon($file['mime']), |
| 1809 | 1808 | 'caption' => Api\Vfs::decodePath(Api\Vfs::basename($default_doc)), |
| 1810 | 1809 | 'group' => 1, |
| 1811 | - 'postSubmit' => true, // download needs post submit (not Ajax) to work |
|
| 1810 | + 'postSubmit' => true, // download needs post submit (not Ajax) to work |
|
| 1812 | 1811 | ); |
| 1813 | 1812 | if ($file['mime'] == 'message/rfc822') |
| 1814 | 1813 | { |
@@ -1823,28 +1822,28 @@ discard block |
||
| 1823 | 1822 | // to still allow space or comma in dirnames, we also use the trailing slash of all pathes to split |
| 1824 | 1823 | if (count($dirs = preg_split('/[,\s]+\//', $dirs)) > 1) |
| 1825 | 1824 | { |
| 1826 | - foreach($dirs as $n => &$d) |
|
| 1825 | + foreach ($dirs as $n => &$d) |
|
| 1827 | 1826 | { |
| 1828 | - if ($n) $d = '/'.$d; // re-adding trailing slash removed by split |
|
| 1827 | + if ($n) $d = '/'.$d; // re-adding trailing slash removed by split |
|
| 1829 | 1828 | } |
| 1830 | 1829 | } |
| 1831 | - foreach($dirs as $dir) |
|
| 1830 | + foreach ($dirs as $dir) |
|
| 1832 | 1831 | { |
| 1833 | - $files += Api\Vfs::find($dir,array( |
|
| 1832 | + $files += Api\Vfs::find($dir, array( |
|
| 1834 | 1833 | 'need_mime' => true, |
| 1835 | 1834 | 'order' => 'fs_name', |
| 1836 | 1835 | 'sort' => 'ASC', |
| 1837 | - ),true); |
|
| 1836 | + ), true); |
|
| 1838 | 1837 | } |
| 1839 | 1838 | } |
| 1840 | 1839 | |
| 1841 | 1840 | $dircount = array(); |
| 1842 | - foreach($files as $key => $file) |
|
| 1841 | + foreach ($files as $key => $file) |
|
| 1843 | 1842 | { |
| 1844 | 1843 | // use only the mime-types we support |
| 1845 | - $parts = explode('.',$file['name']); |
|
| 1846 | - if (!self::is_implemented($file['mime'],'.'.array_pop($parts)) || |
|
| 1847 | - !Api\Vfs::check_access($file['path'], Api\Vfs::READABLE, $file) || // remove files not readable by user |
|
| 1844 | + $parts = explode('.', $file['name']); |
|
| 1845 | + if (!self::is_implemented($file['mime'], '.'.array_pop($parts)) || |
|
| 1846 | + !Api\Vfs::check_access($file['path'], Api\Vfs::READABLE, $file) || // remove files not readable by user |
|
| 1848 | 1847 | $file['path'] === $default_doc) // default doc already added |
| 1849 | 1848 | { |
| 1850 | 1849 | unset($files[$key]); |
@@ -1852,40 +1851,40 @@ discard block |
||
| 1852 | 1851 | else |
| 1853 | 1852 | { |
| 1854 | 1853 | $dirname = Api\Vfs::dirname($file['path']); |
| 1855 | - if(!isset($dircount[$dirname])) |
|
| 1854 | + if (!isset($dircount[$dirname])) |
|
| 1856 | 1855 | { |
| 1857 | 1856 | $dircount[$dirname] = 1; |
| 1858 | 1857 | } |
| 1859 | 1858 | else |
| 1860 | 1859 | { |
| 1861 | - $dircount[$dirname] ++; |
|
| 1860 | + $dircount[$dirname]++; |
|
| 1862 | 1861 | } |
| 1863 | 1862 | } |
| 1864 | 1863 | } |
| 1865 | - foreach($files as $file) |
|
| 1864 | + foreach ($files as $file) |
|
| 1866 | 1865 | { |
| 1867 | 1866 | if (count($dircount) > 1) |
| 1868 | 1867 | { |
| 1869 | 1868 | $name_arr = explode('/', $file['name']); |
| 1870 | 1869 | $current_level = &$documents; |
| 1871 | - for($count = 0; $count < count($name_arr); $count++) |
|
| 1870 | + for ($count = 0; $count < count($name_arr); $count++) |
|
| 1872 | 1871 | { |
| 1873 | - if($count == 0) |
|
| 1872 | + if ($count == 0) |
|
| 1874 | 1873 | { |
| 1875 | 1874 | $current_level = &$documents; |
| 1876 | 1875 | } |
| 1877 | 1876 | else |
| 1878 | 1877 | { |
| 1879 | - $current_level = &$current_level[$prefix.$name_arr[($count-1)]]['children']; |
|
| 1878 | + $current_level = &$current_level[$prefix.$name_arr[($count - 1)]]['children']; |
|
| 1880 | 1879 | } |
| 1881 | - switch($count) |
|
| 1880 | + switch ($count) |
|
| 1882 | 1881 | { |
| 1883 | - case (count($name_arr)-1): |
|
| 1882 | + case (count($name_arr) - 1): |
|
| 1884 | 1883 | $current_level[$prefix.$file['name']] = array( |
| 1885 | 1884 | 'icon' => Api\Vfs::mime_icon($file['mime']), |
| 1886 | 1885 | 'caption' => Api\Vfs::decodePath($name_arr[$count]), |
| 1887 | 1886 | 'group' => 2, |
| 1888 | - 'postSubmit' => true, // download needs post submit (not Ajax) to work |
|
| 1887 | + 'postSubmit' => true, // download needs post submit (not Ajax) to work |
|
| 1889 | 1888 | ); |
| 1890 | 1889 | if ($file['mime'] == 'message/rfc822') |
| 1891 | 1890 | { |
@@ -1894,7 +1893,7 @@ discard block |
||
| 1894 | 1893 | break; |
| 1895 | 1894 | |
| 1896 | 1895 | default: |
| 1897 | - if(!is_array($current_level[$prefix.$name_arr[$count]])) |
|
| 1896 | + if (!is_array($current_level[$prefix.$name_arr[$count]])) |
|
| 1898 | 1897 | { |
| 1899 | 1898 | // create parent folder |
| 1900 | 1899 | $current_level[$prefix.$name_arr[$count]] = array( |
@@ -1921,7 +1920,7 @@ discard block |
||
| 1921 | 1920 | } |
| 1922 | 1921 | $documents[$file['mime']]['children'][$prefix.$file['name']] = array( |
| 1923 | 1922 | 'caption' => Api\Vfs::decodePath($file['name']), |
| 1924 | - 'postSubmit' => true, // download needs post submit (not Ajax) to work |
|
| 1923 | + 'postSubmit' => true, // download needs post submit (not Ajax) to work |
|
| 1925 | 1924 | ); |
| 1926 | 1925 | if ($file['mime'] == 'message/rfc822') |
| 1927 | 1926 | { |
@@ -1934,7 +1933,7 @@ discard block |
||
| 1934 | 1933 | 'icon' => Api\Vfs::mime_icon($file['mime']), |
| 1935 | 1934 | 'caption' => Api\Vfs::decodePath($file['name']), |
| 1936 | 1935 | 'group' => 2, |
| 1937 | - 'postSubmit' => true, // download needs post submit (not Ajax) to work |
|
| 1936 | + 'postSubmit' => true, // download needs post submit (not Ajax) to work |
|
| 1938 | 1937 | ); |
| 1939 | 1938 | if ($file['mime'] == 'message/rfc822') |
| 1940 | 1939 | { |
@@ -1948,8 +1947,8 @@ discard block |
||
| 1948 | 1947 | 'caption' => $caption, |
| 1949 | 1948 | 'children' => $documents, |
| 1950 | 1949 | // disable action if no document or export completly forbidden for non-admins |
| 1951 | - 'enabled' => (boolean)$documents && (self::hasExportLimit($export_limit,'ISALLOWED') || self::is_export_limit_excepted()), |
|
| 1952 | - 'hideOnDisabled' => true, // do not show 'Insert in document', if no documents defined or no export allowed |
|
| 1950 | + 'enabled' => (boolean)$documents && (self::hasExportLimit($export_limit, 'ISALLOWED') || self::is_export_limit_excepted()), |
|
| 1951 | + 'hideOnDisabled' => true, // do not show 'Insert in document', if no documents defined or no export allowed |
|
| 1953 | 1952 | 'group' => $group, |
| 1954 | 1953 | ); |
| 1955 | 1954 | } |
@@ -1980,14 +1979,14 @@ discard block |
||
| 1980 | 1979 | ); |
| 1981 | 1980 | |
| 1982 | 1981 | // egw.open() used if only 1 row selected |
| 1983 | - $action['egw_open'] = 'edit-mail--'.implode('&',$extra); |
|
| 1984 | - $action['target'] = 'compose_' .$file['path']; |
|
| 1982 | + $action['egw_open'] = 'edit-mail--'.implode('&', $extra); |
|
| 1983 | + $action['target'] = 'compose_'.$file['path']; |
|
| 1985 | 1984 | |
| 1986 | 1985 | // long_task runs menuaction once for each selected row |
| 1987 | 1986 | $action['nm_action'] = 'long_task'; |
| 1988 | 1987 | $action['popup'] = Api\Link::get_registry('mail', 'edit_popup'); |
| 1989 | - $action['message'] = lang('insert in %1',Api\Vfs::decodePath($file['name'])); |
|
| 1990 | - $action['menuaction'] = 'mail.mail_compose.ajax_merge&document='.$file['path'].'&merge='. get_called_class(); |
|
| 1988 | + $action['message'] = lang('insert in %1', Api\Vfs::decodePath($file['name'])); |
|
| 1989 | + $action['menuaction'] = 'mail.mail_compose.ajax_merge&document='.$file['path'].'&merge='.get_called_class(); |
|
| 1991 | 1990 | } |
| 1992 | 1991 | |
| 1993 | 1992 | /** |
@@ -1999,15 +1998,15 @@ discard block |
||
| 1999 | 1998 | */ |
| 2000 | 1999 | public static function check_document(&$document, $dirs) |
| 2001 | 2000 | { |
| 2002 | - if($document[0] !== '/') |
|
| 2001 | + if ($document[0] !== '/') |
|
| 2003 | 2002 | { |
| 2004 | 2003 | // split multiple comma or whitespace separated directories |
| 2005 | 2004 | // to still allow space or comma in dirnames, we also use the trailing slash of all pathes to split |
| 2006 | 2005 | if ($dirs && ($dirs = preg_split('/[,\s]+\//', $dirs))) |
| 2007 | 2006 | { |
| 2008 | - foreach($dirs as $n => $dir) |
|
| 2007 | + foreach ($dirs as $n => $dir) |
|
| 2009 | 2008 | { |
| 2010 | - if ($n) $dir = '/'.$dir; // re-adding trailing slash removed by split |
|
| 2009 | + if ($n) $dir = '/'.$dir; // re-adding trailing slash removed by split |
|
| 2011 | 2010 | if (Api\Vfs::stat($dir.'/'.$document) && Api\Vfs::is_readable($dir.'/'.$document)) |
| 2012 | 2011 | { |
| 2013 | 2012 | $document = $dir.'/'.$document; |
@@ -2021,7 +2020,7 @@ discard block |
||
| 2021 | 2020 | return false; |
| 2022 | 2021 | } |
| 2023 | 2022 | //error_log(__METHOD__."('$document', dirs='$dirs') returning 'Document '$document' does not exist or is not readable for you!'"); |
| 2024 | - return lang("Document '%1' does not exist or is not readable for you!",$document); |
|
| 2023 | + return lang("Document '%1' does not exist or is not readable for you!", $document); |
|
| 2025 | 2024 | } |
| 2026 | 2025 | |
| 2027 | 2026 | /** |
@@ -2042,16 +2041,16 @@ discard block |
||
| 2042 | 2041 | * @param string $_mimetype ='' |
| 2043 | 2042 | * @return string |
| 2044 | 2043 | */ |
| 2045 | - static public function number_format($number,$num_decimal_places=2,$_mimetype='') |
|
| 2044 | + static public function number_format($number, $num_decimal_places = 2, $_mimetype = '') |
|
| 2046 | 2045 | { |
| 2047 | 2046 | if ((string)$number === '') return ''; |
| 2048 | 2047 | //error_log(__METHOD__.$_mimetype); |
| 2049 | - switch($_mimetype) |
|
| 2048 | + switch ($_mimetype) |
|
| 2050 | 2049 | { |
| 2051 | 2050 | case 'application/xml': // Excel 2003 |
| 2052 | 2051 | case 'application/vnd.oasis.opendocument.spreadsheet': // OO.o spreadsheet |
| 2053 | - return number_format(str_replace(' ','',$number),$num_decimal_places,'.',''); |
|
| 2052 | + return number_format(str_replace(' ', '', $number), $num_decimal_places, '.', ''); |
|
| 2054 | 2053 | } |
| 2055 | - return Api\Etemplate::number_format($number,$num_decimal_places); |
|
| 2054 | + return Api\Etemplate::number_format($number, $num_decimal_places); |
|
| 2056 | 2055 | } |
| 2057 | 2056 | } |
@@ -528,7 +528,7 @@ discard block |
||
| 528 | 528 | * @param array $data current entry |
| 529 | 529 | * @param array $old = null old/last state of the entry or null for a new entry |
| 530 | 530 | * @param boolean $deleted = null can be set to true to let the tracking know the item got deleted or undelted |
| 531 | - * @param array $email_notified=null if present will return the emails notified, if given emails in that list will not be notified |
|
| 531 | + * @param array $email_notified if present will return the emails notified, if given emails in that list will not be notified |
|
| 532 | 532 | * @return boolean true on success, false on error (error messages are in $this->errors) |
| 533 | 533 | */ |
| 534 | 534 | public function do_notifications($data,$old,$deleted=null,&$email_notified=null) |
@@ -824,7 +824,6 @@ discard block |
||
| 824 | 824 | * The default implementation prefers depending on the prefer_user_as_sender class-var the user over |
| 825 | 825 | * what is returned by get_config('sender'). |
| 826 | 826 | * |
| 827 | - * @param int $user account_lid of user |
|
| 828 | 827 | * @param array $data |
| 829 | 828 | * @param array $old |
| 830 | 829 | * @param bool $prefer_id returns the userid rather than email |
@@ -194,12 +194,12 @@ discard block |
||
| 194 | 194 | { |
| 195 | 195 | if ($cf_app) |
| 196 | 196 | { |
| 197 | - $linkable_cf_types = array('link-entry')+array_keys(Api\Link::app_list()); |
|
| 198 | - foreach(Customfields::get($cf_app, true) as $cf_name => $cf_data) |
|
| 197 | + $linkable_cf_types = array('link-entry') + array_keys(Api\Link::app_list()); |
|
| 198 | + foreach (Customfields::get($cf_app, true) as $cf_name => $cf_data) |
|
| 199 | 199 | { |
| 200 | 200 | $this->field2history['#'.$cf_name] = '#'.$cf_name; |
| 201 | 201 | |
| 202 | - if (in_array($cf_data['type'],$linkable_cf_types)) |
|
| 202 | + if (in_array($cf_data['type'], $linkable_cf_types)) |
|
| 203 | 203 | { |
| 204 | 204 | $this->cf_link_fields['#'.$cf_name] = $cf_data['type'] == 'link-entry' ? '' : $cf_data['type']; |
| 205 | 205 | } |
@@ -216,9 +216,9 @@ discard block |
||
| 216 | 216 | * @param int|string $receiver nummeric account_id or email address |
| 217 | 217 | * @return array of details as array with values for keys 'label','value','type' |
| 218 | 218 | */ |
| 219 | - function get_details($data,$receiver=null) |
|
| 219 | + function get_details($data, $receiver = null) |
|
| 220 | 220 | { |
| 221 | - unset($data, $receiver); // not uses as just a stub |
|
| 221 | + unset($data, $receiver); // not uses as just a stub |
|
| 222 | 222 | |
| 223 | 223 | return array(); |
| 224 | 224 | } |
@@ -230,14 +230,14 @@ discard block |
||
| 230 | 230 | * @param string $only_type2 = null if given only return fields of type2 == $only_type2 |
| 231 | 231 | * @return array of details as array with values for keys 'label','value','type' |
| 232 | 232 | */ |
| 233 | - function get_customfields($data, $only_type2=null) |
|
| 233 | + function get_customfields($data, $only_type2 = null) |
|
| 234 | 234 | { |
| 235 | 235 | $details = array(); |
| 236 | 236 | |
| 237 | - if (($cfs = Customfields::get($this->app, $all_private_too=false, $only_type2))) |
|
| 237 | + if (($cfs = Customfields::get($this->app, $all_private_too = false, $only_type2))) |
|
| 238 | 238 | { |
| 239 | 239 | $header_done = false; |
| 240 | - foreach($cfs as $name => $field) |
|
| 240 | + foreach ($cfs as $name => $field) |
|
| 241 | 241 | { |
| 242 | 242 | if (in_array($field['type'], Customfields::$non_printable_fields)) continue; |
| 243 | 243 | |
@@ -278,9 +278,9 @@ discard block |
||
| 278 | 278 | * @param array $old = null old/last state of the entry or null for a new entry |
| 279 | 279 | * @return mixed |
| 280 | 280 | */ |
| 281 | - protected function get_config($name,$data,$old=null) |
|
| 281 | + protected function get_config($name, $data, $old = null) |
|
| 282 | 282 | { |
| 283 | - unset($name, $data, $old); // not used as just a stub |
|
| 283 | + unset($name, $data, $old); // not used as just a stub |
|
| 284 | 284 | |
| 285 | 285 | return null; |
| 286 | 286 | } |
@@ -296,7 +296,7 @@ discard block |
||
| 296 | 296 | * @param boolean $skip_notification = false do NOT send any notification |
| 297 | 297 | * @return int|boolean false on error, integer number of changes logged or true for new entries ($old == null) |
| 298 | 298 | */ |
| 299 | - public function track(array $data,array $old=null,$user=null,$deleted=null,array $changed_fields=null,$skip_notification=false) |
|
| 299 | + public function track(array $data, array $old = null, $user = null, $deleted = null, array $changed_fields = null, $skip_notification = false) |
|
| 300 | 300 | { |
| 301 | 301 | $this->user = !is_null($user) ? $user : $GLOBALS['egw_info']['user']['account_id']; |
| 302 | 302 | |
@@ -305,7 +305,7 @@ discard block |
||
| 305 | 305 | if ($old && $this->field2history) |
| 306 | 306 | { |
| 307 | 307 | //error_log(__METHOD__.__LINE__.' Changedfields:'.print_r($changed_fields,true)); |
| 308 | - $changes = $this->save_history($data,$old,$deleted,$changed_fields); |
|
| 308 | + $changes = $this->save_history($data, $old, $deleted, $changed_fields); |
|
| 309 | 309 | //error_log(__METHOD__.__LINE__.' Changedfields:'.print_r($changed_fields,true)); |
| 310 | 310 | //error_log(__METHOD__.__LINE__.' Changes:'.print_r($changes,true)); |
| 311 | 311 | } |
@@ -313,10 +313,10 @@ discard block |
||
| 313 | 313 | //error_log(__METHOD__.__LINE__.' LinkFields:'.array2string($this->cf_link_fields)); |
| 314 | 314 | if ($changes && $this->cf_link_fields) |
| 315 | 315 | { |
| 316 | - $this->update_links($data,(array)$old); |
|
| 316 | + $this->update_links($data, (array)$old); |
|
| 317 | 317 | } |
| 318 | 318 | // do not run do_notifications if we have no changes |
| 319 | - if ($changes && !$skip_notification && !$this->do_notifications($data,$old,$deleted)) |
|
| 319 | + if ($changes && !$skip_notification && !$this->do_notifications($data, $old, $deleted)) |
|
| 320 | 320 | { |
| 321 | 321 | $changes = false; |
| 322 | 322 | } |
@@ -333,45 +333,45 @@ discard block |
||
| 333 | 333 | { |
| 334 | 334 | //error_log(__METHOD__.__LINE__.array2string($data).function_backtrace()); |
| 335 | 335 | //error_log(__METHOD__.__LINE__.array2string($this->cf_link_fields)); |
| 336 | - foreach(array_keys((array)$this->cf_link_fields) as $name) |
|
| 336 | + foreach (array_keys((array)$this->cf_link_fields) as $name) |
|
| 337 | 337 | { |
| 338 | 338 | //error_log(__METHOD__.__LINE__.' Field:'.$name. ' Value (new):'.array2string($data[$name])); |
| 339 | 339 | //error_log(__METHOD__.__LINE__.' Field:'.$name. ' Value (old):'.array2string($old[$name])); |
| 340 | - if (is_array($data[$name]) && array_key_exists('id',$data[$name])) $data[$name] = $data[$name]['id']; |
|
| 341 | - if (is_array($old[$name]) && array_key_exists('id',$old[$name])) $old[$name] = $old[$name]['id']; |
|
| 340 | + if (is_array($data[$name]) && array_key_exists('id', $data[$name])) $data[$name] = $data[$name]['id']; |
|
| 341 | + if (is_array($old[$name]) && array_key_exists('id', $old[$name])) $old[$name] = $old[$name]['id']; |
|
| 342 | 342 | //error_log(__METHOD__.__LINE__.'(After processing) Field:'.$name. ' Value (new):'.array2string($data[$name])); |
| 343 | 343 | //error_log(__METHOD__.__LINE__.'(After processing) Field:'.$name. ' Value (old):'.array2string($old[$name])); |
| 344 | 344 | } |
| 345 | - $current_ids = array_unique(array_diff(array_intersect_key($data,$this->cf_link_fields),array('',0,NULL))); |
|
| 346 | - $old_ids = $old ? array_unique(array_diff(array_intersect_key($old,$this->cf_link_fields),array('',0,NULL))) : array(); |
|
| 345 | + $current_ids = array_unique(array_diff(array_intersect_key($data, $this->cf_link_fields), array('', 0, NULL))); |
|
| 346 | + $old_ids = $old ? array_unique(array_diff(array_intersect_key($old, $this->cf_link_fields), array('', 0, NULL))) : array(); |
|
| 347 | 347 | //error_log(__METHOD__.__LINE__.array2string($current_ids)); |
| 348 | 348 | //error_log(__METHOD__.__LINE__.array2string($old_ids)); |
| 349 | 349 | // create links for added application entry |
| 350 | - foreach(array_diff($current_ids,$old_ids) as $name => $id) |
|
| 350 | + foreach (array_diff($current_ids, $old_ids) as $name => $id) |
|
| 351 | 351 | { |
| 352 | 352 | if (!($app = $this->cf_link_fields[$name])) |
| 353 | 353 | { |
| 354 | - list($app,$id) = explode(':',$id); |
|
| 355 | - if (!$id) continue; // can be eg. 'addressbook:', if no contact selected |
|
| 354 | + list($app, $id) = explode(':', $id); |
|
| 355 | + if (!$id) continue; // can be eg. 'addressbook:', if no contact selected |
|
| 356 | 356 | } |
| 357 | 357 | $source_id = $data[$this->id_field]; |
| 358 | 358 | //error_log(__METHOD__.__LINE__.array2string($source_id)); |
| 359 | - if ($source_id) Api\Link::link($this->app,$source_id,$app,$id); |
|
| 359 | + if ($source_id) Api\Link::link($this->app, $source_id, $app, $id); |
|
| 360 | 360 | //error_log(__METHOD__.__LINE__."Api\Link::link('$this->app',".array2string($source_id).",'$app',$id);"); |
| 361 | 361 | //echo "<p>Api\Link::link('$this->app',{$data[$this->id_field]},'$app',$id);</p>\n"; |
| 362 | 362 | } |
| 363 | 363 | |
| 364 | 364 | // unlink removed application entries |
| 365 | - foreach(array_diff($old_ids,$current_ids) as $name => $id) |
|
| 365 | + foreach (array_diff($old_ids, $current_ids) as $name => $id) |
|
| 366 | 366 | { |
| 367 | - if (!isset($data[$name])) continue; // ignore not set link cf's, eg. from sync clients |
|
| 367 | + if (!isset($data[$name])) continue; // ignore not set link cf's, eg. from sync clients |
|
| 368 | 368 | if (!($app = $this->cf_link_fields[$name])) |
| 369 | 369 | { |
| 370 | - list($app,$id) = explode(':',$id); |
|
| 370 | + list($app, $id) = explode(':', $id); |
|
| 371 | 371 | if (!$id) continue; |
| 372 | 372 | } |
| 373 | 373 | $source_id = $data[$this->id_field]; |
| 374 | - if ($source_id) Api\Link::unlink(null,$this->app,$source_id,0,$app,$id); |
|
| 374 | + if ($source_id) Api\Link::unlink(null, $this->app, $source_id, 0, $app, $id); |
|
| 375 | 375 | //echo "<p>Api\Link::unlink(NULL,'$this->app',{$data[$this->id_field]},0,'$app',$id);</p>\n"; |
| 376 | 376 | } |
| 377 | 377 | } |
@@ -386,14 +386,14 @@ discard block |
||
| 386 | 386 | * @param array $changed_fields = null changed fields from ealier call to $this->changed_fields($data,$old), to not compute it again |
| 387 | 387 | * @return int number of log-entries made |
| 388 | 388 | */ |
| 389 | - protected function save_history(array $data,array $old=null,$deleted=null,array $changed_fields=null) |
|
| 389 | + protected function save_history(array $data, array $old = null, $deleted = null, array $changed_fields = null) |
|
| 390 | 390 | { |
| 391 | - unset($deleted); // not used, but required by function signature |
|
| 391 | + unset($deleted); // not used, but required by function signature |
|
| 392 | 392 | |
| 393 | 393 | //error_log(__METHOD__.__LINE__.' Changedfields:'.array2string($changed_fields)); |
| 394 | 394 | if (is_null($changed_fields)) |
| 395 | 395 | { |
| 396 | - $changed_fields = self::changed_fields($data,$old); |
|
| 396 | + $changed_fields = self::changed_fields($data, $old); |
|
| 397 | 397 | //error_log(__METHOD__.__LINE__.' Changedfields:'.array2string($changed_fields)); |
| 398 | 398 | } |
| 399 | 399 | if (!$changed_fields && ($old || !$GLOBALS['egw_info']['server']['log_user_agent_action'])) return 0; |
@@ -408,30 +408,30 @@ discard block |
||
| 408 | 408 | $this->historylog->add('user_agent_action', $data[$this->id_field], |
| 409 | 409 | $_SERVER['HTTP_USER_AGENT'], $_SESSION[Api\Session::EGW_SESSION_VAR]['session_action']); |
| 410 | 410 | } |
| 411 | - foreach($changed_fields as $name) |
|
| 411 | + foreach ($changed_fields as $name) |
|
| 412 | 412 | { |
| 413 | 413 | $status = isset($this->field2history[$name]) ? $this->field2history[$name] : $name; |
| 414 | 414 | //error_log(__METHOD__.__LINE__." Name $name,".' Status:'.array2string($status)); |
| 415 | 415 | if (is_array($status)) // 1:N relation --> remove common rows |
| 416 | 416 | { |
| 417 | 417 | //error_log(__METHOD__.__LINE__.' is Array'); |
| 418 | - self::compact_1_N_relation($data[$name],$status); |
|
| 419 | - self::compact_1_N_relation($old[$name],$status); |
|
| 420 | - $added = array_values(array_diff($data[$name],$old[$name])); |
|
| 421 | - $removed = array_values(array_diff($old[$name],$data[$name])); |
|
| 422 | - $n = max(array(count($added),count($removed))); |
|
| 423 | - for($i = 0; $i < $n; ++$i) |
|
| 418 | + self::compact_1_N_relation($data[$name], $status); |
|
| 419 | + self::compact_1_N_relation($old[$name], $status); |
|
| 420 | + $added = array_values(array_diff($data[$name], $old[$name])); |
|
| 421 | + $removed = array_values(array_diff($old[$name], $data[$name])); |
|
| 422 | + $n = max(array(count($added), count($removed))); |
|
| 423 | + for ($i = 0; $i < $n; ++$i) |
|
| 424 | 424 | { |
| 425 | 425 | //error_log(__METHOD__."() $i: historylog->add('$name',data['$this->id_field']={$data[$this->id_field]},".array2string($added[$i]).','.array2string($removed[$i])); |
| 426 | - $this->historylog->add($name,$data[$this->id_field],$added[$i],$removed[$i]); |
|
| 426 | + $this->historylog->add($name, $data[$this->id_field], $added[$i], $removed[$i]); |
|
| 427 | 427 | } |
| 428 | 428 | } |
| 429 | 429 | else |
| 430 | 430 | { |
| 431 | 431 | //error_log(__METHOD__.__LINE__.' IDField:'.array2string($this->id_field).' ->'.$data[$this->id_field].' New:'.$data[$name].' Old:'.$old[$name]); |
| 432 | - $this->historylog->add($status,$data[$this->id_field], |
|
| 433 | - is_array($data[$name]) ? implode(',',$data[$name]) : $data[$name], |
|
| 434 | - is_array($old[$name]) ? implode(',',$old[$name]) : $old[$name]); |
|
| 432 | + $this->historylog->add($status, $data[$this->id_field], |
|
| 433 | + is_array($data[$name]) ? implode(',', $data[$name]) : $data[$name], |
|
| 434 | + is_array($old[$name]) ? implode(',', $old[$name]) : $old[$name]); |
|
| 435 | 435 | } |
| 436 | 436 | } |
| 437 | 437 | //error_log(__METHOD__.__LINE__.' return:'.count($changed_fields)); |
@@ -447,28 +447,28 @@ discard block |
||
| 447 | 447 | * @param array $old = null |
| 448 | 448 | * @return array of keys with different values in $data and $old |
| 449 | 449 | */ |
| 450 | - public function changed_fields(array $data,array $old=null) |
|
| 450 | + public function changed_fields(array $data, array $old = null) |
|
| 451 | 451 | { |
| 452 | 452 | if (is_null($old)) return array_keys($data); |
| 453 | 453 | $changed_fields = array(); |
| 454 | - foreach($this->field2history as $name => $status) |
|
| 454 | + foreach ($this->field2history as $name => $status) |
|
| 455 | 455 | { |
| 456 | - if (!$old[$name] && !$data[$name]) continue; // treat all sorts of empty equally |
|
| 456 | + if (!$old[$name] && !$data[$name]) continue; // treat all sorts of empty equally |
|
| 457 | 457 | |
| 458 | - if ($name[0] == '#' && !isset($data[$name])) continue; // no set customfields are not stored, therefore not changed |
|
| 458 | + if ($name[0] == '#' && !isset($data[$name])) continue; // no set customfields are not stored, therefore not changed |
|
| 459 | 459 | |
| 460 | 460 | if (is_array($status)) // 1:N relation |
| 461 | 461 | { |
| 462 | - self::compact_1_N_relation($data[$name],$status); |
|
| 463 | - self::compact_1_N_relation($old[$name],$status); |
|
| 462 | + self::compact_1_N_relation($data[$name], $status); |
|
| 463 | + self::compact_1_N_relation($old[$name], $status); |
|
| 464 | 464 | } |
| 465 | 465 | if ($old[$name] != $data[$name]) |
| 466 | 466 | { |
| 467 | 467 | // normalize arrays, we do NOT care for the order of multiselections |
| 468 | 468 | if (is_array($data[$name]) || is_array($old[$name])) |
| 469 | 469 | { |
| 470 | - if (!is_array($data[$name])) $data[$name] = explode(',',$data[$name]); |
|
| 471 | - if (!is_array($old[$name])) $old[$name] = explode(',',$old[$name]); |
|
| 470 | + if (!is_array($data[$name])) $data[$name] = explode(',', $data[$name]); |
|
| 471 | + if (!is_array($old[$name])) $old[$name] = explode(',', $old[$name]); |
|
| 472 | 472 | if (count($data[$name]) == count($old[$name])) |
| 473 | 473 | { |
| 474 | 474 | sort($data[$name]); |
@@ -478,13 +478,13 @@ discard block |
||
| 478 | 478 | } |
| 479 | 479 | elseif (str_replace("\r", '', $old[$name]) == str_replace("\r", '', $data[$name])) |
| 480 | 480 | { |
| 481 | - continue; // change only in CR (eg. different OS) --> ignore |
|
| 481 | + continue; // change only in CR (eg. different OS) --> ignore |
|
| 482 | 482 | } |
| 483 | 483 | $changed_fields[] = $name; |
| 484 | 484 | //echo "<p>$name: ".array2string($data[$name]).' != '.array2string($old[$name])."</p>\n"; |
| 485 | 485 | } |
| 486 | 486 | } |
| 487 | - foreach($data as $name => $value) |
|
| 487 | + foreach ($data as $name => $value) |
|
| 488 | 488 | { |
| 489 | 489 | if ($name[0] == '#' && $name[1] == '#' && $value !== $old[$name]) |
| 490 | 490 | { |
@@ -501,18 +501,18 @@ discard block |
||
| 501 | 501 | * @param array &$rows rows of the 1:N relation |
| 502 | 502 | * @param array $cols field names as values |
| 503 | 503 | */ |
| 504 | - private static function compact_1_N_relation(&$rows,array $cols) |
|
| 504 | + private static function compact_1_N_relation(&$rows, array $cols) |
|
| 505 | 505 | { |
| 506 | 506 | if (is_array($rows)) |
| 507 | 507 | { |
| 508 | - foreach($rows as &$row) |
|
| 508 | + foreach ($rows as &$row) |
|
| 509 | 509 | { |
| 510 | 510 | $values = array(); |
| 511 | - foreach($cols as $col) |
|
| 511 | + foreach ($cols as $col) |
|
| 512 | 512 | { |
| 513 | 513 | $values[] = $row[$col]; |
| 514 | 514 | } |
| 515 | - $row = implode(self::ONE2N_SEPERATOR,$values); |
|
| 515 | + $row = implode(self::ONE2N_SEPERATOR, $values); |
|
| 516 | 516 | } |
| 517 | 517 | } |
| 518 | 518 | else |
@@ -531,7 +531,7 @@ discard block |
||
| 531 | 531 | * @param array $email_notified=null if present will return the emails notified, if given emails in that list will not be notified |
| 532 | 532 | * @return boolean true on success, false on error (error messages are in $this->errors) |
| 533 | 533 | */ |
| 534 | - public function do_notifications($data,$old,$deleted=null,&$email_notified=null) |
|
| 534 | + public function do_notifications($data, $old, $deleted = null, &$email_notified = null) |
|
| 535 | 535 | { |
| 536 | 536 | $this->errors = $email_sent = array(); |
| 537 | 537 | if (!empty($email_notified) && is_array($email_notified)) $email_sent = $email_notified; |
@@ -539,19 +539,19 @@ discard block |
||
| 539 | 539 | if (!$this->notify_current_user && $this->user) // do we have a current user and should we notify the current user about his own changes |
| 540 | 540 | { |
| 541 | 541 | //error_log("do_notificaton() adding user=$this->user to email_sent, to not notify him"); |
| 542 | - $email_sent[] = $GLOBALS['egw']->accounts->id2name($this->user,'account_email'); |
|
| 542 | + $email_sent[] = $GLOBALS['egw']->accounts->id2name($this->user, 'account_email'); |
|
| 543 | 543 | } |
| 544 | - $skip_notify = $this->get_config('skip_notify',$data,$old); |
|
| 545 | - if($skip_notify && is_array($skip_notify)) |
|
| 544 | + $skip_notify = $this->get_config('skip_notify', $data, $old); |
|
| 545 | + if ($skip_notify && is_array($skip_notify)) |
|
| 546 | 546 | { |
| 547 | 547 | $email_sent = array_merge($email_sent, $skip_notify); |
| 548 | 548 | } |
| 549 | 549 | |
| 550 | 550 | // entry creator |
| 551 | - if ($this->creator_field && ($email = $GLOBALS['egw']->accounts->id2name($data[$this->creator_field],'account_email')) && |
|
| 551 | + if ($this->creator_field && ($email = $GLOBALS['egw']->accounts->id2name($data[$this->creator_field], 'account_email')) && |
|
| 552 | 552 | !in_array($email, $email_sent)) |
| 553 | 553 | { |
| 554 | - if ($this->send_notification($data,$old,$email,$data[$this->creator_field],'notify_creator')) |
|
| 554 | + if ($this->send_notification($data, $old, $email, $data[$this->creator_field], 'notify_creator')) |
|
| 555 | 555 | { |
| 556 | 556 | $email_sent[] = $email; |
| 557 | 557 | } |
@@ -560,12 +560,12 @@ discard block |
||
| 560 | 560 | // members of group when entry owned by group |
| 561 | 561 | if ($this->creator_field && $GLOBALS['egw']->accounts->get_type($data[$this->creator_field]) == 'g') |
| 562 | 562 | { |
| 563 | - foreach($GLOBALS['egw']->accounts->members($data[$this->creator_field],true) as $u) |
|
| 563 | + foreach ($GLOBALS['egw']->accounts->members($data[$this->creator_field], true) as $u) |
|
| 564 | 564 | { |
| 565 | - if (($email = $GLOBALS['egw']->accounts->id2name($u,'account_email')) && |
|
| 565 | + if (($email = $GLOBALS['egw']->accounts->id2name($u, 'account_email')) && |
|
| 566 | 566 | !in_array($email, $email_sent)) |
| 567 | 567 | { |
| 568 | - if ($this->send_notification($data,$old,$email,$u,'notify_owner_group_member')) |
|
| 568 | + if ($this->send_notification($data, $old, $email, $u, 'notify_owner_group_member')) |
|
| 569 | 569 | { |
| 570 | 570 | $email_sent[] = $email; |
| 571 | 571 | } |
@@ -582,14 +582,14 @@ discard block |
||
| 582 | 582 | if ($data[$this->assigned_field]) // current assignments |
| 583 | 583 | { |
| 584 | 584 | $assignees = is_array($data[$this->assigned_field]) ? |
| 585 | - $data[$this->assigned_field] : explode(',',$data[$this->assigned_field]); |
|
| 585 | + $data[$this->assigned_field] : explode(',', $data[$this->assigned_field]); |
|
| 586 | 586 | } |
| 587 | 587 | if ($old && $old[$this->assigned_field]) |
| 588 | 588 | { |
| 589 | 589 | $old_assignees = is_array($old[$this->assigned_field]) ? |
| 590 | - $old[$this->assigned_field] : explode(',',$old[$this->assigned_field]); |
|
| 590 | + $old[$this->assigned_field] : explode(',', $old[$this->assigned_field]); |
|
| 591 | 591 | } |
| 592 | - foreach(array_unique(array_merge($assignees,$old_assignees)) as $assignee) |
|
| 592 | + foreach (array_unique(array_merge($assignees, $old_assignees)) as $assignee) |
|
| 593 | 593 | { |
| 594 | 594 | //error_log(__METHOD__."() assignee=$assignee, type=".$GLOBALS['egw']->accounts->get_type($assignee).", email=".$GLOBALS['egw']->accounts->id2name($assignee,'account_email')); |
| 595 | 595 | if (!$assignee) continue; |
@@ -597,10 +597,10 @@ discard block |
||
| 597 | 597 | // item assignee is a user |
| 598 | 598 | if ($GLOBALS['egw']->accounts->get_type($assignee) == 'u') |
| 599 | 599 | { |
| 600 | - if (($email = $GLOBALS['egw']->accounts->id2name($assignee,'account_email')) && !in_array($email, $email_sent)) |
|
| 600 | + if (($email = $GLOBALS['egw']->accounts->id2name($assignee, 'account_email')) && !in_array($email, $email_sent)) |
|
| 601 | 601 | { |
| 602 | - if ($this->send_notification($data,$old,$email,$assignee,'notify_assigned', |
|
| 603 | - in_array($assignee,$assignees) !== in_array($assignee,$old_assignees) || $deleted)) // assignment changed |
|
| 602 | + if ($this->send_notification($data, $old, $email, $assignee, 'notify_assigned', |
|
| 603 | + in_array($assignee, $assignees) !== in_array($assignee, $old_assignees) || $deleted)) // assignment changed |
|
| 604 | 604 | { |
| 605 | 605 | $email_sent[] = $email; |
| 606 | 606 | } |
@@ -608,12 +608,12 @@ discard block |
||
| 608 | 608 | } |
| 609 | 609 | else // item assignee is a group |
| 610 | 610 | { |
| 611 | - foreach($GLOBALS['egw']->accounts->members($assignee,true) as $u) |
|
| 611 | + foreach ($GLOBALS['egw']->accounts->members($assignee, true) as $u) |
|
| 612 | 612 | { |
| 613 | - if (($email = $GLOBALS['egw']->accounts->id2name($u,'account_email')) && !in_array($email, $email_sent)) |
|
| 613 | + if (($email = $GLOBALS['egw']->accounts->id2name($u, 'account_email')) && !in_array($email, $email_sent)) |
|
| 614 | 614 | { |
| 615 | - if ($this->send_notification($data,$old,$email,$u,'notify_assigned', |
|
| 616 | - in_array($u,$assignees) !== in_array($u,$old_assignees) || $deleted)) // assignment changed |
|
| 615 | + if ($this->send_notification($data, $old, $email, $u, 'notify_assigned', |
|
| 616 | + in_array($u, $assignees) !== in_array($u, $old_assignees) || $deleted)) // assignment changed |
|
| 617 | 617 | { |
| 618 | 618 | $email_sent[] = $email; |
| 619 | 619 | } |
@@ -624,14 +624,14 @@ discard block |
||
| 624 | 624 | } |
| 625 | 625 | |
| 626 | 626 | // notification copies |
| 627 | - if (($copies = $this->get_config('copy',$data,$old))) |
|
| 627 | + if (($copies = $this->get_config('copy', $data, $old))) |
|
| 628 | 628 | { |
| 629 | - $lang = $this->get_config('lang',$data,$old); |
|
| 630 | - foreach($copies as $email) |
|
| 629 | + $lang = $this->get_config('lang', $data, $old); |
|
| 630 | + foreach ($copies as $email) |
|
| 631 | 631 | { |
| 632 | - if (strchr($email,'@') !== false && !in_array($email, $email_sent)) |
|
| 632 | + if (strchr($email, '@') !== false && !in_array($email, $email_sent)) |
|
| 633 | 633 | { |
| 634 | - if ($this->send_notification($data,$old,$email,$lang,'notify_copy')) |
|
| 634 | + if ($this->send_notification($data, $old, $email, $lang, 'notify_copy')) |
|
| 635 | 635 | { |
| 636 | 636 | $email_sent[] = $email; |
| 637 | 637 | } |
@@ -676,7 +676,7 @@ discard block |
||
| 676 | 676 | * @param boolean $deleted = null can be set to true to let the tracking know the item got deleted or undelted |
| 677 | 677 | * @return boolean true on success or false if notification not requested or error (error-message is in $this->errors) |
| 678 | 678 | */ |
| 679 | - public function send_notification($data,$old,$email,$user_or_lang,$check=null,$assignment_changed=true,$deleted=null) |
|
| 679 | + public function send_notification($data, $old, $email, $user_or_lang, $check = null, $assignment_changed = true, $deleted = null) |
|
| 680 | 680 | { |
| 681 | 681 | //error_log(__METHOD__."(,,'$email',$user_or_lang,$check,$assignment_changed,$deleted)"); |
| 682 | 682 | if (!$email) return false; |
@@ -688,16 +688,16 @@ discard block |
||
| 688 | 688 | { |
| 689 | 689 | $GLOBALS['egw_info']['user']['account_id'] = $user_or_lang; |
| 690 | 690 | $GLOBALS['egw']->preferences->__construct($user_or_lang); |
| 691 | - $GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository(false); // no session prefs! |
|
| 691 | + $GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository(false); // no session prefs! |
|
| 692 | 692 | |
| 693 | 693 | if ($check && $this->check2pref) $check = $this->check2pref[$check]; |
| 694 | 694 | |
| 695 | - if ($check && !$GLOBALS['egw_info']['user']['preferences'][$this->app][$check] || // no notification requested |
|
| 695 | + if ($check && !$GLOBALS['egw_info']['user']['preferences'][$this->app][$check] || // no notification requested |
|
| 696 | 696 | // only notification about changed assignment requested |
| 697 | 697 | $check && $GLOBALS['egw_info']['user']['preferences'][$this->app][$check] === 'assignment' && !$assignment_changed || |
| 698 | 698 | $this->user == $user_or_lang && !$this->notify_current_user) // no popup for own actions |
| 699 | 699 | { |
| 700 | - $do_notify = false; // no notification requested / necessary |
|
| 700 | + $do_notify = false; // no notification requested / necessary |
|
| 701 | 701 | } |
| 702 | 702 | } |
| 703 | 703 | else |
@@ -720,33 +720,33 @@ discard block |
||
| 720 | 720 | |
| 721 | 721 | // Cache message body to not have to re-generate it every time |
| 722 | 722 | $lang = Api\Translation::$userlang; |
| 723 | - $date_format = $GLOBALS['egw_info']['user']['preferences']['common']['dateformat'] . |
|
| 723 | + $date_format = $GLOBALS['egw_info']['user']['preferences']['common']['dateformat']. |
|
| 724 | 724 | $GLOBALS['egw_info']['user']['preferences']['common']['timeformat']; |
| 725 | 725 | |
| 726 | 726 | // Cache text body |
| 727 | - $body_cache =& $this->body_cache[$data[$this->id_field]][$lang][$date_format]; |
|
| 728 | - if(empty($data[$this->id_field]) || !isset($body_cache['text'])) |
|
| 727 | + $body_cache = & $this->body_cache[$data[$this->id_field]][$lang][$date_format]; |
|
| 728 | + if (empty($data[$this->id_field]) || !isset($body_cache['text'])) |
|
| 729 | 729 | { |
| 730 | - $body_cache['text'] = $this->get_body(false,$data,$old,false,$receiver); |
|
| 730 | + $body_cache['text'] = $this->get_body(false, $data, $old, false, $receiver); |
|
| 731 | 731 | } |
| 732 | 732 | // Cache HTML body |
| 733 | - if(empty($data[$this->id_field]) || !isset($body_cache['html'])) |
|
| 733 | + if (empty($data[$this->id_field]) || !isset($body_cache['html'])) |
|
| 734 | 734 | { |
| 735 | - $body_cache['html'] = $this->get_body(true,$data,$old,false,$receiver); |
|
| 735 | + $body_cache['html'] = $this->get_body(true, $data, $old, false, $receiver); |
|
| 736 | 736 | } |
| 737 | 737 | |
| 738 | 738 | // get rest of notification message |
| 739 | - $sender = $this->get_sender($data,$old,true,$receiver); |
|
| 740 | - $subject = $this->get_subject($data,$old,$deleted,$receiver); |
|
| 741 | - $link = $this->get_notification_link($data,$old,$receiver); |
|
| 742 | - $attachments = $this->get_attachments($data,$old,$receiver); |
|
| 739 | + $sender = $this->get_sender($data, $old, true, $receiver); |
|
| 740 | + $subject = $this->get_subject($data, $old, $deleted, $receiver); |
|
| 741 | + $link = $this->get_notification_link($data, $old, $receiver); |
|
| 742 | + $attachments = $this->get_attachments($data, $old, $receiver); |
|
| 743 | 743 | } |
| 744 | 744 | |
| 745 | 745 | // restore user enviroment BEFORE calling notification class or returning |
| 746 | 746 | $GLOBALS['egw_info']['user'] = $save_user; |
| 747 | 747 | // need to call preferences constructor and read_repository, to set user timezone again |
| 748 | 748 | $GLOBALS['egw']->preferences->__construct($GLOBALS['egw_info']['user']['account_id']); |
| 749 | - $GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository(false); // no session prefs! |
|
| 749 | + $GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository(false); // no session prefs! |
|
| 750 | 750 | |
| 751 | 751 | // Re-load date/time preferences |
| 752 | 752 | Api\DateTime::init(); |
@@ -801,11 +801,11 @@ discard block |
||
| 801 | 801 | * |
| 802 | 802 | * @return string |
| 803 | 803 | */ |
| 804 | - public function datetime($timestamp,$do_time=true) |
|
| 804 | + public function datetime($timestamp, $do_time = true) |
|
| 805 | 805 | { |
| 806 | - if (!is_a($timestamp,'DateTime')) |
|
| 806 | + if (!is_a($timestamp, 'DateTime')) |
|
| 807 | 807 | { |
| 808 | - $timestamp = new Api\DateTime($timestamp,Api\DateTime::$server_timezone); |
|
| 808 | + $timestamp = new Api\DateTime($timestamp, Api\DateTime::$server_timezone); |
|
| 809 | 809 | } |
| 810 | 810 | $timestamp->setTimezone(Api\DateTime::$user_timezone); |
| 811 | 811 | if (is_null($do_time)) |
@@ -831,25 +831,25 @@ discard block |
||
| 831 | 831 | * @param int|string $receiver nummeric account_id or email address |
| 832 | 832 | * @return string or userid |
| 833 | 833 | */ |
| 834 | - protected function get_sender($data,$old,$prefer_id=false,$receiver=null) |
|
| 834 | + protected function get_sender($data, $old, $prefer_id = false, $receiver = null) |
|
| 835 | 835 | { |
| 836 | - unset($receiver); // not used, but required by function signature |
|
| 836 | + unset($receiver); // not used, but required by function signature |
|
| 837 | 837 | |
| 838 | - $sender = $this->get_config('sender',$data,$old); |
|
| 838 | + $sender = $this->get_config('sender', $data, $old); |
|
| 839 | 839 | //echo "<p>".__METHOD__."() get_config('sender',...)='".htmlspecialchars($sender)."'</p>\n"; |
| 840 | 840 | |
| 841 | 841 | if (($this->prefer_user_as_sender || !$sender) && $this->user && |
| 842 | - ($email = $GLOBALS['egw']->accounts->id2name($this->user,'account_email'))) |
|
| 842 | + ($email = $GLOBALS['egw']->accounts->id2name($this->user, 'account_email'))) |
|
| 843 | 843 | { |
| 844 | - $name = $GLOBALS['egw']->accounts->id2name($this->user,'account_fullname'); |
|
| 844 | + $name = $GLOBALS['egw']->accounts->id2name($this->user, 'account_fullname'); |
|
| 845 | 845 | |
| 846 | - if($prefer_id) { |
|
| 846 | + if ($prefer_id) { |
|
| 847 | 847 | $sender = $this->user; |
| 848 | 848 | } else { |
| 849 | 849 | $sender = $name ? $name.' <'.$email.'>' : $email; |
| 850 | 850 | } |
| 851 | 851 | } |
| 852 | - elseif(!$sender) |
|
| 852 | + elseif (!$sender) |
|
| 853 | 853 | { |
| 854 | 854 | $sender = 'eGroupWare '.lang($this->app).' <noreply@'.$GLOBALS['egw_info']['server']['mail_suffix'].'>'; |
| 855 | 855 | } |
@@ -864,11 +864,11 @@ discard block |
||
| 864 | 864 | * @param array $old |
| 865 | 865 | * @return string |
| 866 | 866 | */ |
| 867 | - protected function get_title($data,$old) |
|
| 867 | + protected function get_title($data, $old) |
|
| 868 | 868 | { |
| 869 | - unset($old); // not used, but required by function signature |
|
| 869 | + unset($old); // not used, but required by function signature |
|
| 870 | 870 | |
| 871 | - return Api\Link::title($this->app,$data[$this->id_field]); |
|
| 871 | + return Api\Link::title($this->app, $data[$this->id_field]); |
|
| 872 | 872 | } |
| 873 | 873 | |
| 874 | 874 | /** |
@@ -882,11 +882,11 @@ discard block |
||
| 882 | 882 | * @param int|string $receiver nummeric account_id or email address |
| 883 | 883 | * @return string |
| 884 | 884 | */ |
| 885 | - protected function get_subject($data,$old,$deleted=null,$receiver=null) |
|
| 885 | + protected function get_subject($data, $old, $deleted = null, $receiver = null) |
|
| 886 | 886 | { |
| 887 | - unset($old, $deleted, $receiver); // not used, but required by function signature |
|
| 887 | + unset($old, $deleted, $receiver); // not used, but required by function signature |
|
| 888 | 888 | |
| 889 | - return Api\Link::title($this->app,$data[$this->id_field]); |
|
| 889 | + return Api\Link::title($this->app, $data[$this->id_field]); |
|
| 890 | 890 | } |
| 891 | 891 | |
| 892 | 892 | /** |
@@ -899,9 +899,9 @@ discard block |
||
| 899 | 899 | * @param int|string $receiver nummeric account_id or email address |
| 900 | 900 | * @return string |
| 901 | 901 | */ |
| 902 | - protected function get_message($data,$old,$receiver=null) |
|
| 902 | + protected function get_message($data, $old, $receiver = null) |
|
| 903 | 903 | { |
| 904 | - unset($data, $old, $receiver); // not used, but required by function signature |
|
| 904 | + unset($data, $old, $receiver); // not used, but required by function signature |
|
| 905 | 905 | |
| 906 | 906 | return ''; |
| 907 | 907 | } |
@@ -917,24 +917,24 @@ discard block |
||
| 917 | 917 | * @param int|string $receiver nummeric account_id or email address |
| 918 | 918 | * @return string|array string with link (!$allow_popup) or array(link,popup-size), popup size is something like '640x480' |
| 919 | 919 | */ |
| 920 | - protected function get_link($data,$old,$allow_popup=false,$receiver=null) |
|
| 920 | + protected function get_link($data, $old, $allow_popup = false, $receiver = null) |
|
| 921 | 921 | { |
| 922 | - unset($receiver); // not used, but required by function signature |
|
| 922 | + unset($receiver); // not used, but required by function signature |
|
| 923 | 923 | |
| 924 | - if (($link = $this->get_config('link',$data,$old))) |
|
| 924 | + if (($link = $this->get_config('link', $data, $old))) |
|
| 925 | 925 | { |
| 926 | - if (!$this->get_config('link_no_id', $data) && strpos($link,$this->id_field.'=') === false && isset($data[$this->id_field])) |
|
| 926 | + if (!$this->get_config('link_no_id', $data) && strpos($link, $this->id_field.'=') === false && isset($data[$this->id_field])) |
|
| 927 | 927 | { |
| 928 | - $link .= strpos($link,'?') === false ? '?' : '&'; |
|
| 928 | + $link .= strpos($link, '?') === false ? '?' : '&'; |
|
| 929 | 929 | $link .= $this->id_field.'='.$data[$this->id_field]; |
| 930 | 930 | } |
| 931 | 931 | } |
| 932 | 932 | else |
| 933 | 933 | { |
| 934 | - if (($view = Api\Link::view($this->app,$data[$this->id_field]))) |
|
| 934 | + if (($view = Api\Link::view($this->app, $data[$this->id_field]))) |
|
| 935 | 935 | { |
| 936 | - $link = $GLOBALS['egw']->link('/index.php',$view); |
|
| 937 | - $popup = Api\Link::is_popup($this->app,'view'); |
|
| 936 | + $link = $GLOBALS['egw']->link('/index.php', $view); |
|
| 937 | + $popup = Api\Link::is_popup($this->app, 'view'); |
|
| 938 | 938 | } |
| 939 | 939 | } |
| 940 | 940 | if ($link[0] == '/') |
@@ -945,12 +945,12 @@ discard block |
||
| 945 | 945 | if (!$allow_popup) |
| 946 | 946 | { |
| 947 | 947 | // remove the session-id in the notification mail! |
| 948 | - $link = preg_replace('/(sessionid|kp3|domain)=[^&]+&?/','',$link); |
|
| 948 | + $link = preg_replace('/(sessionid|kp3|domain)=[^&]+&?/', '', $link); |
|
| 949 | 949 | |
| 950 | 950 | if ($popup) $link .= '&nopopup=1'; |
| 951 | 951 | } |
| 952 | 952 | //error_log(__METHOD__."(..., $allow_popup, $receiver) returning ".array2string($allow_popup ? array($link,$popup) : $link)); |
| 953 | - return $allow_popup ? array($link,$popup) : $link; |
|
| 953 | + return $allow_popup ? array($link, $popup) : $link; |
|
| 954 | 954 | } |
| 955 | 955 | |
| 956 | 956 | /** |
@@ -961,18 +961,18 @@ discard block |
||
| 961 | 961 | * @param int|string $receiver nummeric account_id or email address |
| 962 | 962 | * @return array with link |
| 963 | 963 | */ |
| 964 | - protected function get_notification_link($data,$old,$receiver=null) |
|
| 964 | + protected function get_notification_link($data, $old, $receiver = null) |
|
| 965 | 965 | { |
| 966 | - unset($receiver); // not used, but required by function signature |
|
| 966 | + unset($receiver); // not used, but required by function signature |
|
| 967 | 967 | |
| 968 | - if (($view = Api\Link::view($this->app,$data[$this->id_field]))) |
|
| 968 | + if (($view = Api\Link::view($this->app, $data[$this->id_field]))) |
|
| 969 | 969 | { |
| 970 | 970 | return array( |
| 971 | - 'text' => $this->get_title($data,$old), |
|
| 971 | + 'text' => $this->get_title($data, $old), |
|
| 972 | 972 | 'app' => $this->app, |
| 973 | 973 | 'id' => $data[$this->id_field], |
| 974 | 974 | 'view' => $view, |
| 975 | - 'popup' => Api\Link::is_popup($this->app,'view'), |
|
| 975 | + 'popup' => Api\Link::is_popup($this->app, 'view'), |
|
| 976 | 976 | ); |
| 977 | 977 | } |
| 978 | 978 | return false; |
@@ -988,15 +988,15 @@ discard block |
||
| 988 | 988 | * @param int|string $receiver nummeric account_id or email address |
| 989 | 989 | * @return string |
| 990 | 990 | */ |
| 991 | - public function get_body($html_email,$data,$old,$integrate_link = true,$receiver=null) |
|
| 991 | + public function get_body($html_email, $data, $old, $integrate_link = true, $receiver = null) |
|
| 992 | 992 | { |
| 993 | 993 | $body = ''; |
| 994 | - if($this->get_config(self::CUSTOM_NOTIFICATION, $data, $old)) |
|
| 994 | + if ($this->get_config(self::CUSTOM_NOTIFICATION, $data, $old)) |
|
| 995 | 995 | { |
| 996 | - $body = $this->get_custom_message($data,$old); |
|
| 997 | - if(($sig = $this->get_signature($data,$old,$receiver))) |
|
| 996 | + $body = $this->get_custom_message($data, $old); |
|
| 997 | + if (($sig = $this->get_signature($data, $old, $receiver))) |
|
| 998 | 998 | { |
| 999 | - $body .= ($html_email ? '<br />':'') . "\n$sig"; |
|
| 999 | + $body .= ($html_email ? '<br />' : '')."\n$sig"; |
|
| 1000 | 1000 | } |
| 1001 | 1001 | return $body; |
| 1002 | 1002 | } |
@@ -1005,35 +1005,35 @@ discard block |
||
| 1005 | 1005 | $body = '<table cellspacing="2" cellpadding="0" border="0" width="100%">'."\n"; |
| 1006 | 1006 | } |
| 1007 | 1007 | // new or modified message |
| 1008 | - if (($message = $this->get_message($data,$old,$receiver))) |
|
| 1008 | + if (($message = $this->get_message($data, $old, $receiver))) |
|
| 1009 | 1009 | { |
| 1010 | 1010 | foreach ((array)$message as $_message) |
| 1011 | 1011 | { |
| 1012 | - $body .= $this->format_line($html_email,'message',false,($_message=='---'?($html_email?'<hr/>':$_message):$_message)); |
|
| 1012 | + $body .= $this->format_line($html_email, 'message', false, ($_message == '---' ? ($html_email ? '<hr/>' : $_message) : $_message)); |
|
| 1013 | 1013 | } |
| 1014 | 1014 | } |
| 1015 | - if ($integrate_link && ($link = $this->get_link($data,$old,false,$receiver))) |
|
| 1015 | + if ($integrate_link && ($link = $this->get_link($data, $old, false, $receiver))) |
|
| 1016 | 1016 | { |
| 1017 | - $body .= $this->format_line($html_email,'link',false,$integrate_link === true ? lang('You can respond by visiting:') : $integrate_link,$link); |
|
| 1017 | + $body .= $this->format_line($html_email, 'link', false, $integrate_link === true ? lang('You can respond by visiting:') : $integrate_link, $link); |
|
| 1018 | 1018 | } |
| 1019 | - foreach($this->get_details($data,$receiver) as $name => $detail) |
|
| 1019 | + foreach ($this->get_details($data, $receiver) as $name => $detail) |
|
| 1020 | 1020 | { |
| 1021 | 1021 | // if there's no old entry, the entry is not modified by definition |
| 1022 | 1022 | // if both values are '', 0 or null, we count them as equal too |
| 1023 | 1023 | $modified = $old && $data[$name] != $old[$name] && !(!$data[$name] && !$old[$name]); |
| 1024 | 1024 | //if ($modified) error_log("data[$name]=".print_r($data[$name],true).", old[$name]=".print_r($old[$name],true)." --> modified=".(int)$modified); |
| 1025 | - if (empty($detail['value']) && !$modified) continue; // skip unchanged, empty values |
|
| 1025 | + if (empty($detail['value']) && !$modified) continue; // skip unchanged, empty values |
|
| 1026 | 1026 | |
| 1027 | - $body .= $this->format_line($html_email,$detail['type'],$modified, |
|
| 1027 | + $body .= $this->format_line($html_email, $detail['type'], $modified, |
|
| 1028 | 1028 | $detail['label'] ? $detail['label'] : '', $detail['value']); |
| 1029 | 1029 | } |
| 1030 | 1030 | if ($html_email) |
| 1031 | 1031 | { |
| 1032 | 1032 | $body .= "</table>\n"; |
| 1033 | 1033 | } |
| 1034 | - if(($sig = $this->get_signature($data,$old,$receiver))) |
|
| 1034 | + if (($sig = $this->get_signature($data, $old, $receiver))) |
|
| 1035 | 1035 | { |
| 1036 | - $body .= ($html_email ? '<br />':'') . "\n$sig"; |
|
| 1036 | + $body .= ($html_email ? '<br />' : '')."\n$sig"; |
|
| 1037 | 1037 | } |
| 1038 | 1038 | return $body; |
| 1039 | 1039 | } |
@@ -1049,20 +1049,20 @@ discard block |
||
| 1049 | 1049 | * @param string $data = null data or null to display just $line over 2 columns |
| 1050 | 1050 | * @return string |
| 1051 | 1051 | */ |
| 1052 | - protected function format_line($html_mail,$type,$modified,$line,$data=null) |
|
| 1052 | + protected function format_line($html_mail, $type, $modified, $line, $data = null) |
|
| 1053 | 1053 | { |
| 1054 | 1054 | //error_log(__METHOD__.'('.array2string($html_mail).",'$type',".array2string($modified).",'$line',".array2string($data).')'); |
| 1055 | 1055 | $content = ''; |
| 1056 | 1056 | |
| 1057 | 1057 | if ($html_mail) |
| 1058 | 1058 | { |
| 1059 | - if (!$this->html_content_allow) $line = Api\Html::htmlspecialchars($line); // XSS |
|
| 1059 | + if (!$this->html_content_allow) $line = Api\Html::htmlspecialchars($line); // XSS |
|
| 1060 | 1060 | |
| 1061 | 1061 | $color = $modified ? 'red' : false; |
| 1062 | 1062 | $size = '110%'; |
| 1063 | 1063 | $bold = false; |
| 1064 | 1064 | $background = '#FFFFF1'; |
| 1065 | - switch($type) |
|
| 1065 | + switch ($type) |
|
| 1066 | 1066 | { |
| 1067 | 1067 | case 'message': |
| 1068 | 1068 | $background = '#D3DCE3;'; |
@@ -1080,7 +1080,7 @@ discard block |
||
| 1080 | 1080 | if (strpos($data, '<br') === false) |
| 1081 | 1081 | { |
| 1082 | 1082 | $data = nl2br($this->html_content_allow ? $data : Api\Html::htmlspecialchars($data)); |
| 1083 | - $this->html_content_allow = true; // to NOT do htmlspecialchars again |
|
| 1083 | + $this->html_content_allow = true; // to NOT do htmlspecialchars again |
|
| 1084 | 1084 | } |
| 1085 | 1085 | break; |
| 1086 | 1086 | case 'reply': |
@@ -1089,13 +1089,13 @@ discard block |
||
| 1089 | 1089 | default: |
| 1090 | 1090 | $size = false; |
| 1091 | 1091 | } |
| 1092 | - $style = ($bold ? 'font-weight:bold;' : '').($size ? 'font-size:'.$size.';' : '').($color?'color:'.$color:''); |
|
| 1092 | + $style = ($bold ? 'font-weight:bold;' : '').($size ? 'font-size:'.$size.';' : '').($color ? 'color:'.$color : ''); |
|
| 1093 | 1093 | |
| 1094 | - $content = '<tr style="background-color: '.$background.';"><td style="'.$style.($line && $data?'" width="20%':'" colspan="2').'">'; |
|
| 1094 | + $content = '<tr style="background-color: '.$background.';"><td style="'.$style.($line && $data ? '" width="20%' : '" colspan="2').'">'; |
|
| 1095 | 1095 | } |
| 1096 | 1096 | else // text-mail |
| 1097 | 1097 | { |
| 1098 | - if ($type == 'reply') $content = str_repeat('-',64)."\n"; |
|
| 1098 | + if ($type == 'reply') $content = str_repeat('-', 64)."\n"; |
|
| 1099 | 1099 | |
| 1100 | 1100 | if ($modified) $content .= '> '; |
| 1101 | 1101 | } |
@@ -1107,7 +1107,7 @@ discard block |
||
| 1107 | 1107 | if ($type == 'link') |
| 1108 | 1108 | { |
| 1109 | 1109 | // the link is often too long for html boxes chunk-split allows to break lines if needed |
| 1110 | - $content .= Api\Html::a_href(chunk_split(rawurldecode($data),40,'​'),$data,'','target="_blank"'); |
|
| 1110 | + $content .= Api\Html::a_href(chunk_split(rawurldecode($data), 40, '​'), $data, '', 'target="_blank"'); |
|
| 1111 | 1111 | } |
| 1112 | 1112 | elseif ($this->html_content_allow) |
| 1113 | 1113 | { |
@@ -1120,7 +1120,7 @@ discard block |
||
| 1120 | 1120 | } |
| 1121 | 1121 | else |
| 1122 | 1122 | { |
| 1123 | - $content .= ($content&&$data?': ':'').$data; |
|
| 1123 | + $content .= ($content && $data ? ': ' : '').$data; |
|
| 1124 | 1124 | } |
| 1125 | 1125 | if ($html_mail) $content .= '</td></tr>'; |
| 1126 | 1126 | |
@@ -1137,9 +1137,9 @@ discard block |
||
| 1137 | 1137 | * @param int|string $receiver nummeric account_id or email address |
| 1138 | 1138 | * @return array or array with values for either 'string' or 'path' and optionally (mime-)'type', 'filename' and 'encoding' |
| 1139 | 1139 | */ |
| 1140 | - protected function get_attachments($data,$old,$receiver=null) |
|
| 1140 | + protected function get_attachments($data, $old, $receiver = null) |
|
| 1141 | 1141 | { |
| 1142 | - unset($data, $old, $receiver); // not used, but required by function signature |
|
| 1142 | + unset($data, $old, $receiver); // not used, but required by function signature |
|
| 1143 | 1143 | |
| 1144 | 1144 | return array(); |
| 1145 | 1145 | } |
@@ -1152,20 +1152,20 @@ discard block |
||
| 1152 | 1152 | */ |
| 1153 | 1153 | protected function get_signature($data, $old, $receiver) |
| 1154 | 1154 | { |
| 1155 | - unset($old, $receiver); // not used, but required by function signature |
|
| 1155 | + unset($old, $receiver); // not used, but required by function signature |
|
| 1156 | 1156 | |
| 1157 | 1157 | $config = Api\Config::read('notifications'); |
| 1158 | - if(!isset($data[$this->id_field])) |
|
| 1158 | + if (!isset($data[$this->id_field])) |
|
| 1159 | 1159 | { |
| 1160 | - error_log($this->app . ' did not properly implement bo_tracking->id_field. Merge skipped.'); |
|
| 1160 | + error_log($this->app.' did not properly implement bo_tracking->id_field. Merge skipped.'); |
|
| 1161 | 1161 | } |
| 1162 | - elseif(class_exists($this->app. '_merge')) |
|
| 1162 | + elseif (class_exists($this->app.'_merge')) |
|
| 1163 | 1163 | { |
| 1164 | 1164 | $merge_class = $this->app.'_merge'; |
| 1165 | 1165 | $merge = new $merge_class(); |
| 1166 | 1166 | $error = null; |
| 1167 | 1167 | $sig = $merge->merge_string($config['signature'], array($data[$this->id_field]), $error, 'text/html'); |
| 1168 | - if($error) |
|
| 1168 | + if ($error) |
|
| 1169 | 1169 | { |
| 1170 | 1170 | error_log($error); |
| 1171 | 1171 | return $config['signature']; |
@@ -1182,27 +1182,27 @@ discard block |
||
| 1182 | 1182 | protected function get_custom_message($data, $old, $merge_class = null) |
| 1183 | 1183 | { |
| 1184 | 1184 | $message = $this->get_config(self::CUSTOM_NOTIFICATION, $data, $old); |
| 1185 | - if(!$message) |
|
| 1185 | + if (!$message) |
|
| 1186 | 1186 | { |
| 1187 | 1187 | return ''; |
| 1188 | 1188 | } |
| 1189 | 1189 | |
| 1190 | 1190 | // Automatically set merge class from naming conventions |
| 1191 | - if($merge_class == null) |
|
| 1191 | + if ($merge_class == null) |
|
| 1192 | 1192 | { |
| 1193 | 1193 | $merge_class = $this->app.'_merge'; |
| 1194 | 1194 | } |
| 1195 | - if(!isset($data[$this->id_field])) |
|
| 1195 | + if (!isset($data[$this->id_field])) |
|
| 1196 | 1196 | { |
| 1197 | - error_log($this->app . ' did not properly implement bo_tracking->id_field. Merge skipped.'); |
|
| 1197 | + error_log($this->app.' did not properly implement bo_tracking->id_field. Merge skipped.'); |
|
| 1198 | 1198 | return $message; |
| 1199 | 1199 | } |
| 1200 | - elseif(class_exists($merge_class)) |
|
| 1200 | + elseif (class_exists($merge_class)) |
|
| 1201 | 1201 | { |
| 1202 | 1202 | $merge = new $merge_class(); |
| 1203 | 1203 | $error = null; |
| 1204 | 1204 | $merged_message = $merge->merge_string($message, array($data[$this->id_field]), $error, 'text/html'); |
| 1205 | - if($error) |
|
| 1205 | + if ($error) |
|
| 1206 | 1206 | { |
| 1207 | 1207 | error_log($error); |
| 1208 | 1208 | return $message; |
@@ -239,7 +239,10 @@ discard block |
||
| 239 | 239 | $header_done = false; |
| 240 | 240 | foreach($cfs as $name => $field) |
| 241 | 241 | { |
| 242 | - if (in_array($field['type'], Customfields::$non_printable_fields)) continue; |
|
| 242 | + if (in_array($field['type'], Customfields::$non_printable_fields)) |
|
| 243 | + { |
|
| 244 | + continue; |
|
| 245 | + } |
|
| 243 | 246 | |
| 244 | 247 | if (!$header_done) |
| 245 | 248 | { |
@@ -337,8 +340,14 @@ discard block |
||
| 337 | 340 | { |
| 338 | 341 | //error_log(__METHOD__.__LINE__.' Field:'.$name. ' Value (new):'.array2string($data[$name])); |
| 339 | 342 | //error_log(__METHOD__.__LINE__.' Field:'.$name. ' Value (old):'.array2string($old[$name])); |
| 340 | - if (is_array($data[$name]) && array_key_exists('id',$data[$name])) $data[$name] = $data[$name]['id']; |
|
| 341 | - if (is_array($old[$name]) && array_key_exists('id',$old[$name])) $old[$name] = $old[$name]['id']; |
|
| 343 | + if (is_array($data[$name]) && array_key_exists('id',$data[$name])) |
|
| 344 | + { |
|
| 345 | + $data[$name] = $data[$name]['id']; |
|
| 346 | + } |
|
| 347 | + if (is_array($old[$name]) && array_key_exists('id',$old[$name])) |
|
| 348 | + { |
|
| 349 | + $old[$name] = $old[$name]['id']; |
|
| 350 | + } |
|
| 342 | 351 | //error_log(__METHOD__.__LINE__.'(After processing) Field:'.$name. ' Value (new):'.array2string($data[$name])); |
| 343 | 352 | //error_log(__METHOD__.__LINE__.'(After processing) Field:'.$name. ' Value (old):'.array2string($old[$name])); |
| 344 | 353 | } |
@@ -352,11 +361,18 @@ discard block |
||
| 352 | 361 | if (!($app = $this->cf_link_fields[$name])) |
| 353 | 362 | { |
| 354 | 363 | list($app,$id) = explode(':',$id); |
| 355 | - if (!$id) continue; // can be eg. 'addressbook:', if no contact selected |
|
| 364 | + if (!$id) |
|
| 365 | + { |
|
| 366 | + continue; |
|
| 367 | + } |
|
| 368 | + // can be eg. 'addressbook:', if no contact selected |
|
| 356 | 369 | } |
| 357 | 370 | $source_id = $data[$this->id_field]; |
| 358 | 371 | //error_log(__METHOD__.__LINE__.array2string($source_id)); |
| 359 | - if ($source_id) Api\Link::link($this->app,$source_id,$app,$id); |
|
| 372 | + if ($source_id) |
|
| 373 | + { |
|
| 374 | + Api\Link::link($this->app,$source_id,$app,$id); |
|
| 375 | + } |
|
| 360 | 376 | //error_log(__METHOD__.__LINE__."Api\Link::link('$this->app',".array2string($source_id).",'$app',$id);"); |
| 361 | 377 | //echo "<p>Api\Link::link('$this->app',{$data[$this->id_field]},'$app',$id);</p>\n"; |
| 362 | 378 | } |
@@ -364,14 +380,24 @@ discard block |
||
| 364 | 380 | // unlink removed application entries |
| 365 | 381 | foreach(array_diff($old_ids,$current_ids) as $name => $id) |
| 366 | 382 | { |
| 367 | - if (!isset($data[$name])) continue; // ignore not set link cf's, eg. from sync clients |
|
| 383 | + if (!isset($data[$name])) |
|
| 384 | + { |
|
| 385 | + continue; |
|
| 386 | + } |
|
| 387 | + // ignore not set link cf's, eg. from sync clients |
|
| 368 | 388 | if (!($app = $this->cf_link_fields[$name])) |
| 369 | 389 | { |
| 370 | 390 | list($app,$id) = explode(':',$id); |
| 371 | - if (!$id) continue; |
|
| 391 | + if (!$id) |
|
| 392 | + { |
|
| 393 | + continue; |
|
| 394 | + } |
|
| 372 | 395 | } |
| 373 | 396 | $source_id = $data[$this->id_field]; |
| 374 | - if ($source_id) Api\Link::unlink(null,$this->app,$source_id,0,$app,$id); |
|
| 397 | + if ($source_id) |
|
| 398 | + { |
|
| 399 | + Api\Link::unlink(null,$this->app,$source_id,0,$app,$id); |
|
| 400 | + } |
|
| 375 | 401 | //echo "<p>Api\Link::unlink(NULL,'$this->app',{$data[$this->id_field]},0,'$app',$id);</p>\n"; |
| 376 | 402 | } |
| 377 | 403 | } |
@@ -396,7 +422,10 @@ discard block |
||
| 396 | 422 | $changed_fields = self::changed_fields($data,$old); |
| 397 | 423 | //error_log(__METHOD__.__LINE__.' Changedfields:'.array2string($changed_fields)); |
| 398 | 424 | } |
| 399 | - if (!$changed_fields && ($old || !$GLOBALS['egw_info']['server']['log_user_agent_action'])) return 0; |
|
| 425 | + if (!$changed_fields && ($old || !$GLOBALS['egw_info']['server']['log_user_agent_action'])) |
|
| 426 | + { |
|
| 427 | + return 0; |
|
| 428 | + } |
|
| 400 | 429 | |
| 401 | 430 | if (!is_object($this->historylog) || $this->historylog->user != $this->user) |
| 402 | 431 | { |
@@ -412,10 +441,13 @@ discard block |
||
| 412 | 441 | { |
| 413 | 442 | $status = isset($this->field2history[$name]) ? $this->field2history[$name] : $name; |
| 414 | 443 | //error_log(__METHOD__.__LINE__." Name $name,".' Status:'.array2string($status)); |
| 415 | - if (is_array($status)) // 1:N relation --> remove common rows |
|
| 444 | + if (is_array($status)) |
|
| 445 | + { |
|
| 446 | + // 1:N relation --> remove common rows |
|
| 416 | 447 | { |
| 417 | 448 | //error_log(__METHOD__.__LINE__.' is Array'); |
| 418 | 449 | self::compact_1_N_relation($data[$name],$status); |
| 450 | + } |
|
| 419 | 451 | self::compact_1_N_relation($old[$name],$status); |
| 420 | 452 | $added = array_values(array_diff($data[$name],$old[$name])); |
| 421 | 453 | $removed = array_values(array_diff($old[$name],$data[$name])); |
@@ -449,17 +481,31 @@ discard block |
||
| 449 | 481 | */ |
| 450 | 482 | public function changed_fields(array $data,array $old=null) |
| 451 | 483 | { |
| 452 | - if (is_null($old)) return array_keys($data); |
|
| 484 | + if (is_null($old)) |
|
| 485 | + { |
|
| 486 | + return array_keys($data); |
|
| 487 | + } |
|
| 453 | 488 | $changed_fields = array(); |
| 454 | 489 | foreach($this->field2history as $name => $status) |
| 455 | 490 | { |
| 456 | - if (!$old[$name] && !$data[$name]) continue; // treat all sorts of empty equally |
|
| 491 | + if (!$old[$name] && !$data[$name]) |
|
| 492 | + { |
|
| 493 | + continue; |
|
| 494 | + } |
|
| 495 | + // treat all sorts of empty equally |
|
| 457 | 496 | |
| 458 | - if ($name[0] == '#' && !isset($data[$name])) continue; // no set customfields are not stored, therefore not changed |
|
| 497 | + if ($name[0] == '#' && !isset($data[$name])) |
|
| 498 | + { |
|
| 499 | + continue; |
|
| 500 | + } |
|
| 501 | + // no set customfields are not stored, therefore not changed |
|
| 459 | 502 | |
| 460 | - if (is_array($status)) // 1:N relation |
|
| 503 | + if (is_array($status)) |
|
| 504 | + { |
|
| 505 | + // 1:N relation |
|
| 461 | 506 | { |
| 462 | 507 | self::compact_1_N_relation($data[$name],$status); |
| 508 | + } |
|
| 463 | 509 | self::compact_1_N_relation($old[$name],$status); |
| 464 | 510 | } |
| 465 | 511 | if ($old[$name] != $data[$name]) |
@@ -467,13 +513,22 @@ discard block |
||
| 467 | 513 | // normalize arrays, we do NOT care for the order of multiselections |
| 468 | 514 | if (is_array($data[$name]) || is_array($old[$name])) |
| 469 | 515 | { |
| 470 | - if (!is_array($data[$name])) $data[$name] = explode(',',$data[$name]); |
|
| 471 | - if (!is_array($old[$name])) $old[$name] = explode(',',$old[$name]); |
|
| 516 | + if (!is_array($data[$name])) |
|
| 517 | + { |
|
| 518 | + $data[$name] = explode(',',$data[$name]); |
|
| 519 | + } |
|
| 520 | + if (!is_array($old[$name])) |
|
| 521 | + { |
|
| 522 | + $old[$name] = explode(',',$old[$name]); |
|
| 523 | + } |
|
| 472 | 524 | if (count($data[$name]) == count($old[$name])) |
| 473 | 525 | { |
| 474 | 526 | sort($data[$name]); |
| 475 | 527 | sort($old[$name]); |
| 476 | - if ($data[$name] == $old[$name]) continue; |
|
| 528 | + if ($data[$name] == $old[$name]) |
|
| 529 | + { |
|
| 530 | + continue; |
|
| 531 | + } |
|
| 477 | 532 | } |
| 478 | 533 | } |
| 479 | 534 | elseif (str_replace("\r", '', $old[$name]) == str_replace("\r", '', $data[$name])) |
@@ -534,13 +589,19 @@ discard block |
||
| 534 | 589 | public function do_notifications($data,$old,$deleted=null,&$email_notified=null) |
| 535 | 590 | { |
| 536 | 591 | $this->errors = $email_sent = array(); |
| 537 | - if (!empty($email_notified) && is_array($email_notified)) $email_sent = $email_notified; |
|
| 592 | + if (!empty($email_notified) && is_array($email_notified)) |
|
| 593 | + { |
|
| 594 | + $email_sent = $email_notified; |
|
| 595 | + } |
|
| 538 | 596 | |
| 539 | - if (!$this->notify_current_user && $this->user) // do we have a current user and should we notify the current user about his own changes |
|
| 597 | + if (!$this->notify_current_user && $this->user) |
|
| 598 | + { |
|
| 599 | + // do we have a current user and should we notify the current user about his own changes |
|
| 540 | 600 | { |
| 541 | 601 | //error_log("do_notificaton() adding user=$this->user to email_sent, to not notify him"); |
| 542 | 602 | $email_sent[] = $GLOBALS['egw']->accounts->id2name($this->user,'account_email'); |
| 543 | 603 | } |
| 604 | + } |
|
| 544 | 605 | $skip_notify = $this->get_config('skip_notify',$data,$old); |
| 545 | 606 | if($skip_notify && is_array($skip_notify)) |
| 546 | 607 | { |
@@ -579,11 +640,14 @@ discard block |
||
| 579 | 640 | //error_log(__METHOD__."() data[$this->assigned_field]=".print_r($data[$this->assigned_field],true).", old[$this->assigned_field]=".print_r($old[$this->assigned_field],true)); |
| 580 | 641 | $old_assignees = array(); |
| 581 | 642 | $assignees = $assigned ? $assigned : array(); |
| 582 | - if ($data[$this->assigned_field]) // current assignments |
|
| 643 | + if ($data[$this->assigned_field]) |
|
| 644 | + { |
|
| 645 | + // current assignments |
|
| 583 | 646 | { |
| 584 | 647 | $assignees = is_array($data[$this->assigned_field]) ? |
| 585 | 648 | $data[$this->assigned_field] : explode(',',$data[$this->assigned_field]); |
| 586 | 649 | } |
| 650 | + } |
|
| 587 | 651 | if ($old && $old[$this->assigned_field]) |
| 588 | 652 | { |
| 589 | 653 | $old_assignees = is_array($old[$this->assigned_field]) ? |
@@ -592,7 +656,10 @@ discard block |
||
| 592 | 656 | foreach(array_unique(array_merge($assignees,$old_assignees)) as $assignee) |
| 593 | 657 | { |
| 594 | 658 | //error_log(__METHOD__."() assignee=$assignee, type=".$GLOBALS['egw']->accounts->get_type($assignee).", email=".$GLOBALS['egw']->accounts->id2name($assignee,'account_email')); |
| 595 | - if (!$assignee) continue; |
|
| 659 | + if (!$assignee) |
|
| 660 | + { |
|
| 661 | + continue; |
|
| 662 | + } |
|
| 596 | 663 | |
| 597 | 664 | // item assignee is a user |
| 598 | 665 | if ($GLOBALS['egw']->accounts->get_type($assignee) == 'u') |
@@ -600,10 +667,13 @@ discard block |
||
| 600 | 667 | if (($email = $GLOBALS['egw']->accounts->id2name($assignee,'account_email')) && !in_array($email, $email_sent)) |
| 601 | 668 | { |
| 602 | 669 | if ($this->send_notification($data,$old,$email,$assignee,'notify_assigned', |
| 603 | - in_array($assignee,$assignees) !== in_array($assignee,$old_assignees) || $deleted)) // assignment changed |
|
| 670 | + in_array($assignee,$assignees) !== in_array($assignee,$old_assignees) || $deleted)) |
|
| 671 | + { |
|
| 672 | + // assignment changed |
|
| 604 | 673 | { |
| 605 | 674 | $email_sent[] = $email; |
| 606 | 675 | } |
| 676 | + } |
|
| 607 | 677 | } |
| 608 | 678 | } |
| 609 | 679 | else // item assignee is a group |
@@ -613,10 +683,13 @@ discard block |
||
| 613 | 683 | if (($email = $GLOBALS['egw']->accounts->id2name($u,'account_email')) && !in_array($email, $email_sent)) |
| 614 | 684 | { |
| 615 | 685 | if ($this->send_notification($data,$old,$email,$u,'notify_assigned', |
| 616 | - in_array($u,$assignees) !== in_array($u,$old_assignees) || $deleted)) // assignment changed |
|
| 686 | + in_array($u,$assignees) !== in_array($u,$old_assignees) || $deleted)) |
|
| 687 | + { |
|
| 688 | + // assignment changed |
|
| 617 | 689 | { |
| 618 | 690 | $email_sent[] = $email; |
| 619 | 691 | } |
| 692 | + } |
|
| 620 | 693 | } |
| 621 | 694 | } |
| 622 | 695 | } |
@@ -679,25 +752,38 @@ discard block |
||
| 679 | 752 | public function send_notification($data,$old,$email,$user_or_lang,$check=null,$assignment_changed=true,$deleted=null) |
| 680 | 753 | { |
| 681 | 754 | //error_log(__METHOD__."(,,'$email',$user_or_lang,$check,$assignment_changed,$deleted)"); |
| 682 | - if (!$email) return false; |
|
| 755 | + if (!$email) |
|
| 756 | + { |
|
| 757 | + return false; |
|
| 758 | + } |
|
| 683 | 759 | |
| 684 | 760 | $save_user = $GLOBALS['egw_info']['user']; |
| 685 | 761 | $do_notify = true; |
| 686 | 762 | |
| 687 | - if (is_numeric($user_or_lang)) // user --> read everything from his prefs |
|
| 763 | + if (is_numeric($user_or_lang)) |
|
| 764 | + { |
|
| 765 | + // user --> read everything from his prefs |
|
| 688 | 766 | { |
| 689 | 767 | $GLOBALS['egw_info']['user']['account_id'] = $user_or_lang; |
| 768 | + } |
|
| 690 | 769 | $GLOBALS['egw']->preferences->__construct($user_or_lang); |
| 691 | 770 | $GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository(false); // no session prefs! |
| 692 | 771 | |
| 693 | - if ($check && $this->check2pref) $check = $this->check2pref[$check]; |
|
| 772 | + if ($check && $this->check2pref) |
|
| 773 | + { |
|
| 774 | + $check = $this->check2pref[$check]; |
|
| 775 | + } |
|
| 694 | 776 | |
| 695 | 777 | if ($check && !$GLOBALS['egw_info']['user']['preferences'][$this->app][$check] || // no notification requested |
| 696 | 778 | // only notification about changed assignment requested |
| 697 | 779 | $check && $GLOBALS['egw_info']['user']['preferences'][$this->app][$check] === 'assignment' && !$assignment_changed || |
| 698 | - $this->user == $user_or_lang && !$this->notify_current_user) // no popup for own actions |
|
| 780 | + $this->user == $user_or_lang && !$this->notify_current_user) |
|
| 699 | 781 | { |
| 700 | - $do_notify = false; // no notification requested / necessary |
|
| 782 | + // no popup for own actions |
|
| 783 | + { |
|
| 784 | + $do_notify = false; |
|
| 785 | + } |
|
| 786 | + // no notification requested / necessary |
|
| 701 | 787 | } |
| 702 | 788 | } |
| 703 | 789 | else |
@@ -706,10 +792,13 @@ discard block |
||
| 706 | 792 | $GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->default_prefs(); |
| 707 | 793 | $GLOBALS['egw_info']['user']['preferences']['common']['lang'] = $user_or_lang; |
| 708 | 794 | } |
| 709 | - if ($GLOBALS['egw_info']['user']['preferences']['common']['lang'] != Api\Translation::$userlang) // load the right language if needed |
|
| 795 | + if ($GLOBALS['egw_info']['user']['preferences']['common']['lang'] != Api\Translation::$userlang) |
|
| 796 | + { |
|
| 797 | + // load the right language if needed |
|
| 710 | 798 | { |
| 711 | 799 | Api\Translation::init(); |
| 712 | 800 | } |
| 801 | + } |
|
| 713 | 802 | |
| 714 | 803 | $receiver = is_numeric($user_or_lang) ? $user_or_lang : $email; |
| 715 | 804 | |
@@ -813,7 +902,10 @@ discard block |
||
| 813 | 902 | $do_time = ($timestamp->format('Hi') != '0000'); |
| 814 | 903 | } |
| 815 | 904 | $format = $GLOBALS['egw_info']['user']['preferences']['common']['dateformat']; |
| 816 | - if ($do_time) $format .= ' '.($GLOBALS['egw_info']['user']['preferences']['common']['timeformat'] != 12 ? 'H:i' : 'h:i a'); |
|
| 905 | + if ($do_time) |
|
| 906 | + { |
|
| 907 | + $format .= ' '.($GLOBALS['egw_info']['user']['preferences']['common']['timeformat'] != 12 ? 'H:i' : 'h:i a'); |
|
| 908 | + } |
|
| 817 | 909 | |
| 818 | 910 | return $timestamp->format($format); |
| 819 | 911 | } |
@@ -843,9 +935,12 @@ discard block |
||
| 843 | 935 | { |
| 844 | 936 | $name = $GLOBALS['egw']->accounts->id2name($this->user,'account_fullname'); |
| 845 | 937 | |
| 846 | - if($prefer_id) { |
|
| 938 | + if($prefer_id) |
|
| 939 | + { |
|
| 847 | 940 | $sender = $this->user; |
| 848 | - } else { |
|
| 941 | + } |
|
| 942 | + else |
|
| 943 | + { |
|
| 849 | 944 | $sender = $name ? $name.' <'.$email.'>' : $email; |
| 850 | 945 | } |
| 851 | 946 | } |
@@ -947,7 +1042,10 @@ discard block |
||
| 947 | 1042 | // remove the session-id in the notification mail! |
| 948 | 1043 | $link = preg_replace('/(sessionid|kp3|domain)=[^&]+&?/','',$link); |
| 949 | 1044 | |
| 950 | - if ($popup) $link .= '&nopopup=1'; |
|
| 1045 | + if ($popup) |
|
| 1046 | + { |
|
| 1047 | + $link .= '&nopopup=1'; |
|
| 1048 | + } |
|
| 951 | 1049 | } |
| 952 | 1050 | //error_log(__METHOD__."(..., $allow_popup, $receiver) returning ".array2string($allow_popup ? array($link,$popup) : $link)); |
| 953 | 1051 | return $allow_popup ? array($link,$popup) : $link; |
@@ -1022,7 +1120,11 @@ discard block |
||
| 1022 | 1120 | // if both values are '', 0 or null, we count them as equal too |
| 1023 | 1121 | $modified = $old && $data[$name] != $old[$name] && !(!$data[$name] && !$old[$name]); |
| 1024 | 1122 | //if ($modified) error_log("data[$name]=".print_r($data[$name],true).", old[$name]=".print_r($old[$name],true)." --> modified=".(int)$modified); |
| 1025 | - if (empty($detail['value']) && !$modified) continue; // skip unchanged, empty values |
|
| 1123 | + if (empty($detail['value']) && !$modified) |
|
| 1124 | + { |
|
| 1125 | + continue; |
|
| 1126 | + } |
|
| 1127 | + // skip unchanged, empty values |
|
| 1026 | 1128 | |
| 1027 | 1129 | $body .= $this->format_line($html_email,$detail['type'],$modified, |
| 1028 | 1130 | $detail['label'] ? $detail['label'] : '', $detail['value']); |
@@ -1056,7 +1158,11 @@ discard block |
||
| 1056 | 1158 | |
| 1057 | 1159 | if ($html_mail) |
| 1058 | 1160 | { |
| 1059 | - if (!$this->html_content_allow) $line = Api\Html::htmlspecialchars($line); // XSS |
|
| 1161 | + if (!$this->html_content_allow) |
|
| 1162 | + { |
|
| 1163 | + $line = Api\Html::htmlspecialchars($line); |
|
| 1164 | + } |
|
| 1165 | + // XSS |
|
| 1060 | 1166 | |
| 1061 | 1167 | $color = $modified ? 'red' : false; |
| 1062 | 1168 | $size = '110%'; |
@@ -1095,15 +1201,24 @@ discard block |
||
| 1095 | 1201 | } |
| 1096 | 1202 | else // text-mail |
| 1097 | 1203 | { |
| 1098 | - if ($type == 'reply') $content = str_repeat('-',64)."\n"; |
|
| 1204 | + if ($type == 'reply') |
|
| 1205 | + { |
|
| 1206 | + $content = str_repeat('-',64)."\n"; |
|
| 1207 | + } |
|
| 1099 | 1208 | |
| 1100 | - if ($modified) $content .= '> '; |
|
| 1209 | + if ($modified) |
|
| 1210 | + { |
|
| 1211 | + $content .= '> '; |
|
| 1212 | + } |
|
| 1101 | 1213 | } |
| 1102 | 1214 | $content .= $line; |
| 1103 | 1215 | |
| 1104 | 1216 | if ($html_mail) |
| 1105 | 1217 | { |
| 1106 | - if ($line && $data) $content .= '</td><td style="'.$style.'">'; |
|
| 1218 | + if ($line && $data) |
|
| 1219 | + { |
|
| 1220 | + $content .= '</td><td style="'.$style.'">'; |
|
| 1221 | + } |
|
| 1107 | 1222 | if ($type == 'link') |
| 1108 | 1223 | { |
| 1109 | 1224 | // the link is often too long for html boxes chunk-split allows to break lines if needed |
@@ -1122,7 +1237,10 @@ discard block |
||
| 1122 | 1237 | { |
| 1123 | 1238 | $content .= ($content&&$data?': ':'').$data; |
| 1124 | 1239 | } |
| 1125 | - if ($html_mail) $content .= '</td></tr>'; |
|
| 1240 | + if ($html_mail) |
|
| 1241 | + { |
|
| 1242 | + $content .= '</td></tr>'; |
|
| 1243 | + } |
|
| 1126 | 1244 | |
| 1127 | 1245 | $content .= "\n"; |
| 1128 | 1246 | |
@@ -742,7 +742,7 @@ |
||
| 742 | 742 | * |
| 743 | 743 | * @param string $app application name |
| 744 | 744 | * @param string $lang language code |
| 745 | - * @return the full path of the filename for the requested app and language |
|
| 745 | + * @return string full path of the filename for the requested app and language |
|
| 746 | 746 | */ |
| 747 | 747 | static function get_lang_file($app,$lang) |
| 748 | 748 | { |
@@ -738,12 +738,12 @@ discard block |
||
| 738 | 738 | } |
| 739 | 739 | |
| 740 | 740 | /** |
| 741 | - * provides centralization and compatibility to locate the lang files |
|
| 742 | - * |
|
| 743 | - * @param string $app application name |
|
| 744 | - * @param string $lang language code |
|
| 745 | - * @return the full path of the filename for the requested app and language |
|
| 746 | - */ |
|
| 741 | + * provides centralization and compatibility to locate the lang files |
|
| 742 | + * |
|
| 743 | + * @param string $app application name |
|
| 744 | + * @param string $lang language code |
|
| 745 | + * @return the full path of the filename for the requested app and language |
|
| 746 | + */ |
|
| 747 | 747 | static function get_lang_file($app,$lang) |
| 748 | 748 | { |
| 749 | 749 | if ($app == 'common') $app = 'phpgwapi'; |
@@ -1074,13 +1074,13 @@ discard block |
||
| 1074 | 1074 | } |
| 1075 | 1075 | |
| 1076 | 1076 | /** |
| 1077 | - * detect_encoding - try to detect the encoding |
|
| 1078 | - * only to be used if the string in question has no structure that determines his encoding |
|
| 1079 | - * |
|
| 1080 | - * @param string - to be evaluated |
|
| 1081 | - * @param string $verify =null encoding to verify, get checked first and have a match for only ascii or no detection available |
|
| 1082 | - * @return string - encoding |
|
| 1083 | - */ |
|
| 1077 | + * detect_encoding - try to detect the encoding |
|
| 1078 | + * only to be used if the string in question has no structure that determines his encoding |
|
| 1079 | + * |
|
| 1080 | + * @param string - to be evaluated |
|
| 1081 | + * @param string $verify =null encoding to verify, get checked first and have a match for only ascii or no detection available |
|
| 1082 | + * @return string - encoding |
|
| 1083 | + */ |
|
| 1084 | 1084 | static function detect_encoding($string, $verify=null) |
| 1085 | 1085 | { |
| 1086 | 1086 | if (function_exists('iconv')) |
@@ -99,7 +99,7 @@ discard block |
||
| 99 | 99 | * |
| 100 | 100 | * @var array |
| 101 | 101 | */ |
| 102 | - static $instance_specific_translations = array('loginscreen','mainscreen','custom'); |
|
| 102 | + static $instance_specific_translations = array('loginscreen', 'mainscreen', 'custom'); |
|
| 103 | 103 | |
| 104 | 104 | /** |
| 105 | 105 | * returns the charset to use (!$lang) or the charset of the lang-files or $lang |
@@ -107,7 +107,7 @@ discard block |
||
| 107 | 107 | * @param string|boolean $lang =False return charset of the active user-lang, or $lang if specified |
| 108 | 108 | * @return string charset |
| 109 | 109 | */ |
| 110 | - static function charset($lang=False) |
|
| 110 | + static function charset($lang = False) |
|
| 111 | 111 | { |
| 112 | 112 | static $charsets = array(); |
| 113 | 113 | |
@@ -115,11 +115,11 @@ discard block |
||
| 115 | 115 | { |
| 116 | 116 | if (!isset($charsets[$lang])) |
| 117 | 117 | { |
| 118 | - if (!($charsets[$lang] = self::$db->select(self::LANG_TABLE,'content',array( |
|
| 118 | + if (!($charsets[$lang] = self::$db->select(self::LANG_TABLE, 'content', array( |
|
| 119 | 119 | 'lang' => $lang, |
| 120 | 120 | 'message_id'=> 'charset', |
| 121 | 121 | 'app_name' => 'common', |
| 122 | - ),__LINE__,__FILE__)->fetchColumn())) |
|
| 122 | + ), __LINE__, __FILE__)->fetchColumn())) |
|
| 123 | 123 | { |
| 124 | 124 | $charsets[$lang] = 'utf-8'; |
| 125 | 125 | } |
@@ -153,7 +153,7 @@ discard block |
||
| 153 | 153 | * |
| 154 | 154 | * @param boolean $load_translations =true should we also load translations for common and currentapp |
| 155 | 155 | */ |
| 156 | - static function init($load_translations=true) |
|
| 156 | + static function init($load_translations = true) |
|
| 157 | 157 | { |
| 158 | 158 | if (!isset(self::$db)) |
| 159 | 159 | { |
@@ -165,11 +165,11 @@ discard block |
||
| 165 | 165 | } |
| 166 | 166 | else |
| 167 | 167 | { |
| 168 | - self::$system_charset =& $GLOBALS['egw_setup']->system_charset; |
|
| 168 | + self::$system_charset = & $GLOBALS['egw_setup']->system_charset; |
|
| 169 | 169 | } |
| 170 | 170 | if ((self::$mbstring = check_load_extension('mbstring'))) |
| 171 | 171 | { |
| 172 | - if(!empty(self::$system_charset)) |
|
| 172 | + if (!empty(self::$system_charset)) |
|
| 173 | 173 | { |
| 174 | 174 | $ini_default_charset = version_compare(PHP_VERSION, '5.6', '<') ? 'mbstring.internal_encoding' : 'default_charset'; |
| 175 | 175 | ini_set($ini_default_charset, self::$system_charset); |
@@ -178,7 +178,7 @@ discard block |
||
| 178 | 178 | |
| 179 | 179 | // try loading load_via from tree-wide cache and check if it contains more rules |
| 180 | 180 | if (($load_via = Cache::getTree(__CLASS__, 'load_via')) && |
| 181 | - $load_via >= self::$load_via && // > for array --> contains more elements |
|
| 181 | + $load_via >= self::$load_via && // > for array --> contains more elements |
|
| 182 | 182 | // little sanity check: cached array contains all stock keys, otherwise ignore it |
| 183 | 183 | !array_diff_key(self::$load_via, $load_via)) |
| 184 | 184 | { |
@@ -217,13 +217,13 @@ discard block |
||
| 217 | 217 | * @param string $not_found ='*' what to add to not found phrases, default '*' |
| 218 | 218 | * @return string with translation |
| 219 | 219 | */ |
| 220 | - static function translate($key, $vars=null, $not_found='' ) |
|
| 220 | + static function translate($key, $vars = null, $not_found = '') |
|
| 221 | 221 | { |
| 222 | 222 | if (!self::$lang_arr) |
| 223 | 223 | { |
| 224 | 224 | self::init(); |
| 225 | 225 | } |
| 226 | - $ret = $key; // save key if we dont find a translation |
|
| 226 | + $ret = $key; // save key if we dont find a translation |
|
| 227 | 227 | if ($not_found) $ret .= $not_found; |
| 228 | 228 | |
| 229 | 229 | if (isset(self::$lang_arr[$key])) |
@@ -243,16 +243,16 @@ discard block |
||
| 243 | 243 | { |
| 244 | 244 | if (count($vars) > 1) |
| 245 | 245 | { |
| 246 | - static $placeholders = array('%3','%2','%1','|%2|','|%3|','%4','%5','%6','%7','%8','%9','%10'); |
|
| 246 | + static $placeholders = array('%3', '%2', '%1', '|%2|', '|%3|', '%4', '%5', '%6', '%7', '%8', '%9', '%10'); |
|
| 247 | 247 | // to cope with $vars[0] containing '%2' (eg. an urlencoded path like a referer), |
| 248 | 248 | // we first replace '%2' in $ret with '|%2|' and then use that as 2. placeholder |
| 249 | 249 | // we do that for %3 as well, ... |
| 250 | - $vars = array_merge(array('|%3|','|%2|'),$vars); // push '|%2|' (and such) as first replacement on $vars |
|
| 251 | - $ret = str_replace($placeholders,$vars,$ret); |
|
| 250 | + $vars = array_merge(array('|%3|', '|%2|'), $vars); // push '|%2|' (and such) as first replacement on $vars |
|
| 251 | + $ret = str_replace($placeholders, $vars, $ret); |
|
| 252 | 252 | } |
| 253 | 253 | else |
| 254 | 254 | { |
| 255 | - $ret = str_replace('%1',$vars[0],$ret); |
|
| 255 | + $ret = str_replace('%1', $vars[0], $ret); |
|
| 256 | 256 | } |
| 257 | 257 | } |
| 258 | 258 | return $ret; |
@@ -267,14 +267,14 @@ discard block |
||
| 267 | 267 | * if multiple names given, they are requested in one request from cache and loaded in given order |
| 268 | 268 | * @param string $lang =false 2 or 5 char lang-code or false for the users language |
| 269 | 269 | */ |
| 270 | - static function add_app($apps, $lang=null) |
|
| 270 | + static function add_app($apps, $lang = null) |
|
| 271 | 271 | { |
| 272 | 272 | //error_log(__METHOD__."(".array2string($apps).", $lang) count(self::\$lang_arr)=".count(self::$lang_arr)); |
| 273 | 273 | //$start = microtime(true); |
| 274 | 274 | if (!$lang) $lang = self::$userlang; |
| 275 | 275 | $tree_level = $instance_level = array(); |
| 276 | 276 | if (!is_array($apps)) $apps = (array)$apps; |
| 277 | - foreach($apps as $key => $app) |
|
| 277 | + foreach ($apps as $key => $app) |
|
| 278 | 278 | { |
| 279 | 279 | if (!isset(self::$loaded_apps[$app]) || self::$loaded_apps[$app] != $lang && $app != 'common') |
| 280 | 280 | { |
@@ -298,26 +298,26 @@ discard block |
||
| 298 | 298 | |
| 299 | 299 | // merging loaded translations together |
| 300 | 300 | $updated_load_via = false; |
| 301 | - foreach((array)$apps as $app) |
|
| 301 | + foreach ((array)$apps as $app) |
|
| 302 | 302 | { |
| 303 | 303 | $l = $app == 'custom' ? 'en' : $lang; |
| 304 | 304 | if (isset($tree_level[$app.':'.$l])) |
| 305 | 305 | { |
| 306 | - $loaded =& $tree_level[$app.':'.$l]; |
|
| 306 | + $loaded = & $tree_level[$app.':'.$l]; |
|
| 307 | 307 | } |
| 308 | 308 | elseif (isset($instance_level[$app.':'.$l])) |
| 309 | 309 | { |
| 310 | - $loaded =& $instance_level[$app.':'.$l]; |
|
| 310 | + $loaded = & $instance_level[$app.':'.$l]; |
|
| 311 | 311 | } |
| 312 | 312 | else |
| 313 | 313 | { |
| 314 | 314 | if (($instance_specific = in_array($app, self::$instance_specific_translations))) |
| 315 | 315 | { |
| 316 | - $loaded =& self::load_app($app, $l); |
|
| 316 | + $loaded = & self::load_app($app, $l); |
|
| 317 | 317 | } |
| 318 | 318 | else |
| 319 | 319 | { |
| 320 | - $loaded =& self::load_app_files($app, $l, null, $updated_load_via); |
|
| 320 | + $loaded = & self::load_app_files($app, $l, null, $updated_load_via); |
|
| 321 | 321 | } |
| 322 | 322 | //error_log(__METHOD__."('$app', '$lang') instance_specific=$instance_specific, load_app(_files)() returned ".(is_array($loaded)?'Array('.count($loaded).')':array2string($loaded))); |
| 323 | 323 | if ($loaded || $instance_specific) |
@@ -330,14 +330,14 @@ discard block |
||
| 330 | 330 | if ($loaded) |
| 331 | 331 | { |
| 332 | 332 | self::$lang_arr = array_merge(self::$lang_arr, $loaded); |
| 333 | - self::$loaded_apps[$app] = $l; // dont set something not existing to $loaded_apps, no need to load client-side |
|
| 333 | + self::$loaded_apps[$app] = $l; // dont set something not existing to $loaded_apps, no need to load client-side |
|
| 334 | 334 | } |
| 335 | 335 | } |
| 336 | 336 | // Re-merge custom over instance level, they have higher precidence |
| 337 | - if($tree_level && !$instance_level && self::$instance_specific_translations) |
|
| 337 | + if ($tree_level && !$instance_level && self::$instance_specific_translations) |
|
| 338 | 338 | { |
| 339 | 339 | $custom = Cache::getInstance(__CLASS__, 'custom:en'); |
| 340 | - if($custom) |
|
| 340 | + if ($custom) |
|
| 341 | 341 | { |
| 342 | 342 | self::$lang_arr = array_merge(self::$lang_arr, $custom); |
| 343 | 343 | } |
@@ -358,15 +358,15 @@ discard block |
||
| 358 | 358 | * @param string $lang =false 2 or 5 char lang-code or false for the users language |
| 359 | 359 | * @return array the loaded strings |
| 360 | 360 | */ |
| 361 | - static function &load_app($app,$lang) |
|
| 361 | + static function &load_app($app, $lang) |
|
| 362 | 362 | { |
| 363 | 363 | //$start = microtime(true); |
| 364 | 364 | if (is_null(self::$db)) self::init(false); |
| 365 | 365 | $loaded = array(); |
| 366 | - foreach(self::$db->select(self::LANG_TABLE,'message_id,content',array( |
|
| 366 | + foreach (self::$db->select(self::LANG_TABLE, 'message_id,content', array( |
|
| 367 | 367 | 'lang' => $lang, |
| 368 | 368 | 'app_name' => $app, |
| 369 | - ),__LINE__,__FILE__) as $row) |
|
| 369 | + ), __LINE__, __FILE__) as $row) |
|
| 370 | 370 | { |
| 371 | 371 | $loaded[strtolower($row['message_id'])] = $row['content']; |
| 372 | 372 | } |
@@ -390,7 +390,7 @@ discard block |
||
| 390 | 390 | 'sitemgr-link' => array('sitemgr'), |
| 391 | 391 | 'groupdav' => array('api'), |
| 392 | 392 | 'developer_tools' => array('etemplate'), |
| 393 | - 'login' => array('api','registration'), |
|
| 393 | + 'login' => array('api', 'registration'), |
|
| 394 | 394 | ); |
| 395 | 395 | |
| 396 | 396 | /** |
@@ -402,7 +402,7 @@ discard block |
||
| 402 | 402 | { |
| 403 | 403 | $lang = $GLOBALS['egw_info']['user']['preferences']['common']['lang']; |
| 404 | 404 | $apps = array_keys($GLOBALS['egw_info']['apps']); |
| 405 | - foreach($apps as $app) |
|
| 405 | + foreach ($apps as $app) |
|
| 406 | 406 | { |
| 407 | 407 | $file = self::get_lang_file($app, $lang); |
| 408 | 408 | // check if file has changed compared to what's cached |
@@ -432,7 +432,7 @@ discard block |
||
| 432 | 432 | Cache::unsetTree(__CLASS__, $app.':'.$lang); |
| 433 | 433 | Cache::unsetTree(__CLASS__, self::get_lang_file($app, $lang)); |
| 434 | 434 | |
| 435 | - foreach(self::$load_via as $load => $via) |
|
| 435 | + foreach (self::$load_via as $load => $via) |
|
| 436 | 436 | { |
| 437 | 437 | //error_log("load_via[load='$load'] = via = ".array2string($via)); |
| 438 | 438 | if ($via === 'all-apps' || in_array($app, (array)$via)) |
@@ -454,7 +454,7 @@ discard block |
||
| 454 | 454 | * @param string $_lang =null |
| 455 | 455 | * @return array $lang or $app => number pairs |
| 456 | 456 | */ |
| 457 | - static function statistics($_lang=null) |
|
| 457 | + static function statistics($_lang = null) |
|
| 458 | 458 | { |
| 459 | 459 | $cache = Cache::getTree(__CLASS__, 'statistics'); |
| 460 | 460 | |
@@ -465,7 +465,7 @@ discard block |
||
| 465 | 465 | { |
| 466 | 466 | $en_phrases = array_keys(self::load_app_files(null, 'en', 'all-apps')); |
| 467 | 467 | $cache['']['en'] = count($en_phrases); |
| 468 | - foreach(array_keys(self::get_available_langs()) as $lang) |
|
| 468 | + foreach (array_keys(self::get_available_langs()) as $lang) |
|
| 469 | 469 | { |
| 470 | 470 | if ($lang == 'en') continue; |
| 471 | 471 | $lang_phrases = array_keys(self::load_app_files(null, $lang, 'all-apps')); |
@@ -476,7 +476,7 @@ discard block |
||
| 476 | 476 | else |
| 477 | 477 | { |
| 478 | 478 | $cache['en'] = array(); |
| 479 | - foreach(scandir(EGW_SERVER_ROOT) as $app) |
|
| 479 | + foreach (scandir(EGW_SERVER_ROOT) as $app) |
|
| 480 | 480 | { |
| 481 | 481 | if ($app[0] == '.' || !is_dir(EGW_SERVER_ROOT.'/'.$app) || |
| 482 | 482 | !file_exists(self::get_lang_file($app, 'en'))) |
@@ -514,7 +514,7 @@ discard block |
||
| 514 | 514 | if (!in_array($_app, self::$instance_specific_translations)) |
| 515 | 515 | { |
| 516 | 516 | // check if cache is NOT invalided by checking if we have a modification time for concerned lang-file |
| 517 | - $time = Cache::getTree(__CLASS__, $file=self::get_lang_file($_app, $_lang)); |
|
| 517 | + $time = Cache::getTree(__CLASS__, $file = self::get_lang_file($_app, $_lang)); |
|
| 518 | 518 | // if we dont have one, cache has been invalidated and we need to load translations |
| 519 | 519 | if (!isset($time)) self::add_app($_app, $_lang); |
| 520 | 520 | |
@@ -534,7 +534,7 @@ discard block |
||
| 534 | 534 | * @param type $time |
| 535 | 535 | * @return type |
| 536 | 536 | */ |
| 537 | - static function max_lang_time($time=null) |
|
| 537 | + static function max_lang_time($time = null) |
|
| 538 | 538 | { |
| 539 | 539 | static $max_lang_time = null; |
| 540 | 540 | |
@@ -545,7 +545,7 @@ discard block |
||
| 545 | 545 | if (isset($time) && $time > $max_lang_time) |
| 546 | 546 | { |
| 547 | 547 | //error_log(__METHOD__."($time) updating previous max_lang_time=$max_lang_time to $time"); |
| 548 | - Cache::setTree(__CLASS__, 'max_lang_time', $max_lang_time=$time); |
|
| 548 | + Cache::setTree(__CLASS__, 'max_lang_time', $max_lang_time = $time); |
|
| 549 | 549 | } |
| 550 | 550 | return $max_lang_time; |
| 551 | 551 | } |
@@ -561,34 +561,34 @@ discard block |
||
| 561 | 561 | * @param boolean $updated_load_via =false on return true if self::$load_via was updated |
| 562 | 562 | * @return array the loaded strings |
| 563 | 563 | */ |
| 564 | - static function &load_app_files($app, $lang, $just_app_file=null, &$updated_load_via=false) |
|
| 564 | + static function &load_app_files($app, $lang, $just_app_file = null, &$updated_load_via = false) |
|
| 565 | 565 | { |
| 566 | 566 | //$start = microtime(true); |
| 567 | 567 | $load_app = isset($just_app_file) ? $just_app_file : (isset(self::$load_via[$app]) ? self::$load_via[$app] : $app); |
| 568 | 568 | $loaded = array(); |
| 569 | - foreach($load_app == 'all-apps' ? scandir(EGW_SERVER_ROOT) : (array)$load_app as $app_dir) |
|
| 569 | + foreach ($load_app == 'all-apps' ? scandir(EGW_SERVER_ROOT) : (array)$load_app as $app_dir) |
|
| 570 | 570 | { |
| 571 | - if ($load_app == 'all-apps' && $app_dir=='..') continue; // do not try to break out of egw server root |
|
| 571 | + if ($load_app == 'all-apps' && $app_dir == '..') continue; // do not try to break out of egw server root |
|
| 572 | 572 | if ($app_dir[0] == '.' || !is_dir(EGW_SERVER_ROOT.'/'.$app_dir) || |
| 573 | - !@file_exists($file=self::get_lang_file($app_dir, $lang)) || |
|
| 573 | + !@file_exists($file = self::get_lang_file($app_dir, $lang)) || |
|
| 574 | 574 | !($f = fopen($file, 'r'))) |
| 575 | 575 | { |
| 576 | 576 | continue; |
| 577 | 577 | } |
| 578 | 578 | // store ctime of file we parse |
| 579 | - Cache::setTree(__CLASS__, $file, $time=filemtime($file)); |
|
| 579 | + Cache::setTree(__CLASS__, $file, $time = filemtime($file)); |
|
| 580 | 580 | self::max_lang_time($time); |
| 581 | 581 | |
| 582 | 582 | $line_nr = 0; |
| 583 | 583 | //use fgets and split the line, as php5.3.3 with squeeze does not support splitting lines with fgetcsv while reading properly |
| 584 | 584 | //if the first letter after the delimiter is a german umlaut (UTF8 representation thereoff) |
| 585 | 585 | //while(($line = fgetcsv($f, 1024, "\t"))) |
| 586 | - while(($read = fgets($f))) |
|
| 586 | + while (($read = fgets($f))) |
|
| 587 | 587 | { |
| 588 | 588 | $line = explode("\t", trim($read)); |
| 589 | 589 | ++$line_nr; |
| 590 | 590 | if (count($line) != 4) continue; |
| 591 | - list($l_id,$l_app,$l_lang,$l_translation) = $line; |
|
| 591 | + list($l_id, $l_app, $l_lang, $l_translation) = $line; |
|
| 592 | 592 | if ($l_lang != $lang) continue; |
| 593 | 593 | if (!isset($just_app_file) && $l_app != $app) |
| 594 | 594 | { |
@@ -629,7 +629,7 @@ discard block |
||
| 629 | 629 | // little sanity check: cached array contains all stock keys, otherwise ignore it |
| 630 | 630 | !array_diff_key(self::$load_via, $load_via)) |
| 631 | 631 | { |
| 632 | - foreach($load_via as $app => $via) |
|
| 632 | + foreach ($load_via as $app => $via) |
|
| 633 | 633 | { |
| 634 | 634 | if (self::$load_via[$app] != $via) |
| 635 | 635 | { |
@@ -655,15 +655,15 @@ discard block |
||
| 655 | 655 | * @param boolean $force_read =false force a re-read of the languages |
| 656 | 656 | * @return array with lang-code => descriptiv lang-name pairs |
| 657 | 657 | */ |
| 658 | - static function get_available_langs($translate=true, $force_read=false) |
|
| 658 | + static function get_available_langs($translate = true, $force_read = false) |
|
| 659 | 659 | { |
| 660 | 660 | if (!is_array(self::$langs) || $force_read) |
| 661 | 661 | { |
| 662 | - if (!($f = fopen($file=EGW_SERVER_ROOT.'/setup/lang/languages','rb'))) |
|
| 662 | + if (!($f = fopen($file = EGW_SERVER_ROOT.'/setup/lang/languages', 'rb'))) |
|
| 663 | 663 | { |
| 664 | 664 | throw new Exception("List of available languages (%1) missing!", $file); |
| 665 | 665 | } |
| 666 | - while(($line = fgetcsv($f, null, "\t"))) |
|
| 666 | + while (($line = fgetcsv($f, null, "\t"))) |
|
| 667 | 667 | { |
| 668 | 668 | self::$langs[$line[0]] = $line[1]; |
| 669 | 669 | } |
@@ -673,12 +673,12 @@ discard block |
||
| 673 | 673 | { |
| 674 | 674 | if (is_null(self::$db)) self::init(false); |
| 675 | 675 | |
| 676 | - foreach(self::$langs as $lang => $name) |
|
| 676 | + foreach (self::$langs as $lang => $name) |
|
| 677 | 677 | { |
| 678 | - self::$langs[$lang] = self::translate($name,False,''); |
|
| 678 | + self::$langs[$lang] = self::translate($name, False, ''); |
|
| 679 | 679 | } |
| 680 | 680 | } |
| 681 | - uasort(self::$langs,'strcasecmp'); |
|
| 681 | + uasort(self::$langs, 'strcasecmp'); |
|
| 682 | 682 | } |
| 683 | 683 | return self::$langs; |
| 684 | 684 | } |
@@ -691,7 +691,7 @@ discard block |
||
| 691 | 691 | * @param boolean $force_read =false force a re-read of the languages |
| 692 | 692 | * @return array with lang-code => descriptiv lang-name pairs |
| 693 | 693 | */ |
| 694 | - static function get_installed_langs($force_read=false) |
|
| 694 | + static function get_installed_langs($force_read = false) |
|
| 695 | 695 | { |
| 696 | 696 | return self::get_available_langs($force_read); |
| 697 | 697 | } |
@@ -708,7 +708,7 @@ discard block |
||
| 708 | 708 | { |
| 709 | 709 | return self::$langs[$lang]; |
| 710 | 710 | } |
| 711 | - return self::$db->select(self::LANGUAGES_TABLE,'lang_name',array('lang_id' => $lang),__LINE__,__FILE__)->fetchColumn(); |
|
| 711 | + return self::$db->select(self::LANGUAGES_TABLE, 'lang_name', array('lang_id' => $lang), __LINE__, __FILE__)->fetchColumn(); |
|
| 712 | 712 | } |
| 713 | 713 | |
| 714 | 714 | /** |
@@ -717,20 +717,20 @@ discard block |
||
| 717 | 717 | * @param boolean $force_read =false |
| 718 | 718 | * @return array with lang_id => lang_name pairs |
| 719 | 719 | */ |
| 720 | - static function list_langs($force_read=false) |
|
| 720 | + static function list_langs($force_read = false) |
|
| 721 | 721 | { |
| 722 | 722 | if (!$force_read) |
| 723 | 723 | { |
| 724 | - return Cache::getInstance(__CLASS__,'list_langs',array(__CLASS__,'list_langs'),array(true)); |
|
| 724 | + return Cache::getInstance(__CLASS__, 'list_langs', array(__CLASS__, 'list_langs'), array(true)); |
|
| 725 | 725 | } |
| 726 | - $languages = self::get_installed_langs(); // available languages |
|
| 727 | - $availible = "('".implode("','",array_keys($languages))."')"; |
|
| 726 | + $languages = self::get_installed_langs(); // available languages |
|
| 727 | + $availible = "('".implode("','", array_keys($languages))."')"; |
|
| 728 | 728 | |
| 729 | 729 | // this shows first the installed, then the available and then the rest |
| 730 | - foreach(self::$db->select(self::LANGUAGES_TABLE,array( |
|
| 731 | - 'lang_id','lang_name', |
|
| 730 | + foreach (self::$db->select(self::LANGUAGES_TABLE, array( |
|
| 731 | + 'lang_id', 'lang_name', |
|
| 732 | 732 | "CASE WHEN lang_id IN $availible THEN 1 ELSE 0 END AS availible", |
| 733 | - ),"lang_id NOT IN ('".implode("','",array_keys($languages))."')",__LINE__,__FILE__,false,' ORDER BY availible DESC,lang_name') as $row) |
|
| 733 | + ), "lang_id NOT IN ('".implode("','", array_keys($languages))."')", __LINE__, __FILE__, false, ' ORDER BY availible DESC,lang_name') as $row) |
|
| 734 | 734 | { |
| 735 | 735 | $languages[$row['lang_id']] = $row['lang_name']; |
| 736 | 736 | } |
@@ -744,7 +744,7 @@ discard block |
||
| 744 | 744 | * @param string $lang language code |
| 745 | 745 | * @return the full path of the filename for the requested app and language |
| 746 | 746 | */ |
| 747 | - static function get_lang_file($app,$lang) |
|
| 747 | + static function get_lang_file($app, $lang) |
|
| 748 | 748 | { |
| 749 | 749 | if ($app == 'common') $app = 'phpgwapi'; |
| 750 | 750 | return EGW_SERVER_ROOT.'/'.$app.'/'.self::LANG_DIR.'/'.self::LANGFILE_PREFIX.$lang.self::LANGFILE_EXTENSION; |
@@ -757,7 +757,7 @@ discard block |
||
| 757 | 757 | */ |
| 758 | 758 | static function get_installed_charsets() |
| 759 | 759 | { |
| 760 | - static $charsets=null; |
|
| 760 | + static $charsets = null; |
|
| 761 | 761 | |
| 762 | 762 | if (!isset($charsets)) |
| 763 | 763 | { |
@@ -787,13 +787,13 @@ discard block |
||
| 787 | 787 | static $extra = array( |
| 788 | 788 | 'ß' => 'ss', |
| 789 | 789 | ); |
| 790 | - $entities = htmlentities($_str,ENT_QUOTES,self::charset()); |
|
| 790 | + $entities = htmlentities($_str, ENT_QUOTES, self::charset()); |
|
| 791 | 791 | |
| 792 | - $estr = str_replace(array_keys($extra),array_values($extra), $entities); |
|
| 793 | - $ustr = preg_replace('/&([aAuUoO])uml;/','\\1e', $estr); // replace german umlauts with the letter plus one 'e' |
|
| 794 | - $astr = preg_replace('/&([a-zA-Z])(grave|acute|circ|ring|cedil|tilde|slash|uml);/','\\1', $ustr); // remove all types of accents |
|
| 792 | + $estr = str_replace(array_keys($extra), array_values($extra), $entities); |
|
| 793 | + $ustr = preg_replace('/&([aAuUoO])uml;/', '\\1e', $estr); // replace german umlauts with the letter plus one 'e' |
|
| 794 | + $astr = preg_replace('/&([a-zA-Z])(grave|acute|circ|ring|cedil|tilde|slash|uml);/', '\\1', $ustr); // remove all types of accents |
|
| 795 | 795 | |
| 796 | - return preg_replace('/&([a-zA-Z]+|#[0-9]+|);/','', $astr); // remove all other entities |
|
| 796 | + return preg_replace('/&([a-zA-Z]+|#[0-9]+|);/', '', $astr); // remove all other entities |
|
| 797 | 797 | } |
| 798 | 798 | |
| 799 | 799 | /** |
@@ -805,7 +805,7 @@ discard block |
||
| 805 | 805 | * @param boolean $check_to_from =true internal to bypass all charset replacements |
| 806 | 806 | * @return string|array converted string(s) from $data |
| 807 | 807 | */ |
| 808 | - static function convert($data,$from=False,$to=False,$check_to_from=true) |
|
| 808 | + static function convert($data, $from = False, $to = False, $check_to_from = true) |
|
| 809 | 809 | { |
| 810 | 810 | if ($check_to_from) |
| 811 | 811 | { |
@@ -816,7 +816,7 @@ discard block |
||
| 816 | 816 | if (!$from) |
| 817 | 817 | { |
| 818 | 818 | $from = self::$mbstring ? strtolower(mb_detect_encoding($data)) : 'iso-8859-1'; |
| 819 | - if($from == 'ascii') |
|
| 819 | + if ($from == 'ascii') |
|
| 820 | 820 | { |
| 821 | 821 | $from = 'iso-8859-1'; |
| 822 | 822 | } |
@@ -826,7 +826,7 @@ discard block |
||
| 826 | 826 | php does not seem to support gb2312 |
| 827 | 827 | but seems to be able to decode it as EUC-CN |
| 828 | 828 | */ |
| 829 | - switch($from) |
|
| 829 | + switch ($from) |
|
| 830 | 830 | { |
| 831 | 831 | case 'ks_c_5601-1987': |
| 832 | 832 | $from = 'CP949'; |
@@ -872,9 +872,9 @@ discard block |
||
| 872 | 872 | } |
| 873 | 873 | if (is_array($data)) |
| 874 | 874 | { |
| 875 | - foreach($data as $key => $str) |
|
| 875 | + foreach ($data as $key => $str) |
|
| 876 | 876 | { |
| 877 | - $ret[$key] = self::convert($str,$from,$to,false); // false = bypass the above checks, as they are already done |
|
| 877 | + $ret[$key] = self::convert($str, $from, $to, false); // false = bypass the above checks, as they are already done |
|
| 878 | 878 | } |
| 879 | 879 | return $ret; |
| 880 | 880 | } |
@@ -886,7 +886,7 @@ discard block |
||
| 886 | 886 | { |
| 887 | 887 | return utf8_decode($data); |
| 888 | 888 | } |
| 889 | - if (self::$mbstring && !$prefer_iconv && ($data = @mb_convert_encoding($data,$to,$from)) != '') |
|
| 889 | + if (self::$mbstring && !$prefer_iconv && ($data = @mb_convert_encoding($data, $to, $from)) != '') |
|
| 890 | 890 | { |
| 891 | 891 | return $data; |
| 892 | 892 | } |
@@ -914,12 +914,12 @@ discard block |
||
| 914 | 914 | // in an email on the first Traditional/Japanese/Korean character, |
| 915 | 915 | // but in reality when people send mails in GB2312, UMA mostly use |
| 916 | 916 | // extended GB13000/GB18030 which allow T/Jap/Korean characters. |
| 917 | - if($from == 'euc-cn') |
|
| 917 | + if ($from == 'euc-cn') |
|
| 918 | 918 | { |
| 919 | 919 | $from = 'gb18030'; |
| 920 | 920 | } |
| 921 | 921 | |
| 922 | - if (($convertedData = iconv($from,$to,$data))) |
|
| 922 | + if (($convertedData = iconv($from, $to, $data))) |
|
| 923 | 923 | { |
| 924 | 924 | return $convertedData; |
| 925 | 925 | } |
@@ -934,9 +934,9 @@ discard block |
||
| 934 | 934 | * @param string|boolean $from charset $data is in or False if it should be detected |
| 935 | 935 | * @return string|array converted string(s) from $data |
| 936 | 936 | */ |
| 937 | - static function convert_jsonsafe($_data,$from=False) |
|
| 937 | + static function convert_jsonsafe($_data, $from = False) |
|
| 938 | 938 | { |
| 939 | - if ($from===false) $from = self::detect_encoding($_data); |
|
| 939 | + if ($from === false) $from = self::detect_encoding($_data); |
|
| 940 | 940 | |
| 941 | 941 | $data = self::convert($_data, strtolower($from)); |
| 942 | 942 | |
@@ -945,12 +945,12 @@ discard block |
||
| 945 | 945 | { |
| 946 | 946 | $test = @json_encode($data); |
| 947 | 947 | //error_log(__METHOD__.__LINE__.' ->'.strlen($data).' Error:'.json_last_error().'<- data:#'.$test.'#'); |
| 948 | - if (($test=="null" || $test === false || is_null($test)) && strlen($data)>0) |
|
| 948 | + if (($test == "null" || $test === false || is_null($test)) && strlen($data) > 0) |
|
| 949 | 949 | { |
| 950 | 950 | // try to fix broken utf8 |
| 951 | - $x = (function_exists('mb_convert_encoding')?mb_convert_encoding($data,'UTF-8','UTF-8'):(function_exists('iconv')?@iconv("UTF-8","UTF-8//IGNORE",$data):$data)); |
|
| 951 | + $x = (function_exists('mb_convert_encoding') ? mb_convert_encoding($data, 'UTF-8', 'UTF-8') : (function_exists('iconv') ? @iconv("UTF-8", "UTF-8//IGNORE", $data) : $data)); |
|
| 952 | 952 | $test = @json_encode($x); |
| 953 | - if (($test=="null" || $test === false || is_null($test)) && strlen($data)>0) |
|
| 953 | + if (($test == "null" || $test === false || is_null($test)) && strlen($data) > 0) |
|
| 954 | 954 | { |
| 955 | 955 | // this should not be needed, unless something fails with charset detection/ wrong charset passed |
| 956 | 956 | error_log(__METHOD__.__LINE__.' Charset Reported:'.$from.' Charset Detected:'.self::detect_encoding($data)); |
@@ -973,36 +973,36 @@ discard block |
||
| 973 | 973 | * @param string $message_id |
| 974 | 974 | * @param string $content translation or null to delete translation |
| 975 | 975 | */ |
| 976 | - static function write($lang,$app,$message_id,$content) |
|
| 976 | + static function write($lang, $app, $message_id, $content) |
|
| 977 | 977 | { |
| 978 | 978 | if ($content) |
| 979 | 979 | { |
| 980 | - self::$db->insert(self::LANG_TABLE,array( |
|
| 980 | + self::$db->insert(self::LANG_TABLE, array( |
|
| 981 | 981 | 'content' => $content, |
| 982 | - ),array( |
|
| 982 | + ), array( |
|
| 983 | 983 | 'lang' => $lang, |
| 984 | 984 | 'app_name' => $app, |
| 985 | 985 | 'message_id' => $message_id, |
| 986 | - ),__LINE__,__FILE__); |
|
| 986 | + ), __LINE__, __FILE__); |
|
| 987 | 987 | } |
| 988 | 988 | else |
| 989 | 989 | { |
| 990 | - self::$db->delete(self::LANG_TABLE,array( |
|
| 990 | + self::$db->delete(self::LANG_TABLE, array( |
|
| 991 | 991 | 'lang' => $lang, |
| 992 | 992 | 'app_name' => $app, |
| 993 | 993 | 'message_id' => $message_id, |
| 994 | - ),__LINE__,__FILE__); |
|
| 994 | + ), __LINE__, __FILE__); |
|
| 995 | 995 | } |
| 996 | 996 | // invalidate the cache |
| 997 | - if(!in_array($app,self::$instance_specific_translations)) |
|
| 997 | + if (!in_array($app, self::$instance_specific_translations)) |
|
| 998 | 998 | { |
| 999 | - Cache::unsetCache(Cache::TREE,__CLASS__,$app.':'.$lang); |
|
| 999 | + Cache::unsetCache(Cache::TREE, __CLASS__, $app.':'.$lang); |
|
| 1000 | 1000 | } |
| 1001 | 1001 | else |
| 1002 | 1002 | { |
| 1003 | - foreach(array_keys((array)self::get_installed_langs()) as $key) |
|
| 1003 | + foreach (array_keys((array)self::get_installed_langs()) as $key) |
|
| 1004 | 1004 | { |
| 1005 | - Cache::unsetCache(Cache::INSTANCE,__CLASS__,$app.':'.$key); |
|
| 1005 | + Cache::unsetCache(Cache::INSTANCE, __CLASS__, $app.':'.$key); |
|
| 1006 | 1006 | } |
| 1007 | 1007 | } |
| 1008 | 1008 | } |
@@ -1015,13 +1015,13 @@ discard block |
||
| 1015 | 1015 | * @param string $message_id |
| 1016 | 1016 | * @return string|boolean content or false if not found |
| 1017 | 1017 | */ |
| 1018 | - static function read($lang,$app_name,$message_id) |
|
| 1018 | + static function read($lang, $app_name, $message_id) |
|
| 1019 | 1019 | { |
| 1020 | - return self::$db->select(self::LANG_TABLE,'content',array( |
|
| 1020 | + return self::$db->select(self::LANG_TABLE, 'content', array( |
|
| 1021 | 1021 | 'lang' => $lang, |
| 1022 | 1022 | 'app_name' => $app_name, |
| 1023 | 1023 | 'message_id' => $message_id, |
| 1024 | - ),__LINE__,__FILE__)->fetchColumn(); |
|
| 1024 | + ), __LINE__, __FILE__)->fetchColumn(); |
|
| 1025 | 1025 | } |
| 1026 | 1026 | |
| 1027 | 1027 | /** |
@@ -1032,22 +1032,22 @@ discard block |
||
| 1032 | 1032 | * @param string $lang ='' default check all langs |
| 1033 | 1033 | * @return string |
| 1034 | 1034 | */ |
| 1035 | - static function get_message_id($translation,$app=null,$lang=null) |
|
| 1035 | + static function get_message_id($translation, $app = null, $lang = null) |
|
| 1036 | 1036 | { |
| 1037 | 1037 | $where = array('content '.self::$db->capabilities[Db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.self::$db->quote($translation)); |
| 1038 | 1038 | if ($app) $where['app_name'] = $app; |
| 1039 | 1039 | if ($lang) $where['lang'] = $lang; |
| 1040 | 1040 | |
| 1041 | - $id = self::$db->select(self::LANG_TABLE,'message_id',$where,__LINE__,__FILE__)->fetchColumn(); |
|
| 1041 | + $id = self::$db->select(self::LANG_TABLE, 'message_id', $where, __LINE__, __FILE__)->fetchColumn(); |
|
| 1042 | 1042 | |
| 1043 | 1043 | // Check cache, since most things aren't in the DB anymore |
| 1044 | - if(!$id) |
|
| 1044 | + if (!$id) |
|
| 1045 | 1045 | { |
| 1046 | 1046 | $ids = array_filter(array_keys(self::$lang_arr), function($haystack) use($translation) { |
| 1047 | - return stripos(self::$lang_arr[$haystack],$translation) !== false; |
|
| 1047 | + return stripos(self::$lang_arr[$haystack], $translation) !== false; |
|
| 1048 | 1048 | }); |
| 1049 | 1049 | $id = array_shift($ids); |
| 1050 | - if(!$id && ($lang && $lang !== 'en' || self::$userlang != 'en')) |
|
| 1050 | + if (!$id && ($lang && $lang !== 'en' || self::$userlang != 'en')) |
|
| 1051 | 1051 | { |
| 1052 | 1052 | // Try english |
| 1053 | 1053 | if (in_array($app, self::$instance_specific_translations)) |
@@ -1064,7 +1064,7 @@ discard block |
||
| 1064 | 1064 | if ($instance_level) $lang_arr = Cache::getInstance(__CLASS__, $instance_level); |
| 1065 | 1065 | $lang_arr = $lang_arr[$app.':en']; |
| 1066 | 1066 | $ids = array_filter(array_keys($lang_arr), function($haystack) use($translation, $lang_arr) { |
| 1067 | - return stripos($lang_arr[$haystack],$translation) !== false; |
|
| 1067 | + return stripos($lang_arr[$haystack], $translation) !== false; |
|
| 1068 | 1068 | }); |
| 1069 | 1069 | $id = array_shift($ids); |
| 1070 | 1070 | } |
@@ -1081,7 +1081,7 @@ discard block |
||
| 1081 | 1081 | * @param string $verify =null encoding to verify, get checked first and have a match for only ascii or no detection available |
| 1082 | 1082 | * @return string - encoding |
| 1083 | 1083 | */ |
| 1084 | - static function detect_encoding($string, $verify=null) |
|
| 1084 | + static function detect_encoding($string, $verify = null) |
|
| 1085 | 1085 | { |
| 1086 | 1086 | if (function_exists('iconv')) |
| 1087 | 1087 | { |
@@ -1104,7 +1104,7 @@ discard block |
||
| 1104 | 1104 | } |
| 1105 | 1105 | if ($verify && (!isset($detected) || $detected === 'ascii')) |
| 1106 | 1106 | { |
| 1107 | - return $verify; // ascii matches all charsets |
|
| 1107 | + return $verify; // ascii matches all charsets |
|
| 1108 | 1108 | } |
| 1109 | 1109 | return isset($detected) ? $detected : 'iso-8859-1'; // we choose to return iso-8859-1 as default |
| 1110 | 1110 | } |
@@ -126,17 +126,23 @@ discard block |
||
| 126 | 126 | } |
| 127 | 127 | return $charsets[$lang]; |
| 128 | 128 | } |
| 129 | - if (self::$system_charset) // do we have a system-charset ==> return it |
|
| 129 | + if (self::$system_charset) |
|
| 130 | + { |
|
| 131 | + // do we have a system-charset ==> return it |
|
| 130 | 132 | { |
| 131 | 133 | $charset = self::$system_charset; |
| 132 | 134 | } |
| 135 | + } |
|
| 133 | 136 | else |
| 134 | 137 | { |
| 135 | 138 | // if no translations are loaded (system-startup) use a default, else lang('charset') |
| 136 | 139 | $charset = !self::$lang_arr ? 'utf-8' : strtolower(self::translate('charset')); |
| 137 | 140 | } |
| 138 | 141 | // in case no charset is set, default to utf-8 |
| 139 | - if (empty($charset) || $charset == 'charset') $charset = 'utf-8'; |
|
| 142 | + if (empty($charset) || $charset == 'charset') |
|
| 143 | + { |
|
| 144 | + $charset = 'utf-8'; |
|
| 145 | + } |
|
| 140 | 146 | |
| 141 | 147 | // we need to set our charset as mbstring.internal_encoding if mbstring.func_overlaod > 0 |
| 142 | 148 | // else we get problems for a charset is different from the default utf-8 |
@@ -195,8 +201,14 @@ discard block |
||
| 195 | 201 | } |
| 196 | 202 | $apps = array('common'); |
| 197 | 203 | // for eTemplate apps, load etemplate before app itself (allowing app to overwrite etemplate translations) |
| 198 | - if (class_exists('EGroupware\\Api\\Etemplate', false) || class_exists('etemplate', false)) $apps[] = 'etemplate'; |
|
| 199 | - if ($GLOBALS['egw_info']['flags']['currentapp']) $apps[] = $GLOBALS['egw_info']['flags']['currentapp']; |
|
| 204 | + if (class_exists('EGroupware\\Api\\Etemplate', false) || class_exists('etemplate', false)) |
|
| 205 | + { |
|
| 206 | + $apps[] = 'etemplate'; |
|
| 207 | + } |
|
| 208 | + if ($GLOBALS['egw_info']['flags']['currentapp']) |
|
| 209 | + { |
|
| 210 | + $apps[] = $GLOBALS['egw_info']['flags']['currentapp']; |
|
| 211 | + } |
|
| 200 | 212 | // load instance specific translations last, so they can overwrite everything |
| 201 | 213 | $apps[] = 'custom'; |
| 202 | 214 | self::add_app($apps); |
@@ -224,7 +236,10 @@ discard block |
||
| 224 | 236 | self::init(); |
| 225 | 237 | } |
| 226 | 238 | $ret = $key; // save key if we dont find a translation |
| 227 | - if ($not_found) $ret .= $not_found; |
|
| 239 | + if ($not_found) |
|
| 240 | + { |
|
| 241 | + $ret .= $not_found; |
|
| 242 | + } |
|
| 228 | 243 | |
| 229 | 244 | if (isset(self::$lang_arr[$key])) |
| 230 | 245 | { |
@@ -271,9 +286,15 @@ discard block |
||
| 271 | 286 | { |
| 272 | 287 | //error_log(__METHOD__."(".array2string($apps).", $lang) count(self::\$lang_arr)=".count(self::$lang_arr)); |
| 273 | 288 | //$start = microtime(true); |
| 274 | - if (!$lang) $lang = self::$userlang; |
|
| 289 | + if (!$lang) |
|
| 290 | + { |
|
| 291 | + $lang = self::$userlang; |
|
| 292 | + } |
|
| 275 | 293 | $tree_level = $instance_level = array(); |
| 276 | - if (!is_array($apps)) $apps = (array)$apps; |
|
| 294 | + if (!is_array($apps)) |
|
| 295 | + { |
|
| 296 | + $apps = (array)$apps; |
|
| 297 | + } |
|
| 277 | 298 | foreach($apps as $key => $app) |
| 278 | 299 | { |
| 279 | 300 | if (!isset(self::$loaded_apps[$app]) || self::$loaded_apps[$app] != $lang && $app != 'common') |
@@ -293,8 +314,14 @@ discard block |
||
| 293 | 314 | } |
| 294 | 315 | } |
| 295 | 316 | // load all translations from cache at once |
| 296 | - if ($tree_level) $tree_level = Cache::getTree(__CLASS__, $tree_level); |
|
| 297 | - if ($instance_level) $instance_level = Cache::getInstance(__CLASS__, $instance_level); |
|
| 317 | + if ($tree_level) |
|
| 318 | + { |
|
| 319 | + $tree_level = Cache::getTree(__CLASS__, $tree_level); |
|
| 320 | + } |
|
| 321 | + if ($instance_level) |
|
| 322 | + { |
|
| 323 | + $instance_level = Cache::getInstance(__CLASS__, $instance_level); |
|
| 324 | + } |
|
| 298 | 325 | |
| 299 | 326 | // merging loaded translations together |
| 300 | 327 | $updated_load_via = false; |
@@ -361,7 +388,10 @@ discard block |
||
| 361 | 388 | static function &load_app($app,$lang) |
| 362 | 389 | { |
| 363 | 390 | //$start = microtime(true); |
| 364 | - if (is_null(self::$db)) self::init(false); |
|
| 391 | + if (is_null(self::$db)) |
|
| 392 | + { |
|
| 393 | + self::init(false); |
|
| 394 | + } |
|
| 365 | 395 | $loaded = array(); |
| 366 | 396 | foreach(self::$db->select(self::LANG_TABLE,'message_id,content',array( |
| 367 | 397 | 'lang' => $lang, |
@@ -467,7 +497,10 @@ discard block |
||
| 467 | 497 | $cache['']['en'] = count($en_phrases); |
| 468 | 498 | foreach(array_keys(self::get_available_langs()) as $lang) |
| 469 | 499 | { |
| 470 | - if ($lang == 'en') continue; |
|
| 500 | + if ($lang == 'en') |
|
| 501 | + { |
|
| 502 | + continue; |
|
| 503 | + } |
|
| 471 | 504 | $lang_phrases = array_keys(self::load_app_files(null, $lang, 'all-apps')); |
| 472 | 505 | $valid_phrases = array_intersect($lang_phrases, $en_phrases); |
| 473 | 506 | $cache[''][$lang] = count($valid_phrases); |
@@ -484,7 +517,10 @@ discard block |
||
| 484 | 517 | continue; |
| 485 | 518 | } |
| 486 | 519 | $en_phrases = array_keys(self::load_app_files(null, 'en', $app)); |
| 487 | - if (count($en_phrases) <= 2) continue; |
|
| 520 | + if (count($en_phrases) <= 2) |
|
| 521 | + { |
|
| 522 | + continue; |
|
| 523 | + } |
|
| 488 | 524 | $cache['en'][$app] = count($en_phrases); |
| 489 | 525 | $lang_phrases = array_keys(self::load_app_files(null, $_lang, $app)); |
| 490 | 526 | $valid_phrases = array_intersect($lang_phrases, $en_phrases); |
@@ -516,7 +552,10 @@ discard block |
||
| 516 | 552 | // check if cache is NOT invalided by checking if we have a modification time for concerned lang-file |
| 517 | 553 | $time = Cache::getTree(__CLASS__, $file=self::get_lang_file($_app, $_lang)); |
| 518 | 554 | // if we dont have one, cache has been invalidated and we need to load translations |
| 519 | - if (!isset($time)) self::add_app($_app, $_lang); |
|
| 555 | + if (!isset($time)) |
|
| 556 | + { |
|
| 557 | + self::add_app($_app, $_lang); |
|
| 558 | + } |
|
| 520 | 559 | |
| 521 | 560 | $etag = self::max_lang_time(); |
| 522 | 561 | } |
@@ -568,7 +607,11 @@ discard block |
||
| 568 | 607 | $loaded = array(); |
| 569 | 608 | foreach($load_app == 'all-apps' ? scandir(EGW_SERVER_ROOT) : (array)$load_app as $app_dir) |
| 570 | 609 | { |
| 571 | - if ($load_app == 'all-apps' && $app_dir=='..') continue; // do not try to break out of egw server root |
|
| 610 | + if ($load_app == 'all-apps' && $app_dir=='..') |
|
| 611 | + { |
|
| 612 | + continue; |
|
| 613 | + } |
|
| 614 | + // do not try to break out of egw server root |
|
| 572 | 615 | if ($app_dir[0] == '.' || !is_dir(EGW_SERVER_ROOT.'/'.$app_dir) || |
| 573 | 616 | !@file_exists($file=self::get_lang_file($app_dir, $lang)) || |
| 574 | 617 | !($f = fopen($file, 'r'))) |
@@ -587,9 +630,15 @@ discard block |
||
| 587 | 630 | { |
| 588 | 631 | $line = explode("\t", trim($read)); |
| 589 | 632 | ++$line_nr; |
| 590 | - if (count($line) != 4) continue; |
|
| 633 | + if (count($line) != 4) |
|
| 634 | + { |
|
| 635 | + continue; |
|
| 636 | + } |
|
| 591 | 637 | list($l_id,$l_app,$l_lang,$l_translation) = $line; |
| 592 | - if ($l_lang != $lang) continue; |
|
| 638 | + if ($l_lang != $lang) |
|
| 639 | + { |
|
| 640 | + continue; |
|
| 641 | + } |
|
| 593 | 642 | if (!isset($just_app_file) && $l_app != $app) |
| 594 | 643 | { |
| 595 | 644 | // check if $l_app contained in file in $app_dir is mentioned in $load_via |
@@ -603,8 +652,14 @@ discard block |
||
| 603 | 652 | } |
| 604 | 653 | // if not update load_via accordingly and store it as config |
| 605 | 654 | //error_log(__METHOD__."() load_via does not contain $l_app => $app_dir"); |
| 606 | - if (!isset(self::$load_via[$l_app])) self::$load_via[$l_app] = array($l_app); |
|
| 607 | - if (!is_array(self::$load_via[$l_app])) self::$load_via[$l_app] = array(self::$load_via[$l_app]); |
|
| 655 | + if (!isset(self::$load_via[$l_app])) |
|
| 656 | + { |
|
| 657 | + self::$load_via[$l_app] = array($l_app); |
|
| 658 | + } |
|
| 659 | + if (!is_array(self::$load_via[$l_app])) |
|
| 660 | + { |
|
| 661 | + self::$load_via[$l_app] = array(self::$load_via[$l_app]); |
|
| 662 | + } |
|
| 608 | 663 | self::$load_via[$l_app][] = $app_dir; |
| 609 | 664 | $updated_load_via = true; |
| 610 | 665 | } |
@@ -671,7 +726,10 @@ discard block |
||
| 671 | 726 | |
| 672 | 727 | if ($translate) |
| 673 | 728 | { |
| 674 | - if (is_null(self::$db)) self::init(false); |
|
| 729 | + if (is_null(self::$db)) |
|
| 730 | + { |
|
| 731 | + self::init(false); |
|
| 732 | + } |
|
| 675 | 733 | |
| 676 | 734 | foreach(self::$langs as $lang => $name) |
| 677 | 735 | { |
@@ -704,10 +762,13 @@ discard block |
||
| 704 | 762 | */ |
| 705 | 763 | static function lang2language($lang) |
| 706 | 764 | { |
| 707 | - if (isset(self::$langs[$lang])) // no need to query the DB |
|
| 765 | + if (isset(self::$langs[$lang])) |
|
| 766 | + { |
|
| 767 | + // no need to query the DB |
|
| 708 | 768 | { |
| 709 | 769 | return self::$langs[$lang]; |
| 710 | 770 | } |
| 771 | + } |
|
| 711 | 772 | return self::$db->select(self::LANGUAGES_TABLE,'lang_name',array('lang_id' => $lang),__LINE__,__FILE__)->fetchColumn(); |
| 712 | 773 | } |
| 713 | 774 | |
@@ -746,7 +807,10 @@ discard block |
||
| 746 | 807 | */ |
| 747 | 808 | static function get_lang_file($app,$lang) |
| 748 | 809 | { |
| 749 | - if ($app == 'common') $app = 'phpgwapi'; |
|
| 810 | + if ($app == 'common') |
|
| 811 | + { |
|
| 812 | + $app = 'phpgwapi'; |
|
| 813 | + } |
|
| 750 | 814 | return EGW_SERVER_ROOT.'/'.$app.'/'.self::LANG_DIR.'/'.self::LANGFILE_PREFIX.$lang.self::LANGFILE_EXTENSION; |
| 751 | 815 | } |
| 752 | 816 | |
@@ -809,9 +873,15 @@ discard block |
||
| 809 | 873 | { |
| 810 | 874 | if ($check_to_from) |
| 811 | 875 | { |
| 812 | - if ($from) $from = strtolower($from); |
|
| 876 | + if ($from) |
|
| 877 | + { |
|
| 878 | + $from = strtolower($from); |
|
| 879 | + } |
|
| 813 | 880 | |
| 814 | - if ($to) $to = strtolower($to); |
|
| 881 | + if ($to) |
|
| 882 | + { |
|
| 883 | + $to = strtolower($to); |
|
| 884 | + } |
|
| 815 | 885 | |
| 816 | 886 | if (!$from) |
| 817 | 887 | { |
@@ -936,7 +1006,10 @@ discard block |
||
| 936 | 1006 | */ |
| 937 | 1007 | static function convert_jsonsafe($_data,$from=False) |
| 938 | 1008 | { |
| 939 | - if ($from===false) $from = self::detect_encoding($_data); |
|
| 1009 | + if ($from===false) |
|
| 1010 | + { |
|
| 1011 | + $from = self::detect_encoding($_data); |
|
| 1012 | + } |
|
| 940 | 1013 | |
| 941 | 1014 | $data = self::convert($_data, strtolower($from)); |
| 942 | 1015 | |
@@ -1035,15 +1108,22 @@ discard block |
||
| 1035 | 1108 | static function get_message_id($translation,$app=null,$lang=null) |
| 1036 | 1109 | { |
| 1037 | 1110 | $where = array('content '.self::$db->capabilities[Db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.self::$db->quote($translation)); |
| 1038 | - if ($app) $where['app_name'] = $app; |
|
| 1039 | - if ($lang) $where['lang'] = $lang; |
|
| 1111 | + if ($app) |
|
| 1112 | + { |
|
| 1113 | + $where['app_name'] = $app; |
|
| 1114 | + } |
|
| 1115 | + if ($lang) |
|
| 1116 | + { |
|
| 1117 | + $where['lang'] = $lang; |
|
| 1118 | + } |
|
| 1040 | 1119 | |
| 1041 | 1120 | $id = self::$db->select(self::LANG_TABLE,'message_id',$where,__LINE__,__FILE__)->fetchColumn(); |
| 1042 | 1121 | |
| 1043 | 1122 | // Check cache, since most things aren't in the DB anymore |
| 1044 | 1123 | if(!$id) |
| 1045 | 1124 | { |
| 1046 | - $ids = array_filter(array_keys(self::$lang_arr), function($haystack) use($translation) { |
|
| 1125 | + $ids = array_filter(array_keys(self::$lang_arr), function($haystack) use($translation) |
|
| 1126 | + { |
|
| 1047 | 1127 | return stripos(self::$lang_arr[$haystack],$translation) !== false; |
| 1048 | 1128 | }); |
| 1049 | 1129 | $id = array_shift($ids); |
@@ -1060,10 +1140,17 @@ discard block |
||
| 1060 | 1140 | } |
| 1061 | 1141 | |
| 1062 | 1142 | // load all translations from cache at once |
| 1063 | - if ($tree_level) $lang_arr = Cache::getTree(__CLASS__, $tree_level); |
|
| 1064 | - if ($instance_level) $lang_arr = Cache::getInstance(__CLASS__, $instance_level); |
|
| 1143 | + if ($tree_level) |
|
| 1144 | + { |
|
| 1145 | + $lang_arr = Cache::getTree(__CLASS__, $tree_level); |
|
| 1146 | + } |
|
| 1147 | + if ($instance_level) |
|
| 1148 | + { |
|
| 1149 | + $lang_arr = Cache::getInstance(__CLASS__, $instance_level); |
|
| 1150 | + } |
|
| 1065 | 1151 | $lang_arr = $lang_arr[$app.':en']; |
| 1066 | - $ids = array_filter(array_keys($lang_arr), function($haystack) use($translation, $lang_arr) { |
|
| 1152 | + $ids = array_filter(array_keys($lang_arr), function($haystack) use($translation, $lang_arr) |
|
| 1153 | + { |
|
| 1067 | 1154 | return stripos($lang_arr[$haystack],$translation) !== false; |
| 1068 | 1155 | }); |
| 1069 | 1156 | $id = array_shift($ids); |
@@ -1087,7 +1174,10 @@ discard block |
||
| 1087 | 1174 | { |
| 1088 | 1175 | $list = array('utf-8', 'iso-8859-1', 'windows-1251'); // list may be extended |
| 1089 | 1176 | |
| 1090 | - if ($verify) array_unshift($list, $verify); |
|
| 1177 | + if ($verify) |
|
| 1178 | + { |
|
| 1179 | + array_unshift($list, $verify); |
|
| 1180 | + } |
|
| 1091 | 1181 | |
| 1092 | 1182 | foreach ($list as $item) |
| 1093 | 1183 | { |