Пример #1
0
 public function fetch_all_by_tid_displayorder($tids, $displayorder = null, $glue = '>=', $fids = array(), $closed = null)
 {
     $data = array();
     if (!empty($tids)) {
         $data = $this->fetch_all_by_tid((array) $tids);
         $fids = $fids && !is_array($fids) ? array($fids) : $fids;
         foreach ($data as $tid => $value) {
             if ($displayorder !== null && !helper_util::compute($value['displayorder'], $displayorder, $glue)) {
                 unset($data[$tid]);
             } elseif (!empty($fids) && !in_array($value['fid'], $fids)) {
                 unset($data[$tid]);
             } elseif ($closed !== null && $value['closed'] != $closed) {
                 unset($data[$tid]);
             }
         }
     }
     return $data;
 }
Пример #2
0
 public function update_cache($tableid, $id, $idtype, $data, $condition = array(), $glue = 'merge')
 {
     if (!$this->_allowmem) {
         return;
     }
     if ($idtype == 'tid') {
         $memorydata = $this->fetch_cache($id, $this->_pre_cache_key . 'tid_');
         if (!$memorydata) {
             return;
         }
         if (!is_array($id)) {
             $memorydata = array($id => $memorydata);
             $id = (array) $id;
         }
         foreach ($id as $v) {
             if (!$memorydata[$v]) {
                 continue;
             }
             foreach ($memorydata[$v] as $pid => $post) {
                 $updateflag = true;
                 if ($condition) {
                     foreach ($condition as $ck => $cv) {
                         if ($cv !== null && !in_array($post[$ck], (array) $cv)) {
                             $updateflag = false;
                             break;
                         }
                     }
                 }
                 if ($updateflag) {
                     if ($glue == 'merge') {
                         $memorydata[$v][$pid] = array_merge($post, $data);
                     } else {
                         foreach ($data as $dk => $dv) {
                             $memorydata[$v][$pid][$dk] = helper_util::compute($memorydata[$v][$pid][$dk], $dv, $glue);
                         }
                     }
                 }
             }
             $this->store_cache($v, $memorydata[$v], $this->_cache_ttl, $this->_pre_cache_key . 'tid_');
         }
     } elseif ($idtype == 'pid') {
         $memorytid = array();
         $query = DB::query('SELECT pid, tid FROM %t WHERE ' . DB::field('pid', $id), array(self::get_tablename($tableid)));
         while ($post = DB::fetch($query)) {
             $memorytid[$post['pid']] = $post['tid'];
         }
         $memorydata = $this->fetch_cache($memorytid, $this->_pre_cache_key . 'tid_');
         if (!$memorydata) {
             return;
         }
         if (!is_array($id)) {
             $id = (array) $id;
         }
         foreach ($id as $v) {
             if ($memorydata[$memorytid[$v]][$v]) {
                 $updateflag = true;
                 if ($condition) {
                     foreach ($condition as $ck => $cv) {
                         if ($cv !== null && !in_array($memorydata[$memorytid[$v]][$v][$ck], (array) $cv)) {
                             $updateflag = false;
                             break;
                         }
                     }
                 }
                 if ($updateflag) {
                     if ($glue == 'merge') {
                         $memorydata[$memorytid[$v]][$v] = array_merge($memorydata[$memorytid[$v]][$v], $data);
                     } else {
                         foreach ($data as $dk => $dv) {
                             $memorydata[$memorytid[$v]][$v][$dk] = helper_util::compute($memorydata[$memorytid[$v]][$v][$dk], $dv, $glue);
                         }
                     }
                 }
             }
         }
         foreach ($memorydata as $tid => $postlist) {
             $this->store_cache($tid, $postlist, $this->_cache_ttl, $this->_pre_cache_key . 'tid_');
         }
     } elseif ($idtype == 'fid') {
     }
 }