/** * @param string[] $tags * @return void */ public function registerTags($tags) { $tags = explode(',', $tags); foreach ($tags as $tag_name) { $tag = NewsTag::get("NewsTag", "Tag = '" . $tag_name . "'")->first(); if (!$tag) { $tag = new NewsTag(); $tag->Tag = $tag_name; $tag->write(); } $this->addTag($tag); } }
/** * List of News tags used by articles in this section * @return DataList **/ public function getTagList() { $articleIDs = $this->getArticleList()->column('ID'); $articleIDs = implode(',', $articleIDs); $tags = NewsTag::get()->innerJoin('NewsArticle_Tags', '"NewsTag"."ID"="NewsArticle_Tags"."NewsTagID"')->where("\"NewsArticle_Tags\".\"NewsArticleID\" IN ({$articleIDs})")->sort('Title'); return $tags; }
/** * @return bool|void * @internal Il y a un 'implicit' commit de MySQL sur le create table * @see http://dev.mysql.com/doc/refman/5.1/en/implicit-commit.html */ public function up() { // Ajout de la colonne tag.language_id $this->addColumn('tag', 'language_id', 'INT(10) UNSIGNED NOT NULL DEFAULT 1 AFTER id'); $this->addForeignKey('fk_language_id_tag', 'tag', 'language_id', 'language', 'id', 'cascade', 'cascade'); $this->dropIndex('tag_index_name', 'tag'); $this->createIndex('tag_index_name', 'tag', 'name, language_id', true); // Ajout de la table translated_news introduisant la version multilingue des textes $this->createTable('translated_news', array('id' => 'int(10) UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY', 'news_id' => 'int(10) UNSIGNED NOT NULL', 'language_id' => 'int(10) UNSIGNED NOT NULL', 'title' => 'varchar(255) NOT NULL', 'slug' => 'varchar(255) NOT NULL', 'description' => 'varchar(255)', 'keywords' => 'varchar(255)', 'content' => 'text', 'created_at' => 'datetime NOT NULL', 'updated_at' => 'datetime NOT NULL'), 'ENGINE = InnoDB'); // clés dans translated_news $this->addForeignKey('fk_news_id_translated_news', 'translated_news', 'news_id', 'news', 'id', 'cascade', 'cascade'); $this->addForeignKey('fk_language_id_translated_news', 'translated_news', 'language_id', 'language', 'id', 'restrict', 'cascade'); $this->createIndex('idx_title_translated_news', 'translated_news', 'title'); $this->createIndex('idx_slug_translated_news', 'translated_news', 'slug', true); // Ajout de la table d'association translated_news_has_tag $this->createTable('translated_news_has_tag', array('translated_news_id' => 'INT(10) UNSIGNED NOT NULL', 'tag_id' => 'INT(10) UNSIGNED NOT NULL'), 'ENGINE = InnoDB'); // clés dans translated_news_has_tag $this->addPrimaryKey('PRIMARY', 'translated_news_has_tag', 'translated_news_id, tag_id'); $this->addForeignKey('fk_translated_news_id_translated_news_has_tag', 'translated_news_has_tag', 'translated_news_id', 'translated_news', 'id', 'cascade', 'cascade'); $this->addForeignKey('fk_tag_id_translated_news_has_tag', 'translated_news_has_tag', 'tag_id', 'tag', 'id', 'cascade', 'cascade'); // Copie des textes depuis news vers translated_news /** @var $news News */ foreach (News::model()->findAll() as $news) { $translated = new TranslatedNews(); $translated->news_id = $news->id; $translated->language_id = $news->language_id ? $news->language_id : 1; $translated->title = $news->title; $translated->slug = $news->slug; $translated->description = $news->description; $translated->content = $news->content; $translated->created_at = $news->created_at; $translated->updated_at = $news->updated_at; if (!$translated->save()) { echo "\nErreur sur save() pour la migration de la news {$news->id}\n"; } } // Migration de news_tag vers translated_news_has_tags /** @var $translation TranslatedNews */ foreach (TranslatedNews::model()->findAll() as $translation) { /** @var $oldAsso NewsTag */ // On récupère la news associée à chaque traduction : c'est l'id de cette news qui donne les tags dans news_tag // les news en anglais n'ont pas de tags, on corrige ça à la main foreach (NewsTag::model()->findAllByAttributes(array('news_id' => $translation->news_id)) as $oldAsso) { $newAsso = new TranslatedNewsHasTag(); $newAsso->tag_id = $oldAsso->tag_id; $newAsso->translated_news_id = $translation->id; if (!$newAsso->save()) { echo "Erreur sur newAsso->save() pour translated_news_id = {$translation->id} / tag_id = {$oldAsso->tag_id}\n"; } // NB : on ne met par tag.language_id à jour car actuellement, plusieurs tags sont utilisés en fr et en en : // PHP, JQuery, etc... } } echo "\nPasser le champ language_id a anglais pour les news en anglais\n"; echo "Faire pointer les news traduites et les news originales vers la meme news de base\n"; echo "Penser a corriger les tags pour les articles en anglais\n"; echo "A faire apres : nettoyer la table news et supprimer comments\n"; }
/** * Edit the cms fields in the CMS * * @return FieldList */ public function getCMSFields() { $fields = parent::getCMSFields(); $fields->addFieldToTab('Root.Main', DateField::create('DatePublished', 'Enter a published date')->setConfig('dateformat', 'dd-MM-yyyy')->setConfig('dmyseparator', ' ')->setConfig('showcalendar', true)); $fields->addFieldToTab('Root.Main', $uploadField = new UploadField($name = 'ArticleSummaryImage', $title = 'Upload an article summary image')); $fields->addFieldToTab('Root.Main', new HTMLEditorField('Summary', 'Summary')); $tagfield = TagField::create('NewsTags', 'News Tags', NewsTag::get(), $this->NewsTags())->setShouldLazyLoad(true)->setCanCreate(true); $fields->addFieldToTab('Root.Main', $tagfield); return $fields; }
/** * getCMSFields * @return FieldList **/ public function getCMSFields() { $fields = parent::getCMSFields(); $fields->dataFieldByName('Title')->setTitle('Article Title'); $fields->dataFieldByName('Content')->setTitle('Article Content'); $config = $this->config(); // publish date $fields->addFieldToTab('Root.Main', DateField::create('PublishDate')->setAttribute('placeholder', $this->dbObject('Created')->Format('M d, Y')), 'Content'); // tags if ($config->enable_tags) { $tagSource = function () { return NewsTag::get()->map()->toArray(); }; $fields->addFieldToTab('Root.Main', ListboxField::create('Tags', 'Tags', $tagSource(), null, null, true)->useAddnew('NewsTag', $tagSource), 'Content'); } // author if ($config->author_mode == 'string') { $fields->addFieldToTab('Root.Main', TextField::create('Author', 'Author'), 'Content'); } if ($config->author_mode == 'object') { $authorSource = function () { return NewsAuthor::get()->map('ID', 'Name')->toArray(); }; $fields->addFieldToTab('Root.Main', DropdownField::create('NewsAuthorID', 'Author', $authorSource())->useAddNew('NewsAuthor', $authorSource)->setHasEmptyDefault(true), 'Content'); } // featured if ($config->enable_featured_articles) { $fields->addFieldToTab('Root.Main', CheckboxField::create('Featured', _t('NewsArticle.FEATURED', 'Feature this article')), 'Content'); } // images if ($config->enable_images) { $fields->addFieldToTab('Root.FilesAndImages', UploadField::create('Image')->setAllowedFileCategories('image')->setAllowedMaxFileNumber(1)->setFolderName($config->get('image_folder'))); } // attachments if ($config->enable_attachments) { $fields->addFieldToTab('Root.FilesAndImages', UploadField::create('Attachment')->setAllowedFileCategories('doc')->setAllowedMaxFileNumber(1)->setFolderName($config->get('attachment_folder'))); } // summary if ($config->enable_summary) { $fields->addFieldToTab('Root.Main', HTMLEditorField::create('Summary', 'Article Summary'), 'Content'); } // parent $holders = NewsHolder::get(); if ($holders->count() > 1) { $fields->addFieldToTab('Root.Main', DropdownField::create('ParentID', 'News Section', $holders->map()->toArray()), 'Title'); } else { $fields->addFieldToTab('Root.Main', HiddenField::create('ParentID', 'News Section', $holders->first()->ID), 'Title'); } $this->extend('updateArticleCMSFields', $fields); return $fields; }
public function show($id = null) { $tag = self::load_tag($id); $this->assign("tag", $tag); $page = 1; if (isset($_GET['page'])) { $page = $_GET['page']; } $tag_id = mysql_real_escape_string($tag->id); $news = NewsTag::paginate("tags.id = '{$tag_id}'", $page, 10); $items = array(); foreach ($news->collection as $newsitem) { $items[] = News::find_by_id($newsitem->news->id); } $news->collection = $items; $this->assign("page", $news); $this->title = "View Tag"; $this->render("tag/show.tpl"); }
public function Index() { $this->layout = 'homepage'; $content = Content::find_by_permalink("index"); $nextEvent = Event::next_event(); $news = array(); if ($nextEvent) { $permalink = mysql_real_escape_string($nextEvent->permalink); $newsTags = NewsTag::find_all("news.publish_at <= NOW() AND news.published AND tags.permalink = '{$permalink}'", "news.publish_at DESC", 3); foreach ($newsTags as $tag) { $tag->news->reload(); $news[] = $tag->news; } } $this->assign("news", $news); $this->assign("content", $content); $this->assign("next_event", $nextEvent); global $config; $this->assign("baseurl", $config['forums']['base_url']); $this->render("home/index.tpl"); }
public function tags($tag = null) { $tag = self::load_tag($tag); $page = 1; if (isset($_GET['page'])) { $page = $_GET['page']; } $tag_id = mysql_real_escape_string($tag->id); $news = NewsTag::paginate("tags.id = '{$tag_id}' AND news.published = true AND news.publish_at < NOW()", "news.publish_at DESC", $page, 10); $items = array(); foreach ($news->collection as $newsitem) { $item = News::find_by_id($newsitem->news->id); if (!$item) { continue; } $items[] = $item; } $news->collection = $items; $this->assign("page", $news); $this->assign("tag", $tag); $this->title = "News :: {$tag->tag}"; $this->render("news/tags.tpl"); }
public function news($reload = false) { if ($reload or !$this->news_cache) { $id = mysql_real_escape_string($this->id); $this->news_cache = NewsTag::find_all("news_tags.tag_id = '{$id}'"); } return $this->news_cache; }
public function add_tag($tagname) { $tag = Tag::create_tag($tagname); $newstag = new NewsTag(); $newstag->news_id = $this->id; $newstag->tag_id = $tag->id; $newstag->save(); }