Browse Source

updated flag_list to 3.x version. ATTENTION DO NOT WORK ANYMORE create new folder broken

Bachir Soussi Chiadmi 8 years ago
parent
commit
253524c527
21 changed files with 768 additions and 2802 deletions
  1. 41 4
      sites/all/modules/contrib/flag/flag_lists/CHANGELOG.txt
  2. 0 25
      sites/all/modules/contrib/flag/flag_lists/flag-list--flag-3.2-compatibility.patch
  3. 0 526
      sites/all/modules/contrib/flag/flag_lists/flag-list--flag-3.x-compatibility.patch
  4. 0 55
      sites/all/modules/contrib/flag/flag_lists/flag_lists-remove_deleted_entity-2114731-2.patch
  5. 49 67
      sites/all/modules/contrib/flag/flag_lists/flag_lists.admin.inc
  6. 50 0
      sites/all/modules/contrib/flag/flag_lists/flag_lists.inc
  7. 8 4
      sites/all/modules/contrib/flag/flag_lists/flag_lists.info
  8. 188 8
      sites/all/modules/contrib/flag/flag_lists/flag_lists.install
  9. 354 346
      sites/all/modules/contrib/flag/flag_lists/flag_lists.module
  10. 0 1737
      sites/all/modules/contrib/flag/flag_lists/flag_lists.module.orig
  11. 5 6
      sites/all/modules/contrib/flag/flag_lists/includes/flag_lists.views.inc
  12. 5 5
      sites/all/modules/contrib/flag/flag_lists/includes/flag_lists.views_default.inc
  13. 1 1
      sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_list.inc
  14. 2 2
      sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_list_delete.inc
  15. 1 1
      sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_list_edit.inc
  16. 25 3
      sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_ops.inc
  17. 3 3
      sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_template.inc
  18. 5 3
      sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_template_types.inc
  19. 20 0
      sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_filter_list.inc
  20. 9 4
      sites/all/modules/contrib/flag/flag_lists/js/flag_lists_ops.js
  21. 2 2
      sites/all/modules/contrib/flag/flag_lists/theme/flag_lists.css

+ 41 - 4
sites/all/modules/contrib/flag/flag_lists/CHANGELOG.txt

