root / drupal7 / sites / all / modules / flag / flag.api.php @ ba09eb79
1 | 85ad3d82 | Assos Assos | <?php
|
---|---|---|---|
2 | |||
3 | /**
|
||
4 | * @file
|
||
5 | * Hooks provided by the Flag module.
|
||
6 | */
|
||
7 | |||
8 | /**
|
||
9 | * @addtogroup hooks
|
||
10 | * @{
|
||
11 | */
|
||
12 | |||
13 | /**
|
||
14 | * Define one or more flag types.
|
||
15 | *
|
||
16 | * This hook may be placed in a $module.flag.inc file.
|
||
17 | *
|
||
18 | fd5a8e62 | Assos Assos | * @return array
|
19 | 85ad3d82 | Assos Assos | * An array whose keys are flag type names and whose values are properties of
|
20 | * the flag type.
|
||
21 | * When a flag type is for an entity, the flag type name must match the entity
|
||
22 | * type.
|
||
23 | * Properties for flag types are as follows:
|
||
24 | * - 'title': The main label of the flag type.
|
||
25 | * - 'description': A longer description shown in the UI when creating a new
|
||
26 | * flag.
|
||
27 | * - 'handler': The name of the class implementing this flag type.
|
||
28 | * - 'module': (optional) The name of the module that should be registered as a
|
||
29 | * dependency for this flag type.
|
||
30 | *
|
||
31 | * @see flag_fetch_definition()
|
||
32 | */
|
||
33 | function hook_flag_type_info() { |
||
34 | return array( |
||
35 | 'node' => array( |
||
36 | 'title' => t('Nodes'), |
||
37 | 'description' => t("Nodes are a Drupal site's primary content."), |
||
38 | 'handler' => 'flag_node', |
||
39 | 'module' => 'node', |
||
40 | ), |
||
41 | ); |
||
42 | } |
||
43 | |||
44 | /**
|
||
45 | * Alter flag type definitions provided by other modules.
|
||
46 | *
|
||
47 | * This hook may be placed in a $module.flag.inc file.
|
||
48 | *
|
||
49 | fd5a8e62 | Assos Assos | * @param array $definitions
|
50 | 85ad3d82 | Assos Assos | * An array of flag definitions returned by hook_flag_type_info().
|
51 | */
|
||
52 | function hook_flag_type_info_alter(&$definitions) { |
||
53 | |||
54 | } |
||
55 | |||
56 | /**
|
||
57 | * Define default flags.
|
||
58 | */
|
||
59 | function hook_flag_default_flags() { |
||
60 | $flags = array(); |
||
61 | 76e2e7c3 | Assos Assos | $flags['bookmarks'] = array( |
62 | 85ad3d82 | Assos Assos | 'entity_type' => 'node', |
63 | 'title' => 'Bookmarks', |
||
64 | 'global' => FALSE, |
||
65 | 76e2e7c3 | Assos Assos | 'types' => array( |
66 | 85ad3d82 | Assos Assos | 0 => 'article', |
67 | 1 => 'blog', |
||
68 | ), |
||
69 | 'flag_short' => 'Bookmark this', |
||
70 | 'flag_long' => 'Add this post to your bookmarks', |
||
71 | 'flag_message' => 'This post has been added to your bookmarks', |
||
72 | 'unflag_short' => 'Unbookmark this', |
||
73 | 'unflag_long' => 'Remove this post from your bookmarks', |
||
74 | 'unflag_message' => 'This post has been removed from your bookmarks', |
||
75 | 'unflag_denied_text' => '', |
||
76 | 'link_type' => 'toggle', |
||
77 | 'weight' => 0, |
||
78 | 76e2e7c3 | Assos Assos | 'show_in_links' => array( |
79 | 85ad3d82 | Assos Assos | 'full' => TRUE, |
80 | 'token' => FALSE, |
||
81 | ), |
||
82 | 'show_as_field' => FALSE, |
||
83 | 'show_on_form' => FALSE, |
||
84 | 'access_author' => '', |
||
85 | 'show_contextual_link' => TRUE, |
||
86 | 'show_on_profile' => FALSE, |
||
87 | 'access_uid' => '', |
||
88 | 'api_version' => 3, |
||
89 | ); |
||
90 | return $flags; |
||
91 | } |
||
92 | |||
93 | 76e2e7c3 | Assos Assos | /**
|
94 | * Alter the definition of default flags.
|
||
95 | *
|
||
96 | * @param array &$flags
|
||
97 | * An array keyed by flag machine name containing flag definitions.
|
||
98 | */
|
||
99 | function hook_flag_default_flags_alter(&$flags) { |
||
100 | if (!empty($flags['bookmark'])) { |
||
101 | $flags['bookmark']['title'] = 'Bananana Bookmark'; |
||
102 | } |
||
103 | } |
||
104 | |||
105 | 85ad3d82 | Assos Assos | /**
|
106 | * Allow modules to alter a flag when it is initially loaded.
|
||
107 | *
|
||
108 | 76e2e7c3 | Assos Assos | * @see flag_get_flags()
|
109 | 85ad3d82 | Assos Assos | */
|
110 | function hook_flag_alter(&$flag) { |
||
111 | |||
112 | } |
||
113 | |||
114 | /**
|
||
115 | * Alter a flag's default options.
|
||
116 | *
|
||
117 | * Modules that wish to extend flags and provide additional options must declare
|
||
118 | * them here so that their additions to the flag admin form are saved into the
|
||
119 | * flag object.
|
||
120 | *
|
||
121 | fd5a8e62 | Assos Assos | * @param array $options
|
122 | 85ad3d82 | Assos Assos | * The array of default options for the flag type, with the options for the
|
123 | * flag's link type merged in.
|
||
124 | fd5a8e62 | Assos Assos | * @param flag_flag $flag
|
125 | 85ad3d82 | Assos Assos | * The flag object.
|
126 | *
|
||
127 | * @see flag_flag::options()
|
||
128 | */
|
||
129 | function hook_flag_options_alter(&$options, $flag) { |
||
130 | |||
131 | } |
||
132 | |||
133 | /**
|
||
134 | * Act on an object being flagged.
|
||
135 | *
|
||
136 | fd5a8e62 | Assos Assos | * @param flag_flag $flag
|
137 | 85ad3d82 | Assos Assos | * The flag object.
|
138 | fd5a8e62 | Assos Assos | * @param int $entity_id
|
139 | 85ad3d82 | Assos Assos | * The id of the entity the flag is on.
|
140 | * @param $account
|
||
141 | * The user account performing the action.
|
||
142 | * @param $flagging_id
|
||
143 | * The flagging entity.
|
||
144 | */
|
||
145 | function hook_flag_flag($flag, $entity_id, $account, $flagging) { |
||
146 | |||
147 | } |
||
148 | |||
149 | /**
|
||
150 | * Act on an object being unflagged.
|
||
151 | *
|
||
152 | * This is invoked after the flag count has been decreased, but before the
|
||
153 | * flagging entity has been deleted.
|
||
154 | *
|
||
155 | * @param $flag
|
||
156 | * The flag object.
|
||
157 | fd5a8e62 | Assos Assos | * @param int $entity_id
|
158 | 85ad3d82 | Assos Assos | * The id of the entity the flag is on.
|
159 | * @param $account
|
||
160 | * The user account performing the action.
|
||
161 | * @param $flagging
|
||
162 | * The flagging entity.
|
||
163 | */
|
||
164 | function hook_flag_unflag($flag, $entity_id, $account, $flagging) { |
||
165 | |||
166 | } |
||
167 | |||
168 | /**
|
||
169 | * Perform custom validation on a flag before flagging/unflagging.
|
||
170 | *
|
||
171 | fd5a8e62 | Assos Assos | * @param string $action
|
172 | 85ad3d82 | Assos Assos | * The action about to be carried out. Either 'flag' or 'unflag'.
|
173 | fd5a8e62 | Assos Assos | * @param flag_flag $flag
|
174 | 85ad3d82 | Assos Assos | * The flag object.
|
175 | fd5a8e62 | Assos Assos | * @param int $entity_id
|
176 | 85ad3d82 | Assos Assos | * The id of the entity the user is trying to flag or unflag.
|
177 | * @param $account
|
||
178 | * The user account performing the action.
|
||
179 | * @param $flagging
|
||
180 | * The flagging entity.
|
||
181 | *
|
||
182 | fd5a8e62 | Assos Assos | * @return array|NULL
|
183 | 85ad3d82 | Assos Assos | * Optional array: textual error with the error-name as the key.
|
184 | * If the error name is 'access-denied' and javascript is disabled,
|
||
185 | * drupal_access_denied will be called and a 403 will be returned.
|
||
186 | * If validation is successful, do not return a value.
|
||
187 | */
|
||
188 | function hook_flag_validate($action, $flag, $entity_id, $account, $skip_permission_check, $flagging) { |
||
189 | // We're only operating on the "test" flag, and users may always unflag.
|
||
190 | if ($flag->name == 'test' && $action == 'flag') { |
||
191 | // Get all flags set by the current user.
|
||
192 | $flags = flag_get_user_flags('node', NULL, $account->uid, $sid = NULL, $reset = FALSE); |
||
193 | // Check if this user has any flags of this type set.
|
||
194 | if (isset($flags['test'])) { |
||
195 | $count = count($flags[$flag->name]); |
||
196 | if ($count >= 2) { |
||
197 | // Users may flag only 2 nodes with this flag.
|
||
198 | 76e2e7c3 | Assos Assos | return (array('access-denied' => t('You may only flag 2 nodes with the test flag.'))); |
199 | 85ad3d82 | Assos Assos | } |
200 | } |
||
201 | } |
||
202 | } |
||
203 | |||
204 | /**
|
||
205 | * Allow modules to allow or deny access to flagging for a single entity.
|
||
206 | *
|
||
207 | * Called when displaying a single entity view or edit page. For flag access
|
||
208 | * checks from within Views, implement hook_flag_access_multiple().
|
||
209 | *
|
||
210 | fd5a8e62 | Assos Assos | * @param flag_flag $flag
|
211 | 85ad3d82 | Assos Assos | * The flag object.
|
212 | * @param $entity_id
|
||
213 | * The id of the entity in question.
|
||
214 | fd5a8e62 | Assos Assos | * @param string $action
|
215 | 85ad3d82 | Assos Assos | * The action to test. Either 'flag' or 'unflag'.
|
216 | * @param $account
|
||
217 | * The user on whose behalf to test the flagging action.
|
||
218 | *
|
||
219 | * @return
|
||
220 | * One of the following values:
|
||
221 | * - TRUE: User has access to the flag.
|
||
222 | * - FALSE: User does not have access to the flag.
|
||
223 | * - NULL: This module does not perform checks on this flag/action.
|
||
224 | *
|
||
225 | * NOTE: Any module that returns FALSE will prevent the user from
|
||
226 | * being able to use the flag.
|
||
227 | *
|
||
228 | * @see hook_flag_access_multiple()
|
||
229 | * @see flag_flag:access()
|
||
230 | */
|
||
231 | function hook_flag_access($flag, $entity_id, $action, $account) { |
||
232 | |||
233 | } |
||
234 | |||
235 | /**
|
||
236 | * Allow modules to allow or deny access to flagging for multiple entities.
|
||
237 | *
|
||
238 | * Called when preparing a View or list of multiple flaggable entities.
|
||
239 | * For flag access checks for individual entities, see hook_flag_access().
|
||
240 | *
|
||
241 | fd5a8e62 | Assos Assos | * @param flag_flag $flag
|
242 | 85ad3d82 | Assos Assos | * The flag object.
|
243 | fd5a8e62 | Assos Assos | * @param array $entity_ids
|
244 | 85ad3d82 | Assos Assos | * An array of object ids to check access.
|
245 | * @param $account
|
||
246 | * The user on whose behalf to test the flagging action.
|
||
247 | *
|
||
248 | fd5a8e62 | Assos Assos | * @return array
|
249 | 85ad3d82 | Assos Assos | * An array whose keys are the object IDs and values are booleans indicating
|
250 | fd5a8e62 | Assos Assos | * access: TRUE to grant access, FALSE to deny it, and NULL to leave the core
|
251 | * access unchanged. If the implementation does not wish to override any
|
||
252 | * access, an empty array may be returned.
|
||
253 | 85ad3d82 | Assos Assos | *
|
254 | * @see hook_flag_access()
|
||
255 | * @see flag_flag:access_multiple()
|
||
256 | */
|
||
257 | function hook_flag_access_multiple($flag, $entity_ids, $account) { |
||
258 | |||
259 | } |
||
260 | |||
261 | /**
|
||
262 | * Define one or more flag link types.
|
||
263 | *
|
||
264 | * Link types defined here must be returned by this module's hook_flag_link().
|
||
265 | *
|
||
266 | * This hook may be placed in a $module.flag.inc file.
|
||
267 | *
|
||
268 | * @return
|
||
269 | * An array of one or more types, keyed by the machine name of the type, and
|
||
270 | * where each value is a link type definition as an array with the following
|
||
271 | * properties:
|
||
272 | * - 'title': The human-readable name of the type.
|
||
273 | * - 'description': The description of the link type.
|
||
274 | * - 'options': An array of extra options for the link type.
|
||
275 | * - 'uses standard js': Boolean, indicates whether the link requires Flag
|
||
276 | * module's own JS file for links.
|
||
277 | * - 'uses standard css': Boolean, indicates whether the link requires Flag
|
||
278 | * module's own CSS file for links.
|
||
279 | * - 'provides form': (optional) Boolean indicating that this link type shows
|
||
280 | * the user a flagging entity form. This property is used in the UI, eg to
|
||
281 | * warn the admin user of link types that are not compatible with other
|
||
282 | * flag options. Defaults to FALSE.
|
||
283 | *
|
||
284 | * @see flag_get_link_types()
|
||
285 | * @see hook_flag_link_type_info_alter()
|
||
286 | */
|
||
287 | function hook_flag_link_type_info() { |
||
288 | |||
289 | } |
||
290 | |||
291 | /**
|
||
292 | * Alter other modules' definitions of flag link types.
|
||
293 | *
|
||
294 | * This hook may be placed in a $module.flag.inc file.
|
||
295 | *
|
||
296 | fd5a8e62 | Assos Assos | * @param array $link_types
|
297 | 85ad3d82 | Assos Assos | * An array of the link types defined by all modules.
|
298 | *
|
||
299 | * @see flag_get_link_types()
|
||
300 | * @see hook_flag_link_type_info()
|
||
301 | */
|
||
302 | function hook_flag_link_type_info_alter(&$link_types) { |
||
303 | |||
304 | } |
||
305 | |||
306 | /**
|
||
307 | * Return the link for the link types this module defines.
|
||
308 | *
|
||
309 | * The type of link to be produced is given by $flag->link_type.
|
||
310 | *
|
||
311 | * When Flag uses a link type provided by this module, it will call this
|
||
312 | * implementation of hook_flag_link(). This should return a single link's
|
||
313 | * attributes, using the same structure as hook_link(). Note that "title" is
|
||
314 | * provided by the Flag configuration if not specified here.
|
||
315 | *
|
||
316 | fd5a8e62 | Assos Assos | * @param flag_flag $flag
|
317 | 85ad3d82 | Assos Assos | * The full flag object for the flag link being generated.
|
318 | fd5a8e62 | Assos Assos | * @param string $action
|
319 | 85ad3d82 | Assos Assos | * The action this link should perform. Either 'flag' or 'unflag'.
|
320 | fd5a8e62 | Assos Assos | * @param int $entity_id
|
321 | 85ad3d82 | Assos Assos | * The ID of the node, comment, user, or other object being flagged. The type
|
322 | * of the object can be deduced from the flag type.
|
||
323 | *
|
||
324 | * @return
|
||
325 | * An array defining properties of the link.
|
||
326 | *
|
||
327 | * @see hook_flag_link_type_info()
|
||
328 | * @see template_preprocess_flag()
|
||
329 | */
|
||
330 | fd5a8e62 | Assos Assos | function hook_flag_link($flag, $action, $entity_id) { |
331 | 85ad3d82 | Assos Assos | |
332 | } |
||
333 | |||
334 | /**
|
||
335 | * Act on flag deletion.
|
||
336 | *
|
||
337 | * This is invoked after all the flag database tables have had their relevant
|
||
338 | * entries deleted.
|
||
339 | *
|
||
340 | fd5a8e62 | Assos Assos | * @param flag_flag $flag
|
341 | 85ad3d82 | Assos Assos | * The flag object that has been deleted.
|
342 | */
|
||
343 | function hook_flag_delete($flag) { |
||
344 | |||
345 | } |
||
346 | |||
347 | /**
|
||
348 | * Act when a flag is reset.
|
||
349 | *
|
||
350 | fd5a8e62 | Assos Assos | * @param flag_flag $flag
|
351 | 85ad3d82 | Assos Assos | * The flag object.
|
352 | fd5a8e62 | Assos Assos | * @param int $entity_id
|
353 | 85ad3d82 | Assos Assos | * The entity ID on which all flaggings are to be removed. May be NULL, in
|
354 | * which case all of this flag's entities are to be unflagged.
|
||
355 | * @param $rows
|
||
356 | * Database rows from the {flagging} table.
|
||
357 | *
|
||
358 | * @see flag_reset_flag()
|
||
359 | */
|
||
360 | function hook_flag_reset($flag, $entity_id, $rows) { |
||
361 | |||
362 | } |
||
363 | |||
364 | /**
|
||
365 | * Alter the javascript structure that describes the flag operation.
|
||
366 | *
|
||
367 | fd5a8e62 | Assos Assos | * @param array $info
|
368 | 018e218c | Assos Assos | * The info array before it is returned from flag_build_javascript_info().
|
369 | fd5a8e62 | Assos Assos | * @param flag_flag $flag
|
370 | 85ad3d82 | Assos Assos | * The full flag object.
|
371 | *
|
||
372 | * @see flag_build_javascript_info()
|
||
373 | */
|
||
374 | 018e218c | Assos Assos | function hook_flag_javascript_info_alter(&$info, $flag) { |
375 | if ($flag->name === 'test') { |
||
376 | $info['newLink'] = $flag->theme($flag->is_flagged($info['contentId']) ? 'unflag' : 'flag', $info['contentId'], array( |
||
377 | 'after_flagging' => TRUE, |
||
378 | 'errors' => $flag->get_errors(), |
||
379 | // Additional options to pass to theme's preprocess function/template.
|
||
380 | 'icon' => TRUE, |
||
381 | 'hide_text' => TRUE, |
||
382 | )); |
||
383 | } |
||
384 | 85ad3d82 | Assos Assos | } |
385 | |||
386 | /**
|
||
387 | * Alter a flag object that is being prepared for exporting.
|
||
388 | *
|
||
389 | fd5a8e62 | Assos Assos | * @param flag_flag $flag
|
390 | 85ad3d82 | Assos Assos | * The flag object.
|
391 | *
|
||
392 | * @see flag_export_flags()
|
||
393 | */
|
||
394 | function hook_flag_export_alter($flag) { |
||
395 | |||
396 | } |