Issues (3885)

Security Analysis    not enabled

This project does not seem to handle request data directly as such no vulnerable execution paths were found.

  Cross-Site Scripting
Cross-Site Scripting enables an attacker to inject code into the response of a web-request that is viewed by other users. It can for example be used to bypass access controls, or even to take over other users' accounts.
  File Exposure
File Exposure allows an attacker to gain access to local files that he should not be able to access. These files can for example include database credentials, or other configuration files.
  File Manipulation
File Manipulation enables an attacker to write custom data to files. This potentially leads to injection of arbitrary code on the server.
  Object Injection
Object Injection enables an attacker to inject an object into PHP code, and can lead to arbitrary code execution, file exposure, or file manipulation attacks.
  Code Injection
Code Injection enables an attacker to execute arbitrary code on the server.
  Response Splitting
Response Splitting can be used to send arbitrary responses.
  File Inclusion
File Inclusion enables an attacker to inject custom files into PHP's file loading mechanism, either explicitly passed to include, or for example via PHP's auto-loading mechanism.
  Command Injection
Command Injection enables an attacker to inject a shell command that is execute with the privileges of the web-server. This can be used to expose sensitive data, or gain access of your server.
  SQL Injection
SQL Injection enables an attacker to execute arbitrary SQL code on your database server gaining access to user data, or manipulating user data.
  XPath Injection
XPath Injection enables an attacker to modify the parts of XML document that are read. If that XML document is for example used for authentication, this can lead to further vulnerabilities similar to SQL Injection.
  LDAP Injection
LDAP Injection enables an attacker to inject LDAP statements potentially granting permission to run unauthorized queries, or modify content inside the LDAP tree.
  Header Injection
  Other Vulnerability
This category comprises other attack vectors such as manipulating the PHP runtime, loading custom extensions, freezing the runtime, or similar.
  Regex Injection
Regex Injection enables an attacker to execute arbitrary code in your PHP process.
  XML Injection
XML Injection enables an attacker to read files on your local filesystem including configuration files, or can be abused to freeze your web-server process.
  Variable Injection
Variable Injection enables an attacker to overwrite program variables with custom data, and can lead to further vulnerabilities.
Unfortunately, the security analysis is currently not available for your project. If you are a non-commercial open-source project, please contact support to gain access.

manager/actions/mutate_content.dynamic.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/********************/
3
$sd = isset($_REQUEST['dir']) ? '&dir=' . $_REQUEST['dir'] : '&dir=DESC';
4
$sb = isset($_REQUEST['sort']) ? '&sort=' . $_REQUEST['sort'] : '&sort=createdon';
5
$pg = isset($_REQUEST['page']) ? '&page=' . (int) $_REQUEST['page'] : '';
6
$add_path = $sd . $sb . $pg;
7
/*******************/
8
9
// check permissions
10
switch($modx->getManagerApi()->action) {
11
    case 27:
12
        if(!$modx->hasPermission('edit_document')) {
13
            $modx->webAlertAndQuit($_lang["error_no_privileges"]);
14
        }
15
        break;
16
    case 85:
17
    case 72:
18
    case 4:
19
        if(!$modx->hasPermission('new_document')) {
20
            $modx->webAlertAndQuit($_lang["error_no_privileges"]);
21
        } elseif(isset($_REQUEST['pid']) && $_REQUEST['pid'] != '0') {
22
            // check user has permissions for parent
23
            $udperms = new EvolutionCMS\Legacy\Permissions();
24
            $udperms->user = $modx->getLoginUserID();
25
            $udperms->document = empty($_REQUEST['pid']) ? 0 : $_REQUEST['pid'];
26
            $udperms->role = $_SESSION['mgrRole'];
27
            if(!$udperms->checkPermissions()) {
28
                $modx->webAlertAndQuit($_lang["access_permission_denied"]);
29
            }
30
        }
31
        break;
32
    default:
33
        $modx->webAlertAndQuit($_lang["error_no_privileges"]);
34
}
35
36
$id = isset($_REQUEST['id']) ? (int)$_REQUEST['id'] : 0;
37
38
// Get table names (alphabetical)
39
$tbl_categories = $modx->getDatabase()->getFullTableName('categories');
40
$tbl_document_group_names = $modx->getDatabase()->getFullTableName('documentgroup_names');
41
$tbl_member_groups = $modx->getDatabase()->getFullTableName('member_groups');
42
$tbl_membergroup_access = $modx->getDatabase()->getFullTableName('membergroup_access');
43
$tbl_document_groups = $modx->getDatabase()->getFullTableName('document_groups');
44
$tbl_site_content = $modx->getDatabase()->getFullTableName('site_content');
45
$tbl_site_templates = $modx->getDatabase()->getFullTableName('site_templates');
46
$tbl_site_tmplvar_access = $modx->getDatabase()->getFullTableName('site_tmplvar_access');
47
$tbl_site_tmplvar_contentvalues = $modx->getDatabase()->getFullTableName('site_tmplvar_contentvalues');
48
$tbl_site_tmplvar_templates = $modx->getDatabase()->getFullTableName('site_tmplvar_templates');
49
$tbl_site_tmplvars = $modx->getDatabase()->getFullTableName('site_tmplvars');
50
51
if($modx->getManagerApi()->action == 27) {
52
    //editing an existing document
53
    // check permissions on the document
54
    $udperms = new EvolutionCMS\Legacy\Permissions();
55
    $udperms->user = $modx->getLoginUserID();
56
    $udperms->document = $id;
57
    $udperms->role = $_SESSION['mgrRole'];
58
59
    if(!$udperms->checkPermissions()) {
60
        $modx->webAlertAndQuit($_lang["access_permission_denied"]);
61
    }
62
}
63
64
// check to see if resource isn't locked
65 View Code Duplication
if($lockedEl = $modx->elementIsLocked(7, $id)) {
66
    $modx->webAlertAndQuit(sprintf($_lang['lock_msg'], $lockedEl['username'], $_lang['resource']));
67
}
68
// end check for lock
69
70
// Lock resource for other users to edit
71
$modx->lockElement(7, $id);
72
73
// get document groups for current user
74
if($_SESSION['mgrDocgroups']) {
75
    $docgrp = implode(',', $_SESSION['mgrDocgroups']);
76
}
77
78
if(!empty ($id)) {
79
    $access = sprintf("1='%s' OR sc.privatemgr=0", $_SESSION['mgrRole']);
80
    if($docgrp) {
81
        $access .= " OR dg.document_group IN ({$docgrp})";
82
    }
83
    $rs = $modx->getDatabase()->select('sc.*', "{$tbl_site_content} AS sc LEFT JOIN {$tbl_document_groups} AS dg ON dg.document=sc.id", "sc.id='{$id}' AND ({$access})");
84
    $content = array();
85
    $content = $modx->getDatabase()->getRow($rs);
86
    $modx->documentObject = &$content;
87
    if(!$content) {
88
        $modx->webAlertAndQuit($_lang["access_permission_denied"]);
89
    }
90
    $_SESSION['itemname'] = $content['pagetitle'];
91
} else {
92
    $content = array();
93
94 View Code Duplication
    if(isset($_REQUEST['newtemplate'])) {
95
        $content['template'] = $_REQUEST['newtemplate'];
96
    } else {
97
        $content['template'] = getDefaultTemplate();
98
    }
99
100
    $_SESSION['itemname'] = $_lang["new_resource"];
101
}
102
103
// restore saved form
104
$formRestored = $modx->getManagerApi()->loadFormValues();
105
if(isset($_REQUEST['newtemplate'])) {
106
    $formRestored = true;
107
}
108
109
// retain form values if template was changed
110
// edited to convert pub_date and unpub_date
111
// sottwell 02-09-2006
112
if($formRestored == true) {
113
    $content = array_merge($content, $_POST);
114
    $content['content'] = $_POST['ta'];
115
    if(empty ($content['pub_date'])) {
116
        unset ($content['pub_date']);
117
    } else {
118
        $content['pub_date'] = $modx->toTimeStamp($content['pub_date']);
119
    }
120
    if(empty ($content['unpub_date'])) {
121
        unset ($content['unpub_date']);
122
    } else {
123
        $content['unpub_date'] = $modx->toTimeStamp($content['unpub_date']);
124
    }
125
}
126
127
// increase menu index if this is a new document
128
if(!isset ($_REQUEST['id'])) {
129
    if(!isset ($modx->config['auto_menuindex'])) {
130
        $modx->config['auto_menuindex'] = 1;
131
    }
132
    if($modx->config['auto_menuindex']) {
133
        $pid = (int)$_REQUEST['pid'];
134
        $rs = $modx->getDatabase()->select('count(*)', $tbl_site_content, "parent='{$pid}'");
135
        $content['menuindex'] = $modx->getDatabase()->getValue($rs);
136
    } else {
137
        $content['menuindex'] = 0;
138
    }
139
}
140
141
if(isset ($_POST['which_editor'])) {
142
    $modx->config['which_editor'] = $_POST['which_editor'];
143
}
144
145
// Add lock-element JS-Script
146
$lockElementId = $id;
147
$lockElementType = 7;
148
require_once(MODX_MANAGER_PATH . 'includes/active_user_locks.inc.php');
149
?>
150
    <script type="text/javascript">
151
        /* <![CDATA[ */
152
153
        // save tree folder state
154
        if(parent.tree) parent.tree.saveFolderState();
155
156
        function changestate(el) {
157
            if(parseInt(el.value) === 1) {
158
                el.value = 0;
159
            } else {
160
                el.value = 1;
161
            }
162
            documentDirty = true;
163
        }
