<?php defined('SYSPATH') or die('No direct access allowed.'); /** * This is class is renders standard values based on DB table row values. * * @package OSB * @subpackage Utilities * @category Helpers * @author Deon George * @copyright (c) 2010 Deon George * @license http://dev.leenooks.net/license.html */ abstract class StaticListModule extends StaticList { protected static $record = array(); /** * Display a static name for a value */ public static function display($id) { // Override our argument list as defined in parent list($table,$key,$skey,$value) = func_get_args(); $db = DB::select($key)->from($table)->where($skey,'=',$value)->execute(); if ($db->count() !== 1) return sprintf('No Value (%s)',$value); else return $db->get($key); } /** * This function is to return the cached value of the current active record * This is so that a follow up call to get an attribute of a value retrieved * can reuse the active record values. * This gets over a limitation where the query to form() to get a default * no longer exists (or is invalid) and you want other attributes of the * remaining active record, which may not be the default record. */ public static function record($table,$attribute,$skey,$value) { if (empty(static::$record[$table])) return static::display($table,$attribute,$skey,$value); else return static::$record[$table][$attribute]; } /** * Renders form input */ public static function form($name,$default='',$addblank=FALSE) { // Override our argument list as defined in parent list($name,$table,$default,$key,$value,$where) = func_get_args(); // @todo - our query type should come from our configuration? $db = DB::select()->from($table); foreach ($where as $k=>$v) { list ($op,$v) = explode(':',$v); $db->where($k,$op,$v); } $db = $db->execute(); // If we only have one record, dont make a select list if ($db->count() == 1) { static::$record[$table] = $db->as_array(); static::$record[$table] = array_shift(static::$record[$table]); return Form::hidden($name,$db->get($key)).$db->get($value); } // Else we return a select list $x = array(); foreach ($db as $record) { $x[$record[$key]] = $record[$value]; // Save our static record, in case we reference this item again. if ($record[$key] == $default) static::$record[$table] = $record; } return Form::select($name,$x,$default); } } ?>