/[drupal]/contributions/modules/rdf/rdf.views.inc
ViewVC logotype

Contents of /contributions/modules/rdf/rdf.views.inc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.12 - (show annotations) (download) (as text)
Tue Sep 1 06:03:17 2009 UTC (2 months, 3 weeks ago) by arto
Branch: MAIN
CVS Tags: HEAD
Changes since 1.11: +1 -1 lines
File MIME type: text/x-php
Implemented an admin-configurable RDF mapping and token substitution value for author names in RDF feeds.
1 <?php
2 // $Id: rdf.views.inc,v 1.9 2009/03/28 02:37:22 arto Exp $
3
4 //////////////////////////////////////////////////////////////////////////////
5 // Views API hooks
6
7 /**
8 * Implementation of hook_views_plugins().
9 */
10 function rdf_views_plugins() {
11 return array(
12 // Style plugins
13 'style' => array(
14 'rdf' => array(
15 'title' => t('RDF Feed'),
16 'help' => t('Generates an RSS 1.0-compatible RDF feed from a view.'),
17 'handler' => 'views_plugin_style_rdf',
18 'path' => drupal_get_path('module', 'rdf') . '/contrib/rdf_views',
19 'uses row plugin' => TRUE,
20 'uses options' => TRUE,
21 'type' => 'feed',
22 'help topic' => 'style-rss',
23 ),
24 ),
25
26 // Row plugins
27 'row' => array(
28 'node_rdf' => array(
29 'title' => t('Node (RDF)'),
30 'help' => t('Outputs the node as an RDF 1.0-compatible RDF resource.'),
31 'handler' => 'views_plugin_row_node_rdf',
32 'path' => drupal_get_path('module', 'rdf') . '/contrib/rdf_views',
33 'base' => array('node'), // only works with 'node' as base.
34 'uses options' => TRUE,
35 'type' => 'feed',
36 'help topic' => 'style-node-rss',
37 ),
38 ),
39 );
40 }
41
42 /**
43 * Implementation of hook_views_data()
44 */
45 function rdf_views_data() {
46 $data = array(
47 'rdf_resources' => array(
48 // Table info.
49 'table' => array(
50 'group' => t('RDF'),
51 'base' => array(
52 'field' => 'rid',
53 'title' => t('RDF'),
54 'help' => t('RDF meta-data.'),
55 'weight' => 0,
56 ),
57 ),
58 // Fields.
59 'uri' => array(
60 'title' => t('URI'),
61 'help' => t('The URI of the RDF resource'),
62 'field' => array('handler' => 'views_handler_field'),
63 'filter' => array('handler' => 'views_handler_filter_boolean_operator'),
64 ),
65 ),
66 );
67
68 foreach (rdf_get_tables() as $name => $table) {
69 $info = rdf_get_repository($name);
70 $data[$table] = array(
71 // Table info.
72 'table' => array(
73 'group' => t('@table', array('@table' => $info->title)),
74 'join' => array(
75 'rdf_resources' => array(
76 'left_field' => 'rid',
77 'field' => 'sid',
78 ),
79 ),
80 ),
81 // Fields.
82 /* TODO: 'oid', 'tid', 'lang' */
83 'sid' => array(
84 'title' => t('Subject'),
85 'help' => t("Subject of the RDF statement."),
86 'field' => array('handler' => 'views_handler_field'),
87 ),
88 'uid' => array(
89 'title' => t('User'),
90 'help' => t("User who created statement."),
91 'field' => array('handler' => 'views_handler_field'),
92 'relationship' => array(
93 'handler' => 'views_handler_relationship',
94 'base' => 'users',
95 'field' => 'uid',
96 'label' => t('user'),
97 ),
98 ),
99 'created' => array(
100 'title' => t('Created'),
101 'help' => t("Timestamp of the statement."),
102 'field' => array('handler' => 'views_handler_field_date'),
103 'filter' => array('handler' => 'views_handler_filter_date'),
104 ),
105 'data' => array(
106 'title' => t('Object'),
107 'help' => t('RDF Object literal'),
108 'field' => array('handler' => 'views_handler_field_rdf_literal'),
109 'relationship' => array(
110 'handler' => 'views_handler_relationship',
111 'base' => 'rdf_resources',
112 'base field' => 'uri',
113 'field' => 'data',
114 'label' => t('@table Resources', array('@table' => $info->title)),
115 ),
116 ),
117 );
118 // Add predicate and named graph fields differently as we need to refer back
119 // to rdf_resources to pull usable values.
120 $data[$table .'_predicate']['table'] = array(
121 'group' => t('@table', array('@table' => $info->title)),
122 'join' => array(
123 'rdf_resources' => array(
124 'left_table' => $table,
125 'left_field' => 'pid',
126 'table' => 'rdf_resources',
127 'field' => 'rid',
128 ),
129 ),
130 );
131 $data[$table .'_predicate']['uri'] = array(
132 'title' => t('Predicate'),
133 'help' => t("The RDF statement's predicate."),
134 'field' => array('handler' => 'views_handler_field'),
135 'filter' => array('handler' => 'views_handler_filter_rdf_predicate'),
136 );
137 $data[$table .'_context']['table'] = array(
138 'group' => t('@table', array('@table' => $info->title)),
139 'join' => array(
140 'rdf_resources' => array(
141 'left_table' => $table,
142 'left_field' => 'gid',
143 'table' => 'rdf_resources',
144 'field' => 'rid',
145 ),
146 ),
147 );
148 $data[$table .'_context']['uri'] = array(
149 'title' => t('Named graph'),
150 'help' => t("The RDF statement's named graph."),
151 'field' => array('handler' => 'views_handler_field'),
152 'filter' => array('handler' => 'views_handler_filter_rdf_context'),
153 );
154 }
155 return $data;
156 }
157
158 function rdf_views_handlers() {
159 return array(
160 'info' => array('path' => drupal_get_path('module', 'rdf') . '/contrib/rdf_views'),
161 'handlers' => array(
162 'views_handler_filter_rdf_predicate' => array(
163 'parent' => 'views_handler_filter_in_operator',
164 ),
165 'views_handler_filter_rdf_context' => array(
166 'parent' => 'views_handler_filter_in_operator',
167 ),
168 'views_handler_field_rdf_literal' => array(
169 'parent' => 'views_handler_field',
170 ),
171 ),
172 );
173 }
174
175 //////////////////////////////////////////////////////////////////////////////
176
177 function rdf_views_get_feeds() {
178 $result = db_query("SELECT v.*, vd.* FROM {views_display} vd LEFT JOIN {views_view} v ON vd.vid = v.vid WHERE vd.display_plugin = 'feed'");
179 $feeds = array();
180 while ($row = db_fetch_object($result)) {
181 $row->display_options = unserialize($row->display_options);
182 if (isset($row->display_options['style_plugin']) && $row->display_options['style_plugin'] == 'rdf') {
183 $feed_path = $row->display_options['path'];
184 $feed_options = $row->display_options['style_options'];
185 $item_plugin = $row->display_options['row_plugin'];
186 $item_options = $row->display_options['row_options'];
187
188 if ($defaults = db_result(db_query("SELECT vd.display_options FROM {views_display} vd WHERE vd.display_plugin = 'default' AND vd.vid = %d", $row->vid))) {
189 $row->display_options = array_merge_recursive(unserialize($defaults), $row->display_options);
190 }
191
192 $feeds['views_' . $row->name] = array(
193 'type' => RDF_RSS_URI,
194 'path' => $feed_path,
195 'title' => $row->display_options['title'],
196 'module' => 'views',
197 'callback' => NULL, // N/A
198 'enabled' => TRUE, // TODO: only if the view itself is enabled
199 );
200 }
201 }
202 return $feeds;
203 }
204
205 function rdf_views_get_feed_settings($feed_id, array $defaults = array()) {
206 $feed_id = is_object($feed_id) ? $feed_id->id : $feed_id;
207 $view_name = substr($feed_id, strlen('views_'));
208 $result = db_query("SELECT vd.vid, vd.id, vd.display_options FROM {views_view} v LEFT JOIN {views_display} vd ON v.vid = vd.vid WHERE v.name = '%s' AND vd.display_plugin = 'feed'", $view_name);
209 while ($row = db_fetch_object($result)) {
210 $row->display_options = unserialize($row->display_options);
211 if (isset($row->display_options['style_plugin']) && $row->display_options['style_plugin'] == 'rdf') {
212 return array_merge((array)$row->display_options['style_options'], (array)$row->display_options['row_options']);
213 }
214 }
215 return $defaults;
216 }
217
218 function rdf_views_set_feed_settings($feed_id, array $settings) {
219 $feed_id = is_object($feed_id) ? $feed_id->id : $feed_id;
220 $view_name = substr($feed_id, strlen('views_'));
221 $result = db_query("SELECT vd.vid, vd.id, vd.display_options FROM {views_view} v LEFT JOIN {views_display} vd ON v.vid = vd.vid WHERE v.name = '%s' AND vd.display_plugin = 'feed'", $view_name);
222 while ($row = db_fetch_object($result)) {
223 $row->display_options = unserialize($row->display_options);
224 if (isset($row->display_options['style_plugin']) && $row->display_options['style_plugin'] == 'rdf') {
225 $item_options = array_intersect_key($settings, array('item_length' => '', 'author_property' => '', 'author_value' => '', 'date_timezone' => '', 'date_timezone_dst' => '', 'date_timezone_name' => ''));
226 $feed_options = array_diff_key($settings, $item_options);
227 if (($row->display_options['style_options'] != $feed_options) || ($row->display_options['row_options'] != $item_options)) {
228 $row->display_options['style_options'] = $feed_options;
229 $row->display_options['row_options'] = $item_options;
230 return db_query("UPDATE {views_display} vd SET vd.display_options = '%s' WHERE vd.vid = %d AND vd.id = '%s'", serialize($row->display_options), $row->vid, $row->id);
231 }
232 return TRUE;
233 }
234 }
235 return FALSE;
236 }

  ViewVC Help
Powered by ViewVC 1.1.2