1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-05 06:07:32 +02:00

Restructure use of predefined lists in extended user classes - get rid of global, more general interface which can be used with a DB or similar as well.

This commit is contained in:
SteveD
2012-12-21 22:33:02 +00:00
parent 5768214ca8
commit 918c2bfc34
2 changed files with 1036 additions and 982 deletions

View File

@@ -1,78 +1,134 @@
<?php <?php
/* /*
* e107 website system * e107 website system
* *
* Copyright (C) 2008-2009 e107 Inc (e107.org) * Copyright (C) 2008-2013 e107 Inc (e107.org)
* Released under the terms and conditions of the * Released under the terms and conditions of the
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
* *
* *
* *
* $Source: /cvs_backup/e107_0.8/e107_admin/sql/extended_timezones.php,v $ * $Source: /cvs_backup/e107_0.8/e107_admin/sql/extended_timezones.php,v $
* $Revision$ * $Revision$
* $Date$ * $Date$
* $Author$ * $Author$
*/ */
if (!defined('e107_INIT')) { exit; } if (!defined('e107_INIT')) { exit; }
/* /*
This file is used with the extended user field 'predefined list' type. Its invoked when the value field is 'timezones'. This file is used with the extended user field 'predefined list' type. It is invoked when the value field is 'timezones'.
The variable name must be 'timezones_list', and is an array of possible values, each of which is a value => text pair
The text is displayed in a drop-down; the value is returned. It is an example of an extended user field which access a predetermined list of key-pair values. In this example all the data is loaded
If function timezones_value() exists, it is called to create the displayed text into memory; for other applications the data may be read from a database, possibly with caching.
*/
The objective is to provide a uniform interface to such data.
//FIXME - remove globals.
global $timezones_list; The class name must be the same as the file name - i.e. the list name prefixed with 'extended_'.
if (!is_array($timezones_list))
{ The variable name must be 'timezones_list', and is an array of possible values, each of which is a value => text pair
$timezones_list = array( The text is displayed in a drop-down; the value is returned.
array('-12', "International DateLine West"), If function timezones_value() exists, it is called to create the displayed text
array('-11', "Samoa"), */
array('-10', "Hawaii"),
array( '-9', "Alaska"), class extended_timezones
array( '-8', "Pacific Time (US and Canada)"), {
array( '-7', "Mountain Time (US and Canada)"),
array( '-6', "Central Time (US and Canada), Central America"), private $timezonesList = array(
array( '-5', "Eastern Time (US and Canada)"), '-12' => "International DateLine West",
array( '-4', "Atlantic Time (Canada)"), '-11' => "Samoa",
array( '-3.30', 'Newfoundland'), '-10' => "Hawaii",
array( '-3', "Greenland, Brasilia, Buenos Aires, Georgetown"), '-9' => "Alaska",
array( '-2', "Mid-Atlantic"), '-8' => "Pacific Time (US and Canada)",
array( '-1', "Azores, Cape Verde Islands"), '-7' => "Mountain Time (US and Canada)",
array( '+0', "UK, Ireland, Lisbon"), '-6' => "Central Time (US and Canada), Central America",
array( '+1', "West Central Africa, Western Europe"), '-5' => "Eastern Time (US and Canada)",
array( '+2', "Greece, Egypt, parts of Africa"), '-4' => "Atlantic Time (Canada)",
array( '+3', "Russia, Baghdad, Kuwait, Nairobi"), '-3.30' => 'Newfoundland',
array( '+3.30', 'Tehran, Iran'), '-3' => "Greenland, Brasilia, Buenos Aires, Georgetown",
array( '+4', "Abu Dhabi, Kabul"), '-2' => "Mid-Atlantic",
array( '+4.30', 'Afghanistan'), '-1' => "Azores, Cape Verde Islands",
array( '+5', "Islamabad, Karachi"), '+0' => "UK, Ireland, Lisbon",
array( '+5.30', "Mumbai, Delhi, Calcutta"), '+1' => "West Central Africa, Western Europe",
array( '+5.45', 'Kathmandu'), '+2' => "Greece, Egypt, parts of Africa",
array( '+6', "Astana, Dhaka"), '+3' => "Russia, Baghdad, Kuwait, Nairobi",
array( '+7', "Bangkok, Rangoon"), '+3.30' => 'Tehran, Iran',
array( '+8', "Hong Kong, Singapore, Perth, Beijing"), '+4' => "Abu Dhabi, Kabul",
array( '+9', "Tokyo, Seoul"), '+4.30' => 'Afghanistan',
array( '+9.30', 'Darwin, Adelaide'), '+5' => "Islamabad, Karachi",
array('+10', "Brisbane, Canberra, Sydney, Melbourne"), '+5.30' => "Mumbai, Delhi, Calcutta",
array('+10.30', 'Lord Howe Island'), '+5.45' => 'Kathmandu',
array('+11', "Soloman Islands"), '+6' => "Astana, Dhaka",
array('+11.30', 'Norfolk Island'), '+7' => "Bangkok, Rangoon",
array('+12', "New Zealand, Fiji, Marshall Islands"), '+8' => "Hong Kong, Singapore, Perth, Beijing",
array('+13', "Tonga, Nuku'alofa, Rawaki Islands"), '+9' => "Tokyo, Seoul",
array('+13.45', 'Chatham Island'), '+9.30' => 'Darwin, Adelaide',
array('+14', 'Kiribati: Line Islands') '+10' => "Brisbane, Canberra, Sydney, Melbourne",
); '+10.30' => 'Lord Howe Island',
} '+11' => "Soloman Islands",
'+11.30' => 'Norfolk Island',
if (!function_exists('timezones_value')) '+12' => "New Zealand, Fiji, Marshall Islands",
{ '+13' => "Tonga, Nuku'alofa, Rawaki Islands",
function timezones_value($key, $value) '+13.45' => 'Chatham Island',
{ '+14' => 'Kiribati: Line Islands'
return 'GMT'.$key.' - '.$value; );
}
}
private $isEOF = FALSE; // True if at last element of list
private $bufferValid = FALSE;
/**
* Call before using the 'next' format option, to ensure the array is indexed from the beginning
*/
public function pointerReset()
{
$this->isEOF = (FALSE === reset($this->timezonesList));
$this->bufferValid = TRUE;
}
/**
* Return a formatted timezone value
*
* @param mixed $key - the key value to select
* @param string $formatSpec - defines format of return value
*
* @return mixed (according to $formatSpec). FALSE if no value available
* 'array' - a single-element array; key as passed, and value to match key
* 'next' - as 'array', but ignores the passed $key and moves to next value.
* default - a string usable for display
*/
public function getValue($key, $formatSpec = '')
{
if ($formatSpec == 'next')
{
if (!$this->bufferValid) $this->pointerReset; // Make sure buffer is defined
if ($this->isEOF) return FALSE;
$key = key($this->timezonesList);
$val = current($this->timezonesList);
if (FALSE === $val)
{
$this->isEOF = TRUE;
return FALSE;
}
$this->isEOF = (FALSE === next($this->timezonesList));
return array($key => $val);
}
$exists = isset($this->timezonesList[$key]);
if (!$exists) return FALSE;
$val = $this->timezonesList[$key];
if ($formatSpec == 'array')
{
return array($key => $val);
}
// Default (as per earlier implementations) - can be specified with 'display' format
return 'GMT'.$key.' - '.$val;
}
}
?> ?>

File diff suppressed because it is too large Load Diff