164
165
        var actions = {
166
            save: function() {
167
                documentDirty = false;
168
                form_save = true;
169
                document.mutate.save.click();
170
            },
171
            delete: function() {
172
                if(confirm("<?= $_lang['confirm_delete_resource']?>") === true) {
173
                    document.location.href = "index.php?id=" + document.mutate.id.value + "&a=6<?= $add_path ?>";
174
                }
175
            },
176
            cancel: function() {
177
                documentDirty = false;
178
                document.location.href = 'index.php?<?=($id == 0 ? 'a=2' : 'a=3&r=1&id=' . $id . $add_path) ?>';
179
            },
180
            duplicate: function() {
181
                if(confirm("<?= $_lang['confirm_resource_duplicate']?>") === true) {
182
                    document.location.href = "index.php?id=<?= $_REQUEST['id'] ?>&a=94<?= $add_path ?>";
183
                }
184
            },
185
            view: function() {
186
                window.open('<?= ($modx->config['friendly_urls'] == '1') ? $modx->makeUrl($id) : MODX_SITE_URL . 'index.php?id=' . $id ?>', 'previeWin');
187
            }
188
        };
189
190
        var allowParentSelection = false;
191
        var allowLinkSelection = false;
192
193
        function enableLinkSelection(b) {
194
            var llock = document.getElementById('llock');
195
            if(b) {
196
                parent.tree.ca = "link";
197
                llock.className = "<?= $_style["actions_chain_broken"] ?>";
198
                allowLinkSelection = true;
199
            }
200
            else {
201
                parent.tree.ca = "open";
202
                llock.className = "<?= $_style["actions_chain"] ?>";
203
                allowLinkSelection = false;
204
            }
205
        }
206
207
        function setLink(lId) {
208
            if(!allowLinkSelection) {
209
                window.location.href = "index.php?a=3&id=" + lId + "<?= $add_path ?>";
210
            }
211
            else {
212
                documentDirty = true;
213
                document.mutate.ta.value = lId;
214
            }
215
        }
216
217
        function enableParentSelection(b) {
218
            var plock = document.getElementById('plock');
219
            if(b) {
220
                parent.tree.ca = "parent";
221
                plock.className = "<?= $_style["actions_folder_open"] ?>";
222
                allowParentSelection = true;
223
            }
224
            else {
225
                parent.tree.ca = "open";
226
                plock.className = "<?= $_style["actions_folder"] ?>";
227
                allowParentSelection = false;
228
            }
229
        }
230
231
        function setParent(pId, pName) {
232
            if(!allowParentSelection) {
233
                window.location.href = "index.php?a=3&id=" + pId + "<?= $add_path ?>";
234
            }
235
            else {
236
                if(pId === 0 || checkParentChildRelation(pId, pName)) {
237
                    documentDirty = true;
238
                    document.mutate.parent.value = pId;
239
                    var elm = document.getElementById('parentName');
240
                    if(elm) {
241
                        elm.innerHTML = (pId + " (" + pName + ")");
242
                    }
243
                }
244
            }
245
        }
246
247
        // check if the selected parent is a child of this document
248
        function checkParentChildRelation(pId, pName) {
249
            var sp;
250
            var id = document.mutate.id.value;
251
            var tdoc = parent.tree.document;
252
            var pn = (tdoc.getElementById) ? tdoc.getElementById("node" + pId) : tdoc.all["node" + pId];
253
            if(!pn) return;
254
            if(pn.id.substr(4) === id) {
255
                alert("<?= $_lang['illegal_parent_self']?>");
256
                return;
257
            }
258
            else {
259
                while(pn.getAttribute("p") > 0) {
260
                    pId = pn.getAttribute("p");
261
                    pn = (tdoc.getElementById) ? tdoc.getElementById("node" + pId) : tdoc.all["node" + pId];
262
                    if(pn.id.substr(4) === id) {
263
                        alert("<?= $_lang['illegal_parent_child']?>");
264
                        return;
265
                    }
266
                }
267
            }
268
            return true;
269
        }
270
271
        var curTemplate = -1;
272
        var curTemplateIndex = 0;
273
274
        function storeCurTemplate() {
275
            var dropTemplate = document.getElementById('template');
276
            if(dropTemplate) {
277
                for(var i = 0; i < dropTemplate.length; i++) {
278
                    if(dropTemplate[i].selected) {
279
                        curTemplate = dropTemplate[i].value;
280
                        curTemplateIndex = i;
281
                    }
282
                }
283
            }
284
        }
285
286
        var newTemplate;
287
288
        function templateWarning() {
289
            var dropTemplate = document.getElementById('template');
290
            if(dropTemplate) {
291
                for(var i = 0; i < dropTemplate.length; i++) {
292
                    if(dropTemplate[i].selected) {
293
                        newTemplate = dropTemplate[i].value;
294
                        break;
295
                    }
296
                }
297
            }
298
            if(curTemplate === newTemplate) {
299
                return;
300
            }
301
302
            if(documentDirty === true) {
303
                if(confirm('<?= $_lang['tmplvar_change_template_msg']?>')) {
304
                    documentDirty = false;
305
                    document.mutate.a.value = <?= $modx->getManagerApi()->action ?>;
306
                    document.mutate.newtemplate.value = newTemplate;
307
                    document.mutate.submit();
308
                } else {
309
                    dropTemplate[curTemplateIndex].selected = true;
310
                }
311
            }
312
            else {
313
                document.mutate.a.value = <?= $modx->getManagerApi()->action ?>;
314
                document.mutate.newtemplate.value = newTemplate;
315
                document.mutate.submit();
316
            }
317
        }
318
319
        // Added for RTE selection
320
        function changeRTE() {
321
            var whichEditor = document.getElementById('which_editor'),
322
                newEditor,
323
                i;
324
            if(whichEditor) {
325
                for(i = 0; i < whichEditor.length; i++) {
326
                    if(whichEditor[i].selected) {
327
                        newEditor = whichEditor[i].value;
328
                        break;
329
                    }
330
                }
331
            }
332
            var dropTemplate = document.getElementById('template');
333
            if(dropTemplate) {
334
                for(i = 0; i < dropTemplate.length; i++) {
335
                    if(dropTemplate[i].selected) {
336
                        newTemplate = dropTemplate[i].value;
337
                        break;
338
                    }
339
                }
340
            }
341
342
            documentDirty = false;
343
            document.mutate.a.value = <?= $modx->getManagerApi()->action ?>;
344
            document.mutate.newtemplate.value = newTemplate;
345
            document.mutate.which_editor.value = newEditor;
346
            document.mutate.submit();
347
        }
348
349
        /**
350
         * Snippet properties
351
         */
352
353
        var snippetParams = {};     // Snippet Params
354
        var currentParams = {};     // Current Params
355
        var lastsp, lastmod = {};
356
357
        function showParameters(ctrl) {
358
            var c, p, df, cp, ar, desc, value, key, dt, f;
359
360
            cp = {};
361
            currentParams = {}; // reset;
362
363
            if(ctrl && ctrl.form) {
364
                f = ctrl.form;
365
            } else {
366
                f = document.forms['mutate'];
367
                ctrl = f.snippetlist;
368
            }
369
370
            // get display format
371
            df = "";//lastsp = ctrl.options[ctrl.selectedIndex].value;
372
373
            // load last modified param values
374
            if(lastmod[df]) cp = lastmod[df].split("&");
375
            for(p = 0; p < cp.length; p++) {
376
                cp[p] = (cp[p] + '').replace(/^\s|\s$/, ""); // trim
377
                ar = cp[p].split("=");
378
                currentParams[ar[0]] = ar[1];
379
            }
380
381
            // setup parameters
382
            var t, dp = (snippetParams[df]) ? snippetParams[df].split("&") : [""];
383
            if(dp) {
384
                t = '<table width="100%" class="displayparams"><thead><tr><td width="50%"><?= $_lang['parameter']?><\/td><td width="50%"><?= $_lang['value']?><\/td><\/tr><\/thead>';
385
                for(p = 0; p < dp.length; p++) {
386
                    dp[p] = (dp[p] + '').replace(/^\s|\s$/, ""); // trim
387
                    ar = dp[p].split("=");
388
                    key = ar[0];     // param
389
                    ar = (ar[1] + '').split(";");
390
                    desc = ar[0];   // description
391
                    dt = ar[1];     // data type
392
                    value = decode((currentParams[key]) ? currentParams[key] : (dt == 'list') ? ar[3] : (ar[2]) ? ar[2] : '');
393
                    if(value !== currentParams[key]) currentParams[key] = value;
394
                    value = (value + '').replace(/^\s|\s$/, ""); // trim
395
                    if(dt) {
396
                        switch(dt) {
397
                            case 'int':
398
                                c = '<input type="text" name="prop_' + key + '" value="' + value + '" size="30" onchange="setParameter(\'' + key + '\',\'' + dt + '\',this)" \/>';
399
                                break;
400
                            case 'list':
401
                                c = '<select name="prop_' + key + '" height="1" style="width:168px" onchange="setParameter(\'' + key + '\',\'' + dt + '\',this)">';
402
                                var ls = (ar[2] + '').split(",");
403
                                if(currentParams[key] === ar[2]) currentParams[key] = ls[0]; // use first list item as default
404
                                for(var i = 0; i < ls.length; i++) {
405
                                    c += '<option value="' + ls[i] + '"' + ((ls[i] === value) ? ' selected="selected"' : '') + '>' + ls[i] + '<\/option>';
406
                                }
407
                                c += '<\/select>';
408
                                break;
409
                            default:  // string
410
                                c = '<input type="text" name="prop_' + key + '" value="' + value + '" size="30" onchange="setParameter(\'' + key + '\',\'' + dt + '\',this)" \/>';
411
                                break;
412
413
                        }
414
                        t += '<tr><td bgcolor="#FFFFFF" width="50%">' + desc + '<\/td><td bgcolor="#FFFFFF" width="50%">' + c + '<\/td><\/tr>';
415
                    }
416
                }
417
                t += '<\/table>';
418
                var td = (document.getElementById) ? document.getElementById('snippetparams') : document.all['snippetparams'];
419
                td.innerHTML = t;
420
            }
421
            implodeParameters();
422
        }
