Index: flag.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flag/Attic/flag.module,v
retrieving revision 1.11.2.72.2.27
diff -u -r1.11.2.72.2.27 flag.module
--- flag.module 3 Nov 2009 01:53:36 -0000 1.11.2.72.2.27
+++ flag.module 3 Nov 2009 02:08:42 -0000
@@ -6,6 +6,8 @@
* The Flag module.
*/
+define('FLAG_API_VERSION', 2);
+
include_once dirname(__FILE__) .'/flag.inc';
/**
@@ -77,6 +79,14 @@
'file' => 'includes/flag.export.inc',
'weight' => 3,
);
+ $items['admin/build/flags/update/%'] = array(
+ 'title' => 'Update',
+ 'page callback' => 'flag_update_page',
+ 'page arguments' => array(4),
+ 'access arguments' => array('administer flags'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'includes/flag.export.inc',
+ );
$items['flag'] = array(
'title' => 'Flag',
'page callback' => 'flag_page',
@@ -1374,11 +1384,19 @@
foreach ($function() as $config) {
$flag = flag_flag::factory_by_array($config);
$flag->module = $module;
+
+ // Disable flags that are not at the current API version.
+ if (!isset($flag->api_version) || $flag->api_version < FLAG_API_VERSION) {
+ $flag->status = FALSE;
+ $flag->api_version = isset($flag->api_version) ? $flag->api_version : 1;
+ }
+
// Add flags that have been enabled.
if ((!isset($flag_status[$flag->name]) && (!isset($flag->status) || $flag->status)) || !empty($flag_status[$flag->name])) {
$flag->status = TRUE;
$default_flags[$flag->name] = $flag;
}
+ // Add flags that have been disabled.
elseif ($include_disabled) {
$flag->status = FALSE;
$default_flags[$flag->name] = $flag;
Index: includes/flag.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flag/includes/Attic/flag.admin.inc,v
retrieving revision 1.1.4.2.2.8
diff -u -r1.1.4.2.2.8 flag.admin.inc
--- includes/flag.admin.inc 28 Oct 2009 00:31:47 -0000 1.1.4.2.2.8
+++ includes/flag.admin.inc 3 Nov 2009 02:08:43 -0000
@@ -52,11 +52,19 @@
$rows = array();
foreach ($default_flags as $name => $flag) {
if (!isset($flags[$name])) {
- $ops = theme('links', array(
- 'flags_enable' => array('title' => t('enable'), 'href' => "admin/build/flags/edit/" . $flag->name),
- ));
-
- $roles = array_flip(array_intersect(array_flip(user_roles()), $flag->roles['flag']));
+ if ($flag->api_version < FLAG_API_VERSION) {
+ $flag_updates_needed = TRUE;
+ $ops = theme('links', array(
+ 'flags_update' => array('title' => '' . t('update code') . '', 'href' => 'admin/build/flags/update/' . $flag->name, 'html' => TRUE),
+ ));
+ }
+ else {
+ $ops = theme('links', array(
+ 'flags_enable' => array('title' => t('enable'), 'href' => 'admin/build/flags/edit/' . $flag->name),
+ ));
+ }
+ // $flag->roles['flag'] not exist on older flags.
+ $roles = array_flip(array_intersect(array_flip(user_roles()), !empty($flag->roles['flag']) ? $flag->roles['flag'] : array()));
$rows[] = array(
$flag->name,
$flag->module,
@@ -66,6 +74,10 @@
}
}
+ if (isset($flag_updates_needed)) {
+ drupal_set_message(t('Some flags provided by modules need to be updated to a new format before they can be used with this version of Flag. See the disabled flags for a list of flags that need updating.'), 'warning');
+ }
+
if (!empty($rows)) {
$header = array(t('Disabled Flags'), t('Module'), t('Flag type'), t('Operations'));
$output .= theme('table', $header, $rows);
Index: includes/flag.export.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flag/includes/Attic/flag.export.inc,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 flag.export.inc
--- includes/flag.export.inc 28 Oct 2009 00:31:47 -0000 1.1.2.1
+++ includes/flag.export.inc 3 Nov 2009 02:08:43 -0000
@@ -136,11 +136,11 @@
/**
* Export a flag and display it in a form.
*/
-function flag_export_form(&$form_state, $flag_name = NULL) {
+function flag_export_form(&$form_state, $flag = NULL) {
$form = array();
// Convert a flag name (if any) to the list of export flags.
- if ($flag = flag_get_flag($flag_name)) {
+ if (is_object($flag) || ($flag = flag_get_flag($flag))) {
$flags = array($flag);
}
@@ -193,3 +193,45 @@
function flag_export_form_submit($form, &$form_state) {
$form_state['rebuild'] = TRUE;
}
+
+/**
+ * Page for displaying an upgrade message and export form for Flag 1.x flags.
+ */
+function flag_update_page($flag_name) {
+ $flags = flag_get_default_flags(TRUE);
+ if (!isset($flags[$flag_name])) {
+ drupal_not_found();
+ return;
+ }
+
+ if ($flags[$flag_name]->api_version == FLAG_API_VERSION) {
+ drupal_set_message(t('The flag %name is already up-to-date with the latest Flag API and does not need upgrading.'));
+ drupal_goto('admin/build/flags');
+ }
+
+ $flag = $flags[$flag_name];
+ drupal_set_message(t('The flag %name is currently using the Flag API version @version, which is not compatible with the current version of Flag. You can upgrade this flag by pasting the below code into @module_flag_default_flags() function in the @module.module file.', array('%name' => $flag->name, '@version' => $flag->api_version, '@module' => $flag->module)), 'warning');
+
+ flag_update_export($flag);
+
+ return drupal_get_form('flag_export_form', $flag);
+}
+
+/**
+ * Update a flag before export.
+ *
+ * @param $flag
+ * The flag object passed by reference.
+ */
+function flag_update_export(&$flag) {
+ // Update differences.
+ if (empty($flag->api_version) || $flag->api_version == 1) {
+ if (isset($flag->roles) && !isset($flag->roles['flag'])) {
+ $flag->roles = array(
+ 'flag' => $flag->roles,
+ 'unflag' => $flag->roles,
+ );
+ }
+ $flag->api_version = FLAG_API_VERSION;
+ }
+}