Completed
Push — development ( a4b5b1...dcab98 )
by Nils
07:16
created

admin.settings.load.php (1 issue)

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
 * @file          admin.settings.load.php
4
 * @author        Nils Laumaillé
5
 * @version       2.1.27
6
 * @copyright     (c) 2009-2017 Nils Laumaillé
7
 * @licensing     GNU AFFERO GPL 3.0
8
 * @link          http://www.teampass.net
9
 *
10
 * This library is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
 */
14
15
if (!isset($_SESSION['CPM']) || $_SESSION['CPM'] != 1) {
16
    die('Hacking attempt...');
17
}
18
?>
19
20
<script type="text/javascript">
21
//<![CDATA[
22
/*
23
* Add a new field to a category
24
*/
25
function fieldAdd(id) {
26
    $("#post_id").val(id);
27
    $("#add_new_field").dialog("open");
28
}
29
/*
30
* Edit category's folders
31
*/
32
function catInFolders(id) {
33
    $("#post_id").val(id);
34
    $("#catInFolder_title").html($("#item_"+id).html());    // display title
35
    // pre-select folders
36
    $("#cat_folders_selection > option").prop("selected", false);
37
    var folder = $("#catFoldersList_"+id).val().split(";");
38
    for (var i=0; i<folder.length; i++) {
39
        $("#cat_folders_selection option[value="+folder[i]+"]").attr('selected', 'selected');
40
    };
41
    // open
42
    $("#category_in_folder").dialog("open");
43
}
44
45
/*
46
* Add a new category
47
*/
48
function categoryAdd() {
49
    if ($("#new_category_label").val() == "") {
50
        return false;
51
    }
52
    $("#div_loading").show();
53
    //send query
54
    $.post(
55
        "sources/categories.queries.php",
56
        {
57
            type    : "addNewCategory",
58
            title   : sanitizeString($("#new_category_label").val())
59
        },
60
        function(data) {
61
            // build new row
62
            $("#tbl_categories").append(
63
                '<tr id="t_cat_'+data[0].id+'"><td colspan="2">'+
64
                '<input type="text" id="catOrd_'+data[0].id+'" size="1" class="category_order" value="1" />&nbsp;&nbsp;'+
65
                '<span class="fa-stack tip" title="<?php echo $LANG['field_add_in_category']; ?>" onclick="fieldAdd('+
66
                data[0].id+')" style="cursor:pointer;">'+
67
                '<i class="fa fa-square fa-stack-2x"></i><i class="fa fa-plus fa-stack-1x fa-inverse"></i>'+
68
                '</span>&nbsp;'+
69
                '<input type="radio" name="sel_item" id="item_'+data[0].id+'_cat" />'+
70
                '<label for="item_'+data[0].id+'_cat" id="item_'+data[0].id+'">'+
71
                $("#new_category_label").val()+'</label>'+
72
                '</td><td>'+
73
                '<span class="fa-stack tip" title="<?php echo $LANG['category_in_folders']; ?>" onclick="catInFolders('+data[0].id+')" style="cursor:pointer;">'+
74
                '<i class="fa fa-square fa-stack-2x"></i><i class="fa fa-edit fa-stack-1x fa-inverse"></i>'+
75
                '</span>&nbsp;'+
76
                '<?php echo $LANG['category_in_folders_title']; ?>:'+
77
                '<span style="font-family:italic; margin-left:10px;" id="catFolders_'+data[0].id+'"></span>'+
78
                '<input type="hidden" id="catFoldersList_'+data[0].id+'" value="'+data[0].id+'" /></td><td></td>');
79
            // Add new cat
80
            $("#moveItemTo").append('<option value="'+data[0].id+'">'+$("#new_category_label").val()+'</option>');
81
            // clean
82
            $("#new_category_label, #new_item_title").val("");
83
            //loadFieldsList();
84
            $("#div_loading,#no_category").hide();
85
        },
86
        "json"
87
   );
88
}
89
90
/*
91
* rename an Element
92
*/
93
function renameItem() {
94
    var data = $("input[name=sel_item]:checked").attr("id").split('_');
95
    $("#post_id").val(data[1]);
96
    $("#post_type").val("renameItem");
97
    $("#category_confirm_text").html("<?php echo $LANG['confirm_rename']; ?>");
98
    $("#category_confirm").dialog("open");
99
}
100
101
/*
102
* Delete an Element
103
*/
104
function deleteItem() {
105
    var data = $("input[name=sel_item]:checked").attr("id").split('_');
106
    $("#post_id").val(data[1]);
107
    $("#post_type").val("deleteCategory");
108
    $("#category_confirm_text").html("<?php echo $LANG['confirm_deletion']; ?>");
109
    $("#category_confirm").dialog("open");
110
}
111
112
/*
113
* Move an Element
114
*/
115
function moveItem() {
116
    var data = $("input[name=sel_item]:checked").attr("id").split('_');
117
    $("#post_id").val(data[1]);
118
    $("#post_type").val("moveItem");
119
    $("#category_confirm_text").html("<?php echo $LANG['confirm_moveto']; ?>");
120
    $("#category_confirm").dialog("open");
121
}
122
123
/*
124
* Save the position of the Categories
125
*/
126
function storePosition() {
127
    $("#div_loading").show();
128
    // prepare listing to save
129
    var data = "";
130
    var id;
131
    var val;
132
    $('input[class$="category_order"]').each(function(index) {
133
        id = $(this).attr("id").split("_");
134
        if ($(this).val() == "") {
135
            val = "1";
136
        } else {
137
            val = $(this).val();
138
        }
139
        if (data == "") {
140
            data = id[1]+":"+val;
141
        } else {
142
            data += ";"+id[1]+":"+val;
143
        }
144
    });
145
146
    //send query
147
    $.post(
148
        "sources/categories.queries.php",
149
        {
150
            type    : "saveOrder",
151
            data   : data
152
        },
153
        function(data) {
154
            $("#div_loading").hide();
155
        },
156
        "json"
157
   );
158
}
159
160
/*
161
* Reload table
162
*/
163
function loadFieldsList() {
164
    $("#div_loading").show();
165
    //send query
166
    $.post(
167
        "sources/categories.queries.php",
168
        {
169
            type    : "loadFieldsList",
170
            title   : prepareExchangedData(sanitizeString($("#new_category_label").val()), "encode", "<?php echo $_SESSION['key']; ?>")
171
        },
172
        function(data) {
173
            var newList = '<table id="tbl_categories" style="">';
174
            // parse json table and disaply
175
            var json = $.parseJSON(data);
176
            $(json).each(function(i,val){
177
                if (val[0] === "1") {
178
                    newList += '<tr id="t_cat_'+val[1]+'"><td colspan="2">'+
179
                    '<input type="text" id="catOrd_'+val[1]+'" size="1" class="category_order" value="'+val[3]+'" />&nbsp;'+
180
                    '<span class="fa-stack tip" title="<?php echo $LANG['field_add_in_category']; ?>" onclick="fieldAdd('+
181
                    val[1]+')" style="cursor:pointer;">'+
182
                    '<i class="fa fa-square fa-stack-2x"></i><i class="fa fa-plus fa-stack-1x fa-inverse"></i>'+
183
                    '</span>&nbsp;'+
184
                    '<input type="radio" name="sel_item" id="item_'+val[1]+'_cat" />'+
185
                    '<label for="item_'+val[1]+'_cat" id="item_'+val[1]+'">'+val[2]+'</label>'+
186
                    '</td><td>'+
187
                    '<span class="fa-stack tip" title="<?php echo $LANG['category_in_folders']; ?>" onclick="catInFolders('+val[1]+')" style="cursor:pointer;">'+
188
                    '<i class="fa fa-square fa-stack-2x"></i><i class="fa fa-edit fa-stack-1x fa-inverse"></i>'+
189
                    '</span>&nbsp;'+
190
                    '<?php echo $LANG['category_in_folders_title']; ?>:'+
191
                    '<span style="font-family:italic; margin-left:10px;" id="catFolders_'+val[1]+'">'+val[4]+'</span>'+
192
                    '<input type="hidden" id="catFoldersList_'+val[1]+'" value="'+val[5]+'" /></td></tr>';
193
                } else {
194
                    newList += '<tr id="t_field_'+val[1]+'"><td width="20px"></td>'+
195
                    '<td><input type="text" id="catOrd_'+val[1]+'" size="1" class="category_order" value="'+val[3]+'" />&nbsp;'+
196
                    '<input type="radio" name="sel_item" id="item_'+val[1]+'_cat" />'+
197
                    '<label for="item_'+val[1]+'_cat" id="item_'+val[1]+'">'+val[2]+'</label>';
198
199
                    if (val[4] !== "") {
200
                        newList += '<span id="encryt_data_'+val[1]+'" style="margin-left:4px; cursor:pointer;">';
201
                        if (val[4] === "1") {
202
                            newList += '<i class="fa fa-key tip" title="<?php echo $LANG['encrypted_data']; ?>" onclick="changeEncrypMode('+val[1]+', 1)"></i>';
203
                        } else if (val[4] === "0") {
204
                            newList += '<span class="fa-stack" title="<?php echo $LANG['not_encrypted_data']; ?>" onclick="changeEncrypMode('+val[1]+', 0)"><i class="fa fa-key fa-stack-1x"></i><i class="fa fa-ban fa-stack-1x fa-lg" style="color:red;"></i></span>';
205
                        }
206
                        newList += '</span>'
207
                    }
208
209
                    newList += '</td><td></td></tr>';
210
                }
211
            });
212
213
            // display
214
            newList += '</table>';
215
            $("#new_item_title").val("");
216
            $("#categories_list").html(newList);
217
            $("#div_loading").hide();
218
        }
219
   );
220
}
221
222
//###########
223
//## FUNCTION : Launch the action the admin wants
224
//###########
225
function LaunchAdminActions(action, option)
226
{
227
    var option;
228
229
    $("#div_loading").show();
230
    $("#email_testing_results, #result_admin_script_backup").hide();
231
    $("#result_admin_action_db_backup").html("");
232
    if (action === "admin_action_db_backup") option = $("#result_admin_action_db_backup_key").val();
233
    else if (action === "admin_action_backup_decrypt") option = $("#bck_script_decrypt_file").val();
234
    else if (action === "admin_action_change_salt_key") {
235
        option = aes_encrypt(sanitizeString($("#new_salt_key").val()));
236
    } else if (action === "admin_email_send_backlog") {
237
        $("#email_testing_results").show().html("<?php echo addslashes($LANG['please_wait']); ?>").attr("class","ui-corner-all ui-state-focus");
238
    } else if (action === "admin_action_attachments_cryption") {
239
        option = $("input[name=attachments_cryption]:checked").val();
240
        if (option === "" || option === undefined) {
241
            $("#div_loading").hide();
242
            return false;
243
        }
244
    } else if (action === "admin_ldap_test_configuration") {
245
        option = [];
246
        var item = {};
247
248
        // adding the user
249
        item['username'] = $("#ldap_test_username").val();
250
        item['username_pwd'] = $("#ldap_test_pwd").val();
251
        item['no_username_needed'] = $("#ldap_test_no_username").is(':checked') ? "1" : "0";
252
253
        // adding ldap params
254
        $("#ldap_config_values tr").each(function(k){
255
            $(this).find("input, select").each(function(i){
256
                item[$(this).attr('id')] = $(this).val();
257
            });
258
        });
259
        option.push(item);
260
261
        if (option === "" || option.length === 0) return;
262
263
        // convert to json string
264
        option = prepareExchangedData(JSON.stringify(option) , "encode", "<?php echo $_SESSION['key']; ?>");
265
    }
266
    //Lauchn ajax query
267
    $.post(
268
        "sources/admin.queries.php",
269
        {
270
           type        : action,
271
           option    : option
272
        },
273
        function(data) {
274
            $("#div_loading").hide();
275
            if (data != null) {
276
                if (data[0].result == "db_backup") {
277
                    $("#result_admin_action_db_backup").html("<span class='fa fa-file-code-o'></span>&nbsp;<a href='"+data[0].href+"'><?php echo $LANG['pdf_download']; ?></a>").show();
278
                } else if (data[0].result == "pf_done") {
279
                    $("#result_admin_action_check_pf").html("<span class='fa fa-check mi-green'></span>").show();
280
                } else if (data[0].result == "db_restore") {
281
                    $("#restore_bck_encryption_key_dialog").dialog("close");
282
                    $("#result_admin_action_db_restore").html("<span class='fa fa-check mi-green'></span>").show();
283
                    $("#result_admin_action_db_restore_get_file").hide();
284
                    //deconnect userd
285
                    sessionStorage.clear();
286
                    window.location.href = "logout.php"
287
                } else if (data[0].result == "cache_reload") {
288
                    $("#result_admin_action_reload_cache_table").html("<span class='fa fa-check mi-green'></span>").show();
289
                } else if (data[0].result == "db_optimize") {
290
                    $("#result_admin_action_db_optimize").html("<span class='fa fa-check mi-green'></span>").show();
291
                } else if (data[0].result == "purge_old_files") {
292
                    $("#result_admin_action_purge_old_files").html("<span class='fa fa-check mi-green'></span>&nbsp;"+data[0].nb_files_deleted+"&nbsp;<? echo $LANG['admin_action_purge_old_files_result']; ?>").show();
0 ignored issues
show
Security Best Practice introduced by
It is not recommend to use PHP's short opening tag <?, better use <?php, or <?= in case of outputting.

Short opening tags are disabled in PHP’s default configuration. In such a case, all content of this file is output verbatim to the browser without being parsed, or executed.

As a precaution to avoid these problems better use the long opening tag <?php.

Loading history...
293
                } else if (data[0].result == "db_clean_items") {
294
                    $("#result_admin_action_db_clean_items").html("<span class='fa fa-check mi-green'></span>&nbsp;"+data[0].nb_items_deleted+"&nbsp;<?php echo $LANG['admin_action_db_clean_items_result']; ?>").show();
295
                } else if (data[0].result == "changed_salt_key") {
296
                    //deconnect user
297
                    $("#menu_action").val("deconnexion");
298
                    sessionStorage.clear();
299
                    window.location.href = "logout.php"
300
                } else if (data[0].result == "email_test_conf" || data[0].result == "admin_email_send_backlog") {
301
                    if (data[0].error != "") {
302
                        $("#email_testing_results").html("<?php echo addslashes($LANG['admin_email_result_nok']); ?>&nbsp;"+data[0].message).show().attr("class","ui-state-error ui-corner-all");
303
                    } else {
304
                        $("#email_testing_results").html("<?php echo addslashes(str_replace("#email#", $_SESSION['user_email'], $LANG['admin_email_result_ok'])); ?>").show().attr("class","ui-corner-all ui-state-focus");
305
                    }
306
                } else if (data[0].result == "pw_prefix_correct") {
307
                    $("result_admin_action_pw_prefix_correct").html(data[0].ret).show();
308
                } else if (data[0].result == "attachments_cryption") {
309
                    if (data[0].continu == true) {
310
                        $("#result_admin_action_attachments_cryption").html('').show();
311
                        manageEncryptionOfAttachments(data[0].list, data[0].cpt);
312
                    } else if (data[0].error == "file_not_encrypted") {
313
                        $("#result_admin_action_attachments_cryption").html("It seems the files are not encrypted. Are you sure you want to decrypt? please do a check.").show();
314
                    } else if (data[0].error == "file_not_clear") {
315
                        $("#result_admin_action_attachments_cryption").html("It seems the files are encrypted. Are you sure you want to encrypt? please do a check.").show();
316
                    }
317
                } else if (data[0].result == "rebuild_config_file") {
318
                    $("#result_admin_rebuild_config_file").html("<span class='fa fa-check mi-green'></span>").show();
319
                } else if (data[0].option === "admin_ldap_test_configuration") {
320
                    if (data[0].error !== "" && data[0].results === undefined) {
321
                        $("#ldap_test_msg").html(data[0].error).show(1).delay(2000).fadeOut(500);
322
                    } else {
323
                        $("#ldap_test_msg").html(data[0].results).show();
324
                    }
325
                // for BCK DECRYPT
326
                } else if (data[0].result === "backup_decrypt_fails") {
327
                    $("#result_admin_script_backup").html(data[0].msg).show();
328
                } else if (data[0].result === "backup_decrypt_success") {
329
                    $("#result_admin_script_backup").html("<span class='fa fa-check mi-green'></span>&nbsp;<?php echo addslashes($LANG['file_is_now_ready']); ?> - " + data[0].msg).show(1).delay(5000).fadeOut(500);
330
                }
331
                //--
332
            }
333
        },
334
        "json"
335
   );
336
}
337
338
/*
339
*
340
*/
341
function confirmChangingSk() {
342
    if (confirm("<?php echo addslashes($LANG['confirm_database_reencryption']); ?>")) {
343
        changeMainSaltKey('starting', '');
344
    }
345
}
346
347
/*
348
*
349
*/
350
function changeMainSaltKey(start, object)
351
{
352
    if (object === "files") {
353
        var nb = 5;
354
    } else {
355
        var nb = 10;    // can be changed - number of items treated in each loop
356
    }
357
358
    //console.log("Start value: "+start);
359
360
    // start change
361
    if (start === "starting") {
362
        // inform
363
        $("#changeMainSaltKey_message").html("<i class=\"fa fa-cog fa-spin fa\"></i>&nbsp;<?php echo $LANG['starting']; ?>").show();
364
365
        // launch query
366
        $.post(
367
            "sources/admin.queries.php",
368
            {
369
                type     : "admin_action_change_salt_key___start",
370
                key     : "<?php echo $_SESSION['key']; ?>"
371
            },
372
            function(data) {
373
                if (data[0].error == "" && data[0].nextAction == "encrypt_items") {
374
                    $("#changeMainSaltKey_itemsCount").append('<input type="hidden" id="changeMainSaltKey_itemsCountTotal" />');
375
                    $("#changeMainSaltKey_itemsCount, #changeMainSaltKey_itemsCountTotal").val(data[0].nbOfItems);
376
                    //console.log("Now launch encryption");
377
                    // start encrypting items with new saltkey
378
                    changeMainSaltKey(0, "items,logs,files,categories");
379
                    //changeMainSaltKey(0, "files");
380
                } else {
381
                    // error mngt
382
                    $("#changeMainSaltKey_message").html("<i class=\"fa fa-alert fa-spin fa\"></i>&nbsp;<?php echo $LANG['error_sent_back']; ?> : "+data[0].error);
383
                }
384
            },
385
            "json"
386
        );
387
388
    } else if (isFinite(start) && object !== "") {
389
        console.log("Step Encrypt - " +start+" ; "+nb+" ; "+$("#changeMainSaltKey_itemsCount").val());
390
391
        $("#changeMainSaltKey_message").html("<i class=\"fa fa-cog fa-spin fa\"></i>&nbsp;<?php echo $LANG['treating_items']; ?>...&nbsp;"+start+" > "+(parseInt(start)+parseInt(nb))+" (<?php echo $LANG['total_number_of_items']; ?> : "+$("#changeMainSaltKey_itemsCount").val()+")");
392
393
        $.post(
394
            "sources/admin.queries.php",
395
            {
396
                type         : "admin_action_change_salt_key___encrypt",
397
                object       : object,
398
                start        : start,
399
                length       : nb,
400
                nbItems      : $("#changeMainSaltKey_itemsCount").val(),
401
                key     : "<?php echo $_SESSION['key']; ?>"
402
            },
403
            function(data) {
404
                console.log("Next action: "+data[0].nextAction);
405
                if (data[0].nextAction !== "encrypting" && data[0].nextAction !== "" && data[0].nextAction !== "finishing") {
406
                    if (data[0].nbOfItems !== "") {
407
                        // it is now a new table to be re-encrypted
408
                        $("#changeMainSaltKey_itemsCount").val(data[0].nbOfItems);
409
                        $("#changeMainSaltKey_itemsCountTotal").val(parseInt(data[0].nbOfItems) + parseInt($("#changeMainSaltKey_itemsCountTotal").val()));
410
                        data[0].nextStart = 0;
411
                        object = data[0].nextAction;
412
                    }
413
                    changeMainSaltKey(data[0].nextStart, object);
414
                } else if (data[0].nextAction === "finishing") {
415
                    $("#changeMainSaltKey_message").html("<?php echo $LANG['finalizing']; ?>...");
416
                    changeMainSaltKey("finishing");
417
                } else {
418
                    // error mngt
419
                    $("#changeMainSaltKey_message").html("<i class=\"fa fa-alert fa-spin fa\"></i>&nbsp;<?php echo $LANG['error_sent_back']; ?> : "+data[0].error);
420
                }
421
            },
422
            "json"
423
        );
424
425
    } else {
426
        $.post(
427
            "sources/admin.queries.php",
428
            {
429
                type     : "admin_action_change_salt_key___end",
430
                key     : "<?php echo $_SESSION['key']; ?>"
431
            },
432
            function(data) {
433
                if (data[0].nextAction === "done") {
434
                    console.log("done");
435
                    $("#changeMainSaltKey_message").html("<i class=\"fa fa-info fa-lg\"></i>&nbsp;<?php echo $LANG['alert_message_done']." ".$LANG['number_of_items_treated']; ?> : " + $("#changeMainSaltKey_itemsCountTotal").val() + '<p><?php echo $LANG['check_data_after_reencryption']; ?><p><div style=\"margin-top:5px;\"><a href=\"#\" onclick=\"encryption_show_revert()\"><?php echo $LANG['revert']; ?></a></div>');
436
                } else {
437
                    // error mngt
438
                }
439
                $("#changeMainSaltKey_itemsCountTotal").remove();
440
            },
441
            "json"
442
        );
443
    }
444
}
445
446
function encryption_show_revert() {
447
    if (confirm('<?php echo $LANG['revert_the_database']; ?>')) {
448
        $("#changeMainSaltKey_message").append('<div style="margin-top:5px;"><i class="fa fa-cog fa-spin fa-lg"></i>&nbsp;<?php echo addslashes($LANG['please_wait']); ?>...</div>')
449
        $.post(
450
            "sources/admin.queries.php",
451
            {
452
                type    : "admin_action_change_salt_key___restore_backup",
453
                key     : "<?php echo $_SESSION['key']; ?>"
454
            },
455
            function(data) {
456
                $("#changeMainSaltKey_message").html('').hide();
457
            },
458
            "json"
459
       );
460
    }
461
}
462
463
/*
464
* FUNCTION permitting to store into DB the settings changes
465
*/
466
function updateSetting(field)
467
{
468
    if (field == "") return false;
469
470
    // store in DB
471
    var data = '{"field":"'+field+'", "value":"'+$("#"+field).val()+'"}';
472
    //console.log(data);
473
    $.post(
474
        "sources/admin.queries.php",
475
        {
476
            type    : "save_option_change",
477
            data    : prepareExchangedData(data, "encode", "<?php echo $_SESSION['key']; ?>"),
478
            key     : "<?php echo $_SESSION['key']; ?>"
479
        },
480
        function(data) {
481
            // force page reload in case of encryptClientServer
482
            if (field == "encryptClientServer") {
483
                location.reload(true);
484
                return false;
485
            }
486
            //decrypt data
487
            try {
488
                data = prepareExchangedData(data , "decode", "<?php echo $_SESSION['key']; ?>");
489
            } catch (e) {
490
                // error
491
                $("#message_box").html("An error appears. Answer from Server cannot be parsed!<br />Returned data:<br />"+data).show().fadeOut(4000);
492
493
                return;
494
            }
495
            console.log(data);
496
            if (data.error == "") {
497
                $("#"+field).after("<span class='fa fa-check fa-lg mi-green new_check'></span>");
498
                $(".new_check").fadeOut(2000);
499
                setTimeout('$(".new_check").remove()', 2100);
500
            }
501
        }
502
    );
503
}
504
505
/*
506
* show/hide ldap options
507
*/
508
function showLdapFields(ldap_type) {
509
    $(".tr-ldap").hide();
510
    $(".tr-" + ldap_type).show();
511
}
512
513
/*
514
* show/hide file Dec/Enc cryption options
515
*/
516
function startFileEncDecyption() {
517
    $("#admin_action_attachments_cryption_selection").show();
518
    //
519
}
520
521
// Init
522
$(function() {
523
    $('.toggle').toggles({
524
        drag: true, // allow dragging the toggle between positions
525
        click: true, // allow clicking on the toggle
526
        text: {
527
            on: '<?php echo $LANG['yes']; ?>', // text for the ON position
528
            off: '<?php echo $LANG['no']; ?>' // and off
529
        },
530
        on: true, // is the toggle ON on init
531
        animate: 250, // animation time (ms)
532
        easing: 'swing', // animation transition easing function
533
        width: 50, // width used if not set in css
534
        height: 20, // height if not set in css
535
        type: 'compact' // if this is set to 'select' then the select style toggle will be used
536
    });
537
    $('.toggle').on('toggle', function(e, active) {
538
        if (active) {
539
            $("#"+e.target.id+"_input").val(1);
540
            if (e.target.id == "ldap_mode") {$("#div_ldap_configuration").show();}
541
        } else {
542
            $("#"+e.target.id+"_input").val(0);
543
            if (e.target.id == "ldap_mode") {$("#div_ldap_configuration").hide();}
544
        }
545
546
        // store in DB
547
        var data = '{"field":"'+e.target.id+'", "value":"'+$("#"+e.target.id+"_input").val()+'"}';
548
        console.log(data);
549
        $.post(
550
            "sources/admin.queries.php",
551
            {
552
                type    : "save_option_change",
553
                data     : prepareExchangedData(data, "encode", "<?php echo $_SESSION['key']; ?>"),
554
                key     : "<?php echo $_SESSION['key']; ?>"
555
            },
556
            function(data) {
557
                // force page reload in case of encryptClientServer
558
                if (e.target.id == "encryptClientServer") {
559
                    location.reload(true);
560
                    return false;
561
                }
562
                //decrypt data
563
                try {
564
                    data = prepareExchangedData(data , "decode", "<?php echo $_SESSION['key']; ?>");
565
                } catch (e) {
566
                    // error
567
                    $("#message_box").html("An error appears. Answer from Server cannot be parsed!<br />Returned data:<br />"+data).show().fadeOut(4000);
568
569
                    return;
570
                }
571
                console.log(data);
572
                if (data.error == "") {
573
                    $("#"+e.target.id).after("<span class='fa fa-check fa-lg mi-green new_check' style='float:left;margin:-18px 0 0 56px;'></span>");
574
                    $(".new_check").fadeOut(2000);
575
                    setTimeout('$(".new_check").remove()', 2100);
576
                }
577
            }
578
        );
579
    });
580
581
    // spinner
582
    $("#upload_imageresize_quality").spinner({
583
        min: 0,
584
        max: 100,
585
        value: 90,
586
        spin: function(event, ui) {
587
            updateSetting($("#upload_imageresize_quality").attr('id'));
588
        }
589
    });
590
591
    //BUILD BUTTONSET
592
    $(".div_radio").buttonset();
593
594
    // Build Tabs
595
    $("#tabs").tabs({
596
        ajaxOptions: {
597
            error: function(xhr, status, index, anchor) {
598
                $(anchor.hash).html();
599
            },
600
            beforeSend: function() {
601
                $("#div_loading").show();
602
            },
603
            complete: function() {
604
                $("#div_loading").hide();
605
            }
606
        },
607
        beforeLoad: function( event, ui ) {
608
            ui.panel.html('<div id="loader_tab"><i class="fa fa-cog fa-spin"></i>&nbsp;<?php echo $LANG['loading']; ?>...</div>')
609
        },
610
        load: function( event, ui ) {
611
            $("#loader_tab").remove();
612
        }
613
    });
614
615
    $('#tabs').click(function(e){
616
        var current_index = $("#tabs").tabs("option","active");
617
        if (current_index == 9 || current_index == 10) {
618
            $("#save_button").hide();
619
        } else {
620
            $("#save_button").show();
621
        }
622
    });
623
624
    $('#tbl_categories tr').click(function (event) {
625
        $("#selected_row").val($(this).attr("id"));
626
    });
627
628
    // display text of selected item
629
    $(document).on("click","input[name=sel_item]",function(){
630
        var data = $("input[name=sel_item]:checked").attr("id").split('_');
631
        $("#new_item_title").val($("#item_"+data[1]).html());
632
    });
633
634
    // confirm dialogbox
635
    $("#category_confirm").dialog({
636
        bgiframe: true,
637
        modal: true,
638
        autoOpen: false,
639
        width: 400,
640
        height: 120,
641
        title: "<?php echo $LANG['confirm']; ?>",
642
        buttons: {
643
            "<?php echo $LANG['confirm']; ?>": function() {
644
                $("#div_loading").show();
645
                var $this = $(this);
646
                // prepare data to send
647
                var data = "";
648
                if ($("#post_type").val() == "renameItem") {
649
                    data = sanitizeString($("#new_item_title").val());
650
                } else if ($("#post_type").val() == "moveItem") {
651
                    data = $("#moveItemTo").val();
652
                }
653
                // send query
654
                $.post(
655
                    "sources/categories.queries.php",
656
                    {
657
                        type    : $("#post_type").val(),
658
                        id      : $("#post_id").val(),
659
                        data    : data
660
                    },
661
                    function(data) {
662
                        if ($("#post_type").val() == "deleteCategory") {
663
                            $("#t_field_"+$("#post_id").val()).hide();
664
                        } else if ($("#post_type").val() == "renameItem") {
665
                            $("#item_"+$("#post_id").val()).html($("#new_item_title").val());
666
                        } else if ($("#post_type").val() == "moveItem") {
667
                            // reload table
668
                            //loadFieldsList();
669
                        }
670
                        loadFieldsList();
671
                        $("#new_category_label, #new_item_title").val("");
672
                        $("#div_loading").hide();
673
                        $this.dialog("close");
674
                    },
675
                    "json"
676
               );
677
            },
678
            "<?php echo $LANG['cancel_button']; ?>": function() {
679
                $("#div_loading").hide();
680
                $(this).dialog("close");
681
            }
682
        }
683
    });
684
685
    $("#add_new_field").dialog({
686
        bgiframe: true,
687
        modal: true,
688
        autoOpen: false,
689
        width: 500,
690
        height: 150,
691
        title: "<?php echo $LANG['category_in_folders']; ?>",
692
        buttons: {
693
            "<?php echo $LANG['confirm']; ?>": function() {
694
                if ($("#new_field_title").val() != "" && $("#post_id").val() != "") {
695
                    $("#div_loading").show();
696
                    var $this = $(this);
697
                    //send query
698
                    $.post(
699
                        "sources/categories.queries.php",
700
                        {
701
                            type    : "addNewField",
702
                            title   : sanitizeString($("#new_field_title").val()),
703
                            id      : $("#post_id").val()
704
                        },
705
                        function(data) {
706
                            $("#new_field_title").val("");
707
                            // reload table
708
                            loadFieldsList();
709
                            $this.dialog("close");
710
                        },
711
                        "json"
712
                    );
713
                }
714
            },
715
            "<?php echo $LANG['cancel_button']; ?>": function() {
716
                $("#div_loading").hide();
717
                $(this).dialog("close");
718
            }
719
        }
720
    });
721
722
    $("#cat_folders_selection").multiselect({
723
        selectedList: 7,
724
        multiple:true,
725
        checkAllText: "<?php echo $LANG['check_all_text']; ?>",
726
        uncheckAllText: "<?php echo $LANG['uncheck_all_text']; ?>"
727
    });
728
729
    $("#category_in_folder").dialog({
730
        bgiframe: true,
731
        modal: true,
732
        autoOpen: false,
733
        width: 400,
734
        height: 350,
735
        title: "<?php echo $LANG['category_in_folders']; ?>",
736
        open: function() {
737
            $("#cat_folders_selection").multiselect('refresh');
738
        },
739
        buttons: {
740
            "<?php echo $LANG['confirm']; ?>": function() {
741
                // get list of selected folders
742
                var ids = "";
743
                $("#cat_folders_selection :selected").each(function(i, selected) {
744
                    if (ids == "") ids = $(selected).val();
745
                    else ids = ids + ";" + $(selected).val();
746
                });
747
                if (ids != "") {
748
                    $("#div_loading, #catInFolder_wait").show();
749
                    var $this = $(this);
750
                    //send query
751
                    $.post(
752
                        "sources/categories.queries.php",
753
                        {
754
                            type        : "categoryInFolders",
755
                            foldersIds  : ids,
756
                            id          : $("#post_id").val()
757
                        },
758
                        function(data) {
759
                            $("#new_field_title").val("");
760
                            // display new list
761
                            $("#catFolders_"+$("#post_id").val()).html(data[0].list);
762
                            // close
763
                            $("#div_loading, #catInFolder_wait").hide();
764
                            $this.dialog("close");
765
                        },
766
                        "json"
767
                    );
768
                }
769
            },
770
            "<?php echo $LANG['cancel_button']; ?>": function() {
771
                $("#div_loading").hide();
772
                $(this).dialog("close");
773
            }
774
        }
775
    });
776
777
    $("#restore_bck_encryption_key_dialog").dialog({
778
        bgiframe: true,
779
        modal: true,
780
        autoOpen: false,
781
        width:250,
782
        height:150,
783
        title: "<?php echo $LANG['admin_action_db_restore_key']; ?>",
784
        buttons: {
785
            "<?php echo $LANG['ok']; ?>": function() {
786
                LaunchAdminActions("admin_action_db_restore", $("#restore_bck_fileObj").val()+"&"+$("#restore_bck_encryption_key").val());
787
            },
788
            "<?php echo $LANG['cancel_button']; ?>'": function() {
789
                $(this).dialog("close");
790
            }
791
        }
792
    });
793
794
    // SQL IMPORT FOR RESTORING
795
    var uploader_restoreDB = new plupload.Uploader({
796
        runtimes : "gears,html5,flash,silverlight,browserplus",
797
        browse_button : "pickfiles_restoreDB",
798
        container : "upload_container_restoreDB",
799
        max_file_size : "10mb",
800
        chunk_size : "1mb",
801
        unique_names : true,
802
        dragdrop : true,
803
        multiple_queues : false,
804
        multi_selection : false,
805
        max_file_count : 1,
806
        url : "sources/upload/upload.files.php",
807
        flash_swf_url : "includes/libraries/Plupload/plupload.flash.swf",
808
        silverlight_xap_url : "includes/libraries/Plupload/plupload.silverlight.xap",
809
        filters : [
810
            {title : "SQL files", extensions : "sql"}
811
        ],
812
        init: {
813
            FilesAdded: function(up, files) {
814
                // generate and save token
815
                $.post(
816
                    "sources/main.queries.php",
817
                    {
818
                        type : "save_token",
819
                        size : 25,
820
                        capital: true,
821
                        numeric: true,
822
                        ambiguous: true,
823
                        reason: "restore_db",
824
                        duration: 10
825
                    },
826
                    function(data) {
827
                        $("#user_token").val(data[0].token);
828
                        up.start();
829
                    },
830
                    "json"
831
                );
832
            },
833
            BeforeUpload: function (up, file) {
834
                $("#import_status_ajax_loader").show();
835
                up.settings.multipart_params = {
836
                    "PHPSESSID":"'.$_SESSION['user_id'].'",
837
                    "File":file.name,
838
                    "type_upload":"restore_db",
839
                    "user_token": $("#user_token").val()
840
                };
841
            },
842
            UploadComplete: function(up, files) {
843
                $.each(files, function(i, file) {
844
                    $("#restore_bck_fileObj").val(file.name);
845
                    $("#restore_bck_encryption_key_dialog").dialog("open");
846
                });
847
            }
848
        }
849
    });
850
    // Uploader options
851
    uploader_restoreDB.bind("UploadProgress", function(up, file) {
852
        $("#" + file.id + " b").html(file.percent + "%");
853
    });
854
    uploader_restoreDB.bind("Error", function(up, err) {
855
        $("#filelist_restoreDB").html("<div class='ui-state-error ui-corner-all'>Error: " + err.code +
856
            ", Message: " + err.message +
857
            (err.file ? ", File: " + err.file.name : "") +
858
            "</div>"
859
        );
860
        up.refresh(); // Reposition Flash/Silverlight
861
    });
862
    uploader_restoreDB.bind("+", function(up, file) {
863
        $("#" + file.id + " b").html("100%");
864
    });
865
    // Load CSV click
866
    $("#uploadfiles_restoreDB").click(function(e) {
867
        uploader_restoreDB.start();
868
        e.preventDefault();
869
    });
870
    uploader_restoreDB.init();
871
    // -end
872
873
    //Enable/disable option
874
    $("#restricted_to").bind("click", function() {
875
        if ($("#restricted_to_input").val()== 1) {
876
            $("#tr_option_restricted_to_roles").show();
877
        } else {
878
            $("#tr_option_restricted_to_roles").hide();
879
            $("#tr_option_restricted_to_roles_input").val("0");
880
        }
881
    });
882
    $("#anyone_can_modify").bind("click", function() {
883
        if ($("#anyone_can_modify_input").val()== 1) {
884
            $("#tr_option_anyone_can_modify_bydefault").show();
885
        } else {
886
            $("#tr_option_anyone_can_modify_bydefault").hide();
887
            $("#anyone_can_modify_bydefault_input").val("0");
888
        }
889
    });
890
891
    //check NEW SALT KEY
892
    $("#new_salt_key").keypress(function (e) {
893
        var key = e.charCode || e.keyCode || 0;
894
        if ($("#new_salt_key").val().length != 16) {
895
            $("#change_salt_key_image").html('<i class="fa fa-cross mi-red"></i>');
896
            $("#change_salt_key_but").hide();
897
        } else {
898
            $("#change_salt_key_image").html('<i class="fa fa-check mi-green"></i>');
899
            $("#change_salt_key_but").show();
900
        }
901
        // allow backspace, tab, delete, arrows, letters, numbers and keypad numbers ONLY
902
        return (
903
            key != 33 && key != 34 && key != 39 && key != 92 && key != 32  && key != 96 && (key < 165)
904
            && $("#new_salt_key").val().length <= 32
905
       );
906
    });
907
908
    $("button").button();
909
910
    // check if backup table exists
911
    $.post("sources/admin.queries.php",
912
        {
913
            type        : "is_backup_table_existing",
914
            key         : "<?php echo $_SESSION['key']; ?>"
915
        },
916
        function(data) {
917
            if (data === "1") {
918
                $("#changeMainSaltKey_message").show().html('<?php echo addslashes($LANG['previous_backup_exists']); ?>&nbsp;&nbsp;<b><a href="#" id="but_bck_restore"><?php echo $LANG['yes']; ?></a></b><br /><?php echo $LANG['previous_backup_exists_delete']; ?>&nbsp;&nbsp;<b><a href="#" id="but_bck_delete"><?php echo $LANG['yes']; ?></a></b>');
919
920
                // Restore the backup
921
                $("#but_bck_restore").click(function(e) {
922
                    encryption_show_revert();
923
                });
924
925
                // Delete the backup
926
                $("#but_bck_delete").click(function(e) {
927
                    if (confirm("<?php echo $LANG['wipe_backup_data']; ?>")) {
928
                        $("#changeMainSaltKey_message").append('<div style="margin-top:5px;"><i class="fa fa-cog fa-spin fa-lg"></i>&nbsp;<?php echo addslashes($LANG['please_wait']); ?>...</div>')
929
                        $.post(
930
                            "sources/admin.queries.php",
931
                            {
932
                                type    : "admin_action_change_salt_key___delete_backup",
933
                                key     : "<?php echo $_SESSION['key']; ?>"
934
                            },
935
                            function(data) {
936
                                $("#changeMainSaltKey_message").html('').hide();
937
                            },
938
                            "json"
939
                       );
940
                    }
941
                });
942
            }
943
        }
944
    );
945
946
947
});
948
949
function manageEncryptionOfAttachments(list, cpt) {
950
    $("#div_loading").show();
951
    $.post(
952
        "sources/admin.queries.php",
953
        {
954
            type    : "admin_action_attachments_cryption_continu",
955
            option  : $("input[name=attachments_cryption]:checked").val(),
956
            cpt     : cpt,
957
            list    : list
958
        },
959
        function(data) {
960
            if (data[0].continu === "1" ) {
961
                manageEncryptionOfAttachments(data[0].list, data[0].cpt);
962
            } else {
963
                $("#result_admin_action_attachments_cryption").html("<span class='fa fa-check mi-green'></span>&nbsp;"+data[0].cpt+" files changed.").show();
964
                $('#attachments_cryption_radio1, #attachments_cryption_radio2').prop('checked', false);
965
                $("#div_loading").hide();
966
            }
967
        },
968
        "json"
969
    );
970
}
971
972
function refreshInput()
973
{
974
    var ids = "";
975
    $.each($("#roles_allowed_to_print_select option:selected"), function(){
976
        if (ids == "") ids = $(this).val();
977
        else ids = ids + ";" + $(this).val();
978
    });
979
    $("#roles_allowed_to_print").val(ids);
980
    updateSetting('roles_allowed_to_print');
981
}
982
983
function changeEncrypMode(id, encrypted_data) {
984
    // send to server
985
    $("#div_loading").show();
986
    //send query
987
    $.post(
988
        "sources/categories.queries.php",
989
        {
990
            type    : "dataIsEncryptedInDB",
991
            id      : id,
992
            encrypt : encrypted_data === "1" ? "0" : "1"
993
        },
994
        function(data) {
995
            // show to user
996
            if (data[0].error === ""){
997
                if (encrypted_data === "1") {
998
                    $("#encryt_data_"+id).html('<span class="fa-stack" title="<?php echo $LANG['not_encrypted_data']; ?>" onclick="changeEncrypMode(\''+id+'\', \'0\')"><i class="fa fa-key fa-stack-1x"></i><i class="fa fa-ban fa-stack-1x fa-lg" style="color:red;"></i></span>');
999
                } else {
1000
                    $("#encryt_data_"+id).html('<i class="fa fa-key tip" title="<?php echo $LANG['encrypted_data']; ?>" onclick="changeEncrypMode(\''+id+'\', \'1\')"></i>');
1001
                }
1002
            }
1003
            $("#div_loading").hide();
1004
        },
1005
        "json"
1006
   );
1007
}
1008
//]]>
1009
</script>