File indexing completed on 2024-05-12 05:58:32

0001 <?php
0002 /**
0003  *  ocs-webserver
0004  *
0005  *  Copyright 2016 by pling GmbH.
0006  *
0007  *    This file is part of ocs-webserver.
0008  *
0009  *    This program is free software: you can redistribute it and/or modify
0010  *    it under the terms of the GNU Affero General Public License as
0011  *    published by the Free Software Foundation, either version 3 of the
0012  *    License, or (at your option) any later version.
0013  *
0014  *    This program is distributed in the hope that it will be useful,
0015  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
0016  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0017  *    GNU Affero General Public License for more details.
0018  *
0019  *    You should have received a copy of the GNU Affero General Public License
0020  *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0021  **/
0022 
0023 $_import_counter = 0;
0024 $_import_file_counter = 0;
0025 $_is_import_done = false;
0026 
0027 class Backend_HiveController extends Local_Controller_Action_Backend
0028 {
0029 
0030     const RESULT_OK = "OK";
0031     const RESULT_ERROR = "ERROR";
0032     const DATA_ID_NAME = 'id';
0033     var $_HIVE_BASE_URL;
0034     var $_OCS_CN_FILE_SYNC_URL;
0035     var $_OCS_FILE_SYNC_URL;
0036     protected $_errorMsg = null;
0037 
0038     protected $import_info;
0039 
0040 
0041     /** @var Default_Model_DbTable_HiveContent */
0042     protected $_model;
0043 
0044     protected $_modelName = 'Default_Model_DbTable_HiveContent';
0045     protected $_pageTitle = 'Import Hive01 Files';
0046     protected $_allowed = array(
0047         'image/jpeg'          => '.jpg',
0048         'image/jpg'           => '.jpg',
0049         'image/png'           => '.png',
0050         'image/gif'           => '.gif',
0051         'application/x-empty' => '.png'
0052     );
0053 
0054     public function init()
0055     {
0056         $this->_model = new $this->_modelName();
0057 
0058         $this->view->pageTitle = $this->_pageTitle;
0059 
0060         parent::init();
0061     }
0062 
0063     public function initVars()
0064     {
0065         if (strtolower(php_uname("n")) == 'do-pling-com') {
0066             $this->_HIVE_BASE_URL = 'http://cp1.hive01.com';
0067             $this->_OCS_CN_FILE_SYNC_URL = 'https://cn.opendesktop.org';
0068             $this->_OCS_FILE_SYNC_URL = 'https://www.ppload.com';
0069         } else {
0070             $this->_HIVE_BASE_URL = 'http://cp1.hive01.com';
0071             $this->_OCS_CN_FILE_SYNC_URL = 'https://cn.pling.ws';
0072             $this->_OCS_FILE_SYNC_URL = 'https://ws.ppload.com';
0073         }
0074     }
0075 
0076     public function indexAction()
0077     {
0078         $params = $this->getAllParams();
0079 
0080         if (empty($params['step'])) {
0081             $this->view->step = 0;
0082         } else {
0083             $this->view->step = $params['step'];
0084         }
0085         if ($this->view->step == 0) {
0086             $this->step0();
0087         } else {
0088             if ($this->view->step == 1) {
0089                 $this->step1();
0090             } else {
0091                 if ($this->view->step == 2) {
0092                     $this->step2();
0093                 } else {
0094                     if ($this->view->step == 3) {
0095                         $this->step3();
0096                     } else {
0097                         if ($this->view->step == 4) {
0098                             $this->step4();
0099                         } else {
0100                             if ($this->view->step == 10) {
0101                                 $this->step10();
0102                             } else {
0103                                 if ($this->view->step == 20) {
0104                                     $this->step20();
0105                                 } else {
0106                                     if ($this->view->step == 30) {
0107                                         $this->step30();
0108                                     }
0109                                 }
0110                             }
0111                         }
0112                     }
0113                 }
0114             }
0115         }
0116     }
0117 
0118     private function step0()
0119     {
0120         $countProjects = null;
0121         $contentTable = new Default_Model_DbTable_HiveContent();
0122         try {
0123             $count = $contentTable->fetchCountProjects();
0124             $this->view->info = "Erfolgreich geladen aus DB";
0125             $countProjects = $count;
0126         } catch (Exception $e) {
0127             Zend_Registry::get('logger')->info(__METHOD__ . ' - ' . "Error in fetchCountProjects");
0128             Zend_Registry::get('logger')->err(__METHOD__ . ' - ' . print_r($e, true));
0129 
0130             $this->view->info = "Error while loading from the database:" . $e->getMessage();
0131             $countProjects = 0;
0132         }
0133 
0134         $this->view->coutAll = $countProjects;
0135     }
0136 
0137     private function step1()
0138     {
0139         $catArray = null;
0140         $contentTable = new Default_Model_DbTable_HiveContent();
0141         try {
0142             $catArray = $contentTable->fetchHiveCategories();
0143             $this->view->info = "Successfully loaded from the database";
0144         } catch (Exception $e) {
0145             $this->view->info = "Error while loading from the database:" . $e->getMessage();
0146             $catArray = null;
0147         }
0148 
0149         $this->view->categories = $catArray;
0150     }
0151 
0152     private function step2()
0153     {
0154         $params = $this->getAllParams();
0155         $cat_id = $params['cat_id'];
0156         $cat = null;
0157         $contentTable = new Default_Model_DbTable_HiveContent();
0158         try {
0159             $count = $contentTable->fetchCountProjectsForCategory($cat_id);
0160 
0161             $cat = $contentTable->fetchHiveCategory($cat_id);
0162             $this->view->info .= "Successfully loaded from the database";
0163         } catch (Exception $e) {
0164             $this->view->info .= "Error while loading from the database:" . $e->getMessage();
0165             $cat = null;
0166             $count = 0;
0167         }
0168 
0169         $this->view->cat_id = $cat['id'];
0170         $this->view->cat_desc = $cat['desc'];
0171         $this->view->count = $count;
0172 
0173         try {
0174             $catArray = $contentTable->fetchOcsCategories();
0175             $this->view->info = "Successfully loaded from the database";
0176         } catch (Exception $e) {
0177             $this->view->info = "Error while loading from the database:" . $e->getMessage();
0178             $catArray = null;
0179         }
0180 
0181         $this->view->categories = $catArray;
0182     }
0183 
0184     private function step3()
0185     {
0186         $params = $this->getAllParams();
0187         $cat_id = $params['cat_id'];
0188         $ocs_cat_id = $params['ocs_cat_id'];
0189         $cat = null;
0190         $contentTable = new Default_Model_DbTable_HiveContent();
0191         try {
0192             $count = $contentTable->fetchCountProjectsForCategory($cat_id);
0193             $cat = $contentTable->fetchHiveCategory($cat_id);
0194             $this->view->info .= "Successfully loaded from the database";
0195             $this->view->cat_id = $cat['id'];
0196             $this->view->cat_desc = $cat['desc'];
0197             $this->view->count = $count;
0198 
0199             $ocs_cat = $contentTable->fetchOcsCategory($ocs_cat_id);
0200             $this->view->info .= "Successfully loaded from the database";
0201             $this->view->ocs_cat_id = $ocs_cat['id'];
0202             $this->view->ocs_cat_desc = $ocs_cat['desc'];
0203         } catch (Exception $e) {
0204             $this->view->info = "Error while loading from the database:" . $e->getMessage();
0205             $cat = null;
0206             $count = 0;
0207         }
0208 
0209         try {
0210             $catArray = $contentTable->fetchOcsCategories();
0211             $this->view->info .= "Successfully loaded from the database";
0212         } catch (Exception $e) {
0213             $this->view->info .= "Error while loading from the database:" . $e->getMessage();
0214             $catArray = null;
0215         }
0216 
0217         $this->view->categories = $catArray;
0218     }
0219 
0220     private function step4()
0221     {
0222         $params = $this->getAllParams();
0223         $cat_id = $params['cat_id'];
0224         $ocs_cat_id = $params['ocs_cat_id'];
0225         $importGalleryPics = $params['import_previews'];
0226         $importFiles = $params['import_files'];
0227         $this->view->cat_id = $cat_id;
0228         $this->view->ocs_cat_id = $ocs_cat_id;
0229         $this->view->import_files = $importFiles;
0230         $this->view->import_previews = $importGalleryPics;
0231     }
0232 
0233     private function step10()
0234     {
0235     }
0236 
0237     private function step20()
0238     {
0239         $catArray = null;
0240         $params = $this->getAllParams();
0241         $cat_ids = $params['cat_ids'];
0242 
0243         $contentTable = new Default_Model_DbTable_HiveContentCategory();
0244         try {
0245             if (isset($cat_ids)) {
0246                 $catArray = $contentTable->fetchHiveCategories($cat_ids);
0247                 $this->view->info = "Successfully loaded from the database";
0248             } else {
0249                 $this->view->info = "No category selected!";
0250             }
0251         } catch (Exception $e) {
0252             $this->view->info = "Error while loading from the database:" . $e->getMessage();
0253             $catArray = null;
0254         }
0255 
0256         $this->view->categories = $catArray;
0257         $this->view->cat_ids = $cat_ids;
0258     }
0259 
0260     private function step30()
0261     {
0262         $catArray = null;
0263         $params = $this->getAllParams();
0264         $cat_ids = $params['cat_ids'];
0265         $this->view->cat_ids = $cat_ids;
0266 
0267         $importGalleryPics = $params['import_previews'];
0268         $importFiles = $params['import_files'];
0269         $this->view->import_files = $importFiles;
0270         $this->view->import_previews = $importGalleryPics;
0271     }
0272 
0273     public function countAction()
0274     {
0275         $this->_helper->layout->disableLayout();
0276         $cat_id = (int)$this->getParam('cat_id');
0277         $contentTable = new Default_Model_DbTable_HiveContent();
0278         $count = $contentTable->fetchCountProjectsForCategory($cat_id);
0279 
0280         $result = array();
0281         $result['Result'] = self::RESULT_OK;
0282         $result['TotalRecordCount'] = $count;
0283 
0284         $this->_helper->json($result);
0285     }
0286 
0287     public function startImportAllAjaxAction()
0288     {
0289         global $_import_counter;
0290         global $_import_file_counter;
0291         global $_is_import_done;
0292 
0293         $_import_counter = 0;
0294         $_import_file_counter = 0;
0295         $_is_import_done = false;
0296 
0297         $this->_helper->layout->disableLayout();
0298         $params = $this->getAllParams();
0299         $cat_id = $params['cat_id'];
0300         $hiveCatTable = new Default_Model_DbTable_HiveContentCategory();
0301 
0302         $ocs_cat_id = $hiveCatTable->fetchOcsCategoryForHiveCategory($cat_id);
0303 
0304         if (!isset($ocs_cat_id)) {
0305             $info .= " - No Ocs-Category found!";
0306             exit;
0307         }
0308 
0309         $info = null;
0310 
0311         $importGalleryPics = false;
0312         if (isset($params['import_previews']) && $params['import_previews'] != '') {
0313             $importGalleryPics = true;
0314         }
0315         $info .= " - With Gallery Pics? " . $importGalleryPics;
0316 
0317         $importFiles = false;
0318         if (isset($params['import_files']) && $params['import_files'] != '') {
0319             $importFiles = true;
0320         }
0321         $info .= " - With Files? " . $importFiles;
0322 
0323         $startIndex = null;
0324         $limit = intval($params['limit']);
0325         if (empty($startIndex)) {
0326             $startIndex = 0;
0327         }
0328         if (empty($limit)) {
0329             $limit = 5;
0330         }
0331 
0332         $result = array();
0333         $contentTable = new Default_Model_DbTable_HiveContent();
0334         $memberTable = new Default_Model_Member();
0335         $projectTable = new Default_Model_Project();
0336         $hiveMemeberTable = new Default_Model_DbTable_HiveUser();
0337         try {
0338             $projects = $contentTable->fetchAllProjectsForCategory($cat_id, $startIndex, $limit);
0339 
0340             foreach ($projects as $project) {
0341                 $_import_counter++;
0342 
0343                 $info .= " ## Poject: id = " . $project['id'] . ", name = " . $project['name'] . "  ";
0344                 $start = microtime(true);
0345 
0346                 //1. Download/Upload Project-Picture
0347                 //$info .= " - Project-Picture ";
0348                 //$start = microtime(true);
0349                 //$cnFilePath = $this->uploadProjectPicture($project['id']);
0350                 $cnFilePath = $this->getProjectPicture($project['id']);
0351                 //$time_elapsed_secs = microtime(true) - $start;
0352                 //$info .= $time_elapsed_secs." secs";
0353 
0354                 //2. Create Ocs Project
0355                 //$info .= " - Project ";
0356                 //$start = microtime(true);
0357                 try {
0358                     $hiveUser = $hiveMemeberTable->fetchRow("login = '" . $project['user']."'");
0359                     if(!empty($hiveUser)) {
0360                         $projectId = $this->createUpdateOcsProjects($hiveUser, $project, $ocs_cat_id, $cnFilePath);
0361                     }
0362                 } catch (Exception $e) {
0363                     //Error: log error and go on
0364                     $error = array();
0365                     $error['import_error'] = $e;
0366                     $error['is_imported'] = 1;
0367                     $contentTable->update($error, 'id = ' . $project['id']);
0368                 }
0369                 //$time_elapsed_secs = microtime(true) - $start;
0370                 //$info .= $time_elapsed_secs." secs";
0371 
0372                 if ($projectId) {
0373 
0374                     //3. Upload files
0375                     if ($importFiles) {
0376                         $pploadError = null;
0377                         $info .= " - Files ";
0378                         $start = microtime(true);
0379                         try {
0380                             $_import_file_counter = $this->uploadFilesAndLinks($project, $projectId);
0381                         } catch (Exception $e) {
0382                             $pploadError .= $e;
0383                             $info .= $pploadError;
0384                         }
0385                         $info .= " - Files Uploaded: " . $_import_file_counter . " -  ";
0386                         $time_elapsed_secs = microtime(true) - $start;
0387                         $info .= $time_elapsed_secs . " secs";
0388                     } else {
0389                         $_import_file_counter = 1;
0390                     }
0391 
0392                     if (true) {
0393 
0394                         //4. Gallery Pics
0395                         if ($importGalleryPics) {
0396 
0397                             $info .= " - Gallery Pics ";
0398                             //$start = microtime(true);
0399                             $previewPicsArray = array();
0400                             if (!empty($project['preview1'])) {
0401                                 //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 1, $project['preview1']);
0402                                 $cnFilePathPre = $this->getPreviewPicture($project['id'], 1, $project['preview1']);
0403                                 //add preview pic to ocs-project
0404                                 if (!empty($cnFilePathPre)) {
0405                                     $previewPicsArray[] = $cnFilePathPre;
0406                                     $info .= " - PreviewPic1 ";
0407                                 }
0408                             }
0409                             if (!empty($project['preview2'])) {
0410                                 //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 2, $project['preview2']);
0411                                 $cnFilePathPre = $this->getPreviewPicture($project['id'], 2, $project['preview2']);
0412                                 if (!empty($cnFilePathPre)) {
0413                                     $previewPicsArray[] = $cnFilePathPre;
0414                                     $info .= " - PreviewPic2 ";
0415                                 }
0416                             }
0417                             if (!empty($project['preview3'])) {
0418                                 //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 3, $project['preview3']);
0419                                 $cnFilePathPre = $this->getPreviewPicture($project['id'], 3, $project['preview3']);
0420                                 if (!empty($cnFilePathPre)) {
0421                                     $previewPicsArray[] = $cnFilePathPre;
0422                                     $info .= " - PreviewPic3 ";
0423                                 }
0424                             }
0425                             if (!empty($previewPicsArray)) {
0426                                 $projectTable->updateGalleryPictures($projectId, $previewPicsArray);
0427                             }
0428                         }
0429                         //$time_elapsed_secs = microtime(true) - $start;
0430                         //$info .= $time_elapsed_secs." secs";
0431 
0432                         //5. Mark project as imported
0433                         //$info .= " - Mark project as imported ";
0434                         //$start = microtime(true);
0435                         $contentTable->update(array("is_imported" => 1), "id = " . $project['id']);
0436                         //$time_elapsed_secs = microtime(true) - $start;
0437                         //$info .= $time_elapsed_secs." secs";
0438 
0439                     } else {
0440                         $info .= " - NO Files Uploaded";
0441                         $contentTable->update(array(
0442                             "is_imported"  => 1,
0443                             "import_error" => "Error on fileupload to cc.ppload.com Exception: " . $pploadError
0444                         ), "id = " . $project['id']);
0445                     }
0446                 } else {
0447                     $info .= " - Project NOT created! ";
0448                 }
0449 
0450                 $time_elapsed_secs = microtime(true) - $start;
0451                 $info .= $time_elapsed_secs . " secs";
0452                 $info .= " - Done... ";
0453             }
0454             $result['Message'] = $info;
0455             $_is_import_done = true;
0456         } catch (Exception $e) {
0457             $this->view->info = $e->getMessage();
0458             $_is_import_done = true;
0459 
0460             $result['Result'] = self::RESULT_ERROR;
0461             $result['Message'] = "Error while loading from database:" . $e->getMessage();
0462         }
0463 
0464         $count = $contentTable->fetchCountProjectsForCategory($cat_id);
0465 
0466         $result['Result'] = self::RESULT_OK;
0467         $result['IsImportDone'] = $_is_import_done;
0468         $result['TotalCounter'] = $count;
0469         $result['ImportCounter'] = $_import_counter;
0470         $result['ImportFileCounter'] = $_import_file_counter;
0471         $result['limit'] = $limit;
0472         $result['offset'] = $startIndex + $limit;
0473 
0474         $this->_helper->json($result);
0475     }
0476 
0477     private function getProjectPicture($hiveProjectId)
0478     {
0479         $imageModel = new Default_Model_DbTable_Image();
0480         $path = 'https://cn.opendesktop.org/img/hive/content-pre1/' . $hiveProjectId . '-1.';
0481         $fileUrl = null;
0482         $fileExtention = null;
0483         $info = '';
0484 
0485         if ($this->check_img($path . 'gif')) {
0486             $fileUrl = ($path . 'gif');
0487             $fileExtention = 'gif';
0488         }
0489         if ($this->check_img($path . 'png')) {
0490             $fileUrl = ($path . 'png');
0491             $fileExtention = 'png';
0492         }
0493         if ($this->check_img($path . 'jpg')) {
0494             $fileUrl = ($path . 'jpg');
0495             $fileExtention = 'jpg';
0496         }
0497         if ($this->check_img($path . 'jpeg')) {
0498             $fileUrl = ($path . 'jpeg');
0499             $fileExtention = 'jpeg';
0500         }
0501         if ($this->check_img($path . 'mockup')) {
0502             $fileUrl = ($path . 'mockup');
0503             $fileExtention = 'mockup';
0504         }
0505         if ($this->check_img($path . 'GIF')) {
0506             $fileUrl = ($path . 'GIF');
0507             $fileExtention = 'GIF';
0508         }
0509         if ($this->check_img($path . 'PNG')) {
0510             $fileUrl = ($path . 'PNG');
0511             $fileExtention = 'PNG';
0512         }
0513         if ($this->check_img($path . 'JPG')) {
0514             $fileUrl = ($path . 'JPG');
0515             $fileExtention = 'JPG';
0516         }
0517         if ($this->check_img($path . 'JPEG')) {
0518             $fileUrl = ($path . 'JPEG');
0519             $fileExtention = 'JPEG';
0520         }
0521         if ($this->check_img($path . 'MOCKUP')) {
0522             $fileUrl = ($path . 'MOCKUP');
0523             $fileExtention = 'MOCKUP';
0524         }
0525         $cnFileUrl = null;
0526         if ($fileUrl != null) {
0527             $config = Zend_Registry::get('config');
0528             $cnFileUrl = '/hive/content-pre1/' . $hiveProjectId . '-1.' . $fileExtention;
0529 
0530             /**
0531              * //Workaround for gifs: don't use cache on cdn
0532              * $pos = strrpos($cnFileUrl, ".gif");
0533              * if ($pos>0) { // Beachten sie die drei Gleichheitszeichen
0534              * //gefunden ...
0535              * $cnFileUrl = str_replace('/cache/120x96-2', '', $cnFileUrl);
0536              * }
0537              **/
0538             $info .= "ImageUpload successful: " . $cnFileUrl;
0539         } else {
0540             $path = 'https://cn.opendesktop.org/img/hive/content-pre2/' . $hiveProjectId . '-2.';
0541             $fileUrl = null;
0542             $fileExtention = null;
0543             $info = '';
0544 
0545             if ($this->check_img($path . 'gif')) {
0546                 $fileUrl = ($path . 'gif');
0547                 $fileExtention = 'gif';
0548             }
0549             if ($this->check_img($path . 'png')) {
0550                 $fileUrl = ($path . 'png');
0551                 $fileExtention = 'png';
0552             }
0553             if ($this->check_img($path . 'jpg')) {
0554                 $fileUrl = ($path . 'jpg');
0555                 $fileExtention = 'jpg';
0556             }
0557             if ($this->check_img($path . 'jpeg')) {
0558                 $fileUrl = ($path . 'jpeg');
0559                 $fileExtention = 'jpeg';
0560             }
0561             if ($this->check_img($path . 'mockup')) {
0562                 $fileUrl = ($path . 'mockup');
0563                 $fileExtention = 'mockup';
0564             }
0565             if ($this->check_img($path . 'GIF')) {
0566                 $fileUrl = ($path . 'GIF');
0567                 $fileExtention = 'GIF';
0568             }
0569             if ($this->check_img($path . 'PNG')) {
0570                 $fileUrl = ($path . 'PNG');
0571                 $fileExtention = 'PNG';
0572             }
0573             if ($this->check_img($path . 'JPG')) {
0574                 $fileUrl = ($path . 'JPG');
0575                 $fileExtention = 'JPG';
0576             }
0577             if ($this->check_img($path . 'JPEG')) {
0578                 $fileUrl = ($path . 'JPEG');
0579                 $fileExtention = 'JPEG';
0580             }
0581             if ($this->check_img($path . 'MOCKUP')) {
0582                 $fileUrl = ($path . 'MOCKUP');
0583                 $fileExtention = 'MOCKUP';
0584             }
0585             $cnFileUrl = null;
0586             if ($fileUrl != null) {
0587                 $config = Zend_Registry::get('config');
0588                 $cnFileUrl = '/hive/content-pre2/' . $hiveProjectId . '-2.' . $fileExtention;
0589 
0590                 /**
0591                  * //Workaround for gifs: don't use cache on cdn
0592                  * $pos = strrpos($cnFileUrl, ".gif");
0593                  * if ($pos>0) { // Beachten sie die drei Gleichheitszeichen
0594                  * //gefunden ...
0595                  * $cnFileUrl = str_replace('/cache/120x96-2', '', $cnFileUrl);
0596                  * }
0597                  **/
0598                 $info .= "ImageUpload successful: " . $cnFileUrl;
0599             } else {
0600                 $path = 'https://cn.opendesktop.org/img/hive/content-pre3/' . $hiveProjectId . '-3.';
0601                 $fileUrl = null;
0602                 $fileExtention = null;
0603                 $info = '';
0604 
0605                 if ($this->check_img($path . 'gif')) {
0606                     $fileUrl = ($path . 'gif');
0607                     $fileExtention = 'gif';
0608                 }
0609                 if ($this->check_img($path . 'png')) {
0610                     $fileUrl = ($path . 'png');
0611                     $fileExtention = 'png';
0612                 }
0613                 if ($this->check_img($path . 'jpg')) {
0614                     $fileUrl = ($path . 'jpg');
0615                     $fileExtention = 'jpg';
0616                 }
0617                 if ($this->check_img($path . 'jpeg')) {
0618                     $fileUrl = ($path . 'jpeg');
0619                     $fileExtention = 'jpeg';
0620                 }
0621                 if ($this->check_img($path . 'mockup')) {
0622                     $fileUrl = ($path . 'mockup');
0623                     $fileExtention = 'mockup';
0624                 }
0625                 if ($this->check_img($path . 'GIF')) {
0626                     $fileUrl = ($path . 'GIF');
0627                     $fileExtention = 'GIF';
0628                 }
0629                 if ($this->check_img($path . 'PNG')) {
0630                     $fileUrl = ($path . 'PNG');
0631                     $fileExtention = 'PNG';
0632                 }
0633                 if ($this->check_img($path . 'JPG')) {
0634                     $fileUrl = ($path . 'JPG');
0635                     $fileExtention = 'JPG';
0636                 }
0637                 if ($this->check_img($path . 'JPEG')) {
0638                     $fileUrl = ($path . 'JPEG');
0639                     $fileExtention = 'JPEG';
0640                 }
0641                 if ($this->check_img($path . 'MOCKUP')) {
0642                     $fileUrl = ($path . 'MOCKUP');
0643                     $fileExtention = 'MOCKUP';
0644                 }
0645                 $cnFileUrl = null;
0646                 if ($fileUrl != null) {
0647                     $config = Zend_Registry::get('config');
0648                     $cnFileUrl = '/hive/content-pre3/' . $hiveProjectId . '-3.' . $fileExtention;
0649 
0650                     /**
0651                      * //Workaround for gifs: don't use cache on cdn
0652                      * $pos = strrpos($cnFileUrl, ".gif");
0653                      * if ($pos>0) { // Beachten sie die drei Gleichheitszeichen
0654                      * //gefunden ...
0655                      * $cnFileUrl = str_replace('/cache/120x96-2', '', $cnFileUrl);
0656                      * }
0657                      **/
0658                     $info .= "ImageUpload successful: " . $cnFileUrl;
0659                 } else {
0660                     $info .= "No preview pic";
0661                 }
0662             }
0663         }
0664 
0665         //var_dump($info);
0666         return $cnFileUrl;
0667     }
0668 
0669     private function check_img($file)
0670     {
0671         $response = false;
0672         $x = getimagesize($file);
0673 
0674         switch ($x['mime']) {
0675             case "image/gif":
0676                 $response = true;
0677                 break;
0678             case "image/jpeg":
0679                 $response = true;
0680                 break;
0681             case "image/png":
0682                 $response = true;
0683                 break;
0684             default:
0685                 $response = false;
0686                 break;
0687         }
0688 
0689         return $response;
0690     }
0691 
0692     private function createUpdateOcsProjects($hiveUser, $project, $ocs_cat_id, $cnFilePath)
0693     {
0694         $projectTable = new Default_Model_Project();
0695         $memberTable = new Default_Model_Member();
0696         $info = '';
0697         $projectId = null;
0698         $uuid = null;
0699         $count_likes = null;
0700         $count_dislikes = null;
0701         try {
0702             $projectsResult = $projectTable->fetchAll("source_type = 'project' AND source_id = 1 AND source_pk = " . $project['id']);
0703 
0704             if (count($projectsResult) > 0) {
0705                 $info .= "Project load successfull: " . $projectsResult[0]['project_id'];
0706                 $projectId = $projectsResult[0]['project_id'];
0707                 $uuid = $projectsResult[0]['uuid'];
0708             }
0709         } catch (Exception $e) {
0710             $info .= (__FUNCTION__ . '::ERROR load Project: ' . $e);
0711         }
0712 
0713         $memberId = null;
0714         try {
0715             $member = $memberTable->fetchMemberFromHiveUserId($hiveUser['id']);
0716             if ($member) {
0717                 $info .= "Member load successfull: " . $member['member_id'];
0718                 $memberId = $member['member_id'];
0719             } else {
0720                 throw new Exception(__FUNCTION__ . '::ERROR load member: Member not found: Username = ' . $project['user']);
0721             }
0722         } catch (Exception $e) {
0723             throw new Exception(__FUNCTION__ . '::ERROR load member: ' . $e);
0724         }
0725 
0726         $projectObj = array();
0727         $projectObj['member_id'] = $memberId;
0728         $projectObj['content_type'] = 'text';
0729         $projectObj['project_category_id'] = $ocs_cat_id;
0730         $projectObj['hive_category_id'] = $project['type'];
0731 
0732         //Project not deleted?
0733         if ($project['deletedat'] == 0 && $project['status'] == 1) {
0734             $projectObj['is_deleted'] = 0;
0735             $projectObj['deleted_at'] = $project['deleted_at'];
0736             $projectObj['is_active'] = 1;
0737             $projectObj['status'] = 100;
0738         } else {
0739             $projectObj['is_deleted'] = 1;
0740             $projectObj['deleted_at'] = $project['deleted_at'];
0741             $projectObj['is_active'] = 0;
0742             $projectObj['status'] = 30;
0743         }
0744 
0745         $projectObj['pid'] = null;
0746         $projectObj['type_id'] = 1;
0747         $projectObj['title'] = $project['name_utf8'];
0748         $projectObj['description'] = $project['description_utf8'];
0749         $projectObj['version'] = $project['version'];
0750         $projectObj['image_big'] = $cnFilePath;
0751         $projectObj['image_small'] = $cnFilePath;
0752         $projectObj['start_date'] = null;
0753         $projectObj['content_url'] = null;
0754         $projectObj['created_at'] = $project['created_at'];
0755         $projectObj['changed_at'] = $project['changed_at'];
0756         $projectObj['creator_id'] = $memberId;
0757 
0758         $projectObj['count_downloads_hive'] = $project['downloads'];
0759 
0760         //      $projectObj['facebook_code'] = null;
0761         //      $projectObj['twitter_code'] = null;
0762         //      $projectObj['google_code'] = null;
0763         //      $projectObj['link_1'] = null;
0764         //      $projectObj['embed_code'] = null;
0765         //      $projectObj['ppload_collection_id'] = null;
0766         //      $projectObj['validated'] = null;
0767         //      $projectObj['validated_at'] = null;
0768         //      $projectObj['featured'] = null;
0769         //      $projectObj['amount'] = null;
0770         //      $projectObj['amount_period'] = null;
0771         //      $projectObj['claimable'] = null;
0772         //      $projectObj['claimed_by_member'] = null;
0773         $projectObj['source_id'] = 1;
0774         $projectObj['source_pk'] = $project['id'];
0775         $projectObj['source_type'] = 'project';
0776 
0777         if (!isset($uuid)) {
0778             $uuid = Local_Tools_UUID::generateUUID();
0779             $projectObj['uuid'] = $uuid;
0780         }
0781 
0782         if ($projectId) {
0783             try {
0784                 $votingTable = new Default_Model_DbTable_ProjectRating();
0785 
0786                 $votingTable->delete('member_id = 0 AND project_id = ' . $projectId);
0787                 //insert the old hive votings
0788                 $votearray = array();
0789                 $votearray['member_id'] = 0;
0790                 $votearray['project_id'] = $projectId;
0791                 $votearray['user_like'] = $project['scoregood'];
0792                 $votearray['user_dislike'] = $project['scorebad'];
0793                 $newVote = $votingTable->save($votearray);
0794 
0795                 $ratingSum = $votingTable->fetchRating($projectId);
0796                 $count_likes = $ratingSum['count_likes'];
0797                 $count_dislikes = $ratingSum['count_dislikes'];
0798                 $projectObj['count_likes'] = $count_likes;
0799                 $projectObj['count_dislikes'] = $count_dislikes;
0800 
0801                 //update project
0802                 $updateCount = $projectTable->update($projectObj, "project_id = " . $projectId);
0803                 $info .= "Update Project successful: Updated rows: " . $updateCount;
0804 
0805                 //update changelog?
0806                 if (isset($project['changelog']) && $project['changelog'] != '') {
0807                     $projectUpdatesTable = new Default_Model_ProjectUpdates();
0808                     $projectUpdate =
0809                         $projectUpdatesTable->fetchRow('project_id = ' . $projectId . ' AND source_id = 1 AND source_pk = '
0810                             . $project['id']);
0811                     if ($projectUpdate) {
0812                         $projectUpdate = $projectUpdate->toArray();
0813                         if ($projectUpdate['text'] != $project['changelog']) {
0814                             $projectUpdate['text'] = $project['changelog_utf8'];
0815                             $projectUpdate['changed_at'] = $projectObj['changed_at'];
0816                             $projectUpdatesTable->save($projectUpdate);
0817                         }
0818                     } else {
0819                         $data = array();
0820                         $data['project_id'] = $projectId;
0821                         $data['member_id'] = $projectObj['member_id'];
0822                         $data['public'] = 1;
0823                         $data['text'] = $project['changelog_utf8'];
0824                         $data['created_at'] = $projectObj['created_at'];
0825                         $data['changed_at'] = $projectObj['changed_at'];
0826                         $data['source_id'] = 1;
0827                         $data['source_pk'] = $project['id'];
0828 
0829                         $projectUpdatesTable->save($data);
0830                     }
0831                 }
0832             } catch (Exception $e) {
0833                 throw new Exception(__FUNCTION__ . '::ERROR update project: ' . $e);
0834             }
0835         } else {
0836             try {
0837                 //Create new project
0838                 $newProjectObj = $projectTable->save($projectObj);
0839                 $info .= "Create Project successful: " . $newProjectObj['project_id'];
0840                 $projectId = $newProjectObj['project_id'];
0841 
0842                 $votingTable = new Default_Model_DbTable_ProjectRating();
0843 
0844                 $votingTable->delete('member_id = 0 AND project_id = ' . $projectId);
0845                 //insert the old hive votings
0846                 $votearray = array();
0847                 $votearray['member_id'] = 0;
0848                 $votearray['project_id'] = $projectId;
0849                 $votearray['user_like'] = $project['scoregood'];
0850                 $votearray['user_dislike'] = $project['scorebad'];
0851                 $newVote = $votingTable->save($votearray);
0852 
0853                 $ratingSum = $votingTable->fetchRating($projectId);
0854                 $count_likes = $ratingSum['count_likes'];
0855                 $count_dislikes = $ratingSum['count_dislikes'];
0856                 $projectObj['count_likes'] = $count_likes;
0857                 $projectObj['count_dislikes'] = $count_dislikes;
0858 
0859                 //update project
0860                 $updateCount = $projectTable->update($projectObj, "project_id = " . $projectId);
0861 
0862                 //Add changelog
0863                 if (isset($project['changelog']) && $project['changelog'] != '') {
0864                     $projectUpdatesTable = new Default_Model_ProjectUpdates();
0865                     $data = array();
0866                     $data['project_id'] = $projectId;
0867                     $data['member_id'] = $projectObj['member_id'];
0868                     $data['public'] = 1;
0869                     $data['text'] = $project['changelog'];
0870                     $data['created_at'] = $projectObj['created_at'];
0871                     $data['changed_at'] = $projectObj['changed_at'];
0872                     $data['source_id'] = 1;
0873                     $data['source_pk'] = $project['id'];
0874 
0875                     $projectUpdatesTable->save($data);
0876                 }
0877 
0878                 if (null == $newProjectObj || null == $newProjectObj['project_id']) {
0879                     throw new Exception(__FUNCTION__ . '::ERROR save project: ' . implode(",", $newProjectObj));
0880                 }
0881             } catch (Exception $e) {
0882                 throw new Exception(__FUNCTION__ . '::ERROR save project: ' . $e);
0883             }
0884         }
0885 
0886         return $projectId;
0887     }
0888 
0889     private function uploadFilesAndLinks($project, $projectId)
0890     {
0891         $_import_file_counter = 0;
0892         //First real files
0893         $file1 = null;
0894         $info = '';
0895 
0896         //Clean up old collection data
0897         $pploadApi = new Ppload_Api(array(
0898             'apiUri'   => PPLOAD_API_URI,
0899             'clientId' => PPLOAD_CLIENT_ID,
0900             'secret'   => PPLOAD_SECRET
0901         ));
0902 
0903         $projectTable = new Default_Model_DbTable_Project();
0904         $projectData = $projectTable->find($projectId)->current();
0905         $oldFiles = array();
0906 
0907         if ($projectData->ppload_collection_id) {
0908             $param = array();
0909             $param['collection_id'] = $projectData->ppload_collection_id;
0910             $oldFiles = $pploadApi->getFiles($param);
0911 
0912             $pploadApi->deleteCollection($projectData->ppload_collection_id);
0913             $projectData->ppload_collection_id = null;
0914             $projectTable->save($projectData->toArray());
0915         }
0916 
0917         if ($project['downloadtyp1'] == 0) {
0918             //a real file
0919             $file1 = $project['download1'];
0920             //$file1 = str_replace(' ', '%20', $file1);
0921             $pploadError = null;
0922             if (!empty($file1)) {
0923                 try {
0924                     $downloadCounter = 0;
0925                     if (isset($oldFiles->files)) {
0926                         foreach ($oldFiles->files as $oldFile) {
0927                             $filename = $this->getFilenameFromUrl($this->_HIVE_BASE_URL . '/CONTENT/content-files/' . $file1);
0928                             //var_dump('check file: '. $oldFile->name . ' AND ' . $filename);
0929                             if ($oldFile->name == $filename) {
0930                                 $downloadCounter = $oldFile->downloaded_count;
0931                             }
0932                         }
0933                     }
0934 
0935                     //$uploadFileResult = $this->uploadFileToPpload($projectId, 'http://cp1.hive01.com/CONTENT/content-files/'.$file1);
0936                     $uploadFileResult = $this->saveFileInPpload($projectId, $project['downloadname1'], $project['licensetype'],
0937                         base64_encode($project['license']), $downloadCounter,
0938                         $this->_HIVE_BASE_URL . '/CONTENT/content-files/' . $file1);
0939                     $info .= "Upload file successful: " . $uploadFileResult;
0940                     if ($uploadFileResult == true) {
0941                         $_import_file_counter++;
0942                     } else {
0943                         throw new Exception(__FUNCTION__ . '::ERROR Upload file: ' . $uploadFileResult);
0944                     }
0945                 } catch (Exception $e) {
0946                     throw new Exception(__FUNCTION__ . '::ERROR Upload file: ' . $e);
0947                 }
0948             }
0949         } else {
0950             //a link
0951             try {
0952                 $link1 = $project['downloadlink1'];
0953                 if ($link1 != 'http://' && !empty($link1)) {
0954                     $link1 = urlencode($link1);
0955                     $linkName1 = $project['downloadname1'];
0956                     if (empty($linkName1)) {
0957                         $linkName1 = "link";
0958                     }
0959                     $downloadCounter = 0;
0960                     $uploadFileResult = $this->saveFileInPpload($projectId, $project['downloadname1'], $project['licensetype'],
0961                         base64_encode($project['license']), 0, $this->_HIVE_BASE_URL . '/CONTENT/content-files/link', $link1,
0962                         $linkName1);
0963                     $info .= "Upload file successful: " . $uploadFileResult;
0964                     if ($uploadFileResult == true) {
0965                         $_import_file_counter++;
0966                     }
0967                 }
0968             } catch (Exception $e) {
0969                 throw new Exception(__FUNCTION__ . '::ERROR Upload file: ' . $e);
0970             }
0971         }
0972 
0973         //Then links...
0974         for ($i = 2; $i <= 12; $i++) {
0975             try {
0976                 $link1 = $project['downloadlink' . $i];
0977                 if ($link1 != 'http://' && !empty($link1)) {
0978                     $link1 = urlencode($link1);
0979                     $linkName1 = $project['downloadname' . $i];
0980                     if (empty($linkName1)) {
0981                         $linkName1 = "link";
0982                     }
0983                     $downloadCounter = 0;
0984                     $uploadFileResult = $this->saveFileInPpload($projectId, $project['downloadname' . $i], $project['licensetype'],
0985                         base64_encode($project['license']), 0, $this->_HIVE_BASE_URL . '/CONTENT/content-files/link', $link1,
0986                         $linkName1);
0987                     $info .= "Upload file successful: " . $link1;
0988                     if ($uploadFileResult == true) {
0989                         $_import_file_counter++;
0990                     }
0991                 }
0992             } catch (Exception $e) {
0993                 //throw new Exception(__FUNCTION__ . '::ERROR Upload file: ' . $e);
0994             }
0995         }
0996 
0997         if ($_import_file_counter == 0) {
0998             return $info;
0999         }
1000 
1001         return $_import_file_counter;
1002     }
1003 
1004     private function getFilenameFromUrl($url)
1005     {
1006         $x = pathinfo($url);
1007         $fileName = $x['basename'];
1008 
1009         return $fileName;
1010     }
1011 
1012     private function saveFileInPpload(
1013         $projectId,
1014         $fileDescription,
1015         $licensetype,
1016         $license,
1017         $downloads,
1018         $fileUrl,
1019         $link = null,
1020         $linkName = null
1021     ) {
1022         $pploadInfo = "Start upload file " . $fileUrl . " for project " . $projectId;
1023 
1024         $projectTable = new Default_Model_DbTable_Project();
1025         $projectData = $projectTable->find($projectId)->current();
1026 
1027         if ($projectData) {
1028             $pploadInfo .= "Project found! ProjectId: " . $projectData->project_id . ", MemberId: " . $projectData->member_id;
1029         } else {
1030             $pploadInfo .= "ERROR::Project not found: " . $projectId;
1031             throw new Exception($pploadInfo);
1032 
1033             return false;
1034         }
1035 
1036         $filename = null;
1037         if (!empty($link)) {
1038             //take emtpy dummy file
1039             $filename = $this->getFilenameFromUrl($fileUrl);
1040             $tmpFilepath = "/hive/H01/CONTENT/content-files/link";
1041             $tmpFilename = $linkName;
1042         } else {
1043             //upload to ocs-www
1044             $filename = $this->getFilenameFromUrl($fileUrl);
1045             $tmpFilepath = "/hive/H01/CONTENT/content-files/" . $filename;
1046             $tmpFilename = $filename;
1047             if (!empty($filename)) {
1048                 $pploadInfo .= "FileName found: " . $filename;
1049             } else {
1050                 $pploadInfo .= "ERROR::FileName not found: " . $filename;
1051                 throw new Exception($pploadInfo);
1052 
1053                 return false;
1054             }
1055         }
1056 
1057         $pploadApi = new Ppload_Api(array(
1058             'apiUri'   => PPLOAD_API_URI,
1059             'clientId' => PPLOAD_CLIENT_ID,
1060             'secret'   => PPLOAD_SECRET
1061         ));
1062 
1063         $fileRequest = array(
1064             'local_file_path' => $tmpFilepath,
1065             'local_file_name' => $tmpFilename,
1066             'owner_id'        => $projectData->member_id
1067         );
1068         if ($projectData->ppload_collection_id) {
1069             // Append to existing collection
1070             $fileRequest['collection_id'] = $projectData->ppload_collection_id;
1071         }
1072         if (!empty($fileDescription)) {
1073             $fileRequest['description'] = mb_substr($fileDescription, 0, 140);
1074         }
1075         if (!empty($downloads)) {
1076             $fileRequest['downloaded_count'] = $downloads;
1077         }
1078         $tags = '';
1079         if (!empty($link)) {
1080             $tags .= "link##" . $link . ',';
1081         }
1082         if (!empty($licensetype)) {
1083             $tags .= "licensetype-" . $licensetype . ',';
1084         }
1085         if (!empty($license)) {
1086             $tags .= "license##" . $license . ',';
1087         }
1088         if (!empty($tags)) {
1089             $fileRequest['tags'] = $tags;
1090         }
1091 
1092         //upload to ppload
1093         $fileResponse = $pploadApi->postFile($fileRequest);
1094 
1095         if (!empty($fileResponse)) {
1096             $pploadInfo .= "File uploaded to ppload! ";
1097         } else {
1098             $pploadInfo .= "ERROR::File NOT uploaded to ppload! Response: " . $fileResponse;
1099             throw new Exception($pploadInfo);
1100 
1101             return $pploadInfo;
1102         }
1103 
1104         //delete tmpFile
1105         //unlink($tmpFilename);
1106 
1107         //unlink($tmpFilename);
1108 
1109         if (!empty($fileResponse->file->collection_id)) {
1110             $pploadInfo .= "CollectionId: " . $fileResponse->file->collection_id;
1111             if (!$projectData->ppload_collection_id) {
1112                 // Save collection ID
1113                 $projectData->ppload_collection_id = $fileResponse->file->collection_id;
1114                 //$projectData->changed_at = new Zend_Db_Expr('NOW()');
1115                 $projectData->save();
1116 
1117                 // Update profile information
1118                 $memberTable = new Default_Model_DbTable_Member();
1119                 $memberSettings = $memberTable->find($projectData->member_id)->current();
1120                 $mainproject = $projectTable->find($memberSettings->main_project_id)->current();
1121                 $profileName = '';
1122                 if ($memberSettings->firstname
1123                     || $memberSettings->lastname) {
1124                     $profileName = trim($memberSettings->firstname . ' ' . $memberSettings->lastname);
1125                 } else {
1126                     if ($memberSettings->username) {
1127                         $profileName = $memberSettings->username;
1128                     }
1129                 }
1130                 $profileRequest = array(
1131                     'owner_id'    => $projectData->member_id,
1132                     'name'        => $profileName,
1133                     'email'       => $memberSettings->mail,
1134                     'homepage'    => $memberSettings->link_website,
1135                     'description' => $mainproject->description
1136                 );
1137                 $profileResponse = $pploadApi->postProfile($profileRequest);
1138                 // Update collection information
1139                 $collectionCategory = $projectData->project_category_id;
1140                 if (Default_Model_Project::PROJECT_ACTIVE == $projectData->status) {
1141                     $collectionCategory .= '-published';
1142                 }
1143                 $collectionRequest = array(
1144                     'title'       => $projectData->title,
1145                     'description' => $projectData->description,
1146                     'category'    => $collectionCategory
1147                 );
1148                 $collectionResponse = $pploadApi->putCollection($projectData->ppload_collection_id, $collectionRequest);
1149                 // Store product image as collection thumbnail
1150                 $this->_updatePploadMediaCollectionthumbnail($projectData);
1151             }
1152 
1153             //return $fileResponse->file;
1154             return true;
1155         } else {
1156             //return false;
1157             $pploadInfo .= "ERROR::No CollectionId in ppload-file! Response Status: " . json_encode($fileResponse);
1158             throw new Exception($pploadInfo);
1159 
1160             return $pploadInfo;
1161         }
1162 
1163         return $pploadInfo;
1164     }
1165 
1166     private function _updatePploadMediaCollectionthumbnail($projectData)
1167     {
1168         if (empty($projectData->ppload_collection_id)
1169             || empty($projectData->image_small)) {
1170             return false;
1171         }
1172 
1173         $pploadApi = new Ppload_Api(array(
1174             'apiUri'   => "https://dl.opendesktop.org/api/",
1175             'clientId' => "1387085484",
1176             'secret'   => "34gtd3w024deece710e1225d7bfe5e7337b1f45d"
1177         ));
1178 
1179         $filename = sys_get_temp_dir() . '/' . $projectData->image_small;
1180         if (false === file_exists(dirname($filename))) {
1181             mkdir(dirname($filename), 0777, true);
1182         }
1183         /**
1184          * $viewHelperImage = new Default_View_Helper_Image();
1185          * $uri = $viewHelperImage->Image(
1186          * $projectData->image_small,
1187          * array(
1188          * 'width' => 600,
1189          * 'height' => 600
1190          * )
1191          * );**/
1192         $uri = $this->_OCS_CN_FILE_SYNC_URL . '/cache/600x600/img' . $projectData->image_small;
1193 
1194         file_put_contents($filename, file_get_contents($uri));
1195 
1196         $mediaCollectionthumbnailResponse =
1197             $pploadApi->postMediaCollectionthumbnail($projectData->ppload_collection_id, array('file' => $filename));
1198 
1199         unlink($filename);
1200 
1201         if (isset($mediaCollectionthumbnailResponse->status)
1202             && $mediaCollectionthumbnailResponse->status == 'success') {
1203             return true;
1204         }
1205 
1206         return false;
1207     }
1208 
1209     private function getPreviewPicture($hiveProjectId, $previewNum, $hivePreviewFileExtension)
1210     {
1211         $imageModel = new Default_Model_DbTable_Image();
1212 
1213         $config = Zend_Registry::get('config');
1214 
1215         $fileName = $hiveProjectId . '-' . $previewNum . '.' . $hivePreviewFileExtension;
1216         $cnFileUrl = '/hive/content-pre' . $previewNum . '/' . $fileName;
1217 
1218         /**
1219          * if ($this->check_img($cnFileUrl)) {
1220          * if($hivePreviewFileExtension == 'gif') {
1221          * $cnFileUrl = $config->images->media->server.'/img/hive/content-pre'.$previewNum.'/'.$fileName;
1222          * }
1223          * }
1224          **/
1225         return $cnFileUrl;
1226     }
1227 
1228     public function startImportAjaxAction()
1229     {
1230         global $_import_counter;
1231         global $_import_file_counter;
1232         global $_is_import_done;
1233 
1234         $_import_counter = 0;
1235         $_import_file_counter = 0;
1236         $_is_import_done = false;
1237 
1238         $this->_helper->layout->disableLayout();
1239         $params = $this->getAllParams();
1240         $cat_id = $params['cat_id'];
1241         $ocs_cat_id = $params['ocs_cat_id'];
1242 
1243         $info = null;
1244 
1245         $importGalleryPics = false;
1246         if (isset($params['import_previews'])) {
1247             $importGalleryPics = true;
1248         }
1249         $info .= " - With Gallery Pics? " . $importGalleryPics;
1250 
1251         $importFiles = false;
1252         if (isset($params['import_files'])) {
1253             $importFiles = true;
1254         }
1255         $info .= " - With Files? " . $importFiles;
1256 
1257         $startIndex = null;
1258         $limit = intval($params['limit']);
1259         if (empty($startIndex)) {
1260             $startIndex = 0;
1261         }
1262         if (empty($limit)) {
1263             $limit = 5;
1264         }
1265 
1266         $result = array();
1267         $contentTable = new Default_Model_DbTable_HiveContent();
1268         $memberTable = new Default_Model_Member();
1269         $projectTable = new Default_Model_Project();
1270         $hiveMemeberTable = new Default_Model_DbTable_HiveUser();
1271         
1272         try {
1273             $projects = $contentTable->fetchAllProjectsForCategory($cat_id, $startIndex, $limit);
1274 
1275             foreach ($projects as $project) {
1276                 $_import_counter++;
1277 
1278                 $info .= " ## Poject: id = " . $project['id'] . ", name = " . $project['name'] . "  ";
1279                 $start = microtime(true);
1280 
1281                 //1. Download/Upload Project-Picture
1282                 //$info .= " - Project-Picture ";
1283                 //$start = microtime(true);
1284                 //$cnFilePath = $this->uploadProjectPicture($project['id']);
1285                 $cnFilePath = $this->getProjectPicture($project['id']);
1286                 //$time_elapsed_secs = microtime(true) - $start;
1287                 //$info .= $time_elapsed_secs." secs";
1288 
1289                 //2. Create ocs Project
1290                 //$info .= " - Project ";
1291                 //$start = microtime(true);
1292                 try {
1293                     $hiveUser = $hiveMemeberTable->fetchRow('user = ' . $project['user']);
1294                     if(!empty($hiveUser)) {
1295                         $projectId = $this->createUpdateOcsProjects($hiveUser, $project, $ocs_cat_id, $cnFilePath);
1296                     }
1297                 } catch (Exception $e) {
1298                     //Error: log error and go on
1299                     $error = array();
1300                     $error['import_error'] = $e;
1301                     $error['is_imported'] = 1;
1302                     $contentTable->update($error, 'id = ' . $project['id']);
1303                 }
1304                 //$time_elapsed_secs = microtime(true) - $start;
1305                 //$info .= $time_elapsed_secs." secs";
1306 
1307                 if ($projectId) {
1308 
1309                     //3. Upload files
1310                     if ($importFiles) {
1311                         $pploadError = null;
1312                         $info .= " - Files ";
1313                         $start = microtime(true);
1314                         try {
1315                             $_import_file_counter = $this->uploadFilesAndLinks($project, $projectId);
1316                         } catch (Exception $e) {
1317                             $pploadError .= $e;
1318                         }
1319                         $info .= " - Files Uploaded: " . $_import_file_counter . " -  ";
1320                         $time_elapsed_secs = microtime(true) - $start;
1321                         $info .= $time_elapsed_secs . " secs";
1322                     } else {
1323                         $_import_file_counter = 1;
1324                     }
1325                     if ($_import_file_counter > 0) {
1326 
1327                         //4. Gallery Pics
1328                         if ($importGalleryPics) {
1329 
1330                             $info .= " - Gallery Pics ";
1331                             //$start = microtime(true);
1332                             $previewPicsArray = array();
1333                             if (!empty($project['preview1'])) {
1334                                 //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 1, $project['preview1']);
1335                                 $cnFilePathPre = $this->getPreviewPicture($project['id'], 1, $project['preview1']);
1336                                 //add preview pic to ocs-project
1337                                 if (!empty($cnFilePathPre)) {
1338                                     $previewPicsArray[] = $cnFilePathPre;
1339                                     $info .= " - PreviewPic1 ";
1340                                 }
1341                             }
1342                             if (!empty($project['preview2'])) {
1343                                 //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 2, $project['preview2']);
1344                                 $cnFilePathPre = $this->getPreviewPicture($project['id'], 2, $project['preview2']);
1345                                 if (!empty($cnFilePathPre)) {
1346                                     $previewPicsArray[] = $cnFilePathPre;
1347                                     $info .= " - PreviewPic2 ";
1348                                 }
1349                             }
1350                             if (!empty($project['preview3'])) {
1351                                 //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 3, $project['preview3']);
1352                                 $cnFilePathPre = $this->getPreviewPicture($project['id'], 3, $project['preview3']);
1353                                 if (!empty($cnFilePathPre)) {
1354                                     $previewPicsArray[] = $cnFilePathPre;
1355                                     $info .= " - PreviewPic3 ";
1356                                 }
1357                             }
1358                             if (!empty($previewPicsArray)) {
1359                                 $projectTable->updateGalleryPictures($projectId, $previewPicsArray);
1360                             }
1361                         }
1362                         //$time_elapsed_secs = microtime(true) - $start;
1363                         //$info .= $time_elapsed_secs." secs";
1364 
1365                         //5. Mark project as imported
1366                         //$info .= " - Mark project as imported ";
1367                         //$start = microtime(true);
1368                         $contentTable->update(array("is_imported" => 1), "id = " . $project['id']);
1369                         //$time_elapsed_secs = microtime(true) - $start;
1370                         //$info .= $time_elapsed_secs." secs";
1371 
1372                     } else {
1373                         $info .= " - NO Files Uploaded";
1374                         $contentTable->update(array(
1375                             "is_imported"  => 1,
1376                             "import_error" => "Error on fileupload to cc.ppload.com Exception: " . $pploadError
1377                         ), "id = " . $project['id']);
1378                     }
1379                 } else {
1380                     $info .= " - Project NOT created! ";
1381                 }
1382 
1383                 $time_elapsed_secs = microtime(true) - $start;
1384                 $info .= $time_elapsed_secs . " secs";
1385                 $info .= " - Done... ";
1386             }
1387             $result['Message'] = $info;
1388             $_is_import_done = true;
1389         } catch (Exception $e) {
1390             $this->view->info = $e->getMessage();
1391             $_is_import_done = true;
1392 
1393             $result['Result'] = self::RESULT_ERROR;
1394             $result['Message'] = "Fehler bei laden aus DB:" . $e->getMessage();
1395         }
1396 
1397         $count = $contentTable->fetchCountProjectsForCategory($cat_id);
1398 
1399         $result['Result'] = self::RESULT_OK;
1400         $result['IsImportDone'] = $_is_import_done;
1401         $result['TotalCounter'] = $count;
1402         $result['ImportCounter'] = $_import_counter;
1403         $result['ImportFileCounter'] = $_import_file_counter;
1404         $result['limit'] = $limit;
1405         $result['offset'] = $startIndex + $limit;
1406 
1407         $this->_helper->json($result);
1408     }
1409 
1410     public function importStatusAjaxAction()
1411     {
1412         $this->_helper->layout->disableLayout();
1413         $cat_id = (int)$this->getParam('cat_id');
1414         $contentTable = new Default_Model_DbTable_HiveContent();
1415         $countAll = $contentTable->fetchCountAllProjectsForCategory($cat_id);
1416         $countImported = $contentTable->fetchCountProjectsForCategory($cat_id);
1417 
1418         $result = array();
1419         $result['Result'] = self::RESULT_OK;
1420         $result['IsImportDone'] = ($countAll == $countImported);
1421         $result['ImportCounter'] = $countImported;
1422         $result['ProjectCounter'] = $countAll;
1423 
1424         $this->_helper->json($result);
1425     }
1426 
1427     private function saveImageOnMediaServer($filePathName, $fileExtention, $content_type)
1428     {
1429         if (empty($filePathName)) {
1430             throw new Exception(__FUNCTION__ . "ERROR::No image path");
1431         }
1432         $srcPathOnMediaServer = $this->sendImageToMediaServer($filePathName, $content_type);
1433         if (!$srcPathOnMediaServer) {
1434             throw new Exception("Error in upload to CDN-Server. \n Server message:\n" . $this->_errorMsg);
1435         }
1436 
1437         return $srcPathOnMediaServer;
1438     }
1439 
1440     protected function sendImageToMediaServer($fullFilePath, $mimeType)
1441     {
1442         $config = Zend_Registry::get('config');
1443         $url = $config->images->media->upload;
1444 
1445         $client = new Zend_Http_Client($url);
1446         $client->setFileUpload($fullFilePath, basename($fullFilePath), null, $mimeType);
1447         $response = $client->request('POST');
1448 
1449         if ($response->getStatus() > 200) {
1450             $this->_errorMsg = $response->getBody();
1451 
1452             return null;
1453         }
1454 
1455         return $response->getBody();
1456     }
1457 
1458     private function uploadFileToPpload($projectId, $fileUrl, $link = null, $linkName = null)
1459     {
1460         $pploadInfo = "Start upload file " . $fileUrl . " for project " . $projectId;
1461 
1462         $projectTable = new Default_Model_DbTable_Project();
1463         $projectData = $projectTable->find($projectId)->current();
1464 
1465         if ($projectData) {
1466             $pploadInfo .= "Project found! ProjectId: " . $projectData->project_id . ", MemberId: " . $projectData->member_id;
1467         } else {
1468             $pploadInfo .= "ERROR::Project not found: " . $projectId;
1469             throw new Exception($pploadInfo);
1470 
1471             return false;
1472         }
1473 
1474         //upload to ocs-www
1475         $file = $this->file_get_contents_curl($fileUrl);
1476         if ($file) {
1477             $pploadInfo .= "File found!";
1478         } else {
1479             $pploadInfo .= "ERROR::File not found: " . $fileUrl;
1480             throw new Exception($pploadInfo);
1481 
1482             return false;
1483         }
1484         $filename = null;
1485         if (!empty($link)) {
1486             //take emtpy dummy file
1487             $filename = $linkName;
1488         } else {
1489             //upload to ocs-www
1490             $filename = $this->getFilenameFromUrl($fileUrl);
1491             if (!empty($filename)) {
1492                 $pploadInfo .= "FileName found: " . $filename;
1493             } else {
1494                 $pploadInfo .= "ERROR::FileName not found: " . $filename;
1495                 throw new Exception($pploadInfo);
1496 
1497                 return false;
1498             }
1499         }
1500         file_put_contents(IMAGES_UPLOAD_PATH . 'tmp/' . $filename, $file);
1501 
1502         $tmpFilename = IMAGES_UPLOAD_PATH . 'tmp/' . $filename;
1503 
1504         $mime = mime_content_type($tmpFilename);
1505         if (empty($mime) || $mime == 'text/html') {
1506             $pploadInfo .= "ERROR::File NOT found!";
1507             throw new Exception($pploadInfo);
1508 
1509             return false;
1510         }
1511 
1512         if (file_exists($tmpFilename)) {
1513             $pploadInfo .= "File uploaded to ocs-www!";
1514         } else {
1515             $pploadInfo .= "ERROR::File NOT uploaded to ocs-www!";
1516             throw new Exception($pploadInfo);
1517 
1518             return false;
1519         }
1520 
1521         $pploadApi = new Ppload_Api(array(
1522             'apiUri'   => PPLOAD_API_URI,
1523             'clientId' => PPLOAD_CLIENT_ID,
1524             'secret'   => PPLOAD_SECRET
1525         ));
1526 
1527         $fileRequest = array(
1528             'file'     => $tmpFilename,
1529             'owner_id' => $projectData->member_id
1530         );
1531         if ($projectData->ppload_collection_id) {
1532             // Append to existing collection
1533             $fileRequest['collection_id'] = $projectData->ppload_collection_id;
1534         }
1535         //if (isset($fileDescription)) {
1536         //  $fileRequest['description'] = mb_substr($fileDescription, 0, 140);
1537         //}
1538         if (!empty($link)) {
1539             $fileRequest['tags'] = "link##" . $link;
1540         }
1541 
1542         //upload to ppload
1543         $fileResponse = $pploadApi->postFile($fileRequest);
1544 
1545         if (!empty($fileResponse)) {
1546             $pploadInfo .= "File uploaded to ppload! ";
1547         } else {
1548             $pploadInfo .= "ERROR::File NOT uploaded to ppload! Response: " . $fileResponse;
1549             throw new Exception($pploadInfo);
1550 
1551             return $pploadInfo;
1552         }
1553 
1554         //delete tmpFile
1555         unlink($tmpFilename);
1556 
1557         //unlink($tmpFilename);
1558 
1559         if (!empty($fileResponse->file->collection_id)) {
1560             $pploadInfo .= "CollectionId: " . $fileResponse->file->collection_id;
1561             if (!$projectData->ppload_collection_id) {
1562                 // Save collection ID
1563                 $projectData->ppload_collection_id = $fileResponse->file->collection_id;
1564                 //$projectData->changed_at = new Zend_Db_Expr('NOW()');
1565                 $projectData->save();
1566 
1567                 // Update profile information
1568                 $memberTable = new Default_Model_DbTable_Member();
1569                 $memberSettings = $memberTable->find($projectData->member_id)->current();
1570                 $mainproject = $projectTable->find($memberSettings->main_project_id)->current();
1571                 $profileName = '';
1572                 if ($memberSettings->firstname
1573                     || $memberSettings->lastname) {
1574                     $profileName = trim($memberSettings->firstname . ' ' . $memberSettings->lastname);
1575                 } else {
1576                     if ($memberSettings->username) {
1577                         $profileName = $memberSettings->username;
1578                     }
1579                 }
1580                 $profileRequest = array(
1581                     'owner_id'    => $projectData->member_id,
1582                     'name'        => $profileName,
1583                     'email'       => $memberSettings->mail,
1584                     'homepage'    => $memberSettings->link_website,
1585                     'description' => $mainproject->description
1586                 );
1587                 $profileResponse = $pploadApi->postProfile($profileRequest);
1588                 // Update collection information
1589                 $collectionCategory = $projectData->project_category_id;
1590                 if (Default_Model_Project::PROJECT_ACTIVE == $projectData->status) {
1591                     $collectionCategory .= '-published';
1592                 }
1593                 $collectionRequest = array(
1594                     'title'       => $projectData->title,
1595                     'description' => $projectData->description,
1596                     'category'    => $collectionCategory
1597                 );
1598                 $collectionResponse = $pploadApi->putCollection($projectData->ppload_collection_id, $collectionRequest);
1599                 // Store product image as collection thumbnail
1600                 $this->_updatePploadMediaCollectionthumbnail($projectData);
1601             }
1602 
1603             //return $fileResponse->file;
1604             return true;
1605         } else {
1606             //return false;
1607             $pploadInfo .= "ERROR::No CollectionId in ppload-file! Response Status: " . json_encode($fileResponse);
1608             throw new Exception($pploadInfo);
1609 
1610             return $pploadInfo;
1611         }
1612 
1613         return $pploadInfo;
1614     }
1615 
1616     private function file_get_contents_curl($url)
1617     {
1618         $ch = curl_init();
1619 
1620         curl_setopt($ch, CURLOPT_AUTOREFERER, true);
1621         curl_setopt($ch, CURLOPT_HEADER, 0);
1622         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
1623         curl_setopt($ch, CURLOPT_URL, $url);
1624         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
1625 
1626         $data = curl_exec($ch);
1627         curl_close($ch);
1628 
1629         return $data;
1630     }
1631 }