· 4 years ago · Jul 15, 2021, 09:12 AM
1<ol class="breadcrumb">
2 <? foreach ($breadcrumbs as $breadcrumb): ?>
3 <li class="breadcrumb-item active"><?= $breadcrumb ?></li>
4 <? endforeach; ?>
5</ol>
6
7<? if ($error): ?>
8 <div class="alert alert-danger"><?= $error ?></div>
9<? endif; ?>
10
11<? if ($success): ?>
12 <div class="alert alert-success"><?= $success ?></div>
13<? endif; ?>
14
15<form method="post" autocomplete="off" class="form">
16 <input type="hidden" id="is_partner" value="<?= $is_partner ? 1 : 0 ?>">
17 <input type="hidden" name="redirect_url" value="<?= $redirect_url ?? '' ?>">
18 <input type="hidden" name="<?= $secret['key'] ?>" value="<?= $secret['value'] ?>">
19
20
21 <input type="hidden" id="root_catalog" value='<?= $root_settings['catalog'] ?>'>
22 <legend>Targeting settings</legend>
23
24 <div class="form-group relative">
25 <label>targeting</label>
26 <input type="hidden" class="form-control" name="target_id" value="<?= @$item['target_id'] ?>">
27 <input type="hidden" class="form-control" name="partner_id" value="<?= @$item['partner_id'] ?>">
28 <input type="text" class="form-control" name="key" value="<?= @$item['key'] ?>" disabled>
29 </div>
30 <div class="form-group form-check">
31 <input type="checkbox" class="form-check-input"
32 id="is_enabled" <?= isset($item['is_enabled']) && $item['is_enabled'] ? 'checked="checked"' : '' ?>
33 name="is_enabled" value="1">
34 <label class="form-check-label" for="is_enabled">Is enabled</label>
35 </div>
36 <? if ($is_partner): ?>
37 <div class="form-group form-check">
38 <input type="checkbox" class="form-check-input"
39 id="is_default" <?= isset($item['is_default']) && $item['is_default'] ? 'checked="checked"' : '' ?>
40 name="is_default" value="1">
41 <label class="form-check-label" for="is_default">Is default</label>
42 </div>
43 <? endif; ?>
44 <div class="form-group relative">
45 <label>Catalog</label>
46 <!-- <button class='btn btn-sm btn-secondary float-right ml-2' id="toogle_isdefault">toogle 'is default' value</button>
47 <button class='btn btn-sm btn-secondary float-right ml-2' id="toogle_isenabled">toogle 'is enabled' value</button> -->
48 <div class="w-100 table-wrapper-scroll-y my-custom-scrollbar">
49 <table id="catalog" class="w-100 my-4 table table-striped table-bordered table-sm">
50 <thead>
51 <tr>
52 <th style="width:50px"></th>
53 <th>Title</th>
54 <th>Key</th>
55 <th class="text-center">Use inherit settings</th>
56 <th class="text-center">Is enabled</th>
57 <? if ($is_partner): ?>
58 <th class="text-center">Is default</th>
59 <? endif; ?>
60 </tr>
61 </thead>
62 <tbody>
63 <tr>
64 <td></td>
65 <td></td>
66 <td><span hidden class="id"></span><span class="key"></span><span hidden class="targetid"></span></td>
67
68 <td class="text-center"><input type="checkbox" class="inherit_checkbox rebuild_json_on_change"></td>
69 <td class="text-center"><input type="checkbox" class="is_enabled rebuild_json_on_change"></td>
70 <? if ($is_partner): ?>
71 <td class="text-center"><input type="checkbox" class="is_default rebuild_json_on_change"></td>
72 <? endif; ?>
73 </tbody>
74 </table>
75 </div>
76 </div>
77 <div hidden class="form-group relative pt-4">
78 <label>catalog - raw JSON string</label>
79 <button class='btn btn-sm btn-secondary float-right ml-2' id="rerender_tree">rerender tree from JSON</button>
80 <textarea id="catalog_json" class="form-control" name="catalog"
81 rows="20"><?= @$item['catalog'] ?: '[]' ?></textarea>
82 </div>
83 <div class="clearfix"><br></div>
84 <input type="submit" value="Set" class="btn btn-success">
85</form>
86
87<style type="text/css">
88 .mw-200 {
89 max-width: 200px;
90 }
91</style>
92
93<script type="text/javascript">
94
95 var catalog = {};
96
97 var toogle_isdefault = function (e) {
98 e.preventDefault();
99 rebuild_json();
100 }
101
102 var toogle_isenabled = function (e) {
103 e.preventDefault();
104 rebuild_json();
105 }
106
107 var on_change_inherit_checkbox = function (e) {
108 e.preventDefault();
109 var is_inherit = $(this).prop('checked');
110 checkboxes = $(this).closest('tr').find("input.is_enabled, input.is_default");
111 checkboxes.attr('disabled', is_inherit);
112 }
113
114 var rebuild_json = function () {
115 var output_data = [];
116 $('input.inherit_checkbox:not(:checked)').each(function () {
117 var is_partner = $('#is_partner').val() == 1,
118 tr = $(this).closest('tr'),
119 id = tr.find(".id").text(),
120 target_catalog_id = tr.find(".targetid").text(),
121 is_enabled = tr.find("input.is_enabled").prop('checked'),
122 is_default = is_partner ? tr.find("input.is_default").prop('checked') : true,
123 new_row = {id: id, target_catalog_id: target_catalog_id, is_enabled: is_enabled, is_default: is_default};
124
125 output_data.push(new_row);
126 });
127 format_json_string(output_data);
128 }
129
130 var custom_toDict = function (dict, node) {
131 var tdList = $('>td', node.tr);
132 dict.id = tdList.find("input.id").val();
133 dict.key = tdList.find("input.key").val();
134 dict.is_enabled = tdList.find("input.is_enabled").prop('checked');
135 if ($('#is_partner').val() == 1)
136 dict.is_default = tdList.find("input.is_default").prop('checked');
137 if (typeof dict.folder != 'undefined')
138 delete dict.folder;
139 if (typeof dict.expanded != 'undefined')
140 delete dict.expanded;
141 }
142
143 var rerender_tree = function (e) {
144 e.preventDefault();
145 var tree = $.ui.fancytree.getTree("#catalog");
146 catalog = array_2_associative_array($.parseJSON($('#catalog_json').val()));
147 try {
148 json = $.parseJSON($('#root_catalog').val());
149 tree.reload(json);
150 } catch (e) {
151 alert(e);
152 }
153 }
154
155 var array_2_associative_array = function (input, key) {
156 var output = {};
157 if (typeof input == 'object') {
158 input.forEach(function (item) {
159 output[item.key] = item;
160 });
161 }
162 return output;
163 }
164
165 var format_json_string = function (json_obj) {
166 try {
167 if (typeof json_obj != 'object')
168 json_obj = $.parseJSON($('#catalog_json').val());
169 $('#catalog_json').val(JSON.stringify(json_obj, null, ' '));
170 } catch (e) {
171 alert(e);
172 }
173 }
174
175 $('body')
176 .on('click', '#toogle_isdefault', toogle_isdefault)
177 .on('click', '#toogle_isenabled', toogle_isenabled)
178 .on('blur', '.rebuild_json_on_blur', rebuild_json)
179 .on('change', '.rebuild_json_on_change', rebuild_json)
180 .on('change', '.inherit_checkbox', on_change_inherit_checkbox)
181
182 .on('click', '#rerender_tree', rerender_tree);
183
184 $(function () {
185
186 format_json_string();
187 catalog = array_2_associative_array($.parseJSON($('#catalog_json').val()));
188
189 $("#catalog")
190 .fancytree({
191 nodata: false,
192 checkbox: false,
193 checkboxAutoHide: true,
194 titlesTabbable: true,
195 quicksearch: true,
196 source: $.parseJSON($('#root_catalog').val()),
197
198 extensions: ["table", "gridnav", "glyph"],
199 glyph: {
200 preset: "awesome5",
201 map: {}
202 },
203 table: {
204 indentation: 20,
205 nodeColumnIdx: 1,
206 checkboxColumnIdx: 0,
207 },
208 gridnav: {
209 autofocusInput: false,
210 handleCursorKeys: true,
211 },
212 createNode: function (event, data) {
213 var node = data.node,
214 $tdList = $(node.tr).find(">td");
215 },
216 renderColumns: function (event, data) {
217 var $tdList = $(data.node.tr).find(">td");
218 console.log(data.node);
219 $tdList
220 .find(".key")
221 .text(data.node.key);
222 $tdList
223 .find(".targetid")
224 .text(data.node.data.id);
225 $tdList
226 .find("input.is_enabled")
227 .prop('checked', (data.node.data.is_enabled == 1));
228 $tdList
229 .find("input.is_default")
230 .prop('checked', (data.node.data.is_default == 1))
231 $tdList
232 .find("input.title")
233 .val(data.node.title);
234 if (typeof catalog[data.node.key] == 'object') {
235 $tdList
236 .find(".id")
237 .text(catalog[data.node.key].id);
238 $tdList
239 .find("input.inherit_checkbox")
240 .prop('checked', false);
241 $tdList
242 .find("input.is_enabled")
243 .prop('checked', (catalog[data.node.key].is_enabled == 1));
244 $tdList
245 .find("input.is_default")
246 .prop('checked', (catalog[data.node.key].is_default == 1));
247 } else {
248 $tdList
249 .find("input.inherit_checkbox")
250 .prop('checked', true);
251 $tdList
252 .find("input.is_enabled, input.is_default").attr('disabled', 'disabled')
253 }
254 },
255 modifyChild: function (event, data) {
256 data.tree.info(event.type, data);
257 },
258 });
259
260 $.ui.fancytree.getTree("#catalog").expandAll();
261 $.ui.fancytree.getTree("#catalog").expandAll(false);
262 });
263 $(document).ready(function () {
264 $('#catalog').DataTable({
265 "scrollY": "50vh",
266 "scrollCollapse": true,
267 });
268 $('.dataTables_length').addClass('bs-select');
269 });
270</script>
271