casetracker_project.inc in Case Tracker 7.2
This file concentrates all general functionality related to Projects in Case Tracker, leaving to the other files in /admin the stuff related to CRUD and structural configuration
File
casetracker_project.incView source
<?php
/**
*
* @file This file concentrates all general functionality related to Projects 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_project.
*
* @param $op
* The operation being performed. One of 'view', 'update', 'create', 'delete'
* or just 'edit' (being the same as 'create' or 'update').
* @param $project
* Optionally a casetracker_project or a casetracker_project type to check
* access for. If nothing is given, access for all casetracker_projects
* 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_project_access($op, $project = NULL, $account = NULL) {
if (user_access('administer casetracker_projects', $account)) {
return TRUE;
}
if (isset($project) && is_object($project) && ($type_name = $project->type)) {
$op = $op == 'view' ? 'view' : 'edit';
if (user_access("{$op} any {$type_name} casetracker_project", $account)) {
return TRUE;
}
}
return FALSE;
}
/**
* Gets an array of all casetracker_project types, keyed by the type name.
*
* @param $type_name
* If set, the type with the given name is returned.
* @return CaseTrackerProjectType[]
* Depending whether $type isset, an array of casetracker_project types or
* a single one.
*/
function casetracker_project_get_types($type_name = NULL) {
// entity_load will get the Entity controller for our casetracker_project entity
// and call the load function of that object - we are loading entities by name here.
$types = entity_load_multiple_by_name('casetracker_project_type', isset($type_name) ? array(
$type_name,
) : FALSE);
return isset($type_name) ? reset($types) : $types;
}
/**
* Fetch a casetracker_project object. Make sure that the wildcard you choose
* in the casetracker_project entity definition fits the function name here.
*
* @param $pid
* Integer specifying the casetracker_project id.
* @param $reset
* A boolean indicating that the internal cache should be reset.
* @return
* A fully-loaded $project object or FALSE if it cannot be loaded.
*
* @see casetracker_project_load_multiple()
*/
function casetracker_project_load($pid, $reset = FALSE) {
$projects = casetracker_project_load_multiple(array(
$pid,
), array(), $reset);
return reset($projects);
}
/**
* Load multiple casetracker_projects based on certain conditions.
*
* @param $pids
* An array of project IDs.
* @param $conditions
* An array of conditions to match against the {casetracker_project} table.
* @param $reset
* A boolean indicating that the internal cache should be reset.
* @return
* An array of casetracker_project objects, indexed by pid.
*
* @see entity_load()
* @see casetracker_project_load()
*/
function casetracker_project_load_multiple($pids = array(), $conditions = array(), $reset = FALSE) {
return entity_load('casetracker_project', $pids, $conditions, $reset);
}
/**
* Deletes a casetracker_project.
*/
function casetracker_project_delete(CaseTrackerProject $project) {
$project
->delete();
}
/**
* Delete multiple casetracker_projects.
*
* @param $pids
* An array of casetracker_project IDs.
*/
function casetracker_project_delete_multiple(array $pids) {
entity_get_controller('casetracker_project')
->delete($pids);
}
/**
* Create a casetracker_project object.
*/
function casetracker_project_create($values = array()) {
return entity_get_controller('casetracker_project')
->create($values);
}
/**
* Saves a casetracker_project to the database.
*
* @param $casetracker_project
* The casetracker_project object.
*/
function casetracker_project_save(CaseTrackerProject $project) {
return $project
->save();
}
/**
* URI callback for casetracker_projects
*/
function casetracker_project_uri(CaseTrackerProject $project) {
return $project
->defaultUri();
}
/**
* Menu title callback for showing individual entities
*/
function casetracker_project_page_title(CaseTrackerProject $project) {
return $project->title;
}
function _casetracker_project_get_amount() {
return db_select('casetracker_project', 'p')
->fields('p')
->execute()
->rowCount();
}
/**
* Sets up content to show an individual casetracker_project
* @todo - get rid of drupal_set_title();
*/
function casetracker_project_page_view(CaseTrackerProject $project, $view_mode = 'full') {
drupal_set_title($project->title);
casetracker_project_set_breadcrumb();
return entity_view('casetracker_project', array(
$project->pid => $project,
), $view_mode, NULL, TRUE);
}
/**
* Form callback wrapper: create or edit a casetracker_project.
*
* @param $casetracker_project
* The casetracker_project object being edited by this form.
*
* @see casetracker_project_edit_form()
*/
function casetracker_project_form_wrapper($project) {
return drupal_get_form('casetracker_project_edit_form', $project);
}
/**
* Form callback wrapper: delete a casetracker_project.
*
* @param $project
* The casetracker_project object being edited by this form.
*
* @see casetracker_project_edit_form()
*/
function casetracker_project_delete_form_wrapper($project) {
return drupal_get_form('casetracker_project_delete_form', $project);
}
/**
* Form callback: create or edit a casetracker_project.
*
* @param $project
* The casetracker_project object to edit or for a create form an empty
* casetracker_project object with only a casetracker_project type defined.
*/
function casetracker_project_edit_form($form, &$form_state, $project) {
casetracker_project_set_breadcrumb();
if (!empty($project->pid)) {
drupal_set_title(t('@project (editing project info)', array(
'@project' => $project->title,
)));
}
// Add the default field elements.
$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#default_value' => isset($project->title) ? $project->title : '',
'#maxlength' => 255,
'#required' => TRUE,
'#weight' => -25,
);
// Add the field related form elements.
$form_state['casetracker_project'] = $project;
field_attach_form('casetracker_project', $project, $form, $form_state);
$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 project'),
'#submit' => $submit + array(
'casetracker_project_edit_form_submit',
),
);
/**
* There is some bug that in this module code that makes the submit callback
* being ignored
*/
// Show Delete button if the project.is being edited
// if (!empty($project->pid) && casetracker_project_access('edit', $project)) {
// $form['actions']['delete'] = array(
// '#type' => 'submit',
// '#value' => t('Delete'),
// '#submit' => array('casetracker_project_form_submit_delete'),
// );
// }
// We append the validate handler to #validate in case a form callback_wrapper
// is used to add validate handlers earlier.
$form['#validate'][] = 'casetracker_project_edit_form_validate';
return $form;
}
/**
* Form API validate callback for the casetracker_project form
*/
function casetracker_project_edit_form_validate(&$form, &$form_state) {
$project = $form_state['casetracker_project'];
// Notify field widgets to validate their data.
field_attach_form_validate('casetracker_project', $project, $form, $form_state);
}
/**
* Form API submit callback for the casetracker_project form.
*
* @todo remove hard-coded link
*/
function casetracker_project_edit_form_submit(&$form, &$form_state) {
$project = entity_ui_controller('casetracker_project')
->entityFormSubmitBuildEntity($form, $form_state);
if ($project->is_new = isset($project->is_new) ? $project->is_new : 0) {
$project->created = time();
global $user;
$project->uid = $user->uid;
}
$project->changed = time();
$project
->save();
// Save the casetracker_project and go back to the list of casetracker_projects
// Add in created and changed times.
if ($project->is_new = isset($project->is_new) ? $project->is_new : 0) {
drupal_set_message(t('The project "!title" was created successfully.', array(
'!title' => l($project->title, 'project/' . $project->pid),
)));
}
else {
drupal_set_message(t('The project "!title" was updated successfully.', array(
'!title' => l($project->title, 'project/' . $project->pid),
)));
}
}
/**
* Form API submit callback for the delete button.
*
* @todo Remove hard-coded path
*/
function casetracker_project_form_submit_delete(&$form, &$form_state) {
$form_state['redirect'] = 'project/' . $form_state['casetracker_project']->pid . '/delete';
}
/**
* Form callback: confirmation form for deleting a casetracker_project.
*
* @param $project
* The casetracker_project to delete
*
* @see confirm_form()
*/
function casetracker_project_delete_form($form, &$form_state, $project) {
casetracker_project_set_breadcrumb();
$form_state['casetracker_project'] = $project;
$form['#submit'][] = 'casetracker_project_delete_form_submit';
$form = confirm_form($form, t('Are you sure you want to delete project "@title"?', array(
'@title' => $project->title,
)), 'projects', '<p>' . t('This action cannot be undone.') . '</p>', t('Delete'), t('Cancel'), 'confirm');
return $form;
}
/**
* Submit callback for casetracker_project_delete_form
*/
function casetracker_project_delete_form_submit($form, &$form_state) {
$project = $form_state['casetracker_project'];
casetracker_project_delete($project);
drupal_set_message(t('The project "%title" has been deleted.', array(
'%title' => $project->title,
)));
watchdog('casetracker_project', 'Deleted project %title.', array(
'%title' => $project->title,
));
}
/**
* Page to add CaseTrackerProject Entities.
*
* @todo Pass this through a proper theme function
*/
function casetracker_project_add_page() {
$controller = entity_ui_controller('casetracker_project');
return $controller
->addPage();
}
/**
* Displays the list of available casetracker_project types for casetracker_project creation.
*
* @ingroup themeable
*/
function theme_casetracker_project_add_list($variables) {
$content = $variables['content'];
$output = '';
if ($content) {
$output = '<dl class="casetracker-project-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_project types')) {
$output = '<p>' . t('CaseTrackerProject Entities cannot be added because you have not created any casetracker_project types yet. Go to the <a href="@create-casetracker-project-type">casetracker_project type creation page</a> to add a new casetracker_project type.', array(
'@create-casetracker-project-type' => url('admin/structure/casetracker/project-types/add'),
)) . '</p>';
}
else {
$output = '<p>' . t('No casetracker_project types have been created yet for you to use.') . '</p>';
}
}
return $output;
}
/**
* Sets the breadcrumb for administrative casetracker_project pages.
*/
function casetracker_project_set_breadcrumb($items = array()) {
$breadcrumb = array();
$breadcrumb[] = l(t('Home'), NULL);
$breadcrumb[] = l(t('Projects'), 'projects');
if (!empty($items)) {
$breadcrumb += $items;
}
drupal_set_breadcrumb($breadcrumb);
}
Functions
Name![]() |
Description |
---|---|
casetracker_project_access | Determines whether the given user has access to a casetracker_project. |
casetracker_project_add_page | Page to add CaseTrackerProject Entities. |
casetracker_project_create | Create a casetracker_project object. |
casetracker_project_delete | Deletes a casetracker_project. |
casetracker_project_delete_form | Form callback: confirmation form for deleting a casetracker_project. |
casetracker_project_delete_form_submit | Submit callback for casetracker_project_delete_form |
casetracker_project_delete_form_wrapper | Form callback wrapper: delete a casetracker_project. |
casetracker_project_delete_multiple | Delete multiple casetracker_projects. |
casetracker_project_edit_form | Form callback: create or edit a casetracker_project. |
casetracker_project_edit_form_submit | Form API submit callback for the casetracker_project form. |
casetracker_project_edit_form_validate | Form API validate callback for the casetracker_project form |
casetracker_project_form_submit_delete | Form API submit callback for the delete button. |
casetracker_project_form_wrapper | Form callback wrapper: create or edit a casetracker_project. |
casetracker_project_get_types | Gets an array of all casetracker_project types, keyed by the type name. |
casetracker_project_load | Fetch a casetracker_project object. Make sure that the wildcard you choose in the casetracker_project entity definition fits the function name here. |
casetracker_project_load_multiple | Load multiple casetracker_projects based on certain conditions. |
casetracker_project_page_title | Menu title callback for showing individual entities |
casetracker_project_page_view | Sets up content to show an individual casetracker_project @todo - get rid of drupal_set_title(); |
casetracker_project_save | Saves a casetracker_project to the database. |
casetracker_project_set_breadcrumb | Sets the breadcrumb for administrative casetracker_project pages. |
casetracker_project_uri | URI callback for casetracker_projects |
theme_casetracker_project_add_list | Displays the list of available casetracker_project types for casetracker_project creation. |
_casetracker_project_get_amount |