Documentation TYPO3 par Ameos |
00001 <?php 00002 /*************************************************************** 00003 * Copyright notice 00004 * 00005 * (c) 1999-2006 Kasper Skaarhoj (kasperYYYY@typo3.com) 00006 * All rights reserved 00007 * 00008 * This script is part of the TYPO3 project. The TYPO3 project is 00009 * free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU General Public License as published by 00011 * the Free Software Foundation; either version 2 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * The GNU General Public License can be found at 00015 * http://www.gnu.org/copyleft/gpl.html. 00016 * A copy is found in the textfile GPL.txt and important notices to the license 00017 * from the author is found in LICENSE.txt distributed with these scripts. 00018 * 00019 * 00020 * This script is distributed in the hope that it will be useful, 00021 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00023 * GNU General Public License for more details. 00024 * 00025 * This copyright notice MUST APPEAR in all copies of the script! 00026 ***************************************************************/ 00085 class t3lib_positionMap { 00086 00087 // EXTERNAL, static: 00088 var $moveOrCopy='move'; 00089 var $dontPrintPageInsertIcons=0; 00090 var $backPath=''; 00091 var $depth=2; // How deep the position page tree will go. 00092 var $cur_sys_language; // Can be set to the sys_language uid to select content elements for. 00093 00094 00095 // INTERNAL, dynamic: 00096 var $R_URI=''; // Request uri 00097 var $elUid=''; // Element id. 00098 var $moveUid=''; // tt_content element uid to move. 00099 00100 // Caching arrays: 00101 var $getModConfigCache=array(); 00102 var $checkNewPageCache=Array(); 00103 00104 // Label keys: 00105 var $l_insertNewPageHere = 'insertNewPageHere'; 00106 var $l_insertNewRecordHere = 'insertNewRecordHere'; 00107 00108 var $modConfigStr='mod.web_list.newPageWiz'; 00109 00110 00111 00112 00113 00114 00115 00116 /************************************* 00117 * 00118 * Page position map: 00119 * 00120 **************************************/ 00121 00132 function positionTree($id,$pageinfo,$perms_clause,$R_URI) { 00133 global $LANG, $BE_USER; 00134 00135 // Make page tree object: 00136 $t3lib_pageTree = t3lib_div::makeInstance('localPageTree'); 00137 $t3lib_pageTree->init(' AND '.$perms_clause); 00138 $t3lib_pageTree->addField('pid'); 00139 00140 // Initialize variables: 00141 $this->R_URI = $R_URI; 00142 $this->elUid = $id; 00143 00144 // Create page tree, in $this->depth levels. 00145 $t3lib_pageTree->getTree($pageinfo['pid'], $this->depth); 00146 if (!$this->dontPrintPageInsertIcons) $code.=$this->JSimgFunc(); 00147 00148 // Initialize variables: 00149 $saveBlankLineState=array(); 00150 $saveLatestUid=array(); 00151 $latestInvDepth=$this->depth; 00152 00153 // Traverse the tree: 00154 foreach($t3lib_pageTree->tree as $cc => $dat) { 00155 00156 // Make link + parameters. 00157 $latestInvDepth=$dat['invertedDepth']; 00158 $saveLatestUid[$latestInvDepth]=$dat; 00159 if (isset($t3lib_pageTree->tree[$cc-1])) { 00160 $prev_dat = $t3lib_pageTree->tree[$cc-1]; 00161 00162 // If current page, subpage? 00163 if ($prev_dat['row']['uid']==$id) { 00164 if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($id) && !($prev_dat['invertedDepth']>$t3lib_pageTree->tree[$cc]['invertedDepth'])) { // 1) It must be allowed to create a new page and 2) If there are subpages there is no need to render a subpage icon here - it'll be done over the subpages... 00165 $code.='<span class="nobr">'. 00166 $this->insertQuadLines($dat['blankLineCode']). 00167 '<img src="clear.gif" width="18" height="8" align="top" alt="" />'. 00168 '<a href="#" onclick="'.htmlspecialchars($this->onClickEvent($id,$id,1)).'" onmouseover="'.htmlspecialchars('changeImg(\'mImgSubpage'.$cc.'\',0);').'" onmouseout="'.htmlspecialchars('changeImg(\'mImgSubpage'.$cc.'\',1);').'">'. 00169 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/newrecord_marker_d.gif','width="281" height="8"').' name="mImgSubpage'.$cc.'" border="0" align="top" title="'.$this->insertlabel().'" alt="" />'. 00170 '</a></span><br />'; 00171 } 00172 } 00173 00174 if ($prev_dat['invertedDepth']>$t3lib_pageTree->tree[$cc]['invertedDepth']) { // If going down 00175 $prevPid = $t3lib_pageTree->tree[$cc]['row']['pid']; 00176 } elseif ($prev_dat['invertedDepth']<$t3lib_pageTree->tree[$cc]['invertedDepth']) { // If going up 00177 // First of all the previous level should have an icon: 00178 if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($prev_dat['row']['pid'])) { 00179 $prevPid = (-$prev_dat['row']['uid']); 00180 $code.='<span class="nobr">'. 00181 $this->insertQuadLines($dat['blankLineCode']). 00182 '<img src="clear.gif" width="18" height="1" align="top" alt="" />'. 00183 '<a href="#" onclick="'.htmlspecialchars($this->onClickEvent($prevPid,$prev_dat['row']['pid'],2)).'" onmouseover="'.htmlspecialchars('changeImg(\'mImgAfter'.$cc.'\',0);').'" onmouseout="'.htmlspecialchars('changeImg(\'mImgAfter'.$cc.'\',1);').'">'. 00184 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/newrecord_marker_d.gif','width="281" height="8"').' name="mImgAfter'.$cc.'" border="0" align="top" title="'.$this->insertlabel().'" alt="" />'. 00185 '</a></span><br />'; 00186 } 00187 00188 // Then set the current prevPid 00189 $prevPid = -$prev_dat['row']['pid']; 00190 } else { 00191 $prevPid = -$prev_dat['row']['uid']; // In on the same level 00192 } 00193 } else { 00194 $prevPid = $dat['row']['pid']; // First in the tree 00195 } 00196 if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($dat['row']['pid'])) { 00197 $code.='<span class="nobr">'. 00198 $this->insertQuadLines($dat['blankLineCode']). 00199 '<a href="#" onclick="'.htmlspecialchars($this->onClickEvent($prevPid,$dat['row']['pid'],3)).'" onmouseover="'.htmlspecialchars('changeImg(\'mImg'.$cc.'\',0);').'" onmouseout="'.htmlspecialchars('changeImg(\'mImg'.$cc.'\',1);').'">'. 00200 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/newrecord_marker_d.gif','width="281" height="8"').' name="mImg'.$cc.'" border="0" align="top" title="'.$this->insertlabel().'" alt="" />'. 00201 '</a></span><br />'; 00202 } 00203 00204 // The line with the icon and title: 00205 $t_code='<span class="nobr">'. 00206 $dat['HTML']. 00207 $this->linkPageTitle($this->boldTitle(htmlspecialchars(t3lib_div::fixed_lgd_cs($dat['row']['title'],$BE_USER->uc['titleLen'])),$dat,$id),$dat['row']). 00208 '</span><br />'; 00209 $code.=$t_code; 00210 } 00211 00212 // If the current page was the last in the tree: 00213 $prev_dat = end($t3lib_pageTree->tree); 00214 if ($prev_dat['row']['uid']==$id) { 00215 if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($id)) { 00216 $code.='<span class="nobr">'. 00217 $this->insertQuadLines($saveLatestUid[$latestInvDepth]['blankLineCode'],1). 00218 '<img src="clear.gif" width="18" height="8" align="top" alt="" />'. 00219 '<a href="#" onclick="'.$this->onClickEvent($id,$id,4).'" onmouseover="'.htmlspecialchars('changeImg(\'mImgSubpage'.$cc.'\',0);').'" onmouseout="'.htmlspecialchars('changeImg(\'mImgSubpage'.$cc.'\',1);').'">'. 00220 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/newrecord_marker_d.gif','width="281" height="8"').' name="mImgSubpage'.$cc.'" border="0" align="top" title="'.$this->insertlabel().'" alt="" />'. 00221 '</a></span><br />'; 00222 } 00223 } 00224 00225 for ($a=$latestInvDepth;$a<=$this->depth;$a++) { 00226 $dat = $saveLatestUid[$a]; 00227 $prevPid = (-$dat['row']['uid']); 00228 if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($dat['row']['pid'])) { 00229 $code.='<span class="nobr">'. 00230 $this->insertQuadLines($dat['blankLineCode'],1). 00231 '<a href="#" onclick="'.htmlspecialchars($this->onClickEvent($prevPid,$dat['row']['pid'],5)).'" onmouseover="'.htmlspecialchars('changeImg(\'mImgEnd'.$a.'\',0);').'" onmouseout="'.htmlspecialchars('changeImg(\'mImgEnd'.$a.'\',1);').'">'. 00232 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/newrecord_marker_d.gif','width="281" height="8"').' name="mImgEnd'.$a.'" border="0" align="top" title="'.$this->insertlabel().'" alt="" />'. 00233 '</a></span><br />'; 00234 } 00235 } 00236 00237 return $code; 00238 } 00239 00246 function JSimgFunc($prefix='') { 00247 $code.=$GLOBALS['TBE_TEMPLATE']->wrapScriptTags(' 00248 00249 var img_newrecord_marker=new Image(); 00250 img_newrecord_marker.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/newrecord'.$prefix.'_marker.gif','',1).'"; 00251 00252 var img_newrecord_marker_d=new Image(); 00253 img_newrecord_marker_d.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/newrecord'.$prefix.'_marker_d.gif','',1).'"; 00254 00255 function changeImg(name,d) { // 00256 if (document[name]) { 00257 if (d) { 00258 document[name].src = img_newrecord_marker_d.src; 00259 } else { 00260 document[name].src = img_newrecord_marker.src; 00261 } 00262 } 00263 } 00264 '); 00265 return $code; 00266 } 00267 00276 function boldTitle($t_code,$dat,$id) { 00277 if ($dat['row']['uid']==$id) { 00278 $t_code='<strong>'.$t_code.'</strong>'; 00279 } 00280 return $t_code; 00281 } 00282 00293 function onClickEvent($pid,$newPagePID) { 00294 $TSconfigProp = $this->getModConfig($newPagePID); 00295 00296 if ($TSconfigProp['overrideWithExtension']) { 00297 if (t3lib_extMgm::isLoaded($TSconfigProp['overrideWithExtension'])) { 00298 $onclick = "window.location.href='".t3lib_extMgm::extRelPath($TSconfigProp['overrideWithExtension']).'mod1/index.php?cmd=crPage&positionPid='.$pid."';"; 00299 return $onclick; 00300 } 00301 } 00302 00303 $params='&edit[pages]['.$pid.']=new&returnNewPageId=1'; 00304 return t3lib_BEfunc::editOnClick($params,'',$this->R_URI); 00305 } 00306 00312 function insertlabel() { 00313 global $LANG; 00314 return $LANG->getLL($this->l_insertNewPageHere,1); 00315 } 00316 00324 function linkPageTitle($str,$rec) { 00325 return $str; 00326 } 00327 00335 function checkNewPageInPid($pid) { 00336 global $BE_USER; 00337 if (!isset($this->checkNewPageCache[$pid])) { 00338 $pidInfo = t3lib_BEfunc::getRecord('pages',$pid); 00339 $this->checkNewPageCache[$pid] = ($BE_USER->isAdmin() || $BE_USER->doesUserHaveAccess($pidInfo,8)); 00340 } 00341 return $this->checkNewPageCache[$pid]; 00342 } 00343 00351 function getModConfig($pid) { 00352 if (!isset($this->getModConfigCache[$pid])) { 00353 // Acquiring TSconfig for this PID: 00354 $this->getModConfigCache[$pid] = t3lib_BEfunc::getModTSconfig($pid,$this->modConfigStr); 00355 } 00356 return $this->getModConfigCache[$pid]['properties']; 00357 } 00358 00366 function insertQuadLines($codes,$allBlank=0) { 00367 $codeA = t3lib_div::trimExplode(',',$codes.",line",1); 00368 00369 $lines=array(); 00370 while(list(,$code)=each($codeA)) { 00371 if ($code=="blank" || $allBlank) { 00372 $lines[]='<img src="clear.gif" width="18" height="8" align="top" alt="" />'; 00373 } else { 00374 $lines[]='<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/ol/halfline.gif','width="18" height="8"').' align="top" alt="" />'; 00375 } 00376 } 00377 return implode('',$lines); 00378 } 00379 00380 00381 00382 00383 00384 00385 00386 00387 00388 /************************************* 00389 * 00390 * Content element positioning: 00391 * 00392 **************************************/ 00393 00404 function printContentElementColumns($pid,$moveUid,$colPosList,$showHidden,$R_URI) { 00405 $this->R_URI = $R_URI; 00406 $this->moveUid = $moveUid; 00407 $colPosArray = t3lib_div::trimExplode(',',$colPosList,1); 00408 00409 $lines=array(); 00410 while(list($kk,$vv)=each($colPosArray)) { 00411 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery( 00412 '*', 00413 'tt_content', 00414 'pid='.intval($pid). 00415 ($showHidden ? '' : t3lib_BEfunc::BEenableFields('tt_content')). 00416 ' AND colPos='.intval($vv). 00417 (strcmp($this->cur_sys_language,'') ? ' AND sys_language_uid='.intval($this->cur_sys_language) : ''). 00418 t3lib_BEfunc::deleteClause('tt_content'). 00419 t3lib_BEfunc::versioningPlaceholderClause('tt_content'), 00420 '', 00421 'sorting' 00422 ); 00423 $lines[$kk]=array(); 00424 $lines[$kk][]=$this->insertPositionIcon('',$vv,$kk,$moveUid,$pid); 00425 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { 00426 t3lib_BEfunc::workspaceOL('tt_content',$row); 00427 $lines[$kk][]=$this->wrapRecordHeader($this->getRecordHeader($row),$row); 00428 $lines[$kk][]=$this->insertPositionIcon($row,$vv,$kk,$moveUid,$pid); 00429 } 00430 $GLOBALS['TYPO3_DB']->sql_free_result($res); 00431 } 00432 return $this->printRecordMap($lines,$colPosArray); 00433 } 00434 00442 function printRecordMap($lines,$colPosArray) { 00443 $row1=''; 00444 $row2=''; 00445 $count = t3lib_div::intInRange(count($colPosArray),1); 00446 00447 // Traverse the columns here: 00448 foreach($colPosArray as $kk => $vv) { 00449 $row1.='<td align="center" width="'.round(100/$count).'%"><span class="uppercase"><strong>'. 00450 $this->wrapColumnHeader($GLOBALS['LANG']->sL(t3lib_BEfunc::getLabelFromItemlist('tt_content','colPos',$vv),1),$vv). 00451 '</strong></span></td>'; 00452 $row2.='<td valign="top" nowrap="nowrap">'. 00453 implode('<br />',$lines[$kk]). 00454 '</td>'; 00455 } 00456 00457 $table = ' 00458 00459 <!-- 00460 Map of records in columns: 00461 --> 00462 <table border="0" cellpadding="0" cellspacing="1" id="typo3-ttContentList"> 00463 <tr class="bgColor5">'.$row1.'</tr> 00464 <tr>'.$row2.'</tr> 00465 </table> 00466 00467 '; 00468 00469 return $this->JSimgFunc('2').$table; 00470 } 00471 00480 function wrapColumnHeader($str,$vv) { 00481 return $str; 00482 } 00483 00494 function insertPositionIcon($row,$vv,$kk,$moveUid,$pid) { 00495 $cc = hexdec(substr(md5($row['uid'].'-'.$vv.'-'.$kk),0,4)); 00496 return '<a href="#" onclick="'.htmlspecialchars($this->onClickInsertRecord($row,$vv,$moveUid,$pid,$this->cur_sys_language)).'" onmouseover="'.htmlspecialchars('changeImg(\'mImg'.$cc.'\',0);').'" onmouseout="'.htmlspecialchars('changeImg(\'mImg'.$cc.'\',1);').'">'. 00497 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/newrecord2_marker_d.gif','width="100" height="8"').' name="mImg'.$cc.'" border="0" align="top" title="'.$GLOBALS['LANG']->getLL($this->l_insertNewRecordHere,1).'" alt="" />'. 00498 '</a>'; 00499 } 00500 00511 function onClickInsertRecord($row,$vv,$moveUid,$pid,$sys_lang=0) { 00512 $table='tt_content'; 00513 if (is_array($row)) { 00514 $location='tce_db.php?cmd['.$table.']['.$moveUid.']['.$this->moveOrCopy.']=-'.$row['uid'].'&prErr=1&uPT=1&vC='.$GLOBALS['BE_USER']->veriCode(); 00515 } else { 00516 $location='tce_db.php?cmd['.$table.']['.$moveUid.']['.$this->moveOrCopy.']='.$pid.'&data['.$table.']['.$moveUid.'][colPos]='.$vv.'&prErr=1&vC='.$GLOBALS['BE_USER']->veriCode(); 00517 } 00518 // $location.='&redirect='.rawurlencode($this->R_URI); // returns to prev. page 00519 $location.='&uPT=1&redirect='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI')); // This redraws screen 00520 00521 return 'window.location.href=\''.$location.'\';return false;'; 00522 } 00523 00531 function wrapRecordHeader($str,$row) { 00532 return $str; 00533 } 00534 00541 function getRecordHeader($row) { 00542 $line = t3lib_iconWorks::getIconImage('tt_content',$row,$this->backPath,' align="top" title="'.htmlspecialchars(t3lib_BEfunc::getRecordIconAltText($row,'tt_content')).'"'); 00543 $line.= t3lib_BEfunc::getRecordTitle('tt_content',$row,1); 00544 return $this->wrapRecordTitle($line,$row); 00545 } 00546 00554 function wrapRecordTitle($str,$row) { 00555 return '<a href="'.htmlspecialchars(t3lib_div::linkThisScript(array('uid'=>intval($row['uid']),'moveUid'=>''))).'">'.$str.'</a>'; 00556 } 00557 } 00558 00559 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_positionmap.php']) { 00560 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_positionmap.php']); 00561 } 00562 ?>