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

This commit is contained in:
Bachir Soussi Chiadmi 2016-10-25 20:12:36 +02:00
parent ae7349e811
commit 253524c527
21 changed files with 781 additions and 2821 deletions

View File

@ -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 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 Token module now a required dependency.
Flag lists (Jan. 12, 2011)
====
#1023432 by erikwebb: Fixed No default value for $account in flag_lists_fl_delete().
#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
@ -75,4 +111,5 @@ improve some messages
allow users with "administer flags" permission to bypass flag_lists_is_owner()
checks.
First run at views integration
Better admin table for lists
Better admin table for lists

View File

@ -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

View File

@ -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();

View File

@ -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);
+ }
+ }
+}
+
+

View File

@ -26,6 +26,8 @@ function theme_flag_lists_admin_page($variables) {
$view = views_get_view('flag_lists', FALSE);
if (!empty($view)) {
$view->set_display('default');
$view->pre_execute();
$view->execute();
$output .= $view->render();
}
}
@ -84,12 +86,19 @@ function flag_lists_add($type = NULL) {
* Callback for adding new lists through AJAX.
*/
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)) {
drupal_json_output(array('error' => t('Type not supplied.')));
exit();
}
$name = check_plain($_REQUEST['name']);
$name = $_REQUEST['name'];
if (!isset($name) || empty($name)) {
drupal_json_output(array('error' => t('List name not supplied.')));
exit();
@ -101,7 +110,7 @@ function flag_lists_add_js($type = NULL) {
}
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();
}
@ -162,7 +171,7 @@ function flag_lists_form($form, $form_state, $name = NULL, $type = NULL) {
}
// Adding a new list.
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(
'#type' => 'hidden',
'#value' => FALSE,
@ -173,7 +182,7 @@ function flag_lists_form($form, $form_state, $name = NULL, $type = NULL) {
else {
$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));
drupal_set_title();
@ -191,7 +200,7 @@ function flag_lists_form($form, $form_state, $name = NULL, $type = NULL) {
'#type' => 'textfield',
'#title' => t('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,
'#required' => TRUE,
'#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) {
// Ensure 255 charactor or less name.
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.
if (!$form_state['values']['edit']) {
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(
'#type' => 'textfield',
'#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.'),
'#required' => TRUE,
);
@ -341,7 +350,7 @@ function flag_lists_delete_confirm($form, $form_state, $name) {
$form['fid'] = array('#type' => 'value', '#value' => $flag->fid);
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'] : '/',
t('This action cannot be undone.'),
t('Delete'), t('Cancel')
@ -359,14 +368,14 @@ function flag_lists_delete_confirm_submit($form, &$form_state) {
* Form to create a new template.
*/
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(
'#value' => t('This form creates a new, blank list template. After saving, you will be able to configure further options.'),
);
$form['name'] = array(
'#type' => 'textfield',
'#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,
'#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'])) {
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.
$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.
*/
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();
// Enter the new template into 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,
))
->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.
*/
@ -490,10 +500,10 @@ function flag_lists_generate_lists_form_submit($form, &$form_state) {
// Delete listings.
if ($form_state['values']['kill_listings']) {
$flags = flag_lists_get_flags();
$flags = flag_lists_get_flags();
foreach ($flags as $flag) {
$result = db_select('flag_lists_content', 'f')
->fields('f', array('fcid', 'content_id'))
->fields('f', array('fcid', 'entity_id'))
->condition('fid', $flag->fid)
->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_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.'));
@ -525,7 +535,7 @@ function flag_lists_generate_lists_form_submit($form, &$form_state) {
// Generate lists.
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));
$account->uid = $uids[array_rand($uids)];
$edit['values']['title'] = devel_create_greeking(7, TRUE);
@ -533,7 +543,7 @@ function flag_lists_generate_lists_form_submit($form, &$form_state) {
$form = array();
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.
@ -541,14 +551,14 @@ function flag_lists_generate_lists_form_submit($form, &$form_state) {
$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)];
$lists = flag_lists_get_user_flags(NULL, $account);
// Remove any lists that don't use the chosen templates.
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++;
}
}
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);
}

View File

@ -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);
}
}
}

View File

@ -1,8 +1,9 @@
name = Flag lists
core = 7.x
package = Flags
dependencies[] = flag
dependencies[] = flag (>7.x-3.0)
dependencies[] = token
dependencies[] = views
files[] = flag_lists.admin.inc
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_types.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.
; 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"
project = "flag_lists"
datestamp = "1336060255"
datestamp = "1473230043"

View File

