function get_photolist( $req_uid=array(), $uid, $max_entry, $offset=0, $params=array() ){ $db = & $this->d3dConf->db; $on_uid = "ON ((d.uid=c.uid OR c.uid='0') AND d.cid=c.cid) " ; $max_entry = !empty($max_entry) ? (int)$max_entry : 0 ; if($this->mPerm->isadmin){ $whr_openarea = ""; } else { // openarea permissions $_params4op['use_gp'] = $this->gPerm->use_gp; $_params4op['use_pp'] = $this->gPerm->use_pp; $whr_openarea = " AND ".$this->mPerm->get_open_query( "photolist", $_params4op ); //var_dump($whr_openarea); } $whr_uids = count($req_uid)>0 ? "d.uid IN (".implode(',',$req_uid).")" : " 1 "; $now = date("Y-m-d H:i:s"); if ($this->mPerm->isadmin!=true and $this->mPerm->isauthor!=true) { $whr_nofuture = " AND d.create_time<'".$now."' "; } else { $whr_nofuture = ""; } $whr_pid = "" ; $whr_cid = "" ; $whr_cat = "" ; $whr_tag = "" ; $table_tag = "" ; $whr_time = ""; $odr = ''; if (!empty($params)){ $size = !empty($params['size']) ? (int)$params['size'] : 0 ; if(!empty($params['order'])){ switch ($params['order']) { case 'random' : $odr = "rand()" ; break; case 'title_asc' : $odr = "cast(d.title as char) ASC" ; break; case 'title_dsc' : $odr = "cast(d.title as char) DESC" ; break; case 'hit_asc' : $odr = "d.view ASC" ; break; case 'hit_dsc' : $odr = "d.view DESC" ; break; case 'time_asc' : $odr = "d.create_time ASC" ; break; case 'time_dsc' : case 'time' : default : $odr = "d.create_time DESC" ; } $odr = ' ORDER BY ' . $odr; } $ofst_key = !empty($params['ofst_key']) ? $params['ofst_key'] : "phofst"; if(!empty($params['pid'])){ $whr_pid = " AND p.pid = '".$params['pid']."'" ; } if(!empty($params['cids'])){ if( $params['cids'][0] == 0 ) { $whr_cid = " AND c.cid IS NULL " ; } else { $whr_cid = " AND c.cid IN (".implode("," , $params['cids']).")" ; } } if(!empty($params['categories'])){ $whr_cat = " AND (" ; foreach($params['categories'] as $cat) { $whr_cat .= "c.cname LIKE '".$cat."' OR "; } $whr_cat = rtrim( $whr_cat, "OR " ). ")" ; } if(!empty($params['tags'])){ $table_tag = "LEFT JOIN ".$db->prefix($this->mydirname.'_tag')." t ON d.bid=t.bid " ; $whr_tag = " AND (" ; foreach($params['tags'] as $tag) { $whr_tag .= "t.tag_name LIKE '".$tag."' OR "; } $whr_tag = rtrim( $whr_tag, "OR " ). ")" ; } if(!empty($params['day'])){ $whr_time.=" AND d.create_time>='".$params['year']."-".$params['month'] ."-".$params['day']." 00:00:00"."' "; $whr_time.=" AND d.create_time<='".$params['year']."-".$params['month'] ."-".$params['day']." 23:59:59"."' "; } elseif(!empty($params['month'])){ if($params['month']==12){ $next_year=$params['year']+1; $next_month=1; }else{ $next_year=$params['year']; $next_month=$params['month']+1; } $whr_time.=" AND d.create_time>='".$params['year']."-".$params['month']."-01 00:00:00"."' "; $whr_time.=" AND d.create_time<'".$next_year."-".$next_month."-01 00:00:00"."' "; } // params for info sanitize $max_info = !empty($params['max_info']) ? $params['max_info'] : 30 ; $enc = !empty($params['enc']) ? $params['enc'] : _CHARSET ; $f_truncate = !empty($params['f_truncate']) ? $params['f_truncate'] : false ; } $sql_base = "FROM ".$db->prefix($this->mydirname.'_photo')." p INNER JOIN ".$db->prefix($this->mydirname.'_diary')." d USING(bid) INNER JOIN ".$db->prefix('users')." u ON d.uid=u.uid LEFT JOIN ".$db->prefix($this->mydirname.'_category')." c ".$on_uid." LEFT JOIN ".$db->prefix($this->mydirname.'_config')." cfg ON d.uid=cfg.uid ".$table_tag." WHERE ".$whr_uids.$whr_openarea.$whr_nofuture.$whr_pid.$whr_cid.$whr_cat.$whr_tag.$whr_time.$odr ; // get total photos count $got_navi = array(); if ($max_entry) { $sql = "SELECT count(p.pid) as count ".$sql_base ; $result = $db->query($sql); list ($count) = $db->fetchRow($result); if($count>$max_entry){ if( !empty($_SERVER['QUERY_STRING'])) { if( preg_match("/^".$ofst_key."=[0-9]+/", $_SERVER['QUERY_STRING']) ) { $url = ""; } else { $url = preg_replace("/^(.*)\&".$ofst_key."=[0-9]+/", "$1", $_SERVER['QUERY_STRING']); } } else { $url = ""; } include_once dirname( dirname(__FILE__) ).'/class/d3diaryPagenavi.class.php'; $nav = new d3diaryPageNav($count, $max_entry, $offset, $ofst_key, $url); if (!empty($params['getnav'])) { $got_navi = $nav->getNav(); $got_navi['count'] = $count ; } else { $got_navi = $nav->renderNav(); } } } $sql = "SELECT p.pid as pid, p.ptype as ptype, p.tstamp as tstamp, p.info as info, p.bid as bid, p.uid as uid, title, uname, name, d.cid, GREATEST(d.openarea, COALESCE(cfg.openarea, 0), COALESCE(c.openarea, 0)) as openarea " .$sql_base ; $result = $db->query($sql, $max_entry, $offset); $rtn_ = array(); while ( $dbdat = $db->fetchArray($result) ) { $photo['bid'] = (int)$dbdat['bid']; $photo['pid'] = $dbdat['pid']; $photo['ptype']= $dbdat['ptype']; $photo['pname'] = $this->myts->makeTboxData4Show($photo['pid'].$photo['ptype']); $photo['thumbnail'] = "t_".$photo['pid'].$photo['ptype']; $photo['info'] = $dbdat['info'] ? $this->substrTarea( $dbdat['info'], 0, $max_info, $f_truncate, $enc ) : "" ; $tmp = preg_split("/[-: ]/",$dbdat['tstamp']); $photo['tstamp'] = mktime($tmp[3],$tmp[4],$tmp[5],$tmp[1],$tmp[2],$tmp[0]); $photo['time'] = $dbdat['tstamp'] ; $photo['title'] = $this->myts->makeTboxData4Show($dbdat['title']); $photo['uid'] = (int)$dbdat['uid']; $photo['uname'] = htmlSpecialChars( $dbdat['uname'], ENT_QUOTES ); $photo['name'] = htmlSpecialChars( $dbdat['name'], ENT_QUOTES ); $photo['cid'] = (int)$dbdat['cid']; $photo['openarea'] = (int)$dbdat['openarea']; $rtn_[] = $photo; } return array( $rtn_, $got_navi); }
// query limit $whr_offset = " LIMIT " . $offset2 . "," . $max_entry2; // using d3diaryPageNav if ($num_rows > $max_entry) { if (!empty($_SERVER['QUERY_STRING'])) { if (preg_match("/^pofst=[0-9]+/", $_SERVER['QUERY_STRING'])) { $url = ""; } else { $url = preg_replace("/^(.*)\\&pofst=[0-9]+/", "\$1", $_SERVER['QUERY_STRING']); } } else { $url = ""; } include_once dirname(dirname(__FILE__)) . '/class/d3diaryPagenavi.class.php'; $nav = new d3diaryPageNav($num_rows, $max_entry, $offset, "pofst", $url); $yd_pagenavi = $nav->getNav(); } else { $yd_pagenavi = ""; } // *********** SQL for actual entry // get entries on selected offset $sql = "SELECT d.diary, d.create_time, d.cid, d.title, d.bid, d.openarea AS openarea, d.dohtml, \n\t\t\td.view, d.vgids AS vgids, d.vpids AS vpids, u.uid, u.uname, u.name, u.user_avatar, \n\t\t\tc.cid, c.cname, c.openarea AS openarea_cat, c.showoption , c.vgids AS vgids_cat, c.vpids AS vpids_cat \n\t\t\tFROM " . $xoopsDB->prefix($mydirname . '_diary') . " d \n\t\t\tINNER JOIN " . $xoopsDB->prefix('users') . " u USING(uid) \n\t\t\tLEFT JOIN " . $xoopsDB->prefix($mydirname . '_category') . " c ON ((c.uid=d.uid or c.uid='0') and d.cid=c.cid) \n\t\t\tLEFT JOIN " . $xoopsDB->prefix($mydirname . '_config') . " cfg ON d.uid=cfg.uid " . $sql_tag . $where_ser_bids . " ORDER BY " . $odr; $result = $xoopsDB->query($sql); // flag for using d3comment if (!empty($mod_config['comment_dirname']) && intval($mod_config['comment_forum_id']) > 0) { $yd_param['use_d3comment'] = true; } else { $yd_param['use_d3comment'] = false; } $charmax = (int) $mod_config['preview_charmax']; $entry = array();