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
= ($this->todo) ? 'Erledigt' : 'Aktivieren'; ?>
deactivate): ?>
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 = $this->member->username; ?>
Username |
= $this->member->username; ?> |
Name |
= $this->member->lastname; ?> |
Vorname |
= $this->member->firstname; ?> |
Mail |
= $this->member->mail; ?> |
Biography |
= stripslashes($this->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;
}
}