@ -26,7 +26,6 @@ function flag_lists_schema() {
),
'uid' => array(
'type' => 'int',
'size' => 'small',
'unsigned' => TRUE,
'not null' => TRUE,
),
@ -106,7 +105,7 @@ function flag_lists_schema() {
),
'primary key' => array('fcid'),
'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(
'entity_type_entity_id' => array('entity_type', 'entity_id'),
@ -191,17 +190,198 @@ function flag_lists_uninstall() {
// Remove our template flags.
$query = db_select('flag_lists_types', 'fl');
$query->leftJoin('flag', 'f', 'fl.name = f.name');
$query->addField('fl', 'fid', 'fid');
$query->addField('f', 'fid', 'fid');
$query->distinct();
$fids = $query->execute();
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.'));
}
/**
* 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 Load Diff

View File

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

View File

@ -168,7 +168,7 @@ function flag_lists_views_default_views() {
'exclude' => 0,
'link_to_list' => FALSE,
'id' => 'name_2',
'table' => 'flags',
'table' => 'flag',
'field' => 'name',
'relationship' => 'none',
),
@ -259,7 +259,7 @@ function flag_lists_views_default_views() {
'reduce' => 0,
),
'id' => 'name',
'table' => 'flags',
'table' => 'flag',
'field' => 'name',
'relationship' => 'none',
),
@ -843,7 +843,7 @@ function flag_lists_views_default_views() {
'type' => 'none',
));
$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(
'type' => 'none',
'title' => '',
@ -859,6 +859,6 @@ function flag_lists_views_default_views() {
'name' => 'navigation',
));
$views[$view->name] = $view;
$views[$view->name] = $view;
return $views;
}
}

View File

@ -45,7 +45,7 @@ class flag_lists_handler_field_list extends views_handler_field {
function render_link($data, $values) {
if (!empty($this->options['link_to_list']) && $data !== NULL && $data !== '') {
$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;
}

View File

@ -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');
return l($text, "flags/lists/delete/" . $fid, array('query' => drupal_get_destination()));
return l($text, "flag/lists/delete/" . $fid, array('query' => drupal_get_destination()));
}
}
}

View File

@ -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');
return l($text, "flags/lists/edit/" . $fid, array('query' => drupal_get_destination()));
return l($text, "flag/lists/edit/" . $fid, array('query' => drupal_get_destination()));
}
}

View File

@ -69,6 +69,17 @@ class flag_lists_handler_field_ops extends views_handler_field {
'#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
// in order to get the base key value (for example, nid for nodes).
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(
'#type' => 'radio',
'#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 {
@ -86,9 +103,14 @@ class flag_lists_handler_field_ops extends views_handler_field {
'#type' => 'checkbox',
'#return_value' => $entity_id . (isset($row->flag_lists_flags_fid) ? ('-' . $row->flag_lists_flags_fid) : ''),
'#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'))))),
);
}
}
}
}
}

View File

@ -14,7 +14,7 @@ class flag_lists_handler_field_template extends views_handler_field {
*/
function construct() {
parent::construct();
$this->additional_fields['name'] = array('table' => 'flags', 'field' => 'name');
$this->additional_fields['name'] = array('table' => 'flag', 'field' => 'name');
}
function option_definition() {
@ -44,7 +44,7 @@ class flag_lists_handler_field_template extends views_handler_field {
function render_link($data, $values) {
if (!empty($this->options['link_to_template']) && $data !== NULL && $data !== '') {
$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;
}
@ -52,4 +52,4 @@ class flag_lists_handler_field_template extends views_handler_field {
function render($values) {
return $this->render_link(check_plain($values->{$this->field_alias}), $values);
}
}
}

View File

@ -1,4 +1,5 @@
<?php
/**
* @file flag_lists_handler_field_template_types.inc
* 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 {
function construct() {
parent::construct();
$this->additional_fields['name'] = array('table' => 'flags', 'field' => 'name');
$this->additional_fields['name'] = array('table' => 'flag', 'field' => 'name');
}
function query() {
$this->add_additional_fields();
$this->field_alias = $this->aliases['name'];
}
function pre_render($values) {
function pre_render(&$values) {
$names = array();
$this->items = array();
@ -23,7 +25,7 @@ class flag_lists_handler_field_template_types extends views_handler_field_preren
if (count($names)) {
$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'))
->condition('f.name', $names, 'IN')
->orderBy('flt.type')

View File

@ -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';
}
}
}

View File

@ -30,24 +30,26 @@
select.addClass('new-list-processed');
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({
autoOpen: false,
height: 300,
width: 350,
modal: true,
buttons: {
"Create a new list": function() {
"Create": function() {
var name = $('input.name', $(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) {
alert(data.error);
}
else {
select.append('<option value="'+data.flag.fid+'">'+data.flag.title+'</option>');
$('input.name', $(this)).val('');
location.reload(true);
dialog.dialog('close');
}
});
@ -70,9 +72,12 @@
// Put entries into the optgroup
for (j in Drupal.settings.flag_lists.types) {
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();
}
});
}
}

View File

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