AAAA';
print_r($array);
echo '';
}
}
class CFChronoForm {
var $form_details;
var $form_name;
var $form_params;
var $form_actions = array();
var $form_actions_data = array();
var $form_output = '';
var $main_event_actions = array();
var $validation_errors = array();
var $data = array();
var $debug = array();
var $files = array();
var $stop = false;
var $loaded_validation = false;
var $admin = false;
var $session_token = null;
var $extra_content = '';
var $last_action_result = null;
var $disguised = false;
var $extension_name = 'ChronoForms';
var $option = 'com_chronoforms';
var $connection_name = null;
function __construct($formname = ''){
if(!empty($formname)){
if((strpos($formname, "_virtual_form_") !== false) && (strpos($formname, "_virtual_form_") == 0)){
$this->getVForm($formname);
}else{
$this->getForm($this->_cleanName($formname));
}
}else{
die('Form name can NOT be empty!');
}
}
public static function &getInstance($formname = '', $reset = false){
static $instances;
$mainframe = JFactory::getApplication();
if(!isset($instances)){
$instances = array();
}
if(empty($instances[trim($formname)]) || $reset){
$instances[trim($formname)] = new CFChronoForm($formname);
return $instances[trim($formname)];
}else{
return $instances[trim($formname)];
}
}
function getForm($formname){
$mainframe = JFactory::getApplication();
$database = JFactory::getDBO();
$query = "SELECT * FROM `#__chronoforms` WHERE `name` = '".$formname."' AND `published` = '1' ORDER BY `id` DESC";
$database->setQuery($query);
$form = $database->loadObject();
//set data array
$this->_set_form_data();
if(!empty($form)){
$this->form_details = $form;
$this->form_name = $form->name;
//load params
$this->form_params = new JParameter($form->params);
//load actions
$query = "SELECT * FROM `#__chronoform_actions` WHERE `chronoform_id` = '".$form->id."' ORDER BY `order`";
$database->setQuery($query);
$this->form_actions = $database->loadObjectList();
return true;
}else{
$this->form_details = new stdClass();
$this->form_name = '';//$formname;
$this->form_params = new JParameter('');
return false;
}
}
function getVForm($fid){
$this->form_details = new stdClass();
$this->form_name = $fid;
$this->form_params = new JParameter('');
$this->_set_form_data();
return $this;
}
function _set_form_data(){
//set the form data
if(isset($_GET) && !empty($_GET)){
$this->data = array_merge($this->data, JRequest::get('get', JREQUEST_ALLOWRAW));
}
if(isset($_POST) && !empty($_POST)){
$this->data = array_merge($this->data, JRequest::get('post', JREQUEST_ALLOWRAW));
}
}
//get action data
function get($action_id, $param_name){
if(isset($this->form_actions_data['cfaction_'.$action_id])){
$v = $this->form_actions_data['cfaction_'.$action_id];
if(isset($v->$param_name)){
//we need to get the data of a main element
return $v->$param_name;
}else{
//we need to get a param value
$params = new JParameter($v->params);
return $params->get($param_name, '');
}
}else{
}
}
//set action data
function set($action_id, $param_name, $param_value){
if(isset($this->form_actions_data) && !empty($this->form_actions_data)){
if(isset($this->form_actions_data['cfaction_'.$action_id])){
$v = $this->form_actions_data['cfaction_'.$action_id];
if(isset($v->$param_name)){
//we need to get the data of a main element
$v->$param_name = $param_value;
return true;
}else{
//we need to get a param value
$params = new JParameter($v->params);
$params->set($param_name, $param_value);
$v->params = $params->toString();
return true;
}
}else{
return false;
}
}else if(isset($this->form_actions) && !empty($this->form_actions)){
$action_id_pcs = explode("_", $action_id);
$id = $action_id_pcs[count($action_id_pcs) - 1];
foreach($this->form_actions as $v){
if($v->order == $id){
if(isset($v->$param_name)){
//we need to get the data of a main element
$v->$param_name = $param_value;
return true;
}else{
//we need to get a param value
$params = new JParameter($v->params);
$params->set($param_name, $param_value);
$v->params = $params->toString();
return true;
}
}
}
return false;
}else{
return false;
}
}
function checkEvent($event){
if(isset($this->form_details->events_actions_map)){
$events = unserialize(base64_decode($this->form_details->events_actions_map));
if(!empty($event) && is_array($events['events']) && isset($events['events'][$event])){
return true;
}else{
return false;
}
}
}
function injectAction($actions_list_path, $action_object, $position = 'last'){
//inject the action in the correct event in the events map
$events = unserialize(base64_decode($this->form_details->events_actions_map));
$actions_list = $this->get_array_value($events, explode('.', $actions_list_path));
if($position === 'last'){
$actions_list['cfaction_'.$action_object->type.'_'.$action_object->order] = '';
}else if($position == 'first'){
}
$events = $this->set_array_value($events, explode('.', $actions_list_path), $actions_list);
$this->form_details->events_actions_map = base64_encode(serialize($events));
$this->form_actions[] = $action_object;
}
function createAction($action_name, $params = array()){
$new_action_details = new stdClass();
$new_action_details->type = $action_name;
$new_action_details->enabled = 1;
if(!empty($params['enabled'])){
$new_action_details->enabled = (int)$params['enabled'];
}
$new_action_details->content1 = '';
if(!empty($params['content1'])){
$new_action_details->content1 = $params['content1'];
}
$new_action_Params = new JParameter('');
foreach($params as $k => $v){
$new_action_Params->set($k, $v);
}
$new_action_details->params = $new_action_Params->toString();
return $new_action_details;
}
function process($event = null){
$return = true;
//check app exclusive
if(((bool)$this->form_params->get('app_exclusive', 0) === true) && !empty($this->form_details->app) && ($this->extension_name == 'ChronoForms')){
return false;
}
//process the event
if(is_string($event) && !empty($event) && !empty($this->form_name) && isset($this->form_details->events_actions_map)){
//process the event
$events = unserialize(base64_decode($this->form_details->events_actions_map));
//print_r2($events);
$actionsArray = array();
if(isset($this->form_actions) && !empty($this->form_actions)){
foreach($this->form_actions as $action_index => $action_data){
$actionsArray['cfaction_'.$action_data->type.'_'.$action_data->order] = $action_data;
}
}
$this->form_actions_data = $actionsArray;
//print_r2($this->form_actions_data);
$return = $this->_processEvents($event, $events['events']);
//for the val
$object = new stdClass();
$object->type = 'show_val';
$object->enabled = 1;
$object->required = 1;
$object->content1 = $this->__checkVal();
$this->main_event_actions[] = $object;
}
return $return;
}
function _processEvents($currentEvent, $events = null){
$return = true;
if(is_array($events) && isset($events[$currentEvent])){
$event_value = $events[$currentEvent];
if(isset($event_value['actions']) && is_array($event_value['actions'])){
$event_actions = $event_value['actions'];
foreach($event_actions as $action => $action_data){
if(!$this->stop){
if(is_int($action)){
$action = $action_data;
$action_data = array();
}
$action_events = null;
$action_events = $this->_processAction($this->form_actions_data[$action], $action_data);
//check action events
if($action_events && is_array($action_data) && isset($action_data['events'])){
foreach($action_events as $action_event => $v){
$action_event = 'cfactionevent_'.$this->form_actions_data[$action]->type.'_'.$this->form_actions_data[$action]->order.'_'.$action_event;
$this->_processEvents($action_event, $action_data['events']);
}
}
}else{
//add a stop sign to halt the views processing at this point
$object = new stdClass();
$object->type = '_STOP_';
$this->main_event_actions[] = $object;
$return = false;
}
}
}
}
return $return;
}
function _processAction($action_details, $action_data = array()){
$action = $action_details->type;
if($action && isset($action_details->enabled) && (int)$action_details->enabled == 1){
$this->main_event_actions[] = $action_details;
return $this->runAction($action_details);
}
}
function runAction($action_details, $forceView = false){
if($forceView){
$this->main_event_actions[] = $action_details;
}
$this->last_action_result = null;
$action = $action_details->type;
$actionFile = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$action.DS.$action.'.php';
if(file_exists($actionFile)){
$classname = 'Cfaction'.$this->_camilize($action);
if(!class_exists($classname)){
require_once($actionFile);
}
${$classname} = new $classname();
$methods = get_class_methods(${$classname});
if(in_array('run', $methods)){
if(isset($this->form_details->id)){
${$classname}->form_id = $this->form_details->id;
}
${$classname}->form_name = $this->form_name;
$this->loadActionHelper($action);
ob_start();
$this->last_action_result = ${$classname}->run($this, $action_details);
$this->form_output .= ob_get_clean();
if(isset(${$classname}->events) && is_array(${$classname}->events)){
return array_filter(${$classname}->events);
}else{
return false;
}
}
}else{
die('ChronoForms action file missing, Please make sure this file exists:
'."JOOMLA_ROOT".DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$action.'.php');
}
}
function loadActionHelper($action){
//Try to load helper file
$classname = 'Cfaction'.$this->_camilize($action).'Helper';
$actionFile = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$action.DS.'cfaction_'.$action.'.php';
if(class_exists($classname)){
return true;
}else if(!class_exists($classname) && file_exists($actionFile)){
require_once($actionFile);
return true;
}else{
return false;
}
}
function getActionDetails($action_id){
if(isset($this->form_actions_data['cfaction_'.$action_id])){
return $this->form_actions_data['cfaction_'.$action_id];
}else{
return false;
}
}
function __checkVal(){
$mainframe = JFactory::getApplication();
$database = JFactory::getDBO();
$jversion = new JVersion();
if($jversion->RELEASE > 1.5){
$query = "SELECT * FROM `#__extensions` WHERE `element` = '".$this->option."' AND `type` = 'component'";
}else{
$query = "SELECT * FROM `#__components` WHERE `option` = '".$this->option."' AND `parent` = '0' AND `admin_menu_link` = 'option=".$this->option."'";
}
$database->setQuery($query);
$result = $database->loadObject();
$configs = new JParameter($result->params);
$extension = $this->extension_name;
if($configs->get('licensevalid', 0)){
return '';
}else{
return str_replace('_EXTENSION_NAME_', $extension, '