You are here

user_relationships_ui.admin_actions.inc in User Relationships 6

User Relationships admin submit handlers

File

user_relationships_ui/user_relationships_ui.admin_actions.inc
View source
<?php

/**
 * @file
 * User Relationships admin submit handlers
 */

/**
 * Validate the submitted relationship type
 */
function user_relationships_ui_type_edit_validate($form, &$form_state) {

  // My god this is ugly
  if (isset($form_state['values']['rtid']) && db_result(db_query("SELECT name FROM {user_relationship_types}\n         WHERE LOWER(name) = LOWER('%s')\n           AND rtid != %d", $form_state['values']['name'], $form_state['values']['rtid'])) || !isset($form_state['values']['rtid']) && db_result(db_query("SELECT name FROM {user_relationship_types} WHERE LOWER(name) = LOWER('%s')", $form_state['values']['name']))) {
    form_set_error('name', t('%name has already been used.', array(
      '%name' => $form_state['values']['name'],
    )));
  }
  $expire = $form_state['values']['expires_val'];
  if (!is_numeric($expire) || (int) $expire < 0) {
    form_set_error('expires_val', t('Expiration period must be an integer greater than or equal to 0.'));
  }
}

/***
 * Generic settings validation.
 */
function user_relationships_ui_setting_validation($element, $validations) {
  foreach ($validations as $validation => $info) {
    $arguments = array(
      $element['#value'],
    );
    if (isset($info['valid_options'])) {
      $arguments[] = $info['valid_options'];
    }
    $valid = function_exists($validation) && call_user_func_array($validation, $arguments);
    $valid = !$valid ? $validation == 'is_positive' && is_numeric($arguments) && (int) $arguments > 0 : FALSE;
    $valid = !$valid ? $validation == 'is_non_negative' && is_numeric($arguments) && (int) $arguments > -1 : FALSE;
    if (!$valid) {
      form_set_error($element['#name'], $info['msg']);
    }
  }
}

/**
 * Process the relationship edit page form submission.
 */
function user_relationships_ui_type_edit_submit($form, &$form_state) {
  $relationship_type = (object) $form_state['values'];
  if ($form_state['values']['action'] == 'add') {

    //#348025 when editing a type, make sure that two-way relationships are not left as reciprocal, just in case, as the UI allows it.
    if (!$relationship_type->is_oneway) {
      $relationship_type->is_reciprocal = 0;
    }
    drupal_write_record('user_relationship_types', $relationship_type);

    // Update strings for translation
    _user_relationships_ui_update_translations($relationship_type);
    $form_state['values']['rtid'] = $relationship_type->rtid;
    _user_relationships_invoke('insert', $relationship_type, TRUE);
    drupal_set_message(t('Relationship %name has been added.', array(
      '%name' => $relationship_type->name,
    )));
    watchdog('u_relationship', 'User Relationships form: relationship %name added.', array(
      '%name' => $relationship_type->name,
    ), WATCHDOG_NOTICE, l(t('view'), 'admin/user/user_relationship/types/' . $relationship_type->rtid . '/edit'));
  }
  else {

    //#348025 when editing a type, make sure that two-way relationships are not left as reciprocal, just in case, as the UI allows it.
    if (!$relationship_type->is_oneway) {
      $relationship_type->is_reciprocal = 0;
    }
    drupal_write_record('user_relationship_types', $relationship_type, 'rtid');

    // Update strings for translation
    _user_relationships_ui_update_translations($relationship_type);
    _user_relationships_invoke('update', $relationship_type, TRUE);
    drupal_set_message(t('Relationship %name has been updated.', array(
      '%name' => $relationship_type->name,
    )));
    watchdog('u_relationship', 'User Relationships form: relationship %name updated.', array(
      '%name' => $relationship_type->name,
    ), WATCHDOG_NOTICE, l(t('view'), 'admin/user/relationships/' . $relationship_type->rtid . '/edit'));
  }

  //save role permissions for this rtype
  db_query('DELETE FROM {user_relationship_type_roles} WHERE rtid = %d', $relationship_type->rtid);
  if ($form_state['values']['roles']) {
    $role_record = new StdClass();
    $role_record->rtid = $relationship_type->rtid;
    foreach ($form_state['values']['roles'] as $rid => $selected) {
      if ($rid == $selected) {
        $role_record->rid = $selected;
        drupal_write_record('user_relationship_type_roles', $role_record);
      }
    }
  }

  //save role receive permissions for this rtype
  db_query('DELETE FROM {user_relationship_type_roles_receive} WHERE rtid = %d', $relationship_type->rtid);
  if ($form_state['values']['roles_receive']) {
    $role_receive_record = new StdClass();
    $role_receive_record->rtid = $relationship_type->rtid;
    foreach ($form_state['values']['roles_receive'] as $rid => $selected) {
      if ($rid == $selected) {
        $role_receive_record->rid = $selected;
        drupal_write_record('user_relationship_type_roles_receive', $role_receive_record);
      }
    }
  }
  user_relationships_types_load(TRUE);
  menu_rebuild();
  $form_state['redirect'] = 'admin/user/relationships';
}

/**
 * Process relationship delete form submission.
 */
function user_relationships_ui_type_delete_submit($form, &$form_state) {
  $relationship_type = user_relationships_type_load($form_state['values']['rtid']);
  db_query("DELETE FROM {user_relationship_types} WHERE rtid = %d", $relationship_type->rtid);
  db_query("DELETE FROM {user_relationships} WHERE rtid = %d", $relationship_type->rtid);
  db_query('DELETE FROM {user_relationship_type_roles} WHERE rtid = %d', $relationship_type->rtid);
  _user_relationships_invoke('delete', $relationship_type, TRUE);

  // #371311 force menu rebuild
  user_relationships_types_load(TRUE);
  menu_rebuild();
  drupal_set_message(t('Relationship %name has been deleted.', array(
    '%name' => $relationship_type->name,
  )));
  watchdog('u_relationship', 'User Relationships form: relationship %name deleted.', array(
    '%name' => $relationship_type->name,
  ), WATCHDOG_NOTICE);
  $form_state['redirect'] = 'admin/user/relationships';
}

/**
 * Make relationship type available to translation by i18nstrings.module
 */
function _user_relationships_ui_update_translations(&$relationship_type) {
  if (function_exists('i18nstrings_update') && $relationship_type->rtid) {
    i18nstrings_update("user_relationships:rtid:{$relationship_type->rtid}:name", $relationship_type->name);
    i18nstrings_update("user_relationships:rtid:{$relationship_type->rtid}:plural_name", $relationship_type->plural_name);
  }
}

Functions

Namesort descending Description
user_relationships_ui_setting_validation
user_relationships_ui_type_delete_submit Process relationship delete form submission.
user_relationships_ui_type_edit_submit Process the relationship edit page form submission.
user_relationships_ui_type_edit_validate Validate the submitted relationship type
_user_relationships_ui_update_translations Make relationship type available to translation by i18nstrings.module