%PDF- %PDF-
Direktori : /home1/lightco1/www/components/com_chronoforms5/chronoforms/libs/ |
Current File : //home1/lightco1/www/components/com_chronoforms5/chronoforms/libs/form.php |
<?php /** * ChronoCMS version 1.0 * Copyright (c) 2012 ChronoCMS.com, All rights reserved. * Author: (ChronoCMS.com Team) * license: Please read LICENSE.txt * Visit http://www.ChronoCMS.com for regular updates and information. **/ namespace GCore\Extensions\Chronoforms\Libs; /* @copyright:ChronoEngine.com @license:GPLv2 */defined('_JEXEC') or die('Restricted access'); defined("GCORE_SITE") or die; class Form { var $data; var $events_actions = array(); var $errors = array(); var $form_output = ''; var $stop = false; var $goto = null; var $_val = false; var $files = array(); var $debug = array(); var $form = array(); var $dna = array(); var $actions_config = array(); function __construct($formname = ''){ if(!empty($formname)){ $this->getForm($formname); }else{ echo 'Form name can NOT be empty!'; } } public static function getInstance($formname = '', $reset = false){ static $instances; if(!isset($instances)){ $instances = array(); } if(empty($instances[trim($formname)]) OR $reset){ $instances[trim($formname)] = new self($formname); return $instances[trim($formname)]; }else{ return $instances[trim($formname)]; } } function getForm($formname){ if(!empty($formname)){ $this->form = \GCore\Admin\Extensions\Chronoforms\Models\Form::getInstance()->find('first', array( 'conditions' => array('title' => $formname, 'published' => 1), )); if(!empty($this->form)){ $this->data = &\GCore\Libs\Request::raw(); $this->dna = $this->form['Form']['extras']['DNA']; $this->actions_config = !empty($this->form['Form']['extras']['actions_config']) ? $this->form['Form']['extras']['actions_config'] : array(); $this->params = new \GCore\Libs\Parameter($this->form['Form']['params']); //$this->get_events_actions(); }else{ echo 'Form not found or is not published'; } }else{ echo 'Form name can NOT be empty!'; } } function process($event_hops = array('load')){ $event_dna = \GCore\Libs\Arr::getVal($this->dna, $event_hops); if(!empty($event_dna)){ //ob_start(); foreach($event_dna as $action => $action_events){ if($this->stop === true){ $this->stop = false; break; } list($action_id, $action_title) = $this->extract_action_info($action); //if(isset($this->actions_config[$action_id])){ if(isset($this->actions_config[$action_id]['enabled']) AND (bool)$this->actions_config[$action_id]['enabled'] === false){ continue; } ob_start(); $this->runAction($action_title, $action_id, $action_events, $event_hops); $this->form_output .= ob_get_clean(); $this->display_errors();//add errors to session just after any action runs //} } //$this->form_output = ob_get_clean(); //$this->display_errors(); $this->display_output(); } //$this->_val(); } function runAction($action_title, $action_id, $action_events = array(), $event_hops = array()){ //translate foreach($this->actions_config[$action_id] as $setting => $value){ if(is_string($value)){ $this->actions_config[$action_id][$setting] = $this->translate($value); } } $classname = '\GCore\Admin\Extensions\Chronoforms\Actions\\'.\GCore\Libs\Str::camilize($action_title)."\\".\GCore\Libs\Str::camilize($action_title); ${$classname} = new $classname(); ${$classname}->execute($this, $action_id); if(!empty(${$classname}->events)){ foreach(${$classname}->events as $event => $status){ if((bool)$status === true){ if(!empty($action_events[$event])){ array_push($event_hops, $action_title.'_'.$action_id, $event); $this->process($event_hops); } } } } } function execute($action_title, $config = array()){ $new_action_id = max(array_keys($this->actions_config)) + 1; $this->actions_config[$new_action_id] = $config; $classname = '\GCore\Admin\Extensions\Chronoforms\Actions\\'.\GCore\Libs\Str::camilize($action_title)."\\".\GCore\Libs\Str::camilize($action_title); ${$classname} = new $classname(); ${$classname}->execute($this, $new_action_id); } function extract_action_info($action){ $pcs = explode('_', $action); $action_id = $pcs[count($pcs) - 1]; unset($pcs[count($pcs) - 1]); $action_title = implode('_', $pcs); return array($action_id, $action_title); } function render_action($action, $action_id = 0){ $classname = '\GCore\Admin\Extensions\Chronoforms\Actions\\'.\GCore\Libs\Str::camilize($action).'\\'.\GCore\Libs\Str::camilize($action); if(method_exists($classname, 'render')){ ${$classname} = new $classname(); ${$classname}->render($this, $action_id); } } function display_output(){ echo $this->translate($this->form_output); $this->form_output = ''; } function display_errors(){ if(!empty($this->errors)){ $session = \GCore\Libs\Base::getSession(); foreach($this->errors as $error){ $session->setFlash('validation', $error); } } $this->errors = array(); //echo \GCore\Libs\AppJ::getSystemMessages(); } function translate($data = ''){ $_f = function($e){ $cs = explode('=', $e, 2); return array_map('trim', $cs); }; $site_lang = \GCore\Libs\Str::camilize(str_replace('-', '_', strtolower(\GCore\Libs\Base::getConfig('site_language')))); if(!empty($this->form['Form']['extras']['locales'])){ foreach($this->form['Form']['extras']['locales'] as $l => $lang_data){ $tag = $lang_data['lang_tag']; $tag_cap = \GCore\Libs\Str::camilize($tag); if($tag_cap == $site_lang){ $lines = explode("\n", $lang_data['strings']); $strings = array_map($_f, $lines); $texts = \GCore\Libs\Arr::getVal($strings, array('[n]', 0)); if(!empty($lang_data['strict'])){ $texts = array_map(function($text){return '['.$text.']';}, $texts); } $locales = \GCore\Libs\Arr::getVal($strings, array('[n]', 1)); $data = str_replace($texts, $locales, $data); } } } return $data; } function _val(){ if(true AND !$this->_val){ $params = new \GCore\Libs\Parameter($this->_settings()); if((bool)$params->get('validated', 0) !== true){ $this->runAction('credits'); } $this->_val = true; } } function data($key, $default = null){ //check POST $value = \GCore\Libs\Arr::getVal($this->data, explode('.', $key), null); if(!is_null($value)){ return $value; } //return default return $default; } public static function _settings(){ static $settings; if(!empty($settings)){ return $settings; } $settings_model = new \GCore\Admin\Models\Extension(); $settings_data = $settings_model->find('first', array('conditions' => array('name' => 'chronoforms'))); if(!empty($settings_data['Extension']['settings'])){ $settings = $settings_data['Extension']['settings']; return $settings; }else{ return array(); } } }