? user_badges-D6.patch
Index: user_badges.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/user_badges/user_badges.info,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 user_badges.info
--- user_badges.info 18 Jun 2007 23:07:11 -0000 1.1.2.1
+++ user_badges.info 16 Sep 2008 16:21:57 -0000
@@ -1,4 +1,6 @@
; $Id: user_badges.info,v 1.1.2.1 2007/06/18 23:07:11 dww Exp $
name = User badges
description = Enables assignment of graphical badges to users and roles.
-dependencies = upload
+dependencies[] = upload
+core = 6.x
+
Index: user_badges.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/user_badges/user_badges.install,v
retrieving revision 1.1.4.3
diff -u -p -r1.1.4.3 user_badges.install
--- user_badges.install 14 Mar 2007 20:15:41 -0000 1.1.4.3
+++ user_badges.install 16 Sep 2008 16:21:57 -0000
@@ -1,65 +1,126 @@
'Holds the user badge images',
+ 'fields' => array(
+ 'bid' => array(
+ 'description' => t('Original badge ID'),
+ 'type' => 'serial',
+ 'unsigned' => TRUE,
+ 'not null' => TRUE,
+ ),
+ 'name' => array(
+ 'description' => t('Badge name'),
+ 'type' => 'varchar',
+ 'length' => 50,
+ 'not null' => TRUE,
+ 'default' => '',
+ ),
+ 'image' => array(
+ 'description' => t('Associated image'),
+ 'type' => 'varchar',
+ 'length' => 80,
+ 'not null' => TRUE,
+ 'default' => '',
+ ),
+ 'weight' => array(
+ 'description' => t('Order in list'),
+ 'type' => 'int',
+ 'not null' => TRUE,
+ 'default' => 0
+ ),
+ ),
+ 'primary key' => array('bid'),
+ 'indexes' => array(
+ 'bid_weight_name' => array('bid', 'weight', 'name'),
+ 'weight_name' => array('weight', 'name'),
+ )
+ );
+ $schema['user_badges_product'] = array(
+ 'description' => 'Holds the user badge images',
+ 'fields' => array(
+ 'bid' => array(
+ 'description' => t('Original badge ID'),
+ 'type' => 'int',
+ 'unsigned' => TRUE,
+ 'not null' => TRUE,
+ 'default' => 0
+ ),
+ 'nid' => array(
+ 'description' => t('Node ID'),
+ 'type' => 'int',
+ 'unsigned' => TRUE,
+ 'not null' => TRUE,
+ 'default' => 0,
+ ),
+ ),
+ 'primary key' => array('bid', 'nid'),
+ 'indexes' => array(
+ 'bid_nid' => array('bid', 'nid'),
+ 'nid_bid' => array('nid', 'bid'),
+ ),
+ );
+ $schema['user_badges_roles'] = array(
+ 'description' => 'Holds the user badge images',
+ 'fields' => array(
+ 'rid' => array(
+ 'description' => t('Original role ID'),
+ 'type' => 'int',
+ 'unsigned' => TRUE,
+ 'not null' => TRUE,
+ ),
+ 'bid' => array(
+ 'description' => t('Original badge ID'),
+ 'type' => 'int',
+ 'unsigned' => TRUE,
+ 'not null' => TRUE,
+ ),
+ ),
+ 'primary key' => array('bid', 'rid'),
+ 'indexes' => array(
+ 'bid_nid' => array('bid', 'rid'),
+ 'nid_bid' => array('rid', 'bid'),
+ ),
+ );
+ $schema['user_badges_user'] = array(
+ 'description' => 'Holds the user badge images',
+ 'fields' => array(
+ 'uid' => array(
+ 'description' => t('Original user ID'),
+ 'type' => 'int',
+ 'unsigned' => TRUE,
+ 'not null' => TRUE,
+ ),
+ 'bid' => array(
+ 'description' => t('Original badge ID'),
+ 'type' => 'int',
+ 'unsigned' => TRUE,
+ 'not null' => TRUE,
+ ),
+ 'type' => array(
+ 'description' => t('Badge Type'),
+ 'type' => 'varchar',
+ 'length' => 20,
+ 'not null' => TRUE,
+ 'default' => '',
+ ),
+ ),
+ 'primary key' => array('bid', 'uid', 'type'),
+ 'indexes' => array(
+ 'bid_uid_type' => array('bid', 'uid', 'type'),
+ 'uid_bid' => array('uid', 'bid'),
+ 'type' => array('type'),
+ ),
+ );
+
+ return $schema;
+}
- break;
- default:
- break;
- }
+function user_badges_install() {
+ drupal_install_schema('user_badges');
}
function user_badges_uninstall() {
@@ -72,14 +133,17 @@ function user_badges_uninstall() {
}
}
- // Delete the badges directory.
+ // Delete the badges directory.
if (file_exists($dir)) {
rmdir($dir);
}
+ drupal_uninstall_schema('user_badges');
+}
- // Remove database tables.
- db_query("DROP TABLE {user_badges_badges}");
- db_query("DROP TABLE {user_badges_roles}");
- db_query("DROP TABLE {user_badges_user}");
- db_query("DROP TABLE {user_badges_product}");
+function user_badges_update_6001() {
+ $ret = array();
+ db_drop_primary_key($ret, 'user_badges_user');
+ db_add_primary_key($ret, 'user_badges_user', array('bid', 'uid', 'type'));
+ db_add_index($ret, 'user_badges_user', 'type', array('type'));
+ return $ret;
}
\ No newline at end of file
Index: user_badges.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/user_badges/user_badges.module,v
retrieving revision 1.14.2.5
diff -u -p -r1.14.2.5 user_badges.module
--- user_badges.module 16 Mar 2007 13:00:28 -0000 1.14.2.5
+++ user_badges.module 16 Sep 2008 16:21:58 -0000
@@ -1,130 +1,115 @@
'admin/user/user_badges',
- 'title' => t('Badges'),
- 'callback' => 'user_badges_settings_page',
- 'access' => $access,
- );
- }
- else {
- $items[] = array(
- 'path' => 'admin/user/user_badges/list',
- 'title' => t('Edit user badges'),
- 'access' => $access,
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => -10
- );
- $items[] = array(
- 'path' => 'admin/user/user_badges/images',
- 'title' => t('Images'),
- 'callback' => 'drupal_get_form',
- 'callback arguments' => array('user_badges_images_form'),
- 'access' => $access,
- 'type' => MENU_LOCAL_TASK
- );
- $items[] = array(
- 'path' => 'admin/user/user_badges/roles',
- 'title' => t('Roles'),
- 'callback' => 'drupal_get_form',
- 'callback arguments' => array('user_badges_roles_form'),
- 'access' => $access,
- 'type' => MENU_LOCAL_TASK
- );
- if (module_exists('product')) {
- $items[] = array(
- 'path' => 'admin/user/user_badges/products',
- 'title' => t('Products'),
- 'callback' => 'user_badges_products_page',
- 'weight' => 8,
- 'access' => $access,
- 'type' => MENU_LOCAL_TASK
- );
- }
- $items[] = array(
- 'path' => 'admin/user/user_badges/delete',
- 'title' => t('Delete badge'),
- 'callback' => 'drupal_get_form',
- 'callback arguments' => array('user_badges_delete_form'),
- 'access' => $access,
- 'type' => MENU_CALLBACK,
- );
- if (arg(0) == 'user') {
- if ($access) {
- $uid = arg(1);
- }
- if (is_numeric($uid)) {
- $items[] = array(
- 'path' => "user/$uid/badges",
- 'title' => t('Badges'),
- 'callback' => 'user_badges_page',
- 'access' => $access,
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 5,
- );
- }
- }
- }
+/**
+ * Implementation of hook_menu().
+ */
+function user_badges_menu() {
+ $items = array();
+ $access = user_badges_perm();
+ $items['admin/user/user_badges'] = array(
+ 'title' => 'Badges',
+ 'page callback' => 'user_badges_settings_page',
+ 'access arguments' => $access,
+ );
+
+ $items['admin/user/user_badges/list'] = array(
+ 'title' => 'Edit user badges',
+ 'access arguments' => $access,
+ 'type' => MENU_DEFAULT_LOCAL_TASK,
+ 'weight' => -10,
+ );
+ $items['admin/user/user_badges/images'] = array(
+ 'title' => 'Images',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('user_badges_images_form'),
+ 'access arguments' => $access,
+ 'type' => MENU_LOCAL_TASK,
+ );
+ $items['admin/user/user_badges/roles'] = array(
+ 'title' => 'Roles',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('user_badges_roles_form'),
+ 'access arguments' => $access,
+ 'type' => MENU_LOCAL_TASK,
+ );
+ $items['admin/user/user_badges/delete'] = array(
+ 'title' => 'Delete badge',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('user_badges_delete_form'),
+ 'access arguments' => $access,
+ 'type' => MENU_CALLBACK,
+ );
+ $items['user/%user/badges'] = array(
+ 'title' => 'Badges',
+ 'page callback' => 'user_badges_page',
+ 'page arguments' => array(1),
+ 'access arguments' => $access,
+ 'type' => MENU_LOCAL_TASK,
+ 'weight' => 5,
+ );
+
return $items;
}
-
/**
- * Implementation of hook_user()
- * This handles assignment of badges based on role.
- * When role is assigned or removed, appropriate badges are added or removed.
+ * Implementation of hook_user().
*
+ * This handles assignment of badges based on role.
+ * When a role is assigned or removed, appropriate badges are added or removed.
*/
-function user_badges_user($op, &$edit, &$user, $category = 'account') {
+function user_badges_user($op, &$edit, &$account, $category = 'account') {
switch ($op) {
case 'load':
- if ($user->uid > 0) {
- $user->badges = user_badges_get_badges($user->uid);
+ if ($account->uid > 0) {
+ $account->badges = user_badges_get_badges($account->uid);
}
break;
case 'insert':
- if (is_array($user->roles)){
- // get the list of role badges
+ if (is_array($account->roles)) {
+ // Get the list of role badges.
$roles = user_badges_get_roles();
$badges = user_badges_get_badges('select');
$message = user_access('manage badges');
- $rids = array_keys($user->roles);
- foreach($rids as $rid){
+ $rids = array_keys($account->roles);
+ foreach ($rids as $rid) {
// if this role has a badge
- if (key_exists($rid, $roles)){
+ if (key_exists($rid, $roles)) {
// and user doesn't already have this badge
- if (!key_exists($roles[$rid], $user->badges)){
- $success = user_badges_user_add_badge($user->uid, $roles[$rid], 'role');
- if($success && $message){
+ if (!key_exists($roles[$rid], $account->badges)) {
+ $success = user_badges_user_add_badge($account->uid, $roles[$rid], 'role');
+ if ($success && $message) {
drupal_set_message(t('User assigned %name badge.', array('%name' => $badges[$roles[$rid]])));
}
}
@@ -134,7 +119,7 @@ function user_badges_user($op, &$edit, &
break;
case 'update':
- if (is_array($edit['roles'])){
+ if (is_array($edit['roles'])) {
// Badges only get assigned or removed when a user's role assignments are changed.
// Add authenticated users (code below only cares about array keys) to prevent badge deletion
@@ -147,23 +132,23 @@ function user_badges_user($op, &$edit, &
$message = user_access('manage badges');
// What are the added roles?
- $added = array_diff(array_keys($new_roles), array_keys((array)$user->roles));
- foreach($added as $rid){
+ $added = array_diff(array_keys($new_roles), array_keys((array)$account->roles));
+ foreach ($added as $rid) {
// if this role has a badge
- if (key_exists($rid, $roles) && !key_exists($roles[$rid], $user->badges)){
- $success = user_badges_user_add_badge($user->uid, $roles[$rid], 'role');
- if($success && $message){
+ if (key_exists($rid, $roles) && !key_exists($roles[$rid], $account->badges)) {
+ $success = user_badges_user_add_badge($account->uid, $roles[$rid], 'role');
+ if ($success && $message) {
drupal_set_message(t('User assigned %name badge.', array('%name' => $badges[$roles[$rid]])));
}
}
}
// What are the removed roles?
- $removed = array_diff(array_keys((array)$user->roles), array_keys($new_roles));
- foreach($removed as $rid){
+ $removed = array_diff(array_keys((array)$account->roles), array_keys($new_roles));
+ foreach ($removed as $rid) {
// If this role has a badge and user has this badge..
- if (key_exists($rid, $roles) && key_exists($roles[$rid], $user->badges)) {
- $success = user_badges_user_remove_badge($user->uid, $roles[$rid], 'role');
+ if (key_exists($rid, $roles) && key_exists($roles[$rid], $account->badges)) {
+ $success = user_badges_user_remove_badge($account->uid, $roles[$rid], 'role');
drupal_set_message(t('%name badge removed from user.', array('%name' => $badges[$roles[$rid]])));
}
}
@@ -171,31 +156,50 @@ function user_badges_user($op, &$edit, &
break;
case 'delete':
- db_query('DELETE FROM {user_badges_user} WHERE uid = %d', $user->uid);
+ db_query('DELETE FROM {user_badges_user} WHERE uid = %d', $account->uid);
break;
case 'view':
- foreach($user->badges as $badge) {
+ $badgeimgs = array();
+ foreach ($account->badges as $badge) {
$badgeimgs[] = theme('user_badge', $badge);
}
- if ($badgeimgs) {
- $badge_group[] = array(
- 'title' => '',
- 'value' => theme('user_badge_group', $badgeimgs),
- 'class' => '',
+ if (!empty($badgeimgs)) {
+ $account->content['user_badges'] = array(
+ '#type' => 'user_profile_category',
+ '#title' => t('Badges'),
+ '#weight' => 10,
+ );
+ $account->content['user_badges']['badges'] = array(
+ '#type' => 'user_profile_item',
+ '#value' => theme('user_badge_group', $badgeimgs),
);
- return array(t('Badges') => $badge_group);
}
}
}
/**
- * Define the page on user/uid/badges.
+ * Implementation of hook_theme().
*/
-function user_badges_page() {
- $uid = arg(1);
- $account = user_load(array('uid' => $uid));
+function user_badges_theme() {
+ $themes = array();
+ $themes['user_badge'] = array(
+ 'arguments' => array(
+ 'badge' => NULL,
+ ),
+ );
+ $themes['user_badge_group'] = array(
+ 'arguments' => array(
+ 'badgeimages' => array(),
+ ),
+ );
+ return $themes;
+}
+/**
+ * Define the page on user/uid/badges.
+ */
+function user_badges_page($account) {
drupal_set_title(t('Edit badges for %user_name', array('%user_name' => $account->name)));
return drupal_get_form('user_badges_page_form', $account);
@@ -204,7 +208,7 @@ function user_badges_page() {
/**
* Form to assign badges to users.
*/
-function user_badges_page_form($account) {
+function user_badges_page_form(&$form_state, $account) {
$form = array();
$form['uid'] = array('#type' => 'value', '#value' => $account->uid);
@@ -228,25 +232,27 @@ function user_badges_page_form($account)
return $form;
}
-function user_badges_page_form_submit($form_id, $form_values) {
- user_badges_user_save($form_values['badges'], $form_values['uid'], FALSE);
+function user_badges_page_form_submit($form, &$form_state) {
+ $badges = $form_state['values']['badges'];
+ $uid = $form_state['values']['uid'];
+ user_badges_user_save($badges, $uid, FALSE);
}
/**
- * Assign user badges to a user
- *
- * $edit is an array containing badges array
- * $uid is the user id
- * $quiet suppresses message display
- */
+ * Assign user badges to a user
+ *
+ * $edit is an array containing badges array
+ * $uid is the user id
+ * $quiet suppresses message display
+ */
function user_badges_user_save($edit, $uid, $quiet = TRUE) {
$badges = user_badges_get_badges($uid);
if (is_array($edit)) {
// an array of just the checked boxes please
$newbadges = array();
- foreach($edit as $bid => $is_selected){
- if ($is_selected){
+ foreach ($edit as $bid => $is_selected) {
+ if ($is_selected) {
$newbadges[] = $bid;
}
}
@@ -256,8 +262,8 @@ function user_badges_user_save($edit, $u
// what are the added badges?
$added = array_diff($newbadges, array_keys($badges));
- foreach($added as $bid){
- if (!key_exists($bid, $badges)){
+ foreach ($added as $bid) {
+ if (!key_exists($bid, $badges)) {
$success = (boolean) user_badges_user_add_badge($uid, $bid);
}
}
@@ -265,9 +271,9 @@ function user_badges_user_save($edit, $u
// what are the removed badges?
$removed = array_diff(array_keys($badges), $newbadges);
- foreach($removed as $bid){
+ foreach ($removed as $bid) {
// and user has this badge
- if (key_exists($bid, $badges)){
+ if (key_exists($bid, $badges)) {
$success = $success && (boolean) user_badges_user_remove_badge($uid, $bid);
}
}
@@ -275,7 +281,7 @@ function user_badges_user_save($edit, $u
drupal_set_message(t('Badges saved.'));
}
elseif (!$quiet) {
- drupal_set_message(t('There was a problem saving badges to the database.'));
+ drupal_set_message(t('There was a problem saving badges to the database.'), 'error');
}
}
}
@@ -292,12 +298,12 @@ function user_badges_user_save($edit, $u
*
* @return unknown
*/
-function user_badges_user_add_badge($uid, $bid, $type = NULL){
+function user_badges_user_add_badge($uid, $bid, $type = NULL) {
return db_query('INSERT INTO {user_badges_user} (uid, bid, type) VALUES (%d, %d, \'%s\')', $uid, $bid, $type);
}
-function user_badges_user_remove_badge($uid, $bid, $type = NULL){
- if (is_null($type)){
+function user_badges_user_remove_badge($uid, $bid, $type = NULL) {
+ if (is_null($type)) {
return db_query('DELETE FROM {user_badges_user} WHERE uid=%d AND bid=%d', $uid, $bid);
}
else {
@@ -306,18 +312,19 @@ function user_badges_user_remove_badge($
}
function user_badges_settings_page($op = NULL, $bid = NULL) {
-
switch ($op) {
case 'edit':
if (is_numeric($bid)) {
$output = drupal_get_form('user_badges_edit_form', $bid);
- break;
}
+ break;
+
case 'delete' :
if (is_numeric($bid)) {
$output = user_badges_delete($bid);
- break;
}
+ break;
+
default:
$badges = user_badges_get_badges('all');
$header = array(t('Name'), t('Image'), t('Operations'));
@@ -325,30 +332,31 @@ function user_badges_settings_page($op =
foreach ($badges as $badge) {
$tablerow[$badge->bid]['name'] = $badge->name;
$tablerow[$badge->bid]['image'] = theme('image', $badge->image, $badge->image, $badge->image);
- $tablerow[$badge->bid]['ops'] = l(t('edit'), 'admin/user/user_badges/edit/'.$badge->bid).' '.l(t('delete'), 'admin/user/user_badges/delete/'.$badge->bid);
+ $tablerow[$badge->bid]['ops'] = l(t('edit'), 'admin/user/user_badges/edit/'. $badge->bid) .' '. l(t('delete'), 'admin/user/user_badges/delete/'. $badge->bid);
}
}
- $output = theme('table', $header, $tablerow, array('style'=>'width:100%'));
+ $output = theme('table', $header, $tablerow, array('style' => 'width:100%'));
$output .= "
";
$form[] = array(
- '#type' => 'fieldset',
- '#title' => t('Add another'),
- );
- //$output .= user_badges_edit_form();
- $output .= drupal_get_form('user_badges_edit_form');
-
+ '#type' => 'fieldset',
+ '#title' => t('Add another'),
+ );
+ //$output .= user_badges_edit_form();
+ $output .= drupal_get_form('user_badges_edit_form');
+ break;
}
+
return $output;
}
-function user_badges_edit_form_submit($form_id, $form_values) {
- user_badges_save_badge($form_values);
+function user_badges_edit_form_submit($form, &$form_state) {
+ $form_state['redirect'] = user_badges_save_badge($form_state['values']);
}
/**
* Define a form to upload the badge images.
*/
-function user_badges_images_form() {
+function user_badges_images_form($form_state) {
$form = array('#skip_duplicate_check' => TRUE);
if (module_exists('upload')) {
$form['new']['upload'] = array('#type' => 'file', '#title' => t('Upload image'), '#size' => 40);
@@ -362,7 +370,7 @@ function user_badges_images_form() {
$selects = user_badges_image_selects();
if (count($selects)) {
- $form['images'] = array('#tree' => TRUE);
+ $form['images'] = array('#tree' => TRUE);
foreach ($selects as $imagepath => $imageimg) {
$form['images'][$imagepath] = array(
'#type' => 'checkbox',
@@ -388,40 +396,54 @@ function user_badges_images_form() {
* OR
* Upload has been chosen AND the file upload form is not empty.
*/
-function user_badges_images_form_validate($form_id, $form_values) {
- if ($form_values['op'] == t('Upload') && file_check_upload('upload') === FALSE ) {
- form_set_error('upload', t('Please enter the filename of an image to upload.'));
+function user_badges_images_form_validate($form, &$form_state) {
+ $op = $form_state['clicked_button']['#value'];
+ if ($op == t('Upload')) {
+ $dir = file_create_path('badges');
+ $is_writable = file_check_directory($dir, 1);
+ if ($is_writable) {
+ if ($file = file_save_upload('upload', array(), $dir)) {
+ if (!image_get_info($file->filepath)) {
+ file_delete($file->filepath);
+ form_set_error('upload', t('Uploaded image file does not appear to be a valid image file. Please try again'));
+ }
+ else {
+ user_badges_hold_temporary_file($file);
+ $form_state['values']['file_image'] = $file;
+ }
+ }
+ else {
+ form_set_error('upload', t('Cannot save image. Enter the path to an image and try again.'));
+ }
+ }
+ else {
+ form_set_error('upload', t('Cannot save image - directory not writable'));
+ }
}
- else if ($form_values['op'] == t('Delete')) {
- if (count(array_filter($form_values['images'])) == 0) {
+ else if ($op == t('Delete')) {
+ if (count(array_filter($form_state['values']['images'])) == 0) {
form_set_error('images', t('Please select images to delete.'));
}
}
}
-function user_badges_images_form_submit($form_id, $form_values) {
- $op = $form_values['op'];
+function user_badges_hold_temporary_file($file = NULL) {
+ static $static_file;
+ if (isset($file)) {
+ $static_file = $file;
+ }
+ return $file;
+}
+
+function user_badges_images_form_submit($form, &$form_state) {
+ $op = $form_state['clicked_button']['#value'];
// Save uploaded files
if ($op == t('Upload')) {
- $dir = file_create_path('badges');
- $is_writable = file_check_directory($dir, 1);
- if ($is_writable) {
- if( $source = file_check_upload('upload')) {
- // Security measure to prevent exploit of file.php.png
- $source->filename = upload_munge_filename($source->filename);
- if ($file = file_save_upload($source, $dir)) {
- if (image_get_info($file->filepath)) {
- drupal_set_message(t('New image saved.'));
- } else {
- file_delete($file->filepath);
- drupal_set_message('Uploaded file does not appear to be a valid image file. Please try again.');
- }
- }
- }
- }
+ $file = $form_state['values']['file_image'];
+ file_set_status($file, FILE_STATUS_PERMANENT);
}
else if ($op == t('Delete')) {
- foreach ($form_values['images'] as $path => $is_removed) {
+ foreach ($form_state['values']['images'] as $path => $is_removed) {
if ($is_removed) {
$to_delete[] = $path;
}
@@ -445,12 +467,12 @@ function user_badges_roles_form() {
$badges = user_badges_get_roles();
$selects = array('' => 'inactive') + user_badges_get_badges('select');
$form['roles'] = array('#tree' => TRUE);
- foreach($roles as $rid => $role) {
+ foreach ($roles as $rid => $role) {
if ($rid != 1) { // no badges for the anonymous role
$form['roles'][$rid] = array(
'#type' => 'select',
'#title' => $role,
- '#default_value' => $badges[$rid],
+ '#default_value' => isset($badges[$rid]) ? $badges[$rid] : '',
'#options' => $selects,
);
}
@@ -462,122 +484,123 @@ function user_badges_roles_form() {
return $form;
}
-function user_badges_roles_form_submit($form_id, $form_values) {
- user_badges_save_roles($form_values['roles']);
+function user_badges_roles_form_submit($form, &$form_state) {
+ user_badges_save_roles($form_state['values']['roles']);
}
/**
- * Return array of user badges where keys are badge ids (bid)
- * and values are object containing badge info
- * if $uid is a user id, returns badges for that user
- * if $uid is 'all', returns all badges
- * if $uid is 'select', returns badges for form_select options
- * returned values for 'select' are just badge names
- *
- */
+ * Return array of user badges where keys are badge ids (bid)
+ * and values are object containing badge info
+ * if $uid is a user id, returns badges for that user
+ * if $uid is 'all', returns all badges
+ * if $uid is 'select', returns badges for form_select options
+ * returned values for 'select' are just badge names
+ */
function user_badges_get_badges($uid) {
- $badges = array();
- if ($uid == 'all' || $uid == 'select') {
- $sql = db_query('SELECT b.bid, b.weight, b.name, b.image FROM {user_badges_badges} b ORDER BY b.weight, b.name');
- }
- else {
- $sql = db_query('SELECT DISTINCT b.bid, b.weight, b.name, b.image FROM {user_badges_badges} b INNER JOIN {user_badges_user} u ON b.bid = u.bid WHERE u.uid = %d ORDER BY b.weight, b.name', $uid);
- }
- while ($badge = db_fetch_object($sql)) {
- if ($uid == 'select') {
- $badges[$badge->bid] = $badge->name;
+ static $badges, $past_uid;
+ if (empty($past_uid) || $past_uid !== $uid) {
+ $past_uid = $uid;
+ $badges = array();
+ if ($uid == 'all' || $uid == 'select') {
+ $sql = db_query('SELECT b.bid, b.weight, b.name, b.image FROM {user_badges_badges} b ORDER BY b.weight, b.name');
}
else {
- $badges[$badge->bid] = $badge;
+ $sql = db_query('SELECT DISTINCT b.bid, b.weight, b.name, b.image FROM {user_badges_badges} b INNER JOIN {user_badges_user} u ON b.bid = u.bid WHERE u.uid = %d ORDER BY b.weight, b.name', $uid);
+ }
+ while ($badge = db_fetch_object($sql)) {
+ if ($uid == 'select') {
+ $badges[$badge->bid] = $badge->name;
+ }
+ else {
+ $badges[$badge->bid] = $badge;
+ }
}
}
+
return $badges;
}
-
/**
- * Return badge object for given badge id
- */
+ * Return badge object for given badge id
+ */
function user_badges_get_badge($bid) {
return db_fetch_object(db_query('SELECT * FROM {user_badges_badges} WHERE bid = %d', $bid));
}
/**
* Define the edit form for userbadges.
- *
*/
-function user_badges_edit_form($bid = NULL) {
+function user_badges_edit_form($form_state, $bid = NULL) {
if (is_numeric($bid)) {
$edit = db_fetch_object(db_query('SELECT * FROM {user_badges_badges} WHERE bid = %d', $bid));
if (is_numeric($edit->bid)) {
$form['bid'] = array(
- '#type' => 'hidden',
- '#value' => $edit->bid,
- );
+ '#type' => 'hidden',
+ '#value' => $edit->bid,
+ );
}
}
$form['name'] = array(
- '#type' => 'textfield',
- '#title' => t('Name'),
- '#default_value' => $edit->name,
- '#size' => 40,
- '#maxlength' => 100,
- '#description' => t('Name for the badge. Will be displayed as tooltip when rolling over badge image.'),
- '#attributes' => NULL,
- '#required' => TRUE,
+ '#type' => 'textfield',
+ '#title' => t('Name'),
+ '#default_value' => isset($edit) ? $edit->name : '',
+ '#size' => 40,
+ '#maxlength' => 100,
+ '#description' => t('Name for the badge. Will be displayed as tooltip when rolling over badge image.'),
+ '#attributes' => NULL,
+ '#required' => TRUE,
);
$selects = user_badges_image_selects();
if (count($selects)) {
- $form['image'] = array(
- '#type' => 'radios',
- '#title' => t('Image'),
- '#default_value' => $edit->image,
- '#options' => $selects,
- '#description' => t('Select an image to associate with this badge. You can upload additional images on the Images page.', array('@url' => url("admin/user/user_badges/images"))),
- );
+ $form['image'] = array(
+ '#type' => 'radios',
+ '#title' => t('Image'),
+ '#default_value' => isset($edit) ? $edit->image : '',
+ '#options' => $selects,
+ '#description' => t('Select an image to associate with this badge. You can upload additional images on the Images page.', array('@url' => url("admin/user/user_badges/images"))),
+ );
}
else {
- drupal_set_message('' . t('You have to upload badge images first.', array('@upload_link' => url("admin/user/user_badges/images"))). '', 'error');
+ drupal_set_message(''. t('You have to upload badge images first.', array('@upload_link' => url("admin/user/user_badges/images"))) .'', 'error');
}
$form['weight'] = array(
'#type' => 'weight',
'#title' => t('Weight'),
- '#default_value' => $edit->weight,
+ '#default_value' => isset($edit) ? $edit->weight : '',
'#delta' => 10,
'#description' => t('Lighter weighted items float to the top of lists. Heavier items go to the bottom.'),
);
- $form[] = array(
- '#type' => 'submit',
- '#value' => 'Submit',
+ $form['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Submit'),
);
return $form;
}
/**
- * Saves information about a badge into the database
- *
- */
+ * Saves information about a badge into the database
+ */
function user_badges_save_badge($edit) {
$edit = (object)$edit;
- if (is_numeric($edit->bid)) {
+ if (isset($edit->bid) && preg_match("/^[0-9]+$/D", $edit->bid)) {
db_query('DELETE FROM {user_badges_badges} WHERE bid = %d', $edit->bid);
+ $result = db_query("INSERT INTO {user_badges_badges} (bid, name, image, weight) VALUES (%d, '%s', '%s', %d)", $edit->bid, $edit->name, $edit->image, $edit->weight);
+ drupal_set_message('Edited image');
}
else {
- $edit->bid = db_next_id('user_badges_badges');
+ $result = db_query("INSERT INTO {user_badges_badges} (name, image, weight) VALUES ('%s', '%s', %d)", $edit->name, $edit->image, $edit->weight);
+ drupal_set_message('Inserted new image');
}
- $result = db_query("INSERT INTO {user_badges_badges} (bid, name, image, weight) VALUES (%d, '%s', '%s', %d)", $edit->bid, $edit->name, $edit->image, $edit->weight);
if ($result) {
drupal_set_message(t('Badge %badgename saved.', array('%badgename' => $edit->name)));
}
else {
drupal_set_message(t('There was a problem saving the badge information into the database.'));
}
- drupal_goto('admin/user/user_badges');
- return $result;
+ return 'admin/user/user_badges';
}
-
-function user_badges_delete_form($bid) {
+function user_badges_delete_form($form_state, $bid) {
if ($badge = user_badges_get_badge($bid)) {
$form = array();
$form['badge'] = array('#value' => theme('user_badge_group', array(theme('user_badge', $badge))));
@@ -587,12 +610,13 @@ function user_badges_delete_form($bid) {
form_set_error('', t('This badge does not exist.'));
}
-function user_badges_delete_form_submit($form_id, $form_values) {
- db_query("DELETE FROM {user_badges_badges} WHERE bid = %d", $form_values['bid']);
- db_query("DELETE FROM {user_badges_user} WHERE bid = %d", $form_values['bid']);
- db_query("DELETE FROM {user_badges_roles} WHERE bid = %d", $form_values['bid']);
+function user_badges_delete_form_submit($form, &$form_state) {
+ $bid = $form_state['values']['bid'];
+ db_query("DELETE FROM {user_badges_badges} WHERE bid = %d", $bid);
+ db_query("DELETE FROM {user_badges_user} WHERE bid = %d", $bid);
+ db_query("DELETE FROM {user_badges_roles} WHERE bid = %d", $bid);
drupal_set_message(t('Badge deleted.'));
- return 'admin/user/user_badges';
+ $form_state['redirect'] = 'admin/user/user_badges';
}
function user_badges_image_selects() {
@@ -602,22 +626,21 @@ function user_badges_image_selects() {
foreach ($files as $file) {
$selects[$file->filename] = theme('image', $file->filename, $file->filename, $file->filename);
}
+
return $selects;
}
/**
- * Returns an array where keys are role ids (rid) and values are badge ids (bid)
- * These values are assigned on admin/user/user_badges/roles
- *
- * @param
- * $rid - if set, return only value for this role
- *
- * @return
- * a list of roles
- *
- */
-
-function user_badges_get_roles($rid = NULL){
+ * Returns an array where keys are role ids (rid) and values are badge ids (bid)
+ * These values are assigned on admin/user/user_badges/roles
+ *
+ * @param
+ * $rid - if set, return only value for this role
+ *
+ * @return
+ * a list of roles
+ */
+function user_badges_get_roles($rid = NULL) {
$roles = array();
if ($rid) {
$sql = db_query('SELECT * FROM {user_badges_roles} WHERE rid = %d', $rid);
@@ -628,13 +651,13 @@ function user_badges_get_roles($rid = NU
while ($row = db_fetch_object($sql)) {
$roles[$row->rid] = $row->bid;
}
+
return $roles;
}
/**
- * Save information about roles for user_badges (in settings)
- *
- */
+ * Save information about roles for user_badges (in settings)
+ */
function user_badges_save_roles($roles) {
if (is_array($roles)) {
$success = TRUE;
@@ -644,11 +667,11 @@ function user_badges_save_roles($roles)
if ($bid) {
$success = $success && db_query('INSERT INTO {user_badges_roles} (rid, bid) VALUES (%d, %d)', $rid, $bid);
// Authenticated user, rid 2 has no entry in the users_role table
- if($rid == 2) {
- $success = $success && db_query("INSERT INTO {user_badges_user} (uid, bid, type) SELECT uid, %d, 'role' FROM {users} WHERE uid > 0", $bid);
+ if ($rid == 2) {
+ $success = $success && db_query("INSERT INTO {user_badges_user} (uid, bid, type) (SELECT uid, %d, 'role' FROM {users} WHERE uid > 0)", $bid);
}
else {
- $success = $success && db_query("INSERT INTO {user_badges_user} (uid, bid, type) SELECT uid, %d, 'role' FROM {users_roles} WHERE rid=%d", $bid, $rid);
+ $success = $success && db_query("INSERT INTO {user_badges_user} (uid, bid, type) (SELECT uid, %d, 'role' FROM {users_roles} WHERE rid=%d)", $bid, $rid);
}
}
}
@@ -661,7 +684,6 @@ function user_badges_save_roles($roles)
}
}
-
/**
* Returns HTML representation of user badges for given uid
* @param $uid
@@ -670,36 +692,33 @@ function user_badges_save_roles($roles)
* when TRUE, refreshes the cache for $uid
* @return string
* html representation of userbadges
- *
*/
function user_badges_for_uid($uid, $refresh = FALSE) {
static $cache;
- if($uid) {
- if(isset($cache[$uid]) && !$refresh) {
+ if ($uid) {
+ if (isset($cache[$uid]) && !$refresh) {
return $cache[$uid];
}
else {
$user_badges = user_badges_get_badges($uid);
- foreach((array)$user_badges as $badge) {
+ foreach ((array)$user_badges as $badge) {
$badges[] = theme('user_badge', $badge);
}
$cache[$uid] = isset($badges) ? theme('user_badge_group', $badges) : '';
return $cache[$uid];
}
}
-
}
/**
- * Returns HTML representation of user badges for given user
- * $array is array defining criteria for user_load()
- * most common use will be:
- * user_badges_for_user(array('uid'=>123));
- *
- */
+ * Returns HTML representation of user badges for given user
+ * $array is array defining criteria for user_load()
+ * most common use will be:
+ * user_badges_for_user(array('uid'=>123));
+ */
function user_badges_for_user($array) {
$account = user_load($array);
- foreach((array)$account->badges as $badge) {
+ foreach ((array)$account->badges as $badge) {
$badges[] = theme('user_badge', $badge);
}
if ($badges) {
@@ -708,115 +727,19 @@ function user_badges_for_user($array) {
}
/**
- * Return html representation of a group of badges
- * $badgeimages is an array of badge image tags from theme_user_badge()
- *
- */
-
+ * Return html representation of a group of badges
+ * $badgeimages is an array of badge image tags from theme_user_badge()
+ */
function theme_user_badge_group($badgeimages) {
- if (!empty($badgeimages)) {
- return '