Esempio n. 1
0
 public function createLink(Core_Model_Item_Abstract $owner, $data)
 {
     $table = Engine_Api::_()->getDbtable('links', 'core');
     if (empty($data['parent_type']) || empty($data['parent_id'])) {
         $data['parent_type'] = $owner->getType();
         $data['parent_id'] = $owner->getIdentity();
     }
     $link = $table->createRow();
     $link->setFromArray($data);
     $link->owner_type = $owner->getType();
     $link->owner_id = $owner->getIdentity();
     $link->save();
     // Now try to create thumbnail
     $thumbnail = (string) @$data['thumb'];
     $thumbnail_parsed = @parse_url($thumbnail);
     //$ext = @ltrim(strrchr($thumbnail_parsed['path'], '.'), '.');
     //$link_parsed = @parse_url($link->uri);
     // Make sure to not allow thumbnails from domains other than the link (problems with subdomains, disabled for now)
     //if( $thumbnail && $thumbnail_parsed && $thumbnail_parsed['host'] === $link_parsed['host'] )
     //if( $thumbnail && $ext && $thumbnail_parsed && in_array($ext, array('jpg', 'jpeg', 'gif', 'png')) )
     if ($thumbnail && $thumbnail_parsed) {
         $tmp_path = APPLICATION_PATH . '/temporary/link';
         $tmp_file = $tmp_path . '/' . md5($thumbnail);
         if (!is_dir($tmp_path) && !mkdir($tmp_path, 0777, true)) {
             throw new Core_Model_Exception('Unable to create tmp link folder : ' . $tmp_path);
         }
         $src_fh = fopen($thumbnail, 'r');
         $tmp_fh = fopen($tmp_file, 'w');
         stream_copy_to_stream($src_fh, $tmp_fh, 1024 * 1024 * 2);
         fclose($src_fh);
         fclose($tmp_fh);
         if (($info = getimagesize($tmp_file)) && !empty($info[2])) {
             $ext = Engine_Image::image_type_to_extension($info[2]);
             $thumb_file = $tmp_path . '/thumb_' . md5($thumbnail) . '.' . $ext;
             $image = Engine_Image::factory();
             $image->open($tmp_file)->resize(120, 240)->write($thumb_file)->destroy();
             $thumbFileRow = Engine_Api::_()->storage()->create($thumb_file, array('parent_type' => $link->getType(), 'parent_id' => $link->getIdentity()));
             $link->photo_id = $thumbFileRow->file_id;
             $link->save();
             @unlink($thumb_file);
         }
         @unlink($tmp_file);
     }
     return $link;
 }