[!!!][TASK] Remove tce_db options "prErr" and "uPT"
[Packages/TYPO3.CMS.git] / typo3 / sysext / backend / Classes / Tree / View / PagePositionMap.php
index 23926f8..43a022e 100644 (file)
@@ -23,10 +23,8 @@ use TYPO3\CMS\Core\Database\Query\Restriction\HiddenRestriction;
 use TYPO3\CMS\Core\Database\Query\Restriction\StartTimeRestriction;
 use TYPO3\CMS\Core\Imaging\Icon;
 use TYPO3\CMS\Core\Imaging\IconFactory;
-use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
+use TYPO3\CMS\Core\Localization\LanguageService;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\PathUtility;
-use TYPO3\CMS\Lang\LanguageService;
 
 /**
  * Position map class - generating a page tree / content element list which links for inserting (copy/move) of records.
@@ -160,6 +158,10 @@ class PagePositionMap
         // Traverse the tree:
         $lines = [];
         foreach ($pageTree->tree as $cc => $dat) {
+            if ($latestInvDepth > $dat['invertedDepth']) {
+                $margin = 'style="margin-left: ' . ($dat['invertedDepth'] * 16 + 9) . 'px;"';
+                $lines[] = '<ul class="list-tree" ' . $margin . '>';
+            }
             // Make link + parameters.
             $latestInvDepth = $dat['invertedDepth'];
             $saveLatestUid[$latestInvDepth] = $dat;
@@ -170,7 +172,8 @@ class PagePositionMap
                     // 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...
                     if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($id) && !($prev_dat['invertedDepth'] > $pageTree->tree[$cc]['invertedDepth'])) {
                         end($lines);
-                        $lines[key($lines)] .= '<ul><li><span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($id, $id, 1)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span></li></ul>';
+                        $margin = 'style="margin-left: ' . (($dat['invertedDepth'] - 1) * 16 + 9) . 'px;"';
+                        $lines[] = '<ul class="list-tree" ' . $margin . '><li><span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($id, $id)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span></li></ul>';
                     }
                 }
                 // If going down
@@ -182,10 +185,13 @@ class PagePositionMap
                     if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($prev_dat['row']['pid'])) {
                         $prevPid = -$prev_dat['row']['uid'];
                         end($lines);
-                        $lines[key($lines)] .= '<ul><li><span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($prevPid, $prev_dat['row']['pid'], 2)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span></li></ul>';
+                        $lines[] = '<li><span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($prevPid, $prev_dat['row']['pid'])) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span></li>';
                     }
                     // Then set the current prevPid
                     $prevPid = -$prev_dat['row']['pid'];
+                    if ($prevPid !== $dat['row']['pid']) {
+                        $lines[] = '</ul>';
+                    }
                 } else {
                     // In on the same level
                     $prevPid = -$prev_dat['row']['uid'];
@@ -196,7 +202,7 @@ class PagePositionMap
             }
             // print arrow on the same level
             if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($dat['row']['pid'])) {
-                $lines[] = '<span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($prevPid, $dat['row']['pid'], 3)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span>';
+                $lines[] = '<span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($prevPid, $dat['row']['pid'])) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span>';
             }
             // The line with the icon and title:
             $toolTip = BackendUtility::getRecordToolTip($dat['row'], 'pages');
@@ -208,21 +214,28 @@ class PagePositionMap
         $prev_dat = end($pageTree->tree);
         if ($prev_dat['row']['uid'] == $id) {
             if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($id)) {
-                $lines[] = '<span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($id, $id, 4)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span>';
+                $lines[] = '<ul class="list-tree" style="margin-left: 25px"><li><span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($id, $id)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span></li></ul>';
             }
         }
         for ($a = $latestInvDepth; $a <= $this->depth; $a++) {
             $dat = $saveLatestUid[$a];
             $prevPid = -$dat['row']['uid'];
             if (!$this->dontPrintPageInsertIcons && $this->checkNewPageInPid($dat['row']['pid'])) {
-                $lines[] = '<span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($prevPid, $dat['row']['pid'], 5)) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span>';
+                if ($latestInvDepth < $dat['invertedDepth']) {
+                    $lines[] = '</ul>';
+                }
+                $lines[] = '<span class="text-nowrap"><a href="#" onclick="' . htmlspecialchars($this->onClickEvent($prevPid, $dat['row']['pid'])) . '"><i class="t3-icon fa fa-long-arrow-left" title="' . $this->insertlabel() . '"></i></a></span>';
             }
         }
 
         $code = '<ul class="list-tree">';
 
         foreach ($lines as $line) {
-            $code .= '<li>' . $line . '</li>';
+            if ((substr($line, 0, 3) === '<ul') || (substr($line, 0, 4) === '</ul')) {
+                $code .= $line;
+            } else {
+                $code .= '<li>' . $line . '</li>';
+            }
         }
 
         $code .= '</ul>';
@@ -233,7 +246,7 @@ class PagePositionMap
      * Wrap $t_code in bold IF the $dat uid matches $id
      *
      * @param string $t_code Title string
-     * @param array $dat Infomation array with record array inside.
+     * @param array $dat Information array with record array inside.
      * @param int $id The current id.
      * @return string The title string.
      */
