--- D:/Taf/Kalys/drupal6/sites/all/modules/ubercart/uc_order/uc_order.ca.inc	Fri Nov 07 22:13:23 2008
+++ D:/Taf/Kalys/drupal6/sites/all/modules/ubercart/uc_order/uc_order.ca_diff.inc	Fri Nov 21 15:17:04 2008
@@ -226,6 +226,70 @@
       'order' => $order_arg,
     ),
   );
+  
+  $conditions['uc_order_condition_user_uid'] = array(
+    '#title' => t('Check the user UID.'),
+    '#category' => t('Order: User'),
+    '#description' => t('Returns TRUE if the user UID match the condition.'),
+    '#callback' => 'uc_order_condition_user_uid',
+    '#arguments' => array(
+      'order' => $order_arg,
+    ),
+  );      
+  $conditions['uc_order_condition_user_name'] = array(
+    '#title' => t('Check the user name.'),
+    '#category' => t('Order: User'),
+    '#description' => t('Returns TRUE if the user name match the condition.'),
+    '#callback' => 'uc_order_condition_user_name',
+    '#arguments' => array(
+      'order' => $order_arg,
+    ),
+  );    
+  $conditions['uc_order_condition_user_mail'] = array(
+    '#title' => t('Check the user email.'),
+    '#category' => t('Order: User'),
+    '#description' => t('Returns TRUE if the user email match the condition.'),
+    '#callback' => 'uc_order_condition_user_mail',
+    '#arguments' => array(
+      'order' => $order_arg,
+    ),
+  );
+  $conditions['uc_order_condition_user_created'] = array(
+    '#title' => t('Check the user creation date.'),
+    '#category' => t('Order: User'),
+    '#description' => t('Returns TRUE if the user creation date match the condition.'),
+    '#callback' => 'uc_order_condition_user_created',
+    '#arguments' => array(
+      'order' => $order_arg,
+    ),
+  );   
+  $conditions['uc_order_condition_user_login'] = array(
+    '#title' => t('Check the user last login date date.'),
+    '#category' => t('Order: User'),
+    '#description' => t('Returns TRUE if the user last login date match the condition.'),
+    '#callback' => 'uc_order_condition_user_login',
+    '#arguments' => array(
+      'order' => $order_arg,
+    ),
+  );     
+  $conditions['uc_order_condition_user_language'] = array(
+    '#title' => t('Check the user language setting.'),
+    '#category' => t('Order: User'),
+    '#description' => t('Returns TRUE if the user language setting match the condition.'),
+    '#callback' => 'uc_order_condition_user_language',
+    '#arguments' => array(
+      'order' => $order_arg,
+    ),
+  );   
+  $conditions['uc_order_condition_user_roles'] = array(
+    '#title' => t('Check the role the user.'),
+    '#category' => t('Order: User'),
+    '#description' => t('Returns TRUE if the user roles match your settings.'),
+    '#callback' => 'uc_order_condition_user_roles',
+    '#arguments' => array(
+      'order' => $order_arg,
+    ),
+  );                   
 
   return $conditions;
 }
@@ -729,6 +793,224 @@
   return uc_order_is_shippable($order);
 }
 