423
424
        function setParameter(key, dt, ctrl) {
425
            var v;
426
            if(!ctrl) return null;
427
            switch(dt) {
428
                case 'int':
429
                    ctrl.value = parseInt(ctrl.value);
430
                    if(isNaN(ctrl.value)) ctrl.value = 0;
431
                    v = ctrl.value;
432
                    break;
433
                case 'list':
434
                    v = ctrl.options[ctrl.selectedIndex].value;
435
                    break;
436
                default:
437
                    v = ctrl.value + '';
438
                    break;
439
            }
440
            currentParams[key] = v;
441
            implodeParameters();
442
        }
443
444
        function resetParameters() {
445
            document.mutate.params.value = "";
446
            lastmod[lastsp] = "";
447
            showParameters();
448
        }
449
450
        // implode parameters
451
        function implodeParameters() {
452
            var v, p, s = '';
453
            for(p in currentParams) {
454
                v = currentParams[p];
455
                if(v) s += '&' + p + '=' + encode(v);
456
            }
457
            //document.forms['mutate'].params.value = s;
458
            if(lastsp) lastmod[lastsp] = s;
459
        }
460
461
        function encode(s) {
462
            s = s + '';
463
            s = s.replace(/\=/g, '%3D'); // =
464
            s = s.replace(/\&/g, '%26'); // &
465
            return s;
466
        }
467
468
        function decode(s) {
469
            s = s + '';
470
            s = s.replace(/\%3D/g, '='); // =
471
            s = s.replace(/\%26/g, '&'); // &
472
            return s;
473
        }
474
475
        <?php if ($content['type'] == 'reference' || $modx->getManagerApi()->action == '72') { // Web Link specific ?>
476
        var lastImageCtrl;
477
        var lastFileCtrl;
478
479
        function OpenServerBrowser(url, width, height) {
480
            var iLeft = (screen.width - width) / 2;
481
            var iTop = (screen.height - height) / 2;
482
483
            var sOptions = 'toolbar=no,status=no,resizable=yes,dependent=yes';
484
            sOptions += ',width=' + width;
485
            sOptions += ',height=' + height;
486
            sOptions += ',left=' + iLeft;
487
            sOptions += ',top=' + iTop;
488
489
            var oWindow = window.open(url, 'FCKBrowseWindow', sOptions);
490
        }
491
492
        function BrowseServer(ctrl) {
493
            lastImageCtrl = ctrl;
494
            var w = screen.width * 0.5;
495
            var h = screen.height * 0.5;
496
            OpenServerBrowser('<?= MODX_MANAGER_URL ?>media/browser/<?= $which_browser ?>/browser.php?Type=images', w, h);
497
        }
498
499
        function BrowseFileServer(ctrl) {
500
            lastFileCtrl = ctrl;
501
            var w = screen.width * 0.5;
502
            var h = screen.height * 0.5;
503
            OpenServerBrowser('<?= MODX_MANAGER_URL ?>media/browser/<?= $which_browser ?>/browser.php?Type=files', w, h);
504
        }
505
506
        function SetUrlChange(el) {
507
            if('createEvent' in document) {
508
                var evt = document.createEvent('HTMLEvents');
509
                evt.initEvent('change', false, true);
510
                el.dispatchEvent(evt);
511
            } else {
512
                el.fireEvent('onchange');
513
            }
514
        }
515
516
        function SetUrl(url, width, height, alt) {
517
            if(lastFileCtrl) {
518
                var c = document.getElementById(lastFileCtrl);
519
                if(c && c.value !== url) {
520
                    c.value = url;
521
                    SetUrlChange(c);
522
                }
523
                lastFileCtrl = '';
524
            } else if(lastImageCtrl) {
525
                var c = document.getElementById(lastImageCtrl);
526
                if(c && c.value !== url) {
527
                    c.value = url;
528
                    SetUrlChange(c);
529
                }
530
                lastImageCtrl = '';
531
            } else {
532
533
            }
534
        }
535
536
        <?php $ResourceManagerLoaded = true; } ?>
537
        /* ]]> */
538
    </script>
539
540
    <form name="mutate" id="mutate" class="content" method="post" enctype="multipart/form-data" action="index.php" onsubmit="documentDirty=false;">
541
        <?php
542
        // invoke OnDocFormPrerender event
543
        $evtOut = $modx->invokeEvent('OnDocFormPrerender', array(
544
            'id' => $id,
545
            'template' => $content['template']
546
        ));
547
548
        if(is_array($evtOut)) {
549
            echo implode('', $evtOut);
550
        }
551
552
        /*************************/
553
        $dir = isset($_REQUEST['dir']) ? $_REQUEST['dir'] : '';
554
        $sort = isset($_REQUEST['sort']) ? $_REQUEST['sort'] : 'createdon';
555
        $page = isset($_REQUEST['page']) ? (int) $_REQUEST['page'] : '';
556
        /*************************/
557
558
        ?>
559
        <input type="hidden" name="a" value="5" />
560
        <input type="hidden" name="id" value="<?= $content['id'] ?>" />
561
        <input type="hidden" name="mode" value="<?= $modx->getManagerApi()->action ?>" />
562
        <input type="hidden" name="MAX_FILE_SIZE" value="<?= (isset($modx->config['upload_maxsize']) ? $modx->config['upload_maxsize'] : 1048576) ?>" />
563
        <input type="hidden" name="refresh_preview" value="0" />
564
        <input type="hidden" name="newtemplate" value="" />
565
        <input type="hidden" name="dir" value="<?= entities($dir, $modx->getConfig('modx_charset')) ?>" />
566
        <input type="hidden" name="sort" value="<?= entities($sort, $modx->getConfig('modx_charset')) ?>" />
567
        <input type="hidden" name="page" value="<?= $page ?>" />
568
569
        <fieldset id="create_edit">
570
571
            <h1>
572
                <i class="fa fa-pencil-square-o"></i><?php if(isset($_REQUEST['id'])) {
573
                    echo entities(iconv_substr($content['pagetitle'], 0, 50, $modx->getConfig('modx_charset')), $modx->getConfig('modx_charset')) . (iconv_strlen($content['pagetitle'], $modx->getConfig('modx_charset')) > 50 ? '...' : '') . '<small>(' . (int)$_REQUEST['id'] . ')</small>';
574
                } else {
575
                    if ($modx->getManagerApi()->action == '4') {
576
                        echo $_lang['add_resource'];
577
                    } else if ($modx->getManagerApi()->action == '72') {
578
                        echo $_lang['add_weblink'];
579
                    } else {
580
                        echo $_lang['create_resource_title'];
581
                    }
582
                } ?>
583
            </h1>
584
585
            <?= ManagerTheme::getStyle('actionbuttons.dynamic.document') ?>
586
587
            <?php
588
            // breadcrumbs
589
            if($modx->config['use_breadcrumbs']) {
590
                $temp = array();
591
                $title = isset($content['pagetitle']) ? $content['pagetitle'] : $_lang['create_resource_title'];
592
593
                if(isset($_REQUEST['id']) && $content['parent'] != 0) {
594
                    $bID = (int) $_REQUEST['id'];
595
                    $temp = $modx->getParentIds($bID);
596
                } else if(isset($_REQUEST['pid'])) {
597
                    $bID = (int) $_REQUEST['pid'];
598
                    $temp = $modx->getParentIds($bID);
599
                    array_unshift($temp, $bID);
600
                }
601
602
                if($temp) {
603
                    $parents = implode(',', $temp);
604
605
                    if(!empty($parents)) {
606
                        $where = "FIND_IN_SET(id,'{$parents}') DESC";
607
                        $rs = $modx->getDatabase()->select('id, pagetitle', $tbl_site_content, "id IN ({$parents})", $where);
608
                        while($row = $modx->getDatabase()->getRow($rs)) {
609
                            $out .= '<li class="breadcrumbs__li">
610
                                <a href="index.php?a=27&id=' . $row['id'] . '" class="breadcrumbs__a">' . htmlspecialchars($row['pagetitle'], ENT_QUOTES, $modx->getConfig('modx_charset')) . '</a>
611
                                <span class="breadcrumbs__sep">&gt;</span>
612
                            </li>';
613
                        }
614
                    }
615
                }
616
617
                $out .= '<li class="breadcrumbs__li breadcrumbs__li_current">' . $title . '</li>';
618
                echo '<ul class="breadcrumbs">' . $out . '</ul>';
619
            }
620
            ?>
621
622
            <!-- start main wrapper -->
623
            <div class="sectionBody">
624
625
                <div class="tab-pane" id="documentPane">
626
                    <script type="text/javascript">
627
                        var tpSettings = new WebFXTabPane(document.getElementById("documentPane"), <?= ($modx->config['remember_last_tab'] == 1 ? 'true' : 'false') ?> );
628
                    </script>
629
630
                    <!-- General -->
631
                    <?php
632
                    $evtOut = $modx->invokeEvent('OnDocFormTemplateRender', array(
633
                        'id' => $id
634
                    ));
