[TASK] Migrate ext:perm JavaScript to jQuery 47/32147/15
authorWouter Wolters <typo3@wouterwolters.nl>
Wed, 13 Aug 2014 17:39:22 +0000 (19:39 +0200)
committerGeorg Ringer <georg.ringer@gmail.com>
Sat, 15 Nov 2014 21:25:10 +0000 (22:25 +0100)
In the main effort to remove prototype.js in
favor of RequireJS and jQuery, the JS structure
is adapted.

Resolves: #62936
Releases: master
Change-Id: I41cf626ff93c48efb7230876cae4a48dbc6ef8c0
Reviewed-on: http://review.typo3.org/32147
Reviewed-by: Oliver Hader <oliver.hader@typo3.org>
Tested-by: Oliver Hader <oliver.hader@typo3.org>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
typo3/sysext/perm/Classes/Controller/PermissionAjaxController.php
typo3/sysext/perm/Classes/Controller/PermissionModuleController.php
typo3/sysext/perm/Resources/Private/Templates/perm.html
typo3/sysext/perm/Resources/Public/JavaScript/Permissions.js [new file with mode: 0644]
typo3/sysext/perm/mod1/perm.js [deleted file]

index 9274d35..738063c 100644 (file)
@@ -15,61 +15,49 @@ namespace TYPO3\CMS\Perm\Controller;
  */
 
 use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
  * This class extends the permissions module in the TYPO3 Backend to provide
  * convenient methods of editing of page permissions (including page ownership
  * (user and group)) via new AjaxRequestHandler facility
