$limit = $modx->db->getRecordCount($rs); if ($limit > 0) { require MODX_BASE_PATH . '/manager/includes/tmplvars.commands.inc.php'; $output .= "<table style='position:relative' border='0' cellspacing='0' cellpadding='3' width='96%'>"; for ($i = 0; $i < $limit; $i++) { $row = $modx->db->getRow($rs); if ($i > 0 && $i < $limit) { $output .= '<tr><td colspan="2"><div class="split"></div></td></tr>'; } $output .= '<tr style="height: 24px;"> <td align="left" valign="top" width="150"> <span class=\'warning\'>' . $row['caption'] . '</span><br /><span class=\'comment\'>' . $row['description'] . '</span> </td> <td valign="top" style="position:relative">'; $base_url = str_replace("assets/modules/docmanager/", "", MODX_BASE_URL); $output .= renderFormElement($row['type'], $row['id'], $row['default_text'], $row['elements'], $row['value'], ' style="width:300px;"'); $output .= '</td></tr>'; } $output .= '</table>'; $output .= '<br />' . $dm->lang['DM_tv_ignore_tv'] . ' <input type="text" id="ignoreTV" name="ignoreTV" size="50" value="" />'; } else { print $dm->lang['DM_tv_no_tv']; } print $output; } else { print ''; } function renderFormElement($field_type, $field_id, $default_text, $field_elements, $field_value, $field_style = '') { global $modx; global $dm;
if ($i++ > 0) { echo "\t\t", '<tr><td colspan="2"><div class="split"></div></td></tr>', "\n"; } // post back value if (array_key_exists('tv' . $row['id'], $_POST)) { if (is_array($_POST['tv' . $row['id']])) { $tvPBV = implode('||', $_POST['tv' . $row['id']]); } else { $tvPBV = $_POST['tv' . $row['id']]; } } else { $tvPBV = $row['value']; } $tvDescription = !empty($row['description']) ? '<br /><span class="comment">' . $row['description'] . '</span>' : ''; $tvInherited = substr($tvPBV, 0, 8) == '@INHERIT' ? '<br /><span class="comment inherited">(' . $_lang['tmplvars_inherited'] . ')</span>' : ''; echo "\t\t", '<tr style="height: 24px;"><td align="left" valign="top" width="150"><span class="warning">', $row['caption'], "</span>\n", "\t\t\t", $tvDescription, $tvInherited, "</td>\n", "\t\t\t", '<td valign="top" style="position:relative;', $row['type'] == 'date' ? '' : '', '">', "\n", "\t\t\t", renderFormElement($row['type'], $row['id'], $row['default_text'], $row['elements'], $tvPBV, '', $row), "\n", "\t\t</td></tr>\n"; } echo "\t</table>\n"; } else { // There aren't any Template Variables echo "\t<p>" . $_lang['tmplvars_novars'] . "</p>\n"; } ?> </div> <!-- end .sectionBody .tmplvars --> <?php } ?> </div><!-- end #tabGeneral -->
} // post back value if (array_key_exists('tv' . $row['id'], $_POST)) { if ($row['type'] == 'listbox-multiple') { $tvPBV = implode('||', $_POST['tv' . $row['id']]); } else { $tvPBV = $_POST['tv' . $row['id']]; } } else { $tvPBV = $row['value']; } $zindex = $row['type'] === 'date' ? 'z-index:100;' : ''; if ($row['type'] !== 'hidden') { echo '<tr style="height: 24px;"><td valign="top" width="150"><span class="warning">' . $row['caption'] . "</span>\n" . '<br /><span class="comment">' . $row['description'] . "</span></td>\n" . '<td valign="top" style="position:relative;' . $zindex . '">' . "\n" . renderFormElement($row['type'], $row['id'], $row['default_text'], $row['elements'], $tvPBV, '', $row) . "\n" . "</td></tr>\n"; } else { echo '<tr style="display:none;"><td colspan="2">' . renderFormElement('hidden', $row['id'], $row['default_text'], $row['elements'], $tvPBV, '', $row) . "</td></tr>\n"; } } echo "</table>\n"; } else { // There aren't any Template Variables echo "\t<p>" . $_lang['tmplvars_novars'] . "</p>\n"; } ?> </div> <!-- end .sectionBody .tmplvars --> <?php } ?> </div><!-- end #tabGeneral -->
function Run() { // Include MODx manager language file global $_lang; // Get manager language $manager_language = $this->modx->config['manager_language']; // Individual user language setting (if set) $query = 'SELECT setting_name, setting_value FROM ' . $this->modx->getFullTableName('user_settings') . ' WHERE setting_name=\'manager_language\' AND user='******'mgrInternalKey']; $records = $this->modx->db->query($query); if ($this->modx->db->getRecordCount($records) > 0) { $record = $this->modx->db->getRow($records); $manager_language = $record['setting_value']; } // Include_once the language file if (!isset($manager_language) || !file_exists(MODX_MANAGER_PATH . "includes/lang/" . $manager_language . ".inc.php")) { $manager_language = "english"; // if not set, get the english language file. } // Include default language include_once MODX_MANAGER_PATH . "includes/lang/english.inc.php"; // Include user language if ($manager_language != "english" && file_exists(MODX_MANAGER_PATH . "includes/lang/" . $manager_language . ".inc.php")) { include_once MODX_MANAGER_PATH . "includes/lang/" . $manager_language . ".inc.php"; } // Get event $e =& $this->modx->Event; // Run plugin based on event switch ($e->name) { // Save document case 'OnDocFormSave': // Saving process for Qm only if (intval($_REQUEST['quickmanager']) == 1) { $id = $e->params['id']; $key = $id; // Normal saving document procedure stops to redirect => Before redirecting secure documents and clear cache // Secure web documents - flag as private (code from: manager/processors/save_content.processor.php) include $this->modx->config['base_path'] . "manager/includes/secure_web_documents.inc.php"; secureWebDocument($key); // Secure manager documents - flag as private (code from: manager/processors/save_content.processor.php) include $this->modx->config['base_path'] . "manager/includes/secure_mgr_documents.inc.php"; secureMgrDocument($key); // Clear cache $this->clearCache(); // Different doc to be refreshed than the one we are editing? if (isset($_POST['qmrefresh'])) { $id = intval($_POST['qmrefresh']); } // Redirect to clearer page which refreshes parent window and closes modal box frame $this->modx->sendRedirect($this->modx->config['base_url'] . 'index.php?id=' . $id . '&quickmanagerclose=1', 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); } break; // Display page in front-end // Display page in front-end case 'OnWebPagePrerender': // Get document id $docID = $this->modx->documentIdentifier; // Get page output $output =& $this->modx->documentOutput; // Close modal box after saving (previously close.php) if (isset($_GET['quickmanagerclose'])) { // Set url to refresh $url = $this->modx->makeUrl($docID, '', '', 'full'); $output = ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title></title> </head> <body onload="javascript: parent.location.href = \'' . $url . '\';"> </body> </html> '; break; } // QM+ TV edit if (intval($_GET['quickmanagertv'] == 1) && $_GET['tvname'] != '' && $this->tvbuttons == 'true') { $tvName = ''; $locked = FALSE; $access = FALSE; $save = 0; $imagePreview = ''; // Includes $manager_path = 'manager/'; include_once $manager_path . 'includes/tmplvars.inc.php'; include_once $manager_path . 'includes/tmplvars.commands.inc.php'; include_once $manager_path . 'includes/tmplvars.format.inc.php'; // Get save status if (isset($_POST['save'])) { $save = intval($_POST['save']); } // Get TV name if (preg_match('/^([^\\"\'\\(\\)<>!?]+)/i', $_GET['tvname'])) { $tvName = $_GET['tvname']; } // Get TV array $tv = $this->modx->getTemplateVar($tvName, '*', $docID); // Handle default TVs switch ($tvName) { case 'pagetitle': $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; case 'longtitle': $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; case 'description': $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; case 'content': $tv['type'] = 'richtext'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; case 'menutitle': $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; case 'introtext': $tv['type'] = 'textarea'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; } // Check TV access if (!$access) { $access = $this->checkTvAccess($tv['id']); } // User can access TV if ($access) { // Show TV form if ($save == 0) { // Check is document locked? Someone else is editing the document... //$_lang['lock_msg'] if ($this->checkLocked()) { $locked = TRUE; } else { $this->setLocked(1); } // Handle RTE if ($tv['type'] == 'richtext') { // Invoke OnRichTextEditorInit event $eventOutput = $this->modx->invokeEvent("OnRichTextEditorInit", array('editor' => $this->modx->config['which_editor'], 'elements' => array('tv' . $tvName))); if (is_array($eventOutput)) { $editorHtml = implode("", $eventOutput); } } // Render TV html $tvHtml = renderFormElement($tv['type'], $tv['name'], $tv['default_text'], $tv['elements'], $tv['value']); // Get jQuery conflict mode if ($this->noconflictjq == 'true') { $jq_mode = '$j'; } else { $jq_mode = '$'; } } else { // Remove document locked $this->setLocked(0); // Save TV $this->saveTv($tvName); } // Page output: header $output = ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title></title> <link rel="stylesheet" type="text/css" href="' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/style.css" /> <!--[if IE]><link rel="stylesheet" type="text/css" href="' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/ie.css" /><![endif]--> <!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/ie7.css" /><![endif]--> <script src="' . $this->modx->config['site_url'] . $this->jqpath . '" type="text/javascript"></script> </head> '; // Page output: TV form if ($save == 0) { $output .= ' <body id="qm-tv-body"> '; // Document is locked message if ($locked) { $output .= ' <h1>' . $_lang['locked'] . '</h1> <div id="qm-tv-description">' . $_lang['lock_msg'] . '</div> '; } else { // Image preview if ($tv['type'] == 'image') { $imagePreview = ' <div id="qm-tv-image-preview"><img class="qm-tv-image-preview-drskip qm-tv-image-preview-skip" src="' . $this->modx->config['site_url'] . $tv['value'] . '" alt="" /></div> <script type="text/javascript" charset="UTF-8"> $(document).ready(function() { var previewImage = "#tv' . $tvName . '"; var siteUrl = "' . $this->modx->config['site_url'] . '"; OriginalSetUrl = SetUrl; // Copy the existing Image browser SetUrl function SetUrl = function(url, width, height, alt) { // Redefine it to also tell the preview to update OriginalSetUrl(url, width, height, alt); $(previewImage).trigger("change"); } $(previewImage).change(function() { $("#qm-tv-image-preview").empty(); if ($(previewImage).val()!="" ){ $("#qm-tv-image-preview").append("<img class=\\"qm-tv-image-preview-drskip qm-tv-image-preview-skip\\" src=\\"" + siteUrl + $(previewImage).val() + "\\" alt=\\"\\" />"); } else{ $("#qm-tv-image-preview").append(""); } }); }); </script> '; } $output .= ' <form id="qm-tv-form" name="mutate" method="post" enctype="multipart/form-data" action="' . $this->modx->config['site_url'] . 'index.php?id=' . $docID . '&quickmanagertv=1&tvname=' . $tvName . '"> <input type="hidden" name="tvid" value="' . $tv['id'] . '" /> <input id="save" type="hidden" name="save" value="1" /> <div id="qm-tv-actions"> <div class="qm-cancel"><a href="#" onclick="parent.' . $jq_mode . '.fn.colorbox.close(); return false;"><span>' . $_lang['cancel'] . '</span></a></div> <div class="qm-save"><a href="#" onclick="document.forms[\'mutate\'].submit(); return false;"><span>' . $_lang['save'] . '</span></a></div> </div> <h1>' . $tv['caption'] . '</h1> <div id="qm-tv-description">' . $tv['description'] . '</div> <div id="qm-tv-tv" class="qm-tv-' . $tv['type'] . '"> ' . $tvHtml . ' </div> ' . $imagePreview . ' </form> ' . $editorHtml . ' '; } } else { $output .= '<body onload="parent.location.reload();">'; } // Page output: footer $output .= ' </body> </html> '; } else { $output = 'Error: Access denied.'; } } else { if (isset($_SESSION['mgrValidated']) && $_REQUEST['z'] != 'manprev') { // If logout break here if (isset($_REQUEST['logout'])) { $this->Logout(); break; } $userID = $_SESSION['mgrInternalKey']; //$docID = $this->modx->documentIdentifier; $doc = $this->modx->getDocument($docID); // Edit button $editButton = ' <li class="qmEdit"> <a class="qmButton qmEdit colorbox" href="' . $this->modx->config['site_url'] . 'manager/index.php?a=27&id=' . $docID . '&quickmanager=1"><span> ' . $_lang['edit_resource'] . '</span></a> </li> '; // Check if user has manager access to current document $access = $this->checkAccess(); // Does user have permissions to edit document if ($access) { $controls .= $editButton; } if ($this->addbutton == 'true' && $access) { // Add button $addButton = ' <li class="qmAdd"> <a class="qmButton qmAdd colorbox" href="' . $this->modx->config['site_url'] . 'manager/index.php?a=4&pid=' . $docID . '&quickmanager=1"><span>' . $_lang['create_resource_here'] . '</span></a> </li> '; // Does user have permissions to add document if ($this->modx->hasPermission('new_document')) { $controls .= $addButton; } } // Custom add buttons if not empty and enough permissions if ($this->custombutton != '') { // Replace [*id*] with current doc id $this->custombutton = str_replace("[*id*]", $docID, $this->custombutton); // Handle [~id~] links $this->custombutton = $this->modx->rewriteUrls($this->custombutton); $buttons = explode("||", $this->custombutton); // Buttons are divided by "||" // Custom buttons class index $i = 0; // Parse buttons foreach ($buttons as $key => $field) { $i++; $field = substr($field, 1, -1); // Trim "'" from beginning and from end $buttonParams = explode("','", $field); // Button params are divided by "','" $buttonTitle = $buttonParams[0]; $buttonAction = $buttonParams[1]; // Contains URL if this is not add button $buttonParentId = $buttonParams[2]; // Is empty is this is not add button $buttonTplId = $buttonParams[3]; // Button visible for all if ($buttonParams[4] == '') { $showButton = TRUE; } else { $showButton = FALSE; // Get user roles the button is visible for $buttonRoles = explode(",", $buttonParams[4]); // Roles are divided by ',' // Check if user role is found foreach ($buttonRoles as $key => $field) { if ($field == $_SESSION['mgrRole']) { $showButton = TRUE; } } } // Show custom button if ($showButton) { switch ($buttonAction) { case 'new': $customButton = ' <li class="qm-custom-' . $i . ' qmCustom"> <a class="qmButton qmCustom colorbox" href="' . $this->modx->config['site_url'] . 'manager/index.php?a=4&pid=' . $buttonParentId . '&quickmanager=1&customaddtplid=' . $buttonTplId . '"><span>' . $buttonTitle . '</span></a> </li> '; break; case 'link': $customButton = ' <li class="qm-custom-' . $i . ' qmCustom"> <a class="qmButton qmCustom" href="' . $buttonParentId . '" ><span>' . $buttonTitle . '</span></a> </li> '; break; case 'modal': $customButton = ' <li class="qm-custom-' . $i . ' qmCustom"> <a class="qmButton qmCustom colorbox" href="' . $buttonParentId . '" ><span>' . $buttonTitle . '</span></a> </li> '; break; } $controls .= $customButton; } } } // Go to Manager button if ($this->managerbutton == 'true') { $managerButton = ' <li class="qmManager"> <a class="qmButton qmManager" title="' . $_lang['manager'] . '" href="' . $this->modx->config['site_url'] . 'manager/" ><span>' . $_lang['manager'] . '</span></a> </li> '; $controls .= $managerButton; } // Logout button $logout = $this->modx->config['site_url'] . 'manager/index.php?a=8&quickmanager=logout&logoutid=' . $docID; $logoutButton = ' <li class="qmLogout"> <a id="qmLogout" class="qmButton qmLogout" title="' . $_lang['logout'] . '" href="' . $logout . '" ><span>' . $_lang['logout'] . '</span></a> </li> '; $controls .= $logoutButton; // Add action buttons $editor = ' <div id="qmEditorClosed"></div> <div id="qmEditor"> <ul> <li id="qmClose"><a class="qmButton qmClose" href="#" onclick="javascript: return false;">X</a></li> <li><a id="qmLogoClose" class="qmClose" href="#" onclick="javascript: return false;"></a></li> ' . $controls . ' </ul> </div>'; $css = ' <link rel="stylesheet" type="text/css" href="' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/style.css" /> <!--[if IE]><link rel="stylesheet" type="text/css" href="' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/ie.css" /><![endif]--> <!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/ie7.css" /><![endif]--> '; // Autohide toolbar? Default: true if ($this->autohide == 'false') { $css .= ' <style type="text/css"> #qmEditor, #qmEditorClosed { top: 0px; } </style> '; } // Insert jQuery and ColorBox in head if needed if ($this->loadfrontendjq == 'true') { $head .= '<script src="' . $this->modx->config['site_url'] . $this->jqpath . '" type="text/javascript"></script>'; } if ($this->loadtb == 'true') { $head .= ' <link type="text/css" media="screen" rel="stylesheet" href="' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/colorbox.css" /> <style type="text/css"> .cboxIE #cboxTopLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/images/internet_explorer/borderTopLeft.png, sizingMethod=\'scale\');} .cboxIE #cboxTopCenter{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/images/internet_explorer/borderTopCenter.png, sizingMethod=\'scale\');} .cboxIE #cboxTopRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/images/internet_explorer/borderTopRight.png, sizingMethod=\'scale\');} .cboxIE #cboxBottomLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/images/internet_explorer/borderBottomLeft.png, sizingMethod=\'scale\');} .cboxIE #cboxBottomCenter{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/images/internet_explorer/borderBottomCenter.png, sizingMethod=\'scale\');} .cboxIE #cboxBottomRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/images/internet_explorer/borderBottomRight.png, sizingMethod=\'scale\');} .cboxIE #cboxMiddleLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/images/internet_explorer/borderMiddleLeft.png, sizingMethod=\'scale\');} .cboxIE #cboxMiddleRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' . $this->modx->config['site_url'] . 'assets/plugins/qm/css/images/internet_explorer/borderMiddleRight.png, sizingMethod=\'scale\');} </style> <script type="text/javascript" src="' . $this->modx->config['site_url'] . 'assets/plugins/qm/js/jquery.colorbox-min.js"></script> '; } // Insert ColorBox jQuery definitions for QuickManager+ $head .= ' <script type="text/javascript"> '; // jQuery in noConflict mode if ($this->noconflictjq == 'true') { $head .= ' var $j = jQuery.noConflict(); $j(document).ready(function($) '; $jvar = 'j'; } else { $head .= '$(document).ready(function($)'; $jvar = ''; } $head .= ' { $' . $jvar . '("a.colorbox").colorbox({width:"' . $this->tbwidth . '", height:"' . $this->tbheight . '", iframe:true, overlayClose:false, opacity:0.5, transition:"fade", speed:150}); // Bindings $' . $jvar . '(document).bind("cbox_open", function(){ $' . $jvar . '("body").css({"overflow":"hidden"}); $' . $jvar . '("html").css({"overflow":"hidden"}); $' . $jvar . '("#qmEditor").css({"display":"none"}); }); $' . $jvar . '(document).bind("cbox_closed", function(){ $' . $jvar . '("body").css({"overflow":"auto"}); $' . $jvar . '("html").css({"overflow":"auto"}); $' . $jvar . '("#qmEditor").css({"display":"block"}); // Remove manager lock by going to home page $' . $jvar . '.ajax({ type: "GET", url: "' . $this->modx->config['site_url'] . 'manager/index.php?a=2" }); }); // Hide QM+ if cookie found if (getCookie("hideQM") == 1) { $' . $jvar . '("#qmEditor").css({"display":"none"}); $' . $jvar . '("#qmEditorClosed").css({"display":"block"}); } // Hide QM+ $' . $jvar . '(".qmClose").click(function () { $' . $jvar . '("#qmEditor").hide("normal"); $' . $jvar . '("#qmEditorClosed").show("normal"); document.cookie = "hideQM=1; path=/;"; }); // Show QM+ $' . $jvar . '("#qmEditorClosed").click(function () { { $' . $jvar . '("#qmEditorClosed").hide("normal"); $' . $jvar . '("#qmEditor").show("normal"); document.cookie = "hideQM=0; path=/;"; } }); }); function getCookie(cookieName) { var results = document.cookie.match ( "(^|;) ?" + cookieName + "=([^;]*)(;|$)" ); if (results) return (unescape(results[2])); else return null; } </script> '; // Insert QM+ css in head $head .= $css; // Place QM+ head information in head, just before </head> tag $output = preg_replace('~(</head>)~i', $head . '\\1', $output); // Insert editor toolbar right after <body> tag $output = preg_replace('~(<body[^>]*>)~i', '\\1' . $editor, $output); // Search and create edit buttons in to the content if ($this->editbuttons == 'true' && $access) { $output = preg_replace('/<!-- ' . $this->editbclass . ' ([0-9]+) \'([^\\"\'\\(\\)<>!?]+)\' -->/', '<span class="' . $this->editbclass . '"><a class="colorbox" href="' . $this->modx->config['site_url'] . 'manager/index.php?a=27&id=$1&quickmanager=1&qmrefresh=' . $docID . '"><span>$2</span></a></span>', $output); } // Search and create new document buttons in to the content if ($this->newbuttons == 'true' && $access) { $output = preg_replace('/<!-- ' . $this->newbclass . ' ([0-9]+) ([0-9]+) \'([^\\"\'\\(\\)<>!?]+)\' -->/', '<span class="' . $this->newbclass . '"><a class="colorbox" href="' . $this->modx->config['site_url'] . 'manager/index.php?a=4&pid=$1&quickmanager=1&customaddtplid=$2"><span>$3</span></a></span>', $output); } // Search and create new document buttons in to the content if ($this->tvbuttons == 'true' && $access) { // Set and get user doc groups for TV permissions $this->docGroup = ''; $mrgDocGroups = $_SESSION['mgrDocgroups']; if (!empty($mrgDocGroups)) { $this->docGroup = implode(",", $mrgDocGroups); } // Create TV buttons and check TV permissions $output = preg_replace_callback('/<!-- ' . $this->tvbclass . ' ([^\\"\'\\(\\)<>!?]+) -->/', array(&$this, 'createTvButtons'), $output); } } } break; // Edit document in ThickBox frame (MODx manager frame) // Edit document in ThickBox frame (MODx manager frame) case 'OnDocFormPrerender': // If there is Qm call, add control buttons and modify to edit document page if (intval($_REQUEST['quickmanager']) == 1) { global $content; // Set template for new document, action = 4 if (intval($_GET['a']) == 4) { // Custom add button if (isset($_GET['customaddtplid'])) { // Set template $content['template'] = intval($_GET['customaddtplid']); } else { switch ($this->tpltype) { // Template type is parent case 'parent': // Get parent document id $pid = $content['parent'] ? $content['parent'] : intval($_REQUEST['pid']); // Get parent document $parent = $this->modx->getDocument($pid); // Set parent template $content['template'] = $parent['template']; break; // Template is specific id // Template is specific id case 'id': $content['template'] = $this->tplid; break; // Template is inherited by Inherit Selected Template plugin // Template is inherited by Inherit Selected Template plugin case 'selected': // Get parent document id $pid = $content['parent'] ? $content['parent'] : intval($_REQUEST['pid']); // Get inheritTpl TV $tv = $this->modx->getTemplateVar("inheritTpl", "", $pid); // Set template to inherit if ($tv['value'] != '') { $content['template'] = $tv['value']; } else { $content['template'] = $this->modx->config['default_template']; } break; } } } // Manager control class $mc = new Mcc(); // Hide default manager action buttons $mc->addLine('$("#actions").hide();'); // Get MODx theme $qm_theme = $this->modx->config['manager_theme']; // Get doc id $doc_id = intval($_REQUEST['id']); // Get jQuery conflict mode if ($this->noconflictjq == 'true') { $jq_mode = '$j'; } else { $jq_mode = '$'; } // Add action buttons $mc->addLine('var controls = "<div style=\\"padding:4px 0;position:fixed;top:10px;right:-10px;z-index:1000\\" id=\\"qmcontrols\\" class=\\"actionButtons\\"><ul><li><a href=\\"#\\" onclick=\\"documentDirty=false;document.mutate.save.click();return false;\\"><img src=\\"media/style/' . $qm_theme . '/images/icons/save.png\\" />' . $_lang['save'] . '</a></li><li><a href=\\"#\\" onclick=\\"documentDirty=false; parent.' . $jq_mode . '.fn.colorbox.close(); return false;\\"><img src=\\"media/style/' . $qm_theme . '/images/icons/stop.png\\"/>' . $_lang['cancel'] . '</a></li></ul></div>";'); // Modify head $mc->head = '<script type="text/javascript">document.body.style.display="none";</script>'; if ($this->loadmanagerjq == 'true') { $mc->head .= '<script src="' . $this->modx->config['site_url'] . $this->jqpath . '" type="text/javascript"></script>'; } // Add control button $mc->addLine('$("body").prepend(controls);'); // Hide fields to from front-end editors if ($this->hidefields != '') { $hideFields = explode(",", $this->hidefields); foreach ($hideFields as $key => $field) { $mc->hideField($field); } } // Hide tabs to from front-end editors if ($this->hidetabs != '') { $hideTabs = explode(",", $this->hidetabs); foreach ($hideTabs as $key => $field) { $mc->hideTab($field); } } // Hide sections from front-end editors if ($this->hidesections != '') { $hideSections = explode(",", $this->hidesections); foreach ($hideSections as $key => $field) { $mc->hideSection($field); } } // Hidden field to verify that QM+ call exists $hiddenFields = '<input type="hidden" name="quickmanager" value="1" />'; // Different doc to be refreshed? if (isset($_REQUEST['qmrefresh'])) { $hiddenFields .= '<input type="hidden" name="qmrefresh" value="' . intval($_REQUEST['qmrefresh']) . '" />'; } // Output $e->output($mc->Output() . $hiddenFields); } break; // Where to logout // Where to logout case 'OnManagerLogout': // Only if cancel editing the document and QuickManager is in use if ($_REQUEST['quickmanager'] == 'logout') { // Redirect to document id if ($this->logout != 'manager') { $this->modx->sendRedirect($this->modx->makeUrl($_REQUEST['logoutid']), 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); } } break; } }
function renderRTE($type = 'image', $field, $defaultValue = '', $style = '') { //-- Uses the ModX manager/includes/tmplvars.inc.php file // renderFormElement($field_type, $field_id, $default_text, $field_elements, $field_value, $field_style='') global $modx; include_once MODX_BASE_PATH . 'manager/includes/tmplvars.inc.php'; require_once MODX_BASE_PATH . 'manager/includes/tmplvars.commands.inc.php'; $event_output = $modx->invokeEvent("OnRichTextEditorInit", array('editor' => $modx->config['which_editor'], 'elements' => array('tv' . $field))); if (is_array($event_output)) { $editor_html = implode("", $event_output); } $rte_html = renderFormElement($type, $field, $defaultValue, '', '', $style); return str_replace('tv' . $field, $field, $rte_html . $editor_html); }
$row = mysql_fetch_assoc($rs); if ($row['type'] == 'richtext' || $row['type'] == 'htmlarea') { // Add richtext editor to the list if (is_array($replace_richtexteditor)) { $replace_richtexteditor = array_merge($replace_richtexteditor, array("tv" . $row['id'])); } else { $replace_richtexteditor = array("tv" . $row['id']); } } // splitter if ($i > 0 && $i < $limit) { echo "\t\t", '<tr><td colspan="2"><div class="split"></div></td></tr>', "\n"; } $tvPBV = array_key_exists('tv' . $row['id'], $_POST) ? $_POST['tv' . $row['id']] : $row['value']; // post back value echo "\t\t", '<tr style="height: 24px;"><td align="left" valign="top" width="150"><span class="warning">', $row['caption'], "</span>\n", "\t\t\t", '<br /><span class="comment">', $row['description'], "</span></td>\n", "\t\t\t", '<td valign="top" style="position:relative">', "\n", "\t\t\t", renderFormElement($row['type'], $row['id'], $row['default_text'], $row['elements'], $tvPBV, ' style="width:300px;"'), "\n"; "\t\t</td></tr>\n"; } echo "\t</table>\n"; } else { // There aren't any Template Variables echo "\t<p>" . $_lang['tmplvars_novars'] . "</p>\n"; } ?> </div><!-- end .sectionBody .tmplvars --> <?php } ?> <?php /*******************************
$json_opts .= (strlen($json_opts) ? "," : "") . json_encode($option); // Generate directory listing $TreeSelect = new TreeSelect($opt); if (is_array($TreeSelect->treeList) && count($TreeSelect->treeList)) { // ... and put it into HTML code $html_tree = $TreeSelect->list2HTML(); $htmlTrees .= strlen($html_tree) ? (strlen($htmlTrees) ? "," : "") . "'" . $html_tree . "'" : ""; } unset($TreeSelect); } if (!strlen($htmlTrees)) { return; } $e =& $modx->Event; if ($e->name == 'OnDocFormRender') { $modx_script = renderFormElement('text', 0, '', '', ''); preg_match('/(<script[^>]*?>.*?<\\/script>)/si', $modx_script, $matches); $output = $matches[0]; $rel_pluginPath = "../" . str_replace(MODX_BASE_PATH, '', $pluginPath); // Include our JS and CSS file and modify output $output .= <<<OUTPUT <!-- TreeSelect --> <link rel="stylesheet" type="text/css" href="{$rel_pluginPath}TreeSelect.styles.css" /> <script type="text/javascript" src="{$rel_pluginPath}TreeSelect.class.js"></script> <script type="text/javascript"> window.addEvent('domready', function() { var tvIds = new Array({$tvIds}); var trees = new Array({$htmlTrees}); var inputStatus = new Array({$inputStatus}); var basePath = new Array({$basePaths});
} $out .= '<div class="content_"> <p>' . $lang['newsletter_edit_header'] . '</p> <form action="index.php?a=112&id=' . $mod_id . '&p=1&action=' . $action . '" method="post"> <b>' . $lang['newsletter_edit_subject'] . '</b> <br /><input type="hidden" name="xid" value="' . $nid . '"> <input type="text" size="50" maxlength="250" name="subject" value="' . $subject . '"> <br /><br />'; // Get access to template variable function (to output the RTE) include_once $modx->config['base_path'] . 'manager/includes/tmplvars.inc.php'; $event_output = $modx->invokeEvent("OnRichTextEditorInit", array('editor' => $modx->config['which_editor'], 'elements' => array('tvmailMessage'))); if (is_array($event_output)) { $editor_html = implode("", $event_output); } // Get HTML for the textarea, last parameters are default_value, elements, value $rte_html = renderFormElement('richtext', 'mailMessage', '', '', $newsletter); $out .= $rte_html; $out .= $editor_html; $out .= '<button class="but" type="submit" name="edit" value="' . $lang['newsletter_edit_save'] . '"><img src="' . $href . 'images/add.png"> ' . $lang['newsletter_edit_save'] . '</button> </div>'; } elseif ($_GET['action'] == 4) { // Insert newsletter into database $sql = "INSERT INTO easynewsletter_newsletter VALUES('', now(), '','', '', '" . $modx->db->escape($_POST['subject']) . "', '" . $modx->db->escape($_POST['tvmailMessage']) . "', '','') "; $result = $modx->db->query($sql); header('Location:index.php?a=112&id=' . $mod_id . '&p=1&action=1'); } elseif ($_GET['action'] == 5) { // Обновление письма // замена адресов на абсолютные $sql = "UPDATE easynewsletter_newsletter SET subject='" . $_POST['subject'] . "', newsletter='" . $modx->db->escape($_POST['tvmailMessage']) . "' WHERE id='" . $_POST['xid'] . "'"; $result = $modx->db->query($sql); header('Location:index.php?a=112&id=' . $mod_id . '&p=1&action=1');
function renderMultiTVFormElement($fieldType, $fieldName, $fieldElements, $fieldClass, $fieldDefault) { $fieldName .= '_mtv'; $currentScript = array(); $currentClass = array(); $fieldClass = explode(' ', $fieldClass); switch ($fieldType) { case 'url': $fieldType = 'text'; break; case 'unixtime': $fieldType = 'date'; break; case 'image': if ($this->display == 'datatable' || $this->display == 'dbtatable' || $this->display == 'vertical') { $fieldClass[] = 'mtvImage'; } break; case 'richtext': if ($this->display == 'datatable' || $this->display == 'dbtable' || $this->options['type'] == 'module') { $this->fieldsrte[] = $this->options['type'] == 'module' ? $fieldName : "tv" . $this->tvID . $fieldName; $fieldClass[] = 'tabEditor'; } else { $fieldType = 'textarea'; } break; } $formElement = renderFormElement($fieldType, 0, '', $fieldElements, '', '', array()); $formElement = preg_replace('/( tvtype=\\"[^\\"]+\\")/', '', $formElement); // remove tvtype attribute $formElement = preg_replace('/(<label[^>]*><\\/label>)/', '', $formElement); // remove empty labels $formElement = preg_replace('/( id=\\"[^\\"]+)/', ' id="[+tvid+]' . $fieldName, $formElement); // change id attributes $formElement = preg_replace('/( name=\\"[^\\"]+)/', ' name="[+tvid+]' . $fieldName, $formElement); // change name attributes preg_match('/(<script.*?script>)/s', $formElement, $currentScript); // get script if (isset($currentScript[1])) { // the tv script is only included for the first tv that is using them (tv with image or file type) $formElement = preg_replace('/(<script.*?script>)/s', '', $formElement); // remove the script tag if ($this->cmsinfo['kcfinder'] == 'false' || $this->cmsinfo['seturl'] == 'old') { $currentScript[1] = preg_replace('/function SetUrl.*script>/s', '</script>', $currentScript[1]); // remove original SetUrl function } $formElement = $formElement . $currentScript[1]; // move the script tag to the end } preg_match('/<.*class=\\"([^\\"]*)/s', $formElement, $currentClass); // get current classes $formElement = preg_replace('/class=\\"[^\\"]*\\"/s', '', $formElement, 1); // remove all classes if ($fieldDefault != '') { $formElement = preg_replace('/(<\\w+)/', '$1 alt="' . $fieldDefault . '"', $formElement, 1); // add alt to first tag (the input) $fieldClass[] = 'setdefault'; } if (isset($currentClass[1])) { $fieldClass[] = str_replace('DatePicker', 'mtvDatePicker', $currentClass[1]); } $fieldClass = implode(' ', array_unique($fieldClass)); $formElement = preg_replace('/(<\\w+)/', '$1 class="' . $fieldClass . '"', $formElement, 1); // add class to first tag (the input) $formElement = preg_replace('/<label for=[^>]*>([^<]*)<\\/label>/s', '<label class="inlinelabel">$1</label>', $formElement); // add label class $formElement = preg_replace('/(onclick="BrowseServer[^\\"]+\\")/', 'class="browseimage ' . $fieldClass . '"', $formElement, 1); // remove imagebrowser onclick script $formElement = preg_replace('/(onclick="BrowseFileServer[^\\"]+\\")/', 'class="browsefile ' . $fieldClass . '"', $formElement, 1); // remove filebrowser onclick script $formElement = str_replace('document.forms[\'mutate\'].elements[\'tv0\'].value=\'\';document.forms[\'mutate\'].elements[\'tv0\'].onblur(); return true;', '$j(this).prev(\'input\').val(\'\').trigger(\'change\');', $formElement); // change datepicker onclick script $formElement = preg_replace('/(<script.*?DatePicker.*?script>)/s', '', $formElement); // remove datepicker script $formElement = preg_replace('/( onmouseover=\\"[^\\"]+\\")/', '', $formElement); // delete onmouseover attribute $formElement = preg_replace('/( onmouseout=\\"[^\\"]+\\")/', '', $formElement); // delete onmouseout attribute $formElement = str_replace(array(' '), ' ', $formElement); // change whitespace $formElement = str_replace(array('style="width:100%;"', 'style="width:100%"', ' width="100%"', ' width="100"', '<br />', 'onchange="documentDirty=true;"', " checked='checked'"), array(''), $formElement); // remove unused atrributes and tags return trim($formElement); }