View source
<?php
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);
}
}
class CaseTrackerProjectTypeController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
public function create(array $values = array()) {
$values += array(
'id' => '',
'is_new' => TRUE,
);
$project_type = parent::create($values);
return $project_type;
}
}
class CaseTrackerProjectTypeUIController extends EntityDefaultUIController {
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;
}
}
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,
);
$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;
}
function casetracker_project_type_form_submit(&$form, &$form_state) {
$project_type = entity_ui_form_submit_build_entity($form, $form_state);
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';
}
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';
}
function casetracker_project_type_access($op, $type = NULL, $account = NULL) {
return user_access('administer casetracker_project types', $account);
}
function casetracker_project_type_load($type) {
return casetracker_project_get_types($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);
}