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