casetracker_case.inc in Case Tracker 7.2
This file concentrates all general functionality related to Cases in Case Tracker, leaving to the other files in /admin the stuff related to CRUD and structural configuration
File
casetracker_case.incView source
<?php
/**
*
* @file This file concentrates all general functionality related to Cases in
* Case Tracker, leaving to the other files in /admin the stuff related to CRUD
* and structural configuration
*/
/**
* Determines whether the given user has access to a casetracker_case.
*
* @param $op
* The operation being performed. One of 'view', 'update', 'create', 'delete'
* or just 'edit' (being the same as 'create' or 'update').
* @param $case
* Optionally a casetracker_case or a casetracker_case type to check
* access for. If nothing is given, access for all casetracker_cases
* is determined.
* @param $account
* The user to check for. Leave it to NULL to check for the global user.
* @return boolean
* Whether access is allowed or not.
*/
function casetracker_case_access($op, $case = NULL, $account = NULL) {
if (user_access('administer casetracker_cases', $account)) {
return TRUE;
}
if (isset($case) && is_object($case) && ($type_name = $case->type)) {
$op = $op == 'view' ? 'view' : 'edit';
if (user_access("{$op} any {$type_name} casetracker_case", $account)) {
return TRUE;
}
}
return FALSE;
}
/**
* Fetch a casetracker_case object. Make sure that the wildcard you choose
* in the casetracker_case entity definition fits the function name here.
*
* @param $cid
* Integer specifying the casetracker_case id.
* @param $reset
* A boolean indicating that the internal cache should be reset.
* @return
* A fully-loaded $case object or FALSE if it cannot be loaded.
*
* @see casetracker_case_load_multiple()
*/
function casetracker_case_load($cid, $reset = FALSE) {
$cases = casetracker_case_load_multiple(array(
$cid,
), array(), $reset);
return reset($cases);
}
/**
* Load multiple casetracker_cases based on certain conditions.
*
* @param $cids
* An array of case IDs.
* @param $conditions
* An array of conditions to match against the {casetracker_case} table.
* @param $reset
* A boolean indicating that the internal cache should be reset.
* @return
* An array of casetracker_case objects, indexed by pid.
*
* @see entity_load()
* @see casetracker_case_load()
*/
function casetracker_case_load_multiple($cids = array(), $conditions = array(), $reset = FALSE) {
return entity_load('casetracker_case', $cids, $conditions, $reset);
}
/**
* Deletes a casetracker_case.
*/
function casetracker_case_delete(CaseTrackerCase $case) {
$case
->delete();
}
/**
* Delete multiple casetracker_cases.
*
* @param $cids
* An array of casetracker_case IDs.
*/
function casetracker_case_delete_multiple(array $cids) {
entity_get_controller('casetracker_case')
->delete($cids);
}
/**
* Create a casetracker_case object.
*/
function casetracker_case_create($values = array()) {
return entity_get_controller('casetracker_case')
->create($values);
}
/**
* Saves a casetracker_case to the database.
*
* @param $casetracker_case
* The casetracker_case object.
*/
function casetracker_case_save(CaseTrackerCase $case) {
return $case
->save();
}
/**
* URI callback for casetracker_cases
*/
function casetracker_case_uri(CaseTrackerCase $case) {
return $case
->defaultUri();
}
/**
* Menu title callback for showing individual entities
*/
function casetracker_case_page_title(CaseTrackerCase $case) {
return $case->title;
}
/**
* Sets up content to show an individual casetracker_case
* @todo - get rid of drupal_set_title();
*/
function casetracker_case_page_view(CaseTrackerCase $case, $view_mode = 'full') {
drupal_set_title($case->title . ' (#ID ' . $case->cid . ')');
$project_wrapper = casetracker_project_load($case->field_casetracker_project_ref[LANGUAGE_NONE][0]['target_id']);
casetracker_case_set_breadcrumb(array(
$project_wrapper->title,
));
return entity_view('casetracker_case', array(
$case->cid => $case,
), $view_mode, NULL, TRUE);
}
/**
* Form callback wrapper: create or edit a casetracker_case.
*
* @param $casetracker_case
* The casetracker_case object being edited by this form.
*
* @see casetracker_case_edit_form()
*/
function casetracker_case_form_wrapper($case) {
return drupal_get_form('casetracker_case_edit_form', $case);
}
/**
* Form callback wrapper: delete a casetracker_case.
*
* @param $case
* The casetracker_case object being edited by this form.
*
* @see casetracker_case_edit_form()
*/
function casetracker_case_delete_form_wrapper($case) {
// Add the breadcrumb for the form's location.
//casetracker_case_set_breadcrumb();
return drupal_get_form('casetracker_case_delete_form', $case);
}
/**
* Form callback: create or edit a casetracker_case.
*
* @param $case
* The casetracker_case object to edit or for a create form an empty
* casetracker_case object with only a casetracker_case type defined.
*/
function casetracker_case_edit_form($form, &$form_state, $case) {
$amount_of_projects = _casetracker_project_get_amount();
if ($amount_of_projects == 0) {
drupal_set_message(t('You need to have at least 1 project to relate your cases to. If you wish, you can go to the <a href="@link">projects creation page</a> now to create one.', array(
'@link' => base_path() . 'admin/content/casetracker/projects/add',
)), 'error');
}
casetracker_case_set_breadcrumb();
if (!empty($case->cid)) {
drupal_set_title(t('@case (editing case info)', array(
'@case' => $case->title,
)), PASS_THROUGH);
}
// Add the default field elements.
$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#default_value' => isset($case->title) ? $case->title : '',
'#maxlength' => 255,
'#required' => TRUE,
'#weight' => -25,
);
// Add the field related form elements.
$form_state['casetracker_case'] = $case;
field_attach_form('casetracker_case', $case, $form, $form_state);
// If the entity is being created, try to prepopulate the project reference
// from the URL argument
if (isset($case->is_new) && $case->is_new) {
// If the project was informed via URL argument, prepopulate the field
$pid = arg(1);
if (!empty($pid)) {
$project = casetracker_project_load($pid);
if ($project) {
$case_wrapper = entity_metadata_wrapper('casetracker_case', $case);
$casetracker_case_entity_info = $case_wrapper
->entityInfo();
$selected_project = $project->title . ' (' . $pid . ')';
$form['field_casetracker_project_ref']['und'][0]['target_id']['#default_value'] = $selected_project;
drupal_set_title(t('Add @bundle to project "@title"', array(
'@title' => $project->title,
'@bundle' => $casetracker_case_entity_info['bundles'][$case->type]['label'],
)));
}
}
}
$form['uid'] = array(
'#type' => 'value',
'#value' => $case->uid,
);
$form['actions'] = array(
'#type' => 'container',
'#attributes' => array(
'class' => array(
'form-actions',
),
),
'#weight' => 400,
);
// We add the form's #submit array to this button along with the actual submit
// handler to preserve any submit handlers added by a form callback_wrapper.
$submit = array();
if (!empty($form['#submit'])) {
$submit += $form['#submit'];
}
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save case'),
'#submit' => $submit + array(
'casetracker_case_edit_form_submit',
),
);
// We append the validate handler to #validate in case a form callback_wrapper
// is used to add validate handlers earlier.
$form['#validate'][] = 'casetracker_case_edit_form_validate';
return $form;
}
/**
* Form API validate callback for the casetracker_case form
*/
function casetracker_case_edit_form_validate(&$form, &$form_state) {
$case = $form_state['casetracker_case'];
// Notify field widgets to validate their data.
field_attach_form_validate('casetracker_case', $case, $form, $form_state);
}
/**
* Form API submit callback for the casetracker_case form.
*
* @todo remove hard-coded link
*/
function casetracker_case_edit_form_submit(&$form, &$form_state) {
$case = entity_ui_controller('casetracker_case')
->entityFormSubmitBuildEntity($form, $form_state);
if ($case->is_new = isset($case->is_new) ? $case->is_new : 0) {
$case->created = time();
global $user;
$case->uid = $user->uid;
}
$case->changed = time();
$case
->save();
// Save the casetracker_case and go back to the list of casetracker_cases
// Add in created and changed times.
if ($case->is_new = isset($case->is_new) ? $case->is_new : 0) {
drupal_set_message(t('The case "!title" was created successfully.', array(
'!title' => l($case->title, 'casetracker/case/' . $case->cid),
)));
}
else {
drupal_set_message(t('The case "!title" was updated successfully.', array(
'!title' => l($case->title, 'casetracker/case/' . $case->cid),
)));
}
}
/**
* Form API submit callback for the delete button.
*
* @todo Remove hard-coded path
*/
function casetracker_case_form_submit_delete(&$form, &$form_state) {
$form_state['redirect'] = 'casetracker/case/' . $form_state['casetracker_case']->pid . '/delete';
}
/**
* Form callback: confirmation form for deleting a casetracker_case.
*
* @param $case
* The casetracker_case to delete
*
* @see confirm_form()
*/
function casetracker_case_delete_form($form, &$form_state, $case) {
casetracker_case_set_breadcrumb();
$form_state['casetracker_case'] = $case;
$form['#submit'][] = 'casetracker_case_delete_form_submit';
$form = confirm_form($form, t('Are you sure you want to delete case "@title"?', array(
'@title' => $case->title,
)), 'admin/content/casetracker/cases', '<p>' . t('This action cannot be undone.') . '</p>', t('Delete'), t('Cancel'), 'confirm');
return $form;
}
/**
* Submit callback for casetracker_case_delete_form
*/
function casetracker_case_delete_form_submit($form, &$form_state) {
$case = $form_state['casetracker_case'];
casetracker_case_delete($case);
drupal_set_message(t('The case "%title" has been deleted.', array(
'%title' => $case->title,
)));
watchdog('casetracker_case', 'Deleted case "%title".', array(
'%title' => $case->title,
));
}
/**
* Page to add CaseTrackerCase Entities.
*
* @todo Pass this through a proper theme function
*/
function casetracker_case_add_page() {
$controller = entity_ui_controller('casetracker_case');
return $controller
->addPage();
}
/**
* Displays the list of available casetracker_case types for casetracker_case creation.
*
* @ingroup themeable
*/
function theme_casetracker_case_add_list($variables) {
$content = $variables['content'];
$output = '';
if ($content) {
$output = '<dl class="casetracker-case-type-list">';
foreach ($content as $item) {
$output .= '<dt>' . l($item['title'], $item['href']) . '</dt>';
$output .= '<dd>' . filter_xss_admin($item['description']) . '</dd>';
}
$output .= '</dl>';
}
else {
if (user_access('administer casetracker_case types')) {
$output = '<p>' . t('CaseTrackerCase Entities cannot be added because you have not created any casetracker_case types yet. Go to the <a href="@create-casetracker-case-type">casetracker_case type creation page</a> to add a new casetracker_case type.', array(
'@create-casetracker-case-type' => url('admin/structure/casetracker_case_types/add'),
)) . '</p>';
}
else {
$output = '<p>' . t('No casetracker_case types have been created yet for you to use.') . '</p>';
}
}
return $output;
}
/**
* Sets the breadcrumb for administrative casetracker_case pages.
*/
function casetracker_case_set_breadcrumb($items = array()) {
$project = casetracker_project_load(arg(1));
$breadcrumb = array();
$breadcrumb[] = l(t('Home'), NULL);
$breadcrumb[] = l(t('Projects'), 'projects');
$breadcrumb[] = l($project->title, 'project/' . $project->pid);
$breadcrumb[] = l(t('Cases'), 'project/' . $project->pid . '/cases');
drupal_set_breadcrumb($breadcrumb);
}
Functions
Name![]() |
Description |
---|---|
casetracker_case_access | Determines whether the given user has access to a casetracker_case. |
casetracker_case_add_page | Page to add CaseTrackerCase Entities. |
casetracker_case_create | Create a casetracker_case object. |
casetracker_case_delete | Deletes a casetracker_case. |
casetracker_case_delete_form | Form callback: confirmation form for deleting a casetracker_case. |
casetracker_case_delete_form_submit | Submit callback for casetracker_case_delete_form |
casetracker_case_delete_form_wrapper | Form callback wrapper: delete a casetracker_case. |
casetracker_case_delete_multiple | Delete multiple casetracker_cases. |
casetracker_case_edit_form | Form callback: create or edit a casetracker_case. |
casetracker_case_edit_form_submit | Form API submit callback for the casetracker_case form. |
casetracker_case_edit_form_validate | Form API validate callback for the casetracker_case form |
casetracker_case_form_submit_delete | Form API submit callback for the delete button. |
casetracker_case_form_wrapper | Form callback wrapper: create or edit a casetracker_case. |
casetracker_case_load | Fetch a casetracker_case object. Make sure that the wildcard you choose in the casetracker_case entity definition fits the function name here. |
casetracker_case_load_multiple | Load multiple casetracker_cases based on certain conditions. |
casetracker_case_page_title | Menu title callback for showing individual entities |
casetracker_case_page_view | Sets up content to show an individual casetracker_case @todo - get rid of drupal_set_title(); |
casetracker_case_save | Saves a casetracker_case to the database. |
casetracker_case_set_breadcrumb | Sets the breadcrumb for administrative casetracker_case pages. |
casetracker_case_uri | URI callback for casetracker_cases |
theme_casetracker_case_add_list | Displays the list of available casetracker_case types for casetracker_case creation. |