Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Mar 29th, 2011  |  syntax: PHP  |  size: 210.31 KB  |  views: 1,527  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. <?php
  2. /**
  3. * BreezingForms - A Joomla Forms Application
  4. * @version 1.7.2
  5. * @package BreezingForms
  6. * @copyright (C) 2008-2010 by Markus Bopp
  7. * @license Released under the terms of the GNU General Public License
  8. **/
  9. defined( '_JEXEC' ) or die( 'Direct Access to this location is not allowed.' );
  10.  
  11. $mainframe = JFactory::getApplication();
  12.  
  13. $ff_processor = null;
  14.  
  15. define('_FF_PACKBREAKAFTER',              250);
  16.  
  17. define('_FF_STATUS_OK',                     0);
  18. define('_FF_STATUS_UNPUBLISHED',            1);
  19. define('_FF_STATUS_SAVERECORD_FAILED',      2);
  20. define('_FF_STATUS_SAVESUBRECORD_FAILED',   3);
  21. define('_FF_STATUS_UPLOAD_FAILED',          4);
  22. define('_FF_STATUS_SENDMAIL_FAILED',        5);
  23. define('_FF_STATUS_ATTACHMENT_FAILED',      6);
  24. define('_FF_STATUS_CAPTCHA_FAILED',         7);
  25. define('_FF_STATUS_FILE_EXTENSION_NOT_ALLOWED', 8);
  26.  
  27. define('_FF_DATA_ID',                       0);
  28. define('_FF_DATA_NAME',                     1);
  29. define('_FF_DATA_TITLE',                    2);
  30. define('_FF_DATA_TYPE',                     3);
  31. define('_FF_DATA_VALUE',                    4);
  32. define('_FF_DATA_FILE_SERVERPATH',          5);
  33.  
  34. define('_FF_IGNORE_STRICT',                 1);
  35. define('_FF_TRACE_NAMELIMIT',             100);
  36.  
  37. // tracemode bits
  38. define('_FF_TRACEMODE_EVAL',                8);
  39. define('_FF_TRACEMODE_PIECE',              16);
  40. define('_FF_TRACEMODE_FUNCTION',           32);
  41. define('_FF_TRACEMODE_MESSAGE',            64);
  42. define('_FF_TRACEMODE_LOCAL',             128);
  43. define('_FF_TRACEMODE_DIRECT',            256);
  44. define('_FF_TRACEMODE_APPEND',            512);
  45. define('_FF_TRACEMODE_DISABLE',          1024);
  46. define('_FF_TRACEMODE_FIRST',            2048);
  47.  
  48. // tracemode masks
  49. define('_FF_TRACEMODE_PRIORITY',            7);
  50. define('_FF_TRACEMODE_TOPIC',             120);
  51. define('_FF_TRACEMODE_VARIABLE',          248);
  52.  
  53. // debugging flags
  54. define('_FF_DEBUG_PATCHEDCODE',             1);
  55. define('_FF_DEBUG_ENTER',                   2);
  56. define('_FF_DEBUG_EXIT',                    4);
  57. define('_FF_DEBUG_DIRECTIVE',               8);
  58. define('_FF_DEBUG',                         0);
  59.  
  60. function ff_trace($msg = null)
  61. {
  62.         global $ff_processor;
  63.  
  64.         if ($ff_processor->dying ||
  65.                 ($ff_processor->traceMode & _FF_TRACEMODE_DISABLE) ||
  66.                 !($ff_processor->traceMode & _FF_TRACEMODE_MESSAGE)) return;
  67.         $level = count($ff_processor->traceStack);
  68.         $trc = '';
  69.         for ($l = 0; $l < $level; $l++) $trc .= '  ';
  70.         $trc .= BFText::_('COM_BREEZINGFORMS_PROCESS_MSGUNKNOWN').": $msg\n";
  71.         $ff_processor->traceBuffer .= htmlspecialchars($trc,ENT_QUOTES);
  72.         if ($ff_processor->traceMode & _FF_TRACEMODE_DIRECT) $ff_processor->dumpTrace();
  73. } // ff_trace
  74.  
  75. function _ff_trace($line, $msg = null)
  76. {
  77.         global $ff_processor;
  78.  
  79.         // version for patched code
  80.         if ($ff_processor->dying || ($ff_processor->traceMode & _FF_TRACEMODE_DISABLE)) return;
  81.         $level = count($ff_processor->traceStack);
  82.         if ($msg && ($ff_processor->traceMode & _FF_TRACEMODE_MESSAGE)) {
  83.                 $trc = '';
  84.                 for ($l = 0; $l < $level; $l++) $trc .= '  ';
  85.                 $trc .= BFText::_('COM_BREEZINGFORMS_PROCESS_LINE')." $line: $msg\n";
  86.                 $ff_processor->traceBuffer .= htmlspecialchars($trc,ENT_QUOTES);
  87.                 if ($ff_processor->traceMode & _FF_TRACEMODE_DIRECT) $ff_processor->dumpTrace();
  88.         } // if
  89.         if ($level) $ff_processor->traceStack[$level-1][3] = $line;
  90. } // _ff_trace
  91.  
  92. function _ff_getMode(&$newmode, &$name)
  93. {
  94.         global $ff_processor;
  95.  
  96.         $oldmode = $ff_processor->traceMode;
  97.         if (_FF_DEBUG & _FF_DEBUG_ENTER)
  98.                 $ff_processor->traceBuffer .=
  99.                         htmlspecialchars(
  100.                                 "\n_FF_DEBUG_ENTER:".
  101.                                 "\n  Name              = $name".
  102.                                 "\n  Old mode before   = ".$ff_processor->dispTraceMode($oldmode).
  103.                                 "\n  New mode before   = ".$ff_processor->dispTraceMode($newmode),
  104.                                 ENT_QUOTES
  105.                         );
  106.         if (is_null($newmode) || ($newmode & _FF_TRACEMODE_PRIORITY) < ($oldmode & _FF_TRACEMODE_PRIORITY)) {
  107.                 $newmode = $oldmode;
  108.                 $ret = $oldmode;
  109.         } else {
  110.                 $newmode = ($oldmode & ~_FF_TRACEMODE_VARIABLE)|($newmode & _FF_TRACEMODE_VARIABLE);
  111.                 if ($oldmode != $newmode) $ff_processor->traceMode = $newmode;
  112.                 $ret = ($newmode & _FF_TRACEMODE_LOCAL) ? $oldmode : $newmode;
  113.         } // if
  114.         if (_FF_DEBUG & _FF_DEBUG_ENTER) {
  115.                 $ff_processor->traceBuffer .=
  116.                         htmlspecialchars(
  117.                                 "\n  Old mode compiled = ".$ff_processor->dispTraceMode($ret).
  118.                                 "\n  New mode compiled = ".$ff_processor->dispTraceMode($newmode).
  119.                                 "\n",
  120.                                 ENT_QUOTES
  121.                         );
  122.                 if ($ff_processor->traceMode & _FF_TRACEMODE_DIRECT) $ff_processor->dumpTrace();
  123.         } // if
  124.         return $ret;
  125. } // _ff_getmode
  126.  
  127. function _ff_tracePiece($newmode, $name, $line, $type, $id, $pane)
  128. {
  129.         global $ff_processor;
  130.  
  131.         if ($ff_processor->dying || ($ff_processor->traceMode & _FF_TRACEMODE_DISABLE)) return;
  132.         $oldmode = _ff_getMode($newmode, $name);
  133.         if ($newmode & _FF_TRACEMODE_PIECE) {
  134.                 $level = count($ff_processor->traceStack);
  135.                 for ($l = 0; $l < $level; $l++) $ff_processor->traceBuffer .= '  ';
  136.                 $ff_processor->traceBuffer .=
  137.                         htmlspecialchars(
  138.                                 "+".BFText::_('COM_BREEZINGFORMS_PROCESS_ENTER')." $name ".BFText::_('COM_BREEZINGFORMS_PROCESS_ATLINE')." $line\n",
  139.                                 ENT_QUOTES
  140.                         );
  141.                 if ($ff_processor->traceMode & _FF_TRACEMODE_DIRECT) $ff_processor->dumpTrace();
  142.         } // if
  143.         array_push($ff_processor->traceStack, array($oldmode, 'p', $name, $line, $type, $id, $pane));
  144. } // _ff_tracePiece
  145.  
  146. function _ff_traceFunction($newmode, $name, $line, $type, $id, $pane, &$args)
  147. {
  148.         global $ff_processor;
  149.  
  150.         if ($ff_processor->dying || ($ff_processor->traceMode & _FF_TRACEMODE_DISABLE)) return;
  151.         $oldmode = _ff_getMode($newmode, $name);
  152.         if ($newmode & _FF_TRACEMODE_FUNCTION) {
  153.                 $level = count($ff_processor->traceStack);
  154.                 $trc = '';
  155.                 for ($l = 0; $l < $level; $l++) $trc .= '  ';
  156.                 $trc .= "+".BFText::_('COM_BREEZINGFORMS_PROCESS_ENTER')." $name(";
  157.                 if ($args) {
  158.                         $next = false;
  159.                         foreach ($args as $arg) {
  160.                                 if ($next) $trc .= ', '; else $next = true;
  161.                                 if (is_null($arg))
  162.                                         $trc .= 'null';
  163.                                 else
  164.                                 if (is_bool($arg)) {
  165.                                         $trc .= $arg ? 'true' : 'false';
  166.                                 } else
  167.                                 if (is_numeric($arg))
  168.                                         $trc .= $arg;
  169.                                 else
  170.                                 if (is_string($arg)) {
  171.                                         $arg = preg_replace('/([\\s]+)/si', ' ', $arg);
  172.                                         if (strlen($arg) > _FF_TRACE_NAMELIMIT)
  173.                                                 $arg = substr($arg,0,_FF_TRACE_NAMELIMIT-3).'...';
  174.                                         $trc .= "'$arg'";
  175.                                 } else
  176.                                 if (is_array($arg))
  177.                                         $trc .= BFText::_('COM_BREEZINGFORMS_PROCESS_ARRAY');
  178.                                 else
  179.                                 if (is_object($arg))
  180.                                         $trc .= BFText::_('COM_BREEZINGFORMS_PROCESS_OBJECT');
  181.                                 else
  182.                                 if (is_resource($arg))
  183.                                         $trc .= BFText::_('COM_BREEZINGFORMS_PROCESS_RESOURCE');
  184.                                 else
  185.                                         $trc .= _FACILEFORMS_PROCESS_UNKTYPE;
  186.                         } // foreach
  187.                 } // if
  188.                 $trc .= ") ".BFText::_('COM_BREEZINGFORMS_PROCESS_ATLINE')." $line\n";
  189.                 $ff_processor->traceBuffer .= htmlspecialchars($trc,ENT_QUOTES);
  190.                 if ($ff_processor->traceMode & _FF_TRACEMODE_DIRECT) $ff_processor->dumpTrace();
  191.         } // if
  192.         array_push($ff_processor->traceStack, array($oldmode, 'f', $name, $line, $type, $id, $pane));
  193. } // _ff_traceFunction
  194.  
  195. function _ff_traceExit($line, $retval=null)
  196. {
  197.         global $ff_processor;
  198.  
  199.         if ($ff_processor->dying || ($ff_processor->traceMode & _FF_TRACEMODE_DISABLE)) return;
  200.         $info = array_pop($ff_processor->traceStack);
  201.         if ($info) {
  202.                 $oldmode = $ff_processor->traceMode;
  203.                 $newmode = $info[0];
  204.                 $kind    = $info[1];
  205.                 $name    = $info[2];
  206.                 $type    = $info[4];
  207.                 $id      = $info[5];
  208.                 $pane    = $info[6];
  209.                 if (_FF_DEBUG & _FF_DEBUG_EXIT) {
  210.                         $ff_processor->traceBuffer .=
  211.                                 htmlspecialchars(
  212.                                         "\n_FF_DEBUG_EXIT:".
  213.                                         "\n  Info     = $kind $name at line $line".
  214.                                         "\n  Old mode = ".$ff_processor->dispTraceMode($oldmode).
  215.                                         "\n  New mode = ".$ff_processor->dispTraceMode($newmode).
  216.                                         "\n",
  217.                                         ENT_QUOTES
  218.                                 );
  219.                         if ($ff_processor->traceMode & _FF_TRACEMODE_DIRECT) $ff_processor->dumpTrace();
  220.                 } // if
  221.                 if ($kind == 'p')
  222.                         $visible = $oldmode & _FF_TRACEMODE_PIECE;
  223.                 else
  224.                         $visible = $oldmode & _FF_TRACEMODE_FUNCTION;
  225.                 if ($visible) {
  226.                         $level = count($ff_processor->traceStack);
  227.                         for ($l = 0; $l < $level; $l++) $ff_processor->traceBuffer .= '  ';
  228.                         $ff_processor->traceBuffer .=
  229.                                 htmlspecialchars(
  230.                                         "-".BFText::_('COM_BREEZINGFORMS_PROCESS_LEAVE')." $name ".BFText::_('COM_BREEZINGFORMS_PROCESS_ATLINE')." $line\n",
  231.                                         ENT_QUOTES
  232.                                 );
  233.                         if ($oldmode & _FF_TRACEMODE_DIRECT) $ff_processor->dumpTrace();
  234.                 } // if
  235.                 if ($oldmode != $newmode)
  236.                         $ff_processor->traceMode =
  237.                                 ($oldmode & ~_FF_TRACEMODE_VARIABLE)|($newmode & _FF_TRACEMODE_VARIABLE);
  238.         } else {
  239.                 $ff_processor->traceBuffer .= htmlspecialchars(BFText::_('COM_BREEZINGFORMS_PROCESS_WARNSTK')."\n",ENT_QUOTES);
  240.                 if ($ff_processor->traceMode & _FF_TRACEMODE_DIRECT) $ff_processor->dumpTrace();
  241.                 $type = $id = $pane = null;
  242.                 $name = BFText::_('COM_BREEZINGFORMS_PROCESS_UNKNOWN');
  243.         } // if
  244.         return $retval;
  245. } // _ff_traceExit
  246.  
  247. function _ff_errorHandler($errno, $errstr, $errfile, $errline)
  248. {
  249.         global  $ff_processor, $ff_mossite, $database;
  250.         $database = JFactory::getDBO();
  251.         /*
  252.         ob_start();
  253.         print_r($_REQUEST);
  254.         $ffCheck = ob_get_contents();
  255.         ob_end_clean();
  256.         echo 'process out: <pre>'.$ffCheck.'</pre>';
  257.         exit;*/
  258.  
  259.         if (isset($ff_processor->dying) && $ff_processor->dying) return;
  260.         //JHTML::script('facileforms.js','components/com_breezingforms/');
  261.         $msg =  "\n<strong>*** ".htmlspecialchars(BFText::_('COM_BREEZINGFORMS_PROCESS_EXCAUGHT'),ENT_QUOTES)." ***</strong>\n".
  262.                         htmlspecialchars(BFText::_('COM_BREEZINGFORMS_PROCESS_PHPLEVEL').' ',ENT_QUOTES);
  263.         $fail = false;
  264.         if(!defined('E_DEPRECATED')){
  265.             define('E_DEPRECATED', 8192);
  266.         }
  267.         switch ($errno) {
  268.                 case E_WARNING     : $msg .= "E_WARNING"; break;
  269.                 case E_NOTICE      : $msg .= "E_NOTICE"; break;
  270.                 case E_USER_ERROR  : $msg .= "E_USER_ERROR"; $fail = true; break;
  271.                 case E_USER_WARNING: $msg .= "E_USER_WARNING"; break;
  272.                 case E_USER_NOTICE : $msg .= "E_USER_NOTICE"; break;
  273.                 case E_DEPRECATED  : $msg .= "E_DEPRECATED"; break;
  274.                 case 2048          :
  275.                         if (_FF_IGNORE_STRICT) return;
  276.                         $msg .= "E_STRICT";
  277.                         break;
  278.                 default            : $msg .= $errno; $fail = true;
  279.         } // switch
  280.         $msg .= htmlspecialchars(
  281.                 "\n".BFText::_('COM_BREEZINGFORMS_PROCESS_PHPFILE')." $errfile\n".
  282.                 BFText::_('COM_BREEZINGFORMS_PROCESS_PHPLINE')." $errline\n",
  283.                 ENT_QUOTES
  284.         );
  285.  
  286.         $n = 0;
  287.         if(isset($ff_processor)){
  288.                 $n = count($ff_processor->traceStack);
  289.         }
  290.  
  291.         if ($n) {
  292.                 $info    = $ff_processor->traceStack[$n-1];
  293.                 $name    = htmlspecialchars($info[2].' '.BFText::_('COM_BREEZINGFORMS_PROCESS_ATLINE').' '.$info[3],ENT_QUOTES);
  294.                 $type    = $info[4];
  295.                 $id      = $info[5];
  296.                 $pane    = $info[6];
  297.                 if ($type && $id && $ff_processor->runmode!=_FF_RUNMODE_FRONTEND) {
  298.                         $url = $ff_mossite.'/administrator/index.php?option=com_breezingforms&format=html&tmpl=component';
  299.                         $what = $id;
  300.                         switch ($type) {
  301.                                 case 'f':
  302.                                         $url .=
  303.                                                 '&act=editpage'.
  304.                                                 '&task=editform'.
  305.                                                 '&form='.$ff_processor->form;
  306.                                         if ($ff_processor->formrow->package!='')
  307.                                                 $url .= '&pkg='.urlencode($ff_processor->formrow->package);
  308.                                         if ($pane > 0) $url .= '&tabpane='.$pane;
  309.                                         $what = 'form '.$ff_processor->formrow->name;
  310.                                         break;
  311.                                 case 'e':
  312.                                         $page = 1;
  313.                                         foreach ($ff_processor->rows as $row)
  314.                                                 if ($row->id== $id) {
  315.                                                         $page = $row->page;
  316.                                                         $what = $row->name;
  317.                                                         break;
  318.                                                 } // if
  319.                                         $what = 'element '.$what;
  320.                                         $url .=
  321.                                                 '&act=editpage'.
  322.                                                 '&task=edit'.
  323.                                                 '&form='.$ff_processor->form.
  324.                                                 '&page='.$page.
  325.                                                 '&ids[]='.$id;
  326.                                         if ($ff_processor->formrow->package!='')
  327.                                                 $url .= '&pkg='.urlencode($ff_processor->formrow->package);
  328.                                         if ($pane > 0) $url .= '&tabpane='.$pane;
  329.                                         break;
  330.                                 case 'p':
  331.                                         $package = '';
  332.                                         $database->setQuery("select name, package from #__facileforms_pieces where id=$id");
  333.                                         $rows = $database->loadObjectList();
  334.                                         if (count($rows)) { $package = $rows[0]->package; $what = $rows[0]->name; }
  335.                                         $what = 'piece '.$what;
  336.                                         $url .=
  337.                                                 '&act=managepieces'.
  338.                                                 '&task=edit'.
  339.                                                 '&ids[]='.$id;
  340.                                         if ($package!='') $url .= '&pkg='.urlencode($package);
  341.                                         break;
  342.                                 case 's':
  343.                                         $package = '';
  344.                                         $database->setQuery("select name, package from #__facileforms_scripts where id=$id");
  345.                                         $rows = $database->loadObjectList();
  346.                                         if (count($rows)) { $package = $rows[0]->package; $what = $rows[0]->name; }
  347.                                         $what = 'script '.$what;
  348.                                         $url .=
  349.                                                 '&act=managescripts'.
  350.                                                 '&task=edit'.
  351.                                                 '&ids[]='.$id;
  352.                                         if ($package!='') $url .= '&pkg='.urlencode($package);
  353.                                         break;
  354.                                 default:
  355.                                         $url = null;
  356.                         } // switch
  357.                         if ($url)
  358.                                 $name = '<a href="#" '.
  359.                                                         'onMouseOver="window.status=\'Open '.$what.'\';return true;" '.
  360.                                                         'onMouseOut="window.status=\'\';return true;" '.
  361.                                                         'onClick="ff_redirectParent(\''.htmlspecialchars($url,ENT_QUOTES).'\');return true;"'.
  362.                                                 '>'.$name.'</a>';
  363.                 } // if
  364.                 $msg .= htmlspecialchars(BFText::_('COM_BREEZINGFORMS_PROCESS_LASTPOS'),ENT_QUOTES).' '.$name."\n";
  365.         } // if
  366.         $msg .= htmlspecialchars(BFText::_('COM_BREEZINGFORMS_PROCESS_ERRMSG')." $errstr\n\n",ENT_QUOTES);
  367.         if ($fail) {
  368.                 if(isset($ff_processor)){
  369.                         $ff_processor->traceBuffer .= $msg;
  370.                         $ff_processor->suicide();
  371.                 }
  372.         } else
  373.                 if(isset($ff_processor)){
  374.                         if (($ff_processor->traceMode & _FF_TRACEMODE_DISABLE)==0) {
  375.                                 $ff_processor->traceBuffer .= $msg;
  376.                                 if ($ff_processor->traceMode & _FF_TRACEMODE_DIRECT)
  377.                                         $ff_processor->dumpTrace();
  378.                         }
  379.                 } // if
  380. } // _ff_errorHandler
  381.  
  382. class HTML_facileFormsProcessor
  383. {
  384.         var $okrun          = null;     // running is allowed
  385.         var $ip             = null;     // visitor ip
  386.         var $agent          = null;     // visitor agent
  387.         var $browser        = null;     // visitors browser
  388.         var $opsys          = null;     // visitors operating system
  389.         var $provider       = null;     // visitors provider
  390.         var $submitted      = null;     // submit date/time
  391.         var $formrow        = null;     // form row
  392.         var $form           = null;     // form #
  393.         var $form_id        = null;     // html form id
  394.         var $page           = null;     // page id
  395.         var $target         = null;     // target form name
  396.         var $rows           = null;     // element rows
  397.         var $rowcount       = null;     // # of element rows
  398.         var $runmode        = null;     // current run mode _FF_RUNMODE_...
  399.         var $inline         = null;     // inline preview
  400.         var $inframe        = null;     // running in a frame
  401.         var $template       = null;     // 0-frontend 1-backend
  402.         var $homepage       = null;     // home page
  403.         var $mospath        = null;     // mos absolute path
  404.         var $images         = null;     // ff_images path
  405.         var $uploads        = null;     // ff_uploads path
  406.         var $border         = null;     // show border
  407.         var $align          = null;     // form alignment
  408.         var $top            = null;     // top margin
  409.         var $suffix         = null;     // class name suffix
  410.         var $status         = null;     // submit return status
  411.         var $message        = null;     // submit return message
  412.         var $record_id      = null;     // id of saved record
  413.         var $submitdata     = null;     // submitted data
  414.         var $savedata       = null;     // data for db save
  415.         var $maildata       = null;     // data for mail notification
  416.         var $xmldata        = null;     // data for xml attachment
  417.         var $queryCols      = null;     // query column definitions
  418.         var $queryRows      = null;     // query rows
  419.         var $showgrid       = null;     // show grid in preview
  420.         var $findtags       = null;     // tags to be replaced
  421.         var $replacetags    = null;     // tag replacements
  422.         var $dying          = null;     // form is dying
  423.         var $errrep         = null;     // remember old error reporting
  424.         var $traceMode      = null;     // trace mode
  425.         var $traceStack     = null;     // trace stack
  426.         var $traceBuffer    = null;     // trace buffer
  427.         var $user_id        = null;
  428.         var $username       = null;
  429.         var $user_full_name = null;
  430.         var $mailbackRecipients = array();
  431.         var $editable = null;
  432.         var $editable_override = null;
  433.         var $sendNotificationAfterPayment = false;
  434.  
  435.     public $draggableDivIds = array();
  436.  
  437.         function HTML_facileFormsProcessor(
  438.                 $runmode,       // _FF_RUNMODE_FRONTEND, ..._BACKEND, ..._PREVIEW
  439.                 $inframe,       // run in iframe
  440.                 $form,          // form id
  441.                 $page = 1,      // page #
  442.                 $border = 0,    // show border
  443.                 $align = 1,     // align code
  444.                 $top = 0,       // top margin
  445.                 $target = '',   // target form name
  446.                 $suffix = '',   // class name suffix
  447.                 $editable = 0,
  448.                 $editable_override = 0 )
  449.         {
  450.                 global $database, $ff_config, $ff_mossite, $ff_mospath, $ff_processor;
  451.                 $ff_processor = $this;
  452.                 $database = JFactory::getDBO();
  453.                 $this->dying   = false;
  454.                 $this->runmode = $runmode;
  455.                 $this->inframe = $inframe;
  456.                 $this->form    = $form;
  457.                 $this->page    = $page;
  458.                 $this->border  = $border;
  459.                 $this->align   = $align;
  460.                 $this->top     = $top;
  461.                 $this->target  = $target;
  462.                 $this->suffix  = trim($suffix);
  463.                 $this->editable = $editable;
  464.                 $this->editable_override = $editable_override;
  465.  
  466.                 if(!class_exists('JBrowser')){
  467.                         require_once(JPATH_SITE . '/libraries/joomla/environment/browser.php');
  468.                 }
  469.  
  470.                 $this->ip      = $_SERVER['REMOTE_ADDR'];
  471.                 $this->agent   = JBrowser::getInstance()->getAgentString();
  472.  
  473.                 $this->browser = JBrowser::getInstance()->getAgentString();
  474.  
  475.                 $jbrowserInstance = JBrowser::getInstance();
  476.                 $this->opsys   = $jbrowserInstance->getPlatform();
  477.  
  478.                 if ($ff_config->getprovider==0)
  479.                         $this->provider = BFText::_('COM_BREEZINGFORMS_PROCESS_UNKNOWN');
  480.                 else {
  481.                         $host = @GetHostByAddr($this->ip);
  482.                         $this->provider = preg_replace('/^./', '', strchr($host,'.'));
  483.                 } // if
  484.  
  485.                 $this->submitted = date('Y-m-d H:i:s');
  486.                
  487.                 /*
  488.                 $format = JText::_('DATE_FORMAT_LC2');
  489.                 if ( !$format ) {
  490.                     $this->submitted = date('Y-m-d H:i:s');
  491.                 }else{
  492.                     $config = JFactory::getConfig();
  493.                     $offset = $config->getValue('config.offset');
  494.                     $instance = JFactory::getDate(date('Y-m-d H:i:s'));
  495.                     $instance->setOffset($offset);
  496.                     $this->submitted = $instance->toFormat($format);
  497.                 }*/
  498.  
  499.                 $this->formrow = new facileFormsForms($database);
  500.                 $this->formrow->load($form);
  501.                 if ($this->formrow->published) {
  502.                         $database->setQuery(
  503.                                 "select * from #__facileforms_elements ".
  504.                                  "where form=".$this->form." and published=1 ".
  505.                                  "order by page, ordering"
  506.                         );
  507.                         $this->rows = $database->loadObjectList();
  508.                         $this->rowcount = count($this->rows);
  509.                 } // if
  510.                 $this->inline = 0;
  511.                 $this->template = 0;
  512.                 $this->form_id = "ff_form".$form;
  513.                 if ($runmode==_FF_RUNMODE_FRONTEND) {
  514.                         $this->homepage = $ff_mossite;
  515.                 } else {
  516.                         if ($this->inframe) {
  517.                                 $this->homepage = $ff_mossite.'/administrator/index.php?tmpl=component';
  518.                                 if ($this->formrow->runmode==2) $this->template++;
  519.                         } else {
  520.                                 $this->template++;
  521.                                 if ($runmode==_FF_RUNMODE_PREVIEW) {
  522.                                         $this->inline = 1;
  523.                                         $this->form_id = "adminForm";
  524.                                 } // if
  525.                                 $this->homepage = 'index.php?tmpl=component';
  526.                         } // if
  527.                 } // if
  528.                 $this->mospath = $ff_mospath;
  529.                 $this->mossite = $ff_mossite;
  530.                 $this->findtags =
  531.                         array(
  532.                                 '{ff_currentpage}',
  533.                                 '{ff_lastpage}',
  534.                                 '{ff_name}',
  535.                                 '{ff_title}',
  536.                                 '{ff_homepage}',
  537.                                 '{mospath}',
  538.                                 '{mossite}'
  539.                         );
  540.                 $this->replacetags =
  541.                         array(
  542.                                 $this->page,
  543.                                 $this->formrow->pages,
  544.                                 $this->formrow->name,
  545.                                 $this->formrow->title,
  546.                                 $this->homepage,
  547.                                 $this->mospath,
  548.                                 $this->mossite
  549.                         );
  550.                 $this->images = str_replace($this->findtags, $this->replacetags, $ff_config->images);
  551.                 $this->findtags[] = '{ff_images}';
  552.                 $this->replacetags[] = $this->images;
  553.                 $this->uploads = str_replace($this->findtags, $this->replacetags, $ff_config->uploads);
  554.                 $this->findtags[] = '{ff_uploads}';
  555.                 $this->replacetags[] = $this->uploads;
  556.                 $this->showgrid =
  557.                         $runmode==_FF_RUNMODE_PREVIEW
  558.                         && $this->formrow->prevmode>0
  559.                         && $ff_config->gridshow==1
  560.                         && $ff_config->gridsize>1;
  561.                 $this->okrun = $this->formrow->published;
  562.  
  563.                 if ($this->okrun)
  564.                         switch ($this->runmode) {
  565.                                 case _FF_RUNMODE_FRONTEND:
  566.                                         $this->okrun = ($this->formrow->runmode==0 || $this->formrow->runmode==1);
  567.                                         break;
  568.                                 case _FF_RUNMODE_BACKEND:
  569.                                         $this->okrun = ($this->formrow->runmode==0 || $this->formrow->runmode==2);
  570.                                         break;
  571.                                 default:;
  572.                         } // switch
  573.                 $this->traceMode = _FF_TRACEMODE_FIRST;
  574.                 $this->traceStack = array();
  575.                 $this->traceBuffer = null;
  576.         } //  HTML_facileFormsProcessor
  577.  
  578.         function dispTraceMode($mode)
  579.         {
  580.                 if (!is_int($mode)) return $mode;
  581.                 $m = '(';
  582.                 if ($mode & _FF_TRACEMODE_FIRST) $m .= 'first ';
  583.                 $m .= ($mode & _FF_TRACEMODE_DIRECT ? 'direct' : $mode & _FF_TRACEMODE_APPEND ? 'append' : 'popup');
  584.                 if ($mode & _FF_TRACEMODE_DISABLE)
  585.                         $m .= ' disable';
  586.                 else {
  587.                         switch ($mode & _FF_TRACEMODE_PRIORITY) {
  588.                                 case  0: $m .= ' minimum'; break;
  589.                                 case  1: $m .= ' low';     break;
  590.                                 case  2: $m .= ' normal';  break;
  591.                                 case  3: $m .= ' high';    break;
  592.                                 default: $m .= ' maximum'; break;
  593.                         } // switch
  594.                         $m .= $mode & _FF_TRACEMODE_LOCAL ? ' local' : ' global';
  595.                         switch ($mode & _FF_TRACEMODE_TOPIC) {
  596.                                 case 0                  : $m .= ' none';  break;
  597.                                 case _FF_TRACEMODE_TOPIC: $m .= ' all';   break;
  598.                                 default:
  599.                                         if ($mode & _FF_TRACEMODE_EVAL)     $m .= ' eval';
  600.                                         if ($mode & _FF_TRACEMODE_PIECE)    $m .= ' piece';
  601.                                         if ($mode & _FF_TRACEMODE_FUNCTION) $m .= ' function';
  602.                                         if ($mode & _FF_TRACEMODE_MESSAGE)  $m .= ' message';
  603.                         } // switch
  604.                 } // if
  605.                 return $m.')';
  606.         } // dispTraceMode
  607.  
  608.         function trim(&$code)
  609.         {
  610.                 $len = strlen($code); if (!$len) return false;
  611.                 if (strpos(" \t\r\n",$code{0})===false && strpos(" \t\r\n",$code{$len-1})===false) return true;
  612.                 $code = trim($code);
  613.                 return $code != '';
  614.         } // trim
  615.  
  616.         function nonblank(&$code)
  617.         {
  618.                 return preg_match("/[^\\s]+/si", $code);
  619.         } // nonblank
  620.  
  621.         function getClassName($classdef)
  622.         {
  623.                 $name = '';
  624.                 if (strpos($classdef,';')===false)
  625.                         $name = $classdef;
  626.                 else {
  627.                         $defs = explode(';', $classdef);
  628.                         $name = $defs[$this->template];
  629.                 } // if
  630.                 if ($this->trim($name)) $name .= $this->suffix;
  631.                 return $name;
  632.         } // getClassName
  633.  
  634.         function expJsValue($mixed, $indent='')
  635.         {
  636.                 if (is_null($mixed)) return $indent.'null';
  637.  
  638.                 if (is_bool($mixed)) return $mixed ? $indent.'true' : $indent.'false';
  639.  
  640.                 if (is_numeric($mixed)) return $indent.$mixed;
  641.  
  642.                 if (is_string($mixed))
  643.                         return
  644.                                 $indent."'".
  645.                                 str_replace(
  646.                                         array("\\", "'", "\r", "<", "\n"),
  647.                                         array("\\\\", "\\'", "\\r", "\\074", "\\n'+".nl().$indent."'"),
  648.                                         $mixed
  649.                                 ).
  650.                                 "'";
  651.  
  652.                 if (is_array($mixed)) {
  653.                         $dst = $indent.'['.nl();
  654.                         $next = false;
  655.                         foreach ($mixed as $value) {
  656.                                 if ($next) $dst .= ",".nl(); else $next = true;
  657.                                 $dst .= $this->expJsValue($value, $indent."\t");
  658.                         } // foreach
  659.                         return $dst.nl().$indent.']';
  660.                 } // if
  661.  
  662.                 if (is_object($mixed)) {
  663.                         $dst = $indent.'{'.nl();
  664.                         $arr = get_object_vars($mixed);
  665.                         $next = false;
  666.                         foreach ($arr as $key => $value) {
  667.                                 if ($next) $dst .= ",".nl(); else $next = true;
  668.                                 $dst .= $indent.$key .":".nl().$this->expJsValue($value, $indent."\t");
  669.                         } // foreach
  670.                         return $dst.nl().$indent.'}';
  671.         } // if
  672.  
  673.                 // not supported types
  674.                 if (is_resource($mixed)) return $indent."'".BFText::_('COM_BREEZINGFORMS_PROCESS_RESOURCE')."'";
  675.  
  676.                 return $indent."'".BFText::_('COM_BREEZINGFORMS_PROCESS_UNKNOWN')."'";
  677.         } // expJsValue
  678.  
  679.         function expJsVar($name, $mixed)
  680.         {
  681.                 return $name.' = '.$this->expJsValue($mixed).';'.nl();
  682.         } // expJsVar
  683.  
  684.         function dumpTrace()
  685.         {
  686.                 if ($this->traceMode & _FF_TRACEMODE_DIRECT) {
  687.                         $html = ob_get_contents();
  688.                         ob_end_clean();
  689.                         echo htmlspecialchars($html,ENT_QUOTES).$this->traceBuffer;
  690.                         ob_start();
  691.                         $this->traceBuffer = null;
  692.                         return;
  693.                 } // if
  694.                 if (!$this->traceBuffer) return;
  695.                 if ($this->traceMode & _FF_TRACEMODE_APPEND) {
  696.                         echo '<pre>'.$this->traceBuffer.'</pre>';
  697.                         $this->traceBuffer = null;
  698.                         return;
  699.                 } // if
  700.                 echo
  701.                         '<script type="text/javascript">'.nl().
  702.                         '<!--'.nl().
  703.                         $this->expJsVar('if(typeof ff_processor != "undefined")ff_processor.traceBuffer', $this->traceBuffer);
  704.                 if ($this->dying) echo 'onload = ff_traceWindow();'.nl();
  705.                 echo
  706.                         '-->'.nl().
  707.                         '</script>'.nl();
  708.                 $this->traceBuffer = null;
  709.         } // dumpTrace
  710.  
  711.         function traceEval($name)
  712.         {
  713.                 if ( ($this->traceMode & _FF_TRACEMODE_DISABLE) ||
  714.                          !($this->traceMode & _FF_TRACEMODE_EVAL)   ||
  715.                          $this->dying ) return;
  716.                 $level = count($this->traceStack);
  717.                 for ($l = 0; $l < $level; $l++) $this->traceBuffer .= '  ';
  718.                 $this->traceBuffer .= htmlspecialchars("eval($name)\n",ENT_QUOTES);
  719.                 if ($this->traceMode & _FF_TRACEMODE_DIRECT) $this->dumpTrace();
  720.         } // traceEval
  721.  
  722.         function suicide()
  723.         {
  724.                 if ($this->dying) return false;
  725.                 $this->dying = true;
  726.                 $this->errrep = error_reporting(0);
  727.                 return true;
  728.         } // suicide
  729.  
  730.         function bury()
  731.         {
  732.                 if (!$this->dying) return false;
  733.                 if ($this->traceMode & _FF_TRACEMODE_DIRECT) $this->dumpTrace();
  734.                 ob_end_clean();
  735.                 if ($this->traceMode & _FF_TRACEMODE_DIRECT) echo '</pre>'; else $this->dumpTrace();
  736.                 error_reporting($this->errrep);
  737.                 restore_error_handler();
  738.                 return true;
  739.         } // bury
  740.  
  741.         function findToken(&$code, &$spos, &$offs)
  742.         {
  743.                 $srch  = '#(function|return|_ff_trace|ff_trace[ \\t]*\\(|//|/\*|\*/|\\\\"|\\\\\'|{|}|\(|\)|;|"|\'|\n)#si';
  744.                 $match = array();
  745.                 if (!preg_match($srch, $code, $match, PREG_OFFSET_CAPTURE, $spos)) return '';
  746.                 $token = strtolower($match[0][0]);
  747.                 $offs = $match[0][1];
  748.                 $spos = $offs+strlen($token);
  749.                 return $token;
  750.         } // findToken
  751.  
  752.         function findRealToken(&$code, &$spos, &$offs, &$line)
  753.         {
  754.                 $linecmt = $blockcmt = false;
  755.                 $quote = null;
  756.                 for (;;) {
  757.                         $token = preg_replace('/[ \\t]*/', '', $this->findToken($code, $spos, $offs));
  758.                         switch ($token) {
  759.                                 case '':
  760.                                         return '';
  761.                                 case 'function':
  762.                                 case 'return';
  763.                                 case 'ff_trace(';
  764.                                 case '{':
  765.                                 case '}':
  766.                                 case '(':
  767.                                 case ')':
  768.                                 case ';':
  769.                                         if (!$linecmt && !$blockcmt && !$quote) return $token;
  770.                                         break;
  771.                                 case "\n":
  772.                                         $line++;
  773.                                         $linecmt = false;
  774.                                         break;
  775.                                 case '//':
  776.                                         if (!$blockcmt && !$quote) $linecmt = true;
  777.                                         break;
  778.                                 case '/*':
  779.                                         if (!$linecmt && !$quote) $longcmt = true;
  780.                                         break;
  781.                                 case '"':
  782.                                 case "'":
  783.                                         if ($quote == $token)
  784.                                                 $quote = null;
  785.                                         else
  786.                                                 if (!$linecmt && !$blockcmt && !$quote)
  787.                                                         $quote = $token;
  788.                                         break;
  789.                                 default:
  790.                                         break;
  791.                         } // switch
  792.                 } // for
  793.         } // findRealToken
  794.  
  795.         function patchCode($mode, $code, $name, $type, $id, $pane)
  796.         {
  797.                 $flevel = $cpos = $spos = $offs = 0;
  798.                 $bye = false;
  799.                 $fstack = array();
  800.                 $line = 1;
  801.                 if ($type && $id) {
  802.                         $type = "'$type'";
  803.                         if (!$pane) $pane = 'null';
  804.                 } else
  805.                         $type = $id = $pane = 'null';
  806.                 $name = str_replace("'","\\'",$name);
  807.                 $dst = "_ff_tracePiece($mode,'$name',$line,$type,$id,$pane);";
  808.                 while (!$bye) {
  809.                         switch ($this->findRealToken($code, $spos, $offs, $line)) {
  810.                                 case '': $bye = true; break;
  811.                                 case 'function':
  812.                                         $brk = false;
  813.                                         while (!$brk) {
  814.                                                 // consume tokens until finding the opening bracket
  815.                                                 switch ($this->findRealToken($code, $spos, $offs, $line)) {
  816.                                                         case '': $bye = $brk = true; break;
  817.                                                         case '{':
  818.                                                                 $dst .=
  819.                                                                         substr($code,$cpos,$spos-$cpos).
  820.                                                                         '$_ff_traceArgs = func_get_args();'.
  821.                                                                         '_ff_traceFunction('.$mode.',__FUNCTION__,'.$line.','.$type.','.$id.','.$pane.',$_ff_traceArgs);'.
  822.                                                                         '$_ff_traceArgs=null;';
  823.                                                                 $cpos = $spos;
  824.                                                                 if ($flevel) array_push($fstack, $flevel);
  825.                                                                 $flevel = 1;
  826.                                                                 $brk = true;
  827.                                                                 break;
  828.                                                         default:;
  829.                                                 } // switch
  830.                                         } // while
  831.                                         break;
  832.                                 case 'return':
  833.                                         $dst .= substr($code, $cpos, $spos-$cpos);
  834.                                         $cpos = $spos;
  835.                                         $brk = false;
  836.                                         while (!$brk) {
  837.                                                 // consume tokens until semicolon found
  838.                                                 switch ($this->findRealToken($code, $spos, $offs, $line)) {
  839.                                                         case '': $bye = $brk = true; break;
  840.                                                         case ';':
  841.                                                                 $arg = substr($code, $cpos, $offs-$cpos);
  842.                                                                 if ($this->nonblank($arg))
  843.                                                                         $dst .= ' _ff_traceExit('.$line.','.$arg.');';
  844.                                                                 else
  845.                                                                         $dst .= ' _ff_traceExit('.$line.');';
  846.                                                                 $cpos = $spos;
  847.                                                                 $brk = true;
  848.                                                                 break;
  849.                                                         default:;
  850.                                                 } // switch
  851.                                         } // while
  852.                                         break;
  853.                                 case 'ff_trace(':
  854.                                         $dst .= substr($code, $cpos, $offs-$cpos);
  855.                                         $cpos = $spos;
  856.                                         $brk = false;
  857.                                         $lvl = 0;
  858.                                         while (!$brk) {
  859.                                                 // consume tokens until finding the closing bracket
  860.                                                 switch ($this->findRealToken($code, $spos, $offs, $line)) {
  861.                                                         case '': $bye = $brk = true; break;
  862.                                                         case '(': $lvl++; break;
  863.                                                         case ')':
  864.                                                                 if ($lvl) $lvl--; else $brk = true;
  865.                                                                 break;
  866.                                                         default:;
  867.                                                 } // switch
  868.                                         } // while
  869.                                         $par = $offs==$cpos ? '' : substr($code, $cpos, $offs-$cpos);
  870.                                         $dst .= " _ff_trace($line";
  871.                                         if ($this->nonblank($par)) $dst .= ',';
  872.                                         break;
  873.                                 case '{':
  874.                                         if ($flevel>0) $flevel++;
  875.                                         break;
  876.                                 case '}';
  877.                                         if ($flevel>0) {
  878.                                                 $flevel--;
  879.                                                 if (!$flevel) {
  880.                                                         $dst .= substr($code,$cpos,$offs-$cpos).' _ff_traceExit('.$line.');}';
  881.                                                         $cpos = $spos;
  882.                                                         if (count($fstack)) $flevel = array_pop($fstack);
  883.                                                 } // if
  884.                                         } // if
  885.                                         break;
  886.                                 default:
  887.                         } // switch
  888.                 } // while
  889.                 $spos = strlen($code);
  890.                 if ($cpos < $spos) $dst .= substr($code, $cpos, $spos-$cpos);
  891.                 $line--;
  892.                 $dst .= "_ff_traceExit($line);";
  893.                 if (_FF_DEBUG & _FF_DEBUG_PATCHEDCODE) {
  894.                         $this->traceBuffer .=
  895.                                 htmlspecialchars(
  896.                                         "\n_FF_DEBUG_PATCHEDCODE:".
  897.                                         "\n  Mode = ".$this->dispTraceMode($mode).
  898.                                         "\n  Name = $name".
  899.                                         "\n  Link = $type $id $pane".
  900.                                         "\n------ begin patched code ------".
  901.                                         "\n$dst".
  902.                                         "\n------- end patched code -------".
  903.                                         "\n",
  904.                                         ENT_QUOTES
  905.                                 );
  906.                         if ($this->traceMode & _FF_TRACEMODE_DIRECT) $this->dumpTrace();
  907.                 } // if
  908.                 return $dst;
  909.         } // patchCode
  910.  
  911.         function prepareEvalCode(&$code, $name, $type, $id, $pane)
  912.         {
  913.                 if ($this->dying) return false;
  914.                 if (!$this->nonblank($code)) return false;
  915.                 $code .= "\n/*'/*\"/**/;"; // closes all comments and strings that my be open
  916.                 $disable = ($this->traceMode & _FF_TRACEMODE_DISABLE) ? true : false;
  917.                 if (!$disable) {
  918.                         $mode = 'null';
  919.                         $srch =
  920.                                 '#'.
  921.                                         '^[\\s]*(//\+trace|/\*\+trace)'.
  922.                                         '[ \\t]*([\\w]+)?'.
  923.                                         '[ \\t]*([\\w]+)?'.
  924.                                         '[ \\t]*([\\w]+)?'.
  925.                                         '[ \\t]*([\\w]+)?'.
  926.                                         '[ \\t]*([\\w]+)?'.
  927.                                         '[ \\t]*([\\w]+)?'.
  928.                                         '[ \\t]*(\\*/|\\r\\n)?'.
  929.                                 '#';
  930.                         $match = array();
  931.                         if (preg_match($srch, $code, $match)) {
  932.                                 $mode = 2;
  933.                                 $append = $direct = $xeval = $piece = $func = $msg = false;
  934.                                 $local = $def = true;
  935.                                 for ($m = 2; $m < count($match); $m++)
  936.                                         switch ($match[$m]) {
  937.                                                 // disable
  938.                                                 case 'dis'     :
  939.                                                 case 'disable' : $disable = true; break;
  940.                                                 // mode
  941.                                                 case 'pop'     :
  942.                                                 case 'popup'   : $direct = $append = false; break;
  943.                                                 case 'app'     :
  944.                                                 case 'append'  : $append = true; $direct = false; break;
  945.                                                 case 'dir'     :
  946.                                                 case 'direct'  : $direct = true; $append = false; break;
  947.                                                 // priority
  948.                                                 case 'min'     :
  949.                                                 case 'minimum' : $mode = 0; break;
  950.                                                 case 'low'     : $mode = 1; break;
  951.                                                 case 'nor'     :
  952.                                                 case 'normal'  : $mode = 2; break;
  953.                                                 case 'hig'     :
  954.                                                 case 'high'    : $mode = 3; break;
  955.                                                 case 'max'     :
  956.                                                 case 'maximum' : $mode = 4; break;
  957.                                                 // scope
  958.                                                 case 'glo'     :
  959.                                                 case 'global'  : $local = false; break;
  960.                                                 case 'loc'     :
  961.                                                 case 'local'   : $local = true; break;
  962.                                                 // topics
  963.                                                 case 'all'     : $def = false; $xeval = $piece = $func = $msg = true; break;
  964.                                                 case 'non'     :
  965.                                                 case 'none'    : $def = $xeval = $piece = $func = $msg = false; break;
  966.                                                 case 'eva'     :
  967.                                                 case 'eval'    : $def = false; $xeval = true; break;
  968.                                                 case 'pie'     :
  969.                                                 case 'piece'   : $def = false; $piece = true; break;
  970.                                                 case 'fun'     :
  971.                                                 case 'function': $def = false; $func  = true; break;
  972.                                                 case 'mes'     :
  973.                                                 case 'message' : $def = false; $msg   = true; break;
  974.                                                 default        : break;
  975.                                         } // switch
  976.  
  977.                                 if ($def) { $xeval = false; $piece = $func = $msg = true; }
  978.                                 if ($xeval) $mode |= _FF_TRACEMODE_EVAL;
  979.                                 if ($piece) $mode |= _FF_TRACEMODE_PIECE;
  980.                                 if ($func)  $mode |= _FF_TRACEMODE_FUNCTION;
  981.                                 if ($msg)   $mode |= _FF_TRACEMODE_MESSAGE;
  982.                                 if ($local) $mode |= _FF_TRACEMODE_LOCAL;
  983.  
  984.                                 $first = ($this->traceMode & _FF_TRACEMODE_FIRST) ? true : false;
  985.                                 if ($first) {
  986.                                         $oldMode = $this->traceMode;
  987.                                         $this->traceMode = 0;
  988.                                         if ($disable) $this->traceMode |= _FF_TRACEMODE_DISABLE;
  989.                                         if ($append)  $this->traceMode |= _FF_TRACEMODE_APPEND;
  990.                                         if ($direct)  {
  991.                                                 $this->traceMode |= _FF_TRACEMODE_DIRECT;
  992.                                                 $html = ob_get_contents();
  993.                                                 ob_end_clean();
  994.                                                 echo '<pre>'.htmlspecialchars($html,ENT_QUOTES);
  995.                                                 ob_start();
  996.                                         } // if
  997.                                 } else
  998.                                         $disable = false;
  999.                                 if (_FF_DEBUG & _FF_DEBUG_DIRECTIVE) {
  1000.                                         $_deb = "\n_FF_DEBUG_DIRECTIVE:";
  1001.                                         if ($first) $_deb .= "\n  Previous mode=".$this->dispTraceMode($oldMode);
  1002.                                         $_deb .=
  1003.                                                 "\n  Trace mode   =".$this->dispTraceMode($this->traceMode).
  1004.                                                 "\n  New mode     =".$this->dispTraceMode($mode).
  1005.                                                 "\n";
  1006.                                         $this->traceBuffer .= htmlspecialchars($_deb,ENT_QUOTES);
  1007.                                         if ($this->traceMode & _FF_TRACEMODE_DIRECT) $this->dumpTrace();
  1008.                                 } // if
  1009.                         } // if trace directive
  1010.                         if (!$disable) {
  1011.                                 if (!$name) {
  1012.                                         $name = preg_replace('/([\\s]+)/si', ' ', $code);
  1013.                                         if (strlen($name) > _FF_TRACE_NAMELIMIT)
  1014.                                                 $name = substr($code, 0, _FF_TRACE_NAMELIMIT-3).'...';
  1015.                                 } // if
  1016.                                 $code = $this->patchCode($mode, $code, $name, $type, $id, $pane);
  1017.                         } // if
  1018.                 } // if trace not disabled
  1019.                 $code = str_replace($this->findtags, $this->replacetags, $code);
  1020.                 return true;
  1021.         } // prepareEvalCode
  1022.  
  1023.         function getPieceById($id, $name=null)
  1024.         {
  1025.                 if ($this->dying) return '';
  1026.                 global $database;
  1027.                 $database = JFactory::getDBO();
  1028.                 $database->setQuery(
  1029.                         'select code, name from #__facileforms_pieces '.
  1030.                          'where id='.$id.' and published=1 '
  1031.                 );
  1032.                 $rows = $database->loadObjectList();
  1033.                 if ($rows && count($rows)) {
  1034.                         $name = $rows[0]->name;
  1035.                         return $rows[0]->code;
  1036.                 } // if
  1037.                 return '';
  1038.         } // getPieceById
  1039.  
  1040.         function getPieceByName($name, $id=null)
  1041.         {
  1042.                 if ($this->dying) return '';
  1043.                 global $database;
  1044.                 $database = JFactory::getDBO();
  1045.                 $database->setQuery(
  1046.                         'select id, code from #__facileforms_pieces '.
  1047.                         'where name=\''.$name.'\' and published=1 '.
  1048.                         'order by id desc'
  1049.                 );
  1050.                 $rows = $database->loadObjectList();
  1051.                 if ($rows && count($rows)) {
  1052.                         $id = $rows[0]->id;
  1053.                         return $rows[0]->code;
  1054.                 } // if
  1055.                 return '';
  1056.         } // getPieceByName
  1057.  
  1058.         function execPiece($code, $name, $type, $id, $pane)
  1059.         {
  1060.                 $ret = '';
  1061.                 if ($this->prepareEvalCode($code, $name, $type, $id, $pane)) {
  1062.                         $this->traceEval($name);
  1063.  
  1064.                         $ret = eval($code);
  1065.                 } // if
  1066.                 return $ret;
  1067.         } // execPiece
  1068.  
  1069.         function execPieceById($id)
  1070.         {
  1071.                 $name = null;
  1072.                 $code = $this->getPieceById($id, $name);
  1073.                 return $this->execPiece($code, BFText::_('COM_BREEZINGFORMS_PROCESS_PIECE')." $name", 'p', $id, null);
  1074.         } // execPieceById
  1075.  
  1076.         function execPieceByName($name)
  1077.         {
  1078.                 $id = null;
  1079.                 $code = $this->getPieceByName($name, $id);
  1080.                 return $this->execPiece($code, BFText::_('COM_BREEZINGFORMS_PROCESS_PIECE')." $name", 'p', $id, null);
  1081.         } // execPieceByName
  1082.  
  1083.         function replaceCode($code, $name, $type, $id, $pane)
  1084.         {
  1085.                 if ($this->dying) return '';
  1086.                 $p1 = 0;
  1087.                 $l = strlen($code);
  1088.                 $c = '';
  1089.                 $n = 0;
  1090.                 while ($p1 < $l) {
  1091.                         $p2 = strpos($code, '<?php', $p1);
  1092.                         if ($p2 === false) $p2 = $l;
  1093.                         $c .= substr($code, $p1, $p2-$p1);
  1094.                         $p1 = $p2;
  1095.                         if ($p1 < $l) {
  1096.                                 $p1 += 5;
  1097.                                 $p2 = strpos($code, '?>', $p1);
  1098.                                 if ($p2 === false) $p2 = $l;
  1099.                                 $n++;
  1100.                                 $c .= $this->execPiece(substr($code, $p1, $p2-$p1), $name."[$n]", $type, $id, $pane);
  1101.                                 if ($this->dying) return '';
  1102.                                 $p1 = $p2+2;
  1103.                         } // if
  1104.                 } // while
  1105.                 return str_replace($this->findtags, $this->replacetags, $c);
  1106.         } // replaceCode
  1107.  
  1108.         function compileQueryCol(&$elem, &$coldef)
  1109.         {
  1110.                 $coldef->comp = array();
  1111.                 if ($this->trim(str_replace($this->findtags, $this->replacetags, $coldef->value))) {
  1112.                         $c = $p1 = 0;
  1113.                         $l = strlen($coldef->value);
  1114.                         while ($p1 < $l) {
  1115.                                 $p2 = strpos($coldef->value, '<?php', $p1);
  1116.                                 if ($p2 === false) $p2 = $l;
  1117.                                 $coldef->comp[$c] = array(
  1118.                                         false,
  1119.                                         str_replace(
  1120.                                                 $this->findtags,
  1121.                                                 $this->replacetags,
  1122.                                                 trim(substr($coldef->value, $p1, $p2-$p1))
  1123.                                         )
  1124.                                 );
  1125.                                 if ($this->trim($coldef->comp[$c][1])) $c++;
  1126.                                 $p1 = $p2;
  1127.                                 if ($p1 < $l) {
  1128.                                         $p1 += 5;
  1129.                                         $p2 = strpos($coldef->value, '?>', $p1);
  1130.                                         if ($p2 === false) $p2 = $l;
  1131.                                         $coldef->comp[$c] = array(true, substr($coldef->value, $p1, $p2-$p1));
  1132.                                         if ($this->prepareEvalCode(
  1133.                                                         $coldef->comp[$c][1],
  1134.                                                         BFText::_('COM_BREEZINGFORMS_PROCESS_QVALUEOF')." ".$elem->name."::".$coldef->name,
  1135.                                                         'e',
  1136.                                                         $elem->id,
  1137.                                                         2
  1138.                                                 )
  1139.                                         ) $c++;
  1140.                                         $p1 = $p2+2;
  1141.                                 } // if
  1142.                         } // while
  1143.                         if ($c > count($coldef->comp)) array_pop($coldef->comp);
  1144.                 } // if non-empty
  1145.         } // compileQueryCol
  1146.  
  1147.         function execQueryValue($code, &$elem, &$row, &$coldef, $value)
  1148.         {
  1149.                 $this->traceEval(BFText::_('COM_BREEZINGFORMS_PROCESS_QVALUEOF')." ".$elem->name."::".$coldef->name);
  1150.                 return eval($code);
  1151.         } // execQueryValue
  1152.  
  1153.         function execQuery(&$elem, &$valrows, &$coldefs)
  1154.         {
  1155.                 $ret = null;
  1156.                 $code = $elem->data2;
  1157.                 if ($this->prepareEvalCode($code, BFText::_('COM_BREEZINGFORMS_PROCESS_QPIECEOF')." ".$elem->name, 'e', $elem->id, 1)) {
  1158.                         $rows = array();
  1159.                         $this->traceEval(BFText::_('COM_BREEZINGFORMS_PROCESS_QPIECEOF')." ".$elem->name);
  1160.                         eval($code);
  1161.                         $rcnt = count($rows);
  1162.                         $ccnt = count($coldefs);
  1163.                         $valrows = array();
  1164.                         for ($r = 0; $r < $rcnt; $r++) {
  1165.                                 $row = &$rows[$r];
  1166.                                 $valrow = array();
  1167.                                 for ($c = 0; $c < $ccnt; $c++) {
  1168.                                         $coldef = &$coldefs[$c];
  1169.                                         $cname = $coldef->name;
  1170.                                         $value = isset($row->$cname)
  1171.                                                                 ? str_replace($this->findtags, $this->replacetags, $row->$cname)
  1172.                                                                 : '';
  1173.                                         $xcnt = count($coldef->comp);
  1174.                                         if (!$xcnt)
  1175.                                                 $valrow[] = $value;
  1176.                                         else {
  1177.                                                 $val = '';
  1178.                                                 for ($x = 0; $x < $xcnt; $x++) {
  1179.                                                         $val .= $coldef->comp[$x][0]
  1180.                                                                         ? $this->execQueryValue($coldef->comp[$x][1], $elem, $row, $coldef, $value)
  1181.                                                                         : $coldef->comp[$x][1];
  1182.                                                         if ($this->dying) break;
  1183.                                                 } // for
  1184.                                                 $valrow[] = str_replace($this->findtags, $this->replacetags, $val);
  1185.                                         } // if
  1186.                                         unset($coldef);
  1187.                                         if ($this->dying) break;
  1188.                                 } // for
  1189.                                 $valrows[] = $valrow;
  1190.                                 unset($row);
  1191.                                 if ($this->dying) break;
  1192.                         } // for
  1193.                         $rows = null;
  1194.                 } // if
  1195.         } // execQuery
  1196.  
  1197.         function script2clause(&$row)
  1198.         {
  1199.                 if ($this->dying) return '';
  1200.                 global $database;
  1201.                 $database = JFactory::getDBO();
  1202.                 $funcname = '';
  1203.                 switch ($row->script2cond) {
  1204.                         case 1:
  1205.                                 $database->setQuery(
  1206.                                         "select name from #__facileforms_scripts ".
  1207.                                          "where id=".$row->script2id." and published=1 "
  1208.                                 );
  1209.                                 $funcname = $database->loadResult();
  1210.                                 break;
  1211.                         case 2:
  1212.                                 $funcname = 'ff_'.$row->name.'_action';
  1213.                                 break;
  1214.                         default:
  1215.                                 break;
  1216.                 } // switch
  1217.                 $attribs = '';
  1218.                 if ($funcname != '') {
  1219.                         if ($row->script2flag1) $attribs .= ' onclick="'.$funcname.'(this,\'click\');"';
  1220.                         if ($row->script2flag2) $attribs .= ' onblur="'.$funcname.'(this,\'blur\');"';
  1221.                         if ($row->script2flag3) $attribs .= ' onchange="'.$funcname.'(this,\'change\');"';
  1222.                         if ($row->script2flag4) $attribs .= ' onfocus="'.$funcname.'(this,\'focus\');"';
  1223.                         if ($row->script2flag5) $attribs .= ' onselect="'.$funcname.'(this,\'select\');"';
  1224.                 } // if
  1225.                 return $attribs;
  1226.         } // script2clause
  1227.  
  1228.         function loadBuiltins(&$library)
  1229.         {
  1230.                 global $database, $ff_config, $ff_request;
  1231.                 $database = JFactory::getDBO();
  1232.                 if ($this->dying) return;
  1233.                 $library[] = array('FF_STATUS_OK', 'var FF_STATUS_OK = '._FF_STATUS_OK.';');
  1234.                 $library[] = array('FF_STATUS_UNPUBLISHED', 'var FF_STATUS_UNPUBLISHED = '._FF_STATUS_UNPUBLISHED.';');
  1235.                 $library[] = array('FF_STATUS_SAVERECORD_FAILED', 'var FF_STATUS_SAVERECORD_FAILED = '._FF_STATUS_SAVERECORD_FAILED.';');
  1236.                 $library[] = array('FF_STATUS_SAVESUBRECORD_FAILED', 'var FF_STATUS_SAVESUBRECORD_FAILED = '._FF_STATUS_SAVESUBRECORD_FAILED.';');
  1237.                 $library[] = array('FF_STATUS_UPLOAD_FAILED', 'var FF_STATUS_UPLOAD_FAILED = '._FF_STATUS_UPLOAD_FAILED.';');
  1238.                 $library[] = array('FF_STATUS_SENDMAIL_FAILED', 'var FF_STATUS_SENDMAIL_FAILED = '._FF_STATUS_SENDMAIL_FAILED.';');
  1239.                 $library[] = array('FF_STATUS_ATTACHMENT_FAILED', 'var FF_STATUS_ATTACHMENT_FAILED = '._FF_STATUS_ATTACHMENT_FAILED.';');
  1240.  
  1241.                 $library[] = array('ff_homepage', "var ff_homepage = '".$this->homepage."';");
  1242.                 $library[] = array('ff_currentpage', "var ff_currentpage = ".$this->page.";");
  1243.                 $library[] = array('ff_lastpage', "var ff_lastpage = ".$this->formrow->pages.";");
  1244.                 $library[] = array('ff_images', "var ff_images = '".$this->images."';");
  1245.                 $library[] = array('ff_validationFocusName', "var ff_validationFocusName = '';");
  1246.                 $library[] = array('ff_currentheight', "var ff_currentheight = 0;");
  1247.  
  1248.                 $code = "var ff_elements = [".nl();
  1249.                 for($i = 0; $i < $this->rowcount; $i++) {
  1250.                         $row = $this->rows[$i];
  1251.                         $endline = ",".nl();
  1252.                         if ($i == $this->rowcount-1) $endline = nl();
  1253.                         switch ($row->type) {
  1254.                                 case "Hidden Input":
  1255.                                         $code .= "    ['ff_elem".$row->id."', 'ff_elem".$row->id."', '".$row->name."', ".$row->page.", ".$row->id."]".$endline;
  1256.                                         break;
  1257.                                 case "Static Text":
  1258.                                 case "Rectangle":
  1259.                                 case "Tooltip":
  1260.                                 case "Icon":
  1261.                                         $code .= "    ['ff_div".$row->id."', 'ff_div".$row->id."', '".$row->name."', ".$row->page.", ".$row->id."]".$endline;
  1262.                                         break;
  1263.                                 default:
  1264.                                         $code .= "    ['ff_elem".$row->id."', 'ff_div".$row->id."', '".$row->name."', ".$row->page.", ".$row->id."]".$endline;
  1265.                         } // switch
  1266.                 } // for
  1267.                 $code .= "];";
  1268.                 $library[] = array('ff_elements', $code);
  1269.  
  1270.                 $code = "var ff_param = new Object();";
  1271.                 reset($ff_request);
  1272.                 while (list($prop, $val) = each($ff_request))
  1273.                         if (substr($prop,0,9) == 'ff_param_')
  1274.                                 $code .= nl()."ff_param.".substr($prop,9)." = '".$val."';";
  1275.                 $library[] = array('ff_param', $code);
  1276.  
  1277.                 $library[] = array('ff_getElementByIndex',
  1278.                         "function ff_getElementByIndex(index)".nl().
  1279.                         "{".nl().
  1280.                         "    if (index >= 0 && index < ff_elements.length)".nl().
  1281.                         "        return eval('document.".$this->form_id.".'+ff_elements[index][0]);".nl().
  1282.                         "    return null;".nl().
  1283.                         "} // ff_getElementByIndex"
  1284.                 );
  1285.  
  1286.                 $library[] = array('ff_getElementByName',
  1287.                         "function ff_getElementByName(name)".nl().
  1288.                         "{".nl().
  1289.                         "    if (name.substr(0,6) == 'ff_nm_') name = name.substring(6,name.length-2);".nl().
  1290.                         "    for (var i = 0; i < ff_elements.length; i++)".nl().
  1291.                         "        if (ff_elements[i][2]==name)".nl().
  1292.                         "            return eval('document.".$this->form_id.".'+ff_elements[i][0]);".nl().
  1293.                         "    return null;".nl().
  1294.                         "} // ff_getElementByName"
  1295.                 );
  1296.  
  1297.                 $library[] = array('ff_getPageByName',
  1298.                         "function ff_getPageByName(name)".nl().
  1299.                         "{".nl().
  1300.                         "    if (name.substr(0,6) == 'ff_nm_') name = name.substring(6,name.length-2);".nl().
  1301.                         "    for (var i = 0; i < ff_elements.length; i++)".nl().
  1302.                         "        if (ff_elements[i][2]==name)".nl().
  1303.                         "            return ff_elements[i][3];".nl().
  1304.                         "    return 0;".nl().
  1305.                         "} // ff_getPageByName"
  1306.                 );
  1307.  
  1308.                 $library[] = array('ff_getDivByName',
  1309.                         "function ff_getDivByName(name)".nl().
  1310.                         "{".nl().
  1311.                         "    if (name.substr(0,6) == 'ff_nm_') name = name.substring(6,name.length-2);".nl().
  1312.                         "    for (var i = 0; i < ff_elements.length; i++)".nl().
  1313.                         "        if (ff_elements[i][2]==name)".nl().
  1314.                         "            return document.getElementById(ff_elements[i][1]);".nl().
  1315.                         "    return null;".nl().
  1316.                         "} // ff_getDivByName"
  1317.                 );
  1318.  
  1319.                 $library[] = array('ff_getIdByName',
  1320.                         "function ff_getIdByName(name)".nl().
  1321.                         "{".nl().
  1322.                         "    if (name.substr(0,6) == 'ff_nm_') name = name.substring(6,name.length-2);".nl().
  1323.                         "    for (var i = 0; i < ff_elements.length; i++)".nl().
  1324.                         "        if (ff_elements[i][2]==name)".nl().
  1325.                         "            return ff_elements[i][4];".nl().
  1326.                         "    return null;".nl().
  1327.                         "} // ff_getIdByName"
  1328.                 );
  1329.  
  1330.                 $library[] = array('ff_getForm',
  1331.                         "function ff_getForm()".nl().
  1332.                         "{".nl().
  1333.                         "    return document.".$this->form_id.";".nl().
  1334.                         "} // ff_getForm"
  1335.                 );
  1336.  
  1337.                 $code= "function ff_submitForm()".nl().
  1338.                            "{bfCheckCaptcha();}".nl();
  1339.                 $code.= "function ff_submitForm2()".nl().
  1340.                            "{".nl();
  1341.                 if ($this->inline)
  1342.                         $code .= "    submitform('submit');".nl();
  1343.                 else
  1344.                         $code .= "    document.".$this->form_id.".submit();".nl();
  1345.                 $code .= "} // ff_submitForm";
  1346.                 $library[] = array('ff_submitForm', $code);
  1347.  
  1348.                 $library[] = array('ff_validationFocus',
  1349.                         "function ff_validationFocus(name)".nl().
  1350.                         "{".nl().
  1351.                         "    if (name==undefined || name=='') {".nl().
  1352.                         "        // set focus if name of first failing element was set".nl().
  1353.                         "        if (ff_validationFocusName!='') {".nl().
  1354.                         "            ff_switchpage(ff_getPageByName(ff_validationFocusName));".nl().
  1355.                         "            if(ff_getElementByName(ff_validationFocusName).focus){".nl().
  1356.                         "                   ff_getElementByName(ff_validationFocusName).focus();".nl().
  1357.                         "                        }".nl().
  1358.                         "        } // if".nl().
  1359.                         "    } else {".nl().
  1360.                         "        // store name if this is the first failing element".nl().
  1361.                         "        if (ff_validationFocusName=='')".nl().
  1362.                         "            ff_validationFocusName = name;".nl().
  1363.                         "    } // if".nl().
  1364.                         "} // ff_validationFocus"
  1365.                 );
  1366.  
  1367.                 $code = "function ff_validation(page)".nl().
  1368.                                 "{".nl().
  1369.                                 "    if(typeof inlineErrorElements != 'undefined') inlineErrorElements = new Array();" . nl() .
  1370.                                 "    error = '';".nl().
  1371.                                 "    ff_validationFocusName = '';".nl();
  1372.                 $curr = -1;
  1373.                 for($i = 0; $i < $this->rowcount; $i++) {
  1374.                         $row = $this->rows[$i];
  1375.                         $funcname = '';
  1376.                         switch ($row->script3cond) {
  1377.                                 case 1:
  1378.                                         $database->setQuery(
  1379.                                                 "select name from #__facileforms_scripts ".
  1380.                                                  "where id=".$row->script3id." and published=1 "
  1381.                                         );
  1382.                                         $funcname = $database->loadResult();
  1383.                                         break;
  1384.                                 case 2:
  1385.                                         $funcname = 'ff_'.$row->name.'_validation';
  1386.                                         break;
  1387.                                 default:
  1388.                                         break;
  1389.                         } // switch
  1390.                         if ($funcname != '') {
  1391.                                 if ($row->page != $curr) {
  1392.                                         if ($curr > 0)
  1393.                                                 $code .= "    } // if".nl();
  1394.                                         $code .= "    if (page==".$row->page." || page==0) {".nl();
  1395.                                         $curr = $row->page;
  1396.                                 } // if
  1397.                                 if ($this->trim($row->script3msg)) $msg = addslashes($row->script3msg)."\\n"; else $msg = "";
  1398.                                 $code .= " if( typeof bfDeactivateField == 'undefined' || !bfDeactivateField['ff_nm_".$row->name."[]'] ){ ".nl();
  1399.                                 $code .= "        errorout = ".$funcname."(document.".$this->form_id."['ff_nm_".$row->name."[]'],\"".$msg."\");".nl();
  1400.                                 $code .= "        error += errorout".nl();
  1401.                                 $code .= "        if(typeof inlineErrorElements != 'undefined'){".nl();
  1402.                                 $code .= "             inlineErrorElements.push([\"".$row->name."\",errorout]);".nl();
  1403.                                 $code .= "        }".nl();
  1404.                                 $code .= "}".nl();
  1405.                         } // if
  1406.                 } // for
  1407.                 if ($curr > 0) $code .= "    } // if".nl();
  1408.                 $code .= 'if(error != "" && document.getElementById(\'ff_capimgValue\')){
  1409.              document.getElementById(\'ff_capimgValue\').src = \''.JURI::root().'index.php?raw=true&amp;option=com_breezingforms&amp;bfCaptcha=true?\' + Math.random();
  1410.                  document.getElementById(\'bfCaptchaEntry\').value = "";
  1411.             }';
  1412.                 $code .= "    return error;".nl().
  1413.                                  "} // ff_validation";
  1414.                 $library[] = array('ff_validation', $code);
  1415.  
  1416.                 // ff_initialize
  1417.                 $code = "function ff_initialize(condition)".nl().
  1418.                                 "{".nl();
  1419.                 $formentry = false;
  1420.                 $funcname = '';
  1421.                 switch ($this->formrow->script1cond) {
  1422.                         case 1:
  1423.                                 $database->setQuery(
  1424.                                         "select name from #__facileforms_scripts ".
  1425.                                          "where id=".$this->formrow->script1id." and published=1 "
  1426.                                 );
  1427.                                 $funcname = $database->loadResult();
  1428.                                 break;
  1429.                         case 2:
  1430.                                 $funcname = 'ff_'.$this->formrow->name.'_init';
  1431.                                 break;
  1432.                         default:
  1433.                                 break;
  1434.                 } // switch
  1435.                 if ($funcname != '') {
  1436.                         $code .= "    if (condition=='formentry') {".nl().
  1437.                                          "        ".$funcname."();".nl();
  1438.                         $formentry = true;
  1439.                 } // if
  1440.                 for($i = 0; $i < $this->rowcount; $i++) {
  1441.                         $row = $this->rows[$i];
  1442.                         $funcname = '';
  1443.                         switch ($row->script1cond) {
  1444.                                 case 1:
  1445.                                         $database->setQuery(
  1446.                                                 "select name from #__facileforms_scripts ".
  1447.                                                  "where id=".$row->script1id." and published=1 "
  1448.                                         );
  1449.                                         $funcname = $database->loadResult();
  1450.                                         break;
  1451.                                 case 2:
  1452.                                         $funcname = 'ff_'.$row->name.'_init';
  1453.                                         break;
  1454.                                 default:
  1455.                                         break;
  1456.                         } // switch
  1457.                         if ($funcname != '') {
  1458.                                 if ($row->script1flag1) {
  1459.                                         if (!$formentry) {
  1460.                                                 $code .= "    if (condition=='formentry') {".nl();
  1461.                                                 $formentry = true;
  1462.                                         } // if
  1463.                                         $code .= "        ".$funcname."(document.".$this->form_id."['ff_nm_".$row->name."[]'], condition);".nl();
  1464.                                 } // if
  1465.                         } // if
  1466.                 } // for
  1467.                 $pageentry = false;
  1468.                 $curr = -1;
  1469.                 for($i = 0; $i < $this->rowcount; $i++) {
  1470.                         $row = $this->rows[$i];
  1471.                         $funcname = '';
  1472.                         switch ($row->script1cond) {
  1473.                                 case 1:
  1474.                                         $database->setQuery(
  1475.                                                 "select name from #__facileforms_scripts ".
  1476.                                                  "where id=".$row->script1id." and published=1 "
  1477.                                         );
  1478.                                         $funcname = $database->loadResult();
  1479.                                         break;
  1480.                                 case 2:
  1481.                                         $funcname = 'ff_'.$row->name.'_init';
  1482.                                         break;
  1483.                                 default:
  1484.                                         break;
  1485.                         } // switch
  1486.                         if ($funcname != '') {
  1487.                                 if ($row->script1flag2) { // page entry
  1488.                                         if ($formentry) {
  1489.                                                 $code .= "    } else".nl();
  1490.                                                 $formentry = false;
  1491.                                         } // if
  1492.                                         if (!$pageentry) {
  1493.                                                 $code .= "    if (condition=='pageentry') {".nl();
  1494.                                                 $pageentry = true;
  1495.                                         } // if
  1496.                                         if ($curr != $row->page) {
  1497.                                                 if ($curr > 0) $code .= "        } // if".nl();
  1498.                                                 $code .= "        if (ff_currentpage==".$row->page.") {".nl();
  1499.                                                 $curr = $row->page;
  1500.                                         } // if
  1501.                                         $code .= "            ".$funcname."(document.".$this->form_id.".ff_elem".$row->id.", condition);".nl();
  1502.                                 } // if
  1503.                         } // if
  1504.                 } // for
  1505.                 if ($curr > 0) $code .= "        } // if".nl();
  1506.                 if ($formentry || $pageentry) $code .= "    } // if".nl();
  1507.                 $code .=  "} // ff_initialize";
  1508.                 $library[] = array('ff_initialize', $code);
  1509.  
  1510.                 if ($this->showgrid) {
  1511.                         if ($this->formrow->widthmode)
  1512.                                 $width = $this->formrow->prevwidth;
  1513.                         else
  1514.                                 $width = $this->formrow->width;
  1515.                         $library[] = array('ff_showgrid',
  1516.                                 "var ff_gridvcnt = 0;".nl().
  1517.                                 "var ff_gridhcnt = 0;".nl().
  1518.                                 "var ff_gridheight = ".$this->formrow->height.";".nl().
  1519.                                 nl().
  1520.                                 "function ff_showgrid()".nl().
  1521.                                 "{".nl().
  1522.                                 "   var i, e, s;".nl().
  1523.                                 "   var hcnt = parseInt(ff_gridheight / ".$ff_config->gridsize.")+1;".nl().
  1524.                                 "   var vcnt = parseInt(".$width." / ".$ff_config->gridsize.")+1;".nl().
  1525.                                 "   var formdiv = document.getElementById('ff_formdiv".$this->form."');".nl().
  1526.                                 "   var firstelem = formdiv.firstChild;".nl().
  1527.                                 "   for (i = ff_gridhcnt; i < hcnt; i++) {".nl().
  1528.                                 "       e = document.createElement('div');".nl().
  1529.                                 "       e.id = 'ff_gridh'+i;".nl().
  1530.                                 "       s = e.style;".nl().
  1531.                                 "       s.position = 'absolute';".nl().
  1532.                                 "       s.left = '0px';".nl().
  1533.                                 "       s.top = (i*".$ff_config->gridsize.")+'px';".nl().
  1534.                                 "       s.width = '".$width."px';".nl().
  1535.                                 "       s.fontSize = '0px';".nl().
  1536.                                 "       s.lineHeight = '1px';".nl().
  1537.                                 "       s.height = '1px';".nl().
  1538.                                 "       if (i % 2)".nl().
  1539.                                 "           s.background = '".$ff_config->gridcolor2."';".nl().
  1540.                                 "       else".nl().
  1541.                                 "           s.background = '".$ff_config->gridcolor1."';".nl().
  1542.                                 "       formdiv.insertBefore(e,firstelem);".nl().
  1543.                                 "   } // for".nl().
  1544.                                 "   if (hcnt > ff_gridhcnt) ff_gridhcnt = hcnt;".nl().
  1545.                                 "   for (i = 0; i < ff_gridvcnt; i++)".nl().
  1546.                                 "       document.getElementById('ff_gridv'+i).style.height = ff_gridheight+'px';".nl().
  1547.                                 "   for (i = ff_gridvcnt; i < vcnt; i++) {".nl().
  1548.                                 "       e = document.createElement('div');".nl().
  1549.                                 "       e.id = 'ff_gridv'+i;".nl().
  1550.                                 "       s = e.style;".nl().
  1551.                                 "       s.position = 'absolute';".nl().
  1552.                                 "       s.left = (i*".$ff_config->gridsize.")+'px';".nl().
  1553.                                 "       s.top = '0px';".nl().
  1554.                                 "       s.width = '1px';".nl().
  1555.                                 "       s.height = ff_gridheight+'px';".nl().
  1556.                                 "       if (i % 2)".nl().
  1557.                                 "           s.background = '".$ff_config->gridcolor2."';".nl().
  1558.                                 "       else".nl().
  1559.                                 "           s.background = '".$ff_config->gridcolor1."';".nl().
  1560.                                 "       formdiv.insertBefore(e,firstelem);".nl().
  1561.                                 "   } // for".nl().
  1562.                                 "   if (vcnt > ff_gridvcnt) ff_gridvcnt = vcnt;".nl().
  1563.                                 "} // ff_showgrid"
  1564.                         );
  1565.                 } // if
  1566.  
  1567.                 // ff_resizePage
  1568.                 $code =
  1569.                         "function ff_resizepage(mode, value)".nl().
  1570.                         "{".nl().
  1571.                         "    var height = 0;".nl().
  1572.                         "    if (mode > 0) {".nl().
  1573.                         "        for (var i = 0; i < ff_elements.length; i++) {".nl().
  1574.                         "            if (mode==2 || ff_elements[i][3]==ff_currentpage) {".nl().
  1575.                         "                e = document.getElementById(ff_elements[i][1]);".nl().
  1576.                         "                if(e){".nl().
  1577.                         "                       h = e.offsetTop+e.offsetHeight;".nl().
  1578.                         "                       if (h > height) height = h;".nl().
  1579.                         "                }".nl().
  1580.                         "            } // if".nl().
  1581.                         "        } // for".nl().
  1582.                         "    } // if".nl().
  1583.                         "    var totheight = height+value;".nl().
  1584.                         "    if ((mode==2 && totheight>ff_currentheight) || (mode!=2 && totheight!=ff_currentheight)) {".nl();
  1585.                 if ($this->inframe) {
  1586.                         $fn = ($this->runmode==_FF_RUNMODE_PREVIEW) ? 'ff_prevframe' : ('ff_frame'.$this->form);
  1587.                         $code .=
  1588.                         "        parent.document.getElementById('".$fn."').style.height = totheight+'px';".nl().
  1589.                         "        parent.window.scrollTo(0,0);".nl().
  1590.                         "        document.getElementById('ff_formdiv".$this->form."').style.height = height+'px';".nl().
  1591.                         "        window.scrollTo(0,0);".nl();
  1592.                 } // if
  1593.                 else
  1594.                         $code .=
  1595.                         "        document.getElementById('ff_formdiv".$this->form."').style.height = totheight+'px';".nl().
  1596.                         "        window.scrollTo(0,0);".nl();
  1597.                 $code .=
  1598.                         "        ff_currentheight = totheight;".nl();
  1599.                 if ($this->showgrid) {
  1600.                         $code .=
  1601.                         "        ff_gridheight = totheight;".nl().
  1602.                         "        ff_showgrid();".nl();
  1603.                 } // if
  1604.                 $code .=
  1605.                         "    } // if".nl().
  1606.                         "} // ff_resizepage";
  1607.                 $library[] = array('ff_resizepage', $code);
  1608.  
  1609.                 if($this->formrow->template_code_processed == ''){
  1610.  
  1611.                         // ff_switchpage
  1612.                         $code = "function ff_switchpage(page)".nl().
  1613.                                         "{;".nl().
  1614.                                         "    if (page>=1 && page<=ff_lastpage && page!=ff_currentpage) {".nl().
  1615.                                         "        vis = 'visible';".nl();
  1616.                         $curr = -1;
  1617.                         for($i = 0; $i < $this->rowcount; $i++) {
  1618.                                 $row = $this->rows[$i];
  1619.                                 if ($row->type!="Hidden Input") {
  1620.                                         if ($row->page != $curr) {
  1621.                                                 if ($curr >= 1) $code .= "        } // if".nl();
  1622.                                                 $code .= "        if (page==".$row->page." || ff_currentpage==".$row->page.") {".nl().
  1623.                                                                  "            if (page==".$row->page.") vis = 'visible';  else vis = 'hidden';".nl();
  1624.                                                 $curr = $row->page;
  1625.                                         } // if
  1626.                                         $code .= "            document.getElementById('ff_div".$row->id."').style.visibility=vis;".nl();
  1627.                                 } // if
  1628.                         } // for
  1629.                         if ($curr >= 1) $code .= "        } // if".nl();
  1630.                         $code .= "        ff_currentpage = page;".nl();
  1631.                         if ($this->formrow->heightmode==1)
  1632.                                 $code .=
  1633.                                          "        ff_resizepage(".$this->formrow->heightmode.", ".$this->formrow->height.");".nl();
  1634.                         $code .= "        ff_initialize('pageentry');".nl().
  1635.                                          "    } // if".nl().
  1636.                                          "} // ff_switchpage";
  1637.                 }
  1638.                 else
  1639.                 {
  1640.                         $visPages = '';
  1641.                         $pagesSize = isset($this->formrow->pages) ? intval($this->formrow->pages) : 1;
  1642.                         for($pageCnt = 1; $pageCnt <= $pagesSize;$pageCnt++){
  1643.                                 $visPages .= 'if(document.getElementById("bfPage'.$pageCnt.'"))document.getElementById("bfPage'.$pageCnt.'").style.display = "none";';
  1644.                         }
  1645.  
  1646.                         $code = 'function ff_switchpage(page){
  1647.                                 '.$visPages.'
  1648.                                 if(document.getElementById("bfPage"+page))document.getElementById("bfPage"+page).style.display = "";
  1649.                                 ff_currentpage = page;
  1650.                                 '.($this->formrow->heightmode==1 ? "ff_resizepage(".$this->formrow->heightmode.", ".$this->formrow->height.");" : "").'
  1651.                                 ff_initialize("pageentry");
  1652.                         }';
  1653.                 }
  1654.  
  1655.                 $library[] = array('ff_switchpage', $code);
  1656.  
  1657.         } // loadBuiltins
  1658.  
  1659.         function loadScripts(&$library)
  1660.         {
  1661.                 global $database;
  1662.                 $database = JFactory::getDBO();
  1663.                 if ($this->dying) return;
  1664.                 $database->setQuery(
  1665.                         "select id, name, code from #__facileforms_scripts ".
  1666.                          "where published=1 ".
  1667.                          "order by type, title, name, id desc"
  1668.                 );
  1669.                 $rows = $database->loadObjectList();
  1670.                 $cnt = count($rows);
  1671.                 for ($i = 0; $i < $cnt; $i++) {
  1672.                         $row = $rows[$i];
  1673.                         $library[] = array(trim($row->name), $row->code, 's', $row->id, null);
  1674.                 } // if
  1675.         } // loadScripts
  1676.  
  1677.         function compressJavascript($str)
  1678.         {
  1679.                 if ($this->dying) return '';
  1680.                 $str = str_replace("\r","",$str);
  1681.                 $lines = explode("\n",$str);
  1682.                 $code = '';
  1683.                 $skip = '';
  1684.                 $lcnt = 0;
  1685.                 if (count($lines)) foreach ($lines as $line) {
  1686.                         $ll = strlen($line);
  1687.                         $quote = '';
  1688.                         $ws = false;
  1689.                         $escape = false;
  1690.                         for ($j=0; $j < $ll; $j++) {
  1691.                                 $c = substr($line,$j,1);
  1692.                                 $d = substr($line,$j,2);
  1693.                                 if ($quote != '') {
  1694.                                         // in literal
  1695.                                         if ($escape) {
  1696.                                                 $code .= $c;
  1697.                                                 $lcnt++;
  1698.                                                 $escape = false;
  1699.                                         } else
  1700.                                                 if ($c == "\\") {
  1701.                                                         $code .= $c;
  1702.                                                         $lcnt++;
  1703.                                                         $escape = true;
  1704.                                                 } else
  1705.                                                         if ($d == $quote.$quote) {
  1706.                                                                 $code .= $d;
  1707.                                                                 $lcnt += 2;
  1708.                                                                 $j += 2;
  1709.                                                         } else {
  1710.                                                                 $code .= $c;
  1711.                                                                 $lcnt++;
  1712.                                                                 if ($c == $quote) $quote = '';
  1713.                                                         } // if
  1714.                                 } else {
  1715.                                         // not in literal
  1716.                                         if ($d == $skip) {
  1717.                                                 $skip = '';
  1718.                                                 $j += 2;
  1719.                                         } else
  1720.                                                 if ($skip == '') {
  1721.                                                         if ($d == '/*') {
  1722.                                                                 $skip = '*/';
  1723.                                                                 $j += 2;
  1724.                                                         } else
  1725.                                                         if ($d == '//')
  1726.                                                                 break;
  1727.                                                         else
  1728.                                                                 switch ($c) {
  1729.                                                                         case ' ':
  1730.                                                                         case "\t":
  1731.                                                                         case "\n":
  1732.                                                                                 if ($lcnt) $ws = true;
  1733.                                                                                 break;
  1734.                                                                         case '"':
  1735.                                                                         case "'":
  1736.                                                                                 if ($ws) {
  1737.                                                                                         $b = substr($code,strlen($code)-1,1);
  1738.                                                                                         if ($b=='_' || ($b>='0' && $b<='9') || ($b>='a' && $b<='z') || ($b>='A' && $b<='Z')) {
  1739.                                                                                                 $code .= ' ';
  1740.                                                                                                 $lcnt++;
  1741.                                                                                         } // if
  1742.                                                                                         $ws = false;
  1743.                                                                                 } // if
  1744.                                                                                 $quote = $c;
  1745.                                                                                 $code .= $c;
  1746.                                                                                 $lcnt++;
  1747.                                                                                 break;
  1748.                                                                         default:
  1749.                                                                                 if ($ws) {
  1750.                                                                                         if ($c=='_' || ($c>='0' && $c<='9') || ($c>='a' && $c<='z') || ($c>='A' && $c<='Z')) {
  1751.                                                                                                 $b = substr($code,strlen($code)-1,1);
  1752.                                                                                                 if ($b=='_' || ($b>='0' && $b<='9') || ($b>='a' && $b<='z') || ($b>='A' && $b<='Z')) {
  1753.                                                                                                         $code .= ' ';
  1754.                                                                                                         $lcnt++;
  1755.                                                                                                 } // if
  1756.                                                                                         } // if
  1757.                                                                                         $ws = false;
  1758.                                                                                 } // if
  1759.                                                                                 $code .= $c;
  1760.                                                                                 $lcnt++;
  1761.                                                                 } // switch
  1762.                                                 } // if
  1763.                                 } // else
  1764.                         } // for
  1765.                         if ($lcnt) {
  1766.                                 if ($lcnt > _FF_PACKBREAKAFTER) {
  1767.                                         $code .= nl();
  1768.                                         $lcnt = 0;
  1769.                                 } else {
  1770.                                         if (strpos(',;:{}=[(+-*%',substr($code,strlen($code)-1,1))===false) {
  1771.                                                 $code .= nl();
  1772.                                                 $lcnt = 0;
  1773.                                         } // if
  1774.                                 } // if
  1775.                         } // if
  1776.                 } // foreach
  1777.                 if ($lcnt) $code .= nl();
  1778.                 return $code;
  1779.         } // compressJavascript
  1780.  
  1781.         function linkcode($func, &$library, &$linked, $code, $type=null, $id=null, $pane=null)
  1782.         {
  1783.                 global $ff_config;
  1784.  
  1785.                 if ($this->dying) return;
  1786.                 if ($func != '#scanonly') {
  1787.                         // check if function allready linked
  1788.                         if (in_array($func,$linked)) return;
  1789.                         // remember me
  1790.                         $linked[] = $func;
  1791.                 } // if
  1792.  
  1793.                 // scan the code for library identifiers
  1794.                 preg_match_all("/[A-Za-z0-9_]+/s", $code, $matches, PREG_PATTERN_ORDER);
  1795.                 $idents = $matches[0];
  1796.                 $cnt = count($library);
  1797.                 for ($i = 0; $i < $cnt; $i++) {
  1798.                         $libname = $library[$i][0];
  1799.                         if ($libname!='' && in_array($libname, $idents)) {
  1800.                                 $library[$i][0] = ''; // invalidate
  1801.                                 $ltype = $lid = $lpane = null;
  1802.                                 if (count($library[$i]) > 4) {
  1803.                                         $ltype = $library[$i][2];
  1804.                                         $lid   = $library[$i][3];
  1805.                                         $lpane = $library[$i][4];
  1806.                                 } // if
  1807.                                 $this->linkcode($libname, $library, $linked, $library[$i][1], $ltype, $lid, $lpane);
  1808.                                 if ($this->dying) return '';
  1809.                         } // if
  1810.                 } // for
  1811.  
  1812.                 if ($func != '#scanonly') {
  1813.                         // emit the code
  1814.                         if ($ff_config->compress)
  1815.                                 echo $this->compressJavascript(
  1816.                                         $this->replaceCode($code, BFText::_('COM_BREEZINGFORMS_PROCESS_SCRIPT')." $func", $type, $id, $pane)
  1817.                                 );
  1818.                         else
  1819.                                 echo $this->replaceCode($code, BFText::_('COM_BREEZINGFORMS_PROCESS_SCRIPT')." $func", $type, $id, $pane).nl().nl();
  1820.                 } // if
  1821.         } // linkcode
  1822.  
  1823.         function addFunction($cond, $id, $name, $code, &$library, &$linked, $type, $rowid, $pane)
  1824.         {
  1825.                 global $database;
  1826.                 $database = JFactory::getDBO();
  1827.                 if ($this->dying) return;
  1828.                 switch ($cond) {
  1829.                         case 1:
  1830.                                 $database->setQuery(
  1831.                                         "select name, code from #__facileforms_scripts ".
  1832.                                          "where id=".$id." and published=1"
  1833.                                 );
  1834.                                 $rows = $database->loadObjectList();
  1835.                                 if (count($rows) > 0) {
  1836.                                         $row = $rows[0];
  1837.                                         if ($this->trim($row->name) && $this->nonblank($row->code)) {
  1838.                                                 $this->linkcode($row->name, $library, $linked, $row->code, 's', $id, null);
  1839.                                                 if ($this->dying) return;
  1840.                                         } // if
  1841.                                 } // if
  1842.                                 break;
  1843.                         case 2:
  1844.                                 if ($this->trim($name) && $this->nonblank($code)) {
  1845.                                         $this->linkcode($name, $library, $linked, $code, $type, $rowid, $pane);
  1846.                                         if ($this->dying) return;
  1847.                                 } // if
  1848.                                 break;
  1849.                         default:
  1850.                                 break;
  1851.                 } // switch
  1852.         } // addFunction
  1853.  
  1854.         function header()
  1855.         {
  1856.                 global $ff_comsite, $ff_config;
  1857.                 $code =
  1858.                         'ff_processor = new Object();'.nl().
  1859.                         $this->expJsVar('ff_processor.okrun      ', $this->okrun).
  1860.                         $this->expJsVar('ff_processor.ip         ', $this->ip).
  1861.                         $this->expJsVar('ff_processor.agent      ', $this->agent).
  1862.                         $this->expJsVar('ff_processor.browser    ', $this->browser).
  1863.                         $this->expJsVar('ff_processor.opsys      ', $this->opsys).
  1864.                         $this->expJsVar('ff_processor.provider   ', $this->provider).
  1865.                         $this->expJsVar('ff_processor.submitted  ', $this->submitted).
  1866.                         $this->expJsVar('ff_processor.form       ', $this->form).
  1867.                         $this->expJsVar('ff_processor.form_id    ', $this->form_id).
  1868.                         $this->expJsVar('ff_processor.page       ', $this->page).
  1869.                         $this->expJsVar('ff_processor.target     ', $this->target).
  1870.                         $this->expJsVar('ff_processor.runmode    ', $this->runmode).
  1871.                         $this->expJsVar('ff_processor.inframe    ', $this->inframe).
  1872.                         $this->expJsVar('ff_processor.inline     ', $this->inline).
  1873.                         $this->expJsVar('ff_processor.template   ', $this->template).
  1874.                         $this->expJsVar('ff_processor.homepage   ', $this->homepage).
  1875.                         $this->expJsVar('ff_processor.mossite    ', $this->mossite).
  1876.                         //$this->expJsVar('ff_processor.mospath    ', $this->mospath).
  1877.                         $this->expJsVar('ff_processor.images     ', $this->images).
  1878.                         //$this->expJsVar('ff_processor.uploads    ', $this->uploads).
  1879.                         $this->expJsVar('ff_processor.border     ', $this->border).
  1880.                         $this->expJsVar('ff_processor.align      ', $this->align).
  1881.                         $this->expJsVar('ff_processor.top        ', $this->top).
  1882.                         $this->expJsVar('ff_processor.suffix     ', $this->suffix).
  1883.                         $this->expJsVar('ff_processor.status     ', $this->status).
  1884.                         $this->expJsVar('ff_processor.message    ', $this->message).
  1885.                         $this->expJsVar('ff_processor.record_id  ', $this->record_id).
  1886.                         $this->expJsVar('ff_processor.showgrid   ', $this->showgrid).
  1887.                         $this->expJsVar('ff_processor.traceBuffer', $this->traceBuffer);
  1888.                 return
  1889.                         '<script type="text/javascript">'.nl().
  1890.                         '<!--'.nl().
  1891.                         ($ff_config->compress ? $this->compressJavascript($code) : $code).
  1892.                         '-->'.nl().
  1893.                         '</script>'.nl().
  1894.                         '<script type="text/javascript" src="'.JURI::root(true).'/components/com_breezingforms/facileforms.js"></script>'.nl();
  1895.         } // header
  1896.  
  1897.         function view()
  1898.         {
  1899.                 global $ff_mospath, $ff_mossite, $database, $my;
  1900.                 global $ff_config, $ff_version, $ff_comsite, $ff_otherparams;
  1901.                 $database = JFactory::getDBO();
  1902.                 $mainframe = JFactory::getApplication();
  1903.                 if (!$this->okrun) return;
  1904.                 set_error_handler('_ff_errorHandler');
  1905.                 ob_start();
  1906.                 echo $this->header();
  1907.                 $this->queryCols = array();
  1908.                 $this->queryRows = array();
  1909.                 if($this->runmode == _FF_RUNMODE_PREVIEW){
  1910.                         echo '<script type="text/javascript" src="'.JURI::root() . 'administrator/components/com_breezingforms/libraries/wz_dragdrop/wz_dragdrop.js"></script>';
  1911.                 }
  1912.                 if(trim($this->formrow->template_code_processed) == 'QuickMode') echo '<table width="100%" style="display:none" border="0" id="bfReCaptchaWrap"><tr><td><div id="bfReCaptchaDiv"></div></td></tr></table>';
  1913.                 echo '<div id="ff_formdiv'.$this->form.'"';
  1914.                 if ($this->formrow->class1 != '' && $this->formrow->template_code == '') echo ' class="'.$this->getClassName($this->formrow->class1).'"';
  1915.                 echo '><div class="bfPage-tl"><div class="bfPage-tr"><div class="bfPage-t"></div></div></div><div class="bfPage-l"><div class="bfPage-r"><div class="bfPage-m bfClearfix">'.nl();
  1916.  
  1917.                 $this->status = JRequest::getCmd( 'ff_status', '');
  1918.                 $this->message = JRequest::getCmd( 'ff_message', '');
  1919.  
  1920.                 // handle Before Form piece
  1921.                 $code = '';
  1922.                 switch ($this->formrow->piece1cond) {
  1923.                         case 1: // library
  1924.                                 $database->setQuery(
  1925.                                         'select name, code from #__facileforms_pieces '.
  1926.                                          'where id='.$this->formrow->piece1id.' and published=1 '
  1927.                                 );
  1928.                                 $rows = $database->loadObjectList();
  1929.                                 if (count($rows))
  1930.                                         echo $this->execPiece($rows[0]->code, BFText::_('COM_BREEZINGFORMS_PROCESS_BFPIECE')." ".$rows[0]->name, 'p', $this->formrow->piece1id, null);
  1931.                                 break;
  1932.                         case 2: // custom code
  1933.                                 echo $this->execPiece($this->formrow->piece1code, BFText::_('COM_BREEZINGFORMS_PROCESS_BFPIECEC'), 'f', $this->form, 2);
  1934.                                 break;
  1935.                         default:
  1936.                                 break;
  1937.                 } // switch
  1938.                 if ($this->bury()) return;
  1939.  
  1940.                 $cntFiles = 0;
  1941.                 $fileExtensionsCheck = 'function checkFileExtensions(){';
  1942.                 for($i = 0; $i < $this->rowcount; $i++) {
  1943.                         $row = $this->rows[$i];
  1944.                         if ($row->type=='File Upload' && trim($this->formrow->template_code) != '') {
  1945.                                 if(trim($row->data2) != ''){
  1946.                                         $exts = explode(',', $row->data2);
  1947.                                         $extsCount = count($exts);
  1948.                                         $fileExtensionsCheck .= 'var ff_elem'.$row->id.'Exts = false;';
  1949.                                         for($x = 0;$x < $extsCount; $x++){
  1950.                                                 $fileExtensionsCheck .= '
  1951.                                                         if(!ff_elem'.$row->id.'Exts && document.getElementById("ff_elem'.$row->id.'").value.toLowerCase().lastIndexOf(".'.strtolower(trim($exts[$x])).'") != -1){
  1952.                                                                 ff_elem'.$row->id.'Exts = true;
  1953.                                                         }else if(!ff_elem'.$row->id.'Exts && document.getElementById("ff_elem'.$row->id.'").value == ""){
  1954.                                                                 ff_elem'.$row->id.'Exts = true;
  1955.                                                         }';
  1956.                                         }
  1957.                                         $fileExtensionsCheck .= '
  1958.                                         if(!ff_elem'.$row->id.'Exts){
  1959.                                                 if(typeof bfUseErrorAlerts == "undefined"){
  1960.                                                         alert("'.addslashes(BFText::_('COM_BREEZINGFORMS_File extension not allowed!')).'");
  1961.                                                 } else {
  1962.                                                         bfShowErrors("'.addslashes(BFText::_('COM_BREEZINGFORMS_File extension not allowed!')).'");
  1963.                                                 }
  1964.                                                 if(ff_currentpage != '.$row->page.')ff_switchpage('.$row->page.');
  1965.                                                 return false;
  1966.                                         }
  1967.                                         ';
  1968.                                         $cntFiles++;
  1969.                                 }
  1970.                         }
  1971.                 }
  1972.                 $fileExtensionsCheck .= '
  1973.                         return true;
  1974.                 }
  1975.                 ';
  1976.  
  1977.                 $capFunc = 'function bfCheckCaptcha(){if(checkFileExtensions())ff_submitForm2();}';
  1978.  
  1979.                 for($i = 0; $i < $this->rowcount; $i++) {
  1980.                         $row = $this->rows[$i];
  1981.                         if ($row->type=="Captcha") {
  1982.                                 $capFunc = '
  1983.  
  1984.                                 function bfAjaxObject101() {
  1985.                                         this.createRequestObject = function() {
  1986.                                                 try {
  1987.                                                         var ro = new XMLHttpRequest();
  1988.                                                 }
  1989.                                                 catch (e) {
  1990.                                                         var ro = new ActiveXObject("Microsoft.XMLHTTP");
  1991.                                                 }
  1992.                                                 return ro;
  1993.                                         }
  1994.                                         this.sndReq = function(action, url, data) {
  1995.                                                 if (action.toUpperCase() == "POST") {
  1996.                                                         this.http.open(action,url,true);
  1997.                                                         this.http.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  1998.                                                         this.http.onreadystatechange = this.handleResponse;
  1999.                                                         this.http.send(data);
  2000.                                                 }
  2001.                                                 else {
  2002.                                                         this.http.open(action,url + "?" + data,true);
  2003.                                                         this.http.onreadystatechange = this.handleResponse;
  2004.                                                         this.http.send(null);
  2005.                                                 }
  2006.                                         }
  2007.                                         this.handleResponse = function() {
  2008.                                                 if ( me.http.readyState == 4) {
  2009.                                                         if (typeof me.funcDone == "function") { me.funcDone();}
  2010.                                                         var rawdata = me.http.responseText.split("|");
  2011.                                                         for ( var i = 0; i < rawdata.length; i++ ) {
  2012.                                                                 var item = (rawdata[i]).split("=>");
  2013.                                                                 if (item[0] != "") {
  2014.                                                                         if (item[1].substr(0,3) == "%V%" ) {
  2015.                                                                                 document.getElementById(item[0]).value = item[1].substring(3);
  2016.                                                                         }
  2017.                                                                         else {
  2018.                                                                                 if(item[1] == "true"){
  2019.                                                                                     if(typeof bfDoFlashUpload != \'undefined\'){
  2020.                                                                                         bfDoFlashUpload();
  2021.                                                                                     } else {
  2022.                                                                                         ff_submitForm2();
  2023.                                                                                     }
  2024.                                                                            } else {
  2025.                                                                                 if(typeof JQuery != "undefined" && JQuery("#bfSubmitMessage"))
  2026.                                                                                 {
  2027.                                                                                     JQuery("#bfSubmitMessage").css("visibility","hidden");
  2028.                                                                                 }
  2029.                                                                                 if(typeof bfUseErrorAlerts == "undefined"){
  2030.                                                                                     alert("'.addslashes(BFText::_('COM_BREEZINGFORMS_CAPTCHA_MISSING_WRONG')).'");
  2031.                                                                                 } else {
  2032.                                                                                    if(typeof inlineErrorElements != "undefined"){
  2033.                                                                                      inlineErrorElements.push(["bfCaptchaEntry","'.addslashes(BFText::_('COM_BREEZINGFORMS_CAPTCHA_MISSING_WRONG')).'"]);
  2034.                                                                                    }
  2035.                                                                                    bfShowErrors("'.addslashes(BFText::_('COM_BREEZINGFORMS_CAPTCHA_MISSING_WRONG')).'");
  2036.                                                                                 }
  2037.                                                                                         document.getElementById(\'ff_capimgValue\').src = \''.JURI::root(true).'/index.php?raw=true&option=com_breezingforms&bfCaptcha=true&Itemid='.JRequest::getInt('Itemid',0).'&bfMathRandom=\' + Math.random();
  2038.                                                                                         document.getElementById(\'bfCaptchaEntry\').value = "";
  2039.                                                                                         if(ff_currentpage != '.$row->page.')ff_switchpage('.$row->page.');
  2040.                                                                                         document.getElementById(\'bfCaptchaEntry\').focus();
  2041.                                                                                 }
  2042.  
  2043.                                                                         }
  2044.                                                                 }
  2045.                                                         }
  2046.                                                 }
  2047.                                                 if ((me.http.readyState == 1) && (typeof me.funcWait == "function")) { me.funcWait(); }
  2048.                                         }
  2049.                                         var me = this;
  2050.                                         this.http = this.createRequestObject();
  2051.  
  2052.                                         var funcWait = null;
  2053.                                         var funcDone = null;
  2054.                                 }
  2055.  
  2056.                                 function bfCheckCaptcha(){
  2057.                                         if(checkFileExtensions()){
  2058.                                                var ao = new bfAjaxObject101();
  2059.                                                ao.sndReq("get","'.JURI::root(true).'/index.php?raw=true&option=com_breezingforms&checkCaptcha=true&Itemid='.JRequest::getInt('Itemid',0).'&value="+document.getElementById("bfCaptchaEntry").value,"");
  2060.                                         }
  2061.                                 }';
  2062.                                 break;
  2063.                         } else if ($row->type=="ReCaptcha") {
  2064.                             $capFunc = 'var bfReCaptchaLoaded = true;
  2065.                                     function bfCheckCaptcha(){
  2066.                                         if(checkFileExtensions()){
  2067.                                                 function bfValidateCaptcha()
  2068.                                                 {
  2069.                                                     challengeField = JQuery("input#recaptcha_challenge_field").val();
  2070.                                                     responseField = JQuery("input#recaptcha_response_field").val();
  2071.                                                     var html = JQuery.ajax({
  2072.                                                     type: "POST",
  2073.                                                     url: "'.JURI::root(true).'/index.php?raw=true&option=com_breezingforms&bfReCaptcha=true&form='.$this->form.'&Itemid='.JRequest::getInt('Itemid',0).'",
  2074.                                                     data: "recaptcha_challenge_field=" + challengeField + "&recaptcha_response_field=" + responseField,
  2075.                                                     async: false
  2076.                                                     }).responseText;
  2077.  
  2078.                                                     if (html.replace(/^\s+|\s+$/, "") == "success")
  2079.                                                     {
  2080.                                                         if(typeof bfDoFlashUpload != \'undefined\'){
  2081.                                                             bfDoFlashUpload();
  2082.                                                         } else {
  2083.                                                             ff_submitForm2();
  2084.                                                         }
  2085.                                                     }
  2086.                                                     else
  2087.                                                     {
  2088.                                                             if(typeof bfUseErrorAlerts == "undefined"){
  2089.                                                                     alert("'.addslashes(BFText::_('COM_BREEZINGFORMS_CAPTCHA_MISSING_WRONG')).'");
  2090.                                                             } else {
  2091.                                                                 if(typeof inlineErrorElements != "undefined"){
  2092.                                                                     inlineErrorElements.push(["bfReCaptchaEntry","'.addslashes(BFText::_('COM_BREEZINGFORMS_CAPTCHA_MISSING_WRONG')).'"]);
  2093.                                                                 }
  2094.                                                                 bfShowErrors("'.addslashes(BFText::_('COM_BREEZINGFORMS_CAPTCHA_MISSING_WRONG')).'");
  2095.                                                             }
  2096.  
  2097.                                                             if(ff_currentpage != '.$row->page.')ff_switchpage('.$row->page.');
  2098.                                                             Recaptcha.focus_response_field();
  2099.  
  2100.                                                         Recaptcha.reload();
  2101.                                                     }
  2102.                                                 }
  2103.  
  2104.                                                 bfValidateCaptcha();
  2105.  
  2106.                                         }
  2107.                                 }';
  2108.                         }
  2109.                 }
  2110.  
  2111.                 for($i = 0; $i < $this->rowcount; $i++) {
  2112.                         $row = $this->rows[$i];
  2113.                         if ($row->type=="Calendar") {
  2114.                                 $locale = $mainframe->getCfg( 'language' );
  2115.                                 $lang = JLanguage::getInstance( $locale );
  2116.                                 $mylang = JURI::root(true).'/components/com_breezingforms/libraries/js/calendar/lang/calendar-en-GB.js';
  2117.                                 if(JFile::exists(JPATH_SITE . '/components/com_breezingforms/libraries/js/calendar/lang/calendar-'.$lang->getTag().'.js')){
  2118.                                     $mylang = JURI::root(true).'/components/com_breezingforms/libraries/js/calendar/lang/calendar-'.$lang->getTag().'.js';
  2119.                                 }
  2120.                                 echo '
  2121.                                 <script language="JavaScript" src="'.JURI::root(true).'/components/com_breezingforms/libraries/js/joomla.javascript.js" type="text/javascript"></script>
  2122.                                 <!-- import the calendar script -->
  2123.                                 <script type="text/javascript" src="'.JURI::root(true).'/components/com_breezingforms/libraries/js/calendar/calendar.js"></script>
  2124.                                 <!-- import the language module -->
  2125.                                 <script type="text/javascript" src="'.$mylang.'"></script>
  2126.                                 ';
  2127.                                 JFactory::getDocument()->addStyleSheet( JURI::root(true) . '/components/com_breezingforms/libraries/js/calendar/calendar-mos.css' );
  2128.                                 break;
  2129.                         }
  2130.                 }
  2131.  
  2132.                 echo
  2133.                         '<script type="text/javascript">'.nl().
  2134.                         '<!--'.nl().
  2135.                         ''.nl().
  2136.                     $fileExtensionsCheck.
  2137.                         $capFunc;
  2138.  
  2139.                 // create library list
  2140.                 $library = array();
  2141.                 $this->loadBuiltins($library);
  2142.                 $this->loadScripts($library);
  2143.  
  2144.                 // start linking
  2145.                 $linked = array();
  2146.  
  2147.                 if ($this->status == '') {
  2148.                         $code =     "onload = function()".nl().
  2149.                                                 "{".nl().
  2150.                                                 "    ff_initialize('formentry');".nl().
  2151.                                                 "    ff_initialize('pageentry');".nl();
  2152.                         if ($this->formrow->heightmode)
  2153.                                 $code .= "    ff_resizepage(".$this->formrow->heightmode.", ".$this->formrow->height.");".nl();
  2154.                         if ($this->showgrid)
  2155.                                 $code .= "    ff_showgrid();".nl();
  2156.                         $code .=
  2157.                                                 "    if (ff_processor && ff_processor.traceBuffer) ff_traceWindow();".nl().
  2158.                                                 "} // onload";
  2159.                         $this->linkcode('onload', $library, $linked, $code);
  2160.                 } else {
  2161.                         $funcname = "";
  2162.                         switch ($this->formrow->script2cond) {
  2163.                                 case 1:
  2164.                                         $database->setQuery(
  2165.                                                 "select name from #__facileforms_scripts ".
  2166.                                                  "where id=".$this->formrow->script2id." and published=1 "
  2167.                                         );
  2168.                                         $funcname = $database->loadResult();
  2169.                                         break;
  2170.                                 case 2:
  2171.                                         $funcname = "ff_".$this->formrow->name."_submitted";
  2172.                                         break;
  2173.                                 default:
  2174.                                         break;
  2175.                         } // switch
  2176.                         if ($funcname != '' || $this->formrow->heightmode || $this->showgrid) {
  2177.                                 $code =     "onload = function()".nl().
  2178.                                                         "{".nl();
  2179.                                 if ($this->formrow->heightmode)
  2180.                                         $code .="    ff_resizepage(".$this->formrow->heightmode.", ".$this->formrow->height.");".nl();
  2181.                                 if ($this->showgrid)
  2182.                                         $code .="    ff_showgrid();".nl();
  2183.                                 if ($funcname != '')
  2184.                                         $code .="    ".$funcname."(".$this->status.",\"".str_replace("\n",'',str_replace("\r",'',stripcslashes($this->message)))."\");".nl();
  2185.                                 $code .=    "} // onload";
  2186.                                 $this->linkcode('onload', $library, $linked, $code);
  2187.                         } // if
  2188.                 } // if
  2189.                 if ($this->bury()) return;
  2190.  
  2191.                 // add form scripts
  2192.                 $this->addFunction(
  2193.                         $this->formrow->script1cond,
  2194.                         $this->formrow->script1id,
  2195.                         'ff_'.$this->formrow->name.'_init',
  2196.                         $this->formrow->script1code,
  2197.                         $library,
  2198.                         $linked,
  2199.                         'f',
  2200.                         $this->form,
  2201.                         1
  2202.                 );
  2203.                 if ($this->bury()) return;
  2204.                 $this->addFunction(
  2205.                         $this->formrow->script2cond,
  2206.                         $this->formrow->script2id,
  2207.                         'ff_'.$this->formrow->name.'_submitted',
  2208.                         $this->formrow->script2code,
  2209.                         $library,
  2210.                         $linked,
  2211.                         'f',
  2212.                         $this->form,
  2213.                         1
  2214.                 );
  2215.                 if ($this->bury()) return;
  2216.  
  2217.                 // all element scripts & static text/HTML
  2218.                 $icons = 0;
  2219.                 $tooltips = 0;
  2220.                 $qcheckboxes = 0;
  2221.                 $qcode = '';
  2222.  
  2223.                 for($i = 0; $i < $this->rowcount; $i++) {
  2224.                         $row =& $this->rows[$i];
  2225.  
  2226.                         $this->draggableDivIds[] = 'ff_div'.$row->id;
  2227.  
  2228.                         if ($row->type == "Icon") $icons++;
  2229.                         if ($row->type == "Tooltip") $tooltips++;
  2230.                         if ($row->type == "Query List") {
  2231.                                 if ($row->flag2) $qcheckboxes++;
  2232.  
  2233.                                 // load column definitions
  2234.                                 $this->queryCols['ff_'.$row->id] = array();
  2235.                                 $cols =& $this->queryCols['ff_'.$row->id];
  2236.                                 if ($this->trim($row->data3)) {
  2237.                                         $cls = explode("\n",$row->data3);
  2238.                                         for ($c = 0; $c < count($cls); $c++) {
  2239.                                                 if ($cls[$c] != '') {
  2240.                                                         $col = ''; // instead of unset
  2241.                                                         $col = new facileFormsQuerycols;
  2242.                                                         $col->unpack($cls[$c]);
  2243.                                                         $this->compileQueryCol($row, $col);
  2244.                                                         $cols[] = $col;
  2245.                                                 } // if
  2246.                                         } // for
  2247.                                 } // if
  2248.                                 $colcnt = count($cols);
  2249.                                 $checkbox = 0; if ($row->flag2) $checkbox = $row->flag2;
  2250.                                 $header = 0; if ($row->flag1) $header = 1;
  2251.  
  2252.                                 // get pagenav
  2253.                                 $pagenav = 1;
  2254.                                 $settings = explode("\n",$row->data1);
  2255.                                 if (count($settings)>8 && $this->trim($settings[8])) $pagenav = $settings[8];
  2256.  
  2257.                                 // export the javascript parameters
  2258.                                 $qcode .= nl().
  2259.                                         'ff_queryCurrPage['.$row->id.'] = 1;'.nl().
  2260.                                         'ff_queryPageSize['.$row->id.'] = '.$row->height.';'.nl().
  2261.                                         'ff_queryCheckbox['.$row->id.'] = '.$checkbox.';'.nl().
  2262.                                         'ff_queryHeader['.$row->id.'] = '.$header.';'.nl().
  2263.                                         'ff_queryPagenav['.$row->id.'] = '.$pagenav.';'.nl().
  2264.                                         'ff_queryCols['.$row->id.'] = [';
  2265.                                 for ($c = 0; $c < $colcnt; $c++) {
  2266.                                         if ($cols[$c]->thspan>0) $qcode .= '1'; else $qcode .= '0';
  2267.                                         if ($c < $colcnt-1) $qcode .= ',';
  2268.                                 } // for
  2269.                                 $qcode .= '];'.nl();
  2270.  
  2271.                                 // execute the query and export it to javascript
  2272.                                 $this->queryRows['ff_'.$row->id] = array();
  2273.                                 $this->execQuery($row, $this->queryRows['ff_'.$row->id], $cols);
  2274.                                 $qcode .= 'ff_queryRows['.$row->id.'] = '.$this->expJsValue($this->queryRows['ff_'.$row->id]).';'.nl();
  2275.  
  2276.                                 unset($cols);
  2277.                                 if ($this->bury()) return;
  2278.                         } // if
  2279.                         $this->addFunction(
  2280.                                 $row->script1cond,
  2281.                                 $row->script1id,
  2282.                                 'ff_'.$row->name.'_init',
  2283.                                 $row->script1code,
  2284.                                 $library,
  2285.                                 $linked,
  2286.                                 'e',
  2287.                                 $row->id,
  2288.                                 1
  2289.                         );
  2290.                         if ($this->bury()) { unset($row); return; }
  2291.                         $this->addFunction(
  2292.                                 $row->script2cond,
  2293.                                 $row->script2id,
  2294.                                 'ff_'.$row->name.'_action',
  2295.                                 $row->script2code,
  2296.                                 $library,
  2297.                                 $linked,
  2298.                                 'e',
  2299.                                 $row->id,
  2300.                                 1
  2301.                         );
  2302.                         if ($this->bury()) { unset($row); return; }
  2303.                         $this->addFunction(
  2304.                                 $row->script3cond,
  2305.                                 $row->script3id,
  2306.                                 'ff_'.$row->name.'_validate',
  2307.                                 $row->script3code,
  2308.                                 $library,
  2309.                                 $linked,
  2310.                                 'e',
  2311.                                 $row->id,
  2312.                                 1
  2313.                         );
  2314.                         if ($this->bury()) { ob_end_clean(); return; }
  2315.                         if ($row->type == 'Static Text/HTML')
  2316.                                 $this->linkcode('#scanonly', $library, $linked, $row->data1);
  2317.                         unset($row);
  2318.                         if ($this->bury()) return;
  2319.                 } // for
  2320.  
  2321.                 if ($icons > 0) {
  2322.                         $this->linkcode('ff_hideIconBorder', $library, $linked,
  2323.                                 'function ff_hideIconBorder(element)'.nl().
  2324.                                 '{'.nl().
  2325.                                 '    element.style.border = "none";'.nl().
  2326.                                 '} // ff_hideIconBorder'
  2327.                         );
  2328.                         if ($this->bury()) return;
  2329.                         $this->linkcode('ff_dispIconBorder', $library, $linked,
  2330.                                 'function ff_dispIconBorder(element)'.nl().
  2331.                                 '{'.nl().
  2332.                                 '    element.style.border = "1px outset";'.nl().
  2333.                                 '} // ff_dispIconBorder'
  2334.                         );
  2335.                         if ($this->bury()) return;
  2336.                 } // if
  2337.  
  2338.                 if ($qcode != '') {
  2339.                         $library[] = array('ff_queryCurrPage', 'var ff_queryCurrPage = new Array();');
  2340.                         $library[] = array('ff_queryPageSize', 'var ff_queryPageSize = new Array();');
  2341.                         $library[] = array('ff_queryCols', 'var ff_queryCols = new Array();');
  2342.                         $library[] = array('ff_queryCheckbox', 'var ff_queryCheckbox = new Array();');
  2343.                         $library[] = array('ff_queryHeader', 'var ff_queryHeader = new Array();');
  2344.                         $library[] = array('ff_queryPagenav', 'var ff_queryPagenav = new Array();');
  2345.                         $library[] = array('ff_queryRows', 'var ff_queryRows = new Array();'.nl().$qcode);
  2346.  
  2347.                         $library[] = array('ff_selectAllQueryRows',
  2348.                                 'function ff_selectAllQueryRows(id,checked)'.nl().
  2349.                                 '{'.nl().
  2350.                                 '    if (!ff_queryCheckbox[id]) return;'.nl().
  2351.                                 '    var cnt = ff_queryRows[id].length;'.nl().
  2352.                                 '    var pagesize = ff_queryPageSize[id];'.nl().
  2353.                                 '    if (pagesize > 0) {'.nl().
  2354.                                 '        lastpage = parseInt((cnt+pagesize-1)/pagesize);'.nl().
  2355.                                 '        if (lastpage == 1)'.nl().
  2356.                                 '           pagesize = cnt;'.nl().
  2357.                                 '        else {'.nl().
  2358.                                 '            var currpage = ff_queryCurrPage[id];'.nl().
  2359.                                 '            var p;'.nl().
  2360.                                 '            for (p = 1; p < currpage; p++) cnt -= pagesize;'.nl().
  2361.                                 '            if (cnt > pagesize) cnt = pagesize;'.nl().
  2362.                                 '        } // if'.nl().
  2363.                                 '    } // if'.nl().
  2364.                                 '    var curr;'.nl().
  2365.                                 '    for (curr = 0; curr < cnt; curr++)'.nl().
  2366.                                 '        document.getElementById(\'ff_cb\'+id+\'_\'+curr).checked = checked;'.nl().
  2367.                                 '    for (curr = cnt; curr < pagesize; curr++)'.nl().
  2368.                                 '        document.getElementById(\'ff_cb\'+id+\'_\'+curr).checked = false;'.nl().
  2369.                                 '    if (ff_queryCheckbox[id]==1)'.nl().
  2370.                                 '        document.getElementById(\'ff_cb\'+id).checked = checked;'.nl().
  2371.                                 '} // ff_selectAllQueryRows'
  2372.                         );
  2373.  
  2374.                         $code =
  2375.                                 'function ff_dispQueryPage(id,page)'.nl().
  2376.                                 '{'.nl().
  2377.                                 '    var forced = false;'.nl().
  2378.                                 '    if (arguments.length>2) forced = arguments[2];'.nl().
  2379.                                 '    var qrows = ff_queryRows[id];'.nl().
  2380.                                 '    var cnt = qrows.length;'.nl().
  2381.                                 '    var currpage = ff_queryCurrPage[id];'.nl().
  2382.                                 '    var pagesize = ff_queryPageSize[id];'.nl().
  2383.                                 '    var pagenav = ff_queryPagenav[id];'.nl().
  2384.                                 '    var lastpage = 1;'.nl().
  2385.                                 '    if (pagesize > 0) {'.nl().
  2386.                                 '        lastpage = parseInt((cnt+pagesize-1)/pagesize);'.nl().
  2387.                                 '        if (lastpage == 1) pagesize = cnt;'.nl().
  2388.                                 '    } // if'.nl().
  2389.                                 '    if (page < 1) page = 1;'.nl().
  2390.                                 '    if (page > lastpage) page = lastpage;'.nl().
  2391.                                 '    if (!forced && page == currpage) return;'.nl().
  2392.                                 '    var p, c;'.nl().
  2393.                                 '    for (p = 1; p < page; p++) cnt -= pagesize;'.nl().
  2394.                                 '    if (cnt > pagesize) cnt = pagesize;'.nl().
  2395.                                 '    var start = (page-1) * pagesize;'.nl().
  2396.                                 '    var rows = document.getElementById(\'ff_elem\'+id).rows;'.nl().
  2397.                                 '    var cols = ff_queryCols[id];'.nl().
  2398.                                 '    var checkbox = ff_queryCheckbox[id];'.nl().
  2399.                                 '    var header = ff_queryHeader[id];'.nl().
  2400.                                 '    for (p = 0; p < cnt; p++) {'.nl().
  2401.                                 '        var qrow = qrows[start+p];'.nl().
  2402.                                 '        var row = rows[header+p];'.nl().
  2403.                                 '        var cc = 0;'.nl().
  2404.                                 '        for (c = 0; c < cols.length; c++)'.nl().
  2405.                                 '            if (cols[c]) {'.nl().
  2406.                                 '                if (c==0 && checkbox>0) {'.nl().
  2407.                                 '                    document.getElementById(\'ff_cb\'+id+\'_\'+p).value = qrow[c];'.nl().
  2408.                                 '                    cc++;'.nl().
  2409.                                 '                } else'.nl().
  2410.                                 '                    row.cells[cc++].innerHTML = qrow[c];'.nl().
  2411.                                 '            } // if'.nl().
  2412.                                 '        row.style.display = \'\';'.nl().
  2413.                                 '    } // for'.nl().
  2414.                                 '    for (p = cnt; p < pagesize; p++) {'.nl().
  2415.                                 '        var row = rows[p+header];'.nl().
  2416.                                 '        row.style.display = \'none\';'.nl().
  2417.                                 '    } // for'.nl().
  2418.                                 '    if (pagenav > 0 && pagesize > 0) {'.nl().
  2419.                                 '        var navi = \'\';'.nl().
  2420.                                 '        if (pagenav<=4) {'.nl().
  2421.                                 '            if (page>1) navi += \'<a href="javascript:ff_dispQueryPage(\'+id+\',1);">\';'.nl().
  2422.                                 '            navi += \'&lt;&lt;\';'.nl().
  2423.                                 '            if (pagenav<=2) navi += \' '.BFText::_('COM_BREEZINGFORMS_PROCESS_PAGESTART').'\';'.nl().
  2424.                                 '            if (page>1) navi += \'<\/a>\';'.nl().
  2425.                                 '            navi += \' \';'.nl().
  2426.                                 '            if (page>1) navi += \'<a href="javascript:ff_dispQueryPage(\'+id+\',\'+(page-1)+\');">\';'.nl().
  2427.                                 '            navi += \'&lt;\';'.nl().
  2428.                                 '            if (pagenav<=2) navi += \' '.BFText::_('COM_BREEZINGFORMS_PROCESS_PAGEPREV').'\';'.nl().
  2429.                                 '            if (page>1) navi += \'<\/a>\';'.nl().
  2430.                                 '            navi += \' \';'.nl().
  2431.                                 '        } // if'.nl().
  2432.                                 '        if (pagenav % 2) {'.nl().
  2433.                                 '            for (p = 1; p <= lastpage; p++)'.nl().
  2434.                                 '                if (p == page) '.nl().
  2435.                                 '                    navi += p+\' \';'.nl().
  2436.                                 '                else'.nl().
  2437.                                 '                    navi += \'<a href="javascript:ff_dispQueryPage(\'+id+\',\'+p+\');">\'+p+\'<\/a> \';'.nl().
  2438.                                 '        } // if'.nl().
  2439.                                 '        if (pagenav<=4) {'.nl().
  2440.                                 '            if (page<lastpage) navi += \'<a href="javascript:ff_dispQueryPage(\'+id+\',\'+(page+1)+\');">\';'.nl().
  2441.                                 '            if (pagenav<=2) navi += \''.BFText::_('COM_BREEZINGFORMS_PROCESS_PAGENEXT').' \';'.nl().
  2442.                                 '            navi += \'&gt;\';'.nl().
  2443.                                 '            if (page<lastpage) navi += \'<\/a>\';'.nl().
  2444.                                 '            navi += \' \';'.nl().
  2445.                                 '            if (page<lastpage) navi += \'<a href="javascript:ff_dispQueryPage(\'+id+\',\'+lastpage+\');">\';'.nl().
  2446.                                 '            if (pagenav<=2) navi += \''.BFText::_('COM_BREEZINGFORMS_PROCESS_PAGEEND').' \';'.nl().
  2447.                                 '            navi += \'&gt;&gt;\';'.nl().
  2448.                                 '            if (page<lastpage) navi += \'<\/a>\';'.nl().
  2449.                                 '        } // if'.nl().
  2450.                                 '        rows[header+pagesize].cells[0].innerHTML = navi;'.nl().
  2451.                                 '    } // if'.nl().
  2452.                                 '    ff_queryCurrPage[id] = page;'.nl();
  2453.                         if ($qcheckboxes)
  2454.                                 $code .=
  2455.                                 '    if (checkbox) ff_selectAllQueryRows(id, false);'.nl();
  2456.                         if ($this->formrow->heightmode>0)
  2457.                                 $code .=
  2458.                                 '    ff_resizepage('.$this->formrow->heightmode.', '.$this->formrow->height.');'.nl();
  2459.                         if ($this->inframe)
  2460.                                 $code .=
  2461.                                 '    parent.window.scrollTo(0,0);'.nl();
  2462.                         $code .=
  2463.                                 '    window.scrollTo(0,0);'.nl().
  2464.                                 '} // ff_dispQueryPage';
  2465.                         $this->linkcode('ff_dispQueryPage', $library, $linked, $code);
  2466.                         if ($this->bury()) return;
  2467.                 } // if
  2468.  
  2469.                 echo '//-->'.nl().
  2470.                          '</script>'.nl();
  2471.  
  2472.                 if ($icons > 0)
  2473.                         echo '<script language="JavaScript" src="'.$ff_mossite.'/components/com_breezingforms/libraries/js/joomla.javascript.js" type="text/javascript"></script>'.nl();
  2474.                 if ($tooltips > 0) {
  2475.                         echo '<script language="Javascript" src="'.$ff_mossite.'/components/com_breezingforms/libraries/js/overlib_mini.js" type="text/javascript"></script>'.nl();
  2476.                         if ($this->inframe)
  2477.                                 echo '<div id="overDiv" style="position:absolute;visibility:hidden;z-index:1000;"></div>'.nl();
  2478.                 } // if
  2479.  
  2480.                 if (!$this->inline) {
  2481.                    
  2482.                         $url = ($this->inframe)
  2483.                                         ? $ff_mossite.'/index.php?format=html&tmpl=component'
  2484.                                         : (($this->runmode==_FF_RUNMODE_FRONTEND) ? '' : 'index.php?format=html&tmpl=component');
  2485.                         $params =   ' action="'.$url.'"'.
  2486.                                                 ' method="post"'.
  2487.                                                 ' name="'.$this->form_id.'"'.
  2488.                                                 ' id="'.$this->form_id.'"'.
  2489.                                                 ' enctype="multipart/form-data"';
  2490.                         if ($this->formrow->class2 != '')
  2491.                                 $params .= ' class="'.$this->getClassName($this->formrow->class2).'"';
  2492.                         echo '<form'.$params.' onsubmit="return false;" class="bfQuickMode">'.nl();
  2493.                 } // if
  2494.  
  2495.                 if(trim($this->formrow->template_code_processed) == ''){
  2496.  
  2497.                         for($i = 0; $i < $this->rowcount; $i++) {
  2498.                                 $row =& $this->rows[$i];
  2499.                                 if (!is_numeric($row->width)) $row->width = 0;
  2500.                                 if (!is_numeric($row->height)) $row->height = 0;
  2501.                                 if ($row->type != 'Query List') {
  2502.                                         $data1 = $this->replaceCode($row->data1, "data1 of $row->name", 'e', $row->id, 0);
  2503.                                         if ($this->bury()) return;
  2504.                                         $data2 = $this->replaceCode($row->data2, "data2 of $row->name", 'e', $row->id, 0);
  2505.                                         if ($this->bury()) return;
  2506.                                         $data3 = $this->replaceCode($row->data3, "data3 of $row->name", 'e', $row->id, 0);
  2507.                                         if ($this->bury()) return;
  2508.                                 } // if
  2509.                                 $attribs = 'position:absolute;z-index:'.$i.';';
  2510.                                 if ($row->posx >= 0) $attribs .= 'left:'.$row->posx; else $attribs .= 'right:'.(-$row->posx);
  2511.                                 if ($row->posxmode ) $attribs .= '%;'; else $attribs .= 'px;';
  2512.                                 if ($row->posy >= 0) $attribs .= 'top:'.$row->posy; else $attribs .= 'bottom:'.(-$row->posy);
  2513.                                 if ($row->posymode ) $attribs .= '%;'; else $attribs .= 'px;';
  2514.                                 $class1 = ''; if ($row->class1 != '') $class1 = ' class="'.$this->getClassName($row->class1).'"';
  2515.                                 $class2 = ''; if ($row->class2 != '') $class2 = ' class="'.$this->getClassName($row->class2).'"';
  2516.                                 switch ($row->type) {
  2517.                                         case 'Static Text/HTML':
  2518.                                         case 'Rectangle':
  2519.                                         case 'Image':
  2520.                                                 if ($row->height > 0) {
  2521.                                                         $attribs .= 'height:'.$row->height;
  2522.                                                         if ($row->heightmode ) $attribs .= '%;'; else $attribs .= 'px;';
  2523.                                                 } // if
  2524.                                         case 'Query List':
  2525.                                                 if ($row->width > 0) {
  2526.                                                         $attribs .= 'width:'.$row->width;
  2527.                                                         if ($row->widthmode ) $attribs .= '%;'; else $attribs .= 'px;';
  2528.                                                 } // if
  2529.                                         default:
  2530.                                                 break;
  2531.                                 } // switch
  2532.                                 if ($row->page != $this->page) $attribs .= 'visibility:hidden;';
  2533.                                 switch ($row->type) {
  2534.                                         case 'Static Text/HTML':
  2535.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.$data1.'</div>'.nl();
  2536.                                                 break;
  2537.                                         case 'Rectangle':
  2538.                                                 if ($data1 != '') $attribs .= 'border:'.$data1.';';
  2539.                                                 if ($data2 != '') $attribs .= 'background-color:'.$data2.';';
  2540.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="font-size:0px;'.$attribs.'"'.$class1.'></div>'.nl();
  2541.                                                 break;
  2542.                                         case 'Image':
  2543.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.nlc();
  2544.                                                 $attribs = '';
  2545.                                                 if ($row->width > 0) $attribs .= 'width="'.$row->width.'" ';
  2546.                                                 if ($row->height > 0) $attribs .= 'height="'.$row->height.'" ';
  2547.                                                 echo indentc(2).'<img id="ff_elem'.$row->id.'" src="'.$data1.'"  alt="'.$data2.'" border="0" '.$attribs.$class2.'/>'.nlc();
  2548.                                                 echo indentc(1).'</div>'.nl();
  2549.                                                 break;
  2550.                                         case 'Tooltip':
  2551.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'" onMouseOver="return overlib(\''.expstring($data2).'\',CAPTION,\''.$row->title.'\',BELOW,RIGHT);" onMouseOut="return nd();"'.$class1.'>'.nlc();
  2552.                                                 switch ($row->flag1) {
  2553.                                                         case  0: $url = $ff_mossite.'/components/com_breezingforms/images/tooltip.png'; break;
  2554.                                                         case  1: $url = $ff_mossite.'/components/com_breezingforms/images/warning.png'; break;
  2555.                                                         default: $url = $data1;
  2556.                                                 } // switch
  2557.                                                 echo indentc(2).'<img src="'.$url.'" alt="" border="0"'.$class2.'/>'.nlc();
  2558.                                                 echo indentc(1).'</div>'.nl();
  2559.                                                 break;
  2560.                                         case 'Hidden Input':
  2561.                                                 echo indentc(1).'<input id="ff_elem'.$row->id.'" type="hidden" name="ff_nm_'.$row->name.'[]" value="'.$data1.'" />'.nl();
  2562.                                                 break;
  2563.                                         case 'Checkbox':
  2564.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.nlc();
  2565.                                                 $attribs = '';
  2566.                                                 if ($row->flag1) $attribs .= ' checked="checked"';
  2567.                                                 if ($row->flag2) $attribs .= ' disabled="disabled"';
  2568.                                                 $attribs .= $this->script2clause($row);
  2569.                                                 echo indentc(2).'<input id="ff_elem'.$row->id.'" type="checkbox" name="ff_nm_'.$row->name.'[]" value="'.$data1.'"'.$attribs.$class2.'/><label id="ff_lbl'.$row->id.'" for="ff_elem'.$row->id.'"> '.$data2.'</label>'.nlc();
  2570.                                                 echo indentc(1).'</div>'.nl();
  2571.                                                 break;
  2572.                                         case 'Radio Button':
  2573.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.nlc();
  2574.                                                 $attribs = '';
  2575.                                                 if ($row->flag1) $attribs .= ' checked="checked"';
  2576.                                                 if ($row->flag2) $attribs .= ' disabled="disabled"';
  2577.                                                 $attribs .= $this->script2clause($row);
  2578.                                                 echo indentc(2).'<input id="ff_elem'.$row->id.'" type="radio" name="ff_nm_'.$row->name.'[]" value="'.$data1.'"'.$attribs.$class2.'/><label id="ff_lbl'.$row->id.'" for="ff_elem'.$row->id.'"> '.$data2.'</label>'.nlc();
  2579.                                                 echo indentc(1).'</div>'.nl();
  2580.                                                 break;
  2581.                                         case 'Regular Button':
  2582.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.nlc();
  2583.                                                 $attribs = '';
  2584.                                                 if ($row->flag2) $attribs .= ' disabled="disabled"';
  2585.                                                 $attribs .= $this->script2clause($row);
  2586.                                                 echo indentc(2).'<input id="ff_elem'.$row->id.'" type="button" name="ff_nm_'.$row->name.'" value="'.$data2.'"'.$attribs.$class2.'/>'.nlc();
  2587.                                                 echo indentc(1).'</div>'.nl();
  2588.                                                 break;
  2589.                                         case 'Graphic Button':
  2590.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.nlc();
  2591.                                                 $attribs = '';
  2592.                                                 if ($row->flag2) $attribs .= ' disabled="disabled"';
  2593.                                                 $attribs .= $this->script2clause($row);
  2594.                                                 echo indentc(2).'<button id="ff_elem'.$row->id.'" type="button" name="ff_nm_'.$row->name.'" value="'.$data2.'"'.$attribs.$class2.'>'.nlc();
  2595.                                                 $attribs = '';
  2596.                                                 if ($row->width > 0) $attribs .= 'width="'.$row->width.'" ';
  2597.                                                 if ($row->height > 0) $attribs .= 'height="'.$row->height.'" ';
  2598.                                                 switch ($row->flag1) {
  2599.                                                         case 0: // none
  2600.                                                                 echo indentc(3).'<table cellpadding="0" cellspacing="6" border="0">'.nlc();
  2601.                                                                 echo indentc(4).'<tr><td>'.nlc();
  2602.                                                                 echo indentc(5).'<img id="ff_img'.$row->id.'" src="'.$data1.'"  alt="'.$data2.'" border="0" '.$attribs.'/>'.nlc();
  2603.                                                                 echo indentc(4).'</td></tr>'.nlc();
  2604.                                                                 echo indentc(3).'</table>'.nlc();
  2605.                                                                 break;
  2606.                                                         case 1: // below
  2607.                                                                 echo indentc(3).'<table cellpadding="0" cellspacing="6" border="0">'.nlc();
  2608.                                                                 echo indentc(4).'<tr><td nowrap style="text-align:center">'.nlc();
  2609.                                                                 echo indentc(5).'<img id="ff_img'.$row->id.'" src="'.$data1.'" alt="" border="0" '.$attribs.'/><br/>'.nlc();
  2610.                                                                 echo indentc(5).$data2.nlc();
  2611.                                                                 echo indentc(4).'</td></tr>'.nlc();
  2612.                                                                 echo indentc(3).'</table>'.nlc();
  2613.                                                                 break;
  2614.                                                         case 2: // above
  2615.                                                                 echo indentc(3).'<table cellpadding="0" cellspacing="6" border="0">'.nlc();
  2616.                                                                 echo indentc(4).'<tr><td nowrap style="text-align:center">'.nlc();
  2617.                                                                 echo indentc(5).$data2.'<br/>'.nlc();
  2618.                                                                 echo indentc(5).'<img id="ff_img'.$row->id.'" src="'.$data1.'" alt="" border="0" '.$attribs.'/>'.nlc();
  2619.                                                                 echo indentc(4).'</td></tr>'.nlc();
  2620.                                                                 echo indentc(3).'</table>.nlc()';
  2621.                                                                 break;
  2622.                                                         case 3: // left
  2623.                                                                 echo indentc(3).'<table cellpadding="0" cellspacing="6" border="0">'.nlc();
  2624.                                                                 echo indentc(4).'<tr>'.nlc();
  2625.                                                                 echo indentc(5).'<td>'.$data2.'</td>'.nlc();
  2626.                                                                 echo indentc(5).'<td><img id="ff_img'.$row->id.'" src="'.$data1.'" alt="" border="0" '.$attribs.'/></td>'.nlc();
  2627.                                                                 echo indentc(4).'</tr>'.nlc();
  2628.                                                                 echo indentc(3).'</table>'.nlc();
  2629.                                                                 break;
  2630.                                                         default: // assume right
  2631.                                                                 echo indentc(3).'<table cellpadding="0" cellspacing="6" border="0">'.nlc();
  2632.                                                                 echo indentc(4).'<tr>'.nlc();
  2633.                                                                 echo indentc(5).'<td><img id="ff_img'.$row->id.'" src="'.$data1.'" alt="" border="0" '.$attribs.'/></td>'.nlc();
  2634.                                                                 echo indentc(5).'<td>'.$data2.'</td>'.nlc();
  2635.                                                                 echo indentc(4).'</tr>'.nlc();
  2636.                                                                 echo indentc(3).'</table>'.nlc();
  2637.                                                                 break;
  2638.                                                 } // switch
  2639.                                                 echo indentc(2).'</button>'.nlc();
  2640.                                                 echo indentc(1).'</div>'.nl();
  2641.                                                 break;
  2642.                                         case 'Icon':
  2643.                                                 if ($row->flag2)
  2644.                                                         echo indentc(1).'<div id="ff_div'.$row->id.'" onmouseout="ff_hideIconBorder(this);" onmouseover="ff_dispIconBorder(this);" style="padding:3px;'.$attribs.'"'.$class1.'>'.nlc();
  2645.                                                 else
  2646.                                                         echo indentc(1).'<div id="ff_div'.$row->id.'"  style="'.$attribs.'"'.$class1.'>'.nlc();
  2647.                                                 $swap = '';
  2648.                                                 if ($data3 != '')
  2649.                                                         $swap = 'onmouseout="MM_swapImgRestore();" onmouseover="MM_swapImage(\'ff_img'.$row->id.'\',\'\',\''.$data3.'\',1);" ';
  2650.  
  2651.                                                 $swap .= $this->script2clause($row);
  2652.                                                 $attribs = '';
  2653.                                                 if ($row->width > 0) $attribs .= 'width="'.$row->width.'" ';
  2654.                                                 if ($row->height > 0) $attribs .= 'height="'.$row->height.'" ';
  2655.                                                 switch ($row->flag1) {
  2656.                                                         case 0: // none
  2657.                                                                 echo indentc(2).'<span id="ff_elem'.$row->id.'" '.$swap.'>'.nlc();
  2658.                                                                 echo indentc(3).'<img id="ff_img'.$row->id.'" src="'.$data1.'" alt="" border="0" align="middle" '.$attribs.$class2.'/>'.nlc();
  2659.                                                                 echo indentc(2).'</span>'.nlc();
  2660.                                                                 break;
  2661.                                                         case 1: // below
  2662.                                                                 echo indentc(2).'<table id="ff_elem'.$row->id.'" cellpadding="1" cellspacing="0" border="0" '.$swap.'>'.nlc();
  2663.                                                                 echo indentc(3).'<tr><td style="text-align:center;"><img id="ff_img'.$row->id.'" src="'.$data1.'" alt="" border="0" align="middle" '.$attribs.$class2.'/></td></tr>'.nlc();
  2664.                                                                 echo indentc(3).'<tr><td style="text-align:center;">'.$data2.'</td></tr>'.nlc();
  2665.                                                                 echo indentc(2).'</table>'.nlc();
  2666.                                                                 break;
  2667.                                                         case 2: // above
  2668.                                                                 echo indentc(2).'<table id="ff_elem'.$row->id.'" cellpadding="2" cellspacing="0" border="0" '.$swap.'>'.nlc();
  2669.                                                                 echo indentc(3).'<tr><td style="text-align:center;">'.$data2.'</td></tr>'.nlc();
  2670.                                                                 echo indentc(3).'<tr><td style="text-align:center;"><img id="ff_img'.$row->id.'" src="'.$data1.'" alt="" border="0" align="middle" '.$attribs.$class2.'/></td></tr>'.nlc();
  2671.                                                                 echo indentc(2).'</table>'.nlc();
  2672.                                                                 break;
  2673.                                                         case 3: // left
  2674.                                                                 echo indentc(2).'<span id="ff_elem'.$row->id.'" '.$swap.' style="vertical-align:middle;">'.nlc();
  2675.                                                                 echo indentc(3).$data2.' &nbsp;<img id="ff_img'.$row->id.'" src="'.$data1.'" alt="" border="0" align="middle" '.$attribs.$class2.'/>'.nlc();
  2676.                                                                 echo indentc(2).'</span>'.nlc();
  2677.                                                                 break;
  2678.                                                         default: // assume right
  2679.                                                                 echo indentc(2).'<span id="ff_elem'.$row->id.'" '.$swap.' style="vertical-align:middle;">'.nlc();
  2680.                                                                 echo indentc(3).'<img id="ff_img'.$row->id.'" src="'.$data1.'" alt="" border="0" align="middle" '.$attribs.$class2.'/>&nbsp; '.$data2.nlc();
  2681.                                                                 echo indentc(2).'</span>'.nlc();
  2682.                                                                 break;
  2683.                                                 } // switch
  2684.                                                 echo indentc(1).'</div>'.nl();
  2685.                                                 break;
  2686.                                         case 'Select List':
  2687.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.nlc();
  2688.                                                 $attribs = '';
  2689.                                                 $styles = '';
  2690.                                                 if ($row->width > 0) $styles .= 'width:'.$row->width.'px;';
  2691.                                                 if ($row->height > 0) $styles .= 'height:'.$row->height.'px;';
  2692.                                                 if ($row->flag1) $attribs .= ' multiple="multiple"';
  2693.                                                 if ($row->flag2) $attribs .= ' disabled="disabled"';
  2694.                                                 $attribs .= $this->script2clause($row);
  2695.                                                 if ($data1 != '') $attribs .= ' size="'.$data1.'"';
  2696.                                                 if ($styles != '') $attribs .= ' style="'.$styles.'"';
  2697.                                                 echo indentc(2).'<select id="ff_elem'.$row->id.'" name="ff_nm_'.$row->name.'[]" '.$attribs.$class2.'>'.nlc();
  2698.                                                 $options = explode('\n', preg_replace('/([\\r\\n])/s', '\n', $data2));
  2699.                                                 $cnt = count($options);
  2700.                                                 for ($o = 0; $o < $cnt; $o++) {
  2701.                                                         $opt = explode(";",$options[$o]);
  2702.                                                         $selected = '';
  2703.                                                         switch (count($opt)) {
  2704.                                                                 case 0:
  2705.                                                                         break;
  2706.                                                                 case 1:
  2707.                                                                         if ($this->trim($opt[0])) {
  2708.                                                                                 $selected = '0';
  2709.                                                                                 $value = $text = $opt[0];
  2710.                                                                         } // if
  2711.                                                                         break;
  2712.                                                                 case 2:
  2713.                                                                         $selected = $opt[0];
  2714.                                                                         $value = $text = $opt[1];
  2715.                                                                         break;
  2716.                                                                 default:
  2717.                                                                         $selected = $opt[0];
  2718.                                                                         $text     = $opt[1];
  2719.                                                                         $value    = $opt[2];
  2720.                                                         } // switch
  2721.                                                         if ($this->trim($selected)) {
  2722.                                                                 $attribs = '';
  2723.                                                                 if ($this->trim($value)) {
  2724.                                                                         if ($value=='""' || $value=="''") $value = '';
  2725.                                                                         $attribs .= ' value="'.htmlspecialchars($value,ENT_QUOTES).'"';
  2726.                                                                 } // if
  2727.                                                                 if ($selected == 1) $attribs .= ' selected="selected"';
  2728.                                                                 echo indentc(3).'<option'.$attribs.'>'.htmlspecialchars(trim($text),ENT_QUOTES).'</option>'.nlc();
  2729.                                                         } // if
  2730.                                                 } // for
  2731.                                                 echo indentc(2).'</select>'.nlc();
  2732.                                                 echo indentc(1).'</div>'.nl();
  2733.                                                 break;
  2734.                                         case 'Text':
  2735.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.nlc();
  2736.                                                 $attribs = '';
  2737.                                                 if ($row->width > 0) {
  2738.                                                         if ($row->widthmode > 0)
  2739.                                                                 $attribs .= ' style="width:'.$row->width.'px;"';
  2740.                                                         else
  2741.                                                                 $attribs .= ' size="'.$row->width.'"';
  2742.                                                 } // if
  2743.                                                 if ($row->height > 0) $attribs .= ' maxlength="'.$row->height.'"';
  2744.                                                 if ($row->flag1)
  2745.                                                         $attribs .= ' type="password"';
  2746.                                                 else
  2747.                                                         $attribs .= ' type="text"';
  2748.                                                 switch ($row->flag2) {
  2749.                                                         case 1: $attribs .= ' disabled="disabled"'; break;
  2750.                                                         case 2: $attribs .= ' readonly="readonly"'; break;
  2751.                                                         default: break;
  2752.                                                 } // switch
  2753.                                                 $attribs .= $this->script2clause($row);
  2754.                                                 echo indentc(2).'<input id="ff_elem'.$row->id.'"'.$attribs.' name="ff_nm_'.$row->name.'[]" value="'.$data1.'"'.$class2.'/>'.nlc();
  2755.                                                 echo indentc(1).'</div>'.nl();
  2756.                                                 break;
  2757.                                         case 'Textarea':
  2758.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.nlc();
  2759.                                                 $attribs = '';
  2760.                                                 $styles = '';
  2761.                                                 switch ($row->flag2) {
  2762.                                                         case 1: $attribs .= ' disabled="disabled"'; break;
  2763.                                                         case 2: $attribs .= ' readonly="readonly"'; break;
  2764.                                                         default: break;
  2765.                                                 } // switch
  2766.                                                 if ($row->width > 0) {
  2767.                                                         if ($row->widthmode > 0)
  2768.                                                                 $styles .= 'width:'.$row->width.'px;';
  2769.                                                         else
  2770.                                                                 $attribs .= ' cols="'.$row->width.'"';
  2771.                                                 } // if
  2772.                                                 if ($row->height > 0) {
  2773.                                                         if ($row->heightmode > 0)
  2774.                                                                 $styles .= 'height:'.$row->height.'px;';
  2775.                                                         else {
  2776.                                                                 $height = $row->height;
  2777.                                                                 if ($height>1 && stristr($this->browser,'mozilla')) $height--;
  2778.                                                                 $attribs .= ' rows="'.$height.'"';
  2779.                                                         } // if
  2780.                                                 } // if
  2781.                                                 if ($styles != '') $attribs .= ' style="'.$styles.'"';
  2782.                                                 $attribs .= $this->script2clause($row);
  2783.                                                 echo indentc(2).'<textarea id="ff_elem'.$row->id.'" name="ff_nm_'.$row->name.'[]"'.$attribs.$class2.'>'.$data1.'</textarea>'.nlc();
  2784.                                                 echo indentc(1).'</div>'.nl();
  2785.                                                 break;
  2786.                                         case 'File Upload':
  2787.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.nlc();
  2788.                                                 $attribs = '';
  2789.                                                 if ($row->width > 0) $attribs .= ' size="'.$row->width.'"';
  2790.                                                 if ($row->height > 0) $attribs .= ' maxlength="'.$row->height.'"';
  2791.                                                 if ($row->flag2) $attribs .= ' disabled="disabled"';
  2792.                                                 if ($row->data2 != '') $attribs .= ' accept="'.$data2.'"';
  2793.                                                 $attribs .= $this->script2clause($row);
  2794.                                                 echo indentc(2).'<input id="ff_elem'.$row->id.'"'.$attribs.' type="file" name="ff_nm_'.$row->name.'[]"'.$class2.'/>'.nlc();
  2795.                                                 echo indentc(1).'</div>'.nl();
  2796.                                                 break;
  2797.                                         case 'Captcha':
  2798.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.nlc();
  2799.                                                 $attribs = '';
  2800.                                                 if($row->width > 0) $attribs  .= 'width:'.$row->width.'px;';
  2801.                                                 if($row->height > 0) $attribs  .= 'height:'.$row->height.'px;';
  2802.                                                 echo '<img id="ff_capimgValue" class="ff_capimg" src="'.JURI::root(true) . '/index.php?raw=true&amp;option=com_breezingforms&amp;bfCaptcha=true&amp;Itemid='.JRequest::getInt('Itemid',0).'"/>';
  2803.                                                 echo '<br/>';
  2804.                                                 echo '<input type="text" style="'.$attribs.'" name="bfCaptchaEntry" id="bfCaptchaEntry" />';
  2805.                                                 //echo '<br/>';
  2806.                                                 echo '<a href="#" onclick="document.getElementById(\'bfCaptchaEntry\').value=\'\';document.getElementById(\'bfCaptchaEntry\').focus();document.getElementById(\'ff_capimgValue\').src = \''.JURI::root(true).'/index.php?raw=true&option=com_breezingforms&Itemid='.JRequest::getInt('Itemid',99999).'&bfCaptcha=true&bfMathRandom=\' + Math.random(); return false"><img src="'.JURI::root().'components/com_breezingforms/images/captcha/refresh-captcha.png" border="0" /></a>';
  2807.                                                 echo indentc(1).'</div>'.nl();
  2808.                                                 break;
  2809.                                         case 'Query List':
  2810.                                                 echo indentc(1).'<div id="ff_div'.$row->id.'" style="'.$attribs.'"'.$class1.'>'.nlc();
  2811.  
  2812.                                                 // unpack settings
  2813.                                                 $settings = explode("\n",$row->data1);
  2814.                                                 $scnt = count($settings);
  2815.                                                 for ($s = 0; $s < $scnt; $s++) $this->trim($settings[$s]);
  2816.                                                 $trhclass = '';
  2817.                                                 $tr1class = '';
  2818.                                                 $tr2class = '';
  2819.                                                 $trfclass = '';
  2820.                                                 $tdfclass = '';
  2821.                                                 $pagenav = 1;
  2822.                                                 $attribs = '';
  2823.                                                 if ($scnt>0 && $settings[0]!='') $attribs .= ' border="'.$settings[0].'"';
  2824.                                                 if ($scnt>1 && $settings[1]!='') $attribs .= ' cellspacing="'.$settings[1].'"';
  2825.                                                 if ($scnt>2 && $settings[2]!='') $attribs .= ' cellpadding="'.$settings[2].'"';
  2826.                                                 if ($scnt>3 && $settings[3]!='') $trhclass = ' class="'.$this->getClassName($settings[3]).'"';
  2827.                                                 if ($scnt>4 && $settings[4]!='') $tr1class = ' class="'.$this->getClassName($settings[4]).'"';
  2828.                                                 if ($scnt>5 && $settings[5]!='') $tr2class = ' class="'.$this->getClassName($settings[5]).'"';
  2829.                                                 if ($scnt>6 && $settings[6]!='') $trfclass = ' class="'.$this->getClassName($settings[6]).'"';
  2830.                                                 if ($scnt>7 && $settings[7]!='') $tdfclass = ' class="'.$this->getClassName($settings[7]).'"';
  2831.                                                 if ($scnt>8 && $settings[8]!='') $pagenav = $settings[8];
  2832.  
  2833.                                                 if ($row->width > 0) $attribs .= ' width="100%"';
  2834.  
  2835.                                                 // display 1st page of table
  2836.                                                 echo indentc(2).'<table id="ff_elem'.$row->id.'"'.$attribs.$class2.'>'.nl();
  2837.  
  2838.                                                 $cols =& $this->queryCols['ff_'.$row->id];
  2839.                                                 $colcnt = count($cols);
  2840.  
  2841.                                                 // display header
  2842.                                                 if ($row->flag1) {
  2843.                                                         echo indentc(3).'<tr'.$trhclass.'>'.nlc();
  2844.                                                         $skip = 0;
  2845.                                                         for ($c = 0; $c < $colcnt; $c++)
  2846.                                                                 if ($skip > 0) $skip--; else {
  2847.                                                                         $col =& $cols[$c];
  2848.                                                                         if ($col->thspan>0) {
  2849.                                                                                 $attribs = ''; $style = '';
  2850.                                                                                 switch ($col->thalign) {
  2851.                                                                                         case 1: $style .= 'text-align:left;';    break;
  2852.                                                                                         case 2: $style .= 'text-align:center;';  break;
  2853.                                                                                         case 3: $style .= 'text-align:right;';   break;
  2854.                                                                                         case 4: $style .= 'text-align:justify;'; break;
  2855.                                                                                         default:;
  2856.                                                                                 } // switch
  2857.                                                                                 switch ($col->thvalign) {
  2858.                                                                                         case 1: $attribs .= ' valign="top"';      break;
  2859.                                                                                         case 2: $attribs .= ' valign="middle"';   break;
  2860.                                                                                         case 3: $attribs .= ' valign="bottom"';   break;
  2861.                                                                                         case 4: $attribs .= ' valign="baseline"'; break;
  2862.                                                                                         default:;
  2863.                                                                                 } // switch
  2864.                                                                                 if ($col->thwrap==1) $attribs .= ' nowrap="nowrap"';
  2865.                                                                                 if ($col->thspan >1) {
  2866.                                                                                         $attribs .= ' colspan="'.$col->thspan.'"';
  2867.                                                                                         $skip = $col->thspan-1;
  2868.                                                                                 } // if
  2869.                                                                                 if ($col->class1!='') $attribs .= ' class="'.$this->getClassName($col->class1).'"';
  2870.                                                                                 if (intval($col->width) > 0 && !$skip) {
  2871.                                                                                         $style .= 'width:'.$col->width;
  2872.                                                                                         if ($col->widthmd) $style .= '%;'; else $style .= 'px;';
  2873.                                                                                 } // if
  2874.                                                                                 if ($style != '') $attribs .= ' style="'.$style.'"';
  2875.                                                                                 if ($c==0 && $row->flag2>0) {
  2876.                                                                                         if ($row->flag2==1)
  2877.                                                                                                 echo indentc(4).'<th'.$attribs.'><input type="checkbox" id="ff_cb'.$row->id.'" onclick="ff_selectAllQueryRows('.$row->id.',this.checked);" /></th>'.nlc();
  2878.                                                                                         else
  2879.                                                                                                 echo indentc(4).'<th'.$attribs.'></th>'.nlc();
  2880.                                                                                 } else
  2881.                                                                                         echo indentc(4).'<th'.$attribs.'>'.$this->replaceCode($col->title, BFText::_('COM_BREEZINGFORMS_PROCESS_QTITLEOF')." $row->name::$col->name", 'e', $row->id, 2).'</th>'.nlc();
  2882.                                                                         } // if
  2883.                                                                         unset($col);
  2884.                                                                 } // if
  2885.                                                         echo indentc(3).'</tr>'.nl();
  2886.                                                 } // if
  2887.  
  2888.                                                 // display data rows
  2889.                                                 $qrows =& $this->queryRows['ff_'.$row->id];
  2890.                                                 $qcnt = count($qrows);
  2891.                                                 $k = 1;
  2892.                                                 if ($row->height>0 && $qcnt>$row->height) $qcnt = $row->height;
  2893.                                                 for ($q = 0; $q < $qcnt; $q++) {
  2894.                                                         $qrow =& $qrows[$q];
  2895.                                                         $rowvals = get_object_vars($qrow);
  2896.                                                         if ($k == 1) $cl = $tr1class; else $cl = $tr2class;
  2897.                                                         echo indentc(3).'<tr'.$cl.'>'.nlc();
  2898.                                                         $skip = 0;
  2899.                                                         for ($c = 0; $c < $colcnt; $c++) {
  2900.                                                                 $col =& $cols[$c];
  2901.                                                                 if ($col->thspan>0) {
  2902.                                                                         $attribs = ''; $style = '';
  2903.                                                                         switch ($col->align) {
  2904.                                                                                 case 1: $style .= 'text-align:left;';    break;
  2905.                                                                                 case 2: $style .= 'text-align:center;';  break;
  2906.                                                                                 case 3: $style .= 'text-align:right;';   break;
  2907.                                                                                 case 4: $style .= 'text-align:justify;'; break;
  2908.                                                                                 default:;
  2909.                                                                         } // switch
  2910.                                                                         switch ($col->valign) {
  2911.                                                                                 case 1: $attribs .= ' valign="top"';      break;
  2912.                                                                                 case 2: $attribs .= ' valign="middle"';   break;
  2913.                                                                                 case 3: $attribs .= ' valign="bottom"';   break;
  2914.                                                                                 case 4: $attribs .= ' valign="baseline"'; break;
  2915.                                                                                 default:;
  2916.                                                                         } // switch
  2917.                                                                         if ($col->wrap==1) $attribs .= ' nowrap="nowrap"';
  2918.                                                                         if ($k == 1) $cl = $col->class2; else $cl = $col->class3;
  2919.                                                                         if ($cl != '') $attribs .= ' class="'.$this->getClassName($cl).'"';
  2920.                                                                         if (!$skip && $col->thspan>1) $skip = $col->thspan;
  2921.                                                                         if ($skip && $q == 0)
  2922.                                                                                 if (intval($col->width) > 0) {
  2923.                                                                                         $style .= 'width:'.$col->width;
  2924.                                                                                         if ($col->widthmd) $style .= '%;'; else $style .= 'px;';
  2925.                                                                                 } // if
  2926.                                                                         if ($skip > 0) $skip--;
  2927.                                                                         if ($style != '') $attribs .= ' style="'.$style.'"';
  2928.                                                                         if ($c == 0 && $row->flag2 > 0) {
  2929.                                                                                 if ($row->flag2==1)
  2930.                                                                                         echo indentc(4).'<td'.$attribs.'><input type="checkbox" id="ff_cb'.$row->id.'_'.$q.'" value="'.$qrow[$c].'"  name="ff_nm_'.$row->name.'[]"/></td>'.nlc();
  2931.                                                                                 else
  2932.                                                                                         echo indentc(4).'<td'.$attribs.'><input type="radio" id="ff_cb'.$row->id.'_'.$q.'" value="'.$qrow[$c].'"  name="ff_nm_'.$row->name.'[]"/></td>'.nlc();
  2933.                                                                         } else
  2934.                                                                                 echo indentc(4).'<td'.$attribs.'>'.$qrow[$c].'</td>'.nlc();
  2935.                                                                 } // if
  2936.                                                                 unset($col);
  2937.                                                                 if ($this->dying) break;
  2938.                                                         } // for
  2939.                                                         echo indentc(3).'</tr>'.nl();
  2940.                                                         $k = 3-$k;
  2941.                                                         unset($qrow);
  2942.                                                         if ($this->dying) break;
  2943.                                                 } // for
  2944.                                                 if ($this->bury()) return;
  2945.  
  2946.                                                 // display footer
  2947.                                                 if ($row->height > 0 && $pagenav > 0) {
  2948.                                                         $span = 0;
  2949.                                                         for ($c = 0; $c < $colcnt; $c++)
  2950.                                                                 if ($cols[$c]->thspan>0) $span++;
  2951.                                                         $pages = intval((count($qrows)+$row->height-1)/$row->height);
  2952.                                                         echo indentc(3).'<tr'.$trfclass.'>'.nlc();
  2953.                                                         echo indentc(4).'<td colspan="'.$span.'"'.$tdfclass.'>'.nlc();
  2954.                                                         if ($pages > 1) {
  2955.                                                                 echo indentc(5);
  2956.                                                                 if ($pagenav<=4) echo '&lt;&lt; ';
  2957.                                                                 if ($pagenav<=2) echo BFText::_('COM_BREEZINGFORMS_PROCESS_PAGESTART').' ';
  2958.                                                                 if ($pagenav<=4) echo '&lt; ';
  2959.                                                                 if ($pagenav<=2) echo BFText::_('COM_BREEZINGFORMS_PROCESS_PAGEPREV').' ';
  2960.                                                                 echo nlc();
  2961.                                                                 if ($pagenav % 2) {
  2962.                                                                         echo indentc(5);
  2963.                                                                         echo '1 ';
  2964.                                                                         for ($p = 2; $p <= $pages; $p++)
  2965.                                                                                 echo indentc(5).'<a href="javascript:ff_dispQueryPage('.$row->id.','.$p.');">'.$p.'</a> '.nlc();
  2966.                                                                         echo nlc();
  2967.                                                                 } // if
  2968.                                                                 if ($pagenav<=4) {
  2969.                                                                         echo indentc(5).'<a href="javascript:ff_dispQueryPage('.$row->id.',2);">';
  2970.                                                                         if ($pagenav<=2) echo BFText::_('COM_BREEZINGFORMS_PROCESS_PAGENEXT').' ';
  2971.                                                                         echo '&gt;</a> '.nlc();
  2972.                                                                         echo indentc(5).'<a href="javascript:ff_dispQueryPage('.$row->id.','.$pages.');">';
  2973.                                                                         if ($pagenav<=2) echo BFText::_('COM_BREEZINGFORMS_PROCESS_PAGEEND').' ';
  2974.                                                                         echo '&gt;&gt;</a>'.nlc();
  2975.                                                                 } // if
  2976.                                                         } // if
  2977.                                                         echo indentc(4).'</td>'.nlc();
  2978.                                                         echo indentc(3).'</tr>'.nl();
  2979.                                                 } // if
  2980.  
  2981.                                                 // table end
  2982.                                                 echo indentc(2).'</table>'.nlc();
  2983.                                                 echo indentc(1).'</div>'.nl();
  2984.                                                 unset($qrows);
  2985.                                                 unset($cols);
  2986.                                                 break;
  2987.                                         default:
  2988.                                                 break;
  2989.                                 } // switch
  2990.                                 unset($row);
  2991.                         } // for
  2992.  
  2993.                 } else if(trim($this->formrow->template_code_processed) == 'QuickMode') {
  2994.  
  2995.                         require_once(JPATH_SITE.'/administrator/components/com_breezingforms/libraries/crosstec/classes/BFQuickMode.php');
  2996.                         $quickMode = new BFQuickMode($this);
  2997.                         $quickMode->render();
  2998.  
  2999.                 } else { // case of forms done with the easy mode
  3000.                         echo '
  3001.                         <style type="text/css">
  3002.                         ul.droppableArea, ul.droppableArea li { background-image: none; list-style: none; }
  3003.                         li.ff_listItem { width: auto; list-style: none; }
  3004.                         li.ff_listItem .ff_div { width: auto; float: left; }
  3005.                         .ff_label { outline: none; }
  3006.                         .ff_elem { float: left; }
  3007.                         .ff_dragBox { display: none; }
  3008.                         </style>
  3009.                         ';
  3010.                         echo $this->formrow->template_code_processed;
  3011.                         $visPages = '';
  3012.                         $pagesSize = isset($this->formrow->pages) ? intval($this->formrow->pages) : 1;
  3013.                         for($pageCnt = 1; $pageCnt <= $pagesSize;$pageCnt++){
  3014.                                 $visPages .= 'if(document.getElementById("bfPage'.$pageCnt.'"))document.getElementById("bfPage'.$pageCnt.'").style.display = "none";';
  3015.                         }
  3016.                         echo '<script>
  3017.                                 '.$visPages.';
  3018.                                 if(document.getElementById("bfPage'.$this->page.'"))document.getElementById("bfPage'.$this->page.'").style.display = "";
  3019.                         </script>';
  3020.                 }
  3021.  
  3022.                 if($this->editable){
  3023.                         $db = JFactory::getDBO();
  3024.                         $db->setQuery("Select id, form From #__facileforms_records Where form = ".$db->Quote($this->form)." And user_id = ".$db->Quote(JFactory::getUser()->get('id', -1))." And user_id <> 0 And archived = 0 Order By id Desc Limit 1");
  3025.                         $recordsResult = $db->loadObjectList();
  3026.                         if(count($recordsResult) != 0){
  3027.                                 $db->setQuery("Select * From #__facileforms_subrecords Where record = ".$recordsResult[0]->id."");
  3028.                                 $recordEntries = $db->loadObjectList();
  3029.                                 $js = '';
  3030.                                 foreach($recordEntries As $recordEntry){
  3031.                                         switch( $recordEntry->type ){
  3032.                                                 case 'Textarea':
  3033.                                                 case 'Text':
  3034.                                                 case 'Hidden Input':
  3035.                                                 case 'Calendar':
  3036.                                                         $js .= 'if(document.getElementById("ff_elem'.$recordEntry->element.'"))document.getElementById("ff_elem'.$recordEntry->element.'").value="'.str_replace("\n","\\n",str_replace("\r","\\r",addslashes($recordEntry->value))).'";'."\n";
  3037.                                                         break;
  3038.                                                 case 'Checkbox':
  3039.                                                         $js .= 'if(document.getElementById("ff_elem'.$recordEntry->element.'"))document.getElementById("ff_elem'.$recordEntry->element.'").checked = true;'."\n";
  3040.                                                         break;
  3041.                                                 case 'Checkbox Group':
  3042.                                                         $js .= '
  3043.                                                         for(var i = 0;i < document.ff_form'.$this->form.'.elements.length;i++){
  3044.                                                                 if(document.ff_form'.$this->form.'.elements[i].type == "checkbox" && document.ff_form'.$this->form.'.elements[i].name == "ff_nm_'.$recordEntry->name.'[]" && document.ff_form'.$this->form.'.elements[i].value == "'.str_replace("\n","\\n",str_replace("\r","\\r",addslashes($recordEntry->value))).'"){
  3045.                                                                         document.ff_form'.$this->form.'.elements[i].checked = true;
  3046.                                                                 }
  3047.                                                         }'."\n";
  3048.                                                         break;
  3049.                                                 case 'Radio Button':
  3050.                                                 case 'Radio Group':
  3051.                                                         $js .= '
  3052.                                                         for(var i = 0;i < document.ff_form'.$this->form.'.elements.length;i++){
  3053.                                                                 if(document.ff_form'.$this->form.'.elements[i].type == "radio" && document.ff_form'.$this->form.'.elements[i].name == "ff_nm_'.$recordEntry->name.'[]" && document.ff_form'.$this->form.'.elements[i].value == "'.str_replace("\n","\\n",str_replace("\r","\\r",addslashes($recordEntry->value))).'"){
  3054.                                                                         document.ff_form'.$this->form.'.elements[i].checked = true;
  3055.                                                                 }
  3056.                                                         }'."\n";
  3057.                                                         break;
  3058.                                                 case 'Select List':
  3059.                                                         $js .= 'for(var i = 0; i < document.getElementById("ff_elem'.$recordEntry->element.'").options.length; i++){
  3060.                                                                 if(document.getElementById("ff_elem'.$recordEntry->element.'").options[i].value == "'.str_replace("\n","\\n",str_replace("\r","\\r",addslashes($recordEntry->value))).'"){
  3061.                                                                         document.getElementById("ff_elem'.$recordEntry->element.'").options[i].selected = true;
  3062.                                                                 }
  3063.                                                         }';
  3064.                                                         break;
  3065.                                         }
  3066.                                 }
  3067.  
  3068.                                 echo '
  3069.                                 <script>
  3070.                                 '.$js.'
  3071.                                 // legacy seccode removal
  3072.                                 for(var i = 0;i < document.ff_form'.$this->form.'.elements.length;i++){
  3073.                                         if(document.ff_form'.$this->form.'.elements[i].name == "ff_nm_seccode[]"){
  3074.                                                 document.ff_form'.$this->form.'.elements[i].value = "";
  3075.                                         }
  3076.                                 }
  3077.                                 </script>
  3078.                                 ';
  3079.                         }
  3080.                 }
  3081.  
  3082.                 $paymentMethod = '';
  3083.                 for($i = 0; $i < $this->rowcount; $i++) {
  3084.                         $row = $this->rows[$i];
  3085.                         if ($row->type=="PayPal" || $row->type=="Sofortueberweisung") {
  3086.                                 echo indentc(1).'<input type="hidden" name="ff_payment_method" id="bfPaymentMethod" value=""/>'.nl();
  3087.                                 break;
  3088.                         }
  3089.                 }
  3090.  
  3091.                 switch ($this->runmode) {
  3092.                         case _FF_RUNMODE_FRONTEND:
  3093.                                  echo indentc(1).'<input type="hidden" name="ff_contentid" value="'.JRequest::getInt('ff_contentid',0).'"/>'.nl().
  3094.                                           indentc(1).'<input type="hidden" name="ff_applic" value="'.JRequest::getWord('ff_applic','').'"/>'.nl().
  3095.                                           indentc(1).'<input type="hidden" name="ff_module_id" value="'.JRequest::getInt('ff_module_id',0).'"/>'.nl();
  3096.                                 echo indentc(1).'<input type="hidden" name="ff_form" value="'.$this->form.'"/>'.nl().
  3097.                                          indentc(1).'<input type="hidden" name="ff_task" value="submit"/>'.nl();
  3098.                                 if ($this->target > 1)
  3099.                                         echo indentc(1).'<input type="hidden" name="ff_target" value="'.$this->target.'"/>'.nl();
  3100.                                 if ($this->inframe)
  3101.                                         echo indentc(1).'<input type="hidden" name="ff_frame" value="1"/>'.nl();
  3102.                                 if ($this->border)
  3103.                                         echo indentc(1).'<input type="hidden" name="ff_border" value="1"/>'.nl();
  3104.                                 if ($this->page != 1)
  3105.                                         echo indentc(1).'<input type="hidden" name="ff_page" value="'.$this->page.'"/>'.nl();
  3106.                                 if ($this->align != 1)
  3107.                                         echo indentc(1).'<input type="hidden" name="ff_align" value="'.$this->align.'"/>'.nl();
  3108.                                 if ($this->top != 0)
  3109.                                         echo indentc(1).'<input type="hidden" name="ff_top" value="'.$this->top.'"/>'.nl();
  3110.                                 reset($ff_otherparams);
  3111.                                 while (list($prop, $val) = each($ff_otherparams))
  3112.                                         echo indentc(1).'<input type="hidden" name="'.$prop.'" value="'.$val.'"/>'.nl();
  3113.                                 echo '</form>'.nl();
  3114.                                 break;
  3115.  
  3116.                         case _FF_RUNMODE_BACKEND:
  3117.                                 echo indentc(1).'<input type="hidden" name="option" value="com_breezingforms"/>'.nl().
  3118.                                          indentc(1).'<input type="hidden" name="act" value="run"/>'.nl().
  3119.                                          indentc(1).'<input type="hidden" name="ff_form" value="'.$this->form.'"/>'.nl().
  3120.                                          indentc(1).'<input type="hidden" name="ff_task" value="submit"/>'.nl().
  3121.                                          indentc(1).'<input type="hidden" name="ff_contentid" value="'.JRequest::getInt('ff_contentid',0).'"/>'.nl().
  3122.                                          indentc(1).'<input type="hidden" name="ff_applic" value="'.JRequest::getWord('ff_applic','').'"/>'.nl().
  3123.                                          indentc(1).'<input type="hidden" name="ff_module_id" value="'.JRequest::getInt('ff_module_id',0).'"/>'.nl().
  3124.                                          indentc(1).'<input type="hidden" name="ff_runmode" value="'.$this->runmode.'"/>'.nl();
  3125.                                 if ($this->target > 1)
  3126.                                         echo indentc(1).'<input type="hidden" name="ff_target" value="'.$this->target.'"/>'.nl();
  3127.                                 if ($this->inframe)
  3128.                                         echo indentc(1).'<input type="hidden" name="ff_frame" value="1"/>'.nl();
  3129.                                 if ($this->border)
  3130.                                         echo indentc(1).'<input type="hidden" name="ff_border" value="1"/>'.nl();
  3131.                                 if ($this->page != 1)
  3132.                                         echo indentc(1).'<input type="hidden" name="ff_page" value="'.$this->page.'"/>'.nl();
  3133.                                 if ($this->align != 1)
  3134.                                         echo indentc(1).'<input type="hidden" name="ff_align" value="'.$this->align.'"/>'.nl();
  3135.                                 if ($this->top != 0)
  3136.                                         echo indentc(1).'<input type="hidden" name="ff_top" value="'.$this->top.'"/>'.nl();
  3137.                                 echo '</form>'.nl();
  3138.                                 break;
  3139.  
  3140.                         default: // _FF_RUNMODE_PREVIEW:
  3141.                                 if ($this->inframe) {
  3142.                                         echo indentc(1).'<input type="hidden" name="option" value="com_breezingforms"/>'.nl().
  3143.                                                  indentc(1).'<input type="hidden" name="ff_frame" value="1"/>'.nl().
  3144.                                                  indentc(1).'<input type="hidden" name="ff_form" value="'.$this->form.'"/>'.nl().
  3145.                                                  indentc(1).'<input type="hidden" name="ff_task" value="submit"/>'.nl().
  3146.                                                  indentc(1).'<input type="hidden" name="ff_contentid" value="'.JRequest::getInt('ff_contentid',0).'"/>'.nl().
  3147.                                                  indentc(1).'<input type="hidden" name="ff_applic" value="'.JRequest::getWord('ff_applic','').'"/>'.nl().
  3148.                                                  indentc(1).'<input type="hidden" name="ff_module_id" value="'.JRequest::getInt('ff_module_id',0).'"/>'.nl().
  3149.                                                  indentc(1).'<input type="hidden" name="ff_runmode" value="'.$this->runmode.'"/>'.nl();
  3150.                                         if ($this->page != 1)
  3151.                                                 echo indentc(1).'<input type="hidden" name="ff_page" value="'.$this->page.'"/>'.nl();
  3152.                                         echo '</form>'.nl();
  3153.                                 } // if
  3154.                 } // if
  3155.  
  3156.                 // handle After Form piece
  3157.                 $code = '';
  3158.                 switch ($this->formrow->piece2cond) {
  3159.                         case 1: // library
  3160.                                 $database->setQuery(
  3161.                                         "select name, code from #__facileforms_pieces ".
  3162.                                          "where id=".$this->formrow->piece2id." and published=1 "
  3163.                                 );
  3164.                                 $rows = $database->loadObjectList();
  3165.                                 if (count($rows))
  3166.                                         echo $this->execPiece(
  3167.                                                         $rows[0]->code,
  3168.                                                         BFText::_('COM_BREEZINGFORMS_PROCESS_AFPIECE')." ".$rows[0]->name,
  3169.                                                         'p',
  3170.                                                         $this->formrow->piece2id,
  3171.                                                         null
  3172.                                                 );
  3173.                                 break;
  3174.                         case 2: // custom code
  3175.                                 echo $this->execPiece(
  3176.                                                 $this->formrow->piece2code,
  3177.                                                 BFText::_('COM_BREEZINGFORMS_PROCESS_AFPIECEC'),
  3178.                                                 'f',
  3179.                                                 $this->form,
  3180.                                                 2
  3181.                                         );
  3182.                                 break;
  3183.                         default:
  3184.                                 break;
  3185.                 } // switch
  3186.                 if ($this->bury()) return;
  3187.                 echo '</div></div></div><div class="bfPage-bl"><div class="bfPage-br"><div class="bfPage-b"></div></div></div></div><!-- form end -->'.nl();
  3188.                 if ($this->traceMode & _FF_TRACEMODE_DIRECT) {
  3189.                         $this->dumpTrace();
  3190.                         ob_end_flush();
  3191.                         echo '</pre>';
  3192.                 } else {
  3193.                         ob_end_flush();
  3194.                         $this->dumpTrace();
  3195.                 } // if
  3196.                 restore_error_handler();
  3197.  
  3198.         } // view
  3199.  
  3200.         function logToDatabase()
  3201.         {
  3202.                 global $database, $ff_config;
  3203.                 $database = JFactory::getDBO();
  3204.                 if ($this->dying) return;
  3205.  
  3206.                 if($this->editable && $this->editable_override){
  3207.                         $database->setQuery("Select id From #__facileforms_records Where form = ".$database->Quote($this->form)." And user_id = ".$database->Quote(JFactory::getUser()->get('id',0))." And user_id <> 0");
  3208.                         $records = $database->loadObjectList();
  3209.                         foreach($records As $record){
  3210.                                 $database->setQuery("Delete From #__facileforms_subrecords Where record = " . $record->id);
  3211.                                 $database->query();
  3212.                                 $database->setQuery("Delete From #__facileforms_records Where id = " . $record->id);
  3213.                                 $database->query();
  3214.                         }
  3215.                 }
  3216.  
  3217.                 $record = new facileFormsRecords($database);
  3218.                 $record->submitted  = $this->submitted;
  3219.                 $record->form       = $this->form;
  3220.                 $record->title      = $this->formrow->title;
  3221.                 $record->name       = $this->formrow->name;
  3222.                 $record->ip         = $this->ip;
  3223.                 $record->browser    = $this->browser;
  3224.                 $record->opsys      = $this->opsys;
  3225.                 $record->provider   = $this->provider;
  3226.                 $record->viewed     = 0;
  3227.                 $record->exported   = 0;
  3228.                 $record->archived   = 0;
  3229.                 if(JFactory::getUser()->get('id', 0) > 0){
  3230.                         $record->user_id    = JFactory::getUser()->get('id', 0);
  3231.                         $record->username   = JFactory::getUser()->get('username', '');
  3232.                         $record->user_full_name = JFactory::getUser()->get('name', '');
  3233.                 } else {
  3234.                         $record->user_id    = JFactory::getUser()->get('id', 0);
  3235.                         $record->username   = '-';
  3236.                         $record->user_full_name = '-';
  3237.                 }
  3238.                 if (!$record->store()) {
  3239.                         $this->status = _FF_STATUS_SAVERECORD_FAILED;
  3240.                         $this->message = $record->getError();
  3241.                         return;
  3242.                 } // if
  3243.  
  3244.                 $this->record_id = $record->id;
  3245.                 $names = array();
  3246.                 $subrecord = new facileFormsSubrecords($database);
  3247.                 $subrecord->record = $record->id;
  3248.                 if (count($this->savedata)) foreach ($this->savedata as $data) {
  3249.  
  3250.                         $subrecord->id      = NULL;
  3251.                         $subrecord->element = $data[_FF_DATA_ID];
  3252.                         $subrecord->name    = $data[_FF_DATA_NAME];
  3253.                         $subrecord->title   = $data[_FF_DATA_TITLE];
  3254.                         $subrecord->type    = $data[_FF_DATA_TYPE];
  3255.                         $subrecord->value   = $data[_FF_DATA_VALUE];
  3256.                         if (!$subrecord->store()) {
  3257.                                 $this->status = _FF_STATUS_SAVESUBRECORD_FAILED;
  3258.                                 $this->message = $subrecord->getError();
  3259.                                 return;
  3260.                         }
  3261.                 } // foreach
  3262.  
  3263.                 require_once(JPATH_SITE.'/administrator/components/com_breezingforms/libraries/crosstec/classes/BFIntegrate.php');
  3264.                 $integrate = new BFIntegrate($this->form);
  3265.                 if (count($this->savedata)) foreach ($this->savedata as $data) {
  3266.                         $integrate->field($data);
  3267.                 }
  3268.                 $integrate->commit();
  3269.         } // logToDatabase
  3270.  
  3271.         function sendMail($from, $fromname, $recipient, $subject, $body,
  3272.                                           $attachment = NULL, $html = NULL, $cc = NULL, $bcc = NULL)
  3273.         {
  3274.                 if ($this->dying) return;
  3275.                 $mail = bf_createMail($from, $fromname, $subject, $body);
  3276.  
  3277.                 if (is_array($recipient))
  3278.                         foreach ($recipient as $to) $mail->AddAddress($to);
  3279.                 else
  3280.                         $mail->AddAddress($recipient);
  3281.  
  3282.                 if ($attachment) {
  3283.                         if ( is_array($attachment) ){
  3284.                                 $attCnt = count($attachment);
  3285.                                 for ($i = 0; $i < $attCnt; $i++){
  3286.                                         $mail->AddAttachment($attachment[$i]);
  3287.                                 }
  3288.                         }else
  3289.                                 $mail->AddAttachment($attachment);
  3290.                 } // if
  3291.  
  3292.                 if (isset($html)) $mail->IsHTML($html);
  3293.  
  3294.                 if (isset($cc)) {
  3295.                         if( is_array($cc) )
  3296.                                 foreach ($cc as $to) $mail->AddCC($to);
  3297.                         else
  3298.                                 $mail->AddCC($cc);
  3299.                 } // if
  3300.  
  3301.                 if (isset($bcc)) {
  3302.                         if( is_array($bcc) )
  3303.                                 foreach ($bcc as $to) $mail->AddBCC($to);
  3304.                         else
  3305.                                 $mail->AddBCC($bcc);
  3306.                 } // if
  3307.  
  3308.                 if (!$mail->Send()) {
  3309.                         $this->status = _FF_STATUS_SENDMAIL_FAILED;
  3310.                         $this->message = $mail->ErrorInfo;
  3311.                 } // if
  3312.         } // sendMail
  3313.  
  3314.         function exppdf($filter = array(), $mailback = false)
  3315.         {
  3316.                 global $ff_compath;
  3317.  
  3318.                 $file = JPATH_SITE.'/administrator/components/com_breezingforms/pdftpl/'.$this->formrow->name.'_pdf_attachment.php';
  3319.                 if(!JFile::exists($file)){
  3320.                     $file = JPATH_SITE.'/administrator/components/com_breezingforms/pdftpl/pdf_attachment.php';
  3321.                 }
  3322.  
  3323.                 if($mailback){
  3324.                     $mb_file = JPATH_SITE.'/administrator/components/com_breezingforms/pdftpl/'.$this->formrow->name.'_pdf_mailback_attachment.php';
  3325.                     if(JFile::exists($mb_file)){
  3326.                         $file = $mb_file;
  3327.                     } else {
  3328.                         $mb_file = JPATH_SITE.'/administrator/components/com_breezingforms/pdftpl/pdf_mailback_attachment.php';
  3329.                         if(JFile::exists($mb_file)){
  3330.                             $file = $mb_file;
  3331.                         }
  3332.                     }
  3333.                 }
  3334.  
  3335.                 $processed = array();
  3336.                 $xmldata = array();
  3337.                
  3338.                 foreach ($this->xmldata as $data) {
  3339.                     if(!in_array($data[_FF_DATA_NAME], $filter) && !in_array($data[_FF_DATA_NAME], $processed)) {
  3340.                         $xmldata[] = $data;
  3341.                         //$processed[] = $data[_FF_DATA_NAME];
  3342.                     }
  3343.                 }
  3344.  
  3345.                 ob_start();
  3346.                 require($file);
  3347.                 $c = ob_get_contents();
  3348.                 ob_end_clean();
  3349.                
  3350.                 require_once(JPATH_SITE.'/administrator/components/com_breezingforms/libraries/tcpdf/tcpdf.php');
  3351.                 $pdf = new TCPDF();
  3352.                 $pdf->setPrintHeader(false);
  3353.                 $pdf->AddPage();
  3354.                 $pdf->writeHTML($c);
  3355.                 mt_srand();
  3356.                 $pdfname = $ff_compath.'/exports/ffexport-pdf-'.date('YmdHis').'-'.mt_rand(0, mt_getrandmax()).'.pdf';
  3357.                 $pdf->lastPage();
  3358.                 $pdf->Output($pdfname, "F");
  3359.                 return $pdfname;
  3360.         }
  3361.  
  3362.         function expcsv($filter = array())
  3363.         {
  3364.                 global $ff_config;
  3365.  
  3366.                 $csvdelimiter = stripslashes($ff_config->csvdelimiter);
  3367.                 $csvquote = stripslashes($ff_config->csvquote);
  3368.                 $cellnewline = $ff_config->cellnewline == 0 ? "\n" : "\\n";
  3369.  
  3370.                 $fields = array();
  3371.                 $lines = array();
  3372.  
  3373.                 $lineNum = count($lines);
  3374.  
  3375.                 $fields['ZZZ_A_FORM'] = true;
  3376.                 $fields['ZZZ_B_SUBMITTED'] = true;
  3377.                 $fields['ZZZ_C_IP'] = true;
  3378.                 $fields['ZZZ_D_BROWSER'] = true;
  3379.                 $fields['ZZZ_E_OPSYS'] = true;
  3380.  
  3381.                 $lines[$lineNum]['ZZZ_A_FORM'][] = $this->form;
  3382.                 $lines[$lineNum]['ZZZ_B_SUBMITTED'][] = $this->submitted;
  3383.                 $lines[$lineNum]['ZZZ_C_IP'][] = $this->ip;
  3384.                 $lines[$lineNum]['ZZZ_D_BROWSER'][] = $this->browser;
  3385.                 $lines[$lineNum]['ZZZ_E_OPSYS'][] = $this->opsys;
  3386.  
  3387.                 $processed = array();
  3388.                 if (count($this->xmldata)){
  3389.                         foreach ($this->xmldata as $data) {
  3390.                             if(!in_array($data[_FF_DATA_NAME],$filter) && !in_array($data[_FF_DATA_NAME],$processed)){
  3391.                                 $fields[strtoupper($data[_FF_DATA_NAME])] = true;
  3392.                                 $lines[$lineNum][strtoupper($data[_FF_DATA_NAME])][] = is_array($data[_FF_DATA_VALUE]) ? implode('|', $data[_FF_DATA_VALUE]) : $data[_FF_DATA_VALUE];
  3393.                                 //$processed[] = $data[_FF_DATA_NAME];
  3394.                             }
  3395.                         } // foreach
  3396.                 }
  3397.  
  3398.                 $head = '';
  3399.                 ksort($fields);
  3400.                 $lineLength = count($lines);
  3401.                 foreach($fields As $fieldName => $null)
  3402.                 {
  3403.                         $head .= $csvquote . $fieldName . $csvquote . $csvdelimiter;
  3404.                 }
  3405.  
  3406.                 $head = substr($head,0,strlen($head)-1) . nl();
  3407.  
  3408.                 $out = '';
  3409.                 for($i = 0; $i < $lineLength;$i++)
  3410.                 {
  3411.                         ksort($lines[$i]);
  3412.                         foreach($lines[$i] As $line){
  3413.                                 $out .= $csvquote.str_replace($csvquote,$csvquote.$csvquote,str_replace("\n",$cellnewline,str_replace("\r","",implode('|',$line)))).$csvquote.$csvdelimiter;
  3414.                         }
  3415.                         $out = substr($out,0,strlen($out)-1);
  3416.                         $out .= nl();
  3417.                 }
  3418.                 mt_srand();
  3419.                 $csvname = JPATH_SITE.'/components/com_breezingforms/exports/ffexport-'.date('YmdHis').'-'.mt_rand(0, mt_getrandmax()).'.csv';
  3420.                 JFile::makeSafe($csvname);
  3421.                 if(function_exists('mb_convert_encoding')){
  3422.                     if (!JFile::write($csvname,chr(255).chr(254).mb_convert_encoding( $head.$out, 'UTF-16LE', 'UTF-8'))) {
  3423.                             $this->status = _FF_STATUS_ATTACHMENT_FAILED;
  3424.                     } // if
  3425.                 }else{
  3426.                     if (!JFile::write($csvname,$head.$out)) {
  3427.                             $this->status = _FF_STATUS_ATTACHMENT_FAILED;
  3428.                     } // if
  3429.                 }
  3430.                 return $csvname;
  3431.         }
  3432.  
  3433.         function expxml($filter = array())
  3434.         {
  3435.                 global $ff_compath, $ff_version, $mosConfig_fileperms;
  3436.  
  3437.                 if ($this->dying) return '';
  3438.                 mt_srand();
  3439.                 $xmlname = $ff_compath.'/exports/ffexport-'.date('YmdHis').'-'.mt_rand(0, mt_getrandmax()).'.xml';
  3440.  
  3441.                 $xml  = '<?xml version="1.0" encoding="utf-8" ?>'.nl().
  3442.                                 '<FacileFormsExport type="records" version="'.$ff_version.'">'.nl().
  3443.                                 indent(1).'<exportdate>'.date('Y-m-d H:i:s').'</exportdate>'.nl();
  3444.                 if ($this->record_id != '')
  3445.                         $xml .= indent(1).'<record id="'.$this->record_id.'">'.nl();
  3446.                 else
  3447.                         $xml .= indent(1).'<record>'.nl();
  3448.                 $xml .= indent(2).'<submitted>'.$this->submitted.'</submitted>'.nl().
  3449.                                 indent(2).'<form>'.$this->form.'</form>'.nl().
  3450.                                 indent(2).'<title>'.htmlspecialchars($this->formrow->title, ENT_QUOTES, 'UTF-8').'</title>'.nl().
  3451.                                 indent(2).'<name>'.$this->formrow->name.'</name>'.nl().
  3452.                                 indent(2).'<ip>'.$this->ip.'</ip>'.nl().
  3453.                                 indent(2).'<browser>'.htmlspecialchars($this->browser, ENT_QUOTES, 'UTF-8').'</browser>'.nl().
  3454.                                 indent(2).'<opsys>'.htmlspecialchars($this->opsys, ENT_QUOTES, 'UTF-8').'</opsys>'.nl().
  3455.                                 indent(2).'<provider>'.$this->provider.'</provider>'.nl().
  3456.                                 indent(2).'<viewed>0</viewed>'.nl().
  3457.                                 indent(2).'<exported>0</exported>'.nl().
  3458.                                 indent(2).'<archived>0</archived>'.nl();
  3459.                 $processed = array();
  3460.                 if (count($this->xmldata)) foreach ($this->xmldata as $data) {
  3461.                         if(!in_array($data[_FF_DATA_NAME], $filter) && !in_array($data[_FF_DATA_NAME], $processed)){
  3462.                             $xml .= indent(2).'<subrecord>'.nl().
  3463.                                     indent(3).'<element>'.$data[_FF_DATA_ID].'</element>'.nl().
  3464.                                     indent(3).'<name>'.$data[_FF_DATA_NAME].'</name>'.nl().
  3465.                                     indent(3).'<title>'.htmlspecialchars($data[_FF_DATA_TITLE], ENT_QUOTES, 'UTF-8').'</title>'.nl().
  3466.                                     indent(3).'<type>'.$data[_FF_DATA_TYPE].'</type>'.nl().
  3467.                                     indent(3).'<value>'.htmlspecialchars(is_array($data[_FF_DATA_VALUE]) ? implode('|', $data[_FF_DATA_VALUE]) : $data[_FF_DATA_VALUE], ENT_QUOTES, 'UTF-8').'</value>'.nl().
  3468.                                     indent(2).'</subrecord>'.nl();
  3469.                             //$processed[] = $data[_FF_DATA_NAME];
  3470.                         }
  3471.                 } // foreach
  3472.                 $xml .= indent(1).'</record>'.nl().
  3473.                                 '</FacileFormsExport>'.nl();
  3474.  
  3475.                 JFile::makeSafe($xmlname);
  3476.                 if (!JFile::write($xmlname,$xml)) {
  3477.                         $this->status = _FF_STATUS_ATTACHMENT_FAILED;
  3478.                 } // if
  3479.  
  3480.                 return $xmlname;
  3481.         } // expxml
  3482.  
  3483.         function sendEmailNotification()
  3484.         {
  3485.                 global $ff_config;
  3486.  
  3487.                 $mainframe = JFactory::getApplication();
  3488.                
  3489.                 if ($this->dying) return;
  3490.                 $from = $this->formrow->alt_mailfrom != '' ? $this->formrow->alt_mailfrom : $mainframe->getCfg('mailfrom');
  3491.                 $fromname = $this->formrow->alt_fromname != '' ? $this->formrow->alt_fromname : $mainframe->getCfg('fromname');
  3492.                 if ($this->formrow->emailntf==2)
  3493.                         $recipient = $this->formrow->emailadr;
  3494.                 else
  3495.                         $recipient = $ff_config->emailadr;
  3496.  
  3497.                 $recipients = explode(';', $recipient);
  3498.                 $recipientsSize = count($recipients);
  3499.  
  3500.                 $subject = BFText::_('COM_BREEZINGFORMS_PROCESS_FORMRECRECEIVED');
  3501.                 if($this->formrow->custom_mail_subject != ''){
  3502.                         $subject = $this->formrow->custom_mail_subject;
  3503.                 }
  3504.                 $body = '';
  3505.                 $isHtml = false;
  3506.  
  3507.                 if($this->formrow->email_type == 0){
  3508.  
  3509.                     $foundTpl = false;
  3510.                     $tplFile = '';
  3511.                     $formTxtFile = JPATH_SITE . '/administrator/components/com_breezingforms/mailtpl/'.$this->formrow->name.'.txt.php';
  3512.                     $formHtmlFile = JPATH_SITE . '/administrator/components/com_breezingforms/mailtpl/'.$this->formrow->name.'.html.php';
  3513.                     $defaultTxtFile = JPATH_SITE . '/administrator/components/com_breezingforms/mailtpl/mailtpl.txt.php';
  3514.                     $defaultHtmlFile = JPATH_SITE . '/administrator/components/com_breezingforms/mailtpl/mailtpl.html.php';
  3515.  
  3516.                     if(@file_exists( $formHtmlFile ) && @is_readable( $formHtmlFile )){
  3517.                             $tplFile = $formHtmlFile;
  3518.                             $foundTpl = true;
  3519.                             $isHtml = true;
  3520.                     } else if(@file_exists( $formTxtFile ) && @is_readable( $formTxtFile )){
  3521.                             $tplFile = $formTxtFile;
  3522.                             $foundTpl = true;
  3523.                     } else if(@file_exists( $defaultHtmlFile ) && @is_readable( $defaultHtmlFile )){
  3524.                             $tplFile = $defaultHtmlFile;
  3525.                             $foundTpl = true;
  3526.                             $isHtml = true;
  3527.                     } else if(@file_exists( $defaultTxtFile ) && @is_readable( $defaultTxtFile )){
  3528.                             $tplFile = $defaultTxtFile;
  3529.                             $foundTpl = true;
  3530.                     }
  3531.  
  3532.                     if($foundTpl){
  3533.  
  3534.                             $NL = nl();
  3535.  
  3536.                             $PROCESS_RECORDSAVEDID = '';
  3537.                             $RECORD_ID = '';
  3538.  
  3539.                             if ($this->record_id != ''){
  3540.                                     $PROCESS_RECORDSAVEDID = BFText::_('COM_BREEZINGFORMS_PROCESS_RECORDSAVEDID');
  3541.                                     $RECORD_ID = $this->record_id;
  3542.                             }
  3543.  
  3544.                             $PROCESS_FORMID = BFText::_('COM_BREEZINGFORMS_PROCESS_FORMID');
  3545.                             $FORM = $this->form;
  3546.  
  3547.                             $PROCESS_FORMTITLE = BFText::_('COM_BREEZINGFORMS_PROCESS_FORMTITLE');
  3548.                             $TITLE = $this->formrow->title;
  3549.  
  3550.                             $PROCESS_FORMNAME = BFText::_('COM_BREEZINGFORMS_PROCESS_FORMNAME');
  3551.                             $NAME = $this->formrow->name;
  3552.  
  3553.                             $PROCESS_SUBMITTEDAT = BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTEDAT');
  3554.                             $SUBMITTED = $this->submitted;
  3555.  
  3556.                             $PROCESS_SUBMITTERIP = BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERIP');
  3557.                             $IP = $this->ip;
  3558.  
  3559.                             $PROCESS_PROVIDER = BFText::_('COM_BREEZINGFORMS_PROCESS_PROVIDER');
  3560.                             $PROVIDER = $this->provider;
  3561.  
  3562.                             $PROCESS_BROWSER = BFText::_('COM_BREEZINGFORMS_PROCESS_BROWSER');
  3563.                             $BROWSER = $this->browser;
  3564.  
  3565.                             $PROCESS_OPSYS = BFText::_('COM_BREEZINGFORMS_PROCESS_OPSYS');
  3566.                             $OPSYS = $this->opsys;
  3567.  
  3568.                             $PROCESS_SUBMITTERID = BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERID');
  3569.                             $SUBMITTERID = 0;
  3570.  
  3571.                             $PROCESS_SUBMITTERUSERNAME = BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERUSERNAME');
  3572.                             $SUBMITTERUSERNAME = '-';
  3573.  
  3574.                             $PROCESS_SUBMITTERFULLNAME = BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERFULLNAME');
  3575.                             $SUBMITTERFULLNAME = '-';
  3576.  
  3577.                             if(JFactory::getUser()->get('id', 0) > 0){
  3578.                                     $SUBMITTERID    = JFactory::getUser()->get('id', 0);
  3579.                                     $SUBMITTERUSERNAME  = JFactory::getUser()->get('username', '');
  3580.                                     $SUBMITTERFULLNAME = JFactory::getUser()->get('name', '');
  3581.                             }
  3582.  
  3583.                             $MAILDATA = array();
  3584.                             if (count($this->maildata)) {
  3585.                                     foreach ($this->maildata as $DATA){
  3586.                                         $subject = str_replace('{'.$DATA[_FF_DATA_NAME].':label}',$DATA[_FF_DATA_TITLE], $subject);
  3587.                                         $subject = str_replace('{'.$DATA[_FF_DATA_NAME].':title}',$DATA[_FF_DATA_TITLE], $subject);
  3588.                                         $subject = str_replace('{'.$DATA[_FF_DATA_NAME].':value}',$DATA[_FF_DATA_VALUE], $subject);
  3589.                                         $subject = str_replace('{'.$DATA[_FF_DATA_NAME].'}',$DATA[_FF_DATA_VALUE], $subject);
  3590.                                         $MAILDATA[] = $DATA;
  3591.                                     }
  3592.                             }
  3593.  
  3594.                         ob_start();
  3595.                         include($tplFile);
  3596.                         $body = ob_get_contents();
  3597.                         ob_end_clean();
  3598.  
  3599.  
  3600.                     } else {
  3601.                             // fallback if no template exists
  3602.  
  3603.                             if ($this->record_id != '')
  3604.                                     $body .= BFText::_('COM_BREEZINGFORMS_PROCESS_RECORDSAVEDID')." ".$this->record_id.nl().nl();
  3605.                             $body .=
  3606.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_FORMID').": ".$this->form.nl().
  3607.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_FORMTITLE').": ".$this->formrow->title.nl().
  3608.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_FORMNAME').": ".$this->formrow->name.nl().nl().
  3609.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTEDAT').": ".$this->submitted.nl().
  3610.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERIP').": ".$this->ip.nl().
  3611.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERID').": ".JFactory::getUser()->get('id', 0).nl().
  3612.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERUSERNAME').": ".JFactory::getUser()->get('username', '').nl().
  3613.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERFULLNAME').": ".JFactory::getUser()->get('name', '').nl().
  3614.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_PROVIDER').": ".$this->provider.nl().
  3615.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_BROWSER').": ".$this->browser.nl().
  3616.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_OPSYS').": ".$this->opsys.nl().nl();
  3617.                                     if (count($this->maildata)) {
  3618.                                             foreach ($this->maildata as $data){
  3619.                                                 $subject = str_replace('{'.$data[_FF_DATA_NAME].':label}',$data[_FF_DATA_TITLE], $subject);
  3620.                                                 $subject = str_replace('{'.$data[_FF_DATA_NAME].':title}',$data[_FF_DATA_TITLE], $subject);
  3621.                                                 $subject = str_replace('{'.$data[_FF_DATA_NAME].':value}',$data[_FF_DATA_VALUE], $subject);
  3622.                                                 $subject = str_replace('{'.$data[_FF_DATA_NAME].'}',$data[_FF_DATA_VALUE], $subject);
  3623.                                                 $body .= $data[_FF_DATA_TITLE].": ".$data[_FF_DATA_VALUE].nl();
  3624.                                             }
  3625.                                     }
  3626.                     }
  3627.  
  3628.                 } else {
  3629.  
  3630.                     $body = $this->formrow->email_custom_template;
  3631.  
  3632.                     $RECORD_ID = '';
  3633.                     if ($this->record_id != '') {
  3634.                         $RECORD_ID = $this->record_id;
  3635.                     }
  3636.  
  3637.                     $FORM = $this->form;
  3638.                     $TITLE = $this->formrow->title;
  3639.                     $FORMNAME = $this->formrow->name;
  3640.                     $SUBMITTED = $this->submitted;
  3641.                     $IP = $this->ip;
  3642.                     $PROVIDER = $this->provider;
  3643.                     $BROWSER = $this->browser;
  3644.                     $OPSYS = $this->opsys;
  3645.                     $SUBMITTERID = 0;
  3646.                     $SUBMITTERUSERNAME = '-';
  3647.                     $SUBMITTERFULLNAME = '-';
  3648.                     if (JFactory::getUser()->get('id', 0) > 0) {
  3649.                         $SUBMITTERID = JFactory::getUser()->get('id', 0);
  3650.                         $SUBMITTERUSERNAME = JFactory::getUser()->get('username', '');
  3651.                         $SUBMITTERFULLNAME = JFactory::getUser()->get('name', '');
  3652.                     }
  3653.  
  3654.                     $body = str_replace('{BF_RECORD_ID:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_RECORDSAVEDID'), $body);
  3655.                     $body = str_replace('{BF_RECORD_ID:value}',$RECORD_ID, $body);
  3656.  
  3657.                     $body = str_replace('{BF_FORM:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_FORMID'), $body);
  3658.                     $body = str_replace('{BF_FORM:value}',$FORM, $body);
  3659.  
  3660.                     $body = str_replace('{BF_TITLE:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_FORMTITLE'), $body);
  3661.                     $body = str_replace('{BF_TITLE:value}',$TITLE, $body);
  3662.  
  3663.                     $body = str_replace('{BF_FORMNAME:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_FORMNAME'), $body);
  3664.                     $body = str_replace('{BF_FORMNAME:value}',$FORMNAME, $body);
  3665.  
  3666.                     $body = str_replace('{BF_SUBMITTED:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTEDAT'), $body);
  3667.                     $body = str_replace('{BF_SUBMITTED:value}',$SUBMITTED, $body);
  3668.  
  3669.                     $body = str_replace('{BF_IP:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERIP'), $body);
  3670.                     $body = str_replace('{BF_IP:value}',$IP, $body);
  3671.  
  3672.                     $body = str_replace('{BF_PROVIDER:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_PROVIDER'), $body);
  3673.                     $body = str_replace('{BF_PROVIDER:value}',$PROVIDER, $body);
  3674.  
  3675.                     $body = str_replace('{BF_BROWSER:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_BROWSER'), $body);
  3676.                     $body = str_replace('{BF_BROWSER:value}',$BROWSER, $body);
  3677.  
  3678.                     $body = str_replace('{BF_OPSYS:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_OPSYS'), $body);
  3679.                     $body = str_replace('{BF_OPSYS:value}',$OPSYS, $body);
  3680.  
  3681.                     $body = str_replace('{BF_SUBMITTERID:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERID'), $body);
  3682.                     $body = str_replace('{BF_SUBMITTERID:value}',$SUBMITTERID, $body);
  3683.  
  3684.                     $body = str_replace('{BF_SUBMITTERUSERNAME:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERUSERNAME'), $body);
  3685.                     $body = str_replace('{BF_SUBMITTERUSERNAME:value}',$SUBMITTERUSERNAME, $body);
  3686.  
  3687.                     $body = str_replace('{BF_SUBMITTERFULLNAME:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERFULLNAME'), $body);
  3688.                     $body = str_replace('{BF_SUBMITTERFULLNAME:value}',$SUBMITTERFULLNAME, $body);
  3689.  
  3690.                     if (count($this->maildata)) {
  3691.                         foreach ($this->maildata as $data) {
  3692.                             $body = str_replace('{'.$data[_FF_DATA_NAME].':label}',$data[_FF_DATA_TITLE], $body);
  3693.                             $body = str_replace('{'.$data[_FF_DATA_NAME].':value}',$data[_FF_DATA_VALUE], $body);
  3694.                         }
  3695.                     }
  3696.  
  3697.                     $body = preg_replace("/{([a-zA-Z0-9_\-])*:(label|value)}/",'',$body);
  3698.  
  3699.                     if($this->formrow->email_custom_html){
  3700.                         $isHtml = true;
  3701.                     }
  3702.                 }
  3703.  
  3704.                 $attachment = NULL;
  3705.                 if ($this->formrow->emailxml > 0 && $this->formrow->emailxml < 3) {
  3706.                         $attachment = $this->expxml();
  3707.                         if ($this->status != _FF_STATUS_OK) return;
  3708.                 }
  3709.                 else if ($this->formrow->emailxml == 3) {
  3710.                         $attachment = $this->expcsv();
  3711.                         if ($this->status != _FF_STATUS_OK) return;
  3712.                 }
  3713.                 else if ($this->formrow->emailxml == 4) {
  3714.                         $attachment = $this->exppdf();
  3715.                         if ($this->status != _FF_STATUS_OK) return;
  3716.                 }
  3717.  
  3718.                 $sender = JRequest::getVar('mailbackSender', array());
  3719.                 for($i = 0; $i < $this->rowcount; $i++) {
  3720.                         $row = $this->rows[$i];
  3721.                         $mb = JRequest::getVar('ff_nm_' . $row->name,'');
  3722.                         //if ($row->mailback==1) {
  3723.                                 $mbCnt = count($mb);
  3724.                                 for($x = 0;$x < $mbCnt;$x++){
  3725.                                         if(isset($mb[$x]) && trim($mb[$x]) != '' && bf_is_email(trim($mb[$x]))){
  3726.                                                 if(isset($sender[$row->name])){
  3727.                                                         $from     = trim($mb[$x]);
  3728.                                                         $fromname = trim($mb[$x]);
  3729.                                                         break;
  3730.                                                 }
  3731.                                         }
  3732.                                 }
  3733.                         //}
  3734.                 }
  3735.  
  3736.                 $attachToAdminMail = JRequest::getVar('attachToAdminMail', array());
  3737.                 if (count($this->maildata)){
  3738.                         foreach ($this->maildata as $data){
  3739.                                 if( isset($attachToAdminMail[$data[_FF_DATA_NAME]]) ){
  3740.                                     if(isset($data[_FF_DATA_FILE_SERVERPATH])){
  3741.                                         $testEx = explode("\n", trim($data[_FF_DATA_FILE_SERVERPATH]));
  3742.                                         $cntTestEx = count($testEx);
  3743.                                         if($cntTestEx > 1){
  3744.                                                 for($ex = 0; $ex < $cntTestEx; $ex++){
  3745.                                                         if(!is_array($attachment) && $attachment != ''){
  3746.                                                                 $attachment = array_merge(array(trim($testEx[$ex])), array($attachment));
  3747.                                                         } else if(is_array($attachment)){
  3748.                                                                 $attachment = array_merge(array(trim($testEx[$ex])), $attachment);
  3749.                                                         }else {
  3750.                                                                 $attachment = trim($testEx[$ex]);
  3751.                                                         }
  3752.                                                 }
  3753.                                         } else {
  3754.                                                 if(!is_array($attachment) && $attachment != ''){
  3755.                                                         $attachment = array_merge(array(trim($data[_FF_DATA_FILE_SERVERPATH])), array($attachment));
  3756.                                                 } else if(is_array($attachment)){
  3757.                                                         $attachment = array_merge(array(trim($data[_FF_DATA_FILE_SERVERPATH])), $attachment);
  3758.                                                 }else {
  3759.                                                         $attachment = trim($data[_FF_DATA_FILE_SERVERPATH]);
  3760.                                                 }
  3761.                                         }
  3762.                                     }
  3763.                                 }
  3764.                         }
  3765.                 }
  3766.  
  3767.                 if(!$this->sendNotificationAfterPayment){
  3768.                         for($i = 0; $i < $recipientsSize;$i++){
  3769.                                 $this->sendMail($from, $fromname, $recipients[$i], $subject, $body, $attachment, $isHtml);
  3770.                         }
  3771.                 } else {
  3772.  
  3773.                         $paymentCache = JPATH_SITE . '/administrator/components/com_breezingforms/payment_cache/';
  3774.                         mt_srand();
  3775.                         $paymentFile = $this->form . '_' . $this->record_id . '_admin_' . md5( date('YmdHis') . mt_rand(0, mt_getrandmax()) ).'.txt';
  3776.                         $i = 0;
  3777.                         while(JFile::exists($paymentCache.$paymentFile)){
  3778.                             if($i > 1000){
  3779.                                 break;
  3780.                             }
  3781.                             mt_srand();
  3782.                             $paymentFile = $this->form . '_' . $this->record_id . '_admin_' . md5( date('YmdHis') . mt_rand(0, mt_getrandmax()) ).'.txt';
  3783.                             $i++;
  3784.                         }
  3785.  
  3786.                         if(!JFile::exists($paymentCache.$paymentFile)){
  3787.                             JFile::write($paymentCache.$paymentFile, serialize(array(
  3788.                                         'from' => $from,
  3789.                                         'fromname' => $fromname,
  3790.                                         'recipients' => $recipients,
  3791.                                         'subject' => $subject,
  3792.                                         'body' => $body,
  3793.                                         'attachment' => $attachment,
  3794.                                         'isHtml' => $isHtml
  3795.                                 )));
  3796.                         }
  3797.                 }
  3798.         } // sendEmailNotification
  3799.  
  3800.         function sendMailbackNotification()
  3801.         {
  3802.                 global $ff_config;
  3803.  
  3804.                 $mainframe = JFactory::getApplication();
  3805.                
  3806.                 if ($this->dying) return;
  3807.                 $from = $this->formrow->mb_alt_mailfrom != '' ? $this->formrow->mb_alt_mailfrom : $mainframe->getCfg('mailfrom');
  3808.                 $fromname = $this->formrow->mb_alt_fromname != '' ? $this->formrow->mb_alt_fromname : $mainframe->getCfg('fromname');
  3809.                 $customSender = false;
  3810.  
  3811.                 $accept = JRequest::getVar('mailbackConnectWith', array());
  3812.                 $sender = JRequest::getVar('mailbackSender', array());
  3813.                 $attachToUserMail = JRequest::getVar('attachToUserMail', array());
  3814.  
  3815.                 $mailbackfiles = array();
  3816.                 $recipients = array();
  3817.                 for($i = 0; $i < $this->rowcount; $i++) {
  3818.                         $row = $this->rows[$i];
  3819.                         $mb = JRequest::getVar('ff_nm_' . $row->name,'');
  3820.                         if ($row->mailback==1) {
  3821.                                 $mbCnt = count($mb);
  3822.                                 for($x = 0;$x < $mbCnt;$x++){
  3823.                                         if(isset($mb[$x]) && trim($mb[$x]) != '' && bf_is_email(trim($mb[$x]))){
  3824.                                                 $yesno = array('false', '');
  3825.                                                 $checked = array('');
  3826.                                                 if(isset($accept[$row->name])){
  3827.                                                         $yesno = explode('_', $accept[$row->name]);
  3828.                                                         $checked = JRequest::getVar('ff_nm_'.$yesno[1], '');
  3829.                                                 }
  3830.                                                 if(isset($sender[$row->name]) && !$customSender){
  3831.                                                         $from     = trim($mb[$x]);
  3832.                                                         $fromname = trim($mb[$x]);
  3833.                                                         $customSender = true;
  3834.                                                 }
  3835.                                                 if(!isset($accept[$row->name]) || ( isset($accept[$row->name]) && $yesno[0] == 'true' && $checked[0] != '' ) ){
  3836.                                                         $recipients[] = trim($mb[$x]);
  3837.                                                         if(!isset($mailbackfiles[trim($mb[$x])])) $mailbackfiles[trim($mb[$x])] = array();
  3838.                                                         if (count($this->maildata)){
  3839.                                                                 foreach ($this->maildata as $data){
  3840.                                                                         if(isset($data[_FF_DATA_FILE_SERVERPATH])){
  3841.                                                                             if( isset($attachToUserMail[$data[_FF_DATA_NAME]]) ){
  3842.                                                                                     $testEx = explode("\n", trim($data[_FF_DATA_FILE_SERVERPATH]));
  3843.                                                                                     $cntTestEx = count($testEx);
  3844.                                                                                     if($cntTestEx > 1){
  3845.                                                                                             for($ex = 0; $ex < $cntTestEx; $ex++){
  3846.                                                                                                     $mailbackfiles[trim($mb[$x])][] = trim($testEx[$ex]);
  3847.                                                                                             }
  3848.                                                                                     } else {
  3849.                                                                                             $mailbackfiles[trim($mb[$x])][] = trim($data[_FF_DATA_FILE_SERVERPATH]);
  3850.                                                                                     }
  3851.                                                                             }
  3852.                                                                         }
  3853.                                                                 }
  3854.                                                         }
  3855.                                                         if(trim($row->mailbackfile) != '' && file_exists(trim($row->mailbackfile))){
  3856.                                                                 $mailbackfiles[trim($mb[$x])][] = trim($row->mailbackfile);
  3857.                                                         }
  3858.                                                 }
  3859.                                         }
  3860.                                 }
  3861.                         }
  3862.                 }
  3863.                
  3864.                 $recipientsSize = count($recipients);
  3865.  
  3866.                 $subject = BFText::_('COM_BREEZINGFORMS_PROCESS_FORMRECRECEIVED');
  3867.                 if($this->formrow->mb_custom_mail_subject != ''){
  3868.                         $subject = $this->formrow->mb_custom_mail_subject;
  3869.                 }
  3870.  
  3871.                 $body = '';
  3872.                 $isHtml = false;
  3873.                 $filter = array();
  3874.  
  3875.                 require_once(JPATH_SITE.'/administrator/components/com_breezingforms/libraries/Zend/Json/Decoder.php');
  3876.                     require_once(JPATH_SITE.'/administrator/components/com_breezingforms/libraries/Zend/Json/Encoder.php');
  3877.                     $areas = Zend_Json::decode($this->formrow->template_areas);
  3878.                     if(trim($this->formrow->template_code_processed) == 'QuickMode' && is_array($areas)) {
  3879.                         foreach($areas As $area) { // don't worry, size is only 1 in QM
  3880.                             if(isset($area['elements'])) {
  3881.                                 foreach($area['elements'] As $element) {
  3882.                                     if(isset($element['hideInMailback']) && $element['hideInMailback'] && isset($element['name']) ) {
  3883.                                         $filter[] = $element['name'];
  3884.                                     }
  3885.                                 }
  3886.                             }
  3887.                             break; // just in case
  3888.                         }
  3889.                     }
  3890.  
  3891.                 if($this->formrow->mb_email_type == 0){
  3892.  
  3893.                     $foundTpl = false;
  3894.                     $tplFile = '';
  3895.                     $formTxtFile = JPATH_SITE . '/administrator/components/com_breezingforms/mailtpl/'.$this->formrow->name.'_mailback.txt.php';
  3896.                     $formHtmlFile = JPATH_SITE . '/administrator/components/com_breezingforms/mailtpl/'.$this->formrow->name.'_mailback.html.php';
  3897.                     $defaultTxtFile = JPATH_SITE . '/administrator/components/com_breezingforms/mailtpl/mailbacktpl.txt.php';
  3898.                     $defaultHtmlFile = JPATH_SITE . '/administrator/components/com_breezingforms/mailtpl/mailbacktpl.html.php';
  3899.  
  3900.                     if(@file_exists( $formHtmlFile ) && @is_readable( $formHtmlFile )){
  3901.                             $tplFile = $formHtmlFile;
  3902.                             $foundTpl = true;
  3903.                             $isHtml = true;
  3904.                     } else if(@file_exists( $formTxtFile ) && @is_readable( $formTxtFile )){
  3905.                             $tplFile = $formTxtFile;
  3906.                             $foundTpl = true;
  3907.                     } else if(@file_exists( $defaultHtmlFile ) && @is_readable( $defaultHtmlFile )){
  3908.                             $tplFile = $defaultHtmlFile;
  3909.                             $foundTpl = true;
  3910.                             $isHtml = true;
  3911.                     } else if(@file_exists( $defaultTxtFile ) && @is_readable( $defaultTxtFile )){
  3912.                             $tplFile = $defaultTxtFile;
  3913.                             $foundTpl = true;
  3914.                     }
  3915.  
  3916.                     if($foundTpl){
  3917.  
  3918.                             $NL = nl();
  3919.  
  3920.                             $PROCESS_RECORDSAVEDID = '';
  3921.                             $RECORD_ID = '';
  3922.  
  3923.                             if ($this->record_id != ''){
  3924.                                     $PROCESS_RECORDSAVEDID = BFText::_('COM_BREEZINGFORMS_PROCESS_RECORDSAVEDID');
  3925.                                     $RECORD_ID = $this->record_id;
  3926.                             }
  3927.  
  3928.                             $PROCESS_FORMID = BFText::_('COM_BREEZINGFORMS_PROCESS_FORMID');
  3929.                             $FORM = $this->form;
  3930.  
  3931.                             $PROCESS_FORMTITLE = BFText::_('COM_BREEZINGFORMS_PROCESS_FORMTITLE');
  3932.                             $TITLE = $this->formrow->title;
  3933.  
  3934.                             $PROCESS_FORMNAME = BFText::_('COM_BREEZINGFORMS_PROCESS_FORMNAME');
  3935.                             $NAME = $this->formrow->name;
  3936.  
  3937.                             $PROCESS_SUBMITTEDAT = BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTEDAT');
  3938.                             $SUBMITTED = $this->submitted;
  3939.  
  3940.                             $PROCESS_SUBMITTERIP = BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERIP');
  3941.                             $IP = $this->ip;
  3942.  
  3943.                             $PROCESS_PROVIDER = BFText::_('COM_BREEZINGFORMS_PROCESS_PROVIDER');
  3944.                             $PROVIDER = $this->provider;
  3945.  
  3946.                             $PROCESS_BROWSER = BFText::_('COM_BREEZINGFORMS_PROCESS_BROWSER');
  3947.                             $BROWSER = $this->browser;
  3948.  
  3949.                             $PROCESS_OPSYS = BFText::_('COM_BREEZINGFORMS_PROCESS_OPSYS');
  3950.                             $OPSYS = $this->opsys;
  3951.  
  3952.                             $PROCESS_SUBMITTERID = BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERID');
  3953.                             $SUBMITTERID = 0;
  3954.  
  3955.                             $PROCESS_SUBMITTERUSERNAME = BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERUSERNAME');
  3956.                             $SUBMITTERUSERNAME = '-';
  3957.  
  3958.                             $PROCESS_SUBMITTERFULLNAME = BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERFULLNAME');
  3959.                             $SUBMITTERFULLNAME = '-';
  3960.  
  3961.                             if(JFactory::getUser()->get('id', 0) > 0){
  3962.                                     $SUBMITTERID    = JFactory::getUser()->get('id', 0);
  3963.                                     $SUBMITTERUSERNAME  = JFactory::getUser()->get('username', '');
  3964.                                     $SUBMITTERFULLNAME = JFactory::getUser()->get('name', '');
  3965.                             }
  3966.  
  3967.                             $MAILDATA = array();
  3968.                             if (count($this->maildata))
  3969.                             {
  3970.                                     foreach ($this->maildata as $DATA){
  3971.                                         $subject = str_replace('{'.$DATA[_FF_DATA_NAME].':label}',$DATA[_FF_DATA_TITLE], $subject);
  3972.                                         $subject = str_replace('{'.$DATA[_FF_DATA_NAME].':title}',$DATA[_FF_DATA_TITLE], $subject);
  3973.                                         $subject = str_replace('{'.$DATA[_FF_DATA_NAME].':value}',$DATA[_FF_DATA_VALUE], $subject);
  3974.                                         $subject = str_replace('{'.$DATA[_FF_DATA_NAME].'}',$DATA[_FF_DATA_VALUE], $subject);
  3975.                                         if(!in_array($DATA[_FF_DATA_NAME], $filter)){
  3976.                                             $MAILDATA[] = $DATA;
  3977.                                         }
  3978.                                     }
  3979.                             }
  3980.  
  3981.                             ob_start();
  3982.                             include($tplFile);
  3983.                             $body = ob_get_contents();
  3984.                             ob_end_clean();
  3985.  
  3986.  
  3987.                     } else {
  3988.                             // fallback if no template exists
  3989.  
  3990.                             if ($this->record_id != '')
  3991.                                     $body .= BFText::_('COM_BREEZINGFORMS_PROCESS_RECORDSAVEDID')." ".$this->record_id.nl().nl();
  3992.                             $body .=
  3993.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_FORMID').": ".$this->form.nl().
  3994.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_FORMTITLE').": ".$this->formrow->title.nl().
  3995.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_FORMNAME').": ".$this->formrow->name.nl().nl().
  3996.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTEDAT').": ".$this->submitted.nl().
  3997.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERIP').": ".$this->ip.nl().
  3998.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERID').": ".JFactory::getUser()->get('id', 0).nl().
  3999.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERUSERNAME').": ".JFactory::getUser()->get('username', '').nl().
  4000.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERFULLNAME').": ".JFactory::getUser()->get('name', '').nl().
  4001.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_PROVIDER').": ".$this->provider.nl().
  4002.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_BROWSER').": ".$this->browser.nl().
  4003.                                     BFText::_('COM_BREEZINGFORMS_PROCESS_OPSYS').": ".$this->opsys.nl().nl();
  4004.                                     if (count($this->maildata))
  4005.                                     {
  4006.                                         foreach ($this->maildata as $data) {
  4007.                                             $subject = str_replace('{'.$data[_FF_DATA_NAME].':label}',$data[_FF_DATA_TITLE], $subject);
  4008.                                             $subject = str_replace('{'.$data[_FF_DATA_NAME].':title}',$data[_FF_DATA_TITLE], $subject);
  4009.                                             $subject = str_replace('{'.$data[_FF_DATA_NAME].':value}',$data[_FF_DATA_VALUE], $subject);
  4010.                                             $subject = str_replace('{'.$data[_FF_DATA_NAME].'}',$data[_FF_DATA_VALUE], $subject);
  4011.                                             if(!in_array($data[_FF_DATA_NAME], $filter)) {
  4012.                                                 $body .= $data[_FF_DATA_TITLE].": ".$data[_FF_DATA_VALUE].nl();
  4013.                                             }
  4014.                                         }
  4015.                                     }
  4016.                     }
  4017.  
  4018.                 } else {
  4019.  
  4020.                     $body = $this->formrow->mb_email_custom_template;
  4021.  
  4022.                     $RECORD_ID = '';
  4023.                     if ($this->record_id != '') {
  4024.                         $RECORD_ID = $this->record_id;
  4025.                     }
  4026.  
  4027.                     $FORM = $this->form;
  4028.                     $TITLE = $this->formrow->title;
  4029.                     $FORMNAME = $this->formrow->name;
  4030.                     $SUBMITTED = $this->submitted;
  4031.                     $IP = $this->ip;
  4032.                     $PROVIDER = $this->provider;
  4033.                     $BROWSER = $this->browser;
  4034.                     $OPSYS = $this->opsys;
  4035.                     $SUBMITTERID = 0;
  4036.                     $SUBMITTERUSERNAME = '-';
  4037.                     $SUBMITTERFULLNAME = '-';
  4038.                     if (JFactory::getUser()->get('id', 0) > 0) {
  4039.                         $SUBMITTERID = JFactory::getUser()->get('id', 0);
  4040.                         $SUBMITTERUSERNAME = JFactory::getUser()->get('username', '');
  4041.                         $SUBMITTERFULLNAME = JFactory::getUser()->get('name', '');
  4042.                     }
  4043.  
  4044.                     $body = str_replace('{BF_RECORD_ID:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_RECORDSAVEDID'), $body);
  4045.                     $body = str_replace('{BF_RECORD_ID:value}',$RECORD_ID, $body);
  4046.  
  4047.                     $body = str_replace('{BF_FORM:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_FORMID'), $body);
  4048.                     $body = str_replace('{BF_FORM:value}',$FORM, $body);
  4049.  
  4050.                     $body = str_replace('{BF_TITLE:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_FORMTITLE'), $body);
  4051.                     $body = str_replace('{BF_TITLE:value}',$TITLE, $body);
  4052.  
  4053.                     $body = str_replace('{BF_FORMNAME:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_FORMNAME'), $body);
  4054.                     $body = str_replace('{BF_FORMNAME:value}',$FORMNAME, $body);
  4055.  
  4056.                     $body = str_replace('{BF_SUBMITTED:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTEDAT'), $body);
  4057.                     $body = str_replace('{BF_SUBMITTED:value}',$SUBMITTED, $body);
  4058.  
  4059.                     $body = str_replace('{BF_IP:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERIP'), $body);
  4060.                     $body = str_replace('{BF_IP:value}',$IP, $body);
  4061.  
  4062.                     $body = str_replace('{BF_PROVIDER:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_PROVIDER'), $body);
  4063.                     $body = str_replace('{BF_PROVIDER:value}',$PROVIDER, $body);
  4064.  
  4065.                     $body = str_replace('{BF_BROWSER:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_BROWSER'), $body);
  4066.                     $body = str_replace('{BF_BROWSER:value}',$BROWSER, $body);
  4067.  
  4068.                     $body = str_replace('{BF_OPSYS:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_OPSYS'), $body);
  4069.                     $body = str_replace('{BF_OPSYS:value}',$OPSYS, $body);
  4070.  
  4071.                     $body = str_replace('{BF_SUBMITTERID:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERID'), $body);
  4072.                     $body = str_replace('{BF_SUBMITTERID:value}',$SUBMITTERID, $body);
  4073.  
  4074.                     $body = str_replace('{BF_SUBMITTERUSERNAME:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERUSERNAME'), $body);
  4075.                     $body = str_replace('{BF_SUBMITTERUSERNAME:value}',$SUBMITTERUSERNAME, $body);
  4076.  
  4077.                     $body = str_replace('{BF_SUBMITTERFULLNAME:label}',BFText::_('COM_BREEZINGFORMS_PROCESS_SUBMITTERFULLNAME'), $body);
  4078.                     $body = str_replace('{BF_SUBMITTERFULLNAME:value}',$SUBMITTERFULLNAME, $body);
  4079.  
  4080.                     if (count($this->maildata)) {
  4081.                         foreach ($this->maildata as $data) {
  4082.                             if(!in_array($data[_FF_DATA_NAME], $filter)) {
  4083.                                 $body = str_replace('{'.$data[_FF_DATA_NAME].':label}',$data[_FF_DATA_TITLE], $body);
  4084.                                 $body = str_replace('{'.$data[_FF_DATA_NAME].':value}',$data[_FF_DATA_VALUE], $body);
  4085.                             }else{
  4086.                                 $body = str_replace('{'.$data[_FF_DATA_NAME].':label}','', $body);
  4087.                                 $body = str_replace('{'.$data[_FF_DATA_NAME].':value}','', $body);
  4088.                             }
  4089.                         }
  4090.                     }
  4091.  
  4092.                     $body = preg_replace("/{([a-zA-Z0-9_\-])*:(label|value)}/",'',$body);
  4093.  
  4094.                     if($this->formrow->mb_email_custom_html){
  4095.                         $isHtml = true;
  4096.                     }
  4097.                 }
  4098.  
  4099.                 $attachment = NULL;
  4100.                 if ($this->formrow->mb_emailxml > 0 && $this->formrow->mb_emailxml < 3) {
  4101.                         $attachment = $this->expxml($filter);
  4102.                         if ($this->status != _FF_STATUS_OK) return;
  4103.                 }
  4104.                 else if ($this->formrow->mb_emailxml == 3) {
  4105.                         $attachment = $this->expcsv($filter);
  4106.                         if ($this->status != _FF_STATUS_OK) return;
  4107.                 }
  4108.                 else if ($this->formrow->mb_emailxml == 4) {
  4109.                         $attachment = $this->exppdf($filter, true);
  4110.                         if ($this->status != _FF_STATUS_OK) return;
  4111.                 }
  4112.  
  4113.                 if(!$this->sendNotificationAfterPayment){
  4114.                         for($i = 0; $i < $recipientsSize;$i++){
  4115.                                 if(isset($mailbackfiles[$recipients[$i]])){
  4116.                                         if(!is_array($attachment) && $attachment != ''){
  4117.                                                 $attachment = array_merge($mailbackfiles[$recipients[$i]], array($attachment));
  4118.                                         } else if(is_array($attachment)){
  4119.                                                 $attachment = array_merge($mailbackfiles[$recipients[$i]], $attachment);
  4120.                                         }else {
  4121.                                                 $attachment = $mailbackfiles[$recipients[$i]];
  4122.                                         }
  4123.                                 }
  4124.                                 $this->sendMail($from, $fromname, $recipients[$i], $subject, $body, $attachment, $isHtml);
  4125.                         }
  4126.                 } else {
  4127.  
  4128.                         $paymentCache = JPATH_SITE . '/administrator/components/com_breezingforms/payment_cache/';
  4129.                         mt_srand();
  4130.                         $paymentFile = $this->form . '_' . $this->record_id . '_mailback_' . md5( date('YmdHis') . mt_rand(0, mt_getrandmax()) ).'.txt';
  4131.                         $i = 0;
  4132.                         while(JFile::exists($paymentCache.$paymentFile)){
  4133.                             if($i > 1000){
  4134.                                 break;
  4135.                             }
  4136.                             mt_srand();
  4137.                             $paymentFile = $this->form . '_' . $this->record_id . '_mailback_' . md5( date('YmdHis') . mt_rand(0, mt_getrandmax()) ).'.txt';
  4138.                             $i++;
  4139.                         }
  4140.  
  4141.                         if(!JFile::exists($paymentCache.$paymentFile)){
  4142.                             JFile::write($paymentCache.$paymentFile, serialize(array(
  4143.                                         'from' => $from,
  4144.                                         'fromname' => $fromname,
  4145.                                         'recipients' => $recipients,
  4146.                                         'subject' => $subject,
  4147.                                         'body' => $body,
  4148.                                         'attachment' => $attachment,
  4149.                                         'isHtml' => $isHtml
  4150.                                 )));
  4151.                         }
  4152.                 }
  4153.  
  4154.                 $this->mailbackRecipients = $recipients;
  4155.  
  4156.         } // sendMailbackNotification
  4157.  
  4158.         function sendMailChimpNotification(){
  4159.             $mainframe = JFactory::getApplication();
  4160.  
  4161.             // listSubscribe(string apikey, string id, string email_address, array merge_vars, string email_type, boolean double_optin, boolean update_existing, boolean replace_interests, boolean send_welcome)
  4162.  
  4163.             if(!class_exists('MCAPI')){
  4164.                 require_once(JPATH_SITE . '/administrator/components/com_breezingforms/libraries/mailchimp/MCAPI.class.php');
  4165.             }
  4166.  
  4167.             if(trim($this->formrow->mailchimp_email_field) != '' && trim($this->formrow->mailchimp_api_key) != '' && trim($this->formrow->mailchimp_list_id) != '' && count($this->maildata)){
  4168.  
  4169.                 $email = '';
  4170.                 $htmlTextMobile = 'text';
  4171.                 $checked = true;
  4172.                 $unsubsribe = false;
  4173.                 $mergeVars = array();
  4174.                 $htmlTextMobileField = trim($this->formrow->mailchimp_text_html_mobile_field);
  4175.                 $checkboxField = trim($this->formrow->mailchimp_checkbox_field);
  4176.                 $unsubscribeField = trim($this->formrow->mailchimp_unsubscribe_field);
  4177.                 $emailField = trim($this->formrow->mailchimp_email_field);
  4178.                 $mergeVarFields = explode(',',str_replace(' ','',$this->formrow->mailchimp_mergevars));
  4179.                 $api = new MCAPI(trim($this->formrow->mailchimp_api_key));
  4180.                 $list_id = trim($this->formrow->mailchimp_list_id);
  4181.  
  4182.                 if($checkboxField != ''){
  4183.                     $box = JRequest::getVar('ff_nm_'.$checkboxField, array(''));
  4184.                     if(isset($box[0]) && $box[0] != ''){
  4185.                         $checked = true;
  4186.                     } else {
  4187.                         $checked = false;
  4188.                     }
  4189.                 }
  4190.  
  4191.                 if($unsubscribeField != ''){
  4192.                     $box = JRequest::getVar('ff_nm_'.$unsubscribeField, array(''));
  4193.                     if(isset($box[0]) && $box[0] != ''){
  4194.                         $unsubsribe = true;
  4195.                     }
  4196.                 }
  4197.  
  4198.                 if($htmlTextMobileField != ''){
  4199.                     $selection = JRequest::getVar('ff_nm_'.$htmlTextMobileField, array(''));
  4200.                     if(isset($selection[0]) && $selection[0] != ''){
  4201.                         $htmlTextMobile = $selection[0];
  4202.                     }
  4203.                 }else{
  4204.                     $htmlTextMobile = $this->formrow->mailchimp_default_type;
  4205.                 }
  4206.                
  4207.                 foreach ($this->maildata as $data) {
  4208.                     switch($data[_FF_DATA_NAME]){
  4209.                         case $emailField:
  4210.                             $email = bf_is_email(trim($data[_FF_DATA_VALUE])) ? trim($data[_FF_DATA_VALUE]) : '';
  4211.                             break;
  4212.                         default:
  4213.                             if(in_array($data[_FF_DATA_NAME],$mergeVarFields)){
  4214.                                 $mergeVars[$data[_FF_DATA_NAME]] = $data[_FF_DATA_VALUE];
  4215.                             }
  4216.                     }
  4217.                 }
  4218.  
  4219.                 if($email != '' && $checked){
  4220.                     if($api->listSubscribe($list_id, $email, count($mergeVars) == 0 ? '' : $mergeVars, $htmlTextMobile, $this->formrow->mailchimp_double_optin, $this->formrow->mailchimp_update_existing, $this->formrow->mailchimp_replace_interests, $this->formrow->mailchimp_send_welcome) !== true) {
  4221.                         if($this->formrow->mailchimp_send_errors){
  4222.                             $from = $this->formrow->alt_mailfrom != '' ? $this->formrow->alt_mailfrom : $mainframe->getCfg('mailfrom');
  4223.                             $fromname = $this->formrow->alt_fromname != '' ? $this->formrow->alt_fromname : $mainframe->getCfg('fromname');
  4224.                             $this->sendMail($from, $fromname, $from, 'MailChimp API Error', 'Could not send data to MailChimp for email: '. $email . "\n\nReason (code ".$api->errorCode."): " . $api->errorMessage);
  4225.                         }
  4226.                     }
  4227.                 }
  4228.                 if($email != '' && $unsubsribe){
  4229.                     if($api->listUnsubscribe($list_id, $email, $this->formrow->mailchimp_delete_member, $this->formrow->mailchimp_send_goodbye, $this->formrow->mailchimp_send_notify) !== true) {
  4230.                         if($this->formrow->mailchimp_send_errors){
  4231.                             $from = $this->formrow->alt_mailfrom != '' ? $this->formrow->alt_mailfrom : $mainframe->getCfg('mailfrom');
  4232.                             $fromname = $this->formrow->alt_fromname != '' ? $this->formrow->alt_fromname : $mainframe->getCfg('fromname');
  4233.                             $this->sendMail($from, $fromname, $from, 'MailChimp API Error', 'Could not send unsubscribe data to MailChimp for email: '. $email . "\n\nReason (code ".$api->errorCode."): " . $api->errorMessage);
  4234.                         }
  4235.                     }
  4236.                 }
  4237.             }
  4238.         }
  4239.  
  4240.         function saveUpload($filename, $userfile_name, $destpath, $timestamp, $useUrl = false, $useUrlDownloadDirectory = '')
  4241.         {
  4242.                 global $ff_config, $mosConfig_fileperms;
  4243.  
  4244.                 if ($this->dying) return '';
  4245.                 $baseDir = JPath::clean(str_replace($this->findtags, $this->replacetags, $destpath));
  4246.                 if (!file_exists($baseDir)) {
  4247.                         $this->status = _FF_STATUS_UPLOAD_FAILED;
  4248.                         $this->message = BFText::_('COM_BREEZINGFORMS_PROCESS_DIRNOTEXISTS');
  4249.                         return '';
  4250.                 } // if
  4251.  
  4252.                 /*
  4253.                 if (!is_writable($baseDir)) {
  4254.                         $this->status = _FF_STATUS_UPLOAD_FAILED;
  4255.                         $this->message = BFText::_('COM_BREEZINGFORMS_PROCESS_DIRNOTWRTBLE');
  4256.                         return '';
  4257.                 } // if
  4258.                 */
  4259.                 if ($timestamp) $userfile_name = date('YmdHis') . '_' . $userfile_name;
  4260.                 $path = $baseDir.DS.$userfile_name;
  4261.                 //if ($timestamp) $path .= '.'.date('YmdHis');
  4262.                 if (JFile::exists($path)) {
  4263.                         $rnd = md5( mt_rand(0, mt_getrandmax()) );
  4264.                         $path = $baseDir.DS.$rnd.'_'.$userfile_name;
  4265.                         //if ($timestamp) $path .= '.'.date('YmdHis');
  4266.                         if (JFile::exists($path)) {
  4267.                                 $this->status = _FF_STATUS_UPLOAD_FAILED;
  4268.                                 $this->message = BFText::_('COM_BREEZINGFORMS_PROCESS_FILEEXISTS');
  4269.                                 return '';
  4270.                         }
  4271.                 } // if
  4272.  
  4273.                 if (!move_uploaded_file($filename, $path)) {
  4274.                         $this->status = _FF_STATUS_UPLOAD_FAILED;
  4275.                         $this->message = BFText::_('COM_BREEZINGFORMS_PROCESS_FILEMOVEFAILED');
  4276.                         return '';
  4277.                 } // if
  4278.  
  4279.                 $filemode = NULL;
  4280.                 if (isset($mosConfig_fileperms)) {
  4281.                         if ($mosConfig_fileperms!='')
  4282.                                 $filemode = octdec($mosConfig_fileperms);
  4283.                 } else
  4284.                         $filemode = 0644;
  4285.                 if (isset($filemode)) {
  4286.                         if (!@chmod($path, $filemode)) {
  4287.                                 $this->status = _FF_STATUS_UPLOAD_FAILED;
  4288.                                 $this->message = BFText::_('COM_BREEZINGFORMS_PROCESS_FILECHMODFAILED');
  4289.                                 return '';
  4290.                         } // if
  4291.                 } // if
  4292.  
  4293.                 $serverPath = $path;
  4294.                 if($useUrl && $useUrlDownloadDirectory != ''){
  4295.                     $path = $useUrlDownloadDirectory . '/' . basename($path);
  4296.                 }
  4297.  
  4298.                 return array('default' => $path, 'server' => $serverPath);
  4299.         } // saveUpload
  4300.  
  4301.         function collectSubmitdata()
  4302.         {
  4303.                 if ($this->dying || $this->submitdata) return;
  4304.  
  4305.                 $this->submitdata = array();
  4306.                 $this->savedata = array();
  4307.                 $this->maildata = array();
  4308.                 $this->xmldata = array();
  4309.                 $names = array();
  4310.                 if (count($this->rows)) foreach ($this->rows as $row) {
  4311.                         if (!in_array($row->name,$names)) {
  4312.                                 switch ($row->type) {
  4313.                                         case 'File Upload':
  4314.                                                 require_once(JPATH_SITE.'/administrator/components/com_breezingforms/libraries/Zend/Json/Decoder.php');
  4315.                                                 require_once(JPATH_SITE.'/administrator/components/com_breezingforms/libraries/Zend/Json/Encoder.php');
  4316.                                                 $areas = Zend_Json::decode($this->formrow->template_areas);
  4317.                                                 $useUrl = false;
  4318.                                                 $useUrlDownloadDirectory = '';
  4319.                                                 if(trim($this->formrow->template_code_processed) == 'QuickMode' && is_array($areas)){
  4320.                                                     foreach($areas As $area){ // don't worry, size is only 1 in QM
  4321.                                                         if(isset($area['elements'])){
  4322.                                                             foreach($area['elements'] As $element){
  4323.                                                                 if(isset($element['options']) && isset($element['options']['useUrl']) && isset($element['name']) && trim($element['name']) == trim($row->name) && isset($element['internalType']) && $element['internalType'] == 'bfFile'){
  4324.                                                                     $useUrl = $element['options']['useUrl'];
  4325.                                                                     $useUrlDownloadDirectory = $element['options']['useUrlDownloadDirectory'];
  4326.                                                                     break;
  4327.                                                                 }
  4328.                                                             }
  4329.                                                         }
  4330.                                                         break; // just in case
  4331.                                                     }
  4332.                                                 }
  4333.  
  4334.                                                 $uploadfiles = isset($_FILES['ff_nm_'.$row->name]) ? $_FILES['ff_nm_'.$row->name] : null;
  4335.  
  4336.                                                 if($this->formrow->template_code != '' && isset($_FILES['ff_nm_'.$row->name]) && $_FILES['ff_nm_'.$row->name]['tmp_name'][0] != '' && trim($row->data2) != ''){
  4337.                                                         $fileName = $_FILES['ff_nm_'.$row->name]['name'][0];
  4338.                                                         $ext = strtolower(substr($fileName, strrpos($fileName, '.') + 1));
  4339.                                                         $allowedExtensions = explode(',', strtolower(str_replace(' ', '', trim($row->data2))));
  4340.  
  4341.                                                         if(!in_array($ext, $allowedExtensions)){
  4342.                                                                 $this->status = _FF_STATUS_FILE_EXTENSION_NOT_ALLOWED;
  4343.                                                                 return;
  4344.                                                         }
  4345.                                                 }
  4346.  
  4347.                                                 $paths = array();
  4348.                                                 $serverPaths = array();
  4349.                                                
  4350.                                                 if ($uploadfiles) {
  4351.                                                         $name = $uploadfiles['name'];
  4352.                                                         $tmp_name = $uploadfiles['tmp_name'];
  4353.                                                         $cnt = count($name);
  4354.                                                         for ($i = 0; $i < $cnt; $i++) {
  4355.                                                                 $path = '';
  4356.                                                                 if ($name[$i] != '') {
  4357.                                                                         $allowed = "/[^a-z0-9\\.\\-\\_]/i";
  4358.                                                                         $pathInfo = $this->saveUpload($tmp_name[$i], preg_replace($allowed,"_",$name[$i]), $row->data1, $row->flag1,$useUrl,$useUrlDownloadDirectory);
  4359.                                                                         $path = $pathInfo['default'];
  4360.                                                                         $serverPath = $pathInfo['server'];
  4361.                                                                         if ($this->status != _FF_STATUS_OK) return;
  4362.                                                                         $paths[] = $path;
  4363.                                                                         $serverPaths[] = $serverPath;
  4364.                                                                         $this->submitdata[] = array($row->id, $row->name, $row->title, $row->type, $path);
  4365.                                                                 } // if
  4366.                                                         } // for
  4367.                                                 } // if
  4368.                                                 if(JRequest::getVar('bfFlashUploadTicket', '') != ''){
  4369.                                                         $tickets = JFactory::getSession()->get('bfFlashUploadTickets', array());
  4370.                                                         mt_srand();
  4371.                                                         if(isset($tickets[JRequest::getVar('bfFlashUploadTicket', mt_rand(0,mt_getrandmax()))])){
  4372.                                                                 $sourcePath = JPATH_SITE . '/components/com_breezingforms/uploads/';
  4373.                                                                 if (@file_exists($sourcePath) && @is_readable($sourcePath) && @is_dir($sourcePath) && $handle = @opendir($sourcePath)) {
  4374.                                                                         while (false !== ($file = @readdir($handle))) {
  4375.                                                                                 if($file!="." && $file!=".."){
  4376.                                                                                         $parts = explode('_', $file);
  4377.                                                                                         if(count($parts)>=5){
  4378.                                                                                                 if($parts[count($parts)-1] == 'flashtmp'){
  4379.                                                                                                         if($parts[count($parts)-3] == JRequest::getVar('bfFlashUploadTicket', '')){
  4380.                                                                                                                 if($parts[count($parts)-4] == $row->name){
  4381.                                                                                                                         unset($parts[count($parts)-1]);
  4382.                                                                                                                         unset($parts[count($parts)-1]);
  4383.                                                                                                                         unset($parts[count($parts)-1]);
  4384.                                                                                                                         unset($parts[count($parts)-1]);
  4385.                                                                                                                         $userfile_name = implode('_',$parts);
  4386.                                                                                                                         $baseDir = JPath::clean(str_replace($this->findtags, $this->replacetags, $row->data1));
  4387.                                                                                                                         if ($row->flag1) $userfile_name = date('YmdHis') . '_' . $userfile_name;
  4388.                                                                                                                         $path = $baseDir.DS.$userfile_name;
  4389.                                                                                                                         //if ($row->flag1) $path .= '.'.date('YmdHis');
  4390.                                                                                                                         if (file_exists($path)) {
  4391.                                                                                                                                 $rnd = md5( mt_rand(0, mt_getrandmax()) );
  4392.                                                                                                                                 $path = $baseDir.DS.$rnd.'_'.$userfile_name;
  4393.                                                                                                                                 //if ($row->flag1) $path .= '.'.date('YmdHis');
  4394.                                                                                                                                 if (file_exists($path)) {
  4395.                                                                                                                                         $this->status = _FF_STATUS_UPLOAD_FAILED;
  4396.                                                                                                                                         $this->message = BFText::_('COM_BREEZINGFORMS_PROCESS_FILEEXISTS');
  4397.                                                                                                                                         return '';
  4398.                                                                                                                                 }
  4399.                                                                                                                         } // if
  4400.  
  4401.                                                                                                                         $ext = strtolower(substr($userfile_name, strrpos($userfile_name, '.') + 1));
  4402.                                                                                                                         $allowedExtensions = explode(',', strtolower(str_replace(' ', '', trim($row->data2))));
  4403.  
  4404.                                                                                                                         if(!in_array($ext, $allowedExtensions)){
  4405.                                                                                                                                 $this->status = _FF_STATUS_FILE_EXTENSION_NOT_ALLOWED;
  4406.                                                                                                                         }
  4407.  
  4408.                                                                                                                         if ($this->status != _FF_STATUS_OK) return;
  4409.  
  4410.                                                                                                                         if(@is_readable($sourcePath.$file) && @file_exists( $baseDir ) && @is_dir( $baseDir )){
  4411.                                                                                                                                 @JFile::copy($sourcePath.$file, $path);
  4412.                                                                                                                         } else {
  4413.                                                                                                                                 $this->status = _FF_STATUS_UPLOAD_FAILED;
  4414.                                                                                                                                 $this->message = BFText::_('COM_BREEZINGFORMS_PROCESS_FILEMOVEFAILED');
  4415.                                                                                                                                 return;
  4416.                                                                                                                         }
  4417.                                                                                                                         @JFile::delete($sourcePath.$file);
  4418.  
  4419.                                                                                                                         $serverPath = $path;
  4420.                                                                                                                         if($useUrl && $useUrlDownloadDirectory != ''){
  4421.                                                                                                                             $path = $useUrlDownloadDirectory . '/' . basename($path);
  4422.                                                                                                                         }
  4423.  
  4424.                                                                                                                         $paths[] = $path;
  4425.                                                                                                                         $serverPaths[] = $serverPath;
  4426.                                                                                                                         $this->submitdata[] = array($row->id, $row->name, $row->title, $row->type, $path);
  4427.                                                                                                                 }
  4428.                                                                                                         }
  4429.                                                                                                 }
  4430.                                                                                         }
  4431.                                                                                 }
  4432.                                                                         }
  4433.                                                                         @closedir($handle);
  4434.                                                                 }
  4435.                                                         }
  4436.                                                 }
  4437.                                                 if (!count($paths)) $paths = array();
  4438.                                                 if ($row->logging==1) {
  4439.                                                         // db and attachment
  4440.                                                    
  4441.                                                         foreach ($paths as $path) {
  4442.                                                                 if ( ($this->formrow->dblog==1 && $path!='') ||
  4443.                                                                           $this->formrow->dblog==2 )
  4444.                                                                         $this->savedata[] = array($row->id, $row->name, $row->title, $row->type, $path);
  4445.                                                                 if ( ( ($this->formrow->emaillog==1 && $this->trim($path)) ||
  4446.                                                                   $this->formrow->emaillog==2 ) && ($this->formrow->emailxml==1 ||
  4447.                                                                           $this->formrow->emailxml==2  || $this->formrow->emailxml==3 || $this->formrow->emailxml==4))
  4448.                                                                         $this->xmldata[] = array($row->id, $row->name, $row->title, $row->type, $path);
  4449.                                                         } // foreach
  4450.  
  4451.                                                         if(!count($paths)){
  4452.                                                             if ( ($this->formrow->dblog==1) ||
  4453.                                                                           $this->formrow->dblog==2 )
  4454.                                                                         $this->savedata[] = array($row->id, $row->name, $row->title, $row->type, '');
  4455.                                                             if ( ( ($this->formrow->emaillog==1) ||
  4456.                                                                   $this->formrow->emaillog==2 ) && ($this->formrow->emailxml==1 ||
  4457.                                                                           $this->formrow->emailxml==2  || $this->formrow->emailxml==3 || $this->formrow->emailxml==4))
  4458.                                                                         $this->xmldata[] = array($row->id, $row->name, $row->title, $row->type, '');
  4459.                                                         }
  4460.                                                         // mail
  4461.                                                         $paths = implode(nl(), $paths);
  4462.                                                         $serverPaths = implode(nl(), $serverPaths);
  4463.                                                         if ( ($this->formrow->emaillog==1 && $this->trim($paths)) ||
  4464.                                                                   $this->formrow->emaillog==2 )
  4465.                                                                 $this->maildata[] = array($row->id, $row->name, $row->title, $row->type, $paths, $serverPaths);
  4466.                                                 } // if
  4467.                                                 break;
  4468.                                         case 'Text':
  4469.                                         case 'Textarea':
  4470.                                         case 'Checkbox':
  4471.                                         case 'Radio Button':
  4472.                                         case 'Select List':
  4473.                                         case 'Query List':
  4474.                                         case 'Radio Group':
  4475.                                         case 'Checkbox Group':
  4476.                                         case 'Calendar':
  4477.                                         case 'Hidden Input':
  4478.                                                 if ($row->logging==1) {
  4479.                                                         $values = @JRequest::getVar( "ff_nm_".$row->name,array(''));
  4480.                                                         foreach ($values as $value) {
  4481.                                                                 // submitdata
  4482.                                                                 if ($this->trim($value))
  4483.                                                                         $this->submitdata[] = array($row->id, $row->name, $row->title, $row->type, $value);
  4484.                                                                 // for db
  4485.                                                                 if ( ($this->formrow->dblog==1 && $value!='') ||
  4486.                                                                           $this->formrow->dblog==2 )
  4487.                                                                         $this->savedata[] = array($row->id, $row->name, $row->title, $row->type, $value);
  4488.                                                                 if ( ( ($this->formrow->emaillog==1 && $this->trim($value)) ||
  4489.                                                                   $this->formrow->emaillog==2 ) && ($this->formrow->emailxml==1 ||
  4490.                                                                           $this->formrow->emailxml==2  || $this->formrow->emailxml==3 || $this->formrow->emailxml==4))
  4491.                                                                         $this->xmldata[] = array($row->id, $row->name, $row->title, $row->type, $value);
  4492.                                                         } // foreach
  4493.                                                         // for mail
  4494.                                                         if ($row->type=='Textarea')
  4495.                                                                 $values = implode(nl(), $values);
  4496.                                                         else
  4497.                                                                 $values = implode(', ', $values);
  4498.                                                         if ( ($this->formrow->emaillog==1 && $this->trim($values)) ||
  4499.                                                                   $this->formrow->emaillog==2 )
  4500.                                                                 $this->maildata[] = array($row->id, $row->name, $row->title, $row->type, $values);
  4501.                                                 } // if logging
  4502.                                                 break;
  4503.                   &nb