1<?php 2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project 3// 4// All Rights Reserved. See copyright.txt for details and a complete list of authors. 5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. 6// $Id$ 7 8class Search_ContentSource_ArticleSource implements Search_ContentSource_Interface, Tiki_Profile_Writer_ReferenceProvider 9{ 10 private $db; 11 12 function __construct() 13 { 14 $this->db = TikiDb::get(); 15 } 16 17 function getReferenceMap() 18 { 19 return [ 20 'topic_id' => 'article_topic', 21 'article_type' => 'article_type', 22 ]; 23 } 24 25 function getDocuments() 26 { 27 return $this->db->table('tiki_articles')->fetchColumn('articleId', []); 28 } 29 30 function getDocument($objectId, Search_Type_Factory_Interface $typeFactory) 31 { 32 $artlib = TikiLib::lib('art'); 33 34 $article = $artlib->get_article($objectId, false); 35 36 if (! $article) { 37 return false; 38 } 39 40 if ($topic = $artlib->get_topic($article['topicId'])) { 41 $topic_name = $topic['name']; 42 } else { 43 $topic_name = ''; 44 } 45 46 $rss_relations = TikiLib::lib('relation')->get_object_ids_with_relations_from('article', $objectId, 'tiki.rss.source'); 47 $sitetitle = ''; 48 $siteurl = ''; 49 if ($rss_relations) { 50 $rssId = reset($rss_relations); 51 $rssModule = TikiLib::lib('rss')->get_rss_module($rssId); 52 if ($rssModule['sitetitle']) { 53 $sitetitle = $rssModule['sitetitle']; 54 } 55 if ($rssModule['siteurl']) { 56 $siteurl = $rssModule['siteurl']; 57 } 58 } 59 60 $data = [ 61 'title' => $typeFactory->sortable($article['title']), 62 'language' => $typeFactory->identifier($article['lang'] ? $article['lang'] : 'unknown'), 63 'creation_date' => $typeFactory->timestamp($article['created']), 64 'modification_date' => $typeFactory->timestamp($article['publishDate']), 65 'date' => $typeFactory->timestamp($article['publishDate']), 66 'contributors' => $typeFactory->multivalue([$article['author']]), 67 'description' => $typeFactory->plaintext($article['heading']), 68 69 'sitetitle' => $typeFactory->plaintext($sitetitle), 70 'siteurl' => $typeFactory->plaintext($siteurl), 71 72 'topic_id' => $typeFactory->identifier($article['topicId']), 73 'topic_name' => $typeFactory->plaintext($topic_name), 74 75 'article_type' => $typeFactory->identifier($article['type']), 76 'article_content' => $typeFactory->wikitext($article['body']), 77 'article_topline' => $typeFactory->wikitext($article['topline']), 78 'article_subtitle' => $typeFactory->wikitext($article['subtitle']), 79 'article_author' => $typeFactory->plaintext($article['authorName']), 80 'article_linkto' => $typeFactory->plaintext($article['linkto']), 81 82 'view_permission' => ($article['ispublished'] == 'y') ? $typeFactory->identifier('tiki_p_read_article') : $typeFactory->identifier('tiki_p_edit_article'), 83 'parent_object_type' => $typeFactory->identifier('topic'), 84 'parent_object_id' => $typeFactory->identifier($article['topicId']), 85 'parent_view_permission' => $typeFactory->identifier('tiki_p_read_topic'), 86 'published' => ($article['ispublished'] == 'y') ? $typeFactory->identifier('y') : $typeFactory->identifier('n'), 87 ]; 88 89 return $data; 90 } 91 92 function getProvidedFields() 93 { 94 return [ 95 'title', 96 'language', 97 'creation_date', 98 'modification_date', 99 'contributors', 100 'description', 101 'date', 102 103 'sitetitle', 104 'siteurl', 105 106 'topic_id', 107 'topic_name', 108 109 'article_content', 110 'article_type', 111 'article_topline', 112 'article_subtitle', 113 'article_author', 114 'article_linkto', 115 116 'view_permission', 117 'parent_view_permission', 118 'parent_object_id', 119 'parent_object_type', 120 'published', 121 ]; 122 } 123 124 function getGlobalFields() 125 { 126 return [ 127 'title' => true, 128 'description' => true, 129 'date' => true, 130 131 'article_content' => false, 132 'article_topline' => false, 133 'article_subtitle' => false, 134 'article_author' => false, 135 ]; 136 } 137} 138