This time I received a different error message:
Parse error: syntax error, unexpected $end in /home/dispatc4/public_html/administrator/components/com_chronoforms/admin.chronoforms.php on line 1034
Doug
<?php
/**
* CHRONOFORMS version 4.0
* Copyright (c) 2006 - 2011 Chrono_Man, ChronoEngine.com. All rights reserved.
* Author: Chrono_Man (ChronoEngine.com)
* @license GNU/GPL
* Visit http://www.ChronoEngine.com for regular updates and information.
**/
/* ensure that this file is not called from another file */
defined('_JEXEC') or die('Restricted access');
require_once(JApplicationHelper::getPath('admin_html'));
require_once(JApplicationHelper::getPath('class'));
$jversion = new JVersion();
require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."versions".DS."j".$jversion->RELEASE.DS."admin.chronoforms.php");
?>
<?php
//clean the $_POST data
$_POST = JRequest::get('post', JREQUEST_ALLOWRAW);
// case differentiation
switch($task){
case "form_wizard":
case "apply_wizard_changes":
form_wizard($task);
// case differentiation
switch($task){
case "form_wizard":
case "apply_wizard_changes":
form_wizard($task);
break;
case "remove":
delete_form();
break;
case "copy":
copy_form();
break;
case "add":
case "edit":
edit_form();
break;
case "save":
case "apply":
save_form($task);
break;
case "create_table":
case "save_table":
create_table($task);
break;
case "list_data":
list_data($task);
break;
case "show_data":
show_data($task);
break;
case "delete_data":
delete_data($task);
break;
case "publish":
case "unpublish":
publish($task);
break;
case "validatelicense":
validatelicense($task);
break;
case "backup_forms":
backup_forms();
break;
case "restore_forms":
restore_forms();
break;
case "install_action":
install_action();
break;
case "action_task":
action_task();
break;
case "admin_form":
admin_form();
break;
default:
if(strpos($task, ":") !== false){
$details = explode(":", $task);
JRequest::setVar('task', $details[0]);
JRequest::setVar('event', $details[1]);
admin_form();
break;
}
index();
break;
}
function print_r2($array = array()){
echo '<pre>';
print_r($array);
echo '</pre>';
}
function admin_form(){
require_once(JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'libraries'.DS.'chronoform.php');
require_once(JPATH_SITE.DS.'components'.DS.'com_chronoforms'.DS.'chronoforms.html.php');
$formname = JRequest::getVar('chronoform', '');
$form_id = JRequest::getVar('form_id', '');
$event = JRequest::getVar('event');
if(empty($formname)){
if(empty($form_id)){
$mainframe->redirect("index.php?option=com_chronoforms", "Form doesn't exist!");
}else{
$row =& JTable::getInstance('chronoforms', 'Table');
$row->load((int)$form_id);
$formname = $row->name;
//load some table data
$database =& JFactory::getDBO();
$table_name = $_POST['table_name'];
$result = $database->getTableFields(array($table_name), false);
$table_fields = $result[$table_name];
$primary = '';
foreach($table_fields as $table_field => $field_data){
if($field_data->Key == 'PRI'){
$primary = $table_field;
}
}
if(empty($primary)){
JError::raiseWarning(100, "No table key found.");
$mainframe->redirect("index.php?option=com_chronoforms");
}
//get record data
if(isset($_POST['cb']) && !empty($_POST['cb'])){
$_POST['cf_id'] = $_POST['cb'][0];
//load all selected records data
$database->setQuery("SELECT * FROM ".$table_name." WHERE ".$primary." IN ('".implode("','", $_POST['cb'])."')");
$_POST['chronoform_data'] = $rows_data = $database->loadAssocList();
}else{
//JError::raiseWarning(100, "Invalid record.");
//$mainframe->redirect("index.php?option=com_chronoforms");
}
}
}
$form = CFChronoForm::getInstance($formname);
$form->admin = true;
//check if the event is the CSV export
if($event == 'cf_csv_export'){
$csv_event = array(
'events' => array(
'cf_csv_export' => array(
'actions' => array(
'cfaction_csv_export_gh_9999' => array(
'events' => array(
'cfaction_csv_export_gh_9999_success' => array(),
'cfaction_csv_export_gh_9999_failed' => array()
)
)
)
)
)
);
$form->form_details->events_actions_map = base64_encode(serialize($csv_event));
$csv_action_data = new stdClass();
$csv_action_data->type = 'csv_export_gh';
$csv_action_data->order = 9999;
$csv_action_data->enabled = 1;
$csv_action_params = new JParameter('');
$csv_action_params->set('download_export', 1);
$csv_action_data->params = $csv_action_params->toString();
$csv_action_data->content1 = '';
$form->form_actions[] = $csv_action_data;
}
$form->process($event);
HTML_ChronoForms::processView($form);
}
function action_task(){
$mainframe =& JFactory::getApplication();
$form_action = JRequest::getVar('action_name', '');
if(!empty($form_action)){
//load the action PHP file
$action_file = JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_actions'.DS.$form_action.DS.$form_action.'.php';
require_once($action_file);
$actionclassname = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", 'cfaction_'.$form_action);
if(class_exists($actionclassname)){
$actionclass = new $actionclassname;
$fn = JRequest::getVar('fn', '');
if(!empty($fn)){
echo $actionclass->$fn();
}
}else{
$action_params = array();
}
}else{
echo '';
}
$mainframe->close();
}
function index(){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
//prepare the pagination
$option = 'com_chronoforms';
$limit = $mainframe->getUserStateFromRequest($option.'.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
$limitstart = $mainframe->getUserStateFromRequest($option.'.limitstart', 'limitstart', 0, 'int');
//get apps
$apps = array('' => 'Default');
/*$database->setQuery("SELECT DISTINCT app FROM #__chronoforms");
$all = $database->loadObjectList();
foreach($all as $one){
if(!in_array($one->app, array_keys($apps))){
$apps[$one->app] = $one->app;
}
}*/
// count entries
//$database->setQuery("SELECT count(*) FROM #__chronoforms WHERE `app` = '".JRequest::getVar('select_app', '')."'");
$database->setQuery("SELECT count(*) FROM #__chronoforms");
$total = $database->loadResult();
jimport('joomla.html.pagination');
$pageNav = new JPagination($total, $limitstart, $limit);
//load forms data
$val = __getValStatus();
//$database->setQuery("SELECT * FROM #__chronoforms WHERE `app` = '".JRequest::getVar('select_app', '')."' ORDER BY id LIMIT $pageNav->limitstart,$pageNav->limit");
$database->setQuery("SELECT * FROM #__chronoforms ORDER BY id LIMIT $pageNav->limitstart,$pageNav->limit");
$forms = $database->loadObjectList();
if(!empty($forms)){
foreach($forms as $k => $form){
//load actions
$query = "SELECT * FROM `#__chronoform_actions` WHERE `chronoform_id` = '".$form->id."' AND `enabled` = '1' ORDER BY `order`";
$database->setQuery($query);
$forms[$k]->form_actions = $database->loadObjectList();
}
}
HTML_Admin_ChronoForms::index($forms, $pageNav, $apps, $val);
}
function publish($task = 'publish'){
if(isset($_POST['cb']) && !empty($_POST['cb'])){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
$published = ($task == 'publish') ? 1 : 0;
$database->setQuery("UPDATE #__chronoforms SET published='".$published."' WHERE id='".$_POST['cb'][0]."'");
if(!$database->query()){
JError::raiseWarning(100, $database->getError());
$mainframe->redirect("index.php?option=com_chronoforms");
}
$mainframe->redirect("index.php?option=com_chronoforms", "Updated successfully!");
}
}
function edit_form(){
$form = null;
if(isset($_POST['cb']) && !empty($_POST['cb'])){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
$database->setQuery("SELECT * FROM #__chronoforms WHERE id='".$_POST['cb'][0]."'");
$form = $database->loadObject();
if(!empty($form)){
//load actions
$query = "SELECT * FROM `#__chronoform_actions` WHERE `chronoform_id` = '".$form->id."' AND `enabled` = '1' ORDER BY `order`";
$database->setQuery($query);
$form->form_actions = $database->loadObjectList();
}
}
HTML_Admin_ChronoForms::edit($form);
}
function save_form($task = 'save'){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
$row = JTable::getInstance('chronoforms', 'Table');
if(isset($_POST['params']) && !empty($_POST['params']) && is_array($_POST['params'])){
$params = new JParameter('');
foreach($_POST['params'] as $k => $v){
if(is_array($v)){
$v = implode(",", $v);
}
$params->set($k, $v);
}
$_POST['params'] = $params->toString();
}
$post = JRequest::get('post', JREQUEST_ALLOWRAW);
if(!$row->bind($post)){
JError::raiseWarning(100, $row->getError());
$mainframe->redirect("index.php?option=com_chronoforms");
}
if(!$row->store()){
JError::raiseWarning(100, $row->getError());
$mainframe->redirect("index.php?option=com_chronoforms");
}
if($task == 'apply'){
if(isset($row->id) && !empty($row->id)){
$database->setQuery("SELECT * FROM #__chronoforms WHERE id='".$row->id."'");
$form = $database->loadObject();
}
$_POST['cb'] = array($_POST['id']);
edit_form();
//HTML_Admin_ChronoForms::edit($form);
}else{
$mainframe->redirect("index.php?option=com_chronoforms", "Saved successfully.");
}
}
function delete_form(){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
//delete the form with all its actions
if(isset($_POST['cb']) && !empty($_POST['cb'])){
foreach($_POST['cb'] as $form_id){
$database->setQuery("DELETE FROM #__chronoforms WHERE id='".$form_id."'");
if(!$database->query()){
JError::raiseWarning(100, $database->getErrorMsg());
$mainframe->redirect("index.php?option=com_chronoforms");
}
$database->setQuery("DELETE FROM #__chronoform_actions WHERE chronoform_id='".$form_id."'");
if(!$database->query()){
JError::raiseWarning(100, $database->getErrorMsg());
$mainframe->redirect("index.php?option=com_chronoforms");
}
}
}
$mainframe->redirect("index.php?option=com_chronoforms", "Deleted successfully.");
}
function copy_form(){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
$row =& JTable::getInstance('chronoforms', 'Table');
if(isset($_POST['cb']) && !empty($_POST['cb'])){
$row->load($_POST['cb'][0]);
$row->id = '';
$row->name = $row->name."-Copy";
if(!$row->store()){
JError::raiseWarning(100, $row->getError());
$mainframe->redirect("index.php?option=com_chronoforms");
}
//copy actions as well
$new_id = $row->id;
unset($row);
$query = "SELECT `id` FROM `#__chronoform_actions` WHERE `chronoform_id` = '".$_POST['cb'][0]."'";
$database->setQuery($query);
$row_ids = $database->loadResultArray();
foreach($row_ids as $id){
$row =& JTable::getInstance('chronoformActions', 'Table');
$row->load($id);
$row->id = '';
$row->chronoform_id = $new_id;
if(!$row->store()){
JError::raiseWarning(100, $row->getError());
$mainframe->redirect("index.php?option=com_chronoforms");
}
}
}
$mainframe->redirect("index.php?option=com_chronoforms", "Form successfully copied.");
}
function backup_forms(){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
if(isset($_POST['cb']) && !empty($_POST['cb'])){
$output = '';
foreach($_POST['cb'] as $form_id){
$database->setQuery("SELECT * FROM #__chronoforms WHERE id='".$form_id."'");
$form = $database->loadAssoc();
$database->setQuery("SELECT * FROM #__chronoform_actions WHERE chronoform_id='".$form_id."' ORDER BY `order` ASC");
$formactions = $database->loadAssocList();
$output .= "<__FORM_START__><__FORM_ROW_START__>".base64_encode(serialize($form))."<__FORM_ROW_END__><__FORM_ACTIONS_START__>".base64_encode(serialize($formactions))."<__FORM_ACTIONS_END__><__FORM_END__>"."\n";
}
//get the domain name
$uri =& JFactory::getURI();
preg_match('/http(s)*:\/\/(.*?)\//i', $uri->root(), $matches);
$domain = $matches[2];
//download the file
if (ereg('Opera(/| )([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'])) {
$UserBrowser = "Opera";
}
elseif (ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'])) {
$UserBrowser = "IE";
} else {
$UserBrowser = '';
}
$mime_type = ($UserBrowser == 'IE' || $UserBrowser == 'Opera') ? 'application/octetstream' : 'application/octet-stream';
@ob_end_clean();
ob_start();
header('Content-Type: ' . $mime_type);
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
if ($UserBrowser == 'IE') {
header('Content-Disposition: inline; filename="' . "CFV4_FormsBackup_ON_".$domain."_".date('d_M_Y_H:i:s').'.cf4bak"');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
}
else {
header('Content-Disposition: attachment; filename="' . "CFV4_FormsBackup_ON_".$domain."_".date('d_M_Y_H:i:s').'.cf4bak"');
header('Pragma: no-cache');
}
print $output;
exit();
}
}
function restore_forms(){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
jimport('joomla.utilities.error');
jimport('joomla.filesystem.file');
$files = $_FILES;
if(is_array($files) && !empty($files)){
//the file has been uploaded
$file = $files['file'];
$filename = $file['name'];
$exten = explode(".", $filename);
if($exten[count($exten)-1] == 'cf4bak'){
$path = JPATH_BASE.DS.'cache';
$uploadedfile = JFile::upload($file['tmp_name'], $path.DS.$filename);
if(!$uploadedfile){
JError::raiseWarning(100, "UPLAOD FAILED".": ".$file['error']);
$mainframe->redirect("index.php?option=com_chronoforms");
}else{
$data = file_get_contents($path.DS.$filename);
//preg_match_all('/<__FORM_START__>(.*?)<__FORM_END__>/is', $data, $forms_data);
$data = trim($data);
$forms_data = explode("\n", $data);
if(!empty($forms_data)){
//loop through each form backup line
foreach($forms_data as $form_data){
$form_data = str_replace(array('<__FORM_START__>', '<__FORM_END__>'), '', $form_data);
//get form row data
$form_row_data = explode('<__FORM_ROW_END__>', $form_data);
//get actions data string with tags
$form_actions_data = $form_row_data[1];
//get form pure row code
$form_row_data = str_replace('<__FORM_ROW_START__>', '', $form_row_data[0]);
//decrypt the code and save it
$form_row_data = unserialize(base64_decode($form_row_data));
unset($form_row_data['id']);
$row = JTable::getInstance('chronoforms', 'Table');
if(!$row->bind($form_row_data)){
JError::raiseWarning(100, $row->getError());
}
if(!$row->store()){
JError::raiseWarning(100, $row->getError());
}
$chronoform_id = $row->id;
//get form actions rows pure code
$form_actions_data = str_replace(array('<__FORM_ACTIONS_START__>', '<__FORM_ACTIONS_END__>'), '', $form_actions_data);
//decrypt the code and save it
$form_actions_data = unserialize(base64_decode($form_actions_data));
foreach($form_actions_data as $form_action){
unset($form_action['id']);
$form_action['chronoform_id'] = $chronoform_id;
$row = JTable::getInstance('chronoformactions', 'Table');
if(!$row->bind($form_action)){
JError::raiseWarning(100, $row->getError());
}
if(!$row->store()){
JError::raiseWarning(100, $row->getError());
}
}
}
}
$mainframe->redirect("index.php?option=com_chronoforms", "Forms restored successfully.");
}
}else{
//wrong file extension
JError::raiseWarning(100, "The file uploaded was not a Chronoforms V4 forms backup file.");
$mainframe->redirect("index.php?option=com_chronoforms");
}
}else{
//no file, render the upload page
HTML_Admin_ChronoForms::restore_forms();
}
}
function install_action(){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
jimport('joomla.utilities.error');
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.archive');
$files = $_FILES;
if(is_array($files) && !empty($files)){
//the file has been uploaded
$file = $files['file'];
$filename = $file['name'];
$exten = explode(".", $filename);
if($exten[count($exten)-1] == 'zip'){
$path = JPATH_BASE.DS.'cache';
$uploadedfile = JFile::upload($file['tmp_name'], $path.DS.$filename);
if(!$uploadedfile){
JError::raiseWarning(100, "UPLAOD FAILED".": ".$file['error']);
$mainframe->redirect("index.php?option=com_chronoforms");
}else{
$zipper =& JArchive::getAdapter('zip');
if($zipper->extract($path.DS.$filename, $path.DS.$exten[0])){
//we could extract the file, copy
if(JFolder::copy($path.DS.$exten[0].DS, JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."form_actions".DS, '', true) === true){
$mainframe->redirect("index.php?option=com_chronoforms", "Action installed successfully.");
}else{
JError::raiseWarning(100, "Couldn't copy to the destination folder.");
$mainframe->redirect("index.php?option=com_chronoforms");
}
}else{
//failed
JError::raiseWarning(100, "Couldn't extract the file provided.");
$mainframe->redirect("index.php?option=com_chronoforms");
}
}
}else{
//wrong file extension
JError::raiseWarning(100, "The file uploaded was not a Chronoforms V4 action installer file.");
$mainframe->redirect("index.php?option=com_chronoforms");
}
}else{
//no file, render the upload page
HTML_Admin_ChronoForms::install_action();
}
}
function form_wizard($task = 'form_wizard'){
$mainframe =& JFactory::getApplication();
$form = null;
$formactions = null;
if($task == 'form_wizard'){
if(isset($_POST['form_id']) || isset($_GET['form_id'])){
$form_id = isset($_POST['form_id']) ? (int)$_POST['form_id'] : (int)$_GET['form_id'];
if($form_id > 0){
//load existing form
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
$database->setQuery("SELECT * FROM #__chronoforms WHERE id='".$form_id."'");
$form = $database->loadObject();
$database->setQuery("SELECT * FROM #__chronoform_actions WHERE chronoform_id='".$form_id."' ORDER BY `order` ASC");
$formactions = $database->loadObjectList();
//print_r2(unserialize(base64_decode($form->events_actions_map)));
}
}else{
if(!empty($_POST)){
_save_form_wizard();
$mainframe->redirect("index.php?option=com_chronoforms", "Form was successfully saved.");
}
}
}else{
//apply task
if(!empty($_POST)){
$form_id = isset($_POST['data']['Chronoform']['id']) ? (int)$_POST['data']['Chronoform']['id'] : (int)$_GET['form_id'];
$save_id = _save_form_wizard();
if(!$form_id){
$form_id = $save_id;
}
$mainframe->redirect("index.php?option=com_chronoforms&task=form_wizard&form_id=".$form_id, "Changes applied successfully.");
}
}
HTML_Admin_ChronoForms::form_wizard($form, $formactions);
}
function list_data(){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
if(isset($_POST['cb']) && !empty($_POST['cb'])){
$index = $_POST['cb'][0];
$_POST['table_name'] = $_POST['table_name'][$index];
$_POST['form_id'] = $index;
}
if((isset($_POST['table_name']) && !empty($_POST['table_name'])) || (isset($_GET['table_name']) && !empty($_GET['table_name']))){
$table_name = isset($_POST['table_name']) ? $_POST['table_name'] : $_GET['table_name'];
//load some table data
$result = $database->getTableFields(array($table_name), false);
$table_fields = $result[$table_name];
$primary = '';
foreach($table_fields as $table_field => $field_data){
if($field_data->Key == 'PRI'){
$primary = $table_field;
}
}
//prepare the pagination
$option = 'com_chronoforms.'.$table_name;
$limit = $mainframe->getUserStateFromRequest($option.'.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
$limitstart = $mainframe->getUserStateFromRequest($option.'.limitstart', 'limitstart', 0, 'int');
// count entries
$database->setQuery("SELECT count(*) FROM `".$table_name."`");
$total = $database->loadResult();
jimport('joomla.html.pagination');
if($limitstart > $total)$limitstart = 0;
$pageNav = new JPagination($total, $limitstart, $limit);
//load the data
$query = "SELECT * FROM `".$table_name."`";
if(!empty($primary)){
$query .= " ORDER BY ".$primary;
}
$query .= " LIMIT $pageNav->limitstart,$pageNav->limit";
$database->setQuery($query);
$table_data = $database->loadObjectList();
HTML_Admin_ChronoForms::list_data($table_name, $table_fields, $table_data, $pageNav);
}else{
JError::raiseWarning(100, "No tables were selected.");
$mainframe->redirect("index.php?option=com_chronoforms");
}
}
function show_data(){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
if((isset($_POST['table_name']) && !empty($_POST['table_name'])) || (isset($_GET['table_name']) && !empty($_GET['table_name']))){
$table_name = isset($_POST['table_name']) ? $_POST['table_name'] : $_GET['table_name'];
//load some table data
$result = $database->getTableFields(array($table_name), false);
$table_fields = $result[$table_name];
$primary = '';
foreach($table_fields as $table_field => $field_data){
if($field_data->Key == 'PRI'){
$primary = $table_field;
}
}
if(empty($primary)){
JError::raiseWarning(100, "No table key found.");
$mainframe->redirect("index.php?option=com_chronoforms");
}
//show data
if(isset($_POST['cb']) && !empty($_POST['cb'])){
$database->setQuery("SELECT * FROM ".$table_name." WHERE ".$primary."='".$_POST['cb'][0]."'");
$row_data = $database->loadObject();
HTML_Admin_ChronoForms::show_data($table_name, $table_fields, $row_data);
}else{
JError::raiseWarning(100, "Invalid record.");
$mainframe->redirect("index.php?option=com_chronoforms");
}
}else{
JError::raiseWarning(100, "Table doesn't exist!");
$mainframe->redirect("index.php?option=com_chronoforms");
}
}
function delete_data(){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
if((isset($_POST['table_name']) && !empty($_POST['table_name'])) || (isset($_GET['table_name']) && !empty($_GET['table_name']))){
$table_name = isset($_POST['table_name']) ? $_POST['table_name'] : $_GET['table_name'];
//load some table data
$result = $database->getTableFields(array($table_name), false);
$table_fields = $result[$table_name];
$primary = '';
foreach($table_fields as $table_field => $field_data){
if($field_data->Key == 'PRI'){
$primary = $table_field;
}
}
if(empty($primary)){
JError::raiseWarning(100, "No table key found.");
$mainframe->redirect("index.php?option=com_chronoforms");
}
//delete the form with all its actions
if(isset($_POST['cb']) && !empty($_POST['cb'])){
foreach($_POST['cb'] as $r_id){
$database->setQuery("DELETE FROM ".$table_name." WHERE `".$primary."` = '".$r_id."'");
if(!$database->query()){
JError::raiseWarning(100, $database->getErrorMsg());
$mainframe->redirect("index.php?option=com_chronoforms");
}
}
}
}else{
JError::raiseWarning(100, "Table doesn't exist!");
$mainframe->redirect("index.php?option=com_chronoforms");
}
unset($_POST['cb']);
list_data();
//$mainframe->redirect("index.php?option=com_chronoforms&task=list_data&table_name=".$table_name, "Deleted successfully.");
}
function create_table($task = 'create_table'){
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
//switch task
if($task == 'save_table'){
if(isset($_POST['field_name']) && !empty($_POST['field_name']) && !empty($_POST['_cf_table_name'])){
$create = array("CREATE TABLE IF NOT EXISTS `".$_POST['_cf_table_name']."` (");
$primary_key = "";
foreach($_POST['field_name'] as $k => $name){
$name = trim($name);
if(!empty($name) && isset($_POST['enabled'][$k]) && ((int)$_POST['enabled'][$k] == 1)){
$length = "";
if(!empty($_POST['field_length'][$k])){
$length = "(".$_POST['field_length'][$k].")";
}
$default = "";
if(!empty($_POST['field_default'][$k])){
$default = " default '".$_POST['field_default'][$k]."'";
}
$extra = "";
if(!empty($_POST['field_extra'][$k])){
$extra = " ".$_POST['field_extra'][$k];
}
$create[] = "`".$name."` ".$_POST['field_type'][$k].$length.$default.$extra.",";
if(isset($_POST['field_key'][$k]) && (int)$_POST['field_key'][$k] == 1){
$primary_key = "PRIMARY KEY (`".$name."`)";
}
}
}
if(!empty($primary_key)){
$create[] = $primary_key;
}
$create[] = ");";
$create = implode("\n", $create);
$database->setQuery($create);
if(!$database->query()){
JError::raiseWarning(100, $database->getError()."<br /><br />Check table query below:<br /><br />".$create);
$mainframe->redirect("index.php?option=com_chronoforms");
}
$mainframe->redirect("index.php?option=com_chronoforms", "Table successfully created.");
}
}else{
$row =& JTable::getInstance('chronoforms', 'Table');
if(isset($_POST['cb']) && !empty($_POST['cb'])){
$row->load($_POST['cb'][0]);
$form_code = $row->content;
$fields_names = _getFormFieldsNames($form_code);
}else{
JError::raiseWarning(100, 'Invalid record!');
$mainframe->redirect("index.php?option=com_chronoforms");
}
$defaults = array(
'cf_id' => array('type' => 'INT', 'length' => '11', 'default' => '', 'key' => 'PRI', 'extra' => 'auto_increment', 'enabled' => 1),
'cf_uid' => array('type' => 'VARCHAR', 'length' => '255', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1),
'cf_created' => array('type' => 'DATETIME', 'length' => '', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1),
'cf_modified' => array('type' => 'DATETIME', 'length' => '', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1),
'cf_ipaddress' => array('type' => 'VARCHAR', 'length' => '255', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1),
'cf_user_id' => array('type' => 'VARCHAR', 'length' => '255', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1)
);
foreach($fields_names as $name){
if($name != 'cf_id'){
$defaults[$name] = array('type' => 'VARCHAR', 'length' => '255', 'default' => '', 'key' => '', 'extra' => '', 'enabled' => 1);
}
}
}
HTML_Admin_ChronoForms::create_table($row, $defaults);
}
function _getFormFieldsNames($form_code){
$fields_names = array();
$pattern_input = '/name=("|\')([^(>|"|\')]*?)("|\')/i';
preg_match_all($pattern_input, $form_code, $matches);
foreach($matches[2] as $match){
if(strpos($match, '[]')){
$match = str_replace('[]', '', $match);
}
$fields_names[] = trim($match);
}
$fields_names = array_unique($fields_names);
return $fields_names;
}
function _save_form_wizard(){
//generate XML code for the form
$chronoform = array();
$formdata = array();
if(!empty($_POST['chronofield'])){
foreach($_POST['chronofield'] as $key => $fielddata){
$formdata['field_'.$key] = array();
foreach($fielddata as $fieldname => $fieldvalue){
$formdata['field_'.$key][$fieldname] = $fieldvalue;
}
}
}
//if easy mode, load the preset events actions
if(isset($_POST['wizard_mode']) && $_POST['wizard_mode'] == 'easy'){
$_POST['chronoaction'][3] = array('type' => 'show_html');
$_POST['chronoaction'][5] = array('type' => 'event_loop');
$_POST['chronoaction'][7] = array('type' => 'event_loop');
$_POST['chronoaction'][16] = array('type' => 'handle_arrays');
}
//prepare the actions details for the model
$formactionsdata = array();
$action_count = 0;
if(!empty($_POST['chronoaction'])){
foreach($_POST['chronoaction'] as $key => $actiondata){
$type = $_data['ChronoformAction'][$action_count]['type'] = $actiondata['type'];
$_data['ChronoformAction'][$action_count]['order'] = $key;
if(isset($actiondata['action_'.$actiondata['type'].'_'.$key.'_enabled'])){
$_data['ChronoformAction'][$action_count]['enabled'] = $actiondata['action_'.$actiondata['type'].'_'.$key.'_enabled'];
unset($actiondata['action_'.$actiondata['type'].'_'.$key.'_enabled']);
}else{
$_data['ChronoformAction'][$action_count]['enabled'] = 1;
}
//$_data['ChronoformAction'][$action_count]['event'] = $actiondata['action_'.$actiondata['type'].'_'.$key.'_event'];
//unset($actiondata['action_'.$actiondata['type'].'_'.$key.'_event']);
if(isset($actiondata['action_'.$actiondata['type'].'_'.$key.'_content1'])){
$_data['ChronoformAction'][$action_count]['content1'] = $actiondata['action_'.$actiondata['type'].'_'.$key.'_content1'];
unset($actiondata['action_'.$actiondata['type'].'_'.$key.'_content1']);
}
unset($actiondata['type']);
foreach($actiondata as $actionname => $actionvalue){
$actiondata[str_replace('action_'.$type.'_'.$key.'_', '', $actionname)] = $actionvalue;
unset($actiondata[$actionname]);
}
$_data['ChronoformAction'][$action_count]['params'] = $actiondata;
$action_count++;
}
}
$chronoform['formcode'] = $formdata;
/*print_r2($_data);
die();
/*echo '<pre>';
print_r($formdata);
print_r($_data);
print_r($_POST['_form_actions_events_map']);
echo '</pre>';*/
//save form
$mainframe =& JFactory::getApplication();
$database =& JFactory::getDBO();
$row = JTable::getInstance('chronoforms', 'Table');
if(isset($_POST['data']['Chronoform']['id']) && !empty($_POST['data']['Chronoform']['id'])){
$_data['Chronoform']['id'] = $_POST['data']['Chronoform']['id'];
if(isset($_POST['wizard_mode'])){// && $_POST['wizard_mode'] == 'easy'){
//load the form
$database =& JFactory::getDBO();
$database->setQuery("SELECT * FROM #__chronoforms WHERE id='".$_data['Chronoform']['id']."'");
$form = $database->loadObject();
//$_data['Chronoform']['params'] = 'form_mode='.$_POST['wizard_mode'].''."\n".trim($form->params)."\n".'form_mode='.$_POST['wizard_mode'];
$form_params = new JParameter($form->params);
$form_params->set('form_mode', $_POST['wizard_mode']);
$form_params->set('tight_layout', $_POST['params']['tight_layout']);
$_data['Chronoform']['params'] = $form_params->toString();
}
}else{
$_data['Chronoform']['form_type'] = 1; //this is a new form, set it as WIZARD form
if(isset($_POST['wizard_mode'])){// && $_POST['wizard_mode'] == 'easy'){
//$_data['Chronoform']['params'] = 'form_mode='.$_POST['wizard_mode'];
$form_params = new JParameter('');
$form_params->set('form_mode', $_POST['wizard_mode']);
$form_params->set('tight_layout', $_POST['params']['tight_layout']);
$_data['Chronoform']['params'] = $form_params->toString();
}
}
$_data['Chronoform']['name'] = $_POST['chronoform_name'];
$_data['Chronoform']['published'] = $_POST['chronoform_published'];
if(isset($_POST['form_type']) && (int)$_POST['form_type'] != 0){
$_data['Chronoform']['content'] = _processWizardCode($formdata);
$_data['Chronoform']['wizardcode'] = var_export($formdata, true);
/*if(strpos($form->form_details->content, 'validate[') !== false){
}*/
}
//get the actions events map
$_data['Chronoform']['events_actions_map'] = base64_encode(serialize($_POST['_form_actions_events_map']['myform']));
//if easy mode, load the preset events map
if(isset($_POST['wizard_mode']) && $_POST['wizard_mode'] == 'easy'){
$_data['Chronoform']['events_actions_map'] = "YToxOntzOjY6ImV2ZW50cyI7YToyOntzOjQ6ImxvYWQiO2E6MTp7czo3OiJhY3Rpb25zIjthOjQ6e3M6MTg6ImNmYWN0aW9uX2xvYWRfanNfMCI7czowOiIiO3M6MTk6ImNmYWN0aW9uX2xvYWRfY3NzXzEiO3M6MDoiIjtzOjIzOiJjZmFjdGlvbl9sb2FkX2NhcHRjaGFfMiI7czowOiIiO3M6MjA6ImNmYWN0aW9uX3Nob3dfaHRtbF8zIjtzOjA6IiI7fX1zOjY6InN1Ym1pdCI7YToxOntzOjc6ImFjdGlvbnMiO2E6MTA6e3M6MjQ6ImNmYWN0aW9uX2NoZWNrX2NhcHRjaGFfNCI7YToxOntzOjY6ImV2ZW50cyI7YToyOntzOjM3OiJjZmFjdGlvbmV2ZW50X2NoZWNrX2NhcHRjaGFfNF9zdWNjZXNzIjtzOjA6IiI7czozNDoiY2ZhY3Rpb25ldmVudF9jaGVja19jYXB0Y2hhXzRfZmFpbCI7YToxOntzOjc6ImFjdGlvbnMiO2E6MTp7czoyMToiY2ZhY3Rpb25fZXZlbnRfbG9vcF81IjtzOjA6IiI7fX19fXM6MjM6ImNmYWN0aW9uX3VwbG9hZF9maWxlc182IjthOjE6e3M6NjoiZXZlbnRzIjthOjI6e3M6MzY6ImNmYWN0aW9uZXZlbnRfdXBsb2FkX2ZpbGVzXzZfc3VjY2VzcyI7czowOiIiO3M6MzM6ImNmYWN0aW9uZXZlbnRfdXBsb2FkX2ZpbGVzXzZfZmFpbCI7YToxOntzOjc6ImFjdGlvbnMiO2E6MTp7czoyMToiY2ZhY3Rpb25fZXZlbnRfbG9vcF83IjtzOjA6IiI7fX19fXM6MjI6ImNmYWN0aW9uX2N1c3RvbV9jb2RlXzgiO3M6MDoiIjtzOjI1OiJjZmFjdGlvbl9oYW5kbGVfYXJyYXlzXzE2IjtzOjA6IiI7czoxODoiY2ZhY3Rpb25fZGJfc2F2ZV85IjtzOjA6IiI7czoxNzoiY2ZhY3Rpb25fZW1haWxfMTAiO3M6MDoiIjtzOjE3OiJjZmFjdGlvbl9lbWFpbF8xMSI7czowOiIiO3M6MTc6ImNmYWN0aW9uX2VtYWlsXzEyIjtzOjA6IiI7czoyMzoiY2ZhY3Rpb25fY3VzdG9tX2NvZGVfMTMiO3M6MDoiIjtzOjMxOiJjZmFjdGlvbl9zaG93X3RoYW5rc19tZXNzYWdlXzE0IjtzOjA6IiI7fX19fQ==";
}
if(!$row->bind($_data['Chronoform'])){
JError::raiseWarning(100, $row->getError());
$mainframe->redirect("index.php?option=com_chronoforms");
}
if(!$row->store()){
JError::raiseWarning(100, $row->getError());
$mainframe->redirect("index.php?option=com_chronoforms");
}
$chronoform_id = $row->id;
//save actions
if(isset($_data['ChronoformAction']) && !empty($_data['ChronoformAction'])){
//delete previous actions to save new ones
if(isset($_POST['data']['Chronoform']['id']) && !empty($_POST['data']['Chronoform']['id'])){
$database->setQuery("DELETE FROM #__chronoform_actions WHERE chronoform_id='".$_POST['data']['Chronoform']['id']."'");
if(!$database->query()){
JError::raiseWarning(100, $row->getError());
$mainframe->redirect("index.php?option=com_chronoforms");
}
}
//save all new actions
foreach($_data['ChronoformAction'] as $action){
$row = JTable::getInstance('chronoformactions', 'Table');
$action['chronoform_id'] = $chronoform_id;
$params = new JParameter('');
if(isset($action['params']) && is_array($action['params'])){
foreach($action['params'] as $k => $param){
$params->set($k, $param);
}
$action['params'] = $params->toString();
}
if(!$row->bind($action)){
JError::raiseWarning(100, $row->getError());
$mainframe->redirect("index.php?option=com_chronoforms");
}
if(!$row->store()) {
JError::raiseWarning(100, $row->getError());
$mainframe->redirect("index.php?option=com_chronoforms");
}
}
}
return $chronoform_id;
}
function _processWizardCode($formdata){
$content = '';
require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS."helpers".DS."html_helper.php");
$HtmlHelper = new HtmlHelper();
foreach($formdata as $formdata_key => $formdata_element){
$field_header = $formdata_element['tag'].'_'.$formdata_element['type'].'_'.str_replace('field_', '', $formdata_key);
$formcontent_item_array = array();
$field_name = '';
if(isset($formdata_element[$field_header.'_input_name'])){
$field_name = $formdata_element[$field_header.'_input_name'];
}
//disable label if empty
if(isset($formdata_element[$field_header.'_label_text']) && strlen($formdata_element[$field_header.'_label_text'])){
$formcontent_item_array['label'] = $formdata_element[$field_header.'_label_text'];
}else{
$formcontent_item_array['label'] = false;
}
switch($formdata_element['type']){
default:
$process = true;
$file_name = 'input_'.$formdata_element['type'];
if(file_exists(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_elements'.DS.$file_name.'.php')){
require_once(JPATH_SITE.DS."administrator".DS."components".DS."com_chronoforms".DS.'form_elements'.DS.$file_name.'.php');
$elementclassname = preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", 'chrono_forms_'.$file_name);
if(class_exists($elementclassname)){
$elementclass = new $elementclassname;
$methods = get_class_methods($elementclass);
if(in_array('save', $methods)){
$formcontent_item_array = $elementclass->save($formdata_element, $field_header, $formcontent_item_array);
$process = false;
}
}
}
if($process){
if(isset($formdata_element[$field_header.'_input_id'])){
$formcontent_item_array['id'] = $formdata_element[$field_header.'_input_id'];
unset($formdata_element[$field_header.'_input_id']);
}
if(isset($formdata_element[$field_header.'_input_value'])){
$formcontent_item_array['default'] = $formdata_element[$field_header.'_input_value'];
unset($formdata_element[$field_header.'_input_value']);
}
if(isset($formdata_element[$field_header.'_input_maxlength'])){
$formcontent_item_array['maxlength'] = $formdata_element[$field_header.'_input_maxlength'];
unset($formdata_element[$field_header.'_input_maxlength']);
}
if(isset($formdata_element[$field_header.'_input_size'])){
$formcontent_item_array['size'] = $formdata_element[$field_header.'_input_size'];
unset($formdata_element[$field_header.'_input_size']);
}
if(isset($formdata_element[$field_header.'_input_class'])){
$formcontent_item_array['class'] = $formdata_element[$field_header.'_input_class'];
unset($formdata_element[$field_header.'_input_class']);
}
if(isset($formdata_element[$field_header.'_input_title'])){
$formcontent_item_array['title'] = $formdata_element[$field_header.'_input_title'];
unset($formdata_element[$field_header.'_input_title']);
}
if(isset($formdata_element[$field_header.'_label_over'])){
$formcontent_item_array['label_over'] = $formdata_element[$field_header.'_label_over'];
unset($formdata_element[$field_header.'_label_over']);
}
if(isset($formdata_element[$field_header.'_hide_label'])){
$formcontent_item_array['hide_label'] = $formdata_element[$field_header.'_hide_label'];
unset($formdata_element[$field_header.'_hide_label']);
}
if(isset($formdata_element[$field_header.'_validations'])){
$formcontent_item_array['validations'] = $formdata_element[$field_header.'_validations'];
unset($formdata_element[$field_header.'_validations']);
}
if(isset($formdata_element[$field_header.'_instructions'])){
$formcontent_item_array['smalldesc'] = $formdata_element[$field_header.'_instructions'];
unset($formdata_element[$field_header.'_instructions']);
}
if(isset($formdata_element[$field_header.'_tooltip'])){
$formcontent_item_array['tooltip'] = $formdata_element[$field_header.'_tooltip'];
unset($formdata_element[$field_header.'_tooltip']);
}
if(isset($formdata_element['real_type'])){
$formcontent_item_array['type'] = $formdata_element['real_type'];
unset($formdata_element['real_type']);
unset($formdata_element['type']);
unset($formdata_element['tag']);
}
//unset the name and the label
unset($formdata_element[$field_header.'_input_name']);
unset($formdata_element[$field_header.'_label_text']);
//load the field params array
foreach($formdata_element as $k => $v){
$formcontent_item_array[str_replace($field_header.'_', '', $k)] = $formdata_element[$k];
}
}
break;
}
$content .= $HtmlHelper->input($field_name, $formcontent_item_array, true);
}
return $content;
}
function validationconnect($type, $host, $port='80', $path='/', $data=array()) {
$mainframe =& JFactory::getApplication();
$_err = 'lib sockets::'.__FUNCTION__.'(): ';
$str = '';
$d = array();
//switch($type) { case 'http': $type = ''; case 'ssl': continue; default: die($_err.'bad $type'); }
if(!empty($data)){
foreach($data as $k => $v){
$strarr[] = urlencode($k).'='.urlencode($v);
}
}
$str = implode('&', $strarr);
$result = '';
//echo $str;
$fp = fsockopen($host, $port, $errno, $errstr, 30);
if(!$fp){
//$mainframe->redirect( "index.php?option=com_chronoforms", $_err.$errstr.$errno);
$result = 'error';
//die($_err.$errstr.$errno);
}else{
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ".strlen($str)."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $str."\r\n\r\n");
while(!feof($fp)){
$d[] = fgets($fp,4096);
}
fclose($fp);
$result = $d[count($d) - 1];
} return $result;
}
?>