diff --git a/application/modules/backend/controllers/HiveController.php b/application/modules/backend/controllers/HiveController.php index c63776563..d1124c672 100644 --- a/application/modules/backend/controllers/HiveController.php +++ b/application/modules/backend/controllers/HiveController.php @@ -1,1631 +1,1631 @@ . **/ $_import_counter = 0; $_import_file_counter = 0; $_is_import_done = false; class Backend_HiveController extends Local_Controller_Action_Backend { const RESULT_OK = "OK"; const RESULT_ERROR = "ERROR"; const DATA_ID_NAME = 'id'; var $_HIVE_BASE_URL; var $_OCS_CN_FILE_SYNC_URL; var $_OCS_FILE_SYNC_URL; protected $_errorMsg = null; protected $import_info; /** @var Default_Model_DbTable_HiveContent */ protected $_model; protected $_modelName = 'Default_Model_DbTable_HiveContent'; protected $_pageTitle = 'Import Hive01 Files'; protected $_allowed = array( 'image/jpeg' => '.jpg', 'image/jpg' => '.jpg', 'image/png' => '.png', 'image/gif' => '.gif', 'application/x-empty' => '.png' ); public function init() { $this->_model = new $this->_modelName(); $this->view->pageTitle = $this->_pageTitle; parent::init(); } public function initVars() { if (strtolower(php_uname("n")) == 'do-pling-com') { $this->_HIVE_BASE_URL = 'http://cp1.hive01.com'; $this->_OCS_CN_FILE_SYNC_URL = 'https://cn.opendesktop.org'; $this->_OCS_FILE_SYNC_URL = 'https://www.ppload.com'; } else { $this->_HIVE_BASE_URL = 'http://cp1.hive01.com'; $this->_OCS_CN_FILE_SYNC_URL = 'https://cn.pling.ws'; $this->_OCS_FILE_SYNC_URL = 'https://ws.ppload.com'; } } public function indexAction() { $params = $this->getAllParams(); if (empty($params['step'])) { $this->view->step = 0; } else { $this->view->step = $params['step']; } if ($this->view->step == 0) { $this->step0(); } else { if ($this->view->step == 1) { $this->step1(); } else { if ($this->view->step == 2) { $this->step2(); } else { if ($this->view->step == 3) { $this->step3(); } else { if ($this->view->step == 4) { $this->step4(); } else { if ($this->view->step == 10) { $this->step10(); } else { if ($this->view->step == 20) { $this->step20(); } else { if ($this->view->step == 30) { $this->step30(); } } } } } } } } } private function step0() { $countProjects = null; $contentTable = new Default_Model_DbTable_HiveContent(); try { $count = $contentTable->fetchCountProjects(); $this->view->info = "Erfolgreich geladen aus DB"; $countProjects = $count; } catch (Exception $e) { - Zend_Registry::get('logger')->info(__METHOD__ . ' - ' . "Fehler bei fetchCountProjects"); + Zend_Registry::get('logger')->info(__METHOD__ . ' - ' . "Error in fetchCountProjects"); Zend_Registry::get('logger')->err(__METHOD__ . ' - ' . print_r($e, true)); - $this->view->info = "Fehler bei laden aus DB:" . $e->getMessage(); + $this->view->info = "Error while loading from the database:" . $e->getMessage(); $countProjects = 0; } $this->view->coutAll = $countProjects; } private function step1() { $catArray = null; $contentTable = new Default_Model_DbTable_HiveContent(); try { $catArray = $contentTable->fetchHiveCategories(); - $this->view->info = "Erfolgreich geladen aus DB"; + $this->view->info = "Successfully loaded from the database"; } catch (Exception $e) { - $this->view->info = "Fehler bei laden aus DB:" . $e->getMessage(); + $this->view->info = "Error while loading from the database:" . $e->getMessage(); $catArray = null; } $this->view->categories = $catArray; } private function step2() { $params = $this->getAllParams(); $cat_id = $params['cat_id']; $cat = null; $contentTable = new Default_Model_DbTable_HiveContent(); try { $count = $contentTable->fetchCountProjectsForCategory($cat_id); $cat = $contentTable->fetchHiveCategory($cat_id); - $this->view->info = "Erfolgreich geladen aus DB"; + $this->view->info .= "Successfully loaded from the database"; } catch (Exception $e) { - $this->view->info = "Fehler bei laden aus DB:" . $e->getMessage(); + $this->view->info .= "Error while loading from the database:" . $e->getMessage(); $cat = null; $count = 0; } $this->view->cat_id = $cat['id']; $this->view->cat_desc = $cat['desc']; $this->view->count = $count; try { $catArray = $contentTable->fetchOcsCategories(); - $this->view->info = "Erfolgreich geladen aus DB"; + $this->view->info = "Successfully loaded from the database"; } catch (Exception $e) { - $this->view->info = "Fehler bei laden aus DB:" . $e->getMessage(); + $this->view->info = "Error while loading from the database:" . $e->getMessage(); $catArray = null; } $this->view->categories = $catArray; } private function step3() { $params = $this->getAllParams(); $cat_id = $params['cat_id']; $ocs_cat_id = $params['ocs_cat_id']; $cat = null; $contentTable = new Default_Model_DbTable_HiveContent(); try { $count = $contentTable->fetchCountProjectsForCategory($cat_id); $cat = $contentTable->fetchHiveCategory($cat_id); - $this->view->info .= "Erfolgreich geladen aus DB"; + $this->view->info .= "Successfully loaded from the database"; $this->view->cat_id = $cat['id']; $this->view->cat_desc = $cat['desc']; $this->view->count = $count; $ocs_cat = $contentTable->fetchOcsCategory($ocs_cat_id); - $this->view->info .= "Erfolgreich geladen aus DB"; + $this->view->info .= "Successfully loaded from the database"; $this->view->ocs_cat_id = $ocs_cat['id']; $this->view->ocs_cat_desc = $ocs_cat['desc']; } catch (Exception $e) { - $this->view->info = "Fehler bei laden aus DB:" . $e->getMessage(); + $this->view->info = "Error while loading from the database:" . $e->getMessage(); $cat = null; $count = 0; } try { $catArray = $contentTable->fetchOcsCategories(); - $this->view->info .= "Erfolgreich geladen aus DB"; + $this->view->info .= "Successfully loaded from the database"; } catch (Exception $e) { - $this->view->info .= "Fehler bei laden aus DB:" . $e->getMessage(); + $this->view->info .= "Error while loading from the database:" . $e->getMessage(); $catArray = null; } $this->view->categories = $catArray; } private function step4() { $params = $this->getAllParams(); $cat_id = $params['cat_id']; $ocs_cat_id = $params['ocs_cat_id']; $importGalleryPics = $params['import_previews']; $importFiles = $params['import_files']; $this->view->cat_id = $cat_id; $this->view->ocs_cat_id = $ocs_cat_id; $this->view->import_files = $importFiles; $this->view->import_previews = $importGalleryPics; } private function step10() { } private function step20() { $catArray = null; $params = $this->getAllParams(); $cat_ids = $params['cat_ids']; $contentTable = new Default_Model_DbTable_HiveContentCategory(); try { if (isset($cat_ids)) { $catArray = $contentTable->fetchHiveCategories($cat_ids); - $this->view->info = "Erfolgreich geladen aus DB"; + $this->view->info = "Successfully loaded from the database"; } else { - $this->view->info = "Keine Kategorien anegeben!"; + $this->view->info = "No category selected!"; } } catch (Exception $e) { - $this->view->info = "Fehler bei laden aus DB:" . $e->getMessage(); + $this->view->info = "Error while loading from the database:" . $e->getMessage(); $catArray = null; } $this->view->categories = $catArray; $this->view->cat_ids = $cat_ids; } private function step30() { $catArray = null; $params = $this->getAllParams(); $cat_ids = $params['cat_ids']; $this->view->cat_ids = $cat_ids; $importGalleryPics = $params['import_previews']; $importFiles = $params['import_files']; $this->view->import_files = $importFiles; $this->view->import_previews = $importGalleryPics; } public function countAction() { $this->_helper->layout->disableLayout(); $cat_id = (int)$this->getParam('cat_id'); $contentTable = new Default_Model_DbTable_HiveContent(); $count = $contentTable->fetchCountProjectsForCategory($cat_id); $result = array(); $result['Result'] = self::RESULT_OK; $result['TotalRecordCount'] = $count; $this->_helper->json($result); } public function startImportAllAjaxAction() { global $_import_counter; global $_import_file_counter; global $_is_import_done; $_import_counter = 0; $_import_file_counter = 0; $_is_import_done = false; $this->_helper->layout->disableLayout(); $params = $this->getAllParams(); $cat_id = $params['cat_id']; $hiveCatTable = new Default_Model_DbTable_HiveContentCategory(); $ocs_cat_id = $hiveCatTable->fetchOcsCategoryForHiveCategory($cat_id); if (!isset($ocs_cat_id)) { $info .= " - No Ocs-Category found!"; exit; } $info = null; $importGalleryPics = false; if (isset($params['import_previews']) && $params['import_previews'] != '') { $importGalleryPics = true; } $info .= " - With Gallery Pics? " . $importGalleryPics; $importFiles = false; if (isset($params['import_files']) && $params['import_files'] != '') { $importFiles = true; } $info .= " - With Files? " . $importFiles; $startIndex = null; $limit = intval($params['limit']); if (empty($startIndex)) { $startIndex = 0; } if (empty($limit)) { $limit = 5; } $result = array(); $contentTable = new Default_Model_DbTable_HiveContent(); $memberTable = new Default_Model_Member(); $projectTable = new Default_Model_Project(); $hiveMemeberTable = new Default_Model_DbTable_HiveUser(); try { $projects = $contentTable->fetchAllProjectsForCategory($cat_id, $startIndex, $limit); foreach ($projects as $project) { $_import_counter++; $info .= " ## Poject: id = " . $project['id'] . ", name = " . $project['name'] . " "; $start = microtime(true); //1. Download/Upload Project-Picture //$info .= " - Project-Picture "; //$start = microtime(true); //$cnFilePath = $this->uploadProjectPicture($project['id']); $cnFilePath = $this->getProjectPicture($project['id']); //$time_elapsed_secs = microtime(true) - $start; //$info .= $time_elapsed_secs." secs"; //2. Create Ocs Project //$info .= " - Project "; //$start = microtime(true); try { $hiveUser = $hiveMemeberTable->fetchRow("login = '" . $project['user']."'"); if(!empty($hiveUser)) { $projectId = $this->createUpdateOcsProjects($hiveUser, $project, $ocs_cat_id, $cnFilePath); } } catch (Exception $e) { //Error: log error and go on $error = array(); $error['import_error'] = $e; $error['is_imported'] = 1; $contentTable->update($error, 'id = ' . $project['id']); } //$time_elapsed_secs = microtime(true) - $start; //$info .= $time_elapsed_secs." secs"; if ($projectId) { //3. Upload files if ($importFiles) { $pploadError = null; $info .= " - Files "; $start = microtime(true); try { $_import_file_counter = $this->uploadFilesAndLinks($project, $projectId); } catch (Exception $e) { $pploadError .= $e; $info .= $pploadError; } $info .= " - Files Uploaded: " . $_import_file_counter . " - "; $time_elapsed_secs = microtime(true) - $start; $info .= $time_elapsed_secs . " secs"; } else { $_import_file_counter = 1; } if (true) { //4. Gallery Pics if ($importGalleryPics) { $info .= " - Gallery Pics "; //$start = microtime(true); $previewPicsArray = array(); if (!empty($project['preview1'])) { //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 1, $project['preview1']); $cnFilePathPre = $this->getPreviewPicture($project['id'], 1, $project['preview1']); //add preview pic to ocs-project if (!empty($cnFilePathPre)) { $previewPicsArray[] = $cnFilePathPre; $info .= " - PreviewPic1 "; } } if (!empty($project['preview2'])) { //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 2, $project['preview2']); $cnFilePathPre = $this->getPreviewPicture($project['id'], 2, $project['preview2']); if (!empty($cnFilePathPre)) { $previewPicsArray[] = $cnFilePathPre; $info .= " - PreviewPic2 "; } } if (!empty($project['preview3'])) { //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 3, $project['preview3']); $cnFilePathPre = $this->getPreviewPicture($project['id'], 3, $project['preview3']); if (!empty($cnFilePathPre)) { $previewPicsArray[] = $cnFilePathPre; $info .= " - PreviewPic3 "; } } if (!empty($previewPicsArray)) { $projectTable->updateGalleryPictures($projectId, $previewPicsArray); } } //$time_elapsed_secs = microtime(true) - $start; //$info .= $time_elapsed_secs." secs"; //5. Mark project as imported //$info .= " - Mark project as imported "; //$start = microtime(true); $contentTable->update(array("is_imported" => 1), "id = " . $project['id']); //$time_elapsed_secs = microtime(true) - $start; //$info .= $time_elapsed_secs." secs"; } else { $info .= " - NO Files Uploaded"; $contentTable->update(array( "is_imported" => 1, "import_error" => "Error on fileupload to cc.ppload.com Exception: " . $pploadError ), "id = " . $project['id']); } } else { $info .= " - Project NOT created! "; } $time_elapsed_secs = microtime(true) - $start; $info .= $time_elapsed_secs . " secs"; $info .= " - Done... "; } $result['Message'] = $info; $_is_import_done = true; } catch (Exception $e) { $this->view->info = $e->getMessage(); $_is_import_done = true; $result['Result'] = self::RESULT_ERROR; - $result['Message'] = "Fehler bei laden aus DB:" . $e->getMessage(); + $result['Message'] = "Error while loading from database:" . $e->getMessage(); } $count = $contentTable->fetchCountProjectsForCategory($cat_id); $result['Result'] = self::RESULT_OK; $result['IsImportDone'] = $_is_import_done; $result['TotalCounter'] = $count; $result['ImportCounter'] = $_import_counter; $result['ImportFileCounter'] = $_import_file_counter; $result['limit'] = $limit; $result['offset'] = $startIndex + $limit; $this->_helper->json($result); } private function getProjectPicture($hiveProjectId) { $imageModel = new Default_Model_DbTable_Image(); $path = 'https://cn.opendesktop.org/img/hive/content-pre1/' . $hiveProjectId . '-1.'; $fileUrl = null; $fileExtention = null; $info = ''; if ($this->check_img($path . 'gif')) { $fileUrl = ($path . 'gif'); $fileExtention = 'gif'; } if ($this->check_img($path . 'png')) { $fileUrl = ($path . 'png'); $fileExtention = 'png'; } if ($this->check_img($path . 'jpg')) { $fileUrl = ($path . 'jpg'); $fileExtention = 'jpg'; } if ($this->check_img($path . 'jpeg')) { $fileUrl = ($path . 'jpeg'); $fileExtention = 'jpeg'; } if ($this->check_img($path . 'mockup')) { $fileUrl = ($path . 'mockup'); $fileExtention = 'mockup'; } if ($this->check_img($path . 'GIF')) { $fileUrl = ($path . 'GIF'); $fileExtention = 'GIF'; } if ($this->check_img($path . 'PNG')) { $fileUrl = ($path . 'PNG'); $fileExtention = 'PNG'; } if ($this->check_img($path . 'JPG')) { $fileUrl = ($path . 'JPG'); $fileExtention = 'JPG'; } if ($this->check_img($path . 'JPEG')) { $fileUrl = ($path . 'JPEG'); $fileExtention = 'JPEG'; } if ($this->check_img($path . 'MOCKUP')) { $fileUrl = ($path . 'MOCKUP'); $fileExtention = 'MOCKUP'; } $cnFileUrl = null; if ($fileUrl != null) { $config = Zend_Registry::get('config'); $cnFileUrl = '/hive/content-pre1/' . $hiveProjectId . '-1.' . $fileExtention; /** * //Workaround for gifs: don't use cache on cdn * $pos = strrpos($cnFileUrl, ".gif"); * if ($pos>0) { // Beachten sie die drei Gleichheitszeichen * //gefunden ... * $cnFileUrl = str_replace('/cache/120x96-2', '', $cnFileUrl); * } **/ - $info .= "ImageUpload successfull: " . $cnFileUrl; + $info .= "ImageUpload successful: " . $cnFileUrl; } else { $path = 'https://cn.opendesktop.org/img/hive/content-pre2/' . $hiveProjectId . '-2.'; $fileUrl = null; $fileExtention = null; $info = ''; if ($this->check_img($path . 'gif')) { $fileUrl = ($path . 'gif'); $fileExtention = 'gif'; } if ($this->check_img($path . 'png')) { $fileUrl = ($path . 'png'); $fileExtention = 'png'; } if ($this->check_img($path . 'jpg')) { $fileUrl = ($path . 'jpg'); $fileExtention = 'jpg'; } if ($this->check_img($path . 'jpeg')) { $fileUrl = ($path . 'jpeg'); $fileExtention = 'jpeg'; } if ($this->check_img($path . 'mockup')) { $fileUrl = ($path . 'mockup'); $fileExtention = 'mockup'; } if ($this->check_img($path . 'GIF')) { $fileUrl = ($path . 'GIF'); $fileExtention = 'GIF'; } if ($this->check_img($path . 'PNG')) { $fileUrl = ($path . 'PNG'); $fileExtention = 'PNG'; } if ($this->check_img($path . 'JPG')) { $fileUrl = ($path . 'JPG'); $fileExtention = 'JPG'; } if ($this->check_img($path . 'JPEG')) { $fileUrl = ($path . 'JPEG'); $fileExtention = 'JPEG'; } if ($this->check_img($path . 'MOCKUP')) { $fileUrl = ($path . 'MOCKUP'); $fileExtention = 'MOCKUP'; } $cnFileUrl = null; if ($fileUrl != null) { $config = Zend_Registry::get('config'); $cnFileUrl = '/hive/content-pre2/' . $hiveProjectId . '-2.' . $fileExtention; /** * //Workaround for gifs: don't use cache on cdn * $pos = strrpos($cnFileUrl, ".gif"); * if ($pos>0) { // Beachten sie die drei Gleichheitszeichen * //gefunden ... * $cnFileUrl = str_replace('/cache/120x96-2', '', $cnFileUrl); * } **/ - $info .= "ImageUpload successfull: " . $cnFileUrl; + $info .= "ImageUpload successful: " . $cnFileUrl; } else { $path = 'https://cn.opendesktop.org/img/hive/content-pre3/' . $hiveProjectId . '-3.'; $fileUrl = null; $fileExtention = null; $info = ''; if ($this->check_img($path . 'gif')) { $fileUrl = ($path . 'gif'); $fileExtention = 'gif'; } if ($this->check_img($path . 'png')) { $fileUrl = ($path . 'png'); $fileExtention = 'png'; } if ($this->check_img($path . 'jpg')) { $fileUrl = ($path . 'jpg'); $fileExtention = 'jpg'; } if ($this->check_img($path . 'jpeg')) { $fileUrl = ($path . 'jpeg'); $fileExtention = 'jpeg'; } if ($this->check_img($path . 'mockup')) { $fileUrl = ($path . 'mockup'); $fileExtention = 'mockup'; } if ($this->check_img($path . 'GIF')) { $fileUrl = ($path . 'GIF'); $fileExtention = 'GIF'; } if ($this->check_img($path . 'PNG')) { $fileUrl = ($path . 'PNG'); $fileExtention = 'PNG'; } if ($this->check_img($path . 'JPG')) { $fileUrl = ($path . 'JPG'); $fileExtention = 'JPG'; } if ($this->check_img($path . 'JPEG')) { $fileUrl = ($path . 'JPEG'); $fileExtention = 'JPEG'; } if ($this->check_img($path . 'MOCKUP')) { $fileUrl = ($path . 'MOCKUP'); $fileExtention = 'MOCKUP'; } $cnFileUrl = null; if ($fileUrl != null) { $config = Zend_Registry::get('config'); $cnFileUrl = '/hive/content-pre3/' . $hiveProjectId . '-3.' . $fileExtention; /** * //Workaround for gifs: don't use cache on cdn * $pos = strrpos($cnFileUrl, ".gif"); * if ($pos>0) { // Beachten sie die drei Gleichheitszeichen * //gefunden ... * $cnFileUrl = str_replace('/cache/120x96-2', '', $cnFileUrl); * } **/ - $info .= "ImageUpload successfull: " . $cnFileUrl; + $info .= "ImageUpload successful: " . $cnFileUrl; } else { $info .= "No preview pic"; } } } //var_dump($info); return $cnFileUrl; } private function check_img($file) { $response = false; $x = getimagesize($file); switch ($x['mime']) { case "image/gif": $response = true; break; case "image/jpeg": $response = true; break; case "image/png": $response = true; break; default: $response = false; break; } return $response; } private function createUpdateOcsProjects($hiveUser, $project, $ocs_cat_id, $cnFilePath) { $projectTable = new Default_Model_Project(); $memberTable = new Default_Model_Member(); $info = ''; $projectId = null; $uuid = null; $count_likes = null; $count_dislikes = null; try { $projectsResult = $projectTable->fetchAll("source_type = 'project' AND source_id = 1 AND source_pk = " . $project['id']); if (count($projectsResult) > 0) { $info .= "Project load successfull: " . $projectsResult[0]['project_id']; $projectId = $projectsResult[0]['project_id']; $uuid = $projectsResult[0]['uuid']; } } catch (Exception $e) { $info .= (__FUNCTION__ . '::ERROR load Project: ' . $e); } $memberId = null; try { $member = $memberTable->fetchMemberFromHiveUserId($hiveUser['id']); if ($member) { $info .= "Member load successfull: " . $member['member_id']; $memberId = $member['member_id']; } else { throw new Exception(__FUNCTION__ . '::ERROR load member: Member not found: Username = ' . $project['user']); } } catch (Exception $e) { throw new Exception(__FUNCTION__ . '::ERROR load member: ' . $e); } $projectObj = array(); $projectObj['member_id'] = $memberId; $projectObj['content_type'] = 'text'; $projectObj['project_category_id'] = $ocs_cat_id; $projectObj['hive_category_id'] = $project['type']; //Project not deleted? if ($project['deletedat'] == 0 && $project['status'] == 1) { $projectObj['is_deleted'] = 0; $projectObj['deleted_at'] = $project['deleted_at']; $projectObj['is_active'] = 1; $projectObj['status'] = 100; } else { $projectObj['is_deleted'] = 1; $projectObj['deleted_at'] = $project['deleted_at']; $projectObj['is_active'] = 0; $projectObj['status'] = 30; } $projectObj['pid'] = null; $projectObj['type_id'] = 1; $projectObj['title'] = $project['name_utf8']; $projectObj['description'] = $project['description_utf8']; $projectObj['version'] = $project['version']; $projectObj['image_big'] = $cnFilePath; $projectObj['image_small'] = $cnFilePath; $projectObj['start_date'] = null; $projectObj['content_url'] = null; $projectObj['created_at'] = $project['created_at']; $projectObj['changed_at'] = $project['changed_at']; $projectObj['creator_id'] = $memberId; $projectObj['count_downloads_hive'] = $project['downloads']; // $projectObj['facebook_code'] = null; // $projectObj['twitter_code'] = null; // $projectObj['google_code'] = null; // $projectObj['link_1'] = null; // $projectObj['embed_code'] = null; // $projectObj['ppload_collection_id'] = null; // $projectObj['validated'] = null; // $projectObj['validated_at'] = null; // $projectObj['featured'] = null; // $projectObj['amount'] = null; // $projectObj['amount_period'] = null; // $projectObj['claimable'] = null; // $projectObj['claimed_by_member'] = null; $projectObj['source_id'] = 1; $projectObj['source_pk'] = $project['id']; $projectObj['source_type'] = 'project'; if (!isset($uuid)) { $uuid = Local_Tools_UUID::generateUUID(); $projectObj['uuid'] = $uuid; } if ($projectId) { try { $votingTable = new Default_Model_DbTable_ProjectRating(); $votingTable->delete('member_id = 0 AND project_id = ' . $projectId); //insert the old hive votings $votearray = array(); $votearray['member_id'] = 0; $votearray['project_id'] = $projectId; $votearray['user_like'] = $project['scoregood']; $votearray['user_dislike'] = $project['scorebad']; $newVote = $votingTable->save($votearray); $ratingSum = $votingTable->fetchRating($projectId); $count_likes = $ratingSum['count_likes']; $count_dislikes = $ratingSum['count_dislikes']; $projectObj['count_likes'] = $count_likes; $projectObj['count_dislikes'] = $count_dislikes; //update project $updateCount = $projectTable->update($projectObj, "project_id = " . $projectId); - $info .= "Update Project successfull: Updated rows: " . $updateCount; + $info .= "Update Project successful: Updated rows: " . $updateCount; //update changelog? if (isset($project['changelog']) && $project['changelog'] != '') { $projectUpdatesTable = new Default_Model_ProjectUpdates(); $projectUpdate = $projectUpdatesTable->fetchRow('project_id = ' . $projectId . ' AND source_id = 1 AND source_pk = ' . $project['id']); if ($projectUpdate) { $projectUpdate = $projectUpdate->toArray(); if ($projectUpdate['text'] != $project['changelog']) { $projectUpdate['text'] = $project['changelog_utf8']; $projectUpdate['changed_at'] = $projectObj['changed_at']; $projectUpdatesTable->save($projectUpdate); } } else { $data = array(); $data['project_id'] = $projectId; $data['member_id'] = $projectObj['member_id']; $data['public'] = 1; $data['text'] = $project['changelog_utf8']; $data['created_at'] = $projectObj['created_at']; $data['changed_at'] = $projectObj['changed_at']; $data['source_id'] = 1; $data['source_pk'] = $project['id']; $projectUpdatesTable->save($data); } } } catch (Exception $e) { throw new Exception(__FUNCTION__ . '::ERROR update project: ' . $e); } } else { try { //Create new project $newProjectObj = $projectTable->save($projectObj); - $info .= "Create Project successfull: " . $newProjectObj['project_id']; + $info .= "Create Project successful: " . $newProjectObj['project_id']; $projectId = $newProjectObj['project_id']; $votingTable = new Default_Model_DbTable_ProjectRating(); $votingTable->delete('member_id = 0 AND project_id = ' . $projectId); //insert the old hive votings $votearray = array(); $votearray['member_id'] = 0; $votearray['project_id'] = $projectId; $votearray['user_like'] = $project['scoregood']; $votearray['user_dislike'] = $project['scorebad']; $newVote = $votingTable->save($votearray); $ratingSum = $votingTable->fetchRating($projectId); $count_likes = $ratingSum['count_likes']; $count_dislikes = $ratingSum['count_dislikes']; $projectObj['count_likes'] = $count_likes; $projectObj['count_dislikes'] = $count_dislikes; //update project $updateCount = $projectTable->update($projectObj, "project_id = " . $projectId); //Add changelog if (isset($project['changelog']) && $project['changelog'] != '') { $projectUpdatesTable = new Default_Model_ProjectUpdates(); $data = array(); $data['project_id'] = $projectId; $data['member_id'] = $projectObj['member_id']; $data['public'] = 1; $data['text'] = $project['changelog']; $data['created_at'] = $projectObj['created_at']; $data['changed_at'] = $projectObj['changed_at']; $data['source_id'] = 1; $data['source_pk'] = $project['id']; $projectUpdatesTable->save($data); } if (null == $newProjectObj || null == $newProjectObj['project_id']) { throw new Exception(__FUNCTION__ . '::ERROR save project: ' . implode(",", $newProjectObj)); } } catch (Exception $e) { throw new Exception(__FUNCTION__ . '::ERROR save project: ' . $e); } } return $projectId; } private function uploadFilesAndLinks($project, $projectId) { $_import_file_counter = 0; //First real files $file1 = null; $info = ''; //Clean up old collection data $pploadApi = new Ppload_Api(array( 'apiUri' => PPLOAD_API_URI, 'clientId' => PPLOAD_CLIENT_ID, 'secret' => PPLOAD_SECRET )); $projectTable = new Default_Model_DbTable_Project(); $projectData = $projectTable->find($projectId)->current(); $oldFiles = array(); if ($projectData->ppload_collection_id) { $param = array(); $param['collection_id'] = $projectData->ppload_collection_id; $oldFiles = $pploadApi->getFiles($param); $pploadApi->deleteCollection($projectData->ppload_collection_id); $projectData->ppload_collection_id = null; $projectTable->save($projectData->toArray()); } if ($project['downloadtyp1'] == 0) { //a real file $file1 = $project['download1']; //$file1 = str_replace(' ', '%20', $file1); $pploadError = null; if (!empty($file1)) { try { $downloadCounter = 0; if (isset($oldFiles->files)) { foreach ($oldFiles->files as $oldFile) { $filename = $this->getFilenameFromUrl($this->_HIVE_BASE_URL . '/CONTENT/content-files/' . $file1); //var_dump('check file: '. $oldFile->name . ' AND ' . $filename); if ($oldFile->name == $filename) { $downloadCounter = $oldFile->downloaded_count; } } } //$uploadFileResult = $this->uploadFileToPpload($projectId, 'http://cp1.hive01.com/CONTENT/content-files/'.$file1); $uploadFileResult = $this->saveFileInPpload($projectId, $project['downloadname1'], $project['licensetype'], base64_encode($project['license']), $downloadCounter, $this->_HIVE_BASE_URL . '/CONTENT/content-files/' . $file1); - $info .= "Upload file successfull: " . $uploadFileResult; + $info .= "Upload file successful: " . $uploadFileResult; if ($uploadFileResult == true) { $_import_file_counter++; } else { throw new Exception(__FUNCTION__ . '::ERROR Upload file: ' . $uploadFileResult); } } catch (Exception $e) { throw new Exception(__FUNCTION__ . '::ERROR Upload file: ' . $e); } } } else { //a link try { $link1 = $project['downloadlink1']; if ($link1 != 'http://' && !empty($link1)) { $link1 = urlencode($link1); $linkName1 = $project['downloadname1']; if (empty($linkName1)) { $linkName1 = "link"; } $downloadCounter = 0; $uploadFileResult = $this->saveFileInPpload($projectId, $project['downloadname1'], $project['licensetype'], base64_encode($project['license']), 0, $this->_HIVE_BASE_URL . '/CONTENT/content-files/link', $link1, $linkName1); - $info .= "Upload file successfull: " . $uploadFileResult; + $info .= "Upload file successful: " . $uploadFileResult; if ($uploadFileResult == true) { $_import_file_counter++; } } } catch (Exception $e) { throw new Exception(__FUNCTION__ . '::ERROR Upload file: ' . $e); } } //Then links... for ($i = 2; $i <= 12; $i++) { try { $link1 = $project['downloadlink' . $i]; if ($link1 != 'http://' && !empty($link1)) { $link1 = urlencode($link1); $linkName1 = $project['downloadname' . $i]; if (empty($linkName1)) { $linkName1 = "link"; } $downloadCounter = 0; $uploadFileResult = $this->saveFileInPpload($projectId, $project['downloadname' . $i], $project['licensetype'], base64_encode($project['license']), 0, $this->_HIVE_BASE_URL . '/CONTENT/content-files/link', $link1, $linkName1); - $info .= "Upload file successfull: " . $link1; + $info .= "Upload file successful: " . $link1; if ($uploadFileResult == true) { $_import_file_counter++; } } } catch (Exception $e) { //throw new Exception(__FUNCTION__ . '::ERROR Upload file: ' . $e); } } if ($_import_file_counter == 0) { return $info; } return $_import_file_counter; } private function getFilenameFromUrl($url) { $x = pathinfo($url); $fileName = $x['basename']; return $fileName; } private function saveFileInPpload( $projectId, $fileDescription, $licensetype, $license, $downloads, $fileUrl, $link = null, $linkName = null ) { $pploadInfo = "Start upload file " . $fileUrl . " for project " . $projectId; $projectTable = new Default_Model_DbTable_Project(); $projectData = $projectTable->find($projectId)->current(); if ($projectData) { $pploadInfo .= "Project found! ProjectId: " . $projectData->project_id . ", MemberId: " . $projectData->member_id; } else { $pploadInfo .= "ERROR::Project not found: " . $projectId; throw new Exception($pploadInfo); return false; } $filename = null; if (!empty($link)) { //take emtpy dummy file $filename = $this->getFilenameFromUrl($fileUrl); $tmpFilepath = "/hive/H01/CONTENT/content-files/link"; $tmpFilename = $linkName; } else { //upload to ocs-www $filename = $this->getFilenameFromUrl($fileUrl); $tmpFilepath = "/hive/H01/CONTENT/content-files/" . $filename; $tmpFilename = $filename; if (!empty($filename)) { $pploadInfo .= "FileName found: " . $filename; } else { $pploadInfo .= "ERROR::FileName not found: " . $filename; throw new Exception($pploadInfo); return false; } } $pploadApi = new Ppload_Api(array( 'apiUri' => PPLOAD_API_URI, 'clientId' => PPLOAD_CLIENT_ID, 'secret' => PPLOAD_SECRET )); $fileRequest = array( 'local_file_path' => $tmpFilepath, 'local_file_name' => $tmpFilename, 'owner_id' => $projectData->member_id ); if ($projectData->ppload_collection_id) { // Append to existing collection $fileRequest['collection_id'] = $projectData->ppload_collection_id; } if (!empty($fileDescription)) { $fileRequest['description'] = mb_substr($fileDescription, 0, 140); } if (!empty($downloads)) { $fileRequest['downloaded_count'] = $downloads; } $tags = ''; if (!empty($link)) { $tags .= "link##" . $link . ','; } if (!empty($licensetype)) { $tags .= "licensetype-" . $licensetype . ','; } if (!empty($license)) { $tags .= "license##" . $license . ','; } if (!empty($tags)) { $fileRequest['tags'] = $tags; } //upload to ppload $fileResponse = $pploadApi->postFile($fileRequest); if (!empty($fileResponse)) { $pploadInfo .= "File uploaded to ppload! "; } else { $pploadInfo .= "ERROR::File NOT uploaded to ppload! Response: " . $fileResponse; throw new Exception($pploadInfo); return $pploadInfo; } //delete tmpFile //unlink($tmpFilename); //unlink($tmpFilename); if (!empty($fileResponse->file->collection_id)) { $pploadInfo .= "CollectionId: " . $fileResponse->file->collection_id; if (!$projectData->ppload_collection_id) { // Save collection ID $projectData->ppload_collection_id = $fileResponse->file->collection_id; //$projectData->changed_at = new Zend_Db_Expr('NOW()'); $projectData->save(); // Update profile information $memberTable = new Default_Model_DbTable_Member(); $memberSettings = $memberTable->find($projectData->member_id)->current(); $mainproject = $projectTable->find($memberSettings->main_project_id)->current(); $profileName = ''; if ($memberSettings->firstname || $memberSettings->lastname) { $profileName = trim($memberSettings->firstname . ' ' . $memberSettings->lastname); } else { if ($memberSettings->username) { $profileName = $memberSettings->username; } } $profileRequest = array( 'owner_id' => $projectData->member_id, 'name' => $profileName, 'email' => $memberSettings->mail, 'homepage' => $memberSettings->link_website, 'description' => $mainproject->description ); $profileResponse = $pploadApi->postProfile($profileRequest); // Update collection information $collectionCategory = $projectData->project_category_id; if (Default_Model_Project::PROJECT_ACTIVE == $projectData->status) { $collectionCategory .= '-published'; } $collectionRequest = array( 'title' => $projectData->title, 'description' => $projectData->description, 'category' => $collectionCategory ); $collectionResponse = $pploadApi->putCollection($projectData->ppload_collection_id, $collectionRequest); // Store product image as collection thumbnail $this->_updatePploadMediaCollectionthumbnail($projectData); } //return $fileResponse->file; return true; } else { //return false; $pploadInfo .= "ERROR::No CollectionId in ppload-file! Response Status: " . json_encode($fileResponse); throw new Exception($pploadInfo); return $pploadInfo; } return $pploadInfo; } private function _updatePploadMediaCollectionthumbnail($projectData) { if (empty($projectData->ppload_collection_id) || empty($projectData->image_small)) { return false; } $pploadApi = new Ppload_Api(array( 'apiUri' => "https://dl.opendesktop.org/api/", 'clientId' => "1387085484", 'secret' => "34gtd3w024deece710e1225d7bfe5e7337b1f45d" )); $filename = sys_get_temp_dir() . '/' . $projectData->image_small; if (false === file_exists(dirname($filename))) { mkdir(dirname($filename), 0777, true); } /** * $viewHelperImage = new Default_View_Helper_Image(); * $uri = $viewHelperImage->Image( * $projectData->image_small, * array( * 'width' => 600, * 'height' => 600 * ) * );**/ $uri = $this->_OCS_CN_FILE_SYNC_URL . '/cache/600x600/img' . $projectData->image_small; file_put_contents($filename, file_get_contents($uri)); $mediaCollectionthumbnailResponse = $pploadApi->postMediaCollectionthumbnail($projectData->ppload_collection_id, array('file' => $filename)); unlink($filename); if (isset($mediaCollectionthumbnailResponse->status) && $mediaCollectionthumbnailResponse->status == 'success') { return true; } return false; } private function getPreviewPicture($hiveProjectId, $previewNum, $hivePreviewFileExtension) { $imageModel = new Default_Model_DbTable_Image(); $config = Zend_Registry::get('config'); $fileName = $hiveProjectId . '-' . $previewNum . '.' . $hivePreviewFileExtension; $cnFileUrl = '/hive/content-pre' . $previewNum . '/' . $fileName; /** * if ($this->check_img($cnFileUrl)) { * if($hivePreviewFileExtension == 'gif') { * $cnFileUrl = $config->images->media->server.'/img/hive/content-pre'.$previewNum.'/'.$fileName; * } * } **/ return $cnFileUrl; } public function startImportAjaxAction() { global $_import_counter; global $_import_file_counter; global $_is_import_done; $_import_counter = 0; $_import_file_counter = 0; $_is_import_done = false; $this->_helper->layout->disableLayout(); $params = $this->getAllParams(); $cat_id = $params['cat_id']; $ocs_cat_id = $params['ocs_cat_id']; $info = null; $importGalleryPics = false; if (isset($params['import_previews'])) { $importGalleryPics = true; } $info .= " - With Gallery Pics? " . $importGalleryPics; $importFiles = false; if (isset($params['import_files'])) { $importFiles = true; } $info .= " - With Files? " . $importFiles; $startIndex = null; $limit = intval($params['limit']); if (empty($startIndex)) { $startIndex = 0; } if (empty($limit)) { $limit = 5; } $result = array(); $contentTable = new Default_Model_DbTable_HiveContent(); $memberTable = new Default_Model_Member(); $projectTable = new Default_Model_Project(); $hiveMemeberTable = new Default_Model_DbTable_HiveUser(); try { $projects = $contentTable->fetchAllProjectsForCategory($cat_id, $startIndex, $limit); foreach ($projects as $project) { $_import_counter++; $info .= " ## Poject: id = " . $project['id'] . ", name = " . $project['name'] . " "; $start = microtime(true); //1. Download/Upload Project-Picture //$info .= " - Project-Picture "; //$start = microtime(true); //$cnFilePath = $this->uploadProjectPicture($project['id']); $cnFilePath = $this->getProjectPicture($project['id']); //$time_elapsed_secs = microtime(true) - $start; //$info .= $time_elapsed_secs." secs"; //2. Create ocs Project //$info .= " - Project "; //$start = microtime(true); try { $hiveUser = $hiveMemeberTable->fetchRow('user = ' . $project['user']); if(!empty($hiveUser)) { $projectId = $this->createUpdateOcsProjects($hiveUser, $project, $ocs_cat_id, $cnFilePath); } } catch (Exception $e) { //Error: log error and go on $error = array(); $error['import_error'] = $e; $error['is_imported'] = 1; $contentTable->update($error, 'id = ' . $project['id']); } //$time_elapsed_secs = microtime(true) - $start; //$info .= $time_elapsed_secs." secs"; if ($projectId) { //3. Upload files if ($importFiles) { $pploadError = null; $info .= " - Files "; $start = microtime(true); try { $_import_file_counter = $this->uploadFilesAndLinks($project, $projectId); } catch (Exception $e) { $pploadError .= $e; } $info .= " - Files Uploaded: " . $_import_file_counter . " - "; $time_elapsed_secs = microtime(true) - $start; $info .= $time_elapsed_secs . " secs"; } else { $_import_file_counter = 1; } if ($_import_file_counter > 0) { //4. Gallery Pics if ($importGalleryPics) { $info .= " - Gallery Pics "; //$start = microtime(true); $previewPicsArray = array(); if (!empty($project['preview1'])) { //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 1, $project['preview1']); $cnFilePathPre = $this->getPreviewPicture($project['id'], 1, $project['preview1']); //add preview pic to ocs-project if (!empty($cnFilePathPre)) { $previewPicsArray[] = $cnFilePathPre; $info .= " - PreviewPic1 "; } } if (!empty($project['preview2'])) { //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 2, $project['preview2']); $cnFilePathPre = $this->getPreviewPicture($project['id'], 2, $project['preview2']); if (!empty($cnFilePathPre)) { $previewPicsArray[] = $cnFilePathPre; $info .= " - PreviewPic2 "; } } if (!empty($project['preview3'])) { //$cnFilePathPre = $this->uploadPreviewPicture($project['id'], 3, $project['preview3']); $cnFilePathPre = $this->getPreviewPicture($project['id'], 3, $project['preview3']); if (!empty($cnFilePathPre)) { $previewPicsArray[] = $cnFilePathPre; $info .= " - PreviewPic3 "; } } if (!empty($previewPicsArray)) { $projectTable->updateGalleryPictures($projectId, $previewPicsArray); } } //$time_elapsed_secs = microtime(true) - $start; //$info .= $time_elapsed_secs." secs"; //5. Mark project as imported //$info .= " - Mark project as imported "; //$start = microtime(true); $contentTable->update(array("is_imported" => 1), "id = " . $project['id']); //$time_elapsed_secs = microtime(true) - $start; //$info .= $time_elapsed_secs." secs"; } else { $info .= " - NO Files Uploaded"; $contentTable->update(array( "is_imported" => 1, "import_error" => "Error on fileupload to cc.ppload.com Exception: " . $pploadError ), "id = " . $project['id']); } } else { $info .= " - Project NOT created! "; } $time_elapsed_secs = microtime(true) - $start; $info .= $time_elapsed_secs . " secs"; $info .= " - Done... "; } $result['Message'] = $info; $_is_import_done = true; } catch (Exception $e) { $this->view->info = $e->getMessage(); $_is_import_done = true; $result['Result'] = self::RESULT_ERROR; $result['Message'] = "Fehler bei laden aus DB:" . $e->getMessage(); } $count = $contentTable->fetchCountProjectsForCategory($cat_id); $result['Result'] = self::RESULT_OK; $result['IsImportDone'] = $_is_import_done; $result['TotalCounter'] = $count; $result['ImportCounter'] = $_import_counter; $result['ImportFileCounter'] = $_import_file_counter; $result['limit'] = $limit; $result['offset'] = $startIndex + $limit; $this->_helper->json($result); } public function importStatusAjaxAction() { $this->_helper->layout->disableLayout(); $cat_id = (int)$this->getParam('cat_id'); $contentTable = new Default_Model_DbTable_HiveContent(); $countAll = $contentTable->fetchCountAllProjectsForCategory($cat_id); $countImported = $contentTable->fetchCountProjectsForCategory($cat_id); $result = array(); $result['Result'] = self::RESULT_OK; $result['IsImportDone'] = ($countAll == $countImported); $result['ImportCounter'] = $countImported; $result['ProjectCounter'] = $countAll; $this->_helper->json($result); } private function saveImageOnMediaServer($filePathName, $fileExtention, $content_type) { if (empty($filePathName)) { throw new Exception(__FUNCTION__ . "ERROR::No image path"); } $srcPathOnMediaServer = $this->sendImageToMediaServer($filePathName, $content_type); if (!$srcPathOnMediaServer) { throw new Exception("Error in upload to CDN-Server. \n Server message:\n" . $this->_errorMsg); } return $srcPathOnMediaServer; } protected function sendImageToMediaServer($fullFilePath, $mimeType) { $config = Zend_Registry::get('config'); $url = $config->images->media->upload; $client = new Zend_Http_Client($url); $client->setFileUpload($fullFilePath, basename($fullFilePath), null, $mimeType); $response = $client->request('POST'); if ($response->getStatus() > 200) { $this->_errorMsg = $response->getBody(); return null; } return $response->getBody(); } private function uploadFileToPpload($projectId, $fileUrl, $link = null, $linkName = null) { $pploadInfo = "Start upload file " . $fileUrl . " for project " . $projectId; $projectTable = new Default_Model_DbTable_Project(); $projectData = $projectTable->find($projectId)->current(); if ($projectData) { $pploadInfo .= "Project found! ProjectId: " . $projectData->project_id . ", MemberId: " . $projectData->member_id; } else { $pploadInfo .= "ERROR::Project not found: " . $projectId; throw new Exception($pploadInfo); return false; } //upload to ocs-www $file = $this->file_get_contents_curl($fileUrl); if ($file) { $pploadInfo .= "File found!"; } else { $pploadInfo .= "ERROR::File not found: " . $fileUrl; throw new Exception($pploadInfo); return false; } $filename = null; if (!empty($link)) { //take emtpy dummy file $filename = $linkName; } else { //upload to ocs-www $filename = $this->getFilenameFromUrl($fileUrl); if (!empty($filename)) { $pploadInfo .= "FileName found: " . $filename; } else { $pploadInfo .= "ERROR::FileName not found: " . $filename; throw new Exception($pploadInfo); return false; } } file_put_contents(IMAGES_UPLOAD_PATH . 'tmp/' . $filename, $file); $tmpFilename = IMAGES_UPLOAD_PATH . 'tmp/' . $filename; $mime = mime_content_type($tmpFilename); if (empty($mime) || $mime == 'text/html') { $pploadInfo .= "ERROR::File NOT found!"; throw new Exception($pploadInfo); return false; } if (file_exists($tmpFilename)) { $pploadInfo .= "File uploaded to ocs-www!"; } else { $pploadInfo .= "ERROR::File NOT uploaded to ocs-www!"; throw new Exception($pploadInfo); return false; } $pploadApi = new Ppload_Api(array( 'apiUri' => PPLOAD_API_URI, 'clientId' => PPLOAD_CLIENT_ID, 'secret' => PPLOAD_SECRET )); $fileRequest = array( 'file' => $tmpFilename, 'owner_id' => $projectData->member_id ); if ($projectData->ppload_collection_id) { // Append to existing collection $fileRequest['collection_id'] = $projectData->ppload_collection_id; } //if (isset($fileDescription)) { // $fileRequest['description'] = mb_substr($fileDescription, 0, 140); //} if (!empty($link)) { $fileRequest['tags'] = "link##" . $link; } //upload to ppload $fileResponse = $pploadApi->postFile($fileRequest); if (!empty($fileResponse)) { $pploadInfo .= "File uploaded to ppload! "; } else { $pploadInfo .= "ERROR::File NOT uploaded to ppload! Response: " . $fileResponse; throw new Exception($pploadInfo); return $pploadInfo; } //delete tmpFile unlink($tmpFilename); //unlink($tmpFilename); if (!empty($fileResponse->file->collection_id)) { $pploadInfo .= "CollectionId: " . $fileResponse->file->collection_id; if (!$projectData->ppload_collection_id) { // Save collection ID $projectData->ppload_collection_id = $fileResponse->file->collection_id; //$projectData->changed_at = new Zend_Db_Expr('NOW()'); $projectData->save(); // Update profile information $memberTable = new Default_Model_DbTable_Member(); $memberSettings = $memberTable->find($projectData->member_id)->current(); $mainproject = $projectTable->find($memberSettings->main_project_id)->current(); $profileName = ''; if ($memberSettings->firstname || $memberSettings->lastname) { $profileName = trim($memberSettings->firstname . ' ' . $memberSettings->lastname); } else { if ($memberSettings->username) { $profileName = $memberSettings->username; } } $profileRequest = array( 'owner_id' => $projectData->member_id, 'name' => $profileName, 'email' => $memberSettings->mail, 'homepage' => $memberSettings->link_website, 'description' => $mainproject->description ); $profileResponse = $pploadApi->postProfile($profileRequest); // Update collection information $collectionCategory = $projectData->project_category_id; if (Default_Model_Project::PROJECT_ACTIVE == $projectData->status) { $collectionCategory .= '-published'; } $collectionRequest = array( 'title' => $projectData->title, 'description' => $projectData->description, 'category' => $collectionCategory ); $collectionResponse = $pploadApi->putCollection($projectData->ppload_collection_id, $collectionRequest); // Store product image as collection thumbnail $this->_updatePploadMediaCollectionthumbnail($projectData); } //return $fileResponse->file; return true; } else { //return false; $pploadInfo .= "ERROR::No CollectionId in ppload-file! Response Status: " . json_encode($fileResponse); throw new Exception($pploadInfo); return $pploadInfo; } return $pploadInfo; } private function file_get_contents_curl($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $data = curl_exec($ch); curl_close($ch); return $data; } } diff --git a/application/modules/backend/views/scripts/legend.phtml b/application/modules/backend/views/scripts/legend.phtml index c9365f754..32686f0dc 100644 --- a/application/modules/backend/views/scripts/legend.phtml +++ b/application/modules/backend/views/scripts/legend.phtml @@ -1,76 +1,76 @@ . **/ ?>


-  Button-Erklärung:
+  Button explanation:
preview): ?>
-  Vorschau / Details +  Preview / Details
date): ?>
-  Neuen Termin eintragen +  Enter new appointment
image): ?>
-  Bilderübersicht der Galerie +  Gallery overview
-  Bearbeiten +  Edit
 todo) ? 'Erledigt' : 'Aktivieren'; ?>
