/** * Create a copy of the article, but make it a translation * of the current one. * * @param int $p_languageId * @param int $p_userId * @param string $p_name * @return Article */ public function createTranslation($p_languageId, $p_userId, $p_name) { // Construct the duplicate article object. $articleCopy = new Article(); $articleCopy->m_data['IdPublication'] = $this->m_data['IdPublication']; $articleCopy->m_data['NrIssue'] = $this->m_data['NrIssue']; $articleCopy->m_data['NrSection'] = $this->m_data['NrSection']; $articleCopy->m_data['IdLanguage'] = $p_languageId; $articleCopy->m_data['Number'] = $this->m_data['Number']; $values = array(); // Copy some attributes $values['ShortName'] = $this->m_data['ShortName']; $values['Type'] = $this->m_data['Type']; $values['OnFrontPage'] = $this->m_data['OnFrontPage']; $values['OnSection'] = $this->m_data['OnFrontPage']; $values['Public'] = $this->m_data['Public']; $values['ArticleOrder'] = $this->m_data['ArticleOrder']; $values['comments_enabled'] = $this->m_data['comments_enabled']; $values['comments_locked'] = $this->m_data['comments_locked']; // Change some attributes $values['Name'] = $p_name; $values['Published'] = 'N'; $values['IsIndexed'] = 'N'; $values['LockUser'] = 0; $values['LockTime'] = 0; $values['IdUser'] = $p_userId; // Create the record $success = $articleCopy->__create($values); if (!$success) { return false; } $articleCopy->setProperty('UploadDate', 'NOW()', true, true); // Insert an entry into the article type table. $articleCopyData = new ArticleData($articleCopy->m_data['Type'], $articleCopy->m_data['Number'], $articleCopy->m_data['IdLanguage']); $articleCopyData->create(); $origArticleData = $this->getArticleData(); $origArticleData->copyToExistingRecord($articleCopy->getArticleNumber(), $p_languageId); if (function_exists("camp_load_translation_strings")) { camp_load_translation_strings("api"); } $logtext = getGS('Article translated to "$4" ($5)', $articleCopy->getTitle(), $articleCopy->getLanguageName()); Log::ArticleMessage($this, $logtext, null, 31); // geo-map processing Geo_Map::OnCreateTranslation($this->m_data['Number'], $this->m_data['IdLanguage'], $p_languageId); return $articleCopy; } // fn createTranslation
/** * Create a copy of the article, but make it a translation * of the current one. * * @param int $p_languageId * @param int $p_userId * @param string $p_name * @return Article */ public function createTranslation($p_languageId, $p_userId, $p_name) { $translator = \Zend_Registry::get('container')->getService('translator'); // Construct the duplicate article object. $articleCopy = new Article(); $articleCopy->m_data['IdPublication'] = $this->m_data['IdPublication']; $articleCopy->m_data['NrIssue'] = $this->m_data['NrIssue']; $articleCopy->m_data['NrSection'] = $this->m_data['NrSection']; $articleCopy->m_data['IdLanguage'] = $p_languageId; $articleCopy->m_data['Number'] = $this->m_data['Number']; $values = array(); // Copy some attributes $values['ShortName'] = $this->m_data['ShortName']; $values['Type'] = $this->m_data['Type']; $values['OnFrontPage'] = $this->m_data['OnFrontPage']; $values['OnSection'] = $this->m_data['OnFrontPage']; $values['Public'] = $this->m_data['Public']; $values['ArticleOrder'] = $this->m_data['ArticleOrder']; $values['comments_enabled'] = $this->m_data['comments_enabled']; $values['comments_locked'] = $this->m_data['comments_locked']; $values['rating_enabled'] = $this->m_data['rating_enabled']; // Change some attributes $values['Name'] = $p_name; $values['Published'] = 'N'; $values['IsIndexed'] = 'N'; $values['IdUser'] = $p_userId; // Create the record $success = $articleCopy->__create($values); if (!$success) { return false; } $articleCopy->setProperty('UploadDate', 'NOW()', true, true); $articleCopy->setProperty('LockUser', 'NULL', true, true); $articleCopy->setProperty('LockTime', 'NULL', true, true); // Insert an entry into the article type table. $articleCopyData = new ArticleData($articleCopy->m_data['Type'], $articleCopy->m_data['Number'], $articleCopy->m_data['IdLanguage']); $articleCopyData->create(); $origArticleData = $this->getArticleData(); $origArticleData->copyToExistingRecord($articleCopy->getArticleNumber(), $p_languageId); $logtext = $translator->trans('Article translated to $4 ($5)', array('$4' => $articleCopy->getTitle(), '$5' => $articleCopy->getLanguageName()), 'api'); Log::ArticleMessage($this, $logtext, null, 31); // geo-map processing Geo_Map::OnCreateTranslation($this->m_data['Number'], $this->m_data['IdLanguage'], $p_languageId); return $articleCopy; }
/** * Process item * @param Article $article * @return array */ public function processItem(Article $article) { global $g_user, $Campsite; $articleLinkParams = '?f_publication_id=' . $article->getPublicationId() . '&f_issue_number=' . $article->getIssueNumber() . '&f_section_number=' . $article->getSectionNumber() . '&f_article_number=' . $article->getArticleNumber() . '&f_language_id=' . $article->getLanguageId() . '&f_language_selected=' . $article->getLanguageId(); $articleLinkParamsTranslate = $articleLinkParams . '&f_action=translate&f_action_workflow=' . $article->getWorkflowStatus() . '&f_article_code=' . $article->getArticleNumber() . '_' . $article->getLanguageId(); $articleLink = $Campsite['WEBSITE_URL'] . '/admin/articles/edit.php' . $articleLinkParams; $previewLink = $Campsite['WEBSITE_URL'] . '/admin/articles/preview.php' . $articleLinkParams; $htmlPreviewLink = '<a href="' . $previewLink . '" target="_blank" title="' . getGS('Preview') . '">' . getGS('Preview') . '</a>'; $translateLink = $Campsite['WEBSITE_URL'] . '/admin/articles/translate.php' . $articleLinkParamsTranslate; $htmlTranslateLink = '<a href="' . $translateLink . '" target="_blank" title="' . getGS('Translate') . '">' . getGS('Translate') . '</a>'; $lockInfo = ''; $lockHighlight = false; $timeDiff = camp_time_diff_str($article->getLockTime()); if ($article->isLocked() && $timeDiff['days'] <= 0) { $lockUser = new User($article->getLockedByUser()); if ($timeDiff['hours'] > 0) { $lockInfo = getGS('The article has been locked by $1 ($2) $3 hour(s) and $4 minute(s) ago.', htmlspecialchars($lockUser->getRealName()), htmlspecialchars($lockUser->getUserName()), $timeDiff['hours'], $timeDiff['minutes']); } else { $lockInfo = getGS('The article has been locked by $1 ($2) $3 minute(s) ago.', htmlspecialchars($lockUser->getRealName()), htmlspecialchars($lockUser->getUserName()), $timeDiff['minutes']); } if ($article->getLockedByUser() != $g_user->getUserId()) { $lockHighlight = true; } } $tmpUser = new User($article->getCreatorId()); $tmpArticleType = new ArticleType($article->getType()); $tmpAuthor = new Author(); $articleAuthors = ArticleAuthor::GetAuthorsByArticle($article->getArticleNumber(), $article->getLanguageId()); foreach ((array) $articleAuthors as $author) { if (strtolower($author->getAuthorType()->getName()) == 'author') { $tmpAuthor = $author; break; } } if (!$tmpAuthor->exists() && isset($articleAuthors[0])) { $tmpAuthor = $articleAuthors[0]; } $onFrontPage = $article->onFrontPage() ? getGS('Yes') : getGS('No'); $onSectionPage = $article->onSectionPage() ? getGS('Yes') : getGS('No'); $imagesNo = (int) ArticleImage::GetImagesByArticleNumber($article->getArticleNumber(), true); $topicsNo = (int) ArticleTopic::GetArticleTopics($article->getArticleNumber(), true); $commentsNo = ''; if ($article->commentsEnabled()) { global $controller; $repositoryComments = $controller->getHelper('entity')->getRepository('Newscoop\\Entity\\Comment'); $filter = array('thread' => $article->getArticleNumber(), 'language' => $article->getLanguageId()); $params = array('sFilter' => $filter); $commentsNo = $repositoryComments->getCount($params); } else { $commentsNo = 'No'; } // get language code $language = new Language($article->getLanguageId()); return array($article->getArticleNumber(), $article->getLanguageId(), $article->getOrder(), sprintf('%s <a href="%s" title="%s %s">%s</a>', $article->isLocked() ? '<span class="ui-icon ui-icon-locked' . (!$lockHighlight ? ' current-user' : '') . '" title="' . $lockInfo . '"></span>' : '', $articleLink, getGS('Edit'), htmlspecialchars($article->getName() . " ({$article->getLanguageName()})"), htmlspecialchars($article->getName() . (empty($_REQUEST['language']) ? " ({$language->getCode()})" : ''))), htmlspecialchars($article->getSection()->getName()), $article->getWebcode(), htmlspecialchars($tmpArticleType->getDisplayName()), htmlspecialchars($tmpUser->getRealName()), htmlspecialchars($tmpAuthor->getName()), $article->getWorkflowStatus(), $onFrontPage, $onSectionPage, $imagesNo, $topicsNo, $commentsNo, (int) $article->getReads(), Geo_Map::GetArticleMapId($article) != NULL ? getGS('Yes') : getGS('No'), (int) sizeof(Geo_Map::GetLocationsByArticle($article)), $article->getCreationDate(), $article->getPublishDate(), $article->getLastModified(), $htmlPreviewLink, $htmlTranslateLink); }
/** * Log article related event. * * @param Article $p_article * @param string $p_text * @param int $p_userId * @param int $p_eventId * @param bool $p_short * * @return void */ public static function ArticleMessage(Article $p_article, $p_text, $p_userId = NULL, $p_eventId = 0, $p_short = FALSE) { ob_start(); echo getGS('Article'), ': ', $p_article->getTitle(); if (!$p_short) { // add publication, issue, section echo ' ('; echo getGS('Publication'), ': ', $p_article->getPublicationId(); echo ', '; echo getGS('Issue'), ': ', $p_article->getIssueNumber(); echo ', '; echo getGS('Section'), ': ', $p_article->getSectionNumber(); echo ")\n"; } // generate url $url = ShortURL::GetURL($p_article->getPublicationId(), $p_article->getLanguageId(), $p_article->getIssueNumber(), $p_article->getSectionNumber(), $p_article->getArticleNumber()); if (strpos($url, 'http') !== FALSE) { // no url for deleted echo getGS('Article URL'), ': ', $url, "\n"; } echo getGS('Article Number'), ': ', $p_article->getArticleNumber(), "\n"; echo getGS('Language'), ': ', $p_article->getLanguageName(), "\n"; echo "\n"; echo getGS('Action') . ': ', $p_text; $message = ob_get_clean(); self::Message($message, $p_userId, $p_eventId); }
/** * Log article related event. * * @param Article $p_article * @param string $p_text * @param int $p_userId * @param int $p_eventId * @param bool $p_short * * @return void */ public static function ArticleMessage(Article $p_article, $p_text, $p_userId = NULL, $p_eventId = 0, $p_short = FALSE) { ob_start(); $translator = \Zend_Registry::get('container')->getService('translator'); echo $translator->trans('Article'), ': ', $p_article->getTitle(); if (!$p_short) { // add publication, issue, section echo ' ('; echo $translator->trans('Publication'), ': ', $p_article->getPublicationId(); echo ', '; echo $translator->trans('Issue'), ': ', $p_article->getIssueNumber(); echo ', '; echo $translator->trans('Section'), ': ', $p_article->getSectionNumber(); echo ")\n"; } // generate url $url = ShortURL::GetURL($p_article->getPublicationId(), $p_article->getLanguageId(), $p_article->getIssueNumber(), $p_article->getSectionNumber(), $p_article->getArticleNumber()); if (strpos($url, 'http') !== FALSE) { // no url for deleted echo $translator->trans('Article URL', array(), 'api'), ': ', $url, "\n"; } echo $translator->trans('Article Number', array(), 'api'), ': ', $p_article->getArticleNumber(), "\n"; echo $translator->trans('Language'), ': ', $p_article->getLanguageName(), "\n"; echo "\n"; echo $translator->trans('Action') . ': ', $p_text; $message = ob_get_clean(); self::Message(substr($message, 0, 254), $p_userId, $p_eventId); }