AOEpeople /
languagevisibility
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | namespace AOE\Languagevisibility\BeModules; |
||
| 4 | /*************************************************************** |
||
| 5 | * Copyright notice |
||
| 6 | * |
||
| 7 | * (c) 2008 <> |
||
| 8 | * All rights reserved |
||
| 9 | * |
||
| 10 | * This script is part of the TYPO3 project. The TYPO3 project is |
||
| 11 | * free software; you can redistribute it and/or modify |
||
| 12 | * it under the terms of the GNU General Public License as published by |
||
| 13 | * the Free Software Foundation; either version 2 of the License, or |
||
| 14 | * (at your option) any later version. |
||
| 15 | * |
||
| 16 | * The GNU General Public License can be found at |
||
| 17 | * http://www.gnu.org/copyleft/gpl.html. |
||
| 18 | * |
||
| 19 | * This script is distributed in the hope that it will be useful, |
||
| 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
| 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
| 22 | * GNU General Public License for more details. |
||
| 23 | * |
||
| 24 | * This copyright notice MUST APPEAR in all copies of the script! |
||
| 25 | ***************************************************************/ |
||
| 26 | |||
| 27 | use \TYPO3\CMS\Core\Utility\GeneralUtility; |
||
| 28 | use \TYPO3\CMS\Backend\Utility\BackendUtility; |
||
| 29 | use \TYPO3\CMS\Backend\Utility\IconUtility; |
||
| 30 | |||
| 31 | /** |
||
| 32 | * Module extension (addition to function menu) 'Language Visibility Overview' for the 'testtt' extension. |
||
| 33 | * |
||
| 34 | * @author <Daniel P�tzinger> |
||
| 35 | * @package TYPO3 |
||
| 36 | * @subpackage tx_languagevisibility |
||
| 37 | */ |
||
| 38 | class Modfunc1 extends \TYPO3\CMS\Backend\Module\AbstractFunctionModule { |
||
| 39 | |||
| 40 | /** |
||
| 41 | * Returns the menu array |
||
| 42 | * |
||
| 43 | * @return array |
||
| 44 | */ |
||
| 45 | public function modMenu() { |
||
| 46 | $menuArray = array( |
||
| 47 | 'depth' => array( |
||
| 48 | 0 => $GLOBALS['LANG']->getLL('depth_0'), |
||
| 49 | 1 => $GLOBALS['LANG']->getLL('depth_1'), |
||
| 50 | 2 => $GLOBALS['LANG']->getLL('depth_2'), |
||
| 51 | 3 => $GLOBALS['LANG']->getLL('depth_3') |
||
| 52 | ) |
||
| 53 | ); |
||
| 54 | |||
| 55 | // Languages: |
||
| 56 | $languageRep = GeneralUtility::makeInstance('AOE\\Languagevisibility\\LanguageRepository'); |
||
| 57 | $languageList = $languageRep->getLanguages(); |
||
| 58 | $menuArray['lang'] = array(0 => '[All]' ); |
||
| 59 | foreach ( $languageList as $language ) { |
||
| 60 | $menuArray['lang'][$language->getUid()] = $language->getTitle(); |
||
| 61 | } |
||
| 62 | |||
| 63 | return $menuArray; |
||
| 64 | } |
||
| 65 | |||
| 66 | /** |
||
| 67 | * MAIN function for page information of localization |
||
| 68 | * |
||
| 69 | * @return string Output HTML for the module. |
||
| 70 | */ |
||
| 71 | public function main() { |
||
| 72 | $theOutput = ''; |
||
| 73 | if ($this->pObj->id) { |
||
| 74 | |||
| 75 | // Depth selector: |
||
| 76 | $h_func = BackendUtility::getFuncMenu($this->pObj->id, 'SET[depth]', $this->pObj->MOD_SETTINGS['depth'], $this->pObj->MOD_MENU['depth'], 'index.php'); |
||
| 77 | $h_func .= BackendUtility::getFuncMenu($this->pObj->id, 'SET[lang]', $this->pObj->MOD_SETTINGS['lang'], $this->pObj->MOD_MENU['lang'], 'index.php'); |
||
| 78 | $theOutput .= $h_func; |
||
| 79 | |||
| 80 | // Add CSH: |
||
| 81 | $theOutput .= BackendUtility::cshItem('_MOD_web_info', 'lang', $GLOBALS['BACK_PATH'], '|<br/>'); |
||
| 82 | |||
| 83 | // Showing the tree: |
||
| 84 | // Initialize starting point of page tree: |
||
| 85 | $treeStartingPoint = intval($this->pObj->id); |
||
| 86 | $treeStartingRecord = BackendUtility::getRecordWSOL('pages', $treeStartingPoint); |
||
| 87 | $depth = $this->pObj->MOD_SETTINGS['depth']; |
||
| 88 | |||
| 89 | // Initialize tree object: |
||
| 90 | $tree = GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Tree\\View\\PageTreeView'); |
||
| 91 | $tree->init('AND ' . $GLOBALS['BE_USER']->getPagePermsClause(1)); |
||
| 92 | $tree->addField('l18n_cfg'); |
||
| 93 | |||
| 94 | // Creating top icon; the current page |
||
| 95 | $HTML = IconUtility::getIconImage('pages', $treeStartingRecord, $GLOBALS['BACK_PATH'], 'align="top"'); |
||
| 96 | $tree->tree[] = array('row' => $treeStartingRecord, 'HTML' => $HTML ); |
||
| 97 | |||
| 98 | // Create the tree from starting point: |
||
| 99 | if ($depth) { |
||
| 100 | $tree->getTree($treeStartingPoint, $depth, ''); |
||
| 101 | } |
||
| 102 | |||
| 103 | // Add CSS needed: |
||
| 104 | $css_content = ' |
||
| 105 | TABLE#langTable { |
||
| 106 | margin-top: 10px; |
||
| 107 | } |
||
| 108 | TABLE#langTable TR TD { |
||
| 109 | padding-left : 2px; |
||
| 110 | padding-right : 2px; |
||
| 111 | white-space: nowrap; |
||
| 112 | } |
||
| 113 | TD.c-notvisible { background-color: red; } |
||
| 114 | TD.c-visible { background-color: #669966; } |
||
| 115 | TD.c-translated { background-color: #A8E95C; } |
||
| 116 | TD.c-nottranslated { background-color: #E9CD5C; } |
||
| 117 | TD.c-leftLine {border-left: 2px solid black; } |
||
| 118 | .bgColor5 { font-weight: bold; } |
||
| 119 | '; |
||
| 120 | $marker = '/*###POSTCSSMARKER###*/'; |
||
| 121 | $this->pObj->content = str_replace($marker, $css_content . chr(10) . $marker, $this->pObj->content); |
||
| 122 | |||
| 123 | // Render information table: |
||
| 124 | $theOutput .= $this->renderL10nTable($tree); |
||
| 125 | } |
||
| 126 | |||
| 127 | return $theOutput; |
||
| 128 | } |
||
| 129 | |||
| 130 | /** |
||
| 131 | * Rendering the localization information table. |
||
| 132 | * |
||
| 133 | * @param array The Page tree data |
||
| 134 | * @return string HTML for the localization information table. |
||
| 135 | */ |
||
| 136 | public function renderL10nTable(&$tree) { |
||
| 137 | // Title length: |
||
| 138 | $titleLen = $GLOBALS['BE_USER']->uc['titleLen']; |
||
| 139 | |||
| 140 | // Put together the tree: |
||
| 141 | $output = ''; |
||
| 142 | $newOL_js = array(); |
||
| 143 | $langRecUids = array(); |
||
| 144 | |||
| 145 | // Init DAO |
||
| 146 | $dao = GeneralUtility::makeInstance('AOE\\Languagevisibility\\Dao\DaoCommon'); |
||
| 147 | $elementfactory = GeneralUtility::makeInstance('AOE\\Languagevisibility\\ElementFactory', $dao); |
||
| 148 | $languageRep = GeneralUtility::makeInstance('AOE\\Languagevisibility\\LanguageRepository'); |
||
| 149 | $languageList = $languageRep->getLanguages(); |
||
| 150 | $visibility = GeneralUtility::makeInstance('AOE\\Languagevisibility\\Services\\VisibilityService'); |
||
| 151 | |||
| 152 | //traverse tree: |
||
| 153 | foreach ( $tree->tree as $data ) { |
||
| 154 | $tCells = array(); |
||
| 155 | |||
| 156 | $element = $elementfactory->getElementForTable('pages', $data['row']['uid']); |
||
| 157 | |||
| 158 | // first cell (tree): |
||
| 159 | // Page icons / titles etc. |
||
| 160 | $tCells[] = '<td' . ($data['row']['_CSSCLASS'] ? ' class="' . $data['row']['_CSSCLASS'] . '"' : '') . '>' . $data['HTML'] . htmlspecialchars(\TYPO3\CMS\Core\Utility\GeneralUtility::fixed_lgd_cs($data['row']['title'], $titleLen)) . (strcmp($data['row']['nav_title'], '') ? ' [Nav: <em>' . htmlspecialchars(\TYPO3\CMS\Core\Utility\GeneralUtility::fixed_lgd_cs($data['row']['nav_title'], $titleLen)) . '</em>]' : '') . '</td>'; |
||
| 161 | // language cells: |
||
| 162 | foreach ( $languageList as $language ) { |
||
| 163 | $info = ''; |
||
| 164 | $editUid = $data['row']['uid']; |
||
| 165 | $params = '&edit[pages][' . $editUid . ']=edit'; |
||
| 166 | $langId = $language->getUid(); |
||
| 167 | if ($visibility->isVisible($language, $element)) { |
||
| 168 | $isVisible = TRUE; |
||
| 169 | $statusVis = 'c-visible'; |
||
| 170 | } else { |
||
| 171 | $isVisible = FALSE; |
||
| 172 | $statusVis = 'c-notvisible'; |
||
| 173 | } |
||
| 174 | if ($element->hasTranslation($langId)) { |
||
| 175 | $statusTrans = 'c-translated'; |
||
| 176 | } else { |
||
| 177 | $statusTrans = 'c-nottranslated'; |
||
| 178 | } |
||
| 179 | |||
| 180 | if ($language->getUid() == 0) { |
||
| 181 | // Default |
||
| 182 | // "View page" link is created: |
||
| 183 | $viewPageLink = '<a href="#" onclick="' . htmlspecialchars(BackendUtility::viewOnClick($data['row']['uid'], $GLOBALS['BACK_PATH'], '', '', '', '&L=###LANG_UID###')) . '">' . '<img' . IconUtility::skinImg($GLOBALS['BACK_PATH'], 'gfx/zoom.gif', 'width="12" height="12"') . ' title="' . $GLOBALS['LANG']->getLL('lang_renderl10n_viewPage', '1') . '" border="0" alt="" />' . '</a>'; |
||
|
0 ignored issues
–
show
|
|||
| 184 | $info .= '<a href="#" onclick="' . htmlspecialchars(BackendUtility::editOnClick($params, $GLOBALS['BACK_PATH'])) . '">' . '<img' . IconUtility::skinImg($GLOBALS['BACK_PATH'], 'gfx/edit2.gif', 'width="11" height="12"') . ' title="' . $GLOBALS['LANG']->getLL('lang_renderl10n_editDefaultLanguagePage', '1') . '" border="0" alt="" />' . '</a>'; |
||
| 185 | $info .= '<a href="#" onclick="' . htmlspecialchars('top.loadEditId(' . intval($data['row']['uid']) . ',"&SET[language]=0"); return FALSE;') . '">' . '<img' . IconUtility::skinImg($GLOBALS['BACK_PATH'], 'gfx/edit_page.gif', 'width="12" height="12"') . ' title="' . $GLOBALS['LANG']->getLL('lang_renderl10n_editPage', '1') . '" border="0" alt="" />' . '</a>'; |
||
| 186 | $info .= str_replace('###LANG_UID###', '0', $viewPageLink); |
||
| 187 | $info .= $data['row']['l18n_cfg'] & 1 ? '<span title="' . $GLOBALS['LANG']->sL('LLL:EXT:cms/locallang_tca.php:pages.l18n_cfg.I.1', '1') . '">D</span>' : ' '; |
||
| 188 | // Put into cell: |
||
| 189 | $tCells[] = '<td class="' . $statusTrans . ' c-leftLine">' . $info . '</td>'; |
||
| 190 | $tCells[] = '<td class="' . $statusTrans . '" title="' . $GLOBALS['LANG']->getLL('lang_renderl10n_CEcount', '1') . '" align="center">' . $this->getContentElementCount($data['row']['uid'], 0) . '</td>'; |
||
| 191 | |||
| 192 | } else { |
||
| 193 | // Normal Language: |
||
| 194 | if ($element->hasTranslation($langId)) { |
||
| 195 | $viewPageLink = '<a href="#" onclick="' . htmlspecialchars(BackendUtility::viewOnClick($data['row']['uid'], $GLOBALS['BACK_PATH'], '', '', '', '&L=###LANG_UID###')) . '">' . '<img' . IconUtility::skinImg($GLOBALS['BACK_PATH'], 'gfx/zoom.gif', 'width="12" height="12"') . ' title="' . $GLOBALS['LANG']->getLL('lang_renderl10n_viewPage', '1') . '" border="0" alt="" />' . '</a>'; |
||
|
0 ignored issues
–
show
'' is of type string, but the function expects a array|null.
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
Loading history...
|
|||
| 196 | |||
| 197 | $overLayRow = $element->getOverLayRecordForCertainLanguage($langId); |
||
| 198 | // add uid of overlay to list of editable records: |
||
| 199 | $langRecUids[$langId][] = $overLayRow['uid']; |
||
| 200 | $icon = IconUtility::getIconImage('pages_language_overlay', $overLayRow, $GLOBALS['BACK_PATH'], 'align="top" class="c-recIcon"'); |
||
| 201 | |||
| 202 | $info = $icon . htmlspecialchars(\TYPO3\CMS\Core\Utility\GeneralUtility::fixed_lgd_cs($overLayRow['title'], $titleLen)) . (strcmp($overLayRow['nav_title'], '') ? ' [Nav: <em>' . htmlspecialchars(\TYPO3\CMS\Core\Utility\GeneralUtility::fixed_lgd_cs($overLayRow['nav_title'], $titleLen)) . '</em>]' : '') . ($overLayRow['_COUNT'] > 1 ? '<div>' . $GLOBALS['LANG']->getLL('lang_renderl10n_badThingThereAre', '1') . '</div>' : ''); |
||
| 203 | $tCells[] = '<td class="' . $statusTrans . ' c-leftLine">' . $info . '</td>'; |
||
| 204 | |||
| 205 | // Edit whole record: |
||
| 206 | $info = ''; |
||
| 207 | $editUid = $overLayRow['uid']; |
||
| 208 | $params = '&edit[pages_language_overlay][' . $editUid . ']=edit'; |
||
| 209 | $info .= '<a href="#" onclick="' . htmlspecialchars(BackendUtility::editOnClick($params, $GLOBALS['BACK_PATH'])) . '">' . '<img' . IconUtility::skinImg($GLOBALS['BACK_PATH'], 'gfx/edit2.gif', 'width="11" height="12"') . ' title="' . $GLOBALS['LANG']->getLL('lang_renderl10n_editLanguageOverlayRecord', '1') . '" border="0" alt="" />' . '</a>'; |
||
| 210 | |||
| 211 | $info .= '<a href="#" onclick="' . htmlspecialchars('top.loadEditId(' . intval($data['row']['uid']) . ',"&SET[language]=' . $langId . '"); return FALSE;') . '">' . '<img' . IconUtility::skinImg($GLOBALS['BACK_PATH'], 'gfx/edit_page.gif', 'width="12" height="12"') . ' title="' . $GLOBALS['LANG']->getLL('lang_renderl10n_editPageLang', '1') . '" border="0" alt="" />' . '</a>'; |
||
| 212 | $info .= str_replace('###LANG_UID###', $langId, $viewPageLink); |
||
| 213 | |||
| 214 | $tCells[] = '<td class="' . $statusTrans . '">' . $info . '</td>'; |
||
| 215 | $tCells[] = '<td class="' . $statusTrans . '" title="' . $GLOBALS['LANG']->getLL('lang_renderl10n_CEcount', '1') . '" align="center">' . $this->getContentElementCount($data['row']['uid'], $langId) . '</td>'; |
||
| 216 | } else { |
||
| 217 | $tCells[] = '<td class="' . $statusTrans . ' c-leftLine"> </td>'; |
||
| 218 | $tCells[] = '<td class="' . $statusTrans . '"> </td>'; |
||
| 219 | //add to JS |
||
| 220 | $infoCell = '<input type="checkbox" name="newOL[' . $langId . '][' . $data['row']['uid'] . ']" value="1" />'; |
||
| 221 | $newOL_js[$langId] .= ' |
||
| 222 | +(document.webinfoForm[\'newOL[' . $langId . '][' . $data['row']['uid'] . ']\'].checked ? \'&edit[pages_language_overlay][' . $data['row']['uid'] . ']=new\' : \'\') |
||
| 223 | '; |
||
| 224 | $tCells[] = '<td class="' . $statusTrans . '">' . $infoCell . '</td>'; |
||
| 225 | |||
| 226 | } |
||
| 227 | } |
||
| 228 | //last cell show status |
||
| 229 | $tCells[] = '<td class="' . $statusVis . '">' . $this->_getStatusImage($isVisible) . '</td>'; |
||
| 230 | } |
||
| 231 | $output .= ' |
||
| 232 | <tr class="bgColor5"> |
||
| 233 | ' . implode(' |
||
| 234 | ', $tCells) . ' |
||
| 235 | </tr>'; |
||
| 236 | } |
||
| 237 | |||
| 238 | // first ROW: |
||
| 239 | $firstRowCells = array(); |
||
| 240 | $firstRowCells[] = '<td>' . $GLOBALS['LANG']->getLL('lang_renderl10n_page', '1') . ':</td>'; |
||
| 241 | foreach ( $languageList as $language ) { |
||
| 242 | $langId = $language->getUid(); |
||
| 243 | if ($this->pObj->MOD_SETTINGS['lang'] == 0 || ( int ) $this->pObj->MOD_SETTINGS['lang'] === ( int ) $langId) { |
||
| 244 | $firstRowCells[] = '<td class="c-leftLine">' . $language->getTitle() . $language->getFlagImg() . '</td>'; |
||
| 245 | if ($langId == 0) { |
||
| 246 | $firstRowCells[] = '<td></td>'; |
||
| 247 | $firstRowCells[] = '<td></td>'; |
||
| 248 | } else { |
||
| 249 | // Title: |
||
| 250 | |||
| 251 | |||
| 252 | // Edit language overlay records: |
||
| 253 | if (is_array($langRecUids[$langId])) { |
||
| 254 | $params = '&edit[pages_language_overlay][' . implode(',', $langRecUids[$langId]) . ']=edit&columnsOnly=title,nav_title,hidden'; |
||
| 255 | $firstRowCells[] = '<td><a href="#" onclick="' . htmlspecialchars(BackendUtility::editOnClick($params, $GLOBALS['BACK_PATH'])) . '"> |
||
| 256 | <img' . IconUtility::skinImg($GLOBALS['BACK_PATH'], 'gfx/edit2.gif', 'width="11" height="12"') . ' title="' . $GLOBALS['LANG']->getLL('lang_renderl10n_editLangOverlays', '1') . '" border="0" alt="" /> |
||
| 257 | </a></td>'; |
||
| 258 | } else { |
||
| 259 | $firstRowCells[] = '<td> </td>'; |
||
| 260 | } |
||
| 261 | |||
| 262 | // Create new overlay records: |
||
| 263 | $params = "'" . $newOL_js[$langId] . "+'&columnsOnly=title,hidden,sys_language_uid&defVals[pages_language_overlay][sys_language_uid]=" . $langId; |
||
| 264 | $firstRowCells[] = '<td><a href="#" onclick="' . htmlspecialchars(BackendUtility::editOnClick($params, $GLOBALS['BACK_PATH'])) . '"> |
||
| 265 | <img' . IconUtility::skinImg($GLOBALS['BACK_PATH'], 'gfx/new_el.gif', 'width="11" height="12"') . ' title="' . $GLOBALS['LANG']->getLL('lang_getlangsta_createNewTranslationHeaders', '1') . '" border="0" alt="" /> |
||
| 266 | </a></td>'; |
||
| 267 | $firstRowCells[] = '<td></td>'; |
||
| 268 | } |
||
| 269 | } |
||
| 270 | } |
||
| 271 | |||
| 272 | $output = ' |
||
| 273 | <tr class="bgColor4"> |
||
| 274 | ' . implode(' |
||
| 275 | ', $firstRowCells) . ' |
||
| 276 | </tr>' . $output; |
||
| 277 | |||
| 278 | $output = ' |
||
| 279 | |||
| 280 | <table border="0" cellspacing="0" cellpadding="0" id="langTable">' . $output . ' |
||
| 281 | </table>'; |
||
| 282 | |||
| 283 | return $output; |
||
| 284 | } |
||
| 285 | |||
| 286 | protected function _getStatusImage($stat) { |
||
| 287 | if ($stat) { |
||
| 288 | return '<img src="' . $GLOBALS['BACK_PATH'] . '../typo3conf/ext/languagevisibility/Resources/Public/Icons/ok.gif">'; |
||
| 289 | } else { |
||
| 290 | return '<img src="' . $GLOBALS['BACK_PATH'] . '../typo3conf/ext/languagevisibility/Resources/Public/Icons/nok.gif">'; |
||
| 291 | } |
||
| 292 | } |
||
| 293 | |||
| 294 | /** |
||
| 295 | * Counting content elements for a single language on a page. |
||
| 296 | * |
||
| 297 | * @param integer Page id to select for. |
||
| 298 | * @param integer Sys language uid |
||
| 299 | * @return integer Number of content elements from the PID where the language is set to a certain value. |
||
| 300 | */ |
||
| 301 | public function getContentElementCount($pageId, $sysLang) { |
||
| 302 | if ($sysLang == 0) { |
||
| 303 | $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('count(*)', 'tt_content', 'pid=' . intval($pageId) . ' AND sys_language_uid=' . intval($sysLang) . BackendUtility::deleteClause('tt_content') . \TYPO3\CMS\Backend\Utility\BackendUtility::versioningPlaceholderClause('tt_content')); |
||
| 304 | list ( $count ) = $GLOBALS['TYPO3_DB']->sql_fetch_row($res); |
||
| 305 | } |
||
| 306 | |||
| 307 | return $count ? $count : '-'; |
||
|
0 ignored issues
–
show
The variable
$count does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
Loading history...
|
|||
| 308 | } |
||
| 309 | } |
||
| 310 | |||
| 311 | if (defined('TYPO3_MODE') && $GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/languagevisibility/modfunc1/class.tx_languagevisibility_modfunc1.php']) { |
||
| 312 | include_once ($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/languagevisibility/modfunc1/class.tx_languagevisibility_modfunc1.php']); |
||
| 313 | } |
||
| 314 |
It seems like the type of the argument is not accepted by the function/method which you are calling.
In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.
We suggest to add an explicit type cast like in the following example: