Index: README.txt
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/user_badges/README.txt,v
retrieving revision 1.5
diff -u -F^f -r1.5 README.txt
--- README.txt 17 Jan 2007 06:51:01 -0000 1.5
+++ README.txt 3 Apr 2008 16:17:38 -0000
@@ -17,6 +17,12 @@
identify moderators, administrators, or anyone with a given role.
+Limitation
+==========
+
+User Badges is not compatible with the "private" file download method.
+
+
Dependencies
============
In order to upload images via the user interface, user badges depends on:
Index: user_badges.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/user_badges/user_badges.info,v
retrieving revision 1.2
diff -u -F^f -r1.2 user_badges.info
--- user_badges.info 18 Jun 2007 23:50:59 -0000 1.2
+++ user_badges.info 3 Apr 2008 16:17:38 -0000
@@ -1,5 +1,10 @@
-; $Id: user_badges.info,v 1.2 2007/06/18 23:50:59 dww Exp $
+; $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
+; Information added by drupal.org packaging script on 2007-06-19
+version = "6.x-1.x-dev"
+project = "user_badges"
+datestamp = "1182212765"
+core = 6.x
Index: user_badges.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/user_badges/user_badges.install,v
retrieving revision 1.1
diff -u -F^f -r1.1 user_badges.install
--- user_badges.install 25 Jul 2006 14:28:20 -0000 1.1
+++ user_badges.install 3 Apr 2008 16:17:38 -0000
@@ -1,26 +1,132 @@
'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',
+ 'unsigned' => TRUE,
+ '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,
+ ),
+ ),
+ 'unique keys' => array('bid_nid' => array('bid', 'nid')),
+ );
+ $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,
+ ),
+ ),
+ 'unique keys' => array('rid_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' => '',
+ ),
+ ),
+ 'unique keys' => array('uid_bid' => array('uid', 'bid')),
+ 'indexes' => array(
+ 'type' => array('type'),
+ )
+ );
+
+ return $schema;
+}
function user_badges_install() {
- $ret = array();
- $ret[] = db_query("CREATE TABLE {user_badges_badges} (
- bid int(10) NOT NULL default '0',
- name varchar(50) NOT NULL default '',
- image varchar(80) NOT NULL default '',
- weight int(2) NOT NULL default '0'
- )");
- $ret[] = db_query("CREATE TABLE {user_badges_product} (
- bid int(10) NOT NULL default '0',
- nid int(10) NOT NULL default '0'
-)");
- $ret[] = db_query("CREATE TABLE {user_badges_roles} (
- rid int(10) NOT NULL default '0',
- bid int(10) NOT NULL default '0'
-)");
- $ret[] = db_query("CREATE TABLE {user_badges_user} (
- uid int(10) NOT NULL default '0',
- bid int(10) NOT NULL default '0',
- type varchar(20) NOT NULL default ''
-)");
- return $ret;
+ drupal_install_schema('user_badges');
}
+
+function user_badges_uninstall() {
+ // Delete files.
+ $dir = file_create_path('badges');
+ if ($dir) {
+ $files = file_scan_directory($dir, '.*\.(gif|jpg|jpeg|png)', array('.', '..', 'CVS'), 0, FALSE);
+ foreach ($files as $file) {
+ file_delete($file->filename);
+ }
+ }
+
+ // Delete the badges directory.
+ if (file_exists($dir)) {
+ rmdir($dir);
+ }
+ drupal_uninstall_schema('user_badges');
+}
\ 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
diff -u -F^f -r1.14 user_badges.module
--- user_badges.module 17 Jan 2007 06:51:01 -0000 1.14
+++ user_badges.module 3 Apr 2008 16:17:39 -0000
@@ -1,7 +1,7 @@
'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,
- );
- }
- }
- }
+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.
@@ -190,12 +164,27 @@ function user_badges_user($op, &$edit, &
}
/**
- * 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 +193,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,7 +217,8 @@ function user_badges_page_form($account)
return $form;
}
-function user_badges_page_form_submit($form_id, $form_values) {
+function user_badges_page_form_submit($form, &$form_state) {
+ $form_values = $form_state['values'];
user_badges_user_save($form_values['badges'], $form_values['uid'], FALSE);
}
@@ -275,7 +265,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');
}
}
}
@@ -293,7 +283,7 @@ function user_badges_user_save($edit, $u
* @return unknown
*/
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);
+ 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){
@@ -301,12 +291,11 @@ function user_badges_user_remove_badge($
return db_query('DELETE FROM {user_badges_user} WHERE uid=%d AND bid=%d', $uid, $bid);
}
else {
- return db_query('DELETE FROM {user_badges_user} WHERE uid=%d AND bid=%d AND type="%s"', $uid, $bid, $type);
+ return db_query('DELETE FROM {user_badges_user} WHERE uid=%d AND bid=%d AND type=\'%s\'', $uid, $bid, $type);
}
}
function user_badges_settings_page($op = NULL, $bid = NULL) {
-
switch ($op) {
case 'edit':
if (is_numeric($bid)) {
@@ -331,30 +320,31 @@ function user_badges_settings_page($op =
$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);
$form['new']['attach'] = array('#type' => 'submit', '#value' => t('Upload'));
}
else {
- drupal_set_message(t('Upload of images requires the upload module to be enabled.'), 'error');
+ drupal_set_message(t('Upload of images requires the upload module to be enabled.'), 'error');
}
$form['#attributes']['enctype'] = 'multipart/form-data';
@@ -387,37 +377,51 @@ 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) {
+ $form_values = $form_state['values'];
+ $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);
+ }
+ }
+ 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')) {
+ else if ($op == t('Delete')) {
if (count(array_filter($form_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'];
+ $form_values = $form_state['values'];
// 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 = user_badges_hold_temporary_file();
+ file_set_status($file, FILE_STATUS_PERMANENT);
}
else if ($op == t('Delete')) {
foreach ($form_values['images'] as $path => $is_removed) {
@@ -461,8 +465,9 @@ 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) {
+ $form_values = $form_state['values'];
+ user_badges_save_roles($form_values['roles']);
}
/**
@@ -477,10 +482,10 @@ function user_badges_roles_form_submit($
function user_badges_get_badges($uid) {
$badges = array();
if ($uid == 'all' || $uid == 'select') {
- $sql = db_query('SELECT b.bid, b.name, b.image FROM {user_badges_badges} b ORDER BY b.weight, b.name');
+ $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.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);
+ $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') {
@@ -505,7 +510,7 @@ function user_badges_get_badge($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)) {
@@ -521,7 +526,7 @@ function user_badges_edit_form($bid = NU
'#default_value' => $edit->name,
'#size' => 40,
'#maxlength' => 100,
- '#description' => t('Name for the badge.
Will be displayed as tooltip when rolling over badge image.
'),
+ '#description' => t('Name for the badge. Will be displayed as tooltip when rolling over badge image.'),
'#attributes' => NULL,
'#required' => TRUE,
);
@@ -532,7 +537,7 @@ function user_badges_edit_form($bid = NU
'#title' => t('Image'),
'#default_value' => $edit->image,
'#options' => $selects,
- '#description' => t('Select an image to associate with this badge. Add more images '.l(t('here'), "admin/user/user_badges/images")),
+ '#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 {
@@ -558,25 +563,24 @@ function user_badges_edit_form($bid = NU
*/
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 {
+ $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');
}
- else {
- $edit->bid = db_next_id('user_badges_badges');
- }
- $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))));
@@ -586,20 +590,21 @@ 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) {
+function user_badges_delete_form_submit($form, &$form_state) {
+ $form_values = $form_state['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']);
drupal_set_message(t('Badge deleted.'));
- return 'admin/user/user_badges';
+ $form_state['redirect'] = 'admin/user/user_badges';
}
function user_badges_image_selects() {
$selects = array();
- $dir = file_create_path('badges').'/';
- $listings = file_scan_directory($dir, '.*\.(gif|jpg|jpeg|png)', array('.', '..', 'CVS'), 0, FALSE);
- foreach ($listings as $listing) {
- $selects[$dir.$listing->basename] = theme('image', $dir.$listing->basename, $listing->basename, $listing->basename);
+ $dir = file_create_path('badges');
+ $files = file_scan_directory($dir, '.*\.(gif|jpg|jpeg|png)', array('.', '..', 'CVS'), 0, FALSE);
+ foreach ($files as $file) {
+ $selects[$file->filename] = theme('image', $file->filename, $file->filename, $file->filename);
}
return $selects;
}
@@ -714,7 +719,7 @@ function user_badges_for_user($array) {
function theme_user_badge_group($badgeimages) {
if (!empty($badgeimages)) {
- return "