deactivate): ?>
-  Deaktivieren +  Disable
-  Löschen +  Delete
link): ?>
-  Liste der Links / Neuen Link hinzufügen +  List of links / Insert new link
-
\ No newline at end of file + diff --git a/application/modules/backend/views/scripts/member/details.phtml b/application/modules/backend/views/scripts/member/details.phtml index d207cd36b..38e834116 100644 --- a/application/modules/backend/views/scripts/member/details.phtml +++ b/application/modules/backend/views/scripts/member/details.phtml @@ -1,66 +1,66 @@ . **/ ?>

Alle Details zu User member->username; ?>

Username member->username; ?>
Name member->lastname; ?>
Vorname member->firstname; ?>
Mail member->mail; ?>
Biography member->biography); ?>


-Zur Memberübersicht \ No newline at end of file +Member overview diff --git a/application/modules/default/models/Collection.php b/application/modules/default/models/Collection.php index eb99f2619..327b05cfb 100644 --- a/application/modules/default/models/Collection.php +++ b/application/modules/default/models/Collection.php @@ -1,1885 +1,1884 @@ . **/ class Default_Model_Collection extends Default_Model_DbTable_Project { const FILTER_NAME_PROJECT_ID_NOT_IN = 'project_id_not_in'; const FILTER_NAME_RANKING = 'ranking'; const FILTER_NAME_CATEGORY = 'category'; const FILTER_NAME_TAG = 'tag'; const FILTER_NAME_ORIGINAL = 'original'; const FILTER_NAME_MEMBER = 'member'; const FILTER_NAME_ORDER = 'order'; const FILTER_NAME_LOCATION = 'location'; const ITEM_TYPE_DUMMY = 0; const ITEM_TYPE_PRODUCT = 1; const ITEM_TYPE_UPDATE = 2; const ITEM_TYPE_COLLECTION = 3; const TAG_LICENCE_GID = 7; const TAG_TYPE_ID = 1; /** * @param int $status * @param int $id * * @throws Exception */ public function setStatus($status, $id) { if (false === in_array($status, $this->_allowedStatusTypes)) { throw new Exception('Wrong value for project status.'); } $updateValues = array( 'status' => $status, 'changed_at' => new Zend_Db_Expr('Now()') ); if (self::PROJECT_DELETED == $status) { $updateValues['deleted_at'] = new Zend_Db_Expr('NOW()'); } $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); } /** * @param int $member_id * @param int $id */ public function setClaimedByMember($member_id, $id) { $updateValues = array( 'claimed_by_member' => $member_id, 'changed_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); } /** * @param int $id */ public function resetClaimedByMember($id) { $updateValues = array( 'claimed_by_member' => new Zend_Db_Expr('NULL'), 'changed_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); } /** * @param int $id */ public function transferClaimToMember($id) { $updateValues = array( 'member_id' => new Zend_Db_Expr('claimed_by_member'), 'claimable' => new Zend_Db_Expr('NULL'), 'claimed_by_member' => new Zend_Db_Expr('NULL') ); $this->update($updateValues, $this->_db->quoteInto('project_id=? and claimable = 1', $id, 'INTEGER')); } /** * @param int $project_id * @param $member_id * * @throws Zend_Db_Statement_Exception * @throws Zend_Exception */ public function setInActive($project_id, $member_id) { $project_id = (int)$project_id; $updateValues = array( 'status' => self::PROJECT_INACTIVE, 'deleted_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 40 AND project_id=' . $project_id); $this->setInActiveForUpdates($project_id); $this->setDeletedForComments($member_id,$project_id); } /** * @param int $id */ protected function setInActiveForUpdates($id) { $id = (int)$id; $updateValues = array( 'status' => self::PROJECT_INACTIVE, 'changed_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 40 AND pid=' . $id); } /** * @param int $member_id * @param int $id * * @throws Zend_Db_Statement_Exception * @throws Zend_Exception */ private function setDeletedForComments($member_id, $id) { $modelComments = new Default_Model_ProjectComments(); $modelComments->setAllCommentsForProjectDeleted($member_id, $id); } /** * @param int $id * * @return mixed * @throws Zend_Db_Statement_Exception */ public function fetchActiveBySourcePk($id) { $q = $this->select()->where('status = ?', self::PROJECT_ACTIVE)->where('source_pk = ?', (int)$id) ->where('source_type = "project"') ; return $q->query()->fetch(); } /** * @param int $member_id * @param bool $onlyActiveProjects * * @return mixed */ public function countAllCollectionsForMember($member_id, $onlyActiveProjects = false) { $q = $this->select()->from($this, array('countAll' => new Zend_Db_Expr('count(*)')))->setIntegrityCheck(false) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER')->where('project.type_id = ?', self::PROJECT_TYPE_COLLECTION) ; $resultSet = $q->query()->fetchAll(); return $resultSet[0]['countAll']; } /** * @param int $project_id * @param bool $onlyActiveProjects * * @return mixed */ public function countAllCollectionsForProject($project_id, $onlyActiveProjects = true) { $q = $this->select()->from('collection_projects', array('countAll' => new Zend_Db_Expr('count(*)')))->setIntegrityCheck(false) ->where('collection_projects.active = 1') ->where('collection_projects.project_id = ?', $project_id, 'INTEGER') ; $resultSet = $q->query()->fetchAll(); return $resultSet[0]['countAll']; } /** * @param int $member_id * @param bool $onlyActiveProjects * @param $catids * * @return mixed * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ public function countAllProjectsForMemberCatFilter($member_id, $onlyActiveProjects = false, $catids = null) { $q = $this->select()->from($this, array('countAll' => new Zend_Db_Expr('count(*)')))->setIntegrityCheck(false) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER')->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD) ; if (isset($catids)) { $q->where('project_category_id in (' . $this->_getCatIds($catids) . ')'); } $resultSet = $q->query()->fetchAll(); return $resultSet[0]['countAll']; } /** * @param $catids * * @return string * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ protected function _getCatIds($catids) { $sqlwhereCat = ""; $sqlwhereSubCat = ""; $idCategory = explode(',', $catids); if (false === is_array($idCategory)) { $idCategory = array($idCategory); } $sqlwhereCat .= implode(',', $idCategory); $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildElements($idCategory); if (count($subCategories) > 0) { foreach ($subCategories as $element) { $sqlwhereSubCat .= "{$element['project_category_id']},"; } } return $sqlwhereSubCat . $sqlwhereCat; } /** * By default it will show all projects for a member included the unpublished elements. * * @param int $member_id * @param int|null $limit * @param int|null $offset * @param bool $onlyActiveProjects * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchAllCollectionsForMember($member_id, $limit = null, $offset = null, $onlyActiveProjects = false) { $q = $this->select()->from($this, array( '*', 'project_validated' => 'project.validated', 'project_uuid' => 'project.uuid', 'project_status' => 'project.status', 'project_created_at' => 'project.created_at', 'project_changed_at' => 'project.changed_at', 'member_type' => 'member.type', 'project_member_id' => 'member_id', 'laplace_score' => new Zend_Db_Expr('laplace_score(count_likes,count_dislikes)'), 'catTitle' => new Zend_Db_Expr('(SELECT title FROM project_category WHERE project_category_id = project.project_category_id)') ))->setIntegrityCheck(false)->join('member', 'project.member_id = member.member_id', array('username')) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER') ->where('project.type_id = ?', self::PROJECT_TYPE_COLLECTION) ->order('project_changed_at DESC') ; if (isset($limit)) { $q->limit($limit, $offset); } return $this->generateRowSet($q->query()->fetchAll()); } /** * By default it will show all projects for a project included the unpublished elements. * * @param int $project_id * @param int|null $limit * @param int|null $offset * @param bool $onlyActiveProjects * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchAllCollectionsForProject($project_id, $limit = null, $offset = null, $onlyActiveProjects = true) { $q = $this->select()->from('collection_projects', array( '*', 'project_validated' => 'project.validated', 'project_uuid' => 'project.uuid', 'project_status' => 'project.status', 'project_created_at' => 'project.created_at', 'project_changed_at' => 'project.changed_at', 'member_type' => 'member.type', 'laplace_score' => new Zend_Db_Expr('laplace_score(count_likes,count_dislikes)'), 'catTitle' => new Zend_Db_Expr('(SELECT title FROM project_category WHERE project_category_id = project.project_category_id)') ))->setIntegrityCheck(false) ->join('project', 'collection_projects.collection_id = project.project_id') ->join('member', 'project.member_id = member.member_id', array('username')) ->where('collection_projects.active = 1') ->where('collection_projects.project_id = ?', $project_id, 'INTEGER') ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.type_id = ?', self::PROJECT_TYPE_COLLECTION) ->order('project_changed_at DESC') ; if (isset($limit)) { $q->limit($limit, $offset); } return $this->generateRowSet($q->query()->fetchAll()); } /** * @param array $data * * @return Zend_Db_Table_Rowset_Abstract */ protected function generateRowSet($data) { $classRowSet = $this->getRowsetClass(); return new $classRowSet(array( 'table' => $this, 'rowClass' => $this->getRowClass(), 'stored' => true, 'data' => $data )); } /** * By default it will show all projects for a member included the unpublished elements. * * @param int $member_id * @param int|null $limit * @param int|null $offset * @param bool $onlyActiveProjects * * @param null $catids * * @return Zend_Db_Table_Rowset_Abstract * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ public function fetchAllProjectsForMemberCatFilter( $member_id, $limit = null, $offset = null, $onlyActiveProjects = false, $catids = null ) { $q = $this->select()->from($this, array( '*', 'project_validated' => 'project.validated', 'project_uuid' => 'project.uuid', 'project_status' => 'project.status', 'project_created_at' => 'project.created_at', 'project_changed_at' => 'project.changed_at', 'member_type' => 'member.type', 'project_member_id' => 'member_id', 'laplace_score' => new Zend_Db_Expr('laplace_score(count_likes,count_dislikes)'), 'catTitle' => new Zend_Db_Expr('(SELECT title FROM project_category WHERE project_category_id = project.project_category_id)') ))->setIntegrityCheck(false)->join('member', 'project.member_id = member.member_id', array('username')) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER')->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD) ->order('project_changed_at DESC') ; if (isset($catids)) { $q->where('project_category_id in (' . $this->_getCatIds($catids) . ')'); } if (isset($limit)) { $q->limit($limit, $offset); } return $this->generateRowSet($q->query()->fetchAll()); } /** * @param $collection_id * * @return null|Zend_Db_Table_Row_Abstract */ public function fetchProductForCollectionId($collection_id) { $sql = ' SELECT `p`.* FROM `project` AS `p` WHERE `p`.`ppload_collection_id` = :collectionId AND `p`.`status` >= :projectStatus AND `p`.`type_id` = :typeId '; $result = $this->_db->fetchRow($sql, array( 'collectionId' => $collection_id, 'projectStatus' => self::PROJECT_INACTIVE, 'typeId' => self::PROJECT_TYPE_STANDARD )); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @param int $project_id * * @return null|Zend_Db_Table_Row_Abstract */ public function fetchProductInfo($project_id) { $sql = ' SELECT `p`.*, `p`.`validated` AS `project_validated`, `p`.`uuid` AS `project_uuid`, `p`.`status` AS `project_status`, `p`.`created_at` AS `project_created_at`, `p`.`major_updated_at` AS `project_major_updated_at`, `p`.`changed_at` AS `project_changed_at`, `p`.`member_id` AS `project_member_id`, `p`.`source_pk` AS `project_source_pk`, `p`.`version` AS `project_version`, `pc`.`title` AS `cat_title`, `m`.`username`, `m`.`avatar`, `m`.`profile_image_url`, `m`.`roleId`, `m`.`mail`, `m`.`paypal_mail`, `m`.`dwolla_id`, laplace_score(`p`.`count_likes`,`p`.`count_dislikes`) AS `laplace_score`, `view_reported_projects`.`amount_reports` AS `amount_reports`, (SELECT `tag`.`tag_fullname` FROM `tag_object`, `tag` WHERE `tag_object`.`tag_id`=`tag`.`tag_id` AND `tag_object_id` = `p`.`project_id` AND `tag_object`.`is_deleted`=0 AND `tag_group_id` = :tag_licence_gid AND `tag_type_id` = :tag_type_id ORDER BY `tag_object`.`tag_created` DESC LIMIT 1) AS `project_license_title` FROM `project` AS `p` JOIN `member` AS `m` ON `p`.`member_id` = `m`.`member_id` AND `m`.`is_active` = 1 AND `m`.`is_deleted` = 0 JOIN `project_category` AS `pc` ON `p`.`project_category_id` = `pc`.`project_category_id` LEFT JOIN `view_reported_projects` ON ((`view_reported_projects`.`project_id` = `p`.`project_id`)) WHERE `p`.`project_id` = :projectId AND `p`.`status` >= :projectStatus AND `p`.`type_id` = :typeId '; $result = $this->_db->fetchRow($sql, array( 'projectId' => $project_id, 'projectStatus' => self::PROJECT_INACTIVE, 'typeId' => self::PROJECT_TYPE_COLLECTION, 'tag_licence_gid' => self::TAG_LICENCE_GID, 'tag_type_id' => self::TAG_TYPE_ID )); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @param array $productInfo * @return array */ public static function cleanProductInfoForJson(array $productInfo) { if (empty($productInfo)) { return $productInfo; } $unwantedKeys = array( 'roleId' => 0, 'mail' => 0, 'dwolla_id' => 0, 'paypal_mail' => 0, 'content_type' => 0, 'hive_category_id' => 0, 'is_active' => 0, 'is_deleted' => 0, 'start_date' => 0, 'source_id' => 0, 'source_pk' => 0, 'source_type' => 0 ); $productInfo = array_diff_key($productInfo, $unwantedKeys); return $productInfo; } /** * @param $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchProjectUpdates($project_id) { $projectSel = $this->select()->setIntegrityCheck(false)->from($this->_name) ->join('member', 'project.member_id = member.member_id', array('*')) ->where('project.pid=?', $project_id, 'INTEGER')->where('project.status>?', self::PROJECT_INACTIVE) ->where('project.type_id=?', self::PROJECT_TYPE_UPDATE)->order('RAND()') ; return $this->fetchAll($projectSel); } /** * @param $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchAllProjectUpdates($project_id) { $projectSel = $this->select()->setIntegrityCheck(false)->from($this->_name)->where('project.pid=?', $project_id, 'INTEGER') ->where('project.status>?', self::PROJECT_INACTIVE)->where('project.type_id=?', self::PROJECT_TYPE_UPDATE) ; return $this->fetchAll($projectSel); } /** * @param $project * @param int $count * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchSimilarProjects($project, $count = 10) { $count = (int)$count; $sql = " SELECT * FROM `project` AS `p` WHERE `p`.`project_category_id` = :cat_id AND `project_id` <> :project_id ORDER BY `p`.`changed_at` DESC LIMIT {$count} "; $result = $this->_db->fetchAll($sql, array( 'cat_id' => $project->project_category_id, 'project_id' => $project->project_id )); return $this->generateRowSet($result); } /** * @param Zend_Db_Table_Row $project * @param int $count * * @return Zend_Db_Table_Rowset_Abstract * @throws Zend_Exception */ public function fetchMoreCollections($project, $count = 6) { $q = $this->select()->from(array('project' => 'project'), array( 'project_id', 'image_small', 'title', 'changed_at' ))->setIntegrityCheck(false) ->where('project.status = ?', self::PROJECT_ACTIVE) ->where('project.member_id = ?', $project->member_id, 'INTEGER') ->where('project.project_id != ?', $project->project_id, 'INTEGER') ->where('project.type_id = ?', self::PROJECT_TYPE_COLLECTION) //->where('project.amount_reports is null') ->where('project.project_category_id = ?', $project->project_category_id, 'INTEGER') ->limit($count) ->order('project.created_at DESC') ; $tagFilter = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null; if ($tagFilter) { $q = $this->generateTagFilter($q, array(self::FILTER_NAME_TAG => $tagFilter)); } $result = $this->fetchAll($q); return $result; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select */ protected function generateTagFilter(Zend_Db_Select $statement, $filterArrayValue) { if (false == isset($filterArrayValue[self::FILTER_NAME_TAG])) { return $statement; } $filter = $filterArrayValue[self::FILTER_NAME_TAG]; if (is_array($filter)) { $tagList = $filter; //build where statement für projects $selectAnd = $this->select()->from(array('project' => 'stat_projects')); foreach($tagList as $item) { #and $selectAnd->where('find_in_set(?, tag_ids)', $item); } $statement->where(implode(' ', $selectAnd->getPart('where'))); /* $statement->join(array( 'tags' => new Zend_Db_Expr('(SELECT DISTINCT project_id FROM stat_project_tagids WHERE tag_id in (' . implode(',', $filter) . '))') ), 'project.project_id = tags.project_id', array()); * */ } else { $statement->where('find_in_set(?, tag_ids)', $filter); } return $statement; } public function fetchMoreCollectionsOfOtherUsr($project, $count = 8) { $sql = " SELECT count(1) AS `count` FROM `stat_projects` WHERE `status` = :current_status AND `member_id` <> :current_member_id and amount_reports is null AND `project_category_id` = :category_id AND `type_id` = :project_type "; $result = $this->_db->query($sql, array( 'current_status' => self::PROJECT_ACTIVE, 'current_member_id' => $project->member_id, 'category_id' => $project->project_category_id, 'project_type' => self::PROJECT_TYPE_COLLECTION ))->fetch() ; if ($result['count'] > $count) { $offset = rand(0, $result['count'] - $count); } else { $offset = 0; } $q = $this->select()->from(array('project' => 'stat_projects'), array( 'project_id', 'image_small', 'title', 'catTitle' => 'cat_title', 'changed_at' ))->setIntegrityCheck(false)->where('status = ?', self::PROJECT_ACTIVE) ->where('member_id != ?', $project->member_id, 'INTEGER') ->where('amount_reports is null') ->where('type_id = ?', self::PROJECT_TYPE_COLLECTION, 'INTEGER') ->where('project_category_id = ?', $project->project_category_id, 'INTEGER')->limit($count, $offset) ->order('project_created_at DESC') ; $tagFilter = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null; if ($tagFilter) { $q = $this->generateTagFilter($q, array(self::FILTER_NAME_TAG => $tagFilter)); } $result = $this->fetchAll($q); return $result; } /** * @param $project * @param int $count * * @return Zend_Db_Table_Rowset_Abstract * @throws Zend_Db_Statement_Exception * @throws Zend_Exception * @todo improve processing speed */ /* public function fetchMoreCollectionsOfOtherUsr($project, $count = 8) { $sql = " SELECT count(1) AS `count` FROM `project` as p WHERE `status` = :current_status AND `member_id` <> :current_member_id AND `project_category_id` = :category_id AND `amount_reports is null ` AND `type_id` = :project_type AND spamcnt == 0 "; $result = $this->_db->query($sql, array( 'current_status' => self::PROJECT_ACTIVE, 'current_member_id' => $project->member_id, 'category_id' => $project->project_category_id, 'project_type' => self::PROJECT_TYPE_COLLECTION ))->fetch() ; if ($result['count'] > $count) { $offset = rand(0, $result['count'] - $count); } else { $offset = 0; } $q = $this->select()->from(array('project' => 'project'), array( 'project_id', 'image_small', 'title' ))->setIntegrityCheck(false) ->where('status = ?', self::PROJECT_ACTIVE) ->where('member_id != ?', $project->member_id, 'INTEGER') ->where('amount_reports is null') ->where('project_category_id = ?', $project->project_category_id, 'INTEGER') ->where('type_id = ?', self::PROJECT_TYPE_COLLECTION, 'INTEGER') ->limit($count, $offset) ->order('created_at DESC') ; $tagFilter = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null; if ($tagFilter) { $q = $this->generateTagFilter($q, array(self::FILTER_NAME_TAG => $tagFilter)); } $result = $this->fetchAll($q); return $result; } */ /** * @param int $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchProjectSupporter($project_id) { $plingTable = new Default_Model_DbTable_Plings(); return $plingTable->getSupporterForProjectId($project_id); } /** * @param int $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchProjectSupporterWithPlings($project_id) { $plingTable = new Default_Model_DbTable_Plings(); return $plingTable->getSupporterWithPlingsForProjectId($project_id); } /** * @param $projectId * @param $sources */ public function updateGalleryPictures($projectId, $sources) { $galleryPictureTable = new Default_Model_DbTable_ProjectGalleryPicture(); $galleryPictureTable->clean($projectId); $galleryPictureTable->insertAll($projectId, $sources); } /** * @param $projectId * * @return array */ public function getGalleryPictureSources($projectId) { $galleryPictureTable = new Default_Model_DbTable_ProjectGalleryPicture(); $stmt = $galleryPictureTable->select()->where('project_id = ?', $projectId)->order(array('sequence')); $pics = array(); foreach ($galleryPictureTable->fetchAll($stmt) as $pictureRow) { $pics[] = $pictureRow['picture_src']; } return $pics; } /** * @param int $project_id * * @return array * @throws Zend_Db_Statement_Exception */ public function fetchProjectViews($project_id) { $sql = " SELECT `project_id`, `count_views`, `count_visitor`, `last_view` FROM `stat_page_views_mv` WHERE `project_id` = ? "; $database = Zend_Db_Table::getDefaultAdapter(); $sql = $database->quoteInto($sql, $project_id, 'INTEGER', 1); $resultSet = $database->query($sql)->fetchAll(); if (count($resultSet) > 0) { $result = $resultSet[0]['count_views']; } else { $result = 0; } return $result; } /** * @param int $member_id * * @return int * @throws Zend_Db_Statement_Exception */ public function fetchOverallPageViewsByMember($member_id) { $sql = " SELECT sum(`stat`.`amount`) AS `page_views` FROM `project` JOIN (SELECT `project_id`, count(`project_id`) AS `amount` FROM `stat_page_views` GROUP BY `project_id`) AS `stat` ON `stat`.`project_id` = `project`.`project_id` WHERE `project`.`member_id` = :member_id AND `project`.`status` = :project_status GROUP BY `member_id` "; $result = $this->_db->query($sql, array('member_id' => $member_id, 'project_status' => self::PROJECT_ACTIVE)); if ($result->rowCount() > 0) { $row = $result->fetch(); return $row['page_views']; } else { return 0; } } /** * @return array * @throws Zend_Db_Statement_Exception */ public function getStatsForNewProjects() { $sql = " SELECT DATE_FORMAT(`time`, '%M %D') AS `projectdate`, count(1) AS `daycount` FROM `activity_log` WHERE `activity_type_id` = 0 GROUP BY DATE_FORMAT(`time`, '%Y%M%D') ORDER BY `time` DESC LIMIT 14 ;"; $database = Zend_Db_Table::getDefaultAdapter(); $resultSet = $database->query($sql)->fetchAll(); return $resultSet; } /** * @param int $idCategory * @param int|null $limit * * @return Zend_Db_Table_Rowset_Abstract * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ public function fetchProductsByCategory($idCategory, $limit = null) { $select = $this->select()->setIntegrityCheck(false)->from($this->_name)->where('project.project_category_id in (?)', $idCategory) ->where('project.status = ?', self::PROJECT_ACTIVE)->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD) ->joinLeft(array( 'pling_amount' => new Zend_Db_Expr('(SELECT project_id as plinged_project_id, SUM(amount) AS sumAmount, count(1) as countPlings FROM plings where status_id >= 2 group by project_id order by sumAmount DESC)') ), 'pling_amount.plinged_project_id = project.project_id') ->joinLeft('project_category', 'project_category.project_category_id = project.project_category_id', array('cat_title' => 'title'))->order('pling_amount.sumAmount DESC') ; if (false === is_null($limit)) { $select->limit($limit); } $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildElements($idCategory); if (count($subCategories) > 0) { $sqlwhere = ''; foreach ($subCategories as $element) { $sqlwhere .= "{$element['project_category_id']},"; } $sqlwhere = substr($sqlwhere, 0, -1); if (!empty($sqlwhere)) { $sqlwhere = explode(',', $sqlwhere); } $select->orWhere('project.project_category_id in (?)', $sqlwhere); } return $this->fetchAll($select); } /** * @param int|array $idCategory id of a category or an array of id's * @param bool $withSubCat if was set true it will also count products in sub categories * @param null $store_id * * @return int count of products in given category * @throws Zend_Exception * @deprecated */ public function countProductsInCategory($idCategory = null, $withSubCat = true, $store_id = null) { if (empty($idCategory)) { throw new Zend_Exception('idCategory param was not set'); } if (false == is_array($idCategory)) { $idCategory = array($idCategory); } if (isset($store_id)) { $configurations = Zend_Registry::get('application_store_config_id_list'); $store_config = isset($configurations[$store_id]) ? $configurations[$store_id] : null; } else { $store_config = Zend_Registry::isRegistered('store_config') ? Zend_Registry::get('store_config') : null; } $tagFilter = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null; $cacheName = __FUNCTION__ . '_' . md5(serialize($idCategory) . $withSubCat . serialize($tagFilter)); /** @var Zend_Cache_Core $cache */ $cache = Zend_Registry::get('cache'); if (false !== ($resultSet = $cache->load($cacheName))) { return (int)$resultSet[0]['count_active_projects']; } $select = $this->select()->setIntegrityCheck(false)->from('stat_projects', array('count_active_projects' => 'COUNT(1)')) ->where('status = ? ', self::PROJECT_ACTIVE)->where('type_id = ?', self::PROJECT_TYPE_STANDARD) ; $select = $this->generateTagFilter($select, array(self::FILTER_NAME_TAG => $tagFilter)); if ($withSubCat) { $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildIds($idCategory); $inCategories = implode(',', array_unique(array_merge($idCategory, $subCategories))); } else { $inCategories = implode(',', $idCategory); } $select->where('project_category_id in (' . $inCategories . ')'); $resultSet = $this->fetchAll($select)->toArray(); $cache->save($resultSet, $cacheName, array(), 60); return (int)$resultSet[0]['count_active_projects']; } /** * @param int|array $idCategory * * @return int * @throws Zend_Exception */ public function countActiveMembersForCategory($idCategory) { $cacheName = __FUNCTION__ . md5(serialize($idCategory)); $cache = Zend_Registry::get('cache'); $result = $cache->load($cacheName); if ($result) { return (int)$result['count_active_members']; } $sqlwhereCat = ""; $sqlwhereSubCat = ""; if (false === is_array($idCategory)) { $idCategory = array($idCategory); } $sqlwhereCat .= implode(',', $idCategory); $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildElements($idCategory); if (count($subCategories) > 0) { foreach ($subCategories as $element) { $sqlwhereSubCat .= "{$element['project_category_id']},"; } } $selectWhere = 'AND p.project_category_id in (' . $sqlwhereSubCat . $sqlwhereCat . ')'; $sql = "SELECT count(1) AS `count_active_members` FROM ( SELECT count(1) AS `count_active_projects` FROM `project` `p` WHERE `p`.`status` = 100 AND `p`.`type_id` = 1 {$selectWhere} GROUP BY p.member_id ) AS `A`;"; $result = $this->_db->fetchRow($sql); $cache->save($result, $cacheName); return (int)$result['count_active_members']; } /** * @param int $project_id * * @return bool */ public function isProjectFeatured($project_id) { $sql_object = "SELECT `project_id` FROM `project` WHERE `project_id`= :project_id AND `status` = 100 AND `type_id` = 1 AND `featured` = 1"; $r = $this->getAdapter()->fetchRow($sql_object, array('project_id' => $project_id)); if ($r) { return true; } else { return false; } } /** * @param bool $in_current_store * * @return int * @throws Zend_Exception */ public function fetchTotalProjectsCount($in_current_store = false) { $sql = "SELECT count(1) AS `total_project_count` FROM `stat_projects`"; if ($in_current_store) { $store_tags = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null; /* if ($store_tags) { $sql .= ' JOIN (SELECT DISTINCT project_id FROM stat_project_tagids WHERE tag_id in (' . implode(',', $store_tags) . ')) AS tags ON stat_projects.project_id = tags.project_id'; } * */ $info = new Default_Model_Info(); $activeCategories = $info->getActiveCategoriesForCurrentHost(); $sql .= ' WHERE project_category_id IN (' . implode(',', $activeCategories) . ')'; //Store Tag Filter if ($store_tags) { $tagList = $store_tags; //build where statement für projects $sql .= " AND ("; if(!is_array($tagList)) { $tagList = array($tagList); } foreach($tagList as $item) { #and $sql .= ' find_in_set('.$item.', tag_ids) AND '; } $sql .= ' 1=1)';; } } $result = $this->_db->fetchRow($sql); return (int)$result['total_project_count']; } /** * @param $member_id * * @throws Zend_Db_Statement_Exception * @throws Zend_Exception */ public function setAllProjectsForMemberDeleted($member_id) { $sql = "SELECT `project_id` FROM `project` WHERE `member_id` = :memberId AND `type_id` = :typeId AND `status` > :project_status"; $projectForDelete = $this->_db->fetchAll($sql, array( 'memberId' => $member_id, 'typeId' => self::PROJECT_TYPE_STANDARD, 'project_status' => self::PROJECT_DELETED )); foreach ($projectForDelete as $item) { $this->setDeleted($member_id, $item['project_id']); } // set personal page deleted $sql = "SELECT project_id FROM project WHERE member_id = :memberId AND type_id = :typeId"; $projectForDelete = $this->_db->fetchAll($sql, array( 'memberId' => $member_id, 'typeId' => self::PROJECT_TYPE_PERSONAL )); foreach ($projectForDelete as $item) { $this->setDeleted($member_id, $item['project_id']); } /* $sql = "UPDATE project SET `status` = :statusCode, deleted_at = NOW() WHERE member_id = :memberId AND type_id = :typeId"; $this->_db->query($sql, array( 'statusCode' => self::PROJECT_DELETED, 'memberId' => $member_id, 'typeId' => self::PROJECT_TYPE_PERSONAL ))->execute(); */ } /** * @param int $member_id * @param int $id * * @throws Zend_Db_Statement_Exception * @throws Zend_Exception */ public function setDeleted($member_id, $id) { $id = (int)$id; $updateValues = array( 'status' => self::PROJECT_DELETED, 'deleted_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 30 AND project_id=' . $id); $memberLog = new Default_Model_MemberDeactivationLog(); $memberLog->logProjectAsDeleted($member_id, $id); $this->setDeletedForUpdates($member_id, $id); $this->setDeletedForComments($member_id, $id); $this->setDeletedInMaterializedView($id); } /** * @param $member_id * @param int $id */ protected function setDeletedForUpdates($member_id, $id) { $id = (int)$id; $updateValues = array( 'status' => self::PROJECT_DELETED, 'deleted_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 30 AND pid=' . $id); } /** * @param $id * * @throws Zend_Db_Statement_Exception */ private function setDeletedInMaterializedView($id) { $sql = "UPDATE `stat_projects` SET `status` = :new_status WHERE `project_id` = :project_id"; $result = $this->_db->query($sql, array('new_status' => self::PROJECT_DELETED, 'project_id' => $id))->execute(); } /** * @param int $member_id * * @throws Zend_Exception */ public function setAllProjectsForMemberActivated($member_id) { $sql = "SELECT `p`.`project_id` FROM `project` `p` JOIN `member_deactivation_log` `l` ON `l`.`object_type_id` = 3 AND `l`.`object_id` = `p`.`project_id` AND `l`.`deactivation_id` = `p`.`member_id` WHERE `p`.`member_id` = :memberId"; $projectForDelete = $this->_db->fetchAll($sql, array( 'memberId' => $member_id )); foreach ($projectForDelete as $item) { $this->setActive($member_id, $item['project_id']); } } /** * @param int $member_id * @param int $id * * @throws Zend_Exception */ public function setActive($member_id, $id) { $updateValues = array( 'status' => self::PROJECT_ACTIVE, 'deleted_at' => null ); $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); $memberLog = new Default_Model_MemberDeactivationLog(); $memberLog->removeLogProjectAsDeleted($member_id, $id); $this->setActiveForUpdates($member_id, $id); $this->setActiveForComments($member_id, $id); } /** * @param int $id */ protected function setActiveForUpdates($member_id, $id) { $updateValues = array( 'status' => self::PROJECT_ACTIVE, 'deleted_at' => null ); $this->update($updateValues, $this->_db->quoteInto('pid=?', $id, 'INTEGER')); } /** * @param int $member_id * @param int $project_id */ private function setActiveForComments($member_id, $project_id) { $modelComments = new Default_Model_ProjectComments(); $modelComments->setAllCommentsForProjectActivated($member_id, $project_id); } /** * @param array $inputFilterParams * @param int|null $limit * @param int|null $offset * * @return array * @throws Zend_Cache_Exception * @throws Zend_Db_Select_Exception * @throws Zend_Exception */ public function fetchProjectsByFilter($inputFilterParams, $limit = null, $offset = null) { $cacheName = __FUNCTION__ . '_' . md5(serialize($inputFilterParams) . (string)$limit . (string)$offset); /** @var Zend_Cache_Core $cache */ $cache = Zend_Registry::get('cache'); if (false === ($returnValue = $cache->load($cacheName))) { $statement = $this->generateStatement($inputFilterParams, $limit, $offset); if (APPLICATION_ENV == 'development') { Zend_Registry::get('logger')->debug(__METHOD__ . ' - ' . $statement->__toString()); } /** @var Zend_Db_Table_Rowset $fetchedElements */ $fetchedElements = $this->fetchAll($statement); $statement->reset('limitcount')->reset('limitoffset'); $statement->reset('columns')->columns(array('count' => new Zend_Db_Expr('count(*)'))); $countElements = $this->fetchRow($statement); $returnValue = array('elements' => $fetchedElements, 'total_count' => $countElements->count); $cache->save($returnValue, $cacheName, array(), 120); } return $returnValue; } /** * @param array $inputFilterParams * @param int|null $limit * @param int|null $offset * * @return Zend_Db_Select * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ protected function generateStatement($inputFilterParams, $limit = null, $offset = null) { $statement = $this->generateBaseStatement(); $statement = $this->generateCategoryFilter($statement, $inputFilterParams); $statement = $this->generateOrderFilter($statement, $inputFilterParams); $statement = $this->generateTagFilter($statement, $inputFilterParams); $statement = $this->generateOriginalFilter($statement, $inputFilterParams); $statement = $this->generateReportedSpamFilter($statement); $statement->limit($limit, $offset); return $statement; } /** * @return Zend_Db_Select */ protected function generateBaseStatement() { $statement = $this->select()->setIntegrityCheck(false); //$statement->from(array('project' => $this->_name), array( $statement->from(array('project' => 'stat_projects'), array( '*' )); $statement->where('project.status = ?', self::PROJECT_ACTIVE)->where('project.type_id=?', self::PROJECT_TYPE_STANDARD); return $statement; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ protected function generateCategoryFilter(Zend_Db_Select $statement, $filterArrayValue) { if (false == isset($filterArrayValue[self::FILTER_NAME_CATEGORY])) { return $statement; } $filter = $filterArrayValue[self::FILTER_NAME_CATEGORY]; if (false === is_array($filter)) { $filter = array($filter); } // fetch child elements for each category $modelProjectCategories = new Default_Model_DbTable_ProjectCategory(); $childElements = $modelProjectCategories->fetchChildIds($filter); $allCategories = array_unique(array_merge($filter, $childElements)); $stringCategories = implode(',', $allCategories); $statement->where("( project.project_category_id IN ({$stringCategories}) )"); return $statement; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select */ protected function generateOrderFilter(Zend_Db_Select $statement, $filterArrayValue) { if (!isset($filterArrayValue[self::FILTER_NAME_ORDER])) { $filterValue = ''; } else { $filterValue = $filterArrayValue[self::FILTER_NAME_ORDER]; } switch ($filterValue) { case 'latest': $statement->order('project.major_updated_at DESC'); //$statement->order('project.changed_at DESC'); break; case 'top': //$statement->order(array('amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC')); //$statement->order(array(new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'),'amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC')); $statement->order(array( new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'), 'project.created_at DESC' )); break; case 'download': $statement->order('project.count_downloads_hive DESC'); break; case 'downloadQuarter': $statement->order('project.count_downloads_quarter DESC'); break; case 'hot': //$statement->order(array('amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC')); $statement->order(array( new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'), 'count_plings DESC', 'project.created_at DESC' )); $statement->where(' project.created_at >= (NOW()- INTERVAL 14 DAY)'); break; case 'alpha': default: $statement->order('project.title'); } return $statement; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select */ protected function generateOriginalFilter(Zend_Db_Select $statement, $filterArrayValue) { if (false == isset($filterArrayValue[self::FILTER_NAME_ORIGINAL])) { return $statement; } $filter = $filterArrayValue[self::FILTER_NAME_ORIGINAL]; if (is_array($filter)) { // todo maybe for other tags filter } else { $statement->where('find_in_set(?, tags)', $filter); } return $statement; } /** * @param Zend_Db_Select $statement * * @return Zend_Db_Select */ protected function generateReportedSpamFilter(Zend_Db_Select $statement) { return $statement->where('(amount_reports is null)'); } /** * @param int $member_id * @param array $values * @param string $username * * @return Zend_Db_Table_Row_Abstract * @throws Exception * @throws Zend_Db_Table_Exception */ public function createCollection($member_id, $values, $username) { $values = (array)$values; if (empty($member_id)) { throw new Zend_Db_Table_Exception('member_id is not set'); } if (empty($username)) { throw new Zend_Db_Table_Exception('username is not set'); } // check important values for a new project $values['uuid'] = (!array_key_exists('uuid', $values)) ? Local_Tools_UUID::generateUUID() : $values['uuid']; $values['member_id'] = (!array_key_exists('member_id', $values)) ? $member_id : $values['member_id']; $values['status'] = (!array_key_exists('status', $values)) ? self::PROJECT_INACTIVE : $values['status']; $values['type_id'] = (!array_key_exists('type_id', $values)) ? self::PROJECT_TYPE_COLLECTION : $values['type_id']; $values['created_at'] = (!array_key_exists('created_at', $values)) ? new Zend_Db_Expr('NOW()') : $values['created_at']; $values['start_date'] = (!array_key_exists('start_date', $values)) ? new Zend_Db_Expr('NULL') : $values['start_date']; $values['creator_id'] = (!array_key_exists('creator_id', $values)) ? $member_id : $values['creator_id']; if ($username == 'pling editor') { $values['claimable'] = (!array_key_exists('claimable', $values)) ? self::PROJECT_CLAIMABLE : $values['claimable']; } $savedRow = $this->save($values); return $savedRow; } /** * @param int $project_id * @param array $values * * @return Zend_Db_Table_Row_Abstract * @throws Exception * @throws Zend_Db_Table_Exception */ public function updateCollection($project_id, $values) { $values = (array)$values; $projectData = $this->find($project_id)->current(); if (empty($projectData)) { throw new Zend_Db_Table_Exception('project_id not found'); } $projectData->setFromArray($values)->save(); return $projectData; } /** * @param int $member_id * * @return array|mixed */ public function fetchMainProject($member_id) { $sql = "SELECT * FROM {$this->_name} WHERE type_id = :type AND member_id = :member"; // $this->_db->getProfiler()->setEnabled(true); $result = $this->_db->fetchRow($sql, array('type' => self::PROJECT_TYPE_PERSONAL, 'member' => (int)$member_id)); // $dummy = $this->_db->getProfiler()->getLastQueryProfile()->getQuery(); // $this->_db->getProfiler()->setEnabled(true); if (count($result) > 0) { return $result; } else { return array(); } } /** * @param $project_id * * @return Zend_Db_Table_Row_Abstract * @throws Zend_Db_Statement_Exception */ public function fetchProductDataFromMV($project_id) { $sql = "SELECT * FROM `stat_projects` WHERE `project_id` = :project_id"; $resultSet = $this->_db->query($sql, array('project_id' => $project_id))->fetch(); if (false === $resultSet) { return $this->generateRowClass(array()); } return $this->generateRowClass($resultSet); } /** * @return array */ public function fetchGhnsExcludedProjects() { $sql = " SELECT `p`.`project_id`, `p`.`title`, `l`.`member_id` AS `exclude_member_id`, `l`.`time` AS `exclude_time`, `m`.`username` AS `exclude_member_name` FROM `project` `p` JOIN `activity_log` `l` ON `l`.`project_id` = `p`.`project_id` AND `l`.`activity_type_id` = 314 INNER JOIN `member` `m` ON `m`.`member_id` = `l`.`member_id` WHERE `p`.`ghns_excluded` = 1 "; $list = $this->_db->fetchAll($sql); return $list; } public function getUserCreatingCategorys($member_id) { $sql = " select c.title as category1, count(1) as cnt from project p join project_category c on p.project_category_id = c.project_category_id where p.status = 100 and p.member_id =:member_id and p.type_id = 1 group by c.title order by cnt desc, c.title asc "; $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); return $result; } /** * @return array */ public function getUserActiveProjects($member_id, $limit = null, $offset = null) { // for member me page $sql = " SELECT `p`.`project_id`, `p`.`title`, `p`.`created_at` AS `project_created_at`, `p`.`changed_at` AS `project_changed_at`, `p`.`count_likes`, `p`.`count_dislikes`, laplace_score(`p`.`count_likes`, `p`.`count_dislikes`) AS `laplace_score`, `p`.`member_id`, `cat`.`title` AS `catTitle`, `p`.`project_category_id`, `p`.`image_small`, (SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings`, c.cnt cntCategory FROM `project` `p` join project_category cat on p.project_category_id = cat.project_category_id left join stat_cnt_projects_catid_memberid c on p.project_category_id = c.project_category_id and p.member_id = c.member_id WHERE `p`.`status` =100 and `p`.`type_id` = 1 AND `p`.`member_id` = :member_id ORDER BY cntCategory desc,catTitle asc, `p`.`changed_at` DESC "; if (isset($limit)) { $sql = $sql . ' limit ' . $limit; } if (isset($offset)) { $sql = $sql . ' offset ' . $offset; } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); if ($result) { return $this->generateRowClass($result); } else { return null; } } // /** // * @return array // */ // public function getUserActiveProjects($member_id, $limit = null, $offset = null) // { // // for member me page // $sql = " // SELECT // SUBSTRING_INDEX(SUBSTRING_INDEX(ancestor_path, '|', 2),'|',-1) as cat1, // SUBSTRING_INDEX(SUBSTRING_INDEX(ancestor_path, '|', 3),'|',-1) as cat2, // SUBSTRING_INDEX(SUBSTRING_INDEX(ancestor_path, '|', 4),'|',-1) as cat3, // SUBSTRING_INDEX(SUBSTRING_INDEX(ancestor_path, '|', 5),'|',-1) as cat4, // SUBSTRING_INDEX(SUBSTRING_INDEX(ancestor_id_path, ',', 2),',',-1) as catid1, // SUBSTRING_INDEX(SUBSTRING_INDEX(ancestor_id_path, ',', 3),',',-1) as catid2, // SUBSTRING_INDEX(SUBSTRING_INDEX(ancestor_id_path, ',', 4),',',-1) as catid3, // SUBSTRING_INDEX(SUBSTRING_INDEX(ancestor_id_path, ',', 5),',',-1) as catid4, // `p`.`project_id`, // `p`.`title`, // `p`.`created_at` AS `project_created_at`, // `p`.`changed_at` AS `project_changed_at`, // `p`.`count_likes`, // `p`.`count_dislikes`, // laplace_score(`p`.`count_likes`, `p`.`count_dislikes`) AS `laplace_score`, // `p`.`member_id`, // `cat`.`title` AS `catTitle`, // `p`.`project_category_id`, // `p`.`image_small`, // (SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings`, // (select count(1) from project pp where pp.member_id = p.member_id and pp.status = 100 and pp.project_category_id = p.project_category_id) cntCategory // FROM `project` `p` // join project_category cat on p.project_category_id = cat.project_category_id // join stat_cat_tree c on p.project_category_id = c.project_category_id // WHERE `p`.`status` =100 // AND `p`.`member_id` = :member_id // ORDER BY cntCategory desc, `p`.`changed_at` DESC // "; // if (isset($limit)) { // $sql = $sql . ' limit ' . $limit; // } // if (isset($offset)) { // $sql = $sql . ' offset ' . $offset; // } // $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); // if ($result) { // return $this->generateRowClass($result); // } else { // return null; // } // } /** * @param int $member_id * @param int|null $limit * @param int|null $offset * * @return null|Zend_Db_Table_Row_Abstract */ public function fetchAllFeaturedProjectsForMember($member_id, $limit = null, $offset = null) { // for member me page $sql = " SELECT `p`.`project_id`, `p`.`title`, `p`.`created_at` AS `project_created_at`, `p`.`changed_at` AS `project_changed_at`, `p`.`count_likes`, `p`.`count_dislikes`, `p`.`laplace_score`, `p`.`member_id`, `p`.`cat_title` AS `catTitle`, `p`.`image_small`, (SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings` FROM `stat_projects` `p` WHERE `p`.`status` =100 AND `featured` = 1 AND `p`.`member_id` = :member_id ORDER BY `p`.`changed_at` DESC "; if (isset($limit)) { $sql = $sql . ' limit ' . $limit; } if (isset($offset)) { $sql = $sql . ' offset ' . $offset; } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @param string $orderby * @param int|null $limit * @param int|null $offset * * @return array */ public function fetchDuplicatedSourceProjects($orderby = 'source_url asc', $limit = null, $offset = null) { $sql = " SELECT `source_url` ,count(1) AS `cnt`, GROUP_CONCAT(`p`.`project_id` ORDER BY `p`.`created_at`) `pids` FROM `stat_projects_source_url` `p` GROUP BY `source_url` HAVING count(1)>1 "; if (isset($orderby)) { $sql = $sql . ' order by ' . $orderby; } if (isset($limit)) { $sql .= ' limit ' . (int)$limit; } if (isset($offset)) { $sql .= ' offset ' . (int)$offset; } $result = $this->_db->fetchAll($sql); return $result; } /** * @return mixed */ public function getTotalCountDuplicates() { $sql = " SELECT count(1) AS `cnt` FROM ( SELECT `source_url` ,count(1) AS `cnt`, GROUP_CONCAT(`p`.`project_id` ORDER BY `p`.`created_at`) `pids` FROM `stat_projects_source_url` `p` GROUP BY `p`.`source_url` HAVING count(1)>1 ) `a` "; $result = $this->_db->fetchAll($sql); return $result[0]['cnt'];; } /** * @param string $source_url * * @return mixed */ public function getCountSourceUrl($source_url) { $last = substr($source_url, -1); if ($last == '/') { $source_url = substr($source_url, 0, -1); } $sql = " SELECT count(1) AS `cnt` FROM `stat_projects_source_url` `p` WHERE `p`.`source_url`= :source_url "; $result = $this->_db->fetchAll($sql, array('source_url' => $source_url)); return $result[0]['cnt']; } /** * @param int $member_id * * @return mixed */ public function getCountProjectsDuplicateSourceurl($member_id) { $sql = " SELECT count(1) AS `cnt` FROM ( SELECT DISTINCT `p`.`source_url` ,(SELECT count(1) FROM `stat_projects_source_url` `pp` WHERE `pp`.`source_url`=`p`.`source_url`) `cnt` FROM `stat_projects_source_url` `p` WHERE `p`.`member_id` = :member_id ) `t` WHERE `t`.`cnt`>1 "; $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); return $result[0]['cnt']; } /** * @param $ids * * @return Zend_Db_Table_Row_Abstract * @throws Zend_Db_Statement_Exception */ public function fetchProjects($ids) { $sql = "SELECT * FROM stat_projects WHERE project_id in (" . $ids . ")"; $resultSet = $this->_db->fetchAll($sql); return $this->generateRowSet($resultSet); } /** * @param $project_id * @return true/false * @throws Zend_Db_Statement_Exception */ public function validateDeleteProjectFromSpam($project_id) { - //produkt ist ueber 6 monate alt oder produkt hat ueber 5 kommentare oder produkt hat minimum 1 pling - // darf nicht gelöscht werden + // A product older than 6 months, with more than 5 comments or with at least 1 pling can not be deleted. $sql ='select count_comments ,created_at , (created_at+ INTERVAL 6 MONTH < NOW()) is_old ,(select count(1) from project_plings f where f.project_id = p.project_id and f.is_deleted = 0) plings FROM project p where project_id =:project_id'; $result = $this->_db->fetchRow($sql, array( 'project_id' => $project_id, )); if($result['count_comments'] >5 || $result['is_old'] ==1 || $result['plings']>0) { return false; } return true; } -} \ No newline at end of file +} diff --git a/application/modules/default/models/Project.php b/application/modules/default/models/Project.php index f85c5d34c..ec7407fac 100644 --- a/application/modules/default/models/Project.php +++ b/application/modules/default/models/Project.php @@ -1,2120 +1,2119 @@ . **/ class Default_Model_Project extends Default_Model_DbTable_Project { const FILTER_NAME_PROJECT_ID_NOT_IN = 'project_id_not_in'; const FILTER_NAME_RANKING = 'ranking'; const FILTER_NAME_CATEGORY = 'category'; const FILTER_NAME_TAG = 'tag'; const FILTER_NAME_ORIGINAL = 'original'; const FILTER_NAME_FAVORITE = 'favorite'; const FILTER_NAME_MEMBER = 'member'; const FILTER_NAME_ORDER = 'order'; const FILTER_NAME_LOCATION = 'location'; const ITEM_TYPE_DUMMY = 0; const ITEM_TYPE_PRODUCT = 1; const ITEM_TYPE_UPDATE = 2; const TAG_LICENCE_GID = 7; const TAG_TYPE_ID = 1; const TAG_ISORIGINAL = 'original-product'; /** * @param int $status * @param int $id * * @throws Exception */ public function setStatus($status, $id) { if (false === in_array($status, $this->_allowedStatusTypes)) { throw new Exception('Wrong value for project status.'); } $updateValues = array( 'status' => $status, 'changed_at' => new Zend_Db_Expr('Now()') ); if (self::PROJECT_DELETED == $status) { $updateValues['deleted_at'] = new Zend_Db_Expr('NOW()'); } $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); } /** * @param int $member_id * @param int $id */ public function setClaimedByMember($member_id, $id) { $updateValues = array( 'claimed_by_member' => $member_id, 'changed_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); } /** * @param int $id */ public function resetClaimedByMember($id) { $updateValues = array( 'claimed_by_member' => new Zend_Db_Expr('NULL'), 'changed_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); } /** * @param int $id */ public function transferClaimToMember($id) { $project = $this->fetchProductInfo($id); //Update ppload $pploadFiles = new Default_Model_DbTable_PploadFiles(); $updateValues = array( 'owner_id' => $project->claimed_by_member ); $pploadFiles->update($updateValues, "collection_id = ".$project->ppload_collection_id); $pploadCollection = new Default_Model_DbTable_PploadCollections(); $updateValues = array( 'owner_id' => $project->claimed_by_member ); $pploadCollection->update($updateValues, "id = ".$project->ppload_collection_id); //And prohect $updateValues = array( 'member_id' => new Zend_Db_Expr('claimed_by_member'), 'claimable' => new Zend_Db_Expr('NULL'), 'claimed_by_member' => new Zend_Db_Expr('NULL') ); $this->update($updateValues, $this->_db->quoteInto('project_id=? and claimable = 1', $id, 'INTEGER')); } /** * @param int $project_id * @param $member_id * * @throws Zend_Db_Statement_Exception * @throws Zend_Exception */ public function setInActive($project_id, $member_id) { $project_id = (int)$project_id; $updateValues = array( 'status' => self::PROJECT_INACTIVE, 'deleted_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 40 AND project_id=' . $project_id); $this->setInActiveForUpdates($project_id); $this->setDeletedForComments($member_id,$project_id); } /** * @param int $id */ protected function setInActiveForUpdates($id) { $id = (int)$id; $updateValues = array( 'status' => self::PROJECT_INACTIVE, 'changed_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 40 AND pid=' . $id); } /** * @param int $member_id * @param int $id * * @throws Zend_Db_Statement_Exception * @throws Zend_Exception */ private function setDeletedForComments($member_id, $id) { $modelComments = new Default_Model_ProjectComments(); $modelComments->setAllCommentsForProjectDeleted($member_id, $id); } /** * @param int $id * * @return mixed * @throws Zend_Db_Statement_Exception */ public function fetchActiveBySourcePk($id) { $q = $this->select()->where('status = ?', self::PROJECT_ACTIVE)->where('source_pk = ?', (int)$id) ->where('source_type = "project"') ; return $q->query()->fetch(); } /** * @param int $member_id * @param bool $onlyActiveProjects * * @return mixed */ public function countAllProjectsForMember($member_id, $onlyActiveProjects = false) { $q = $this->select()->from($this, array('countAll' => new Zend_Db_Expr('count(*)')))->setIntegrityCheck(false) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER')->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD) ; $resultSet = $q->query()->fetchAll(); return $resultSet[0]['countAll']; } /** * @param int $member_id * @param bool $onlyActiveProjects * @param $catids * * @return mixed * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ public function countAllProjectsForMemberCatFilter($member_id, $onlyActiveProjects = false, $catids = null) { $q = $this->select()->from($this, array('countAll' => new Zend_Db_Expr('count(*)')))->setIntegrityCheck(false) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER')->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD) ; if (isset($catids)) { $q->where('project_category_id in (' . $this->_getCatIds($catids) . ')'); } $resultSet = $q->query()->fetchAll(); return $resultSet[0]['countAll']; } /** * @param $catids * * @return string * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ protected function _getCatIds($catids) { $sqlwhereCat = ""; $sqlwhereSubCat = ""; $idCategory = explode(',', $catids); if (false === is_array($idCategory)) { $idCategory = array($idCategory); } $sqlwhereCat .= implode(',', $idCategory); $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildElements($idCategory); if (count($subCategories) > 0) { foreach ($subCategories as $element) { $sqlwhereSubCat .= "{$element['project_category_id']},"; } } return $sqlwhereSubCat . $sqlwhereCat; } /** * By default it will show all projects for a member included the unpublished elements. * * @param int $member_id * @param int|null $limit * @param int|null $offset * @param bool $onlyActiveProjects * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchAllProjectsForMember($member_id, $limit = null, $offset = null, $onlyActiveProjects = false) { $q = $this->select()->from($this, array( '*', 'project_validated' => 'project.validated', 'project_uuid' => 'project.uuid', 'project_status' => 'project.status', 'project_created_at' => 'project.created_at', 'project_changed_at' => 'project.changed_at', 'member_type' => 'member.type', 'project_member_id' => 'member_id', 'laplace_score' => new Zend_Db_Expr('laplace_score(count_likes,count_dislikes)'), 'catTitle' => new Zend_Db_Expr('(SELECT title FROM project_category WHERE project_category_id = project.project_category_id)') ))->setIntegrityCheck(false)->join('member', 'project.member_id = member.member_id', array('username')) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER')->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD) ->order('project_changed_at DESC') ; if (isset($limit)) { $q->limit($limit, $offset); } return $this->generateRowSet($q->query()->fetchAll()); } /** * @param array $data * * @return Zend_Db_Table_Rowset_Abstract */ protected function generateRowSet($data) { $classRowSet = $this->getRowsetClass(); return new $classRowSet(array( 'table' => $this, 'rowClass' => $this->getRowClass(), 'stored' => true, 'data' => $data )); } /** * By default it will show all projects for a member included the unpublished elements. * * @param int $member_id * @param int|null $limit * @param int|null $offset * @param bool $onlyActiveProjects * * @param null $catids * * @return Zend_Db_Table_Rowset_Abstract * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ public function fetchAllProjectsForMemberCatFilter( $member_id, $limit = null, $offset = null, $onlyActiveProjects = false, $catids = null ) { $q = $this->select()->from($this, array( '*', 'project_validated' => 'project.validated', 'project_uuid' => 'project.uuid', 'project_status' => 'project.status', 'project_created_at' => 'project.created_at', 'project_changed_at' => 'project.changed_at', 'member_type' => 'member.type', 'project_member_id' => 'member_id', 'laplace_score' => new Zend_Db_Expr('laplace_score(count_likes,count_dislikes)'), 'catTitle' => new Zend_Db_Expr('(SELECT title FROM project_category WHERE project_category_id = project.project_category_id)') ))->setIntegrityCheck(false)->join('member', 'project.member_id = member.member_id', array('username')) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER')->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD) ->order('project_changed_at DESC') ; if (isset($catids)) { $q->where('project_category_id in (' . $this->_getCatIds($catids) . ')'); } if (isset($limit)) { $q->limit($limit, $offset); } return $this->generateRowSet($q->query()->fetchAll()); } /** * @param $collection_id * * @return null|Zend_Db_Table_Row_Abstract */ public function fetchProductForCollectionId($collection_id) { $sql = ' SELECT `p`.* FROM `project` AS `p` WHERE `p`.`ppload_collection_id` = :collectionId AND `p`.`status` >= :projectStatus AND `p`.`type_id` = :typeId '; $result = $this->_db->fetchRow($sql, array( 'collectionId' => $collection_id, 'projectStatus' => self::PROJECT_INACTIVE, 'typeId' => self::PROJECT_TYPE_STANDARD )); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @param int $project_id * * @return null|Zend_Db_Table_Row_Abstract */ public function fetchProductInfo($project_id) { $sql = ' SELECT `p`.*, `p`.`validated` AS `project_validated`, `p`.`uuid` AS `project_uuid`, `p`.`status` AS `project_status`, `p`.`created_at` AS `project_created_at`, `p`.`major_updated_at` AS `project_major_updated_at`, `p`.`changed_at` AS `project_changed_at`, `p`.`member_id` AS `project_member_id`, `p`.`source_pk` AS `project_source_pk`, `p`.`version` AS `project_version`, `pc`.`title` AS `cat_title`, `m`.`username`, `m`.`avatar`, `m`.`profile_image_url`, `m`.`roleId`, `m`.`mail`, `m`.`paypal_mail`, `m`.`dwolla_id`, IFNULL(pr.score_with_pling, 500) AS laplace_score, `view_reported_projects`.`amount_reports` AS `amount_reports`, (SELECT `tag`.`tag_fullname` FROM `tag_object`, `tag` WHERE `tag_object`.`tag_id`=`tag`.`tag_id` AND `tag_object_id` = `p`.`project_id` AND `tag_object`.`is_deleted`=0 AND `tag_group_id` = :tag_licence_gid AND `tag_type_id` = :tag_type_id ORDER BY `tag_object`.`tag_created` DESC LIMIT 1) AS `project_license_title` FROM `project` AS `p` JOIN `member` AS `m` ON `p`.`member_id` = `m`.`member_id` AND `m`.`is_active` = 1 AND `m`.`is_deleted` = 0 JOIN `project_category` AS `pc` ON `p`.`project_category_id` = `pc`.`project_category_id` LEFT join stat_rating_project AS pr ON p.project_id = pr.project_id LEFT JOIN `view_reported_projects` ON ((`view_reported_projects`.`project_id` = `p`.`project_id`)) WHERE `p`.`project_id` = :projectId AND `p`.`status` >= :projectStatus AND (`p`.`type_id` = :typeIdStd OR `p`.`type_id` = :typeIdColl) '; $result = $this->_db->fetchRow($sql, array( 'projectId' => $project_id, 'projectStatus' => self::PROJECT_INACTIVE, 'typeIdStd' => self::PROJECT_TYPE_STANDARD, 'typeIdColl' => self::PROJECT_TYPE_COLLECTION, 'tag_licence_gid' => self::TAG_LICENCE_GID, 'tag_type_id' => self::TAG_TYPE_ID )); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @param $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchProjectUpdates($project_id) { $projectSel = $this->select()->setIntegrityCheck(false)->from($this->_name) ->join('member', 'project.member_id = member.member_id', array('*')) ->where('project.pid=?', $project_id, 'INTEGER')->where('project.status>?', self::PROJECT_INACTIVE) ->where('project.type_id=?', self::PROJECT_TYPE_UPDATE)->order('RAND()') ; return $this->fetchAll($projectSel); } /** * @param $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchAllProjectUpdates($project_id) { $projectSel = $this->select()->setIntegrityCheck(false)->from($this->_name)->where('project.pid=?', $project_id, 'INTEGER') ->where('project.status>?', self::PROJECT_INACTIVE)->where('project.type_id=?', self::PROJECT_TYPE_UPDATE) ; return $this->fetchAll($projectSel); } /** * @param $project * @param int $count * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchSimilarProjects($project, $count = 10) { $count = (int)$count; $sql = " SELECT * FROM `stat_projects` AS `p` WHERE `p`.`project_category_id` = :cat_id AND `project_id` <> :project_id ORDER BY `p`.`changed_at` DESC LIMIT {$count} "; $result = $this->_db->fetchAll($sql, array( 'cat_id' => $project->project_category_id, 'project_id' => $project->project_id )); return $this->generateRowSet($result); } /** * @param Zend_Db_Table_Row $project * @param int $count * * @return Zend_Db_Table_Rowset_Abstract * @throws Zend_Exception */ public function fetchMoreProjects($project, $count = 6) { $q = $this->select()->from(array('project' => 'stat_projects'), array( 'project_id', 'image_small', 'title', 'catTitle' => 'cat_title', 'changed_at' ))->setIntegrityCheck(false) ->where('project.status = ?', self::PROJECT_ACTIVE) ->where('project.member_id = ?', $project->member_id, 'INTEGER') ->where('project.project_id != ?', $project->project_id, 'INTEGER') ->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD) ->where('project.amount_reports is null') ->where('project.project_category_id = ?', $project->project_category_id, 'INTEGER') ->limit($count) ->order('project.project_created_at DESC') ; $tagFilter = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null; if ($tagFilter) { $q = $this->generateTagFilter($q, array(self::FILTER_NAME_TAG => $tagFilter)); } $result = $this->fetchAll($q); return $result; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select */ protected function generateTagFilter(Zend_Db_Select $statement, $filterArrayValue) { if (false == isset($filterArrayValue[self::FILTER_NAME_TAG])) { return $statement; } $filter = $filterArrayValue[self::FILTER_NAME_TAG]; if (is_array($filter)) { $tagList = $filter; //build where statement für projects $selectAnd = $this->select()->from(array('project' => 'stat_projects')); foreach($tagList as $item) { #and $selectAnd->where('find_in_set(?, tag_ids)', $item); } $statement->where(implode(' ', $selectAnd->getPart('where'))); /* $statement->join(array( 'tags' => new Zend_Db_Expr('(SELECT DISTINCT project_id FROM stat_project_tagids WHERE tag_id in (' . implode(',', $filter) . '))') ), 'project.project_id = tags.project_id', array()); * */ } else { $statement->where('find_in_set(?, tag_ids)', $filter); } return $statement; } /** * @param $project * @param int $count * * @return Zend_Db_Table_Rowset_Abstract * @throws Zend_Db_Statement_Exception * @throws Zend_Exception * @todo improve processing speed */ public function fetchMoreProjectsOfOtherUsr($project, $count = 8) { $sql = " SELECT count(1) AS `count` FROM `stat_projects` WHERE `status` = :current_status AND `member_id` <> :current_member_id AND `project_category_id` = :category_id AND `type_id` = :project_type "; $result = $this->_db->query($sql, array( 'current_status' => self::PROJECT_ACTIVE, 'current_member_id' => $project->member_id, 'category_id' => $project->project_category_id, 'project_type' => self::PROJECT_TYPE_STANDARD ))->fetch() ; if ($result['count'] > $count) { $offset = rand(0, $result['count'] - $count); } else { $offset = 0; } $q = $this->select()->from(array('project' => 'stat_projects'), array( 'project_id', 'image_small', 'title', 'catTitle' => 'cat_title', 'changed_at' ))->setIntegrityCheck(false)->where('status = ?', self::PROJECT_ACTIVE) ->where('member_id != ?', $project->member_id, 'INTEGER')->where('type_id = ?', 1) ->where('amount_reports is null') ->where('project_category_id = ?', $project->project_category_id, 'INTEGER')->limit($count, $offset) ->order('project_created_at DESC') ; $tagFilter = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null; if ($tagFilter) { $q = $this->generateTagFilter($q, array(self::FILTER_NAME_TAG => $tagFilter)); } $result = $this->fetchAll($q); return $result; } /** * @param int $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchProjectSupporter($project_id) { $plingTable = new Default_Model_DbTable_Plings(); return $plingTable->getSupporterForProjectId($project_id); } /** * @param int $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchProjectSupporterWithPlings($project_id) { $plingTable = new Default_Model_DbTable_Plings(); return $plingTable->getSupporterWithPlingsForProjectId($project_id); } /** * @param $projectId * @param $sources */ public function updateGalleryPictures($projectId, $sources) { $galleryPictureTable = new Default_Model_DbTable_ProjectGalleryPicture(); $galleryPictureTable->clean($projectId); $galleryPictureTable->insertAll($projectId, $sources); } /** * @param $projectId * * @return array */ public function getGalleryPictureSources($projectId) { $galleryPictureTable = new Default_Model_DbTable_ProjectGalleryPicture(); $stmt = $galleryPictureTable->select()->where('project_id = ?', $projectId)->order(array('sequence')); $pics = array(); foreach ($galleryPictureTable->fetchAll($stmt) as $pictureRow) { $pics[] = $pictureRow['picture_src']; } return $pics; } /** * @param int $project_id * * @return array * @throws Zend_Db_Statement_Exception */ public function fetchProjectViews($project_id) { $sql = " SELECT `project_id`, `count_views`, `count_visitor`, `last_view` FROM `stat_page_views_mv` WHERE `project_id` = ? "; $database = Zend_Db_Table::getDefaultAdapter(); $sql = $database->quoteInto($sql, $project_id, 'INTEGER', 1); $resultSet = $database->query($sql)->fetchAll(); if (count($resultSet) > 0) { $result = $resultSet[0]['count_views']; } else { $result = 0; } return $result; } /** * @param int $member_id * * @return int * @throws Zend_Db_Statement_Exception */ public function fetchOverallPageViewsByMember($member_id) { $sql = " SELECT sum(`stat`.`amount`) AS `page_views` FROM `project` JOIN (SELECT `project_id`, count(`project_id`) AS `amount` FROM `stat_page_views` GROUP BY `project_id`) AS `stat` ON `stat`.`project_id` = `project`.`project_id` WHERE `project`.`member_id` = :member_id AND `project`.`status` = :project_status GROUP BY `member_id` "; $result = $this->_db->query($sql, array('member_id' => $member_id, 'project_status' => self::PROJECT_ACTIVE)); if ($result->rowCount() > 0) { $row = $result->fetch(); return $row['page_views']; } else { return 0; } } /** * @return array * @throws Zend_Db_Statement_Exception */ public function getStatsForNewProjects() { $sql = " SELECT DATE_FORMAT(`time`, '%M %D') AS `projectdate`, count(1) AS `daycount` FROM `activity_log` WHERE `activity_type_id` = 0 GROUP BY DATE_FORMAT(`time`, '%Y%M%D') ORDER BY `time` DESC LIMIT 14 ;"; $database = Zend_Db_Table::getDefaultAdapter(); $resultSet = $database->query($sql)->fetchAll(); return $resultSet; } /** * @param int $idCategory * @param int|null $limit * * @return Zend_Db_Table_Rowset_Abstract * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ public function fetchProductsByCategory($idCategory, $limit = null) { $select = $this->select()->setIntegrityCheck(false)->from($this->_name)->where('project.project_category_id in (?)', $idCategory) ->where('project.status = ?', self::PROJECT_ACTIVE)->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD) ->joinLeft(array( 'pling_amount' => new Zend_Db_Expr('(SELECT project_id as plinged_project_id, SUM(amount) AS sumAmount, count(1) as countPlings FROM plings where status_id >= 2 group by project_id order by sumAmount DESC)') ), 'pling_amount.plinged_project_id = project.project_id') ->joinLeft('project_category', 'project_category.project_category_id = project.project_category_id', array('cat_title' => 'title'))->order('pling_amount.sumAmount DESC') ; if (false === is_null($limit)) { $select->limit($limit); } $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildElements($idCategory); if (count($subCategories) > 0) { $sqlwhere = ''; foreach ($subCategories as $element) { $sqlwhere .= "{$element['project_category_id']},"; } $sqlwhere = substr($sqlwhere, 0, -1); if (!empty($sqlwhere)) { $sqlwhere = explode(',', $sqlwhere); } $select->orWhere('project.project_category_id in (?)', $sqlwhere); } return $this->fetchAll($select); } /** * @param int|array $idCategory id of a category or an array of id's * @param bool $withSubCat if was set true it will also count products in sub categories * @param null $store_id * * @return int count of products in given category * @throws Zend_Exception * @deprecated */ public function countProductsInCategory($idCategory = null, $withSubCat = true, $store_id = null) { if (empty($idCategory)) { throw new Zend_Exception('idCategory param was not set'); } if (false == is_array($idCategory)) { $idCategory = array($idCategory); } if (isset($store_id)) { $configurations = Zend_Registry::get('application_store_config_id_list'); $store_config = isset($configurations[$store_id]) ? $configurations[$store_id] : null; } else { $store_config = Zend_Registry::isRegistered('store_config') ? Zend_Registry::get('store_config') : null; } $tagFilter = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null; $cacheName = __FUNCTION__ . '_' . md5(serialize($idCategory) . $withSubCat . serialize($tagFilter)); /** @var Zend_Cache_Core $cache */ $cache = Zend_Registry::get('cache'); if (false !== ($resultSet = $cache->load($cacheName))) { return (int)$resultSet[0]['count_active_projects']; } $select = $this->select()->setIntegrityCheck(false)->from('stat_projects', array('count_active_projects' => 'COUNT(1)')) ->where('status = ? ', self::PROJECT_ACTIVE)->where('type_id = ?', self::PROJECT_TYPE_STANDARD) ; $select = $this->generateTagFilter($select, array(self::FILTER_NAME_TAG => $tagFilter)); if ($withSubCat) { $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildIds($idCategory); $inCategories = implode(',', array_unique(array_merge($idCategory, $subCategories))); } else { $inCategories = implode(',', $idCategory); } $select->where('project_category_id in (' . $inCategories . ')'); $resultSet = $this->fetchAll($select)->toArray(); $cache->save($resultSet, $cacheName, array(), 60); return (int)$resultSet[0]['count_active_projects']; } /** * @param int|array $idCategory * * @return int * @throws Zend_Exception */ public function countActiveMembersForCategory($idCategory) { $cacheName = __FUNCTION__ . md5(serialize($idCategory)); $cache = Zend_Registry::get('cache'); $result = $cache->load($cacheName); if ($result) { return (int)$result['count_active_members']; } $sqlwhereCat = ""; $sqlwhereSubCat = ""; if (false === is_array($idCategory)) { $idCategory = array($idCategory); } $sqlwhereCat .= implode(',', $idCategory); $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildElements($idCategory); if (count($subCategories) > 0) { foreach ($subCategories as $element) { $sqlwhereSubCat .= "{$element['project_category_id']},"; } } $selectWhere = 'AND p.project_category_id in (' . $sqlwhereSubCat . $sqlwhereCat . ')'; $sql = "SELECT count(1) AS `count_active_members` FROM ( SELECT count(1) AS `count_active_projects` FROM `project` `p` WHERE `p`.`status` = 100 AND `p`.`type_id` = 1 {$selectWhere} GROUP BY p.member_id ) AS `A`;"; $result = $this->_db->fetchRow($sql); $cache->save($result, $cacheName); return (int)$result['count_active_members']; } /** * @param int $project_id * * @return bool */ public function isProjectFeatured($project_id) { $sql_object = "SELECT `project_id` FROM `project` WHERE `project_id`= :project_id AND `status` = 100 AND `type_id` = 1 AND `featured` = 1"; $r = $this->getAdapter()->fetchRow($sql_object, array('project_id' => $project_id)); if ($r) { return true; } else { return false; } } /** * @param int $project_id * * @return bool */ public function isProjectClone($project_id) { $sql_object = "SELECT c.project_clone_id FROM project_clone c WHERE c.is_valid = 1 AND c.is_deleted = 0 AND c.project_id_parent IS NOT NULL AND c.project_id = :project_id"; $r = $this->getAdapter()->fetchRow($sql_object, array('project_id' => $project_id)); if ($r) { return true; } else { return false; } } /** * @param bool $in_current_store * * @return int * @throws Zend_Exception */ public function fetchTotalProjectsCount($in_current_store = false) { $sql = "SELECT count(1) AS `total_project_count` FROM `stat_projects`"; if ($in_current_store) { $store_tags = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null; /* if ($store_tags) { $sql .= ' JOIN (SELECT DISTINCT project_id FROM stat_project_tagids WHERE tag_id in (' . implode(',', $store_tags) . ')) AS tags ON stat_projects.project_id = tags.project_id'; } * */ $info = new Default_Model_Info(); $activeCategories = $info->getActiveCategoriesForCurrentHost(); $sql .= ' WHERE project_category_id IN (' . implode(',', $activeCategories) . ')'; //Store Tag Filter if ($store_tags) { $tagList = $store_tags; //build where statement für projects $sql .= " AND ("; if(!is_array($tagList)) { $tagList = array($tagList); } foreach($tagList as $item) { #and $sql .= ' find_in_set('.$item.', tag_ids) AND '; } $sql .= ' 1=1)';; } } $result = $this->_db->fetchRow($sql); return (int)$result['total_project_count']; } /** * @param $member_id * * @throws Zend_Db_Statement_Exception * @throws Zend_Exception */ public function setAllProjectsForMemberDeleted($member_id) { $sql = "SELECT `project_id` FROM `project` WHERE `member_id` = :memberId AND `type_id` = :typeId AND `status` > :project_status"; $projectForDelete = $this->_db->fetchAll($sql, array( 'memberId' => $member_id, 'typeId' => self::PROJECT_TYPE_STANDARD, 'project_status' => self::PROJECT_DELETED )); foreach ($projectForDelete as $item) { $this->setDeleted($member_id, $item['project_id']); } // set personal page deleted $sql = "SELECT project_id FROM project WHERE member_id = :memberId AND type_id = :typeId"; $projectForDelete = $this->_db->fetchAll($sql, array( 'memberId' => $member_id, 'typeId' => self::PROJECT_TYPE_PERSONAL )); foreach ($projectForDelete as $item) { $this->setDeleted($member_id, $item['project_id']); } /* $sql = "UPDATE project SET `status` = :statusCode, deleted_at = NOW() WHERE member_id = :memberId AND type_id = :typeId"; $this->_db->query($sql, array( 'statusCode' => self::PROJECT_DELETED, 'memberId' => $member_id, 'typeId' => self::PROJECT_TYPE_PERSONAL ))->execute(); */ } /** * @param int $member_id * @param int $id * * @throws Zend_Db_Statement_Exception * @throws Zend_Exception */ public function setDeleted($member_id, $id) { $id = (int)$id; $updateValues = array( 'status' => self::PROJECT_DELETED, 'deleted_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 30 AND project_id=' . $id); $memberLog = new Default_Model_MemberDeactivationLog(); $memberLog->logProjectAsDeleted($member_id, $id); $this->setDeletedForUpdates($member_id, $id); $this->setDeletedForComments($member_id, $id); $this->setDeletedInMaterializedView($id); } /** * @param $member_id * @param int $id */ protected function setDeletedForUpdates($member_id, $id) { $id = (int)$id; $updateValues = array( 'status' => self::PROJECT_DELETED, 'deleted_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 30 AND pid=' . $id); } /** * @param $id * * @throws Zend_Db_Statement_Exception */ private function setDeletedInMaterializedView($id) { $sql = "UPDATE `stat_projects` SET `status` = :new_status WHERE `project_id` = :project_id"; $result = $this->_db->query($sql, array('new_status' => self::PROJECT_DELETED, 'project_id' => $id))->execute(); } /** * @param int $member_id * * @throws Zend_Exception */ public function setAllProjectsForMemberActivated($member_id) { $sql = "SELECT `p`.`project_id` FROM `project` `p` JOIN `member_deactivation_log` `l` ON `l`.`object_type_id` = 3 AND `l`.`object_id` = `p`.`project_id` AND `l`.`deactivation_id` = `p`.`member_id` WHERE `p`.`member_id` = :memberId"; $projectForDelete = $this->_db->fetchAll($sql, array( 'memberId' => $member_id )); foreach ($projectForDelete as $item) { $this->setActive($member_id, $item['project_id']); } } /** * @param int $member_id * @param int $id * * @throws Zend_Exception */ public function setActive($member_id, $id) { $updateValues = array( 'status' => self::PROJECT_ACTIVE, 'deleted_at' => null ); $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); $memberLog = new Default_Model_MemberDeactivationLog(); $memberLog->removeLogProjectAsDeleted($member_id, $id); $this->setActiveForUpdates($member_id, $id); $this->setActiveForComments($member_id, $id); } /** * @param int $id */ protected function setActiveForUpdates($member_id, $id) { $updateValues = array( 'status' => self::PROJECT_ACTIVE, 'deleted_at' => null ); $this->update($updateValues, $this->_db->quoteInto('pid=?', $id, 'INTEGER')); } /** * @param int $member_id * @param int $project_id */ private function setActiveForComments($member_id, $project_id) { $modelComments = new Default_Model_ProjectComments(); $modelComments->setAllCommentsForProjectActivated($member_id, $project_id); } /** * @param array $inputFilterParams * @param int|null $limit * @param int|null $offset * * @return array * @throws Zend_Cache_Exception * @throws Zend_Db_Select_Exception * @throws Zend_Exception */ public function fetchProjectsByFilter($inputFilterParams, $limit = null, $offset = null) { $cacheName = __FUNCTION__ . '_' . md5(serialize($inputFilterParams) . (string)$limit . (string)$offset); /** @var Zend_Cache_Core $cache */ $cache = Zend_Registry::get('cache'); if (false === ($returnValue = $cache->load($cacheName))) { $statement = $this->generateStatement($inputFilterParams, $limit, $offset); if (APPLICATION_ENV == 'development') { Zend_Registry::get('logger')->debug(__METHOD__ . ' - ' . $statement->__toString()); } /** @var Zend_Db_Table_Rowset $fetchedElements */ $fetchedElements = $this->fetchAll($statement); $statement->reset('limitcount')->reset('limitoffset'); $statement->reset('columns')->columns(array('count' => new Zend_Db_Expr('count(*)'))); $countElements = $this->fetchRow($statement); $returnValue = array('elements' => $fetchedElements, 'total_count' => $countElements->count); $cache->save($returnValue, $cacheName, array(), 120); } return $returnValue; } /** * @param array $inputFilterParams * @param int|null $limit * @param int|null $offset * * @return Zend_Db_Select * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ protected function generateStatement($inputFilterParams, $limit = null, $offset = null) { $statement = $this->generateBaseStatement(); $statement = $this->generateCategoryFilter($statement, $inputFilterParams); $statement = $this->generateOrderFilter($statement, $inputFilterParams); $statement = $this->generateTagFilter($statement, $inputFilterParams); // $statement = $this->generateOriginalFilter($statement, $inputFilterParams); $statement = $this->generateFavoriteFilter($statement, $inputFilterParams); $statement = $this->generateReportedSpamFilter($statement); $statement->limit($limit, $offset); return $statement; } /** * @return Zend_Db_Select */ protected function generateBaseStatement() { $statement = $this->select()->setIntegrityCheck(false); //$statement->from(array('project' => $this->_name), array( $statement->from(array('project' => 'stat_projects'), array( '*' )); $statement->where('project.status = ?', self::PROJECT_ACTIVE)->where('project.type_id IN (?)', array(self::PROJECT_TYPE_STANDARD, self::PROJECT_TYPE_COLLECTION)); return $statement; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select * @throws Zend_Cache_Exception * @throws Zend_Db_Statement_Exception */ protected function generateCategoryFilter(Zend_Db_Select $statement, $filterArrayValue) { if (false == isset($filterArrayValue[self::FILTER_NAME_CATEGORY])) { return $statement; } $filter = $filterArrayValue[self::FILTER_NAME_CATEGORY]; if (false === is_array($filter)) { $filter = array($filter); } // fetch child elements for each category $modelProjectCategories = new Default_Model_DbTable_ProjectCategory(); $childElements = $modelProjectCategories->fetchChildIds($filter); $allCategories = array_unique(array_merge($filter, $childElements)); $stringCategories = implode(',', $allCategories); $statement->where("( project.project_category_id IN ({$stringCategories}) )"); return $statement; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select */ protected function generateOrderFilter(Zend_Db_Select $statement, $filterArrayValue) { if (!isset($filterArrayValue[self::FILTER_NAME_ORDER])) { $filterValue = ''; } else { $filterValue = $filterArrayValue[self::FILTER_NAME_ORDER]; } switch ($filterValue) { case 'latest': $statement->order('project.major_updated_at DESC'); //$statement->order('project.changed_at DESC'); break; case 'rating': //$statement->order(array('amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC')); //$statement->order(array(new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'),'amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC')); /*$statement->order(array( new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'), 'project.created_at DESC' ));*/ $statement->order('project.laplace_score DESC'); break; case 'plinged': $statement->order('project.count_plings DESC'); break; case 'test': $statement->order('project.laplace_score_test DESC'); break; case 'top': $statement->order('project.laplace_score_old DESC'); break; case 'download': $statement->order('project.count_downloads_hive DESC'); break; case 'downloadQuarter': $statement->order('project.count_downloads_quarter DESC'); break; case 'hot': $statement->order(array( new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'), 'count_plings DESC', 'project.created_at DESC' )); $statement->where(' project.created_at >= (NOW()- INTERVAL 14 DAY)'); break; case 'alpha': default: $statement->order('project.title'); } return $statement; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select */ /*protected function generateOriginalFilter(Zend_Db_Select $statement, $filterArrayValue) { if (false == isset($filterArrayValue[self::FILTER_NAME_ORIGINAL])) { return $statement; } $filter = $filterArrayValue[self::FILTER_NAME_ORIGINAL]; if (is_array($filter)) { // todo maybe for other tags filter } else { $statement->where('find_in_set(?, tags)', $filter); } return $statement; }*/ /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select */ protected function generateFavoriteFilter(Zend_Db_Select $statement, $filterArrayValue) { if (false == isset($filterArrayValue[self::FILTER_NAME_FAVORITE])) { return $statement; } $filterMemberId = $filterArrayValue[self::FILTER_NAME_FAVORITE]; if ( null != $filterMemberId) { $statement->where('project_follower.member_id = ?', $filterMemberId); $statement->setIntegrityCheck(false)->join('project_follower', 'project.project_id = project_follower.project_id', array('project_follower_id')); } return $statement; } /** * @param Zend_Db_Select $statement * * @return Zend_Db_Select */ protected function generateReportedSpamFilter(Zend_Db_Select $statement) { return $statement->where('(amount_reports is null)'); } /** * @param int $member_id * @param array $values * @param string $username * * @return Zend_Db_Table_Row_Abstract * @throws Exception * @throws Zend_Db_Table_Exception */ public function createProject($member_id, $values, $username) { $values = (array)$values; if (empty($member_id)) { throw new Zend_Db_Table_Exception('member_id is not set'); } if (empty($username)) { throw new Zend_Db_Table_Exception('username is not set'); } // check important values for a new project $values['uuid'] = (!array_key_exists('uuid', $values)) ? Local_Tools_UUID::generateUUID() : $values['uuid']; $values['member_id'] = (!array_key_exists('member_id', $values)) ? $member_id : $values['member_id']; $values['status'] = (!array_key_exists('status', $values)) ? self::PROJECT_INACTIVE : $values['status']; $values['type_id'] = (!array_key_exists('type_id', $values)) ? self::ITEM_TYPE_PRODUCT : $values['type_id']; $values['created_at'] = (!array_key_exists('created_at', $values)) ? new Zend_Db_Expr('NOW()') : $values['created_at']; $values['start_date'] = (!array_key_exists('start_date', $values)) ? new Zend_Db_Expr('NULL') : $values['start_date']; $values['creator_id'] = (!array_key_exists('creator_id', $values)) ? $member_id : $values['creator_id']; $values['gitlab_project_id'] = (empty($values['gitlab_project_id'])) ? new Zend_Db_Expr('NULL') : $values['gitlab_project_id']; if ($username == 'pling editor') { $values['claimable'] = (!array_key_exists('claimable', $values)) ? self::PROJECT_CLAIMABLE : $values['claimable']; } $savedRow = $this->save($values); return $savedRow; } /** * @param int $project_id * @param array $values * * @return Zend_Db_Table_Row_Abstract * @throws Exception * @throws Zend_Db_Table_Exception */ public function updateProject($project_id, $values) { $values = (array)$values; $projectData = $this->find($project_id)->current(); if (empty($projectData)) { throw new Zend_Db_Table_Exception('project_id not found'); } $values['gitlab_project_id'] = (empty($values['gitlab_project_id'])) ? new Zend_Db_Expr('NULL') : $values['gitlab_project_id']; $projectData->setFromArray($values)->save(); return $projectData; } /** * @param int $member_id * * @return array|mixed */ public function fetchMainProject($member_id) { $sql = "SELECT * FROM {$this->_name} WHERE type_id = :type AND member_id = :member"; // $this->_db->getProfiler()->setEnabled(true); $result = $this->_db->fetchRow($sql, array('type' => self::PROJECT_TYPE_PERSONAL, 'member' => (int)$member_id)); // $dummy = $this->_db->getProfiler()->getLastQueryProfile()->getQuery(); // $this->_db->getProfiler()->setEnabled(true); if (count($result) > 0) { return $result; } else { return array(); } } /** * @param $project_id * * @return Zend_Db_Table_Row_Abstract * @throws Zend_Db_Statement_Exception */ public function fetchProductDataFromMV($project_id) { $sql = "SELECT * FROM `stat_projects` WHERE `project_id` = :project_id"; $resultSet = $this->_db->query($sql, array('project_id' => $project_id))->fetch(); if (false === $resultSet) { return $this->generateRowClass(array()); } return $this->generateRowClass($resultSet); } /** * @return array */ public function fetchGhnsExcludedProjects() { $sql = " SELECT `p`.`project_id`, `p`.`title`, `l`.`member_id` AS `exclude_member_id`, `l`.`time` AS `exclude_time`, `m`.`username` AS `exclude_member_name` FROM `project` `p` JOIN `activity_log` `l` ON `l`.`project_id` = `p`.`project_id` AND `l`.`activity_type_id` = 314 INNER JOIN `member` `m` ON `m`.`member_id` = `l`.`member_id` WHERE `p`.`ghns_excluded` = 1 "; $list = $this->_db->fetchAll($sql); return $list; } public function getUserCreatingCategorys($member_id) { $sql = " select c.title as category1, count(1) as cnt from project p join project_category c on p.project_category_id = c.project_category_id where p.status = 100 and p.member_id =:member_id and p.type_id = 1 group by c.title order by cnt desc, c.title asc "; $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); return $result; } /** * @return array */ public function getUserActiveProjects($member_id, $limit = null, $offset = null) { // for member me page $sql = " SELECT `p`.`project_id`, `p`.`title`, `p`.`created_at` AS `project_created_at`, `p`.`changed_at` AS `project_changed_at`, `pr`.`likes` AS count_likes, `pr`.`dislikes`AS count_dislikes, IFNULL(pr.score_with_pling, 500) AS laplace_score, `p`.`member_id`, `cat`.`title` AS `catTitle`, `p`.`project_category_id`, `p`.`image_small`, (SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings`, c.cnt cntCategory FROM `project` `p` join project_category cat on p.project_category_id = cat.project_category_id LEFT join stat_rating_project AS pr ON p.project_id = pr.project_id left join stat_cnt_projects_catid_memberid c on p.project_category_id = c.project_category_id and p.member_id = c.member_id WHERE `p`.`status` =100 and `p`.`type_id` = 1 AND `p`.`member_id` = :member_id ORDER BY cntCategory desc,catTitle asc, `p`.`changed_at` DESC "; if (isset($limit)) { $sql = $sql . ' limit ' . $limit; } if (isset($offset)) { $sql = $sql . ' offset ' . $offset; } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @return array */ public function getUserActiveProjectsDuplicatedSourceurl($member_id, $limit = null, $offset = null) { // for member me page $sql = " select * from ( SELECT `p`.`project_id`, `p`.`title`, `p`.`created_at` AS `project_created_at`, `p`.`changed_at` AS `project_changed_at`, `pr`.`likes` AS count_likes, `pr`.`dislikes`AS count_dislikes, IFNULL(pr.score_with_pling, 500) AS laplace_score, `p`.`member_id`, `cat`.`title` AS `catTitle`, `p`.`project_category_id`, `p`.`image_small`, (SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings`, c.cnt cntCategory, (select count(1) from stat_projects_source_url s where TRIM(TRAILING '/' FROM p.source_url) = s.source_url) as cntDuplicates FROM `project` `p` join project_category cat on p.project_category_id = cat.project_category_id left join stat_cnt_projects_catid_memberid c on p.project_category_id = c.project_category_id and p.member_id = c.member_id LEFT join stat_rating_project AS pr ON p.project_id = pr.project_id WHERE `p`.`status` =100 and `p`.`type_id` = 1 AND `p`.`member_id` = :member_id ORDER BY cntCategory desc,catTitle asc, `p`.`changed_at` DESC ) t where t.cntDuplicates >1 "; if (isset($limit)) { $sql = $sql . ' limit ' . $limit; } if (isset($offset)) { $sql = $sql . ' offset ' . $offset; } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @return cnt */ public function getOriginalProjectsForMemberCnt($member_id) { $sql = " SELECT count(1) as cnt FROM stat_projects p inner join tag_object t on tag_id = 2451 and tag_group_id=11 and tag_type_id = 1 and is_deleted = 0 and t.tag_object_id = p.project_id WHERE member_id = :member_id "; $result = $this->_db->fetchRow($sql, array('member_id' => $member_id)); if ($result) { return $result['cnt']; } else { return 0; } } /** * @return cnt */ public function getOriginalProjectsForMember($member_id, $limit=null, $offset=null) { $sql = " SELECT * FROM stat_projects p inner join tag_object t on tag_id = 2451 and tag_group_id=11 and tag_type_id = 1 and is_deleted = 0 and t.tag_object_id = p.project_id WHERE member_id = :member_id "; if (isset($limit)) { $sql = $sql . ' limit ' . $limit; } if (isset($offset)) { $sql = $sql . ' offset ' . $offset; } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @return int */ public function getUnpublishedProjectsForMemberCnt($member_id) { // for member me page $sql = " SELECT count(1) as cnt FROM `project` `p` WHERE `p`.`status` = 40 and `p`.`type_id` = 1 AND `p`.`member_id` = :member_id "; $result = $this->_db->fetchRow($sql, array('member_id' => $member_id)); if ($result) { return $result['cnt']; } else { return 0; } } /** * @return array */ public function getUnpublishedProjectsForMember($member_id, $limit = null, $offset = null) { // for member me page $sql = " SELECT `p`.`project_id`, `p`.`title`, `p`.`created_at` AS `project_created_at`, `p`.`changed_at` AS `project_changed_at`, `pr`.`likes` AS count_likes, `pr`.`dislikes`AS count_dislikes, IFNULL(pr.score_with_pling, 500) AS laplace_score, `p`.`member_id`, `cat`.`title` AS `catTitle`, `p`.`project_category_id`, `p`.`image_small`, (SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings` FROM `project` `p` join project_category cat on p.project_category_id = cat.project_category_id LEFT join stat_rating_project AS pr ON p.project_id = pr.project_id WHERE `p`.`status` = 40 and `p`.`type_id` = 1 AND `p`.`member_id` = :member_id ORDER BY catTitle asc, `p`.`changed_at` DESC "; if (isset($limit)) { $sql = $sql . ' limit ' . $limit; } if (isset($offset)) { $sql = $sql . ' offset ' . $offset; } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @return int */ public function getDeletedProjectsForMemberCnt($member_id) { // for member me page $sql = " SELECT count(1) as cnt FROM `project` `p` WHERE `p`.`status` = 30 and `p`.`type_id` = 1 AND `p`.`member_id` = :member_id "; $result = $this->_db->fetchRow($sql, array('member_id' => $member_id)); if ($result) { return $result['cnt']; } else { return 0; } } /** * @return array */ public function getDeletedProjectsForMember($member_id, $limit = null, $offset = null) { // for member me page $sql = " SELECT `p`.`project_id`, `p`.`title`, `p`.`created_at` AS `project_created_at`, `p`.`changed_at` AS `project_changed_at`, `pr`.`likes` AS count_likes, `pr`.`dislikes`AS count_dislikes, IFNULL(pr.score_with_pling, 500) AS laplace_score, `p`.`member_id`, `cat`.`title` AS `catTitle`, `p`.`project_category_id`, `p`.`image_small`, (SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings` FROM `project` `p` join project_category cat on p.project_category_id = cat.project_category_id LEFT join stat_rating_project AS pr ON p.project_id = pr.project_id WHERE `p`.`status` = 30 and `p`.`type_id` = 1 AND `p`.`member_id` = :member_id ORDER BY catTitle asc, `p`.`changed_at` DESC "; if (isset($limit)) { $sql = $sql . ' limit ' . $limit; } if (isset($offset)) { $sql = $sql . ' offset ' . $offset; } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); if ($result) { return $this->generateRowClass($result); } else { return null; } } public function fetchFilesForProjects($projects) { $ids=[]; foreach ($projects as $p) { $ids[] = $p->project_id; } $sql = " select p.project_id ,f.id ,f.name ,f.type ,f.size ,f.title ,f.collection_id from stat_projects p, ppload.ppload_files f where p.ppload_collection_id = f.collection_id and f.active = 1 and p.project_id in ( ".implode(',', $ids).") "; $result = $this->_db->fetchAll($sql); return $result; } public function fetchFilesForProject($project_id) { $sql = " select f.id ,f.name ,f.type ,f.size ,f.title ,f.collection_id from stat_projects p, ppload.ppload_files f where p.ppload_collection_id = f.collection_id and f.active = 1 and p.project_id = :project_id "; $result = $this->_db->fetchAll($sql,array("project_id"=>$project_id)); return $result; } /** * @param int $member_id * @param int|null $limit * @param int|null $offset * * @return null|Zend_Db_Table_Row_Abstract */ public function fetchAllFeaturedProjectsForMember($member_id, $limit = null, $offset = null) { // for member me page $sql = " SELECT `p`.`project_id`, `p`.`title`, `p`.`created_at` AS `project_created_at`, `p`.`changed_at` AS `project_changed_at`, `p`.`count_likes`, `p`.`count_dislikes`, `p`.`laplace_score`, `p`.`member_id`, `p`.`cat_title` AS `catTitle`, `p`.`image_small`, (SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings` FROM `stat_projects` `p` WHERE `p`.`status` =100 AND `p`.`type_id` = 1 AND `featured` = 1 AND `p`.`member_id` = :member_id ORDER BY `p`.`changed_at` DESC "; if (isset($limit)) { $sql = $sql . ' limit ' . $limit; } if (isset($offset)) { $sql = $sql . ' offset ' . $offset; } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @param int $member_id * @param int|null $limit * @param int|null $offset * * @return null|Zend_Db_Table_Row_Abstract */ public function fetchAllCollectionsForMember($member_id, $limit = null, $offset = null) { // for member me page $sql = " SELECT `p`.`project_id`, `p`.`title`, `p`.`created_at` AS `project_created_at`, `p`.`changed_at` AS `project_changed_at`, `p`.`count_likes`, `p`.`count_dislikes`, `p`.`laplace_score`, `p`.`member_id`, `p`.`cat_title` AS `catTitle`, `p`.`image_small`, (SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings` FROM `stat_projects` `p` WHERE `p`.`status` =100 AND `p`.`type_id` = 3 AND `p`.`member_id` = :member_id ORDER BY `p`.`changed_at` DESC "; if (isset($limit)) { $sql = $sql . ' limit ' . $limit; } if (isset($offset)) { $sql = $sql . ' offset ' . $offset; } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @param string $orderby * @param int|null $limit * @param int|null $offset * * @return array */ public function fetchDuplicatedSourceProjects($orderby = 'source_url asc', $limit = null, $offset = null) { $sql = " SELECT `source_url` ,count(1) AS `cnt`, GROUP_CONCAT(`p`.`project_id` ORDER BY `p`.`created_at`) `pids` FROM `stat_projects_source_url` `p` GROUP BY `source_url` HAVING count(1)>1 "; if (isset($orderby)) { $sql = $sql . ' order by ' . $orderby; } if (isset($limit)) { $sql .= ' limit ' . (int)$limit; } if (isset($offset)) { $sql .= ' offset ' . (int)$offset; } $result = $this->_db->fetchAll($sql); return $result; } /** * @return mixed */ public function getTotalCountDuplicates() { $sql = " SELECT count(1) AS `cnt` FROM ( SELECT `source_url` ,count(1) AS `cnt`, GROUP_CONCAT(`p`.`project_id` ORDER BY `p`.`created_at`) `pids` FROM `stat_projects_source_url` `p` GROUP BY `p`.`source_url` HAVING count(1)>1 ) `a` "; $result = $this->_db->fetchAll($sql); return $result[0]['cnt'];; } /** * @param string $source_url * * @return mixed */ public function getCountSourceUrl($source_url) { $last = substr($source_url, -1); if ($last == '/') { $source_url = substr($source_url, 0, -1); } $sql = " SELECT count(1) AS `cnt` FROM `stat_projects_source_url` `p` WHERE `p`.`source_url`= :source_url "; $result = $this->_db->fetchAll($sql, array('source_url' => $source_url)); return $result[0]['cnt']; } public function getSourceUrlProjects($source_url) { $last = substr($source_url, -1); if ($last == '/') { $source_url = substr($source_url, 0, -1); } $sql = " SELECT p.project_id, pj.title, pj.member_id, pj.created_at, pj.changed_at, m.username FROM stat_projects_source_url p inner join project pj on p.project_id = pj.project_id and pj.status=100 inner join member m on pj.member_id = m.member_id WHERE p.source_url= :source_url "; $result = $this->_db->fetchAll($sql, array('source_url' => $source_url)); return $result; } /** * @param int $member_id * * @return mixed */ public function getCountProjectsDuplicateSourceurl($member_id) { $sql = " SELECT count(1) AS `cnt` FROM ( SELECT `p`.`source_url` ,(SELECT count(1) FROM `stat_projects_source_url` `pp` WHERE `pp`.`source_url`=`p`.`source_url`) `cnt` FROM `stat_projects_source_url` `p` WHERE `p`.`member_id` = :member_id ) `t` WHERE `t`.`cnt`>1 "; $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); return $result[0]['cnt']; } /** * @param $ids * * @return Zend_Db_Table_Row_Abstract * @throws Zend_Db_Statement_Exception */ public function fetchProjects($ids) { $sql = "SELECT * FROM stat_projects WHERE project_id in (" . $ids . ") order by project_id"; $resultSet = $this->_db->fetchAll($sql); return $this->generateRowSet($resultSet); } /** * @param $project_id * @return true/false * @throws Zend_Db_Statement_Exception */ public function validateDeleteProjectFromSpam($project_id) { - //produkt ist ueber 6 monate alt oder produkt hat ueber 5 kommentare oder produkt hat minimum 1 pling - // darf nicht gelöscht werden + // A product older than 6 months, with more than 5 comments or with at least 1 pling can not be deleted. $sql ='select count_comments ,created_at , (created_at+ INTERVAL 6 MONTH < NOW()) is_old ,(select count(1) from project_plings f where f.project_id = p.project_id and f.is_deleted = 0) plings FROM project p where project_id =:project_id'; $result = $this->_db->fetchRow($sql, array( 'project_id' => $project_id, )); if($result['count_comments'] >5 || $result['is_old'] ==1 || $result['plings']>0) { return false; } return true; } }