public function extended_save_categories($params)
{
if ($this->extended_save_has_permission()) {
event_trigger('mw.database.extended_save_categories', $params);
$data_to_save = $params;
$cats_modified = false;
if (isset($data_to_save['categories'])) {
if (is_string($data_to_save['categories'])) {
$data_to_save['categories'] = explode(',', $data_to_save['categories']);
}
$categories = $data_to_save['categories'];
if (is_array($categories)) {
$save_cat_item = array();
$save_cat_item['rel_type'] = $data_to_save['table'];
$save_cat_item['rel_id'] = $data_to_save['id'];
$save_cat_item['data_type'] = 'category';
$check = $this->app->category_manager->get_items($save_cat_item);
if (is_array($check) and !empty($check)) {
foreach ($check as $item) {
if (!in_array($item['parent_id'], $categories) and !array_search($item['parent_id'], $categories)) {
$this->app->category_manager->delete_item($item['id']);
}
}
}
$cats_modified = true;
foreach ($categories as $category) {
if ((is_string($category) or is_int($category)) and intval($category) != 0) {
$save_cat_item = array();
$save_cat_item['rel_type'] = $data_to_save['table'];
$save_cat_item['rel_id'] = $data_to_save['id'];
$save_cat_item['parent_id'] = $category;
$check = $this->app->category_manager->get_items($save_cat_item);
if ($check == false) {
$this->app->category_manager->save_item($save_cat_item);
}
} elseif (is_array($category)) {
$cat_id = false;
if (isset($category['title']) and isset($data_to_save['id'])) {
$save_cat_item = array();
$save_cat_item['single'] = true;
$save_cat_item['rel_type'] = $data_to_save['table'];
if (isset($data_to_save['parent'])) {
$save_cat_item['rel_id'] = $data_to_save['parent'];
} else {
$save_cat_item['rel_id'] = $data_to_save['id'];
}
$save_cat_item['title'] = $category['title'];
if (isset($category['parent_id'])) {
$save_cat_item['parent_id'] = $category['parent_id'];
}
$check = $this->app->category_manager->get($save_cat_item);
if ($check == false) {
$category['parent_id'] = $cat_id = $this->app->category_manager->save($save_cat_item);
} elseif (isset($check['id'])) {
$cat_id = $check['id'];
$category['parent_id'] = $cat_id;
}
}
if ($cat_id != false) {
$save_cat_item = array();
$save_cat_item['rel_type'] = $data_to_save['table'];
$save_cat_item['rel_id'] = $data_to_save['id'];
if (isset($category['parent_id'])) {
$save_cat_item['parent_id'] = $category['parent_id'];
}
$check = $this->app->category_manager->get_items($save_cat_item);
if ($check == false) {
$save_item = $this->app->category_manager->save_item($save_cat_item);
}
}
}
}
}
}
if ($cats_modified != false) {
$this->app->cache_manager->delete('categories');
$this->app->cache_manager->delete('categories_items');
}
}
}