/**
 * 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);
        }
    }
}
Exemple #2
0
/**
 * 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);
    }
}