Example #1
0
 /**
  * Returns a list of files given the path and optionally the pattern
  *
  * @param string regular expression
  * @return array
  */
 public function getFiles($regex = NULL, $recursive = false)
 {
     //argument test
     $error = Eden_Folder_Error::i()->argument(1, 'string', 'null')->argument(2, 'bool');
     //argument 2 must be a boolean
     $this->absolute();
     $files = array();
     if ($handle = opendir($this->_data)) {
         //for each file
         while (false !== ($file = readdir($handle))) {
             // If this is infact a file
             if (filetype($this->_data . '/' . $file) == 'file' && (!$regex || preg_match($regex, $file))) {
                 //add it
                 $files[] = Eden_File::i($this->_data . '/' . $file);
                 // recursive and this is infact a directory
             } else {
                 if ($recursive && $file != '.' && $file != '..' && filetype($this->_data . '/' . $file) == 'dir') {
                     $subfiles = self::i($this->_data . '/' . $file);
                     $files = array_merge($files, $subfiles->getFiles($regex, $recursive));
                 }
             }
         }
         closedir($handle);
     }
     return $files;
 }
Example #2
0
 protected function _addAttachmentBody(array $body)
 {
     foreach ($this->_attachments as $attachment) {
         list($name, $data, $mime) = $attachment;
         $mime = $mime ? $mime : Eden_File::i()->getMimeType($name);
         $data = base64_encode($data);
         $count = ceil(strlen($data) / 998);
         $body[] = '--' . $this->_boundary[1];
         $body[] = 'Content-type: ' . $mime . '; name="' . $name . '"';
         $body[] = 'Content-disposition: attachment; filename="' . $name . '"';
         $body[] = 'Content-transfer-encoding: base64';
         $body[] = NULL;
         for ($i = 0; $i < $count; $i++) {
             $body[] = substr($data, $i * 998, 998);
         }
         $body[] = NULL;
         $body[] = NULL;
     }
     $body[] = '--' . $this->_boundary[1] . '--';
     return $body;
 }
Example #3
0
 /**
  * Sets a data cache
  *
  * @param *string the key to the data
  * @param *string the path of the cache
  * @param *mixed the data to be cached
  * @return Eden_CacheModel
  */
 public function set($key, $path, $data)
 {
     //argument test
     Eden_Cache_Error::i()->argument(1, 'string')->argument(2, 'string');
     //argument 2 must be a string
     //get the proper path format
     $path = $this->_path . Eden_Path::i($path);
     //set the data to the file
     Eden_File::i($path)->setData($data);
     //store this data in memory by keyword
     $this->_cache[$key] = $path;
     //now we want to store the key and data file correlation
     Eden_File::i($this->_path . '/' . $this->_key)->setData($this->_cache);
     return $this;
 }
Example #4
0
 /** 
  * Saves the language to a file
  *
  * @param string|null
  * @return this
  */
 public function save($file = NULL)
 {
     Eden_Language_Error::i()->argument(1, 'file', 'null');
     if (is_null($file)) {
         $file = $this->_file;
     }
     if (is_null($file)) {
         Eden_Language_Error::i()->setMessage(Eden_Language_Error::INVALID_ARGUMENT)->addVariable(1)->addVariable(__CLASS__ . '->' . __FUNCTION__)->addVariable('file or null')->addVariable($file)->setTypeLogic()->trigger();
     }
     Eden_File::i($file)->setData($this->_language);
     return $this;
 }
