? 319224-flagging-flaggings-16.patch
Index: flag.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flag/Attic/flag.inc,v
retrieving revision 1.1.2.30
diff -u -p -r1.1.2.30 flag.inc
--- flag.inc 14 Mar 2009 06:13:54 -0000 1.1.2.30
+++ flag.inc 6 May 2009 06:59:39 -0000
@@ -33,6 +33,11 @@ function flag_flag_definitions() {
'description' => t('Users who have created accounts on your site.'),
'handler' => 'flag_user',
),
+ 'flagging' => array(
+ 'title' => t('Flaggings'),
+ 'description' => t('Flaggings are the entities created whenever you flag something. It can be compared to dog-ears in a book - the flaggings are the dog ears. A flag, on the other hand, is like the hand used to make these dog-ears.'),
+ 'handler' => 'flag_flagging',
+ ),
);
}
@@ -634,14 +639,14 @@ class flag_flag {
function rules_get_event_arguments_definition() {
return array();
}
-
+
/**
* Defines the Rules argument for flag actions or conditions
*/
function rules_get_element_argument_definition() {
return array();
}
-
+
/**
* @} End of "defgroup rules".
*/
@@ -941,7 +946,7 @@ class flag_node extends flag_flag {
),
);
}
-
+
function rules_get_element_argument_definition() {
return array('type' => 'node', 'label' => t('Flagged content'));
}
@@ -1056,7 +1061,7 @@ class flag_comment extends flag_flag {
),
);
}
-
+
function rules_get_element_argument_definition() {
return array('type' => 'comment', 'label' => t('Flagged comment'));
}
@@ -1170,7 +1175,7 @@ class flag_user extends flag_flag {
),
);
}
-
+
function rules_get_element_argument_definition() {
return array('type' => 'user', 'label' => t('Flagged user'));
}
@@ -1202,6 +1207,59 @@ class flag_user extends flag_flag {
}
/**
+ * Implements flagging flaggings.
+ */
+class flag_flagging extends flag_flag {
+
+ function options_form(&$form) {
+ parent::options_form($form);
+ $options = array();
+ $types = flag_fetch_definition();
+ // Prepare the flag types.
+ $flag_types = array();
+ foreach ($types as $type) {
+ $flag_types[$type['handler']] = $type['title'];
+ }
+ // Get all the flags and sort them by type.
+ $flags = flag_get_flags();
+ foreach($flags as $flag) {
+ $options[$flag_types[get_class($flag)]][$flag->name] = $flag->title;
+ }
+ $form['types'] = array(
+ '#title' => t('What flags this flag may be used on'),
+ // Using select allows showing nested options.
+ '#type' => 'select',
+ '#multiple' => TRUE,
+ '#options' => $options,
+ '#description' => t('Check any flags type that this flag may be used to flag its flaggings. A flagging is a flag that was flagged. You must check at least one flag.'),
+ '#required' => TRUE,
+ '#default_value' => $this->types,
+ );
+ }
+
+ function _load_content($content_id) {
+ // The content_id is the fcid column in the flag_content table.
+ return db_fetch_object(db_query("SELECT * FROM {flag_content} WHERE fcid = %d", $content_id));
+ }
+
+ function applies_to_content_object($flagging) {
+ if (!empty($flagging->fid)) {
+ // Load the flag according to the flag ID in the flagging object.
+ $flag = flag_get_flag(NULL, $flag->fid);
+ if (in_array($flag->name, $this->types)) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+ }
+
+ function get_content_id($flag) {
+ return $flag->fcid;
+ }
+}
+
+
+/**
* A dummy flag to be used where the real implementation can't be found.
*/
class flag_broken extends flag_flag {
@@ -1226,5 +1284,4 @@ function _flag_url($path, $fragment = NU
return _flag_is_drupal_5()
? url($path, NULL, $fragment, $absolute)
: url($path, array('absolute' => TRUE, 'fragment' => $fragment));
-}
-
+}
\ No newline at end of file