00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00052 require_once(PATH_t3lib.'class.t3lib_pagetree.php');
00053 require_once(PATH_t3lib.'class.t3lib_extobjbase.php');
00054
00055
00056
00057
00065 class tx_cms_webinfo_lang extends t3lib_extobjbase {
00066
00072 function modMenu() {
00073 global $LANG;
00074
00075 return array (
00076 'depth' => array(
00077 1 => $LANG->getLL('depth_1'),
00078 2 => $LANG->getLL('depth_2'),
00079 3 => $LANG->getLL('depth_3')
00080 )
00081 );
00082 }
00083
00089 function main() {
00090 global $BACK_PATH,$LANG,$SOBE;
00091
00092 if ($this->pObj->id) {
00093 $theOutput = '';
00094
00095
00096 $h_func = t3lib_BEfunc::getFuncMenu($this->pObj->id,'SET[depth]',$this->pObj->MOD_SETTINGS['depth'],$this->pObj->MOD_MENU['depth'],'index.php');
00097 $theOutput.= $h_func;
00098
00099
00100 $theOutput.= t3lib_BEfunc::cshItem('_MOD_web_info','lang',$GLOBALS['BACK_PATH'],'|<br/>');
00101
00102
00103
00104 $treeStartingPoint = intval($this->pObj->id);
00105 $treeStartingRecord = t3lib_BEfunc::getRecord('pages', $treeStartingPoint);
00106 $depth = $this->pObj->MOD_SETTINGS['depth'];
00107
00108
00109 $tree = t3lib_div::makeInstance('t3lib_pageTree');
00110 $tree->init('AND '.$GLOBALS['BE_USER']->getPagePermsClause(1));
00111 $tree->addField('l18n_cfg');
00112
00113
00114 $HTML = t3lib_iconWorks::getIconImage('pages', $treeStartingRecord, $GLOBALS['BACK_PATH'],'align="top"');
00115 $tree->tree[] = array(
00116 'row' => $treeStartingRecord,
00117 'HTML'=>$HTML
00118 );
00119
00120
00121 $tree->getTree($treeStartingPoint, $depth, '');
00122 #debug($tree->tree);
00123
00124
00125 $css_content = '
00126 TABLE#langTable {
00127 margin-top: 10px;
00128 }
00129 TABLE#langTable TR TD {
00130 padding-left : 2px;
00131 padding-right : 2px;
00132 white-space: nowrap;
00133 }
00134 TD.c-blocked { background-color: red; }
00135 TD.c-ok { background-color: #669966; }
00136 TD.c-fallback { }
00137 TD.c-leftLine {border-left: 2px solid black; }
00138 .bgColor5 { font-weight: bold; }
00139 ';
00140 $marker = '';
00141 $this->pObj->content = str_replace($marker,$css_content.chr(10).$marker,$this->pObj->content);
00142
00143
00144 $theOutput.= $this->renderL10nTable($tree);
00145 }
00146
00147 return $theOutput;
00148 }
00149
00156 function renderL10nTable(&$tree) {
00157 global $LANG;
00158
00159
00160 $languages = $this->getSystemLanguages();
00161
00162
00163 $titleLen = $GLOBALS['BE_USER']->uc['titleLen'];
00164
00165
00166 $output = '';
00167 $newOL_js = array();
00168 $langRecUids = array();
00169 foreach($tree->tree as $data) {
00170 $tCells = array();
00171 $langRecUids[0][] = $data['row']['uid'];
00172
00173
00174 $tCells[] = '<td>'.
00175 $data['HTML'].
00176 htmlspecialchars(t3lib_div::fixed_lgd_cs($data['row']['title'],$titleLen)).
00177 (strcmp($data['row']['nav_title'],'') ? ' [Nav: <em>'.htmlspecialchars(t3lib_div::fixed_lgd_cs($data['row']['nav_title'],$titleLen)).'</em>]' : '').
00178 '</td>';
00179
00180
00181
00182 $viewPageLink= '<a href="#" onclick="'.
00183 htmlspecialchars(t3lib_BEfunc::viewOnClick($data['row']['uid'],$GLOBALS['BACK_PATH'],'','','','&L=###LANG_UID###')).'">'.
00184 '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/zoom.gif','width="12" height="12"').' title="'.$LANG->getLL('lang_renderl10n_viewPage','1').'" border="0" alt="" />'.
00185 '</a>';
00186 $status = $data['row']['l18n_cfg']&1 ? 'c-blocked' : 'c-ok';
00187
00188
00189 $info = '';
00190 $editUid = $data['row']['uid'];
00191 $params = '&edit[pages]['.$editUid.']=edit';
00192 $info.= '<a href="#" onclick="'.htmlspecialchars(t3lib_BEfunc::editOnClick($params,$GLOBALS['BACK_PATH'])).'">'.
00193 '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/edit2.gif','width="11" height="12"').' title="'.$LANG->getLL('lang_renderl10n_editDefaultLanguagePage','1').'" border="0" alt="" />'.
00194 '</a>';
00195 $info.= '<a href="#" onclick="'.htmlspecialchars('top.loadEditId('.intval($data['row']['uid']).',"&SET[language]=0"); return false;').'">'.
00196 '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/edit_page.gif','width="12" height="12"').' title="'.$LANG->getLL('lang_renderl10n_editPage','1').'" border="0" alt="" />'.
00197 '</a>';
00198 $info.= str_replace('###LANG_UID###','0',$viewPageLink);
00199
00200 $info.= ' ';
00201 $info.= $data['row']['l18n_cfg']&1 ? '<span title="'.$LANG->sL('LLL:EXT:cms/locallang_tca.php:pages.l18n_cfg.I.1','1').'">D</span>' : ' ';
00202 $info.= $data['row']['l18n_cfg']&2 ? '<span title="'.$LANG->sL('LLL:EXT:cms/locallang_tca.php:pages.l18n_cfg.I.2','1').'">N</span>' : ' ';
00203
00204
00205 $tCells[] = '<td class="'.$status.' c-leftLine">'.$info.'</td>';
00206 $tCells[] = '<td class="'.$status.'" title="'.$LANG->getLL('lang_renderl10n_CEcount','1').'" align="center">'.$this->getContentElementCount($data['row']['uid'],0).'</td>';
00207
00208
00209 foreach($languages as $langRow) {
00210 $row = $this->getLangStatus($data['row']['uid'], $langRow['uid']);
00211 $info = '';
00212
00213 if (is_array($row)) {
00214 $langRecUids[$langRow['uid']][] = $row['uid'];
00215 $status = $row['_HIDDEN'] ? ($data['row']['l18n_cfg']&2 || $data['row']['l18n_cfg']&1 ? 'c-blocked' : 'c-fallback') : 'c-ok';
00216 $icon = t3lib_iconWorks::getIconImage(
00217 'pages_language_overlay',
00218 $row,
00219 $GLOBALS['BACK_PATH'],
00220 'align="top" class="c-recIcon"'
00221 );
00222
00223 $info = $icon.
00224 htmlspecialchars(t3lib_div::fixed_lgd_cs($row['title'],$titleLen)).
00225 (strcmp($row['nav_title'],'') ? ' [Nav: <em>'.htmlspecialchars(t3lib_div::fixed_lgd_cs($row['nav_title'],$titleLen)).'</em>]' : '').
00226 ($row['_COUNT']>1 ? '<div>'.$LANG->getLL('lang_renderl10n_badThingThereAre','1').'</div>':'');
00227 $tCells[] = '<td class="'.$status.' c-leftLine">'.$info.'</td>';
00228
00229
00230 $info = '';
00231 $editUid = $row['uid'];
00232 $params = '&edit[pages_language_overlay]['.$editUid.']=edit';
00233 $info.= '<a href="#" onclick="'.htmlspecialchars(t3lib_BEfunc::editOnClick($params,$GLOBALS['BACK_PATH'])).'">'.
00234 '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/edit2.gif','width="11" height="12"').' title="'.$LANG->getLL('lang_renderl10n_editLanguageOverlayRecord','1').'" border="0" alt="" />'.
00235 '</a>';
00236
00237 $info.= '<a href="#" onclick="'.htmlspecialchars('top.loadEditId('.intval($data['row']['uid']).',"&SET[language]='.$langRow['uid'].'"); return false;').'">'.
00238 '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/edit_page.gif','width="12" height="12"').' title="'.$LANG->getLL('lang_renderl10n_editPageLang','1').'" border="0" alt="" />'.
00239 '</a>';
00240 $info.= str_replace('###LANG_UID###',$langRow['uid'],$viewPageLink);
00241
00242 $tCells[] = '<td class="'.$status.'">'.$info.'</td>';
00243 $tCells[] = '<td class="'.$status.'" title="'.$LANG->getLL('lang_renderl10n_CEcount','1').'" align="center">'.$this->getContentElementCount($data['row']['uid'],$langRow['uid']).'</td>';
00244 } else {
00245 $status = $data['row']['l18n_cfg']&2 || $data['row']['l18n_cfg']&1 ? 'c-blocked' : 'c-fallback';
00246 $tCells[] = '<td class="'.$status.' c-leftLine"> </td>';
00247 $tCells[] = '<td class="'.$status.'"> </td>';
00248
00249 $info = '';
00250 $info.= '<input type="checkbox" name="newOL['.$langRow['uid'].']['.$data['row']['uid'].']" value="1" />';
00251 $newOL_js[$langRow['uid']].= '
00252 +(document.webinfoForm[\'newOL['.$langRow['uid'].']['.$data['row']['uid'].']\'].checked ? \'&edit[pages_language_overlay]['.$data['row']['uid'].']=new\' : \'\')
00253 ';
00254 $tCells[] = '<td class="'.$status.'">'.$info.'</td>';
00255 }
00256 }
00257
00258 $output.= '
00259 <tr class="bgColor4">
00260 '.implode('
00261 ',$tCells).'
00262 </tr>';
00263 }
00264
00265
00266 $tCells = array();
00267 $tCells[] = '<td>'.$LANG->getLL('lang_renderl10n_page','1').':</td>';
00268
00269 if (is_array($langRecUids[0])) {
00270 $params = '&edit[pages]['.implode(',',$langRecUids[0]).']=edit&columnsOnly=title,nav_title,l18n_cfg,hidden';
00271 $editIco = '<a href="#" onclick="'.htmlspecialchars(t3lib_BEfunc::editOnClick($params,$GLOBALS['BACK_PATH'])).'">
00272 <img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/edit2.gif','width="11" height="12"').' title="'.$LANG->getLL('lang_renderl10n_editPageHeaders','1').'" border="0" alt="" />
00273 </a>';
00274 } else $editIco = '';
00275 $tCells[] = '<td class="c-leftLine" colspan="2">'.
00276 $LANG->getLL('lang_renderl10n_default','1').':'.
00277 $editIco.
00278 '</td>';
00279
00280 foreach($languages as $langRow) {
00281
00282 $tCells[] = '<td class="c-leftLine">'.htmlspecialchars($langRow['title']).'</td>';
00283
00284
00285 if (is_array($langRecUids[$langRow['uid']])) {
00286 $params = '&edit[pages_language_overlay]['.implode(',',$langRecUids[$langRow['uid']]).']=edit&columnsOnly=title,nav_title,hidden';
00287 $tCells[] = '<td><a href="#" onclick="'.htmlspecialchars(t3lib_BEfunc::editOnClick($params,$GLOBALS['BACK_PATH'])).'">
00288 <img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/edit2.gif','width="11" height="12"').' title="'.$LANG->getLL('lang_renderl10n_editLangOverlays','1').'" border="0" alt="" />
00289 </a></td>';
00290 } else {
00291 $tCells[] = '<td> </td>';
00292 }
00293
00294
00295 $params = "'".$newOL_js[$langRow['uid']]."+'&columnsOnly=title,hidden,sys_language_uid&defVals[pages_language_overlay][sys_language_uid]=".$langRow['uid'];
00296 $tCells[] = '<td><a href="#" onclick="'.htmlspecialchars(t3lib_BEfunc::editOnClick($params,$GLOBALS['BACK_PATH'])).'">
00297 <img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/new_el.gif','width="11" height="12"').' title="'.$LANG->getLL('lang_getlangsta_createNewTranslationHeaders','1').'" border="0" alt="" />
00298 </a></td>';
00299 }
00300
00301 $output = '
00302 <tr class="bgColor5">
00303 '.implode('
00304 ',$tCells).'
00305 </tr>'.$output;
00306
00307 $output = '
00308
00309 <table border="0" cellspacing="0" cellpadding="0" id="langTable">'.$output.'
00310 </table>';
00311
00312 return $output;
00313 }
00314
00320 function getSystemLanguages() {
00321 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00322 '*',
00323 'sys_language',
00324 '1'.t3lib_BEfunc::deleteClause('sys_language')
00325 );
00326
00327 $outputArray = array();
00328 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00329 $outputArray[] = $row;
00330 }
00331
00332 return $outputArray;
00333 }
00334
00342 function getLangStatus($pageId, $langId) {
00343 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00344 '*',
00345 'pages_language_overlay',
00346 'pid='.intval($pageId).
00347 ' AND sys_language_uid='.intval($langId).
00348 t3lib_BEfunc::deleteClause('pages_language_overlay')
00349 );
00350
00351 $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
00352 if (is_array($row)) {
00353 $row['_COUNT'] = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
00354 $row['_HIDDEN'] = $row['hidden'] ||
00355 (intval($row['endtime']) > 0 && intval($row['endtime']) < time()) ||
00356 (time() < intval($row['starttime']));
00357 }
00358
00359 return $row;
00360 }
00361
00369 function getContentElementCount($pageId,$sysLang) {
00370 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00371 'count(*)',
00372 'tt_content',
00373 'pid='.intval($pageId).
00374 ' AND sys_language_uid='.intval($sysLang).
00375 t3lib_BEfunc::deleteClause('tt_content')
00376 );
00377
00378 list($count) = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
00379 return $count ? $count : '-';
00380 }
00381 }
00382
00383
00384 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/cms/web_info/class.tx_cms_webinfo_lang.php']) {
00385 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/cms/web_info/class.tx_cms_webinfo_lang.php']);
00386 }
00387 ?>