+// Check an user UID
+function uc_order_condition_user_uid($order, $settings) {
+  $user = uc_order_user_load($order);
+
+  switch($settings['operator']) {
+    case 'less':
+      return $user->uid < $settings['uid'];
+    case'less_equal':
+      return $user->uid <= $settings['uid'];
+    case 'equal':
+      return $user->uid == $settings['uid'];
+    case 'greater_equal':
+      return $user->uid >= $settings['uid'];
+    case 'greater':
+      return $user->uid > $settings['uid'];
+  }
+}
+
+function uc_order_condition_user_uid_form($form_state, $settings = array()) {
+  $form['operator'] = array(
+    '#type' => 'radios',
+    '#title' => t('Operator'),
+    '#options' => array(
+      'less' => t('UID is less than specified value.'),
+      'less_equal' => t('UID is less than or equal to specified value.'),
+      'equal' => t('UID is equal to specified value.'),
+      'greater_equal' => t('UID is greater than or equal to specified value.'),
+      'greater' => t('UID is greater than specified value.'),
+    ),
+    '#default_value' => isset($settings['operator']) ? $settings['operator'] : 'equal',
+  );  
+  $form['uid'] = array(
+    '#type' => 'textfield',
+    '#title' => t('User UID'),
+    '#default_value' => isset($settings['uid']) ? $settings['uid'] : '',
+  );
+
+  return $form;
+}
+
+// Check an user name
+function uc_order_condition_user_name($order, $settings) {
+  $user = uc_order_user_load($order);
+  return $user->name == $settings['name'];
+}
+
+function uc_order_condition_user_name_form($form_state, $settings = array()) {
+  $form['name'] = array(
+    '#type' => 'textfield',
+    '#title' => t('User name'),
+    '#default_value' => isset($settings['name']) ? $settings['name'] : '',
+  );
+
+  return $form;
+}
+
+// Check an user email
+function uc_order_condition_user_mail($order, $settings) {
+  $user = uc_order_user_load($order);
+  return $user->mail == $settings['mail'];
+}
+
+function uc_order_condition_user_mail_form($form_state, $settings = array()) {
+  $form['mail'] = array(
+    '#type' => 'textfield',
+    '#title' => t('User mail'),
+    '#default_value' => isset($settings['mail']) ? $settings['mail'] : '',
+  );
+
+  return $form;
+}
+
+// Check an user creation date
+function uc_order_condition_user_created($order, $settings) {
+  $user = uc_order_user_load($order);
+  $user_created = $user->created % 86400;
+  $settings_created = mktime(0, 0, 0, $settings['created']['day'], $settings['created']['month'], $settings['created']['year']);
+
+  switch($settings['operator']) {
+    case 'less':
+      return $user_created < $settings_created;
+    case'less_equal':
+      return $user_created <= $settings_created;
+    case 'equal':
+      return $user_created == $settings_created;
+    case 'greater_equal':
+      return $user_created >= $settings_created;
+    case 'greater':
+      return $user_created > $settings_created;
+  }
+}
+
+function uc_order_condition_user_created_form($form_state, $settings = array()) {
+  $form['operator'] = array(
+    '#type' => 'radios',
+    '#title' => t('Operator'),
+    '#options' => array(
+      'less' => t('Date is less than specified value.'),
+      'less_equal' => t('Date is less than or equal to specified value.'),
+      'equal' => t('Date is equal to specified value.'),
+      'greater_equal' => t('Date is greater than or equal to specified value.'),
+      'greater' => t('Date is greater than specified value.'),
+    ),
+    '#default_value' => isset($settings['operator']) ? $settings['operator'] : 'equal',
+  );  
+  $form['created'] = array(
+    '#type' => 'date',
+    '#title' => t('User creation date'),
+    '#default_value' => isset($settings['created']) ? $settings['created'] : '',
+  );
+
+  return $form;
+}
+
+// Check an user last login date
+function uc_order_condition_user_login($order, $settings) {
+  $user = uc_order_user_load($order);
+  $user_login = $user->login % 86400;
+  $settings_login = mktime(0, 0, 0, $settings['login']['day'], $settings['login']['month'], $settings['login']['year']);
+
+  switch($settings['operator']) {
+    case 'less':
+      return $user_login < $settings_login;
+    case'less_equal':
+      return $user_login <= $settings_login;
+    case 'equal':
+      return $user_login == $settings_login;
+    case 'greater_equal':
+      return $user_login >= $settings_login;
+    case 'greater':
+      return $user_login > $settings_login;
+  }
+}
+
+function uc_order_condition_user_login_form($form_state, $settings = array()) {
+  $form['operator'] = array(
+    '#type' => 'radios',
+    '#title' => t('Operator'),
+    '#options' => array(
+      'less' => t('Date is less than specified value.'),
+      'less_equal' => t('Date is less than or equal to specified value.'),
+      'equal' => t('Date is equal to specified value.'),
+      'greater_equal' => t('Date is greater than or equal to specified value.'),
+      'greater' => t('Date is greater than specified value.'),
+    ),
+    '#default_value' => isset($settings['operator']) ? $settings['operator'] : 'equal',
+  );  
+  $form['login'] = array(
+    '#type' => 'date',
+    '#title' => t('User last login date'),
+    '#default_value' => isset($settings['created']) ? $settings['created'] : '',
+  );
+
+  return $form;
+}
+
+// Check an user language setting
+function uc_order_condition_user_language($order, $settings) {
+  $user = uc_order_user_load($order);
+  $user_prefered_language = user_preferred_language($user);
+  return $user_prefered_language->language == $settings['language'];
+}
+
+function uc_order_condition_user_language_form($form_state, $settings = array()) {
+  $languages = language_list();
+  $options = array();
+  foreach($languages as $language) {
+    $options[$language->language] = $language->name.' ('.$language->native.')';
+  }
+  $form['language'] = array(
+    '#type' => 'select',
+    '#title' => t('User language setting'),
+    '#options' => $options,
+    '#default_value' => isset($settings['language']) ? $settings['language'] : '',
+  );
+
+  return $form;
+}
+
+// Check an user roles.
+function uc_order_condition_user_roles($order, $settings) {  
+  $user = uc_order_user_load($order);
+
+  if($settings['operator'] == 'AND') {
+    foreach($user->roles as $key => $user_role) {
+      if(!in_array($key, $settings['roles'])) {
+        return false;
+      }
+    }
+    return true;
+  } else {
+    foreach($user->roles as $key => $user_role) {
+      if(in_array($key, $settings['roles'])) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
+
+function uc_order_condition_user_roles_form($form_state, $settings = array()) {
+  $form['operator'] = array(
+    '#type' => 'radios',
+    '#title' => t('Operator'),
+    '#description' => t('If you use an <em>AND</em> case and want to check a custom role, make sure <em>authenticated user</em> is checked too or the condition will return FALSE.'),
+    '#options' => array('AND' => t('AND If all of these roles are TRUE.'), 'OR' => t('OR If any of these roles are TRUE.')),
+    '#default_value' => isset($settings['operator']) ? $settings['operator'] : 'AND',
+  );
+  $form['roles'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Roles'),
+    '#options' => user_roles(),
+    '#default_value' => isset($settings['roles']) ? $settings['roles'] : array(),
+  );
+
+  return $form;
+}
+
 /******************************************************************************
  * Action Callbacks and Forms                                                 *
  ******************************************************************************/
@@ -995,4 +1277,16 @@
     'template' => $form_state['values']['template'],
     'view' => $form_statep['values']['view'],
   );
+}
+
+/**
+ * Load an order user if available, else, load the current user.
+ **/
+function uc_order_user_load($order) {
+  if(!empty($order->uid)) {
+    $user = user_load($order->uid);
+  } else {
+    global $user;
+  }
+  return $user; 
 }
