You are here

casetracker_project_type.inc in Case Tracker 7.2

CaseTrackerProject type editing UI.

File

casetracker_project_type.inc
View source
<?php

/**
 * @file
 * CaseTrackerProject type editing UI.
 */

/**
 * The class used for project type entities
 */
class CaseTrackerProjectType extends Entity {
  public $type;
  public $label;
  public function __construct($values = array()) {
    parent::__construct($values, 'casetracker_project_type');
  }
  function isLocked() {
    return isset($this->status) && empty($this->is_new) && ($this->status & ENTITY_IN_CODE || $this->status & ENTITY_FIXED);
  }

}

/**
 * The Controller for Project entities
 */
class CaseTrackerProjectTypeController extends EntityAPIControllerExportable {
  public function __construct($entityType) {
    parent::__construct($entityType);
  }

  /**
   *
   * @param $type
   *   The machine-readable type of the project.
   *
   * @return
   *   A project type object with all default fields initialized.
   */
  public function create(array $values = array()) {

    // Add values that are specific to our Project
    $values += array(
      'id' => '',
      'is_new' => TRUE,
    );
    $project_type = parent::create($values);
    return $project_type;
  }

}

/**
 * UI controller.
 */
class CaseTrackerProjectTypeUIController extends EntityDefaultUIController {

  /**
   * Overrides hook_menu() defaults.
   */
  public function hook_menu() {
    $items = parent::hook_menu();
    $items[$this->path]['type'] = MENU_LOCAL_TASK;
    $items[$this->path]['description'] = 'Manage project entity types, including adding
		and removing fields and the display of fields.';
    return $items;
  }

}

/**
 * Generates the project type editing form.
 */
function casetracker_project_type_form($form, &$form_state, $project_type, $op = 'edit') {
  if ($op == 'clone') {
    $project_type->label .= ' (cloned)';
    $project_type->type = '';
  }
  $form['label'] = array(
    '#title' => t('Label'),
    '#type' => 'textfield',
    '#default_value' => $project_type->label,
    '#description' => t('The human-readable name of this project type.'),
    '#required' => TRUE,
    '#size' => 30,
  );

  // Machine-readable type name.
  $form['type'] = array(
    '#type' => 'machine_name',
    '#default_value' => isset($project_type->type) ? $project_type->type : '',
    '#maxlength' => 32,
    '#machine_name' => array(
      'exists' => 'casetracker_project_get_types',
      'source' => array(
        'label',
      ),
    ),
    '#description' => t('A unique machine-readable name for this project type. It must only contain lowercase letters, numbers, and underscores.'),
  );
  $form['actions'] = array(
    '#type' => 'actions',
  );
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save project type'),
    '#weight' => 40,
    '#suffix' => l(t('Cancel'), 'admin/structure/casetracker/project-types'),
  );
  return $form;
}

/**
 * Form API submit callback for the type form.
 */
function casetracker_project_type_form_submit(&$form, &$form_state) {
  $project_type = entity_ui_form_submit_build_entity($form, $form_state);

  // If we create new project type we need to add default fields to it.
  if ($form_state['op'] == 'add') {
    casetracker_project_type_add_default_fields($project_type);
    drupal_set_message(t('Project type "@title" was created successfully', array(
      '@title' => $project_type->label,
    )));
  }
  else {
    drupal_set_message(t('Project type "@title" was edited successfully', array(
      '@title' => $project_type->label,
    )));
  }
  $project_type
    ->save();
  $form_state['redirect'] = 'admin/structure/casetracker/project-types';
}

/**
 * Form API submit callback for the delete button.
 */
function casetracker_project_type_form_submit_delete(&$form, &$form_state) {
  $form_state['redirect'] = 'admin/structure/casetracker/project-types/manage/' . $form_state['casetracker_project_type']->type . '/delete';
}

/**
 * Access callback for the entity API.
 */
function casetracker_project_type_access($op, $type = NULL, $account = NULL) {
  return user_access('administer casetracker_project types', $account);
}

/**
 * Saves a casetracker_project type to the db.
 */

// function casetracker_project_type_save(CaseTrackerProjectType $type) {
//   $type->save();
// }

/**
 * Deletes a casetracker_project type from the db.
 */

// function casetracker_project_type_delete(CaseTrackerProjectType $type) {
//   $type->delete();
// }

/**
 * Menu argument loader; Load a casetracker_project type by string.
 *
 * @param $type
 *   The machine-readable name of a casetracker_project type to load.
 * @return
 *   A casetracker_project type array or FALSE if $type does not exist.
 */
function casetracker_project_type_load($type) {
  return casetracker_project_get_types($type);
}

/**
 * Add default fields to newly created project type.
 */
function casetracker_project_type_add_default_fields($project_type) {
  $field_names = array(
    'field_casetracker_description',
  );
  $fields = casetracker_basic_fields_definitions('casetracker_project', $project_type->type, $field_names);
  _casetracker_process_fields_for_new_bundle('casetracker_project', $project_type->type, $fields);
}

Functions

Namesort descending Description
casetracker_project_type_access Access callback for the entity API.
casetracker_project_type_add_default_fields Add default fields to newly created project type.
casetracker_project_type_form Generates the project type editing form.
casetracker_project_type_form_submit Form API submit callback for the type form.
casetracker_project_type_form_submit_delete Form API submit callback for the delete button.
casetracker_project_type_load Menu argument loader; Load a casetracker_project type by string.

Classes

Namesort descending Description
CaseTrackerProjectType The class used for project type entities
CaseTrackerProjectTypeController The Controller for Project entities
CaseTrackerProjectTypeUIController UI controller.