Exemple #1
0
 /**
  * Get a record count for a list
  *
  * @param   string   $listid   List ID
  * @param   array    $filters  Filters to build query on
  * @param   integer  $admin    User is admin?
  * @param   object   $user     current user
  * @return  mixed    False if error, integer on success
  */
 public function get_count($listid, $filters, $admin, $user = NULL)
 {
     if ($listid === NULL) {
         return false;
     }
     if (is_object($user)) {
         $uid = $user->get('id');
     } else {
         $uid = 0;
     }
     $sql = "SELECT ws.id FROM `#__wishlist_item` AS ws ";
     if (isset($filters['tag']) && $filters['tag']) {
         $sql .= "\n LEFT JOIN #__tags_object AS RTA ON RTA.objectid=ws.id AND RTA.tbl='wishlist' ";
         $sql .= "\n LEFT JOIN #__tags AS TA ON RTA.tagid=TA.id ";
     }
     $sql .= " WHERE 1=1 ";
     $sql .= $listid > 0 ? " AND ws.wishlist='" . $listid . "'" : '';
     // list  filtering
     switch ($filters['filterby']) {
         case 'all':
             $sql .= ' AND ws.status!=2';
             break;
         case 'granted':
             $sql .= ' AND ws.status=1';
             break;
         case 'open':
             $sql .= ' AND ws.status=0';
             break;
         case 'accepted':
             $sql .= ' AND ws.accepted=1 AND (ws.status=0 OR ws.status=6)';
             break;
         case 'pending':
             $sql .= ' AND ws.accepted=0 AND ws.status=0';
             break;
         case 'rejected':
             $sql .= ' AND ws.status=3';
             break;
         case 'withdrawn':
             $sql .= ' AND ws.status=4';
             break;
         case 'deleted':
             $sql .= ' AND ws.status=2';
             break;
         case 'useraccepted':
             $sql .= ' AND ws.accepted=3 AND ws.status!=2';
             break;
         case 'private':
             $sql .= ' AND ws.status!=2 AND ws.private=1';
             break;
         case 'public':
             $sql .= ' AND ws.status!=2 AND ws.private=0';
             break;
         case 'mine':
             if ($uid) {
                 $sql .= ' AND ws.assigned="' . $uid . '" AND ws.status!=2';
             }
             break;
         case 'submitter':
             if ($uid) {
                 $sql .= ' AND ws.proposed_by=' . $uid . ' AND ws.status!=2';
             }
             break;
         case 'assigned':
             $sql .= ' AND ws.assigned NOT NULL AND ws.status!=2';
             break;
         default:
             $sql .= ' AND ws.status!=2';
             break;
     }
     if (isset($filters['search']) && $filters['search']) {
         $word = $this->_db->quote('%' . strtolower($filters['search']) . '%');
         $sql .= " AND ((LOWER(ws.subject) LIKE {$word}) OR (LOWER(ws.about) LIKE {$word})) ";
     }
     // do not show private wishes
     if (!$admin) {
         $sql .= "\n AND ws.private='0'";
     }
     if (isset($filters['tag']) && $filters['tag']) {
         require_once dirname(__DIR__) . DS . 'models' . DS . 'tags.php';
         $tagging = new Tags(1, 'wishlist');
         $tags = $filters['tag'];
         if (is_string($tags)) {
             $tags = trim($tags);
             $tags = preg_split("/(,|;)/", $tags);
         }
         foreach ($tags as $k => $tag) {
             $tags[$k] = $tagging->normalize($tag);
         }
         $sql .= " AND (RTA.objectid=ws.id AND (RTA.tbl='wishlist') AND (TA.tag IN ('" . implode("','", $tags) . "') OR TA.raw_tag IN ('" . implode("','", $tags) . "')))";
         $sql .= " GROUP BY ws.id ";
     }
     $this->_db->setQuery($sql);
     $result = $this->_db->loadObjectList();
     return count($result);
 }