Example #5
0
if(!class_exists('Eden_Mail_Smtp')){class Eden_Mail_Smtp extends Eden_Class{const TIMEOUT=30;protected $_host=NULL;protected $_port=NULL;protected $_ssl=false;protected $_tls=false;protected $_username=NULL;protected $_password=NULL;protected $_socket=NULL;protected $_boundary=array();protected $_subject=NULL;protected $_body=array();protected $_to=array();protected $_cc=array();protected $_bcc=array();protected $_attachments=array();private $_debugging=false;public static function i(){return self::_getMultiple(__CLASS__);}public function __construct($host,$user,$pass,$port=NULL,$ssl=false,$tls=false){Eden_Mail_Error::i()->argument(1,'string')->argument(2,'string')->argument(3,'string')->argument(4,'int','null')->argument(5,'bool')->argument(6,'bool');if (is_null($port)){$port=$ssl ? 465 : 25;}$this->_host=$host;$this->_username=$user;$this->_password=$pass;$this->_port=$port;$this->_ssl=$ssl;$this->_tls=$tls;$this->_boundary[]=md5(time().'1');$this->_boundary[]=md5(time().'2');}public function addAttachment($filename,$data,$mime=NULL){Eden_Mail_Error::i()->argument(1,'string')->argument(2,'string')->argument(3,'string','null');$this->_attachments[]=array($filename,$data,$mime);return $this;}public function addBCC($email,$name=NULL){Eden_Mail_Error::i()->argument(1,'string')->argument(2,'string','null');$this->_bcc[$email]=$name;return $this;}public function addCC($email,$name=NULL){Eden_Mail_Error::i()->argument(1,'string')->argument(2,'string','null');$this->_cc[$email]=$name;return $this;}public function addTo($email,$name=NULL){Eden_Mail_Error::i()->argument(1,'string')->argument(2,'string','null');$this->_to[$email]=$name;return $this;}public function connect($timeout=self::TIMEOUT,$test=false){Eden_Mail_Error::i()->argument(1,'int')->argument(2,'bool');$host=$this->_host;if ($this->_ssl){$host='ssl://'.$host;}else{$host='tcp://'.$host;}$errno=0;$errstr='';$this->_socket=@stream_socket_client($host.':'.$this->_port,$errno,$errstr,$timeout);if (!$this->_socket || strlen($errstr) > 0 || $errno > 0){Eden_Mail_Error::i()->setMessage(Eden_Mail_Error::SERVER_ERROR)->addVariable($host.':'.$this->_port)->trigger();}$this->_receive();if(!$this->_call('EHLO '.$_SERVER['HTTP_HOST'],250) && !$this->_call('HELO '.$_SERVER['HTTP_HOST'],250)){$this->disconnect();Eden_Mail_Error::i()->setMessage(Eden_Mail_Error::SERVER_ERROR)->addVariable($host.':'.$this->_port)->trigger();};if ($this->_tls && !$this->_call('STARTTLS',220,250)){if(!stream_socket_enable_crypto($this->_socket,true,STREAM_CRYPTO_METHOD_TLS_CLIENT)){$this->disconnect();Eden_Mail_Error::i()->setMessage(Eden_Mail_Error::TLS_ERROR)->addVariable($host.':'.$this->_port)->trigger();}if(!$this->_call('EHLO '.$_SERVER['HTTP_HOST'],250) && !$this->_call('HELO '.$_SERVER['HTTP_HOST'],250)){$this->disconnect();Eden_Mail_Error::i()->setMessage(Eden_Mail_Error::SERVER_ERROR)->addVariable($host.':'.$this->_port)->trigger();}}if($test){$this->disconnect();return $this;}if(!$this->_call('AUTH LOGIN',250,334)){$this->disconnect();Eden_Mail_Error::i(Eden_Mail_Error::LOGIN_ERROR)->trigger();}if(!$this->_call(base64_encode($this->_username),334)){$this->disconnect();Eden_Mail_Error::i()->setMessage(Eden_Mail_Error::LOGIN_ERROR);}if(!$this->_call(base64_encode($this->_password),235,334)){$this->disconnect();Eden_Mail_Error::i()->setMessage(Eden_Mail_Error::LOGIN_ERROR);}return $this;}public function disconnect(){if ($this->_socket){$this->_send('QUIT');fclose($this->_socket);$this->_socket=NULL;}return $this;}public function reply($messageId,$topic=NULL,array $headers=array()){Eden_Mail_Error::i()->argument(1,'string')->argument(2,'string','null');$headers['In-Reply-To']=$messageId;if($topic){$headers['Thread-Topic']=$topic;}return $this->send($headers);}public function reset(){$this->_subject=NULL;$this->_body=array();$this->_to=array();$this->_cc=array();$this->_bcc=array();$this->_attachments=array();$this->disconnect();return $this;}public function send(array $headers=array()){if(!$this->_socket){$this->connect();}$headers=$this->_getHeaders($headers);$body=$this->_getBody();if(!$this->_call('MAIL FROM:<'.$this->_username.'>',250,251)){$this->disconnect();Eden_Mail_Error::i()->setMessage(Eden_Mail_Error::SMTP_ADD_EMAIL)->addVariable($this->_username)->trigger();}foreach($this->_to as $email=>$name){if(!$this->_call('RCPT TO:<'.$email.'>',250,251)){$this->disconnect();Eden_Mail_Error::i()->setMessage(Eden_Mail_Error::SMTP_ADD_EMAIL)->addVariable($email)->trigger();}}foreach($this->_cc as $email=>$name){if(!$this->_call('RCPT TO:<'.$email.'>',250,251)){$this->disconnect();Eden_Mail_Error::i()->setMessage(Eden_Mail_Error::SMTP_ADD_EMAIL)->addVariable($email)->trigger();}}foreach($this->_bcc as $email=>$name){if(!$this->_call('RCPT TO:<'.$email.'>',250,251)){$this->disconnect();Eden_Mail_Error::i()->setMessage(Eden_Mail_Error::SMTP_ADD_EMAIL)->addVariable($email)->trigger();}}if(!$this->_call('DATA',354)){$this->disconnect();Eden_Mail_Error::i(Eden_Mail_Error::SMTP_DATA)->trigger();}foreach($headers as $name=>$value){$this->_send($name.': '.$value);}foreach($body as $line){if (strpos($line,'.')===0){$line='.'.$line;}$this->_send($line);}if(!$this->_call("\r\n.\r\n",250)){$this->disconnect();Eden_Mail_Error::i(Eden_Mail_Error::SMTP_DATA)->trigger();}$this->_send('RSET');return $headers;}public function setBody($body,$html=false){Eden_Mail_Error::i()->argument(1,'string')->argument(2,'bool');if($html){$this->_body['text/html']=$body;$body=strip_tags($body);}$this->_body['text/plain']=$body;return $this;}public function setSubject($subject){Eden_Mail_Error::i()->argument(1,'string');$this->_subject=$subject;return $this;}protected function _addAttachmentBody(array $body){foreach($this->_attachments as $attachment){list($name,$data,$mime)=$attachment;$mime=$mime ? $mime : Eden_File::i($name)->getMime();$data=base64_encode($data);$count=ceil(strlen($data) / 998);$body[]='--'.$this->_boundary[1];$body[]='Content-type: '.$mime.';name="'.$name.'"';$body[]='Content-disposition: attachment;filename="'.$name.'"';$body[]='Content-transfer-encoding: base64';$body[]=NULL;for ($i=0;$i < $count;$i++){$body[]=substr($data,($i * 998),998);}$body[]=NULL;$body[]=NULL;}$body[]='--'.$this->_boundary[1].'--';return $body;}protected function _call($command,$code=NULL){if(!$this->_send($command)){return false;}$receive=$this->_receive();$args=func_get_args();if(count($args) > 1){for($i=1;$i < count($args);$i++){if(strpos($receive,(string)$args[$i])===0){return true;}}return false;}return $receive;}protected function _getAlternativeAttachmentBody(){$alternative=$this->_getAlternativeBody();$body=array();$body[]='Content-Type: multipart/mixed;boundary="'.$this->_boundary[1].'"';$body[]=NULL;$body[]='--'.$this->_boundary[1];foreach($alternative as $line){$body[]=$line;}return $this->_addAttachmentBody($body);}protected function _getAlternativeBody(){$plain=$this->_getPlainBody();$html=$this->_getHtmlBody();$body=array();$body[]='Content-Type: multipart/alternative;boundary="'.$this->_boundary[0].'"';$body[]=NULL;$body[]='--'.$this->_boundary[0];foreach($plain as $line){$body[]=$line;}$body[]='--'.$this->_boundary[0];foreach($html as $line){$body[]=$line;}$body[]='--'.$this->_boundary[0].'--';$body[]=NULL;$body[]=NULL;return $body;}protected function _getBody(){$type='Plain';if(count($this->_body) > 1){$type='Alternative';}else if(isset($this->_body['text/html'])){$type='Html';}$method='_get%sBody';if(!empty($this->_attachments)){$method='_get%sAttachmentBody';}$method=sprintf($method,$type);return $this->$method();}protected function _getHeaders(array $customHeaders=array()){$timestamp=$this->_getTimestamp();$subject=trim($this->_subject);$subject=str_replace(array("\n","\r"),'',$subject);$to=$cc=$bcc=array();foreach($this->_to as $email=>$name){$to[]=trim($name.' <'.$email.'>');}foreach($this->_cc as $email=>$name){$cc[]=trim($name.' <'.$email.'>');}foreach($this->_bcc as $email=>$name){$bcc[]=trim($name.' <'.$email.'>');}list($account,$suffix)=explode('@',$this->_username);$headers=array( 'Date'=>$timestamp,'Subject'=>$subject,'From'=>'<'.$this->_username.'>','To'=>implode(',',$to));if(!empty($cc)){$headers['Cc']=implode(',',$cc);}if(!empty($bcc)){$headers['Bcc']=implode(',',$bcc);}$headers['Message-ID']='<'.md5(uniqid(time())).'.eden@'.$suffix.'>';$headers['Thread-Topic']=$this->_subject;$headers['Reply-To']='<'.$this->_username.'>';foreach($customHeaders as $key=>$value){$headers[$key]=$value;}return $headers;}protected function _getHtmlAttachmentBody(){$html=$this->_getHtmlBody();$body=array();$body[]='Content-Type: multipart/mixed;boundary="'.$this->_boundary[1].'"';$body[]=NULL;$body[]='--'.$this->_boundary[1];foreach($html as $line){$body[]=$line;}return $this->_addAttachmentBody($body);}protected function _getHtmlBody(){$charset=$this->_isUtf8($this->_body['text/html']) ? 'utf-8' : 'US-ASCII';$html=str_replace("\r",'',trim($this->_body['text/html']));$encoded=explode("\n",$this->_quotedPrintableEncode($html));$body=array();$body[]='Content-Type: text/html;charset='.$charset;$body[]='Content-Transfer-Encoding: quoted-printable'."\n";foreach($encoded as $line){$body[]=$line;}$body[]=NULL;$body[]=NULL;return $body;}protected function _getPlainAttachmentBody(){$plain=$this->_getPlainBody();$body=array();$body[]='Content-Type: multipart/mixed;boundary="'.$this->_boundary[1].'"';$body[]=NULL;$body[]='--'.$this->_boundary[1];foreach($plain as $line){$body[]=$line;}return $this->_addAttachmentBody($body);}protected function _getPlainBody(){$charset=$this->_isUtf8($this->_body['text/plain']) ? 'utf-8' : 'US-ASCII';$plane=str_replace("\r",'',trim($this->_body['text/plain']));$count=ceil(strlen($plane) / 998);$body=array();$body[]='Content-Type: text/plain;charset='.$charset;$body[]='Content-Transfer-Encoding: 7bit';$body[]=NULL;for ($i=0;$i < $count;$i++){$body[]=substr($plane,($i * 998),998);}$body[]=NULL;$body[]=NULL;return $body;}protected function _receive(){$data='';$now=time();while($str=fgets($this->_socket,1024)){$data.=$str;if(substr($str,3,1)==' ' || time() > ($now + self::TIMEOUT)){break;}}$this->_debug('Receiving: '.$data);return $data;}protected function _send($command){$this->_debug('Sending: '.$command);return fwrite($this->_socket,$command."\r\n");}private function _debug($string){if($this->_debugging){$string=htmlspecialchars($string);echo '<pre>'.$string.'</pre>'."\n";}return $this;}private function _getTimestamp(){$zone=date('Z');$sign=($zone < 0) ? '-' : '+';$zone=abs($zone);$zone=(int)($zone / 3600) * 100 + ($zone % 3600) / 60;return sprintf("%s %s%04d",date('D,j M Y H:i:s'),$sign,$zone);}private function _isUtf8($string){$regex=array( '[\xC2-\xDF][\x80-\xBF]','\xE0[\xA0-\xBF][\x80-\xBF]','[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}','\xED[\x80-\x9F][\x80-\xBF]','\xF0[\x90-\xBF][\x80-\xBF]{2}','[\xF1-\xF3][\x80-\xBF]{3}','\xF4[\x80-\x8F][\x80-\xBF]{2}');$count=ceil(strlen($string) / 5000);for ($i=0;$i < $count;$i++){if(preg_match('%(?:'.implode('|',$regex).')+%xs',substr($string,($i * 5000),5000))){return false;}}return true;}private function _quotedPrintableEncode($input,$line_max=250){$hex=array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');$lines=preg_split("/(?:\r\n|\r|\n)/",$input);$linebreak="=0D=0A=\r\n";$line_max=$line_max - strlen($linebreak);$escape="=";$output="";$cur_conv_line="";$length=0;$whitespace_pos=0;$addtl_chars=0;for ($j=0;$j<count($lines);$j++){$line=$lines[$j];$linlen=strlen($line);for ($i=0;$i < $linlen;$i++){$c=substr($line,$i,1);$dec=ord($c);$length++;if ($dec==32){if (($i==($linlen - 1))){$c="=20";$length +=2;}$addtl_chars=0;$whitespace_pos=$i;}elseif ( ($dec==61) || ($dec < 32 ) || ($dec > 126) ){$h2=floor($dec/16);$h1=floor($dec%16);$c=$escape.$hex["$h2"].$hex["$h1"];$length +=2;$addtl_chars +=2;}if ($length >=$line_max){$cur_conv_line.=$c;$whitesp_diff=$i - $whitespace_pos + $addtl_chars;if (($i + $addtl_chars) > $whitesp_diff){$output.=substr($cur_conv_line,0,(strlen($cur_conv_line) - $whitesp_diff)).$linebreak;$i=$i - $whitesp_diff + $addtl_chars;}else{$output.=$cur_conv_line.$linebreak;}$cur_conv_line="";$length=0;$whitespace_pos=0;}else{$cur_conv_line.=$c;}}$length=0;$whitespace_pos=0;$output.=$cur_conv_line;$cur_conv_line="";if ($j<=count($lines)-1){$output.=$linebreak;}}return trim($output);}}}
 /**
  * Put an object
  *
  * @param mixed $input Input data
  * @param string $bucket Bucket name
  * @param string $path Object URI
  * @param constant $acl ACL constant
  * @param array $metaHeaders Array of x-amz-meta-* headers
  * @param array $requestHeaders Array of request headers or content type as a string
  * @return boolean
  */
 public function addFile($bucket, $path, $data, $acl = self::ACL_PRIVATE, $file = false)
 {
     //argument test
     Eden_Amazon_Error::i()->argument(1, 'string')->argument(2, 'string')->argument(4, 'string')->argument(5, 'bool');
     //Argument 5 must be boolean
     $headers = $amazon = array();
     $headers['Content-Type'] = Eden_File::i()->getMimeType($path);
     $amazon['x-amz-acl'] = $acl;
     if (strpos($path, '/') !== 0) {
         $path = '/' . $path;
     }
     //if not file
     if (!$file) {
         //put it into a file
         //we do this because file data in memory is bad
         $tmp = tmpfile();
         fwrite($tmp, $data);
         $file = $tmp;
         $size = strlen($data);
         //release file data from memory
         $data = NULL;
         //if is a file
     } else {
         $file = fopen($data, 'r');
         $size = filesize($data);
     }
     $data = array($file, $size);
     $this->_setResponse('PUT', $bucket, $path, array(), $data, $headers, $amazon);
     //dont forget to close
     fclose($file);
     if (!empty($this->_meta['error'])) {
         return false;
     }
     return $size;
 }