- *
- * @author Andreas Kundoch <typo3@mehrwert.de>
- * @license GPL
- * @since TYPO3_4-2
  */
 class PermissionAjaxController {
 
-       // The local configuration array
+       /**
+        * The local configuration array
+        *
+        * @var array
+        */
        protected $conf = array();
 
-       // TYPO3 Back Path
-       protected $backPath = '../../../';
-
-       /********************************************
-        *
-        * Init method for this class
-        *
-        ********************************************/
        /**
         * The constructor of this class
         */
        public function __construct() {
                $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_mod_web_perm.xlf');
                // Configuration, variable assignment
-               $this->conf['page'] = \TYPO3\CMS\Core\Utility\GeneralUtility::_POST('page');
-               $this->conf['who'] = \TYPO3\CMS\Core\Utility\GeneralUtility::_POST('who');
-               $this->conf['mode'] = \TYPO3\CMS\Core\Utility\GeneralUtility::_POST('mode');
-               $this->conf['bits'] = (int)\TYPO3\CMS\Core\Utility\GeneralUtility::_POST('bits');
-               $this->conf['permissions'] = (int)\TYPO3\CMS\Core\Utility\GeneralUtility::_POST('permissions');
-               $this->conf['action'] = \TYPO3\CMS\Core\Utility\GeneralUtility::_POST('action');
-               $this->conf['ownerUid'] = (int)\TYPO3\CMS\Core\Utility\GeneralUtility::_POST('ownerUid');
-               $this->conf['username'] = \TYPO3\CMS\Core\Utility\GeneralUtility::_POST('username');
-               $this->conf['groupUid'] = (int)\TYPO3\CMS\Core\Utility\GeneralUtility::_POST('groupUid');
-               $this->conf['groupname'] = \TYPO3\CMS\Core\Utility\GeneralUtility::_POST('groupname');
-               $this->conf['editLockState'] = (int)\TYPO3\CMS\Core\Utility\GeneralUtility::_POST('editLockState');
+               $this->conf['page'] = GeneralUtility::_POST('page');
+               $this->conf['who'] = GeneralUtility::_POST('who');
+               $this->conf['mode'] = GeneralUtility::_POST('mode');
+               $this->conf['bits'] = (int)GeneralUtility::_POST('bits');
+               $this->conf['permissions'] = (int)GeneralUtility::_POST('permissions');
+               $this->conf['action'] = GeneralUtility::_POST('action');
+               $this->conf['ownerUid'] = (int)GeneralUtility::_POST('ownerUid');
+               $this->conf['username'] = GeneralUtility::_POST('username');
+               $this->conf['groupUid'] = (int)GeneralUtility::_POST('groupUid');
+               $this->conf['groupname'] = GeneralUtility::_POST('groupname');
+               $this->conf['editLockState'] = (int)GeneralUtility::_POST('editLockState');
                // User: Replace some parts of the posted values
-               $this->conf['new_owner_uid'] = (int)\TYPO3\CMS\Core\Utility\GeneralUtility::_POST('newOwnerUid');
+               $this->conf['new_owner_uid'] = (int)GeneralUtility::_POST('newOwnerUid');
                $temp_owner_data = BackendUtility::getUserNames('username, uid', ' AND uid = ' . $this->conf['new_owner_uid']);
                $this->conf['new_owner_username'] = htmlspecialchars($temp_owner_data[$this->conf['new_owner_uid']]['username']);
                // Group: Replace some parts of the posted values
-               $this->conf['new_group_uid'] = (int)\TYPO3\CMS\Core\Utility\GeneralUtility::_POST('newGroupUid');
+               $this->conf['new_group_uid'] = (int)GeneralUtility::_POST('newGroupUid');
                $temp_group_data = BackendUtility::getGroupNames('title,uid', ' AND uid = ' . $this->conf['new_group_uid']);
                $this->conf['new_group_username'] = htmlspecialchars($temp_group_data[$this->conf['new_group_uid']]['title']);
        }
 
-       /********************************************
-        *
-        * Main dispatcher method
-        *
-        ********************************************/
        /**
         * The main dispatcher function. Collect data and prepare HTML output.
         *
@@ -77,7 +65,7 @@ class PermissionAjaxController {
         * @param \TYPO3\CMS\Core\Http\AjaxRequestHandler $ajaxObj object of type AjaxRequestHandler
         * @return void
         */
-       public function dispatch($params = array(), \TYPO3\CMS\Core\Http\AjaxRequestHandler &$ajaxObj = NULL) {
+       public function dispatch($params = array(), \TYPO3\CMS\Core\Http\AjaxRequestHandler $ajaxObj = NULL) {
                $content = '';
                // Basic test for required value
                if ($this->conf['page'] > 0) {
@@ -129,7 +117,7 @@ class PermissionAjaxController {
                                        $content = $this->renderToggleEditLock($this->conf['page'], $data['pages'][$this->conf['page']]['editlock']);
                                        break;
                                default:
-                                       if ($this->conf['mode'] == 'delete') {
+                                       if ($this->conf['mode'] === 'delete') {
                                                $this->conf['permissions'] = (int)($this->conf['permissions'] - $this->conf['bits']);
                                        } else {
                                                $this->conf['permissions'] = (int)($this->conf['permissions'] + $this->conf['bits']);
@@ -148,11 +136,6 @@ class PermissionAjaxController {
                $ajaxObj->addContent($this->conf['page'] . '_' . $this->conf['who'], $content);
        }
 
-       /********************************************
-        *
-        * Helpers for this script
-        *
-        ********************************************/
        /**
         * Generate the user selector element
         *
@@ -179,10 +162,9 @@ class PermissionAjaxController {
                $elementId = 'o_' . $page;
                $options = '<option value="0"></option>' . $options;
                $selector = '<select name="new_page_owner" id="new_page_owner">' . $options . '</select>';
-               $saveButton = '<a onclick="WebPermissions.changeOwner(' . $page . ', ' . $ownerUid . ', \'' . $elementId . '\');" title="Change owner">' . \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('actions-document-save') . '</a>';
-               $cancelButton = '<a onclick="WebPermissions.restoreOwner(' . $page . ', ' . $ownerUid . ', \'' . ($username == '' ? '<span class=not_set>[not set]</span>' : htmlspecialchars($username)) . '\', \'' . $elementId . '\');" title="Cancel">' . \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('actions-document-close') . '</a>';
-               $ret = $selector . $saveButton . $cancelButton;
-               return $ret;
+               $saveButton = '<a class="saveowner" data-page="' . $page . '" data-owner="' . $ownerUid . '" data-element-id="' . $elementId . '" title="Change owner">' . \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('actions-document-save') . '</a>';
+               $cancelButton = '<a class="restoreowner" data-page="' . $page . '"  data-owner="' . $ownerUid . '" data-element-id="' . $elementId . '"' . (!empty($username) ? ' data-username="' . htmlspecialchars($username) . '"' : '') . ' title="Cancel">' . \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('actions-document-close') . '</a>';
+               return '<span id="' . $elementId . '">' . $selector . $saveButton . $cancelButton . '</span>';
        }
 
        /**
@@ -222,10 +204,9 @@ class PermissionAjaxController {
                $elementId = 'g_' . $page;
                $options = '<option value="0"></option>' . $options;
                $selector = '<select name="new_page_group" id="new_page_group">' . $options . '</select>';
-               $saveButton = '<a onclick="WebPermissions.changeGroup(' . $page . ', ' . $groupUid . ', \'' . $elementId . '\');" title="Change group">' . \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('actions-document-save') . '</a>';
-               $cancelButton = '<a onclick="WebPermissions.restoreGroup(' . $page . ', ' . $groupUid . ', \'' . ($groupname == '' ? '<span class=not_set>[not set]</span>' : htmlspecialchars($groupname)) . '\', \'' . $elementId . '\');" title="Cancel">' . \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('actions-document-close') . '</a>';
-               $ret = $selector . $saveButton . $cancelButton;
-               return $ret;
+               $saveButton = '<a class="savegroup" data-page="' . $page . '" data-group="' . $groupUid . '" data-element-id="' . $elementId . '" title="Change group">' . \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('actions-document-save') . '</a>';
+               $cancelButton = '<a class="restoregroup" data-page="' . $page . '" data-group="' . $groupUid . '" data-element-id="' . $elementId . '"' . (!empty($groupname) ? ' data-groupname="' . htmlspecialchars($groupname) . '"' : '') . ' title="Cancel">' . \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('actions-document-close') . '</a>';
+               return '<span id="' . $elementId . '">' . $selector . $saveButton . $cancelButton . '</span>';
        }
 
        /**
@@ -239,8 +220,7 @@ class PermissionAjaxController {
         */
        static public function renderOwnername($page, $ownerUid, $username, $validUser = TRUE) {
                $elementId = 'o_' . $page;
-               $ret = '<span id="' . $elementId . '"><a class="ug_selector" onclick="WebPermissions.showChangeOwnerSelector(' . $page . ', ' . $ownerUid . ', \'' . $elementId . '\', \'' . htmlspecialchars($username) . '\');">' . ($validUser ? ($username == '' ? '<span class=not_set>[' . $GLOBALS['LANG']->getLL('notSet') . ']</span>' : htmlspecialchars(\TYPO3\CMS\Core\Utility\GeneralUtility::fixed_lgd_cs($username, 20))) : '<span class=not_set title="' . htmlspecialchars(\TYPO3\CMS\Core\Utility\GeneralUtility::fixed_lgd_cs($username, 20)) . '">[' . $GLOBALS['LANG']->getLL('deleted') . ']</span>') . '</a></span>';
-               return $ret;
+               return '<span id="' . $elementId . '"><a class="ug_selector changeowner" data-page="' . $page . '" data-owner="' . $ownerUid . '" data-username="' . htmlspecialchars($username) . '">' . ($validUser ? ($username == '' ? '<span class=not_set>[' . $GLOBALS['LANG']->getLL('notSet') . ']</span>' : htmlspecialchars(GeneralUtility::fixed_lgd_cs($username, 20))) : '<span class=not_set title="' . htmlspecialchars(GeneralUtility::fixed_lgd_cs($username, 20)) . '">[' . $GLOBALS['LANG']->getLL('deleted') . ']</span>') . '</a></span>';
        }
 
        /**
@@ -254,8 +234,7 @@ class PermissionAjaxController {
         */
        static public function renderGroupname($page, $groupUid, $groupname, $validGroup = TRUE) {
                $elementId = 'g_' . $page;
-               $ret = '<span id="' . $elementId . '"><a class="ug_selector" onclick="WebPermissions.showChangeGroupSelector(' . $page . ', ' . $groupUid . ', \'' . $elementId . '\', \'' . htmlspecialchars($groupname) . '\');">' . ($validGroup ? ($groupname == '' ? '<span class=not_set>[' . $GLOBALS['LANG']->getLL('notSet') . ']</span>' : htmlspecialchars(\TYPO3\CMS\Core\Utility\GeneralUtility::fixed_lgd_cs($groupname, 20))) : '<span class=not_set title="' . htmlspecialchars(\TYPO3\CMS\Core\Utility\GeneralUtility::fixed_lgd_cs($groupname, 20)) . '">[' . $GLOBALS['LANG']->getLL('deleted') . ']</span>') . '</a></span>';
-               return $ret;
+               return '<span id="' . $elementId . '"><a class="ug_selector changegroup" data-page="' . $page . '" data-group="' . $groupUid . '" data-groupname="' . htmlspecialchars($groupname) . '">' . ($validGroup ? ($groupname == '' ? '<span class=not_set>[' . $GLOBALS['LANG']->getLL('notSet') . ']</span>' : htmlspecialchars(GeneralUtility::fixed_lgd_cs($groupname, 20))) : '<span class=not_set title="' . htmlspecialchars(GeneralUtility::fixed_lgd_cs($groupname, 20)) . '">[' . $GLOBALS['LANG']->getLL('deleted') . ']</span>') . '</a></span>';
        }
 
        /**
@@ -267,9 +246,9 @@ class PermissionAjaxController {
         */
        protected function renderToggleEditLock($page, $editLockState) {
                if ($editLockState === 1) {
-                       $ret = '<a class="editlock" onclick="WebPermissions.toggleEditLock(' . $page . ', 1);" title="The page and all content is locked for editing by all non-Admin users.">' . \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('status-warning-lock') . '</a>';
+                       $ret = '<span id="el_' . $page . '"><a class="editlock" data-page="' . (int)$page . '" data-lockstate="1" title="The page and all content is locked for editing by all non-Admin users.">' . \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('status-warning-lock') . '</a></span>';
                } else {
-                       $ret = '<a class="editlock" onclick="WebPermissions.toggleEditLock(' . $page . ', 0);" title="Enable the &raquo;Admin-only&laquo; edit lock for this page">[+]</a>';
+                       $ret = '<span id="el_' . $page . '"><a class="editlock" data-page="' . (int)$page . '" data-lockstate="0" title="Enable the &raquo;Admin-only&laquo; edit lock for this page">[+]</a></span>';
                }
                return $ret;
        }
@@ -288,16 +267,24 @@ class PermissionAjaxController {
                foreach ($permissions as $permission) {
                        if ($int & $permission) {
                                $str .= \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('status-status-permission-granted', array(
-                                       'tag' => 'a',
                                        'title' => $GLOBALS['LANG']->getLL($permission, TRUE),
-                                       'onclick' => 'WebPermissions.setPermissions(' . $pageId . ', ' . $permission . ', \'delete\', \'' . $who . '\', ' . $int . ');',
+                                       'class' => 'change-permission',
+                                       'data-page' => $pageId,
+                                       'data-permissions' => $int,
+                                       'data-mode' => 'delete',
+                                       'data-who' => $who,
+                                       'data-bits' => $permission,
                                        'style' => 'cursor:pointer'
                                ));
                        } else {
                                $str .= \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('status-status-permission-denied', array(
-                                       'tag' => 'a',
                                        'title' => $GLOBALS['LANG']->getLL($permission, TRUE),
-                                       'onclick' => 'WebPermissions.setPermissions(' . $pageId . ', ' . $permission . ', \'add\', \'' . $who . '\', ' . $int . ');',
+                                       'class' => 'change-permission',
+                                       'data-page' => $pageId,
+                                       'data-permissions' => $int,
+                                       'data-mode' => 'add',
+                                       'data-who' => $who,
+                                       'data-bits' => $permission,
                                        'style' => 'cursor:pointer'
                                ));
                        }
index 84de54d..068d2a1 100644 (file)
@@ -41,7 +41,6 @@ class PermissionModuleController {
 
        /**
         * Module config
-        * Internal static
         *
         * @var array
         */
@@ -90,27 +89,6 @@ class PermissionModuleController {
        public $pageinfo;
 
        /**
-        * Background color 1
-        *
-        * @var string
-        */
-       public $color;
-
-       /**
-        * Background color 2
-        *
-        * @var string
-        */
-       public $color2;
-
-       /**
-        * Background color 3
-        *
-        * @var string
-        */
-       public $color3;
-
-       /**
         * Set internally if the current user either OWNS the page OR is admin user!
         *
         * @var bool
@@ -174,10 +152,11 @@ class PermissionModuleController {
                $this->doc->backPath = $GLOBALS['BACK_PATH'];
                $this->doc->setModuleTemplate('EXT:perm/Resources/Private/Templates/perm.html');
                $this->doc->form = '<form action="' . $GLOBALS['BACK_PATH'] . 'tce_db.php" method="post" name="editform">';
-               $this->doc->loadJavascriptLib('js/jsfunc.updateform.js');
-               $this->doc->getPageRenderer()->loadPrototype();
-               $this->doc->loadJavascriptLib(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extRelPath('perm') . 'mod1/perm.js');
+
                $this->doc->addStyleSheet('module', 'sysext/perm/Resources/Public/Styles/styles.css');
+               $this->doc->getPageRenderer()->loadJquery();
+               $this->doc->getPageRenderer()->loadRequireJsModule('TYPO3/CMS/Perm/Permissions');
+
                // Setting up the context sensitive menu:
                $this->doc->getContextMenuCode();
                // Set up menus:
@@ -225,9 +204,11 @@ class PermissionModuleController {
                        // If $this->edit then these functions are called in the end of the page...
                        if ($this->edit) {
                                $this->doc->postCode .= $this->doc->wrapScriptTags('
-                                       setCheck("check[perms_user]", "data[pages][' . $this->id . '][perms_user]");
-                                       setCheck("check[perms_group]", "data[pages][' . $this->id . '][perms_group]");
-                                       setCheck("check[perms_everybody]", "data[pages][' . $this->id . '][perms_everybody]");
+                                       require(["jquery", "TYPO3/CMS/Perm/Permissions"], function($, Permissions) {
+                                               Permissions.setCheck("check[perms_user]", "data[pages][' . $this->id . '][perms_user]");
+                                               Permissions.setCheck("check[perms_group]", "data[pages][' . $this->id . '][perms_group]");
+                                               Permissions.setCheck("check[perms_everybody]", "data[pages][' . $this->id . '][perms_everybody]");
+                                       });
                                ');
                        }
 
@@ -246,7 +227,6 @@ class PermissionModuleController {
                        }
 
                        $docHeaderButtons = $this->getButtons();
-                       $markers['CSH'] = '';
                        $markers['FUNC_MENU'] = BackendUtility::getFuncMenu($this->id, 'SET[mode]', $this->MOD_SETTINGS['mode'], $this->MOD_MENU['mode']);
                        $markers['CONTENT'] = $this->content;
 
@@ -266,8 +246,7 @@ class PermissionModuleController {
         * @return void
         */
        public function printContent() {
-               $this->content = $this->doc->insertStylesAndJS($this->content);
-               echo $this->content;
+               echo $this->doc->insertStylesAndJS($this->content);
        }
 
        /**
@@ -277,11 +256,12 @@ class PermissionModuleController {
         */
        protected function getButtons() {
                $buttons = array(
-                       'view' => '',
+                       'view' => '<a href="#" onclick="' . htmlspecialchars(
+                               BackendUtility::viewonclick($this->pageinfo['uid'], $GLOBALS['BACK_PATH'], BackendUtility::BEgetRootLine($this->pageinfo['uid']))
+                       ) . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:labels.showPage', TRUE) . '">' . IconUtility::getSpriteIcon('actions-document-view') . '</a>',
                        'shortcut' => ''
                );
-               // View page
-               $buttons['view'] = '<a href="#" onclick="' . htmlspecialchars(BackendUtility::viewonclick($this->pageinfo['uid'], $GLOBALS['BACK_PATH'], BackendUtility::BEgetRootLine($this->pageinfo['uid']))) . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:labels.showPage', TRUE) . '">' . IconUtility::getSpriteIcon('actions-document-view') . '</a>';
+
                // Shortcut
                if ($GLOBALS['BE_USER']->mayMakeShortcut()) {
                        $buttons['shortcut'] = $this->doc->makeShortcutIcon('id, edit_record, pointer, new_unique_uid, search_field, search_levels, showLimit', implode(',', array_keys($this->MOD_MENU)), $this->MCONF['name']);
@@ -407,7 +387,7 @@ class PermissionModuleController {
                        <input type="hidden" name="data[pages][' . $this->id . '][perms_group]" value="' . $this->pageinfo['perms_group'] . '" />
                        <input type="hidden" name="data[pages][' . $this->id . '][perms_everybody]" value="' . $this->pageinfo['perms_everybody'] . '" />
                        ' . $this->getRecursiveSelect($this->id, $this->perms_clause) . '
-                       <input type="submit" name="submit" value="' . $GLOBALS['LANG']->getLL('Save', TRUE) . '" />' . '<input type="submit" value="' . $GLOBALS['LANG']->getLL('Abort', TRUE) . '" onclick="' . htmlspecialchars(('jumpToUrl(' . GeneralUtility::quoteJSvalue((BackendUtility::getModuleUrl('system_perm') . '&id=' . $this->id), TRUE) . '); return false;')) . '" />
+                       <input type="submit" name="submit" value="' . $GLOBALS['LANG']->getLL('Save', TRUE) . '" />' . '<input type="submit" value="' . $GLOBALS['LANG']->getLL('Abort', TRUE) . '" onclick="' . htmlspecialchars(('TYPO3.Permissions.jumpToUrl(' . GeneralUtility::quoteJSvalue((BackendUtility::getModuleUrl('system_perm') . '&id=' . $this->id), TRUE) . '); return false;')) . '" />
                        <input type="hidden" name="redirect" value="' . htmlspecialchars((BackendUtility::getModuleUrl('system_perm') . '&mode=' . $this->MOD_SETTINGS['mode'] . '&depth=' . $this->MOD_SETTINGS['depth'] . '&id=' . (int)$this->return_id . '&lastEdited=' . $this->id)) . '" />
                        ' . \TYPO3\CMS\Backend\Form\FormEngine::getHiddenTokenField('tceAction');
 
@@ -496,19 +476,15 @@ class PermissionModuleController {
                        $cells = array();
                        $pageId = $data['row']['uid'];
 
-                       // Background colors:
-                       $bgCol = $this->lastEdited == $pageId ? ' class="bgColor-20"' : '';
-                       $lE_bgCol = $bgCol;
-
                        // User/Group names:
                        $userName = $beUserArray[$data['row']['perms_userid']] ?
                                        $beUserArray[$data['row']['perms_userid']]['username'] :
                                        ($data['row']['perms_userid'] ? $data['row']['perms_userid'] : '');
 
                        if ($data['row']['perms_userid'] && !$beUserArray[$data['row']['perms_userid']]) {
-                               $userName = \TYPO3\CMS\Perm\Controller\PermissionAjaxController::renderOwnername($pageId, $data['row']['perms_userid'], htmlspecialchars(GeneralUtility::fixed_lgd_cs($userName, 20)), FALSE);
+                               $userName = PermissionAjaxController::renderOwnername($pageId, $data['row']['perms_userid'], htmlspecialchars(GeneralUtility::fixed_lgd_cs($userName, 20)), FALSE);
                        } else {
-                               $userName = \TYPO3\CMS\Perm\Controller\PermissionAjaxController::renderOwnername($pageId, $data['row']['perms_userid'], htmlspecialchars(GeneralUtility::fixed_lgd_cs($userName, 20)));
+                               $userName = PermissionAjaxController::renderOwnername($pageId, $data['row']['perms_userid'], htmlspecialchars(GeneralUtility::fixed_lgd_cs($userName, 20)));
                        }
 
                        $groupName = $beGroupArray[$data['row']['perms_groupid']] ?
@@ -516,9 +492,9 @@ class PermissionModuleController {
                                        ($data['row']['perms_groupid'] ? $data['row']['perms_groupid'] : '');
 
                        if ($data['row']['perms_groupid'] && !$beGroupArray[$data['row']['perms_groupid']]) {
-                               $groupName = \TYPO3\CMS\Perm\Controller\PermissionAjaxController::renderGroupname($pageId, $data['row']['perms_groupid'], htmlspecialchars(GeneralUtility::fixed_lgd_cs($groupName, 20)), FALSE);
+                               $groupName = PermissionAjaxController::renderGroupname($pageId, $data['row']['perms_groupid'], htmlspecialchars(GeneralUtility::fixed_lgd_cs($groupName, 20)), FALSE);
                        } else {
-                               $groupName = \TYPO3\CMS\Perm\Controller\PermissionAjaxController::renderGroupname($pageId, $data['row']['perms_groupid'], htmlspecialchars(GeneralUtility::fixed_lgd_cs($groupName, 20)));
+                               $groupName = PermissionAjaxController::renderGroupname($pageId, $data['row']['perms_groupid'], htmlspecialchars(GeneralUtility::fixed_lgd_cs($groupName, 20)));
                        }
 
                        // Seeing if editing of permissions are allowed for that page:
@@ -526,23 +502,24 @@ class PermissionModuleController {
 
                        // First column:
                        $cellAttrib = $data['row']['_CSSCLASS'] ? ' class="' . $data['row']['_CSSCLASS'] . '"' : '';
-                       $cells[] = '<td align="left" nowrap="nowrap"' . ($cellAttrib ? $cellAttrib : $bgCol) . '>' .
+                       $cells[] = '<td align="left" nowrap="nowrap"' . ($cellAttrib ? $cellAttrib : '') . '>' .
                                        $data['HTML'] . htmlspecialchars(GeneralUtility::fixed_lgd_cs($data['row']['title'], $tLen)) . '</td>';
 
                        // "Edit permissions" -icon
                        if ($editPermsAllowed && $pageId) {
                                $aHref = BackendUtility::getModuleUrl('system_perm') . '&mode=' . $this->MOD_SETTINGS['mode'] . '&depth=' . $this->MOD_SETTINGS['depth'] . '&id=' . ($data['row']['_ORIG_uid'] ? $data['row']['_ORIG_uid'] : $pageId) . '&return_id=' . $this->id . '&edit=1';
-                               $cells[] = '<td' . $bgCol . '><a href="' . htmlspecialchars($aHref) . '" title="' . $GLOBALS['LANG']->getLL('ch_permissions', TRUE) . '">' .
-                                               IconUtility::getSpriteIcon('actions-document-open') . '</a></td>';
+                               $cells[] = '<td><a href="' . htmlspecialchars($aHref) . '" title="' . $GLOBALS['LANG']->getLL('ch_permissions', TRUE) . '">' .
+                                       IconUtility::getSpriteIcon('actions-document-open') . '</a></td>';
                        } else {
-                               $cells[] = '<td' . $bgCol . '></td>';
+                               $cells[] = '<td></td>';
                        }
 
                        $cells[] = '
-                               <td' . $bgCol . ' nowrap="nowrap">' . ($pageId ? \TYPO3\CMS\Perm\Controller\PermissionAjaxController::renderPermissions($data['row']['perms_user'], $pageId, 'user') . ' ' . $userName : '') . '</td>
-                               <td' . $bgCol . ' nowrap="nowrap">' . ($pageId ? \TYPO3\CMS\Perm\Controller\PermissionAjaxController::renderPermissions($data['row']['perms_group'], $pageId, 'group') . ' ' . $groupName : '') . '</td>
-                               <td' . $bgCol . ' nowrap="nowrap">' . ($pageId ? ' ' . \TYPO3\CMS\Perm\Controller\PermissionAjaxController::renderPermissions($data['row']['perms_everybody'], $pageId, 'everybody') : '') . '</td>
-                               <td' . $bgCol . ' nowrap="nowrap">' . ($data['row']['editlock'] ? '<span id="el_' . $pageId . '" class="editlock"><a class="editlock" onclick="WebPermissions.toggleEditLock(\'' . $pageId . '\', \'1\');" title="' . $GLOBALS['LANG']->getLL('EditLock_descr', TRUE) . '">' . IconUtility::getSpriteIcon('status-warning-lock') . '</a></span>' : ($pageId === 0 ? '' : '<span id="el_' . $pageId . '" class="editlock"><a class="editlock" onclick="WebPermissions.toggleEditLock(\'' . $pageId . '\', \'0\');" title="Enable the &raquo;Admin-only&laquo; edit lock for this page">[+]</a></span>')) . '</td>
+                               <td nowrap="nowrap">' . ($pageId ? PermissionAjaxController::renderPermissions($data['row']['perms_user'], $pageId, 'user') . ' ' . $userName : '') . '</td>
+                               <td nowrap="nowrap">' . ($pageId ? PermissionAjaxController::renderPermissions($data['row']['perms_group'], $pageId, 'group') . ' ' . $groupName : '') . '</td>
+                               <td nowrap="nowrap">' . ($pageId ? ' ' . PermissionAjaxController::renderPermissions($data['row']['perms_everybody'], $pageId, 'everybody') : '') . '</td>
+                               <td nowrap="nowrap">' . (
+                                       $data['row']['editlock'] ? '<span id="el_' . $pageId . '"><a class="editlock" data-page="' . (int)$pageId . '" data-lockstate="1" title="' . $GLOBALS['LANG']->getLL('EditLock_descr', TRUE) . '">' . IconUtility::getSpriteIcon('status-warning-lock') . '</a></span>' : ($pageId === 0 ? '' : '<span id="el_' . $pageId . '"><a class="editlock" data-page="' . (int)$pageId . '" data-lockstate="0" title="Enable the &raquo;Admin-only&laquo; edit lock for this page">[+]</a></span>')) . '</td>
                        ';
 
                        // Compile table row:
@@ -595,7 +572,7 @@ class PermissionModuleController {
         * @return string HTML checkbox
         */
        public function printCheckBox($checkName, $num) {
-               $onclick = 'checkChange(\'check[' . $checkName . ']\', \'data[pages][' . $GLOBALS['SOBE']->id . '][' . $checkName . ']\')';
+               $onclick = 'TYPO3.Permissions.checkChange(\'check[' . $checkName . ']\', \'data[pages][' . $GLOBALS['SOBE']->id . '][' . $checkName . ']\')';
                return '<input type="checkbox" name="check[' . $checkName . '][' . $num . ']" onclick="' . htmlspecialchars($onclick) . '" /><br />';
        }
 
index 8e1d60a..184ab80 100644 (file)
@@ -2,7 +2,7 @@
 <div class="typo3-fullDoc">
        <div id="typo3-docheader">
                <div class="typo3-docheader-functions">
-                       <div class="left">###CSH### ###FUNC_MENU###</div>
+                       <div class="left">###FUNC_MENU###</div>
                        <div class="right">###PAGEPATH######PAGEINFO###</div>
                </div>
                <div class="typo3-docheader-buttons">
diff --git a/typo3/sysext/perm/Resources/Public/JavaScript/Permissions.js b/typo3/sysext/perm/Resources/Public/JavaScript/Permissions.js
new file mode 100644 (file)
index 0000000..ec5dbeb
--- /dev/null
@@ -0,0 +1,314 @@
+/**
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+/**
+ * Javascript functions regarding the permissions module
+ */
+define('TYPO3/CMS/Perm/Permissions', ['jquery'], function($) {
+
+       var Permissions = {
+               options: {
+                       containerSelector: '#typo3-permissionList'
+               }
+       };
+       var ajaxUrl = TYPO3.settings.ajaxUrls['PermissionAjaxController::dispatch'];
+
+       /**
+        * changes the value of the permissions in the form
+        */
+       Permissions.setCheck = function(checknames, varname) {
+               if (document.editform[varname]) {
+                       var res = document.editform[varname].value;
+                       for (var a = 1; a <= 5; a++) {
+                               document.editform[checknames + '[' + a + ']'].checked = (res & Math.pow(2, a-1));
+                       }
+               }
+       };
+
+       /**
+        * checks for a change of the permissions in the form
+        */
+       Permissions.checkChange = function(checknames, varname) {
+               var res = 0;
+               for (var a = 1; a <= 5; a++) {
+                       if (document.editform[checknames + '[' + a + ']'].checked) {
+                               res|=Math.pow(2,a-1);
+                       }
+               }
+               document.editform[varname].value = res | (checknames === 'check[perms_user]' ? 1 : 0);
+               Permissions.setCheck(checknames, varname);
+       };
+
+       /**
+        * wrapper function to call a URL in the current frame
+        */
+       Permissions.jumpToUrl = function(url) {
+               window.location.href = url;
+       };
+
+       /**
+        * changes permissions by sending an AJAX request to the server
+        */
+       Permissions.setPermissions = function($element) {
+               var page = $element.data('page');
+               var who = $element.data('who');
+
+               $.ajax({
+                       url: ajaxUrl,
+                       type: 'post',
+                       dataType: 'html',
+                       cache: false,
+                       data: {
+                               'page': page,
+                               'who': who,
+                               'permissions': $element.data('permissions'),
+                               'mode': $element.data('mode'),
+                               'bits': $element.data('bits')
+                       }
+               }).done(function(data) {
+                       // Replace content
+                       $('#' + page + '_' + who).replaceWith(data);
+               });
+       };
+
+       /**
+        * changes the flag to lock the editing on a page by sending an AJAX request
+        */
+       Permissions.toggleEditLock = function($element) {
+               var page = $element.data('page');
+
+               $.ajax({
+                       url: ajaxUrl,
+                       type: 'post',
+                       dataType: 'html',
+                       cache: false,
+                       data: {
+                               'action': 'toggle_edit_lock',
+                               'page': page,
+                               'editLockState': $element.data('lockstate')
+                       }
+               }).done(function(data) {
+                       // Replace content
+                       $('#el_' + page).replaceWith(data);
+               });
+       };
+
+       /**
+        * Owner-related: Set the new owner of a page by executing an ajax call
+        */
+       Permissions.changeOwner = function($element) {
+               var page = $element.data('page');
+
+               $.ajax({
+                       url: ajaxUrl,
+                       type: 'post',
+                       dataType: 'html',
+                       cache: false,
+                       data: {
+                               'action': 'change_owner',
+                               'page': page,
+                               'ownerUid': $element.data('owner'),
+                               'newOwnerUid': $('#new_page_owner').val()
+                       }
+               }).done(function(data) {
+                       // Replace content
+                       $('#o_' + page).replaceWith(data);
+               });
+       };
+
+       /**
+        * Owner-related: load the selector for selecting
+        * the owner of a page by executing an ajax call
+        */
+       Permissions.showChangeOwnerSelector = function($element) {
+               var page = $element.data('page');
+
+               $.ajax({
+                       url: ajaxUrl,
+                       type: 'post',
+                       dataType: 'html',
+                       cache: false,
+                       data: {
+                               'action': 'show_change_owner_selector',
+                               'page': page,
+                               'ownerUid': $element.data('ownerUid'),
+                               'username': $element.data('username')
+                       }
+               }).done(function(data) {
+                       // Replace content
+                       $('#o_' + page).replaceWith(data);
+               });
+       };
+
+       /**
+        * Owner-related: Update the HTML view and show the original owner
+        */
+       Permissions.restoreOwner = function($element) {
+               var page = $element.data('page');
+               var username = $element.data('username');
+               var usernameHtml = username;
+               if (typeof username === 'undefined') {
+                       username = $('<span>', {
+                               'class': 'not_set',
+                               'text': '[not set]'
+                       });
+                       username = username.text();
+                       usernameHtml = username.html();
+               }
+
+               var html = $('<span/>', {
+                       'id': 'o_' + page
+               });
+               var aSelector = $('<a/>', {
+                       'class': 'ug_selector changeowner',
+                       'data-page': page,
+                       'data-owner': $element.data('owner'),
+                       'data-username': usernameHtml,
+                       'text': username
+               });
+               html.append(aSelector);
+
+               // Replace content
+               $('#o_' + page).replaceWith(html);
+       };
+
+       /**
+        * Group-related: Set the new group by executing an ajax call
+        */
+       Permissions.changeGroup = function($element) {
+               var page = $element.data('page');
+
+               $.ajax({
+                       url: ajaxUrl,
+                       type: 'post',
+                       dataType: 'html',
+                       cache: false,
+                       data: {
+                               'action': 'change_group',
+                               'page': page,
+                               'groupUid': $element.data('group'),
+                               'newGroupUid': $('#new_page_group').val()
+                       }
+               }).done(function(data) {
+                       // Replace content
+                       $('#g_' + page).replaceWith(data);
+               });
+       };
+
+       /**
+        * Group-related: Load the selector by executing an ajax call
+        */
+       Permissions.showChangeGroupSelector = function($element) {
+               var page = $element.data('page');
+
+               $.ajax({
+                       url: ajaxUrl,
+                       type: 'post',
+                       dataType: 'html',
+                       cache: false,
+                       data: {
+                               'action': 'show_change_group_selector',
+                               'page': page,
+                               'groupUid': $element.data('lockstate'),
+                               'groupname': $element.data('groupname')
+                       }
+               }).done(function(data) {
+                       // Replace content
+                       $('#g_' + page).replaceWith(data);
+               });
+       };
+
+       /**
+        * Group-related: Update the HTML view and show the original group
+        */
+       Permissions.restoreGroup = function($element) {
+               var page = $element.data('page');
+               var groupname = $element.data('groupname');
+               var groupnameHtml = groupname;
+               if (typeof groupname === 'undefined') {
+                       groupname = $('<span>', {
+                               'class': 'not_set',
+                               'text': '[not set]'
+                       });
+                       groupname = groupname.text();
+                       groupnameHtml = groupname.html();
+               }
+               var html = $('<span/>', {
+                       'id': 'g_' + page
+               });
+               var aSelector = $('<a/>', {
+                       'class': 'ug_selector changegroup',
+                       'data-page': page,
+                       'data-group': $element.data('group'),
+                       'data-groupname': groupnameHtml,
+                       'text': groupname
+               });
+               html.append(aSelector);
+
+               // Replace content
+               $('#g_' + page).replaceWith(html);
+       };
+
+       /**
+        * initializes events using deferred bound to document
+        * so AJAX reloads are no problem
+        */
+       Permissions.initializeEvents = function() {
+
+               // Click event to change permissions
+               $(Permissions.options.containerSelector).on('click', '.change-permission', function(evt) {
+                       evt.preventDefault();
+                       Permissions.setPermissions($(this));
+               }).on('click', '.editlock', function(evt) {
+                       // Click event for lock state
+                       evt.preventDefault();
+                       Permissions.toggleEditLock($(this));
+               }).on('click', '.changeowner', function(evt) {
+                       // Click event to change owner
+                       evt.preventDefault();
+                       Permissions.showChangeOwnerSelector($(this));
+               }).on('click', '.changegroup', function(evt) {
+                       // click event to change group
+                       evt.preventDefault();
+                       Permissions.showChangeGroupSelector($(this));
+               }).on('click', '.restoreowner', function(evt) {
+                       // Add click handler for restoring previous owner
+                       evt.preventDefault();
+                       Permissions.restoreOwner($(this));
+               }).on('click', '.saveowner', function(evt) {
+                       // Add click handler for saving owner
+                       evt.preventDefault();
+                       Permissions.changeOwner($(this));
+               }).on('click', '.restoregroup', function(evt) {
+                       // Add click handler for restoring previous group
+                       evt.preventDefault();
+                       Permissions.restoreGroup($(this));
+               }).on('click', '.savegroup', function(evt) {
+                       // Add click handler for saving group
+                       evt.preventDefault();
+                       Permissions.changeGroup($(this));
+               });
+       };
+
+       /**
+        * initialize and return the Permissions object
+        */
+       return function() {
+               $(document).ready(function() {
+                       Permissions.initializeEvents();
+               });
+
+               TYPO3.Permissions = Permissions;
+               return Permissions;
+       }();
+});
\ No newline at end of file
diff --git a/typo3/sysext/perm/mod1/perm.js b/typo3/sysext/perm/mod1/perm.js
deleted file mode 100644 (file)
index a81dc91..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Javascript functions regarding the permissions module
- * Relies on the javascript library "prototype"
- */
-
-function checkChange(checknames, varname) {
-       var res = 0;
-       for (var a=1; a<=5; a++)        {
-               if (document.editform[checknames+'['+a+']'].checked) {
-                       res|=Math.pow(2,a-1);
-               }
-       }
-       document.editform[varname].value = res | (checknames == 'check[perms_user]' ? 1 : 0);
-       setCheck(checknames, varname);
-}
-
-function setCheck(checknames, varname) {
-       if (document.editform[varname]) {
-               var res = document.editform[varname].value;
-               for (var a=1; a<=5; a++) {
-                       document.editform[checknames+'['+a+']'].checked = (res & Math.pow(2,a-1));
-               }
-       }
-}
-
-function jumpToUrl(URL)        { window.location.href = URL; }
-
-// Methods for AJAX permission manipulation
-var WebPermissions = {
-
-    thisScript: TYPO3.settings.ajaxUrls['PermissionAjaxController::dispatch'],
-
-               // set the permission bits through an ajax call
-       setPermissions: function(page, bits, mode, who, permissions) {
-               new Ajax.Updater($(page + '_' + who), this.thisScript, {
-                       parameters: { page: page, permissions: permissions, mode: mode, who: who, bits: bits }
-               });
-       },
-
-               // load the selector for selecting the owner of a page by executing an ajax call
-       showChangeOwnerSelector: function(page, ownerUid, elementID, username) {
-               new Ajax.Updater($(elementID), this.thisScript, {
-                       parameters: { action: 'show_change_owner_selector', page: page, ownerUid: ownerUid, username: username }
-               });
-       },
-
-               // Set the new owner of a page by executing an ajax call
-       changeOwner: function(page, ownerUid, elementID) {
-               new Ajax.Updater($(elementID), this.thisScript, {
-                       parameters: { action: 'change_owner', page: page, ownerUid: ownerUid, newOwnerUid: $('new_page_owner').value }
-               });
-       },
-
-               // Update the HTML view and show the original owner
-       restoreOwner: function(page, ownerUid, username, elementID) {
-               var idName = 'o_' + page;
-               $(elementID).innerHTML = '<a class="ug_selector" onclick="WebPermissions.showChangeOwnerSelector(' + page + ', ' + ownerUid + ', \'' + idName + '\', \'' + username + '\');">' + username + '</a>';
-       },
-
-               // Load the selector by executing an ajax call
-       showChangeGroupSelector: function(page, groupUid, elementID, groupname) {
-               new Ajax.Updater($(elementID), this.thisScript, {
-                       parameters: { action: 'show_change_group_selector', page: page, groupUid: groupUid, groupname: groupname }
-               });
-       },
-
-               // Set the new group by executing an ajax call
-       changeGroup: function(page, groupUid, elementID) {
-               new Ajax.Updater($(elementID), this.thisScript, {
-                       parameters: { action: 'change_group', page: page, groupUid: groupUid, newGroupUid: $('new_page_group').value }
-               });
-       },
-
-               // Update the HTML view and show the original group
-       restoreGroup: function(page, groupUid, groupname, elementID) {
-               var idName = 'g_' + page;
-               $(elementID).innerHTML = '<a class="ug_selector" onclick="WebPermissions.showChangeGroupSelector(' + page + ', ' + groupUid + ', \'' + idName + '\', \'' + groupname + '\');">' + groupname + '</a>';
-       },
-
-               // set or remove the edit lock by executing an ajax call
-       toggleEditLock: function(page, editLockState) {
-               new Ajax.Updater($('el_' + page), this.thisScript, {
-                       parameters: { action: 'toggle_edit_lock', page: page, editLockState: editLockState }
-               });
-       }
-};