635
                    if(is_array($evtOut)) {
636
                        echo implode('', $evtOut);
637
                    } else {
638
                        ?>
639
                        <div class="tab-page" id="tabGeneral">
640
                            <h2 class="tab"><?=ManagerTheme::getLexicon('settings_general');?></h2>
641
                            <script type="text/javascript">tpSettings.addTabPage(document.getElementById("tabGeneral"));</script>
642
643
                            <table>
644
                                <tr>
645
                                    <td>
646
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_title');?></span>
647
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_title_help');?>"></i>
648
                                    </td>
649
                                    <td>
650
                                        <input name="pagetitle" type="text" maxlength="255" value="<?= $modx->getPhpCompat()->htmlspecialchars(stripslashes($content['pagetitle'])) ?>" class="inputBox" onchange="documentDirty=true;" spellcheck="true" />
651
                                        <script>document.getElementsByName("pagetitle")[0].focus();</script>
652
                                    </td>
653
                                </tr>
654
                                <tr>
655
                                    <td>
656
                                        <span class="warning"><?=ManagerTheme::getLexicon('long_title');?></span>
657
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_long_title_help');?>"></i>
658
                                    </td>
659
                                    <td>
660
                                        <input name="longtitle" type="text" maxlength="255" value="<?= $modx->getPhpCompat()->htmlspecialchars(stripslashes($content['longtitle'])) ?>" class="inputBox" onchange="documentDirty=true;" spellcheck="true" />
661
                                    </td>
662
                                </tr>
663
                                <tr>
664
                                    <td>
665
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_description');?></span>
666
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_description_help');?>"></i>
667
                                    </td>
668
                                    <td>
669
                                        <input name="description" type="text" maxlength="255" value="<?= $modx->getPhpCompat()->htmlspecialchars(stripslashes($content['description'])) ?>" class="inputBox" onchange="documentDirty=true;" spellcheck="true" />
670
                                    </td>
671
                                </tr>
672
                                <tr>
673
                                    <td>
674
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_alias');?></span>
675
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_alias_help');?>"></i>
676
                                    </td>
677
                                    <td>
678
                                        <input name="alias" type="text" maxlength="100" value="<?= stripslashes($content['alias']) ?>" class="inputBox" onchange="documentDirty=true;" />
679
                                    </td>
680
                                </tr>
681
                                <tr>
682
                                    <td>
683
                                        <span class="warning"><?=ManagerTheme::getLexicon('link_attributes');?></span>
684
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('link_attributes_help');?>"></i>
685
                                    </td>
686
                                    <td>
687
                                        <input name="link_attributes" type="text" maxlength="255" value="<?= $modx->getPhpCompat()->htmlspecialchars(stripslashes($content['link_attributes'])) ?>" class="inputBox" onchange="documentDirty=true;" />
688
                                    </td>
689
                                </tr>
690
691
                                <?php if($content['type'] == 'reference' || $modx->getManagerApi()->action == '72') { // Web Link specific ?>
692
693
                                    <tr>
694
                                        <td><span class="warning"><?=ManagerTheme::getLexicon('weblink');?></span>
695
                                            <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_weblink_help');?>"></i>
696
                                        </td>
697
                                        <td>
698
                                            <i id="llock" class="<?= $_style["actions_chain"] ?>" onclick="enableLinkSelection(!allowLinkSelection);"></i>
699
                                            <input name="ta" id="ta" type="text" maxlength="255" value="<?= (!empty($content['content']) ? entities(stripslashes($content['content']), $modx->getConfig('modx_charset')) : 'http://') ?>" class="inputBox" onchange="documentDirty=true;" /><input type="button" value="<?=ManagerTheme::getLexicon('insert');?>" onclick="BrowseFileServer('ta')" />
700
                                        </td>
701
                                    </tr>
702
703
                                <?php } ?>
704
705
                                <tr>
706
                                    <td valign="top">
707
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_summary');?></span>
708
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_summary_help');?>" spellcheck="true"></i>
709
                                    </td>
710
                                    <td valign="top">
711
                                        <textarea id="introtext" name="introtext" class="inputBox" rows="3" cols="" onchange="documentDirty=true;"><?= $modx->getPhpCompat()->htmlspecialchars(stripslashes($content['introtext'])) ?></textarea>
712
                                    </td>
713
                                </tr>
714
                                <tr>
715
                                    <td>
716
                                        <span class="warning"><?=ManagerTheme::getLexicon('page_data_template');?></span>
717
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('page_data_template_help');?>"></i>
718
                                    </td>
719
                                    <td>
720
                                        <select id="template" name="template" class="inputBox" onchange="templateWarning();">
721
                                            <option value="0">(blank)</option>
722
                                            <?php
723
                                            $field = "t.templatename, t.selectable, t.id, c.category";
724
                                            $from = "{$tbl_site_templates} AS t LEFT JOIN {$tbl_categories} AS c ON t.category = c.id";
725
                                            $rs = $modx->getDatabase()->select($field, $from, '', 'c.category, t.templatename ASC');
726
                                            $currentCategory = '';
727
                                            while($row = $modx->getDatabase()->getRow($rs)) {
728
                                                if($row['selectable'] != 1 && $row['id'] != $content['template']) {
729
                                                    continue;
730
                                                };
731
                                                // Skip if not selectable but show if selected!
732
                                                $thisCategory = $row['category'];
733
                                                if($thisCategory == null) {
734
                                                    $thisCategory = $_lang["no_category"];
735
                                                }
736
                                                if($thisCategory != $currentCategory) {
737
                                                    if($closeOptGroup) {
738
                                                        echo "\t\t\t\t\t</optgroup>\n";
739
                                                    }
740
                                                    echo "\t\t\t\t\t<optgroup label=\"$thisCategory\">\n";
741
                                                    $closeOptGroup = true;
742
                                                }
743
744
                                                $selectedtext = ($row['id'] == $content['template']) ? ' selected="selected"' : '';
745
746
                                                echo "\t\t\t\t\t" . '<option value="' . $row['id'] . '"' . $selectedtext . '>' . $row['templatename'] . "</option>\n";
747
                                                $currentCategory = $thisCategory;
748
                                            }
749
                                            if($thisCategory != '') {
750
                                                echo "\t\t\t\t\t</optgroup>\n";
751
                                            }
752
                                            ?>
753
                                        </select>
754
                                    </td>
755
                                </tr>
756
                                <tr>
757
                                    <td>
758
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_opt_menu_title');?></span>
759
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_opt_menu_title_help');?>"></i>
760
                                    </td>
761
                                    <td>
762
                                        <input name="menutitle" type="text" maxlength="255" value="<?= $modx->getPhpCompat()->htmlspecialchars(stripslashes($content['menutitle'])) ?>" class="inputBox" onchange="documentDirty=true;" />
763
                                    </td>
764
                                </tr>
765
                                <tr>
766
                                    <td>
767
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_opt_menu_index');?></span>
768
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_opt_menu_index_help');?>"></i>
769
                                    </td>
770
                                    <td>
771
                                        <input name="menuindex" type="text" maxlength="6" value="<?= $content['menuindex'] ?>" class="inputBox" onchange="documentDirty=true;" />
772
                                        <a href="javascript:;" class="btn btn-secondary" onclick="var elm = document.mutate.menuindex;var v=parseInt(elm.value+'')-1;elm.value=v>0? v:0;elm.focus();documentDirty=true;return false;"><i class="<?= $_style['actions_angle_left'] ?>"></i></a>
773
                                        <a href="javascript:;" class="btn btn-secondary" onclick="var elm = document.mutate.menuindex;var v=parseInt(elm.value+'')+1;elm.value=v>0? v:0;elm.focus();documentDirty=true;return false;"><i class="<?= $_style['actions_angle_right'] ?>"></i></a>
774
                                    </td>
775
                                </tr>
776
                                <tr>
777
                                    <td>
778
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_opt_show_menu');?></span>
779
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_opt_show_menu_help');?>"></i>
780
                                    </td>
781
                                    <td>
782
                                        <input name="hidemenucheck" type="checkbox" class="checkbox" <?= ($content['hidemenu'] != 1 ? 'checked="checked"' : '') ?> onclick="changestate(document.mutate.hidemenu);" /><input type="hidden" name="hidemenu" class="hidden" value="<?= ($content['hidemenu'] == 1 ? 1 : 0) ?>" />
783
                                    </td>
784
                                </tr>
785
                                <tr>
786
                                    <td valign="top">
787
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_parent');?></span>
788
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_parent_help');?>"></i>
789
                                    </td>
790
                                    <td valign="top">
791
                                        <?php
792
                                        $parentlookup = false;
793
                                        if(isset ($_REQUEST['id'])) {
794 View Code Duplication
                                            if($content['parent'] == 0) {
795
                                                $parentname = $modx->getConfig('site_name');
796
                                            } else {
797
                                                $parentlookup = $content['parent'];
798
                                            }
799
                                        } elseif(isset ($_REQUEST['pid'])) {
800
                                            if($_REQUEST['pid'] == 0) {
801
                                                $parentname = $modx->getConfig('site_name');
802
                                            } else {
803
                                                $parentlookup = $_REQUEST['pid'];
804
                                            }
805
                                        } elseif(isset($_POST['parent'])) {
806 View Code Duplication
                                            if($_POST['parent'] == 0) {
807
                                                $parentname = $modx->getConfig('site_name');
808
                                            } else {
809
                                                $parentlookup = $_POST['parent'];
810
                                            }
811
                                        } else {
812
                                            $parentname = $modx->getConfig('site_name');
813
                                            $content['parent'] = 0;
814
                                        }
815
                                        if($parentlookup !== false && is_numeric($parentlookup)) {
816
                                            $rs = $modx->getDatabase()->select('pagetitle', $tbl_site_content, "id='{$parentlookup}'");
817
                                            $parentname = $modx->getDatabase()->getValue($rs);
818
                                            if(!$parentname) {
819
                                                $modx->webAlertAndQuit($_lang["error_no_parent"]);
820
                                            }
821
                                        }
822
                                        ?>
823
                                        <i id="plock" class="<?= $_style["actions_folder"] ?>" onclick="enableParentSelection(!allowParentSelection);"></i>
824
                                        <b><span id="parentName"><?= (isset($_REQUEST['pid']) ? entities($_REQUEST['pid']) : $content['parent']) ?> (<?= entities($parentname) ?>)</span></b>
825
                                        <input type="hidden" name="parent" value="<?= (isset($_REQUEST['pid']) ? entities($_REQUEST['pid']) : $content['parent']) ?>" onchange="documentDirty=true;" />
826
                                    </td>
827
                                </tr>
828
                                <tr></tr>
829
                                <?php
830
                                /*
0 ignored issues
show
Unused Code Comprehensibility introduced by
62% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
831
                                if($content['type'] == 'reference' || $modx->getManagerApi()->action == '72') {
832
                                    ?>
833
                                    <tr>
834
                                        <td colspan="2">
835
                                            <div class="split"></div>
836
                                        </td>
837
                                    </tr>
838
                                    <tr>
839
                                        <td>
840
                                            <span class="warning"><?=ManagerTheme::getLexicon('which_editor_title');?></span></td>
841
                                        <td>
842
                                            <select id="which_editor" name="which_editor" onchange="changeRTE();">
843
                                                <?php
844
                                                // invoke OnRichTextEditorRegister event
845
                                                $evtOut = $modx->invokeEvent("OnRichTextEditorRegister");
846
                                                if(is_array($evtOut)) {
847
                                                    for($i = 0; $i < count($evtOut); $i++) {
848
                                                        $editor = $evtOut[$i];
849
                                                        echo "\t\t\t", '<option value="', $editor, '"', ($modx->config['which_editor'] == $editor ? ' selected="selected"' : ''), '>', $editor, "</option>\n";
850
                                                    }
851
                                                }
852
                                                ?>
853
                                            </select>
854
                                        </td>
855
                                    </tr>
856
                                    <?php
857
                                }*/
858
                                ?>
859
860
                                <?php if($content['type'] == 'document' || $modx->getManagerApi()->action == '4') { ?>
861
                                    <tr>
862
                                        <td colspan="2">
863
                                            <hr>
864
                                            <!-- Content -->
865
                                            <div class="clearfix">
866
                                                <span id="content_header"><?=ManagerTheme::getLexicon('resource_content');?></span>
867
                                                <label class="float-xs-right"><?=ManagerTheme::getLexicon('which_editor_title');?>
868
                                                    <select id="which_editor" class="form-control form-control-sm" size="1" name="which_editor" onchange="changeRTE();">
869
                                                        <option value="none"><?=ManagerTheme::getLexicon('none');?></option>
870
                                                        <?php
871
                                                        // invoke OnRichTextEditorRegister event
872
                                                        $evtOut = $modx->invokeEvent("OnRichTextEditorRegister");
873
                                                        if(is_array($evtOut)) {
874
                                                            for($i = 0; $i < count($evtOut); $i++) {
875
                                                                $editor = $evtOut[$i];
876
                                                                echo "\t\t\t", '<option value="', $editor, '"', ($modx->config['which_editor'] == $editor ? ' selected="selected"' : ''), '>', $editor, "</option>\n";
877
                                                            }
878
                                                        }
879
                                                        ?>
880
                                                    </select>
881
                                                </label>
882
                                            </div>
883
                                            <div id="content_body">
884
                                                <?php
885
                                                if(($content['richtext'] == 1 || $modx->getManagerApi()->action == '4') && $use_editor == 1) {
886
                                                    $htmlContent = $content['content'];
887
                                                    ?>
888
                                                    <div class="section-editor clearfix">
889
                                                        <textarea id="ta" name="ta" onchange="documentDirty=true;"><?= $modx->getPhpCompat()->htmlspecialchars($htmlContent) ?></textarea>
890
                                                    </div>
891
                                                    <?php
892
                                                    // Richtext-[*content*]
893
                                                    $richtexteditorIds = array();
894
                                                    $richtexteditorOptions = array();
895
                                                    $richtexteditorIds[$modx->config['which_editor']][] = 'ta';
896
                                                    $richtexteditorOptions[$modx->config['which_editor']]['ta'] = '';
897
                                                } else {
898
                                                    echo "\t" . '<div><textarea class="phptextarea" id="ta" name="ta" rows="20" wrap="soft" onchange="documentDirty=true;">', $modx->getPhpCompat()->htmlspecialchars($content['content']), '</textarea></div>' . "\n";
899
                                                }
900
                                                ?>
901
                                            </div>
902
                                        </td>
903
                                    </tr>
904
                                    <!-- end .sectionBody -->
905
                                <?php } ?>
906
                            </table>
907
908
                            <?php
909
910
                            $templateVariables = '';
911
                            $templateVariablesOutput = '';
912
913
                            if (($content['type'] == 'document' || $modx->getManagerApi()->action == '4') || ($content['type'] == 'reference' || $modx->getManagerApi()->action == 72)) {
914
                                $template = $default_template;
915
                                $group_tvs = empty($modx->config['group_tvs']) ? 0 : (int)$modx->config['group_tvs'];
916 View Code Duplication
                                if (isset ($_REQUEST['newtemplate'])) {
917
                                    $template = $_REQUEST['newtemplate'];
918
                                } else {
919
                                    if (isset ($content['template'])) {
920
                                        $template = $content['template'];
921
                                    }
922
                                }
923
924
                                $field = "DISTINCT tv.*,  IF(tvc.value!='',tvc.value,tv.default_text) as value, tvtpl.rank as tvrank";
925
                                $vs = array(
926
                                    $tbl_site_tmplvars,
927
                                    $tbl_site_tmplvar_templates,
928
                                    $tbl_site_tmplvar_contentvalues,
929
                                    $id,
930
                                    $tbl_site_tmplvar_access
931
                                );
932
                                $from = vsprintf("%s AS tv INNER JOIN %s AS tvtpl ON tvtpl.tmplvarid = tv.id
933
                                LEFT JOIN %s AS tvc ON tvc.tmplvarid=tv.id AND tvc.contentid='%s'
934
                                LEFT JOIN %s AS tva ON tva.tmplvarid=tv.id", $vs);
935
                                $dgs = $docgrp ? " OR tva.documentgroup IN ({$docgrp})" : '';
936
                                $vs = array(
937
                                    $template,
938
                                    $_SESSION['mgrRole'],
939
                                    $dgs
940
                                );
941
                                $sort = 'tvtpl.rank,tv.rank, tv.id';
942
                                if ($group_tvs) {
943
                                    $field .= ', IFNULL(cat.id,0) AS category_id,  IFNULL(cat.category,"' . $_lang['no_category'] . '") AS category, IFNULL(cat.rank,0) AS category_rank';
944
                                    $from .= '
945
                                    LEFT JOIN ' . $tbl_categories . ' AS cat ON cat.id=tv.category';
946
                                    $sort = 'category_rank,category_id,' . $sort;
947
                                }
948
                                $where = vsprintf("tvtpl.templateid='%s' AND (1='%s' OR ISNULL(tva.documentgroup) %s)", $vs);
949
                                $rs = $modx->getDatabase()->select($field, $from, $where, $sort);
950
                                if ($modx->getDatabase()->getRecordCount($rs)) {
951
                                    $tvsArray = $modx->getDatabase()->makeArray($rs, 'name');
952
                                    $templateVariablesOutput = '';
953
                                    $templateVariablesGeneral = '';
954
955
                                    $i = $ii = 0;
956
                                    $tab = '';
957
                                    foreach ($tvsArray as $row) {
958
                                        if ($group_tvs && $row['category_id'] != 0) {
959
                                            $ii = 0;
960
                                            if ($tab !== $row['category_id']) {
961
                                                if ($group_tvs == 1 || $group_tvs == 3) {
962
                                                    if ($i === 0) {
963
                                                        $templateVariablesOutput .= '
964
                            <div class="tab-section" id="tabTV_' . $row['category_id'] . '">
965
                                <div class="tab-header">' . $row['category'] . '</div>
966
                                <div class="tab-body tmplvars">
967
                                    <table>' . "\n";
968
                                                    } else {
969
                                                        $templateVariablesOutput .= '
970
                                    </table>
971
                                </div>
972
                            </div>
973
974
                            <div class="tab-section" id="tabTV_' . $row['category_id'] . '">
975
                                <div class="tab-header">' . $row['category'] . '</div>
976
                                <div class="tab-body tmplvars">
977
                                    <table>';
978
                                                    }
979
                                                } else if ($group_tvs == 2 || $group_tvs == 4) {
980 View Code Duplication
                                                    if ($i === 0) {
981
                                                        $templateVariablesOutput .= '
982
                            <div id="tabTV_' . $row['category_id'] . '" class="tab-page tmplvars">
983
                                <h2 class="tab">' . $row['category'] . '</h2>
984
                                <script type="text/javascript">tpTemplateVariables.addTabPage(document.getElementById(\'tabTV_' . $row['category_id'] . '\'));</script>
985
986
                                <div class="tab-body tmplvars">
987
                                    <table>';
988
                                                    } else {
989
                                                        $templateVariablesOutput .= '
990
                                    </table>
991
                                </div>
992
                            </div>
993
994
                            <div id="tabTV_' . $row['category_id'] . '" class="tab-page tmplvars">
995
                                <h2 class="tab">' . $row['category'] . '</h2>
996
                                <script type="text/javascript">tpTemplateVariables.addTabPage(document.getElementById(\'tabTV_' . $row['category_id'] . '\'));</script>
997
998
                                <div class="tab-body tmplvars">
999
                                    <table>';
1000
                                                    }
1001 View Code Duplication
                                                } else if ($group_tvs == 5) {
1002
                                                    if ($i === 0) {
1003
                                                        $templateVariablesOutput .= '
1004
                                <div id="tabTV_' . $row['category_id'] . '" class="tab-page tmplvars">
1005
                                    <h2 class="tab">' . $row['category'] . '</h2>
1006
                                    <script type="text/javascript">tpSettings.addTabPage(document.getElementById(\'tabTV_' . $row['category_id'] . '\'));</script>
1007
                                    <table>';
1008
                                                    } else {
1009
                                                        $templateVariablesOutput .= '
1010
                                    </table>
1011
                                </div>
1012
1013
                                <div id="tabTV_' . $row['category_id'] . '" class="tab-page tmplvars">
1014
                                    <h2 class="tab">' . $row['category'] . '</h2>
1015
                                    <script type="text/javascript">tpSettings.addTabPage(document.getElementById(\'tabTV_' . $row['category_id'] . '\'));</script>
1016
1017
                                    <table>';
1018
                                                    }
1019
                                                }
1020
                                                $split = 0;
1021
                                            } else {
1022
                                                $split = 1;
1023
                                            }
1024
                                        }
1025
1026
                                        // Go through and display all Template Variables
1027
                                        if ($row['type'] == 'richtext' || $row['type'] == 'htmlarea') {
1028
                                            // determine TV-options
1029
                                            $tvOptions = $modx->parseProperties($row['elements']);
1030
                                            if (!empty($tvOptions)) {
1031
                                                // Allow different Editor with TV-option {"editor":"CKEditor4"} or &editor=Editor;text;CKEditor4
1032
                                                $editor = isset($tvOptions['editor']) ? $tvOptions['editor'] : $modx->config['which_editor'];
1033
                                            };
1034
                                            // Add richtext editor to the list
1035
                                            $richtexteditorIds[$editor][] = "tv" . $row['id'];
1036
                                            $richtexteditorOptions[$editor]["tv" . $row['id']] = $tvOptions;
1037
                                        }
1038
1039
                                        $templateVariablesTmp = '';
1040
1041
                                        // splitter
1042
                                        if ($group_tvs) {
1043
                                            if (($split && $i) || $ii) {
1044
                                                $templateVariablesTmp .= '
1045
                                            <tr><td colspan="2"><div class="split"></div></td></tr>' . "\n";
1046
                                            }
1047
                                        } else if ($i) {
1048
                                            $templateVariablesTmp .= '
1049
                                        <tr><td colspan="2"><div class="split"></div></td></tr>' . "\n";
1050
                                        }
1051
1052
                                        // post back value
1053
                                        if (array_key_exists('tv' . $row['id'], $_POST)) {
1054
                                            if (is_array($_POST['tv' . $row['id']])) {
1055
                                                $tvPBV = implode('||', $_POST['tv' . $row['id']]);
1056
                                            } else {
1057
                                                $tvPBV = $_POST['tv' . $row['id']];
1058
                                            }
1059
                                        } else {
1060
                                            $tvPBV = $row['value'];
1061
                                        }
1062
1063
                                        $tvDescription = (!empty($row['description'])) ? '<br /><span class="comment">' . $row['description'] . '</span>' : '';
1064
                                        $tvInherited = (substr($tvPBV, 0, 8) == '@INHERIT') ? '<br /><span class="comment inherited">(' . $_lang['tmplvars_inherited'] . ')</span>' : '';
1065
                                        $tvName = $modx->hasPermission('edit_template') ? '<br/><small class="protectedNode">[*' . $row['name'] . '*]</small>' : '';
1066
1067
                                        $templateVariablesTmp .= '
1068
                                        <tr>
1069
                                            <td><span class="warning">' . $row['caption'] . $tvName . '</span>' . $tvDescription . $tvInherited . '</td>
1070
                                            <td><div style="position:relative;' . ($row['type'] == 'date' ? '' : '') . '">' . renderFormElement($row['type'], $row['id'], $row['default_text'], $row['elements'], $tvPBV, '', $row, $tvsArray) . '</div></td>
1071
                                        </tr>';
1072
1073
                                        if ($group_tvs && $row['category_id'] == 0) {
1074
                                            $templateVariablesGeneral .= $templateVariablesTmp;
1075
                                            $ii++;
1076
                                        } else {
1077
                                            $templateVariablesOutput .= $templateVariablesTmp;
1078
                                            $tab = $row['category_id'];
1079
                                            $i++;
1080
                                        }
1081
                                    }
1082
1083
                                    if ($templateVariablesGeneral) {
1084
                                        echo '<table id="tabTV_0" class="tmplvars"><tbody>' . $templateVariablesGeneral . '</tbody></table>';
1085
                                    }
1086
1087
                                    $templateVariables .= '
1088
                        <!-- Template Variables -->' . "\n";
1089
                                    if (!$group_tvs) {
1090
                                        $templateVariables .= '
1091
                                    <div class="sectionHeader" id="tv_header">' . $_lang['settings_templvars'] . '</div>
1092
                                        <div class="sectionBody tmplvars">
1093
                                            <table>';
1094
                                    } else if ($group_tvs == 2) {
1095
                                        $templateVariables .= '
1096
                    <div class="tab-section">
1097
                        <div class="tab-header" id="tv_header">' . $_lang['settings_templvars'] . '</div>
1098
                        <div class="tab-pane" id="paneTemplateVariables">
1099
                            <script type="text/javascript">
1100
                                tpTemplateVariables = new WebFXTabPane(document.getElementById(\'paneTemplateVariables\'), ' . ($modx->config['remember_last_tab'] == 1 ? 'true' : 'false') . ');
1101
                            </script>';
1102
                                    } else if ($group_tvs == 3) {
1103
                                        $templateVariables .= '
1104
                        <div id="templateVariables" class="tab-page tmplvars">
1105
                            <h2 class="tab">' . $_lang['settings_templvars'] . '</h2>
1106
                            <script type="text/javascript">tpSettings.addTabPage(document.getElementById(\'templateVariables\'));</script>';
1107
                                    } else if ($group_tvs == 4) {
1108
                                        $templateVariables .= '
1109
                    <div id="templateVariables" class="tab-page tmplvars">
1110
                        <h2 class="tab">' . $_lang['settings_templvars'] . '</h2>
1111
                        <script type="text/javascript">tpSettings.addTabPage(document.getElementById(\'templateVariables\'));</script>
1112
                        <div class="tab-pane" id="paneTemplateVariables">
1113
                            <script type="text/javascript">
1114
                                tpTemplateVariables = new WebFXTabPane(document.getElementById(\'paneTemplateVariables\'), ' . ($modx->config['remember_last_tab'] == 1 ? 'true' : 'false') . ');
1115
                            </script>';
1116
                                    }
1117
                                    if ($templateVariablesOutput) {
1118
                                        $templateVariables .= $templateVariablesOutput;
1119
                                        $templateVariables .= '
1120
                                    </table>
1121
                                </div>' . "\n";
1122
                                        if ($group_tvs == 1) {
1123
                                            $templateVariables .= '
1124
                            </div>' . "\n";
1125
                                        } else if ($group_tvs == 2 || $group_tvs == 4) {
1126
                                            $templateVariables .= '
1127
                            </div>
1128
                        </div>
1129
                    </div>' . "\n";
1130
                                        } else if ($group_tvs == 3) {
1131
                                            $templateVariables .= '
1132
                            </div>
1133
                        </div>' . "\n";
1134
                                        }
1135
                                    }
1136
                                    $templateVariables .= '
1137
                        <!-- end Template Variables -->' . "\n";
1138
                                }
1139
                            }
1140
1141
                            // Template Variables
1142
                            if ($group_tvs < 3 && $templateVariablesOutput) {
1143
                                echo $templateVariables;
1144
                            }
1145
                            ?>
1146
1147
                        </div>
1148
                        <!-- end #tabGeneral -->
1149
1150
                        <!-- Settings -->
1151
                        <div class="tab-page" id="tabSettings">
1152
                            <h2 class="tab"><?=ManagerTheme::getLexicon('settings_page_settings');?></h2>
1153
                            <script type="text/javascript">tpSettings.addTabPage(document.getElementById("tabSettings"));</script>
1154
1155
                            <table>
1156
                                <?php $mx_can_pub = $modx->hasPermission('publish_document') ? '' : 'disabled="disabled" ' ?>
1157
                                <tr>
1158
                                    <td>
1159
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_opt_published');?></span>
1160
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_opt_published_help');?>"></i>
1161
                                    </td>
1162
                                    <td>
1163
                                        <input <?= $mx_can_pub ?>name="publishedcheck" type="checkbox" class="checkbox" <?= (isset($content['published']) && $content['published'] == 1) || (!isset($content['published']) && $publish_default == 1) ? "checked" : '' ?> onclick="changestate(document.mutate.published);" />
1164
                                        <input type="hidden" name="published" value="<?= (isset($content['published']) && $content['published'] == 1) || (!isset($content['published']) && $publish_default == 1) ? 1 : 0 ?>" />
1165
                                    </td>
1166
                                </tr>
1167
                                <tr>
1168
                                    <td>
1169
                                        <span class="warning"><?=ManagerTheme::getLexicon('page_data_publishdate');?></span>
1170
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('page_data_publishdate_help');?>"></i>
1171
                                    </td>
1172
                                    <td>
1173
                                        <input type="text" id="pub_date" <?= $mx_can_pub ?>name="pub_date" class="DatePicker" value="<?= ($content['pub_date'] == "0" || !isset($content['pub_date']) ? '' : $modx->toDateFormat($content['pub_date'])) ?>" onblur="documentDirty=true;" />
1174
                                        <a href="javascript:" onclick="document.mutate.pub_date.value=''; return true;" onmouseover="window.status='<?=ManagerTheme::getLexicon('remove_date');?>'; return true;" onmouseout="window.status=''; return true;">
1175
                                            <i class="<?= $_style["actions_calendar_delete"] ?>" title="<?=ManagerTheme::getLexicon('remove_date');?>"></i></a>
1176
                                    </td>
1177
                                </tr>
1178
                                <tr>
1179
                                    <td></td>
1180
                                    <td>
1181
                                        <em> <?= $modx->config['datetime_format'] ?> HH:MM:SS</em></td>
1182
                                </tr>
1183
                                <tr>
1184
                                    <td>
1185
                                        <span class="warning"><?=ManagerTheme::getLexicon('page_data_unpublishdate');?></span>
1186
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('page_data_unpublishdate_help');?>"></i>
1187
                                    </td>
1188
                                    <td>
1189
                                        <input type="text" id="unpub_date" <?= $mx_can_pub ?>name="unpub_date" class="DatePicker" value="<?= ($content['unpub_date'] == "0" || !isset($content['unpub_date']) ? '' : $modx->toDateFormat($content['unpub_date'])) ?>" onblur="documentDirty=true;" />
1190
                                        <a href="javascript:" onclick="document.mutate.unpub_date.value=''; return true;" onmouseover="window.status='<?=ManagerTheme::getLexicon('remove_date');?>'; return true;" onmouseout="window.status=''; return true;">
1191
                                            <i class="<?= $_style["actions_calendar_delete"] ?>" title="<?=ManagerTheme::getLexicon('remove_date');?>"></i></a>
1192
                                    </td>
1193
                                </tr>
1194
                                <tr>
1195
                                    <td></td>
1196
                                    <td>
1197
                                        <em> <?= $modx->config['datetime_format'] ?> HH:MM:SS</em>
1198
                                    </td>
1199
                                </tr>
1200
                                <tr>
1201
                                    <td colspan="2">
1202
                                        <div class='split'></div>
1203
                                    </td>
1204
                                </tr>
1205
1206
                                <?php
1207
1208
                                if($_SESSION['mgrRole'] == 1 || $modx->getManagerApi()->action != '27' || $_SESSION['mgrInternalKey'] == $content['createdby'] || $modx->hasPermission('change_resourcetype')) {
1209
                                    ?>
1210
                                    <tr>
1211
                                        <td>
1212
                                            <span class="warning"><?=ManagerTheme::getLexicon('resource_type');?></span>
1213
                                            <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_type_message');?>"></i>
1214
                                        </td>
1215
                                        <td>
1216
                                            <select name="type" class="inputBox" onchange="documentDirty=true;">
1217
                                                <option value="document"<?= (($content['type'] == "document" || $modx->getManagerApi()->action == '85' || $modx->getManagerApi()->action == '4') ? ' selected="selected"' : "") ?> ><?=ManagerTheme::getLexicon('resource_type_webpage');?></option>
1218
                                                <option value="reference"<?= (($content['type'] == "reference" || $modx->getManagerApi()->action == '72') ? ' selected="selected"' : "") ?> ><?=ManagerTheme::getLexicon('resource_type_weblink');?></option>
1219
                                            </select>
1220
                                        </td>
1221
                                    </tr>
1222
1223
                                    <tr>
1224
                                        <td>
1225
                                            <span class="warning"><?=ManagerTheme::getLexicon('page_data_contentType');?></span>
1226
                                            <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('page_data_contentType_help');?>"></i>
1227
                                        </td>
1228
                                        <td>
1229
                                            <select name="contentType" class="inputBox" onchange="documentDirty=true;">
1230
                                                <?php
1231
                                                if(!$content['contentType']) {
1232
                                                    $content['contentType'] = 'text/html';
1233
                                                }
1234
                                                $custom_contenttype = (isset ($custom_contenttype) ? $custom_contenttype : "text/html,text/plain,text/xml");
1235
                                                $ct = explode(",", $custom_contenttype);
1236
                                                for($i = 0; $i < count($ct); $i++) {
1237
                                                    echo "\t\t\t\t\t" . '<option value="' . $ct[$i] . '"' . ($content['contentType'] == $ct[$i] ? ' selected="selected"' : '') . '>' . $ct[$i] . "</option>\n";
1238
                                                }
1239
                                                ?>
1240
                                            </select>
1241
                                        </td>
1242
                                    </tr>
1243
                                    <tr>
1244
                                        <td>
1245
                                            <span class="warning"><?=ManagerTheme::getLexicon('resource_opt_contentdispo');?></span>
1246
                                            <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_opt_contentdispo_help');?>"></i>
1247
                                        </td>
1248
                                        <td>
1249
                                            <select name="content_dispo" class="inputBox" size="1" onchange="documentDirty=true;">
1250
                                                <option value="0"<?= (!$content['content_dispo'] ? ' selected="selected"' : '') ?>><?=ManagerTheme::getLexicon('inline');?></option>
1251
                                                <option value="1"<?= ($content['content_dispo'] == 1 ? ' selected="selected"' : '') ?>><?=ManagerTheme::getLexicon('attachment');?></option>
1252
                                            </select>
1253
                                        </td>
1254
                                    </tr>
1255
1256
                                    <tr>
1257
                                        <td colspan="2">
1258
                                            <div class='split'></div>
1259
                                        </td>
1260
                                    </tr>
1261
                                    <?php
1262
                                } else {
1263
                                    if($content['type'] != 'reference' && $modx->getManagerApi()->action != '72') {
1264
                                        // non-admin managers creating or editing a document resource
1265
                                        ?>
1266
                                        <input type="hidden" name="contentType" value="<?= (isset($content['contentType']) ? $content['contentType'] : "text/html") ?>" />
1267
                                        <input type="hidden" name="type" value="document" />
1268
                                        <input type="hidden" name="content_dispo" value="<?= (isset($content['content_dispo']) ? $content['content_dispo'] : '0') ?>" />
1269
                                        <?php
1270
                                    } else {
1271
                                        // non-admin managers creating or editing a reference (weblink) resource
1272
                                        ?>
1273
                                        <input type="hidden" name="type" value="reference" />
1274
                                        <input type="hidden" name="contentType" value="text/html" />
1275
                                        <?php
1276
                                    }
1277
                                }//if mgrRole
1278
                                ?>
1279
1280
                                <tr>
1281
                                    <td>
1282
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_opt_folder');?></span>
1283
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_opt_folder_help');?>"></i>
1284
                                    </td>
1285
                                    <td>
1286
                                        <input name="isfoldercheck" type="checkbox" class="checkbox" <?= (($content['isfolder'] == 1 || $modx->getManagerApi()->action == '85') ? "checked" : '') ?> onclick="changestate(document.mutate.isfolder);" />
1287
                                        <input type="hidden" name="isfolder" value="<?= (($content['isfolder'] == 1 || $modx->getManagerApi()->action == '85') ? 1 : 0) ?>" onchange="documentDirty=true;" />
1288
                                    </td>
1289
                                </tr>
1290
1291
                                <tr>
1292
                                    <td>
1293
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_opt_alvisibled');?></span>
1294
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_opt_alvisibled_help');?>"></i>
1295
                                    </td>
1296
                                    <td>
1297
                                        <input name="alias_visible_check" type="checkbox" class="checkbox" <?= ((!isset($content['alias_visible']) || $content['alias_visible'] == 1) ? "checked" : '') ?> onclick="changestate(document.mutate.alias_visible);" /><input type="hidden" name="alias_visible" value="<?= ((!isset($content['alias_visible']) || $content['alias_visible'] == 1) ? 1 : 0) ?>" />
1298
                                    </td>
1299
                                </tr>
1300
1301
                                <tr>
1302
                                    <td>
1303
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_opt_richtext');?></span>
1304
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_opt_richtext_help');?>"></i>
1305
                                    </td>
1306
                                    <td>
1307
                                        <input name="richtextcheck" type="checkbox" class="checkbox" <?= ($content['richtext'] == 0 && $modx->getManagerApi()->action == '27' ? '' : "checked") ?> onclick="changestate(document.mutate.richtext);" />
1308
                                        <input type="hidden" name="richtext" value="<?= ($content['richtext'] == 0 && $modx->getManagerApi()->action == '27' ? 0 : 1) ?>" onchange="documentDirty=true;" />
1309
                                    </td>
1310
                                </tr>
1311
                                <tr>
1312
                                    <td>
1313
                                        <span class="warning"><?=ManagerTheme::getLexicon('track_visitors_title');?></span>
1314
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_opt_trackvisit_help');?>"></i>
1315
                                    </td>
1316
                                    <td>
1317
                                        <input name="donthitcheck" type="checkbox" class="checkbox" <?= ($content['donthit'] != 1 ? 'checked="checked"' : '') ?> onclick="changestate(document.mutate.donthit);" /><input type="hidden" name="donthit" value="<?= ($content['donthit'] == 1 ? 1 : 0) ?>" onchange="documentDirty=true;" />
1318
                                    </td>
1319
                                </tr>
1320
                                <tr>
1321
                                    <td>
1322
                                        <span class="warning"><?=ManagerTheme::getLexicon('page_data_searchable');?></span>
1323
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('page_data_searchable_help');?>"></i>
1324
                                    </td>
1325
                                    <td>
1326
                                        <input name="searchablecheck" type="checkbox" class="checkbox" <?= (isset($content['searchable']) && $content['searchable'] == 1) || (!isset($content['searchable']) && $search_default == 1) ? "checked" : '' ?> onclick="changestate(document.mutate.searchable);" /><input type="hidden" name="searchable" value="<?= ((isset($content['searchable']) && $content['searchable'] == 1) || (!isset($content['searchable']) && $search_default == 1) ? 1 : 0) ?>" onchange="documentDirty=true;" />
1327
                                    </td>
1328
                                </tr>
1329
                                <tr>
1330
                                    <td>
1331
                                        <span class="warning"><?=ManagerTheme::getLexicon('page_data_cacheable');?></span>
1332
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('page_data_cacheable_help');?>"></i>
1333
                                    </td>
1334
                                    <td>
1335
                                        <input name="cacheablecheck" type="checkbox" class="checkbox" <?= ((isset($content['cacheable']) && $content['cacheable'] == 1) || (!isset($content['cacheable']) && $cache_default == 1) ? "checked" : '') ?> onclick="changestate(document.mutate.cacheable);" />
1336
                                        <input type="hidden" name="cacheable" value="<?= ((isset($content['cacheable']) && $content['cacheable'] == 1) || (!isset($content['cacheable']) && $cache_default == 1) ? 1 : 0) ?>" onchange="documentDirty=true;" />
1337
                                    </td>
1338
                                </tr>
1339
                                <tr>
1340
                                    <td>
1341
                                        <span class="warning"><?=ManagerTheme::getLexicon('resource_opt_emptycache');?></span>
1342
                                        <input type="hidden" name="syncsite" value="1" />
1343
                                        <i class="<?= $_style["icons_tooltip"] ?>" data-tooltip="<?=ManagerTheme::getLexicon('resource_opt_emptycache_help');?>"></i>
1344
                                    </td>
1345
                                    <td>
1346
                                        <input name="syncsitecheck" type="checkbox" class="checkbox" checked="checked" onclick="changestate(document.mutate.syncsite);" />
1347
                                    </td>
1348
                                </tr>
1349
                            </table>
1350
                        </div><!-- end #tabSettings -->
1351
                    <?php } ?>
1352
1353
                    <?php
1354
                    //Template Variables
1355
                    if ($modx->getConfig('group_tvs') > 2 && $templateVariablesOutput) {
1356
                        echo $templateVariables;
1357
                    }
1358
                    ?>
1359
1360
                    <?php
1361
                    /*******************************
1362
                     * Document Access Permissions */
1363
                    if($modx->getConfig('use_udperms')) {
1364
                        $groupsarray = array();
1365
                        $sql = '';
1366
1367
                        $documentId = ($modx->getManagerApi()->action == '27' ? $id : (!empty($_REQUEST['pid']) ? $_REQUEST['pid'] : $content['parent']));
1368
                        if($documentId > 0) {
1369
                            // Load up, the permissions from the parent (if new document) or existing document
1370
                            $rs = $modx->getDatabase()->select('id, document_group', $tbl_document_groups, "document='{$documentId}'");
1371
                            while($currentgroup = $modx->getDatabase()->getRow($rs)) $groupsarray[] = $currentgroup['document_group'] . ',' . $currentgroup['id'];
1372
1373
                            // Load up the current permissions and names
1374
                            $vs = array(
1375
                                $tbl_document_group_names,
1376
                                $tbl_document_groups,
1377
                                $documentId
1378
                            );
1379
                            $from = vsprintf("%s AS dgn LEFT JOIN %s AS groups_resource ON groups_resource.document_group=dgn.id AND groups_resource.document='%s'", $vs);
1380
                            $rs = $modx->db->select('dgn.*, groups_resource.id AS link_id', $from, '', 'name');
1381
                        } else {
1382
                            // Just load up the names, we're starting clean
1383
                            $rs = $modx->getDatabase()->select('*, NULL AS link_id', $tbl_document_group_names, '', 'name');
1384
                        }
1385
1386
                        // retain selected doc groups between post
1387
                        if(isset($_POST['docgroups'])) {
1388
                            $groupsarray = array_merge($groupsarray, $_POST['docgroups']);
1389
                        }
1390
1391
                        $isManager = $modx->hasPermission('access_permissions');
1392
                        $isWeb = $modx->hasPermission('web_access_permissions');
1393
1394
                        // Setup Basic attributes for each Input box
1395
                        $inputAttributes = array(
1396
                            'type' => 'checkbox',
1397
                            'class' => 'checkbox',
1398
                            'name' => 'docgroups[]',
1399
                            'onclick' => 'makePublic(false);',
1400
                        );
1401
                        $permissions = array(); // New Permissions array list (this contains the HTML)
1402
                        $permissions_yes = 0; // count permissions the current mgr user has
1403
                        $permissions_no = 0; // count permissions the current mgr user doesn't have
1404
1405
                        // Loop through the permissions list
1406
                        while($row = $modx->getDatabase()->getRow($rs)) {
1407
1408
                            // Create an inputValue pair (group ID and group link (if it exists))
1409
                            $inputValue = $row['id'] . ',' . ($row['link_id'] ? $row['link_id'] : 'new');
1410
                            $inputId = 'group-' . $row['id'];
1411
1412
                            $checked = in_array($inputValue, $groupsarray);
1413
                            if($checked) {
1414
                                $notPublic = true;
1415
                            } // Mark as private access (either web or manager)
1416
1417
                            // Skip the access permission if the user doesn't have access...
1418
                            if((!$isManager && $row['private_memgroup'] == '1') || (!$isWeb && $row['private_webgroup'] == '1')) {
1419
                                continue;
1420
                            }
1421
1422
                            // Setup attributes for this Input box
1423
                            $inputAttributes['id'] = $inputId;
1424
                            $inputAttributes['value'] = $inputValue;
1425
                            if($checked) {
1426
                                $inputAttributes['checked'] = 'checked';
1427
                            } else {
1428
                                unset($inputAttributes['checked']);
1429
                            }
1430
1431
                            // Create attribute string list
1432
                            $inputString = array();
1433
                            foreach($inputAttributes as $k => $v) $inputString[] = $k . '="' . $v . '"';
1434
1435
                            // Make the <input> HTML
1436
                            $inputHTML = '<input ' . implode(' ', $inputString) . ' />';
1437
1438
                            // does user have this permission?
1439
                            $from = "{$tbl_membergroup_access} AS mga, {$tbl_member_groups} AS mg";
1440
                            $vs = array(
1441
                                $row['id'],
1442
                                $_SESSION['mgrInternalKey']
1443
                            );
1444
                            $where = vsprintf("mga.membergroup=mg.user_group AND mga.documentgroup=%s AND mg.member=%s", $vs);
1445
                            $rsp = $modx->getDatabase()->select('COUNT(mg.id)', $from, $where);
1446
                            $count = $modx->getDatabase()->getValue($rsp);
1447
                            if($count > 0) {
1448
                                ++$permissions_yes;
1449
                            } else {
1450
                                ++$permissions_no;
1451
                            }
1452
                            $permissions[] = "\t\t" . '<li>' . $inputHTML . '<label for="' . $inputId . '">' . $row['name'] . '</label></li>';
1453
                        }
1454
                        // if mgr user doesn't have access to any of the displayable permissions, forget about them and make doc public
1455
                        if($_SESSION['mgrRole'] != 1 && ($permissions_yes == 0 && $permissions_no > 0)) {
1456
                            $permissions = array();
1457
                        }
1458
1459
                        // See if the Access Permissions section is worth displaying...
1460
                        if(!empty($permissions)) {
1461
                            // Add the "All Document Groups" item if we have rights in both contexts
1462
                            if($isManager && $isWeb) {
1463
                                array_unshift($permissions, "\t\t" . '<li><input type="checkbox" class="checkbox" name="chkalldocs" id="groupall"' . (!$notPublic ? ' checked="checked"' : '') . ' onclick="makePublic(true);" /><label for="groupall" class="warning">' . $_lang['all_doc_groups'] . '</label></li>');
1464
                            }
1465
                            // Output the permissions list...
1466
                            ?>
1467
                            <!-- Access Permissions -->
1468
                            <div class="tab-page" id="tabAccess">
1469
                                <h2 class="tab" id="tab_access_header"><?=ManagerTheme::getLexicon('access_permissions');?></h2>
1470
                                <script type="text/javascript">tpSettings.addTabPage(document.getElementById("tabAccess"));</script>
1471
                                <script type="text/javascript">
1472
                                    /* <![CDATA[ */
1473
                                    function makePublic(b) {
1474
                                        var notPublic = false;
1475
                                        var f = document.forms['mutate'];
1476
                                        var chkpub = f['chkalldocs'];
1477
                                        var chks = f['docgroups[]'];
1478
                                        if(!chks && chkpub) {
1479
                                            chkpub.checked = true;
1480
                                            return false;
1481
                                        } else if(!b && chkpub) {
1482
                                            if(!chks.length) notPublic = chks.checked;
1483
                                            else for(var i = 0; i < chks.length; i++) if(chks[i].checked) notPublic = true;
1484
                                            chkpub.checked = !notPublic;
1485
                                        } else {
1486
                                            if(!chks.length) chks.checked = (b) ? false : chks.checked;
1487
                                            else for(var i = 0; i < chks.length; i++) if(b) chks[i].checked = false;
1488
                                            chkpub.checked = true;
1489
                                        }
1490
                                    }
1491
1492
                                    /* ]]> */
1493
                                </script>
1494
                                <p><?=ManagerTheme::getLexicon('access_permissions_docs_message');?></p>
1495
                                <ul>
1496
                                    <?= implode("\n", $permissions) . "\n" ?>
1497
                                </ul>
1498
                            </div><!--div class="tab-page" id="tabAccess"-->
1499
                            <?php
1500
                        } // !empty($permissions)
0 ignored issues
show
Unused Code Comprehensibility introduced by
84% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
1501
                        elseif($_SESSION['mgrRole'] != 1 && ($permissions_yes == 0 && $permissions_no > 0) && ($_SESSION['mgrPermissions']['access_permissions'] == 1 || $_SESSION['mgrPermissions']['web_access_permissions'] == 1)) {
1502
                            ?>
1503
                            <p><?=ManagerTheme::getLexicon('access_permissions_docs_collision');?></p>
1504
                            <?php
1505
1506
                        }
1507
                    }
1508
                    /* End Document Access Permissions *
1509
                     ***********************************/
1510
                    ?>
1511
1512
                    <input type="submit" name="save" style="display:none" />
1513
                    <?php
1514
1515
                    // invoke OnDocFormRender event
1516
                    $evtOut = $modx->invokeEvent('OnDocFormRender', array(
1517
                        'id' => $id,
1518
                        'template' => $content['template']
1519
                    ));
1520
1521
                    if(is_array($evtOut)) {
1522
                        echo implode('', $evtOut);
1523
                    }
1524
                    ?>
1525
                </div><!--div class="tab-pane" id="documentPane"-->
1526
            </div><!--div class="sectionBody"-->
1527
        </fieldset>
1528
    </form>
1529
1530
    <script type="text/javascript">
1531
        storeCurTemplate();
1532
    </script>
1533
<?php
1534
if(($content['richtext'] == 1 || $modx->getManagerApi()->action == '4' || $modx->getManagerApi()->action == '72') && $use_editor == 1) {
1535
    if(is_array($richtexteditorIds)) {
1536
        foreach($richtexteditorIds as $editor => $elements) {
1537
            // invoke OnRichTextEditorInit event
1538
            $evtOut = $modx->invokeEvent('OnRichTextEditorInit', array(
1539
                'editor' => $editor,
1540
                'elements' => $elements,
1541
                'options' => $richtexteditorOptions[$editor]
1542
            ));
1543
            if(is_array($evtOut)) {
1544
                echo implode('', $evtOut);
1545
            }
1546
        }
1547
    }
1548
}
1549
?>
1550