/** * Link an article to a page * Called by XHR : ION.linkArticleToPage() * Slightly the same as add_parent() but callbacks are different. * * */ public function link_to_page() { if (!Authority::can('move', 'admin/article')) { $this->error(lang('permission_denied')); } $id_page = $this->input->post('id_page'); $id_article = $this->input->post('id_article'); $id_page_origin = $this->input->post('id_page_origin'); $copy = $this->input->post('copy'); if (!empty($id_page) && !empty($id_article)) { // Get the original context $original_context = $this->article_model->get_context($id_article, $id_page_origin); // Clean of context : On copy if ($copy) { $original_context['online'] = '0'; $original_context['main_parent'] = '0'; } // Ordering : last position $original_context['ordering'] = $this->_get_ordering('last', $id_page); if ($this->article_model->link_to_page($id_page, $id_article, $original_context) === TRUE) { // Clear the cache Cache()->clear_cache(); // Get the page, menu and articles details for the JSON answer $page = $this->page_model->get_by_id($id_page, Settings::get_lang('default')); $page['id_article'] = $id_article; $menu = $this->menu_model->get_from_page($id_page); // Articles $articles = $this->article_model->get_lang_list(array('id_article' => $id_article, 'id_page' => $id_page), Settings::get_lang('default')); // Context : To get the inserted context $inserted_context = $this->article_model->get_context($id_article, $id_page, Settings::get_lang('default')); // Set the article $article = array(); if (!empty($articles)) { $article = $articles[0]; $article['title'] = htmlspecialchars_decode($article['title'], ENT_QUOTES); // Correct online information $article['online'] = $inserted_context['online']; // Used by JS Tree to detect if article is inserted in tree or not $article['inserted'] = TRUE; } $this->callback = array(array('fn' => 'ION.addPageToArticleParentListDOM', 'args' => $page), array('fn' => $menu['name'] . 'Tree.insertElement', 'args' => array($article, 'article')), array('fn' => 'ION.reloadPageArticleList', 'args' => $id_page), array('fn' => 'ION.removeArticleFromOrphan', 'args' => $article)); // Article moved ? if ($copy == FALSE && $id_page_origin != FALSE) { // Check and correct content of other articles if they refers to this one from their content $this->article_model->correct_internal_links($id_article, $id_page_origin, $id_page); // Unlink from first parent : Corrects also the main parent $affected_rows = $this->article_model->unlink($id_article, $id_page_origin); $ordering = $this->article_model->get_articles_ordering($id_page_origin); $this->article_model->save_ordering($ordering, 'page', $id_page_origin); $this->callback[] = array('fn' => 'ION.unlinkArticleFromPageDOM', 'args' => array('id_page' => $id_page_origin, 'id_article' => $id_article)); $this->callback[] = array('fn' => 'ION.notification', 'args' => array('success', lang('ionize_message_article_moved'))); } else { $this->callback[] = array('fn' => 'ION.notification', 'args' => array('success', lang('ionize_message_article_linked_to_page'))); } // Context update $this->update_contexts($id_article); $this->response(); } } }