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; }
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') { } }