*/ WBClass::load( 'patTemplate_Module' , 'patTemplate_Function' , 'WBConfig'); /** * patTemplate-function inject configuration value * * Override Wombat's config modifier in order to select data from customer * * @version 0.5.2 * @package ValueAce * @subpackage patTemplate */ class patTemplate_Function_Config extends patTemplate_Function { /** * Name of the function * @access protected * @var string */ public $_name = 'config'; /** * tell that this function must not be executed during runtime * @var string */ public $_type = PATTEMPLATE_FUNCTION_RUNTIME; /** * Configuration Object * @var WBConfig */ private static $CONFIG; /** * Mandator Object * @var WBMandator */ private static $MANDATOR; /** * Customer Access * @var ValueAce_Customer */ private static $CUSTOMER; /** * Configuration Object * @var WBConfig */ private $config; /** * Customer Access * @var ValueAce_Customer */ private $customer; /** * Dictionary URL * @var WBDictionary_URL */ private $dict; public static function setMandator($mandator) { self::$MANDATOR = $mandator; } /** * Constructor * */ public function __construct() { if (empty(self::$CONFIG)) { self::$CONFIG = WBClass::create('WBConfig'); self::$CONFIG->load('info'); $iCustomer = self::$CONFIG->get('general/customer', ''); if (!empty($iCustomer) && WBClass::load('ValueAce_Customer')) { self::$CUSTOMER = WBClass::create('ValueAce_Customer'); } } $this->config = self::$CONFIG; $this->customer = self::$CUSTOMER; } /** * Call the function * * @param array $params parameters of the function (= attributes of the tag) * @param string $content inside tag * @return string content to insert into the template */ public function call($params, $content) { if (empty($params['mode'])) { // html or tex $params['mode'] = 'html'; } if (empty($params['config'])) { $params['config'] = 'info'; } if (empty($params['default'])) { $params['default'] = ''; } if (empty($params['addvar'])) { $params['addvar'] = ''; } if (!isset($params['output'])) { $params['output'] = 1; } $this->config->load($params['config']); if ('info' != $params['config'] || empty($this->customer)) { $value = $this->call4Config($params, $content); } else { $value = $this->call4Customer($params, $content); } // add template var if (!empty($params['addvar'])) { $this->tmplRef->addGlobalVar($params['addvar'], $value); } // avoid output if (1 > $params['output']) { return ''; } return $value; } /** * Call 4 Customer * * @param array $params parameters of the function (= attributes of the tag) * @param string $content inside tag * @return string content to insert into the template */ private function call4Customer($params, $content) { // no customer if (empty(self::$CUSTOMER)) { return $this->call4Config($params, $content); } $iCustomer = $this->config->get('general/customer', ''); if (empty($iCustomer)) { return $this->call4Config($params, $content); } if (empty(self::$MANDATOR)) { self::$MANDATOR = WBClass::create('WBMandator'); self::$MANDATOR->setId(WBMandator::MASTER_ID); } if (self::$MANDATOR->isEnabled()) { $iCustomer = self::$MANDATOR->getId() . '-' . $iCustomer; } $data = $this->customer->get($iCustomer); if (empty($data)) { return $this->call4Config($params, $content); } /*
+49 123 123456 timfisch@Kingfisher.de */ $value = ''; switch ($content) { case 'general/name': $value = $data['customer']; break; case 'general/shortname': $value = $data['shortname']; break; case 'general/tagline': $value = $data['tagline']; break; case 'general/ceo': $value = $data['ceo']; break; case 'general/address/label': $value = $data['billaddresslabel']; /** @var WBDictionary_Country */ $dict = WBClass::create('WBDictionary_Country'); $dict->load($data['country']); $value .= "\n" . $dict->getWord(); break; case 'general/address/street': $value = $data['billaddresslabel']; $value = explode("\n", $value); array_pop($value); $value = array_pop($value); break; case 'general/address/city': $value = $data['billaddresslabel']; $value = explode("\n", $value); $value = array_pop($value); if(preg_match('/.*\d.*\\s+(.*)$/', $value, $match)) { $value = $match[1]; } break; case 'general/address/zip': $value = $data['billaddresslabel']; $value = explode("\n", $value); $value = array_pop($value); if(preg_match('/(.*\d.*)\\s+/', $value, $match)) { $value = $match[1]; } break; case 'general/address/country': /** @var WBDictionary_Country */ $dict = WBClass::create('WBDictionary_Country'); $dict->load($data['country']); $value = $dict->getWord(); break; case 'general/contact/forename': $value = $data['contactforename']; break; case 'general/contact/surname': $value = $data['contactsurname']; break; case 'general/contact/phone': $value = $data['contactphone']; break; case 'general/contact/email': $value = $this->getFromUrlId($data['contactemailurlid']); break; case 'general/legal/register/no'; $value = $data['register']; break; case 'general/legal/register/place'; $value = $data['registerplace']; break; case 'general/legal/ustid'; case 'general/legal/taxvatno'; $value = $data['taxvatno']; break; case 'general/legal/stnr'; case 'general/legal/taxno'; $value = $data['taxno']; break; case 'general/bank/name': $value = $data['bankname']; break; case 'general/bank/bic': $value = $data['bankbic']; break; case 'general/bank/iban': $value = $data['bankiban']; break; case 'general/www': $value = $data['urlid']; $value = $this->getFromUrlId($data['urlid'], '[[SERVER]][[SELF]]'); $value = explode('://', $value); array_shift($value); $value = implode('://', $value); $value = trim($value, '/'); break; case 'general/logo': $value = $data['vfsfid']; break; case 'general/colour/em': $value = ltrim($data['colourem'], '#'); break; case 'general/colour/mute': $value = ltrim($data['colourmute'], '#'); break; default: break; } $value = trim($value); if (empty($value)) { return $this->call4Config($params, $content); } $this->quote($value, $params); return $this->finishValue($value, $params); } /** * Call 4 Config * * @param array $params parameters of the function (= attributes of the tag) * @param string $content inside tag * @return string content to insert into the template */ private function call4Config($params, $content) { $value = $this->config->get($content, $params['default']); switch ($content) { case 'general/www': $value = '[[SERVER]][[SELF]]'; break; case 'general/colour/em': $value = ltrim($value, '#'); if (empty($value)) { $value = '000000'; } break; case 'general/colour/mute': $value = ltrim($value, '#'); if (empty($value)) { $value = '707070'; } break; default: break; } $this->quote($value, $params); return $this->finishValue($value, $params); } private function finishValue($value, $params) { if (empty($value)) { return ''; } if (is_scalar($value)) { $value = array_map('trim', explode("\n", $value)); } if (empty($params['format'])) { $params['format'] = '%s'; } if (empty($params['glue'])) { $params['glue'] = "
\n"; } else { // make newline available $sear = array(); $sear[] = '\\\\newline'; $sear[] = '\\\\n'; $sear[] = '\\\\'; $repl = array(); $repl[] = '\\newline'; $repl[] = "\n"; $repl[] = '\\'; $params['glue'] = str_replace($sear, $repl, $params['glue']); } $out = array(); foreach ($value as $k => $v) { $out[] = sprintf($params['format'], $v); } return implode($params['glue'], $out); } private function quote(&$value, $params = array()) { // don't do a thing if not in TeX mode if ('tex' != strtolower($params['mode'])) { return; } // don't force string replace on numbers if (is_numeric($value)) { return; } // string replace $replace = array( '"' => "''", "\r\n" => "\n", '%' => '\\%', ' ' => '~', '&' => '\\&', '_' => '\\_', '€' => '\\EUR', '°' => '{\\textdegree}', '®' => '®', '<' => '<', '>' => '>', '≥' => '$\ge$', '≤' => '$\le$', '­' => '\\-' ); $sear = array_keys($replace); $repl = array_values($replace); $value = str_replace($sear, $repl, $value); } private function getFromUrlId($id, $default = '') { $id = trim($id); if (empty($id)) { return $default; } if (empty($this->dict)) { $this->dict = WBClass::create('WBDictionary_URL'); } $this->dict->load($id); return $this->dict->getWord(); } }