pixmicat - Blame information for rev 886

Subversion Repositories:
Rev:
Rev Author Line No. Line
314 scribe 1 <?php
2 /*
3 mod_catalog : 以相簿模式列出圖檔方便瀏覽及抓取
4 By: scribe (Adopted from Pixmicat!-Festival)
5 */
6  
7 class mod_catalog{
886 roytam1 8         var $CATALOG_NUMBER, $USE_SEARCH_CODE;
314 scribe 9  
10         function mod_catalog(){
11                 global $PMS;
12                 $PMS->hookModuleMethod('ModulePage', 'mod_catalog'); // 向系統登記模組專屬獨立頁面
13  
461 scribe 14                 $this->CATALOG_NUMBER = 20; // 相簿模式一頁最多顯示個數 (視文章是否有貼圖而有實際變動)
886 roytam1 15                 $this->USE_SEARCH_CODE = true; // 使用搜尋程序來建立相簿?
314 scribe 16         }
17  
18         /* Get the name of module */
19         function getModuleName(){
563 scribe 20                 return 'mod_catalog : 以相簿模式列出圖檔';
314 scribe 21         }
22  
23         /* Get the module version infomation */
24         function getModuleVersionInfo(){
886 roytam1 25                 return '4th.Release.3 (v130717)';
314 scribe 26         }
27  
563 scribe 28         /* 自動掛載:頂部連結列 */
29         function autoHookToplink(&$linkbar, $isReply){
30                 global $PMS;
31                 $linkbar .= '[<a href="'.$PMS->getModulePageURL('mod_catalog').'">相簿模式</a>]'."\n";
32         }
33  
34         /* 掛載樣式表 */
35         function hookHeadCSS(&$style, $isReply){
314 scribe 36                 $style .= '<style type="text/css">
461 scribe 37 div.list { float: left; margin: 5px; width: '.MAX_RW.'px; height: '.MAX_RH.'px; } /* (相簿模式) div 框格設定 */
886 roytam1 38 div.list input { width:14px; height:14px; }
39 div.list .tools { position: absolute; overflow:hidden; width:18px; height:18px; }
40 div.list .tools-expend { position: absolute; overflow:hidden; width:auto; }
314 scribe 41 </style>
42 ';
43         }
44  
45         /* 模組獨立頁面 */
46         function ModulePage(){
886 roytam1 47                 global $PTE, $PMS, $PIO, $FileIO;
314 scribe 48  
392 scribe 49                 $thisPage = $PMS->getModulePageURL('mod_catalog'); // 基底位置
314 scribe 50                 $dat = ''; // HTML Buffer
51                 $listMax = $PIO->postCount(); // 文章總筆數
52                 $pageMax = ceil($listMax / $this->CATALOG_NUMBER) - 1; // 分頁最大編號
53                 $page = isset($_GET['page']) ? intval($_GET['page']) : 0; // 目前所在分頁頁數
54                 if($page < 0 || $page > $pageMax) exit('Page out of range.'); // $page 超過範圍
886 roytam1 55                 if(!$this->USE_SEARCH_CODE && !isset($_GET['search'])) {
56                         $plist = $PIO->fetchPostList(0, $this->CATALOG_NUMBER * $page, $this->CATALOG_NUMBER); // 取得定位正確的 N 筆資料號碼
57                         $post = $PIO->fetchPosts($plist); // 取出資料
58                 } else {
59                         $post = $PIO->searchPost(array('.'), 'ext', 'AND');
60                         $pageMax = ceil(count($post) / $this->CATALOG_NUMBER) - 1;
61                         $post = array_slice($post, $this->CATALOG_NUMBER * $page, $this->CATALOG_NUMBER);
62                 }
314 scribe 63                 $post_count = count($post);
64  
563 scribe 65                 $PMS->hookModuleMethod('Head', array(&$this, 'hookHeadCSS'));
314 scribe 66                 head($dat);
67                 $dat .= '<div id="contents">
68 [<a href="'.PHP_SELF2.'?'.time().'">回到版面</a>]
886 roytam1 69 <div class="bar_reply">相簿模式'.(@$_GET['style']=='detail'?' <a href="'.$thisPage.($page?'&amp;page='.$page:'').(isset($_GET['search'])?'&amp;search':'').'&amp;style=simple">■</a>':' <a href="'.$thisPage.($page?'&amp;page='.$page:'').(isset($_GET['search'])?'&amp;search':'').'&amp;style=detail">≡</a>').'</div>
314 scribe 70 ';
886 roytam1 71                 if($_GET['style']=='detail'){
72                         $dat .= '<script>
73 function hover(obj,ishover){
74 if(ishover) obj.className="tools-expend";
75 else obj.className="tools";
76 }
77 </script>
78 <form action="'.PHP_SELF.'" method="post">';
79                 }
80  
314 scribe 81                 // 逐步取資料
82                 for($i = 0; $i < $post_count; $i++){
886 roytam1 83                         list($no, $resto, $imgw, $imgh, $tw, $th, $tim, $ext, $now) = array($post[$i]['no'], $post[$i]['resto'], $post[$i]['imgw'], $post[$i]['imgh'],$post[$i]['tw'], $post[$i]['th'], $post[$i]['tim'], $post[$i]['ext'], $post[$i]['now']);
314 scribe 84                         if($FileIO->imageExists($tim.$ext)){
886 roytam1 85                                 $dat .= '<div class="list">'.(@$_GET['style']=='detail'?'<div class="tools" onmouseover="hover(this,true)" onmouseout="hover(this,false)"><input type="checkbox" name="'.$no.'" value="delete" /><a href="'.PHP_SELF.'?res='.($resto?$resto:$no).'#r'.$no.'">†</a></div>':'').'<a href="'.$FileIO->getImageURL($tim.$ext).'" rel="_blank"><img src="'.$FileIO->getImageURL($tim.'s.jpg').'" style="'.$this->OptimizeImageWH($tw, $th).'" title="'.(@$_GET['style']=='detail'?'No.'.$no.($resto?'('.$resto.')':'').' '.$now.' ':'').$imgw.'x'.$imgh.'" alt="'.$tim.$ext.'" /></a></div>'."\n";
314 scribe 86                         }
87                 }
88  
886 roytam1 89                 $dat .= '</div><hr />';
314 scribe 90  
886 roytam1 91                 if(@$_GET['style']=='detail') {
92                         $adminMode = adminAuthenticate('check'); // 前端管理模式
93                         $adminFunc = ''; // 前端管理選擇
94                         if($adminMode){
95                                 $adminFunc = '<select name="func"><option value="delete">'._T('admin_delete').'</option>';
96                                 $funclist = array();
97                                 $dummy = '';
98                                 $PMS->useModuleMethods('AdminFunction', array('add', &$funclist, null, &$dummy)); // "AdminFunction" Hook Point
99                                 foreach($funclist as $f) $adminFunc .= '<option value="'.$f[0].'">'.$f[1].'</option>'."\n";
100                                 $adminFunc .= '</select>';
101                         }
314 scribe 102  
886 roytam1 103                         $pte_vals = array('{$DEL_HEAD_TEXT}' => '<input type="hidden" name="mode" value="usrdel" />'._T('del_head'),
104                                 '{$DEL_IMG_ONLY_FIELD}' => '<input type="checkbox" name="onlyimgdel" id="onlyimgdel" value="on" />',
105                                 '{$DEL_IMG_ONLY_TEXT}' => _T('del_img_only'),
106                                 '{$DEL_PASS_TEXT}' => ($adminMode ? $adminFunc : '')._T('del_pass'),
107                                 '{$DEL_PASS_FIELD}' => '<input type="password" name="pwd" size="8" value="" />',
108                                 '{$DEL_SUBMIT_BTN}' => '<input type="submit" value="'._T('del_btn').'" />');
109                         $dat .= $PTE->ParseBlock('DELFORM', $pte_vals).'</form>';
110                 }
111  
112                 $dat .= '
113  
314 scribe 114 <div id="page_switch">
115 <table border="1" style="float: left;"><tr>
116 ';
886 roytam1 117                 if($page) $dat .= '<td><a href="'.$thisPage.'&amp;page='.($page - 1).(@$_GET['style']=='detail'?'&amp;style=detail':'').(isset($_GET['search'])?'&amp;search':'').'">上一頁</a></td>';
314 scribe 118                 else $dat .= '<td style="white-space: nowrap;">第一頁</td>';
119                 $dat .= '<td>';
120                 for($i = 0; $i <= $pageMax; $i++){
121                         if($i==$page) $dat .= '[<b>'.$i.'</b>] ';
886 roytam1 122                         else $dat .= '[<a href="'.$thisPage.'&amp;page='.$i.(@$_GET['style']=='detail'?'&amp;style=detail':'').(isset($_GET['search'])?'&amp;search':'').'">'.$i.'</a>] ';
314 scribe 123                 }
124                 $dat .= '</td>';
886 roytam1 125                 if($page < $pageMax) $dat .= '<td><a href="'.$thisPage.'&amp;page='.($page + 1).(@$_GET['style']=='detail'?'&amp;style=detail':'').(isset($_GET['search'])?'&amp;search':'').'">下一頁</a></td>';
314 scribe 126                 else $dat .= '<td style="white-space: nowrap;">最後一頁</td>';
127                 $dat .= '
128 </tr></table>
129 </div>
130  
131 ';
132                 foot($dat);
133                 echo $dat;
134         }
135  
136         /* 最佳化圖顯示尺寸 */
137         function OptimizeImageWH($w, $h){
138                 if($w > MAX_RW || $h > MAX_RH){
139                         $W2 = MAX_RW / $w; $H2 = MAX_RH / $h;
140                         $tkey = ($W2 < $H2) ? $W2 : $H2;
141                         $w = ceil($w * $tkey); $h = ceil($h * $tkey);
142                 }
143                 return 'width: '.$w.'px; height: '.$h.'px;';
144         }
145 }
146 ?>