@@ -1,14 +1,50 @@
-// $id: $
+Flag lists (Sep. 06, 2016)
+====
+Tweeked the code to follow the proposals in the API
 
 
-Flag lists (Jan. 27, 2011
+Flag lists (Aug. 24, 2015)
+====
+#2535084: Enhanced selection messages
+#2539056: flag_lists_do_flag doesn't work with skip_permission_check=true
+
+Flag lists (Jun. 10, 2015)
+====
+#2379621: Three Error Messages
+#2379719: Undefined Property Error Message
+#2380077: Hidden Undefined Property Error Message
+#2379743: Ajax Message Problems
+#2379701: Two Required Fields
+#2389083: Ensure that Flag_lists 7.x-3.x can only be used with Flag 7.x-3.0
+#2392489: uid lenght in flag_lists_flags and flag_lists_content
+#2390871: New template creation
+#2388741-11: Special Characters?
+#2452549: Flag List 7.x-3.0-beta1 does to work with Views-generated lists - 0 item(s) added
+#2453679: Add titles to view generated lists
+#2454401: Views & uninstall
+#2453803: Not all Flag lists operations are working
+#2465553: Feature Requests: Option to customize wording; List Operations as block?
+#2388741-24: Special Characters?
+#2388741-28: Special Characters?
+#2465553-8: Feature Requests: Option to customize wording; List Operations as block?
+#2473121: Question about invoking hook_flag (This changes the name of the hooks for this module)
+#2453803-5: Not all Flag lists operations are working
+#2465553-13: Feature Requests: Option to customize wording; List Operations as block?
+#2496007-2: Autocomplete when selecting a flag lists in a view
+#2496007-3: Autocomplete when selecting a flag lists in a view
+
+
+Flag lists (Jan. 27, 2011)
+====
 Fix bug: Incorrectly checking status of non-flag_lists flags.
 Fix bug: Incorrectly checking status of non-flag_lists flags.
 Fix bug: Incorrectly applying hook_flag_access() on non-flag_lists flags.
 Fix bug: Incorrectly applying hook_flag_access() on non-flag_lists flags.
 
 
-Flag lists (Jan. 14, 2011
+Flag lists (Jan. 14, 2011)
+====
 #1002292 Fixed Tokens not replaced in add-to-list and remove-from-list js messages.
 #1002292 Fixed Tokens not replaced in add-to-list and remove-from-list js messages.
 #1002292 Token module now a required dependency.
 #1002292 Token module now a required dependency.
 
 
 Flag lists (Jan. 12, 2011)
 Flag lists (Jan. 12, 2011)
+====
 #1023432 by erikwebb: Fixed No default value for $account in flag_lists_fl_delete().
 #1023432 by erikwebb: Fixed No default value for $account in flag_lists_fl_delete().
 #1002294 by architectJpres: Fixed List block incompatible with block caching.
 #1002294 by architectJpres: Fixed List block incompatible with block caching.
   Block caching turned off for now. Still not making db updates so you need to
   Block caching turned off for now. Still not making db updates so you need to
@@ -75,4 +111,5 @@ improve some messages
 allow users with "administer flags" permission to bypass flag_lists_is_owner()
 allow users with "administer flags" permission to bypass flag_lists_is_owner()
 checks.
 checks.
 First run at views integration
 First run at views integration
-Better admin table for lists
+Better admin table for lists
+

+ 0 - 25
sites/all/modules/contrib/flag/flag_lists/flag-list--flag-3.2-compatibility.patch

@@ -1,25 +0,0 @@
-From d4d5acf83713c2a8413e1182294e887159c0e445 Mon Sep 17 00:00:00 2001
-From: Bachir Soussi Chiadmi <bachir@g-u-i.net>
-Date: Wed, 25 Sep 2013 15:25:25 +0200
-Subject: [PATCH] flag 3.2 compatibility
-
----
- flag_lists.module | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/flag_lists.module b/flag_lists.module
-index 13a5dd7..8b25b24 100644
---- a/flag_lists.module
-+++ b/flag_lists.module
-@@ -1413,7 +1413,7 @@ function flag_lists_page($action = NULL, $flag_name = NULL, $entity_id = NULL) {
-  //   $flag->link_type = 'toggle';
-     $sid = flag_get_sid($user->uid);
-     $new_action = _flag_lists_is_flagged($flag, $entity_id, $user->uid, $sid) ? 'unflag' : 'flag';
--    $new_link = $flag->theme($new_action, $entity_id, TRUE);
-+    $new_link = $flag->theme($new_action, $entity_id, array("after_flagging" => TRUE));
-     flag_lists_fix_link($new_link, $new_action);
-     drupal_json_output(array(
-       'status' => TRUE,
--- 
-1.8.1.5
-

+ 0 - 526
sites/all/modules/contrib/flag/flag_lists/flag-list--flag-3.x-compatibility.patch

@@ -1,526 +0,0 @@
-diff --git a/flag_lists.admin.inc b/flag_lists.admin.inc
-index a71a11cc511ebba08169b334407985c8f501bc30..71d532209d15f2171dce7d0906131572f22b97b3 100644
---- a/flag_lists.admin.inc
-+++ b/flag_lists.admin.inc
-@@ -110,7 +110,7 @@ function flag_lists_add_js($type = NULL) {
-   }
- 
-   // New flag. Load the template row.
--  $query = db_select('flags', 'f');
-+  $query = db_select('flag', 'f');
-   $query->leftJoin('flag_lists_types', 'fl', 'f.name = fl.name');
-   $query->fields('f')
-     ->fields('fl')
-@@ -119,7 +119,7 @@ function flag_lists_add_js($type = NULL) {
-   $row = $query->execute()
-     ->fetchObject();
- 
--  $newflag = flag_flag::factory_by_content_type('node');
-+  $newflag = flag_flag::factory_by_entity_type('node');
- 
-   $flag = $newflag->factory_by_row($row);
-   // The template fid becomes the flag_lists parent flag.
-@@ -243,7 +243,7 @@ function flag_lists_form_submit($form, $form_state, $account = NULL) {
-   else {
-     // New flag. Load the template row.
-     $type = $form_state['values']['type'];
--    $query = db_select('flags', 'f');
-+    $query = db_select('flag', 'f');
-     $query->leftJoin('flag_lists_types', 'fl', 'f.name = fl.name');
-     $query->fields('f')
-       ->fields('fl')
-@@ -252,7 +252,7 @@ function flag_lists_form_submit($form, $form_state, $account = NULL) {
-     $row = $query->execute()
-       ->fetchObject();
- 
--    $newflag = flag_flag::factory_by_content_type('node');
-+    $newflag = flag_flag::factory_by_entity_type('node');
- 
-     $flag = $newflag->factory_by_row($row);
-     // The template fid becomes the flag_lists parent flag.
-diff --git a/flag_lists.install b/flag_lists.install
-index bd290d10d849d116a8ca68fb6abf0dcc93136f53..a84fd496888fb65c6cdddacaf37828ede23def76 100644
---- a/flag_lists.install
-+++ b/flag_lists.install
-@@ -30,7 +30,7 @@ function flag_lists_schema() {
-         'unsigned' => TRUE,
-         'not null' => TRUE,
-       ),
--      'content_type' => array(
-+      'entity_type' => array(
-         'type' => 'varchar',
-         'length' => '32',
-         'not null' => TRUE,
-@@ -72,13 +72,13 @@ function flag_lists_schema() {
-         'not null' => TRUE,
-         'default' => 0,
-       ),
--      'content_type' => array(
-+      'entity_type' => array(
-         'type' => 'varchar',
-         'length' => '32',
-         'not null' => TRUE,
-         'default' => '',
-       ),
--      'content_id' => array(
-+      'entity_id' => array(
-         'type' => 'int',
-         'unsigned' => TRUE,
-         'not null' => TRUE,
-@@ -106,11 +106,11 @@ function flag_lists_schema() {
-     ),
-     'primary key' => array('fcid'),
-     'unique keys' => array(
--      'fid_content_id_uid_sid' => array('fid', 'content_id', 'uid', 'sid'),
-+      'fid_entity_id_uid_sid' => array('fid', 'entity_id', 'uid', 'sid'),
-     ),
-     'indexes' => array(
--      'content_type_content_id' => array('content_type', 'content_id'),
--      'content_type_uid_sid' => array('content_type', 'uid', 'sid'),
-+      'entity_type_entity_id' => array('entity_type', 'entity_id'),
-+      'entity_type_uid_sid' => array('entity_type', 'uid', 'sid'),
-     ),
-   );
-   $schema['flag_lists_counts'] = array(
-@@ -122,13 +122,13 @@ function flag_lists_schema() {
-         'not null' => TRUE,
-         'default' => 0,
-       ),
--      'content_type' => array(
-+      'entity_type' => array(
-         'type' => 'varchar',
-         'length' => '32',
-         'not null' => TRUE,
-         'default' => '',
-       ),
--      'content_id' => array(
-+      'entity_id' => array(
-         'type' => 'int',
-         'unsigned' => TRUE,
-         'not null' => TRUE,
-@@ -143,10 +143,10 @@ function flag_lists_schema() {
-         'disp-width' => '10',
-       )
-     ),
--    'primary key' => array('fid', 'content_id'),
-+    'primary key' => array('fid', 'entity_id'),
-     'indexes' => array(
--      'fid_content_type' => array('fid', 'content_type'),
--      'content_type_content_id' => array('content_type', 'content_id'),
-+      'fid_entity_type' => array('fid', 'entity_type'),
-+      'entity_type_entity_id' => array('entity_type', 'entity_id'),
-       'count' => array('count'),
-     ),
-   );
-@@ -190,13 +190,13 @@ function flag_lists_install() {
- function flag_lists_uninstall() {
-   // Remove our template flags.
-   $query = db_select('flag_lists_types', 'fl');
--  $query->leftJoin('flags', 'f', 'fl.name = f.name');
-+  $query->leftJoin('flag', 'f', 'fl.name = f.name');
-   $query->addField('fl', 'fid', 'fid');
-   $query->distinct();
-   $fids = $query->execute();
- 
-   foreach ($fids as $fid) {
--    db_delete('flags')->condition('fid', $fid->fid);
-+    db_delete('flag')->condition('fid', $fid->fid);
-     db_delete('flag_content')->condition('fid', $fid->fid);
-     db_delete('flag_types')->condition('fid', $fid->fid);
-     db_delete('flag_counts')->condition('fid', $fid->fid);
-diff --git a/flag_lists.module b/flag_lists.module
-index 8fde9dd12b25e5e82ff79204fd800139460cd7e7..13a5dd77ead6832901a6fb0aac6511c0bc62eb3b 100644
---- a/flag_lists.module
-+++ b/flag_lists.module
-@@ -214,7 +214,7 @@ function theme_flag_lists_user_list($variables) {
-   $content = flag_lists_get_flagged_content($fid, $uid);
-   foreach ($content as $item) {
-     if ($item->content_type == 'node') {
--      $node = node_load($item->content_id);
-+      $node = node_load($item->entity_id);
-       $items[] = l($node->title, 'node/' . $node->nid);
-     }
-   }
-@@ -811,7 +811,7 @@ function flag_lists_set_messages(&$flag) {
-  *
-  * Make sure a user can only see his/her own personal flags.
-  */
--function flag_lists_flag_access($flag, $content_id, $action, $account) {
-+function flag_lists_flag_access($flag, $entity_id, $action, $account) {
-   if (!empty($flag->module) && $flag->module == 'flag_lists') {
-   switch ($action) {
-     case 'flag':
-@@ -936,7 +936,7 @@ function flag_lists_get_user_flags($content_type = NULL, $account = NULL, $use_f
-   $query = db_select('flag_lists_flags', 'fl')
-     ->fields('fl')
-     ->condition('fl.uid', $account->uid);
--  $query->leftJoin('flags', 'f', 'fl.pfid = f.fid');
-+  $query->leftJoin('flag', 'f', 'fl.pfid = f.fid');
-   $query->leftJoin('flag_lists_types', 'ft', 'ft.name = f.name');
-   $query->addField('ft', 'type');
-   if ($content_type) {
-@@ -1011,12 +1011,12 @@ function theme_flag_lists_list($variables) {
-   // Make sure we have a node.
-   if (is_object($node) && user_access('create flag lists')) {
-     $content_type = $node->type;
--    $content_id = $node->nid;
-+    $entity_id = $node->nid;
-   }
-   // Or at least confirm we are on a node page and use has access.
-   elseif (arg(0) == 'node' && is_numeric(arg(1)) && user_access('create flag lists')) {
--    $content_id = arg(1);
--    $query = db_select('node')->condition('nid', $content_id);
-+    $entity_id = arg(1);
-+    $query = db_select('node')->condition('nid', $entity_id);
-     $query->addField('node', 'type');
-     $content_type = $query->execute()->fetchField();
-   }
-@@ -1034,19 +1034,19 @@ function theme_flag_lists_list($variables) {
-     // Build the list of lists for this node.
-     foreach ($flags as $flag) {
-       if ($flag->module == 'flag_lists') {
--      $action = _flag_lists_is_flagged($flag, $content_id, $user->uid, 0) ? 'unflag' : 'flag';
-+      $action = _flag_lists_is_flagged($flag, $entity_id, $user->uid, 0) ? 'unflag' : 'flag';
-       }
-       else {
--        $action = $flag->is_flagged($content_id) ? 'unflag' : 'flag';;
-+        $action = $flag->is_flagged($entity_id) ? 'unflag' : 'flag';;
-       }
- 
-       // Do we need the ops?
-       if ($ops && $flag->module == 'flag_lists') {
-         $ops_links = theme('flag_lists_ops', array('flag' => $flag));
--        $link = $flag->theme($action, $content_id) . $ops_links;
-+        $link = $flag->theme($action, $entity_id) . $ops_links;
-       }
-       else {
--        $link = $flag->theme($action, $content_id);
-+        $link = $flag->theme($action, $entity_id);
-       }
- 
-       // If it's a list, fix the link.
-@@ -1201,12 +1201,12 @@ function flag_lists_get_flagged_content($fid, $uid) {
-  *   The full flag object of for the flag link being generated.
-  * @param $action
-  *   The action this link will perform. Either 'flag' or 'unflag'.
-- * @param $content_id
-+ * @param $entity_id
-  *   The ID of the node, comment, user, or other object being flagged.
-  * @return
-  *   An array defining properties of the link.
-  */
--function flag_lists_flag_link($flag, $action, $content_id) {
-+function flag_lists_flag_link($flag, $action, $entity_id) {
-   return array();
- }
- 
-@@ -1224,30 +1224,61 @@ function flag_lists_flag_link_types() {
- 
- 
- function flag_lists_flag_default_flags($name = 'fl_template') {
--  return array(
--    array(
--      'api_version' => 2,
--      'name' => $name,
--      'module' => 'flag_lists',
--      'content_type' => 'node',
--      'global' => 0,
--      'show_on_page' => 0,
--      'show_on_teaser' => 0,
--      'show_on_form' => 0,
--      // The following UI labels aren't wrapped in t() because they are written
--      // to the DB in English. They are passed to t() later, thus allowing for
--      // multilingual sites.
--      'title' => 'Flag lists template',
--      'flag_short' => 'Add to your [flag_lists:title] [flag_lists:term]',
--      'flag_long' => 'Add this post to your [flag_lists:title] [flag_lists:term]',
--      'flag_message' => 'This post has been added to your [flag_lists:title] [flag_lists:term]',
--      'unflag_short' => 'Remove this from your [flag_lists:title] [flag_lists:term]',
--      'unflag_long' => 'Remove this post from your [flag_lists:title] [flag_lists:term]',
--      'unflag_message' => 'This post has been removed from your [flag_lists:title] [flag_lists:term]',
--      'types' => array(),
--      'link_type' => 'toggle',
--    ),
--  );
-+  // return array(
-+  //   array(
-+  //     'api_version' => 2,
-+  //     'name' => $name,
-+  //     'module' => 'flag_lists',
-+  //     'content_type' => 'node',
-+  //     'global' => 0,
-+  //     'show_on_page' => 0,
-+  //     'show_on_teaser' => 0,
-+  //     'show_on_form' => 0,
-+  //     // The following UI labels aren't wrapped in t() because they are written
-+  //     // to the DB in English. They are passed to t() later, thus allowing for
-+  //     // multilingual sites.
-+  //     'title' => 'Flag lists template',
-+  //     'flag_short' => 'Add to your [flag_lists:title] [flag_lists:term]',
-+  //     'flag_long' => 'Add this post to your [flag_lists:title] [flag_lists:term]',
-+  //     'flag_message' => 'This post has been added to your [flag_lists:title] [flag_lists:term]',
-+  //     'unflag_short' => 'Remove this from your [flag_lists:title] [flag_lists:term]',
-+  //     'unflag_long' => 'Remove this post from your [flag_lists:title] [flag_lists:term]',
-+  //     'unflag_message' => 'This post has been removed from your [flag_lists:title] [flag_lists:term]',
-+  //     'types' => array(),
-+  //     'link_type' => 'toggle',
-+  //   ),
-+  // );
-+
-+$flags = array();
-+// Exported flag: "Flag lists template".
-+$flags['fl_template'] = array(
-+  'entity_type' => 'node',
-+  'title' => 'Flag lists template',
-+  'global' => 0,
-+  'types' => array(),
-+  'flag_short' => 'Add to your [flag_lists:title] [flag_lists:term]',
-+  'flag_long' => 'Add this post to your [flag_lists:title] [flag_lists:term]',
-+  'flag_message' => 'This post has been added to your [flag_lists:title] [flag_lists:term]',
-+  'unflag_short' => 'Remove this from your [flag_lists:title] [flag_lists:term]',
-+  'unflag_long' => 'Remove this post from your [flag_lists:title] [flag_lists:term]',
-+  'unflag_message' => 'This post has been removed from your [flag_lists:title] [flag_lists:term]',
-+  'unflag_denied_text' => '',
-+  'link_type' => 'toggle',
-+  'weight' => 0,
-+  'api_version' => 3,
-+  'module' => 'flag_lists',
-+  'show_on_page' => 0,
-+  'show_on_teaser' => 0,
-+  'show_on_form' => 0,
-+  'status' => FALSE,
-+  'import_roles' => array(
-+    'flag' => array(),
-+    'unflag' => array(),
-+  ),
-+);
-+return $flags;
-+
-+  
- }
- 
- /**
-@@ -1294,7 +1325,7 @@ function flag_lists_insert($flag) {
-     ->fields(array(
-       'pfid' => $flag->pfid,
-       'uid' => $flag->uid,
--      'content_type' => $flag->content_type,
-+      'entity_type' => $flag->entity_type,
-       'name' => $flag->name,
-       'title' => $flag->title,
-       'options' => $flag->get_serialized_options($flag),
-@@ -1330,7 +1361,7 @@ function flag_lists_fl_delete($flag, $account = NULL) {
-  * Used both for the regular callback as well as the JS version. We use this
-  * instead of the flag module's because our flags are not in the flags table.
-  */
--function flag_lists_page($action = NULL, $flag_name = NULL, $content_id = NULL) {
-+function flag_lists_page($action = NULL, $flag_name = NULL, $entity_id = NULL) {
-   global $user;
- 
-   // Shorten up the variables that affect the behavior of this page.
-@@ -1341,7 +1372,7 @@ function flag_lists_page($action = NULL, $flag_name = NULL, $content_id = NULL)
-   $has_js = isset($_GET['has_js']);
- 
-   // Check the flag token, then perform the flagging.
--  if (!flag_check_token($token, $content_id)) {
-+  if (!flag_check_token($token, $entity_id)) {
-     $error = t('Bad token. You seem to have followed an invalid link.');
-   }
-   elseif ($user->uid == 0 && !$has_js) {
-@@ -1355,7 +1386,7 @@ function flag_lists_page($action = NULL, $flag_name = NULL, $content_id = NULL)
- 
-     // Identify it as ours.
-     $flag->module = 'flag_lists';
--    flag_lists_do_flag($flag, $action, $content_id);
-+    flag_lists_do_flag($flag, $action, $entity_id);
-   }
- 
-   // If an error was received, set a message and exit.
-@@ -1381,14 +1412,14 @@ function flag_lists_page($action = NULL, $flag_name = NULL, $content_id = NULL)
- //    $flag = flag_lists_get_flag($flag_name);
-  //   $flag->link_type = 'toggle';
-     $sid = flag_get_sid($user->uid);
--    $new_action = _flag_lists_is_flagged($flag, $content_id, $user->uid, $sid) ? 'unflag' : 'flag';
--    $new_link = $flag->theme($new_action, $content_id, TRUE);
-+    $new_action = _flag_lists_is_flagged($flag, $entity_id, $user->uid, $sid) ? 'unflag' : 'flag';
-+    $new_link = $flag->theme($new_action, $entity_id, TRUE);
-     flag_lists_fix_link($new_link, $new_action);
-     drupal_json_output(array(
-       'status' => TRUE,
-       'newLink' => $new_link,
-       // Further information for the benefit of custom JavaScript event handlers:
--      'contentId' => $content_id,
-+      'contentId' => $entity_id,
-       'contentType' => $flag->content_type,
-       'flagName' => $flag->name,
-       'flagStatus' => $action,
-@@ -1397,7 +1428,7 @@ function flag_lists_page($action = NULL, $flag_name = NULL, $content_id = NULL)
-   }
-   else {
-     $flag = flag_lists_get_flag($flag->fid);
--    drupal_set_message($flag->get_label($action . '_message', $content_id));
-+    drupal_set_message($flag->get_label($action . '_message', $entity_id));
-     drupal_goto();
-   }
- }
-@@ -1413,7 +1444,7 @@ function flag_lists_fix_link(&$link, $action) {
-    *
-    * @param $action
-    *   Either 'flag' or 'unflag'.
--   * @param $content_id
-+   * @param $entity_id
-    *   The ID of the item to flag or unflag.
-    * @param $account
-    *   The user on whose behalf to flag. Leave empty for the current user.
-@@ -1423,7 +1454,7 @@ function flag_lists_fix_link(&$link, $action) {
-    *   FALSE if some error occured (e.g., user has no permission, flag isn't
-    *   applicable to the item, etc.), TRUE otherwise.
-    */
--  function flag_lists_do_flag($flag, $action, $content_id, $account = NULL, $skip_permission_check = FALSE) {
-+  function flag_lists_do_flag($flag, $action, $entity_id, $account = NULL, $skip_permission_check = FALSE) {
-     if (!isset($account)) {
-       $account = $GLOBALS['user'];
-     }
-@@ -1431,7 +1462,7 @@ function flag_lists_fix_link(&$link, $action) {
-       return FALSE;
-     }
-     if (!$skip_permission_check) {
--      if (!$flag->access($content_id, $action, $account)) {
-+      if (!$flag->access($entity_id, $action, $account)) {
-         // User has no permission to flag/unflag this object.
-         return FALSE;
-       }
-@@ -1439,7 +1470,7 @@ function flag_lists_fix_link(&$link, $action) {
-     else {
-       // We are skipping permission checks. However, at a minimum we must make
-       // sure the flag applies to this content type:
--      if (!$flag->applies_to_content_id($content_id)) {
-+      if (!$flag->applies_to_content_id($entity_id)) {
-         return FALSE;
-       }
-     }
-@@ -1460,17 +1491,17 @@ function flag_lists_fix_link(&$link, $action) {
- 
-     // Perform the flagging or unflagging of this flag. We invoke hook_flag here
-     // because we do our own flagging.
--    $flagged = _flag_lists_is_flagged($flag, $content_id, $uid, $sid);
-+    $flagged = _flag_lists_is_flagged($flag, $entity_id, $uid, $sid);
-     if ($action == 'unflag') {
-       if ($flagged) {
--        $fcid = _flag_lists_unflag($flag, $content_id, $uid, $sid);
--        module_invoke_all('flag', 'unflag', $flag, $content_id, $account, $fcid);
-+        $fcid = _flag_lists_unflag($flag, $entity_id, $uid, $sid);
-+        module_invoke_all('flag', 'unflag', $flag, $entity_id, $account, $fcid);
-       }
-     }
-     elseif ($action == 'flag') {
-       if (!$flagged) {
--        $fcid = _flag_lists_flag($flag, $content_id, $uid, $sid);
--        module_invoke_all('flag', 'flag', $flag, $content_id, $account, $fcid);
-+        $fcid = _flag_lists_flag($flag, $entity_id, $uid, $sid);
-+        module_invoke_all('flag', 'flag', $flag, $entity_id, $account, $fcid);
-       }
-     }
- 
-@@ -1487,12 +1518,12 @@ function flag_lists_fix_link(&$link, $action) {
-    * bypass it.
-    *
-    */
--  function _flag_lists_is_flagged($flag, $content_id, $uid, $sid) {
-+  function _flag_lists_is_flagged($flag, $entity_id, $uid, $sid) {
-     $query = db_select('flag_lists_content')
-       ->condition('fid', $flag->fid)
-       ->condition('uid', $uid)
-       ->condition('sid', $sid)
--      ->condition('content_id', $content_id);
-+      ->condition('entity_id', $entity_id);
-     $query->addField('flag_lists_content', 'fid');
-     return $query->execute()->fetchField();
-   }
-@@ -1504,19 +1535,19 @@ function flag_lists_fix_link(&$link, $action) {
-    * flag_lists_do_flag() function instead.
-    *
-    */
--  function _flag_lists_flag($flag, $content_id, $uid, $sid) {
-+  function _flag_lists_flag($flag, $entity_id, $uid, $sid) {
-     $fcid = db_insert('flag_lists_content')
-       ->fields(array(
-         'fid' => $flag->fid,
--        'content_type' => $flag->content_type,
--        'content_id' => $content_id,
-+        'entity_type' => $flag->entity_type,
-+        'entity_id' => $entity_id,
-         'uid' => $uid,
-         'sid' => $sid,
-         'timestamp' => REQUEST_TIME,
-       ))
-       ->execute();
- 
--    _flag_lists_update_count($flag, $content_id);
-+    _flag_lists_update_count($flag, $entity_id);
-     return $fcid;
-   }
- 
-@@ -1527,10 +1558,10 @@ function flag_lists_fix_link(&$link, $action) {
-    * flag_lists_do_flag() function instead.
-    *
-    */
--  function _flag_lists_unflag($flag, $content_id, $uid, $sid) {
-+  function _flag_lists_unflag($flag, $entity_id, $uid, $sid) {
-     $query = db_select('flag_lists_content')
-       ->condition('fid', $flag->fid)
--      ->condition('content_id', $content_id)
-+      ->condition('entity_id', $entity_id)
-       ->condition('uid', $uid)
-       ->condition('sid', $sid);
-     $query->addField('flag_lists_content', 'fcid');
-@@ -1539,7 +1570,7 @@ function flag_lists_fix_link(&$link, $action) {
-       db_delete('flag_lists_content')
-         ->condition('fcid', $fcid)
-         ->execute();
--      _flag_lists_update_count($flag, $content_id);
-+      _flag_lists_update_count($flag, $entity_id);
-     }
-     return $fcid;
-   }
-@@ -1547,11 +1578,11 @@ function flag_lists_fix_link(&$link, $action) {
-   /**
-    * Updates the flag count for this content
-    */
--  function _flag_lists_update_count($flag, $content_id) {
-+  function _flag_lists_update_count($flag, $entity_id) {
-     $count = db_select('flag_lists_content', 'f')
-       ->fields('f')
-       ->condition('fid', $flag->fid)
--      ->condition('content_id', $content_id)
-+      ->condition('entity_id', $entity_id)
-       ->countQuery()
-       ->execute()
-       ->fetchField();
-@@ -1559,7 +1590,7 @@ function flag_lists_fix_link(&$link, $action) {
-     if (empty($count)) {
-       $num_deleted = db_delete('flag_lists_counts')
-         ->condition('fid', $flag->fid)
--        ->condition('content_id', $content_id)
-+        ->condition('entity_id', $entity_id)
-         ->execute();
-     }
-     else {
-@@ -1568,14 +1599,14 @@ function flag_lists_fix_link(&$link, $action) {
-           'count' => $count,
-         ))
-         ->condition('fid', $flag->fid)
--        ->condition('content_id', $content_id)
-+        ->condition('entity_id', $entity_id)
-         ->execute();
-       if (empty($num_updated)) {
-         db_insert('flag_lists_counts')
-           ->fields(array(
-             'fid' => $flag->fid,
--            'content_type' => $flag->content_type,
--            'content_id' => $content_id,
-+            'entity_type' => $flag->entity_type,
-+            'entity_id' => $entity_id,
-             'count' => $count,
-           ))
-           ->execute();

+ 0 - 55
sites/all/modules/contrib/flag/flag_lists/flag_lists-remove_deleted_entity-2114731-2.patch

@@ -1,55 +0,0 @@
-diff --git a/flag_lists.module b/flag_lists.module
-index d829113..b3c04f0 100644
---- a/flag_lists.module
-+++ b/flag_lists.module
-@@ -1587,6 +1587,32 @@ function flag_lists_fix_link(&$link, $action) {
-     return $fcid;
-   }
- 
-+
-+  /**
-+   * Remove all entries of entity_id and type
-+   *
-+   * @param $entity_id
-+   *   Entity id which has been flagged.
-+   * @param $type
-+   *   The entity type.
-+   */
-+  function _flag_lists_remove_entity($entity_id, $type) {
-+    $query = db_select('flag_lists_content')
-+      ->condition('entity_id', $entity_id)
-+      ->condition('entity_type', $type);
-+    $query->fields('flag_lists_content', array('fcid', 'fid', 'uid', 'sid'));
-+    $items = $query->execute()->fetchAll();
-+   
-+   if ($items) {
-+    foreach ($items as $key => $value) {
-+      db_delete('flag_lists_content')
-+        ->condition('fcid', $value->fcid)
-+        ->execute();
-+        watchdog('flag_lists', t('Deleted entry @fcid from flat_lists_content', array('@fcid' => $value->fcid)));
-+      }
-+    }
-+  }
-+
-   /**
-    * Updates the flag count for this content
-    */
-@@ -1766,3 +1792,17 @@ function flag_lists_views_form_substitutions() {
-     $select_all_placeholder => drupal_render($select_all),
-   );
- }
-+
-+
-+/**
-+ * Implements hook_entity_delete
-+ */
-+function flag_lists_entity_delete($entity, $type) {
-+  foreach (flag_get_flags($type) as $flag) {
-+    if (isset($entity->vid)) {
-+      $items = _flag_lists_remove_entity($entity->vid, $type);
-+    }
-+  }
-+}
-+
-+

+ 49 - 67
sites/all/modules/contrib/flag/flag_lists/flag_lists.admin.inc

@@ -26,6 +26,8 @@ function theme_flag_lists_admin_page($variables) {
     $view = views_get_view('flag_lists', FALSE);
     $view = views_get_view('flag_lists', FALSE);
     if (!empty($view)) {
     if (!empty($view)) {
       $view->set_display('default');
       $view->set_display('default');
+      $view->pre_execute();
+      $view->execute();
       $output .= $view->render();
       $output .= $view->render();
     }
     }
   }
   }
@@ -84,12 +86,19 @@ function flag_lists_add($type = NULL) {
  * Callback for adding new lists through AJAX.
  * Callback for adding new lists through AJAX.
  */
  */
 function flag_lists_add_js($type = NULL) {
 function flag_lists_add_js($type = NULL) {
+
+  $token = $_REQUEST['form_token'];
+  if ( is_null($token) || !drupal_valid_token($token, variable_get('flag_lists_name','list'))) { 
+    drupal_json_output(array('error' => t('Are you using an old link?')));
+    exit();
+  }
+
   if (is_null($type)) {
   if (is_null($type)) {
     drupal_json_output(array('error' => t('Type not supplied.')));
     drupal_json_output(array('error' => t('Type not supplied.')));
     exit();
     exit();
   }
   }
 
 
-  $name = check_plain($_REQUEST['name']);
+  $name = $_REQUEST['name'];
   if (!isset($name) || empty($name)) {
   if (!isset($name) || empty($name)) {
     drupal_json_output(array('error' => t('List name not supplied.')));
     drupal_json_output(array('error' => t('List name not supplied.')));
     exit();
     exit();
@@ -101,7 +110,7 @@ function flag_lists_add_js($type = NULL) {
   }
   }
 
 
   if (flag_lists_title_exists($name, $type)) {
   if (flag_lists_title_exists($name, $type)) {
-    drupal_json_output(array('error' => t('You already have a @name with this name for this type of content.', array('@name' => variable_get('flag_lists_name', t('list'))))));
+    drupal_json_output(array('error' => t('You already have a @name with this name for this type of content.', array('@name' => variable_get('flag_lists_name', 'list')))));
     exit();
     exit();
   }
   }
 
 
@@ -162,7 +171,7 @@ function flag_lists_form($form, $form_state, $name = NULL, $type = NULL) {
   }
   }
   // Adding a new list.
   // Adding a new list.
   if (!isset($name)) {
   if (!isset($name)) {
-    drupal_set_title(t('Add a new list'));
+    drupal_set_title(t('Add a new @name', array('@name' => variable_get('flag_lists_name', 'list'))));
     $form['edit'] = array(
     $form['edit'] = array(
       '#type' => 'hidden',
       '#type' => 'hidden',
       '#value' => FALSE,
       '#value' => FALSE,
@@ -173,7 +182,7 @@ function flag_lists_form($form, $form_state, $name = NULL, $type = NULL) {
   else {
   else {
     $flag = flag_lists_get_flag($name);
     $flag = flag_lists_get_flag($name);
 
 
-    $title_string_name = variable_get('flag_lists_name', 'list');
+    $title_string_name = t('@name', array('@name' => variable_get('flag_lists_name', 'list')));
     $title_string = t('Edit your "@title" @name title', array('@title' => $flag->get_title(), '@name' => $title_string_name));
     $title_string = t('Edit your "@title" @name title', array('@title' => $flag->get_title(), '@name' => $title_string_name));
     drupal_set_title();
     drupal_set_title();
 
 
@@ -191,7 +200,7 @@ function flag_lists_form($form, $form_state, $name = NULL, $type = NULL) {
     '#type' => 'textfield',
     '#type' => 'textfield',
     '#title' => t('Title'),
     '#title' => t('Title'),
     '#default_value' => empty($flag->title) ? '' : $flag->title,
     '#default_value' => empty($flag->title) ? '' : $flag->title,
-    '#description' => t('A short, descriptive title for this @name list. Limit to 255 characters.', array('@name' => variable_get('flag_lists_name', t('list')))),
+    '#description' => t('A short, descriptive title for this @name list. Limit to 255 characters.', array('@name' => variable_get('flag_lists_name', 'list'))),
     '#maxlength' => 255,
     '#maxlength' => 255,
     '#required' => TRUE,
     '#required' => TRUE,
     '#access' => empty($flag->locked['title']),
     '#access' => empty($flag->locked['title']),
@@ -214,12 +223,12 @@ function flag_lists_form($form, $form_state, $name = NULL, $type = NULL) {
 function flag_lists_form_validate($form, $form_state) {
 function flag_lists_form_validate($form, $form_state) {
   // Ensure 255 charactor or less name.
   // Ensure 255 charactor or less name.
   if (drupal_strlen($form_state['values']['title']) > 255) {
   if (drupal_strlen($form_state['values']['title']) > 255) {
-    form_set_error('name', t('The @name title may only be 255 characters long.', array('@name' => variable_get('flag_lists_name', t('list')))));
+    form_set_error('name', t('The @name title may only be 255 characters long.', array('@name' => variable_get('flag_lists_name', 'list'))));
   }
   }
   // Ensure the machine name is unique.
   // Ensure the machine name is unique.
   if (!$form_state['values']['edit']) {
   if (!$form_state['values']['edit']) {
     if (flag_lists_title_exists($form_state['values']['title'], $form_state['values']['type'])) {
     if (flag_lists_title_exists($form_state['values']['title'], $form_state['values']['type'])) {
-      form_set_error('title', t('You already have a @name with this name for this type of content.', array('@name' => variable_get('flag_lists_name', t('list')))));
+      form_set_error('title', t('You already have a @name with this name for this type of content.', array('@name' => variable_get('flag_lists_name', 'list'))));
     }
     }
   }
   }
 }
 }
@@ -287,7 +296,7 @@ function flag_lists_settings_form($form, $form_state) {
   $form['flag_lists_name'] = array(
   $form['flag_lists_name'] = array(
     '#type' => 'textfield',
     '#type' => 'textfield',
     '#title' => t('Substitute "list" with your own terminology'),
     '#title' => t('Substitute "list" with your own terminology'),
-    '#default_value' => variable_get('flag_lists_name', t('list')),
+    '#default_value' => t('@name', array('@name' => variable_get('flag_lists_name', 'list'))),
     '#description' => t('You can choose to use another name for "list", such as "favorites" or "bookmarks". Lowercase and plural names usually work best.'),
     '#description' => t('You can choose to use another name for "list", such as "favorites" or "bookmarks". Lowercase and plural names usually work best.'),
     '#required' => TRUE,
     '#required' => TRUE,
   );
   );
@@ -341,7 +350,7 @@ function flag_lists_delete_confirm($form, $form_state, $name) {
   $form['fid'] = array('#type' => 'value', '#value' => $flag->fid);
   $form['fid'] = array('#type' => 'value', '#value' => $flag->fid);
 
 
   return confirm_form($form,
   return confirm_form($form,
-    t('Are you sure you want to delete %title?', array('%title' => $flag->get_title())),
+    t('Are you sure you want to delete @title?', array('@title' => $flag->get_title())),
     isset($_GET['destination']) ? $_GET['destination'] : '/',
     isset($_GET['destination']) ? $_GET['destination'] : '/',
     t('This action cannot be undone.'),
     t('This action cannot be undone.'),
     t('Delete'), t('Cancel')
     t('Delete'), t('Cancel')
@@ -359,14 +368,14 @@ function flag_lists_delete_confirm_submit($form, &$form_state) {
  * Form to create a new template.
  * Form to create a new template.
  */
  */
 function flag_lists_create_template_form($form, $form_state) {
 function flag_lists_create_template_form($form, $form_state) {
-  drupal_set_title(t('Add a new list template'));
+  drupal_set_title(t('Add a new @name template', array('@name' => variable_get('flag_lists_name', 'list'))));
   $form['help'] = array(
   $form['help'] = array(
     '#value' => t('This form creates a new, blank list template. After saving, you will be able to configure further options.'),
     '#value' => t('This form creates a new, blank list template. After saving, you will be able to configure further options.'),
   );
   );
   $form['name'] = array(
   $form['name'] = array(
     '#type' => 'textfield',
     '#type' => 'textfield',
     '#title' => t('Template name'),
     '#title' => t('Template name'),
-    '#description' => t('The machine-name for this template. It may be up to 32 characters long and my only contain lowercase letters, underscores, and numbers.'),
+    '#description' => t('The machine-name for this template. It may be up to 20 characters long and my only contain lowercase letters, underscores, and numbers.'),
     '#maxlength' => 255,
     '#maxlength' => 255,
     '#required' => TRUE,
     '#required' => TRUE,
   );
   );
@@ -385,9 +394,9 @@ function flag_lists_create_template_form_validate($form, &$form_state) {
   if (!preg_match('/^[a-z_][a-z0-9_]*$/', $form_state['values']['name'])) {
   if (!preg_match('/^[a-z_][a-z0-9_]*$/', $form_state['values']['name'])) {
     form_set_error('name', t('The flag name may only contain lowercase letters, underscores, and numbers.'));
     form_set_error('name', t('The flag name may only contain lowercase letters, underscores, and numbers.'));
   }
   }
-  // Ensure 32 charactor or less name.
-  if (drupal_strlen($form_state['values']['name']) > 32) {
-    form_set_error('name', t('The flag name may only be 32 characters long.'));
+  // Ensure 20 charactor or less name.
+  if (drupal_strlen($form_state['values']['name']) > 20) {
+    form_set_error('name', t('The flag name may only be 20 characters long.'));
   }
   }
   // Ensure the machine name is unique.
   // Ensure the machine name is unique.
   $flag = flag_get_flag('fl_template_' . $form_state['values']['name']);
   $flag = flag_get_flag('fl_template_' . $form_state['values']['name']);
@@ -400,9 +409,10 @@ function flag_lists_create_template_form_validate($form, &$form_state) {
  * New template submit.
  * New template submit.
  */
  */
 function flag_lists_create_template_form_submit($form, &$form_state) {
 function flag_lists_create_template_form_submit($form, &$form_state) {
-  $template = flag_lists_flag_default_flags('fl_template_' . $form_state['values']['name']);
-  $flag = flag_flag::factory_by_array($template[0]);
-  $flag->title = t('List template') . ' ' . $form_state['values']['name'];
+  $template = flag_lists_flag_default_flags();
+  $flag = flag_flag::factory_by_array(array_shift($template));
+  $flag->title = t('Flag list template') . ' ' . $form_state['values']['name'];
+  $flag->name =  'fl_template_' . $form_state['values']['name'];
   $flag->save();
   $flag->save();
   // Enter the new template into flag_lists_types.
   // Enter the new template into flag_lists_types.
   db_insert('flag_lists_types')
   db_insert('flag_lists_types')
@@ -410,11 +420,11 @@ function flag_lists_create_template_form_submit($form, &$form_state) {
       'name' => $flag->name,
       'name' => $flag->name,
     ))
     ))
     ->execute();
     ->execute();
-  $form_state['redirect'] = FLAG_ADMIN_PATH . '/edit/' . $flag->name;
+  drupal_set_message(t('You must save the template below otherwise the functionality is not guaranteed!'), 'warning');
+  $form_state['redirect'] = FLAG_ADMIN_PATH . '/manage/' . $flag->name;
 }
 }
 
 
 
 
-
 /**
 /**
  * Developer tool to generate dummy lists and listings.
  * Developer tool to generate dummy lists and listings.
  */
  */
@@ -490,10 +500,10 @@ function flag_lists_generate_lists_form_submit($form, &$form_state) {
 
 
   // Delete listings.
   // Delete listings.
   if ($form_state['values']['kill_listings']) {
   if ($form_state['values']['kill_listings']) {
-      $flags = flag_lists_get_flags();
+    $flags = flag_lists_get_flags();
     foreach ($flags as $flag) {
     foreach ($flags as $flag) {
       $result = db_select('flag_lists_content', 'f')
       $result = db_select('flag_lists_content', 'f')
-        ->fields('f', array('fcid', 'content_id'))
+        ->fields('f', array('fcid', 'entity_id'))
         ->condition('fid', $flag->fid)
         ->condition('fid', $flag->fid)
         ->execute();
         ->execute();
 
 
@@ -501,7 +511,7 @@ function flag_lists_generate_lists_form_submit($form, &$form_state) {
         db_delete('flag_lists_content')->condition('fid', $flag->fid)->execute();
         db_delete('flag_lists_content')->condition('fid', $flag->fid)->execute();
         db_delete('flag_lists_counts')->condition('fid', $flag->fid)->execute();
         db_delete('flag_lists_counts')->condition('fid', $flag->fid)->execute();
 
 
-        module_invoke_all('flag', 'unflag', $flag, $row->content_id, $account, $row->fcid);
+        module_invoke_all('flag', 'unflag', $flag, $row->entity_id, $account, $row->fcid);
       }
       }
     }
     }
     drupal_set_message(t('All listings were deleted.'));
     drupal_set_message(t('All listings were deleted.'));
@@ -525,7 +535,7 @@ function flag_lists_generate_lists_form_submit($form, &$form_state) {
 
 
   // Generate lists.
   // Generate lists.
   if ($form_state['values']['lists'] && count($templates)) {
   if ($form_state['values']['lists'] && count($templates)) {
-    for ($i = 1; $i <= $form_state['values']['lists']; $i++ ) {
+    for ($i = 1; $i <= $form_state['values']['lists']; $i++) {
       $template = flag_get_flag(NULL, array_rand($templates));
       $template = flag_get_flag(NULL, array_rand($templates));
       $account->uid = $uids[array_rand($uids)];
       $account->uid = $uids[array_rand($uids)];
       $edit['values']['title'] = devel_create_greeking(7, TRUE);
       $edit['values']['title'] = devel_create_greeking(7, TRUE);
@@ -533,7 +543,7 @@ function flag_lists_generate_lists_form_submit($form, &$form_state) {
       $form = array();
       $form = array();
       flag_lists_form_submit($form, $edit, $account);
       flag_lists_form_submit($form, $edit, $account);
     }
     }
-  drupal_set_message(t('@lists created.', array('@lists' => format_plural($form_state['values']['lists'], '1 list', '@count lists'))));
+    drupal_set_message(t('@lists created.', array('@lists' => format_plural($form_state['values']['lists'], '1 list', '@count lists'))));
   }
   }
 
 
   // Generate listings.
   // Generate listings.
@@ -541,14 +551,14 @@ function flag_lists_generate_lists_form_submit($form, &$form_state) {
 
 
     $count = 0;
     $count = 0;
 
 
-    for ($i = 1; $i <= $form_state['values']['listings']; $i++ ) {
+    for ($i = 1; $i <= $form_state['values']['listings']; $i++) {
       $account->uid = $uids[array_rand($uids)];
       $account->uid = $uids[array_rand($uids)];
       $lists = flag_lists_get_user_flags(NULL, $account);
       $lists = flag_lists_get_user_flags(NULL, $account);
 
 
       // Remove any lists that don't use the chosen templates.
       // Remove any lists that don't use the chosen templates.
       foreach ($lists as $key => $list) {
       foreach ($lists as $key => $list) {
-       if (!isset($templates[$list->pfid])) {
-        unset($lists[$key]);
+        if (!isset($templates[$list->pfid])) {
+          unset($lists[$key]);
         }
         }
       }
       }
 
 
@@ -589,52 +599,24 @@ function flag_lists_generate_lists_form_submit($form, &$form_state) {
         $count++;
         $count++;
       }
       }
     }
     }
-  drupal_set_message(t('@listings listed.', array('@listings' => format_plural($count, '1 node', '@count nodes'))));
-  if ($count < $form_state['values']['listings']) {
-    drupal_set_message(t('Listings are generated randomly. Occassionally a listing will not be created if the random user has no lists or if the node type to be listed has no nodes.'));
-  }
+    drupal_set_message(t('@listings listed.', array('@listings' => format_plural($count, '1 node', '@count nodes'))));
+    if ($count < $form_state['values']['listings']) {
+      drupal_set_message(t('Listings are generated randomly. Occassionally a listing will not be created if the random user has no lists or if the node type to be listed has no nodes.'));
+    }
   }
   }
 }
 }
 
 
+function flag_lists_autocomplete_list_callback($string = "") {
+  $matches = array();
 
 
-
-/**
- * Clean lists from deleted enties
- */
-function flag_list_clean_deleted(){
-
-  drupal_set_title(t('Flag lists Clean'));
-  $output = '<p>' . t('This page shows all the deleted entityties id from flag lists.') . '</p>';
-
-  $total = 0;
-  $list = "<ul>";
-
-  $query = db_select('flag_lists_content');
-  $query->fields('flag_lists_content', array('entity_id', 'entity_type'));
-  $query->distinct();
-  $items = $query->execute()->fetchAll();
-
-   if ($items) {
-    foreach ($items as $key => $value) {
-      $entity = entity_load($value->entity_type, array($value->entity_id), array(), true);
-      // dsm($entity);
-      // break;
-      if(!isset($entity[$value->entity_id])){
-        $list .= "<li>".$value->entity_type ." <em>". $value->entity_id."</em> have been deleted does not exists anymore.</li>";
-        $total++;
+  if ($string) {
+    $lists = flag_lists_get_user_flags();
+    foreach ($lists as $list) {
+      if (stristr($list->title,$string) !== FALSE) {
+        $matches[$list->title] = check_plain($list->title);
       }
       }
-
-      // db_delete('flag_lists_content')
-      //   ->condition('entity_type', $value->entity_type)
-      //   ->condition('entity_id', $value->entity_id)
-      //   ->execute();
-      //   watchdog('flag_lists', t('Deleted entry @fcid from flat_lists_content', array('@fcid' => $value->fcid)));
-      // }
     }
     }
   }
   }
 
 
-  $list .= "</ul>";
-  $output .= "<p><strong>".$total ."</strong> entities have been deleted.</p>";
-  $output .= $list;
-  return $output;
+  drupal_json_output($matches);
 }
 }

+ 50 - 0
sites/all/modules/contrib/flag/flag_lists/flag_lists.inc

@@ -0,0 +1,50 @@
+<?php
+/**
+ * @file
+ * Implements flag lists.
+ */
+
+class flag_lists extends flag_flag {
+
+function save(&$flag) {
+  krumo('here');
+  $flag->flag_lists_save($flag);
+}
+
+  /**
+   * Saves a flag to the database. It is a wrapper around update($flag) and insert($flag).
+   */
+  function flag_lists_save(&$flag) {
+    if (isset($flag->fid)) {
+      flag_lists_update($flag);
+      $flag->is_new = FALSE;
+    }
+    else {
+      flag_lists_insert($flag);
+      $flag->is_new = TRUE;
+    }
+    // Clear the page cache for anonymous users.
+//    cache_clear_all('*', 'cache_page', TRUE);
+  }
+
+  /**
+   * Saves an existing flag to the database. Better use save($flag).
+   */
+  function flag_lists_update($flag) {
+    db_query("UPDATE {flag_lists_flags} SET title = '%s', name = '%s' WHERE fid = %d", $flag->title, $flag->name, $flag->fid);
+  }
+
+  /**
+   * Saves a new flag to the database. Better use save($flag).
+   */
+  function flag_lists_insert($flag) {
+    db_query("INSERT INTO {flag_lists_flags} (pfid, uid, content_type, name, title, options) VALUES (%d, %d, '%s', '%s', '%s', '%s')",             $flag->pfid, $flag->uid, $flag->content_type, $flag->name, $flag->title, $flag->get_serialized_options($flag));
+    $flag->fid = db_last_insert_id('flags', 'fid');
+    $flag->name = 'flag_lists_'. $flag->uid .'_'. $flag->fid;
+    $flag->flag_lists_update($flag);
+
+    foreach ($flag->types as $type) {
+      db_query("INSERT INTO {flag_types} (fid, type) VALUES (%d, '%s')", $flag->fid, $type);
+    }
+  }
+}

+ 8 - 4
sites/all/modules/contrib/flag/flag_lists/flag_lists.info

@@ -1,8 +1,9 @@
 name = Flag lists
 name = Flag lists
 core = 7.x
 core = 7.x
 package = Flags
 package = Flags
-dependencies[] = flag
+dependencies[] = flag (>7.x-3.0)
 dependencies[] = token
 dependencies[] = token
+dependencies[] = views
 
 
 files[] = flag_lists.admin.inc
 files[] = flag_lists.admin.inc
 files[] = flag_lists.module
 files[] = flag_lists.module
@@ -17,11 +18,14 @@ files[] = includes/flag_lists_handler_field_ops.inc
 files[] = includes/flag_lists_handler_field_template.inc
 files[] = includes/flag_lists_handler_field_template.inc
 files[] = includes/flag_lists_handler_field_template_types.inc
 files[] = includes/flag_lists_handler_field_template_types.inc
 files[] = includes/flag_lists_handler_filter_template.inc
 files[] = includes/flag_lists_handler_filter_template.inc
+files[] = includes/flag_lists_handler_filter_list.inc
 
 
 description = Allows users to create personal flag lists.
 description = Allows users to create personal flag lists.
-; Information added by drupal.org packaging script on 2012-05-03
-version = "7.x-1.1"
+
+
+; Information added by Drupal.org packaging script on 2016-09-07
+version = "7.x-3.1"
 core = "7.x"
 core = "7.x"
 project = "flag_lists"
 project = "flag_lists"
-datestamp = "1336060255"
+datestamp = "1473230043"
 
 

+ 188 - 8
sites/all/modules/contrib/flag/flag_lists/flag_lists.install

@@ -26,7 +26,6 @@ function flag_lists_schema() {
       ),
       ),
       'uid' => array(
       'uid' => array(
         'type' => 'int',
         'type' => 'int',
-        'size' => 'small',
         'unsigned' => TRUE,
         'unsigned' => TRUE,
         'not null' => TRUE,
         'not null' => TRUE,
       ),
       ),
@@ -106,7 +105,7 @@ function flag_lists_schema() {
     ),
     ),
     'primary key' => array('fcid'),
     'primary key' => array('fcid'),
     'unique keys' => array(
     'unique keys' => array(
-      'fid_entity_id_uid_sid' => array('fid', 'entity_id', 'uid', 'sid'),
+      'fid_content_id_uid_sid' => array('fid', 'entity_id', 'uid', 'sid'),
     ),
     ),
     'indexes' => array(
     'indexes' => array(
       'entity_type_entity_id' => array('entity_type', 'entity_id'),
       'entity_type_entity_id' => array('entity_type', 'entity_id'),
@@ -191,17 +190,198 @@ function flag_lists_uninstall() {
   // Remove our template flags.
   // Remove our template flags.
   $query = db_select('flag_lists_types', 'fl');
   $query = db_select('flag_lists_types', 'fl');
   $query->leftJoin('flag', 'f', 'fl.name = f.name');
   $query->leftJoin('flag', 'f', 'fl.name = f.name');
-  $query->addField('fl', 'fid', 'fid');
+  $query->addField('f', 'fid', 'fid');
   $query->distinct();
   $query->distinct();
   $fids = $query->execute();
   $fids = $query->execute();
 
 
   foreach ($fids as $fid) {
   foreach ($fids as $fid) {
-    db_delete('flag')->condition('fid', $fid->fid);
-    db_delete('flag_content')->condition('fid', $fid->fid);
-    db_delete('flag_types')->condition('fid', $fid->fid);
-    db_delete('flag_counts')->condition('fid', $fid->fid);
+    db_delete('flag')->condition('fid', $fid->fid)->execute();
+    db_delete('flagging')->condition('fid', $fid->fid)->execute();
+    db_delete('flag_types')->condition('fid', $fid->fid)->execute();
+    db_delete('flag_counts')->condition('fid', $fid->fid)->execute();
+  }
+
+  db_delete('variable')->condition('name', 'flag_lists%', 'LIKE')->execute();
+
+  $view_to_delete = views_get_view('flag_lists');
+  if (!empty($view_to_delete)) {  
+    views_delete_view($view_to_delete);
+  }
+
+  $view_to_delete =views_get_view('flag_lists_content');
+  if (!empty($view_to_delete)) {  
+    views_delete_view($view_to_delete);
+  }
+
+  $view_to_delete = views_get_view('flag_lists_user_lists');
+  if (!empty($view_to_delete)) {  
+    views_delete_view($view_to_delete);
+  }
+
+  $view_to_delete = views_get_view('flag_lists_user_list');
+  if (!empty($view_to_delete)) {  
+    views_delete_view($view_to_delete);
   }
   }
 
 
-  db_delete('variable')->condition('name', 'flag_lists%', 'LIKE');
   drupal_set_message(t('Flag lists has been uninstalled.'));
   drupal_set_message(t('Flag lists has been uninstalled.'));
 }
 }
+
+/**
+ * Get rid of garbage list entries that are orphaned from a list
+ */
+function flag_lists_update_7000() {
+  $orphans = db_query("SELECT flc.fcid, flc.fid, flc.content_id, flc.uid, flcounts.content_type, count
+              FROM {flag_lists_content} flc
+              JOIN {flag_lists_counts} flcounts ON flcounts.fid=flc.fid AND flc.content_id=flcounts.content_id
+              LEFT JOIN {flag_lists_flags} flf ON flf.fid=flc.fid
+              WHERE flf.fid IS NULL");
+
+  foreach ($orphans as $orphan) {
+    $num_deleted = db_delete('flag_lists_content')
+      ->condition('fid', $orphan->fid)
+      ->condition('fcid', $orphan->fcid)
+      ->condition('uid', $orphan->uid)
+      ->execute();
+
+    if (!empty($num_deleted)) {
+      drupal_set_message("Deleting flag_id: $orphan->fid flag_content_id: $orphan->fcid");
+
+      db_update('flag_lists_counts')
+        ->fields(array(
+          'count' => ($orphan->count <= 1) ? 0 : $orphan->count - 1,
+        ))
+        ->condition('content_type', $orphan->content_type)
+        ->condition('fid', $orphan->fid)
+        ->condition('content_id', $orphan->content_id)
+        ->execute();
+    }
+  }
+}
+
+
+/**
+ * Update the flag_lists_flags table
+ */
+function flag_lists_update_7301() {
+  db_change_field('flag_lists_flags','content_type', 'entity_type',
+    array(
+      'type' => 'varchar',
+      'length' => '32',
+      'not null' => TRUE,
+      'default' => '',
+    ));
+}
+
+/**
+ * Update the flag_lists_content table
+ */
+function flag_lists_update_7302() {
+  db_drop_unique_key('flag_lists_content','fid_content_id_uid_sid');
+  db_drop_index('flag_lists_content','content_type_content_id');
+  db_drop_index('flag_lists_content','content_type_uid_sid');
+ 
+  db_change_field('flag_lists_content','content_type', 'entity_type',
+    array(
+      'type' => 'varchar',
+      'length' => '32',
+      'not null' => TRUE,
+      'default' => '',
+    ));
+
+  db_change_field('flag_lists_content','content_id', 'entity_id',
+    array(
+      'type' => 'int',
+      'unsigned' => TRUE,
+      'not null' => TRUE,
+      'default' => 0,
+    ));
+
+  db_add_unique_key('flag_lists_content',
+    'fid_entity_id_uid_sid',
+    array('fid', 'entity_id', 'uid', 'sid'));
+  db_add_index('flag_lists_content',
+    'entity_type_uid_sid',
+    array('entity_type', 'uid', 'sid'));
+  db_add_index('flag_lists_content',
+    'entity_type_entity_id', 
+    array('entity_type', 'entity_id'));
+}
+
+/**
+ * Update the flag_lists_counts table
+ */
+function flag_lists_update_7303() {
+  db_drop_primary_key('flag_lists_counts');
+  db_drop_index('flag_lists_counts','fid_content_type');
+  db_drop_index('flag_lists_counts','content_type_content_id');
+
+  db_change_field('flag_lists_counts','content_type', 'entity_type',
+    array(
+      'type' => 'varchar',
+      'length' => '32',
+      'not null' => TRUE,
+      'default' => '',
+    ));
+  db_change_field('flag_lists_counts','content_id', 'entity_id',
+    array(
+      'type' => 'int',
+      'unsigned' => TRUE,
+      'not null' => TRUE,
+      'default' => 0,
+      'disp-width' => '10',
+    ),
+    array('primary key' => array('fid', 'entity_id')));
+
+  db_add_index('flag_lists_counts',
+    'fid_entity_type',
+    array('fid', 'entity_type'));
+  db_add_index('flag_lists_counts',
+    'entity_type_entity_id',
+    array('entity_type', 'entity_id'));
+}
+
+/**
+ * Update the views
+ */
+function flag_lists_update_7304() {
+
+  $myview = views_get_view('flag_lists', TRUE);
+  $myview->display['default']->display_options['fields']['name_2']['table'] = 'flag';
+  $myview->display['default']->display_options['filters']['name']['table'] = 'flag';
+  views_save_view($myview);
+  // Clear the cache for the pager
+  $cache = $myview->name . ':block:results:';
+  cache_clear_all($cache, 'cache_views_data', TRUE);
+
+  $myview = views_get_view('flag_lists_content', TRUE);
+  unset($myview->display['default']->display_options['relationships']['content_id']);
+  $myview->display['default']->display_options['relationships']['entity_id']['id'] = 'entity_id';
+  $myview->display['default']->display_options['relationships']['entity_id']['table'] = 'flag_lists_content';
+  $myview->display['default']->display_options['relationships']['entity_id']['field'] = 'entity_id';
+  $myview->display['default']->display_options['relationships']['entity_id']['label'] = 'Listed content';
+  $myview->display['default']->display_options['relationships']['entity_id']['required'] = TRUE;
+  views_save_view($myview);
+  // Clear the cache for the pager
+  $cache = $myview->name . ':block:results:';
+  cache_clear_all($cache, 'cache_views_data', TRUE);
+
+  $myview = views_get_view('flag_lists_user_list', TRUE);
+  $myview->display['page_1']->display_options['path'] = 'flag/lists/%';
+  views_save_view($myview);
+  // Clear the cache for the pager
+  $cache = $myview->name . ':block:results:';
+  cache_clear_all($cache, 'cache_views_data', TRUE);
+
+}
+
+/**
+ * Update the flag_lists_flags table
+ */
+function flag_lists_update_7305() {
+  db_change_field('flag_lists_flags','uid', 'uid',
+    array(
+      'type' => 'int',
+      'unsigned' => TRUE,
+      'not null' => TRUE,
+    ));
+}

File diff suppressed because it is too large
+ 354 - 346
sites/all/modules/contrib/flag/flag_lists/flag_lists.module


+ 0 - 1737
sites/all/modules/contrib/flag/flag_lists/flag_lists.module.orig

@@ -1,1737 +0,0 @@
-<?php
-
-module_load_include('inc', 'flag', 'includes/flag.admin');
-module_load_include('inc', 'flag', 'flag');
-
-/**
- * @file
- * The Flag Lists module.
- *
- * Extends flag to allow individual users to create personal flags.
- */
-
-/**
- * Implementation of hook_menu().
- */
-function flag_lists_menu() {
-  $items = array();
-  $items[FLAG_ADMIN_PATH . '/lists'] = array(
-    'title' => 'Lists',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('flag_lists_settings_form'),
-    'access callback' => 'user_access',
-    'access arguments' => array('administer flags'),
-    'description' => 'Configure default settings allowing users to mark content with personal flags.',
-    'file' => 'flag_lists.admin.inc',
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 100,
-  );
-  $items[FLAG_ADMIN_PATH . '/lists/settings'] = array(
-    'title' => 'Settings',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('flag_lists_settings_form'),
-    'access callback' => 'user_access',
-    'access arguments' => array('administer flags'),
-    'description' => 'Configure default settings allowing users to mark content with personal flags.',
-    'file' => 'flag_lists.admin.inc',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => 1,
-  );
-  $items[FLAG_ADMIN_PATH . '/lists/list'] = array(
-    'title' => 'List',
-    'page callback' => 'flag_lists_admin_page',
-    'access callback' => 'user_access',
-    'access arguments' => array('administer flags'),
-    'file' => 'flag_lists.admin.inc',
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 2,
-  );
-  $items[FLAG_ADMIN_PATH . '/lists/template'] = array(
-    'title' => 'New template',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('flag_lists_create_template_form'),
-    'access callback' => 'user_access',
-    'access arguments' => array('administer flags'),
-    'file' => 'flag_lists.admin.inc',
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 3,
-  );
-  if (module_exists('devel_generate')) {
-    $items['admin/config/development/generate/flag-lists'] = array(
-      'title' => 'Generate lists',
-      'description' => 'Generate a given number of lists and listings on site content. Optionally delete existing lists and listings.',
-      'page callback' => 'drupal_get_form',
-      'page arguments' => array('flag_lists_generate_lists_form'),
-      'access callback' => 'user_access',
-      'access arguments' => array('administer flags'),
-      'file' => 'flag_lists.admin.inc',
-    );
-  }
-  $items['flag-lists/add/%'] = array(
-    'title' => 'Add a list',
-    'page callback' => 'flag_lists_add',
-    'page arguments' => array(2),
-    'access callback' => 'user_access',
-    'access arguments' => array('create flag lists'),
-    'file' => 'flag_lists.admin.inc',
-    'type' => MENU_NORMAL_ITEM,
-  );
-  // Callback for adding a new list through JS
-  $items['flag-lists/add/%/js'] = array(
-    'title' => 'Add a list',
-    'page callback' => 'flag_lists_add_js',
-    'page arguments' => array(2),
-    'access callback' => 'user_access',
-    'access arguments' => array('create flag lists'),
-    'file' => 'flag_lists.admin.inc',
-    'type' => MENU_CALLBACK,
-  );
-
-  $items['flags/lists/edit/%'] = array(
-    'title' => 'Edit a list',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('flag_lists_form', 3),
-    'access callback' => 'flag_lists_is_owner',
-    'access arguments' => array(2, 3),
-    'file' => 'flag_lists.admin.inc',
-    'type' => MENU_CALLBACK,
-  );
-  $items['flags/lists/delete/%'] = array(
-    'title' => 'Delete a list',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('flag_lists_delete_confirm', 3),
-    'access callback' => 'flag_lists_is_owner',
-    'access arguments' => array(2, 3),
-    'file' => 'flag_lists.admin.inc',
-    'type' => MENU_CALLBACK,
-  );
-  $items[FLAG_ADMIN_PATH . '/flag-lists/rebuild'] = array(
-    'title' => 'Rebuild all flag lists',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('flag_lists_rebuild_confirm'),
-    'access callback' => 'user_access',
-    'access arguments' => array('administer flag lists'),
-    'file' => 'flag_lists.admin.inc',
-    'type' => MENU_CALLBACK,
-  );
-  $items['flag-lists'] = array(
-    'title' => 'Flag',
-    'page callback' => 'flag_lists_page',
-    'access callback' => 'user_access',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-
-  $items['user/%user/flags/lists'] = array(
-    'title' => ucfirst(variable_get('flag_lists_name', 'list')),
-    'page callback' => 'flag_lists_user_page',
-    'page arguments' => array(1),
-    'access callback' => 'user_access',
-    'access arguments' => array('view flag lists'),
-    'type' => MENU_LOCAL_TASK,
-  );
-  $items['user/%user/flags/lists/%'] = array(
-    'title' => ucfirst(variable_get('flag_lists_name', 'list')) . ' content',
-    'page callback' => 'flag_lists_user_list',
-    'page arguments' => array(1, 4),
-    'access callback' => 'user_access',
-    'access arguments' => array('view flag lists'),
-    'type' => MENU_CALLBACK,
-  );
-  return $items;
-}
-
-/**
- * User flag page. Display a list of user-created flag lists.
- */
-function flag_lists_user_page($user) {
-    // Can we use our default view?
-  if (module_exists('views')) {
-    $view = views_get_view('flag_lists_user_lists', FALSE);
-    if (!empty($view)) {
-      $view->set_display('default');
-      $view->set_arguments(array($user->uid));
-      $output = $view->render();
-      drupal_set_title(str_replace(array_keys($view->build_info['substitutions']), $view->build_info['substitutions'], $view->build_info['title']));
-    }
-    return $output;
-  }
-  else {
-    return theme('flag_lists_user_page', array('uid' => $user->uid));
-  }
-}
-
-/**
- * Theme the output for a user flag administration page.
- */
-function theme_flag_lists_user_page($variables) {
-  $uid = $variables['uid'];
-
-  $account = user_load($uid);
-  drupal_set_title(t('Lists'));
-  if ($flags = flag_lists_get_user_flags(NULL, $account)) {
-    // Build the list of flag lists for this node.
-    foreach ($flags as $flag) {
-      $ops = theme('flag_lists_ops', array('flag' => $flag));
-      $items[] = l($flag->title, "user/$uid/flags/lists/" . $flag->fid) . $ops;
-    }
-  }
-  drupal_add_css(drupal_get_path('module', 'flag_lists') . '/theme/flag_lists.css');
-  return theme('item_list', array('items' => $items));
-}
-
-/**
- * List the contents of a user-defined list
- */
-function flag_lists_user_list($user, $fid) {
-  $uid = $user->uid;
-    // Can we use our default view?
-  if (module_exists('views')) {
-    $view = views_get_view('flag_lists_user_list', FALSE);
-    if (!empty($view)) {
-      $view->set_display('default');
-      $view->set_arguments(array($fid));
-      $output = $view->render();
-      drupal_set_title(str_replace(array_keys($view->build_info['substitutions']), $view->build_info['substitutions'], $view->build_info['title']));
-    }
-    return $output;
-  }
-
-  else {
-    return theme('flag_lists_user_list', array('uid' => $uid, 'fid' => $fid));
-  }
-}
-
-/**
- * Theme the output of user-defined list page
- */
-function theme_flag_lists_user_list($variables) {
-  $uid = $variables['uid'];
-  $fid = $variables['fid'];
-
-  $flag = flag_lists_get_flag($fid);
-  drupal_set_title($flag->title);
-  $content = flag_lists_get_flagged_content($fid, $uid);
-  foreach ($content as $item) {
-    if ($item->content_type == 'node') {
-      $node = node_load($item->entity_id);
-      $items[] = l($node->title, 'node/' . $node->nid);
-    }
-  }
-
-  $breadcrumb = menu_get_active_breadcrumb();
-  $breadcrumb[] = l(t('@name lists', array('@name' => drupal_ucfirst(variable_get('flag_lists_name', t('lists'))))), 'user/' . arg(1) . '/flags/lists');
-  drupal_set_breadcrumb($breadcrumb);
-  return theme('item_list', array('items' => $items));
-}
-
-/**
- * Implementation of hook_theme().
- */
-function flag_lists_theme() {
-  $path = drupal_get_path('module', 'flag') . '/theme';
-
-  return array(
-    'flag_lists_list' => array(
-      'variables' => array('node' => NULL, 'create' => NULL, 'ops' => NULL, 'use_flags' => NULL),
-    ),
-    'flag_lists_admin_page' => array(
-      'variables' => array('flags' => NULL),
-    ),
-    'flag_lists_user_page' => array(
-      'variables' => array('uid' => NULL),
-    ),
-    'flag_lists_user_list' => array(
-      'variables' => array('flag_name' => NULL),
-    ),
-    'flag_lists_ops' => array(
-      'variables' => array('flag' => NULL),
-    )
-  );
-}
-
-/**
- * Implementation of hook_permission().
- */
-function flag_lists_permission() {
-  return array(
-    'create flag lists' => array(
-      'title' => t('Create flag lists'),
-      'description' => t(''),
-    ),
-    'edit own flag lists' => array(
-      'title' => t('Edit own flag lists'),
-      'description' => t(''),
-    ),
-    'delete own flag lists' => array(
-      'title' => t('Delete own flag lists'),
-      'description' => t(''),
-    ),
-    'view flag lists' => array(
-      'title' => t('View flag lists'),
-      'description' => t(''),
-    ));
-}
-
-/**
- * Implementation of hook_form_alter().
- */
-function flag_lists_form_alter(&$form, &$form_state, $form_id) {
-  switch ($form_id) {
-    case 'flag_form':
-      // A template flag should always have a record in the flag_lists_types table.
-      $result = db_select('flag_lists_types', 'f')->fields('f')->execute();
-      foreach ($result as $type) {
-        $types[$type->name] = $type->type;
-      }
-
-      if (isset($types[$form['name']['#default_value']])) {
-        $form['name']['#type'] = 'value';
-        $form['global']['#type'] = 'value';
-        $form['title']['#description'] = t('A short, descriptive title for this template. It will be used in administrative interfaces to refer to this template.');
-
-        // Warn about types that already have a template.
-        foreach ($form['access']['types']['#options'] as $option => $value) {
-          if (in_array($option, $types) && $form['access']['types']['#default_value'] != $option) {
-            $form['access']['types']['#options'][$option] .= '<span class="description">' . t('(Already has a template.)') . '</span>';
-          }
-        }
-        $form['access']['types']['#description'] .= t('A type may only be selected in one list template.');
-
-        // Unset anon permissions for now. @todo allow anon listing.
-        unset($form['access']['roles']['flag']['#options'][1]);
-        unset($form['access']['roles']['unflag']['#options'][1]);
-
-        foreach (element_children($form['display']) as $display) {
-          $form['display'][$display]['#type'] = 'value';
-        }
-        $form['display']['link_type']['#default_value'] = 'fl_template';
-        $form['display']['#description'] = t('Unlike normal flags, lists are only displayed in a block provided by this module or in views blocks. See <a href="/admin/build/block/list">the block admin page</a> to place the block.');
-
-        $form['#validate'][] = 'flag_lists_template_validate';
-        $form['#submit'][] = 'flag_lists_template_submit';
-      }
-    break;
-
-    case 'views_exposed_form':
-      // Force the exposed filters to perform actions on the page itself because
-      // the views default viwe didn't come with a page display
-      if ($form['#id'] == 'views-exposed-form-flag-lists-default') {
-        $form['#action'] = '/' . implode('/', arg());
-      }
-    break;
-  }
-
-  // Flag lists operations related changes
-  if (strpos($form_id, 'views_form_') === 0) {
-    $flo = _flag_lists_ops_get_field($form_state['build_info']['args'][0]);
-
-    // Not a FLO-enabled views form.
-    if (empty($flo)) {
-      return;
-    }
-
-    // Add FLO's custom callbacks.
-    $form['#validate'][] = 'flag_lists_ops_form_validate';
-    $form['#submit'][] = 'flag_lists_ops_form_submit';
-
-    // Allow FLO to work when embedded using views_embed_view(), or in a block.
-    if (empty($flo->view->override_path)) {
-      if (!empty($flo->view->preview) || $flo->view->display_handler instanceof views_plugin_display_block) {
-        $flo->view->override_path = $_GET['q'];
-      }
-    }
-
-    // Quickfix for FLO & exposed filters using ajax. See http://drupal.org/node/1191928.
-    $query = drupal_get_query_parameters($_GET, array('q'));
-    $form['#action'] = url($flo->view->get_url(), array('query' => $query));
-
-    // Add basic FLO functionality.
-    if ($form_state['step'] == 'views_form_views_form') {
-      $form = flag_lists_ops_form($form, $form_state, $flo);
-    }
-  }
-}
-
-/**
- * Add the Flag list select menu widget.
- */
-function flag_lists_ops_form($form, &$form_state, $flo) {
-  $form['#attached']['js'][] = drupal_get_path('module', 'flag_lists') . '/js/flag_lists_ops.js';
-  $form['#attached']['css'][] = drupal_get_path('module', 'flag_lists') . '/css/flag_lists_ops.css';
-  $form['#prefix'] = '<div class="flo-views-form">';
-  $form['#suffix'] = '</div>';
-
-  $form_state['flo_operation'] = $flo->options['flo']['operation'];
-
-  // Force browser to reload the page if Back is hit.
-  if (preg_match('/msie/i', $_SERVER['HTTP_USER_AGENT'])) {
-    drupal_add_http_header('Cache-Control', 'no-cache'); // works for IE6+
-  }
-  else {
-    drupal_add_http_header('Cache-Control', 'no-store'); // works for Firefox and other browsers
-  }
-
-  global $user;
-  global $base_url;
-  $account = user_load($user->uid);
-  $items = array();
-  if ($flags = flag_lists_get_user_flags(NULL, $account)) {
-    // Build the list of flag lists for this node.
-    foreach ($flags as $flag) {
-      $items[((string)$flag->fid)] = $flag->title;
-    }
-  }
-
-  // Group items into a fieldset for easier theming.
-  $form['flag_lists_' . $form_state['flo_operation']] = array(
-    '#type' => 'fieldset',
-    '#title' => t('List operations'),
-    '#tree' => TRUE,
-    '#attributes' => array('class' => array('flag-lists-ops-fieldset')),
-  );
-  switch ($flo->options['flo']['operation']) {
-    case 'unflag':
-      $null_text = 'Remove from a list';
-      $operation = 'unflag';
-      $form['flag_lists_' . $form_state['flo_operation']]['list'] = array(
-        '#type' => 'button',
-        '#value' => t('Remove from list'),
-        '#ajax' => array(
-          'callback' => 'flag_lists_ops_form_ajax_callback',
-          'wrapper' => 'flag-list-ops-container-' . $flo->options['flo']['operation'],
-        ),
-      );
-      break;
-    default:
-      $null_text = 'Add to a list';
-      $operation = 'flag';
-      drupal_add_library('system', 'ui.dialog');
-      $form['flag_lists_' . $form_state['flo_operation']]['list'] = array(
-        '#type' => 'select',
-        '#options' => array('0' => t('- ' . $null_text . ' -')) + $items,
-        '#default_value' => '0',
-        '#ajax' => array(
-         'callback' => 'flag_lists_ops_form_ajax_callback',
-         'wrapper' => 'flag-list-ops-container-' . $flo->options['flo']['operation'],
-        ),
-        '#attributes' => array(
-          'class' => array(
-            'flag-lists-ops-dropdown',
-          ),
-        ),
-      );
-
-      // Add the necessary JS for creating a new list via AJAX
-      $result = db_select('flag_lists_types')
-        ->fields('flag_lists_types')
-        ->execute();
-      $list_types = array();
-      foreach ($result as $row) {
-        if (!empty($row->type)) {
-          $list_types[] = $row->type;
-        }
-      }
-      drupal_add_js(array('flag_lists' => array('types' => $list_types, 'json_path' => $base_url . '/flag-lists/add/%/js')), 'setting');
-      break;
-  }
-
-  // Get the $ops from the originating form.
-  if (!empty($form_state['values']['flag_lists_' . $form_state['flo_operation']]['list'])) {
-    $list = $form_state['values']['flag_lists_' . $form_state['flo_operation']]['list'];
-  }
-  if (!empty($_REQUEST['flag_lists_ops'])) {
-    $ops = $_REQUEST['flag_lists_ops'];
-  }
-  if (!empty($ops) && !empty($list) && $form_state['values']['flag_lists_' . $form_state['flo_operation']]['operation'] == 'unflag') {
-    $hidden_deleted_values = '';
-    foreach ($ops as $nid) {
-      $hidden_deleted_values .= '<input type="hidden" class="flo-deleted-value" value="' . $nid . '" />';
-    }
-  }
-
-  $form['flag_lists_' . $form_state['flo_operation']]['operation'] = array(
-    '#type' => 'hidden',
-    '#value' => $operation,
-  );
-  $form['flag_lists_' . $form_state['flo_operation']]['go'] = array(
-    '#type' => 'submit',
-    '#value' => t('Go'),
-    '#attributes' => array(
-      'class' => array('flag-lists-ops-go'),
-    ),
-  );
-  unset($form['actions']['submit']);
-
-  // Generate a status message for AJAX submission.
-  $form['flag_lists_' . $form_state['flo_operation']]['status_message'] = array('#markup' => '');
-  $form['flag_lists_' . $form_state['flo_operation']]['#prefix'] = '<div id="flag-list-ops-container-' . $flo->options['flo']['operation'] . '">';
-  $form['flag_lists_' . $form_state['flo_operation']]['#suffix'] = (!empty($hidden_deleted_values)) ? $hidden_deleted_values : '' . '</div>';
-
-  return $form;
-}
-
-function flag_lists_ops_form_ajax_callback($form, $form_state) {
-  // The form has already been submitted and updated. We can return the replaced
-  // item as it is.
-  if (!flag_lists_ops_form_validate($form, $form_state)) {
-    $message = flag_lists_ops_form_submit($form, $form_state);
-  }
-
-  $form['flag_lists_' . $form_state['flo_operation']]['status_message']['#markup'] = '<div class="alert alert-success">' . $message . '</div>';
-  if ($form_state['flo_operation'] == 'flag') $form['flag_lists_' . $form_state['flo_operation']]['list']['#value'] = '0';
-  $form['flag_lists_' . $form_state['flo_operation']]['status_message']['#attributes']['class'][] = 'alert-success';
-
-  return $form['flag_lists_' . $form_state['flo_operation']];
-}
-
-function flag_lists_ops_form_validate(&$form, &$form_state) {
-  global $user;
-
-  $error_count = 0;
-
-  // Check to see if an items are selected, if not fail right away.
-  if (!isset($_REQUEST['flag_lists_ops']) || empty($_REQUEST['flag_lists_ops'])) {
-    form_set_error('', t('No content selected.'));
-    $error_count++;
-    return $error_count;
-  }
-
-  switch ($form_state['values']['flag_lists_' . $form_state['flo_operation']]['operation']) {
-    case 'unflag':
-      $ops = $_REQUEST['flag_lists_ops'];
-      foreach ($ops as $key => $op) {
-        $ops[$key] = explode('-', $op);
-        if (empty($ops[$key][1]) || !($flag = flag_lists_get_flag($ops[$key][1]))) {
-          form_set_error('flag_lists][remove', t('Invalid options list selected to remove from.'));
-          $error_count++;
-        }
-        else if ($flag->uid != $user->uid) {
-          form_set_error('flag_lists][remove', t('You are only allowed to remove content from your own lists.'));
-          $error_count++;
-        }
-      }
-      break;
-    default:
-      if (empty($form_state['values']['flag_lists_' . $form_state['flo_operation']]['list'])) {
-        form_set_error('flag_lists][list', t('No list selected. Please select a list to add to.'));
-        $error_count++;
-      }
-      else if (!($flag = flag_lists_get_flag($form_state['values']['flag_lists_' . $form_state['flo_operation']]['list']))) {
-        form_set_error('flag_lists][list', t('Invalid list selected. Please select a list to add to.'));
-        $error_count++;
-      }
-      else if ($flag->uid != $user->uid) {
-        form_set_error('flag_lists][list', t('Invalid list selected. Please select a list to add to.'));
-        $error_count++;
-      }
-      break;
-  }
-
-  return $error_count;
-}
-
-function flag_lists_ops_form_submit(&$form, &$form_state) {
-  // Get the $ops from the originating form.
-  $ops = $_REQUEST['flag_lists_ops'];
-  $success_count = 0;
-
-  // Get the operation, or set it
-  switch ($form_state['values']['flag_lists_' . $form_state['flo_operation']]['operation']) {
-    case 'unflag':
-      $operation = 'unflag';
-      $message = 'removed from';
-
-      foreach ($ops as $op) {
-        // Process the ID into 2 parts
-        list($nid, $fid) = explode('-', $op);
-        if (empty($nid) || empty($fid)) return;
-
-        if (($flag = flag_lists_get_flag($fid)) && ($node = node_load($nid))) {
-          if (flag_lists_do_flag($flag, $operation, $nid)) {
-            $success_count++;
-          }
-        }
-      }
-      break;
-    default:
-      $operation = 'flag';
-      $message = 'added to';
-
-      if ($flag = flag_lists_get_flag($form_state['values']['flag_lists_' . $form_state['flo_operation']]['list'])) {
-        foreach ($ops as $nid) {
-          if (flag_lists_do_flag($flag, $operation, $nid)) {
-            $success_count++;
-          }
-        }
-      }
-      break;
-  }
-
-  $message = t('@count item(s) ' . $message . ' !title', array('@count' => $success_count, '!title' => $flag->title));
-  if ($_GET['q'] != 'system/ajax') {
-    drupal_set_message($message);
-  }
-  else {
-    return $message;
-  }
-}
-
-/**
- * Gets the FLO field if it exists on the passed-in view.
- *
- * @return
- *  The field object if found. Otherwise, FALSE.
- */
-function _flag_lists_ops_get_field($view) {
-  foreach ($view->field as $field_name => $field) {
-    if ($field instanceof flag_lists_handler_field_ops) {
-      // Add in the view object for convenience.
-      $field->view = $view;
-      return $field;
-    }
-  }
-  return FALSE;
-}
-
-function flag_lists_template_validate($form, &$form_state) {
-  $types = array_filter($form_state['values']['types']);
-  $errors = array();
-  foreach ($types as $type) {
-    $result = db_select('flag_lists_types', 'f')
-      ->fields('f')
-      ->condition('type', $type)
-      ->condition('name', $form_state['values']['name'], '<>')
-      ->execute();
-    foreach ($result as $errors) {
-      $content_types[] = $errors->type;
-      $templates[] = $errors->name;
-    }
-  }
-  if (isset($content_types) && count($content_types)) {
-    $content_types = implode(', ', $content_types);
-    $templates = implode(', ', array_unique($templates));
-    form_set_error('types', t('The flaggable content type(s) "@type" is(are) already assigned to the template(s) "@template." A content type may be assigned to only one template. To reassign a content type you must first remove its other assignment.', array('@type' => $content_types, '@template' => $templates)));
-  }
-}
-
-function flag_lists_template_submit($form, &$form_state) {
-  $types = array_filter($form_state['values']['types']);
-  // Clean out the old types, then add the new.
-  $num_deleted = db_delete('flag_lists_types')
-    ->condition('name', $form_state['values']['name'])
-    ->execute();
-  foreach ($types as $type) {
-    db_insert('flag_lists_types')
-      ->fields(array(
-        'name' => $form_state['values']['name'],
-        'type' => $type,
-      ))
-      ->execute();
-  }
-}
-/**
- * Helper function to build an array of all lists available to or owned by the
- * current user and that are available on the current content type.
- */
-function flag_lists_get_content_fids() {
-  global $user;
-
-  // This is a node view. We only care about nodes for now.
-  if (arg(0) == 'node' && is_numeric(arg(1)) && is_null(arg(2))) {
-    $type = db_select('node', 'n')
-      ->fields('n', array('type'))
-      ->condition('nid', arg(1))
-      ->execute()
-      ->fetchField();
-
-    // Get current user's flags for this node.
-    $query = db_select('flag_lists', 'fc')
-      ->fields('f', 'fid')
-      ->condition('fc.uid', $user->uid)
-      ->condition('fn.type', $type);
-    $query->leftJoin('flag_types', 'fn', 'fn.fid = fc.fid');
-    $query->leftJoin('flags', 'f', 'fc.fid = f.fid');
-    $fc_result = $query->execute();
-
-    foreach ($fc_result as $row) {
-      $fids[] = $row->fid;
-    }
-  }
-
-  // This is the flag / unflag callback
-  elseif (arg(0) == 'flag' && (arg(1) == 'flag' || arg(1) == 'unflag')) {
-    // Get the flag for this request.
-    $fids[] = db_select('flags', 'f')
-      ->fields('f', array('fid'))
-      ->condition('name', arg(2))
-      ->execute()
-      ->fetchField();
-  }
-
-  // Get the regular flags for this node. The flag module will narrow by role,
-  // etc. when flag_get_flags() is called. These flag ids are always returned.
-  $query = db_select('flags', 'f')
-    ->fields('f', array('fid'))
-    ->condition('fc.fid', NULL);
-  $query->leftJoin('flag_lists', 'fc', 'fc.fid = f.fid');
-  $f_result = $query->execute();
-
-  foreach ($f_result as $obj) {
-    $fids[] = $obj->fid;
-  }
-  if (is_array($fids)) {
-    return array_unique($fids);
-  }
-  else {
-    return array();
-  }
-}
-
-/**
- * Implements hook_block_info();
- */
-function flag_lists_block_info() {
-  return array(
-    'flag_lists' => array(
-      'info' => t('Lists'),
-      'cache' => DRUPAL_NO_CACHE,
-    ),
-    'flag_lists_list' => array(
-      'info' => t('My lists'),
-      'cache' => DRUPAL_NO_CACHE,
-    ),
-  );
-}
-
-/**
- * Implements hook_block_configure().
- */
-function flag_lists_block_configure($delta = '') {
-  $form = array();
-
-  switch ($delta) {
-    case 'flag_lists':
-      $form = array(
-        'create_lists' => array(
-          '#type' => 'checkbox',
-          '#title' => t('Show link to add new list'),
-          '#default_value' => variable_get('flag_lists_create_lists', 0),
-          '#description' => t('Checking this adds a link to the create new list form.'),
-        ),
-        'ops' => array(
-          '#type' => 'checkbox',
-          '#title' => t('Show edit and delete links'),
-          '#default_value' => variable_get('flag_lists_ops', 0),
-          '#description' => t('Checking this appends edit and delete links to each list name for users with access.'),
-        ),
-        'include_flags' => array(
-          '#type' => 'checkbox',
-          '#title' => t('Include flag module flags'),
-          '#default_value' => variable_get('flag_lists_include_flags', 0),
-          '#description' => t('Checking this will append flag module flags to the list of lists.'),
-        ),
-      );
-      break;
-  }
-  return $form;
-}
-
-/**
- * Implements hook_block_save().
- */
-function flag_lists_block_save($delta = '', $edit = array()) {
-  switch ($delta) {
-    case 'flag_lists':
-      variable_set('flag_lists_create_lists', $edit['create_lists']);
-      variable_set('flag_lists_ops', $edit['ops']);
-      variable_set('flag_lists_include_flags', $edit['include_flags']);
-      break;
-  }
-}
-
-/**
- * Implements hook_block_view().
- */
-function flag_lists_block_view($delta = '') {
-  $block = array();
-
-  switch ($delta) {
-    case 'flag_lists':
-      if (user_access('create flag lists')) {
-        $block = array(
-          'subject' => t('My lists'),
-          'content' => theme('flag_lists_list', array('node' => NULL, 'create' => variable_get('flag_lists_create_lists', 0), 'ops' =>variable_get('flag_lists_ops', 0), 'use_flags' => variable_get('flag_lists_include_flags', 0))),
-        );
-      }
-      break;
-    case 'flag_lists_list':
-      if (user_access('create flag lists')) {
-        global $user;
-        $account = user_load($user->uid);
-
-        $block = array(
-          'subject' => t('My lists'),
-          'content' => flag_lists_user_page($account),
-        );
-      }
-      break;
-  }
-  return (!empty($block['content'])) ? $block : array();
-}
-
-/**
- * Implementation of hook_user_delete().
- */
-function flag_lists_user_delete($account) {
-  // Remove personal flags by this user.
-  $num_deleted = db_delete('flag_lists_flags')
-    ->condition('uid', $account->uid)
-    ->execute();
-}
-
-/**
- * Build a flag's messages.
- */
-function flag_lists_set_messages(&$flag) {
-  // Get the parent flag. These are cached by the flag module.
-  $pflag = flag_get_flag(NULL, $flag->pfid);
-  $title = $flag->title;
-  $lists_name = variable_get('flag_lists_name', t('list'));
-  $flag->flag_short      = $pflag->flag_short;
-  $flag->flag_long       = $pflag->flag_long;
-  $flag->flag_message    = $pflag->flag_message;
-  $flag->unflag_short    = $pflag->unflag_short;
-  $flag->unflag_long     = $pflag->unflag_long;
-  $flag->unflag_message  = $pflag->unflag_message;
-}
-
-/**
- * Implementation of hook_flag_access().
- *
- * Make sure a user can only see his/her own personal flags.
- */
-function flag_lists_flag_access($flag, $entity_id, $action, $account) {
-  if (!empty($flag->module) && $flag->module == 'flag_lists') {
-  switch ($action) {
-    case 'flag':
-    case 'unflag':
-      $fid = db_select('flag_lists_flags', 'f')
-        ->fields('f')
-        ->condition('f.uid', $account->uid)
-        ->execute()
-        ->fetchField();
-      if (!empty($fid)) {
-        return array('flag_lists' => TRUE);
-      }
-      else {
-        return array('flag_lists' => FALSE);
-      }
-  }
-}
-}
-
-/**
- * Implementation of hook_link().
- */
-// There may be a better way to keep flag lists out of the links, but this
-// works for now. @todo Find a better way to keep flags lists out of links.
-function flag_lists_link_alter(&$links, $node) {
-  if (!variable_get('flag_lists_use_links', 1)) {
-    foreach ($links as $name => $link) {
-      if (stristr($name, 'flag-fl_')) {
-        unset($links[$name]);
-      }
-    }
-  }
-}
-
-/**
- * Implementation of hook_flag_alter().
- */
-function flag_lists_flag_alter(&$flag) {
-}
-
-/**
- * Implementation of hook_flag_delete().
- *
- * This is not in flag yet.
- */
-function flag_lists_flag_delete($flag) {
-  // Template flag is being deleted. Clean up our tables.
-  // Collect the sub-flag fids so we can delete counts and content records.
-  $results = db_select('flag_lists_flags', 'f')
-    ->fields('f', array('fid', 'name'))
-    ->condition('pfid', $flag->fid)
-    ->execute();
-  foreach ($results as $fid) {
-    db_delete('flag_lists_counts')
-      ->condition('fid', $flag->fid)
-      ->execute();
-    db_delete('flag_lists_content')
-      ->condition('fid', $flag->fid)
-      ->execute();
-  }
-
-  // flag_lists_types uses the template flag name, not our own fid.
-  db_delete('flag_lists_types')
-      ->condition('name', $flag->name)
-      ->execute();
-
-  // Now delete the sub-flags.
-  $num_deleted = db_delete('flag_lists_flags')
-      ->condition('pfid', $flag->fid)
-      ->execute();
-  if (!empty($num_deleted)) {
-    drupal_set_message(t('The template flag "@title" and all its sub-flags have been deleted.', array('@title' => $flag->title)));
-  }
-}
-
-/**
- * Implementation of hook_views_api().
- */
-function flag_lists_views_api() {
-  return array(
-    'api' => 2.0,
-    'path' => drupal_get_path('module', 'flag_lists') . '/includes',
-  );
-}
-
-/**
- * Helper function to test if a flag is owned by the current user, or current
- * user can administer flags.
- */
-function flag_lists_is_owner($action, $name) {
-  global $user;
-  if (user_access('administer flags')) {
-    return TRUE;
-  }
-
-  // If we don't have an fid, then we have the flag name.
-  if (is_numeric($name)) {
-    $query = db_select('flag_lists_flags', 'f')->condition('fid', $name);
-    $query->addField('f', 'name');
-    $name = $query->execute()->fetchField();
-  }
-
-  if (!user_access($action . ' own flag lists')) {
-    return FALSE;
-  }
-  if (db_select('flag_lists_flags', 'f')->fields('f')->condition('f.name', $name)->condition('f.uid', $user->uid)->countQuery()->execute()->fetchField()) {
-    return TRUE;
-  }
-  return FALSE;
-}
-
-/**
- * Get a single user's lists, and merge in flag module flags
- */
-function flag_lists_get_user_flags($content_type = NULL, $account = NULL, $use_flags = FALSE) {
-  $flags = array();
-  $lists = array();
-  if (!isset($account)) {
-    $account = $GLOBALS['user'];
-  }
-  // Get flag lists flags
-  $query = db_select('flag_lists_flags', 'fl')
-    ->fields('fl')
-    ->condition('fl.uid', $account->uid);
-  $query->leftJoin('flag', 'f', 'fl.pfid = f.fid');
-  $query->leftJoin('flag_lists_types', 'ft', 'ft.name = f.name');
-  $query->addField('ft', 'type');
-  if ($content_type) {
-    $query->condition('ft.type', $content_type);
-  }
-
-  $result = $query->execute();
-  foreach ($result as $row) {
-    if (!isset($lists[$row->name])) {
-      $lists[$row->name] = flag_flag::factory_by_row($row);
-      $lists[$row->name]->module = 'flag_lists';
-    }
-    else {
-      $lists[$row->name]->types[] = $row->type;
-    }
-  }
-  // Get regular flags.
-  if ($use_flags) {
-    $flags = flag_get_flags('node', $content_type, $account);
-
-    // Strip out any list templates
-    foreach ($flags as $key => $flag) {
-      if (stristr($flag->name, 'fl_template') !== FALSE) {
-        unset($flags[$key]);
-      }
-    }
-  }
-
-  $flags = array_merge($lists, $flags);
-  return $flags;
-}
-
-/**
- * Theme function to return edit, delete links.
- *
- * @param $flag
- *   The flag whose links are being built.
- */
-function theme_flag_lists_ops($variables) {
-  $flag = $variables['flag'];
-
-  $links = array(
-    'flags_edit' =>  array('title' => t('edit'), 'href' => 'flags/lists/edit/' . $flag->name, 'query' => drupal_get_destination()),
-    'flags_delete' =>  array('title' => t('delete'), 'href' => 'flags/lists/delete/' . $flag->name, 'query' => drupal_get_destination()),
-  );
-  return theme('links', array('links' => $links, 'attributes' => array('class' => 'flag_lists_ops')));
-}
-
-/**
- * Theme a list of lists
- *
- * @param $node
- *   The listable node
- * @param boolean $create
- *   Show the create list form.
- * @param boolean $ops
- *   Show the edit / delete links for lists
- * @param boolean $use_flags
- *   Show flags from the flag module
- * @return <type>
- */
-
-// @todo Separate out the code from the theming better.
-function theme_flag_lists_list($variables) {
-  $node = $variables['node'];
-  $create = $variables['create'];
-  $ops = $variables['ops'];
-  $use_flags = $variables['use_flags'];
-
-  $items = array();
-
-  // Make sure we have a node.
-  if (is_object($node) && user_access('create flag lists')) {
-    $content_type = $node->type;
-    $entity_id = $node->nid;
-  }
-  // Or at least confirm we are on a node page and use has access.
-  elseif (arg(0) == 'node' && is_numeric(arg(1)) && user_access('create flag lists')) {
-    $entity_id = arg(1);
-    $query = db_select('node')->condition('nid', $entity_id);
-    $query->addField('node', 'type');
-    $content_type = $query->execute()->fetchField();
-  }
-  else {
-    return;
-  }
-
-  // Do we have a list template for this node type, or are we s
-  if (!flag_lists_template_exists($content_type) && !$use_flags) {
-    return;
-  }
-
-  global $user;
-  if ($flags = flag_lists_get_user_flags($content_type, $user, $use_flags)) {
-    // Build the list of lists for this node.
-    foreach ($flags as $flag) {
-      if ($flag->module == 'flag_lists') {
-      $action = _flag_lists_is_flagged($flag, $entity_id, $user->uid, 0) ? 'unflag' : 'flag';
-      }
-      else {
-        $action = $flag->is_flagged($entity_id) ? 'unflag' : 'flag';;
-      }
-
-      // Do we need the ops?
-      if ($ops && $flag->module == 'flag_lists') {
-        $ops_links = theme('flag_lists_ops', array('flag' => $flag));
-        $link = $flag->theme($action, $entity_id) . $ops_links;
-      }
-      else {
-        $link = $flag->theme($action, $entity_id);
-      }
-
-      // If it's a list, fix the link.
-      if ($flag->module == 'flag_lists') {
-        flag_lists_fix_link($link, $action);
-      }
-      $items[] = $link;
-    }
-  }
-  if ($create && flag_lists_template_exists($content_type)) {
-    $items[] = l(t('Make a new @name', array('@name' => variable_get('flag_lists_name', t('list')))), 'flag-lists/add/' . $content_type, array('query' => drupal_get_destination()));
-  }
-
-  // Return if nothing to display.
-  if (empty($items) || !count($items)) {
-    return;
-  }
-
-  drupal_add_css(drupal_get_path('module', 'flag_lists') . '/theme/flag_lists.css');
-  return theme('item_list', array('items' => $items, 'type' => 'ul', 'attributes' => array('class' => 'flag-lists-links')));
-}
-
-
-// Do we still need this, and/or do we need our own cache?
-/**
- * Clear the flag cache.
- *
- * This is a less severe cache clear than provided by flag. All flag lists
- * users must be authorized, so we don't need to flush the page cache. For now,
- * flag lists titles won't be in the menu, so no need to clear that.
- */
-function _flag_lists_clear_cache() {
-  // We're not using _flag_clear_cache because we probably don't need the menu
-  // rebuild and don't need to clear the page cache.
-  if (module_exists('views')) {
-    views_invalidate_cache();
-  }
-}
-
-/**
- * Update ALL flag lists with settings form values.
- */
-function flag_lists_rebuild() {
-  $flags = flag_lists_get_flags();
-  foreach ($flags as $flag) {
-    flag_lists_set_messages($flag);
-    $flag->link_type = 'toggle';
-    flag_lists_save($flag);
-  }
-}
-
-/**
- * Build array of all flag lists.
- *
- * @return If limit and header arguments are provided, the paged flags, otherwise
- * an array of all flags.
- */
-function flag_lists_get_flags($limit = NULL, $header = NULL) {
-  $flags = array();
-  if ($limit) {
-    $query = db_select('flag_lists_flags', 'fl')
-      ->fields('fl')
-      ->groupBy('fl.fid')
-      ->extend('PagerDefault')
-        ->limit($limit);
-    $query->leftJoin('flag_types', 'ft', 'ft.fid = fl.pfid');
-    $query->addExpression('GROUP_CONCAT(ft.type)', 'types');
-    $result = $query->execute();
-  }
-  else {
-    $query = db_select('flag_lists_flags', 'fl')
-      ->fields('fl')
-      ->groupBy('fl.fid');
-    $query->leftJoin('flag_types', 'ft', 'ft.fid = fl.pfid');
-    $query->addExpression('GROUP_CONCAT(ft.type)', 'types');
-    $result = $query->execute();
-  }
-  foreach ($result as $row) {
-    $flags[$row->name] = flag_flag::factory_by_row($row);
-    $flags[$row->name]->types = explode(',', $row->types);
-    $flags[$row->name]->uid = $row->uid;
-  }
-  return $flags;
-}
-
-/**
- * Get a specific flag.
- *
- * Using this instead of flag_get_flag() for performance.
- */
-function flag_lists_get_flag($fid) {
-  // If we don't have an fid, then we have the flag name.
-  if (!is_numeric($fid)) {
-    $query = db_select('flag_lists_flags')
-      ->condition('name', $fid);
-    $query->addField('flag_lists_flags', 'fid');
-    $fid = $query->execute()->fetchField();
-  }
-
-  $query = db_select('flag_lists_flags', 'fl')
-    ->fields('fl')
-    ->condition('fl.fid', $fid);
-  $query->leftJoin('flag_types', 'ft', 'ft.fid = fl.pfid');
-  $query->addField('ft', 'type');
-  $result = $query->execute();
-
-  foreach ($result as $row) {
-    if (!isset($flag->name)) {
-      $flag = flag_flag::factory_by_row($row);
-    }
-    else {
-      $flag->types[] = $row->type;
-    }
-  }
-  return $flag;
-}
-
-/**
- * Get all flagged content in a flag.
- *
- * Using this instead of flag_get_flagged_content() because we need to make sure that we use flag_lists_get_flags()
- *
- * @param
- *   The flag name for which to retrieve flagged content.
- */
-function flag_lists_get_flagged_content($fid, $uid) {
-  $return = array();
-  $flag = flag_lists_get_flag($fid);
-
-  $result = db_select('flag_lists_content', 'f')
-    ->fields('f')
-    ->condition('f.fid', $flag->fid)
-    ->condition('f.uid', $uid)
-    ->execute();
-
-  foreach ($result as $row) {
-    $return[] = $row;
-  }
-  return $return;
-}
-
-
-/**
- * Implementation of hook_flag_link().
- *
- * When Flag uses a link type provided by this module, it will call this
- * implementation of hook_flag_link(). It returns a single link's attributes,
- * using the same structure as hook_link(). Note that "title" is provided by
- * the Flag configuration if not specified here.
- *
- * @param $flag
- *   The full flag object of for the flag link being generated.
- * @param $action
- *   The action this link will perform. Either 'flag' or 'unflag'.
- * @param $entity_id
- *   The ID of the node, comment, user, or other object being flagged.
- * @return
- *   An array defining properties of the link.
- */
-function flag_lists_flag_link($flag, $action, $entity_id) {
-  return array();
-}
-
-/**
- * Implementation of hook_flag_link_types().
- */
-function flag_lists_flag_link_types() {
-  return array(
-    'fl_template' => array(
-      'title' => t('Flag Lists toggle'),
-      'description' => t('If you are creating a Flag lists template flag, you must select this link type.'),
-    ),
-  );
-}
-
-
-function flag_lists_flag_default_flags($name = 'fl_template') {
-  // return array(
-  //   array(
-  //     'api_version' => 2,
-  //     'name' => $name,
-  //     'module' => 'flag_lists',
-  //     'content_type' => 'node',
-  //     'global' => 0,
-  //     'show_on_page' => 0,
-  //     'show_on_teaser' => 0,
-  //     'show_on_form' => 0,
-  //     // The following UI labels aren't wrapped in t() because they are written
-  //     // to the DB in English. They are passed to t() later, thus allowing for
-  //     // multilingual sites.
-  //     'title' => 'Flag lists template',
-  //     'flag_short' => 'Add to your [flag_lists:title] [flag_lists:term]',
-  //     'flag_long' => 'Add this post to your [flag_lists:title] [flag_lists:term]',
-  //     'flag_message' => 'This post has been added to your [flag_lists:title] [flag_lists:term]',
-  //     'unflag_short' => 'Remove this from your [flag_lists:title] [flag_lists:term]',
-  //     'unflag_long' => 'Remove this post from your [flag_lists:title] [flag_lists:term]',
-  //     'unflag_message' => 'This post has been removed from your [flag_lists:title] [flag_lists:term]',
-  //     'types' => array(),
-  //     'link_type' => 'toggle',
-  //   ),
-  // );
-
-$flags = array();
-// Exported flag: "Flag lists template".
-$flags['fl_template'] = array(
-  'entity_type' => 'node',
-  'title' => 'Flag lists template',
-  'global' => 0,
-  'types' => array(),
-  'flag_short' => 'Add to your [flag_lists:title] [flag_lists:term]',
-  'flag_long' => 'Add this post to your [flag_lists:title] [flag_lists:term]',
-  'flag_message' => 'This post has been added to your [flag_lists:title] [flag_lists:term]',
-  'unflag_short' => 'Remove this from your [flag_lists:title] [flag_lists:term]',
-  'unflag_long' => 'Remove this post from your [flag_lists:title] [flag_lists:term]',
-  'unflag_message' => 'This post has been removed from your [flag_lists:title] [flag_lists:term]',
-  'unflag_denied_text' => '',
-  'link_type' => 'toggle',
-  'weight' => 0,
-  'api_version' => 3,
-  'module' => 'flag_lists',
-  'show_on_page' => 0,
-  'show_on_teaser' => 0,
-  'show_on_form' => 0,
-  'status' => FALSE,
-  'import_roles' => array(
-    'flag' => array(),
-    'unflag' => array(),
-  ),
-);
-return $flags;
-
-  
-}
-
-/**
- * Saves a flag to the database. It is a wrapper around update($flag) and insert($flag).
- */
-function flag_lists_save(&$flag, $account = NULL) {
-  if (!isset($account)) {
-    $account = $GLOBALS['user'];
-  }
-
-  if (isset($flag->fid)) {
-    flag_lists_update($flag);
-    $flag->is_new = FALSE;
-    module_invoke_all('flag_lists', $flag, $account);
-  }
-  else {
-    flag_lists_insert($flag);
-    $flag->is_new = TRUE;
-    module_invoke_all('flag_lists', $flag, $account);
-  }
-  // Clear the page cache for anonymous users.
-//    cache_clear_all('*', 'cache_page', TRUE);
-}
-
-/**
- * Saves an existing flag to the database. Better use save($flag).
- */
-function flag_lists_update($flag) {
-  $num_updated = db_update('flag_lists_flags')
-    ->fields(array(
-      'title' => $flag->title,
-      'name' => $flag->name,
-      'options' => $flag->get_serialized_options($flag),
-    ))
-    ->condition('fid', $flag->fid)
-    ->execute();
-}
-
-/**
- * Saves a new flag to the database. Better use save($flag).
- */
-function flag_lists_insert($flag) {
-  $flag->fid = db_insert('flag_lists_flags')
-    ->fields(array(
-      'pfid' => $flag->pfid,
-      'uid' => $flag->uid,
-      'entity_type' => $flag->entity_type,
-      'name' => $flag->name,
-      'title' => $flag->title,
-      'options' => $flag->get_serialized_options($flag),
-    ))
-    ->execute();
-  $flag->name = 'flag_lists_' . $flag->uid . '_' . $flag->fid;
-  flag_lists_update($flag);
-}
-
-/**
- * Delete a flag_lists flag.
- *
- */
-function flag_lists_fl_delete($flag, $account = NULL) {
-  if (!isset($account)) {
-    $account = $GLOBALS['user'];
-  }
-
-  db_delete('flag_lists_counts')->condition('fid', $flag->fid)->execute();
-  db_delete('flag_lists_content')->condition('fid', $flag->fid)->execute();
-  db_delete('flag_lists_flags')->condition('fid', $flag->fid)->execute();
-
-  $flag->is_deleted = TRUE;
-  module_invoke_all('flag_lists', $flag, $account);
-  _flag_lists_clear_cache();
-  drupal_set_message(t('The @name @title has been deleted.', array('@name' => variable_get('flag_lists_name', t('list')), '@title' => $flag->title)));
-}
-
-
-/**
- * Menu callback for (un)flagging a node.
- *
- * Used both for the regular callback as well as the JS version. We use this
- * instead of the flag module's because our flags are not in the flags table.
- */
-function flag_lists_page($action = NULL, $flag_name = NULL, $entity_id = NULL) {
-  global $user;
-
-  // Shorten up the variables that affect the behavior of this page.
-  $js = isset($_REQUEST['js']);
-  $token = $_REQUEST['token'];
-
-  // Specifically $_GET to avoid getting the $_COOKIE variable by the same key.
-  $has_js = isset($_GET['has_js']);
-
-  // Check the flag token, then perform the flagging.
-  if (!flag_check_token($token, $entity_id)) {
-    $error = t('Bad token. You seem to have followed an invalid link.');
-  }
-  elseif ($user->uid == 0 && !$has_js) {
-    $error = t('You must have JavaScript and cookies enabled in your browser to flag content.');
-  }
-  else {
-    if (empty($flag_name) || !($flag = flag_lists_get_flag($flag_name))) {
-      // Flag does not exist.
-      $error = t('You are not allowed to flag, or unflag, this content.');
-    }
-
-    // Identify it as ours.
-    $flag->module = 'flag_lists';
-    flag_lists_do_flag($flag, $action, $entity_id);
-  }
-
-  // If an error was received, set a message and exit.
-  if (isset($error)) {
-    if ($js) {
-      drupal_add_http_header('Content-Type', 'text/javascript; charset=utf-8');
-      print drupal_to_js(array(
-        'status' => FALSE,
-        'errorMessage' => $error,
-      ));
-      exit;
-    }
-    else {
-      drupal_set_message($error);
-      drupal_access_denied();
-      return;
-    }
-  }
-
-  // If successful, return data according to the request type.
-  if ($js) {
-    drupal_add_http_header('Content-Type', 'text/javascript; charset=utf-8');
-//    $flag = flag_lists_get_flag($flag_name);
- //   $flag->link_type = 'toggle';
-    $sid = flag_get_sid($user->uid);
-    $new_action = _flag_lists_is_flagged($flag, $entity_id, $user->uid, $sid) ? 'unflag' : 'flag';
-    $new_link = $flag->theme($new_action, $entity_id, array("after_flagging" => TRUE));
-    flag_lists_fix_link($new_link, $new_action);
-    drupal_json_output(array(
-      'status' => TRUE,
-      'newLink' => $new_link,
-      // Further information for the benefit of custom JavaScript event handlers:
-      'contentId' => $entity_id,
-      'contentType' => $flag->content_type,
-      'flagName' => $flag->name,
-      'flagStatus' => $action,
-    ));
-    exit;
-  }
-  else {
-    $flag = flag_lists_get_flag($flag->fid);
-    drupal_set_message($flag->get_label($action . '_message', $entity_id));
-    drupal_goto();
-  }
-}
-
-function flag_lists_fix_link(&$link, $action) {
-  // This is a hack to let us use our own flag/unflag callbacks without having
-  // to override $flag->theme and creating our own flag_link type.
-  $link = str_replace('/flag/' . $action . '/', '/flag-lists/' . $action . '/', $link);
-}
-
-  /**
-   * Flags, or unflags, an item.
-   *
-   * @param $action
-   *   Either 'flag' or 'unflag'.
-   * @param $entity_id
-   *   The ID of the item to flag or unflag.
-   * @param $account
-   *   The user on whose behalf to flag. Leave empty for the current user.
-   * @param $skip_permission_check
-   *   Flag the item even if the $account user doesn't have permission to do so.
-   * @return
-   *   FALSE if some error occured (e.g., user has no permission, flag isn't
-   *   applicable to the item, etc.), TRUE otherwise.
-   */
-  function flag_lists_do_flag($flag, $action, $entity_id, $account = NULL, $skip_permission_check = FALSE) {
-    if (!isset($account)) {
-      $account = $GLOBALS['user'];
-    }
-    if (!$account) {
-      return FALSE;
-    }
-    if (!$skip_permission_check) {
-      if (!$flag->access($entity_id, $action, $account)) {
-        // User has no permission to flag/unflag this object.
-        return FALSE;
-      }
-    }
-    else {
-      // We are skipping permission checks. However, at a minimum we must make
-      // sure the flag applies to this content type:
-      if (!$flag->applies_to_content_id($entity_id)) {
-        return FALSE;
-      }
-    }
-
-    // Clear various caches; We don't want code running after us to report
-    // wrong counts or false flaggings.
-//    flag_get_counts(NULL, NULL, TRUE);
-//    flag_get_user_flags(NULL, NULL, NULL, NULL, TRUE);
-
-    // Find out which user id to use.
-    $uid = $flag->global ? 0 : $account->uid;
-
-    $sid = flag_get_sid($uid);
-    // Anonymous users must always have a session id.
-    if ($sid == 0 && $account->uid == 0) {
-      return FALSE;
-    }
-
-    // Perform the flagging or unflagging of this flag. We invoke hook_flag here
-    // because we do our own flagging.
-    $flagged = _flag_lists_is_flagged($flag, $entity_id, $uid, $sid);
-    if ($action == 'unflag') {
-      if ($flagged) {
-        $fcid = _flag_lists_unflag($flag, $entity_id, $uid, $sid);
-        module_invoke_all('flag', 'unflag', $flag, $entity_id, $account, $fcid);
-      }
-    }
-    elseif ($action == 'flag') {
-      if (!$flagged) {
-        $fcid = _flag_lists_flag($flag, $entity_id, $uid, $sid);
-        module_invoke_all('flag', 'flag', $flag, $entity_id, $account, $fcid);
-      }
-    }
-
-    return TRUE;
-  }
-
-
-  /**
-   * Returns TRUE if a certain user has flagged this content.
-   *
-   *
-   * This method is similar to is_flagged() except that it does direct SQL and
-   * doesn't do caching. Use it when you want to not affect the cache, or to
-   * bypass it.
-   *
-   */
-  function _flag_lists_is_flagged($flag, $entity_id, $uid, $sid) {
-    $query = db_select('flag_lists_content')
-      ->condition('fid', $flag->fid)
-      ->condition('uid', $uid)
-      ->condition('sid', $sid)
-      ->condition('entity_id', $entity_id);
-    $query->addField('flag_lists_content', 'fid');
-    return $query->execute()->fetchField();
-  }
-
-  /**
-   * A low-level method to flag content.
-   *
-   * You probably shouldn't call this raw private method: call the
-   * flag_lists_do_flag() function instead.
-   *
-   */
-  function _flag_lists_flag($flag, $entity_id, $uid, $sid) {
-    $fcid = db_insert('flag_lists_content')
-      ->fields(array(
-        'fid' => $flag->fid,
-        'entity_type' => $flag->entity_type,
-        'entity_id' => $entity_id,
-        'uid' => $uid,
-        'sid' => $sid,
-        'timestamp' => REQUEST_TIME,
-      ))
-      ->execute();
-
-    _flag_lists_update_count($flag, $entity_id);
-    return $fcid;
-  }
-
-  /**
-   * A low-level method to unflag content.
-   *
-   * You probably shouldn't call this raw private method: call the
-   * flag_lists_do_flag() function instead.
-   *
-   */
-  function _flag_lists_unflag($flag, $entity_id, $uid, $sid) {
-    $query = db_select('flag_lists_content')
-      ->condition('fid', $flag->fid)
-      ->condition('entity_id', $entity_id)
-      ->condition('uid', $uid)
-      ->condition('sid', $sid);
-    $query->addField('flag_lists_content', 'fcid');
-    $fcid = $query->execute()->fetchField();
-    if ($fcid) {
-      db_delete('flag_lists_content')
-        ->condition('fcid', $fcid)
-        ->execute();
-      _flag_lists_update_count($flag, $entity_id);
-    }
-    return $fcid;
-  }
-
-  /**
-   * Updates the flag count for this content
-   */
-  function _flag_lists_update_count($flag, $entity_id) {
-    $count = db_select('flag_lists_content', 'f')
-      ->fields('f')
-      ->condition('fid', $flag->fid)
-      ->condition('entity_id', $entity_id)
-      ->countQuery()
-      ->execute()
-      ->fetchField();
-
-    if (empty($count)) {
-      $num_deleted = db_delete('flag_lists_counts')
-        ->condition('fid', $flag->fid)
-        ->condition('entity_id', $entity_id)
-        ->execute();
-    }
-    else {
-      $num_updated = db_update('flag_lists_counts')
-        ->fields(array(
-          'count' => $count,
-        ))
-        ->condition('fid', $flag->fid)
-        ->condition('entity_id', $entity_id)
-        ->execute();
-      if (empty($num_updated)) {
-        db_insert('flag_lists_counts')
-          ->fields(array(
-            'fid' => $flag->fid,
-            'entity_type' => $flag->entity_type,
-            'entity_id' => $entity_id,
-            'count' => $count,
-          ))
-          ->execute();
-      }
-    }
-  }
-
-/**
- * Checks for a list template for a content type.
- */
-function flag_lists_template_exists($type) {
-  $query = db_select('flag_lists_types')
-    ->condition('type', $type);
-  $query->addField('flag_lists_types', 'type');
-  $exists = $query->execute()->fetchField();
-  if (!empty($exists)) {
-    return TRUE;
-  }
-  return FALSE;
-}
-
-/**
- * Checks for a list title by node type.
- */
-function flag_lists_title_exists($title, $type) {
-  return db_query("SELECT COUNT(flf.fid) FROM {flag_lists_flags} flf LEFT JOIN {flag_types} ft ON flf.pfid=ft.fid WHERE flf.title=:title AND ft.type=:type AND flf.uid=:uid", array(':title' => $title, ':type' => $type, ':uid' => $GLOBALS['user']->uid))->fetchField();
-}
-
-/**
- * Get a list of template flag names.
- */
-function flag_lists_get_templates() {
-  $templates = array();
-  $result = db_select('flag_lists_types', 'f')
-    ->fields('f', array(
-      'name'
-    ))
-    ->distinct()
-    ->execute();
-  foreach ($result as $obj) {
-    $templates[] = flag_get_flag($obj->name);
-  }
-  return $templates;
-}
-
-
-/**
- * Implements hook_token_info().
- */
-function flag_lists_token_info() {
-  $type = array(
-    'name' => t('Flag lists'),
-    'description' => t('Tokens related to flag lists.'),
-    'needs-data' => 'flag_lists',
-  );
-
-  $flag_lists['term'] = array(
-    'name' => t("Term"),
-    'description' => t("The terminology used to name the lists, such as list, wishlist, favorites, etc."),
-  );
-  $flag_lists['title'] = array(
-    'name' => t("Title"),
-    'description' => t("The title of the list."),
-  );
-
-  return array(
-    'types' => array('flag_lists' => $type),
-    'tokens' => array('flag_lists' => $flag_lists),
-  );
-}
-
-/**
- * Implements hook_tokens().
- */
-function flag_lists_tokens($type, $tokens, array $data = array(), array $options = array()) {
-  $replacements = array();
-
-  if ($type == 'flag_lists' && !empty($data['flag_lists'])) {
-    $flag_list = $data['flag_lists'];
-    foreach ($tokens as $name => $original) {
-      switch ($name) {
-        case 'title':
-          $replacements[$original] = $flag_list->title;
-          break;
-        case 'term':
-          $replacements[$original] = variable_get('flag_lists_name', t('list'));
-          break;
-      }
-    }
-  }
-  return $replacements;
-}
-
-/**
- * Preprocess link title and text for the flag.tpl.php
- *
- * This seems to be the only place to do this
- */
-function flag_lists_preprocess_flag(&$variables) {
-  if (module_exists('token') && !empty($variables['flag']->module) && $variables['flag']->module == 'flag_lists') {
-    if (!empty($variables['link_text'])) {
-      $variables['link_text'] = token_replace($variables['link_text'], array('flag_lists' => $variables['flag']));
-    }
-    if (!empty($variables['link_title'])) {
-      $variables['link_title'] = token_replace($variables['link_title'], array('flag_lists' => $variables['flag']));
-    }
-    if (!empty($variables['message_text'])) {
-      $variables['message_text'] = token_replace($variables['message_text'], array('flag_lists' => $variables['flag']));
-    }
-  }
-}
-
-/**
- * Implements hook_views_form_substitutions().
- */
-function flag_lists_views_form_substitutions() {
-  // Views check_plains the column label, so Flag lists needs to do the same
-  // in order for the replace operation to succeed.
-  $select_all_placeholder = check_plain('<!--flag-lists-ops-select-all-->');
-  $select_all = array(
-    '#type' => 'checkbox',
-    '#default_value' => FALSE,
-    '#attributes' => array('class' => array('flo-table-select-all')),
-  );
-  return array(
-    $select_all_placeholder => drupal_render($select_all),
-  );
-}

+ 5 - 6
sites/all/modules/contrib/flag/flag_lists/includes/flag_lists.views.inc

@@ -59,7 +59,7 @@ function flag_lists_views_data_alter(&$data) {
   );
   );
 
 
   // We need fid and name form flags' data, and join.
   // We need fid and name form flags' data, and join.
-  $data['flags'] = array(
+  $data['flag'] = array(
     'table' => array(
     'table' => array(
       'group' => t('Flag'),
       'group' => t('Flag'),
       'join' => array(
       'join' => array(
@@ -228,8 +228,7 @@ function flag_lists_views_data() {
         'handler' => 'flag_lists_handler_field_list',
         'handler' => 'flag_lists_handler_field_list',
       ),
       ),
       'filter' => array(
       'filter' => array(
-        'handler' => 'views_handler_filter_string',
-        'allow empty' => TRUE,
+        'handler' => 'flag_lists_handler_filter_list',
       ),
       ),
       'argument' => array(
       'argument' => array(
         'handler' => 'views_handler_argument_string',
         'handler' => 'views_handler_argument_string',
@@ -261,7 +260,7 @@ function flag_lists_views_data() {
       'join' => array(
       'join' => array(
         'node' => array(
         'node' => array(
           'left_field' => 'nid',
           'left_field' => 'nid',
-          'field' => 'content_id',
+          'field' => 'entity_id',
         ),
         ),
       ),
       ),
       'group' => t('Flag lists'),
       'group' => t('Flag lists'),
@@ -275,7 +274,7 @@ function flag_lists_views_data() {
         'label' => t('List user'),
         'label' => t('List user'),
       ),
       ),
     ),
     ),
-    'content_id' => array(
+    'entity_id' => array(
       'relationship' => array(
       'relationship' => array(
         'title' => t('Node'),
         'title' => t('Node'),
         'help' => t('The node that has been listed'),
         'help' => t('The node that has been listed'),
@@ -313,7 +312,7 @@ function flag_lists_views_data() {
         'flag_lists_flags' => array(
         'flag_lists_flags' => array(
           'table' => 'flag_lists_types',
           'table' => 'flag_lists_types',
           'type' => 'INNER',
           'type' => 'INNER',
-          'left_table' => 'flags',
+          'left_table' => 'flag',
           'left_field' => 'name',
           'left_field' => 'name',
           'field' => 'name',
           'field' => 'name',
         ),
         ),

+ 5 - 5
sites/all/modules/contrib/flag/flag_lists/includes/flag_lists.views_default.inc

@@ -168,7 +168,7 @@ function flag_lists_views_default_views() {
       'exclude' => 0,
       'exclude' => 0,
       'link_to_list' => FALSE,
       'link_to_list' => FALSE,
       'id' => 'name_2',
       'id' => 'name_2',
-      'table' => 'flags',
+      'table' => 'flag',
       'field' => 'name',
       'field' => 'name',
       'relationship' => 'none',
       'relationship' => 'none',
     ),
     ),
@@ -259,7 +259,7 @@ function flag_lists_views_default_views() {
         'reduce' => 0,
         'reduce' => 0,
       ),
       ),
       'id' => 'name',
       'id' => 'name',
-      'table' => 'flags',
+      'table' => 'flag',
       'field' => 'name',
       'field' => 'name',
       'relationship' => 'none',
       'relationship' => 'none',
     ),
     ),
@@ -843,7 +843,7 @@ function flag_lists_views_default_views() {
     'type' => 'none',
     'type' => 'none',
   ));
   ));
   $handler = $view->new_display('page', 'Page', 'page_1');
   $handler = $view->new_display('page', 'Page', 'page_1');
-  $handler->override_option('path', 'flags/lists/%');
+  $handler->override_option('path', 'flag/lists/%');
   $handler->override_option('menu', array(
   $handler->override_option('menu', array(
     'type' => 'none',
     'type' => 'none',
     'title' => '',
     'title' => '',
@@ -859,6 +859,6 @@ function flag_lists_views_default_views() {
     'name' => 'navigation',
     'name' => 'navigation',
   ));
   ));
 
 
- $views[$view->name] = $view;
+  $views[$view->name] = $view;
   return $views;
   return $views;
-}
+}

+ 1 - 1
sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_list.inc

@@ -45,7 +45,7 @@ class flag_lists_handler_field_list extends views_handler_field {
   function render_link($data, $values) {
   function render_link($data, $values) {
     if (!empty($this->options['link_to_list']) && $data !== NULL && $data !== '') {
     if (!empty($this->options['link_to_list']) && $data !== NULL && $data !== '') {
       $this->options['alter']['make_link'] = TRUE;
       $this->options['alter']['make_link'] = TRUE;
-      $this->options['alter']['path'] = "user/" . $values->{$this->aliases['uid']} . "/flags/lists/" . $values->{$this->aliases['fid']};
+      $this->options['alter']['path'] = "user/" . $values->{$this->aliases['uid']} . "/flag/lists/" . $values->{$this->aliases['fid']};
     }
     }
     return $data;
     return $data;
   }
   }

+ 2 - 2
sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_list_delete.inc

@@ -45,6 +45,6 @@ class flag_lists_handler_field_list_delete extends views_handler_field {
     }
     }
 
 
     $text = !empty($this->options['text']) ? $this->options['text'] : t('delete');
     $text = !empty($this->options['text']) ? $this->options['text'] : t('delete');
-    return l($text, "flags/lists/delete/" . $fid,  array('query' => drupal_get_destination()));
+    return l($text, "flag/lists/delete/" . $fid,  array('query' => drupal_get_destination()));
   }
   }
-}
+}

+ 1 - 1
sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_list_edit.inc

@@ -45,6 +45,6 @@ class flag_lists_handler_field_list_edit extends views_handler_field {
     }
     }
 
 
     $text = !empty($this->options['text']) ? $this->options['text'] : t('edit');
     $text = !empty($this->options['text']) ? $this->options['text'] : t('edit');
-    return l($text, "flags/lists/edit/" . $fid,  array('query' => drupal_get_destination()));
+    return l($text, "flag/lists/edit/" . $fid,  array('query' => drupal_get_destination()));
   }
   }
 }
 }

+ 25 - 3
sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_ops.inc

@@ -69,6 +69,17 @@ class flag_lists_handler_field_ops extends views_handler_field {
       '#tree' => TRUE,
       '#tree' => TRUE,
     );
     );
 
 
+    // Do we add or delete?
+    $operation = array();
+    if ($this->options['flo']['operation'] == 'flag') {
+      $operation[0] = 'Add';
+      $operation[1] = 'to';
+    }
+    else {
+      $operation[0] = 'Remove';
+      $operation[1] = 'from';
+    };
+
     // At this point, the query has already been run, so we can access the results
     // At this point, the query has already been run, so we can access the results
     // in order to get the base key value (for example, nid for nodes).
     // in order to get the base key value (for example, nid for nodes).
     foreach ($this->view->result as $row_index => $row) {
     foreach ($this->view->result as $row_index => $row) {
@@ -78,7 +89,13 @@ class flag_lists_handler_field_ops extends views_handler_field {
         $form[$this->options['id']][$row_index] = array(
         $form[$this->options['id']][$row_index] = array(
           '#type' => 'radio',
           '#type' => 'radio',
           '#parents' => array($this->options['id']),
           '#parents' => array($this->options['id']),
-          '#return_value' => $entity_id,
+          '#return_value' => $entity_id . (isset($row->flag_lists_flags_fid) ? ('-' . $row->flag_lists_flags_fid) : ''),
+          '#attributes' => array('title' => 
+                             array(t('@oper this item, @entity_id, @direction the @name', 
+                               array('@oper' => $operation[0],
+                                     '@entity_id' => $entity_id,
+                                     '@direction' => $operation[1],
+                                     '@name' => variable_get('flag_lists_name','list'))))),
         );
         );
       }
       }
       else {
       else {
@@ -86,9 +103,14 @@ class flag_lists_handler_field_ops extends views_handler_field {
           '#type' => 'checkbox',
           '#type' => 'checkbox',
           '#return_value' => $entity_id . (isset($row->flag_lists_flags_fid) ? ('-' . $row->flag_lists_flags_fid) : ''),
           '#return_value' => $entity_id . (isset($row->flag_lists_flags_fid) ? ('-' . $row->flag_lists_flags_fid) : ''),
           '#default_value' => FALSE,
           '#default_value' => FALSE,
-          '#attributes' => array('class' => array('flo-select')),
+          '#attributes' => array('class' => array('flo-select'),
+                      'title' => array(t('@oper item @entity_id @direction the @name', 
+                        array('@oper' => $operation[0],
+                              '@entity_id' => $entity_id,
+                              '@direction' => $operation[1],
+                              '@name' => variable_get('flag_lists_name', 'list'))))),
         );
         );
       }
       }
     }
     }
   }
   }
-}
+}

+ 3 - 3
sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_template.inc

@@ -14,7 +14,7 @@ class flag_lists_handler_field_template extends views_handler_field {
    */
    */
   function construct() {
   function construct() {
     parent::construct();
     parent::construct();
-    $this->additional_fields['name'] = array('table' => 'flags', 'field' => 'name');
+    $this->additional_fields['name'] = array('table' => 'flag', 'field' => 'name');
   }
   }
 
 
   function option_definition() {
   function option_definition() {
@@ -44,7 +44,7 @@ class flag_lists_handler_field_template extends views_handler_field {
   function render_link($data, $values) {
   function render_link($data, $values) {
     if (!empty($this->options['link_to_template']) && $data !== NULL && $data !== '') {
     if (!empty($this->options['link_to_template']) && $data !== NULL && $data !== '') {
       $this->options['alter']['make_link'] = TRUE;
       $this->options['alter']['make_link'] = TRUE;
-      $this->options['alter']['path'] = "admin/build/flags/edit/" . $values->{$this->aliases['name']};
+      $this->options['alter']['path'] = "admin/structure/flags/manage/" . $values->{$this->aliases['name']};
     }
     }
     return $data;
     return $data;
   }
   }
@@ -52,4 +52,4 @@ class flag_lists_handler_field_template extends views_handler_field {
   function render($values) {
   function render($values) {
     return $this->render_link(check_plain($values->{$this->field_alias}), $values);
     return $this->render_link(check_plain($values->{$this->field_alias}), $values);
   }
   }
-}
+}

+ 5 - 3
sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_field_template_types.inc

@@ -1,4 +1,5 @@
 <?php
 <?php
+
 /**
 /**
  * @file flag_lists_handler_field_template_types.inc
  * @file flag_lists_handler_field_template_types.inc
  * Field handler to provide a list of template node types.
  * Field handler to provide a list of template node types.
@@ -6,14 +7,15 @@
 class flag_lists_handler_field_template_types extends views_handler_field_prerender_list {
 class flag_lists_handler_field_template_types extends views_handler_field_prerender_list {
   function construct() {
   function construct() {
     parent::construct();
     parent::construct();
-    $this->additional_fields['name'] = array('table' => 'flags', 'field' => 'name');
+    $this->additional_fields['name'] = array('table' => 'flag', 'field' => 'name');
   }
   }
+
   function query() {
   function query() {
     $this->add_additional_fields();
     $this->add_additional_fields();
     $this->field_alias = $this->aliases['name'];
     $this->field_alias = $this->aliases['name'];
   }
   }
 
 
-  function pre_render($values) {
+  function pre_render(&$values) {
     $names = array();
     $names = array();
     $this->items = array();
     $this->items = array();
 
 
@@ -23,7 +25,7 @@ class flag_lists_handler_field_template_types extends views_handler_field_preren
 
 
     if (count($names)) {
     if (count($names)) {
       $query = db_select('flag_lists_types', 'flt');
       $query = db_select('flag_lists_types', 'flt');
-      $query->innerJoin('flags', 'f', 'flt.name = f.name');
+      $query->innerJoin('flag', 'f', 'flt.name = f.name');
       $result = $query->fields('flt', array('type', 'name'))
       $result = $query->fields('flt', array('type', 'name'))
         ->condition('f.name', $names, 'IN')
         ->condition('f.name', $names, 'IN')
         ->orderBy('flt.type')
         ->orderBy('flt.type')

+ 20 - 0
sites/all/modules/contrib/flag/flag_lists/includes/flag_lists_handler_filter_list.inc

@@ -0,0 +1,20 @@
+<?php
+/**
+ * @file flag_lists_handler_filter_list.inc
+ * Filter by flag lists
+ *
+ * https://api.drupal.org/api/examples/ajax_example!ajax_example_autocomplete.inc/7
+ */
+class flag_lists_handler_filter_list extends views_handler_filter_string {
+
+function value_form(&$form, &$form_state) {
+  parent::value_form($form, $form_state);
+
+  if ( $form['value']['#type'] == 'textfield') {
+    $form['value']['#autocomplete_path'] = 
+      'flag-lists/autocomplete_list_callback';
+  }
+
+}
+
+}

+ 9 - 4
sites/all/modules/contrib/flag/flag_lists/js/flag_lists_ops.js

@@ -30,24 +30,26 @@
           select.addClass('new-list-processed');
           select.addClass('new-list-processed');
 
 
           if (Drupal.settings.flag_lists.types.length > 0) {
           if (Drupal.settings.flag_lists.types.length > 0) {
-            $(this).after('<a href="#" class="create-a-new-list">New list?</a><div class="new-list-form"><form><select name="type" class="type"></select><label for="name">List name</label><input type="textfield" name="name" class="name" /></form></div>');
+            $(this).after('<a href="#" class="create-a-new-list">New ' + Drupal.settings.flag_lists.listname + '?</a><div class="new-list-form"><form><select name="type" class="type"></select><label for="name">New ' + Drupal.settings.flag_lists.listname + ' name</label><input type="textfield" name="name" class="name" /></form></div>');
             var dialog = $('.new-list-form', $(this).parent()).dialog({
             var dialog = $('.new-list-form', $(this).parent()).dialog({
               autoOpen: false,
               autoOpen: false,
               height: 300,
               height: 300,
               width: 350,
               width: 350,
               modal: true,
               modal: true,
               buttons: {
               buttons: {
-                "Create a new list": function() {
+                "Create": function() {
                   var name = $('input.name', $(this)).val();
                   var name = $('input.name', $(this)).val();
                   var type = $('select.type', $(this)).val();
                   var type = $('select.type', $(this)).val();
+                  name = encodeURIComponent(name);
 
 
-                  $.getJSON(Drupal.settings.flag_lists.json_path.replace('%', type)+'?name='+name, function(data) {
+                  $.getJSON(Drupal.settings.flag_lists.json_path.replace('%', type)+ '?form_token=' + Drupal.settings.flag_lists.form_token +'&name='+name, function(data) {
                     if (data.error) {
                     if (data.error) {
                       alert(data.error);
                       alert(data.error);
                     }
                     }
                     else {
                     else {
                       select.append('<option value="'+data.flag.fid+'">'+data.flag.title+'</option>');
                       select.append('<option value="'+data.flag.fid+'">'+data.flag.title+'</option>');
                       $('input.name', $(this)).val('');
                       $('input.name', $(this)).val('');
+                      location.reload(true);
                       dialog.dialog('close');
                       dialog.dialog('close');
                     }
                     }
                   });
                   });
@@ -70,9 +72,12 @@
           // Put entries into the optgroup
           // Put entries into the optgroup
           for (j in Drupal.settings.flag_lists.types) {
           for (j in Drupal.settings.flag_lists.types) {
             var type = Drupal.settings.flag_lists.types[j];
             var type = Drupal.settings.flag_lists.types[j];
-            $('.new-list-form form select.type').append('<option value="'+type+'" class="'+type+'">List for '+type+'</option>');
+            $('.new-list-form form select.type').append('<option value="'+type+'" class="'+type+'">' + Drupal.settings.flag_lists.listname + ' for '+type+'</option>');
           }
           }
         }
         }
+        if ( Drupal.settings.flag_lists.types.length <= 1) {
+          $('.new-list-form form select.type', context).hide();
+        }
       });
       });
     }
     }
   }
   }

+ 2 - 2
sites/all/modules/contrib/flag/flag_lists/theme/flag_lists.css

@@ -1,4 +1,4 @@
-.block-flag_lists .flag-message {
+.block-flag-lists .flag-message {
   position: relative;
   position: relative;
   clear: both;
   clear: both;
   top:0;
   top:0;
@@ -6,4 +6,4 @@
   line-height: normal;
   line-height: normal;
   width: auto;
   width: auto;
   font-size: .8em;
   font-size: .8em;
-}
+}

Some files were not shown because too many files changed in this diff