File indexing completed on 2025-02-09 07:14:34

0001 <?php
0002 
0003 /**
0004  *  ocs-webserver
0005  *
0006  *  Copyright 2016 by pling GmbH.
0007  *
0008  *    This file is part of ocs-webserver.
0009  *
0010  *    This program is free software: you can redistribute it and/or modify
0011  *    it under the terms of the GNU Affero General Public License as
0012  *    published by the Free Software Foundation, either version 3 of the
0013  *    License, or (at your option) any later version.
0014  *
0015  *    This program is distributed in the hope that it will be useful,
0016  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
0017  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0018  *    GNU Affero General Public License for more details.
0019  *
0020  *    You should have received a copy of the GNU Affero General Public License
0021  *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0022  **/
0023 class Default_Model_DbTable_MemberScore extends Local_Model_Table
0024 {
0025 
0026     protected $_name = "member_score";
0027 
0028     protected $_keyColumnsForRow = array('member_score_id');
0029 
0030     protected $_key = 'member_score_id';
0031 
0032 
0033     /**
0034      * @param int $member_id
0035      *
0036      * @return array
0037      */
0038     public function fetchScore($member_id)
0039     {
0040         $sql = "
0041                 SELECT
0042                     p.*,
0043                  (select value from member_score_factors f where f.factor_id = 1) as factor_prod,
0044                  (select value from member_score_factors f where f.factor_id = 2) as factor_pling,
0045                  (select value from member_score_factors f where f.factor_id = 3) as factor_like,
0046                  (select value from member_score_factors f where f.factor_id = 4) as factor_comment,
0047                  (select value from member_score_factors f where f.factor_id = 5) as factor_year,
0048                  (select value from member_score_factors f where f.factor_id = 6) as factor_report_prod_spam,
0049                  (select value from member_score_factors f where f.factor_id = 7) as factor_report_prod_fraud
0050 
0051                  FROM
0052                      member_score p            
0053                  WHERE
0054                      member_id = :member_id               
0055                 ;                  
0056                ";
0057         $result = $this->_db->query($sql, array('member_id' => $member_id))->fetchAll();
0058 
0059         if (count($result) > 0) {
0060             return $result[0];
0061         } else {
0062             return null;
0063         }
0064     }
0065 
0066     public function fetchTopUsers($limit = 100)
0067     {
0068             $sql = "
0069                     select  
0070                     s.*
0071                     ,m.profile_image_url
0072                     ,m.username
0073                     from member_score s
0074                     inner join member m on s.member_id = m.member_id
0075                     order by s.score desc             
0076             ";
0077             if (isset($limit)) {
0078                 $sql .= ' limit ' . (int)$limit;
0079             }
0080             $result = $this->_db->query($sql)->fetchAll();
0081 
0082             return $this->generateRowSet($result);
0083     }
0084 
0085 
0086     /**
0087      * @param array $data
0088      *
0089      * @return Zend_Db_Table_Rowset_Abstract
0090      */
0091     protected function generateRowSet($data)
0092     {
0093         $classRowSet = $this->getRowsetClass();
0094 
0095         return new $classRowSet(array(
0096             'table'    => $this,
0097             'rowClass' => $this->getRowClass(),
0098             'stored'   => true,
0099             'data'     => $data
0100         ));
0101     }
0102 
0103 }