Changeset View
Standalone View
src/include/rcube_imap_generic.php
Show All 24 Lines | |||||
*/ | */ | ||||
/** | /** | ||||
* PHP based wrapper class to connect to an IMAP server | * PHP based wrapper class to connect to an IMAP server | ||||
* | * | ||||
* @package Framework | * @package Framework | ||||
* @subpackage Storage | * @subpackage Storage | ||||
*/ | */ | ||||
class rcube_imap_generic | class rcube_imap_generic | ||||
Lint: PSR1.Classes.ClassDeclaration.MissingNamespace: Each class must be in a namespace of at least one level (a top-level vendor name) | |||||
Lint: Squiz.Classes.ValidClassName.NotCamelCaps Class name "rcube_imap_generic" is not in PascalCase format Lint: Squiz.Classes.ValidClassName.NotCamelCaps: Class name "rcube_imap_generic" is not in PascalCase format | |||||
{ | { | ||||
public $error; | public $error; | ||||
public $errornum; | public $errornum; | ||||
public $result; | public $result; | ||||
public $resultcode; | public $resultcode; | ||||
public $selected; | public $selected; | ||||
public $data = array(); | public $data = array(); | ||||
public $flags = array( | public $flags = array( | ||||
Show All 39 Lines | class rcube_imap_generic | ||||
* Send simple (one line) command to the connection stream | * Send simple (one line) command to the connection stream | ||||
* | * | ||||
* @param string $string Command string | * @param string $string Command string | ||||
* @param bool $endln True if CRLF need to be added at the end of command | * @param bool $endln True if CRLF need to be added at the end of command | ||||
* @param bool $anonymized Don't write the given data to log but a placeholder | * @param bool $anonymized Don't write the given data to log but a placeholder | ||||
* | * | ||||
* @param int Number of bytes sent, False on error | * @param int Number of bytes sent, False on error | ||||
*/ | */ | ||||
protected function putLine($string, $endln = true, $anonymized = false) | protected function putLine($string, $endln = true, $anonymized = false) | ||||
Lint: PHPDoc tag @param has invalid value (int Number of bytes sent, False on error): Unexpected token "Number", expected variable at offset 317 PHPDoc tag @param has invalid value (int Number of bytes sent, False on error): Unexpected token "Number", expected variable at offset 317 Lint: PHPDoc tag @param has invalid value (int Number of bytes sent, False on error): Unexpected token "Number", expected variable at offset 317: PHPDoc tag @param has invalid value (int Number of bytes sent, False on error): Unexpected… | |||||
{ | { | ||||
if (!$this->fp) { | if (!$this->fp) { | ||||
return false; | return false; | ||||
} | } | ||||
if ($this->debug) { | if ($this->debug) { | ||||
// anonymize the sent command for logging | // anonymize the sent command for logging | ||||
$cut = $endln ? 2 : 0; | $cut = $endln ? 2 : 0; | ||||
if ($anonymized && preg_match('/^(A\d+ (?:[A-Z]+ )+)(.+)/', $string, $m)) { | if ($anonymized && preg_match('/^(A\d+ (?:[A-Z]+ )+)(.+)/', $string, $m)) { | ||||
$log = $m[1] . sprintf('****** [%d]', strlen($m[2]) - $cut); | $log = $m[1] . sprintf('****** [%d]', strlen($m[2]) - $cut); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($anonymized) { | else if ($anonymized) { | ||||
$log = sprintf('****** [%d]', strlen($string) - $cut); | $log = sprintf('****** [%d]', strlen($string) - $cut); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$log = rtrim($string); | $log = rtrim($string); | ||||
} | } | ||||
$this->debug('C: ' . $log); | $this->debug('C: ' . $log); | ||||
} | } | ||||
if ($endln) { | if ($endln) { | ||||
Show All 14 Lines | class rcube_imap_generic | ||||
* Requests (RFC3501 7.5) and LITERAL+ (RFC2088) support | * Requests (RFC3501 7.5) and LITERAL+ (RFC2088) support | ||||
* | * | ||||
* @param string $string Command string | * @param string $string Command string | ||||
* @param bool $endln True if CRLF need to be added at the end of command | * @param bool $endln True if CRLF need to be added at the end of command | ||||
* @param bool $anonymized Don't write the given data to log but a placeholder | * @param bool $anonymized Don't write the given data to log but a placeholder | ||||
* | * | ||||
* @return int|bool Number of bytes sent, False on error | * @return int|bool Number of bytes sent, False on error | ||||
*/ | */ | ||||
protected function putLineC($string, $endln=true, $anonymized=false) | protected function putLineC($string, $endln=true, $anonymized=false) | ||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$endln" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$endln" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$endln"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$endln"; expected 1 but… | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$anonymized" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$anonymized" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$anonymized"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$anonymized"; expected 1… | |||||
{ | { | ||||
if (!$this->fp) { | if (!$this->fp) { | ||||
return false; | return false; | ||||
} | } | ||||
if ($endln) { | if ($endln) { | ||||
$string .= "\r\n"; | $string .= "\r\n"; | ||||
} | } | ||||
$res = 0; | $res = 0; | ||||
if ($parts = preg_split('/(\{[0-9]+\}\r\n)/m', $string, -1, PREG_SPLIT_DELIM_CAPTURE)) { | if ($parts = preg_split('/(\{[0-9]+\}\r\n)/m', $string, -1, PREG_SPLIT_DELIM_CAPTURE)) { | ||||
for ($i=0, $cnt=count($parts); $i<$cnt; $i++) { | for ($i=0, $cnt=count($parts); $i<$cnt; $i++) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
if ($i+1 < $cnt && preg_match('/^\{([0-9]+)\}\r\n$/', $parts[$i+1], $matches)) { | if ($i+1 < $cnt && preg_match('/^\{([0-9]+)\}\r\n$/', $parts[$i+1], $matches)) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
// LITERAL+ support | // LITERAL+ support | ||||
if ($this->prefs['literal+']) { | if ($this->prefs['literal+']) { | ||||
$parts[$i+1] = sprintf("{%d+}\r\n", $matches[1]); | $parts[$i+1] = sprintf("{%d+}\r\n", $matches[1]); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
} | } | ||||
$bytes = $this->putLine($parts[$i].$parts[$i+1], false, $anonymized); | $bytes = $this->putLine($parts[$i].$parts[$i+1], false, $anonymized); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
if ($bytes === false) { | if ($bytes === false) { | ||||
return false; | return false; | ||||
} | } | ||||
$res += $bytes; | $res += $bytes; | ||||
// don't wait if server supports LITERAL+ capability | // don't wait if server supports LITERAL+ capability | ||||
if (!$this->prefs['literal+']) { | if (!$this->prefs['literal+']) { | ||||
$line = $this->readLine(1000); | $line = $this->readLine(1000); | ||||
// handle error in command | // handle error in command | ||||
if ($line[0] != '+') { | if ($line[0] != '+') { | ||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||
$i++; | $i++; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$bytes = $this->putLine($parts[$i], false, $anonymized); | $bytes = $this->putLine($parts[$i], false, $anonymized); | ||||
if ($bytes === false) { | if ($bytes === false) { | ||||
return false; | return false; | ||||
} | } | ||||
$res += $bytes; | $res += $bytes; | ||||
} | } | ||||
Show All 26 Lines | protected function readLine($size = 1024) | ||||
$buffer = fgets($this->fp, $size); | $buffer = fgets($this->fp, $size); | ||||
if ($buffer === false) { | if ($buffer === false) { | ||||
$this->closeSocket(); | $this->closeSocket(); | ||||
break; | break; | ||||
} | } | ||||
if ($this->debug) { | if ($this->debug) { | ||||
$this->debug('S: '. rtrim($buffer)); | $this->debug('S: '. rtrim($buffer)); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
} | } | ||||
$line .= $buffer; | $line .= $buffer; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
while (substr($buffer, -1) != "\n"); | while (substr($buffer, -1) != "\n"); | ||||
return $line; | return $line; | ||||
} | } | ||||
/** | /** | ||||
* Reads more data from the connection stream when provided | * Reads more data from the connection stream when provided | ||||
* data contain string literal | * data contain string literal | ||||
* | * | ||||
* @param string $line Response text | * @param string $line Response text | ||||
* @param bool $escape Enables escaping | * @param bool $escape Enables escaping | ||||
* | * | ||||
* @return string Line of text response | * @return string Line of text response | ||||
*/ | */ | ||||
protected function multLine($line, $escape = false) | protected function multLine($line, $escape = false) | ||||
{ | { | ||||
$line = rtrim($line); | $line = rtrim($line); | ||||
if (preg_match('/\{([0-9]+)\}$/', $line, $m)) { | if (preg_match('/\{([0-9]+)\}$/', $line, $m)) { | ||||
$out = ''; | $out = ''; | ||||
$str = substr($line, 0, -strlen($m[0])); | $str = substr($line, 0, -strlen($m[0])); | ||||
$bytes = $m[1]; | $bytes = $m[1]; | ||||
while (strlen($out) < $bytes) { | while (strlen($out) < $bytes) { | ||||
$line = $this->readBytes($bytes); | $line = $this->readBytes($bytes); | ||||
if ($line === null) { | if ($line === null) { | ||||
Lint: Strict comparison using === between string and null will always evaluate to false. Strict comparison using === between string and null will always evaluate to false. Lint: Strict comparison using === between string and null will always evaluate to false.: Strict comparison using === between string and null will always evaluate to false. | |||||
break; | break; | ||||
} | } | ||||
$out .= $line; | $out .= $line; | ||||
} | } | ||||
$line = $str . ($escape ? $this->escape($out) : $out); | $line = $str . ($escape ? $this->escape($out) : $out); | ||||
} | } | ||||
Show All 9 Lines | class rcube_imap_generic | ||||
* @return string Response text | * @return string Response text | ||||
*/ | */ | ||||
protected function readBytes($bytes) | protected function readBytes($bytes) | ||||
{ | { | ||||
$data = ''; | $data = ''; | ||||
$len = 0; | $len = 0; | ||||
while ($len < $bytes && !$this->eof()) { | while ($len < $bytes && !$this->eof()) { | ||||
$d = fread($this->fp, $bytes-$len); | $d = fread($this->fp, $bytes-$len); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "-"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "-"; 0 found | |||||
if ($this->debug) { | if ($this->debug) { | ||||
$this->debug('S: '. $d); | $this->debug('S: '. $d); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
} | } | ||||
$data .= $d; | $data .= $d; | ||||
$data_len = strlen($data); | $data_len = strlen($data); | ||||
if ($len == $data_len) { | if ($len == $data_len) { | ||||
break; // nothing was read -> exit to avoid apache lockups | break; // nothing was read -> exit to avoid apache lockups | ||||
} | } | ||||
$len = $data_len; | $len = $data_len; | ||||
} | } | ||||
Show All 11 Lines | class rcube_imap_generic | ||||
protected function readReply(&$untagged = null) | protected function readReply(&$untagged = null) | ||||
{ | { | ||||
do { | do { | ||||
$line = trim($this->readLine(1024)); | $line = trim($this->readLine(1024)); | ||||
// store untagged response lines | // store untagged response lines | ||||
if ($line[0] == '*') { | if ($line[0] == '*') { | ||||
$untagged[] = $line; | $untagged[] = $line; | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
while ($line[0] == '*'); | while ($line[0] == '*'); | ||||
if ($untagged) { | if ($untagged) { | ||||
$untagged = implode("\n", $untagged); | $untagged = implode("\n", $untagged); | ||||
} | } | ||||
return $line; | return $line; | ||||
} | } | ||||
Show All 9 Lines | class rcube_imap_generic | ||||
protected function parseResult($string, $err_prefix = '') | protected function parseResult($string, $err_prefix = '') | ||||
{ | { | ||||
if (preg_match('/^[a-z0-9*]+ (OK|NO|BAD|BYE)(.*)$/i', trim($string), $matches)) { | if (preg_match('/^[a-z0-9*]+ (OK|NO|BAD|BYE)(.*)$/i', trim($string), $matches)) { | ||||
$res = strtoupper($matches[1]); | $res = strtoupper($matches[1]); | ||||
$str = trim($matches[2]); | $str = trim($matches[2]); | ||||
if ($res == 'OK') { | if ($res == 'OK') { | ||||
$this->errornum = self::ERROR_OK; | $this->errornum = self::ERROR_OK; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($res == 'NO') { | else if ($res == 'NO') { | ||||
$this->errornum = self::ERROR_NO; | $this->errornum = self::ERROR_NO; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($res == 'BAD') { | else if ($res == 'BAD') { | ||||
$this->errornum = self::ERROR_BAD; | $this->errornum = self::ERROR_BAD; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($res == 'BYE') { | else if ($res == 'BYE') { | ||||
$this->closeSocket(); | $this->closeSocket(); | ||||
$this->errornum = self::ERROR_BYE; | $this->errornum = self::ERROR_BYE; | ||||
} | } | ||||
if ($str) { | if ($str) { | ||||
$str = trim($str); | $str = trim($str); | ||||
// get response string and code (RFC5530) | // get response string and code (RFC5530) | ||||
if (preg_match("/^\[([a-z-]+)\]/i", $str, $m)) { | if (preg_match("/^\[([a-z-]+)\]/i", $str, $m)) { | ||||
$this->resultcode = strtoupper($m[1]); | $this->resultcode = strtoupper($m[1]); | ||||
$str = trim(substr($str, strlen($m[1]) + 2)); | $str = trim(substr($str, strlen($m[1]) + 2)); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$this->resultcode = null; | $this->resultcode = null; | ||||
// parse response for [APPENDUID 1204196876 3456] | // parse response for [APPENDUID 1204196876 3456] | ||||
if (preg_match("/^\[APPENDUID [0-9]+ ([0-9]+)\]/i", $str, $m)) { | if (preg_match("/^\[APPENDUID [0-9]+ ([0-9]+)\]/i", $str, $m)) { | ||||
$this->data['APPENDUID'] = $m[1]; | $this->data['APPENDUID'] = $m[1]; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
// parse response for [COPYUID 1204196876 3456:3457 123:124] | // parse response for [COPYUID 1204196876 3456:3457 123:124] | ||||
else if (preg_match("/^\[COPYUID [0-9]+ ([0-9,:]+) ([0-9,:]+)\]/i", $str, $m)) { | else if (preg_match("/^\[COPYUID [0-9]+ ([0-9,:]+) ([0-9,:]+)\]/i", $str, $m)) { | ||||
$this->data['COPYUID'] = array($m[1], $m[2]); | $this->data['COPYUID'] = array($m[1], $m[2]); | ||||
} | } | ||||
} | } | ||||
$this->result = $str; | $this->result = $str; | ||||
if ($this->errornum != self::ERROR_OK) { | if ($this->errornum != self::ERROR_OK) { | ||||
$this->error = $err_prefix ? $err_prefix.$str : $str; | $this->error = $err_prefix ? $err_prefix.$str : $str; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
} | } | ||||
} | } | ||||
return $this->errornum; | return $this->errornum; | ||||
} | } | ||||
return self::ERROR_UNKNOWN; | return self::ERROR_UNKNOWN; | ||||
} | } | ||||
/** | /** | ||||
* Checks connection stream state. | * Checks connection stream state. | ||||
* | * | ||||
* @return bool True if connection is closed | * @return bool True if connection is closed | ||||
*/ | */ | ||||
protected function eof() | protected function eof() | ||||
{ | { | ||||
if (!is_resource($this->fp)) { | if (!is_resource($this->fp)) { | ||||
return true; | return true; | ||||
} | } | ||||
// If a connection opened by fsockopen() wasn't closed | // If a connection opened by fsockopen() wasn't closed | ||||
// by the server, feof() will hang. | // by the server, feof() will hang. | ||||
$start = microtime(true); | $start = microtime(true); | ||||
if (feof($this->fp) || | if (feof($this->fp) || | ||||
Lint: PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine The first expression of a multi-line control structure must be on the line after the opening parenthesis Lint: PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine: The first expression of a multi-line control structure must be on the line after the opening… | |||||
($this->prefs['timeout'] && (microtime(true) - $start > $this->prefs['timeout'])) | ($this->prefs['timeout'] && (microtime(true) - $start > $this->prefs['timeout'])) | ||||
) { | ) { | ||||
$this->closeSocket(); | $this->closeSocket(); | ||||
return true; | return true; | ||||
} | } | ||||
return false; | return false; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | class rcube_imap_generic | ||||
protected function hasCapability($name) | protected function hasCapability($name) | ||||
{ | { | ||||
if (empty($this->capability) || $name == '') { | if (empty($this->capability) || $name == '') { | ||||
return false; | return false; | ||||
} | } | ||||
if (in_array($name, $this->capability)) { | if (in_array($name, $this->capability)) { | ||||
return true; | return true; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if (strpos($name, '=')) { | else if (strpos($name, '=')) { | ||||
return false; | return false; | ||||
} | } | ||||
$result = array(); | $result = array(); | ||||
foreach ($this->capability as $cap) { | foreach ($this->capability as $cap) { | ||||
$entry = explode('=', $cap); | $entry = explode('=', $cap); | ||||
if ($entry[0] == $name) { | if ($entry[0] == $name) { | ||||
Show All 12 Lines | class rcube_imap_generic | ||||
* @return mixed Capability values array for key=value pairs, true/false for others | * @return mixed Capability values array for key=value pairs, true/false for others | ||||
*/ | */ | ||||
public function getCapability($name) | public function getCapability($name) | ||||
{ | { | ||||
$result = $this->hasCapability($name); | $result = $this->hasCapability($name); | ||||
if (!empty($result)) { | if (!empty($result)) { | ||||
return $result; | return $result; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($this->capability_readed) { | else if ($this->capability_readed) { | ||||
return false; | return false; | ||||
} | } | ||||
// get capabilities (only once) because initial | // get capabilities (only once) because initial | ||||
// optional CAPABILITY response may differ | // optional CAPABILITY response may differ | ||||
$result = $this->execute('CAPABILITY'); | $result = $this->execute('CAPABILITY'); | ||||
Show All 23 Lines | class rcube_imap_generic | ||||
* @param string $type Authentication type (PLAIN/CRAM-MD5/DIGEST-MD5) | * @param string $type Authentication type (PLAIN/CRAM-MD5/DIGEST-MD5) | ||||
* | * | ||||
* @return resource Connection resourse on success, error code on error | * @return resource Connection resourse on success, error code on error | ||||
*/ | */ | ||||
protected function authenticate($user, $pass, $type = 'PLAIN') | protected function authenticate($user, $pass, $type = 'PLAIN') | ||||
{ | { | ||||
if ($type == 'CRAM-MD5' || $type == 'DIGEST-MD5') { | if ($type == 'CRAM-MD5' || $type == 'DIGEST-MD5') { | ||||
if ($type == 'DIGEST-MD5' && !class_exists('Auth_SASL')) { | if ($type == 'DIGEST-MD5' && !class_exists('Auth_SASL')) { | ||||
return $this->setError(self::ERROR_BYE, | return $this->setError(self::ERROR_BYE, | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
"The Auth_SASL package is required for DIGEST-MD5 authentication"); | "The Auth_SASL package is required for DIGEST-MD5 authentication"); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 16 spaces but found 20 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 16 spaces but found 20 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
} | } | ||||
$this->putLine($this->nextTag() . " AUTHENTICATE $type"); | $this->putLine($this->nextTag() . " AUTHENTICATE $type"); | ||||
$line = trim($this->readReply()); | $line = trim($this->readReply()); | ||||
if ($line[0] == '+') { | if ($line[0] == '+') { | ||||
$challenge = substr($line, 2); | $challenge = substr($line, 2); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
return $this->parseResult($line); | return $this->parseResult($line); | ||||
Lint: Method rcube_imap_generic::authenticate() should return resource but returns int. Method rcube_imap_generic::authenticate() should return resource but returns int. Lint: Method rcube_imap_generic::authenticate() should return resource but returns int.: Method rcube_imap_generic::authenticate() should return resource but returns int. | |||||
} | } | ||||
if ($type == 'CRAM-MD5') { | if ($type == 'CRAM-MD5') { | ||||
// RFC2195: CRAM-MD5 | // RFC2195: CRAM-MD5 | ||||
$ipad = ''; | $ipad = ''; | ||||
$opad = ''; | $opad = ''; | ||||
$xor = function($str1, $str2) { | $xor = function($str1, $str2) { | ||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.SpaceAfterFunction Expected 1 space after FUNCTION keyword; 0 found Lint: Squiz.Functions.MultiLineFunctionDeclaration.SpaceAfterFunction: Expected 1 space after FUNCTION keyword; 0 found | |||||
$result = ''; | $result = ''; | ||||
$size = strlen($str1); | $size = strlen($str1); | ||||
for ($i=0; $i<$size; $i++) { | for ($i=0; $i<$size; $i++) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
$result .= chr(ord($str1[$i]) ^ ord($str2[$i])); | $result .= chr(ord($str1[$i]) ^ ord($str2[$i])); | ||||
} | } | ||||
return $result; | return $result; | ||||
}; | }; | ||||
// initialize ipad, opad | // initialize ipad, opad | ||||
for ($i=0; $i<64; $i++) { | for ($i=0; $i<64; $i++) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
$ipad .= chr(0x36); | $ipad .= chr(0x36); | ||||
$opad .= chr(0x5C); | $opad .= chr(0x5C); | ||||
} | } | ||||
// pad $pass so it's 64 bytes | // pad $pass so it's 64 bytes | ||||
$pass = str_pad($pass, 64, chr(0)); | $pass = str_pad($pass, 64, chr(0)); | ||||
// generate hash | // generate hash | ||||
$hash = md5($xor($pass, $opad) . pack("H*", | $hash = md5($xor($pass, $opad) . pack("H*", | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
md5($xor($pass, $ipad) . base64_decode($challenge)))); | md5($xor($pass, $ipad) . base64_decode($challenge)))); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 16 spaces but found 20 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 16 spaces but found 20 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
$reply = base64_encode($user . ' ' . $hash); | $reply = base64_encode($user . ' ' . $hash); | ||||
// send result | // send result | ||||
$this->putLine($reply, true, true); | $this->putLine($reply, true, true); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
// RFC2831: DIGEST-MD5 | // RFC2831: DIGEST-MD5 | ||||
// proxy authorization | // proxy authorization | ||||
if (!empty($this->prefs['auth_cid'])) { | if (!empty($this->prefs['auth_cid'])) { | ||||
$authc = $this->prefs['auth_cid']; | $authc = $this->prefs['auth_cid']; | ||||
$pass = $this->prefs['auth_pw']; | $pass = $this->prefs['auth_pw']; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$authc = $user; | $authc = $user; | ||||
$user = ''; | $user = ''; | ||||
} | } | ||||
$auth_sasl = new Auth_SASL; | $auth_sasl = new Auth_SASL; | ||||
Lint: Instantiated class Auth_SASL not found. Instantiated class Auth_SASL not found. Lint: Instantiated class Auth_SASL not found.: Instantiated class Auth_SASL not found. | |||||
Lint: PSR12.Classes.ClassInstantiation.MissingParentheses Parentheses must be used when instantiating a new class Lint: PSR12.Classes.ClassInstantiation.MissingParentheses: Parentheses must be used when instantiating a new class | |||||
$auth_sasl = $auth_sasl->factory('digestmd5'); | $auth_sasl = $auth_sasl->factory('digestmd5'); | ||||
Lint: Call to method factory() on an unknown class Auth_SASL. Call to method factory() on an unknown class Auth_SASL. Lint: Call to method factory() on an unknown class Auth_SASL.: Call to method factory() on an unknown class Auth_SASL. | |||||
$reply = base64_encode($auth_sasl->getResponse($authc, $pass, | $reply = base64_encode($auth_sasl->getResponse($authc, $pass, | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
base64_decode($challenge), $this->host, 'imap', $user)); | base64_decode($challenge), $this->host, 'imap', $user)); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 16 spaces but found 20 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 16 spaces but found 20 | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
// send result | // send result | ||||
$this->putLine($reply, true, true); | $this->putLine($reply, true, true); | ||||
$line = trim($this->readReply()); | $line = trim($this->readReply()); | ||||
if ($line[0] != '+') { | if ($line[0] != '+') { | ||||
return $this->parseResult($line); | return $this->parseResult($line); | ||||
Lint: Method rcube_imap_generic::authenticate() should return resource but returns int. Method rcube_imap_generic::authenticate() should return resource but returns int. Lint: Method rcube_imap_generic::authenticate() should return resource but returns int.: Method rcube_imap_generic::authenticate() should return resource but returns int. | |||||
} | } | ||||
// check response | // check response | ||||
$challenge = substr($line, 2); | $challenge = substr($line, 2); | ||||
$challenge = base64_decode($challenge); | $challenge = base64_decode($challenge); | ||||
if (strpos($challenge, 'rspauth=') === false) { | if (strpos($challenge, 'rspauth=') === false) { | ||||
return $this->setError(self::ERROR_BAD, | return $this->setError(self::ERROR_BAD, | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
"Unexpected response from server to DIGEST-MD5 response"); | "Unexpected response from server to DIGEST-MD5 response"); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 20 spaces but found 24 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 20 spaces but found 24 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
} | } | ||||
$this->putLine(''); | $this->putLine(''); | ||||
} | } | ||||
$line = $this->readReply(); | $line = $this->readReply(); | ||||
$result = $this->parseResult($line); | $result = $this->parseResult($line); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($type == 'GSSAPI') { | else if ($type == 'GSSAPI') { | ||||
if (!extension_loaded('krb5')) { | if (!extension_loaded('krb5')) { | ||||
return $this->setError(self::ERROR_BYE, | return $this->setError(self::ERROR_BYE, | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
"The krb5 extension is required for GSSAPI authentication"); | "The krb5 extension is required for GSSAPI authentication"); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 16 spaces but found 20 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 16 spaces but found 20 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
} | } | ||||
if (empty($this->prefs['gssapi_cn'])) { | if (empty($this->prefs['gssapi_cn'])) { | ||||
return $this->setError(self::ERROR_BYE, | return $this->setError(self::ERROR_BYE, | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
"The gssapi_cn parameter is required for GSSAPI authentication"); | "The gssapi_cn parameter is required for GSSAPI authentication"); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 16 spaces but found 20 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 16 spaces but found 20 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
} | } | ||||
if (empty($this->prefs['gssapi_context'])) { | if (empty($this->prefs['gssapi_context'])) { | ||||
return $this->setError(self::ERROR_BYE, | return $this->setError(self::ERROR_BYE, | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
"The gssapi_context parameter is required for GSSAPI authentication"); | "The gssapi_context parameter is required for GSSAPI authentication"); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 16 spaces but found 20 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 16 spaces but found 20 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
} | } | ||||
putenv('KRB5CCNAME=' . $this->prefs['gssapi_cn']); | putenv('KRB5CCNAME=' . $this->prefs['gssapi_cn']); | ||||
try { | try { | ||||
$ccache = new KRB5CCache(); | $ccache = new KRB5CCache(); | ||||
Lint: Instantiated class KRB5CCache not found. Instantiated class KRB5CCache not found. Lint: Instantiated class KRB5CCache not found.: Instantiated class KRB5CCache not found. | |||||
$ccache->open($this->prefs['gssapi_cn']); | $ccache->open($this->prefs['gssapi_cn']); | ||||
Lint: Call to method open() on an unknown class KRB5CCache. Call to method open() on an unknown class KRB5CCache. Lint: Call to method open() on an unknown class KRB5CCache.: Call to method open() on an unknown class KRB5CCache. | |||||
$gssapicontext = new GSSAPIContext(); | $gssapicontext = new GSSAPIContext(); | ||||
Lint: Instantiated class GSSAPIContext not found. Instantiated class GSSAPIContext not found. Lint: Instantiated class GSSAPIContext not found.: Instantiated class GSSAPIContext not found. | |||||
$gssapicontext->acquireCredentials($ccache); | $gssapicontext->acquireCredentials($ccache); | ||||
Lint: Call to method acquireCredentials() on an unknown class GSSAPIContext. Call to method acquireCredentials() on an unknown class GSSAPIContext. Lint: Call to method acquireCredentials() on an unknown class GSSAPIContext.: Call to method acquireCredentials() on an unknown class GSSAPIContext. | |||||
$token = ''; | $token = ''; | ||||
$success = $gssapicontext->initSecContext($this->prefs['gssapi_context'], null, null, null, $token); | $success = $gssapicontext->initSecContext($this->prefs['gssapi_context'], null, null, null, $token); | ||||
Lint: Call to method initSecContext() on an unknown class GSSAPIContext. Call to method initSecContext() on an unknown class GSSAPIContext. Lint: Call to method initSecContext() on an unknown class GSSAPIContext.: Call to method initSecContext() on an unknown class GSSAPIContext. | |||||
$token = base64_encode($token); | $token = base64_encode($token); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
catch (Exception $e) { | catch (Exception $e) { | ||||
trigger_error($e->getMessage(), E_USER_WARNING); | trigger_error($e->getMessage(), E_USER_WARNING); | ||||
return $this->setError(self::ERROR_BYE, "GSSAPI authentication failed"); | return $this->setError(self::ERROR_BYE, "GSSAPI authentication failed"); | ||||
} | } | ||||
$this->putLine($this->nextTag() . " AUTHENTICATE GSSAPI " . $token); | $this->putLine($this->nextTag() . " AUTHENTICATE GSSAPI " . $token); | ||||
$line = trim($this->readReply()); | $line = trim($this->readReply()); | ||||
if ($line[0] != '+') { | if ($line[0] != '+') { | ||||
return $this->parseResult($line); | return $this->parseResult($line); | ||||
Lint: Method rcube_imap_generic::authenticate() should return resource but returns int. Method rcube_imap_generic::authenticate() should return resource but returns int. Lint: Method rcube_imap_generic::authenticate() should return resource but returns int.: Method rcube_imap_generic::authenticate() should return resource but returns int. | |||||
} | } | ||||
try { | try { | ||||
$itoken = base64_decode(substr($line, 2)); | $itoken = base64_decode(substr($line, 2)); | ||||
if (!$gssapicontext->unwrap($itoken, $itoken)) { | if (!$gssapicontext->unwrap($itoken, $itoken)) { | ||||
Lint: Call to method unwrap() on an unknown class GSSAPIContext. Call to method unwrap() on an unknown class GSSAPIContext. Lint: Call to method unwrap() on an unknown class GSSAPIContext.: Call to method unwrap() on an unknown class GSSAPIContext. | |||||
throw new Exception("GSSAPI SASL input token unwrap failed"); | throw new Exception("GSSAPI SASL input token unwrap failed"); | ||||
} | } | ||||
if (strlen($itoken) < 4) { | if (strlen($itoken) < 4) { | ||||
throw new Exception("GSSAPI SASL input token invalid"); | throw new Exception("GSSAPI SASL input token invalid"); | ||||
} | } | ||||
// Integrity/encryption layers are not supported. The first bit | // Integrity/encryption layers are not supported. The first bit | ||||
// indicates that the server supports "no security layers". | // indicates that the server supports "no security layers". | ||||
// 0x00 should not occur, but support broken implementations. | // 0x00 should not occur, but support broken implementations. | ||||
$server_layers = ord($itoken[0]); | $server_layers = ord($itoken[0]); | ||||
if ($server_layers && ($server_layers & 0x1) != 0x1) { | if ($server_layers && ($server_layers & 0x1) != 0x1) { | ||||
throw new Exception("Server requires GSSAPI SASL integrity/encryption"); | throw new Exception("Server requires GSSAPI SASL integrity/encryption"); | ||||
} | } | ||||
// Construct output token. 0x01 in the first octet = SASL layer "none", | // Construct output token. 0x01 in the first octet = SASL layer "none", | ||||
// zero in the following three octets = no data follows. | // zero in the following three octets = no data follows. | ||||
// See https://github.com/cyrusimap/cyrus-sasl/blob/e41cfb986c1b1935770de554872247453fdbb079/plugins/gssapi.c#L1284 | // See https://github.com/cyrusimap/cyrus-sasl/blob/e41cfb986c1b1935770de554872247453fdbb079/plugins/gssapi.c#L1284 | ||||
if (!$gssapicontext->wrap(pack("CCCC", 0x1, 0, 0, 0), $otoken, true)) { | if (!$gssapicontext->wrap(pack("CCCC", 0x1, 0, 0, 0), $otoken, true)) { | ||||
Lint: Call to method wrap() on an unknown class GSSAPIContext. Call to method wrap() on an unknown class GSSAPIContext. Lint: Call to method wrap() on an unknown class GSSAPIContext.: Call to method wrap() on an unknown class GSSAPIContext. | |||||
Lint: Undefined variable: $otoken Undefined variable: $otoken Lint: Undefined variable: $otoken: Undefined variable: $otoken | |||||
throw new Exception("GSSAPI SASL output token wrap failed"); | throw new Exception("GSSAPI SASL output token wrap failed"); | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
catch (Exception $e) { | catch (Exception $e) { | ||||
trigger_error($e->getMessage(), E_USER_WARNING); | trigger_error($e->getMessage(), E_USER_WARNING); | ||||
return $this->setError(self::ERROR_BYE, "GSSAPI authentication failed"); | return $this->setError(self::ERROR_BYE, "GSSAPI authentication failed"); | ||||
} | } | ||||
$this->putLine(base64_encode($otoken)); | $this->putLine(base64_encode($otoken)); | ||||
Lint: Undefined variable: $otoken Undefined variable: $otoken Lint: Undefined variable: $otoken: Undefined variable: $otoken | |||||
$line = $this->readReply(); | $line = $this->readReply(); | ||||
$result = $this->parseResult($line); | $result = $this->parseResult($line); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($type == 'PLAIN') { | else if ($type == 'PLAIN') { | ||||
// proxy authorization | // proxy authorization | ||||
if (!empty($this->prefs['auth_cid'])) { | if (!empty($this->prefs['auth_cid'])) { | ||||
$authc = $this->prefs['auth_cid']; | $authc = $this->prefs['auth_cid']; | ||||
$pass = $this->prefs['auth_pw']; | $pass = $this->prefs['auth_pw']; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$authc = $user; | $authc = $user; | ||||
$user = ''; | $user = ''; | ||||
} | } | ||||
$reply = base64_encode($user . chr(0) . $authc . chr(0) . $pass); | $reply = base64_encode($user . chr(0) . $authc . chr(0) . $pass); | ||||
// RFC 4959 (SASL-IR): save one round trip | // RFC 4959 (SASL-IR): save one round trip | ||||
if ($this->getCapability('SASL-IR')) { | if ($this->getCapability('SASL-IR')) { | ||||
list($result, $line) = $this->execute("AUTHENTICATE PLAIN", array($reply), | list($result, $line) = $this->execute("AUTHENTICATE PLAIN", array($reply), | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
self::COMMAND_LASTLINE | self::COMMAND_CAPABILITY | self::COMMAND_ANONYMIZED); | self::COMMAND_LASTLINE | self::COMMAND_CAPABILITY | self::COMMAND_ANONYMIZED); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 16 spaces but found 20 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 16 spaces but found 20 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$this->putLine($this->nextTag() . " AUTHENTICATE PLAIN"); | $this->putLine($this->nextTag() . " AUTHENTICATE PLAIN"); | ||||
$line = trim($this->readReply()); | $line = trim($this->readReply()); | ||||
if ($line[0] != '+') { | if ($line[0] != '+') { | ||||
return $this->parseResult($line); | return $this->parseResult($line); | ||||
Lint: Method rcube_imap_generic::authenticate() should return resource but returns int. Method rcube_imap_generic::authenticate() should return resource but returns int. Lint: Method rcube_imap_generic::authenticate() should return resource but returns int.: Method rcube_imap_generic::authenticate() should return resource but returns int. | |||||
} | } | ||||
// send result, get reply and process it | // send result, get reply and process it | ||||
$this->putLine($reply, true, true); | $this->putLine($reply, true, true); | ||||
$line = $this->readReply(); | $line = $this->readReply(); | ||||
$result = $this->parseResult($line); | $result = $this->parseResult($line); | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($type == 'LOGIN') { | else if ($type == 'LOGIN') { | ||||
$this->putLine($this->nextTag() . " AUTHENTICATE LOGIN"); | $this->putLine($this->nextTag() . " AUTHENTICATE LOGIN"); | ||||
$line = trim($this->readReply()); | $line = trim($this->readReply()); | ||||
if ($line[0] != '+') { | if ($line[0] != '+') { | ||||
return $this->parseResult($line); | return $this->parseResult($line); | ||||
Lint: Method rcube_imap_generic::authenticate() should return resource but returns int. Method rcube_imap_generic::authenticate() should return resource but returns int. Lint: Method rcube_imap_generic::authenticate() should return resource but returns int.: Method rcube_imap_generic::authenticate() should return resource but returns int. | |||||
} | } | ||||
$this->putLine(base64_encode($user), true, true); | $this->putLine(base64_encode($user), true, true); | ||||
$line = trim($this->readReply()); | $line = trim($this->readReply()); | ||||
if ($line[0] != '+') { | if ($line[0] != '+') { | ||||
return $this->parseResult($line); | return $this->parseResult($line); | ||||
Lint: Method rcube_imap_generic::authenticate() should return resource but returns int. Method rcube_imap_generic::authenticate() should return resource but returns int. Lint: Method rcube_imap_generic::authenticate() should return resource but returns int.: Method rcube_imap_generic::authenticate() should return resource but returns int. | |||||
} | } | ||||
// send result, get reply and process it | // send result, get reply and process it | ||||
$this->putLine(base64_encode($pass), true, true); | $this->putLine(base64_encode($pass), true, true); | ||||
$line = $this->readReply(); | $line = $this->readReply(); | ||||
$result = $this->parseResult($line); | $result = $this->parseResult($line); | ||||
} | } | ||||
if ($result === self::ERROR_OK) { | if ($result === self::ERROR_OK) { | ||||
Lint: Variable $result might not be defined. Variable $result might not be defined. Lint: Variable $result might not be defined.: Variable $result might not be defined. | |||||
// optional CAPABILITY response | // optional CAPABILITY response | ||||
if ($line && preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) { | if ($line && preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) { | ||||
Lint: Variable $line might not be defined. Variable $line might not be defined. Lint: Variable $line might not be defined.: Variable $line might not be defined. | |||||
$this->parseCapability($matches[1], true); | $this->parseCapability($matches[1], true); | ||||
} | } | ||||
return $this->fp; | return $this->fp; | ||||
} | } | ||||
return $this->setError($result, "AUTHENTICATE $type: $line"); | return $this->setError($result, "AUTHENTICATE $type: $line"); | ||||
Lint: Variable $line might not be defined. Variable $line might not be defined. Lint: Variable $line might not be defined.: Variable $line might not be defined. | |||||
} | } | ||||
/** | /** | ||||
* LOGIN Authentication | * LOGIN Authentication | ||||
* | * | ||||
* @param string $user Username | * @param string $user Username | ||||
* @param string $pass Password | * @param string $pass Password | ||||
* | * | ||||
* @return resource Connection resourse on success, error code on error | * @return resource Connection resourse on success, error code on error | ||||
*/ | */ | ||||
protected function login($user, $password) | protected function login($user, $password) | ||||
Lint: PHPDoc tag @param references unknown parameter: $pass PHPDoc tag @param references unknown parameter: $pass Lint: PHPDoc tag @param references unknown parameter: $pass: PHPDoc tag @param references unknown parameter: $pass | |||||
{ | { | ||||
// Prevent from sending credentials in plain text when connection is not secure | // Prevent from sending credentials in plain text when connection is not secure | ||||
if ($this->getCapability('LOGINDISABLED')) { | if ($this->getCapability('LOGINDISABLED')) { | ||||
return $this->setError(self::ERROR_BAD, "Login disabled by IMAP server"); | return $this->setError(self::ERROR_BAD, "Login disabled by IMAP server"); | ||||
} | } | ||||
list($code, $response) = $this->execute('LOGIN', array( | list($code, $response) = $this->execute('LOGIN', array( | ||||
$this->escape($user), $this->escape($password)), self::COMMAND_CAPABILITY | self::COMMAND_ANONYMIZED); | $this->escape($user), $this->escape($password)), self::COMMAND_CAPABILITY | self::COMMAND_ANONYMIZED); | ||||
Show All 17 Lines | class rcube_imap_generic | ||||
*/ | */ | ||||
public function getHierarchyDelimiter() | public function getHierarchyDelimiter() | ||||
{ | { | ||||
if (isset($this->prefs['delimiter'])) { | if (isset($this->prefs['delimiter'])) { | ||||
return $this->prefs['delimiter']; | return $this->prefs['delimiter']; | ||||
} | } | ||||
// try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8) | // try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8) | ||||
list($code, $response) = $this->execute('LIST', | list($code, $response) = $this->execute('LIST', | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
array($this->escape(''), $this->escape(''))); | array($this->escape(''), $this->escape(''))); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
if ($code == self::ERROR_OK) { | if ($code == self::ERROR_OK) { | ||||
Lint: Method rcube_imap_generic::getHierarchyDelimiter() should return string but return statement is missing. Method rcube_imap_generic::getHierarchyDelimiter() should return string but return statement is missing. Lint: Method rcube_imap_generic::getHierarchyDelimiter() should return string but return statement is missing.: Method rcube_imap_generic::getHierarchyDelimiter() should return string but return statement is… | |||||
$args = $this->tokenizeResponse($response, 4); | $args = $this->tokenizeResponse($response, 4); | ||||
$delimiter = $args[3]; | $delimiter = $args[3]; | ||||
if (strlen($delimiter) > 0) { | if (strlen($delimiter) > 0) { | ||||
return ($this->prefs['delimiter'] = $delimiter); | return ($this->prefs['delimiter'] = $delimiter); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* NAMESPACE handler (RFC 2342) | * NAMESPACE handler (RFC 2342) | ||||
* | * | ||||
* @return array Namespace data hash (personal, other, shared) | * @return array Namespace data hash (personal, other, shared) | ||||
*/ | */ | ||||
public function getNamespace() | public function getNamespace() | ||||
{ | { | ||||
if (array_key_exists('namespace', $this->prefs)) { | if (array_key_exists('namespace', $this->prefs)) { | ||||
return $this->prefs['namespace']; | return $this->prefs['namespace']; | ||||
} | } | ||||
if (!$this->getCapability('NAMESPACE')) { | if (!$this->getCapability('NAMESPACE')) { | ||||
return self::ERROR_BAD; | return self::ERROR_BAD; | ||||
Lint: Method rcube_imap_generic::getNamespace() should return array but returns int. Method rcube_imap_generic::getNamespace() should return array but returns int. Lint: Method rcube_imap_generic::getNamespace() should return array but returns int.: Method rcube_imap_generic::getNamespace() should return array but returns int. | |||||
} | } | ||||
list($code, $response) = $this->execute('NAMESPACE'); | list($code, $response) = $this->execute('NAMESPACE'); | ||||
if ($code == self::ERROR_OK && preg_match('/^\* NAMESPACE /', $response)) { | if ($code == self::ERROR_OK && preg_match('/^\* NAMESPACE /', $response)) { | ||||
$response = substr($response, 11); | $response = substr($response, 11); | ||||
$data = $this->tokenizeResponse($response); | $data = $this->tokenizeResponse($response); | ||||
} | } | ||||
if (!is_array($data)) { | if (!is_array($data)) { | ||||
Lint: Variable $data might not be defined. Variable $data might not be defined. Lint: Variable $data might not be defined.: Variable $data might not be defined. | |||||
return $code; | return $code; | ||||
} | } | ||||
$this->prefs['namespace'] = array( | $this->prefs['namespace'] = array( | ||||
'personal' => $data[0], | 'personal' => $data[0], | ||||
'other' => $data[1], | 'other' => $data[1], | ||||
'shared' => $data[2], | 'shared' => $data[2], | ||||
); | ); | ||||
Show All 12 Lines | class rcube_imap_generic | ||||
* @return bool True on success, False on failure | * @return bool True on success, False on failure | ||||
*/ | */ | ||||
public function connect($host, $user, $password, $options = array()) | public function connect($host, $user, $password, $options = array()) | ||||
{ | { | ||||
// configure | // configure | ||||
$this->set_prefs($options); | $this->set_prefs($options); | ||||
$this->host = $host; | $this->host = $host; | ||||
$this->user = $user; | $this->user = $user; | ||||
Lint: Access to an undefined property rcube_imap_generic::$user. Access to an undefined property rcube_imap_generic::$user. Lint: Access to an undefined property rcube_imap_generic::$user.: Access to an undefined property rcube_imap_generic::$user. | |||||
$this->logged = false; | $this->logged = false; | ||||
$this->selected = null; | $this->selected = null; | ||||
// check input | // check input | ||||
if (empty($host)) { | if (empty($host)) { | ||||
$this->setError(self::ERROR_BAD, "Empty host"); | $this->setError(self::ERROR_BAD, "Empty host"); | ||||
return false; | return false; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | public function connect($host, $user, $password, $options = array()) | ||||
} | } | ||||
} | } | ||||
// pre-login capabilities can be not complete | // pre-login capabilities can be not complete | ||||
$this->capability_readed = false; | $this->capability_readed = false; | ||||
// Authenticate | // Authenticate | ||||
switch ($auth_method) { | switch ($auth_method) { | ||||
case 'CRAM_MD5': | case 'CRAM_MD5': | ||||
Lint: PSR2.ControlStructures.SwitchDeclaration.TerminatingComment There must be a comment when fall-through is intentional in a non-empty case body Lint: PSR2.ControlStructures.SwitchDeclaration.TerminatingComment: There must be a comment when fall-through is intentional in a non-empty case body | |||||
$auth_method = 'CRAM-MD5'; | $auth_method = 'CRAM-MD5'; | ||||
case 'CRAM-MD5': | case 'CRAM-MD5': | ||||
case 'DIGEST-MD5': | case 'DIGEST-MD5': | ||||
case 'GSSAPI': | case 'GSSAPI': | ||||
case 'PLAIN': | case 'PLAIN': | ||||
case 'LOGIN': | case 'LOGIN': | ||||
$result = $this->authenticate($user, $password, $auth_method); | $result = $this->authenticate($user, $password, $auth_method); | ||||
break; | break; | ||||
Show All 23 Lines | class rcube_imap_generic | ||||
/** | /** | ||||
* Connects to IMAP server. | * Connects to IMAP server. | ||||
* | * | ||||
* @param string $host Server hostname or IP | * @param string $host Server hostname or IP | ||||
* | * | ||||
* @return bool True on success, False on failure | * @return bool True on success, False on failure | ||||
*/ | */ | ||||
protected function _connect($host) | protected function _connect($host) | ||||
Lint: PSR2.Methods.MethodDeclaration.Underscore Method name "_connect" must not be prefixed with an underscore to indicate visibility Lint: PSR2.Methods.MethodDeclaration.Underscore: Method name "_connect" must not be prefixed with an underscore to indicate visibility | |||||
{ | { | ||||
// initialize connection | // initialize connection | ||||
$this->error = ''; | $this->error = ''; | ||||
$this->errornum = self::ERROR_OK; | $this->errornum = self::ERROR_OK; | ||||
if (!$this->prefs['port']) { | if (!$this->prefs['port']) { | ||||
$this->prefs['port'] = 143; | $this->prefs['port'] = 143; | ||||
} | } | ||||
// check for SSL | // check for SSL | ||||
if (!empty($this->prefs['ssl_mode']) && $this->prefs['ssl_mode'] != 'tls') { | if (!empty($this->prefs['ssl_mode']) && $this->prefs['ssl_mode'] != 'tls') { | ||||
$host = $this->prefs['ssl_mode'] . '://' . $host; | $host = $this->prefs['ssl_mode'] . '://' . $host; | ||||
} | } | ||||
if (empty($this->prefs['timeout']) || $this->prefs['timeout'] < 0) { | if (empty($this->prefs['timeout']) || $this->prefs['timeout'] < 0) { | ||||
$this->prefs['timeout'] = max(0, intval(ini_get('default_socket_timeout'))); | $this->prefs['timeout'] = max(0, intval(ini_get('default_socket_timeout'))); | ||||
} | } | ||||
if ($this->debug) { | if ($this->debug) { | ||||
// set connection identifier for debug output | // set connection identifier for debug output | ||||
$this->resourceid = strtoupper(substr(md5(microtime() . $host . $this->user), 0, 4)); | $this->resourceid = strtoupper(substr(md5(microtime() . $host . $this->user), 0, 4)); | ||||
Lint: Access to an undefined property rcube_imap_generic::$user. Access to an undefined property rcube_imap_generic::$user. Lint: Access to an undefined property rcube_imap_generic::$user.: Access to an undefined property rcube_imap_generic::$user. | |||||
$_host = ($this->prefs['ssl_mode'] == 'tls' ? 'tls://' : '') . $host . ':' . $this->prefs['port']; | $_host = ($this->prefs['ssl_mode'] == 'tls' ? 'tls://' : '') . $host . ':' . $this->prefs['port']; | ||||
$this->debug("Connecting to $_host..."); | $this->debug("Connecting to $_host..."); | ||||
} | } | ||||
if (!empty($this->prefs['socket_options'])) { | if (!empty($this->prefs['socket_options'])) { | ||||
$context = stream_context_create($this->prefs['socket_options']); | $context = stream_context_create($this->prefs['socket_options']); | ||||
$this->fp = stream_socket_client($host . ':' . $this->prefs['port'], $errno, $errstr, | $this->fp = stream_socket_client($host . ':' . $this->prefs['port'], $errno, $errstr, | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
$this->prefs['timeout'], STREAM_CLIENT_CONNECT, $context); | $this->prefs['timeout'], STREAM_CLIENT_CONNECT, $context); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 12 spaces but found 16 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 12 spaces but found 16 | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$this->fp = @fsockopen($host, $this->prefs['port'], $errno, $errstr, $this->prefs['timeout']); | $this->fp = @fsockopen($host, $this->prefs['port'], $errno, $errstr, $this->prefs['timeout']); | ||||
} | } | ||||
if (!$this->fp) { | if (!$this->fp) { | ||||
$this->setError(self::ERROR_BAD, sprintf("Could not connect to %s:%d: %s", | $this->setError(self::ERROR_BAD, sprintf("Could not connect to %s:%d: %s", | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
$host, $this->prefs['port'], $errstr ?: "Unknown reason")); | $host, $this->prefs['port'], $errstr ?: "Unknown reason")); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 12 spaces but found 16 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 12 spaces but found 16 | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return false; | return false; | ||||
} | } | ||||
if ($this->prefs['timeout'] > 0) { | if ($this->prefs['timeout'] > 0) { | ||||
stream_set_timeout($this->fp, $this->prefs['timeout']); | stream_set_timeout($this->fp, $this->prefs['timeout']); | ||||
} | } | ||||
$line = trim(fgets($this->fp, 8192)); | $line = trim(fgets($this->fp, 8192)); | ||||
if ($this->debug && $line) { | if ($this->debug && $line) { | ||||
$this->debug('S: '. $line); | $this->debug('S: '. $line); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
} | } | ||||
// Connected to wrong port or connection error? | // Connected to wrong port or connection error? | ||||
if (!preg_match('/^\* (OK|PREAUTH)/i', $line)) { | if (!preg_match('/^\* (OK|PREAUTH)/i', $line)) { | ||||
if ($line) | if ($line) | ||||
Lint: Generic.ControlStructures.InlineControlStructure.NotAllowed Inline control structures are not allowed Lint: Generic.ControlStructures.InlineControlStructure.NotAllowed: Inline control structures are not allowed | |||||
$error = sprintf("Wrong startup greeting (%s:%d): %s", $host, $this->prefs['port'], $line); | $error = sprintf("Wrong startup greeting (%s:%d): %s", $host, $this->prefs['port'], $line); | ||||
else | else | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterKeyword Expected 1 space(s) after ELSE keyword; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterKeyword: Expected 1 space(s) after ELSE keyword; newline found | |||||
Lint: Generic.ControlStructures.InlineControlStructure.NotAllowed Inline control structures are not allowed Lint: Generic.ControlStructures.InlineControlStructure.NotAllowed: Inline control structures are not allowed | |||||
$error = sprintf("Empty startup greeting (%s:%d)", $host, $this->prefs['port']); | $error = sprintf("Empty startup greeting (%s:%d)", $host, $this->prefs['port']); | ||||
$this->setError(self::ERROR_BAD, $error); | $this->setError(self::ERROR_BAD, $error); | ||||
$this->closeConnection(); | $this->closeConnection(); | ||||
return false; | return false; | ||||
} | } | ||||
$this->data['GREETING'] = trim(preg_replace('/\[[^\]]+\]\s*/', '', $line)); | $this->data['GREETING'] = trim(preg_replace('/\[[^\]]+\]\s*/', '', $line)); | ||||
Show All 9 Lines | protected function _connect($host) | ||||
if ($res[0] != self::ERROR_OK) { | if ($res[0] != self::ERROR_OK) { | ||||
$this->closeConnection(); | $this->closeConnection(); | ||||
return false; | return false; | ||||
} | } | ||||
if (isset($this->prefs['socket_options']['ssl']['crypto_method'])) { | if (isset($this->prefs['socket_options']['ssl']['crypto_method'])) { | ||||
$crypto_method = $this->prefs['socket_options']['ssl']['crypto_method']; | $crypto_method = $this->prefs['socket_options']['ssl']['crypto_method']; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
// There is no flag to enable all TLS methods. Net_SMTP | // There is no flag to enable all TLS methods. Net_SMTP | ||||
// handles enabling TLS similarly. | // handles enabling TLS similarly. | ||||
$crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT | $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT | ||||
| @STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | | @STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | ||||
| @STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; | | @STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; | ||||
} | } | ||||
if (!stream_socket_enable_crypto($this->fp, true, $crypto_method)) { | if (!stream_socket_enable_crypto($this->fp, true, $crypto_method)) { | ||||
$this->setError(self::ERROR_BAD, "Unable to negotiate TLS"); | $this->setError(self::ERROR_BAD, "Unable to negotiate TLS"); | ||||
$this->closeConnection(); | $this->closeConnection(); | ||||
return false; | return false; | ||||
} | } | ||||
// Now we're secure, capabilities need to be reread | // Now we're secure, capabilities need to be reread | ||||
$this->clearCapability(); | $this->clearCapability(); | ||||
} | } | ||||
return true; | return true; | ||||
} | } | ||||
/** | /** | ||||
* Initializes environment | * Initializes environment | ||||
*/ | */ | ||||
protected function set_prefs($prefs) | protected function set_prefs($prefs) | ||||
Lint: PSR1.Methods.CamelCapsMethodName.NotCamelCaps Method name "rcube_imap_generic::set_prefs" is not in camel caps format Lint: PSR1.Methods.CamelCapsMethodName.NotCamelCaps: Method name "rcube_imap_generic::set_prefs" is not in camel caps format | |||||
{ | { | ||||
// set preferences | // set preferences | ||||
if (is_array($prefs)) { | if (is_array($prefs)) { | ||||
$this->prefs = $prefs; | $this->prefs = $prefs; | ||||
} | } | ||||
// set auth method | // set auth method | ||||
if (!empty($this->prefs['auth_type'])) { | if (!empty($this->prefs['auth_type'])) { | ||||
$this->prefs['auth_type'] = strtoupper($this->prefs['auth_type']); | $this->prefs['auth_type'] = strtoupper($this->prefs['auth_type']); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$this->prefs['auth_type'] = 'CHECK'; | $this->prefs['auth_type'] = 'CHECK'; | ||||
} | } | ||||
// disabled capabilities | // disabled capabilities | ||||
if (!empty($this->prefs['disabled_caps'])) { | if (!empty($this->prefs['disabled_caps'])) { | ||||
$this->prefs['disabled_caps'] = array_map('strtoupper', (array)$this->prefs['disabled_caps']); | $this->prefs['disabled_caps'] = array_map('strtoupper', (array)$this->prefs['disabled_caps']); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | public function select($mailbox, $qresync_data = null) | ||||
$response = explode("\r\n", $response); | $response = explode("\r\n", $response); | ||||
foreach ($response as $line) { | foreach ($response as $line) { | ||||
if (preg_match('/^\* OK \[/i', $line)) { | if (preg_match('/^\* OK \[/i', $line)) { | ||||
$pos = strcspn($line, ' ]', 6); | $pos = strcspn($line, ' ]', 6); | ||||
$token = strtoupper(substr($line, 6, $pos)); | $token = strtoupper(substr($line, 6, $pos)); | ||||
$pos += 7; | $pos += 7; | ||||
switch ($token) { | switch ($token) { | ||||
case 'UIDNEXT': | case 'UIDNEXT': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
case 'UIDVALIDITY': | case 'UIDVALIDITY': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
case 'UNSEEN': | case 'UNSEEN': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
if ($len = strspn($line, '0123456789', $pos)) { | if ($len = strspn($line, '0123456789', $pos)) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$this->data[$token] = (int) substr($line, $pos, $len); | $this->data[$token] = (int) substr($line, $pos, $len); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
break; | break; | ||||
case 'HIGHESTMODSEQ': | case 'HIGHESTMODSEQ': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
if ($len = strspn($line, '0123456789', $pos)) { | if ($len = strspn($line, '0123456789', $pos)) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$this->data[$token] = (string) substr($line, $pos, $len); | $this->data[$token] = (string) substr($line, $pos, $len); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
break; | break; | ||||
case 'NOMODSEQ': | case 'NOMODSEQ': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
$this->data[$token] = true; | $this->data[$token] = true; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 28 spaces, found 24 | |||||
break; | break; | ||||
case 'PERMANENTFLAGS': | case 'PERMANENTFLAGS': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
$start = strpos($line, '(', $pos); | $start = strpos($line, '(', $pos); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 28 spaces, found 24 | |||||
$end = strrpos($line, ')'); | $end = strrpos($line, ')'); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 28 spaces, found 24 | |||||
if ($start && $end) { | if ($start && $end) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$flags = substr($line, $start + 1, $end - $start - 1); | $flags = substr($line, $start + 1, $end - $start - 1); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
$this->data[$token] = explode(' ', $flags); | $this->data[$token] = explode(' ', $flags); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if (preg_match('/^\* ([0-9]+) (EXISTS|RECENT|FETCH)/i', $line, $match)) { | else if (preg_match('/^\* ([0-9]+) (EXISTS|RECENT|FETCH)/i', $line, $match)) { | ||||
$token = strtoupper($match[2]); | $token = strtoupper($match[2]); | ||||
switch ($token) { | switch ($token) { | ||||
case 'EXISTS': | case 'EXISTS': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
case 'RECENT': | case 'RECENT': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
$this->data[$token] = (int) $match[1]; | $this->data[$token] = (int) $match[1]; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 28 spaces, found 24 | |||||
break; | break; | ||||
case 'FETCH': | case 'FETCH': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
// QRESYNC FETCH response (RFC5162) | // QRESYNC FETCH response (RFC5162) | ||||
$line = substr($line, strlen($match[0])); | $line = substr($line, strlen($match[0])); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 28 spaces, found 24 | |||||
$fetch_data = $this->tokenizeResponse($line, 1); | $fetch_data = $this->tokenizeResponse($line, 1); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 28 spaces, found 24 | |||||
$data = array('id' => $match[1]); | $data = array('id' => $match[1]); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 28 spaces, found 24 | |||||
for ($i=0, $size=count($fetch_data); $i<$size; $i+=2) { | for ($i=0, $size=count($fetch_data); $i<$size; $i+=2) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+="; 0 found | |||||
$data[strtolower($fetch_data[$i])] = $fetch_data[$i+1]; | $data[strtolower($fetch_data[$i])] = $fetch_data[$i+1]; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$this->data['QRESYNC'][$data['uid']] = $data; | $this->data['QRESYNC'][$data['uid']] = $data; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 28 spaces, found 24 | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
// QRESYNC VANISHED response (RFC5162) | // QRESYNC VANISHED response (RFC5162) | ||||
else if (preg_match('/^\* VANISHED [()EARLIER]*/i', $line, $match)) { | else if (preg_match('/^\* VANISHED [()EARLIER]*/i', $line, $match)) { | ||||
$line = substr($line, strlen($match[0])); | $line = substr($line, strlen($match[0])); | ||||
$v_data = $this->tokenizeResponse($line, 1); | $v_data = $this->tokenizeResponse($line, 1); | ||||
$this->data['VANISHED'] = $v_data; | $this->data['VANISHED'] = $v_data; | ||||
} | } | ||||
} | } | ||||
Show All 16 Lines | |||||
* in RFC3501: UIDNEXT, UIDVALIDITY, RECENT | * in RFC3501: UIDNEXT, UIDVALIDITY, RECENT | ||||
* | * | ||||
* @return array Status item-value hash | * @return array Status item-value hash | ||||
* @since 0.5-beta | * @since 0.5-beta | ||||
*/ | */ | ||||
public function status($mailbox, $items = array()) | public function status($mailbox, $items = array()) | ||||
{ | { | ||||
if (!strlen($mailbox)) { | if (!strlen($mailbox)) { | ||||
return false; | return false; | ||||
Lint: Method rcube_imap_generic::status() should return array but returns false. Method rcube_imap_generic::status() should return array but returns false. Lint: Method rcube_imap_generic::status() should return array but returns false.: Method rcube_imap_generic::status() should return array but returns false. | |||||
} | } | ||||
if (!in_array('MESSAGES', $items)) { | if (!in_array('MESSAGES', $items)) { | ||||
$items[] = 'MESSAGES'; | $items[] = 'MESSAGES'; | ||||
} | } | ||||
if (!in_array('UNSEEN', $items)) { | if (!in_array('UNSEEN', $items)) { | ||||
$items[] = 'UNSEEN'; | $items[] = 'UNSEEN'; | ||||
} | } | ||||
list($code, $response) = $this->execute('STATUS', | list($code, $response) = $this->execute('STATUS', | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
array($this->escape($mailbox), '(' . implode(' ', $items) . ')'), 0, '/^\* STATUS /i'); | array($this->escape($mailbox), '(' . implode(' ', $items) . ')'), 0, '/^\* STATUS /i'); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
if ($code == self::ERROR_OK && $response) { | if ($code == self::ERROR_OK && $response) { | ||||
$result = array(); | $result = array(); | ||||
$response = substr($response, 9); // remove prefix "* STATUS " | $response = substr($response, 9); // remove prefix "* STATUS " | ||||
list($mbox, $items) = $this->tokenizeResponse($response, 2); | list($mbox, $items) = $this->tokenizeResponse($response, 2); | ||||
// Fix for #1487859. Some buggy server returns not quoted | // Fix for #1487859. Some buggy server returns not quoted | ||||
// folder name with spaces. Let's try to handle this situation | // folder name with spaces. Let's try to handle this situation | ||||
if (!is_array($items) && ($pos = strpos($response, '(')) !== false) { | if (!is_array($items) && ($pos = strpos($response, '(')) !== false) { | ||||
$response = substr($response, $pos); | $response = substr($response, $pos); | ||||
$items = $this->tokenizeResponse($response, 1); | $items = $this->tokenizeResponse($response, 1); | ||||
} | } | ||||
if (!is_array($items)) { | if (!is_array($items)) { | ||||
return $result; | return $result; | ||||
} | } | ||||
for ($i=0, $len=count($items); $i<$len; $i += 2) { | for ($i=0, $len=count($items); $i<$len; $i += 2) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
$result[$items[$i]] = $items[$i+1]; | $result[$items[$i]] = $items[$i+1]; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
} | } | ||||
$this->data['STATUS:'.$mailbox] = $result; | $this->data['STATUS:'.$mailbox] = $result; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
return $result; | return $result; | ||||
} | } | ||||
return false; | return false; | ||||
Lint: Method rcube_imap_generic::status() should return array but returns false. Method rcube_imap_generic::status() should return array but returns false. Lint: Method rcube_imap_generic::status() should return array but returns false.: Method rcube_imap_generic::status() should return array but returns false. | |||||
} | } | ||||
/** | /** | ||||
* Executes EXPUNGE command | * Executes EXPUNGE command | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param string|array $messages Message UIDs to expunge | * @param string|array $messages Message UIDs to expunge | ||||
* | * | ||||
Show All 11 Lines | public function expunge($mailbox, $messages = null) | ||||
} | } | ||||
// Clear internal status cache | // Clear internal status cache | ||||
$this->clear_status_cache($mailbox); | $this->clear_status_cache($mailbox); | ||||
if (!empty($messages) && $messages != '*' && $this->hasCapability('UIDPLUS')) { | if (!empty($messages) && $messages != '*' && $this->hasCapability('UIDPLUS')) { | ||||
$messages = self::compressMessageSet($messages); | $messages = self::compressMessageSet($messages); | ||||
$result = $this->execute('UID EXPUNGE', array($messages), self::COMMAND_NORESPONSE); | $result = $this->execute('UID EXPUNGE', array($messages), self::COMMAND_NORESPONSE); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$result = $this->execute('EXPUNGE', null, self::COMMAND_NORESPONSE); | $result = $this->execute('EXPUNGE', null, self::COMMAND_NORESPONSE); | ||||
} | } | ||||
if ($result == self::ERROR_OK) { | if ($result == self::ERROR_OK) { | ||||
$this->selected = null; // state has changed, need to reselect | $this->selected = null; // state has changed, need to reselect | ||||
return true; | return true; | ||||
} | } | ||||
Show All 23 Lines | |||||
* Folder subscription (SUBSCRIBE) | * Folder subscription (SUBSCRIBE) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* | * | ||||
* @return boolean True on success, False on error | * @return boolean True on success, False on error | ||||
*/ | */ | ||||
public function subscribe($mailbox) | public function subscribe($mailbox) | ||||
{ | { | ||||
$result = $this->execute('SUBSCRIBE', array($this->escape($mailbox)), | $result = $this->execute('SUBSCRIBE', array($this->escape($mailbox)), | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
self::COMMAND_NORESPONSE); | self::COMMAND_NORESPONSE); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return $result == self::ERROR_OK; | return $result == self::ERROR_OK; | ||||
} | } | ||||
/** | /** | ||||
* Folder unsubscription (UNSUBSCRIBE) | * Folder unsubscription (UNSUBSCRIBE) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* | * | ||||
* @return boolean True on success, False on error | * @return boolean True on success, False on error | ||||
*/ | */ | ||||
public function unsubscribe($mailbox) | public function unsubscribe($mailbox) | ||||
{ | { | ||||
$result = $this->execute('UNSUBSCRIBE', array($this->escape($mailbox)), | $result = $this->execute('UNSUBSCRIBE', array($this->escape($mailbox)), | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
self::COMMAND_NORESPONSE); | self::COMMAND_NORESPONSE); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return $result == self::ERROR_OK; | return $result == self::ERROR_OK; | ||||
} | } | ||||
/** | /** | ||||
* Folder creation (CREATE) | * Folder creation (CREATE) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
Show All 17 Lines | |||||
/** | /** | ||||
* Folder renaming (RENAME) | * Folder renaming (RENAME) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* | * | ||||
* @return bool True on success, False on error | * @return bool True on success, False on error | ||||
*/ | */ | ||||
public function renameFolder($from, $to) | public function renameFolder($from, $to) | ||||
Lint: PHPDoc tag @param references unknown parameter: $mailbox PHPDoc tag @param references unknown parameter: $mailbox Lint: PHPDoc tag @param references unknown parameter: $mailbox: PHPDoc tag @param references unknown parameter: $mailbox | |||||
{ | { | ||||
$result = $this->execute('RENAME', array($this->escape($from), $this->escape($to)), | $result = $this->execute('RENAME', array($this->escape($from), $this->escape($to)), | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
self::COMMAND_NORESPONSE); | self::COMMAND_NORESPONSE); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return $result == self::ERROR_OK; | return $result == self::ERROR_OK; | ||||
} | } | ||||
/** | /** | ||||
* Executes DELETE command | * Executes DELETE command | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* | * | ||||
* @return boolean True on success, False on error | * @return boolean True on success, False on error | ||||
*/ | */ | ||||
public function deleteFolder($mailbox) | public function deleteFolder($mailbox) | ||||
{ | { | ||||
$result = $this->execute('DELETE', array($this->escape($mailbox)), | $result = $this->execute('DELETE', array($this->escape($mailbox)), | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
self::COMMAND_NORESPONSE); | self::COMMAND_NORESPONSE); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return $result == self::ERROR_OK; | return $result == self::ERROR_OK; | ||||
} | } | ||||
/** | /** | ||||
* Removes all messages in a folder | * Removes all messages in a folder | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* | * | ||||
* @return boolean True on success, False on error | * @return boolean True on success, False on error | ||||
*/ | */ | ||||
public function clearFolder($mailbox) | public function clearFolder($mailbox) | ||||
{ | { | ||||
$res = false; | $res = false; | ||||
if ($this->countMessages($mailbox) > 0) { | if ($this->countMessages($mailbox) > 0) { | ||||
$res = $this->flag($mailbox, '1:*', 'DELETED'); | $res = $this->flag($mailbox, '1:*', 'DELETED'); | ||||
} | } | ||||
if ($res) { | if ($res) { | ||||
if ($this->selected === $mailbox) { | if ($this->selected === $mailbox) { | ||||
$res = $this->close(); | $res = $this->close(); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$res = $this->expunge($mailbox); | $res = $this->expunge($mailbox); | ||||
} | } | ||||
} | } | ||||
return $res; | return $res; | ||||
} | } | ||||
Show All 39 Lines | |||||
* MYRIGHTS, SUBSCRIBED, CHILDREN | * MYRIGHTS, SUBSCRIBED, CHILDREN | ||||
* @param array $select_opts List of selection options (RFC5258: LIST-EXTENDED) | * @param array $select_opts List of selection options (RFC5258: LIST-EXTENDED) | ||||
* Possible: SUBSCRIBED, RECURSIVEMATCH, REMOTE, | * Possible: SUBSCRIBED, RECURSIVEMATCH, REMOTE, | ||||
* SPECIAL-USE (RFC6154) | * SPECIAL-USE (RFC6154) | ||||
* | * | ||||
* @return array|bool List of mailboxes or hash of options if STATUS/MYROGHTS response | * @return array|bool List of mailboxes or hash of options if STATUS/MYROGHTS response | ||||
* is requested, False on error. | * is requested, False on error. | ||||
*/ | */ | ||||
protected function _listMailboxes($ref, $mailbox, $subscribed=false, | protected function _listMailboxes($ref, $mailbox, $subscribed=false, | ||||
Lint: PSR2.Methods.MethodDeclaration.Underscore Method name "_listMailboxes" must not be prefixed with an underscore to indicate visibility Lint: PSR2.Methods.MethodDeclaration.Underscore: Method name "_listMailboxes" must not be prefixed with an underscore to indicate visibility | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.FirstParamSpacing The first parameter of a multi-line function declaration must be on the line after the opening bracket Lint: Squiz.Functions.MultiLineFunctionDeclaration.FirstParamSpacing: The first parameter of a multi-line function declaration must be on the line after the opening… | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$subscribed" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$subscribed" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$subscribed"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$subscribed"; expected 1… | |||||
$return_opts=array(), $select_opts=array()) | $return_opts=array(), $select_opts=array()) | ||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$return_opts" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$return_opts" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$return_opts"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$return_opts"; expected 1… | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$select_opts" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$select_opts" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$select_opts"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$select_opts"; expected 1… | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.CloseBracketLine The closing parenthesis of a multi-line function declaration must be on a new line Lint: Squiz.Functions.MultiLineFunctionDeclaration.CloseBracketLine: The closing parenthesis of a multi-line function declaration must be on a new line | |||||
{ | { | ||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.NewlineBeforeOpenBrace The closing parenthesis and the opening brace of a multi-line function declaration must be on the same line Lint: Squiz.Functions.MultiLineFunctionDeclaration.NewlineBeforeOpenBrace: The closing parenthesis and the opening brace of a multi-line function declaration must be on… | |||||
if (!strlen($mailbox)) { | if (!strlen($mailbox)) { | ||||
$mailbox = '*'; | $mailbox = '*'; | ||||
} | } | ||||
$args = array(); | $args = array(); | ||||
$rets = array(); | $rets = array(); | ||||
if (!empty($select_opts) && $this->getCapability('LIST-EXTENDED')) { | if (!empty($select_opts) && $this->getCapability('LIST-EXTENDED')) { | ||||
Show All 35 Lines | protected function _listMailboxes($ref, $mailbox, $subscribed=false, | ||||
list($code, $response) = $this->execute($subscribed ? 'LSUB' : 'LIST', $args); | list($code, $response) = $this->execute($subscribed ? 'LSUB' : 'LIST', $args); | ||||
if ($code == self::ERROR_OK) { | if ($code == self::ERROR_OK) { | ||||
$folders = array(); | $folders = array(); | ||||
$last = 0; | $last = 0; | ||||
$pos = 0; | $pos = 0; | ||||
$response .= "\r\n"; | $response .= "\r\n"; | ||||
while ($pos = strpos($response, "\r\n", $pos+1)) { | while ($pos = strpos($response, "\r\n", $pos+1)) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
// literal string, not real end-of-command-line | // literal string, not real end-of-command-line | ||||
if ($response[$pos-1] == '}') { | if ($response[$pos-1] == '}') { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "-"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "-"; 0 found | |||||
continue; | continue; | ||||
} | } | ||||
$line = substr($response, $last, $pos - $last); | $line = substr($response, $last, $pos - $last); | ||||
$last = $pos + 2; | $last = $pos + 2; | ||||
if (!preg_match('/^\* (LIST|LSUB|STATUS|MYRIGHTS) /i', $line, $m)) { | if (!preg_match('/^\* (LIST|LSUB|STATUS|MYRIGHTS) /i', $line, $m)) { | ||||
continue; | continue; | ||||
Show All 9 Lines | protected function _listMailboxes($ref, $mailbox, $subscribed=false, | ||||
// Remove redundant separator at the end of folder name, UW-IMAP bug? (#1488879) | // Remove redundant separator at the end of folder name, UW-IMAP bug? (#1488879) | ||||
if ($delim) { | if ($delim) { | ||||
$mailbox = rtrim($mailbox, $delim); | $mailbox = rtrim($mailbox, $delim); | ||||
} | } | ||||
// Add to result array | // Add to result array | ||||
if (!$lstatus) { | if (!$lstatus) { | ||||
$folders[] = $mailbox; | $folders[] = $mailbox; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$folders[$mailbox] = array(); | $folders[$mailbox] = array(); | ||||
} | } | ||||
// store folder options | // store folder options | ||||
if ($cmd == 'LIST') { | if ($cmd == 'LIST') { | ||||
// Add to options array | // Add to options array | ||||
if (empty($this->data['LIST'][$mailbox])) { | if (empty($this->data['LIST'][$mailbox])) { | ||||
$this->data['LIST'][$mailbox] = $opts; | $this->data['LIST'][$mailbox] = $opts; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if (!empty($opts)) { | else if (!empty($opts)) { | ||||
$this->data['LIST'][$mailbox] = array_unique(array_merge( | $this->data['LIST'][$mailbox] = array_unique(array_merge( | ||||
$this->data['LIST'][$mailbox], $opts)); | $this->data['LIST'][$mailbox], $opts)); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 28 spaces but found 32 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 28 spaces but found 32 | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
} | } | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($lstatus) { | else if ($lstatus) { | ||||
// * STATUS <mailbox> (<result>) | // * STATUS <mailbox> (<result>) | ||||
if ($cmd == 'STATUS') { | if ($cmd == 'STATUS') { | ||||
list($mailbox, $status) = $this->tokenizeResponse($line, 2); | list($mailbox, $status) = $this->tokenizeResponse($line, 2); | ||||
for ($i=0, $len=count($status); $i<$len; $i += 2) { | for ($i=0, $len=count($status); $i<$len; $i += 2) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
list($name, $value) = $this->tokenizeResponse($status, 2); | list($name, $value) = $this->tokenizeResponse($status, 2); | ||||
$folders[$mailbox][$name] = $value; | $folders[$mailbox][$name] = $value; | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
// * MYRIGHTS <mailbox> <acl> | // * MYRIGHTS <mailbox> <acl> | ||||
else if ($cmd == 'MYRIGHTS') { | else if ($cmd == 'MYRIGHTS') { | ||||
list($mailbox, $acl) = $this->tokenizeResponse($line, 2); | list($mailbox, $acl) = $this->tokenizeResponse($line, 2); | ||||
$folders[$mailbox]['MYRIGHTS'] = $acl; | $folders[$mailbox]['MYRIGHTS'] = $acl; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Show All 11 Lines | |||||
* @return int Number of messages, False on error | * @return int Number of messages, False on error | ||||
*/ | */ | ||||
public function countMessages($mailbox) | public function countMessages($mailbox) | ||||
{ | { | ||||
if ($this->selected === $mailbox && isset($this->data['EXISTS'])) { | if ($this->selected === $mailbox && isset($this->data['EXISTS'])) { | ||||
return $this->data['EXISTS']; | return $this->data['EXISTS']; | ||||
} | } | ||||
if (isset($this->data["STATUS:".$mailbox])) { | if (isset($this->data["STATUS:".$mailbox])) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
$cache = $this->data["STATUS:".$mailbox]; | $cache = $this->data["STATUS:".$mailbox]; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
if (!empty($cache) && isset($cache['MESSAGES'])) { | if (!empty($cache) && isset($cache['MESSAGES'])) { | ||||
return (int) $cache['MESSAGES']; | return (int) $cache['MESSAGES']; | ||||
} | } | ||||
} | } | ||||
// Try STATUS (should be faster than SELECT) | // Try STATUS (should be faster than SELECT) | ||||
$counts = $this->status($mailbox); | $counts = $this->status($mailbox); | ||||
if (is_array($counts)) { | if (is_array($counts)) { | ||||
return (int) $counts['MESSAGES']; | return (int) $counts['MESSAGES']; | ||||
} | } | ||||
return false; | return false; | ||||
Lint: Unreachable statement - code above always terminates. Unreachable statement - code above always terminates. Lint: Unreachable statement - code above always terminates.: Unreachable statement - code above always terminates. | |||||
} | } | ||||
/** | /** | ||||
* Returns count of messages with \Recent flag in a folder | * Returns count of messages with \Recent flag in a folder | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* | * | ||||
* @return int Number of messages, False on error | * @return int Number of messages, False on error | ||||
*/ | */ | ||||
public function countRecent($mailbox) | public function countRecent($mailbox) | ||||
{ | { | ||||
if ($this->selected === $mailbox && isset($this->data['RECENT'])) { | if ($this->selected === $mailbox && isset($this->data['RECENT'])) { | ||||
return $this->data['RECENT']; | return $this->data['RECENT']; | ||||
} | } | ||||
// Check internal cache | // Check internal cache | ||||
$cache = $this->data['STATUS:'.$mailbox]; | $cache = $this->data['STATUS:'.$mailbox]; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
if (!empty($cache) && isset($cache['RECENT'])) { | if (!empty($cache) && isset($cache['RECENT'])) { | ||||
return (int) $cache['RECENT']; | return (int) $cache['RECENT']; | ||||
} | } | ||||
// Try STATUS (should be faster than SELECT) | // Try STATUS (should be faster than SELECT) | ||||
$counts = $this->status($mailbox, array('RECENT')); | $counts = $this->status($mailbox, array('RECENT')); | ||||
if (is_array($counts)) { | if (is_array($counts)) { | ||||
return (int) $counts['RECENT']; | return (int) $counts['RECENT']; | ||||
} | } | ||||
return false; | return false; | ||||
Lint: Unreachable statement - code above always terminates. Unreachable statement - code above always terminates. Lint: Unreachable statement - code above always terminates.: Unreachable statement - code above always terminates. | |||||
} | } | ||||
/** | /** | ||||
* Returns count of messages without \Seen flag in a specified folder | * Returns count of messages without \Seen flag in a specified folder | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* | * | ||||
* @return int Number of messages, False on error | * @return int Number of messages, False on error | ||||
*/ | */ | ||||
public function countUnseen($mailbox) | public function countUnseen($mailbox) | ||||
{ | { | ||||
// Check internal cache | // Check internal cache | ||||
$cache = $this->data['STATUS:'.$mailbox]; | $cache = $this->data['STATUS:'.$mailbox]; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
if (!empty($cache) && isset($cache['UNSEEN'])) { | if (!empty($cache) && isset($cache['UNSEEN'])) { | ||||
return (int) $cache['UNSEEN']; | return (int) $cache['UNSEEN']; | ||||
} | } | ||||
// Try STATUS (should be faster than SELECT+SEARCH) | // Try STATUS (should be faster than SELECT+SEARCH) | ||||
$counts = $this->status($mailbox); | $counts = $this->status($mailbox); | ||||
if (is_array($counts)) { | if (is_array($counts)) { | ||||
return (int) $counts['UNSEEN']; | return (int) $counts['UNSEEN']; | ||||
} | } | ||||
// Invoke SEARCH as a fallback | // Invoke SEARCH as a fallback | ||||
$index = $this->search($mailbox, 'ALL UNSEEN', false, array('COUNT')); | $index = $this->search($mailbox, 'ALL UNSEEN', false, array('COUNT')); | ||||
Lint: Unreachable statement - code above always terminates. Unreachable statement - code above always terminates. Lint: Unreachable statement - code above always terminates.: Unreachable statement - code above always terminates. | |||||
if (!$index->is_error()) { | if (!$index->is_error()) { | ||||
return $index->count(); | return $index->count(); | ||||
} | } | ||||
return false; | return false; | ||||
} | } | ||||
/** | /** | ||||
* Executes ID command (RFC2971) | * Executes ID command (RFC2971) | ||||
* | * | ||||
* @param array $items Client identification information key/value hash | * @param array $items Client identification information key/value hash | ||||
* | * | ||||
* @return array Server identification information key/value hash | * @return array Server identification information key/value hash | ||||
* @since 0.6 | * @since 0.6 | ||||
*/ | */ | ||||
public function id($items = array()) | public function id($items = array()) | ||||
{ | { | ||||
if (is_array($items) && !empty($items)) { | if (is_array($items) && !empty($items)) { | ||||
foreach ($items as $key => $value) { | foreach ($items as $key => $value) { | ||||
$args[] = $this->escape($key, true); | $args[] = $this->escape($key, true); | ||||
$args[] = $this->escape($value, true); | $args[] = $this->escape($value, true); | ||||
} | } | ||||
} | } | ||||
list($code, $response) = $this->execute('ID', | list($code, $response) = $this->execute('ID', | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
array(!empty($args) ? '(' . implode(' ', (array) $args) . ')' : $this->escape(null)), | array(!empty($args) ? '(' . implode(' ', (array) $args) . ')' : $this->escape(null)), | ||||
0, '/^\* ID /i'); | 0, '/^\* ID /i'); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
if ($code == self::ERROR_OK && $response) { | if ($code == self::ERROR_OK && $response) { | ||||
$response = substr($response, 5); // remove prefix "* ID " | $response = substr($response, 5); // remove prefix "* ID " | ||||
$items = $this->tokenizeResponse($response, 1); | $items = $this->tokenizeResponse($response, 1); | ||||
$result = null; | $result = null; | ||||
for ($i=0, $len=count($items); $i<$len; $i += 2) { | for ($i=0, $len=count($items); $i<$len; $i += 2) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
$result[$items[$i]] = $items[$i+1]; | $result[$items[$i]] = $items[$i+1]; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
} | } | ||||
return $result; | return $result; | ||||
} | } | ||||
return false; | return false; | ||||
Lint: Method rcube_imap_generic::id() should return array but returns false. Method rcube_imap_generic::id() should return array but returns false. Lint: Method rcube_imap_generic::id() should return array but returns false.: Method rcube_imap_generic::id() should return array but returns false. | |||||
} | } | ||||
/** | /** | ||||
* Executes ENABLE command (RFC5161) | * Executes ENABLE command (RFC5161) | ||||
* | * | ||||
* @param mixed $extension Extension name to enable (or array of names) | * @param mixed $extension Extension name to enable (or array of names) | ||||
* | * | ||||
* @return array|bool List of enabled extensions, False on error | * @return array|bool List of enabled extensions, False on error | ||||
Show All 28 Lines | public function enable($extension) | ||||
} | } | ||||
list($code, $response) = $this->execute('ENABLE', $extension, 0, '/^\* ENABLED /i'); | list($code, $response) = $this->execute('ENABLE', $extension, 0, '/^\* ENABLED /i'); | ||||
if ($code == self::ERROR_OK && $response) { | if ($code == self::ERROR_OK && $response) { | ||||
$response = substr($response, 10); // remove prefix "* ENABLED " | $response = substr($response, 10); // remove prefix "* ENABLED " | ||||
$result = (array) $this->tokenizeResponse($response); | $result = (array) $this->tokenizeResponse($response); | ||||
$this->extensions_enabled = array_unique(array_merge((array)$this->extensions_enabled, $result)); | $this->extensions_enabled = array_unique(array_merge((array)$this->extensions_enabled, $result)); | ||||
Lint: Access to an undefined property rcube_imap_generic::$extensions_enabled. Access to an undefined property rcube_imap_generic::$extensions_enabled. Lint: Access to an undefined property rcube_imap_generic::$extensions_enabled.: Access to an undefined property rcube_imap_generic::$extensions_enabled. | |||||
Lint: Access to an undefined property rcube_imap_generic::$extensions_enabled. Access to an undefined property rcube_imap_generic::$extensions_enabled. Lint: Access to an undefined property rcube_imap_generic::$extensions_enabled.: Access to an undefined property rcube_imap_generic::$extensions_enabled. | |||||
return $this->extensions_enabled; | return $this->extensions_enabled; | ||||
} | } | ||||
return false; | return false; | ||||
} | } | ||||
/** | /** | ||||
* Executes SORT command | * Executes SORT command | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param string $field Field to sort by (ARRIVAL, CC, DATE, FROM, SIZE, SUBJECT, TO) | * @param string $field Field to sort by (ARRIVAL, CC, DATE, FROM, SIZE, SUBJECT, TO) | ||||
* @param string $criteria Searching criteria | * @param string $criteria Searching criteria | ||||
* @param bool $return_uid Enables UID SORT usage | * @param bool $return_uid Enables UID SORT usage | ||||
* @param string $encoding Character set | * @param string $encoding Character set | ||||
* | * | ||||
* @return rcube_result_index Response data | * @return rcube_result_index Response data | ||||
*/ | */ | ||||
public function sort($mailbox, $field = 'ARRIVAL', $criteria = '', $return_uid = false, $encoding = 'US-ASCII') | public function sort($mailbox, $field = 'ARRIVAL', $criteria = '', $return_uid = false, $encoding = 'US-ASCII') | ||||
Lint: Method rcube_imap_generic::sort() has invalid return type rcube_result_index. Method rcube_imap_generic::sort() has invalid return type rcube_result_index. Lint: Method rcube_imap_generic::sort() has invalid return type rcube_result_index.: Method rcube_imap_generic::sort() has invalid return type rcube_result_index. | |||||
{ | { | ||||
$old_sel = $this->selected; | $old_sel = $this->selected; | ||||
$supported = array('ARRIVAL', 'CC', 'DATE', 'FROM', 'SIZE', 'SUBJECT', 'TO'); | $supported = array('ARRIVAL', 'CC', 'DATE', 'FROM', 'SIZE', 'SUBJECT', 'TO'); | ||||
$field = strtoupper($field); | $field = strtoupper($field); | ||||
if ($field == 'INTERNALDATE') { | if ($field == 'INTERNALDATE') { | ||||
$field = 'ARRIVAL'; | $field = 'ARRIVAL'; | ||||
} | } | ||||
if (!in_array($field, $supported)) { | if (!in_array($field, $supported)) { | ||||
return new rcube_result_index($mailbox); | return new rcube_result_index($mailbox); | ||||
Lint: Instantiated class rcube_result_index not found. Instantiated class rcube_result_index not found. Lint: Instantiated class rcube_result_index not found.: Instantiated class rcube_result_index not found. | |||||
} | } | ||||
if (!$this->select($mailbox)) { | if (!$this->select($mailbox)) { | ||||
return new rcube_result_index($mailbox); | return new rcube_result_index($mailbox); | ||||
Lint: Instantiated class rcube_result_index not found. Instantiated class rcube_result_index not found. Lint: Instantiated class rcube_result_index not found.: Instantiated class rcube_result_index not found. | |||||
} | } | ||||
// return empty result when folder is empty and we're just after SELECT | // return empty result when folder is empty and we're just after SELECT | ||||
if ($old_sel != $mailbox && !$this->data['EXISTS']) { | if ($old_sel != $mailbox && !$this->data['EXISTS']) { | ||||
return new rcube_result_index($mailbox, '* SORT'); | return new rcube_result_index($mailbox, '* SORT'); | ||||
Lint: Instantiated class rcube_result_index not found. Instantiated class rcube_result_index not found. Lint: Instantiated class rcube_result_index not found.: Instantiated class rcube_result_index not found. | |||||
} | } | ||||
// RFC 5957: SORT=DISPLAY | // RFC 5957: SORT=DISPLAY | ||||
if (($field == 'FROM' || $field == 'TO') && $this->getCapability('SORT=DISPLAY')) { | if (($field == 'FROM' || $field == 'TO') && $this->getCapability('SORT=DISPLAY')) { | ||||
$field = 'DISPLAY' . $field; | $field = 'DISPLAY' . $field; | ||||
} | } | ||||
$encoding = $encoding ? trim($encoding) : 'US-ASCII'; | $encoding = $encoding ? trim($encoding) : 'US-ASCII'; | ||||
$criteria = $criteria ? 'ALL ' . trim($criteria) : 'ALL'; | $criteria = $criteria ? 'ALL ' . trim($criteria) : 'ALL'; | ||||
list($code, $response) = $this->execute($return_uid ? 'UID SORT' : 'SORT', | list($code, $response) = $this->execute($return_uid ? 'UID SORT' : 'SORT', | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
array("($field)", $encoding, $criteria)); | array("($field)", $encoding, $criteria)); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
if ($code != self::ERROR_OK) { | if ($code != self::ERROR_OK) { | ||||
$response = null; | $response = null; | ||||
} | } | ||||
return new rcube_result_index($mailbox, $response); | return new rcube_result_index($mailbox, $response); | ||||
Lint: Instantiated class rcube_result_index not found. Instantiated class rcube_result_index not found. Lint: Instantiated class rcube_result_index not found.: Instantiated class rcube_result_index not found. | |||||
} | } | ||||
/** | /** | ||||
* Executes THREAD command | * Executes THREAD command | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param string $algorithm Threading algorithm (ORDEREDSUBJECT, REFERENCES, REFS) | * @param string $algorithm Threading algorithm (ORDEREDSUBJECT, REFERENCES, REFS) | ||||
* @param string $criteria Searching criteria | * @param string $criteria Searching criteria | ||||
* @param bool $return_uid Enables UIDs in result instead of sequence numbers | * @param bool $return_uid Enables UIDs in result instead of sequence numbers | ||||
* @param string $encoding Character set | * @param string $encoding Character set | ||||
* | * | ||||
* @return rcube_result_thread Thread data | * @return rcube_result_thread Thread data | ||||
*/ | */ | ||||
public function thread($mailbox, $algorithm = 'REFERENCES', $criteria = '', $return_uid = false, $encoding = 'US-ASCII') | public function thread($mailbox, $algorithm = 'REFERENCES', $criteria = '', $return_uid = false, $encoding = 'US-ASCII') | ||||
Lint: Method rcube_imap_generic::thread() has invalid return type rcube_result_thread. Method rcube_imap_generic::thread() has invalid return type rcube_result_thread. Lint: Method rcube_imap_generic::thread() has invalid return type rcube_result_thread.: Method rcube_imap_generic::thread() has invalid return type rcube_result_thread. | |||||
{ | { | ||||
$old_sel = $this->selected; | $old_sel = $this->selected; | ||||
if (!$this->select($mailbox)) { | if (!$this->select($mailbox)) { | ||||
return new rcube_result_thread($mailbox); | return new rcube_result_thread($mailbox); | ||||
Lint: Instantiated class rcube_result_thread not found. Instantiated class rcube_result_thread not found. Lint: Instantiated class rcube_result_thread not found.: Instantiated class rcube_result_thread not found. | |||||
} | } | ||||
// return empty result when folder is empty and we're just after SELECT | // return empty result when folder is empty and we're just after SELECT | ||||
if ($old_sel != $mailbox && !$this->data['EXISTS']) { | if ($old_sel != $mailbox && !$this->data['EXISTS']) { | ||||
return new rcube_result_thread($mailbox, '* THREAD'); | return new rcube_result_thread($mailbox, '* THREAD'); | ||||
Lint: Instantiated class rcube_result_thread not found. Instantiated class rcube_result_thread not found. Lint: Instantiated class rcube_result_thread not found.: Instantiated class rcube_result_thread not found. | |||||
} | } | ||||
$encoding = $encoding ? trim($encoding) : 'US-ASCII'; | $encoding = $encoding ? trim($encoding) : 'US-ASCII'; | ||||
$algorithm = $algorithm ? trim($algorithm) : 'REFERENCES'; | $algorithm = $algorithm ? trim($algorithm) : 'REFERENCES'; | ||||
$criteria = $criteria ? 'ALL '.trim($criteria) : 'ALL'; | $criteria = $criteria ? 'ALL '.trim($criteria) : 'ALL'; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
list($code, $response) = $this->execute($return_uid ? 'UID THREAD' : 'THREAD', | list($code, $response) = $this->execute($return_uid ? 'UID THREAD' : 'THREAD', | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
array($algorithm, $encoding, $criteria)); | array($algorithm, $encoding, $criteria)); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
if ($code != self::ERROR_OK) { | if ($code != self::ERROR_OK) { | ||||
$response = null; | $response = null; | ||||
} | } | ||||
return new rcube_result_thread($mailbox, $response); | return new rcube_result_thread($mailbox, $response); | ||||
Lint: Instantiated class rcube_result_thread not found. Instantiated class rcube_result_thread not found. Lint: Instantiated class rcube_result_thread not found.: Instantiated class rcube_result_thread not found. | |||||
} | } | ||||
/** | /** | ||||
* Executes SEARCH command | * Executes SEARCH command | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param string $criteria Searching criteria | * @param string $criteria Searching criteria | ||||
* @param bool $return_uid Enable UID in result instead of sequence ID | * @param bool $return_uid Enable UID in result instead of sequence ID | ||||
* @param array $items Return items (MIN, MAX, COUNT, ALL) | * @param array $items Return items (MIN, MAX, COUNT, ALL) | ||||
* | * | ||||
* @return rcube_result_index Result data | * @return rcube_result_index Result data | ||||
*/ | */ | ||||
public function search($mailbox, $criteria, $return_uid = false, $items = array()) | public function search($mailbox, $criteria, $return_uid = false, $items = array()) | ||||
Lint: Method rcube_imap_generic::search() has invalid return type rcube_result_index. Method rcube_imap_generic::search() has invalid return type rcube_result_index. Lint: Method rcube_imap_generic::search() has invalid return type rcube_result_index.: Method rcube_imap_generic::search() has invalid return type rcube_result_index. | |||||
{ | { | ||||
$old_sel = $this->selected; | $old_sel = $this->selected; | ||||
if (!$this->select($mailbox)) { | if (!$this->select($mailbox)) { | ||||
return new rcube_result_index($mailbox); | return new rcube_result_index($mailbox); | ||||
Lint: Instantiated class rcube_result_index not found. Instantiated class rcube_result_index not found. Lint: Instantiated class rcube_result_index not found.: Instantiated class rcube_result_index not found. | |||||
} | } | ||||
// return empty result when folder is empty and we're just after SELECT | // return empty result when folder is empty and we're just after SELECT | ||||
if ($old_sel != $mailbox && !$this->data['EXISTS']) { | if ($old_sel != $mailbox && !$this->data['EXISTS']) { | ||||
return new rcube_result_index($mailbox, '* SEARCH'); | return new rcube_result_index($mailbox, '* SEARCH'); | ||||
Lint: Instantiated class rcube_result_index not found. Instantiated class rcube_result_index not found. Lint: Instantiated class rcube_result_index not found.: Instantiated class rcube_result_index not found. | |||||
} | } | ||||
// If ESEARCH is supported always use ALL | // If ESEARCH is supported always use ALL | ||||
// but not when items are specified or using simple id2uid search | // but not when items are specified or using simple id2uid search | ||||
if (empty($items) && preg_match('/[^0-9]/', $criteria)) { | if (empty($items) && preg_match('/[^0-9]/', $criteria)) { | ||||
$items = array('ALL'); | $items = array('ALL'); | ||||
} | } | ||||
$esearch = empty($items) ? false : $this->getCapability('ESEARCH'); | $esearch = empty($items) ? false : $this->getCapability('ESEARCH'); | ||||
$criteria = trim($criteria); | $criteria = trim($criteria); | ||||
$params = ''; | $params = ''; | ||||
// RFC4731: ESEARCH | // RFC4731: ESEARCH | ||||
if (!empty($items) && $esearch) { | if (!empty($items) && $esearch) { | ||||
$params .= 'RETURN (' . implode(' ', $items) . ')'; | $params .= 'RETURN (' . implode(' ', $items) . ')'; | ||||
} | } | ||||
if (!empty($criteria)) { | if (!empty($criteria)) { | ||||
$params .= ($params ? ' ' : '') . $criteria; | $params .= ($params ? ' ' : '') . $criteria; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$params .= 'ALL'; | $params .= 'ALL'; | ||||
} | } | ||||
list($code, $response) = $this->execute($return_uid ? 'UID SEARCH' : 'SEARCH', | list($code, $response) = $this->execute($return_uid ? 'UID SEARCH' : 'SEARCH', | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
array($params)); | array($params)); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
if ($code != self::ERROR_OK) { | if ($code != self::ERROR_OK) { | ||||
$response = null; | $response = null; | ||||
} | } | ||||
return new rcube_result_index($mailbox, $response); | return new rcube_result_index($mailbox, $response); | ||||
Lint: Instantiated class rcube_result_index not found. Instantiated class rcube_result_index not found. Lint: Instantiated class rcube_result_index not found.: Instantiated class rcube_result_index not found. | |||||
} | } | ||||
/** | /** | ||||
* Simulates SORT command by using FETCH and sorting. | * Simulates SORT command by using FETCH and sorting. | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param string|array $message_set Searching criteria (list of messages to return) | * @param string|array $message_set Searching criteria (list of messages to return) | ||||
* @param string $index_field Field to sort by (ARRIVAL, CC, DATE, FROM, SIZE, SUBJECT, TO) | * @param string $index_field Field to sort by (ARRIVAL, CC, DATE, FROM, SIZE, SUBJECT, TO) | ||||
* @param bool $skip_deleted Makes that DELETED messages will be skipped | * @param bool $skip_deleted Makes that DELETED messages will be skipped | ||||
* @param bool $uidfetch Enables UID FETCH usage | * @param bool $uidfetch Enables UID FETCH usage | ||||
* @param bool $return_uid Enables returning UIDs instead of IDs | * @param bool $return_uid Enables returning UIDs instead of IDs | ||||
* | * | ||||
* @return rcube_result_index Response data | * @return rcube_result_index Response data | ||||
*/ | */ | ||||
public function index($mailbox, $message_set, $index_field='', $skip_deleted=true, | public function index($mailbox, $message_set, $index_field='', $skip_deleted=true, | ||||
Lint: Method rcube_imap_generic::index() has invalid return type rcube_result_index. Method rcube_imap_generic::index() has invalid return type rcube_result_index. Lint: Method rcube_imap_generic::index() has invalid return type rcube_result_index.: Method rcube_imap_generic::index() has invalid return type rcube_result_index. | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.FirstParamSpacing The first parameter of a multi-line function declaration must be on the line after the opening bracket Lint: Squiz.Functions.MultiLineFunctionDeclaration.FirstParamSpacing: The first parameter of a multi-line function declaration must be on the line after the opening… | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$index_field" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$index_field" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$index_field"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$index_field"; expected 1… | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$skip_deleted" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$skip_deleted" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$skip_deleted"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$skip_deleted"; expected… | |||||
$uidfetch=false, $return_uid=false) | $uidfetch=false, $return_uid=false) | ||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$uidfetch" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$uidfetch" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$uidfetch"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$uidfetch"; expected 1… | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$return_uid" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$return_uid" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$return_uid"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$return_uid"; expected 1… | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.CloseBracketLine The closing parenthesis of a multi-line function declaration must be on a new line Lint: Squiz.Functions.MultiLineFunctionDeclaration.CloseBracketLine: The closing parenthesis of a multi-line function declaration must be on a new line | |||||
{ | { | ||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.NewlineBeforeOpenBrace The closing parenthesis and the opening brace of a multi-line function declaration must be on the same line Lint: Squiz.Functions.MultiLineFunctionDeclaration.NewlineBeforeOpenBrace: The closing parenthesis and the opening brace of a multi-line function declaration must be on… | |||||
$msg_index = $this->fetchHeaderIndex($mailbox, $message_set, | $msg_index = $this->fetchHeaderIndex($mailbox, $message_set, | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
$index_field, $skip_deleted, $uidfetch, $return_uid); | $index_field, $skip_deleted, $uidfetch, $return_uid); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
if (!empty($msg_index)) { | if (!empty($msg_index)) { | ||||
asort($msg_index); // ASC | asort($msg_index); // ASC | ||||
$msg_index = array_keys($msg_index); | $msg_index = array_keys($msg_index); | ||||
$msg_index = '* SEARCH ' . implode(' ', $msg_index); | $msg_index = '* SEARCH ' . implode(' ', $msg_index); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$msg_index = is_array($msg_index) ? '* SEARCH' : null; | $msg_index = is_array($msg_index) ? '* SEARCH' : null; | ||||
} | } | ||||
return new rcube_result_index($mailbox, $msg_index); | return new rcube_result_index($mailbox, $msg_index); | ||||
Lint: Instantiated class rcube_result_index not found. Instantiated class rcube_result_index not found. Lint: Instantiated class rcube_result_index not found.: Instantiated class rcube_result_index not found. | |||||
} | } | ||||
/** | /** | ||||
* Fetches specified header/data value for a set of messages. | * Fetches specified header/data value for a set of messages. | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param string|array $message_set Searching criteria (list of messages to return) | * @param string|array $message_set Searching criteria (list of messages to return) | ||||
* @param string $index_field Field to sort by (ARRIVAL, CC, DATE, FROM, SIZE, SUBJECT, TO) | * @param string $index_field Field to sort by (ARRIVAL, CC, DATE, FROM, SIZE, SUBJECT, TO) | ||||
* @param bool $skip_deleted Makes that DELETED messages will be skipped | * @param bool $skip_deleted Makes that DELETED messages will be skipped | ||||
* @param bool $uidfetch Enables UID FETCH usage | * @param bool $uidfetch Enables UID FETCH usage | ||||
* @param bool $return_uid Enables returning UIDs instead of IDs | * @param bool $return_uid Enables returning UIDs instead of IDs | ||||
* | * | ||||
* @return array|bool List of header values or False on failure | * @return array|bool List of header values or False on failure | ||||
*/ | */ | ||||
public function fetchHeaderIndex($mailbox, $message_set, $index_field = '', $skip_deleted = true, | public function fetchHeaderIndex($mailbox, $message_set, $index_field = '', $skip_deleted = true, | ||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.FirstParamSpacing The first parameter of a multi-line function declaration must be on the line after the opening bracket Lint: Squiz.Functions.MultiLineFunctionDeclaration.FirstParamSpacing: The first parameter of a multi-line function declaration must be on the line after the opening… | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
$uidfetch = false, $return_uid = false) | $uidfetch = false, $return_uid = false) | ||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.CloseBracketLine The closing parenthesis of a multi-line function declaration must be on a new line Lint: Squiz.Functions.MultiLineFunctionDeclaration.CloseBracketLine: The closing parenthesis of a multi-line function declaration must be on a new line | |||||
{ | { | ||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.NewlineBeforeOpenBrace The closing parenthesis and the opening brace of a multi-line function declaration must be on the same line Lint: Squiz.Functions.MultiLineFunctionDeclaration.NewlineBeforeOpenBrace: The closing parenthesis and the opening brace of a multi-line function declaration must be on… | |||||
if (is_array($message_set)) { | if (is_array($message_set)) { | ||||
if (!($message_set = $this->compressMessageSet($message_set))) { | if (!($message_set = $this->compressMessageSet($message_set))) { | ||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
list($from_idx, $to_idx) = explode(':', $message_set); | list($from_idx, $to_idx) = explode(':', $message_set); | ||||
if (empty($message_set) || | if (empty($message_set) || | ||||
Lint: PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine The first expression of a multi-line control structure must be on the line after the opening parenthesis Lint: PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine: The first expression of a multi-line control structure must be on the line after the opening… | |||||
(isset($to_idx) && $to_idx != '*' && (int)$from_idx > (int)$to_idx) | (isset($to_idx) && $to_idx != '*' && (int)$from_idx > (int)$to_idx) | ||||
Lint: Variable $to_idx in isset() always exists and is not nullable. Variable $to_idx in isset() always exists and is not nullable. Lint: Variable $to_idx in isset() always exists and is not nullable.: Variable $to_idx in isset() always exists and is not nullable. | |||||
) { | ) { | ||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||
$index_field = empty($index_field) ? 'DATE' : strtoupper($index_field); | $index_field = empty($index_field) ? 'DATE' : strtoupper($index_field); | ||||
$fields_a['DATE'] = 1; | $fields_a['DATE'] = 1; | ||||
$fields_a['INTERNALDATE'] = 4; | $fields_a['INTERNALDATE'] = 4; | ||||
$fields_a['ARRIVAL'] = 4; | $fields_a['ARRIVAL'] = 4; | ||||
$fields_a['FROM'] = 1; | $fields_a['FROM'] = 1; | ||||
$fields_a['REPLY-TO'] = 1; | $fields_a['REPLY-TO'] = 1; | ||||
$fields_a['SENDER'] = 1; | $fields_a['SENDER'] = 1; | ||||
$fields_a['TO'] = 1; | $fields_a['TO'] = 1; | ||||
$fields_a['CC'] = 1; | $fields_a['CC'] = 1; | ||||
$fields_a['SUBJECT'] = 1; | $fields_a['SUBJECT'] = 1; | ||||
$fields_a['UID'] = 2; | $fields_a['UID'] = 2; | ||||
$fields_a['SIZE'] = 2; | $fields_a['SIZE'] = 2; | ||||
$fields_a['SEEN'] = 3; | $fields_a['SEEN'] = 3; | ||||
$fields_a['RECENT'] = 3; | $fields_a['RECENT'] = 3; | ||||
$fields_a['DELETED'] = 3; | $fields_a['DELETED'] = 3; | ||||
if (!($mode = $fields_a[$index_field])) { | if (!($mode = $fields_a[$index_field])) { | ||||
Lint: Negated boolean expression is always false. Negated boolean expression is always false. Lint: Negated boolean expression is always false.: Negated boolean expression is always false. | |||||
return false; | return false; | ||||
} | } | ||||
// Select the mailbox | // Select the mailbox | ||||
if (!$this->select($mailbox)) { | if (!$this->select($mailbox)) { | ||||
return false; | return false; | ||||
} | } | ||||
Show All 9 Lines | public function fetchHeaderIndex($mailbox, $message_set, $index_field = '', $skip_deleted = true, | ||||
$fields[] = 'FLAGS'; | $fields[] = 'FLAGS'; | ||||
} | } | ||||
if ($mode == 1) { | if ($mode == 1) { | ||||
if ($index_field == 'DATE') { | if ($index_field == 'DATE') { | ||||
$fields[] = 'INTERNALDATE'; | $fields[] = 'INTERNALDATE'; | ||||
} | } | ||||
$fields[] = "BODY.PEEK[HEADER.FIELDS ($index_field)]"; | $fields[] = "BODY.PEEK[HEADER.FIELDS ($index_field)]"; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($mode == 2) { | else if ($mode == 2) { | ||||
if ($index_field == 'SIZE') { | if ($index_field == 'SIZE') { | ||||
$fields[] = 'RFC822.SIZE'; | $fields[] = 'RFC822.SIZE'; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if (!$return_uid || $index_field != 'UID') { | else if (!$return_uid || $index_field != 'UID') { | ||||
$fields[] = $index_field; | $fields[] = $index_field; | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($mode == 3 && !$skip_deleted) { | else if ($mode == 3 && !$skip_deleted) { | ||||
$fields[] = 'FLAGS'; | $fields[] = 'FLAGS'; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($mode == 4) { | else if ($mode == 4) { | ||||
$fields[] = 'INTERNALDATE'; | $fields[] = 'INTERNALDATE'; | ||||
} | } | ||||
$request = "$key $cmd $message_set (" . implode(' ', $fields) . ")"; | $request = "$key $cmd $message_set (" . implode(' ', $fields) . ")"; | ||||
if (!$this->putLine($request)) { | if (!$this->putLine($request)) { | ||||
$this->setError(self::ERROR_COMMAND, "Failed to send $cmd command"); | $this->setError(self::ERROR_COMMAND, "Failed to send $cmd command"); | ||||
return false; | return false; | ||||
} | } | ||||
$result = array(); | $result = array(); | ||||
do { | do { | ||||
$line = rtrim($this->readLine(200)); | $line = rtrim($this->readLine(200)); | ||||
$line = $this->multLine($line); | $line = $this->multLine($line); | ||||
if (preg_match('/^\* ([0-9]+) FETCH/', $line, $m)) { | if (preg_match('/^\* ([0-9]+) FETCH/', $line, $m)) { | ||||
$id = $m[1]; | $id = $m[1]; | ||||
$flags = null; | $flags = null; | ||||
if ($return_uid) { | if ($return_uid) { | ||||
if (preg_match('/UID ([0-9]+)/', $line, $matches)) { | if (preg_match('/UID ([0-9]+)/', $line, $matches)) { | ||||
$id = (int) $matches[1]; | $id = (int) $matches[1]; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
continue; | continue; | ||||
} | } | ||||
} | } | ||||
if ($skip_deleted && preg_match('/FLAGS \(([^)]+)\)/', $line, $matches)) { | if ($skip_deleted && preg_match('/FLAGS \(([^)]+)\)/', $line, $matches)) { | ||||
$flags = explode(' ', strtoupper($matches[1])); | $flags = explode(' ', strtoupper($matches[1])); | ||||
if (in_array('\\DELETED', $flags)) { | if (in_array('\\DELETED', $flags)) { | ||||
continue; | continue; | ||||
} | } | ||||
} | } | ||||
if ($mode == 1 && $index_field == 'DATE') { | if ($mode == 1 && $index_field == 'DATE') { | ||||
if (preg_match('/BODY\[HEADER\.FIELDS \("*DATE"*\)\] (.*)/', $line, $matches)) { | if (preg_match('/BODY\[HEADER\.FIELDS \("*DATE"*\)\] (.*)/', $line, $matches)) { | ||||
$value = preg_replace(array('/^"*[a-z]+:/i'), '', $matches[1]); | $value = preg_replace(array('/^"*[a-z]+:/i'), '', $matches[1]); | ||||
$value = trim($value); | $value = trim($value); | ||||
$result[$id] = rcube_utils::strtotime($value); | $result[$id] = rcube_utils::strtotime($value); | ||||
Lint: Call to static method strtotime() on an unknown class rcube_utils. Call to static method strtotime() on an unknown class rcube_utils. Lint: Call to static method strtotime() on an unknown class rcube_utils.: Call to static method strtotime() on an unknown class rcube_utils. | |||||
} | } | ||||
// non-existent/empty Date: header, use INTERNALDATE | // non-existent/empty Date: header, use INTERNALDATE | ||||
if (empty($result[$id])) { | if (empty($result[$id])) { | ||||
if (preg_match('/INTERNALDATE "([^"]+)"/', $line, $matches)) { | if (preg_match('/INTERNALDATE "([^"]+)"/', $line, $matches)) { | ||||
$result[$id] = rcube_utils::strtotime($matches[1]); | $result[$id] = rcube_utils::strtotime($matches[1]); | ||||
Lint: Call to static method strtotime() on an unknown class rcube_utils. Call to static method strtotime() on an unknown class rcube_utils. Lint: Call to static method strtotime() on an unknown class rcube_utils.: Call to static method strtotime() on an unknown class rcube_utils. | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$result[$id] = 0; | $result[$id] = 0; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($mode == 1) { | else if ($mode == 1) { | ||||
if (preg_match('/BODY\[HEADER\.FIELDS \("?(FROM|REPLY-TO|SENDER|TO|SUBJECT)"?\)\] (.*)/', $line, $matches)) { | if (preg_match('/BODY\[HEADER\.FIELDS \("?(FROM|REPLY-TO|SENDER|TO|SUBJECT)"?\)\] (.*)/', $line, $matches)) { | ||||
$value = preg_replace(array('/^"*[a-z]+:/i', '/\s+$/sm'), array('', ''), $matches[2]); | $value = preg_replace(array('/^"*[a-z]+:/i', '/\s+$/sm'), array('', ''), $matches[2]); | ||||
$result[$id] = trim($value); | $result[$id] = trim($value); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$result[$id] = ''; | $result[$id] = ''; | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($mode == 2) { | else if ($mode == 2) { | ||||
if (preg_match('/' . $index_field . ' ([0-9]+)/', $line, $matches)) { | if (preg_match('/' . $index_field . ' ([0-9]+)/', $line, $matches)) { | ||||
$result[$id] = trim($matches[1]); | $result[$id] = trim($matches[1]); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$result[$id] = 0; | $result[$id] = 0; | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($mode == 3) { | else if ($mode == 3) { | ||||
if (!$flags && preg_match('/FLAGS \(([^)]+)\)/', $line, $matches)) { | if (!$flags && preg_match('/FLAGS \(([^)]+)\)/', $line, $matches)) { | ||||
$flags = explode(' ', $matches[1]); | $flags = explode(' ', $matches[1]); | ||||
} | } | ||||
$result[$id] = in_array("\\".$index_field, (array) $flags) ? 1 : 0; | $result[$id] = in_array("\\".$index_field, (array) $flags) ? 1 : 0; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($mode == 4) { | else if ($mode == 4) { | ||||
Lint: If condition is always true. If condition is always true. Lint: If condition is always true.: If condition is always true. | |||||
if (preg_match('/INTERNALDATE "([^"]+)"/', $line, $matches)) { | if (preg_match('/INTERNALDATE "([^"]+)"/', $line, $matches)) { | ||||
$result[$id] = rcube_utils::strtotime($matches[1]); | $result[$id] = rcube_utils::strtotime($matches[1]); | ||||
Lint: Call to static method strtotime() on an unknown class rcube_utils. Call to static method strtotime() on an unknown class rcube_utils. Lint: Call to static method strtotime() on an unknown class rcube_utils.: Call to static method strtotime() on an unknown class rcube_utils. | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$result[$id] = 0; | $result[$id] = 0; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
while (!$this->startsWith($line, $key, true, true)); | while (!$this->startsWith($line, $key, true, true)); | ||||
return $result; | return $result; | ||||
} | } | ||||
/** | /** | ||||
* Returns message sequence identifier | * Returns message sequence identifier | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param int $uid Message unique identifier (UID) | * @param int $uid Message unique identifier (UID) | ||||
* | * | ||||
* @return int Message sequence identifier | * @return int Message sequence identifier | ||||
*/ | */ | ||||
public function UID2ID($mailbox, $uid) | public function UID2ID($mailbox, $uid) | ||||
{ | { | ||||
if ($uid > 0) { | if ($uid > 0) { | ||||
Lint: Method rcube_imap_generic::UID2ID() should return int but return statement is missing. Method rcube_imap_generic::UID2ID() should return int but return statement is missing. Lint: Method rcube_imap_generic::UID2ID() should return int but return statement is missing.: Method rcube_imap_generic::UID2ID() should return int but return statement is missing. | |||||
$index = $this->search($mailbox, "UID $uid"); | $index = $this->search($mailbox, "UID $uid"); | ||||
if ($index->count() == 1) { | if ($index->count() == 1) { | ||||
Lint: Call to method count() on an unknown class rcube_result_index. Call to method count() on an unknown class rcube_result_index. Lint: Call to method count() on an unknown class rcube_result_index.: Call to method count() on an unknown class rcube_result_index. | |||||
$arr = $index->get(); | $arr = $index->get(); | ||||
Lint: Call to method get() on an unknown class rcube_result_index. Call to method get() on an unknown class rcube_result_index. Lint: Call to method get() on an unknown class rcube_result_index.: Call to method get() on an unknown class rcube_result_index. | |||||
return (int) $arr[0]; | return (int) $arr[0]; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Returns message unique identifier (UID) | * Returns message unique identifier (UID) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param int $uid Message sequence identifier | * @param int $uid Message sequence identifier | ||||
* | * | ||||
* @return int Message unique identifier | * @return int Message unique identifier | ||||
*/ | */ | ||||
public function ID2UID($mailbox, $id) | public function ID2UID($mailbox, $id) | ||||
Lint: PHPDoc tag @param references unknown parameter: $uid PHPDoc tag @param references unknown parameter: $uid Lint: PHPDoc tag @param references unknown parameter: $uid: PHPDoc tag @param references unknown parameter: $uid | |||||
{ | { | ||||
if (empty($id) || $id < 0) { | if (empty($id) || $id < 0) { | ||||
return null; | return null; | ||||
Lint: Method rcube_imap_generic::ID2UID() should return int but returns null. Method rcube_imap_generic::ID2UID() should return int but returns null. Lint: Method rcube_imap_generic::ID2UID() should return int but returns null.: Method rcube_imap_generic::ID2UID() should return int but returns null. | |||||
} | } | ||||
if (!$this->select($mailbox)) { | if (!$this->select($mailbox)) { | ||||
return null; | return null; | ||||
Lint: Method rcube_imap_generic::ID2UID() should return int but returns null. Method rcube_imap_generic::ID2UID() should return int but returns null. Lint: Method rcube_imap_generic::ID2UID() should return int but returns null.: Method rcube_imap_generic::ID2UID() should return int but returns null. | |||||
} | } | ||||
if ($uid = $this->data['UID-MAP'][$id]) { | if ($uid = $this->data['UID-MAP'][$id]) { | ||||
return $uid; | return $uid; | ||||
} | } | ||||
if (isset($this->data['EXISTS']) && $id > $this->data['EXISTS']) { | if (isset($this->data['EXISTS']) && $id > $this->data['EXISTS']) { | ||||
return null; | return null; | ||||
Lint: Method rcube_imap_generic::ID2UID() should return int but returns null. Method rcube_imap_generic::ID2UID() should return int but returns null. Lint: Method rcube_imap_generic::ID2UID() should return int but returns null.: Method rcube_imap_generic::ID2UID() should return int but returns null. | |||||
} | } | ||||
$index = $this->search($mailbox, $id, true); | $index = $this->search($mailbox, $id, true); | ||||
if ($index->count() == 1) { | if ($index->count() == 1) { | ||||
Lint: Call to method count() on an unknown class rcube_result_index. Call to method count() on an unknown class rcube_result_index. Lint: Call to method count() on an unknown class rcube_result_index.: Call to method count() on an unknown class rcube_result_index. | |||||
Lint: Method rcube_imap_generic::ID2UID() should return int but return statement is missing. Method rcube_imap_generic::ID2UID() should return int but return statement is missing. Lint: Method rcube_imap_generic::ID2UID() should return int but return statement is missing.: Method rcube_imap_generic::ID2UID() should return int but return statement is missing. | |||||
$arr = $index->get(); | $arr = $index->get(); | ||||
Lint: Call to method get() on an unknown class rcube_result_index. Call to method get() on an unknown class rcube_result_index. Lint: Call to method get() on an unknown class rcube_result_index.: Call to method get() on an unknown class rcube_result_index. | |||||
return $this->data['UID-MAP'][$id] = (int) $arr[0]; | return $this->data['UID-MAP'][$id] = (int) $arr[0]; | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Sets flag of the message(s) | * Sets flag of the message(s) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | protected function modFlag($mailbox, $messages, $flag, $mod = '+') | ||||
return false; | return false; | ||||
} | } | ||||
if ($this->flags[strtoupper($flag)]) { | if ($this->flags[strtoupper($flag)]) { | ||||
$flag = $this->flags[strtoupper($flag)]; | $flag = $this->flags[strtoupper($flag)]; | ||||
} | } | ||||
// if PERMANENTFLAGS is not specified all flags are allowed | // if PERMANENTFLAGS is not specified all flags are allowed | ||||
if (!empty($this->data['PERMANENTFLAGS']) | if (!empty($this->data['PERMANENTFLAGS']) | ||||
Lint: PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine The first expression of a multi-line control structure must be on the line after the opening parenthesis Lint: PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine: The first expression of a multi-line control structure must be on the line after the opening… | |||||
&& !in_array($flag, (array) $this->data['PERMANENTFLAGS']) | && !in_array($flag, (array) $this->data['PERMANENTFLAGS']) | ||||
&& !in_array('\\*', (array) $this->data['PERMANENTFLAGS']) | && !in_array('\\*', (array) $this->data['PERMANENTFLAGS']) | ||||
) { | ) { | ||||
return false; | return false; | ||||
} | } | ||||
// Clear internal status cache | // Clear internal status cache | ||||
if ($flag == 'SEEN') { | if ($flag == 'SEEN') { | ||||
unset($this->data['STATUS:'.$mailbox]['UNSEEN']); | unset($this->data['STATUS:'.$mailbox]['UNSEEN']); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
} | } | ||||
if ($mod != '+' && $mod != '-') { | if ($mod != '+' && $mod != '-') { | ||||
$mod = '+'; | $mod = '+'; | ||||
} | } | ||||
$result = $this->execute('UID STORE', array( | $result = $this->execute('UID STORE', array( | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
$this->compressMessageSet($messages), $mod . 'FLAGS.SILENT', "($flag)"), | $this->compressMessageSet($messages), $mod . 'FLAGS.SILENT', "($flag)"), | ||||
self::COMMAND_NORESPONSE); | self::COMMAND_NORESPONSE); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return $result == self::ERROR_OK; | return $result == self::ERROR_OK; | ||||
} | } | ||||
/** | /** | ||||
* Copies message(s) from one folder to another | * Copies message(s) from one folder to another | ||||
* | * | ||||
* @param string|array $messages Message UID(s) | * @param string|array $messages Message UID(s) | ||||
* @param string $from Mailbox name | * @param string $from Mailbox name | ||||
* @param string $to Destination mailbox name | * @param string $to Destination mailbox name | ||||
* | * | ||||
* @return bool True on success, False on failure | * @return bool True on success, False on failure | ||||
*/ | */ | ||||
public function copy($messages, $from, $to) | public function copy($messages, $from, $to) | ||||
{ | { | ||||
// Clear last COPYUID data | // Clear last COPYUID data | ||||
unset($this->data['COPYUID']); | unset($this->data['COPYUID']); | ||||
if (!$this->select($from)) { | if (!$this->select($from)) { | ||||
return false; | return false; | ||||
} | } | ||||
// Clear internal status cache | // Clear internal status cache | ||||
unset($this->data['STATUS:'.$to]); | unset($this->data['STATUS:'.$to]); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
$result = $this->execute('UID COPY', array( | $result = $this->execute('UID COPY', array( | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
$this->compressMessageSet($messages), $this->escape($to)), | $this->compressMessageSet($messages), $this->escape($to)), | ||||
self::COMMAND_NORESPONSE); | self::COMMAND_NORESPONSE); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return $result == self::ERROR_OK; | return $result == self::ERROR_OK; | ||||
} | } | ||||
/** | /** | ||||
* Moves message(s) from one folder to another. | * Moves message(s) from one folder to another. | ||||
* | * | ||||
* @param string|array $messages Message UID(s) | * @param string|array $messages Message UID(s) | ||||
Show All 14 Lines | public function move($messages, $from, $to) | ||||
} | } | ||||
// use MOVE command (RFC 6851) | // use MOVE command (RFC 6851) | ||||
if ($this->hasCapability('MOVE')) { | if ($this->hasCapability('MOVE')) { | ||||
// Clear last COPYUID data | // Clear last COPYUID data | ||||
unset($this->data['COPYUID']); | unset($this->data['COPYUID']); | ||||
// Clear internal status cache | // Clear internal status cache | ||||
unset($this->data['STATUS:'.$to]); | unset($this->data['STATUS:'.$to]); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
$this->clear_status_cache($from); | $this->clear_status_cache($from); | ||||
$result = $this->execute('UID MOVE', array( | $result = $this->execute('UID MOVE', array( | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
$this->compressMessageSet($messages), $this->escape($to)), | $this->compressMessageSet($messages), $this->escape($to)), | ||||
self::COMMAND_NORESPONSE); | self::COMMAND_NORESPONSE); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 12 spaces but found 16 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 12 spaces but found 16 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return $result == self::ERROR_OK; | return $result == self::ERROR_OK; | ||||
} | } | ||||
// use COPY + STORE +FLAGS.SILENT \Deleted + EXPUNGE | // use COPY + STORE +FLAGS.SILENT \Deleted + EXPUNGE | ||||
$result = $this->copy($messages, $from, $to); | $result = $this->copy($messages, $from, $to); | ||||
if ($result) { | if ($result) { | ||||
// Clear internal status cache | // Clear internal status cache | ||||
unset($this->data['STATUS:'.$from]); | unset($this->data['STATUS:'.$from]); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
$result = $this->flag($from, $messages, 'DELETED'); | $result = $this->flag($from, $messages, 'DELETED'); | ||||
if ($messages == '*') { | if ($messages == '*') { | ||||
// CLOSE+SELECT should be faster than EXPUNGE | // CLOSE+SELECT should be faster than EXPUNGE | ||||
$this->close(); | $this->close(); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$this->expunge($from, $messages); | $this->expunge($from, $messages); | ||||
} | } | ||||
} | } | ||||
return $result; | return $result; | ||||
} | } | ||||
/** | /** | ||||
* FETCH command (RFC3501) | * FETCH command (RFC3501) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param mixed $message_set Message(s) sequence identifier(s) or UID(s) | * @param mixed $message_set Message(s) sequence identifier(s) or UID(s) | ||||
* @param bool $is_uid True if $message_set contains UIDs | * @param bool $is_uid True if $message_set contains UIDs | ||||
* @param array $query_items FETCH command data items | * @param array $query_items FETCH command data items | ||||
* @param string $mod_seq Modification sequence for CHANGEDSINCE (RFC4551) query | * @param string $mod_seq Modification sequence for CHANGEDSINCE (RFC4551) query | ||||
* @param bool $vanished Enables VANISHED parameter (RFC5162) for CHANGEDSINCE query | * @param bool $vanished Enables VANISHED parameter (RFC5162) for CHANGEDSINCE query | ||||
* | * | ||||
* @return array List of rcube_message_header elements, False on error | * @return array List of rcube_message_header elements, False on error | ||||
* @since 0.6 | * @since 0.6 | ||||
*/ | */ | ||||
public function fetch($mailbox, $message_set, $is_uid = false, $query_items = array(), | public function fetch($mailbox, $message_set, $is_uid = false, $query_items = array(), | ||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.FirstParamSpacing The first parameter of a multi-line function declaration must be on the line after the opening bracket Lint: Squiz.Functions.MultiLineFunctionDeclaration.FirstParamSpacing: The first parameter of a multi-line function declaration must be on the line after the opening… | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
$mod_seq = null, $vanished = false) | $mod_seq = null, $vanished = false) | ||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine Multi-line function declarations must define one parameter per line Lint: Squiz.Functions.MultiLineFunctionDeclaration.OneParamPerLine: Multi-line function declarations must define one parameter per line | |||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.CloseBracketLine The closing parenthesis of a multi-line function declaration must be on a new line Lint: Squiz.Functions.MultiLineFunctionDeclaration.CloseBracketLine: The closing parenthesis of a multi-line function declaration must be on a new line | |||||
{ | { | ||||
Lint: Squiz.Functions.MultiLineFunctionDeclaration.NewlineBeforeOpenBrace The closing parenthesis and the opening brace of a multi-line function declaration must be on the same line Lint: Squiz.Functions.MultiLineFunctionDeclaration.NewlineBeforeOpenBrace: The closing parenthesis and the opening brace of a multi-line function declaration must be on… | |||||
if (!$this->select($mailbox)) { | if (!$this->select($mailbox)) { | ||||
return false; | return false; | ||||
Lint: Method rcube_imap_generic::fetch() should return array but returns false. Method rcube_imap_generic::fetch() should return array but returns false. Lint: Method rcube_imap_generic::fetch() should return array but returns false.: Method rcube_imap_generic::fetch() should return array but returns false. | |||||
} | } | ||||
$message_set = $this->compressMessageSet($message_set); | $message_set = $this->compressMessageSet($message_set); | ||||
$result = array(); | $result = array(); | ||||
$key = $this->nextTag(); | $key = $this->nextTag(); | ||||
$cmd = ($is_uid ? 'UID ' : '') . 'FETCH'; | $cmd = ($is_uid ? 'UID ' : '') . 'FETCH'; | ||||
$request = "$key $cmd $message_set (" . implode(' ', $query_items) . ")"; | $request = "$key $cmd $message_set (" . implode(' ', $query_items) . ")"; | ||||
if ($mod_seq !== null && $this->hasCapability('CONDSTORE')) { | if ($mod_seq !== null && $this->hasCapability('CONDSTORE')) { | ||||
$request .= " (CHANGEDSINCE $mod_seq" . ($vanished ? " VANISHED" : '') .")"; | $request .= " (CHANGEDSINCE $mod_seq" . ($vanished ? " VANISHED" : '') .")"; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
} | } | ||||
if (!$this->putLine($request)) { | if (!$this->putLine($request)) { | ||||
$this->setError(self::ERROR_COMMAND, "Failed to send $cmd command"); | $this->setError(self::ERROR_COMMAND, "Failed to send $cmd command"); | ||||
return false; | return false; | ||||
Lint: Method rcube_imap_generic::fetch() should return array but returns false. Method rcube_imap_generic::fetch() should return array but returns false. Lint: Method rcube_imap_generic::fetch() should return array but returns false.: Method rcube_imap_generic::fetch() should return array but returns false. | |||||
} | } | ||||
do { | do { | ||||
$line = $this->readLine(4096); | $line = $this->readLine(4096); | ||||
if (!$line) { | if (!$line) { | ||||
break; | break; | ||||
} | } | ||||
// Sample reply line: | // Sample reply line: | ||||
// * 321 FETCH (UID 2417 RFC822.SIZE 2730 FLAGS (\Seen) | // * 321 FETCH (UID 2417 RFC822.SIZE 2730 FLAGS (\Seen) | ||||
// INTERNALDATE "16-Nov-2008 21:08:46 +0100" BODYSTRUCTURE (...) | // INTERNALDATE "16-Nov-2008 21:08:46 +0100" BODYSTRUCTURE (...) | ||||
// BODY[HEADER.FIELDS ... | // BODY[HEADER.FIELDS ... | ||||
if (preg_match('/^\* ([0-9]+) FETCH/', $line, $m)) { | if (preg_match('/^\* ([0-9]+) FETCH/', $line, $m)) { | ||||
$id = intval($m[1]); | $id = intval($m[1]); | ||||
$result[$id] = new rcube_message_header; | $result[$id] = new rcube_message_header; | ||||
Lint: Instantiated class rcube_message_header not found. Instantiated class rcube_message_header not found. Lint: Instantiated class rcube_message_header not found.: Instantiated class rcube_message_header not found. | |||||
Lint: PSR12.Classes.ClassInstantiation.MissingParentheses Parentheses must be used when instantiating a new class Lint: PSR12.Classes.ClassInstantiation.MissingParentheses: Parentheses must be used when instantiating a new class | |||||
$result[$id]->id = $id; | $result[$id]->id = $id; | ||||
Lint: Access to property $id on an unknown class rcube_message_header. Access to property $id on an unknown class rcube_message_header. Lint: Access to property $id on an unknown class rcube_message_header.: Access to property $id on an unknown class rcube_message_header. | |||||
Lint: Access to property $id on an unknown class rcube_message_header. Access to property $id on an unknown class rcube_message_header. Lint: Access to property $id on an unknown class rcube_message_header.: Access to property $id on an unknown class rcube_message_header. | |||||
$result[$id]->subject = ''; | $result[$id]->subject = ''; | ||||
Lint: Access to property $subject on an unknown class rcube_message_header. Access to property $subject on an unknown class rcube_message_header. Lint: Access to property $subject on an unknown class rcube_message_header.: Access to property $subject on an unknown class rcube_message_header. | |||||
Lint: Access to property $subject on an unknown class rcube_message_header. Access to property $subject on an unknown class rcube_message_header. Lint: Access to property $subject on an unknown class rcube_message_header.: Access to property $subject on an unknown class rcube_message_header. | |||||
$result[$id]->messageID = 'mid:' . $id; | $result[$id]->messageID = 'mid:' . $id; | ||||
Lint: Access to property $messageID on an unknown class rcube_message_header. Access to property $messageID on an unknown class rcube_message_header. Lint: Access to property $messageID on an unknown class rcube_message_header.: Access to property $messageID on an unknown class rcube_message_header. | |||||
Lint: Access to property $messageID on an unknown class rcube_message_header. Access to property $messageID on an unknown class rcube_message_header. Lint: Access to property $messageID on an unknown class rcube_message_header.: Access to property $messageID on an unknown class rcube_message_header. | |||||
$headers = null; | $headers = null; | ||||
$lines = array(); | $lines = array(); | ||||
$line = substr($line, strlen($m[0]) + 2); | $line = substr($line, strlen($m[0]) + 2); | ||||
$ln = 0; | $ln = 0; | ||||
// get complete entry | // get complete entry | ||||
while (preg_match('/\{([0-9]+)\}\r\n$/', $line, $m)) { | while (preg_match('/\{([0-9]+)\}\r\n$/', $line, $m)) { | ||||
$bytes = $m[1]; | $bytes = $m[1]; | ||||
$out = ''; | $out = ''; | ||||
while (strlen($out) < $bytes) { | while (strlen($out) < $bytes) { | ||||
$out = $this->readBytes($bytes); | $out = $this->readBytes($bytes); | ||||
if ($out === null) { | if ($out === null) { | ||||
Lint: Strict comparison using === between string and null will always evaluate to false. Strict comparison using === between string and null will always evaluate to false. Lint: Strict comparison using === between string and null will always evaluate to false.: Strict comparison using === between string and null will always evaluate to false. | |||||
break; | break; | ||||
} | } | ||||
$line .= $out; | $line .= $out; | ||||
} | } | ||||
$str = $this->readLine(4096); | $str = $this->readLine(4096); | ||||
if ($str === false) { | if ($str === false) { | ||||
Lint: Strict comparison using === between string and false will always evaluate to false. Strict comparison using === between string and false will always evaluate to false. Lint: Strict comparison using === between string and false will always evaluate to false.: Strict comparison using === between string and false will always evaluate to false. | |||||
break; | break; | ||||
} | } | ||||
$line .= $str; | $line .= $str; | ||||
} | } | ||||
// Tokenize response and assign to object properties | // Tokenize response and assign to object properties | ||||
while (list($name, $value) = $this->tokenizeResponse($line, 2)) { | while (list($name, $value) = $this->tokenizeResponse($line, 2)) { | ||||
if ($name == 'UID') { | if ($name == 'UID') { | ||||
$result[$id]->uid = intval($value); | $result[$id]->uid = intval($value); | ||||
Lint: Access to property $uid on an unknown class rcube_message_header. Access to property $uid on an unknown class rcube_message_header. Lint: Access to property $uid on an unknown class rcube_message_header.: Access to property $uid on an unknown class rcube_message_header. | |||||
Lint: Access to property $uid on an unknown class rcube_message_header. Access to property $uid on an unknown class rcube_message_header. Lint: Access to property $uid on an unknown class rcube_message_header.: Access to property $uid on an unknown class rcube_message_header. | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($name == 'RFC822.SIZE') { | else if ($name == 'RFC822.SIZE') { | ||||
$result[$id]->size = intval($value); | $result[$id]->size = intval($value); | ||||
Lint: Access to property $size on an unknown class rcube_message_header. Access to property $size on an unknown class rcube_message_header. Lint: Access to property $size on an unknown class rcube_message_header.: Access to property $size on an unknown class rcube_message_header. | |||||
Lint: Access to property $size on an unknown class rcube_message_header. Access to property $size on an unknown class rcube_message_header. Lint: Access to property $size on an unknown class rcube_message_header.: Access to property $size on an unknown class rcube_message_header. | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($name == 'RFC822.TEXT') { | else if ($name == 'RFC822.TEXT') { | ||||
$result[$id]->body = $value; | $result[$id]->body = $value; | ||||
Lint: Access to property $body on an unknown class rcube_message_header. Access to property $body on an unknown class rcube_message_header. Lint: Access to property $body on an unknown class rcube_message_header.: Access to property $body on an unknown class rcube_message_header. | |||||
Lint: Access to property $body on an unknown class rcube_message_header. Access to property $body on an unknown class rcube_message_header. Lint: Access to property $body on an unknown class rcube_message_header.: Access to property $body on an unknown class rcube_message_header. | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($name == 'INTERNALDATE') { | else if ($name == 'INTERNALDATE') { | ||||
$result[$id]->internaldate = $value; | $result[$id]->internaldate = $value; | ||||
Lint: Access to property $internaldate on an unknown class rcube_message_header. Access to property $internaldate on an unknown class rcube_message_header. Lint: Access to property $internaldate on an unknown class rcube_message_header.: Access to property $internaldate on an unknown class rcube_message_header. | |||||
Lint: Access to property $internaldate on an unknown class rcube_message_header. Access to property $internaldate on an unknown class rcube_message_header. Lint: Access to property $internaldate on an unknown class rcube_message_header.: Access to property $internaldate on an unknown class rcube_message_header. | |||||
$result[$id]->date = $value; | $result[$id]->date = $value; | ||||
Lint: Access to property $date on an unknown class rcube_message_header. Access to property $date on an unknown class rcube_message_header. Lint: Access to property $date on an unknown class rcube_message_header.: Access to property $date on an unknown class rcube_message_header. | |||||
Lint: Access to property $date on an unknown class rcube_message_header. Access to property $date on an unknown class rcube_message_header. Lint: Access to property $date on an unknown class rcube_message_header.: Access to property $date on an unknown class rcube_message_header. | |||||
$result[$id]->timestamp = rcube_utils::strtotime($value); | $result[$id]->timestamp = rcube_utils::strtotime($value); | ||||
Lint: Access to property $timestamp on an unknown class rcube_message_header. Access to property $timestamp on an unknown class rcube_message_header. Lint: Access to property $timestamp on an unknown class rcube_message_header.: Access to property $timestamp on an unknown class rcube_message_header. | |||||
Lint: Access to property $timestamp on an unknown class rcube_message_header. Access to property $timestamp on an unknown class rcube_message_header. Lint: Access to property $timestamp on an unknown class rcube_message_header.: Access to property $timestamp on an unknown class rcube_message_header. | |||||
Lint: Call to static method strtotime() on an unknown class rcube_utils. Call to static method strtotime() on an unknown class rcube_utils. Lint: Call to static method strtotime() on an unknown class rcube_utils.: Call to static method strtotime() on an unknown class rcube_utils. | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($name == 'FLAGS') { | else if ($name == 'FLAGS') { | ||||
if (!empty($value)) { | if (!empty($value)) { | ||||
foreach ((array)$value as $flag) { | foreach ((array)$value as $flag) { | ||||
$flag = str_replace(array('$', "\\"), '', $flag); | $flag = str_replace(array('$', "\\"), '', $flag); | ||||
$flag = strtoupper($flag); | $flag = strtoupper($flag); | ||||
$result[$id]->flags[$flag] = true; | $result[$id]->flags[$flag] = true; | ||||
Lint: Access to property $flags on an unknown class rcube_message_header. Access to property $flags on an unknown class rcube_message_header. Lint: Access to property $flags on an unknown class rcube_message_header.: Access to property $flags on an unknown class rcube_message_header. | |||||
Lint: Access to property $flags on an unknown class rcube_message_header. Access to property $flags on an unknown class rcube_message_header. Lint: Access to property $flags on an unknown class rcube_message_header.: Access to property $flags on an unknown class rcube_message_header. | |||||
} | } | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($name == 'MODSEQ') { | else if ($name == 'MODSEQ') { | ||||
$result[$id]->modseq = $value[0]; | $result[$id]->modseq = $value[0]; | ||||
Lint: Access to property $modseq on an unknown class rcube_message_header. Access to property $modseq on an unknown class rcube_message_header. Lint: Access to property $modseq on an unknown class rcube_message_header.: Access to property $modseq on an unknown class rcube_message_header. | |||||
Lint: Access to property $modseq on an unknown class rcube_message_header. Access to property $modseq on an unknown class rcube_message_header. Lint: Access to property $modseq on an unknown class rcube_message_header.: Access to property $modseq on an unknown class rcube_message_header. | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($name == 'ENVELOPE') { | else if ($name == 'ENVELOPE') { | ||||
$result[$id]->envelope = $value; | $result[$id]->envelope = $value; | ||||
Lint: Access to property $envelope on an unknown class rcube_message_header. Access to property $envelope on an unknown class rcube_message_header. Lint: Access to property $envelope on an unknown class rcube_message_header.: Access to property $envelope on an unknown class rcube_message_header. | |||||
Lint: Access to property $envelope on an unknown class rcube_message_header. Access to property $envelope on an unknown class rcube_message_header. Lint: Access to property $envelope on an unknown class rcube_message_header.: Access to property $envelope on an unknown class rcube_message_header. | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($name == 'BODYSTRUCTURE' || ($name == 'BODY' && count($value) > 2)) { | else if ($name == 'BODYSTRUCTURE' || ($name == 'BODY' && count($value) > 2)) { | ||||
if (!is_array($value[0]) && (strtolower($value[0]) == 'message' && strtolower($value[1]) == 'rfc822')) { | if (!is_array($value[0]) && (strtolower($value[0]) == 'message' && strtolower($value[1]) == 'rfc822')) { | ||||
$value = array($value); | $value = array($value); | ||||
} | } | ||||
$result[$id]->bodystructure = $value; | $result[$id]->bodystructure = $value; | ||||
Lint: Access to property $bodystructure on an unknown class rcube_message_header. Access to property $bodystructure on an unknown class rcube_message_header. Lint: Access to property $bodystructure on an unknown class rcube_message_header.: Access to property $bodystructure on an unknown class rcube_message_header. | |||||
Lint: Access to property $bodystructure on an unknown class rcube_message_header. Access to property $bodystructure on an unknown class rcube_message_header. Lint: Access to property $bodystructure on an unknown class rcube_message_header.: Access to property $bodystructure on an unknown class rcube_message_header. | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($name == 'RFC822') { | else if ($name == 'RFC822') { | ||||
$result[$id]->body = $value; | $result[$id]->body = $value; | ||||
Lint: Access to property $body on an unknown class rcube_message_header. Access to property $body on an unknown class rcube_message_header. Lint: Access to property $body on an unknown class rcube_message_header.: Access to property $body on an unknown class rcube_message_header. | |||||
Lint: Access to property $body on an unknown class rcube_message_header. Access to property $body on an unknown class rcube_message_header. Lint: Access to property $body on an unknown class rcube_message_header.: Access to property $body on an unknown class rcube_message_header. | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if (stripos($name, 'BODY[') === 0) { | else if (stripos($name, 'BODY[') === 0) { | ||||
$name = str_replace(']', '', substr($name, 5)); | $name = str_replace(']', '', substr($name, 5)); | ||||
if ($name == 'HEADER.FIELDS') { | if ($name == 'HEADER.FIELDS') { | ||||
// skip ']' after headers list | // skip ']' after headers list | ||||
$this->tokenizeResponse($line, 1); | $this->tokenizeResponse($line, 1); | ||||
$headers = $this->tokenizeResponse($line, 1); | $headers = $this->tokenizeResponse($line, 1); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if (strlen($name)) { | else if (strlen($name)) { | ||||
$result[$id]->bodypart[$name] = $value; | $result[$id]->bodypart[$name] = $value; | ||||
Lint: Access to property $bodypart on an unknown class rcube_message_header. Access to property $bodypart on an unknown class rcube_message_header. Lint: Access to property $bodypart on an unknown class rcube_message_header.: Access to property $bodypart on an unknown class rcube_message_header. | |||||
Lint: Access to property $bodypart on an unknown class rcube_message_header. Access to property $bodypart on an unknown class rcube_message_header. Lint: Access to property $bodypart on an unknown class rcube_message_header.: Access to property $bodypart on an unknown class rcube_message_header. | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$result[$id]->body = $value; | $result[$id]->body = $value; | ||||
Lint: Access to property $body on an unknown class rcube_message_header. Access to property $body on an unknown class rcube_message_header. Lint: Access to property $body on an unknown class rcube_message_header.: Access to property $body on an unknown class rcube_message_header. | |||||
Lint: Access to property $body on an unknown class rcube_message_header. Access to property $body on an unknown class rcube_message_header. Lint: Access to property $body on an unknown class rcube_message_header.: Access to property $body on an unknown class rcube_message_header. | |||||
} | } | ||||
} | } | ||||
} | } | ||||
// create array with header field:data | // create array with header field:data | ||||
if (!empty($headers)) { | if (!empty($headers)) { | ||||
$headers = explode("\n", trim($headers)); | $headers = explode("\n", trim($headers)); | ||||
foreach ($headers as $resln) { | foreach ($headers as $resln) { | ||||
if (ord($resln[0]) <= 32) { | if (ord($resln[0]) <= 32) { | ||||
$lines[$ln] .= (empty($lines[$ln]) ? '' : "\n") . trim($resln); | $lines[$ln] .= (empty($lines[$ln]) ? '' : "\n") . trim($resln); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$lines[++$ln] = trim($resln); | $lines[++$ln] = trim($resln); | ||||
} | } | ||||
} | } | ||||
foreach ($lines as $str) { | foreach ($lines as $str) { | ||||
list($field, $string) = explode(':', $str, 2); | list($field, $string) = explode(':', $str, 2); | ||||
$field = strtolower($field); | $field = strtolower($field); | ||||
$string = preg_replace('/\n[\t\s]*/', ' ', trim($string)); | $string = preg_replace('/\n[\t\s]*/', ' ', trim($string)); | ||||
switch ($field) { | switch ($field) { | ||||
case 'date'; | case 'date'; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
Lint: PSR2.ControlStructures.SwitchDeclaration.WrongOpenercase CASE statements must be defined using a colon Lint: PSR2.ControlStructures.SwitchDeclaration.WrongOpenercase: CASE statements must be defined using a colon | |||||
$string = substr($string, 0, 128); | $string = substr($string, 0, 128); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
$result[$id]->date = $string; | $result[$id]->date = $string; | ||||
Lint: Access to property $date on an unknown class rcube_message_header. Access to property $date on an unknown class rcube_message_header. Lint: Access to property $date on an unknown class rcube_message_header.: Access to property $date on an unknown class rcube_message_header. | |||||
Lint: Access to property $date on an unknown class rcube_message_header. Access to property $date on an unknown class rcube_message_header. Lint: Access to property $date on an unknown class rcube_message_header.: Access to property $date on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
$result[$id]->timestamp = rcube_utils::strtotime($string); | $result[$id]->timestamp = rcube_utils::strtotime($string); | ||||
Lint: Access to property $timestamp on an unknown class rcube_message_header. Access to property $timestamp on an unknown class rcube_message_header. Lint: Access to property $timestamp on an unknown class rcube_message_header.: Access to property $timestamp on an unknown class rcube_message_header. | |||||
Lint: Access to property $timestamp on an unknown class rcube_message_header. Access to property $timestamp on an unknown class rcube_message_header. Lint: Access to property $timestamp on an unknown class rcube_message_header.: Access to property $timestamp on an unknown class rcube_message_header. | |||||
Lint: Call to static method strtotime() on an unknown class rcube_utils. Call to static method strtotime() on an unknown class rcube_utils. Lint: Call to static method strtotime() on an unknown class rcube_utils.: Call to static method strtotime() on an unknown class rcube_utils. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
break; | break; | ||||
case 'to': | case 'to': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$result[$id]->to = preg_replace('/undisclosed-recipients:[;,]*/', '', $string); | $result[$id]->to = preg_replace('/undisclosed-recipients:[;,]*/', '', $string); | ||||
Lint: Access to property $to on an unknown class rcube_message_header. Access to property $to on an unknown class rcube_message_header. Lint: Access to property $to on an unknown class rcube_message_header.: Access to property $to on an unknown class rcube_message_header. | |||||
Lint: Access to property $to on an unknown class rcube_message_header. Access to property $to on an unknown class rcube_message_header. Lint: Access to property $to on an unknown class rcube_message_header.: Access to property $to on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
break; | break; | ||||
case 'from': | case 'from': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
case 'subject': | case 'subject': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
Lint: PSR2.ControlStructures.SwitchDeclaration.TerminatingComment There must be a comment when fall-through is intentional in a non-empty case body Lint: PSR2.ControlStructures.SwitchDeclaration.TerminatingComment: There must be a comment when fall-through is intentional in a non-empty case body | |||||
$string = substr($string, 0, 2048); | $string = substr($string, 0, 2048); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
case 'cc': | case 'cc': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
case 'bcc': | case 'bcc': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
case 'references': | case 'references': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$result[$id]->{$field} = $string; | $result[$id]->{$field} = $string; | ||||
Lint: Access to property $bcc on an unknown class rcube_message_header. Access to property $bcc on an unknown class rcube_message_header. Lint: Access to property $bcc on an unknown class rcube_message_header.: Access to property $bcc on an unknown class rcube_message_header. | |||||
Lint: Access to property $bcc on an unknown class rcube_message_header. Access to property $bcc on an unknown class rcube_message_header. Lint: Access to property $bcc on an unknown class rcube_message_header.: Access to property $bcc on an unknown class rcube_message_header. | |||||
Lint: Access to property $cc on an unknown class rcube_message_header. Access to property $cc on an unknown class rcube_message_header. Lint: Access to property $cc on an unknown class rcube_message_header.: Access to property $cc on an unknown class rcube_message_header. | |||||
Lint: Access to property $cc on an unknown class rcube_message_header. Access to property $cc on an unknown class rcube_message_header. Lint: Access to property $cc on an unknown class rcube_message_header.: Access to property $cc on an unknown class rcube_message_header. | |||||
Lint: Access to property $from on an unknown class rcube_message_header. Access to property $from on an unknown class rcube_message_header. Lint: Access to property $from on an unknown class rcube_message_header.: Access to property $from on an unknown class rcube_message_header. | |||||
Lint: Access to property $from on an unknown class rcube_message_header. Access to property $from on an unknown class rcube_message_header. Lint: Access to property $from on an unknown class rcube_message_header.: Access to property $from on an unknown class rcube_message_header. | |||||
Lint: Access to property $references on an unknown class rcube_message_header. Access to property $references on an unknown class rcube_message_header. Lint: Access to property $references on an unknown class rcube_message_header.: Access to property $references on an unknown class rcube_message_header. | |||||
Lint: Access to property $references on an unknown class rcube_message_header. Access to property $references on an unknown class rcube_message_header. Lint: Access to property $references on an unknown class rcube_message_header.: Access to property $references on an unknown class rcube_message_header. | |||||
Lint: Access to property $subject on an unknown class rcube_message_header. Access to property $subject on an unknown class rcube_message_header. Lint: Access to property $subject on an unknown class rcube_message_header.: Access to property $subject on an unknown class rcube_message_header. | |||||
Lint: Access to property $subject on an unknown class rcube_message_header. Access to property $subject on an unknown class rcube_message_header. Lint: Access to property $subject on an unknown class rcube_message_header.: Access to property $subject on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
break; | break; | ||||
case 'reply-to': | case 'reply-to': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$result[$id]->replyto = $string; | $result[$id]->replyto = $string; | ||||
Lint: Access to property $replyto on an unknown class rcube_message_header. Access to property $replyto on an unknown class rcube_message_header. Lint: Access to property $replyto on an unknown class rcube_message_header.: Access to property $replyto on an unknown class rcube_message_header. | |||||
Lint: Access to property $replyto on an unknown class rcube_message_header. Access to property $replyto on an unknown class rcube_message_header. Lint: Access to property $replyto on an unknown class rcube_message_header.: Access to property $replyto on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
break; | break; | ||||
case 'content-transfer-encoding': | case 'content-transfer-encoding': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$result[$id]->encoding = substr($string, 0, 32); | $result[$id]->encoding = substr($string, 0, 32); | ||||
Lint: Access to property $encoding on an unknown class rcube_message_header. Access to property $encoding on an unknown class rcube_message_header. Lint: Access to property $encoding on an unknown class rcube_message_header.: Access to property $encoding on an unknown class rcube_message_header. | |||||
Lint: Access to property $encoding on an unknown class rcube_message_header. Access to property $encoding on an unknown class rcube_message_header. Lint: Access to property $encoding on an unknown class rcube_message_header.: Access to property $encoding on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
break; | break; | ||||
Lint: PSR2.ControlStructures.SwitchDeclaration.BreakIndent Terminating statement must be indented to the same level as the CASE body Lint: PSR2.ControlStructures.SwitchDeclaration.BreakIndent: Terminating statement must be indented to the same level as the CASE body | |||||
case 'content-type': | case 'content-type': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$ctype_parts = preg_split('/[; ]+/', $string); | $ctype_parts = preg_split('/[; ]+/', $string); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
$result[$id]->ctype = strtolower(array_shift($ctype_parts)); | $result[$id]->ctype = strtolower(array_shift($ctype_parts)); | ||||
Lint: Access to property $ctype on an unknown class rcube_message_header. Access to property $ctype on an unknown class rcube_message_header. Lint: Access to property $ctype on an unknown class rcube_message_header.: Access to property $ctype on an unknown class rcube_message_header. | |||||
Lint: Access to property $ctype on an unknown class rcube_message_header. Access to property $ctype on an unknown class rcube_message_header. Lint: Access to property $ctype on an unknown class rcube_message_header.: Access to property $ctype on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
if (preg_match('/charset\s*=\s*"?([a-z0-9\-\.\_]+)"?/i', $string, $regs)) { | if (preg_match('/charset\s*=\s*"?([a-z0-9\-\.\_]+)"?/i', $string, $regs)) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 32 spaces, found 28 | |||||
$result[$id]->charset = $regs[1]; | $result[$id]->charset = $regs[1]; | ||||
Lint: Access to property $charset on an unknown class rcube_message_header. Access to property $charset on an unknown class rcube_message_header. Lint: Access to property $charset on an unknown class rcube_message_header.: Access to property $charset on an unknown class rcube_message_header. | |||||
Lint: Access to property $charset on an unknown class rcube_message_header. Access to property $charset on an unknown class rcube_message_header. Lint: Access to property $charset on an unknown class rcube_message_header.: Access to property $charset on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 36 spaces, found 32 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 36 spaces, found 32 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 32 spaces, found 28 | |||||
break; | break; | ||||
case 'in-reply-to': | case 'in-reply-to': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$result[$id]->in_reply_to = str_replace(array("\n", '<', '>'), '', $string); | $result[$id]->in_reply_to = str_replace(array("\n", '<', '>'), '', $string); | ||||
Lint: Access to property $in_reply_to on an unknown class rcube_message_header. Access to property $in_reply_to on an unknown class rcube_message_header. Lint: Access to property $in_reply_to on an unknown class rcube_message_header.: Access to property $in_reply_to on an unknown class rcube_message_header. | |||||
Lint: Access to property $in_reply_to on an unknown class rcube_message_header. Access to property $in_reply_to on an unknown class rcube_message_header. Lint: Access to property $in_reply_to on an unknown class rcube_message_header.: Access to property $in_reply_to on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
break; | break; | ||||
case 'return-receipt-to': | case 'return-receipt-to': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
case 'disposition-notification-to': | case 'disposition-notification-to': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
case 'x-confirm-reading-to': | case 'x-confirm-reading-to': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$result[$id]->mdn_to = substr($string, 0, 2048); | $result[$id]->mdn_to = substr($string, 0, 2048); | ||||
Lint: Access to property $mdn_to on an unknown class rcube_message_header. Access to property $mdn_to on an unknown class rcube_message_header. Lint: Access to property $mdn_to on an unknown class rcube_message_header.: Access to property $mdn_to on an unknown class rcube_message_header. | |||||
Lint: Access to property $mdn_to on an unknown class rcube_message_header. Access to property $mdn_to on an unknown class rcube_message_header. Lint: Access to property $mdn_to on an unknown class rcube_message_header.: Access to property $mdn_to on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
break; | break; | ||||
case 'message-id': | case 'message-id': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$result[$id]->messageID = substr($string, 0, 2048); | $result[$id]->messageID = substr($string, 0, 2048); | ||||
Lint: Access to property $messageID on an unknown class rcube_message_header. Access to property $messageID on an unknown class rcube_message_header. Lint: Access to property $messageID on an unknown class rcube_message_header.: Access to property $messageID on an unknown class rcube_message_header. | |||||
Lint: Access to property $messageID on an unknown class rcube_message_header. Access to property $messageID on an unknown class rcube_message_header. Lint: Access to property $messageID on an unknown class rcube_message_header.: Access to property $messageID on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
break; | break; | ||||
case 'x-priority': | case 'x-priority': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
if (preg_match('/^(\d+)/', $string, $matches)) { | if (preg_match('/^(\d+)/', $string, $matches)) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 32 spaces, found 28 | |||||
$result[$id]->priority = intval($matches[1]); | $result[$id]->priority = intval($matches[1]); | ||||
Lint: Access to property $priority on an unknown class rcube_message_header. Access to property $priority on an unknown class rcube_message_header. Lint: Access to property $priority on an unknown class rcube_message_header.: Access to property $priority on an unknown class rcube_message_header. | |||||
Lint: Access to property $priority on an unknown class rcube_message_header. Access to property $priority on an unknown class rcube_message_header. Lint: Access to property $priority on an unknown class rcube_message_header.: Access to property $priority on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 36 spaces, found 32 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 36 spaces, found 32 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 32 spaces, found 28 | |||||
break; | break; | ||||
default: | default: | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
if (strlen($field) < 3) { | if (strlen($field) < 3) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 32 spaces, found 28 | |||||
break; | break; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 36 spaces, found 32 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 36 spaces, found 32 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 32 spaces, found 28 | |||||
if ($result[$id]->others[$field]) { | if ($result[$id]->others[$field]) { | ||||
Lint: Access to property $others on an unknown class rcube_message_header. Access to property $others on an unknown class rcube_message_header. Lint: Access to property $others on an unknown class rcube_message_header.: Access to property $others on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 32 spaces, found 28 | |||||
$string = array_merge((array)$result[$id]->others[$field], (array)$string); | $string = array_merge((array)$result[$id]->others[$field], (array)$string); | ||||
Lint: Access to property $others on an unknown class rcube_message_header. Access to property $others on an unknown class rcube_message_header. Lint: Access to property $others on an unknown class rcube_message_header.: Access to property $others on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 36 spaces, found 32 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 36 spaces, found 32 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 32 spaces, found 28 | |||||
$result[$id]->others[$field] = $string; | $result[$id]->others[$field] = $string; | ||||
Lint: Access to property $others on an unknown class rcube_message_header. Access to property $others on an unknown class rcube_message_header. Lint: Access to property $others on an unknown class rcube_message_header.: Access to property $others on an unknown class rcube_message_header. | |||||
Lint: Access to property $others on an unknown class rcube_message_header. Access to property $others on an unknown class rcube_message_header. Lint: Access to property $others on an unknown class rcube_message_header.: Access to property $others on an unknown class rcube_message_header. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
// VANISHED response (QRESYNC RFC5162) | // VANISHED response (QRESYNC RFC5162) | ||||
// Sample: * VANISHED (EARLIER) 300:310,405,411 | // Sample: * VANISHED (EARLIER) 300:310,405,411 | ||||
else if (preg_match('/^\* VANISHED [()EARLIER]*/i', $line, $match)) { | else if (preg_match('/^\* VANISHED [()EARLIER]*/i', $line, $match)) { | ||||
$line = substr($line, strlen($match[0])); | $line = substr($line, strlen($match[0])); | ||||
$v_data = $this->tokenizeResponse($line, 1); | $v_data = $this->tokenizeResponse($line, 1); | ||||
$this->data['VANISHED'] = $v_data; | $this->data['VANISHED'] = $v_data; | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
while (!$this->startsWith($line, $key, true)); | while (!$this->startsWith($line, $key, true)); | ||||
return $result; | return $result; | ||||
} | } | ||||
/** | /** | ||||
* Returns message(s) data (flags, headers, etc.) | * Returns message(s) data (flags, headers, etc.) | ||||
* | * | ||||
Show All 31 Lines | |||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param int $id Message sequence identifier or UID | * @param int $id Message sequence identifier or UID | ||||
* @param bool $is_uid True if $id is an UID | * @param bool $is_uid True if $id is an UID | ||||
* @param bool $bodystr Enable to add BODYSTRUCTURE data to the result | * @param bool $bodystr Enable to add BODYSTRUCTURE data to the result | ||||
* @param array $add_headers List of additional headers | * @param array $add_headers List of additional headers | ||||
* | * | ||||
* @return bool|rcube_message_header Message data, False on error | * @return bool|rcube_message_header Message data, False on error | ||||
*/ | */ | ||||
public function fetchHeader($mailbox, $id, $is_uid = false, $bodystr = false, $add_headers = array()) | public function fetchHeader($mailbox, $id, $is_uid = false, $bodystr = false, $add_headers = array()) | ||||
Lint: Method rcube_imap_generic::fetchHeader() has invalid return type rcube_message_header. Method rcube_imap_generic::fetchHeader() has invalid return type rcube_message_header. Lint: Method rcube_imap_generic::fetchHeader() has invalid return type rcube_message_header.: Method rcube_imap_generic::fetchHeader() has invalid return type rcube_message_header. | |||||
{ | { | ||||
$a = $this->fetchHeaders($mailbox, $id, $is_uid, $bodystr, $add_headers); | $a = $this->fetchHeaders($mailbox, $id, $is_uid, $bodystr, $add_headers); | ||||
if (is_array($a)) { | if (is_array($a)) { | ||||
return array_shift($a); | return array_shift($a); | ||||
} | } | ||||
return false; | return false; | ||||
} | } | ||||
Show All 13 Lines | public static function sortHeaders($messages, $field, $flag) | ||||
$order = empty($flag) ? 'ASC' : strtoupper($flag); | $order = empty($flag) ? 'ASC' : strtoupper($flag); | ||||
$index = array(); | $index = array(); | ||||
reset($messages); | reset($messages); | ||||
// Create an index | // Create an index | ||||
foreach ($messages as $key => $headers) { | foreach ($messages as $key => $headers) { | ||||
switch ($field) { | switch ($field) { | ||||
case 'arrival': | case 'arrival': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 16 spaces, found 12 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 16 spaces, found 12 | |||||
$field = 'internaldate'; | $field = 'internaldate'; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 20 spaces, found 16 | |||||
// no-break | // no-break | ||||
case 'date': | case 'date': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 16 spaces, found 12 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 16 spaces, found 12 | |||||
case 'internaldate': | case 'internaldate': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 16 spaces, found 12 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 16 spaces, found 12 | |||||
case 'timestamp': | case 'timestamp': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 16 spaces, found 12 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 16 spaces, found 12 | |||||
$value = rcube_utils::strtotime($headers->$field); | $value = rcube_utils::strtotime($headers->$field); | ||||
Lint: Call to static method strtotime() on an unknown class rcube_utils. Call to static method strtotime() on an unknown class rcube_utils. Lint: Call to static method strtotime() on an unknown class rcube_utils.: Call to static method strtotime() on an unknown class rcube_utils. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 20 spaces, found 16 | |||||
if (!$value && $field != 'timestamp') { | if (!$value && $field != 'timestamp') { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
$value = $headers->timestamp; | $value = $headers->timestamp; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 24 spaces, found 20 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
break; | break; | ||||
default: | default: | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 16 spaces, found 12 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 16 spaces, found 12 | |||||
// @TODO: decode header value, convert to UTF-8 | // @TODO: decode header value, convert to UTF-8 | ||||
$value = $headers->$field; | $value = $headers->$field; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 20 spaces, found 16 | |||||
if (is_string($value)) { | if (is_string($value)) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
$value = str_replace('"', '', $value); | $value = str_replace('"', '', $value); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 24 spaces, found 20 | |||||
if ($field == 'subject') { | if ($field == 'subject') { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
$value = preg_replace('/^(Re:\s*|Fwd:\s*|Fw:\s*)+/i', '', $value); | $value = preg_replace('/^(Re:\s*|Fwd:\s*|Fw:\s*)+/i', '', $value); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 28 spaces, found 24 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
} | } | ||||
$index[$key] = $value; | $index[$key] = $value; | ||||
} | } | ||||
$sort_order = $flag == 'ASC' ? SORT_ASC : SORT_DESC; | $sort_order = $flag == 'ASC' ? SORT_ASC : SORT_DESC; | ||||
$sort_flags = SORT_STRING | SORT_FLAG_CASE; | $sort_flags = SORT_STRING | SORT_FLAG_CASE; | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | public function fetchMIMEHeaders($mailbox, $uid, $parts, $mime = true) | ||||
return false; | return false; | ||||
} | } | ||||
do { | do { | ||||
$line = $this->readLine(1024); | $line = $this->readLine(1024); | ||||
if (preg_match('/^\* [0-9]+ FETCH [0-9UID( ]+/', $line, $m)) { | if (preg_match('/^\* [0-9]+ FETCH [0-9UID( ]+/', $line, $m)) { | ||||
$line = ltrim(substr($line, strlen($m[0]))); | $line = ltrim(substr($line, strlen($m[0]))); | ||||
while (preg_match('/^BODY\[([0-9\.]+)\.'.$type.'\]/', $line, $matches)) { | while (preg_match('/^BODY\[([0-9\.]+)\.'.$type.'\]/', $line, $matches)) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
$line = substr($line, strlen($matches[0])); | $line = substr($line, strlen($matches[0])); | ||||
$result[$matches[1]] = trim($this->multLine($line)); | $result[$matches[1]] = trim($this->multLine($line)); | ||||
$line = $this->readLine(1024); | $line = $this->readLine(1024); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
while (!$this->startsWith($line, $key, true)); | while (!$this->startsWith($line, $key, true)); | ||||
return $result; | return $result; | ||||
} | } | ||||
/** | /** | ||||
* Fetches message part header | * Fetches message part header | ||||
*/ | */ | ||||
public function fetchPartHeader($mailbox, $id, $is_uid = false, $part = null) | public function fetchPartHeader($mailbox, $id, $is_uid = false, $part = null) | ||||
{ | { | ||||
$part = empty($part) ? 'HEADER' : $part.'.MIME'; | $part = empty($part) ? 'HEADER' : $part.'.MIME'; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
return $this->handlePartBody($mailbox, $id, $is_uid, $part); | return $this->handlePartBody($mailbox, $id, $is_uid, $part); | ||||
} | } | ||||
/** | /** | ||||
* Fetches body of the specified message part | * Fetches body of the specified message part | ||||
*/ | */ | ||||
public function handlePartBody($mailbox, $id, $is_uid=false, $part='', $encoding=null, $print=null, $file=null, $formatted=false, $max_bytes=0) | public function handlePartBody($mailbox, $id, $is_uid=false, $part='', $encoding=null, $print=null, $file=null, $formatted=false, $max_bytes=0) | ||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$is_uid" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$is_uid" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$is_uid"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$is_uid"; expected 1 but… | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$part" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$part" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$part"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$part"; expected 1 but… | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$encoding" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$encoding" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$encoding"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$encoding"; expected 1… | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$print" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$print" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$print"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$print"; expected 1 but… | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$file" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$file" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$file"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$file"; expected 1 but… | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$formatted" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$formatted" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$formatted"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$formatted"; expected 1… | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$max_bytes" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$max_bytes" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$max_bytes"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$max_bytes"; expected 1… | |||||
{ | { | ||||
if (!$this->select($mailbox)) { | if (!$this->select($mailbox)) { | ||||
return false; | return false; | ||||
} | } | ||||
$binary = true; | $binary = true; | ||||
do { | do { | ||||
if (!$initiated) { | if (!$initiated) { | ||||
Lint: Variable $initiated might not be defined. Variable $initiated might not be defined. Lint: Variable $initiated might not be defined.: Variable $initiated might not be defined. | |||||
switch ($encoding) { | switch ($encoding) { | ||||
case 'base64': | case 'base64': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
$mode = 1; | $mode = 1; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 24 spaces, found 20 | |||||
break; | break; | ||||
case 'quoted-printable': | case 'quoted-printable': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
$mode = 2; | $mode = 2; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 24 spaces, found 20 | |||||
break; | break; | ||||
case 'x-uuencode': | case 'x-uuencode': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
case 'x-uue': | case 'x-uue': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
case 'uue': | case 'uue': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
case 'uuencode': | case 'uuencode': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
$mode = 3; | $mode = 3; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 24 spaces, found 20 | |||||
break; | break; | ||||
default: | default: | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
$mode = 0; | $mode = 0; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 24 spaces, found 20 | |||||
} | } | ||||
// Use BINARY extension when possible (and safe) | // Use BINARY extension when possible (and safe) | ||||
$binary = $binary && $mode && preg_match('/^[0-9.]+$/', $part) && $this->hasCapability('BINARY'); | $binary = $binary && $mode && preg_match('/^[0-9.]+$/', $part) && $this->hasCapability('BINARY'); | ||||
$fetch_mode = $binary ? 'BINARY' : 'BODY'; | $fetch_mode = $binary ? 'BINARY' : 'BODY'; | ||||
$partial = $max_bytes ? sprintf('<0.%d>', $max_bytes) : ''; | $partial = $max_bytes ? sprintf('<0.%d>', $max_bytes) : ''; | ||||
// format request | // format request | ||||
Show All 18 Lines | public function handlePartBody($mailbox, $id, $is_uid=false, $part='', $encoding=null, $print=null, $file=null, $formatted=false, $max_bytes=0) | ||||
$line = trim($this->readLine(1024)); | $line = trim($this->readLine(1024)); | ||||
if (!$line) { | if (!$line) { | ||||
break; | break; | ||||
} | } | ||||
// handle UNKNOWN-CTE response - RFC 3516, try again with standard BODY request | // handle UNKNOWN-CTE response - RFC 3516, try again with standard BODY request | ||||
if ($binary && !$found && preg_match('/^' . $key . ' NO \[(UNKNOWN-CTE|PARSE)\]/i', $line)) { | if ($binary && !$found && preg_match('/^' . $key . ' NO \[(UNKNOWN-CTE|PARSE)\]/i', $line)) { | ||||
Lint: Variable $found might not be defined. Variable $found might not be defined. Lint: Variable $found might not be defined.: Variable $found might not be defined. | |||||
Lint: Variable $key might not be defined. Variable $key might not be defined. Lint: Variable $key might not be defined.: Variable $key might not be defined. | |||||
$binary = $initiated = false; | $binary = $initiated = false; | ||||
continue; | continue; | ||||
} | } | ||||
// skip irrelevant untagged responses (we have a result already) | // skip irrelevant untagged responses (we have a result already) | ||||
if ($found || !preg_match('/^\* ([0-9]+) FETCH (.*)$/', $line, $m)) { | if ($found || !preg_match('/^\* ([0-9]+) FETCH (.*)$/', $line, $m)) { | ||||
Lint: Variable $found might not be defined. Variable $found might not be defined. Lint: Variable $found might not be defined.: Variable $found might not be defined. | |||||
continue; | continue; | ||||
} | } | ||||
$line = $m[2]; | $line = $m[2]; | ||||
// handle one line response | // handle one line response | ||||
if ($line[0] == '(' && substr($line, -1) == ')') { | if ($line[0] == '(' && substr($line, -1) == ')') { | ||||
// tokenize content inside brackets | // tokenize content inside brackets | ||||
// the content can be e.g.: (UID 9844 BODY[2.4] NIL) | // the content can be e.g.: (UID 9844 BODY[2.4] NIL) | ||||
$tokens = $this->tokenizeResponse(preg_replace('/(^\(|\)$)/', '', $line)); | $tokens = $this->tokenizeResponse(preg_replace('/(^\(|\)$)/', '', $line)); | ||||
for ($i=0; $i<count($tokens); $i+=2) { | for ($i=0; $i<count($tokens); $i+=2) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+="; 0 found | |||||
if (preg_match('/^(BODY|BINARY)/i', $tokens[$i])) { | if (preg_match('/^(BODY|BINARY)/i', $tokens[$i])) { | ||||
$result = $tokens[$i+1]; | $result = $tokens[$i+1]; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
$found = true; | $found = true; | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
if ($result !== false) { | if ($result !== false) { | ||||
Lint: Variable $result might not be defined. Variable $result might not be defined. Lint: Variable $result might not be defined.: Variable $result might not be defined. | |||||
if ($mode == 1) { | if ($mode == 1) { | ||||
Lint: Variable $mode might not be defined. Variable $mode might not be defined. Lint: Variable $mode might not be defined.: Variable $mode might not be defined. | |||||
$result = base64_decode($result); | $result = base64_decode($result); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($mode == 2) { | else if ($mode == 2) { | ||||
$result = quoted_printable_decode($result); | $result = quoted_printable_decode($result); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($mode == 3) { | else if ($mode == 3) { | ||||
$result = convert_uudecode($result); | $result = convert_uudecode($result); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
// response with string literal | // response with string literal | ||||
else if (preg_match('/\{([0-9]+)\}$/', $line, $m)) { | else if (preg_match('/\{([0-9]+)\}$/', $line, $m)) { | ||||
$bytes = (int) $m[1]; | $bytes = (int) $m[1]; | ||||
$prev = ''; | $prev = ''; | ||||
$found = true; | $found = true; | ||||
// empty body | // empty body | ||||
if (!$bytes) { | if (!$bytes) { | ||||
$result = ''; | $result = ''; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else while ($bytes > 0) { | else while ($bytes > 0) { | ||||
Lint: Generic.ControlStructures.InlineControlStructure.NotAllowed Inline control structures are not allowed Lint: Generic.ControlStructures.InlineControlStructure.NotAllowed: Inline control structures are not allowed | |||||
$line = $this->readLine(8192); | $line = $this->readLine(8192); | ||||
if ($line === null) { | if ($line === null) { | ||||
Lint: Strict comparison using === between string and null will always evaluate to false. Strict comparison using === between string and null will always evaluate to false. Lint: Strict comparison using === between string and null will always evaluate to false.: Strict comparison using === between string and null will always evaluate to false. | |||||
break; | break; | ||||
} | } | ||||
$len = strlen($line); | $len = strlen($line); | ||||
if ($len > $bytes) { | if ($len > $bytes) { | ||||
$line = substr($line, 0, $bytes); | $line = substr($line, 0, $bytes); | ||||
$len = strlen($line); | $len = strlen($line); | ||||
} | } | ||||
$bytes -= $len; | $bytes -= $len; | ||||
// BASE64 | // BASE64 | ||||
if ($mode == 1) { | if ($mode == 1) { | ||||
Lint: Variable $mode might not be defined. Variable $mode might not be defined. Lint: Variable $mode might not be defined.: Variable $mode might not be defined. | |||||
$line = preg_replace('|[^a-zA-Z0-9+=/]|', '', $line); | $line = preg_replace('|[^a-zA-Z0-9+=/]|', '', $line); | ||||
// create chunks with proper length for base64 decoding | // create chunks with proper length for base64 decoding | ||||
$line = $prev.$line; | $line = $prev.$line; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
$length = strlen($line); | $length = strlen($line); | ||||
if ($length % 4) { | if ($length % 4) { | ||||
$length = floor($length / 4) * 4; | $length = floor($length / 4) * 4; | ||||
$prev = substr($line, $length); | $prev = substr($line, $length); | ||||
$line = substr($line, 0, $length); | $line = substr($line, 0, $length); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$prev = ''; | $prev = ''; | ||||
} | } | ||||
$line = base64_decode($line); | $line = base64_decode($line); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
// QUOTED-PRINTABLE | // QUOTED-PRINTABLE | ||||
else if ($mode == 2) { | else if ($mode == 2) { | ||||
$line = rtrim($line, "\t\r\0\x0B"); | $line = rtrim($line, "\t\r\0\x0B"); | ||||
$line = quoted_printable_decode($line); | $line = quoted_printable_decode($line); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
// UUENCODE | // UUENCODE | ||||
else if ($mode == 3) { | else if ($mode == 3) { | ||||
$line = rtrim($line, "\t\r\n\0\x0B"); | $line = rtrim($line, "\t\r\n\0\x0B"); | ||||
if ($line == 'end' || preg_match('/^begin\s+[0-7]+\s+.+$/', $line)) { | if ($line == 'end' || preg_match('/^begin\s+[0-7]+\s+.+$/', $line)) { | ||||
continue; | continue; | ||||
} | } | ||||
$line = convert_uudecode($line); | $line = convert_uudecode($line); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
// default | // default | ||||
else if ($formatted) { | else if ($formatted) { | ||||
$line = rtrim($line, "\t\r\n\0\x0B") . "\n"; | $line = rtrim($line, "\t\r\n\0\x0B") . "\n"; | ||||
} | } | ||||
if ($file) { | if ($file) { | ||||
if (fwrite($file, $line) === false) { | if (fwrite($file, $line) === false) { | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($print) { | else if ($print) { | ||||
echo $line; | echo $line; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$result .= $line; | $result .= $line; | ||||
Lint: Variable $result might not be defined. Variable $result might not be defined. Lint: Variable $result might not be defined.: Variable $result might not be defined. | |||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
while (!$this->startsWith($line, $key, true) || !$initiated); | while (!$this->startsWith($line, $key, true) || !$initiated); | ||||
Lint: Variable $key might not be defined. Variable $key might not be defined. Lint: Variable $key might not be defined.: Variable $key might not be defined. | |||||
if ($result !== false) { | if ($result !== false) { | ||||
Lint: Variable $result might not be defined. Variable $result might not be defined. Lint: Variable $result might not be defined.: Variable $result might not be defined. | |||||
if ($file) { | if ($file) { | ||||
return fwrite($file, $result); | return fwrite($file, $result); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($print) { | else if ($print) { | ||||
echo $result; | echo $result; | ||||
return true; | return true; | ||||
} | } | ||||
return $result; | return $result; | ||||
} | } | ||||
Show All 10 Lines | |||||
* @param bool $binary Enable BINARY append (RFC3516) | * @param bool $binary Enable BINARY append (RFC3516) | ||||
* | * | ||||
* @return string|bool On success APPENDUID response (if available) or True, False on failure | * @return string|bool On success APPENDUID response (if available) or True, False on failure | ||||
*/ | */ | ||||
public function append($mailbox, &$message, $flags = array(), $date = null, $binary = false) | public function append($mailbox, &$message, $flags = array(), $date = null, $binary = false) | ||||
{ | { | ||||
unset($this->data['APPENDUID']); | unset($this->data['APPENDUID']); | ||||
if ($mailbox === null || $mailbox === '') { | if ($mailbox === null || $mailbox === '') { | ||||
Lint: Strict comparison using === between string and null will always evaluate to false. Strict comparison using === between string and null will always evaluate to false. Lint: Strict comparison using === between string and null will always evaluate to false.: Strict comparison using === between string and null will always evaluate to false. | |||||
return false; | return false; | ||||
} | } | ||||
$binary = $binary && $this->getCapability('BINARY'); | $binary = $binary && $this->getCapability('BINARY'); | ||||
$literal_plus = !$binary && $this->prefs['literal+']; | $literal_plus = !$binary && $this->prefs['literal+']; | ||||
$len = 0; | $len = 0; | ||||
$msg = is_array($message) ? $message : array(&$message); | $msg = is_array($message) ? $message : array(&$message); | ||||
$chunk_size = 512000; | $chunk_size = 512000; | ||||
for ($i=0, $cnt=count($msg); $i<$cnt; $i++) { | for ($i=0, $cnt=count($msg); $i<$cnt; $i++) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
if (is_resource($msg[$i])) { | if (is_resource($msg[$i])) { | ||||
$stat = fstat($msg[$i]); | $stat = fstat($msg[$i]); | ||||
if ($stat === false) { | if ($stat === false) { | ||||
return false; | return false; | ||||
} | } | ||||
$len += $stat['size']; | $len += $stat['size']; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
if (!$binary) { | if (!$binary) { | ||||
$msg[$i] = str_replace("\r", '', $msg[$i]); | $msg[$i] = str_replace("\r", '', $msg[$i]); | ||||
$msg[$i] = str_replace("\n", "\r\n", $msg[$i]); | $msg[$i] = str_replace("\n", "\r\n", $msg[$i]); | ||||
} | } | ||||
$len += strlen($msg[$i]); | $len += strlen($msg[$i]); | ||||
} | } | ||||
Show All 31 Lines | public function append($mailbox, &$message, $flags = array(), $date = null, $binary = false) | ||||
// file pointer | // file pointer | ||||
if (is_resource($msg_part)) { | if (is_resource($msg_part)) { | ||||
rewind($msg_part); | rewind($msg_part); | ||||
while (!feof($msg_part) && $this->fp) { | while (!feof($msg_part) && $this->fp) { | ||||
$buffer = fread($msg_part, $chunk_size); | $buffer = fread($msg_part, $chunk_size); | ||||
$this->putLine($buffer, false); | $this->putLine($buffer, false); | ||||
} | } | ||||
fclose($msg_part); | fclose($msg_part); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
// string | // string | ||||
else { | else { | ||||
$size = strlen($msg_part); | $size = strlen($msg_part); | ||||
// Break up the data by sending one chunk (up to 512k) at a time. | // Break up the data by sending one chunk (up to 512k) at a time. | ||||
// This approach reduces our peak memory usage | // This approach reduces our peak memory usage | ||||
for ($offset = 0; $offset < $size; $offset += $chunk_size) { | for ($offset = 0; $offset < $size; $offset += $chunk_size) { | ||||
$chunk = substr($msg_part, $offset, $chunk_size); | $chunk = substr($msg_part, $offset, $chunk_size); | ||||
if (!$this->putLine($chunk, false)) { | if (!$this->putLine($chunk, false)) { | ||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
if (!$this->putLine('')) { // \r\n | if (!$this->putLine('')) { // \r\n | ||||
return false; | return false; | ||||
} | } | ||||
do { | do { | ||||
$line = $this->readLine(); | $line = $this->readLine(); | ||||
} while (!$this->startsWith($line, $key, true, true)); | } while (!$this->startsWith($line, $key, true, true)); | ||||
// Clear internal status cache | // Clear internal status cache | ||||
unset($this->data['STATUS:'.$mailbox]); | unset($this->data['STATUS:'.$mailbox]); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
if ($this->parseResult($line, 'APPEND: ') != self::ERROR_OK) { | if ($this->parseResult($line, 'APPEND: ') != self::ERROR_OK) { | ||||
return false; | return false; | ||||
} | } | ||||
if (!empty($this->data['APPENDUID'])) { | if (!empty($this->data['APPENDUID'])) { | ||||
return $this->data['APPENDUID']; | return $this->data['APPENDUID']; | ||||
} | } | ||||
return true; | return true; | ||||
} | } | ||||
/** | /** | ||||
* Handler for IMAP APPEND command. | * Handler for IMAP APPEND command. | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param string $path Path to the file with message body | * @param string $path Path to the file with message body | ||||
* @param string $headers Message headers | * @param string $headers Message headers | ||||
* @param array $flags Message flags | * @param array $flags Message flags | ||||
* @param string $date Message internal date | * @param string $date Message internal date | ||||
* @param bool $binary Enable BINARY append (RFC3516) | * @param bool $binary Enable BINARY append (RFC3516) | ||||
* | * | ||||
* @return string|bool On success APPENDUID response (if available) or True, False on failure | * @return string|bool On success APPENDUID response (if available) or True, False on failure | ||||
*/ | */ | ||||
public function appendFromFile($mailbox, $path, $headers=null, $flags = array(), $date = null, $binary = false) | public function appendFromFile($mailbox, $path, $headers=null, $flags = array(), $date = null, $binary = false) | ||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$headers" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$headers" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$headers"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$headers"; expected 1 but… | |||||
{ | { | ||||
// open message file | // open message file | ||||
if (file_exists(realpath($path))) { | if (file_exists(realpath($path))) { | ||||
$fp = fopen($path, 'r'); | $fp = fopen($path, 'r'); | ||||
} | } | ||||
if (!$fp) { | if (!$fp) { | ||||
Lint: Variable $fp might not be defined. Variable $fp might not be defined. Lint: Variable $fp might not be defined.: Variable $fp might not be defined. | |||||
$this->setError(self::ERROR_UNKNOWN, "Couldn't open $path for reading"); | $this->setError(self::ERROR_UNKNOWN, "Couldn't open $path for reading"); | ||||
return false; | return false; | ||||
} | } | ||||
$message = array(); | $message = array(); | ||||
if ($headers) { | if ($headers) { | ||||
$message[] = trim($headers, "\r\n") . "\r\n\r\n"; | $message[] = trim($headers, "\r\n") . "\r\n\r\n"; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | public function getQuota($mailbox = null) | ||||
$total = $all[$quota_root]['storage']['total']; | $total = $all[$quota_root]['storage']['total']; | ||||
$free = $total - $used; | $free = $total - $used; | ||||
// calculate lowest available space from all storage quotas | // calculate lowest available space from all storage quotas | ||||
if ($free < $min_free) { | if ($free < $min_free) { | ||||
$min_free = $free; | $min_free = $free; | ||||
$result['used'] = $used; | $result['used'] = $used; | ||||
$result['total'] = $total; | $result['total'] = $total; | ||||
$result['percent'] = min(100, round(($used/max(1,$total))*100)); | $result['percent'] = min(100, round(($used/max(1,$total))*100)); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "/"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "/"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "/"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "/"; 0 found | |||||
Lint: Generic.Functions.FunctionCallArgumentSpacing.NoSpaceAfterComma No space found after comma in argument list Lint: Generic.Functions.FunctionCallArgumentSpacing.NoSpaceAfterComma: No space found after comma in argument list | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "*"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "*"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "*"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "*"; 0 found | |||||
$result['free'] = 100 - $result['percent']; | $result['free'] = 100 - $result['percent']; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
if (!empty($result)) { | if (!empty($result)) { | ||||
$result['all'] = $all; | $result['all'] = $all; | ||||
} | } | ||||
return $result; | return $result; | ||||
} | } | ||||
/** | /** | ||||
* Send the SETQUOTA command (RFC9208) | |||||
* | |||||
* @param string $root Quota root | |||||
* @param array $quota Quota limits e.g. ['storage' => 1024000'] | |||||
* | |||||
* @return boolean True on success, False on failure | |||||
*/ | |||||
public function setQuota($root, $quota) | |||||
{ | |||||
$fn = function ($key, $value) { | |||||
return strtoupper($key) . ' ' . $value; | |||||
}; | |||||
$quota = implode(' ', array_map($fn, array_keys($quota), $quota)); | |||||
$result = $this->execute('SETQUOTA', [$this->escape($root), "({$quota})"], | |||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
self::COMMAND_NORESPONSE); | |||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return ($result == self::ERROR_OK); | |||||
} | |||||
/** | |||||
* Send the SETACL command (RFC4314) | * Send the SETACL command (RFC4314) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param string $user User name | * @param string $user User name | ||||
* @param mixed $acl ACL string or array | * @param mixed $acl ACL string or array | ||||
* | * | ||||
* @return boolean True on success, False on failure | * @return boolean True on success, False on failure | ||||
* | * | ||||
* @since 0.5-beta | * @since 0.5-beta | ||||
*/ | */ | ||||
public function setACL($mailbox, $user, $acl) | public function setACL($mailbox, $user, $acl) | ||||
{ | { | ||||
if (is_array($acl)) { | if (is_array($acl)) { | ||||
$acl = implode('', $acl); | $acl = implode('', $acl); | ||||
} | } | ||||
$result = $this->execute('SETACL', array( | $result = $this->execute('SETACL', array( | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
$this->escape($mailbox), $this->escape($user), strtolower($acl)), | $this->escape($mailbox), $this->escape($user), strtolower($acl)), | ||||
self::COMMAND_NORESPONSE); | self::COMMAND_NORESPONSE); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return ($result == self::ERROR_OK); | return ($result == self::ERROR_OK); | ||||
} | } | ||||
/** | /** | ||||
* Send the DELETEACL command (RFC4314) | * Send the DELETEACL command (RFC4314) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param string $user User name | * @param string $user User name | ||||
* | * | ||||
* @return boolean True on success, False on failure | * @return boolean True on success, False on failure | ||||
* | * | ||||
* @since 0.5-beta | * @since 0.5-beta | ||||
*/ | */ | ||||
public function deleteACL($mailbox, $user) | public function deleteACL($mailbox, $user) | ||||
{ | { | ||||
$result = $this->execute('DELETEACL', array( | $result = $this->execute('DELETEACL', array( | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
$this->escape($mailbox), $this->escape($user)), | $this->escape($mailbox), $this->escape($user)), | ||||
self::COMMAND_NORESPONSE); | self::COMMAND_NORESPONSE); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return ($result == self::ERROR_OK); | return ($result == self::ERROR_OK); | ||||
} | } | ||||
/** | /** | ||||
* Send the GETACL command (RFC4314) | * Send the GETACL command (RFC4314) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* | * | ||||
* @return array User-rights array on success, NULL on error | * @return array User-rights array on success, NULL on error | ||||
* @since 0.5-beta | * @since 0.5-beta | ||||
*/ | */ | ||||
public function getACL($mailbox) | public function getACL($mailbox) | ||||
{ | { | ||||
list($code, $response) = $this->execute('GETACL', array($this->escape($mailbox)), 0, '/^\* ACL /i'); | list($code, $response) = $this->execute('GETACL', array($this->escape($mailbox)), 0, '/^\* ACL /i'); | ||||
if ($code == self::ERROR_OK && $response) { | if ($code == self::ERROR_OK && $response) { | ||||
Lint: Method rcube_imap_generic::getACL() should return array but return statement is missing. Method rcube_imap_generic::getACL() should return array but return statement is missing. Lint: Method rcube_imap_generic::getACL() should return array but return statement is missing.: Method rcube_imap_generic::getACL() should return array but return statement is missing. | |||||
// Parse server response (remove "* ACL ") | // Parse server response (remove "* ACL ") | ||||
$response = substr($response, 6); | $response = substr($response, 6); | ||||
$ret = $this->tokenizeResponse($response); | $ret = $this->tokenizeResponse($response); | ||||
$mbox = array_shift($ret); | $mbox = array_shift($ret); | ||||
$size = count($ret); | $size = count($ret); | ||||
// Create user-rights hash array | // Create user-rights hash array | ||||
// @TODO: consider implementing fixACL() method according to RFC4314.2.1.1 | // @TODO: consider implementing fixACL() method according to RFC4314.2.1.1 | ||||
// so we could return only standard rights defined in RFC4314, | // so we could return only standard rights defined in RFC4314, | ||||
// excluding 'c' and 'd' defined in RFC2086. | // excluding 'c' and 'd' defined in RFC2086. | ||||
if ($size % 2 == 0) { | if ($size % 2 == 0) { | ||||
for ($i=0; $i<$size; $i++) { | for ($i=0; $i<$size; $i++) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
$ret[$ret[$i]] = str_split($ret[++$i]); | $ret[$ret[$i]] = str_split($ret[++$i]); | ||||
unset($ret[$i-1]); | unset($ret[$i-1]); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "-"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "-"; 0 found | |||||
unset($ret[$i]); | unset($ret[$i]); | ||||
} | } | ||||
return $ret; | return $ret; | ||||
} | } | ||||
$this->setError(self::ERROR_COMMAND, "Incomplete ACL response"); | $this->setError(self::ERROR_COMMAND, "Incomplete ACL response"); | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Send the LISTRIGHTS command (RFC4314) | * Send the LISTRIGHTS command (RFC4314) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param string $user User name | * @param string $user User name | ||||
* | * | ||||
* @return array List of user rights | * @return array List of user rights | ||||
* @since 0.5-beta | * @since 0.5-beta | ||||
*/ | */ | ||||
public function listRights($mailbox, $user) | public function listRights($mailbox, $user) | ||||
{ | { | ||||
list($code, $response) = $this->execute('LISTRIGHTS', | list($code, $response) = $this->execute('LISTRIGHTS', | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
array($this->escape($mailbox), $this->escape($user)), 0, '/^\* LISTRIGHTS /i'); | array($this->escape($mailbox), $this->escape($user)), 0, '/^\* LISTRIGHTS /i'); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
if ($code == self::ERROR_OK && $response) { | if ($code == self::ERROR_OK && $response) { | ||||
Lint: Method rcube_imap_generic::listRights() should return array but return statement is missing. Method rcube_imap_generic::listRights() should return array but return statement is missing. Lint: Method rcube_imap_generic::listRights() should return array but return statement is missing.: Method rcube_imap_generic::listRights() should return array but return statement is missing. | |||||
// Parse server response (remove "* LISTRIGHTS ") | // Parse server response (remove "* LISTRIGHTS ") | ||||
$response = substr($response, 13); | $response = substr($response, 13); | ||||
$ret_mbox = $this->tokenizeResponse($response, 1); | $ret_mbox = $this->tokenizeResponse($response, 1); | ||||
$ret_user = $this->tokenizeResponse($response, 1); | $ret_user = $this->tokenizeResponse($response, 1); | ||||
$granted = $this->tokenizeResponse($response, 1); | $granted = $this->tokenizeResponse($response, 1); | ||||
$optional = trim($response); | $optional = trim($response); | ||||
Show All 11 Lines | |||||
* | * | ||||
* @return array MYRIGHTS response on success, NULL on error | * @return array MYRIGHTS response on success, NULL on error | ||||
* @since 0.5-beta | * @since 0.5-beta | ||||
*/ | */ | ||||
public function myRights($mailbox) | public function myRights($mailbox) | ||||
{ | { | ||||
list($code, $response) = $this->execute('MYRIGHTS', array($this->escape($mailbox)), 0, '/^\* MYRIGHTS /i'); | list($code, $response) = $this->execute('MYRIGHTS', array($this->escape($mailbox)), 0, '/^\* MYRIGHTS /i'); | ||||
if ($code == self::ERROR_OK && $response) { | if ($code == self::ERROR_OK && $response) { | ||||
Lint: Method rcube_imap_generic::myRights() should return array but return statement is missing. Method rcube_imap_generic::myRights() should return array but return statement is missing. Lint: Method rcube_imap_generic::myRights() should return array but return statement is missing.: Method rcube_imap_generic::myRights() should return array but return statement is missing. | |||||
// Parse server response (remove "* MYRIGHTS ") | // Parse server response (remove "* MYRIGHTS ") | ||||
$response = substr($response, 11); | $response = substr($response, 11); | ||||
$ret_mbox = $this->tokenizeResponse($response, 1); | $ret_mbox = $this->tokenizeResponse($response, 1); | ||||
$rights = $this->tokenizeResponse($response, 1); | $rights = $this->tokenizeResponse($response, 1); | ||||
return str_split($rights); | return str_split($rights); | ||||
} | } | ||||
Show All 15 Lines | public function setMetadata($mailbox, $entries) | ||||
return false; | return false; | ||||
} | } | ||||
foreach ($entries as $name => $value) { | foreach ($entries as $name => $value) { | ||||
$entries[$name] = $this->escape($name) . ' ' . $this->escape($value, true); | $entries[$name] = $this->escape($name) . ' ' . $this->escape($value, true); | ||||
} | } | ||||
$entries = implode(' ', $entries); | $entries = implode(' ', $entries); | ||||
$result = $this->execute('SETMETADATA', array( | $result = $this->execute('SETMETADATA', array( | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
$this->escape($mailbox), '(' . $entries . ')'), | $this->escape($mailbox), '(' . $entries . ')'), | ||||
self::COMMAND_NORESPONSE); | self::COMMAND_NORESPONSE); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 8 spaces but found 12 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 8 spaces but found 12 | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
return ($result == self::ERROR_OK); | return ($result == self::ERROR_OK); | ||||
} | } | ||||
/** | /** | ||||
* Send the SETMETADATA command with NIL values (RFC5464) | * Send the SETMETADATA command with NIL values (RFC5464) | ||||
* | * | ||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param array $entries Entry names array | * @param array $entries Entry names array | ||||
* | * | ||||
* @return boolean True on success, False on failure | * @return boolean True on success, False on failure | ||||
* | * | ||||
* @since 0.5-beta | * @since 0.5-beta | ||||
*/ | */ | ||||
public function deleteMetadata($mailbox, $entries) | public function deleteMetadata($mailbox, $entries) | ||||
{ | { | ||||
if (!is_array($entries) && !empty($entries)) { | if (!is_array($entries) && !empty($entries)) { | ||||
Lint: Result of && is always false. Result of && is always false. Lint: Result of && is always false.: Result of && is always false. | |||||
$entries = explode(' ', $entries); | $entries = explode(' ', $entries); | ||||
} | } | ||||
if (empty($entries)) { | if (empty($entries)) { | ||||
$this->setError(self::ERROR_COMMAND, "Wrong argument for SETMETADATA command"); | $this->setError(self::ERROR_COMMAND, "Wrong argument for SETMETADATA command"); | ||||
return false; | return false; | ||||
} | } | ||||
Show All 10 Lines | |||||
* @param string $mailbox Mailbox name | * @param string $mailbox Mailbox name | ||||
* @param array $entries Entries | * @param array $entries Entries | ||||
* @param array $options Command options (with MAXSIZE and DEPTH keys) | * @param array $options Command options (with MAXSIZE and DEPTH keys) | ||||
* | * | ||||
* @return array GETMETADATA result on success, NULL on error | * @return array GETMETADATA result on success, NULL on error | ||||
* | * | ||||
* @since 0.5-beta | * @since 0.5-beta | ||||
*/ | */ | ||||
public function getMetadata($mailbox, $entries, $options=array()) | public function getMetadata($mailbox, $entries, $options=array()) | ||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$options" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$options" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$options"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$options"; expected 1 but… | |||||
{ | { | ||||
if (!is_array($entries)) { | if (!is_array($entries)) { | ||||
$entries = array($entries); | $entries = array($entries); | ||||
} | } | ||||
// create entries string | // create entries string | ||||
foreach ($entries as $idx => $name) { | foreach ($entries as $idx => $name) { | ||||
$entries[$idx] = $this->escape($name); | $entries[$idx] = $this->escape($name); | ||||
} | } | ||||
$optlist = ''; | $optlist = ''; | ||||
$entlist = '(' . implode(' ', $entries) . ')'; | $entlist = '(' . implode(' ', $entries) . ')'; | ||||
// create options string | // create options string | ||||
if (is_array($options)) { | if (is_array($options)) { | ||||
$options = array_change_key_case($options, CASE_UPPER); | $options = array_change_key_case($options, CASE_UPPER); | ||||
$opts = array(); | $opts = array(); | ||||
if (!empty($options['MAXSIZE'])) { | if (!empty($options['MAXSIZE'])) { | ||||
$opts[] = 'MAXSIZE '.intval($options['MAXSIZE']); | $opts[] = 'MAXSIZE '.intval($options['MAXSIZE']); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
} | } | ||||
if (!empty($options['DEPTH'])) { | if (!empty($options['DEPTH'])) { | ||||
$opts[] = 'DEPTH '.intval($options['DEPTH']); | $opts[] = 'DEPTH '.intval($options['DEPTH']); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
} | } | ||||
if ($opts) { | if ($opts) { | ||||
$optlist = '(' . implode(' ', $opts) . ')'; | $optlist = '(' . implode(' ', $opts) . ')'; | ||||
} | } | ||||
} | } | ||||
$optlist .= ($optlist ? ' ' : '') . $entlist; | $optlist .= ($optlist ? ' ' : '') . $entlist; | ||||
list($code, $response) = $this->execute('GETMETADATA', array( | list($code, $response) = $this->execute('GETMETADATA', array( | ||||
$this->escape($mailbox), $optlist)); | $this->escape($mailbox), $optlist)); | ||||
if ($code == self::ERROR_OK) { | if ($code == self::ERROR_OK) { | ||||
Lint: Method rcube_imap_generic::getMetadata() should return array but return statement is missing. Method rcube_imap_generic::getMetadata() should return array but return statement is missing. Lint: Method rcube_imap_generic::getMetadata() should return array but return statement is missing.: Method rcube_imap_generic::getMetadata() should return array but return statement is missing. | |||||
$result = array(); | $result = array(); | ||||
$data = $this->tokenizeResponse($response); | $data = $this->tokenizeResponse($response); | ||||
// The METADATA response can contain multiple entries in a single | // The METADATA response can contain multiple entries in a single | ||||
// response or multiple responses for each entry or group of entries | // response or multiple responses for each entry or group of entries | ||||
for ($i = 0, $size = count($data); $i < $size; $i++) { | for ($i = 0, $size = count($data); $i < $size; $i++) { | ||||
if ($data[$i] === '*' | if ($data[$i] === '*' | ||||
Lint: PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine The first expression of a multi-line control structure must be on the line after the opening parenthesis Lint: PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine: The first expression of a multi-line control structure must be on the line after the opening… | |||||
&& $data[++$i] === 'METADATA' | && $data[++$i] === 'METADATA' | ||||
&& is_string($mbox = $data[++$i]) | && is_string($mbox = $data[++$i]) | ||||
&& is_array($data[++$i]) | && is_array($data[++$i]) | ||||
) { | ) { | ||||
for ($x = 0, $size2 = count($data[$i]); $x < $size2; $x += 2) { | for ($x = 0, $size2 = count($data[$i]); $x < $size2; $x += 2) { | ||||
if ($data[$i][$x+1] !== null) { | if ($data[$i][$x+1] !== null) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
$result[$mbox][$data[$i][$x]] = $data[$i][$x+1]; | $result[$mbox][$data[$i][$x]] = $data[$i][$x+1]; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
return $result; | return $result; | ||||
} | } | ||||
} | } | ||||
Show All 12 Lines | |||||
{ | { | ||||
if (!is_array($data) || empty($data)) { | if (!is_array($data) || empty($data)) { | ||||
$this->setError(self::ERROR_COMMAND, "Wrong argument for SETANNOTATION command"); | $this->setError(self::ERROR_COMMAND, "Wrong argument for SETANNOTATION command"); | ||||
return false; | return false; | ||||
} | } | ||||
foreach ($data as $entry) { | foreach ($data as $entry) { | ||||
// ANNOTATEMORE drafts before version 08 require quoted parameters | // ANNOTATEMORE drafts before version 08 require quoted parameters | ||||
$entries[] = sprintf('%s (%s %s)', $this->escape($entry[0], true), | $entries[] = sprintf('%s (%s %s)', $this->escape($entry[0], true), | ||||
Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket Opening parenthesis of a multi-line function call must be the last content on the line Lint: PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket: Opening parenthesis of a multi-line function call must be the last content on the line | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
$this->escape($entry[1], true), $this->escape($entry[2], true)); | $this->escape($entry[1], true), $this->escape($entry[2], true)); | ||||
Lint: PSR2.Methods.FunctionCallSignature.Indent Multi-line function call not indented correctly; expected 12 spaces but found 16 Lint: PSR2.Methods.FunctionCallSignature.Indent: Multi-line function call not indented correctly; expected 12 spaces but found 16 | |||||
Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments Only one argument is allowed per line in a multi-line function call Lint: PSR2.Methods.FunctionCallSignature.MultipleArguments: Only one argument is allowed per line in a multi-line function call | |||||
Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine Closing parenthesis of a multi-line function call must be on a line by itself Lint: PSR2.Methods.FunctionCallSignature.CloseBracketLine: Closing parenthesis of a multi-line function call must be on a line by itself | |||||
} | } | ||||
$entries = implode(' ', $entries); | $entries = implode(' ', $entries); | ||||
$result = $this->execute('SETANNOTATION', array( | $result = $this->execute('SETANNOTATION', array( | ||||
$this->escape($mailbox), $entries), self::COMMAND_NORESPONSE); | $this->escape($mailbox), $entries), self::COMMAND_NORESPONSE); | ||||
return ($result == self::ERROR_OK); | return ($result == self::ERROR_OK); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | public function getAnnotation($mailbox, $entries, $attribs) | ||||
foreach ($attribs as $idx => $name) { | foreach ($attribs as $idx => $name) { | ||||
$attribs[$idx] = $this->escape($name, true); | $attribs[$idx] = $this->escape($name, true); | ||||
} | } | ||||
$attribs = '(' . implode(' ', $attribs) . ')'; | $attribs = '(' . implode(' ', $attribs) . ')'; | ||||
list($code, $response) = $this->execute('GETANNOTATION', array( | list($code, $response) = $this->execute('GETANNOTATION', array( | ||||
$this->escape($mailbox), $entries, $attribs)); | $this->escape($mailbox), $entries, $attribs)); | ||||
if ($code == self::ERROR_OK) { | if ($code == self::ERROR_OK) { | ||||
Lint: Method rcube_imap_generic::getAnnotation() should return array but return statement is missing. Method rcube_imap_generic::getAnnotation() should return array but return statement is missing. Lint: Method rcube_imap_generic::getAnnotation() should return array but return statement is missing.: Method rcube_imap_generic::getAnnotation() should return array but return statement is missing. | |||||
$result = array(); | $result = array(); | ||||
$data = $this->tokenizeResponse($response); | $data = $this->tokenizeResponse($response); | ||||
// Here we returns only data compatible with METADATA result format | // Here we returns only data compatible with METADATA result format | ||||
if (!empty($data) && ($size = count($data))) { | if (!empty($data) && ($size = count($data))) { | ||||
for ($i=0; $i<$size; $i++) { | for ($i=0; $i<$size; $i++) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
$entry = $data[$i]; | $entry = $data[$i]; | ||||
if (isset($mbox) && is_array($entry)) { | if (isset($mbox) && is_array($entry)) { | ||||
$attribs = $entry; | $attribs = $entry; | ||||
$entry = $last_entry; | $entry = $last_entry; | ||||
Lint: Undefined variable: $last_entry Undefined variable: $last_entry Lint: Undefined variable: $last_entry: Undefined variable: $last_entry | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($entry == '*') { | else if ($entry == '*') { | ||||
if ($data[$i+1] == 'ANNOTATION') { | if ($data[$i+1] == 'ANNOTATION') { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
$mbox = $data[$i+2]; | $mbox = $data[$i+2]; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
unset($data[$i]); // "*" | unset($data[$i]); // "*" | ||||
unset($data[++$i]); // "ANNOTATION" | unset($data[++$i]); // "ANNOTATION" | ||||
unset($data[++$i]); // Mailbox | unset($data[++$i]); // Mailbox | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
// get rid of other untagged responses | // get rid of other untagged responses | ||||
else { | else { | ||||
unset($mbox); | unset($mbox); | ||||
unset($data[$i]); | unset($data[$i]); | ||||
} | } | ||||
continue; | continue; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if (isset($mbox)) { | else if (isset($mbox)) { | ||||
$attribs = $data[++$i]; | $attribs = $data[++$i]; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
unset($data[$i]); | unset($data[$i]); | ||||
continue; | continue; | ||||
} | } | ||||
if (!empty($attribs)) { | if (!empty($attribs)) { | ||||
for ($x=0, $len=count($attribs); $x<$len;) { | for ($x=0, $len=count($attribs); $x<$len;) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
$attr = $attribs[$x++]; | $attr = $attribs[$x++]; | ||||
$value = $attribs[$x++]; | $value = $attribs[$x++]; | ||||
if ($attr == 'value.priv' && $value !== null) { | if ($attr == 'value.priv' && $value !== null) { | ||||
$result[$mbox]['/private' . $entry] = $value; | $result[$mbox]['/private' . $entry] = $value; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($attr == 'value.shared' && $value !== null) { | else if ($attr == 'value.shared' && $value !== null) { | ||||
$result[$mbox]['/shared' . $entry] = $value; | $result[$mbox]['/shared' . $entry] = $value; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
$last_entry = $entry; | $last_entry = $entry; | ||||
unset($data[$i]); | unset($data[$i]); | ||||
} | } | ||||
Show All 17 Lines | |||||
{ | { | ||||
$result = $this->fetch($mailbox, $id, $is_uid, array('BODYSTRUCTURE')); | $result = $this->fetch($mailbox, $id, $is_uid, array('BODYSTRUCTURE')); | ||||
if (is_array($result)) { | if (is_array($result)) { | ||||
$result = array_shift($result); | $result = array_shift($result); | ||||
return $result->bodystructure; | return $result->bodystructure; | ||||
} | } | ||||
return false; | return false; | ||||
Lint: Unreachable statement - code above always terminates. Unreachable statement - code above always terminates. Lint: Unreachable statement - code above always terminates.: Unreachable statement - code above always terminates. | |||||
} | } | ||||
/** | /** | ||||
* Returns data of a message part according to specified structure. | * Returns data of a message part according to specified structure. | ||||
* | * | ||||
* @param array $structure Message structure (getStructure() result) | * @param array $structure Message structure (getStructure() result) | ||||
* @param string $part Message part identifier | * @param string $part Message part identifier | ||||
* | * | ||||
* @return array Part data as hash array (type, encoding, charset, size) | * @return array Part data as hash array (type, encoding, charset, size) | ||||
*/ | */ | ||||
public static function getStructurePartData($structure, $part) | public static function getStructurePartData($structure, $part) | ||||
{ | { | ||||
$part_a = self::getStructurePartArray($structure, $part); | $part_a = self::getStructurePartArray($structure, $part); | ||||
$data = array(); | $data = array(); | ||||
if (empty($part_a)) { | if (empty($part_a)) { | ||||
return $data; | return $data; | ||||
} | } | ||||
// content-type | // content-type | ||||
if (is_array($part_a[0])) { | if (is_array($part_a[0])) { | ||||
$data['type'] = 'multipart'; | $data['type'] = 'multipart'; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$data['type'] = strtolower($part_a[0]); | $data['type'] = strtolower($part_a[0]); | ||||
$data['subtype'] = strtolower($part_a[1]); | $data['subtype'] = strtolower($part_a[1]); | ||||
$data['encoding'] = strtolower($part_a[5]); | $data['encoding'] = strtolower($part_a[5]); | ||||
// charset | // charset | ||||
if (is_array($part_a[2])) { | if (is_array($part_a[2])) { | ||||
foreach ($part_a[2] as $key => $val) { | foreach ($part_a[2] as $key => $val) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 16 spaces, found 15 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 16 spaces, found 15 | |||||
if (strcasecmp($val, 'charset') == 0) { | if (strcasecmp($val, 'charset') == 0) { | ||||
$data['charset'] = $part_a[2][$key+1]; | $data['charset'] = $part_a[2][$key+1]; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.WhiteSpace.ScopeClosingBrace.Indent Closing brace indented incorrectly; expected 15 spaces, found 16 Lint: Squiz.WhiteSpace.ScopeClosingBrace.Indent: Closing brace indented incorrectly; expected 15 spaces, found 16 | |||||
} | } | ||||
} | } | ||||
// size | // size | ||||
$data['size'] = intval($part_a[6]); | $data['size'] = intval($part_a[6]); | ||||
return $data; | return $data; | ||||
} | } | ||||
Show All 12 Lines | public static function getStructurePartArray($a, $part) | ||||
if (strcasecmp($ctype, 'message/rfc822') == 0) { | if (strcasecmp($ctype, 'message/rfc822') == 0) { | ||||
$a = $a[8]; | $a = $a[8]; | ||||
} | } | ||||
if (strpos($part, '.') > 0) { | if (strpos($part, '.') > 0) { | ||||
$orig_part = $part; | $orig_part = $part; | ||||
$pos = strpos($part, '.'); | $pos = strpos($part, '.'); | ||||
$rest = substr($orig_part, $pos+1); | $rest = substr($orig_part, $pos+1); | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "+"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "+"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "+"; 0 found | |||||
$part = substr($orig_part, 0, $pos); | $part = substr($orig_part, 0, $pos); | ||||
return self::getStructurePartArray($a[$part-1], $rest); | return self::getStructurePartArray($a[$part-1], $rest); | ||||
Lint: Binary operation "-" between string and 1 results in an error. Binary operation "-" between string and 1 results in an error. Lint: Binary operation "-" between string and 1 results in an error.: Binary operation "-" between string and 1 results in an error. | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "-"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "-"; 0 found | |||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else if ($part > 0) { | else if ($part > 0) { | ||||
return (is_array($a[$part-1])) ? $a[$part-1] : $a; | return (is_array($a[$part-1])) ? $a[$part-1] : $a; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "-"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "-"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "-"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "-"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "-"; 0 found | |||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Creates next command identifier (tag) | * Creates next command identifier (tag) | ||||
* | * | ||||
* @return string Command identifier | * @return string Command identifier | ||||
* @since 0.5-beta | * @since 0.5-beta | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | public function execute($command, $arguments = array(), $options = 0, $filter = null) | ||||
} | } | ||||
// parse untagged response for [COPYUID 1204196876 3456:3457 123:124] (RFC6851) | // parse untagged response for [COPYUID 1204196876 3456:3457 123:124] (RFC6851) | ||||
if ($line && $command == 'UID MOVE') { | if ($line && $command == 'UID MOVE') { | ||||
if (preg_match("/^\* OK \[COPYUID [0-9]+ ([0-9,:]+) ([0-9,:]+)\]/i", $line, $m)) { | if (preg_match("/^\* OK \[COPYUID [0-9]+ ([0-9,:]+) ([0-9,:]+)\]/i", $line, $m)) { | ||||
$this->data['COPYUID'] = array($m[1], $m[2]); | $this->data['COPYUID'] = array($m[1], $m[2]); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
while (!$this->startsWith($line, $tag . ' ', true, true)); | while (!$this->startsWith($line, $tag . ' ', true, true)); | ||||
$code = $this->parseResult($line, $command . ': '); | $code = $this->parseResult($line, $command . ': '); | ||||
// Remove last line from response | // Remove last line from response | ||||
if ($response) { | if ($response) { | ||||
if (!$filter) { | if (!$filter) { | ||||
$line_len = min(strlen($response), strlen($line)); | $line_len = min(strlen($response), strlen($line)); | ||||
$response = substr($response, 0, -$line_len); | $response = substr($response, 0, -$line_len); | ||||
} | } | ||||
$response = rtrim($response, "\r\n"); | $response = rtrim($response, "\r\n"); | ||||
} | } | ||||
// optional CAPABILITY response | // optional CAPABILITY response | ||||
if (($options & self::COMMAND_CAPABILITY) && $code == self::ERROR_OK | if (($options & self::COMMAND_CAPABILITY) && $code == self::ERROR_OK | ||||
Lint: PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine The first expression of a multi-line control structure must be on the line after the opening parenthesis Lint: PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine: The first expression of a multi-line control structure must be on the line after the opening… | |||||
&& preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches) | && preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches) | ||||
) { | ) { | ||||
$this->parseCapability($matches[1], true); | $this->parseCapability($matches[1], true); | ||||
} | } | ||||
// return last line only (without command tag, result and response code) | // return last line only (without command tag, result and response code) | ||||
if ($line && ($options & self::COMMAND_LASTLINE)) { | if ($line && ($options & self::COMMAND_LASTLINE)) { | ||||
$response = preg_replace("/^$tag (OK|NO|BAD|BYE|PREAUTH)?\s*(\[[a-z-]+\])?\s*/i", '', trim($line)); | $response = preg_replace("/^$tag (OK|NO|BAD|BYE|PREAUTH)?\s*(\[[a-z-]+\])?\s*/i", '', trim($line)); | ||||
} | } | ||||
return $noresp ? $code : array($code, $response); | return $noresp ? $code : array($code, $response); | ||||
} | } | ||||
/** | /** | ||||
* Splits IMAP response into string tokens | * Splits IMAP response into string tokens | ||||
* | * | ||||
* @param string &$str The IMAP's server response | * @param string &$str The IMAP's server response | ||||
* @param int $num Number of tokens to return | * @param int $num Number of tokens to return | ||||
* | * | ||||
* @return mixed Tokens array or string if $num=1 | * @return mixed Tokens array or string if $num=1 | ||||
* @since 0.5-beta | * @since 0.5-beta | ||||
*/ | */ | ||||
public static function tokenizeResponse(&$str, $num=0) | public static function tokenizeResponse(&$str, $num=0) | ||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$num" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$num" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$num"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$num"; expected 1 but… | |||||
{ | { | ||||
$result = array(); | $result = array(); | ||||
while (!$num || count($result) < $num) { | while (!$num || count($result) < $num) { | ||||
// remove spaces from the beginning of the string | // remove spaces from the beginning of the string | ||||
$str = ltrim($str); | $str = ltrim($str); | ||||
// empty string | // empty string | ||||
if ($str === '' || $str === null) { | if ($str === '' || $str === null) { | ||||
Lint: Strict comparison using === between non-empty-string and null will always evaluate to false. Strict comparison using === between non-empty-string and null will always evaluate to false. Lint: Strict comparison using === between non-empty-string and null will always evaluate to false.: Strict comparison using === between non-empty-string and null will always evaluate to false. | |||||
break; | break; | ||||
} | } | ||||
switch ($str[0]) { | switch ($str[0]) { | ||||
Lint: Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen Blank line found at start of control structure Lint: Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen: Blank line found at start of control structure | |||||
// String literal | // String literal | ||||
case '{': | case '{': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 16 spaces, found 12 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 16 spaces, found 12 | |||||
if (($epos = strpos($str, "}\r\n", 1)) == false) { | if (($epos = strpos($str, "}\r\n", 1)) == false) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
// error | // error | ||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
if (!is_numeric(($bytes = substr($str, 1, $epos - 1)))) { | if (!is_numeric(($bytes = substr($str, 1, $epos - 1)))) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
// error | // error | ||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
$result[] = $bytes ? substr($str, $epos + 3, $bytes) : ''; | $result[] = $bytes ? substr($str, $epos + 3, $bytes) : ''; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 20 spaces, found 16 | |||||
$str = substr($str, $epos + 3 + $bytes); | $str = substr($str, $epos + 3 + $bytes); | ||||
Lint: Binary operation "+" between 0|int<3, max> and string results in an error. Binary operation "+" between 0|int<3, max> and string results in an error. Lint: Binary operation "+" between 0|int<3, max> and string results in an error.: Binary operation "+" between 0|int<3, max> and string results in an error. | |||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 20 spaces, found 16 | |||||
break; | break; | ||||
// Quoted string | // Quoted string | ||||
case '"': | case '"': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 16 spaces, found 12 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 16 spaces, found 12 | |||||
$len = strlen($str); | $len = strlen($str); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 20 spaces, found 16 | |||||
for ($pos=1; $pos<$len; $pos++) { | for ($pos=1; $pos<$len; $pos++) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<"; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<"; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<"; 0 found | |||||
if ($str[$pos] == '"') { | if ($str[$pos] == '"') { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
break; | break; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 28 spaces, found 24 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
if ($str[$pos] == "\\") { | if ($str[$pos] == "\\") { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
if ($str[$pos + 1] == '"' || $str[$pos + 1] == "\\") { | if ($str[$pos + 1] == '"' || $str[$pos + 1] == "\\") { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
$pos++; | $pos++; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 32 spaces, found 28 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 32 spaces, found 28 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 28 spaces, found 24 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 28 spaces, found 24 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 24 spaces, found 20 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
// we need to strip slashes for a quoted string | // we need to strip slashes for a quoted string | ||||
$result[] = stripslashes(substr($str, 1, $pos - 1)); | $result[] = stripslashes(substr($str, 1, $pos - 1)); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 20 spaces, found 16 | |||||
$str = substr($str, $pos + 1); | $str = substr($str, $pos + 1); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 20 spaces, found 16 | |||||
break; | break; | ||||
// Parenthesized list | // Parenthesized list | ||||
case '(': | case '(': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 16 spaces, found 12 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 16 spaces, found 12 | |||||
$str = substr($str, 1); | $str = substr($str, 1); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 20 spaces, found 16 | |||||
$result[] = self::tokenizeResponse($str); | $result[] = self::tokenizeResponse($str); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 20 spaces, found 16 | |||||
break; | break; | ||||
case ')': | case ')': | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 16 spaces, found 12 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 16 spaces, found 12 | |||||
$str = substr($str, 1); | $str = substr($str, 1); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 20 spaces, found 16 | |||||
return $result; | return $result; | ||||
// String atom, number, astring, NIL, *, % | // String atom, number, astring, NIL, *, % | ||||
default: | default: | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 16 spaces, found 12 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 16 spaces, found 12 | |||||
// excluded chars: SP, CTL, ), DEL | // excluded chars: SP, CTL, ), DEL | ||||
// we do not exclude [ and ] (#1489223) | // we do not exclude [ and ] (#1489223) | ||||
if (preg_match('/^([^\x00-\x20\x29\x7F]+)/', $str, $m)) { | if (preg_match('/^([^\x00-\x20\x29\x7F]+)/', $str, $m)) { | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
$result[] = $m[1] == 'NIL' ? null : $m[1]; | $result[] = $m[1] == 'NIL' ? null : $m[1]; | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 24 spaces, found 20 | |||||
$str = substr($str, strlen($m[1])); | $str = substr($str, strlen($m[1])); | ||||
Lint: Generic.WhiteSpace.ScopeIndent.Incorrect Line indented incorrectly; expected at least 24 spaces, found 20 Lint: Generic.WhiteSpace.ScopeIndent.Incorrect: Line indented incorrectly; expected at least 24 spaces, found 20 | |||||
} | } | ||||
Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact Line indented incorrectly; expected 20 spaces, found 16 Lint: Generic.WhiteSpace.ScopeIndent.IncorrectExact: Line indented incorrectly; expected 20 spaces, found 16 | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
return $num == 1 ? $result[0] : $result; | return $num == 1 ? $result[0] : $result; | ||||
} | } | ||||
/** | /** | ||||
* Joins IMAP command line elements (recursively) | * Joins IMAP command line elements (recursively) | ||||
*/ | */ | ||||
protected static function r_implode($element) | protected static function r_implode($element) | ||||
Lint: PSR1.Methods.CamelCapsMethodName.NotCamelCaps Method name "rcube_imap_generic::r_implode" is not in camel caps format Lint: PSR1.Methods.CamelCapsMethodName.NotCamelCaps: Method name "rcube_imap_generic::r_implode" is not in camel caps format | |||||
{ | { | ||||
$string = ''; | $string = ''; | ||||
if (is_array($element)) { | if (is_array($element)) { | ||||
reset($element); | reset($element); | ||||
foreach ($element as $value) { | foreach ($element as $value) { | ||||
$string .= ' ' . self::r_implode($value); | $string .= ' ' . self::r_implode($value); | ||||
} | } | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
return $element; | return $element; | ||||
} | } | ||||
return '(' . trim($string) . ')'; | return '(' . trim($string) . ')'; | ||||
} | } | ||||
/** | /** | ||||
* Converts message identifiers array into sequence-set syntax | * Converts message identifiers array into sequence-set syntax | ||||
* | * | ||||
* @param array $messages Message identifiers | * @param array $messages Message identifiers | ||||
* @param bool $force Forces compression of any size | * @param bool $force Forces compression of any size | ||||
* | * | ||||
* @return string Compressed sequence-set | * @return string Compressed sequence-set | ||||
*/ | */ | ||||
public static function compressMessageSet($messages, $force=false) | public static function compressMessageSet($messages, $force=false) | ||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$force" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$force" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$force"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$force"; expected 1 but… | |||||
{ | { | ||||
// given a comma delimited list of independent mid's, | // given a comma delimited list of independent mid's, | ||||
// compresses by grouping sequences together | // compresses by grouping sequences together | ||||
if (!is_array($messages)) { | if (!is_array($messages)) { | ||||
// if less than 255 bytes long, let's not bother | // if less than 255 bytes long, let's not bother | ||||
if (!$force && strlen($messages) < 255) { | if (!$force && strlen($messages) < 255) { | ||||
Lint: Comparison operation "<" between int<0, 1> and 255 is always true. Comparison operation "<" between int<0, 1> and 255 is always true. Lint: Comparison operation "<" between int<0, 1> and 255 is always true.: Comparison operation "<" between int<0, 1> and 255 is always true. | |||||
return preg_match('/[^0-9:,*]/', $messages) ? 'INVALID' : $messages; | return preg_match('/[^0-9:,*]/', $messages) ? 'INVALID' : $messages; | ||||
} | } | ||||
// see if it's already been compressed | // see if it's already been compressed | ||||
if (strpos($messages, ':') !== false) { | if (strpos($messages, ':') !== false) { | ||||
return preg_match('/[^0-9:,*]/', $messages) ? 'INVALID' : $messages; | return preg_match('/[^0-9:,*]/', $messages) ? 'INVALID' : $messages; | ||||
} | } | ||||
// separate, then sort | // separate, then sort | ||||
$messages = explode(',', $messages); | $messages = explode(',', $messages); | ||||
} | } | ||||
sort($messages); | sort($messages); | ||||
$result = array(); | $result = array(); | ||||
$start = $prev = $messages[0]; | $start = $prev = $messages[0]; | ||||
foreach ($messages as $id) { | foreach ($messages as $id) { | ||||
$incr = $id - $prev; | $incr = $id - $prev; | ||||
if ($incr > 1) { // found a gap | if ($incr > 1) { // found a gap | ||||
if ($start == $prev) { | if ($start == $prev) { | ||||
$result[] = $prev; // push single id | $result[] = $prev; // push single id | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$result[] = $start . ':' . $prev; // push sequence as start_id:end_id | $result[] = $start . ':' . $prev; // push sequence as start_id:end_id | ||||
} | } | ||||
$start = $id; // start of new sequence | $start = $id; // start of new sequence | ||||
} | } | ||||
$prev = $id; | $prev = $id; | ||||
} | } | ||||
// handle the last sequence/id | // handle the last sequence/id | ||||
if ($start == $prev) { | if ($start == $prev) { | ||||
$result[] = $prev; | $result[] = $prev; | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
$result[] = $start.':'.$prev; | $result[] = $start.':'.$prev; | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "."; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "."; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "."; 0 found | |||||
} | } | ||||
// return as comma separated string | // return as comma separated string | ||||
$result = implode(',', $result); | $result = implode(',', $result); | ||||
return preg_match('/[^0-9:,*]/', $result) ? 'INVALID' : $result; | return preg_match('/[^0-9:,*]/', $result) ? 'INVALID' : $result; | ||||
} | } | ||||
Show All 12 Lines | public static function uncompressMessageSet($messages) | ||||
$result = array(); | $result = array(); | ||||
$messages = explode(',', $messages); | $messages = explode(',', $messages); | ||||
foreach ($messages as $idx => $part) { | foreach ($messages as $idx => $part) { | ||||
$items = explode(':', $part); | $items = explode(':', $part); | ||||
$max = max($items[0], $items[1]); | $max = max($items[0], $items[1]); | ||||
for ($x=$items[0]; $x<=$max; $x++) { | for ($x=$items[0]; $x<=$max; $x++) { | ||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore Expected at least 1 space before "<="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceBefore: Expected at least 1 space before "<="; 0 found | |||||
Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter Expected at least 1 space after "<="; 0 found Lint: PSR12.Operators.OperatorSpacing.NoSpaceAfter: Expected at least 1 space after "<="; 0 found | |||||
$result[] = (int)$x; | $result[] = (int)$x; | ||||
} | } | ||||
unset($messages[$idx]); | unset($messages[$idx]); | ||||
} | } | ||||
return $result; | return $result; | ||||
} | } | ||||
/** | /** | ||||
* Clear internal status cache | * Clear internal status cache | ||||
*/ | */ | ||||
protected function clear_status_cache($mailbox) | protected function clear_status_cache($mailbox) | ||||
Lint: PSR1.Methods.CamelCapsMethodName.NotCamelCaps Method name "rcube_imap_generic::clear_status_cache" is not in camel caps format Lint: PSR1.Methods.CamelCapsMethodName.NotCamelCaps: Method name "rcube_imap_generic::clear_status_cache" is not in camel caps format | |||||
{ | { | ||||
unset($this->data['STATUS:' . $mailbox]); | unset($this->data['STATUS:' . $mailbox]); | ||||
$keys = array('EXISTS', 'RECENT', 'UNSEEN', 'UID-MAP'); | $keys = array('EXISTS', 'RECENT', 'UNSEEN', 'UID-MAP'); | ||||
foreach ($keys as $key) { | foreach ($keys as $key) { | ||||
unset($this->data[$key]); | unset($this->data[$key]); | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Clear internal cache of the current mailbox | * Clear internal cache of the current mailbox | ||||
*/ | */ | ||||
protected function clear_mailbox_cache() | protected function clear_mailbox_cache() | ||||
Lint: PSR1.Methods.CamelCapsMethodName.NotCamelCaps Method name "rcube_imap_generic::clear_mailbox_cache" is not in camel caps format Lint: PSR1.Methods.CamelCapsMethodName.NotCamelCaps: Method name "rcube_imap_generic::clear_mailbox_cache" is not in camel caps format | |||||
{ | { | ||||
$this->clear_status_cache($this->selected); | $this->clear_status_cache($this->selected); | ||||
$keys = array('UIDNEXT', 'UIDVALIDITY', 'HIGHESTMODSEQ', 'NOMODSEQ', | $keys = array('UIDNEXT', 'UIDVALIDITY', 'HIGHESTMODSEQ', 'NOMODSEQ', | ||||
'PERMANENTFLAGS', 'QRESYNC', 'VANISHED', 'READ-WRITE'); | 'PERMANENTFLAGS', 'QRESYNC', 'VANISHED', 'READ-WRITE'); | ||||
foreach ($keys as $key) { | foreach ($keys as $key) { | ||||
unset($this->data[$key]); | unset($this->data[$key]); | ||||
Show All 16 Lines | protected function flagsToStr($flags) | ||||
} | } | ||||
return implode(' ', (array)$flags); | return implode(' ', (array)$flags); | ||||
} | } | ||||
/** | /** | ||||
* CAPABILITY response parser | * CAPABILITY response parser | ||||
*/ | */ | ||||
protected function parseCapability($str, $trusted=false) | protected function parseCapability($str, $trusted=false) | ||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$trusted" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$trusted" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$trusted"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$trusted"; expected 1 but… | |||||
{ | { | ||||
$str = preg_replace('/^\* CAPABILITY /i', '', $str); | $str = preg_replace('/^\* CAPABILITY /i', '', $str); | ||||
$this->capability = explode(' ', strtoupper($str)); | $this->capability = explode(' ', strtoupper($str)); | ||||
if (!empty($this->prefs['disabled_caps'])) { | if (!empty($this->prefs['disabled_caps'])) { | ||||
$this->capability = array_diff($this->capability, $this->prefs['disabled_caps']); | $this->capability = array_diff($this->capability, $this->prefs['disabled_caps']); | ||||
} | } | ||||
Show All 11 Lines | |||||
* Escapes a string when it contains special characters (RFC3501) | * Escapes a string when it contains special characters (RFC3501) | ||||
* | * | ||||
* @param string $string IMAP string | * @param string $string IMAP string | ||||
* @param boolean $force_quotes Forces string quoting (for atoms) | * @param boolean $force_quotes Forces string quoting (for atoms) | ||||
* | * | ||||
* @return string String atom, quoted-string or string literal | * @return string String atom, quoted-string or string literal | ||||
* @todo lists | * @todo lists | ||||
*/ | */ | ||||
public static function escape($string, $force_quotes=false) | public static function escape($string, $force_quotes=false) | ||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals Incorrect spacing between argument "$force_quotes" and equals sign; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals: Incorrect spacing between argument "$force_quotes" and equals sign; expected 1 but found 0 | |||||
Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals Incorrect spacing between default value and equals sign for argument "$force_quotes"; expected 1 but found 0 Lint: Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals: Incorrect spacing between default value and equals sign for argument "$force_quotes"; expected… | |||||
{ | { | ||||
if ($string === null) { | if ($string === null) { | ||||
Lint: Strict comparison using === between string and null will always evaluate to false. Strict comparison using === between string and null will always evaluate to false. Lint: Strict comparison using === between string and null will always evaluate to false.: Strict comparison using === between string and null will always evaluate to false. | |||||
return 'NIL'; | return 'NIL'; | ||||
} | } | ||||
if ($string === '') { | if ($string === '') { | ||||
return '""'; | return '""'; | ||||
} | } | ||||
// atom-string (only safe characters) | // atom-string (only safe characters) | ||||
Show All 13 Lines | |||||
/** | /** | ||||
* Set the value of the debugging flag. | * Set the value of the debugging flag. | ||||
* | * | ||||
* @param boolean $debug New value for the debugging flag. | * @param boolean $debug New value for the debugging flag. | ||||
* @param callback $handler Logging handler function | * @param callback $handler Logging handler function | ||||
* | * | ||||
* @since 0.5-stable | * @since 0.5-stable | ||||
*/ | */ | ||||
public function setDebug($debug, $handler = null) | public function setDebug($debug, $handler = null) | ||||
Lint: Parameter $handler of method rcube_imap_generic::setDebug() has invalid type callback. Parameter $handler of method rcube_imap_generic::setDebug() has invalid type callback. Lint: Parameter $handler of method rcube_imap_generic::setDebug() has invalid type callback.: Parameter $handler of method rcube_imap_generic::setDebug() has invalid type callback. | |||||
{ | { | ||||
$this->debug = $debug; | $this->debug = $debug; | ||||
$this->debug_handler = $handler; | $this->debug_handler = $handler; | ||||
} | } | ||||
/** | /** | ||||
* Write the given debug text to the current debug output handler. | * Write the given debug text to the current debug output handler. | ||||
* | * | ||||
Show All 10 Lines | protected function debug($message) | ||||
} | } | ||||
if ($this->resourceid) { | if ($this->resourceid) { | ||||
$message = sprintf('[%s] %s', $this->resourceid, $message); | $message = sprintf('[%s] %s', $this->resourceid, $message); | ||||
} | } | ||||
if ($this->debug_handler) { | if ($this->debug_handler) { | ||||
call_user_func_array($this->debug_handler, array($this, $message)); | call_user_func_array($this->debug_handler, array($this, $message)); | ||||
} | } | ||||
Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace Expected 1 space after closing brace; newline found Lint: Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace: Expected 1 space after closing brace; newline found | |||||
else { | else { | ||||
echo "DEBUG: $message\n"; | echo "DEBUG: $message\n"; | ||||
} | } | ||||
} | } | ||||
} | } |
Each class must be in a namespace of at least one level (a top-level vendor name)