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 }