<?php
/**
* @author Prakash Khanchandani
* @copyright 2013
* @program mnuItm.php
* @description menu Items table maintenance
* @specialities - enum values picked up from schema and validated
* - form labels customised through properties
*/
session_start();
require_once ("classes.php");
function createTableObject()
{
$obj = new mnuItmTbl;
if ($obj->getListAndColumns() === false)
return false;
else
return $obj;
}
class mnuItmTbl extends mstrTable
{
function getListAndColumns()
{
$this->tableName = 'menuItem';
$this->orderByClause = 'item';
$result = parent::getListAndColumns('item', 'isParent', 'URL');
return $result;
}
protected function validateInput()
{
/* check internal consistency. If the item is NOT a parent menu record, it should have
a valid executable. */
$isParent = $this->getColDefsVal('isParent');
$URL = $this->getColDefsVal('URL');
if ($isParent === false or $URL === false) {
addToErrorMsg('could not get value of isParent/URL');
return false;
}
if ($isParent == 'N') {
if ($URL == '' or strpos(strtolower($URL), '.php') === false) {
addToErrorMsg('invalid value for URL considering that isParent=N');
return false;
}
}
return true;
}
protected function defaultRecordAlreadyExists()
{
/* override the func in mstrTable.php. The parent func cannot work in this case
since there is no index col with which the query can be formed; remember that
the index column is an auto_increment one and therefore not really a part of
the record. Check the item description and the URL independently. */
$item = $this->getColDefsVal('item');
$URL = $this->getColDefsVal('URL');
if ($item === false or $URL === false) {
addToErrorMsg('could not get value of item/URL');
return false;
}
$script = new mstrScripts;
$result = $script->readMasterRecord('menuItem', "lower(item)=lower('$item')",
"limit 1");
if ($result === false) {
addToErrorMsg($script->getErrorMsg());
return false;
} else {
if (count($result) > 0) {
return 1;
} else {
/*
if the item is a parent, its URL need not be given. Check if a record
with the same URL exists only if the URL is non blank. The check that
URL cannot be blank for non-parents will be performed elsewhere in the
flow. The check that item itself cannot be blank will also be
performed elsewhere. */
if (trim($URL) <> '') {
$result = $script->readMasterRecord('menuItem', "lower(url)=lower('$URL')",
"limit 1");
if ($result === false) {
addToErrorMsg($script->getErrorMsg());
return false;
} else {
if (count($result) > 0) {
return 1;
}
}
}
}
}
return - 1; // for record not already present
}
function canDelete()
{
/**
* THERE IS NO TABLE IN THIS DEMO SET WHICH WILL ALLOW US TO DETERMINE WHETHER A
* RECORD CAN BE DELETED. THEREFORE THIS FUNC ARBITRARILY RETURNS A YES. THE SAME
* EFFECT WOULD BE ACHIEVED IF THIS FUNCTION WAS LEFT OUT ALTOGETHER.
*/
return "yes";
}
}
if (!isset($_REQUEST['actn'])) {
$obj = createTableObject();
} else {
/* if the user has taken some action, handle it. */
$obj = handleRequestOption();
}
$form = new mstrFH($obj, 'b');
$form->setDemoNotes(mnuItmNotes());
$form->displayForm();
?>
|