freenetis-github/application/libraries/Variable_Key_Generator.php @ a82b9445
31ca0a32 | Michal Kliment | <?php defined('SYSPATH') or die('No direct script access.');
|
|
/*
|
|||
* This file is part of open source system FreenetIS
|
|||
* and it is released under GPLv3 licence.
|
|||
*
|
|||
* More info about licence can be found:
|
|||
* http://www.gnu.org/licenses/gpl-3.0.html
|
|||
*
|
|||
* More info about project can be found:
|
|||
* http://www.freenetis.org/
|
|||
*
|
|||
*/
|
|||
/**
|
|||
* Abstract class for variable key drivers.
|
|||
*
|
|||
* @author Ondrej Fibich
|
|||
* @see Bank_Statement_File_Importer
|
|||
*/
|
|||
abstract class Variable_Key_Generator
|
|||
{
|
|||
/**
|
|||
* Dir with classes
|
|||
*/
|
|||
const DIR = 'variable_key_generators';
|
|||
/**
|
|||
* Array of availables drivers for factory method.
|
|||
* Keys:
|
|||
*
|
|||
* id ID used in database
|
|||
* name Name
|
|||
* class Class name in Varaible keys folder
|
|||
*
|
|||
* @var array
|
|||
*/
|
|||
private static $DRIVERS = array
|
|||
(
|
|||
'pvfree' => array
|
|||
(
|
|||
'id' => 'pvfree',
|
|||
'name' => 'Pvfree variable key generator',
|
|||
'class' => 'Pvfree_Variable_Key_Generator',
|
|||
),
|
|||
'checksum' => array
|
|||
(
|
|||
'id' => 'checksum',
|
|||
'name' => 'Checksum variable key generator',
|
|||
'class' => 'Checksum_Variable_Key_Generator',
|
|||
),
|
|||
2a205303 | Michal Kliment | 'member_id' => array
|
|
(
|
|||
'id' => 'member_id',
|
|||
'name' => 'Member ID variable key generator',
|
|||
'class' => 'Member_Id_Variable_Key_Generator',
|
|||
),
|
|||
31ca0a32 | Michal Kliment | );
|
|
/**
|
|||
* Factory for Variable key drivers
|
|||
*
|
|||
* @param mixed $driver String index of driver or integer ID of driver or NUL
|
|||
* if current should be selected.
|
|||
* @return Variable_Key_Generator Generator instance or NULL
|
|||
* if driver name or ID is incorect.
|
|||
*/
|
|||
public static function factory($driver = NULL)
|
|||
{
|
|||
if ($driver === NULL)
|
|||
{
|
|||
$selected_driver = self::get_active_driver();
|
|||
}
|
|||
else
|
|||
{
|
|||
$selected_driver = self::_get_driver_index($driver);
|
|||
}
|
|||
if ($selected_driver)
|
|||
{
|
|||
$driver = self::$DRIVERS[$selected_driver];
|
|||
$class_name = $driver['class'];
|
|||
$class_path = dirname(__FILE__) . '/' . self::DIR
|
|||
. '/' . $class_name . '.php';
|
|||
require_once $class_path;
|
|||
return new $class_name;
|
|||
}
|
|||
return NULL;
|
|||
}
|
|||
/**
|
|||
* Gets index of driver
|
|||
*
|
|||
* @param mixed $driver String index of driver or integer ID of driver.
|
|||
* @return mixed String key on success FALSE on error.
|
|||
*/
|
|||
private static function _get_driver_index($driver)
|
|||
{
|
|||
if (array_key_exists($driver, self::$DRIVERS))
|
|||
{
|
|||
return $driver;
|
|||
}
|
|||
else
|
|||
{
|
|||
foreach (self::$DRIVERS as $key => $available_driver)
|
|||
{
|
|||
if ($available_driver['id'] == $driver)
|
|||
{
|
|||
return $key;
|
|||
}
|
|||
}
|
|||
}
|
|||
return FALSE;
|
|||
}
|
|||
/**
|
|||
* Gets name of driver
|
|||
*
|
|||
* @param integer $driver String index of driver or integer ID of driver.
|
|||
* @return string
|
|||
*/
|
|||
public static function get_driver_name($driver)
|
|||
{
|
|||
$selected_driver = self::_get_driver_index($driver);
|
|||
if ($selected_driver)
|
|||
{
|
|||
$d = self::$DRIVERS[$selected_driver];
|
|||
return __($d['name']);
|
|||
}
|
|||
return NULL;
|
|||
}
|
|||
/**
|
|||
* Gets drivers array
|
|||
*
|
|||
* @return array
|
|||
*/
|
|||
public static function get_drivers()
|
|||
{
|
|||
return self::$DRIVERS;
|
|||
}
|
|||
/**
|
|||
* Gets drivers array for dropdown
|
|||
*
|
|||
* @return array
|
|||
*/
|
|||
public static function get_drivers_for_dropdown()
|
|||
{
|
|||
$options = array();
|
|||
foreach (self::$DRIVERS as $d)
|
|||
{
|
|||
$options[$d['id']] = __($d['name']);
|
|||
}
|
|||
return $options;
|
|||
}
|
|||
/**
|
|||
* Gets list of active drivers for selectboxes.
|
|||
* Key is id of driver and value is name.
|
|||
*
|
|||
* @return string ID of driver
|
|||
*/
|
|||
public static function get_active_driver()
|
|||
{
|
|||
return Settings::get('variable_key_generator_id');
|
|||
}
|
|||
/**
|
|||
* Generated variable key from given identificator.
|
|||
*
|
|||
* @param mixed $identificator Indentificator for generate from
|
|||
* @return integer Variable key
|
|||
*/
|
|||
abstract public function generate($identificator);
|
|||
/**
|
|||
* Is generator capable of error checking.
|
|||
*
|
|||
* @return boolean
|
|||
*/
|
|||
abstract public function errorCheckAvailable();
|
|||
/**
|
|||
* If errorCheckAvailable() is TRUE that this method may be used for error
|
|||
* detection. It is only capable of detection, no correction is available here.
|
|||
*
|
|||
* Override this method in a subclass in order to implement error detection
|
|||
* for your generator.
|
|||
*
|
|||
* @param string $var_key Variable key
|
|||
* @return boolean TRUE is the given variable key is without errors or FALSE otherwise
|
|||
*/
|
|||
public function errorCheck($var_key)
|
|||
{
|
|||
return FALSE;
|
|||
}
|
|||
/**
|
|||
* Is generator capable of error correction.
|
|||
*
|
|||
* @return boolean
|
|||
*/
|
|||
abstract public function errorCorrectionAvailable();
|
|||
/**
|
|||
* If errorCorrectionAvaiable() is TRUE than this method may be used for error
|
|||
* correction of the variable symbol.
|
|||
*
|
|||
* Override this method in a subclass in order to implement error correction
|
|||
* for your generator.
|
|||
*
|
|||
* @param string $var_key Variable key
|
|||
* @return array Contains two items
|
|||
* boolean status TRUE if correction was successful
|
|||
* FALSE if correction was unsuccessful
|
|||
* string corrected_variable_key Corrected variable symbol
|
|||
*/
|
|||
public function errorCorrection($var_key)
|
|||
{
|
|||
return array
|
|||
(
|
|||
'status' => FALSE,
|
|||
'corrected_variable_key' => NULL
|
|||
);
|
|||
}
|
|||
}
|