/** * Move the article to the given position (i.e. reorder the article). * @param int $p_moveToPosition * @return boolean */ public function positionAbsolute($p_moveToPosition = 1) { global $g_ado_db; CampCache::singleton()->clear('user'); $this->fetch(); $g_ado_db->Execute('LOCK TABLES Articles WRITE'); // Get the article that is in the location we are moving // this one to. $queryStr = 'SELECT Number, IdLanguage, ArticleOrder FROM Articles ' .' WHERE IdPublication='.$this->m_data['IdPublication'] .' AND NrIssue='.$this->m_data['NrIssue'] .' AND NrSection='.$this->m_data['NrSection'] .' ORDER BY ArticleOrder ASC LIMIT '.($p_moveToPosition - 1).', 1'; $destRow = $g_ado_db->GetRow($queryStr); if (!$destRow) { $g_ado_db->Execute('UNLOCK TABLES'); return false; } if ($destRow['ArticleOrder'] == $this->m_data['ArticleOrder']) { $g_ado_db->Execute('UNLOCK TABLES'); // Move the destination down one. $destArticle = new Article($destRow['IdLanguage'], $destRow['Number']); $destArticle->positionRelative("down", 1); return true; } if ($destRow['ArticleOrder'] > $this->m_data['ArticleOrder']) { $operator = '-'; } else { $operator = '+'; } // Reorder all the other articles in this section $minArticleOrder = min($destRow['ArticleOrder'], $this->m_data['ArticleOrder']); $maxArticleOrder = max($destRow['ArticleOrder'], $this->m_data['ArticleOrder']); $queryStr = 'UPDATE Articles ' .' SET ArticleOrder = ArticleOrder '.$operator.' 1 ' .' WHERE IdPublication='.$this->m_data['IdPublication'] .' AND NrIssue='.$this->m_data['NrIssue'] .' AND NrSection='.$this->m_data['NrSection'] .' AND ArticleOrder >= '.$minArticleOrder .' AND ArticleOrder <= '.$maxArticleOrder; $g_ado_db->Execute($queryStr); // Reposition this article. $queryStr = 'UPDATE Articles ' .' SET ArticleOrder='.$destRow['ArticleOrder'] .' WHERE IdPublication='.$this->m_data['IdPublication'] .' AND NrIssue='.$this->m_data['NrIssue'] .' AND NrSection='.$this->m_data['NrSection'] .' AND Number='.$this->m_data['Number']; $g_ado_db->Execute($queryStr); $g_ado_db->Execute('UNLOCK TABLES'); CampCache::singleton()->clear('user'); $this->m_cacheUpdate = true; $this->fetch(); return true; } // fn positionAbsolute
$sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); if (!$sectionObj->exists()) { camp_html_display_error(getGS('Section does not exist.')); exit; } $articleObj = new Article($f_article_language, $f_article_number); if (!$articleObj->exists()) { camp_html_display_error(getGS('Article does not exist.')); exit; } switch ($f_move) { case 'up_rel': $articleObj->positionRelative('up', 1); break; case 'down_rel': $articleObj->positionRelative('down', 1); break; case 'abs': $articleObj->positionAbsolute($f_position); break; default: ; } $url = "/$ADMIN/articles/index.php" ."?f_publication_id=".$articleObj->getPublicationId() ."&f_issue_number=".$articleObj->getIssueNumber() ."&f_section_number=".$articleObj->getSectionNumber() ."&f_article_number=".$articleObj->getArticleNumber()