class ChecklistapiChecklist in Checklist API 7
Defines the checklist class.
Hierarchy
- class \ChecklistapiChecklist
Expanded class hierarchy of ChecklistapiChecklist
File
- lib/
Drupal/ checklistapi/ ChecklistapiChecklist.php, line 11 - Class for Checklist API checklists.
View source
class ChecklistapiChecklist {
/**
* The checklist ID.
*
* @var string
*/
public $id;
/**
* The checklist title.
*
* @var string
*/
public $title;
/**
* The menu item description.
*
* @var string
*/
public $description;
/**
* The checklist path.
*
* @var string
*/
public $path;
/**
* The checklist help.
*
* @var string
*/
public $help;
/**
* The name of the menu to put the menu item in.
*
* @var string
*/
public $menuName;
/**
* The checklist weight.
*
* @var float
*/
public $weight;
/**
* The number of list items in the checklist.
*
* @var int
*/
public $numberOfItems = 0;
/**
* The checklist groups and items.
*
* @var array
*/
public $items = array();
/**
* The saved progress data.
*
* @var array
*/
public $savedProgress;
/**
* Constructs a ChecklistapiChecklist object.
*
* @param array $definition
* A checklist definition, as returned by checklistapi_get_checklist_info().
*/
public function __construct(array $definition) {
foreach (element_children($definition) as $group_key) {
$this->numberOfItems += count(element_children($definition[$group_key]));
$this->items[$group_key] = $definition[$group_key];
unset($definition[$group_key]);
}
foreach ($definition as $property_key => $value) {
$property_name = checklistapi_strtolowercamel(drupal_substr($property_key, 1));
$this->{$property_name} = $value;
}
$this->savedProgress = variable_get($this
->getSavedProgressVariableName(), array());
}
/**
* Gets the total number of completed items.
*
* @return int
* The number of completed items.
*/
public function getNumberCompleted() {
return !empty($this->savedProgress['#completed_items']) ? $this->savedProgress['#completed_items'] : 0;
}
/**
* Gets the total number of items.
*
* @return int
* The number of items.
*/
public function getNumberOfItems() {
return $this->numberOfItems;
}
/**
* Gets the name of the last user to update the checklist.
*
* @return string
* The themed name of the last user to update the checklist, or 'n/a' if
* there is no record of such a user.
*/
public function getLastUpdatedUser() {
if (isset($this->savedProgress['#changed_by'])) {
$last_updated_user = user_load($this->savedProgress['#changed_by']);
return theme('username', array(
'account' => $last_updated_user,
));
}
else {
return t('n/a');
}
}
/**
* Gets the last updated date.
*
* @return string
* The last updated date formatted with format_date(), or 'n/a' if there is
* no saved progress.
*/
public function getLastUpdatedDate() {
return !empty($this->savedProgress['#changed']) ? format_date($this->savedProgress['#changed']) : t('n/a');
}
/**
* Gets the percentage of items complete.
*
* @return float
* The percent complete.
*/
public function getPercentComplete() {
if ($this
->getNumberOfItems() == 0) {
return 100;
}
return $this
->getNumberCompleted() / $this
->getNumberOfItems() * 100;
}
/**
* Clears the saved progress for the checklist.
*
* Deletes the Drupal variable containing the checklist's saved progress.
*/
public function clearSavedProgress() {
variable_del($this
->getSavedProgressVariableName());
drupal_set_message(t('%title saved progress has been cleared.', array(
'%title' => $this->title,
)));
}
/**
* Gets the name of the Drupal variable for the checklist's saved progress.
*
* @return string
* The Drupal variable name.
*/
public function getSavedProgressVariableName() {
return "checklistapi_checklist_{$this->id}";
}
/**
* Determines whether the checklist has saved progress.
*
* @return bool
* TRUE if the checklist has saved progress, or FALSE if it doesn't.
*/
public function hasSavedProgress() {
return (bool) variable_get($this
->getSavedProgressVariableName(), FALSE);
}
/**
* Saves checklist progress to a Drupal variable.
*
* @param array $values
* A multidimensional array of form state checklist values.
*
* @see checklistapi_checklist_form_submit()
*/
public function saveProgress(array $values) {
global $user;
$time = time();
$num_changed_items = 0;
$progress = array(
'#changed' => $time,
'#changed_by' => $user->uid,
'#completed_items' => 0,
);
// Loop through groups.
foreach ($values as $group_key => $group) {
if (!is_array($group)) {
continue;
}
// Loop through items.
foreach ($group as $item_key => $item) {
$definition = checklistapi_get_checklist_info($this->id);
if (!in_array($item_key, array_keys($definition[$group_key]))) {
// This item wasn't in the checklist definition. Don't include it with
// saved progress.
continue;
}
$old_item = !empty($this->savedProgress[$item_key]) ? $this->savedProgress[$item_key] : 0;
if ($item == 1) {
// Item is checked.
$progress['#completed_items']++;
if ($old_item) {
// Item was previously checked. Use saved value.
$new_item = $old_item;
}
else {
// Item is newly checked. Set new value.
$new_item = array(
'#completed' => $time,
'#uid' => $user->uid,
);
$num_changed_items++;
}
}
else {
// Item is unchecked.
$new_item = 0;
if ($old_item) {
// Item was previously checked.
$num_changed_items++;
}
}
$progress[$item_key] = $new_item;
}
}
// Sort array elements alphabetically so changes to the order of items in
// checklist definitions over time don't affect the order of elements in the
// saved progress variable. This simplifies use with Strongarm.
ksort($progress);
variable_set($this
->getSavedProgressVariableName(), $progress);
drupal_set_message(format_plural($num_changed_items, '%title progress has been saved. 1 item changed.', '%title progress has been saved. @count items changed.', array(
'%title' => $this->title,
)));
}
/**
* Determines whether the current user has access to the checklist.
*
* @param string $operation
* The operation to test access for. Possible values are "view", "edit", and
* "any". Defaults to "any".
*
* @return bool
* Returns TRUE if the user has access, or FALSE if not.
*/
public function userHasAccess($operation = 'any') {
return checklistapi_checklist_access($this->id, $operation);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ChecklistapiChecklist:: |
public | property | The menu item description. | |
ChecklistapiChecklist:: |
public | property | The checklist help. | |
ChecklistapiChecklist:: |
public | property | The checklist ID. | |
ChecklistapiChecklist:: |
public | property | The checklist groups and items. | |
ChecklistapiChecklist:: |
public | property | The name of the menu to put the menu item in. | |
ChecklistapiChecklist:: |
public | property | The number of list items in the checklist. | |
ChecklistapiChecklist:: |
public | property | The checklist path. | |
ChecklistapiChecklist:: |
public | property | The saved progress data. | |
ChecklistapiChecklist:: |
public | property | The checklist title. | |
ChecklistapiChecklist:: |
public | property | The checklist weight. | |
ChecklistapiChecklist:: |
public | function | Clears the saved progress for the checklist. | |
ChecklistapiChecklist:: |
public | function | Gets the last updated date. | |
ChecklistapiChecklist:: |
public | function | Gets the name of the last user to update the checklist. | |
ChecklistapiChecklist:: |
public | function | Gets the total number of completed items. | |
ChecklistapiChecklist:: |
public | function | Gets the total number of items. | |
ChecklistapiChecklist:: |
public | function | Gets the percentage of items complete. | |
ChecklistapiChecklist:: |
public | function | Gets the name of the Drupal variable for the checklist's saved progress. | |
ChecklistapiChecklist:: |
public | function | Determines whether the checklist has saved progress. | |
ChecklistapiChecklist:: |
public | function | Saves checklist progress to a Drupal variable. | |
ChecklistapiChecklist:: |
public | function | Determines whether the current user has access to the checklist. | |
ChecklistapiChecklist:: |
public | function | Constructs a ChecklistapiChecklist object. |