PageRenderTime 75ms CodeModel.GetById 37ms RepoModel.GetById 0ms app.codeStats 1ms

/administrator/components/com_rsform/admin.rsform.php

https://github.com/viollarr/alab
PHP | 1482 lines | 1150 code | 179 blank | 153 comment | 50 complexity | 5c917ae1856538d60544f0044eee2196 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0, AGPL-3.0, Apache-2.0, BSD-3-Clause, GPL-3.0
  1. <?php
  2. /**
  3. * @version 1.2.0
  4. * @package RSform!Pro 1.2.0
  5. * @copyright (C) 2007-2009 www.rsjoomla.com
  6. * @license Commercial License, http://www.rsjoomla.com/terms-and-conditions.html
  7. */
  8. ini_set('max_execution_time','300');
  9. require_once(dirname(__FILE__).'/../../../components/com_rsform/controller/adapter.php');
  10. //create the RSadapter
  11. $GLOBALS['RSadapter'] = new RSadapter();
  12. $RSadapter = $GLOBALS['RSadapter'];
  13. //$RSadapter = $GLOBALS['RSadapter'];
  14. //require classes
  15. require_once(_RSFORM_BACKEND_ABS_PATH.'/admin.rsform.html.php');
  16. require_once(_RSFORM_FRONTEND_ABS_PATH.'/rsform.class.php');
  17. //require controller
  18. require_once(_RSFORM_FRONTEND_ABS_PATH.'/controller/functions.php');
  19. //require backend language file
  20. require_once(_RSFORM_FRONTEND_ABS_PATH.'/languages/'._RSFORM_BACKEND_LANGUAGE.'.php');
  21. //get task
  22. $task = $RSadapter->getParam($_REQUEST, 'task');
  23. // get form id
  24. $formId = $RSadapter->getParam($_REQUEST, 'formId');
  25. /*
  26. $cid = mosGetParam($_REQUEST, 'cid', array());
  27. $layout= mosGetParam($_GET, 'layout', null);
  28. $limit = intval( mosGetParam( $_REQUEST, 'limit', 15 ) );
  29. $limitstart = intval( mosGetParam( $_REQUEST, 'limitstart', 0 ) );
  30. */
  31. switch($task)
  32. {
  33. case 'richtext.show':
  34. richtextShow();
  35. break;
  36. //FORMS
  37. case 'forms.manage':
  38. formsManage();
  39. break;
  40. case 'forms.edit':
  41. formsEdit($formId);
  42. break;
  43. case 'forms.cancel':
  44. formsCancel($option);
  45. break;
  46. case 'forms.save':
  47. formsSave($option, 0);
  48. break;
  49. case 'forms.apply':
  50. formsSave($option, 1);
  51. break;
  52. case 'forms.delete':
  53. formsDelete($option);
  54. break;
  55. case 'forms.copy':
  56. formsCopy($option);
  57. break;
  58. case "forms.publish":
  59. formsPublish( $option, 1);
  60. break;
  61. case "forms.unpublish":
  62. formsPublish( $option, 0 );
  63. break;
  64. case "forms.preview":
  65. formsPreview( $option );
  66. break;
  67. case "forms.menuadd.screen":
  68. formsMenuaddScreen( $option );
  69. break;
  70. case "forms.menuadd.process":
  71. formsMenuaddProcess( $option );
  72. break;
  73. case 'forms.changeAutoGenerateLayout':
  74. formsChangeAutoGenerateLayout($option, $formId);
  75. exit();
  76. break;
  77. //COMPONENTS
  78. case 'components.validate.name':
  79. componentsValidateName($option);
  80. exit();
  81. break;
  82. case 'components.display':
  83. componentsDisplay($option);
  84. exit();
  85. break;
  86. case 'components.movedown':
  87. componentsMoveDown($option);
  88. break;
  89. case 'components.moveup':
  90. componentsMoveUp($option);
  91. break;
  92. case 'components.copy.screen':
  93. componentsCopyScreen($option);
  94. break;
  95. case 'components.copy.process':
  96. componentsCopyProcess($option);
  97. break;
  98. case 'components.cancel':
  99. componentsCancel($option);
  100. break;
  101. case 'components.changestatus':
  102. componentsChangeStatus($option);
  103. exit();
  104. break;
  105. case 'components.remove':
  106. componentsRemove($option);
  107. exit();
  108. break;
  109. //LAYOUTS
  110. case 'layouts.generate':
  111. layoutsGenerate($option, $formId);
  112. exit();
  113. break;
  114. case 'layouts.saveLayoutName':
  115. layoutsSaveName($formId);
  116. exit();
  117. break;
  118. //SUBMISSIONS
  119. case 'submissions.manage':
  120. submissionsManage($option, $formId);
  121. break;
  122. case 'submissions.edit':
  123. submissionsEdit($option, $formId);
  124. break;
  125. case 'submissions.delete':
  126. submissionsDelete($option);
  127. break;
  128. case 'submissions.delete.all':
  129. submissionsDelete($option,-1);
  130. break;
  131. case 'submissions.export':
  132. submissionsExport($option);
  133. break;
  134. case 'submissions.export.process':
  135. submissionsExportProcess($option);
  136. break;
  137. //CONFIGURATION
  138. case 'configuration.save':
  139. configurationSave($option);
  140. break;
  141. case 'configuration.edit':
  142. configurationEdit($option);
  143. break;
  144. //BACKUP/RESTORE
  145. case 'backup.restore':
  146. backupRestore($option);
  147. break;
  148. case 'backup.download':
  149. backupDownload($option);
  150. break;
  151. //MIGRATION
  152. case 'migration.process':
  153. migrationProcess($option);
  154. break;
  155. case 'migration.screen':
  156. migrationScreen($option);
  157. break;
  158. //UPDATE
  159. case 'updates.manage':
  160. updatesManage($option);
  161. break;
  162. case 'update.upload.process':
  163. updateUploadProcess($option);
  164. break;
  165. //MAPPINGS
  166. case 'mappings.getColumns':
  167. mappingsGetColumns($option);
  168. exit();
  169. break;
  170. case 'mappings.saveMapping':
  171. mappingsSaveMapping($option);
  172. exit();
  173. break;
  174. case 'mappings.deleteMapping':
  175. mappingsDeleteMapping($option);
  176. exit();
  177. break;
  178. //PLUGINS
  179. case 'plugins.remove':
  180. pluginsRemove($option);
  181. break;
  182. //CONTROL PANEL
  183. case 'saveRegistration':
  184. saveRegistration($option);
  185. break;
  186. default:
  187. rsform_HTML::controlPanel();
  188. break;
  189. }
  190. function richtextShow()
  191. {
  192. $RSadapter = $GLOBALS['RSadapter'];
  193. $formId = intval($RSadapter->getParam($_GET,'formId'));
  194. $openerId = RScleanVar($RSadapter->getParam($_GET, 'openerId'));
  195. $additionalHTML = '
  196. <script type="text/javascript">
  197. window.opener.document.getElementById(\''.$openerId.'\').innerHTML = document.getElementById(\''.$openerId.'\').value;
  198. </script>
  199. ';
  200. if (isset($_POST[$openerId]))
  201. $_POST[$openerId] = RScleanVar(trim($_POST[$openerId]));
  202. if(isset($_POST['act']))
  203. {
  204. switch($_POST['act'])
  205. {
  206. case 'save':
  207. default:
  208. mysql_query("UPDATE `{$RSadapter->tbl_rsform_forms}` SET `$openerId` = '".$_POST[$openerId]."' WHERE FormId = '$formId'") or die(mysql_error());
  209. break;
  210. case 'saveclose':
  211. mysql_query("UPDATE `{$RSadapter->tbl_rsform_forms}` SET `$openerId` = '".$_POST[$openerId]."' WHERE FormId = '$formId'") or die(mysql_error());
  212. $additionalHTML .= '
  213. <script type="text/javascript">
  214. window.close();
  215. </script>
  216. ';
  217. break;
  218. }
  219. }
  220. //get value
  221. $r = @mysql_result(mysql_query("SELECT $openerId FROM `{$RSadapter->tbl_rsform_forms}` WHERE FormId = '$formId'"),0);
  222. rsform_HTML::richtextShow($formId, $openerId, $r, $additionalHTML);
  223. }
  224. //////////////////////////////////////// FORMS ////////////////////////////////////////
  225. /**
  226. * @desc Forms Manager Screen
  227. */
  228. function formsManage()
  229. {
  230. $RSadapter = $GLOBALS['RSadapter'];
  231. $rez = mysql_query("SELECT * FROM `{$RSadapter->tbl_rsform_forms}` ORDER BY `FormId` DESC") or die(mysql_error());
  232. $rows = array();
  233. while($r=mysql_fetch_assoc($rez))
  234. {
  235. //build today, this month, this year
  236. $r['_todaySubmissions'] = @mysql_result(mysql_query("SELECT COUNT(`SubmissionId`) cnt FROM `{$RSadapter->tbl_rsform_submissions}` WHERE date_format(DateSubmitted,'%Y-%m-%d') = '".date('Y-m-d')."' AND FormId='{$r['FormId']}'"),0);
  237. $r['_monthSubmissions'] = @mysql_result(mysql_query("SELECT COUNT(`SubmissionId`) cnt FROM `{$RSadapter->tbl_rsform_submissions}` WHERE date_format(DateSubmitted,'%Y-%m') = '".date('Y-m')."' AND FormId='{$r['FormId']}'"),0);
  238. $r['_allSubmissions'] = @mysql_result(mysql_query("SELECT COUNT(`SubmissionId`) cnt FROM `{$RSadapter->tbl_rsform_submissions}` WHERE FormId='{$r['FormId']}'"),0);
  239. $rows[] = $r;
  240. }
  241. rsform_HTML::formsManage($rows);
  242. }
  243. /**
  244. * Forms Publish/Unpublish Process
  245. *
  246. * @param str $option
  247. * @param int $publishform
  248. */
  249. function formsPublish( $option, $publishform=1 )
  250. {
  251. $RSadapter = $GLOBALS['RSadapter'];
  252. $publishform = intval($publishform);
  253. $cids = $RSadapter->getParam($_POST,'cid');
  254. $total = count($cids);
  255. $formIds = implode(',', $cids);
  256. if ($total > 0)
  257. mysql_query("UPDATE $RSadapter->tbl_rsform_forms SET Published = '".$publishform."' WHERE FormId IN ($formIds)");
  258. switch ($publishform)
  259. {
  260. case 1:
  261. $msg = $total ._RSFORM_BACKEND_SUC_PUBL_FORM.' ';
  262. break;
  263. case 0:
  264. default:
  265. $msg = $total ._RSFORM_BACKEND_SUC_UNPUBL_FORM.' ';
  266. break;
  267. }
  268. $RSadapter->redirect( _RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=forms.manage', $msg );
  269. }
  270. /**
  271. * Forms Menu Add Screen
  272. *
  273. * @param str $option
  274. */
  275. function formsMenuaddScreen($option)
  276. {
  277. $RSadapter = $GLOBALS['RSadapter'];
  278. $formId = intval($RSadapter->getParam($_REQUEST,'formId'));
  279. //get form title
  280. $formTitle = @mysql_result(mysql_query("SELECT FormTitle FROM `$RSadapter->tbl_rsform_forms` WHERE FormId = '$formId'"),0);
  281. $menus = $RSadapter->getMenus();
  282. rsform_HTML::formsMenuaddScreen($option, $menus, $formId, $formTitle);
  283. }
  284. /**
  285. * Forms Menu Add Process
  286. *
  287. * @param str $option
  288. */
  289. function formsMenuaddProcess($option)
  290. {
  291. $RSadapter = $GLOBALS['RSadapter'];
  292. $formId = intval($RSadapter->getParam($_REQUEST,'formId'));
  293. $menu = $RSadapter->getParam($_REQUEST,'menu');
  294. $menuTitle = $RSadapter->getParam($_REQUEST,'menutitle');
  295. //get form title
  296. $formTitle = @mysql_result(mysql_query("SELECT FormTitle FROM `$RSadapter->tbl_rsform_forms` WHERE FormId = '$formId'"),0);
  297. //insert
  298. $RSadapter->addMenu($formId, $menuTitle, $menu);
  299. $RSadapter->redirect( _RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=forms.manage', _RSFORM_BACKEND_FORMS_MENUADD_ADDED );
  300. }
  301. /**
  302. * Forms Preview Process
  303. *
  304. * @param str $option
  305. */
  306. function formsPreview($option)
  307. {
  308. $RSadapter = $GLOBALS['RSadapter'];
  309. $formId = intval($RSadapter->getParam($_REQUEST,'formId'));
  310. ?>
  311. <script type="text/javascript">
  312. window.open('<?php echo _RSFORM_FRONTEND_SCRIPT_PATH.'/index.php?option='.$option.'&formId='.$formId;?>');
  313. document.location='<?php echo _RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=forms.edit&formId='.$formId;?>';
  314. </script>
  315. <?php
  316. }
  317. /**
  318. * Forms Copy Process
  319. */
  320. function formsCopy($option)
  321. {
  322. $RSadapter = $GLOBALS['RSadapter'];
  323. $formIds = $RSadapter->getParam($_POST,'cid');
  324. $total = count($formIds);
  325. if ($total > 0)
  326. foreach($formIds as $formId)
  327. RScopyForm($formId);
  328. $msg = $total._RSFORM_BACKEND_FORMS_COPY.' ';
  329. $RSadapter->redirect( _RSFORM_BACKEND_SCRIPT_PATH.'?option='. $option .'&task=forms.manage', $msg );
  330. }
  331. /**
  332. * Forms Delete Process
  333. *
  334. * @param str $option
  335. */
  336. function formsDelete($option)
  337. {
  338. $RSadapter = $GLOBALS['RSadapter'];
  339. $formIds = $RSadapter->getParam($_POST,'cid');
  340. $total = count($formIds);
  341. if ($total > 0)
  342. foreach($formIds as $formId)
  343. {
  344. $formId = intval($formId);
  345. //Delete Submissions
  346. $submissionIds = array();
  347. $result = mysql_query("SELECT SubmissionId FROM $RSadapter->tbl_rsform_submissions WHERE FormId = '$formId'");
  348. while ($row = mysql_fetch_assoc($result))
  349. $submissionIds[] = $row['SubmissionId'];
  350. $submissions = implode(',',$submissionIds);
  351. if (count($submissionIds) > 0)
  352. {
  353. mysql_query("DELETE FROM $RSadapter->tbl_rsform_submission_values WHERE SubmissionId IN ({$submissions})");
  354. mysql_query("DELETE FROM $RSadapter->tbl_rsform_submissions WHERE SubmissionId IN '{$submissions}'");
  355. }
  356. //Delete Components
  357. $componentIds = array();
  358. $result = mysql_query("SELECT ComponentId FROM $RSadapter->tbl_rsform_components WHERE FormId = '$formId'");
  359. while($row = mysql_fetch_assoc($result))
  360. $componentIds[] = $row['ComponentId'];
  361. $components = implode(',',$componentIds);
  362. if (count($componentIds) > 0)
  363. {
  364. mysql_query("DELETE FROM $RSadapter->tbl_rsform_properties WHERE ComponentId IN '{$components}'");
  365. mysql_query("DELETE FROM $RSadapter->tbl_rsform_components WHERE ComponentId IN '{$components}'");
  366. }
  367. //Delete Forms
  368. mysql_query("DELETE FROM $RSadapter->tbl_rsform_forms WHERE FormId = '{$formId}'");
  369. }
  370. $msg = $total ._RSFORM_BACKEND_FORMS_DEL.' ';
  371. $RSadapter->redirect( _RSFORM_BACKEND_SCRIPT_PATH.'?option='. $option .'&task=forms.manage', $msg );
  372. }
  373. /**
  374. * Forms Edit Screen
  375. *
  376. * @param int $formId
  377. */
  378. function formsEdit($formId)
  379. {
  380. $RSadapter = $GLOBALS['RSadapter'];
  381. global $option;
  382. $formId = intval($formId);
  383. if(isset($_POST['ordering']))
  384. {
  385. $formId = intval($_POST['formId']);
  386. $order = $_POST['ordering'];
  387. asort($order);
  388. $i=1;
  389. foreach($order as $key => $val)
  390. {
  391. $val = $i++;
  392. $key = intval($key);
  393. mysql_query("update `{$RSadapter->tbl_rsform_components}` set `Order`='$val' where ComponentId='$key'") or die(mysql_error());
  394. }
  395. }
  396. if (isset($_GET['formId']))
  397. $formId = intval($_GET['formId']);
  398. if (!isset($_GET['formId']) && !isset($_POST['formId']))
  399. {
  400. mysql_query("insert into `{$RSadapter->tbl_rsform_forms}` (`FormName`,`FormTitle`,`FormLayout`,`FormLayoutName`,`FormLayoutAutogenerate`) values('"._RSFORM_BACKEND_FORMS_EDIT_NO_FORM_NAME."','"._RSFORM_BACKEND_FORMS_EDIT_NO_FORM_TITLE."','','inline','1')") or die(mysql_error());
  401. $formId = mysql_insert_id();
  402. $layout = @include(_RSFORM_BACKEND_ABS_PATH.'/layouts/inline.php');
  403. mysql_query("update `{$RSadapter->tbl_rsform_forms}` SET `FormLayout` = '$layout' WHERE FormId = '$formId'") or die(mysql_error());
  404. }
  405. if(isset($_POST['COMPONENTTYPE']))
  406. {
  407. if($_POST['componentIdToEdit']!=-1)
  408. {
  409. foreach($_POST['param'] as $key=>$val)
  410. {
  411. $_POST['componentIdToEdit'] = intval($_POST['componentIdToEdit']);
  412. $val = RScleanVar($val);
  413. $key = RScleanVar($key);
  414. mysql_query("update `{$RSadapter->tbl_rsform_properties}` set PropertyValue='$val' where ComponentId='{$_POST['componentIdToEdit']}' and PropertyName='{$key}'") or die(mysql_error());
  415. }
  416. }
  417. else
  418. {
  419. $nextOrder = @mysql_result(mysql_query("select max(`Order`)+1 as MO from `{$RSadapter->tbl_rsform_components}` where FormId='$formId'"),0);
  420. mysql_query("insert into `{$RSadapter->tbl_rsform_components}` (FormId,ComponentTypeId,`Order`) values ('$_POST[formId]','$_POST[COMPONENTTYPE]','$nextOrder')") or die(mysql_error());
  421. $componentId = @mysql_result(mysql_query("select max(ComponentId) as MCI from `{$RSadapter->tbl_rsform_components}`"),0);
  422. $values = $_POST['param'];
  423. foreach($values as $key => $value)
  424. {
  425. $value = RScleanVar($value);
  426. $key = RScleanVar($key);
  427. mysql_query("insert into `{$RSadapter->tbl_rsform_properties}` (ComponentId,PropertyName,PropertyValue) values ('$componentId','$key','$value')") or die(mysql_error());
  428. }
  429. }
  430. $formId = intval($_POST['formId']);
  431. }
  432. $row = mysql_fetch_assoc(mysql_query("SELECT * FROM `{$RSadapter->tbl_rsform_forms}` WHERE FormId='{$formId}'"));
  433. rsform_HTML::formsEdit($formId, $row);
  434. }
  435. /**
  436. * Forms Save Process
  437. *
  438. * @param str $option
  439. * @param int $apply
  440. */
  441. function formsSave($option,$apply=0)
  442. {
  443. $RSadapter = $GLOBALS['RSadapter'];
  444. foreach($_POST as $key=>$value)
  445. $row[$key] = RScleanVar($RSadapter->getParam($_POST,$key));
  446. // `FormLayoutAutogenerate`= '{$row['FormLayoutAutogenerate']}',
  447. $query = mysql_query("
  448. UPDATE `{$RSadapter->tbl_rsform_forms}` SET
  449. `FormName` = '{$row['FormName']}',
  450. `FormLayout` = '{$row['FormLayout']}',
  451. `FormTitle` = '{$row['FormTitle']}',
  452. `ReturnUrl` = '{$row['ReturnUrl']}',
  453. `UserEmailTo` = '{$row['UserEmailTo']}',
  454. `UserEmailCC` = '{$row['UserEmailCC']}',
  455. `UserEmailBCC` = '{$row['UserEmailBCC']}',
  456. `UserEmailFrom` = '{$row['UserEmailFrom']}',
  457. `UserEmailReplyTo` = '{$row['UserEmailReplyTo']}',
  458. `UserEmailFromName` = '{$row['UserEmailFromName']}',
  459. `UserEmailSubject` = '{$row['UserEmailSubject']}',
  460. `UserEmailMode` = '{$row['UserEmailMode']}',
  461. `UserEmailAttach` = '{$row['UserEmailAttach']}',
  462. `UserEmailAttachFile` = '{$row['UserEmailAttachFile']}',
  463. ".($row['UserEmailMode'] ? '':"`UserEmailText` = '{$row['UserEmailText']}',")."
  464. ".($row['AdminEmailMode'] ? '':"`AdminEmailText` = '{$row['AdminEmailText']}',")."
  465. `AdminEmailTo` = '{$row['AdminEmailTo']}',
  466. `AdminEmailCC` = '{$row['AdminEmailCC']}',
  467. `AdminEmailBCC` = '{$row['AdminEmailBCC']}',
  468. `AdminEmailFrom` = '{$row['AdminEmailFrom']}',
  469. `AdminEmailReplyTo` = '{$row['AdminEmailReplyTo']}',
  470. `AdminEmailFromName` = '{$row['AdminEmailFromName']}',
  471. `AdminEmailSubject` = '{$row['AdminEmailSubject']}',
  472. `AdminEmailMode` = '{$row['AdminEmailMode']}',
  473. `ScriptProcess` = '{$row['ScriptProcess']}',
  474. `ScriptProcess2` = '{$row['ScriptProcess2']}',
  475. `ScriptDisplay` = '{$row['ScriptDisplay']}'
  476. WHERE
  477. `FormId` = '{$row['formId']}';") or die(mysql_error());
  478. if(!$apply)
  479. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH."?option=$option&task=forms.manage", _RSFORM_BACKEND_FORMS_SAVE." ");
  480. else
  481. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH."?option=$option&task=forms.edit&formId=".$row['formId'], _RSFORM_BACKEND_FORMS_SAVE." ");
  482. }
  483. /**
  484. * Closes the form
  485. *
  486. * @param str $option
  487. */
  488. function formsCancel($option)
  489. {
  490. $RSadapter = $GLOBALS['RSadapter'];
  491. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH."?option=$option&task=forms.manage" );
  492. }
  493. /**
  494. * Change the AutoGenerate layout
  495. *
  496. * @param unknown_type $option
  497. * @param unknown_type $formId
  498. * @param unknown_type $formLayoutName
  499. */
  500. function formsChangeAutoGenerateLayout($option, $formId)
  501. {
  502. $RSadapter = $GLOBALS['RSadapter'];
  503. $formLayoutName = RScleanVar($RSadapter->getParam($_GET, 'formLayoutName'));
  504. $formId = intval($formId);
  505. mysql_query("UPDATE `{$RSadapter->tbl_rsform_forms}` SET `FormLayoutAutogenerate` = ABS(FormLayoutAutogenerate-1), `FormLayoutName`='$formLayoutName' WHERE `FormId` = '$formId'") or die(mysql_error());
  506. }
  507. //////////////////////////////////////// COMPONENTS ////////////////////////////////////////
  508. /**
  509. * Validates a component name
  510. *
  511. * @param str $option
  512. */
  513. function componentsValidateName($option)
  514. {
  515. $RSadapter = $GLOBALS['RSadapter'];
  516. $componentName = RScleanVar($RSadapter->getParam($_GET, 'componentName'));
  517. $currentComponentId = intval($RSadapter->getParam($_GET, 'currentComponentId'));
  518. $componentId = intval($RSadapter->getParam($_GET, 'componentId'));
  519. $componentType = intval($RSadapter->getParam($_GET, 'componentType'));
  520. $destination = $RSadapter->getParam($_GET, 'destination');
  521. $formId = intval($RSadapter->getParam($_GET, 'formId'));
  522. $componentName = trim($componentName);
  523. if(eregi('[^a-zA-Z0-9_ ]', $componentName ) || empty($componentName))
  524. {
  525. echo _RSFORM_BACKEND_COMPONENTS_VALIDATE_ERROR_UNIQUE_NAME;
  526. return;
  527. }
  528. //on file upload component, check destination
  529. if($componentType==9)
  530. {
  531. if (empty($destination))
  532. {
  533. echo _RSFORM_BACKEND_COMPONENTS_VALIDATE_ERROR_DESTINATION;
  534. return;
  535. }
  536. if(!is_dir($destination))
  537. {
  538. echo _RSFORM_BACKEND_COMPONENTS_VALIDATE_ERROR_DESTINATION_NOT_DIR;
  539. return;
  540. }
  541. if(!is_writable($destination))
  542. {
  543. echo _RSFORM_BACKEND_COMPONENTS_VALIDATE_ERROR_DESTINATION_NOT_WRITABLE;
  544. return;
  545. }
  546. }
  547. if ($currentComponentId == 0)
  548. $q="select
  549. `{$RSadapter->tbl_rsform_forms}`.`FormId`,
  550. `{$RSadapter->tbl_rsform_properties}`.`PropertyName`,
  551. `{$RSadapter->tbl_rsform_properties}`.`PropertyValue`
  552. from `{$RSadapter->tbl_rsform_components}`
  553. left join `{$RSadapter->tbl_rsform_properties}` on `{$RSadapter->tbl_rsform_components}`.`ComponentId`=`{$RSadapter->tbl_rsform_properties}`.`ComponentId`
  554. left join {$RSadapter->tbl_rsform_forms} on `{$RSadapter->tbl_rsform_components}`.`FormId`=`{$RSadapter->tbl_rsform_forms}`.`FormId`
  555. where `{$RSadapter->tbl_rsform_forms}`.`FormId`='$_GET[formId]' and `{$RSadapter->tbl_rsform_properties}`.PropertyName='NAME' and `{$RSadapter->tbl_rsform_properties}`.PropertyValue='$_GET[componentName]'";
  556. else
  557. $q="select
  558. `{$RSadapter->tbl_rsform_forms}`.`FormId`,
  559. `{$RSadapter->tbl_rsform_properties}`.`PropertyName`,
  560. `{$RSadapter->tbl_rsform_properties}`.`PropertyValue`
  561. from {$RSadapter->tbl_rsform_components}
  562. left join `{$RSadapter->tbl_rsform_properties}` on `{$RSadapter->tbl_rsform_components}`.ComponentId={$RSadapter->tbl_rsform_properties}.ComponentId
  563. left join {$RSadapter->tbl_rsform_forms} on `{$RSadapter->tbl_rsform_components}`.FormId={$RSadapter->tbl_rsform_forms}.FormId
  564. where {$RSadapter->tbl_rsform_forms}.FormId='$formId' and `{$RSadapter->tbl_rsform_properties}`.PropertyName='NAME' and `{$RSadapter->tbl_rsform_properties}`.PropertyValue='$componentName' and `{$RSadapter->tbl_rsform_components}`.ComponentId!=$_GET[currentComponentId]";
  565. $exists = mysql_num_rows(mysql_query($q));
  566. if ($exists)
  567. echo _RSFORM_BACKEND_COMPONENTS_VALIDATE_ERROR_UNIQUE_NAME;
  568. else
  569. echo 'Ok';
  570. exit();
  571. }
  572. /**
  573. * Displays a component in the backend.
  574. *
  575. * @param unknown_type $option
  576. */
  577. function componentsDisplay($option)
  578. {
  579. $RSadapter = $GLOBALS['RSadapter'];
  580. $componentId = intval($RSadapter->getParam($_GET, 'componentId'));
  581. $componentType = intval($RSadapter->getParam($_GET, 'componentType'));
  582. $rez = mysql_query("SELECT * FROM `{$RSadapter->tbl_rsform_component_type_fields}` WHERE ComponentTypeId='{$componentType}' ORDER BY Ordering");
  583. $data = array();
  584. $out = '';
  585. if ($componentId > 0)
  586. $data=RSgetComponentProperties($componentId);
  587. $out.='<table class="componentForm" border="0" cellspacing="0" cellpadding="0">';
  588. $counter = 0;
  589. while($r = mysql_fetch_assoc($rez))
  590. {
  591. if ($counter==2 && mysql_num_rows($rez) > 3)
  592. $out.= '<tr><td><input type="button" onclick="processComponent('.$componentType.')" value="'._RSFORM_BACKEND_COMP_SAVE.'" style="float:right; margin-right:20px;"></td></tr>';
  593. $out.='<tr>';
  594. switch($r['FieldType'])
  595. {
  596. case 'textbox':
  597. {
  598. $out.='<td>'.constant('_RSFORM_BACKEND_COMP_FIELD_'.$r['FieldName']).'<br/>';
  599. if ($componentId > 0)
  600. {
  601. $val = (defined('_RSFORM_BACKEND_COMP_FVALUE_'.$data[$r['FieldName']]) ? constant('_RSFORM_BACKEND_COMP_FVALUE_'.$data[$r['FieldName']]) : $data[$r['FieldName']]);
  602. $out .= '<input type="text" id="'.$r['FieldName'].'" name="param['.$r['FieldName'].']" value="'.RSshowVar($data[$r['FieldName']]).'" class="wide"></td>';
  603. }
  604. else
  605. {
  606. $val = (defined('_RSFORM_BACKEND_COMP_FVALUE_'.RSisCode($r['FieldValues'])) ? constant('_RSFORM_BACKEND_COMP_FVALUE_'.RSisCode($r['FieldValues'])) : RSisCode($r['FieldValues']));
  607. $out .= '<input type="text" id="'.$r['FieldName'].'" name="param['.$r['FieldName'].']" value="'.$val.'" class="wide"></td>';
  608. }
  609. }
  610. break;
  611. case 'textarea':
  612. {
  613. $out .= '<td>'.constant('_RSFORM_BACKEND_COMP_FIELD_'.$r['FieldName']).'<br/>';
  614. if ($componentId > 0)
  615. {
  616. $constant = str_replace('::','',$data[$r['FieldName']]);
  617. $val = (defined('_RSFORM_BACKEND_COMP_FVALUE_'.$constant) ? constant($constant) : $data[$r['FieldName']]);
  618. $out .= '<textarea id="'.$r['FieldName'].'" name="param['.$r['FieldName'].']" rows="5" cols="20" class="wide">'.RSshowVar($val).'</textarea></td>';
  619. }
  620. else
  621. {
  622. $val = (defined('_RSFORM_BACKEND_COMP_FVALUE_'.RSisCode($r['FieldValues'])) ? constant('_RSFORM_BACKEND_COMP_FVALUE_'.RSisCode($r['FieldValues'])) : RSisCode($r['FieldValues']));
  623. $out .= '<textarea id="'.$r['FieldName'].'" name="param['.$r['FieldName'].']" rows="5" cols="20" class="wide">'.$val.'</textarea></td>';
  624. }
  625. }
  626. break;
  627. case 'select':
  628. {
  629. $out .= '<td>'.constant('_RSFORM_BACKEND_COMP_FIELD_'.$r['FieldName']).'<br/>';
  630. $out .= '<select id="'.$r['FieldName'].'" name="param['.$r['FieldName'].']">';
  631. $r['FieldValues'] = str_replace("\r",'',$r['FieldValues']);
  632. $r['FieldValues'] = RSisCode($r['FieldValues']);
  633. $buff = explode("\n",$r['FieldValues']);
  634. foreach($buff as $val)
  635. {
  636. $label = (defined('_RSFORM_BACKEND_COMP_FVALUE_'.$val) ? constant('_RSFORM_BACKEND_COMP_FVALUE_'.$val) : $val);
  637. $out .= '<option '.($componentId > 0 && $data[$r['FieldName']] == $val ? 'selected="selected"' : '').' value="'.RSshowVar($val).'">'.RSshowVar($label).'</option>';
  638. }
  639. $out .= '</select></td>';
  640. }
  641. break;
  642. case 'hidden':
  643. {
  644. $val = (defined('_RSFORM_BACKEND_COMP_FVALUE_'.$r['FieldValues']) ? constant('_RSFORM_BACKEND_COMP_FVALUE_'.$r['FieldValues']) : $r['FieldValues']);
  645. $out .= '<td><input type="hidden" id="'.$r['FieldName'].'" name="'.$r['FieldName'].'" value="'.RSshowVar($val).'"></td>';
  646. }
  647. break;
  648. }
  649. if ($componentId > 0)
  650. $out .= '<input type="hidden" name="updateComponent">';
  651. $out .= '</tr>';
  652. $counter++;
  653. }
  654. $out .= '<tr><td><input type="button" onclick="processComponent('.$componentType.')" value="'._RSFORM_BACKEND_COMP_SAVE.'" style="float:right; margin-right:20px;"></td></tr>';
  655. $out .= '<tr><td>&nbsp;</td></tr>';
  656. $out .= '</table>';
  657. echo $out;
  658. }
  659. /**
  660. * Moves the component up
  661. *
  662. * @param str $option
  663. */
  664. function componentsMoveUp($option)
  665. {
  666. $RSadapter = $GLOBALS['RSadapter'];
  667. $componentId = intval($RSadapter->getParam($_GET, 'componentId'));
  668. $formId = intval($RSadapter->getParam($_GET, 'formId'));
  669. $order = @mysql_result(mysql_query("SELECT `Order` FROM `{$RSadapter->tbl_rsform_components}` WHERE FormId='{$formId}' AND ComponentId='{$componentId}'"),0);
  670. if ($order > 1)
  671. {
  672. $order -= 1;
  673. $id = @mysql_result(mysql_query("SELECT ComponentId FROM `{$RSadapter->tbl_rsform_components}` WHERE FormId='{$formId}' AND `Order`='$order'"),0);
  674. mysql_query("UPDATE `{$RSadapter->tbl_rsform_components}` SET `Order`=`Order`-1 WHERE ComponentId='{$componentId}' AND FormId='{$formId}'");
  675. mysql_query("UPDATE `{$RSadapter->tbl_rsform_components}` SET `Order`=`Order`+1 WHERE ComponentId='$id' AND FormId='{$formId}'");
  676. }
  677. }
  678. /**
  679. * Moves the component down
  680. *
  681. * @param str $option
  682. */
  683. function componentsMoveDown($option)
  684. {
  685. $RSadapter = $GLOBALS['RSadapter'];
  686. $componentId = intval($RSadapter->getParam($_GET, 'componentId'));
  687. $formId = intval($RSadapter->getParam($_GET, 'formId'));
  688. $max= @mysql_result(mysql_query("SELECT COUNT(ComponentId) AS number FROM `{$RSadapter->tbl_rsform_components}` WHERE FormId='{$formId}'"),0);
  689. $order = @mysql_result(mysql_query("SELECT `Order` FROM `{$RSadapter->tbl_rsform_components}` WHERE FormId='{$formId}' AND ComponentId='{$componentId}'"),0);
  690. if ($order < $max)
  691. {
  692. $order += 1;
  693. $id = @mysql_result(mysql_query("SELECT ComponentId FROM `{$RSadapter->tbl_rsform_components}` WHERE FormId='{$formId}' AND `Order`='$order'"),0);
  694. mysql_query("UPDATE `{$RSadapter->tbl_rsform_components}` SET `Order`=`Order`+1 WHERE ComponentId='{$componentId}' AND FormId='{$formId}'");
  695. mysql_query("UPDATE `{$RSadapter->tbl_rsform_components}` SET `Order`=`Order`-1 WHERE ComponentId='$id' AND FormId='{$formId}'");
  696. }
  697. }
  698. /**
  699. * Components Cancel
  700. *
  701. * @param str $option
  702. */
  703. function componentsCancel($option)
  704. {
  705. $RSadapter = $GLOBALS['RSadapter'];
  706. $formId = $RSadapter->getParam($_POST, 'formId');
  707. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=forms.edit&formId='.$formId);
  708. }
  709. /**
  710. * Components Copy Process
  711. *
  712. * @param str $option
  713. */
  714. function componentsCopyProcess($option)
  715. {
  716. $RSadapter = $GLOBALS['RSadapter'];
  717. $formId = intval($RSadapter->getParam($_POST, 'formId'));
  718. $toFormId = intval($RSadapter->getParam($_POST, 'toFormId', 0));
  719. $componentsToCopy = $RSadapter->getParam($_POST, 'componentId', array());
  720. if ($toFormId > 0 && !empty($componentsToCopy))
  721. foreach($componentsToCopy as $componentToCopyId)
  722. RScopyComponent($componentToCopyId,$toFormId);
  723. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=forms.edit&formId='.$toFormId,_RSFORM_BACKEND_COMPONENTS_COPY_OK);
  724. }
  725. /**
  726. * Components Copy Screen
  727. *
  728. * @param str $option
  729. */
  730. function componentsCopyScreen($option)
  731. {
  732. $RSadapter = $GLOBALS['RSadapter'];
  733. $formId = intval($RSadapter->getParam($_REQUEST, 'formId'));
  734. $components = $RSadapter->getParam($_REQUEST,'checks',array());
  735. //load all forms
  736. $rez = mysql_query("SELECT FormId, FormTitle FROM `{$RSadapter->tbl_rsform_forms}`");
  737. $forms = array();
  738. while($r = mysql_fetch_array($rez))
  739. $forms[$r['FormId']] = $r['FormTitle'];
  740. rsform_HTML::componentsCopyScreen($option, $forms, $components, $formId);
  741. }
  742. /**
  743. * Publish / Unpublish a component
  744. *
  745. * @param str $option
  746. */
  747. function componentsChangeStatus($option)
  748. {
  749. $RSadapter = $GLOBALS['RSadapter'];
  750. $componentId = intval($RSadapter->getParam($_GET, 'componentId'));
  751. //get current status
  752. $currentStatus = @mysql_result(mysql_query("SELECT `Published` FROM `{$RSadapter->tbl_rsform_components}` WHERE ComponentId='$componentId'"),0);
  753. $newStatus = ($currentStatus) ? 0 : 1;
  754. mysql_query("UPDATE `{$RSadapter->tbl_rsform_components}` SET published = '$newStatus' WHERE ComponentId='$componentId'");
  755. }
  756. /**
  757. * Remove Component
  758. *
  759. * @param str $option
  760. */
  761. function componentsRemove($option)
  762. {
  763. $RSadapter = $GLOBALS['RSadapter'];
  764. $componentId = intval($RSadapter->getParam($_GET, 'componentId'));
  765. $formId = intval($RSadapter->getParam($_GET, 'formId'));
  766. mysql_query("DELETE FROM `{$RSadapter->tbl_rsform_components}` WHERE ComponentId='$componentId'");
  767. mysql_query("DELETE FROM `{$RSadapter->tbl_rsform_properties}` WHERE ComponentId='$componentId'");
  768. $rez=mysql_query("SELECT ComponentId FROM `{$RSadapter->tbl_rsform_components}` WHERE FormId='$formId' ORDER BY `Order`");
  769. $i = 1;
  770. while($r=mysql_fetch_assoc($rez))
  771. {
  772. mysql_query("UPDATE `{$RSadapter->tbl_rsform_components}` SET `Order`='$i' WHERE ComponentId='$r[ComponentId]'");
  773. $i++;
  774. }
  775. }
  776. //////////////////////////////////////// LAYOUTS ////////////////////////////////////////
  777. function layoutsGenerate($option, $formId)
  778. {
  779. $RSadapter = $GLOBALS['RSadapter'];
  780. $layout = $RSadapter->getParam($_GET,'layout');
  781. $bad = array('\\','/');
  782. $layout = str_replace($bad,'',$layout);
  783. require_once(_RSFORM_BACKEND_ABS_PATH.'/layouts/'.$layout.'.php');
  784. }
  785. function layoutsSaveName($formId)
  786. {
  787. $RSadapter = $GLOBALS['RSadapter'];
  788. $formId = intval($formId);
  789. $formLayoutName = RScleanVar($RSadapter->getParam($_GET,'formLayoutName'));
  790. mysql_query("UPDATE {$RSadapter->tbl_rsform_forms} set FormLayoutName='$formLayoutName' where FormId='$formId'");
  791. }
  792. //////////////////////////////////////// SUBMISSIONS ////////////////////////////////////////
  793. /**
  794. * Submissions Manager Screen
  795. *
  796. * @param str $option
  797. * @param int $formId
  798. */
  799. function submissionsManage($option, $formId)
  800. {
  801. $RSadapter = $GLOBALS['RSadapter'];
  802. $formId = intval($formId);
  803. if ($formId == 0)
  804. {
  805. //get the first form
  806. $formId = @mysql_result(mysql_query("SELECT FormId FROM {$RSadapter->tbl_rsform_forms} WHERE published=1 ORDER BY FormId LIMIT 1"),0);
  807. if ($formId > 0)
  808. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=submissions.manage&formId='.$formId);
  809. }
  810. $data = new SManager($formId);
  811. $data->limit = $RSadapter->config['list_limit'];
  812. //load forms
  813. $forms = array();
  814. $query = mysql_query("SELECT FormId, FormName FROM {$RSadapter->tbl_rsform_forms} order by FormId");
  815. while($formRow = mysql_fetch_array($query))
  816. $forms[$formRow['FormId']] = $formRow['FormName'];
  817. rsform_HTML::submissionsManage($option, $data, $forms);
  818. }
  819. /**
  820. * Edits one submission
  821. *
  822. * @param str $option
  823. * @param int $formId
  824. */
  825. function submissionsEdit($option, $formId)
  826. {
  827. $RSadapter = $GLOBALS['RSadapter'];
  828. $data = new SManager($formId);
  829. $order = 0;
  830. if (isset($_GET['order']) && $_GET['order'] == 'asc')
  831. $order = 1;
  832. $id = 0;
  833. if (isset($_GET['id']) && $_GET['id'] > 0)
  834. $id = $_GET['id'];
  835. $sort_id = 0;
  836. if (isset($_GET['sort_id']) && $_GET['sort_id'] > 0)
  837. $sort_id = $_GET['sort_id'];
  838. $filter = '';
  839. if (isset($_GET['filter']) && strlen($_GET['filter']) > 0)
  840. $filter = $_GET['filter'];
  841. $data->filter = $filter;
  842. $page = 1;
  843. if (isset($_GET['page']) && $_GET['page'] > 1)
  844. $page = $_GET['page'];
  845. $data->current = $page;
  846. $data->limit = $RSadapter->config['list_limit'];
  847. if (isset($_GET['limit']))
  848. $data->limit = $_GET['limit'];
  849. if(!isset($_GET['action']))
  850. $_GET['action'] = '';
  851. switch($_GET['action']){
  852. case 'edit':
  853. $data->setValue($_GET['SubmissionId'], $_GET['SubmissionValueId'], $_POST['value'], $_GET['fieldName']);
  854. exit();
  855. break;
  856. case 'remove':
  857. $data->setOrder($sort_id, $order);
  858. $data->deleteRow($id);
  859. rsform_HTML::submissionsTable($option, $data);
  860. exit();
  861. break;
  862. case 'sort':
  863. $data->setOrder($sort_id, $order);
  864. rsform_HTML::submissionsTable($option, $data);
  865. exit();
  866. break;
  867. case 'filter':
  868. $data->setOrder($sort_id, $order);
  869. rsform_HTML::submissionsTable($option, $data);
  870. exit();
  871. break;
  872. case 'page':
  873. $data->setOrder($sort_id, $order);
  874. rsform_HTML::submissionsTable($option, $data);
  875. exit();
  876. break;
  877. case 'pager':
  878. $data->setOrder($sort_id, $order);
  879. $data->pager($page, $filter);
  880. exit();
  881. break;
  882. case 'exportall':
  883. $data->setOrder($sort_id, $order);
  884. $data->exportAll($page, $filter);
  885. exit();
  886. break;
  887. }
  888. }
  889. function deleteSubmissionFiles($submissionId, $formId)
  890. {
  891. $RSadapter = $GLOBALS['RSadapter'];
  892. $formId = intval($formId);
  893. //check if submissions have file uploads
  894. //check if form has upload fields, and return their names
  895. $query = mysql_query("SELECT ComponentId FROM `{$RSadapter->tbl_rsform_components}` WHERE ComponentTypeId = 9 AND FormId = '$formId'");
  896. while($row = mysql_fetch_assoc($query))
  897. {
  898. $file = @mysql_result(mysql_query("SELECT sv.FieldValue FROM `{$RSadapter->tbl_rsform_submission_values}` sv, `{$RSadapter->tbl_rsform_properties}` p WHERE p.ComponentId = '{$row['ComponentId']}' AND p.PropertyName = 'NAME' AND p.PropertyValue = sv.FieldName AND sv.SubmissionId = '{$submissionId}' LIMIT 1"),0);
  899. if(!empty($file)) @unlink($file);
  900. }
  901. }
  902. /**
  903. * Deletes submissions
  904. *
  905. * @param str $option
  906. * @param int $all
  907. */
  908. function submissionsDelete($option, $all=1)
  909. {
  910. $RSadapter = $GLOBALS['RSadapter'];
  911. $formId = intval($RSadapter->getParam($_REQUEST, 'formId'));
  912. $submissionIds = $RSadapter->getParam($_POST, 'checks');
  913. //delete submissionIds
  914. if($all!=-1)
  915. {
  916. if(!empty($submissionIds))
  917. {
  918. foreach($submissionIds as $submissionId)
  919. deleteSubmissionFiles($submissionId, $formId);
  920. mysql_query("DELETE FROM {$RSadapter->tbl_rsform_submissions} WHERE `SubmissionId` IN (".implode(',',$submissionIds).")");
  921. mysql_query("DELETE FROM {$RSadapter->tbl_rsform_submission_values} WHERE `SubmissionId` IN (".implode(',',$submissionIds).")");
  922. }
  923. }
  924. else
  925. {
  926. $submissionIds = array();
  927. $result = mysql_query("SELECT SubmissionId FROM {$RSadapter->tbl_rsform_submissions} WHERE `FormId` = '$formId'");
  928. while($row = mysql_fetch_assoc($result))
  929. {
  930. deleteSubmissionFiles($row['SubmissionId'], $formId);
  931. $submissionIds[] = $row['SubmissionId'];
  932. }
  933. if (!empty($submissionIds))
  934. mysql_query("DELETE FROM {$RSadapter->tbl_rsform_submission_values} WHERE `SubmissionId` IN (".implode(',',$submissionIds).")");
  935. mysql_query("DELETE FROM {$RSadapter->tbl_rsform_submissions} WHERE `FormId` = '$formId'");
  936. }
  937. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=submissions.manage&formId='.$formId);
  938. }
  939. /**
  940. * Export Submissions Screen
  941. *
  942. * @param str $option
  943. */
  944. function submissionsExport($option)
  945. {
  946. $RSadapter = $GLOBALS['RSadapter'];
  947. $formId = intval($RSadapter->getParam($_REQUEST, 'formId'));
  948. $submissionIds = $RSadapter->getParam($_POST, 'checks');
  949. //load form Name
  950. $formName = @mysql_result(mysql_query("SELECT FormName FROM {$RSadapter->tbl_rsform_forms} WHERE FormId = '$formId'"),0);
  951. //load components
  952. $formComponents = array();
  953. $result = mysql_query("SELECT `ComponentId`, `Order` FROM `{$RSadapter->tbl_rsform_components}` WHERE `FormId` = '$formId' AND `Published` = 1 ORDER BY `Order`");
  954. while($componentRow = mysql_fetch_assoc($result))
  955. {
  956. $componentProperties=RSgetComponentProperties($componentRow['ComponentId']);
  957. $formComponents[$componentRow['ComponentId']] = array('ComponentName'=>$componentProperties['NAME'],'Order'=>$componentRow['Order']);
  958. }
  959. rsform_HTML::submissionsExport($option, $formId, $submissionIds, $formName, $formComponents);
  960. }
  961. /**
  962. * Submissions Export Process
  963. *
  964. * @param str $option
  965. */
  966. function submissionsExportProcess($option)
  967. {
  968. global $RSadapter;
  969. $formId = $RSadapter->getParam($_POST,'formId');
  970. $data = new SManager($formId,$export = 1);
  971. $data->filter = isset($_POST['filter']) ? $_POST['filter'] : '';
  972. //$data->submissionIds = $RSadapter->getParam($_POST,'ExportRows', 0);
  973. $data->exportHeaders = $RSadapter->getParam($_POST,'ExportHeaders',0);
  974. $data->exportDelimiter = (isset($_POST['ExportDelimiter']) ? stripslashes($_POST['ExportDelimiter']): '');
  975. $data->exportDelimiter = str_replace(array('\t','\n','\r'),array("\t","\n","\r"),$data->exportDelimiter);
  976. $data->exportFieldEnclosure = (isset($_POST['ExportFieldEnclosure']) ? stripslashes($_POST['ExportFieldEnclosure']) : '');
  977. $data->exportSubmission = $RSadapter->getParam($_POST,'ExportSubmission');
  978. $data->exportOrder = $RSadapter->getParam($_POST,'ExportOrder');
  979. $data->exportComponent = $RSadapter->getParam($_POST,'ExportComponent');
  980. $output = $data->createExportFile();
  981. }
  982. //////////////////////////////////////// CONFIGURATION ////////////////////////////////////////
  983. /**
  984. * Saves registration form
  985. *
  986. * @param str $option
  987. */
  988. function saveRegistration($option)
  989. {
  990. $RSadapter = $GLOBALS['RSadapter'];
  991. $rsformConfigPost = $RSadapter->getParam($_POST,'rsformConfig');
  992. if(!isset($rsformConfigPost['global.register.code']))$rsformConfigPost['global.register.code']='';
  993. if($rsformConfigPost['global.register.code']=='') $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option,_RSFORM_BACKEND_SAVEREG_CODE);
  994. mysql_query("UPDATE `{$RSadapter->tbl_rsform_config}` SET SettingValue = '".RScleanVar(trim($rsformConfigPost['global.register.code']))."' WHERE SettingName = 'global.register.code'");
  995. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=updates.manage',_RSFORM_BACKEND_SAVEREG_SAVED);
  996. }
  997. /**
  998. * Configuration Edit Screen
  999. *
  1000. * @param str $option
  1001. */
  1002. function configurationEdit($option)
  1003. {
  1004. $RSadapter = $GLOBALS['RSadapter'];
  1005. rsform_HTML::configurationEdit($option);
  1006. }
  1007. /**
  1008. * Configuration Save process
  1009. *
  1010. * @param str $option
  1011. */
  1012. function configurationSave($option)
  1013. {
  1014. $RSadapter = $GLOBALS['RSadapter'];
  1015. $rsformConfig = $RSadapter->getParam($_POST,'rsformConfig',array());
  1016. $languageFile = $RSadapter->getParam($_POST,'languageFile',array());
  1017. foreach($rsformConfig as $setting_name=>$setting_value)
  1018. $query = mysql_query("UPDATE `{$RSadapter->tbl_rsform_config}` SET SettingValue = '".RScleanVar($setting_value)."' WHERE SettingName = '".RScleanVar($setting_name)."'");
  1019. if(!empty($languageFile))
  1020. foreach($languageFile as $file=>$content)
  1021. {
  1022. $filename = _RSFORM_FRONTEND_ABS_PATH.'/languages/'.$file;
  1023. if ( $fp = fopen ($filename, 'wb') ) {
  1024. fputs( $fp, stripslashes( $content ) );
  1025. fclose( $fp );
  1026. }
  1027. }
  1028. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=configuration.edit',_RSFORM_BACKEND_CONFIGURATION_SAVED);
  1029. }
  1030. //////////////////////////////////////// MIGRATION ////////////////////////////////////////
  1031. function migrationProcess($option)
  1032. {
  1033. $RSadapter = $GLOBALS['RSadapter'];
  1034. if(defined('_RSFORM_PLUGIN_MIGRATION')) RSmigrationProcess();
  1035. }
  1036. function migrationScreen($option)
  1037. {
  1038. $RSadapter = $GLOBALS['RSadapter'];
  1039. if(defined('_RSFORM_PLUGIN_MIGRATION')) RSmigrationScreen();
  1040. }
  1041. //////////////////////////////////////// BACKUP / RESTORE ////////////////////////////////////////
  1042. /**
  1043. * Backup / Restore Screen
  1044. *
  1045. * @param str $option
  1046. */
  1047. function backupRestore($option)
  1048. {
  1049. $RSadapter = $GLOBALS['RSadapter'];
  1050. $rez = mysql_query("SELECT FormId, FormTitle, FormName FROM `{$RSadapter->tbl_rsform_forms}` ORDER BY FormId DESC");
  1051. $rows = array();
  1052. while($r=mysql_fetch_assoc($rez))
  1053. {
  1054. $r['_allSubmissions'] = @mysql_result(mysql_query("SELECT COUNT(`SubmissionId`) cnt FROM `{$RSadapter->tbl_rsform_submissions}` WHERE FormId='{$r['FormId']}'"),0);
  1055. $rows[] = $r;
  1056. }
  1057. rsform_HTML::backupRestore( $rows, _RSFORM_BACKEND_BACKUPRESTORE_TITLE_HEAD, $option, 'component', '', dirname(__FILE__), "");
  1058. }
  1059. /**
  1060. * Backup Generate Process
  1061. *
  1062. * @param str $option
  1063. */
  1064. function backupDownload($option)
  1065. {
  1066. $RSadapter = $GLOBALS['RSadapter'];
  1067. if(empty($_POST['cid']))
  1068. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=backup.restore',_RSFORM_BACKEND_BACKUPRESTORE_FORMS_SELECT);
  1069. $tmpdir = uniqid('rsformbkp');
  1070. $pathtotmpdir = $RSadapter->config['absolute_path'].'/media/'.$tmpdir.'/';
  1071. mkdir($pathtotmpdir);
  1072. chmod($pathtotmpdir,0777);
  1073. require_once( $RSadapter->config['absolute_path'] . '/administrator/includes/pcl/pclzip.lib.php' );
  1074. require_once( $RSadapter->config['absolute_path'] . '/administrator/includes/pcl/pclerror.lib.php' );
  1075. $name = 'rsform_backup_' . date('Y-m-d_His') . '.zip';
  1076. $files4XML = array();
  1077. RSbackupCreateXMLfile($option, $_POST['cid'], $_POST['submissions'], $files4XML, $pathtotmpdir . '/install.xml' );
  1078. chdir($pathtotmpdir);
  1079. $zipfile = new PclZip( $pathtotmpdir . $name );
  1080. $zipfile->add($pathtotmpdir.'/install.xml',
  1081. PCLZIP_OPT_REMOVE_PATH, $pathtotmpdir);
  1082. /*$zipfile->add(implode(',',$files),
  1083. PCLZIP_OPT_ADD_PATH, 'rsads',
  1084. PCLZIP_OPT_REMOVE_PATH, $mosConfig_absolute_path);*/
  1085. @$zipfile->create();
  1086. $RSadapter->redirect( $RSadapter->config['live_site'] .'/media/'. $tmpdir .'/'. $name );
  1087. }
  1088. //////////////////////////////////////// UPDATES ////////////////////////////////////////
  1089. function updateUploadProcess( $option ) {
  1090. $RSadapter = $GLOBALS['RSadapter'];
  1091. // Check that the zlib is available
  1092. if(!extension_loaded('zlib')) {
  1093. echo "The installer can't continue before zlib is installed";
  1094. exit() ;
  1095. }
  1096. $userfile = $RSadapter->getParam( $_FILES, 'userfile' );
  1097. $filetype = $RSadapter->getParam( $_POST, 'filetype');
  1098. $overwrite = $RSadapter->getParam( $_POST, 'overwrite');
  1099. if (!$userfile) {
  1100. echo "No file selected";
  1101. exit();
  1102. }
  1103. $userfile_name = $userfile['name'];
  1104. $msg = @constant('_RSFORM_BACKEND_UPDATECHECK_STATUS_'.strtoupper($filetype));
  1105. $resultdir = RSuploadFile( $userfile['tmp_name'], $userfile['name'], $msg );
  1106. $has_errors = 0;
  1107. //check if file is a valid plugin
  1108. if ($resultdir !== false) {
  1109. $baseDir = $RSadapter->config['absolute_path'] . '/media/' ;
  1110. require_once( _RSFORM_JOOMLA_XML_PATH );
  1111. $installer = new RSinstaller();
  1112. $installer->archivename = $userfile['name'];
  1113. if($installer->upload($userfile['name']))
  1114. {
  1115. if($installer->readInstall())
  1116. {
  1117. $RSinstall = $installer->xmldoc->documentElement;
  1118. if($installer->installType!=$filetype)
  1119. $msg = constant('_RSFORM_BACKEND_UPDATECHECK_'.strtoupper($filetype));
  1120. else
  1121. {
  1122. if ($filetype == 'rsformbackup' && $overwrite == 1)
  1123. {
  1124. mysql_query("TRUNCATE TABLE `{$RSadapter->tbl_rsform_forms}`");
  1125. mysql_query("TRUNCATE TABLE `{$RSadapter->tbl_rsform_components}`");
  1126. mysql_query("TRUNCATE TABLE `{$RSadapter->tbl_rsform_properties}`");
  1127. mysql_query("TRUNCATE TABLE `{$RSadapter->tbl_rsform_submissions}`");
  1128. mysql_query("TRUNCATE TABLE `{$RSadapter->tbl_rsform_submission_values}`");
  1129. }
  1130. $tasks_node = &$RSinstall->getElementsByPath('tasks', 1);
  1131. if (!is_null($tasks_node)) {
  1132. $tasks = $tasks_node->childNodes;
  1133. $has_errors = false;
  1134. foreach($tasks as $task){
  1135. if(RSprocessTask($option, $task, $installer->installDir)===FALSE)$has_errors = true;
  1136. }
  1137. //if($has_errors) die();
  1138. }
  1139. //clean up
  1140. @unlink($baseDir.$userfile['name']);
  1141. $installer->cleanup($userfile['name'], $installer->installDir);
  1142. $msg = _RSFORM_BACKEND_UPDATECHECK_OK;
  1143. }
  1144. }
  1145. else
  1146. $msg = _RSFORM_BACKEND_UPDATECHECK_NOINSTALL;
  1147. }
  1148. else
  1149. {
  1150. $msg = _RSFORM_BACKEND_UPDATECHECK_BADFILE;
  1151. @unlink($baseDir.$userfile['name']);
  1152. }
  1153. }
  1154. if(!$has_errors)
  1155. switch($filetype)
  1156. {
  1157. case 'rsformbackup':
  1158. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=backup.restore',$msg);
  1159. break;
  1160. case 'rsformupdate':
  1161. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=updates.manage',$msg);
  1162. break;
  1163. case 'rsformplugin':
  1164. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=configuration.edit',$msg);
  1165. break;
  1166. }
  1167. }
  1168. function updatesManage($option){
  1169. rsform_HTML::updatesManage($option);
  1170. }
  1171. //////////////////////////////////////// MAPPINGS ////////////////////////////////////////
  1172. function mappingsGetColumns($option)
  1173. {
  1174. $RSadapter = $GLOBALS['RSadapter'];
  1175. $result = '<select name="rsform_mapping_column" id="rsform_mapping_column">';
  1176. $columns = RSgetColumns($_GET['tableName']);
  1177. foreach ($columns as $column)
  1178. $result.='<option value="'.$column.'">'.$column.'</option>';
  1179. $result .= '</select>';
  1180. echo $result;
  1181. }
  1182. function mappingsSaveMapping($option)
  1183. {
  1184. $RSadapter = $GLOBALS['RSadapter'];
  1185. $_GET['ComponentId'] = intval($_GET['ComponentId']);
  1186. $_GET['MappingTable'] = RScleanVar($_GET['MappingTable']);
  1187. $_GET['MappingColumn'] = RScleanVar($_GET['MappingColumn']);
  1188. mysql_query("SELECT * FROM `".$RSadapter->tbl_rsform_mappings."` WHERE ComponentId='$_GET[ComponentId]' AND MappingTable='$_GET[MappingTable]' AND MappingColumn='$_GET[MappingColumn]'");
  1189. if(mysql_affected_rows()!=0)
  1190. {
  1191. echo '1';
  1192. return;
  1193. }
  1194. mysql_query("INSERT INTO `".$RSadapter->tbl_rsform_mappings."` (ComponentId, MappingTable, MappingColumn) VALUES ('$_GET[ComponentId]','$_GET[MappingTable]','$_GET[MappingColumn]')");
  1195. $result = RSwebserviceMappingsTable($_GET['FormId']);
  1196. echo $result;
  1197. }
  1198. function mappingsDeleteMapping($option)
  1199. {
  1200. $RSadapter = $GLOBALS['RSadapter'];
  1201. $_GET['MappingId'] = intval($_GET['MappingId']);
  1202. mysql_query("DELETE FROM `".$RSadapter->tbl_rsform_mappings."` WHERE MappingId='$_GET[MappingId]'");
  1203. $result = RSwebserviceMappingsTable($_GET['FormId']);
  1204. echo $result;
  1205. }
  1206. //////////////////////////////////////// PLUGINS ////////////////////////////////////////
  1207. function pluginsRemove($option)
  1208. {
  1209. $RSadapter = $GLOBALS['RSadapter'];
  1210. $plugin = $RSadapter->getParam($_GET,'plugin',0);
  1211. $bad = array('\\','/');
  1212. $plugin = str_replace($bad,'',$plugin);
  1213. if($plugin)
  1214. {
  1215. if(file_exists($RSadapter->config['absolute_path'].'/components/com_rsform/plugins/'.$plugin.'.php'))
  1216. {
  1217. unlink($RSadapter->config['absolute_path'].'/components/com_rsform/plugins/'.$plugin.'.php');
  1218. $msg = _RSFORM_BACKEND_PLUGINS_REMOVE_OK;
  1219. }
  1220. else
  1221. $msg = _RSFORM_BACKEND_PLUGINS_REMOVE_ERROR;
  1222. }
  1223. else
  1224. $msg = _RSFORM_BACKEND_PLUGINS_REMOVE_ERROR;
  1225. $RSadapter->redirect(_RSFORM_BACKEND_SCRIPT_PATH.'?option='.$option.'&task=configuration.edit',$msg);
  1226. }
  1227. ?>