File indexing completed on 2025-02-09 07:14:33
0001 <?php 0002 /** 0003 * ocs-webserver 0004 * 0005 * Copyright 2016 by pling GmbH. 0006 * 0007 * This file is part of ocs-webserver. 0008 * 0009 * This program is free software: you can redistribute it and/or modify 0010 * it under the terms of the GNU Affero General Public License as 0011 * published by the Free Software Foundation, either version 3 of the 0012 * License, or (at your option) any later version. 0013 * 0014 * This program is distributed in the hope that it will be useful, 0015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0017 * GNU Affero General Public License for more details. 0018 * 0019 * You should have received a copy of the GNU Affero General Public License 0020 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0021 **/ 0022 class Default_Model_DbTable_CollectionProjects extends Local_Model_Table 0023 { 0024 protected $_keyColumnsForRow = array('collection_project_id'); 0025 protected $_name = "collection_projects"; 0026 0027 0028 public function getCollectionProjects($project_id) 0029 { 0030 $sql = " SELECT project.title 0031 , project.project_id 0032 , project.image_small 0033 , project.username 0034 , project.member_id 0035 , collection_projects.order 0036 , project.ppload_collection_id 0037 , project.project_category_id 0038 , project.description 0039 , project.count_likes 0040 , project.count_dislikes 0041 , project.laplace_score 0042 , project.cat_title 0043 FROM collection_projects 0044 JOIN stat_projects project ON project.project_id = collection_projects.project_id 0045 WHERE collection_projects.collection_id = :project_id 0046 AND collection_projects.active = 1 0047 AND project.type_id = 1 0048 AND project.status = 100 0049 ORDER BY collection_projects.order ASC"; 0050 $resultSet = $this->getAdapter()->fetchAll($sql, array('project_id' => $project_id)); 0051 0052 0053 return $resultSet; 0054 } 0055 0056 public function getCollectionProjectIds($project_id) 0057 { 0058 $sql = " SELECT project.project_id 0059 FROM collection_projects 0060 JOIN project ON project.project_id = collection_projects.project_id 0061 WHERE collection_projects.collection_id = :project_id 0062 AND collection_projects.active = 1 0063 AND project.type_id = 1 0064 AND project.status = 100 0065 ORDER BY collection_projects.order ASC"; 0066 $resultSet = $this->getAdapter()->fetchAll($sql, array('project_id' => $project_id)); 0067 0068 $result = array(); 0069 foreach ($resultSet as $projectId) { 0070 $result[] = $projectId['project_id']; 0071 } 0072 0073 0074 return $result; 0075 } 0076 0077 0078 public function getProjectsForMember($collection_id, $member_id, $search) 0079 { 0080 0081 $withoutProjectIds = implode(',',$this->getCollectionProjectIds($collection_id)); 0082 if(empty($withoutProjectIds)) { 0083 $withoutProjectIds = "0"; 0084 } 0085 0086 $sql = " SELECT project.title, project.project_id, project.image_small, project.username, project.member_id, project.cat_title,project.laplace_score 0087 FROM stat_projects project 0088 WHERE project.member_id = :member_id 0089 AND project.type_id = 1 0090 AND project.status = 100 0091 AND project.project_id not in ($withoutProjectIds) 0092 AND (project.title like('%".$search."%')) 0093 ORDER BY project.changed_at desc, project.created_at DESC 0094 LIMIT 50"; 0095 $resultSet = $this->getAdapter()->fetchAll($sql, array('member_id' => $member_id)); 0096 0097 0098 return $resultSet; 0099 } 0100 0101 0102 public function getProjectsForAllMembers($collection_id, $member_id, $search) 0103 { 0104 0105 $withoutProjectIds = implode(',',$this->getCollectionProjectIds($collection_id)); 0106 if(empty($withoutProjectIds)) { 0107 $withoutProjectIds = "0"; 0108 } 0109 0110 $sql = " SELECT project.title, project.project_id, project.image_small, project.username, project.member_id, project.cat_title,project.laplace_score 0111 FROM stat_projects project 0112 WHERE project.member_id <> :member_id 0113 AND project.type_id = 1 0114 AND project.status = 100 0115 AND project.project_id not in ($withoutProjectIds) 0116 AND (project.title like('%".$search."%')) 0117 ORDER BY project.changed_at desc, project.created_at DESC 0118 LIMIT 50"; 0119 $resultSet = $this->getAdapter()->fetchAll($sql, array('member_id' => $member_id)); 0120 0121 0122 return $resultSet; 0123 } 0124 0125 0126 0127 0128 public function setInactive($collection_id, $project_id) 0129 { 0130 $values = array(); 0131 0132 $values['active'] = 0; 0133 $values['deleted_at'] = new Zend_Db_Expr('NOW()'); 0134 0135 $savedRow = $this->update($values, 'collection_id = '.$collection_id . ' AND project_id = ' . $project_id); 0136 0137 0138 return $savedRow; 0139 } 0140 0141 public function createCollectionProject($collection_id, $project_id, $order) 0142 { 0143 $values = array(); 0144 0145 $values['collection_id'] = $collection_id; 0146 $values['project_id'] = $project_id; 0147 $values['order'] = $order; 0148 $values['active'] = 1; 0149 $values['created_at'] = new Zend_Db_Expr('NOW()'); 0150 0151 $savedRow = $this->save($values); 0152 0153 return $savedRow; 0154 } 0155 0156 public function countProjects($project_id) 0157 { 0158 $sql =" 0159 SELECT count(*) AS count 0160 FROM collection_projects f 0161 WHERE f.collection_id =:project_id and f.active = 1 0162 "; 0163 $resultRow = $this->_db->fetchRow($sql, array('project_id' => $project_id)); 0164 return $resultRow['count']; 0165 } 0166 0167 public function setCollectionProjects($collectionId, $projectIds) { 0168 0169 0170 //Delete old projects 0171 $oldIds = $this->getCollectionProjects($collectionId); 0172 0173 foreach ($oldIds as $oldProjectId) { 0174 $this->setInactive($collectionId, $oldProjectId['project_id']); 0175 } 0176 0177 //Insert new ones 0178 foreach (array_keys($projectIds) as $fieldKey) { 0179 $projectId = $projectIds[$fieldKey]; 0180 $this->createCollectionProject($collectionId, $projectId, $fieldKey); 0181 } 0182 0183 } 0184 0185 0186 }