/** * mm_ddHTMLCleaner * @version 1.0.4 (2014-03-14) * * @desc A widget for the plugin ManagerManager. It removes forbidden HTML attributes and styles from document fields and TVs when required. * * @uses ManagerManager plugin 0.6. * * @param $fields {comma separated string} - The name(s) of the document fields (or TVs) which the widget is applied to. @required * @param $roles {comma separated string} - Roles that the widget is applied to (when this parameter is empty then widget is applied to the all roles). Default: ''. * @param $templates {comma separated string} - Templates IDs for which the widget is applying (empty value means the widget is applying to all templates). Default: ''. * @param $validAttrsForAllTags {comma separated string} - Default: 'title,class'. * @param $validStyles {comma separated string} - Default: 'word-spacing'. * @param $validAttrs {string: JSON} - Default: '{"img":"src,alt,width,height","a":"href,target"}'. * * @event OnDocFormPrerender * @event OnDocFormRender * * @link http://code.divandesign.biz/modx/mm_ddhtmlcleaner/1.0.4 * * @copyright 2014, DivanDesign * http://www.DivanDesign.biz */ function mm_ddHTMLCleaner($fields, $roles = '', $templates = '', $validAttrsForAllTags = 'title,class', $validStyles = 'word-spacing', $validAttrs = '{"img":"src,alt,width,height","a":"href,target"}') { if (!useThisRule($roles, $templates)) { return; } global $modx; $e =& $modx->Event; if ($e->name == 'OnDocFormPrerender') { $widgetDir = $modx->config['site_url'] . 'assets/plugins/managermanager/widgets/mm_ddhtmlcleaner/'; $output = includeJsCss($widgetDir . 'jquery.ddHTMLCleaner-0.2.min.js', 'html', 'jquery.ddHTMLCleaner', '0.2'); $output .= includeJsCss($widgetDir . 'jquery.ddMM.mm_ddHTMLCleaner.js', 'html', 'jquery.ddMM.mm_ddHTMLCleaner', '1.0.1'); $e->output($output); } else { if ($e->name == 'OnDocFormRender') { global $mm_fields, $content; if ($content['contentType'] != 'text/html') { return; } $fields = getTplMatchedFields($fields); if ($fields == false) { return; } $selectors = array(); foreach ($fields as $field) { $selectors[] = $mm_fields[$field]['fieldtype'] . '[name=\\"' . $mm_fields[$field]['fieldname'] . '\\"]'; } $output = "//---------- mm_ddHTMLCleaner :: Begin -----\n"; $output .= ' $j.ddMM.mm_ddHTMLCleaner.addInstance("' . implode(',', $selectors) . '", { validAttrsForAllTags: "' . $validAttrsForAllTags . '", validAttrs: ' . $validAttrs . ', validStyles: "' . $validStyles . '" }); '; $output .= "//---------- mm_ddHTMLCleaner :: End -----\n"; $e->output($output); } } }
/** * mm_ddMaxLength * @version 1.1.1 (2013-12-10) * * Widget for ManagerManager plugin allowing number limitation of chars inputing in fields (or TVs). * * @uses ManagerManager plugin 0.6. * * @param $fields {comma separated string} - The name(s) of the document fields (or TVs) which the widget is applied to. @required * @param $roles {comma separated string} - The roles that the widget is applied to (when this parameter is empty then widget is applied to the all roles). Default: ''. * @param $templates {comma separated string} - Id of the templates to which this widget is applied. Default: ''. * @param $length {integer} - Maximum number of inputing chars. Default: 150. * * @event OnDocFormPrerender * @event OnDocFormRender * * @link http://code.divandesign.biz/modx/mm_ddmaxlength/1.1.1 * * @copyright 2013, DivanDesign * http://www.DivanDesign.biz */ function mm_ddMaxLength($fields = '', $roles = '', $templates = '', $length = 150) { if (!useThisRule($roles, $templates)) { return; } global $modx; $e =& $modx->Event; $output = ''; if ($e->name == 'OnDocFormPrerender') { $widgetDir = $modx->config['site_url'] . 'assets/plugins/managermanager/widgets/ddmaxlength/'; $output .= includeJsCss($widgetDir . 'ddmaxlength.css', 'html'); $output .= includeJsCss($widgetDir . 'jquery.ddMM.mm_ddMaxLength.js', 'html', 'jquery.ddMM.mm_ddMaxLength', '1.0'); $e->output($output); } else { if ($e->name == 'OnDocFormRender') { global $mm_fields; $fields = getTplMatchedFields($fields, 'text,textarea'); if ($fields == false) { return; } $output .= "//---------- mm_ddMaxLength :: Begin -----\n"; foreach ($fields as $field) { $output .= ' $j("' . $mm_fields[$field]['fieldtype'] . '[name=' . $mm_fields[$field]['fieldname'] . ']").addClass("ddMaxLengthField").each(function(){ $j(this).parent().append("<div class=\\"ddMaxLengthCount\\"><span></span></div>"); }).ddMaxLength({ max: ' . $length . ', containerSelector: "div.ddMaxLengthCount span", warningClass: "maxLengthWarning" }); '; } $output .= "//---------- mm_ddMaxLength :: End -----\n"; $e->output($output); } } }
/** * ddSetFieldValue * @version 1.1 (2014-03-27) * * Widget for ManagerManager plugin allowing ducument fields values (or TV fields values) to be strongly defined (reminds of mm_default but field value assignment is permanent). * * @uses ManagerManager plugin 0.6.1. * * @param $fields {comma separated string} - The name(s) of the document fields (or TVs) for which value setting is required. @required * @param $value {string} - Required value. Default: ''. * @param $roles {comma separated string} - The roles that the widget is applied to (when this parameter is empty then widget is applied to the all roles). Default: ''. * @param $templates {comma separated string} - Id of the templates to which this widget is applied. Default: ''. * * @link http://code.divandesign.biz/modx/mm_ddsetfieldvalue/1.1 * * @copyright 2014, DivanDesign * http://www.DivanDesign.biz */ function mm_ddSetFieldValue($fields, $value = '', $roles = '', $templates = '') { global $modx; $e =& $modx->Event; if ($e->name == 'OnDocFormRender' && useThisRule($roles, $templates)) { global $mm_current_page, $mm_fields; $output = "//---------- mm_ddSetFieldValue :: Begin -----\n"; //Подбираем правильный формат даты в соответствии с конфигурацией switch ($modx->config['datetime_format']) { case 'dd-mm-YYYY': $date_format = 'd-m-Y'; break; case 'mm/dd/YYYY': $date_format = 'm/d/Y'; break; case 'YYYY/mm/dd': $date_format = 'Y/m/d'; break; } $fields = getTplMatchedFields($fields); if ($fields == false) { return; } foreach ($fields as $field) { //Результирующее значение для выставления через $.fn.val $setValue = $value; //Значение для чекбоксов $checkValue = (bool) $value; //Селектор для выставления через $.fn.val $setSelector = $mm_fields[$field]['fieldtype'] . '[name=\'' . $mm_fields[$field]['fieldname'] . '\']'; //Селектор для чекбоксов $checkSelector = false; //Некоторые поля документа требуют дополнительной обработки switch ($field) { //Дата публикации case 'pub_date': //Дата отмены публикации //Дата отмены публикации case 'unpub_date': $setValue = $setValue == '' ? jsSafe(date("{$date_format} H:i:s")) : jsSafe($setValue); break; //Аттрибуты ссылки //Аттрибуты ссылки case 'link_attributes': //Обработаем кавычки $setValue = str_replace(array("'", '"'), '\\"', $setValue); break; //Признак папки //Признак папки case 'is_folder': $checkSelector = $setSelector; $setSelector = false; break; //Чекбоксы с прямой логикой //Признак публикации //Чекбоксы с прямой логикой //Признак публикации case 'published': //Признак доступности для поиска //Признак доступности для поиска case 'searchable': //Признак кэширования //Признак кэширования case 'cacheable': //Признак очистки кэша //Признак очистки кэша case 'clear_cache': //Участвует в URL //Участвует в URL case 'alias_visible': //Если не 1, значит 0, другого не быть не может if ($setValue != '1') { $setValue = '0'; } $checkSelector = $setSelector; //Не очень красиво if внутри case, ровно так же, как и 'clear_cache' == 'syncsite', что поделать if ($field == 'clear_cache') { $setSelector = 'input[name=\'syncsite\']'; } else { $setSelector = 'input[name=\'' . $field . '\']'; } break; //Признак отображения в меню //Признак отображения в меню case 'show_in_menu': // Note these are reversed from what you'd think $setValue = $setValue == '1' ? '0' : '1'; $checkSelector = $setSelector; $setSelector = 'input[name=\'hidemenu\']'; break; //Признак скрытия из меню (аналогично show_in_menu, только наоборот) //Признак скрытия из меню (аналогично show_in_menu, только наоборот) case 'hide_menu': if ($setValue != '0') { $setValue = '1'; } $checkValue = !$checkValue; $checkSelector = $setSelector; $setSelector = 'input[name=\'hidemenu\']'; break; //Признак использованшия визуального редактора //Признак использованшия визуального редактора case 'is_richtext': $output .= 'var originalRichtextValue = $j("#which_editor:first").val();' . "\n"; if ($setValue != '1') { $setValue = '0'; $output .= ' // Make the RTE displayed match the default value that has been set here if (originalRichtextValue != "none"){ $j("#which_editor").val("none"); changeRTE(); } '; $output .= "\n"; } $checkSelector = $setSelector; $setSelector = 'input[name=\'richtext\']'; break; //Признак логирования //Признак логирования case 'log': //Note these are reversed from what you'd think $setValue = $setValue == '1' ? '0' : '1'; $checkValue = !$checkValue; $checkSelector = $setSelector; $setSelector = 'input[name=\'donthit\']'; break; } //Если это чекбокс if ($checkSelector !== false) { if ($checkValue) { $output .= '$j("' . $checkSelector . '").attr("checked", "checked");' . "\n"; } else { $output .= '$j("' . $checkSelector . '").removeAttr("checked");' . "\n"; } } //Если нужно задавать значение if ($setSelector !== false) { $output .= '$j("' . $setSelector . '").val("' . $setValue . '");' . "\n"; } } $output .= "//---------- mm_ddSetFieldValue :: End -----\n"; $e->output($output); } }