Add a simple module for "quick forms" in farmOS, with an API hook that other modules can use to add forms.

This commit is contained in:
Michael Stenta 2018-03-02 12:16:15 -05:00
parent 4835354b5d
commit 595258eef0
3 changed files with 124 additions and 0 deletions

View File

@ -0,0 +1,39 @@
<?php
/**
* @file
* Hooks provided by farm_quick.
*
* This file contains no working PHP code; it exists to provide additional
* documentation for doxygen as well as to document hooks in the standard
* Drupal manner.
*/
/**
* @defgroup farm_quick Farm quick module integrations.
*
* Module integrations with the farm_quick module.
*/
/**
* @defgroup farm_quick_hooks Farm quick's hooks
* @{
* Hooks that can be implemented by other modules in order to extend farm_quick.
*/
/**
* Define quick forms provided by this module
*/
function hook_farm_quick_forms() {
return array(
'myform' => array(
'tab' => t('My form'),
'permission' => 'create farm_harvest log entities',
'form' => 'my_quick_form',
),
);
}
/**
* @}
*/

View File

@ -0,0 +1,5 @@
name = Farm Quick Forms
description = Provides a framework for quick forms in farmOS.
core = 7.x
package = farmOS (beta)
dependencies[] = farm_dashboard

View File

@ -0,0 +1,80 @@
<?php
/**
* @file
* Code for the Farm Quick module.
*/
/**
* Load information about all quick forms provided by other modules.
*/
function farm_quick_forms() {
// Ask modules for quick forms.
$forms = module_invoke_all('farm_quick_forms');
// 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) {
// Sort alphabetically by the 'tab' property.
return strcasecmp($a['tab'], $b['tab']);
}
/**
* 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;
}
// Add a menu item for each form.
reset($forms);
$first = key($forms);
foreach ($forms as $name => $form) {
// Add a "Quick forms" default tab for the first item.
if ($name == $first) {
$items['farm/quick'] = array(
'title' => 'Quick forms',
'page callback' => 'drupal_get_form',
'page arguments' => array($form['form']),
'access arguments' => array($form['permission']),
'type' => MENU_LOCAL_TASK,
);
$items['farm/quick/' . $name] = array(
'title' => $form['tab'],
'type' => MENU_DEFAULT_LOCAL_TASK,
);
continue;
}
// Add each remaining form as another tab.
$items['farm/quick/' . $name] = array(
'title' => $form['tab'],
'page callback' => 'drupal_get_form',
'page arguments' => array($form['form']),
'access arguments' => array($form['permission']),
'type' => MENU_LOCAL_TASK,
);
}
// Return menu items.
return $items;
}