@@ -248,8 +261,8 @@ class PagePositionMap
     /**
      * Creates the onclick event for the insert-icons.
      *
-     * TSconfig mod.web_list.newPageWiz.overrideWithExtension may contain an extension which provides a module
-     * to be used instead of the normal create new page wizard.
+     * TSconfig mod.newPageWizard.override may contain an alternative module / route which can be
+     * used instead of the normal create new page wizard.
      *
      * @param int $pid The pid.
      * @param int $newPagePID New page id.
@@ -257,12 +270,18 @@ class PagePositionMap
      */
     public function onClickEvent($pid, $newPagePID)
     {
-        $TSconfigProp = $this->getModConfig($newPagePID);
-        if ($TSconfigProp['overrideWithExtension']) {
-            if (ExtensionManagementUtility::isLoaded($TSconfigProp['overrideWithExtension'])) {
-                $onclick = 'window.location.href=' . GeneralUtility::quoteJSvalue(PathUtility::getAbsoluteWebPath(ExtensionManagementUtility::extPath($TSconfigProp['overrideWithExtension'])) . 'mod1/index.php?cmd=crPage&positionPid=' . $pid) . ';';
-                return $onclick;
-            }
+        $TSconfig = BackendUtility::getModTSconfig($newPagePID, 'mod.newPageWizard');
+        $TSconfig = $TSconfig['properties'];
+        if (isset($TSconfig['override']) && !empty($TSconfig['override'])) {
+            $url = BackendUtility::getModuleUrl(
+                $TSconfig['override'],
+                [
+                'positionPid' => $pid,
+                'newPageId'   => $newPagePID,
+                'cmd'         => 'crPage',
+                'returnUrl'   => GeneralUtility::getIndpEnv('REQUEST_URI')]
+            );
+            return 'window.location.href=' . GeneralUtility::quoteJSvalue($url) . ';';
         }
         $params = '&edit[pages][' . $pid . ']=new&returnNewPageId=1';
         return BackendUtility::editOnClick($params, '', $this->R_URI);
@@ -310,7 +329,7 @@ class PagePositionMap
      * Returns module configuration for a pid.
      *
      * @param int $pid Page id for which to get the module configuration.
-     * @return array The properties of teh module configuration for the page id.
+     * @return array The properties of the module configuration for the page id.
      * @see onClickEvent()
      */
     public function getModConfig($pid)
@@ -443,7 +462,7 @@ class PagePositionMap
                     } elseif ($columnConfig['colPos']) {
                         $table .= '<em>' . $this->wrapColumnHeader($this->getLanguageService()->getLL('noAccess'), '', '') . '</em>';
                     } else {
-                        $table .= '<em>' . $this->wrapColumnHeader(($columnConfig['name']?: '') . ' (' . $this->getLanguageService()->getLL('notAssigned') . ')', '', '') . '</em>';
+                        $table .= '<em>' . $this->wrapColumnHeader(($this->getLanguageService()->sL($columnConfig['name']) ?: '') . ' (' . $this->getLanguageService()->getLL('notAssigned') . ')', '', '') . '</em>';
                     }
                     $table .= '</p>';
                     // Render lines
@@ -543,9 +562,9 @@ class PagePositionMap
     {
         $table = 'tt_content';
         if (is_array($row)) {
-            $location = BackendUtility::getModuleUrl('tce_db') . '&cmd[' . $table . '][' . $moveUid . '][' . $this->moveOrCopy . ']=-' . $row['uid'] . '&prErr=1&uPT=1&vC=' . $this->getBackendUser()->veriCode();
+            $location = BackendUtility::getModuleUrl('tce_db') . '&cmd[' . $table . '][' . $moveUid . '][' . $this->moveOrCopy . ']=-' . $row['uid'];
         } else {
-            $location = BackendUtility::getModuleUrl('tce_db') . '&cmd[' . $table . '][' . $moveUid . '][' . $this->moveOrCopy . ']=' . $pid . '&data[' . $table . '][' . $moveUid . '][colPos]=' . $vv . '&prErr=1&vC=' . $this->getBackendUser()->veriCode();
+            $location = BackendUtility::getModuleUrl('tce_db') . '&cmd[' . $table . '][' . $moveUid . '][' . $this->moveOrCopy . ']=' . $pid . '&data[' . $table . '][' . $moveUid . '][colPos]=' . $vv;
         }
         $location .= '&redirect=' . rawurlencode($this->R_URI);
         // returns to prev. page
@@ -565,7 +584,7 @@ class PagePositionMap
     }
 
     /**
-     * Create record header (includes teh record icon, record title etc.)
+     * Create record header (includes the record icon, record title etc.)
      *
      * @param array $row Record row.
      * @return string HTML