1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
use CMSFactory\Events; |
4
|
|
|
use core\models\Route; |
5
|
|
|
use core\models\RouteQuery; |
6
|
|
|
use template_manager\classes\TemplateManager; |
7
|
|
|
|
8
|
|
|
if (!defined('BASEPATH')) { |
9
|
|
|
exit('No direct script access allowed'); |
10
|
|
|
} |
11
|
|
|
|
12
|
|
|
/** |
13
|
|
|
* @property Cms_admin cms_admin |
14
|
|
|
* @property Lib_admin lib_admin |
15
|
|
|
* @property Lib_category lib_category |
16
|
|
|
* @property Cms_base cms_base |
17
|
|
|
*/ |
18
|
|
|
class Categories extends BaseAdminController |
|
|
|
|
19
|
|
|
{ |
20
|
|
|
|
21
|
|
|
/** |
22
|
|
|
* @var array |
23
|
|
|
*/ |
24
|
|
|
public $categories; |
25
|
|
|
|
26
|
|
|
/** |
27
|
|
|
* @var int |
28
|
|
|
*/ |
29
|
|
|
protected $level = -1; |
30
|
|
|
|
31
|
|
|
/** |
32
|
|
|
* @var bool |
33
|
|
|
*/ |
34
|
|
|
protected $multi = false; |
35
|
|
|
|
36
|
|
|
/** |
37
|
|
|
* @var array |
38
|
|
|
*/ |
39
|
|
|
protected $path = []; |
40
|
|
|
|
41
|
|
|
/** |
42
|
|
|
* @var array |
43
|
|
|
*/ |
44
|
|
|
protected $pathIds = []; |
45
|
|
|
|
46
|
|
|
/** |
47
|
|
|
* @var array |
48
|
|
|
*/ |
49
|
|
|
private $temp_cats = []; |
50
|
|
|
|
51
|
|
|
/** |
52
|
|
|
* Categories constructor. |
53
|
|
|
*/ |
54
|
|
View Code Duplication |
public function __construct() { |
55
|
|
|
parent::__construct(); |
56
|
|
|
|
57
|
|
|
$this->load->library('DX_Auth'); |
58
|
|
|
admin_or_redirect(); |
59
|
|
|
$this->load->library('lib_admin'); |
60
|
|
|
$this->load->library('lib_category'); |
61
|
|
|
$this->lib_admin->init_settings(); |
62
|
|
|
} |
63
|
|
|
|
64
|
|
|
/** |
65
|
|
|
* Create or update new category |
66
|
|
|
* @param string $action |
67
|
|
|
* @param int $cat_id |
68
|
|
|
*/ |
69
|
|
|
public function create($action, $cat_id = 0) { |
70
|
|
|
$url = $this->formUrl(); |
71
|
|
|
|
72
|
|
|
$this->form_validation->set_rules('name', lang('Title', 'admin'), 'trim|required|min_length[1]|max_length[160]|xss_clean'); |
73
|
|
|
|
74
|
|
|
/** Добавил необходимое условие так как если передать спец символы url не генерирует */ |
75
|
|
|
|
76
|
|
|
$urlRule = 'trim|min_length[1]|max_length[255]|alpha_dash|least_one_symbol'; |
77
|
|
|
$this->form_validation->set_rules('url', lang('URL categories', 'admin'), $url ? $urlRule : 'required|' . $urlRule); |
78
|
|
|
$this->form_validation->set_rules('image', lang('Image', 'admin'), 'max_length[250]'); |
79
|
|
|
$this->form_validation->set_rules('parent_id', lang('Parent', 'admin'), 'trim|required|integer|max_length[160]'); |
80
|
|
|
$this->form_validation->set_rules('description', lang('Description ', 'admin'), 'trim'); |
81
|
|
|
$this->form_validation->set_rules('keywords', lang('Keywords', 'admin'), 'trim'); |
82
|
|
|
$this->form_validation->set_rules('short_desc', lang('Short description', 'admin'), 'trim'); |
83
|
|
|
$this->form_validation->set_rules('title', lang('Meta Title', 'admin'), 'trim|max_length[250]'); |
84
|
|
|
$this->form_validation->set_rules('tpl', lang('Template', 'admin'), 'trim|max_length[50]'); |
85
|
|
|
$this->form_validation->set_rules('page_tpl', lang('Page template', 'admin'), 'trim|max_length[50]|callback_tpl_validation'); |
86
|
|
|
$this->form_validation->set_rules('main_tpl', lang('Main template', 'admin'), 'trim|max_length[50]|callback_tpl_validation'); |
87
|
|
|
$this->form_validation->set_rules('per_page', lang('Posts on page', 'admin'), 'required|trim|integer|max_length[4]|min_length[1]|is_natural_no_zero'); |
88
|
|
|
if ($cat_id) { |
89
|
|
|
$cat = $this->cms_admin->get_category($cat_id); |
90
|
|
|
$groupId = (int) $cat['category_field_group']; |
91
|
|
|
$groupId_POST = (int) $this->input->post('category_field_group'); |
92
|
|
|
|
93
|
|
|
if ($groupId != -1 && $groupId_POST != -1) { |
94
|
|
|
($hook = get_hook('cfcm_set_rules')) ? eval($hook) : NULL; |
|
|
|
|
95
|
|
|
} |
96
|
|
|
} |
97
|
|
|
if ($this->form_validation->run($this) == FALSE) { |
98
|
|
|
($hook = get_hook('admin_create_cat_val_failed')) ? eval($hook) : NULL; |
|
|
|
|
99
|
|
|
|
100
|
|
|
showMessage(validation_errors(), false, 'r'); |
101
|
|
|
} else { |
102
|
|
|
|
103
|
|
|
$fetch_pages = $this->input->post('fetch_pages'); |
104
|
|
|
|
105
|
|
|
if (count($fetch_pages) > 0) { |
106
|
|
|
$fetch_pages = serialize($fetch_pages); |
107
|
|
|
} |
108
|
|
|
$settings = [ |
109
|
|
|
'category_apply_for_subcats' => $this->input->post('category_apply_for_subcats'), |
110
|
|
|
'apply_for_subcats' => $this->input->post('apply_for_subcats'), |
111
|
|
|
]; |
112
|
|
|
$data = [ |
113
|
|
|
'name' => $this->input->post('name'), |
114
|
|
|
'url' => $url, |
115
|
|
|
'image' => $this->lib_admin->db_post('image'), |
116
|
|
|
'short_desc' => $this->lib_admin->db_post('short_desc'), |
117
|
|
|
'parent_id' => $this->input->post('parent_id'), |
118
|
|
|
'description' => $this->lib_admin->db_post('description'), |
119
|
|
|
'keywords' => $this->lib_admin->db_post('keywords'), |
120
|
|
|
'title' => $this->lib_admin->db_post('title'), |
121
|
|
|
'tpl' => $this->lib_admin->db_post('tpl'), |
122
|
|
|
'main_tpl' => $this->lib_admin->db_post('main_tpl'), |
123
|
|
|
'page_tpl' => $this->lib_admin->db_post('page_tpl'), |
124
|
|
|
'per_page' => $this->lib_admin->db_post('per_page'), |
125
|
|
|
'order_by' => $this->lib_admin->db_post('order_by'), |
126
|
|
|
'sort_order' => $this->lib_admin->db_post('sort_order'), |
127
|
|
|
'comments_default' => $this->lib_admin->db_post('comments_default'), |
128
|
|
|
'fetch_pages' => $fetch_pages, |
129
|
|
|
'settings' => serialize($settings), |
130
|
|
|
'updated' => time(), |
131
|
|
|
'route_id' => $cat['route_id'], |
132
|
|
|
]; |
133
|
|
|
|
134
|
|
|
$parent = $this->lib_category->get_category($data['parent_id']); |
135
|
|
|
|
136
|
|
View Code Duplication |
if ($parent != 'NULL') { |
137
|
|
|
$full_path = $parent['path_url'] . $data['url'] . '/'; |
138
|
|
|
} else { |
139
|
|
|
$full_path = $data['url'] . '/'; |
140
|
|
|
} |
141
|
|
|
|
142
|
|
View Code Duplication |
if (($this->category_exists($full_path) == TRUE) AND ($action != 'update') AND ($data['url'] != 'core')) { |
|
|
|
|
143
|
|
|
$data['url'] .= time(); |
144
|
|
|
} |
145
|
|
|
|
146
|
|
|
switch ($action) { |
147
|
|
|
case 'new': |
|
|
|
|
148
|
|
|
|
149
|
|
|
if ($this->url_exists($data['url'])) { |
150
|
|
|
$data['url'] .= time(); |
151
|
|
|
} |
152
|
|
|
|
153
|
|
|
$data['created'] = time(); |
154
|
|
|
($hook = get_hook('admin_create_category')) ? eval($hook) : NULL; |
|
|
|
|
155
|
|
|
|
156
|
|
|
$id = $this->cms_admin->create_category($data); |
157
|
|
|
|
158
|
|
|
$this->lib_admin->log( |
159
|
|
|
lang('Category has been created', 'admin') . |
160
|
|
|
" <a href='$BASE_URL/admin/categories/edit/$id'>{$data['name']}</a>" |
|
|
|
|
161
|
|
|
); |
162
|
|
|
|
163
|
|
|
/** Init Event. Create new Category */ |
164
|
|
|
Events::create()->raiseEvent(array_merge($data, ['id' => $id, 'userId' => $this->dx_auth->get_user_id()]), 'Categories:create'); |
165
|
|
|
|
166
|
|
|
/** End init Event. Create new Page */ |
167
|
|
|
showMessage(lang('Pages category created', 'admin')); |
168
|
|
|
|
169
|
|
|
$act = $this->input->post('action'); |
170
|
|
|
if ($act == 'close') { |
171
|
|
|
pjax('/admin/categories/cat_list'); |
172
|
|
|
} else { |
173
|
|
|
pjax('/admin/categories/edit/' . $id); |
174
|
|
|
} |
175
|
|
|
break; |
176
|
|
|
|
177
|
|
|
case 'update': |
|
|
|
|
178
|
|
|
|
179
|
|
|
/** Init Event. Pre Create Category */ |
180
|
|
|
Events::create()->raiseEvent(['pageId' => $cat_id, 'url' => $cat['url']], 'Categories:preUpdate'); |
181
|
|
|
|
182
|
|
|
if ($this->url_exists($data['url'], $cat_id)) { |
183
|
|
|
$data['url'] .= time(); |
184
|
|
|
} |
185
|
|
|
|
186
|
|
|
($hook = get_hook('admin_update_category')) ? eval($hook) : NULL; |
|
|
|
|
187
|
|
|
$this->cms_admin->update_category($data, $cat_id); |
188
|
|
|
|
189
|
|
|
$this->load->module('cfcm')->save_item_data($cat_id, 'category'); |
190
|
|
|
|
191
|
|
|
$this->cache->delete_all(); |
192
|
|
|
|
193
|
|
|
// Clear lib_category data |
194
|
|
|
$this->lib_category->categories = []; |
195
|
|
|
$this->lib_category->level = 0; |
196
|
|
|
$this->lib_category->path = []; |
197
|
|
|
$this->lib_category->unsorted_arr = FALSE; |
198
|
|
|
$this->lib_category->unsorted = FALSE; |
199
|
|
|
|
200
|
|
|
$this->lib_category->build(); |
201
|
|
|
|
202
|
|
|
$this->update_urls(); |
203
|
|
|
|
204
|
|
|
$this->lib_admin->log( |
205
|
|
|
lang('Changed the category', 'admin') . |
206
|
|
|
" <a href='$BASE_URL/admin/categories/edit/$cat_id'>{$data['name']}</a>" |
207
|
|
|
); |
208
|
|
|
|
209
|
|
|
/** Init Event. Create new Category */ |
210
|
|
|
Events::create()->raiseEvent(array_merge($data, ['id' => $cat_id, 'userId' => $this->dx_auth->get_user_id()]), 'Categories:update'); |
211
|
|
|
|
212
|
|
|
showMessage(lang('Changes saved', 'admin')); |
213
|
|
|
$act = $this->input->post('action'); |
214
|
|
|
if ($act == 'close') { |
215
|
|
|
pjax('/admin/categories/cat_list'); |
216
|
|
|
} else { |
217
|
|
|
pjax('/admin/categories/edit/' . $cat_id); |
218
|
|
|
} |
219
|
|
|
|
220
|
|
|
break; |
221
|
|
|
} |
222
|
|
|
|
223
|
|
|
$this->cache->delete_all(); |
224
|
|
|
} |
225
|
|
|
} |
226
|
|
|
|
227
|
|
|
public function url_exists($url, $id = null) { |
228
|
|
|
|
229
|
|
|
$segment = end(explode('/', $url)); |
|
|
|
|
230
|
|
|
|
231
|
|
|
if ($id) { |
232
|
|
|
$this->db->where('entity_id <>', $id); |
233
|
|
|
} |
234
|
|
|
$query = $this->db->where('url', $segment)->get('route'); |
235
|
|
|
|
236
|
|
|
return $query->num_rows() > 0; |
237
|
|
|
|
238
|
|
|
} |
239
|
|
|
|
240
|
|
|
/** |
241
|
|
|
* Form url from POST |
242
|
|
|
* @return string |
243
|
|
|
*/ |
244
|
|
|
private function formUrl() { |
245
|
|
|
// Create category URL |
246
|
|
|
if ($this->input->post('url') == null || $this->input->post('url') == '') { |
247
|
|
|
$url = $this->createUrl($this->input->post('name')); |
248
|
|
|
} else { |
249
|
|
|
$url = $this->input->post('url'); |
250
|
|
|
} |
251
|
|
|
$url = mb_strlen($url) === 1 ? str_repeat($url, 2) : $url; |
252
|
|
|
|
253
|
|
|
return $url ?: time(); |
254
|
|
|
} |
255
|
|
|
|
256
|
|
|
/** |
257
|
|
|
* @param string $str |
258
|
|
|
* @return array |
|
|
|
|
259
|
|
|
*/ |
260
|
|
|
public function category_exists($str) { |
261
|
|
|
return $this->lib_category->get_category_by('path_url', $str); |
262
|
|
|
} |
263
|
|
|
|
264
|
|
|
public function update_urls() { |
265
|
|
|
$categories = $this->lib_category->unsorted(); |
266
|
|
|
|
267
|
|
|
foreach ($categories as $category) { |
268
|
|
|
$this->db->where('category', $category['id']); |
269
|
|
|
$this->db->update('content', ['cat_url' => $category['path_url']]); |
270
|
|
|
} |
271
|
|
|
$this->cache->delete_all(); |
272
|
|
|
} |
273
|
|
|
|
274
|
|
|
/** |
275
|
|
|
* Display create category form |
276
|
|
|
* @param null $parent_id |
277
|
|
|
*/ |
278
|
|
|
public function create_form($parent_id = NULL) { |
279
|
|
|
$this->template->assign('tree', $this->lib_category->build()); |
280
|
|
|
$this->template->assign('parent_id', $parent_id); |
281
|
|
|
$this->template->assign('include_cats', $this->sub_cats($this->lib_category->build())); |
282
|
|
|
$this->template->assign('template_files', $this->getTemplateFiles()); |
283
|
|
|
|
284
|
|
|
/** Init Event. Pre Create Category */ |
285
|
|
|
Events::create()->registerEvent('', 'BaseAdminCategory:preCreate'); |
286
|
|
|
Events::runFactory(); |
287
|
|
|
|
288
|
|
|
$this->template->show('create_cat', FALSE); |
289
|
|
|
} |
290
|
|
|
|
291
|
|
|
/** |
292
|
|
|
* @param array $array |
293
|
|
|
* @return array |
294
|
|
|
*/ |
295
|
|
|
public function sub_cats(array $array = []) { |
296
|
|
|
foreach ($array as $item) { |
297
|
|
|
$this->temp_cats[] = $item; |
298
|
|
|
if (count($item['subtree']) > 0) { |
299
|
|
|
$this->sub_cats($item['subtree']); |
300
|
|
|
} |
301
|
|
|
} |
302
|
|
|
return $this->temp_cats; |
303
|
|
|
} |
304
|
|
|
|
305
|
|
|
/** |
306
|
|
|
* Return template files names for main, page or category template |
307
|
|
|
* @return array |
308
|
|
|
*/ |
309
|
|
|
public function getTemplateFiles() { |
310
|
|
|
$currentTemplate = TemplateManager::getInstance()->getCurentTemplate()->name; |
311
|
|
|
$pathToFind = TEMPLATES_PATH . $currentTemplate; |
312
|
|
|
|
313
|
|
|
$files = []; |
314
|
|
|
foreach (new DirectoryIterator($pathToFind) as $entity) { |
315
|
|
|
if ($entity->isFile() & !$entity->isDot() & $entity->getExtension() == 'tpl') { |
316
|
|
|
$files[] = array_shift(explode('.', $entity->getFilename())); |
|
|
|
|
317
|
|
|
} |
318
|
|
|
} |
319
|
|
|
return $files; |
320
|
|
|
} |
321
|
|
|
|
322
|
|
|
/** |
323
|
|
|
* @return bool |
|
|
|
|
324
|
|
|
*/ |
325
|
|
|
public function create_tpl() { |
326
|
|
|
$file = trim($this->input->post('filename')); |
327
|
|
|
|
328
|
|
|
$this->form_validation->set_rules('filename', lang('Template name', 'admin'), 'required|alpha_numeric|min_length[1]|max_length[250]'); |
329
|
|
|
|
330
|
|
|
if ($this->form_validation->run() == FALSE) { |
331
|
|
|
$responce = showMessage(validation_errors(), false, 'r', true); |
332
|
|
|
$result = false; |
333
|
|
|
echo json_encode(['responce' => $responce, 'result' => $result]); |
334
|
|
|
return FALSE; |
335
|
|
|
} |
336
|
|
|
|
337
|
|
|
$currentTemplate = TemplateManager::getInstance()->getCurentTemplate()->name; |
338
|
|
|
$file = TEMPLATES_PATH . $currentTemplate . '/' . $file . '.tpl'; |
339
|
|
|
|
340
|
|
|
if (!file_exists($file)) { |
341
|
|
|
$fp = fopen($file, 'w'); |
342
|
|
|
if ($fp) { |
343
|
|
|
$responce = showMessage(lang('The file has been successfully created', 'admin'), '', '', true); |
344
|
|
|
$result = true; |
345
|
|
|
} else { |
346
|
|
|
$responce = showMessage(lang('Could not create file', 'admin'), '', 'r', true); |
347
|
|
|
$result = false; |
348
|
|
|
} |
349
|
|
|
fwrite($fp, '/* new ImageCMS Tpl file */'); |
350
|
|
|
fclose($fp); |
351
|
|
|
echo json_encode(['responce' => $responce, 'result' => $result]); |
352
|
|
|
} else { |
353
|
|
|
$responce = showMessage(lang('File with the same name is already exist.'), '', 'r', true); |
354
|
|
|
$result = false; |
355
|
|
|
echo json_encode(['responce' => $responce, 'result' => $result]); |
356
|
|
|
return FALSE; |
357
|
|
|
} |
358
|
|
|
} |
359
|
|
|
|
360
|
|
|
/** |
361
|
|
|
* Delete category and its pages |
362
|
|
|
* @access public |
363
|
|
|
*/ |
364
|
|
|
public function delete() { |
365
|
|
|
|
366
|
|
|
foreach ($this->input->post('ids') as $p) { |
367
|
|
|
|
368
|
|
|
$cat_id = $p; |
369
|
|
|
|
370
|
|
|
if ($this->db->get('category')->num_rows() == 1) { |
371
|
|
|
showMessage(lang('You can not delete the last category from the list', 'admin'), lang('Error', 'admin'), 'r'); |
372
|
|
|
return; |
373
|
|
|
} |
374
|
|
|
|
375
|
|
|
$settings = $this->cms_admin->get_settings(); |
376
|
|
|
|
377
|
|
|
if ($settings['main_page_cat'] == $cat_id && 'category' == $settings['main_type']) { |
378
|
|
|
showMessage(lang('Can not delete main category', 'admin'), lang('Error', 'admin'), 'r'); |
379
|
|
|
if (count($this->input->post('ids')) > 1) { |
380
|
|
|
continue; |
381
|
|
|
} else { |
382
|
|
|
return; |
383
|
|
|
} |
384
|
|
|
} |
385
|
|
|
|
386
|
|
|
($hook = get_hook('admin_category_delete')) ? eval($hook) : NULL; |
|
|
|
|
387
|
|
|
|
388
|
|
|
// Delete Category |
389
|
|
|
$this->db->limit(1); |
390
|
|
|
$this->db->where('id', $cat_id); |
391
|
|
|
$this->db->delete('category'); |
392
|
|
|
|
393
|
|
|
Events::create()->raiseEvent(['id' => $cat_id], 'Categories:delete'); |
394
|
|
|
|
395
|
|
|
$this->lib_admin->log(lang('Deleted ID category or ID category has been deleted', 'admin') . ' ' . $cat_id); |
396
|
|
|
|
397
|
|
|
// Delete translates |
398
|
|
|
$this->db->where('alias', $cat_id); |
399
|
|
|
$this->db->delete('category_translate'); |
400
|
|
|
|
401
|
|
|
// Delete pages |
402
|
|
|
$this->db->where('category', $cat_id); |
403
|
|
|
$pages = $this->db->get('content'); |
404
|
|
|
|
405
|
|
View Code Duplication |
if ($pages->num_rows() > 0) { |
406
|
|
|
$this->load->module('admin/pages', 'pages'); |
407
|
|
|
foreach ($pages->result_array() as $page) { |
408
|
|
|
$this->pages->delete($page['id'], FALSE); |
409
|
|
|
} |
410
|
|
|
} |
411
|
|
|
|
412
|
|
|
// Delete sub cats |
413
|
|
|
$this->sub_cats = []; |
414
|
|
|
$this->categories = $this->db->get('category')->result_array(); |
415
|
|
|
$this->_get_sub_cats($cat_id); |
416
|
|
|
|
417
|
|
|
if (count($this->sub_cats) > 0) { |
418
|
|
|
foreach ($this->sub_cats as $key => $cat_id) { |
419
|
|
|
|
420
|
|
|
($hook = get_hook('admin_sub_category_delete')) ? eval($hook) : NULL; |
|
|
|
|
421
|
|
|
|
422
|
|
|
// Delete Category |
423
|
|
|
$this->db->limit(1); |
424
|
|
|
$this->db->where('id', $cat_id); |
425
|
|
|
$this->db->delete('category'); |
426
|
|
|
|
427
|
|
|
Events::create()->raiseEvent(['id' => $cat_id], 'Categories:delete'); |
428
|
|
|
|
429
|
|
|
$this->lib_admin->log(lang('Deleted ID category or ID category has been deleted', 'admin') . ' ' . $cat_id); |
430
|
|
|
|
431
|
|
|
// Delete translates |
432
|
|
|
$this->db->where('alias', $cat_id); |
433
|
|
|
$this->db->delete('category_translate'); |
434
|
|
|
|
435
|
|
|
// Delete pages |
436
|
|
|
$this->db->where('category', $cat_id); |
437
|
|
|
$pages = $this->db->get('content'); |
438
|
|
|
|
439
|
|
View Code Duplication |
if ($pages->num_rows() > 0) { |
440
|
|
|
$this->load->module('admin/pages', 'pages'); |
441
|
|
|
foreach ($pages->result_array() as $page) { |
442
|
|
|
$this->pages->delete($page['id'], FALSE); |
443
|
|
|
} |
444
|
|
|
} |
445
|
|
|
} |
446
|
|
|
} |
447
|
|
|
} |
448
|
|
|
|
449
|
|
|
$CI = &get_instance(); |
450
|
|
|
|
451
|
|
|
if ($CI->db->get_where('components', ['name' => 'sitemap'])->row()) { |
452
|
|
|
$CI->load->module('sitemap')->ping_google($this); |
453
|
|
|
} |
454
|
|
|
|
455
|
|
|
$this->cache->delete_all(); |
456
|
|
|
|
457
|
|
View Code Duplication |
if (count($this->input->post('ids')) > 1) { |
458
|
|
|
showMessage(lang('Pages categories deleted', 'admin')); |
459
|
|
|
} else { |
460
|
|
|
showMessage(lang('Pages category deleted', 'admin')); |
461
|
|
|
} |
462
|
|
|
|
463
|
|
|
return TRUE; |
464
|
|
|
} |
465
|
|
|
|
466
|
|
|
/** |
467
|
|
|
* @param int $id |
468
|
|
|
*/ |
469
|
|
|
public function _get_sub_cats($id) { |
470
|
|
|
foreach ($this->categories as $cat) { |
471
|
|
|
if ($cat['parent_id'] == $id) { |
472
|
|
|
$this->sub_cats[] = $cat['id']; |
473
|
|
|
$this->_get_sub_cats($cat['id']); |
474
|
|
|
} |
475
|
|
|
} |
476
|
|
|
} |
477
|
|
|
|
478
|
|
|
/** |
479
|
|
|
* Show edit category window |
480
|
|
|
* @access public |
481
|
|
|
* @param int $id |
|
|
|
|
482
|
|
|
* @return bool |
|
|
|
|
483
|
|
|
*/ |
484
|
|
|
public function edit($id) { |
485
|
|
|
$cat = $this->cms_admin->get_category($id); |
486
|
|
|
|
487
|
|
|
/** Init Event. Pre Create Category */ |
488
|
|
|
Events::create()->registerEvent(['pageId' => $id, 'url' => $cat['url']], 'Categories:preUpdate'); |
489
|
|
|
Events::runFactory(); |
490
|
|
|
|
491
|
|
|
($hook = get_hook('admin_edit_category')) ? eval($hook) : NULL; |
|
|
|
|
492
|
|
|
|
493
|
|
|
if ($cat !== FALSE) { |
494
|
|
|
// Get langs |
495
|
|
|
$langs = $this->cms_base->get_langs(); |
496
|
|
|
$this->template->assign('langs', $langs); |
497
|
|
|
$settings = unserialize($cat['settings']); |
498
|
|
|
$cat['fetch_pages'] = unserialize($cat['fetch_pages']); |
499
|
|
|
$this->template->add_array($cat); |
500
|
|
|
|
501
|
|
|
$categories = $this->lib_category->build(); |
502
|
|
|
|
503
|
|
|
$this->template->assign('tree', $categories); |
504
|
|
|
$this->template->assign('template_files', $this->getTemplateFiles()); |
505
|
|
|
$this->template->assign('include_cats', $this->sub_cats($this->lib_category->build())); |
506
|
|
|
$this->template->assign('settings', $settings); |
507
|
|
|
($hook = get_hook('admin_show_category_edit')) ? eval($hook) : NULL; |
|
|
|
|
508
|
|
|
|
509
|
|
|
$this->template->show('category_edit', FALSE); |
510
|
|
|
} else { |
511
|
|
|
return FALSE; |
512
|
|
|
} |
513
|
|
|
} |
514
|
|
|
|
515
|
|
|
/** |
516
|
|
|
* @param string $action |
517
|
|
|
*/ |
518
|
|
|
public function fast_add($action = '') { |
519
|
|
|
|
520
|
|
|
$this->template->add_array( |
521
|
|
|
[ |
522
|
|
|
'tree' => $this->lib_category->build(), |
523
|
|
|
] |
524
|
|
|
); |
525
|
|
|
|
526
|
|
|
if ($action == '') { |
527
|
|
|
$this->template->show('fast_cat_add', FALSE); |
528
|
|
|
} |
529
|
|
|
|
530
|
|
|
if ($action == 'create') { |
531
|
|
|
$this->form_validation->set_rules('name', lang('Title', 'admin'), 'trim|required|min_length[1]|max_length[160]'); |
532
|
|
|
$this->form_validation->set_rules('parent_id', lang('Parent', 'admin'), 'trim|required|integer|max_length[160]'); |
533
|
|
|
|
534
|
|
|
if ($this->form_validation->run($this) == FALSE) { |
535
|
|
|
showMessage(validation_errors(), false, 'r'); |
536
|
|
|
} else { |
537
|
|
|
$url = $this->formUrl(); |
538
|
|
|
$fetch_pages = ''; |
539
|
|
|
|
540
|
|
|
$data = [ |
541
|
|
|
'name' => $this->input->post('name'), |
542
|
|
|
'url' => $url, |
543
|
|
|
'position' => '0', |
544
|
|
|
'short_desc' => '', |
545
|
|
|
'parent_id' => $this->input->post('parent_id'), |
546
|
|
|
'description' => '', |
547
|
|
|
'keywords' => '', |
548
|
|
|
'title' => '', |
549
|
|
|
'tpl' => '', |
550
|
|
|
'main_tpl' => '', |
551
|
|
|
'page_tpl' => '', |
552
|
|
|
'per_page' => 15, |
553
|
|
|
'order_by' => 'publish_date', |
554
|
|
|
'sort_order' => 'desc', |
555
|
|
|
'comments_default' => '1', |
556
|
|
|
'fetch_pages' => $fetch_pages, |
557
|
|
|
]; |
558
|
|
|
|
559
|
|
|
$parent = $this->lib_category->get_category($data['parent_id']); |
560
|
|
|
|
561
|
|
View Code Duplication |
if ($parent != 'NULL') { |
562
|
|
|
$full_path = $parent['path_url'] . $data['url'] . '/'; |
563
|
|
|
} else { |
564
|
|
|
$full_path = $data['url'] . '/'; |
565
|
|
|
} |
566
|
|
|
|
567
|
|
View Code Duplication |
if (($this->category_exists($full_path) == TRUE) AND ($action != 'update') AND ($data['url'] != 'core')) { |
|
|
|
|
568
|
|
|
$data['url'] .= time(); |
569
|
|
|
} |
570
|
|
|
|
571
|
|
|
$id = $this->cms_admin->create_category($data); |
572
|
|
|
|
573
|
|
|
Events::create()->raiseEvent( |
574
|
|
|
array_merge($data, ['id' => $id, 'userId' => $this->dx_auth->get_user_id()]), |
575
|
|
|
'Categories:create' |
576
|
|
|
); |
577
|
|
|
|
578
|
|
|
$this->cache->delete_all(); |
579
|
|
|
|
580
|
|
|
$this->lib_admin->log( |
581
|
|
|
lang('Category has been created or created a category', 'admin') . |
582
|
|
|
" <a href='$BASE_URL/admin/categories/edit/$id'>{$data['name']}</a>" |
|
|
|
|
583
|
|
|
); |
584
|
|
|
|
585
|
|
|
$this->template->add_array( |
586
|
|
|
[ |
587
|
|
|
'tree' => $this->lib_category->build(), |
588
|
|
|
'sel_cat' => $id, |
589
|
|
|
] |
590
|
|
|
); |
591
|
|
|
|
592
|
|
|
$this->template->show('cats_select', FALSE); |
593
|
|
|
} |
594
|
|
|
} |
595
|
|
|
} |
596
|
|
|
|
597
|
|
|
/** |
598
|
|
|
* @param int $id |
599
|
|
|
*/ |
600
|
|
|
public function get_comments_status($id) { |
601
|
|
|
$this->db->select('comments_default'); |
602
|
|
|
$this->db->where('id', $id); |
603
|
|
|
$query = $this->db->get('category')->row_array(); |
604
|
|
|
|
605
|
|
|
echo json_encode($query); |
606
|
|
|
} |
607
|
|
|
|
608
|
|
|
public function index() { |
609
|
|
|
$this->cat_list(); |
610
|
|
|
} |
611
|
|
|
|
612
|
|
|
public function cat_list() { |
613
|
|
|
$this->config->set_item('cur_lang', $this->load->module('core')->def_lang[0]['id']); |
614
|
|
|
|
615
|
|
|
$tree = $this->lib_category->_build(); |
616
|
|
|
|
617
|
|
|
$this->template->add_array( |
618
|
|
|
[ |
619
|
|
|
'tree' => $tree, |
620
|
|
|
'catTreeHTML' => $this->renderCatList($tree), |
621
|
|
|
] |
622
|
|
|
); |
623
|
|
|
|
624
|
|
|
$this->template->show('category_list', FALSE); |
625
|
|
|
} |
626
|
|
|
|
627
|
|
|
/** |
628
|
|
|
* @param array $tree |
629
|
|
|
* @return string |
630
|
|
|
*/ |
631
|
|
|
private function renderCatList(array $tree) { |
632
|
|
|
$html = ''; |
633
|
|
|
foreach ($tree as $item) { |
634
|
|
|
$html .= '<div>'; |
635
|
|
|
$html .= $this->template->fetch('_catlistitem', ['item' => $item]); |
636
|
|
|
if (count($item['subtree'])) { |
637
|
|
|
$html .= '<div class="frame_level sortable" style="display:none;">'; |
638
|
|
|
$html .= $this->renderCatList($item['subtree']); |
639
|
|
|
$html .= '</div>'; |
640
|
|
|
} |
641
|
|
|
$html .= '</div>'; |
642
|
|
|
} |
643
|
|
|
return $html; |
644
|
|
|
} |
645
|
|
|
|
646
|
|
|
public function save_positions() { |
647
|
|
|
$positions = $this->input->post('positions'); |
648
|
|
|
|
649
|
|
|
if (count($positions) == 0) { |
650
|
|
|
return false; |
651
|
|
|
} |
652
|
|
|
|
653
|
|
|
if ($this->input->post('positions')) { |
654
|
|
|
foreach ($this->input->post('positions') as $pos => $id) { |
655
|
|
|
$this->db->where('id', (int) $id); |
656
|
|
|
$this->db->set('position', $pos); |
657
|
|
|
$this->db->update('category'); |
658
|
|
|
} |
659
|
|
|
|
660
|
|
|
showMessage(lang('The position has been successfully saved', 'admin')); |
661
|
|
|
} |
662
|
|
|
} |
663
|
|
|
|
664
|
|
|
/** |
665
|
|
|
* Validation for template name field |
666
|
|
|
* @param string $tpl |
667
|
|
|
* @return bool |
668
|
|
|
*/ |
669
|
|
View Code Duplication |
public function tpl_validation($tpl) { |
670
|
|
|
if (preg_match('/^[0-9A-Za-z\_\.]{0,50}$/', $tpl)) { |
671
|
|
|
return TRUE; |
672
|
|
|
} |
673
|
|
|
$this->form_validation->set_message('tpl_validation', lang('The %s field can only contain Latin characters', 'admin')); |
674
|
|
|
return FALSE; |
675
|
|
|
} |
676
|
|
|
|
677
|
|
|
/** |
678
|
|
|
* @param int $id |
679
|
|
|
* @param string $lang |
680
|
|
|
* @return bool |
|
|
|
|
681
|
|
|
*/ |
682
|
|
|
public function translate($id, $lang) { |
683
|
|
|
$cat = $this->cms_admin->get_category($id); |
684
|
|
|
|
685
|
|
|
($hook = get_hook('admin_on_translate_cat')) ? eval($hook) : NULL; |
|
|
|
|
686
|
|
|
|
687
|
|
|
if ($this->input->post()) { |
688
|
|
|
$this->load->library('form_validation'); |
689
|
|
|
|
690
|
|
|
$this->form_validation->set_rules('name', lang('Title', 'admin'), 'trim|required|min_length[1]|max_length[160]'); |
691
|
|
|
$this->form_validation->set_rules('image', lang('Image', 'admin'), 'max_length[250]'); |
692
|
|
|
$this->form_validation->set_rules('description', lang('Description ', 'admin'), 'trim'); |
693
|
|
|
$this->form_validation->set_rules('keywords', lang('Keywords', 'admin'), 'trim'); |
694
|
|
|
$this->form_validation->set_rules('short_desc', lang('Short description', 'admin'), 'trim'); |
695
|
|
|
$this->form_validation->set_rules('title', lang('Meta title', 'admin'), 'trim|max_length[250]'); |
696
|
|
|
|
697
|
|
|
($hook = get_hook('admin_set_cat_translate_rules')) ? eval($hook) : NULL; |
|
|
|
|
698
|
|
|
|
699
|
|
|
if ($this->form_validation->run($this) == FALSE) { |
700
|
|
|
showMessage(validation_errors(), false, 'r'); |
701
|
|
|
} else { |
702
|
|
|
$data = []; |
703
|
|
|
$data['alias'] = $id; |
704
|
|
|
$data['lang'] = $lang; |
705
|
|
|
$data['name'] = $this->input->post('name'); |
706
|
|
|
$data['image'] = $this->input->post('image'); |
707
|
|
|
$data['description'] = $this->input->post('description'); |
708
|
|
|
$data['keywords'] = $this->input->post('keywords'); |
709
|
|
|
$data['short_desc'] = $this->input->post('short_desc'); |
710
|
|
|
$data['title'] = $this->input->post('title'); |
711
|
|
|
|
712
|
|
|
$this->db->where('alias', $id); |
713
|
|
|
$this->db->where('lang', $lang); |
714
|
|
|
$query = $this->db->get('category_translate'); |
715
|
|
|
|
716
|
|
|
if ($query->num_rows() == 0) { |
717
|
|
|
$this->lib_admin->log( |
718
|
|
|
lang('Translated the category', 'admin') . |
719
|
|
|
" <a href='$BASE_URL/admin/categories/edit/{$cat['id']}'>{$cat['name']}</a>" |
|
|
|
|
720
|
|
|
); |
721
|
|
|
|
722
|
|
|
($hook = get_hook('admin_insert_cat_translation')) ? eval($hook) : NULL; |
|
|
|
|
723
|
|
|
|
724
|
|
|
$this->db->insert('category_translate', $data); |
725
|
|
|
} else { |
726
|
|
|
$this->lib_admin->log( |
727
|
|
|
lang('Changed the category translation', 'admin') . |
728
|
|
|
" <a href='$BASE_URL/admin/categories/edit/{$cat['id']}'>{$cat['name']}</a>" |
729
|
|
|
); |
730
|
|
|
|
731
|
|
|
($hook = get_hook('admin_update_cat_translation')) ? eval($hook) : NULL; |
|
|
|
|
732
|
|
|
|
733
|
|
|
$this->db->where('alias', $id); |
734
|
|
|
$this->db->where('lang', $lang); |
735
|
|
|
$this->db->update('category_translate', $data); |
736
|
|
|
} |
737
|
|
|
|
738
|
|
|
$this->cache->delete_all(); |
739
|
|
|
showMessage(lang('Category translation updated', 'admin')); |
740
|
|
|
|
741
|
|
|
$active = $this->input->post('action'); |
742
|
|
|
|
743
|
|
|
if ($active == 'close') { |
744
|
|
|
pjax('/admin/categories/translate/' . $id . '/' . $lang); |
745
|
|
|
} else { |
746
|
|
|
pjax('/admin/categories/edit/' . $id); |
747
|
|
|
} |
748
|
|
|
} |
749
|
|
|
|
750
|
|
|
exit; |
751
|
|
|
} |
752
|
|
|
|
753
|
|
|
if ($cat !== FALSE) { |
754
|
|
|
// Get translated category |
755
|
|
|
$this->db->where('alias', $id); |
756
|
|
|
$this->db->where('lang', $lang); |
757
|
|
|
$query = $this->db->get('category_translate'); |
758
|
|
|
|
759
|
|
|
// Get langs |
760
|
|
|
$langs = $this->cms_base->get_langs(); |
761
|
|
|
$this->template->assign('langs', $langs); |
762
|
|
|
|
763
|
|
|
if ($query->num_rows() > 0) { |
764
|
|
|
$this->template->add_array( |
765
|
|
|
[ |
766
|
|
|
'cat' => $query->row_array(), |
767
|
|
|
] |
768
|
|
|
); |
769
|
|
|
} |
770
|
|
|
|
771
|
|
|
$this->template->add_array( |
772
|
|
|
[ |
773
|
|
|
'orig_cat' => $cat, |
774
|
|
|
'lang' => $lang, |
775
|
|
|
] |
776
|
|
|
); |
777
|
|
|
|
778
|
|
|
($hook = get_hook('admin_show_cat_translate')) ? eval($hook) : NULL; |
|
|
|
|
779
|
|
|
|
780
|
|
|
$this->template->show('cat_translate_edit', FALSE); |
781
|
|
|
} else { |
782
|
|
|
return FALSE; |
783
|
|
|
} |
784
|
|
|
} |
785
|
|
|
|
786
|
|
|
/** |
787
|
|
|
* Refresh categories in sidebar |
788
|
|
|
*/ |
789
|
|
|
public function update_block() { |
790
|
|
|
$this->template->assign('tree', $this->lib_category->build()); |
791
|
|
|
$this->template->show('cats_sidebar', FALSE); |
792
|
|
|
} |
793
|
|
|
|
794
|
|
|
/** |
795
|
|
|
* @param string $sel_id |
796
|
|
|
*/ |
797
|
|
|
public function update_fast_block($sel_id) { |
798
|
|
|
$this->template->add_array( |
799
|
|
|
[ |
800
|
|
|
'tree' => $this->lib_category->build(), |
801
|
|
|
'sel_cat' => $sel_id, |
802
|
|
|
] |
803
|
|
|
); |
804
|
|
|
|
805
|
|
|
echo lang('Category', 'admin') . ' <select name="category" ONCHANGE="change_comments_status();" id="category_selectbox"> |
806
|
|
|
<option value="0">' . lang('No', 'admin') . '</option>'; |
807
|
|
|
|
808
|
|
|
$this->template->show('cats_select', FALSE); |
809
|
|
|
|
810
|
|
|
echo '</select>'; |
811
|
|
|
} |
812
|
|
|
|
813
|
|
|
/** |
814
|
|
|
* Crete url with at least one symbol |
815
|
|
|
* @param $str |
|
|
|
|
816
|
|
|
* @return string |
817
|
|
|
*/ |
818
|
|
|
private function createUrl($str) { |
819
|
|
|
$this->load->helper('translit'); |
820
|
|
|
is_numeric($str) && $str = 'p' . $str; |
821
|
|
|
return translit_url($str); |
822
|
|
|
} |
823
|
|
|
|
824
|
|
|
} |
825
|
|
|
|
826
|
|
|
/* End of categories.php */ |
You can fix this by adding a namespace to your class:
When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.