[FEATURE] Add editlock for tt_content 62/41462/4
authorGeorg Ringer <georg.ringer@gmail.com>
Thu, 16 Jul 2015 12:54:40 +0000 (14:54 +0200)
committerAndreas Wolf <andreas.wolf@typo3.org>
Mon, 20 Jul 2015 15:05:58 +0000 (17:05 +0200)
It makes sense to be able to restrict content elements to be
editable by admins only.

Change-Id: Ic5cbb791ef3fcd5448ce8e4f9072ebc75de67b9d
Resolves: #68218
Releases: master
Reviewed-on: http://review.typo3.org/41462
Reviewed-by: Andreas Wolf <andreas.wolf@typo3.org>
Tested-by: Andreas Wolf <andreas.wolf@typo3.org>
Build/Resources/Public/Less/TYPO3/_module_web_page.less
typo3/sysext/backend/Classes/Controller/PageLayoutController.php
typo3/sysext/backend/Classes/View/PageLayoutView.php
typo3/sysext/core/Documentation/Changelog/master/Feature-68218-LockEditForTt_content.rst [new file with mode: 0644]
typo3/sysext/frontend/Configuration/TCA/tt_content.php
typo3/sysext/frontend/ext_tables.sql
typo3/sysext/t3skin/Resources/Public/Css/backend.css

index 743380b..f934238 100644 (file)
 // Dragging
 //
 .t3-page-ce-dragitem {
-       .t3-page-ce-header:hover {
+       .t3-page-ce-header-draggable:hover {
                cursor: move;
        }
 }
index bcd9474..8bcbce3 100755 (executable)
@@ -759,7 +759,11 @@ class PageLayoutController {
                        $opt[] = '<option value="' . $inValue . '"' . ($edit_record == $inValue ? ' selected="selected"' : '') . '>[ ' . $lang->getLL('editPageProperties', TRUE) . ' ]</option>';
                }
                // Selecting all content elements from this language and allowed colPos:
-               $res = $databaseConnection->exec_SELECTquery('*', 'tt_content', 'pid=' . (int)$this->id . ' AND sys_language_uid=' . (int)$this->current_sys_language . ' AND colPos IN (' . $this->colPosList . ')' . ($this->MOD_SETTINGS['tt_content_showHidden'] ? '' : BackendUtility::BEenableFields('tt_content')) . BackendUtility::deleteClause('tt_content') . BackendUtility::versioningPlaceholderClause('tt_content'), '', 'colPos,sorting');
+               $whereClause = 'pid=' . (int)$this->id . ' AND sys_language_uid=' . (int)$this->current_sys_language . ' AND colPos IN (' . $this->colPosList . ')' . ($this->MOD_SETTINGS['tt_content_showHidden'] ? '' : BackendUtility::BEenableFields('tt_content')) . BackendUtility::deleteClause('tt_content') . BackendUtility::versioningPlaceholderClause('tt_content');
+               if (!$this->getBackendUser()->user['admin']) {
+                       $whereClause .= ' AND editlock = 0';
+               }
+               $res = $databaseConnection->exec_SELECTquery('*', 'tt_content', $whereClause, '', 'colPos,sorting');
                $colPos = NULL;
                $first = 1;
                // Page is the pid if no record to put this after.
index a6b37ac..ce86c8e 100644 (file)
@@ -1249,7 +1249,7 @@ class PageLayoutView extends \TYPO3\CMS\Recordlist\RecordList\AbstractDatabaseRe
                }
                // Wrap the whole header
                // NOTE: end-tag for <div class="t3-page-ce-body"> is in getTable_tt_content()
-               return '<div class="t3-page-ce-header t3js-page-ce-draghandle">
+               return '<div class="t3-page-ce-header ' . ($this->getBackendUser()->user['admin'] || (int)$row['editlock'] === 0 ? 't3-page-ce-header-draggable t3js-page-ce-draghandle' : '') . '">
                                        <div class="t3-page-ce-header-icons-left">' . implode('', $additionalIcons) . '</div>
                                        <div class="t3-page-ce-header-icons-right">' . ($out ? '<div class="btn-toolbar">' .$out . '</div>' : '') . '</div>
                                </div>
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-68218-LockEditForTt_content.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-68218-LockEditForTt_content.rst
new file mode 100644 (file)
index 0000000..2ce2fe3
--- /dev/null
@@ -0,0 +1,14 @@
+==========================================
+Feature: #68218 - Lock edit for tt_content
+==========================================
+
+Description
+===========
+
+Content elements can now be restricted to be editable by admins only on a per record base. This has already been possible for pages with the checkbox "Restrict editing by non-Admins".
+
+
+Impact
+======
+
+This is useful to generally allow editors to edit content but be able to assure that important elements like the imprint or specific plugins are not changed.
\ No newline at end of file
index 76c1c16..91d2c59 100644 (file)
@@ -8,6 +8,7 @@ return array(
                'tstamp' => 'tstamp',
                'crdate' => 'crdate',
                'cruser_id' => 'cruser_id',
+               'editlock' => 'editlock',
                'title' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:tt_content',
                'delete' => 'deleted',
                'versioningWS' => 2,
@@ -135,6 +136,18 @@ return array(
                                'noIconsBelowSelect' => 1
                        )
                ),
+               'editlock' => array(
+                       'exclude' => 1,
+                       'label' => 'LLL:EXT:lang/locallang_tca.xlf:editlock',
+                       'config' => array(
+                               'type' => 'check',
+                               'items' => array(
+                                       '1' => array(
+                                               '0' => 'LLL:EXT:lang/locallang_core.xlf:labels.enabled'
+                                       )
+                               )
+                       )
+               ),
                'hidden' => array(
                        'exclude' => 1,
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden',
@@ -1206,7 +1219,8 @@ return array(
                                starttime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:starttime_formlabel,
                                endtime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:endtime_formlabel,
                                --linebreak--,
-                               fe_group;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:fe_group_formlabel
+                               fe_group;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:fe_group_formlabel,
+                               --linebreak--,editlock,
                        ',
                ),
                'uploadslayout' => array(
index 9931507..bd1efdf 100644 (file)
@@ -246,6 +246,7 @@ CREATE TABLE tt_content (
        tstamp int(11) unsigned DEFAULT '0' NOT NULL,
        crdate int(11) unsigned DEFAULT '0' NOT NULL,
        cruser_id int(11) unsigned DEFAULT '0' NOT NULL,
+       editlock tinyint(4) unsigned DEFAULT '0' NOT NULL,
        hidden tinyint(4) unsigned DEFAULT '0' NOT NULL,
        sorting int(11) unsigned DEFAULT '0' NOT NULL,
        CType varchar(255) DEFAULT '' NOT NULL,
index d25bc53..5ca7431 100644 (file)
@@ -12550,7 +12550,7 @@ iframe {
 .t3-page-ce-dropzone-possible {
   margin: 10px;
 }
-.t3-page-ce-dragitem .t3-page-ce-header:hover {
+.t3-page-ce-dragitem .t3-page-ce-header-draggable:hover {
   cursor: move;
 }
 [id="typo3-topbar"],