Added $Id$ keywords, cleaned up comment tags
[Packages/TYPO3.CMS.git] / typo3 / sysext / cms / tslib / media / scripts / makeMenu_keywords_updated.inc
1 <?php
2 /***************************************************************
3 *  Copyright notice
4 *  
5 *  (c) 1999-2003 Kasper Skaarhoj (kasper@typo3.com)
6 *  All rights reserved
7 *
8 *  This script is part of the TYPO3 project. The TYPO3 project is 
9 *  free software; you can redistribute it and/or modify
10 *  it under the terms of the GNU General Public License as published by
11 *  the Free Software Foundation; either version 2 of the License, or
12 *  (at your option) any later version.
13
14 *  The GNU General Public License can be found at
15 *  http://www.gnu.org/copyleft/gpl.html.
16 *  A copy is found in the textfile GPL.txt and important notices to the license 
17 *  from the author is found in LICENSE.txt distributed with these scripts.
18 *
19
20 *  This script is distributed in the hope that it will be useful,
21 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
22 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23 *  GNU General Public License for more details.
24 *
25 *  This copyright notice MUST APPEAR in all copies of the script!
26 ***************************************************************/
27 /**
28  * Keywords menu
29  * Can be used with the HMENU cObject, special property set to "userdefined".
30  *
31  * The "testsite" package has an example of this script in the page-path "/Intro/TypoScript examples/Menu object examples/Keywords-Updated/"
32  * TypoScript code that will demonstrate it could look like:
33  *  
34  * page = PAGE
35  * page.typeNum = 0
36  * page.10 = HMENU
37  * page.10.special= userdefined
38  * page.10.special.file = media/scripts/makeMenu_keywords_updated.inc
39  * page.10.1 = TMENU
40  * page.10.1.NO {
41  *   linkWrap = <b>|</b><hr />
42  * }
43  *  
44  *
45  * $Id$
46  * Revised for TYPO3 3.6 June/2003 by Kasper Skaarhoj
47  *
48  * @author      Stephan Niebr├╝gge <stephan.niebruegge@gmx.de>
49  * Adapted by Kasper Skaarhoj
50  * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=358&cHash=5400c1c06a
51  */
52  
53
54 if (!is_object($this)) die ('Error: No parent object present.');
55
56
57
58
59
60 $altSortFieldValue = trim($this->mconf['alternativeSortingField']);
61
62 list($value)=t3lib_div::intExplode(',',$conf['value']);
63 if (!$value) {
64         $value=$GLOBALS['TSFE']->page['uid'];
65 }
66 if ($conf['setKeywords'] || $conf['setKeywords.']) {
67         $kw = $this->parent_cObj->stdWrap($conf['setKeywords'], $conf['setKeywords.']);
68         } else {
69                 $value_rec=$this->sys_page->getPage($value);    // The page record of the 'value'.
70         $kw = trim(tslib_cObj::keywords($value_rec['keywords']));               // keywords.
71         }
72
73 $mode = $conf['mode'];  // *'auto', 'manual', 'tstamp'
74 switch($mode)   {
75         case 'starttime':
76                 $sortField = 'starttime';
77         break;                                          
78         case 'lastUpdated':
79         case 'manual':
80                 $sortField = 'lastUpdated';
81         break;
82         case 'tstamp':
83                 $sortField = 'tstamp';
84         break;
85         case 'crdate':
86                 $sortField = 'crdate';
87         break;                                          
88         default:
89                 $sortField = 'SYS_LASTCHANGED';
90         break;
91 }
92
93         // depth, limit, extra where
94 if (t3lib_div::testInt($conf['depth'])) {
95         $depth = t3lib_div::intInRange($conf['depth'],0,20);            // Tree depth
96 } else {
97         $depth=20;
98 }                               
99 $limit = t3lib_div::intInRange($conf['limit'],0,100);   // max number of items
100 $extraWhere = ' AND pages.uid!='.$value.' AND pages.doktype!=5';
101 if ($conf['excludeNoSearchPages']) {
102         $extraWhere.= ' AND pages.no_search=0';
103 }
104         // start point
105 $eLevel = tslib_cObj::getKey (intval($conf['entryLevel']),$this->tmpl->rootLine);
106 $startUid = intval($this->tmpl->rootLine[$eLevel]['uid']);
107
108         // which field is for keywords
109 $kfield = 'keywords';
110 if ( $conf['keywordsField'] ) {
111         list($kfield) = explode(' ',trim ($conf['keywordsField']));
112 }       
113
114         // If there are keywords and the startuid is present.
115 if ($kw && $startUid)   {
116         $bA = t3lib_div::intInRange($conf['beginAtLevel'],0,100);
117         $id_list=tslib_cObj::getTreeList($startUid,$depth-1+$bA,$bA-1).($bA?0:$startUid);
118
119         $kwArr = explode(',',$kw);
120         reset($kwArr);
121         while(list(,$word)=each($kwArr))        {
122                 $word = trim($word);
123                 if ($word)      {
124                         $keyWordsWhereArr[]=$kfield.' LIKE "%'.addslashes($word).'%"';
125                 }
126         }
127         $query = $GLOBALS['TSFE']->cObj->getQuery('pages',Array('pidInList'=>'0', 'uidInList'=>$id_list, 'where'=>'('.implode($keyWordsWhereArr,' OR ').')'.$extraWhere, 'orderBy'=>($altSortFieldValue ? $altSortFieldValue : $sortField.' desc'),'max'=>$limit));
128 }
129
130 if ($value=='') {
131         $value=$GLOBALS['TSFE']->page['uid'];
132 }
133 $items=t3lib_div::intExplode(',',$value);
134 if (t3lib_div::testInt($conf['depth'])) {
135         $depth = t3lib_div::intInRange($conf['depth'],1,20);            // Tree depth
136 } else {
137         $depth=20;
138 }                               
139 $limit = t3lib_div::intInRange($conf['limit'],0,100);   // max number of items
140 $maxAge = intval(tslib_cObj::calc($conf['maxAge']));
141 if (!$limit)    $limit=10;
142 $mode = $conf['mode'];  // *'auto', 'manual', 'tstamp'
143         // Get id's
144 $id_list_arr = Array();
145 reset($items);
146 while(list(,$id)=each($items))  {
147         $bA = t3lib_div::intInRange($conf['beginAtLevel'],0,100);
148         $id_list_arr[]=tslib_cObj::getTreeList($id,$depth-1+$bA,$bA-1).($bA?0:$id);
149 }
150 $id_list = implode($id_list_arr, ',');
151         // Get sortField (mode)
152 switch($mode)   {
153         case 'starttime':
154                 $sortField = 'starttime';
155         break;                                          
156         case 'lastUpdated':
157         case 'manual':
158                 $sortField = 'lastUpdated';
159         break;
160         case 'tstamp':
161                 $sortField = 'tstamp';
162         break;
163         case 'crdate':
164                 $sortField = 'crdate';
165         break;                                          
166         default:
167                 $sortField = 'SYS_LASTCHANGED';
168         break;
169 }
170         // Get 
171 $extraWhere = ' AND pages.doktype!=5';
172
173 if ($conf['excludeNoSearchPages']) {
174         $extraWhere.= ' AND pages.no_search=0';
175 }
176 if ($maxAge>0)  {
177         $extraWhere.=' AND '.$sortField.'>'.($GLOBALS['SIM_EXEC_TIME']-$maxAge);
178 }
179
180 // query from keywords - temporary:
181 $keywordWhere = $query;
182 if ($keywordWhere > '')
183 {
184 $keywordWhere = strstr($keywordWhere, 'uid');
185 $keywordWhere = ' OR (' . substr($keywordWhere,0,strpos($keywordWhere, 'AND pages.doktype')) . ')' ;
186 }       
187
188 $query = $GLOBALS['TSFE']->cObj->getQuery('pages',Array('pidInList'=>'0', 'uidInList'=>$id_list, 'where'=>$sortField.'>=0'.$extraWhere, 'orderBy'=>($altSortFieldValue ? $altSortFieldValue : $sortField.' desc'),'max'=>$limit));
189
190 // Now a combination from the keyword-query and update-query - this can be also in one line; but here I understand it better:
191 $query1 = substr($query,0,strpos($query, 'uid'));
192 $query2 = ' (';
193 $query3 = strstr($query, 'uid');
194 $query3 = '(' . substr($query3,0,strpos($query3, 'AND pages.doktype')) . ')';
195 $query4 = ') ';
196 $query5 = strstr($query, 'AND pages.doktype');
197 $query = $query1.$query2.$query3.$keywordWhere.$query4.$query5;
198
199
200 $res = mysql(TYPO3_db, $query);
201
202 // How much entries in the array ?
203 $pieces = 0;
204
205 while ($row = mysql_fetch_assoc($res))  {
206         $menuItemsArray[$row['uid']]=$GLOBALS['TSFE']->sys_page->getPageOverlay($row);
207         $pieces = $pieces + 1;
208 }
209
210 // Count of entries in the array:
211 $GLOBALS['TSFE']->LISTUS=$pieces;
212
213 ?>