diff --git a/Documentation/Form.rst b/Documentation/Form.rst index db44de583c5461b969ab7c60729027bdb58f7098..b3b899b035e12ed5760520c0719b6c6e82db6e32 100644 --- a/Documentation/Form.rst +++ b/Documentation/Form.rst @@ -1378,6 +1378,9 @@ General input for any text. * *step* = Step size of the up/down buttons which increase/decrease the number of in the input field. Optional. Default 1. Only useful with `inputType=number` (defined explicit via `inputType` or detected automatically). * *textareaResize* = 0|1 (optional). Be default = 1 (=on). A textarea element is resizable by the user. + +.. _`htmlAllow`: + * *htmlAllow* = p,br,img,table,u,ol,b,h2,h3,h5,sup (optional). By default every html tag is allowed. Allow only specific html tags. This option is only useful in case `encode` is not `specialchar` (cause otherwise there are no HTML tags). If any of the following main tags (before colon) are given, the associated tags will be added automatically: @@ -1387,6 +1390,8 @@ General input for any text. * b: strong * u,ins,del,s: span + List of most used html tags: a,b,br,div,em,h1,h2,h3,h4,h5,h6,hr,i,img,table,ol,ul,p,pre,q,section,small,span,strong,sub,sup,title,u + .. _`input-typeahead`: Type Ahead @@ -1629,12 +1634,7 @@ Type: editor htmlAllow = p,br,h1,h3,table,b,textDecoration,ul,img -* By default every html tag is allowed. If following tags are given in list then associated tags will be added automatically: - - * table: td, tr, th, tbody, thead - * ol,ul: li - * b: strong - * textDecoration: span +* By default every html tag is allowed. List with tags and their automatically associated tags :ref:`htmlAllow` Type: annotate ^^^^^^^^^^^^^^ diff --git a/extension/Classes/Core/AbstractBuildForm.php b/extension/Classes/Core/AbstractBuildForm.php index 6ef33a0164f6e50d6eb64eaed66b8c5d8a476148..6cd993ac4e7d69e51b067606a98e5fafb90a937c 100644 --- a/extension/Classes/Core/AbstractBuildForm.php +++ b/extension/Classes/Core/AbstractBuildForm.php @@ -3483,6 +3483,8 @@ abstract class AbstractBuildForm { $formatDropdownFlag = true; } break; + default: + break; } } @@ -3578,6 +3580,8 @@ abstract class AbstractBuildForm { case 'pre': $formatDropdownElements[] = 'Preformat=pre'; break; + default: + break; } } diff --git a/extension/Classes/Core/Save.php b/extension/Classes/Core/Save.php index 8ebff59059aa76042f39837fcac3c19fa1ba9e34..52f5a8ae8f50d9ac6dbb8063b0b79694d289dae0 100644 --- a/extension/Classes/Core/Save.php +++ b/extension/Classes/Core/Save.php @@ -413,9 +413,6 @@ class Save { // Get htmlAllow parameters of all formValues and store in $feSpecsTags $feSpecsTags = $this->getHtmlAllowTags($this->feSpecNative, $formValues); - // For htmlAllow: Define with flags if '<li>' or '<span>' is needed for tinyMce (used for underline and other text decoration) and add them - $feSpecsTags = $this->setTinyMceSpecificTags($feSpecsTags); - // Iterate over all table.columns. Built an assoc array $newValues. foreach ($tableColumns as $column) { @@ -528,7 +525,7 @@ class Save { } } - return $feSpecsTags; + return $this->setTinyMceSpecificTags($feSpecsTags); } /** @@ -1792,8 +1789,6 @@ class Save { * @return array|string|string[]|null */ function purifierHtml($html) { - $libraryPath = Path::absoluteExt('vendor/htmlpurifier-4.15.0-lite/library/HTMLPurifier.auto.php'); - require_once $libraryPath; $purifier = new HTMLPurifier(); $rhtml = $purifier->purify($html); return $rhtml; diff --git a/extension/Classes/Sql/formEditor.sql b/extension/Classes/Sql/formEditor.sql deleted file mode 100644 index 9bb48c2dd65e8fa48681dfc17a9de24e0c31777f..0000000000000000000000000000000000000000 --- a/extension/Classes/Sql/formEditor.sql +++ /dev/null @@ -1,285 +0,0 @@ -# Before MariaDB 10.2.1, 'text' column could not have a 'default' value. -# To not be forced to specify each text column on INSERT() statements, switch off strict checking: -SET sql_mode = "NO_ENGINE_SUBSTITUTION"; - -CREATE TABLE IF NOT EXISTS `Form` -( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `name` VARCHAR(255) NOT NULL DEFAULT '', - `title` VARCHAR(1023) NOT NULL DEFAULT '', - `noteInternal` TEXT NOT NULL, - `tableName` VARCHAR(255) NOT NULL DEFAULT '', - `primaryKey` VARCHAR(255) NOT NULL DEFAULT '', - - `permitNew` ENUM ('sip', 'logged_in', 'logged_out', 'always', 'never') NOT NULL DEFAULT 'sip', - `permitEdit` ENUM ('sip', 'logged_in', 'logged_out', 'always', 'never') NOT NULL DEFAULT 'sip', - `restMethod` SET ('get', 'post', 'put', 'delete') NOT NULL DEFAULT '', - `escapeTypeDefault` VARCHAR(32) NOT NULL DEFAULT 'c', - `render` ENUM ('bootstrap', 'table', 'plain') NOT NULL DEFAULT 'bootstrap', - `requiredParameterNew` VARCHAR(255) NOT NULL DEFAULT '', - `requiredParameterEdit` VARCHAR(255) NOT NULL DEFAULT '', - `dirtyMode` ENUM ('exclusive', 'advisory', 'none') NOT NULL DEFAULT 'exclusive', - `showButton` SET ('new', 'delete', 'close', 'save') NOT NULL DEFAULT 'new,delete,close,save', - `multiMode` ENUM ('none', 'horizontal', 'vertical') NOT NULL DEFAULT 'none', - `multiSql` TEXT NOT NULL, - `multiDetailForm` VARCHAR(255) NOT NULL DEFAULT '', - `multiDetailFormParameter` VARCHAR(255) NOT NULL DEFAULT '', - - `forwardMode` ENUM ('auto', 'close', 'no', 'url', 'url-skip-history', 'url-sip', 'url-sip-skip-history') NOT NULL DEFAULT 'auto', - - - `forwardPage` VARCHAR(511) NOT NULL DEFAULT '', - - `labelAlign` ENUM ('default', 'left', 'center', 'right') NOT NULL DEFAULT 'default', - `bsLabelColumns` VARCHAR(255) NOT NULL DEFAULT '', - `bsInputColumns` VARCHAR(255) NOT NULL DEFAULT '', - `bsNoteColumns` VARCHAR(255) NOT NULL DEFAULT '', - - `parameter` TEXT NOT NULL, - `parameterLanguageA` TEXT NOT NULL, - `parameterLanguageB` TEXT NOT NULL, - `parameterLanguageC` TEXT NOT NULL, - `parameterLanguageD` TEXT NOT NULL, - `recordLockTimeoutSeconds` INT(11) NOT NULL DEFAULT 900, - - `deleted` ENUM ('yes', 'no') NOT NULL DEFAULT 'no', - `fileStats` VARCHAR(255) NOT NULL DEFAULT '', - `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - - PRIMARY KEY (`id`), - KEY `name` (`name`), - KEY `name_deleted` (`name`, `deleted`) -) - ENGINE = InnoDB - DEFAULT CHARSET = utf8 - AUTO_INCREMENT = 1000; - - -CREATE TABLE IF NOT EXISTS `FormElement` -( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `formId` INT(11) NOT NULL, - `feIdContainer` INT(11) NOT NULL DEFAULT '0', - `dynamicUpdate` ENUM ('yes', 'no') NOT NULL DEFAULT 'no', - - `enabled` ENUM ('yes', 'no') NOT NULL DEFAULT 'yes', - - `name` VARCHAR(255) NOT NULL DEFAULT '', - `label` VARCHAR(1023) NOT NULL DEFAULT '', - - `mode` ENUM ('show', 'required', 'readonly', 'hidden') NOT NULL DEFAULT 'show', - `modeSql` TEXT NOT NULL, - `class` ENUM ('native', 'action', 'container') NOT NULL DEFAULT 'native', - `type` ENUM ('checkbox', 'date', 'datetime', 'dateJQW', 'datetimeJQW', 'extra', - 'gridJQW', 'text', 'editor', 'annotate', 'time', 'note', 'password', 'radio', 'select', - 'subrecord', 'upload', 'imageCut', 'fieldset', 'pill', 'templateGroup', 'beforeLoad', - 'beforeSave', 'beforeInsert', 'beforeUpdate', 'beforeDelete', 'afterLoad', 'afterSave', - 'afterInsert', 'afterUpdate', 'afterDelete', 'sendMail', 'paste') NOT NULL DEFAULT 'text', - `subrecordOption` SET ('edit', 'delete', 'new') NOT NULL DEFAULT '', - `encode` ENUM ('none', 'specialchar', 'single tick') NOT NULL DEFAULT 'specialchar', - `checkType` ENUM ('auto', 'alnumx', 'digit', 'numerical', 'email', 'pattern', 'allbut', - 'all') NOT NULL DEFAULT 'auto', - `checkPattern` VARCHAR(255) NOT NULL DEFAULT '', - - `onChange` VARCHAR(255) NOT NULL DEFAULT '', - - `ord` INT(11) NOT NULL DEFAULT '0', - `tabindex` INT(11) NOT NULL DEFAULT '0', - - `size` VARCHAR(255) NOT NULL DEFAULT '', - `maxLength` VARCHAR(255) NOT NULL DEFAULT '', - `labelAlign` ENUM ('default', 'left', 'center', 'right') NOT NULL DEFAULT 'default', - `bsLabelColumns` VARCHAR(255) NOT NULL DEFAULT '', - `bsInputColumns` VARCHAR(255) NOT NULL DEFAULT '', - `bsNoteColumns` VARCHAR(255) NOT NULL DEFAULT '', - `rowLabelInputNote` SET ('row', 'label', '/label', 'input', '/input', 'note', '/note', '/row') NOT NULL DEFAULT 'row,label,/label,input,/input,note,/note,/row', - `note` TEXT NOT NULL, - `adminNote` TEXT NOT NULL, - `tooltip` VARCHAR(255) NOT NULL DEFAULT '', - `placeholder` VARCHAR(2048) NOT NULL DEFAULT '', - - `value` TEXT NOT NULL, - `sql1` TEXT NOT NULL, - `parameter` TEXT NOT NULL, - `parameterLanguageA` TEXT NOT NULL, - `parameterLanguageB` TEXT NOT NULL, - `parameterLanguageC` TEXT NOT NULL, - `parameterLanguageD` TEXT NOT NULL, - `clientJs` TEXT NOT NULL, - - `feGroup` VARCHAR(255) NOT NULL DEFAULT '', - `deleted` ENUM ('yes', 'no') NOT NULL DEFAULT 'no', - `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - - PRIMARY KEY (`id`), - KEY `formId` (`formId`), - KEY `formId_class_enabled_deleted` (`formId`, `class`, `enabled`, `deleted`), - KEY `feIdContainer` (`feIdContainer`), - KEY `ord` (`ord`), - KEY `feGroup` (`feGroup`) - -) - ENGINE = InnoDB - DEFAULT CHARSET = utf8 - AUTO_INCREMENT = 0; - - -CREATE TABLE IF NOT EXISTS `Dirty` -( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `sip` VARCHAR(255) NOT NULL, - `tableName` VARCHAR(255) NOT NULL, - `recordId` INT(11) NOT NULL, - `expire` DATETIME NOT NULL, - `recordHashMd5` CHAR(32) NOT NULL, - `tabUniqId` CHAR(32) NOT NULL, - `feUser` VARCHAR(255) NOT NULL, - `qfqUserSessionCookie` VARCHAR(255) NOT NULL, - `dirtyMode` ENUM ('exclusive', 'advisory', 'none') NOT NULL DEFAULT 'exclusive', - `remoteAddress` VARCHAR(45) NOT NULL, - `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - - PRIMARY KEY (`id`), - KEY `sip` (`sip`), - KEY `tableName` (`tableName`), - KEY `recordId` (`recordId`) -) - ENGINE = InnoDB - DEFAULT CHARSET = utf8 - AUTO_INCREMENT = 0; - - -# MailLog -CREATE TABLE IF NOT EXISTS `MailLog` -( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `grId` INT(11) NOT NULL DEFAULT '0', - `xId` INT(11) NOT NULL DEFAULT '0', - `xId2` INT(11) NOT NULL DEFAULT '0', - `xId3` INT(11) NOT NULL DEFAULT '0', - `receiver` TEXT NOT NULL, - `cc` TEXT NOT NULL, - `bcc` TEXT NOT NULL, - `sender` VARCHAR(255) NOT NULL DEFAULT '', - `subject` VARCHAR(255) NOT NULL DEFAULT '', - `body` TEXT NOT NULL, - `header` VARCHAR(2048) NOT NULL DEFAULT '', - `attach` VARCHAR(4096) NOT NULL DEFAULT '', - `src` VARCHAR(255) NOT NULL DEFAULT '', - `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - - PRIMARY KEY (`id`) -) - ENGINE = InnoDB - DEFAULT CHARSET = utf8 - AUTO_INCREMENT = 0; - -CREATE TABLE IF NOT EXISTS `FormSubmitLog` -( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `formData` TEXT NOT NULL, - `sipData` TEXT NOT NULL, - `clientIp` VARCHAR(64) NOT NULL, - `feUser` VARCHAR(64) NOT NULL, - `userAgent` TEXT NOT NULL, - `formId` INT(11) NOT NULL, - `formName` VARCHAR(255) NOT NULL, - `recordId` INT(11) NOT NULL, - `pageId` INT NOT NULL, - `sessionId` VARCHAR(32) NOT NULL, - `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - - PRIMARY KEY (`id`), - INDEX (`feUser`), - INDEX (`formId`) -) - ENGINE = InnoDB - DEFAULT CHARSET = utf8 - AUTO_INCREMENT = 0; - - -CREATE TABLE IF NOT EXISTS `Clipboard` -( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `cookie` VARCHAR(255) NOT NULL DEFAULT '', - `formIdPaste` INT(11) NOT NULL DEFAULT '0', - `idSrc` INT(11) NOT NULL DEFAULT '0', - `xId` INT(11) NOT NULL DEFAULT '0', - `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - - PRIMARY KEY (`id`) -) - ENGINE = InnoDB - DEFAULT CHARSET = utf8 - AUTO_INCREMENT = 0; - - -# AutoCRON -CREATE TABLE IF NOT EXISTS `Cron` -( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `grId` INT(11) NOT NULL, - `xId` INT(11) NOT NULL, - `type` ENUM ('mail', 'website') NOT NULL DEFAULT 'website', - `lastRun` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `lastStatus` TEXT NOT NULL, - `nextRun` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `frequency` VARCHAR(32) NOT NULL, - `inProgress` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `status` ENUM ('enable', 'disable') NOT NULL DEFAULT 'enable', - `sql1` TEXT NOT NULL, - `content` TEXT NOT NULL, - `comment` TEXT NOT NULL, - `outputFile` VARCHAR(255) NOT NULL, - `outputMode` ENUM ('overwrite', 'append') NOT NULL DEFAULT 'append', - `outputPattern` VARCHAR(255) NOT NULL, - `autoGenerated` ENUM ('yes', 'no') NOT NULL DEFAULT 'no', - `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - - PRIMARY KEY (`id`) -) - ENGINE = InnoDB - AUTO_INCREMENT = 0 - DEFAULT CHARSET = utf8; - - -CREATE TABLE IF NOT EXISTS `Split` -( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `tableName` VARCHAR(255) NOT NULL, - `xId` INT(11) NOT NULL, - `pathFileName` VARCHAR(255) NOT NULL, - `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - - PRIMARY KEY (`id`) -) - ENGINE = InnoDB - AUTO_INCREMENT = 0 - DEFAULT CHARSET = utf8; - -# Used to save tablesorter.js column selection settings. Free to use for other settings as well. -CREATE TABLE IF NOT EXISTS `Setting` -( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `type` ENUM ('', 'tablesorter') NOT NULL, - `readonly` ENUM ('yes', 'no') NOT NULL DEFAULT 'no' COMMENT 'Settings can''t be modified.', - `name` VARCHAR(64) NOT NULL, - `public` TINYINT(1) NOT NULL, - `feUser` VARCHAR(32) NOT NULL COMMENT 'In case there is no logged in user, take QFQ cookie.', - `tableId` VARCHAR(64) NOT NULL, - `view` TEXT NOT NULL, - `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `name` (`name`), - KEY `typeFeUserUidTableIdPublic` (`type`, `feUser`, `tableId`, `public`) USING BTREE -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4; - diff --git a/extension/composer.json b/extension/composer.json index 1e0adcf6e5ff6f577ce6c1065c8cd72552a47013..4f8f89a980b279ed8734076152db55322e1caec7 100644 --- a/extension/composer.json +++ b/extension/composer.json @@ -2,7 +2,8 @@ "require": { "phpoffice/phpspreadsheet": "^1.3", "ext-json": "*", - "twig/twig": "^2.0" + "twig/twig": "^2.0", + "htmlpurifier-lite/library": "4.*" }, "require-dev": { "phpunit/phpunit": "^6.5"