2018-03-02 18:16:15 +01:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
* Code for the Farm Quick module.
|
|
|
|
*/
|
|
|
|
|
2018-03-02 19:16:26 +01:00
|
|
|
/**
|
|
|
|
* Implements hook_hook_info().
|
|
|
|
*/
|
|
|
|
function farm_quick_hook_info() {
|
|
|
|
$hooks['farm_quick_forms'] = array(
|
|
|
|
'group' => 'farm_quick',
|
|
|
|
);
|
|
|
|
return $hooks;
|
|
|
|
}
|
|
|
|
|
2018-03-02 18:16:15 +01:00
|
|
|
/**
|
|
|
|
* Load information about all quick forms provided by other modules.
|
|
|
|
*/
|
|
|
|
function farm_quick_forms() {
|
|
|
|
|
|
|
|
// Ask modules for quick forms.
|
2018-03-02 19:16:26 +01:00
|
|
|
$forms = array();
|
|
|
|
$modules = module_implements('farm_quick_forms');
|
|
|
|
foreach ($modules as $module) {
|
|
|
|
$module_forms = module_invoke($module, 'farm_quick_forms');
|
|
|
|
foreach ($module_forms as &$form) {
|
|
|
|
$form['module'] = $module;
|
|
|
|
}
|
|
|
|
$forms = array_merge($forms, $module_forms);
|
|
|
|
}
|
2018-03-02 18:16:15 +01:00
|
|
|
|
|
|
|
// Sort the quick forms.
|
|
|
|
uasort($forms, 'farm_quick_forms_sort');
|
|
|
|
|
|
|
|
// Return the array of quick forms.
|
|
|
|
return $forms;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sort function for quick form definitions.
|
|
|
|
*/
|
|
|
|
function farm_quick_forms_sort($a, $b) {
|
|
|
|
|
2018-03-21 14:44:45 +01:00
|
|
|
// Sort alphabetically by the 'label' property.
|
|
|
|
return strcasecmp($a['label'], $b['label']);
|
2018-03-02 18:16:15 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Implements hook_menu().
|
|
|
|
*/
|
|
|
|
function farm_quick_menu() {
|
|
|
|
|
|
|
|
// Start with an empty menu items array.
|
|
|
|
$items = array();
|
|
|
|
|
|
|
|
// Ask for quick forms from modules.
|
|
|
|
$forms = farm_quick_forms();
|
|
|
|
|
|
|
|
// If there are no forms, bail.
|
|
|
|
if (empty($forms)) {
|
|
|
|
return $items;
|
|
|
|
}
|
|
|
|
|
2018-03-21 14:53:25 +01:00
|
|
|
// Get a list of enabled quick forms from saved variable.
|
|
|
|
$enabled_quick_forms = variable_get('farm_quick_forms_enabled', NULL);
|
|
|
|
|
|
|
|
// If list of enabled forms is not null, filter out disabled forms.
|
|
|
|
if (!is_null($enabled_quick_forms)) {
|
|
|
|
foreach ($forms as $name => $info) {
|
|
|
|
if (empty($enabled_quick_forms[$name])) {
|
|
|
|
unset($forms[$name]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-02 18:16:15 +01:00
|
|
|
// Add a menu item for each form.
|
|
|
|
reset($forms);
|
|
|
|
$first = key($forms);
|
|
|
|
foreach ($forms as $name => $form) {
|
|
|
|
|
2018-03-02 19:09:25 +01:00
|
|
|
// Build a menu item definition.
|
|
|
|
$menu_item = array(
|
2018-03-21 14:44:45 +01:00
|
|
|
'title' => $form['label'],
|
2018-03-02 18:16:15 +01:00
|
|
|
'page callback' => 'drupal_get_form',
|
|
|
|
'page arguments' => array($form['form']),
|
|
|
|
'access arguments' => array($form['permission']),
|
|
|
|
'type' => MENU_LOCAL_TASK,
|
|
|
|
);
|
2018-03-02 19:09:25 +01:00
|
|
|
|
2018-03-02 19:16:26 +01:00
|
|
|
// If the quick form code is in a separate file, add that information
|
|
|
|
// to the menu item so Drupal knows where to look.
|
|
|
|
if (!empty($form['file']) && !empty($form['module'])) {
|
|
|
|
$menu_item['file'] = $form['file'];
|
|
|
|
$menu_item['file path'] = drupal_get_path('module', $form['module']);
|
|
|
|
}
|
|
|
|
|
2018-03-02 19:09:25 +01:00
|
|
|
// If this is the first item, make it the default tab for "Quick forms".
|
|
|
|
if ($name == $first) {
|
|
|
|
$items['farm/quick'] = $menu_item;
|
|
|
|
$items['farm/quick']['title'] = 'Quick forms';
|
|
|
|
$items['farm/quick']['type'] = MENU_LOCAL_TASK;
|
|
|
|
$items['farm/quick/' . $name] = array(
|
|
|
|
'title' => $menu_item['title'],
|
|
|
|
'type' => MENU_DEFAULT_LOCAL_TASK,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Otherwise, treat it as a normal menu tab.
|
|
|
|
else {
|
|
|
|
$items['farm/quick/' . $name] = $menu_item;
|
|
|
|
}
|
2018-03-02 18:16:15 +01:00
|
|
|
}
|
|
|
|
|
2018-03-21 14:53:25 +01:00
|
|
|
// Add a tab for configuring quick forms.
|
|
|
|
$items['farm/quick/configure'] = array(
|
|
|
|
'title' => t('Configure'),
|
|
|
|
'page callback' => 'drupal_get_form',
|
|
|
|
'page arguments' => array('farm_quick_configure_form'),
|
|
|
|
'access arguments' => array('administer site configuration'),
|
|
|
|
'type' => MENU_LOCAL_TASK,
|
|
|
|
'weight' => 100,
|
|
|
|
);
|
|
|
|
|
2018-03-02 18:16:15 +01:00
|
|
|
// Return menu items.
|
|
|
|
return $items;
|
|
|
|
}
|
2018-03-21 14:53:25 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Form for configuring quick forms.
|
|
|
|
*/
|
|
|
|
function farm_quick_configure_form($form, &$form_state) {
|
|
|
|
|
|
|
|
// Load the list of quick forms.
|
|
|
|
$quick_forms = farm_quick_forms();
|
|
|
|
|
|
|
|
// If there are no forms, bail.
|
|
|
|
if (empty($quick_forms)) {
|
|
|
|
$form['empty'] = array(
|
|
|
|
'#type' => 'markup',
|
|
|
|
'#markup' => 'There are no quick forms available.',
|
|
|
|
);
|
|
|
|
return $form;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create a set of checkbox options for the forms.
|
|
|
|
$options = array();
|
|
|
|
foreach ($quick_forms as $name => $info) {
|
|
|
|
if (!empty($info['label'])) {
|
|
|
|
$options[$name] = $info['label'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Load the list of enabled quick forms from a variable.
|
|
|
|
$enabled_quick_forms = variable_get('farm_quick_forms_enabled', NULL);
|
|
|
|
|
|
|
|
// If no quick forms variable was set, assume that all are enabled.
|
|
|
|
if (is_null($enabled_quick_forms)) {
|
|
|
|
foreach ($options as $name => $option) {
|
|
|
|
$enabled_quick_forms[$name] = $name;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Display as a list of checkboxes.
|
|
|
|
$form['farm_quick_forms_enabled'] = array(
|
|
|
|
'#type' => 'checkboxes',
|
|
|
|
'#title' => t('Enable or disable quick forms'),
|
|
|
|
'#options' => $options,
|
|
|
|
'#default_value' => $enabled_quick_forms,
|
|
|
|
);
|
|
|
|
|
|
|
|
// Wrap it in a system settings form.
|
|
|
|
$form = system_settings_form($form);
|
|
|
|
|
|
|
|
// Add a submit function that will rebuild the menu tabs (to run after the
|
|
|
|
// system_settings_form() submit function.
|
|
|
|
$form['#submit'][] = 'farm_quick_configure_form_submit';
|
|
|
|
|
|
|
|
// Return the form.
|
|
|
|
return $form;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Submit function for rebuilding the menu tabs after configuring quick forms.
|
|
|
|
*/
|
|
|
|
function farm_quick_configure_form_submit(&$form, &$form_state) {
|
|
|
|
menu_rebuild();
|
|
|
|
}
|