%PDF- %PDF-
| Direktori : /home1/lightco1/www/administrator/components/com_chronoforms5/chronoforms/ |
| Current File : //home1/lightco1/www/administrator/components/com_chronoforms5/chronoforms/chronoforms.php |
<?php
/**
* COMPONENT FILE HEADER
**/
namespace GCore\Admin\Extensions\Chronoforms;
/* @copyright:ChronoEngine.com @license:GPLv2 */defined('_JEXEC') or die('Restricted access');
defined("GCORE_SITE") or die;
class Chronoforms extends \GCore\Libs\GController {
var $models = array('\GCore\Admin\Extensions\Chronoforms\Models\Form');
var $libs = array('\GCore\Libs\Request');
var $helpers= array(
'\GCore\Helpers\DataTable',
'\GCore\Helpers\Assets',
'\GCore\Helpers\Html',
'\GCore\Admin\Extensions\Chronoforms\Helpers\DnaBuilder',
'\GCore\Helpers\Toolbar',
'\GCore\Helpers\Tasks',
'\GCore\Helpers\Paginator',
'\GCore\Helpers\Sorter'
);
function index(){
$this->Form->order_by = 'Form.id';
$this->_sortable();
$this->_search(array('Form.title', 'Form.app', 'Form.params'));
$this->_paginate();
$forms = $this->Form->find('all');
$this->set('forms', $forms);
if($this->_validated() === false){
$session = \GCore\Libs\Base::getSession();
$domain = str_replace(array('http://', 'https://'), '', \GCore\Libs\Url::domain());
if(\GCore\C::get('GSITE_PLATFORM') == 'wordpress'){
$session->setFlash('error', "Your ChronoForms installation on <strong>".$domain."</strong> is NOT validated, the number of published forms has been limited to 1 form only per website.");
$session->setFlash('info', "You can add any form to any of your website pages using this shortcode: [Chronoforms5 chronoform=\"FORM_NAME\"]");
}else{
$session->setFlash('error', "Your ChronoForms installation on <strong>".$domain."</strong> is NOT validated.");
}
}
parent::_settings('chronoforms');
$this->set('chronoforms_settings', new \GCore\Libs\Parameter($this->data['Chronoforms']));
}
function toggle(){
parent::_toggle();
$this->_limit_forms();
$this->redirect(r_('index.php?ext=chronoforms'));
}
function edit2(){
$this->edit();
$this->view = 'edit2';
}
//data reading
function edit(){
$id = $this->Request->data('id', null);
$this->Form->id = $id;
$form = $this->Form->load();
if(!empty($form)){
$this->data = $form;
//$this->set('wizard_fields', $this->data['Form']['extras']['fields']);
}
//pr($this->data['Form']['extras']['DNA']);
$this->set(array('form' => $form));
//get fields types
$fields_types = $fields_files = \GCore\Libs\Folder::getFiles(dirname(__FILE__).DS.'fields'.DS);
$fields_types2 = $fields_files2 = array();
foreach($fields_types as $k => $type){
if(strpos($type, '.html') !== false OR strpos($type, 'multi.php') !== false){
continue;
}
$fields_types2[$k] = str_replace(dirname(__FILE__).DS.'fields'.DS, '', $type);
$fields_types2[$k] = str_replace('.php', '', $fields_types2[$k]);
$fields_files2 = $fields_files[$k];
}
$this->set('fields_types', $fields_types2);
$this->set('fields_files', $fields_files);
$actions = \GCore\Libs\Folder::getFiles(dirname(__FILE__).DS.'actions'.DS);
foreach($actions as $k => $action){
$actions[$k] = str_replace(dirname(__FILE__).DS.'actions'.DS, '', $action);
if(strpos($actions[$k], '.') !== false){
unset($actions[$k]);
}
}
$this->set('actions_list', $actions);
$jsevents = \GCore\Libs\Folder::getFiles(dirname(__FILE__).DS.'events'.DS);
foreach($jsevents as $k => $jsevent){
$jsevents[$k] = str_replace(dirname(__FILE__).DS.'events'.DS, '', $jsevent);
if(strpos($jsevent, '.php') !== false){
unset($jsevents[$k]);
}
}
$this->set('jsevents_types', $jsevents);
if(empty($this->data['Form']['id']) AND !empty($this->data['setup'])){
$this->data['Form']['extras']['DNA'] = array(
'load' => array('js_8' => '', 'css_7' => '', 'load_captcha_6' => '', 'html_5' => ''),
'submit' => array(
'check_captcha_2' => array(
'success' => array(),
'fail' => array('event_loop_3' => '')
),
'file_upload_9' => array(
'success' => array(),
'fail' => array('event_loop_10' => '')
),
'handle_arrays_13' => '',
'db_save_11' => '',
'email_0' => '',
'email_1' => '',
'thanks_message_4' => '',
'debugger_12' => '',
)
);
$this->data['Form']['extras']['actions_config'][6]['fonts'] = 1;
$this->data['Form']['extras']['actions_config'][2]['enabled'] = 0;
$this->data['Form']['extras']['actions_config'][9]['enabled'] = 0;
$this->data['Form']['extras']['actions_config'][11]['enabled'] = 0;
$this->data['Form']['extras']['actions_config'][12]['enabled'] = 0;
$this->data['Form']['extras']['actions_config'][13]['enabled'] = 1;
}
parent::_settings('chronoforms');
$this->set('chronoforms_settings', new \GCore\Libs\Parameter($this->data['Chronoforms']));
if(!empty($this->data['Form']['extras']['fields'])){
foreach($this->data['Form']['extras']['fields'] as $f_k => $f_info){
if(strpos($f_k, '{N}') !== false){
unset($this->data['Form']['extras']['fields'][$f_k]);
}
}
}
}
static function extract_array_path($parsed = array(), &$path = array()){
foreach($parsed as $k => $v){
if(is_array($v)){
$path[] = $k;
self::extract_array_path($parsed[$k], $path);
}else{
$path[] = $k;
}
}
}
function save(){
$session = \GCore\Libs\Base::getSession();
parent::_settings('chronoforms');
$chronoforms_settings = new \GCore\Libs\Parameter($this->data['Chronoforms']);
if($chronoforms_settings->get('wizard.safe_save', 1)){
$s_form = array();
//parse_str($this->data['serialized_form_data'], $s_form);
if(!empty($this->data['serialized_form_data_chunks'])){
$chunks = $this->data['serialized_form_data_chunks'];
$this->data['serialized_form_data'] = implode('', $chunks);
}
$pairs = explode('&', $this->data['serialized_form_data']);
$result = array();
foreach($pairs as $pair){
$dummy = array();
parse_str($pair, $dummy);
$path = array();
self::extract_array_path($dummy, $path);
$path = implode('.', $path);
$new_path = explode('.', $path);
//check if the last path item is numeric, then its an array of values
if(is_numeric($new_path[count($new_path) - 1])){
$value = \GCore\Libs\Arr::getVal($dummy, $new_path);
$last_numeric_index = $new_path[count($new_path) - 1];
unset($new_path[count($new_path) - 1]);
$existing_results = (array)\GCore\Libs\Arr::getVal($result, $new_path, array());
if(!in_array($last_numeric_index, array_keys($existing_results))){
$existing_results[$last_numeric_index] = $value;
}else{
$existing_results[] = $value;
}
$result = \GCore\Libs\Arr::setVal($result, $new_path, $existing_results);
continue;
}
if(in_array('{N}', $new_path) !== false){
continue;
}
$result = \GCore\Libs\Arr::setVal($result, $new_path, \GCore\Libs\Arr::getVal($dummy, $new_path));
}
$s_form = $result;
$this->data = $s_form;
}
$result = parent::_save();
if($result){
$this->_limit_forms();
if($this->Request->get('save_act') == 'apply'){
$this->redirect(r_('index.php?ext=chronoforms&act=edit&id='.$this->Form->id));
}else{
$session->setFlash('success', sprintf(l_('CF_FORM_X_HAS_BEEN_UPDATED'), $this->data['Form']['title']));
$this->redirect(r_('index.php?ext=chronoforms'));
}
}else{
$this->edit();
$this->view = 'edit';
$session->setFlash('error', \GCore\Libs\Arr::flatten($this->Form->errors));
}
}
function _limit_forms(){
if(\GCore\C::get('GSITE_PLATFORM') == 'wordpress'){
if($this->_validated() === false){
$this->Form->updateAll(array('published' => 0), array('id <>' => $this->Form->id));
}
}
}
function save_list(){
parent::_save_list();
$this->redirect(r_('index.php?ext=chronoforms'));
}
function delete(){
parent::_delete();
$this->redirect(r_('index.php?ext=chronoforms'));
}
function copy(){
$session = \GCore\Libs\Base::getSession();
if(empty($this->data['gcb'])){
$session->setFlash('error', l_('CF_NO_FORMS_SELECTED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
$forms = $this->Form->find('all', array('conditions' => array('id' => $this->data['gcb'])));
if(!empty($forms)){
foreach($forms as $form){
if(isset($form['Form']['id'])){
$form['Form']['id'] = null;
//$form['Form']['published'] = 0;
$this->Form->save($form);
}
}
}
$session->setFlash('success', l_('CF_FORMS_COPIED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
function create_table(){
if(!empty($this->data['columns'])){
//save new table
$rows = array();
$pkey = '';
foreach($this->data['columns'] as $k => $column){
$pcs = array();
if($column['enabled'] == 1 AND !empty($column['name']) AND !empty($column['type'])){
$pcs[] = '`'.$column['name'].'`';
$pcs[] = $column['type'].(!empty($column['length']) ? '('.$column['length'].')' : '');
$pcs[] = !empty($column['null']) ? 'DEFAULT NULL' : 'NOT NULL';
if(!empty($column['extra'])){
$pcs[] = $column['extra'];
}
if(!empty($column['default']) AND empty($column['null'])){
$pcs[] = "DEFAULT '".$column['default']."'";
}
$rows[] = implode(' ', $pcs);
if(!empty($column['pkey'])){
$pkey = $column['name'];
}
}
}
if(!empty($pkey)){
$rows[] = 'PRIMARY KEY (`'.$pkey.'`)';
}
$rows = array('CREATE TABLE IF NOT EXISTS `'.$this->data['table_name'].'` (', implode(",\n", $rows));
$rows[] = ') DEFAULT CHARSET=utf8;';
$sql = implode("\n", $rows);
//pr($sql);
if($this->Form->dbo->exec($this->Form->dbo->_prefixTable($sql)) !== false){
$session = \GCore\Libs\Base::getSession();
$session->setFlash('success', 'The table has been created successfully.');
$this->redirect(r_('index.php?ext=chronoforms'));
}else{
$session = \GCore\Libs\Base::getSession();
$session->setFlash('error', 'Table creation failed.');
}
}else{
if(empty($this->data['gcb'])){
$session = \GCore\Libs\Base::getSession();
$session->setFlash('error', l_('CF_NO_FORMS_SELECTED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
$html = $this->Form->field('content', array('id' => $this->data['gcb'][0]));
preg_match_all('/name=("|\')([^(>|"|\')]*?)("|\')/i', $html, $names);
$names = !empty($names[2]) ? $names[2] : array();
$names = array_unique($names);
$form_name = $this->Form->field('title', array('id' => $this->data['gcb'][0]));
$this->set('table_name', '#__chronoengine_chronoforms_datatable_'.$form_name);
$basics = array(
'id' => array('name' => 'id', 'enabled' => 1, 'type' => 'INT', 'length' => 11, 'pkey' => 1, 'default' => '', 'extra' => 'auto_increment', 'null' => 0),
'uniq_id' => array('name' => 'uniq_id', 'enabled' => 1, 'type' => 'VARCHAR', 'length' => 50, 'pkey' => 0, 'default' => '', 'extra' => '', 'null' => 0),
'user_id' => array('name' => 'user_id', 'enabled' => 1, 'type' => 'INT', 'length' => 11, 'pkey' => 0, 'default' => '', 'extra' => '', 'null' => 0),
'created' => array('name' => 'created', 'enabled' => 1, 'type' => 'DATETIME', 'length' => '', 'pkey' => 0, 'default' => '0000-00-00 00:00:00', 'extra' => '', 'null' => 0),
'modified' => array('name' => 'modified', 'enabled' => 1, 'type' => 'DATETIME', 'length' => '', 'pkey' => 0, 'default' => '', 'extra' => '', 'null' => 1),
);
$this->set('names', array_merge(array_keys($basics), $names));
$this->data['columns'] = array_values($basics);
}
}
function backup(){
if(empty($this->data['gcb'])){
$session = \GCore\Libs\Base::getSession();
$session->setFlash('error', l_('CF_NO_FORMS_SELECTED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
$forms = $this->Form->find('all', array('conditions' => array('id' => $this->data['gcb'])));
$output = base64_encode(serialize($forms));
//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="' . 'CFV5_FormsBackup_ON_'.\GCore\Libs\Url::domain().'_'.date('d_M_Y_H:i:s').'.cf5bak"');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
}
else {
header('Content-Disposition: attachment; filename="' . 'CFV5_FormsBackup_ON_'.\GCore\Libs\Url::domain().'_'.date('d_M_Y_H:i:s').'.cf5bak"');
header('Pragma: no-cache');
}
print $output;
exit();
}
function restore(){
$files = $_FILES;
$v5 = 'cfbackup';
if(is_array($files) AND !empty($files[$v5]['size'])){
$session = \GCore\Libs\Base::getSession();
if(!\GCore\Libs\Upload::valid($files[$v5])){
$session->setFlash('error', l_('CF_FORMS_RESTORE_ERROR'));
return false;
}
if(!\GCore\Libs\Upload::not_empty($files[$v5])){
$session->setFlash('error', l_('CF_FORMS_RESTORE_ERROR'));
return false;
}
if(!\GCore\Libs\Upload::check_type($files[$v5], array('cf5bak'))){
$session->setFlash('error', l_('CF_FORMS_RESTORE_ERROR'));
return false;
}
$path = \GCore\C::get('GCORE_FRONT_PATH').DS.'cache';
$uploaded_file = \GCore\Libs\Upload::save($files[$v5]['tmp_name'], $path.DS.$files[$v5]['name']);
if(!$uploaded_file){
$session->setFlash('error', l_('CF_FORMS_RESTORE_ERROR'));
}else{
$data = file_get_contents($path.DS.$files[$v5]['name']);
\GCore\Libs\File::delete($path.DS.$files[$v5]['name']);
$forms = unserialize(base64_decode(trim($data)));
if(!empty($forms)){
foreach($forms as $form){
if(isset($form['Form']['id'])){
$form['Form']['id'] = null;
$form['Form']['published'] = 0;
$this->Form->save($form);
}
}
}
$session->setFlash('success', l_('CF_FORMS_RESTORED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
}
$v4 = 'cfbackupv4';
if(is_array($files) AND !empty($files[$v4]['size'])){
$session = \GCore\Libs\Base::getSession();
if(!\GCore\Libs\Upload::valid($files[$v4])){
$session->setFlash('error', l_('CF_FORMS_RESTORE_ERROR'));
return false;
}
if(!\GCore\Libs\Upload::not_empty($files[$v4])){
$session->setFlash('error', l_('CF_FORMS_RESTORE_ERROR'));
return false;
}
if(!\GCore\Libs\Upload::check_type($files[$v4], array('cf4bak'))){
$session->setFlash('error', l_('CF_FORMS_RESTORE_ERROR'));
return false;
}
$path = \GCore\C::get('GCORE_FRONT_PATH').DS.'cache';
$uploaded_file = \GCore\Libs\Upload::save($files[$v4]['tmp_name'], $path.DS.$files[$v4]['name']);
if(!$uploaded_file){
$session->setFlash('error', l_('CF_FORMS_RESTORE_ERROR'));
}else{
$data = file_get_contents($path.DS.$files[$v4]['name']);
$data = self::_load_v4_form($data);
\GCore\Libs\File::delete($path.DS.$files[$v4]['name']);
//pr($data);die();
//$forms = $data;
if(!empty($data)){
foreach($data as $group){
$form = array();
$form['Form']['id'] = null;
$form['Form']['published'] = 1;
$form['Form']['extras']['actions_config'] = array();
$form['Form']['title'] = $group['title'];
$form['Form']['extras']['fields'] = $group['fields'];
$this->Form->save($form);
}
}
$session->setFlash('success', l_('CF_FORMS_RESTORED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
}
}
public static function _load_v4_form($data){
$data = trim($data);
$forms_data = explode("\n", $data);
$return_forms = array();
if(!empty($data) AND !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));
eval('?>'.'<?php $fields = '.$form_row_data['wizardcode'].'; ?>');
//$fields = $form_row_data['wizardcode'];
$form_fields = array();
$count = 1;
if(is_array($fields)){
foreach($fields as $fid => $field){
$field_params = array();
$id = str_replace('field_', '', $fid);
$omit1 = $field['tag'].'_'.$field['type'].'_'.$id.'_'.$field['tag'].'_';
$omit2 = $field['tag'].'_'.$field['type'].'_'.$id.'_';
foreach($field as $k => $v){
if(strpos($k, $omit1) !== false){
$field_params[str_replace($omit1, '', $k)] = $v;
continue;
}
if(strpos($k, $omit2) !== false){
$field_params[str_replace($omit2, '', $k)] = $v;
continue;
}
$field_params[$k] = $v;
}
$field_params['label']['text'] = isset($field_params['label_text']) ? $field_params['label_text'] : '';
$field_params['label']['position'] = !empty($field_params['label_over']) ? 'top' : 'left';
$field_params['sublabel'] = !empty($field_params['instructions']) ? $field_params['instructions'] : '';
$field_params['id'] = !empty($field_params['id']) ? $field_params['id'] : $field_params['type'].$count;
if($field['type'] == 'container'){
$field_params['label'] = $field_params['label']['text'];
}
if(!empty($field_params['validations'])){
$validations = explode(',', $field_params['validations']);
foreach($validations as $validation){
$field_params['validation'][$validation] = 1;
}
}
$form_fields[$count] = $field_params;
$count++;
}
}
$return_forms[] = array('fields' => $form_fields, 'title' => $form_row_data['name']);
}
}
return $return_forms;
}
function install_action(){
$session = \GCore\Libs\Base::getSession();
if(isset($_FILES['upload'])){
$upload = $_FILES['upload'];
if(\GCore\Libs\Upload::valid($upload) AND \GCore\Libs\Upload::not_empty($upload) AND \GCore\Libs\Upload::check_type($upload, 'zip')){
$target = \GCore\C::get('GCORE_FRONT_PATH').'cache'.DS.rand().$upload['name'];
$result = \GCore\Libs\Upload::save($upload['tmp_name'], $target);
if(empty($result)){
$session->setFlash('error', l_('CF_ACTION_UPLOAD_ERROR'));
$this->redirect(r_('index.php?ext=chronoforms&act=install_action'));
}
//file upload, let's extract it
$zip = new \ZipArchive();
$handler = $zip->open($target);
if($handler === true){
$extract_path = \GCore\C::ext_path('chronoforms', 'admin').'actions'.DS;
$zip->extractTo($extract_path);
$zip->close();
unlink($target);
$session->setFlash('success', l_('CF_ACTION_INSTALL_SUCCESS'));
$this->redirect(r_('index.php?ext=chronoforms'));
}else{
$session->setFlash('error', l_('CF_ACTION_EXTRACT_ERROR'));
$this->redirect(r_('index.php?ext=chronoforms&act=install_action'));
}
}else{
$session->setFlash('error', l_('CF_ACTION_FILE_ERROR'));
$this->redirect(r_('index.php?ext=chronoforms&act=install_action'));
}
}
}
function install_locale(){
$session = \GCore\Libs\Base::getSession();
if(isset($_FILES['upload'])){
$upload = $_FILES['upload'];
if(\GCore\Libs\Upload::valid($upload) AND \GCore\Libs\Upload::not_empty($upload) AND \GCore\Libs\Upload::check_type($upload, 'zip')){
$target = \GCore\C::get('GCORE_FRONT_PATH').'cache'.DS.rand().$upload['name'];
$result = \GCore\Libs\Upload::save($upload['tmp_name'], $target);
if(empty($result)){
$session->setFlash('error', l_('CF_LOCALE_UPLOAD_ERROR'));
$this->redirect(r_('index.php?ext=chronoforms&act=install_locale'));
}
//file upload, let's extract it
$zip = new \ZipArchive();
$handler = $zip->open($target);
if($handler === true){
$extract_path = \GCore\C::ext_path('chronoforms', 'admin').'locales'.DS;
$zip->extractTo($extract_path);
$zip->close();
unlink($target);
$session->setFlash('success', l_('CF_LOCALE_INSTALL_SUCCESS'));
$this->redirect(r_('index.php?ext=chronoforms'));
}else{
$session->setFlash('error', l_('CF_LOCALE_EXTRACT_ERROR'));
$this->redirect(r_('index.php?ext=chronoforms&act=install_locale'));
}
}else{
$session->setFlash('error', l_('CF_LOCALE_FILE_ERROR'));
$this->redirect(r_('index.php?ext=chronoforms&act=install_locale'));
}
}
}
function demos(){
$session = \GCore\Libs\Base::getSession();
$demos_file = \GCore\C::ext_path('chronoforms', 'admin').DS.'demos'.DS.'demos.cf5bak';
if(!$demos_file){
$session->setFlash('error', l_('CF_FORMS_RESTORE_ERROR'));
}else{
$data = file_get_contents($demos_file);
//\GCore\Libs\File::delete($path.DS.$files['cfbackup']['name']);
$forms = unserialize(base64_decode(trim($data)));
if(!empty($forms)){
foreach($forms as $form){
if(isset($form['Form']['id'])){
$form['Form']['id'] = null;
//$form['Form']['published'] = 0;
$this->Form->save($form);
}
}
}
$session->setFlash('success', l_('CF_FORMS_RESTORED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
}
function delete_cache(){
$path = \GCore\C::get('GCORE_FRONT_PATH').'cache'.DS;
$files = \GCore\Libs\Folder::getFiles($path);
$count = 0;
foreach($files as $k => $file){
if(basename($file) != 'index.html' AND basename($file) != 'demos.cf5bak'){
$result = \GCore\Libs\File::delete($file);
if($result){
$count++;
}
}
}
$session = \GCore\Libs\Base::getSession();
$session->setFlash('info', $count.' '.l_('CACHE_FILES_DELETED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
function list_data(){
if(empty($this->data['table'])){
$session = \GCore\Libs\Base::getSession();
$session->setFlash('error', l_('CF_NO_TABLES_SELECTED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
$id = $this->Request->data('form_id', null);
$this->Form->id = $id;
$form = $this->Form->load();
\GCore\Libs\Model::generateModel('ListData', array('tablename' => $this->data['table']));
$list_model = '\GCore\Models\ListData';
$this->sort_model = $list_model::getInstance();
$this->_sortable();
$this->paginate_model = $list_model::getInstance();
$this->_paginate();
$rows = $list_model::getInstance()->find('all');
$this->set('rows', $rows);
$this->set('form', $form);
$this->set('pkey', $list_model::getInstance()->pkey);
}
function show_data(){
if(empty($this->data['table'])){
$session = \GCore\Libs\Base::getSession();
$session->setFlash('error', l_('CF_NO_TABLES_SELECTED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
\GCore\Libs\Model::generateModel('ListData', array('tablename' => $this->data['table']));
$list_model = '\GCore\Models\ListData';
$fields = $list_model::getInstance()->dbo->getTableColumns($this->data['table']);
$this->set('fields', $fields);
if(!empty($this->data['gcb'])){
$id = $this->data['gcb'];
}else{
$id = $this->Request->data($list_model::getInstance()->pkey, null);
}
$list_model::getInstance()->id = $id;
$row = $list_model::getInstance()->load();
$this->set('row', $row);
}
function delete_data(){
if(empty($this->data['table'])){
$session = \GCore\Libs\Base::getSession();
$session->setFlash('error', l_('CF_NO_TABLES_SELECTED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
\GCore\Libs\Model::generateModel('ListData', array('tablename' => $this->data['table']));
$list_model = '\GCore\Models\ListData';
$this->delete_model = $list_model::getInstance();
parent::_delete();
$this->redirect(r_('index.php?ext=chronoforms&act=list_data&table='.$this->data['table'].'&form_id='.$this->Request->data('form_id', '')));
}
function backup_data(){
if(empty($this->data['table'])){
$session = \GCore\Libs\Base::getSession();
$session->setFlash('error', l_('CF_NO_TABLES_SELECTED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
$form = new \stdClass();
$form->actions_config[0] = array('tablename' => $this->data['table'], 'enabled' => 1);
$exporter = new \GCore\Admin\Extensions\Chronoforms\Actions\CsvExport\CsvExport();
$exporter->execute($form, 0);
}
function backup_records(){
if(empty($this->data['table'])){
$session = \GCore\Libs\Base::getSession();
$session->setFlash('error', l_('CF_NO_TABLES_SELECTED'));
$this->redirect(r_('index.php?ext=chronoforms'));
}
\GCore\Libs\Model::generateModel('ListData', array('tablename' => $this->data['table']));
$list_model = '\GCore\Models\ListData';
$list = $list_model::getInstance()->find('all', array('conditions' => array($list_model::getInstance()->pkey => $this->data['gcb'])));
$rows = array();
foreach($list as $i){
$rows[] = $i['ListData'];
}
$form = new \stdClass();
$form->actions_config[0] = array('data_path' => 'ListData', 'enabled' => 1);
$form->data['ListData'] = $rows;
$exporter = new \GCore\Admin\Extensions\Chronoforms\Actions\CsvExport\CsvExport();
$exporter->execute($form, 0);
}
function action_task(){
$action = \GCore\Libs\Str::camilize($this->data['action_name']);
$fn = $this->data['action_fn'];
$class = '\GCore\Admin\Extensions\Chronoforms\Actions\\'.$action.'\\'.$action;
$class = new $class();
$class->$fn($this->data);
}
function page_settings(){
}
function render_field(){
if(!empty($this->data['Form']['extras']['fields'])){
$config = array_values($this->data['Form']['extras']['fields']);
/*
$ids = array_keys($this->data['Form']['extras']['fields']);
$id = $ids[0];
if(!empty($config[0]['code'])){
foreach($config[0] as $k => $v){
$config[0]['code'] = str_replace('$form->form["Form"]["extras"]["fields"]['.$id.']["'.$k.'"]', '"'.$v.'"', $config[0]['code']);
}
}
*/
//$multi_field = isset($this->data['multi_field']) ? 1 : 0;
//$this->set('multi_field', $multi_field);
$this->set('fdata', $config[0]);
}
}
function render_multi_field(){
$this->set('fields', $this->data['fields']);
$this->set('fields_count', $this->data['fields_count']);
}
function render_field_config(){
if(!empty($this->data['form_id']) AND !empty($this->data['field_id'])){
$k = $this->data['field_id'];
$this->Form->id = $this->data['form_id'];
$this->data = $this->Form->load();
$wizard_field = $this->data['Form']['extras']['fields'][$k];
$type = isset($wizard_field['render_type']) ? $wizard_field['render_type'] : $wizard_field['type'];
$class = '\GCore\Admin\Extensions\Chronoforms\Fields\\'.\GCore\Libs\Str::camilize($type).'\\'.\GCore\Libs\Str::camilize($type);
ob_start();
$class::config($wizard_field, $k);
$element_config = ob_get_clean();
$contents = str_replace('{N}', $k, $element_config);
$contents = \GCore\Libs\Str::replacer($contents, \GCore\Libs\Request::raw(), array('escape' => true));
$contents = \GCore\Helpers\DataLoader::load($contents, \GCore\Libs\Request::raw());
echo $contents;
}
}
function _validated(){
parent::_settings('chronoforms');
if(isset($this->data['Chronoforms']['validated']) AND (int)$this->data['Chronoforms']['validated'] == 1){
return true;
}
return false;
}
function settings(){
parent::_settings('chronoforms');
}
function save_settings(){
$result = parent::_save_settings('chronoforms');
$session = \GCore\Libs\Base::getSession();
if($result){
$session->setFlash('success', l_('SAVE_SUCCESS'));
}else{
$session->setFlash('error', l_('SAVE_ERROR'));
}
$this->redirect(r_('index.php?ext=chronoforms&act=settings'));
}
function validateinstall(){
$domain = str_replace(array('http://', 'https://'), '', \GCore\Libs\Url::domain());
$this->set('domain', $domain);
if(!empty($this->data['license_key'])){
$session = \GCore\Libs\Base::getSession();
$fields = '';
$update_fld = 'validated';
if($this->data['pid'] == 18){
$update_fld = 'validated_paypal';
}
if($this->data['pid'] == 7){
$update_fld = 'validated_authorize';
}
if($this->data['pid'] == 31){
$update_fld = 'validated_2checkout';
}
//$postfields = array();
unset($this->data['option']);
unset($this->data['act']);
foreach($this->data as $key => $value){
$fields .= "$key=".urlencode($value)."&";
}
$target_url = 'http://www.chronoengine.com/index.php?option=com_chronocontact&task=extra&chronoformname=validateLicense';
$output = '-';
if(ini_get('allow_url_fopen')){
$output = file_get_contents($target_url.'&'.rtrim($fields, "& "));
}else if(function_exists('curl_version')){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim($fields, "& "));
$output = curl_exec($ch);
curl_close($ch);
}
if($output == '-'){
$session->setFlash('error', 'Validation error, Could not connect to the remote server, your host does not have neither the CURL nor the allow_url_fopen.');
$this->redirect(r_('index.php?ext=chronoforms'));
}
$validstatus = $output;
if($validstatus == 'valid'){
parent::_settings('chronoforms');
$this->data['Chronoforms'][$update_fld] = 1;
$result = parent::_save_settings('chronoforms');
if($result){
$session->setFlash('success', 'Validated successfully.');
$this->redirect(r_('index.php?ext=chronoforms'));
}else{
$session->setFlash('error', 'Validation error.');
}
}else if($validstatus == 'invalid'){
parent::_settings('chronoforms');
$this->data['Chronoforms'][$update_fld] = 0;
$result = parent::_save_settings('chronoforms');
$session->setFlash('error', 'Validation error, you have provided incorrect data.');
$this->redirect(r_('index.php?ext=chronoforms'));
}else{
if(!empty($this->data['instantcode'])){
$step1 = base64_decode(trim($this->data['instantcode']));
$step2 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), 0, 7), '', $step1);
$step3 = str_replace(substr(md5(str_replace('www.', '', strtolower($matches[2]))), - strlen(md5(str_replace('www.', '', strtolower($matches[2])))) + 7), '', $step2);
$step4 = str_replace(substr($this->data['license_key'], 0, 10), '', $step3);
$step5 = str_replace(substr($this->data['license_key'], - strlen($this->data['license_key']) + 10), '', $step4);
//echo (int)$step5;return;
//if((((int)$step5 + (24 * 60 * 60)) > strtotime(date('d-m-Y H:i:s')))||(((int)$step5 - (24 * 60 * 60)) < strtotime(date('d-m-Y H:i:s')))){
if(((int)$step5 < (strtotime("now") + (24 * 60 * 60))) AND ((int)$step5 > (strtotime("now") - (24 * 60 * 60)))){
parent::_settings('chronoforms');
$this->data['Chronoforms'][$update_fld] = 1;
$result = parent::_save_settings('chronoforms');
if($result){
$session->setFlash('success', 'Validated successfully.');
$this->redirect(r_('index.php?ext=chronoforms'));
}else{
$session->setFlash('error', 'Validation error.');
}
}else{
$session->setFlash('error', 'Validation error, Invalid instant code provided.');
$this->redirect(r_('index.php?ext=chronoforms'));
}
}else{
if(!empty($this->data['serial_number'])){
$blocks = explode("-", trim($this->data['serial_number']));
$hash = md5($this->data['pid'].$this->data['license_key'].str_replace('www.', '', $domain).$blocks[3]);
if(substr($hash, 0, 7) == $blocks[4]){
parent::_settings('chronoforms');
$this->data['Chronoforms'][$update_fld] = 1;
$result = parent::_save_settings('chronoforms');
if($result){
$session->setFlash('success', 'Validated successfully.');
$this->redirect(r_('index.php?ext=chronoforms'));
}else{
$session->setFlash('error', 'Validation error.');
}
}else{
$session->setFlash('error', 'Serial number invalid!');
}
}
$session->setFlash('error', 'Validation error, please try again using the Instant Code, or please contact us on www.chronoengine.com');
$this->redirect(r_('index.php?ext=chronoforms'));
}
}
}
}
}
?>