This commit was manufactured by cvs2svn to create branch 'Kasper'.
[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 Skårhøj (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  * Revised for TYPO3 3.6 June/2003 by Kasper Skårhøj
46  *
47  * @author      Stephan Niebrügge <stephan.niebruegge@gmx.de>
48  * Adapted by Kasper Skårhøj
49  * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=358&cHash=5400c1c06a
50  */
51  
52
53 if (!is_object($this)) die ('Error: No parent object present.');
54
55
56
57
58
59 $altSortFieldValue = trim($this->mconf['alternativeSortingField']);
60
61 list($value)=t3lib_div::intExplode(',',$conf['value']);
62 if (!$value) {
63         $value=$GLOBALS['TSFE']->page['uid'];
64 }
65 if ($conf['setKeywords'] || $conf['setKeywords.']) {
66         $kw = $this->parent_cObj->stdWrap($conf['setKeywords'], $conf['setKeywords.']);
67         } else {
68                 $value_rec=$this->sys_page->getPage($value);    // The page record of the 'value'.
69         $kw = trim(tslib_cObj::keywords($value_rec['keywords']));               // keywords.
70         }
71
72 $mode = $conf['mode'];  // *'auto', 'manual', 'tstamp'
73 switch($mode)   {
74         case 'starttime':
75                 $sortField = 'starttime';
76         break;                                          
77         case 'lastUpdated':
78         case 'manual':
79                 $sortField = 'lastUpdated';
80         break;
81         case 'tstamp':
82                 $sortField = 'tstamp';
83         break;
84         case 'crdate':
85                 $sortField = 'crdate';
86         break;                                          
87         default:
88                 $sortField = 'SYS_LASTCHANGED';
89         break;
90 }
91
92         // depth, limit, extra where
93 if (t3lib_div::testInt($conf['depth'])) {
94         $depth = t3lib_div::intInRange($conf['depth'],0,20);            // Tree depth
95 } else {
96         $depth=20;
97 }                               
98 $limit = t3lib_div::intInRange($conf['limit'],0,100);   // max number of items
99 $extraWhere = ' AND pages.uid!='.$value.' AND pages.doktype!=5';
100 if ($conf['excludeNoSearchPages']) {
101         $extraWhere.= ' AND pages.no_search=0';
102 }
103         // start point
104 $eLevel = tslib_cObj::getKey (intval($conf['entryLevel']),$this->tmpl->rootLine);
105 $startUid = intval($this->tmpl->rootLine[$eLevel]['uid']);
106
107         // which field is for keywords
108 $kfield = 'keywords';
109 if ( $conf['keywordsField'] ) {
110         list($kfield) = explode(' ',trim ($conf['keywordsField']));
111 }       
112
113         // If there are keywords and the startuid is present.
114 if ($kw && $startUid)   {
115         $bA = t3lib_div::intInRange($conf['beginAtLevel'],0,100);
116         $id_list=tslib_cObj::getTreeList($startUid,$depth-1+$bA,$bA-1).($bA?0:$startUid);
117
118         $kwArr = explode(',',$kw);
119         reset($kwArr);
120         while(list(,$word)=each($kwArr))        {
121                 $word = trim($word);
122                 if ($word)      {
123                         $keyWordsWhereArr[]=$kfield.' LIKE "%'.addslashes($word).'%"';
124                 }
125         }
126         $query = $GLOBALS['TSFE']->cObj->getQuery('pages',Array('pidInList'=>'0', 'uidInList'=>$id_list, 'where'=>'('.implode($keyWordsWhereArr,' OR ').')'.$extraWhere, 'orderBy'=>($altSortFieldValue ? $altSortFieldValue : $sortField.' desc'),'max'=>$limit));
127 }
128
129 if ($value=='') {
130         $value=$GLOBALS['TSFE']->page['uid'];
131 }
132 $items=t3lib_div::intExplode(',',$value);
133 if (t3lib_div::testInt($conf['depth'])) {
134         $depth = t3lib_div::intInRange($conf['depth'],1,20);            // Tree depth
135 } else {
136         $depth=20;
137 }                               
138 $limit = t3lib_div::intInRange($conf['limit'],0,100);   // max number of items
139 $maxAge = intval(tslib_cObj::calc($conf['maxAge']));
140 if (!$limit)    $limit=10;
141 $mode = $conf['mode'];  // *'auto', 'manual', 'tstamp'
142         // Get id's
143 $id_list_arr = Array();
144 reset($items);
145 while(list(,$id)=each($items))  {
146         $bA = t3lib_div::intInRange($conf['beginAtLevel'],0,100);
147         $id_list_arr[]=tslib_cObj::getTreeList($id,$depth-1+$bA,$bA-1).($bA?0:$id);
148 }
149 $id_list = implode($id_list_arr, ',');
150         // Get sortField (mode)
151 switch($mode)   {
152         case 'starttime':
153                 $sortField = 'starttime';
154         break;                                          
155         case 'lastUpdated':
156         case 'manual':
157                 $sortField = 'lastUpdated';
158         break;
159         case 'tstamp':
160                 $sortField = 'tstamp';
161         break;
162         case 'crdate':
163                 $sortField = 'crdate';
164         break;                                          
165         default:
166                 $sortField = 'SYS_LASTCHANGED';
167         break;
168 }
169         // Get 
170 $extraWhere = ' AND pages.doktype!=5';
171
172 if ($conf['excludeNoSearchPages']) {
173         $extraWhere.= ' AND pages.no_search=0';
174 }
175 if ($maxAge>0)  {
176         $extraWhere.=' AND '.$sortField.'>'.($GLOBALS['SIM_EXEC_TIME']-$maxAge);
177 }
178
179 // query from keywords - temporary:
180 $keywordWhere = $query;
181 if ($keywordWhere > '')
182 {
183 $keywordWhere = strstr($keywordWhere, 'uid');
184 $keywordWhere = ' OR (' . substr($keywordWhere,0,strpos($keywordWhere, 'AND pages.doktype')) . ')' ;
185 }       
186
187 $query = $GLOBALS['TSFE']->cObj->getQuery('pages',Array('pidInList'=>'0', 'uidInList'=>$id_list, 'where'=>$sortField.'>=0'.$extraWhere, 'orderBy'=>($altSortFieldValue ? $altSortFieldValue : $sortField.' desc'),'max'=>$limit));
188
189 // Now a combination from the keyword-query and update-query - this can be also in one line; but here I understand it better:
190 $query1 = substr($query,0,strpos($query, 'uid'));
191 $query2 = ' (';
192 $query3 = strstr($query, 'uid');
193 $query3 = '(' . substr($query3,0,strpos($query3, 'AND pages.doktype')) . ')';
194 $query4 = ') ';
195 $query5 = strstr($query, 'AND pages.doktype');
196 $query = $query1.$query2.$query3.$keywordWhere.$query4.$query5;
197
198
199 $res = mysql(TYPO3_db, $query);
200
201 // How much entries in the array ?
202 $pieces = 0;
203
204 while ($row = mysql_fetch_assoc($res))  {
205         $menuItemsArray[$row['uid']]=$GLOBALS['TSFE']->sys_page->getPageOverlay($row);
206         $pieces = $pieces + 1;
207 }
208
209 // Count of entries in the array:
210 $GLOBALS['TSFE']->LISTUS=$pieces;
211
212 ?>