PageRenderTime 58ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/manager/actions/mutate_tmplvars.dynamic.php

https://github.com/good-web-master/modx.evo.custom
PHP | 500 lines | 471 code | 20 blank | 9 comment | 29 complexity | f135a07cd2610315c22f859aaa139e97 MD5 | raw file
Possible License(s): LGPL-2.1, AGPL-1.0, GPL-2.0, MIT, BSD-3-Clause
  1. <?php
  2. if(IN_MANAGER_MODE!="true") die("<b>INCLUDE_ORDERING_ERROR</b><br /><br />Please use the MODx Content Manager instead of accessing this file directly.");
  3. if(!$modx->hasPermission('edit_template') && $_REQUEST['a']=='301') {
  4. $e->setError(3);
  5. $e->dumpError();
  6. }
  7. if(!$modx->hasPermission('new_template') && $_REQUEST['a']=='300') {
  8. $e->setError(3);
  9. $e->dumpError();
  10. }
  11. if(isset($_REQUEST['id'])) {
  12. $id = $_REQUEST['id'];
  13. } else {
  14. $id=0;
  15. }
  16. // check to see the variable editor isn't locked
  17. $sql = "SELECT internalKey, username FROM $dbase.`".$table_prefix."active_users` WHERE action=301 AND id=$id";
  18. $rs = mysql_query($sql);
  19. $limit = mysql_num_rows($rs);
  20. if($limit>1) {
  21. for ($i=0;$i<$limit;$i++) {
  22. $lock = mysql_fetch_assoc($rs);
  23. if($lock['internalKey']!=$modx->getLoginUserID()) {
  24. $msg = sprintf($_lang["lock_msg"],$lock['username']," template variable");
  25. $e->setError(5, $msg);
  26. $e->dumpError();
  27. }
  28. }
  29. }
  30. // end check for lock
  31. // make sure the id's a number
  32. if(!is_numeric($id)) {
  33. echo "Passed ID is NaN!";
  34. exit;
  35. }
  36. if(isset($_GET['id'])) {
  37. $sql = "SELECT * FROM $dbase.`".$table_prefix."site_tmplvars` WHERE id = $id;";
  38. $rs = mysql_query($sql);
  39. $limit = mysql_num_rows($rs);
  40. if($limit>1) {
  41. echo "Oops, Multiple variables sharing same unique id. Not good.<p>";
  42. exit;
  43. }
  44. if($limit<1) {
  45. header("Location: /index.php?id=".$site_start);
  46. }
  47. $content = mysql_fetch_assoc($rs);
  48. $_SESSION['itemname']=$content['caption'];
  49. if($content['locked']==1 && $_SESSION['mgrRole']!=1) {
  50. $e->setError(3);
  51. $e->dumpError();
  52. }
  53. } else {
  54. $_SESSION['itemname']="New Template Variable";
  55. }
  56. // get available RichText Editors
  57. $RTEditors = "";
  58. $evtOut = $modx->invokeEvent("OnRichTextEditorRegister",array('forfrontend' => 1));
  59. if(is_array($evtOut)) $RTEditors = implode(",",$evtOut);
  60. ?>
  61. <script language="JavaScript">
  62. function duplicaterecord(){
  63. if(confirm("<?php echo $_lang['confirm_duplicate_record'] ?>")==true) {
  64. documentDirty=false;
  65. document.location.href="index.php?id=<?php echo $_REQUEST['id']; ?>&a=304";
  66. }
  67. }
  68. function deletedocument() {
  69. if(confirm("<?php echo $_lang['confirm_delete_tmplvars']; ?>")==true) {
  70. documentDirty=false;
  71. document.location.href="index.php?id=" + document.mutate.id.value + "&a=303";
  72. }
  73. }
  74. // Widget Parameters
  75. var widgetParams = {}; // name = description;datatype;default or list values - datatype: int, string, list : separated by comma (,)
  76. widgetParams['marquee'] = '&width=Width;string;100% &height=Height;string;100px &speed=Speed (1-20);float;3; &modifier=Modifier;float;90; &pause=Mouse Pause;list;Yes,No;Yes &tfx=Transition;list;Vertical,Horizontal &class=Class;string; &style=Style;string;';
  77. widgetParams['ticker'] = '&width=Width;string;100% &height=Height;string;50px &delay=Delay (ms);int;3000 &delim=Message Delimiter;string;|| &class=Class;string; &style=Style;string;';
  78. widgetParams['date'] = '&format=Date Format;string;%A %d, %B %Y &default=If no value, use current date;list;Yes,No;No';
  79. widgetParams['string'] = '&format=String Format;list;Upper Case,Lower Case,Sentence Case,Capitalize';
  80. widgetParams['delim'] = '&format=Delimiter;string;,';
  81. widgetParams['hyperlink'] = '&text=Display Text;string; &title=Title;string; &class=Class;string &style=Style;string &target=Target;string &attrib=Attributes;string';
  82. widgetParams['htmltag'] = '&tagname=Tag Name;string;div &tagid=Tag ID;string &class=Class;string &style=Style;string &attrib=Attributes;string';
  83. widgetParams['viewport'] = '&vpid=ID/Name;string &width=Width;string;100 &height=Height;string;100 &borsize=Border Size;int;1 &sbar=Scrollbars;list;,Auto,Yes,No &asize=Auto Size;list;,Yes,No &aheight=Auto Height;list;,Yes,No &awidth=Auto Width;list;,Yes,No &stretch=Stretch To Fit;list;,Yes,No &class=Class;string &style=Style;string &attrib=Attributes;string';
  84. widgetParams['floater'] = '&x=Offset X;int &y=Offset Y;int &width=Width;string;200px &height=Height;string;30px &pos=Position;list;top-right,top-left,bottom-left,bottom-right &gs=Glide Speed;int;6 &class=Class;string &style=Style;string ';
  85. widgetParams['datagrid'] = '&cols=Column Names;string &flds=Field Names;string &cwidth=Column Widths;string &calign=Column Alignments;string &ccolor=Column Colors;string &ctype=Column Types;string &cpad=Cell Padding;int;1 &cspace=Cell Spacing;int;1 &rowid=Row ID Field;string &rgf=Row Group Field;string &rgstyle = Row Group Style;string &rgclass = Row Group Class;string &rowsel=Row Select;string &rhigh=Row Hightlight;string; &psize=Page Size;int;100 &ploc=Pager Location;list;top-right,top-left,bottom-left,bottom-right,both-right,both-left; &pclass=Pager Class;string &pstyle=Pager Style;string &head=Header Text;string &foot=Footer Text;string &tblc=Grid Class;string &tbls=Grid Style;string &itmc=Item Class;string &itms=Item Style;string &aitmc=Alt Item Class;string &aitms=Alt Item Style;string &chdrc=Column Header Class;string &chdrs=Column Header Style;string;&egmsg=Empty message;string;No records found;';
  86. widgetParams['richtext'] = '&w=Width;string;100% &h=Height;string;300px &edt=Editor;list;<?php echo $RTEditors; ?>';
  87. widgetParams['image'] = '&alttext=Alternate Text;string &hspace=H Space;int &vspace=V Space;int &borsize=Border Size;int &align=Align;list;none,baseline,top,middle,bottom,texttop,absmiddle,absbottom,left,right &name=Name;string &class=Class;string &id=ID;string &style=Style;string &attrib=Attributes;string';
  88. widgetParams['custom_widget'] = '&output=Output;textarea';
  89. // Current Params
  90. var currentParams = {};
  91. var lastdf, lastmod = {};
  92. function showParameters(ctrl) {
  93. var c,p,df,cp;
  94. var ar,desc,value,key,dt;
  95. currentParams = {}; // reset;
  96. if (ctrl) {
  97. f = ctrl.form;
  98. } else {
  99. f= document.forms['mutate'];
  100. if(!f) return;
  101. ctrl = f.display;
  102. }
  103. cp = f.params.value.split("&"); // load current setting once
  104. // get display format
  105. df = lastdf = ctrl.options[ctrl.selectedIndex].value;
  106. // load last modified param values
  107. if (lastmod[df]) cp = lastmod[df].split("&");
  108. for(p = 0; p < cp.length; p++) {
  109. cp[p]=(cp[p]+'').replace(/^\s|\s$/,""); // trim
  110. ar = cp[p].split("=");
  111. currentParams[ar[0]]=ar[1];
  112. }
  113. // setup parameters
  114. tr = (document.getElementById) ? document.getElementById('displayparamrow'):document.all['displayparamrow'];
  115. dp = (widgetParams[df]) ? widgetParams[df].split("&"):"";
  116. if(!dp) tr.style.display='none';
  117. else {
  118. t='<table width="300" style="margin-bottom:3px;margin-left:14px;background-color:#EEEEEE" cellpadding="2" cellspacing="1"><thead><tr><td width="50%"><?php echo $_lang['parameter']; ?></td><td width="50%"><?php echo $_lang['value']; ?></td></tr></thead>';
  119. for(p = 0; p < dp.length; p++) {
  120. dp[p]=(dp[p]+'').replace(/^\s|\s$/,""); // trim
  121. ar = dp[p].split("=");
  122. key = ar[0] // param
  123. ar = (ar[1]+'').split(";");
  124. desc = ar[0]; // description
  125. dt = ar[1]; // data type
  126. value = decode((currentParams[key]) ? currentParams[key]:(dt=='list') ? ar[3] : (ar[2])? ar[2]:'');
  127. if (value!=currentParams[key]) currentParams[key] = value;
  128. value = (value+'').replace(/^\s|\s$/,""); // trim
  129. value = value.replace(/\"/g,"&quot;"); // replace double quotes with &quot;
  130. if (dt) {
  131. switch(dt) {
  132. case 'int':
  133. case 'float':
  134. c = '<input type="text" name="prop_'+key+'" value="'+value+'" size="30" onchange="setParameter(\''+key+'\',\''+dt+'\',this)" />';
  135. break;
  136. case 'list':
  137. c = '<select name="prop_'+key+'" height="1" style="width:168px" onchange="setParameter(\''+key+'\',\''+dt+'\',this)">';
  138. ls = (ar[2]+'').split(",");
  139. if(!currentParams[key]||currentParams[key]=='undefined') {
  140. currentParams[key] = ls[0]; // use first list item as default
  141. }
  142. for(i=0;i<ls.length;i++){
  143. c += '<option value="'+ls[i]+'"'+((ls[i]==value)? ' selected="selected"':'')+'>'+ls[i]+'</option>';
  144. }
  145. c += '</select>';
  146. break;
  147. case 'textarea':
  148. c = '<textarea name="prop_'+key+'" cols="25" style="width:220px;" onchange="setParameter(\''+key+'\',\''+dt+'\',this)" >'+value+'</textarea>';
  149. break;
  150. default: // string
  151. c = '<input type="text" name="prop_'+key+'" value="'+value+'" size="30" onchange="setParameter(\''+key+'\',\''+dt+'\',this)" />';
  152. break;
  153. }
  154. t +='<tr><td bgcolor="#FFFFFF" width="50%">'+desc+'</td><td bgcolor="#FFFFFF" width="50%">'+c+'</td></tr>';
  155. };
  156. }
  157. t+='</table>';
  158. td = (document.getElementById) ? document.getElementById('displayparams'):document.all['displayparams'];
  159. td.innerHTML = t;
  160. tr.style.display='';
  161. }
  162. implodeParameters();
  163. }
  164. function setParameter(key,dt,ctrl) {
  165. var v;
  166. if(!ctrl) return null;
  167. switch (dt) {
  168. case 'int':
  169. ctrl.value = parseInt(ctrl.value);
  170. if(isNaN(ctrl.value)) ctrl.value = 0;
  171. v = ctrl.value;
  172. break;
  173. case 'float':
  174. ctrl.value = parseFloat(ctrl.value);
  175. if(isNaN(ctrl.value)) ctrl.value = 0;
  176. v = ctrl.value;
  177. break;
  178. case 'list':
  179. v = ctrl.options[ctrl.selectedIndex].value;
  180. break;
  181. case 'textarea':
  182. v = ctrl.value+'';
  183. break;
  184. default:
  185. v = ctrl.value+'';
  186. break;
  187. }
  188. currentParams[key] = v;
  189. implodeParameters();
  190. }
  191. function resetParameters() {
  192. document.mutate.params.value = "";
  193. lastmod[lastdf]="";
  194. showParameters();
  195. }
  196. // implode parameters
  197. function implodeParameters(){
  198. var v, p, s='';
  199. for(p in currentParams){
  200. v = currentParams[p];
  201. if(v) s += '&'+p+'='+ encode(v);
  202. }
  203. document.forms['mutate'].params.value = s;
  204. if (lastdf) lastmod[lastdf] = s;
  205. }
  206. function encode(s){
  207. s=s+'';
  208. s = s.replace(/\=/g,'%3D'); // =
  209. s = s.replace(/\&/g,'%26'); // &
  210. return s;
  211. }
  212. function decode(s){
  213. s=s+'';
  214. s = s.replace(/\%3D/g,'='); // =
  215. s = s.replace(/\%26/g,'&'); // &
  216. return s;
  217. }
  218. </script>
  219. <form name="mutate" method="post" action="index.php?a=302">
  220. <?php
  221. // invoke OnTVFormPrerender event
  222. $evtOut = $modx->invokeEvent("OnTVFormPrerender",array("id" => $id));
  223. if(is_array($evtOut)) echo implode("",$evtOut);
  224. ?>
  225. <input type="hidden" name="id" value="<?php echo $content['id'];?>">
  226. <input type="hidden" name="mode" value="<?php echo $_GET['a'];?>">
  227. <input type="hidden" name="params" value="<?php echo htmlspecialchars($content['display_params']);?>">
  228. <h1><?php echo $_lang['tmplvars_title']; ?></h1>
  229. <div id="actions">
  230. <ul class="actionButtons">
  231. <li id="Button1">
  232. <a href="#" onclick="documentDirty=false; document.mutate.save.click();saveWait('mutate');">
  233. <img src="<?php echo $_style["icons_save"]?>" /> <?php echo $_lang['save']?>
  234. </a><span class="and"> + </span>
  235. <select id="stay" name="stay">
  236. <option id="stay1" value="1" <?php echo $_REQUEST['stay']=='1' ? ' selected=""' : ''?> ><?php echo $_lang['stay_new']?></option>
  237. <option id="stay2" value="2" <?php echo $_REQUEST['stay']=='2' ? ' selected="selected"' : ''?> ><?php echo $_lang['stay']?></option>
  238. <option id="stay3" value="" <?php echo $_REQUEST['stay']=='' ? ' selected=""' : ''?> ><?php echo $_lang['close']?></option>
  239. </select>
  240. </li>
  241. <?php
  242. if ($_GET['a'] == '301') { ?>
  243. <li id="Button2"><a href="#" onclick="duplicaterecord();"><img src="<?php echo $_style["icons_resource_duplicate"] ?>" /> <?php echo $_lang["duplicate"]; ?></a></li>
  244. <li id="Button3" class="disabled"><a href="#" onclick="deletedocument();"><img src="<?php echo $_style["icons_delete_document"]?>" /> <?php echo $_lang['delete']?></a></li>
  245. <?php } else { ?>
  246. <li id="Button3"><a href="#" onclick="deletedocument();"><img src="<?php echo $_style["icons_delete_document"]?>" /> <?php echo $_lang['delete']?></a></li>
  247. <?php } ?>
  248. <li id="Button5"><a href="#" onclick="documentDirty=false;document.location.href='index.php?a=76';"><img src="<?php echo $_style["icons_cancel"] ?>" /> <?php echo $_lang['cancel']?></a></li>
  249. </ul>
  250. </div>
  251. <div class="sectionBody">
  252. <p><?php echo $_lang['tmplvars_msg']; ?></p>
  253. <table width="100%" cellspacing="0" cellpadding="0" border="0">
  254. <tr>
  255. <td align="left"><?php echo $_lang['tmplvars_name']; ?>:</td>
  256. <td align="left"><span style="font-family:'Courier New', Courier, mono">[*</span><input name="name" type="text" maxlength="50" value="<?php echo htmlspecialchars($content['name']);?>" class="inputBox" style="width:150px;" onChange='documentDirty=true;'><span style="font-family:'Courier New', Courier, mono">*]</span> <span class="warning" id='savingMessage'>&nbsp;</span></td>
  257. </tr>
  258. <tr>
  259. <td align="left"><?php echo $_lang['tmplvars_caption']; ?>:&nbsp;&nbsp;</td>
  260. <td align="left"><span style="font-family:'Courier New', Courier, mono">&nbsp;&nbsp;</span><input name="caption" type="text" maxlength="80" value="<?php echo htmlspecialchars($content['caption']);?>" class="inputBox" style="width:300px;" onChange='documentDirty=true;'></td>
  261. </tr>
  262. <tr>
  263. <td align="left"><?php echo $_lang['tmplvars_description']; ?>:&nbsp;&nbsp;</td>
  264. <td align="left"><span style="font-family:'Courier New', Courier, mono">&nbsp;&nbsp;</span><input name="description" type="text" maxlength="255" value="<?php echo htmlspecialchars($content['description']);?>" class="inputBox" style="width:300px;" onChange='documentDirty=true;'></td>
  265. </tr>
  266. <tr>
  267. <td align="left"><?php echo $_lang['tmplvars_type']; ?>:&nbsp;&nbsp;</td>
  268. <td align="left"><span style="font-family:'Courier New', Courier, mono">&nbsp;&nbsp;</span><select name="type" size="1" class="inputBox" style="width:300px;" onChange='documentDirty=true;'>
  269. <option value="text" <?php echo ($content['type']==''||$content['type']=='text')? "selected='selected'":""; ?>>Text</option>
  270. <option value="rawtext" <?php echo ($content['type']=='rawtext')? "selected='selected'":""; ?>>Raw Text (deprecated)</option>
  271. <option value="textarea" <?php echo ($content['type']=='textarea')? "selected='selected'":""; ?>>Textarea</option>
  272. <option value="rawtextarea" <?php echo ($content['type']=='rawtextarea')? "selected='selected'":""; ?>>Raw Textarea (deprecated)</option>
  273. <option value="textareamini" <?php echo ($content['type']=='textareamini')? "selected='selected'":""; ?>>Textarea (Mini)</option>
  274. <option value="richtext" <?php echo ($content['type']=='richtext'||$content['type']=='htmlarea')? "selected='selected'":""; ?>>RichText</option>
  275. <option value="dropdown" <?php echo ($content['type']=='dropdown')? "selected='selected'":""; ?>>DropDown List Menu</option>
  276. <option value="listbox" <?php echo ($content['type']=='listbox')? "selected='selected'":""; ?>>Listbox (Single-Select)</option>
  277. <option value="listbox-multiple" <?php echo ($content['type']=='listbox-multiple')? "selected='selected'":""; ?>>Listbox (Multi-Select)</option>
  278. <option value="option" <?php echo ($content['type']=='option')? "selected='selected'":""; ?>>Radio Options</option>
  279. <option value="checkbox" <?php echo ($content['type']=='checkbox')? "selected='selected'":""; ?>>Check Box</option>
  280. <option value="image" <?php echo ($content['type']=='image')? "selected='selected'":""; ?>>Image</option>
  281. <option value="file" <?php echo ($content['type']=='file')? "selected='selected'":""; ?>>File</option>
  282. <option value="url" <?php echo ($content['type']=='url')? "selected='selected'":""; ?>>URL</option>
  283. <option value="email" <?php echo ($content['type']=='email')? "selected='selected'":""; ?>>Email</option>
  284. <option value="number" <?php echo ($content['type']=='number')? "selected='selected'":""; ?>>Number</option>
  285. <option value="date" <?php echo ($content['type']=='date')? "selected='selected'":""; ?>>Date</option>
  286. <option value="custom_tv" <?php echo ($content['type']=='custom_tv')? "selected='selected'":""; ?>>Custom Input</option>
  287. </select>
  288. </td>
  289. </tr>
  290. <tr>
  291. <td align="left" valign="top"><?php echo $_lang['tmplvars_elements']; ?>: </td>
  292. <td align="left" nowrap="nowrap"><span style="font-family:'Courier New', Courier, mono">&nbsp;&nbsp;</span><textarea name="elements" maxlength="65535" class="inputBox textarea" onchange='documentDirty=true;'><?php echo htmlspecialchars($content['elements']);?></textarea><img src="<?php echo $_style["icons_tooltip_over"]?>" onmouseover="this.src='<?php echo $_style["icons_tooltip"]?>';" onmouseout="this.src='<?php echo $_style["icons_tooltip_over"]?>';" alt="<?php echo $_lang['tmplvars_binding_msg']; ?>" onclick="alert(this.alt);" style="cursor:help" /></td>
  293. </tr>
  294. <tr>
  295. <td align="left" valign="top"><?php echo $_lang['tmplvars_default']; ?>:&nbsp;&nbsp;</td>
  296. <td align="left" nowrap="nowrap"><span style="font-family:'Courier New', Courier, mono">&nbsp;&nbsp;</span><textarea name="default_text" type="text" class="inputBox" rows="5" style="width:300px;" onChange='documentDirty=true;'><?php echo htmlspecialchars($content['default_text']);?></textarea><img src="<?php echo $_style["icons_tooltip_over"]?>" onmouseover="this.src='<?php echo $_style["icons_tooltip"]?>';" onmouseout="this.src='<?php echo $_style["icons_tooltip_over"]?>';" alt="<?php echo $_lang['tmplvars_binding_msg']; ?>" onclick="alert(this.alt);" style="cursor:help" /></td>
  297. </tr>
  298. <tr>
  299. <td align="left"><?php echo $_lang['tmplvars_widget']; ?>:&nbsp;&nbsp;</td>
  300. <td align="left"><span style="font-family:'Courier New', Courier, mono">&nbsp;&nbsp;</span>
  301. <select name="display" size="1" class="inputBox" style="width:300px;" onChange='documentDirty=true;showParameters(this);'>
  302. <option value="" <?php echo ($content['display']=='')? "selected='selected'":""; ?>>&nbsp;</option>
  303. <optgroup label="Widgets">
  304. <option value="datagrid" <?php echo ($content['display']=='datagrid')? "selected='selected'":""; ?>>Data Grid</option>
  305. <option value="floater" <?php echo ($content['display']=='floater')? "selected='selected'":""; ?>>Floater</option>
  306. <option value="marquee" <?php echo ($content['display']=='marquee')? "selected='selected'":""; ?>>Marquee</option>
  307. <option value="richtext" <?php echo ($content['display']=='richtext')? "selected='selected'":""; ?>>RichText</option>
  308. <option value="ticker" <?php echo ($content['display']=='ticker')? "selected='selected'":""; ?>>Ticker</option>
  309. <option value="viewport" <?php echo ($content['display']=='viewport')? "selected='selected'":""; ?>>View Port</option>
  310. <option value="custom_widget" <?php echo ($content['display']=='custom_widget')? "selected='selected'":""; ?>>Custom Widget</option>
  311. </optgroup>
  312. <optgroup label="Formats">
  313. <option value="htmlentities" <?php echo ($content['display']=='htmlentities')? "selected='selected'":""; ?>>HTML Entities</option>
  314. <option value="date" <?php echo ($content['display']=='date')? "selected='selected'":""; ?>>Date Formatter</option>
  315. <option value="unixtime" <?php echo ($content['display']=='unixtime')? "selected='selected'":""; ?>>Unixtime</option>
  316. <option value="delim" <?php echo ($content['display']=='delim')? "selected='selected'":""; ?>>Delimited List</option>
  317. <option value="htmltag" <?php echo ($content['display']=='htmltag')? "selected='selected'":""; ?>>HTML Generic Tag</option>
  318. <option value="hyperlink" <?php echo ($content['display']=='hyperlink')? "selected='selected'":""; ?>>Hyperlink</option>
  319. <option value="image" <?php echo ($content['display']=='image')? "selected='selected'":""; ?>>Image</option>
  320. <option value="string" <?php echo ($content['display']=='string')? "selected='selected'":""; ?>>String Formatter</option>
  321. </optgroup>
  322. </select>
  323. </td>
  324. </tr>
  325. <tr id="displayparamrow">
  326. <td valign="top" align="left"><?php echo $_lang['tmplvars_widget_prop']; ?><div style="padding-top:8px;"><a href="javascript://" onclick="resetParameters(); return false"><img src="media/style/<?php echo $manager_theme ? "$manager_theme/":""; ?>images/icons/refresh.gif" width="16" height="16" alt="<?php echo $_lang['tmplvars_reset_params']; ?>"></a></div></td>
  327. <td align="left" id="displayparams">&nbsp;</td>
  328. </tr>
  329. <tr>
  330. <td align="left"><?php echo $_lang['tmplvars_rank']; ?>:&nbsp;&nbsp;</td>
  331. <td align="left"><span style="font-family:'Courier New', Courier, mono">&nbsp;&nbsp;</span><input name="rank" type="text" maxlength="4" value="<?php echo (isset($content['rank'])) ? $content['rank'] : 0;?>" class="inputBox" style="width:300px;" onChange='documentDirty=true;'></td>
  332. </tr>
  333. <tr>
  334. <td align="left" colspan="2"><input name="locked" value="on" type="checkbox" <?php echo $content['locked']==1 ? "checked='checked'" : "" ;?> class="inputBox" /> <?php echo $_lang['lock_tmplvars']; ?> <span class="comment"><?php echo $_lang['lock_tmplvars_msg']; ?></span></td>
  335. </tr>
  336. </table>
  337. </div>
  338. <!-- Template Permission -->
  339. <div class="sectionHeader"><?php echo $_lang['tmplvar_tmpl_access']; ?></div>
  340. <div class="sectionBody">
  341. <p><?php echo $_lang['tmplvar_tmpl_access_msg']; ?></p>
  342. <table width="100%" cellspacing="0" cellpadding="0">
  343. <?php
  344. $tbl = $dbase.".`".$table_prefix."site_templates`" ;
  345. $tblsel = $dbase.".`".$table_prefix."site_tmplvar_templates`";
  346. $sql = "SELECT id,templatename,tmplvarid FROM $tbl LEFT JOIN $tblsel ON $tblsel.templateid=$tbl.id AND $tblsel.tmplvarid=$id";
  347. $rs = mysql_query($sql);
  348. ?>
  349. <tr>
  350. <td>
  351. <?php
  352. while ($row = mysql_fetch_assoc($rs)) {
  353. if($id == 0 && is_array($_POST['template'])) {
  354. $checked = in_array($row['id'], $_POST['template']);
  355. } else {
  356. $checked = $row['tmplvarid'];
  357. }
  358. echo "<input type='checkbox' name='template[]' value='".$row['id']."'".($checked? "checked='checked'":'')." />".$row['templatename']."<br />";
  359. }
  360. ?>
  361. </td>
  362. </tr>
  363. </table>
  364. </div>
  365. <!-- Access Permissions -->
  366. <?php
  367. if($use_udperms==1) {
  368. $groupsarray = array();
  369. // fetch permissions for the variable
  370. $sql = "SELECT * FROM $dbase.`".$table_prefix."site_tmplvar_access` where tmplvarid=".$id;
  371. $rs = mysql_query($sql);
  372. $limit = mysql_num_rows($rs);
  373. for ($i = 0; $i < $limit; $i++) {
  374. $currentgroup=mysql_fetch_assoc($rs);
  375. $groupsarray[$i] = $currentgroup['documentgroup'];
  376. }
  377. ?>
  378. <!-- Access Permissions -->
  379. <?php if($modx->hasPermission('access_permissions')) { ?>
  380. <div class="sectionHeader"><?php echo $_lang['access_permissions']; ?></div><div class="sectionBody">
  381. <script type="text/javascript">
  382. function makePublic(b){
  383. var notPublic=false;
  384. var f=document.forms['mutate'];
  385. var chkpub = f['chkalldocs'];
  386. var chks = f['docgroups[]'];
  387. if(!chks && chkpub) {
  388. chkpub.checked=true;
  389. return false;
  390. }
  391. else if (!b && chkpub) {
  392. if(!chks.length) notPublic=chks.checked;
  393. else for(i=0;i<chks.length;i++) if(chks[i].checked) notPublic=true;
  394. chkpub.checked=!notPublic;
  395. }
  396. else {
  397. if(!chks.length) chks.checked = (b)? false:chks.checked;
  398. else for(i=0;i<chks.length;i++) if (b) chks[i].checked=false;
  399. chkpub.checked=true;
  400. }
  401. }
  402. </script>
  403. <p><?php echo $_lang['tmplvar_access_msg']; ?></p>
  404. <?php
  405. }
  406. $chk ='';
  407. $sql = "SELECT name, id FROM $dbase.`".$table_prefix."documentgroup_names`";
  408. $rs = mysql_query($sql);
  409. $limit = mysql_num_rows($rs);
  410. if(empty($groupsarray) && is_array($_POST['docgroups']) && empty($_POST['id'])) {
  411. $groupsarray = $_POST['docgroups'];
  412. }
  413. for($i=0; $i<$limit; $i++) {
  414. $row=mysql_fetch_assoc($rs);
  415. $checked = in_array($row['id'], $groupsarray);
  416. if($modx->hasPermission('access_permissions')) {
  417. if($checked) $notPublic = true;
  418. $chks.= "<input type='checkbox' name='docgroups[]' value='".$row['id']."' ".($checked ? "checked='checked'" : '')." onclick=\"makePublic(false)\" />".$row['name']."<br />";
  419. }
  420. else {
  421. if($checked) echo "<input type='hidden' name='docgroups[]' value='".$row['id']."' />";
  422. }
  423. }
  424. if($modx->hasPermission('access_permissions')) {
  425. $chks = "<input type='checkbox' name='chkalldocs' ".(!$notPublic ? "checked='checked'" : '')." onclick=\"makePublic(true)\" /><span class='warning'>".$_lang['all_doc_groups']."</span><br />".$chks;
  426. }
  427. echo $chks;
  428. ?>
  429. </div>
  430. <?php }?>
  431. <div class="sectionHeader"><?php echo $_lang['category_heading']; ?></div><div class="sectionBody">
  432. <table width="90%" border="0" cellspacing="0" cellpadding="0">
  433. <tr>
  434. <td align="left"><?php echo $_lang['existing_category']; ?>:&nbsp;&nbsp;</td>
  435. <td align="left"><span style="font-family:'Courier New', Courier, mono">&nbsp;&nbsp;</span><select name="categoryid" style="width:300px;" onChange='documentDirty=true;'>
  436. <option>&nbsp;</option>
  437. <?php
  438. include_once "categories.inc.php";
  439. $ds = getCategories();
  440. if($ds) foreach($ds as $n=>$v){
  441. echo "<option value='".$v['id']."'".($content["category"]==$v["id"]? " selected='selected'":"").">".htmlspecialchars($v["category"])."</option>";
  442. }
  443. ?>
  444. </select>
  445. </td>
  446. </tr>
  447. <tr>
  448. <td align="left" valign="top" style="padding-top:5px;"><?php echo $_lang['new_category']; ?>:</td>
  449. <td align="left" valign="top" style="padding-top:5px;"><span style="font-family:'Courier New', Courier, mono">&nbsp;&nbsp;</span><input name="newcategory" type="text" maxlength="45" value="" class="inputBox" style="width:300px;" onChange='documentDirty=true;'></td>
  450. </tr>
  451. </table>
  452. </div>
  453. <input type="submit" name="save" style="display:none">
  454. <?php
  455. // invoke OnTVFormRender event
  456. $evtOut = $modx->invokeEvent("OnTVFormRender",array("id" => $id));
  457. if(is_array($evtOut)) echo implode("",$evtOut);
  458. ?>
  459. </form>
  460. <script type="text/javascript">setTimeout('showParameters()',10);</script>