PageRenderTime 57ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/administrator/components/com_breezingforms/libraries/crosstec/classes/BFQuickMode.php

https://bitbucket.org/izubizarreta/https-bitbucket.org-bityvip
PHP | 1745 lines | 1589 code | 122 blank | 34 comment | 169 complexity | 374ca1b32a219a597dc81f8ec8df6fc5 MD5 | raw file
Possible License(s): LGPL-3.0, LGPL-2.0, JSON, GPL-2.0, BSD-3-Clause, LGPL-2.1, MIT
  1. <?php
  2. /**
  3. * BreezingForms - A Joomla Forms Application
  4. * @version 1.8
  5. * @package BreezingForms
  6. * @copyright (C) 2008-2012 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. require_once(JPATH_SITE.'/administrator/components/com_breezingforms/libraries/Zend/Json/Decoder.php');
  11. require_once(JPATH_SITE.'/administrator/components/com_breezingforms/libraries/Zend/Json/Encoder.php');
  12. class BFQuickMode{
  13. /**
  14. * @var HTML_facileFormsProcessor
  15. */
  16. private $p = null;
  17. private $dataObject = array();
  18. private $rootMdata = array();
  19. private $fading = true;
  20. private $fadingClass = '';
  21. private $fadingCall = '';
  22. private $useErrorAlerts = false;
  23. private $useDefaultErrors = false;
  24. private $useBalloonErrors = false;
  25. private $rollover = false;
  26. private $rolloverColor = '';
  27. private $toggleFields = '';
  28. private $hasFlashUpload = false;
  29. private $flashUploadTicket = '';
  30. private $cancelImagePath = '';
  31. private $uploadImagePath = '';
  32. private $htmltextareas = array();
  33. function __construct( HTML_facileFormsProcessor $p ){
  34. // will make sure mootools loads first, important 4 jquery
  35. jimport('joomla.version');
  36. $version = new JVersion();
  37. if(version_compare($version->getShortVersion(), '3.0', '<')){
  38. JHTML::_('behavior.mootools');
  39. }
  40. JFactory::getDocument()->addScriptDeclaration('<!--');
  41. $this->p = $p;
  42. $this->dataObject = Zend_Json::decode( base64_decode($this->p->formrow->template_code) );
  43. $this->rootMdata = $this->dataObject['properties'];
  44. $this->fading = $this->rootMdata['fadeIn'];
  45. $this->useErrorAlerts = $this->rootMdata['useErrorAlerts'];
  46. $this->useDefaultErrors = isset($this->rootMdata['useDefaultErrors']) ? $this->rootMdata['useDefaultErrors'] : false;
  47. $this->useBalloonErrors = isset($this->rootMdata['useBalloonErrors']) ? $this->rootMdata['useBalloonErrors'] : false;
  48. $this->rollover = $this->rootMdata['rollover'];
  49. $this->rolloverColor = $this->rootMdata['rolloverColor'];
  50. $this->toggleFields = $this->parseToggleFields( isset($this->rootMdata['toggleFields']) ? $this->rootMdata['toggleFields'] : '[]' );
  51. mt_srand();
  52. $this->flashUploadTicket = md5( strtotime('now') . mt_rand( 0, mt_getrandmax() ) );
  53. JFactory::getDocument()->addStyleDeclaration('
  54. .bfClearfix:after {
  55. content: ".";
  56. display: block;
  57. height: 0;
  58. clear: both;
  59. visibility: hidden;
  60. }
  61. .bfInline{
  62. float:left;
  63. }
  64. .bfFadingClass{
  65. display:none;
  66. }');
  67. $jQuery = '';
  68. if(isset($this->rootMdata['disableJQuery']) && $this->rootMdata['disableJQuery']){
  69. $jQuery = 'var JQuery = jQuery;'."\n";
  70. } else {
  71. JFactory::getDocument()->addScript(JURI::root(true) . '/components/com_breezingforms/libraries/jquery/jq.min.js');
  72. }
  73. JFactory::getDocument()->addStyleSheet( JURI::root(true) . '/components/com_breezingforms/libraries/jquery/tooltip.css' );
  74. JFactory::getDocument()->addScript(JURI::root(true) . '/components/com_breezingforms/libraries/jquery/tooltip.js');
  75. if($this->useBalloonErrors){
  76. JFactory::getDocument()->addStyleSheet( JURI::root(true) . '/components/com_breezingforms/libraries/jquery/validationEngine.jquery.css' );
  77. JFactory::getDocument()->addScript(JURI::root(true) . '/components/com_breezingforms/libraries/jquery/jquery.validationEngine-en.js');
  78. JFactory::getDocument()->addScript(JURI::root(true) . '/components/com_breezingforms/libraries/jquery/jquery.validationEngine.js');
  79. }
  80. $toggleCode = '';
  81. if($this->toggleFields != '[]'){
  82. $toggleCode = '
  83. var toggleFieldsArray = '.$this->toggleFields.';
  84. String.prototype.beginsWith = function(t, i) { if (i==false) { return
  85. (t == this.substring(0, t.length)); } else { return (t.toLowerCase()
  86. == this.substring(0, t.length).toLowerCase()); } }
  87. function bfDeactivateSectionFields(){
  88. for( var i = 0; i < bfDeactivateSection.length; i++ ){
  89. bfSetFieldValue(bfDeactivateSection[i], "off");
  90. JQuery("#"+bfDeactivateSection[i]+" .ff_elem").each(function(i){
  91. if( JQuery(this).get(0).name && JQuery(this).get(0).name.beginsWith("ff_nm_", true) ){
  92. bfDeactivateField[JQuery(this).get(0).name] = true;
  93. }
  94. });
  95. }
  96. for( var i = 0; i < toggleFieldsArray.length; i++ ){
  97. if(toggleFieldsArray[i].state == "turn"){
  98. bfSetFieldValue(toggleFieldsArray[i].tName, "off");
  99. }
  100. }
  101. }
  102. function bfToggleFields(state, tCat, tName, thisBfDeactivateField){
  103. // maybe a little to harsh, but currently no other workaround
  104. // file uploads will be removed for the complete form if a rule is executed
  105. // make sure you offer file uploads at the end of your form if you have visibility rules!
  106. if(typeof bfFlashUploadInterval != "undefined"){
  107. window.clearInterval( bfFlashUploadInterval );
  108. for(qID in bfFlashUploadAll){
  109. try{
  110. JQuery(bfFlashUploadAll[qID]).uploadifyCancel(qID);
  111. }catch(e){}
  112. }
  113. bfFlashUploadTooLarge = {};
  114. bfFlashUploadAll = {};
  115. JQuery("#bfFileQueue").html("")
  116. JQuery(".bfFlashFileQueueClass").html("");
  117. }
  118. if(state == "on"){
  119. if(tCat == "element"){
  120. if( typeof JQuery("[name=\"ff_nm_"+tName+"[]\"]") != "undefined" && JQuery("[name=\"ff_nm_"+tName+"[]\"]").parent().attr("class").substr(0, 10) == "bfElemWrap" ){
  121. JQuery("[name=\"ff_nm_"+tName+"[]\"]").parent().css("display", "");
  122. } else if(JQuery("[name=\"ff_nm_"+tName+"[]\"]").get(0).type == "checkbox" || JQuery("[name=\"ff_nm_"+tName+"[]\"]").get(0).type == "radio"){
  123. JQuery("[name=\"ff_nm_"+tName+"[]\"]").parent().parent().css("display", "");
  124. }
  125. thisBfDeactivateField["ff_nm_"+tName+"[]"] = false;
  126. bfSetFieldValue(tName, "on");
  127. } else {
  128. JQuery("#"+tName).css("display", "");
  129. bfSetFieldValue(tName, "on");
  130. JQuery("#"+tName).find(".ff_elem").each(function(i){
  131. if( JQuery(this).get(0).name && JQuery(this).get(0).name.beginsWith("ff_nm_", true) ){
  132. thisBfDeactivateField[JQuery(this).get(0).name] = false;
  133. }
  134. });
  135. }
  136. } else {
  137. if(tCat == "element"){
  138. if( typeof JQuery("[name=\"ff_nm_"+tName+"[]\"]") != "undefined" && JQuery("[name=\"ff_nm_"+tName+"[]\"]").parent().attr("class").substr(0, 10) == "bfElemWrap" ){
  139. JQuery("[name=\"ff_nm_"+tName+"[]\"]").parent().css("display", "none");
  140. } else if(JQuery("[name=\"ff_nm_"+tName+"[]\"]").get(0).type == "checkbox" || JQuery("[name=\"ff_nm_"+tName+"[]\"]").get(0).type == "radio"){
  141. JQuery("[name=\"ff_nm_"+tName+"[]\"]").parent().parent().css("display", "none");
  142. }
  143. thisBfDeactivateField["ff_nm_"+tName+"[]"] = true;
  144. bfSetFieldValue(tName, "off");
  145. } else {
  146. JQuery("#"+tName).css("display", "none");
  147. bfSetFieldValue(tName, "off");
  148. JQuery("#"+tName+" .ff_elem").each(function(i){
  149. if( JQuery(this).get(0).name && JQuery(this).get(0).name.beginsWith("ff_nm_", true) ){
  150. thisBfDeactivateField[JQuery(this).get(0).name] = true;
  151. }
  152. });
  153. }
  154. }
  155. }
  156. function bfSetFieldValue(name, condition){
  157. for( var i = 0; i < toggleFieldsArray.length; i++ ){
  158. if( toggleFieldsArray[i].action == "if" ) {
  159. if(name == toggleFieldsArray[i].tCat && condition == toggleFieldsArray[i].statement){
  160. var element = JQuery("[name=\"ff_nm_"+toggleFieldsArray[i].condition+"[]\"]");
  161. switch(element.get(0).type){
  162. case "text":
  163. case "textarea":
  164. if(toggleFieldsArray[i].value == "!empty"){
  165. element.val("");
  166. } else {
  167. element.val(toggleFieldsArray[i].value);
  168. }
  169. break;
  170. case "select-multiple":
  171. case "select-one":
  172. if(toggleFieldsArray[i].value == "!empty"){
  173. for(var j = 0; j < element.get(0).options.length; j++){
  174. element.get(0).options[j].selected = false;
  175. }
  176. }
  177. for(var j = 0; j < element.get(0).options.length; j++){
  178. if(element.get(0).options[j].value == toggleFieldsArray[i].value){
  179. element.get(0).options[j].selected = true;
  180. }
  181. }
  182. break;
  183. case "radio":
  184. case "checkbox":
  185. var radioLength = element.size();
  186. if(toggleFieldsArray[i].value == "!empty"){
  187. for(var j = 0; j < radioLength; j++){
  188. element.get(j).checked = false;
  189. }
  190. }
  191. for(var j = 0; j < radioLength; j++){
  192. if( element.get(j).value == toggleFieldsArray[i].value ){
  193. element.get(j).checked = true;
  194. }
  195. }
  196. break;
  197. }
  198. }
  199. }
  200. }
  201. }
  202. function bfRegisterToggleFields(){
  203. var offset = 0;
  204. var last_offset = 0;
  205. var limit = 10;
  206. var limit_cnt = 0;
  207. if( arguments.length == 1 ){
  208. offset = arguments[0];
  209. }
  210. var thisToggleFieldsArray = toggleFieldsArray;
  211. var thisBfDeactivateField = bfDeactivateField;
  212. var thisBfToggleFields = bfToggleFields;
  213. for( var i = offset; limit_cnt < limit && i < toggleFieldsArray.length; i++ ){
  214. // for( var i = 0; i < toggleFieldsArray.length; i++ ){
  215. if( toggleFieldsArray[i].action == "turn" && (toggleFieldsArray[i].tCat == "element" || toggleFieldsArray[i].tCat == "section") ){
  216. var toggleField = toggleFieldsArray[i];
  217. var element = JQuery("[name=\"ff_nm_"+toggleFieldsArray[i].sName+"[]\"]");
  218. if(element.get(0)){
  219. switch(element.get(0).type){
  220. case "text":
  221. case "textarea":
  222. JQuery("[name=\"ff_nm_"+toggleField.sName+"[]\"]").unbind("blur");
  223. JQuery("[name=\"ff_nm_"+toggleField.sName+"[]\"]").blur(
  224. function(){
  225. for( var k = 0; k < thisToggleFieldsArray.length; k++ ){
  226. var regExp = "";
  227. if(thisToggleFieldsArray[k].value.beginsWith("!", true) && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"){
  228. regExp = thisToggleFieldsArray[k].value.substring(1, thisToggleFieldsArray[k].value.length);
  229. }
  230. if(thisToggleFieldsArray[k].condition == "isnot"){
  231. if(
  232. ( ( regExp != "" && JQuery(this).val().test(regExp) <= 0 ) || JQuery(this).val() != thisToggleFieldsArray[k].value ) && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"
  233. ){
  234. var names = thisToggleFieldsArray[k].tName.split(",");
  235. for(var n = 0; n < names.length; n++){
  236. thisBfToggleFields(thisToggleFieldsArray[k].state, thisToggleFieldsArray[k].tCat, JQuery.trim(names[n]), thisBfDeactivateField);
  237. }
  238. //break;
  239. }
  240. } else if(thisToggleFieldsArray[k].condition == "is"){
  241. if(
  242. ( ( regExp != "" && JQuery(this).val().test(regExp) > 0 ) || JQuery(this).val() == thisToggleFieldsArray[k].value ) && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"
  243. ){
  244. var names = thisToggleFieldsArray[k].tName.split(",");
  245. for(var n = 0; n < names.length; n++){
  246. thisBfToggleFields(thisToggleFieldsArray[k].state, thisToggleFieldsArray[k].tCat, JQuery.trim(names[n]), thisBfDeactivateField);
  247. }
  248. //break;
  249. }
  250. }
  251. }
  252. }
  253. );
  254. break;
  255. case "select-multiple":
  256. case "select-one":
  257. JQuery("[name=\"ff_nm_"+toggleField.sName+"[]\"]").unbind("change");
  258. JQuery("[name=\"ff_nm_"+toggleField.sName+"[]\"]").change(
  259. function(){
  260. var res = JQuery.isArray( JQuery(this).val() ) == false ? [ JQuery(this).val() ] : JQuery(this).val();
  261. for( var k = 0; k < thisToggleFieldsArray.length; k++ ){
  262. // The or-case in lists
  263. var found = false;
  264. var chkGrpValues = new Array();
  265. if(thisToggleFieldsArray[k].value.beginsWith("#", true) && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"){
  266. chkGrpValues = thisToggleFieldsArray[k].value.substring(1, thisToggleFieldsArray[k].value.length).split("|");
  267. for(var l = 0; l < chkGrpValues.length; l++){
  268. if( JQuery.inArray(chkGrpValues[l], res) != -1 ){
  269. found = true;
  270. break;
  271. }
  272. }
  273. }
  274. // the and-case in lists
  275. var foundCount = 0;
  276. chkGrpValues2 = new Array();
  277. if(thisToggleFieldsArray[k].value.beginsWith("#", true) && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"){
  278. chkGrpValues2 = thisToggleFieldsArray[k].value.substring(1, thisToggleFieldsArray[k].value.length).split(";");
  279. for(var l = 0; l < res.length; l++){
  280. if( JQuery.inArray(res[l], chkGrpValues2) != -1 ){
  281. foundCount++;
  282. }
  283. }
  284. }
  285. if(thisToggleFieldsArray[k].condition == "isnot"){
  286. if(
  287. (
  288. !JQuery.isArray(res) && JQuery(this).val() != thisToggleFieldsArray[k].value && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"
  289. )
  290. ||
  291. (
  292. JQuery.isArray(res) && ( JQuery.inArray(thisToggleFieldsArray[k].value, res) == -1 || !found || ( foundCount == 0 || foundCount != chkGrpValues2.length ) ) && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"
  293. )
  294. ){
  295. var names = thisToggleFieldsArray[k].tName.split(",");
  296. for(var n = 0; n < names.length; n++){
  297. thisBfToggleFields(thisToggleFieldsArray[k].state, thisToggleFieldsArray[k].tCat, JQuery.trim(names[n]), thisBfDeactivateField);
  298. }
  299. //break;
  300. }
  301. } else if(thisToggleFieldsArray[k].condition == "is"){
  302. if(
  303. (
  304. !JQuery.isArray(res) && JQuery(this).val() == thisToggleFieldsArray[k].value && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"
  305. )
  306. ||
  307. (
  308. JQuery.isArray(res) && ( JQuery.inArray(thisToggleFieldsArray[k].value, res) != -1 || found || ( foundCount != 0 && foundCount == chkGrpValues2.length ) ) && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"
  309. )
  310. ){
  311. var names = thisToggleFieldsArray[k].tName.split(",");
  312. for(var n = 0; n < names.length; n++){
  313. thisBfToggleFields(thisToggleFieldsArray[k].state, thisToggleFieldsArray[k].tCat, JQuery.trim(names[n]), thisBfDeactivateField);
  314. }
  315. //break;
  316. }
  317. }
  318. }
  319. }
  320. );
  321. break;
  322. case "radio":
  323. case "checkbox":
  324. var radioLength = JQuery("[name=\"ff_nm_"+toggleField.sName+"[]\"]").size();
  325. for(var j = 0; j < radioLength; j++){
  326. JQuery("#" + JQuery("[name=\"ff_nm_"+toggleField.sName+"[]\"]").get(j).id ).unbind("click");
  327. JQuery("#" + JQuery("[name=\"ff_nm_"+toggleField.sName+"[]\"]").get(j).id ).click(
  328. function(){
  329. // NOT O(n^2) since its ony executed on click event!
  330. for( var k = 0; k < thisToggleFieldsArray.length; k++ ){
  331. // used for complex checkbox group case below
  332. var chkGrpValues = new Array();
  333. if(JQuery(this).get(0).checked && thisToggleFieldsArray[k].value.beginsWith("#", true) && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"){
  334. chkGrpValues = thisToggleFieldsArray[k].value.substring(1, thisToggleFieldsArray[k].value.length).split("|");
  335. }
  336. if(thisToggleFieldsArray[k].condition == "isnot"){
  337. if(
  338. // simple radio case for selected value
  339. ( JQuery(this).get(0).type == "radio" && JQuery(this).get(0).checked && JQuery(this).val() != thisToggleFieldsArray[k].value && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]" )
  340. ||
  341. // single checkbox case for checked/unchecked
  342. (
  343. JQuery(this).get(0).type == "checkbox" &&
  344. JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]" &&
  345. ( JQuery(this).get(0).checked && thisToggleFieldsArray[k].value != "!checked"
  346. ||
  347. JQuery(this).get(0).checked && thisToggleFieldsArray[k].value == "!unchecked"
  348. )
  349. )
  350. ||
  351. // complex checkbox/radio group case by multiple values
  352. (
  353. JQuery(this).get(0).checked && JQuery.inArray(JQuery(this).val(), chkGrpValues) == -1 && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"
  354. )
  355. ||
  356. // simple checkbox group case by single value
  357. (
  358. JQuery(this).get(0).type == "checkbox" && JQuery(this).get(0).checked && JQuery(this).val() != thisToggleFieldsArray[k].value && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"
  359. )
  360. ){
  361. var names = thisToggleFieldsArray[k].tName.split(",");
  362. for(var n = 0; n < names.length; n++){
  363. thisBfToggleFields(thisToggleFieldsArray[k].state, thisToggleFieldsArray[k].tCat, JQuery.trim(names[n]), thisBfDeactivateField);
  364. }
  365. //break;
  366. }
  367. }
  368. else
  369. if(thisToggleFieldsArray[k].condition == "is"){
  370. if(
  371. // simple radio case for selected value
  372. ( JQuery(this).get(0).type == "radio" && JQuery(this).get(0).checked && JQuery(this).val() == thisToggleFieldsArray[k].value && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]" )
  373. ||
  374. // single checkbox case for checked/unchecked
  375. (
  376. JQuery(this).get(0).type == "checkbox" &&
  377. JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]" &&
  378. ( JQuery(this).get(0).checked && thisToggleFieldsArray[k].value == "!checked"
  379. ||
  380. !JQuery(this).get(0).checked && thisToggleFieldsArray[k].value == "!unchecked"
  381. )
  382. )
  383. ||
  384. // complex checkbox/radio group case by multiple values
  385. (
  386. JQuery(this).get(0).checked && JQuery.inArray(JQuery(this).val(), chkGrpValues) != -1 && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"
  387. )
  388. ||
  389. // simple checkbox group case by single value
  390. (
  391. JQuery(this).get(0).type == "checkbox" && JQuery(this).get(0).checked && JQuery(this).val() == thisToggleFieldsArray[k].value && JQuery(this).get(0).name == "ff_nm_"+thisToggleFieldsArray[k].sName+"[]"
  392. )
  393. ){
  394. var names = thisToggleFieldsArray[k].tName.split(",");
  395. for(var n = 0; n < names.length; n++){
  396. thisBfToggleFields(thisToggleFieldsArray[k].state, thisToggleFieldsArray[k].tCat, JQuery.trim(names[n]), thisBfDeactivateField);
  397. }
  398. //break;
  399. }
  400. }
  401. }
  402. }
  403. );
  404. }
  405. break;
  406. }
  407. }
  408. }
  409. limit_cnt++;
  410. last_offset = i;
  411. }
  412. if( last_offset+1 < toggleFieldsArray.length ){ setTimeout("bfRegisterToggleFields( "+last_offset+" )", 350); }
  413. }';
  414. }
  415. JFactory::getDocument()->addScriptDeclaration(
  416. $jQuery.'
  417. var inlineErrorElements = new Array();
  418. var bfSummarizers = new Array();
  419. var bfDeactivateField = new Array();
  420. var bfDeactivateSection = new Array();
  421. '.$toggleCode.'
  422. function bfCheckMaxlength(id, maxlength, showMaxlength){
  423. if( JQuery("#ff_elem"+id).val().length > maxlength ){
  424. JQuery("#ff_elem"+id).val( JQuery("#ff_elem"+id).val().substring(0, maxlength) );
  425. }
  426. if(showMaxlength){
  427. JQuery("#bfMaxLengthCounter"+id).text( "(" + (maxlength - JQuery("#ff_elem"+id).val().length) + " '.BFText::_('COM_BREEZINGFORMS_CHARS_LEFT').')" );
  428. }
  429. }
  430. function bfRegisterSummarize(id, connectWith, type, emptyMessage, hideIfEmpty){
  431. bfSummarizers.push( { id : id, connectWith : connectWith, type : type, emptyMessage : emptyMessage, hideIfEmpty : hideIfEmpty } );
  432. }
  433. function bfField(name){
  434. var value = "";
  435. switch(ff_getElementByName(name).type){
  436. case "radio":
  437. if(JQuery("[name="+ff_getElementByName(name).name+"]:checked").val() != "" && typeof JQuery("[name="+ff_getElementByName(name).name+"]:checked").val() != "undefined"){
  438. value = JQuery("[name="+ff_getElementByName(name).name+"]:checked").val();
  439. if(!isNaN(value)){
  440. value = Number(value);
  441. }
  442. }
  443. break;
  444. case "checkbox":
  445. case "select-one":
  446. case "select-multiple":
  447. var nodeList = document["'.$this->p->form_id.'"][""+ff_getElementByName(name).name+""];
  448. if(ff_getElementByName(name).type == "checkbox" && typeof nodeList.length == "undefined"){
  449. if(typeof JQuery("[name="+ff_getElementByName(name).name+"]:checked").val() != "undefined"){
  450. value = JQuery("[name="+ff_getElementByName(name).name+"]:checked").val();
  451. if(!isNaN(value)){
  452. value = Number(value);
  453. }
  454. }
  455. } else {
  456. var val = "";
  457. for(var j = 0; j < nodeList.length; j++){
  458. if(nodeList[j].checked || nodeList[j].selected){
  459. val += nodeList[j].value + ", ";
  460. }
  461. }
  462. if(val != ""){
  463. value = val.substr(0, val.length - 2);
  464. if(!isNaN(value)){
  465. value = Number(value);
  466. }
  467. }
  468. }
  469. break;
  470. default:
  471. if(!isNaN(ff_getElementByName(name).value)){
  472. value = Number(ff_getElementByName(name).value);
  473. } else {
  474. value = ff_getElementByName(name).value;
  475. }
  476. }
  477. return value;
  478. }
  479. function populateSummarizers(){
  480. // cleaning first
  481. for(var i = 0; i < bfSummarizers.length; i++){
  482. JQuery("#"+bfSummarizers[i].id).parent().css("display", "");
  483. JQuery("#"+bfSummarizers[i].id).html("<span class=\"bfNotAvailable\">"+bfSummarizers[i].emptyMessage+"</span>");
  484. }
  485. for(var i = 0; i < bfSummarizers.length; i++){
  486. var summVal = "";
  487. switch(bfSummarizers[i].type){
  488. case "bfTextfield":
  489. case "bfTextarea":
  490. case "bfHidden":
  491. case "bfCalendar":
  492. case "bfFile":
  493. if(JQuery("[name=\"ff_nm_"+bfSummarizers[i].connectWith+"[]\"]").val() != ""){
  494. JQuery("#"+bfSummarizers[i].id).text( JQuery("[name=\"ff_nm_"+bfSummarizers[i].connectWith+"[]\"]").val() ).html();
  495. var breakableText = JQuery("#"+bfSummarizers[i].id).html().replace(/\\r/g, "").replace(/\\n/g, "<br/>");
  496. if(breakableText != ""){
  497. var calc = null;
  498. eval( "calc = typeof bfFieldCalc"+bfSummarizers[i].id+" != \"undefined\" ? bfFieldCalc"+bfSummarizers[i].id+" : null" );
  499. if(calc){
  500. breakableText = calc(breakableText);
  501. }
  502. }
  503. JQuery("#"+bfSummarizers[i].id).html(breakableText);
  504. summVal = breakableText;
  505. }
  506. break;
  507. case "bfRadioGroup":
  508. case "bfCheckbox":
  509. if(JQuery("[name=\"ff_nm_"+bfSummarizers[i].connectWith+"[]\"]:checked").val() != "" && typeof JQuery("[name=\"ff_nm_"+bfSummarizers[i].connectWith+"[]\"]:checked").val() != "undefined"){
  510. var theText = JQuery("[name=\"ff_nm_"+bfSummarizers[i].connectWith+"[]\"]:checked").val();
  511. if(theText != ""){
  512. var calc = null;
  513. eval( "calc = typeof bfFieldCalc"+bfSummarizers[i].id+" != \"undefined\" ? bfFieldCalc"+bfSummarizers[i].id+" : null" );
  514. if(calc){
  515. theText = calc(theText);
  516. }
  517. }
  518. JQuery("#"+bfSummarizers[i].id).text( theText );
  519. summVal = theText;
  520. }
  521. break;
  522. case "bfCheckboxGroup":
  523. case "bfSelect":
  524. var val = "";
  525. var nodeList = document["'.$this->p->form_id.'"]["ff_nm_"+bfSummarizers[i].connectWith+"[]"];
  526. for(var j = 0; j < nodeList.length; j++){
  527. if(nodeList[j].checked || nodeList[j].selected){
  528. val += nodeList[j].value + ", ";
  529. }
  530. }
  531. if(val != ""){
  532. var theText = val.substr(0, val.length - 2);
  533. if(theText != ""){
  534. var calc = null;
  535. eval( "calc = typeof bfFieldCalc"+bfSummarizers[i].id+" != \"undefined\" ? bfFieldCalc"+bfSummarizers[i].id+" : null" );
  536. if(calc){
  537. theText = calc(theText);
  538. }
  539. }
  540. JQuery("#"+bfSummarizers[i].id).text( theText );
  541. summVal = theText;
  542. }
  543. break;
  544. }
  545. if( ( bfSummarizers[i].hideIfEmpty && summVal == "" ) || ( typeof bfDeactivateField != "undefined" && bfDeactivateField["ff_nm_"+bfSummarizers[i].connectWith+"[]"] ) ){
  546. JQuery("#"+bfSummarizers[i].id).parent().css("display", "none");
  547. }
  548. }
  549. }
  550. ');
  551. if($this->fading || !$this->useErrorAlerts || $this->rollover){
  552. if(!$this->useErrorAlerts){
  553. $defaultErrors = '';
  554. if($this->useDefaultErrors || (!$this->useDefaultErrors && !$this->useBalloonErrors)){
  555. $defaultErrors = 'JQuery(".bfErrorMessage").html("");
  556. JQuery(".bfErrorMessage").css("display","none");
  557. JQuery(".bfErrorMessage").fadeIn(1500);
  558. var allErrors = "";
  559. var errors = error.split("\n");
  560. for(var i = 0; i < errors.length; i++){
  561. allErrors += "<div class=\"bfError\">" + errors[i] + "</div>";
  562. }
  563. JQuery(".bfErrorMessage").html(allErrors);
  564. JQuery(".bfErrorMessage").css("display","");';
  565. }
  566. JFactory::getDocument()->addScriptDeclaration('var bfUseErrorAlerts = false;'."\n");
  567. JFactory::getDocument()->addScriptDeclaration('
  568. function bfShowErrors(error){
  569. '.$defaultErrors.'
  570. if(JQuery.bfvalidationEngine)
  571. {
  572. JQuery("#'.$this->p->form_id.'").bfvalidationEngine({
  573. promptPosition: "bottomLeft",
  574. success : false,
  575. failure : function() {}
  576. });
  577. for(var i = 0; i < inlineErrorElements.length; i++)
  578. {
  579. if(inlineErrorElements[i][1] != "")
  580. {
  581. var prompt = null;
  582. if(inlineErrorElements[i][0] == "bfCaptchaEntry"){
  583. prompt = JQuery.bfvalidationEngine.buildPrompt("#bfCaptchaEntry",inlineErrorElements[i][1],"error");
  584. }
  585. else if(inlineErrorElements[i][0] == "bfReCaptchaEntry"){
  586. // nothing here yet for recaptcha, alert is default
  587. alert(inlineErrorElements[i][1]);
  588. }
  589. else if(typeof JQuery("#flashUpload"+inlineErrorElements[i][0]).get(0) != "undefined")
  590. {
  591. prompt = JQuery.bfvalidationEngine.buildPrompt("#"+JQuery("#flashUpload"+inlineErrorElements[i][0]).val(),inlineErrorElements[i][1],"error");
  592. }
  593. else
  594. {
  595. if(ff_getElementByName(inlineErrorElements[i][0])){
  596. prompt = JQuery.bfvalidationEngine.buildPrompt("#"+ff_getElementByName(inlineErrorElements[i][0]).id,inlineErrorElements[i][1],"error");
  597. }else{
  598. alert(inlineErrorElements[i][1]);
  599. }
  600. }
  601. JQuery(prompt).mouseover(
  602. function(){
  603. var inlineError = JQuery(this).attr("class").split(" ");
  604. if(inlineError && inlineError.length && inlineError.length == 2){
  605. var result = inlineError[1].split("formError");
  606. if(result && result.length && result.length >= 1){
  607. JQuery.bfvalidationEngine.closePrompt("#"+result[0]);
  608. }
  609. }
  610. }
  611. );
  612. }
  613. else
  614. {
  615. if(typeof JQuery("#flashUpload"+inlineErrorElements[i][0]).get(0) != "undefined")
  616. {
  617. JQuery.bfvalidationEngine.closePrompt("#"+JQuery("#flashUpload"+inlineErrorElements[i][0]).val());
  618. }
  619. else
  620. {
  621. if(ff_getElementByName(inlineErrorElements[i][0])){
  622. JQuery.bfvalidationEngine.closePrompt("#"+ff_getElementByName(inlineErrorElements[i][0]).id);
  623. }
  624. }
  625. }
  626. }
  627. inlineErrorElements = new Array();
  628. }
  629. }');
  630. }
  631. if($this->fading){
  632. $this->fadingClass = ' bfFadingClass';
  633. $this->fadingCall = 'bfFade();';
  634. JFactory::getDocument()->addScriptDeclaration('
  635. function bfFade(){
  636. JQuery(".bfPageIntro").fadeIn(1000);
  637. var size = 0;
  638. JQuery(".bfFadingClass").each(function(i,val){
  639. var t = this;
  640. setTimeout(function(){JQuery(t).fadeIn(1000)}, (i*100));
  641. size = i;
  642. });
  643. setTimeout(\'JQuery(".bfSubmitButton").fadeIn(1000)\', size * 100);
  644. setTimeout(\'JQuery(".bfPrevButton").fadeIn(1000)\', size * 100);
  645. setTimeout(\'JQuery(".bfNextButton").fadeIn(1000)\', size * 100);
  646. setTimeout(\'JQuery(".bfCancelButton").fadeIn(1000)\', size * 100);
  647. }
  648. ');
  649. }
  650. if($this->rollover && trim($this->rolloverColor) != ''){
  651. JFactory::getDocument()->addScriptDeclaration('
  652. var bfElemWrapBg = "";
  653. function bfSetElemWrapBg(){
  654. bfElemWrapBg = JQuery(".bfElemWrap").css("background-color");
  655. }
  656. function bfRollover() {
  657. JQuery(".ff_elem").focus(
  658. function(){
  659. var parent = JQuery(this).parent();
  660. if(parent && parent.attr("class").substr(0, 10) == "bfElemWrap"){
  661. parent.css("background","'.$this->rolloverColor.'");
  662. } else {
  663. parent = JQuery(this).parent().parent();
  664. parent.css("background","'.$this->rolloverColor.'");
  665. }
  666. parent.addClass("bfRolloverBg");
  667. }
  668. ).blur(
  669. function(){
  670. var parent = JQuery(this).parent();
  671. if(parent && parent.attr("class").substr(0, 10) == "bfElemWrap"){
  672. parent.css("background",bfElemWrapBg);
  673. } else {
  674. parent = JQuery(this).parent().parent();
  675. parent.css("background",bfElemWrapBg);
  676. }
  677. parent.removeClass("bfRolloverBg");
  678. }
  679. );
  680. }
  681. function bfRollover2() {
  682. JQuery(".bfElemWrap").mouseover(
  683. function(){
  684. JQuery(this).css("background","'.$this->rolloverColor.'");
  685. JQuery(this).addClass("bfRolloverBg");
  686. }
  687. );
  688. JQuery(".bfElemWrap").mouseout(
  689. function(){
  690. JQuery(this).css("background",bfElemWrapBg);
  691. JQuery(this).removeClass("bfRolloverBg");
  692. }
  693. );
  694. }
  695. ');
  696. }
  697. }
  698. JFactory::getDocument()->addScriptDeclaration('
  699. JQuery(document).ready(function() {
  700. if(typeof bfFade != "undefined")bfFade();
  701. if(typeof bfSetElemWrapBg != "undefined")bfSetElemWrapBg();
  702. if(typeof bfRollover != "undefined")bfRollover();
  703. if(typeof bfRollover2 != "undefined")bfRollover2();
  704. if(typeof bfRegisterToggleFields != "undefined")bfRegisterToggleFields();
  705. if(typeof bfDeactivateSectionFields != "undefined")bfDeactivateSectionFields();
  706. if(JQuery.bfvalidationEngine)
  707. {
  708. JQuery.bfvalidationEngineLanguage.newLang();
  709. JQuery(".ff_elem").change(
  710. function(){
  711. JQuery.bfvalidationEngine.closePrompt(this);
  712. }
  713. );
  714. }
  715. JQuery(".hasTip").css("color","inherit"); // fixing label text color issue
  716. JQuery(".bfTooltip").css("color","inherit"); // fixing label text color issue
  717. JQuery("input[type=text]").bind("keypress", function(evt) {
  718. if(evt.keyCode == 13) {
  719. evt.preventDefault();
  720. }
  721. });
  722. });
  723. ');
  724. // loading system css
  725. JFactory::getDocument()->addStyleSheet( JURI::root(true) . '/components/com_breezingforms/themes/quickmode/system.css' );
  726. if(method_exists($obj = JFactory::getDocument(), 'addCustomTag')){
  727. $stylelink = '<!--[if IE 7]>' ."\n";
  728. $stylelink .= '<link rel="stylesheet" href="'.JURI::root(true) . '/components/com_breezingforms/themes/quickmode/system.ie7.css" />' ."\n";
  729. $stylelink .= '<![endif]-->' ."\n";
  730. JFactory::getDocument()->addCustomTag($stylelink);
  731. $stylelink = '<!--[if IE 6]>' ."\n";
  732. $stylelink .= '<link rel="stylesheet" href="'.JURI::root(true) . '/components/com_breezingforms/themes/quickmode/system.ie6.css" />' ."\n";
  733. $stylelink .= '<![endif]-->' ."\n";
  734. JFactory::getDocument()->addCustomTag($stylelink);
  735. $stylelink = '<!--[if IE]>' ."\n";
  736. $stylelink .= '<link rel="stylesheet" href="'.JURI::root(true) . '/components/com_breezingforms/themes/quickmode/system.ie.css" />' ."\n";
  737. $stylelink .= '<![endif]-->' ."\n";
  738. JFactory::getDocument()->addCustomTag($stylelink);
  739. }
  740. // loading theme
  741. $this->cancelImagePath = JURI::root(true) . '/media/breezingforms/themes/cancel.png';
  742. $this->uploadImagePath = JURI::root(true) . '/media/breezingforms/themes/upload.png';
  743. if($this->rootMdata['theme'] != 'none' && @file_exists(JPATH_SITE .'/media/breezingforms/themes/'. $this->rootMdata['theme'].'/theme.css')){
  744. JFactory::getDocument()->addStyleSheet( JURI::root(true) . '/media/breezingforms/themes/'. $this->rootMdata['theme'].'/theme.css' );
  745. if(@file_exists(JPATH_SITE .'/media/breezingforms/themes/'. $this->rootMdata['theme'].'/img/cancel.png')){
  746. $this->cancelImagePath = JURI::root(true) . '/media/breezingforms/themes/'. $this->rootMdata['theme'].'/img/cancel.png';
  747. }
  748. if(@file_exists(JPATH_SITE .'/media/breezingforms/themes/'. $this->rootMdata['theme'].'/img/upload.png')){
  749. $this->uploadImagePath = JURI::root(true) . '/media/breezingforms/themes/'. $this->rootMdata['theme'].'/img/upload.png';
  750. }
  751. }
  752. }
  753. public function process(&$dataObject, $parent = null, $parentPage = null, $index = 0, $childrenLength = 0){
  754. if(isset($dataObject['attributes']) && isset($dataObject['properties']) ){
  755. $options = array('type' => 'normal', 'displayType' => 'breaks');
  756. if($parent != null && $parent['type'] == 'section'){
  757. $options['type'] = $parent['bfType'];
  758. $options['displayType'] = $parent['displayType'];
  759. }
  760. $class = ' class="bfBlock'.$this->fadingClass.'"';
  761. $wrapper = 'bfWrapperBlock';
  762. if($options['displayType'] == 'inline'){
  763. $class = ' class="bfInline'.$this->fadingClass.'"';
  764. $wrapper = 'bfWrapperInline';
  765. }
  766. $mdata = $dataObject['properties'];
  767. if($mdata['type'] == 'page'){
  768. $parentPage = $mdata;
  769. if($parentPage['pageNumber'] > 1){
  770. echo '</div><!-- bfPage end -->'."\n"; // closing previous pages
  771. }
  772. echo '<div id="bfPage'.$parentPage['pageNumber'].'" class="bfPage" style="display:none">'."\n"; // opening current page
  773. if(trim($mdata['pageIntro'])!=''){
  774. echo '<p class="bfPageIntro'.$this->fadingClass.'">'."\n";
  775. $regex = '/{loadposition\s+(.*?)}/i';
  776. $introtext = $mdata['pageIntro'];
  777. preg_match_all($regex, $introtext, $matches, PREG_SET_ORDER);
  778. jimport('joomla.version');
  779. $version = new JVersion();
  780. if ($matches && version_compare($version->getShortVersion(), '1.6', '>=')) {
  781. $document = JFactory::getDocument();
  782. $renderer = $document->loadRenderer('modules');
  783. $options = array('style' => 'xhtml');
  784. foreach ($matches as $match) {
  785. $matcheslist = explode(',', $match[1]);
  786. $position = trim($matcheslist[0]);
  787. $output = $renderer->render($position, $options, null);
  788. $introtext = preg_replace("|$match[0]|", addcslashes($output, '\\'), $introtext, 1);
  789. }
  790. }
  791. echo $introtext."\n";
  792. echo '</p>'."\n";
  793. }
  794. if(!$this->useErrorAlerts){
  795. echo '<span class="bfErrorMessage" style="display:none"></span>'."\n";
  796. }
  797. } else if($mdata['type'] == 'section'){
  798. if(isset($dataObject['properties']['name']) && isset($mdata['off']) && $mdata['off']){
  799. echo '<script type="text/javascript"><!--'."\n".'bfDeactivateSection.push("'.$dataObject['properties']['name'].'");'."\n".'//--></script>'."\n";
  800. }
  801. if($mdata['bfType'] == 'section'){
  802. echo '<div class="bfFieldset-wrapper '.$wrapper.' bfClearfix"><div class="bfFieldset-tl"><div class="bfFieldset-tr"><div class="bfFieldset-t"></div></div></div><div class="bfFieldset-l"><div class="bfFieldset-r"><div class="bfFieldset-m bfClearfix"><fieldset'.(isset($mdata['off']) && $mdata['off'] ? ' style="display:none" ' : '').''.(isset($mdata['off']) && $mdata['off'] ? '' : $class).''.(isset($dataObject['properties']['name']) && $dataObject['properties']['name'] != "" ? ' id="'.$dataObject['properties']['name'].'"' : '').'>'."\n";
  803. if(trim($mdata['title']) != ''){
  804. echo '<legend><span class="bfLegend-l"><span class="bfLegend-r"><span class="bfLegend-m">'.htmlentities(trim($mdata['title']), ENT_QUOTES, 'UTF-8').'</span></span></span></legend>'."\n";
  805. }
  806. }
  807. else if( $mdata['bfType'] == 'normal' ) {
  808. if(isset($dataObject['properties']['name']) && $dataObject['properties']['name'] != ''){
  809. echo '<div '.(isset($mdata['off']) && $mdata['off'] ? 'style="display:none" ' : '').'class="bfNoSection"'.(isset($dataObject['properties']['name']) && $dataObject['properties']['name'] != "" ? ' id="'.$dataObject['properties']['name'].'"' : '').'>'."\n";
  810. }
  811. }
  812. if(trim($mdata['description'])!=''){
  813. echo '<p class="bfSectionDescription">'."\n";
  814. $regex = '/{loadposition\s+(.*?)}/i';
  815. $introtext = $mdata['description'];
  816. preg_match_all($regex, $introtext, $matches, PREG_SET_ORDER);
  817. jimport('joomla.version');
  818. $version = new JVersion();
  819. if ($matches && version_compare($version->getShortVersion(), '1.6', '>=')) {
  820. $document = JFactory::getDocument();
  821. $renderer = $document->loadRenderer('modules');
  822. $options = array('style' => 'xhtml');
  823. foreach ($matches as $match) {
  824. $matcheslist = explode(',', $match[1]);
  825. $position = trim($matcheslist[0]);
  826. $output = $renderer->render($position, $options, null);
  827. $introtext = preg_replace("|$match[0]|", addcslashes($output, '\\'), $introtext, 1);
  828. }
  829. }
  830. echo $introtext."\n";
  831. echo '</p>'."\n";
  832. }
  833. } else if($mdata['type'] == 'element'){
  834. $onclick = '';
  835. if($mdata['actionClick'] == 1){
  836. $onclick = 'onclick="'.$mdata['actionFunctionName'] . '(this,\'click\');" ';
  837. }
  838. $onblur = '';
  839. if($mdata['actionBlur'] == 1){
  840. $onblur = 'onblur="'.$mdata['actionFunctionName'] . '(this,\'blur\');" ';
  841. }
  842. $onchange = '';
  843. if($mdata['actionChange'] == 1){
  844. $onchange = 'onchange="'.$mdata['actionFunctionName'] . '(this,\'change\');" ';
  845. }
  846. $onfocus = '';
  847. if($mdata['actionFocus'] == 1){
  848. $onfocus = 'onfocus="'.$mdata['actionFunctionName'] . '(this,\'focus\');" ';
  849. }
  850. $onselect = '';
  851. if(isset($mdata['actionSelect']) && $mdata['actionSelect'] == 1){
  852. $onselect = 'onselect="'.$mdata['actionFunctionName'] . '(this,\'select\');" ';
  853. }
  854. if($mdata['bfType'] != 'bfHidden'){
  855. $labelPosition = '';
  856. switch($mdata['labelPosition']){
  857. case 'top':
  858. $labelPosition = ' bfLabelTop';
  859. break;
  860. case 'right':
  861. $labelPosition = ' bfLabelRight';
  862. break;
  863. case 'bottom':
  864. $labelPosition = ' bfLabelBottom';
  865. break;
  866. default:
  867. $labelPosition = ' bfLabelLeft';
  868. }
  869. if($options['displayType'] == 'breaks'){
  870. echo '<p '.(isset($mdata['off']) && $mdata['off'] ? 'style="display:none" ' : '').'class="bfElemWrap'.$labelPosition.(isset($mdata['off']) && $mdata['off'] ? '' : $this->fadingClass).'" id="bfElemWrap'.$mdata['dbId'].'">'."\n";
  871. } else {
  872. echo '<span '.(isset($mdata['off']) && $mdata['off'] ? 'style="display:none" ' : '').'class="bfElemWrap'.$labelPosition.(isset($mdata['off']) && $mdata['off'] ? '' : $this->fadingClass).'" id="bfElemWrap'.$mdata['dbId'].'">'."\n";
  873. }
  874. }
  875. if(!$mdata['hideLabel']){
  876. $maxlengthCounter = '';
  877. if($mdata['bfType'] == 'bfTextarea' && isset($mdata['maxlength']) && $mdata['maxlength'] > 0 && isset($mdata['showMaxlengthCounter']) && $mdata['showMaxlengthCounter']){
  878. $maxlengthCounter = ' <span class=***bfMaxLengthCounter*** id=***bfMaxLengthCounter'.$mdata['dbId'].'***>('.$mdata['maxlength'].' '.BFText::_('COM_BREEZINGFORMS_CHARS_LEFT').')</span>';
  879. }
  880. $tipScript = '';
  881. $tipOpen = '';
  882. $tipClose = '';
  883. $labelText = trim($mdata['label']) . str_replace("***","\"",$maxlengthCounter);
  884. if(trim($mdata['hint']) != ''){
  885. jimport('joomla.version');
  886. $version = new JVersion();
  887. if(!version_compare($version->getShortVersion(), '3.0', '>=') && isset($this->rootMdata['joomlaHint']) && $this->rootMdata['joomlaHint']){
  888. JHTML::_('behavior.tooltip');
  889. $content = trim($mdata['hint']);
  890. $tipOpen = '<span title="'.addslashes(trim($mdata['label'])).'::'.str_replace( array("\n","\r"), array("",""), htmlentities($content, ENT_QUOTES, 'UTF-8')).'" class="editlinktip hasTip">';
  891. $tipClose = '</span>';
  892. $tipScript = '';
  893. } else {
  894. $tipOpen = '<span id="bfTooltip'.$mdata['dbId'].'" class="bfTooltip">';
  895. $tipClose = '</span>';
  896. $style = ',style: {tip: !JQuery.browser.ie, background: "#ffc", color: "#000000", border : { color: "#C0C0C0", width: 1 }, name: "cream" }';
  897. $content = trim($mdata['hint']);
  898. $explodeHint = explode('<<<style',trim($mdata['hint']));
  899. if(count($explodeHint) > 1 && trim($explodeHint[0]) != ''){
  900. $style = ',style: {tip: !JQuery.browser.ie,' . trim($explodeHint[0]) . '}'; // assuming style entry
  901. $content = trim($explodeHint[1]);
  902. }
  903. $tipScript = '<script type="text/javascript"><!--'."\n".'JQuery(document).ready(function() {JQuery("#bfLabel'.$mdata['dbId'].'").qtip({ position: { adjust: { screen: true } }, content: "<div class=\"bfToolTipLabel\"><b>'.addslashes(trim($mdata['label'])).'</b><div/>'.str_replace( array("\n","\r"), array("\\n",""), addslashes($content) ).'"'.$style.' });});'."\n".'//--></script>';
  904. }
  905. }
  906. $for = 'for="ff_elem'.$mdata['dbId'].'"';
  907. if($mdata['bfType'] == 'bfCaptcha'){
  908. $for = 'for="bfCaptchaEntry"';
  909. }
  910. else if($mdata['bfType'] == 'bfReCaptcha'){
  911. $for = 'for="recaptcha_response_field"';
  912. }
  913. echo '<label id="bfLabel'.$mdata['dbId'].'" '.$for.'>'.$tipOpen.str_replace("***","\"",$labelText).$tipClose.'</label>'.$tipScript."\n";
  914. }
  915. $readonly = '';
  916. if($mdata['readonly']){
  917. $readonly = 'readonly="readonly" ';
  918. }
  919. $tabIndex = '';
  920. if($mdata['tabIndex'] != -1 && is_numeric($mdata['tabIndex'])){
  921. $tabIndex = 'tabindex="'.intval($mdata['tabIndex']).'" ';
  922. }
  923. for($i = 0; $i < $this->p->rowcount; $i++) {
  924. $row = $this->p->rows[$i];
  925. if($mdata['bfName'] == $row->name){
  926. if( ( isset($mdata['value']) || isset($mdata['list']) || isset($mdata['group']))
  927. &&
  928. (
  929. $mdata['bfType'] == 'bfTextfield' ||
  930. $mdata['bfType'] == 'bfTextarea' ||
  931. $mdata['bfType'] == 'bfCheckbox' ||
  932. $mdata['bfType'] == 'bfCheckboxGroup' ||
  933. $mdata['bfType'] == 'bfSubmitButton' ||
  934. $mdata['bfType'] == 'bfHidden' ||
  935. $mdata['bfType'] == 'bfCalendar' ||
  936. $mdata['bfType'] == 'bfSelect' ||
  937. $mdata['bfType'] == 'bfRadioGroup'
  938. )
  939. ){
  940. if($mdata['bfType'] == 'bfSelect')
  941. {
  942. $mdata['list'] = $this->p->replaceCode($row->data2, "data2 of " . $mdata['bfName'], 'e', $mdata['dbId'], 0);
  943. }
  944. else if($mdata['bfType'] == 'bfCheckboxGroup' || $mdata['bfType'] == 'bfRadioGroup')
  945. {
  946. $mdata['group'] = $this->p->replaceCode($row->data2, "data2 of " . $mdata['bfName'], 'e', $mdata['dbId'], 0);
  947. }
  948. else
  949. {
  950. $mdata['value'] = $this->p->replaceCode($row->data1, "data1 of " . $mdata['bfName'], 'e', $mdata['dbId'], 0);
  951. }
  952. }
  953. if(isset($mdata['checked']) && $mdata['bfType'] == 'bfCheckbox'){
  954. $mdata['checked'] = $row->flag1 == 1 ? true : false;
  955. }
  956. break;
  957. }
  958. }
  959. $flashUploader = '';
  960. switch($mdata['bfType']){
  961. case 'bfTextfield':
  962. $type = 'text';
  963. if($mdata['password']){
  964. $type = 'password';
  965. }
  966. $maxlength = '';
  967. if(is_numeric($mdata['maxLength'])){
  968. $maxlength = 'maxlength="'.intval($mdata['maxLength']).'" ';
  969. }
  970. $size = '';
  971. if($mdata['size']!=''){
  972. $size = 'style="width:'.htmlentities(strip_tags($mdata['size'])).'" ';
  973. }
  974. echo '<input class="ff_elem" '.$size.$tabIndex.$maxlength.$onclick.$onblur.$onchange.$onfocus.$onselect.$readonly.'type="'.$type.'" name="ff_nm_'.$mdata['bfName'].'[]" value="'.htmlentities(trim($mdata['value']), ENT_QUOTES, 'UTF-8').'" id="ff_elem'.$mdata['dbId'].'"/>'."\n";
  975. if($mdata['mailbackAsSender']){
  976. echo '<input type="hidden" name="mailbackSender['.$mdata['bfName'].']" value="true"/>'."\n";
  977. }
  978. break;
  979. case 'bfTextarea':
  980. $width = '';
  981. if($mdata['width']!=''){
  982. $width = 'width:'.htmlentities(strip_tags($mdata['width'])).';';
  983. }
  984. $height = '';
  985. if($mdata['height']!=''){
  986. $height = 'height:'.htmlentities(strip_tags($mdata['height'])).';';
  987. }
  988. $size = '';
  989. if($height != '' || $width != ''){
  990. $size = 'style="'.$width.$height.'" ';
  991. }
  992. $onkeyup = '';
  993. if(isset($mdata['maxlength']) && $mdata['maxlength'] > 0){
  994. $onkeyup = 'onkeyup="bfCheckMaxlength('.intval($mdata['dbId']).', '.intval($mdata['maxlength']).', '.(isset($mdata['showMaxlengthCounter']) && $mdata['showMaxlengthCounter'] ? 'true' : 'false').')" ';
  995. }
  996. if( isset($mdata['is_html']) && $mdata['is_html'] ){
  997. JImport( 'joomla.html.editor' );
  998. $editor = JFactory::getEditor();
  999. $this->htmltextareas[] = 'ff_nm_'.$mdata['bfName'].'[]';
  1000. echo '<div>'.$editor->display('ff_nm_'.$mdata['bfName'].'[]',htmlentities(trim($mdata['value']), ENT_QUOTES, 'UTF-8'), strip_tags($mdata['width']), strip_tags($mdata['height']), '75', '20').'</div>';
  1001. /*echo '
  1002. <script type="text/javascript">
  1003. <!--
  1004. JQuery(document).ready(
  1005. function() {
  1006. JQuery("[name=\"ff_nm_'.$mdata['bfName'].'[]\"]").css("border","000000");
  1007. });
  1008. //-->
  1009. </script>';*/
  1010. } else {
  1011. echo '<textarea cols="20" rows="5" class="ff_elem" '.$onkeyup.$size.$tabIndex.$onclick.$onblur.$onchange.$onfocus.$onselect.$readonly.'name="ff_nm_'.$mdata['bfName'].'[]" id="ff_elem'.$mdata['dbId'].'">'.htmlentities(trim($mdata['value']), ENT_QUOTES, 'UTF-8').'</textarea>'."\n";
  1012. }
  1013. break;
  1014. case 'bfRadioGroup':
  1015. if($mdata['group'] != ''){
  1016. $wrapOpen = '';
  1017. $wrapClose = '';
  1018. if(!$mdata['wrap']){
  1019. $wrapOpen = '<span class="bfElementGroupNoWrap" id="bfElementGroupNoWrap'.$mdata['dbId'].'">'."\n";
  1020. $wrapClose = '</span>'."\n";
  1021. } else {
  1022. $wrapOpen = '<span class="bfElementGroup" id="bfElementGroup'.$mdata['dbId'].'">'."\n";
  1023. $wrapClose = '</span>'."\n";
  1024. }
  1025. $mdata['group'] = str_replace("\r", '', $mdata['group']);
  1026. $gEx = explode("\n", $mdata['group']);
  1027. $lines = count($gEx);
  1028. echo $wrapOpen;
  1029. for($i = 0; $i < $lines; $i++){
  1030. $idExt = $i != 0 ? '_'.$i : '';
  1031. $iEx = explode(";", $gEx[$i]);
  1032. $iCnt = count($iEx);
  1033. if($iCnt == 3){
  1034. $lblRight = '<label class="bfGroupLabel" id="bfGroupLabel'.$mdata['dbId'].$idExt.'" for="ff_elem'.$mdata['dbId'].$idExt.'">'.htmlentities(trim($iEx[1]), ENT_QUOTES, 'UTF-8').'</label>';
  1035. $lblLeft = '';
  1036. if($mdata['labelPosition'] == 'right'){
  1037. $lblLeft = $lblRight;
  1038. $lblRight = '';
  1039. }
  1040. echo $lblLeft . '<input '.($iEx[0] == 1 ? 'checked="checked" ' : '').' class="ff_elem" '.$tabIndex.$onclick.$onblur.$onchange.$onfocus.$onselect.$readonly.'type="radio" name="ff_nm_'.$mdata['bfName'].'[]" value="'.htmlentities(trim($iEx[2]), ENT_QUOTES, 'UTF-8').'" id="ff_elem'.$mdata['dbId'].$idExt.'"/>'.$lblRight."\n";
  1041. if($mdata['wrap']){
  1042. echo '<br/>'."\n";
  1043. }
  1044. }
  1045. }
  1046. echo $wrapClose;
  1047. }
  1048. break;
  1049. case 'bfCheckboxGroup':
  1050. if($mdata['group'] != ''){
  1051. $wrapOpen = '';
  1052. $wrapClose = '';
  1053. if(!$mdata['wrap']){
  1054. $wrapOpen = '<span class="bfElementGroupNoWrap" id="bfElementGroupNoWrap'.$mdata['dbId'].'">'."\n";
  1055. $wrapClose = '</span>'."\n";
  1056. } else {
  1057. $wrapOpen = '<span class="bfElementGroup" id="bfElementGroup'.$mdata['dbId'].'">'."\n";
  1058. $wrapClose = '</span>'."\n";
  1059. }
  1060. $mdata['group'] = str_replace("\r", '', $mdata['group']);
  1061. $gEx = explode("\n", $mdata['group']);
  1062. $lines = count($gEx);
  1063. echo $wrapOpen;
  1064. for($i = 0; $i < $lines; $i++){
  1065. $idExt = $i != 0 ? '_'.$i : '';
  1066. $iEx = explode(";", $gEx[$i]);
  1067. $iCnt = count($iEx);
  1068. if($iCnt == 3){
  1069. $lblRight = '<label class="bfGroupLabel" id="bfGroupLabel'.$mdata['dbId'].$idExt.'" for="ff_elem'.$mdata['dbId'].$idExt.'">'.htmlentities(trim($iEx[1]), ENT_QUOTES, 'UTF-8').'</label>';
  1070. $lblLeft = '';
  1071. if($mdata['labelPosition'] == 'right'){
  1072. $lblLeft = $lblRight;
  1073. $lblRight = '';
  1074. }
  1075. echo $lblLeft . '<input '.($iEx[0] == 1 ? 'checked="checked" ' : '').' class="ff_elem" '.$tabIndex.$onclick.$onblur.$onchange.$onfocus.$onselect.$readonly.'type="checkbox" name="ff_nm_'.$mdata['bfName'].'[]" value="'.htmlentities(trim($iEx[2]), ENT_QUOTES, 'UTF-8').'" id="ff_elem'.$mdata['dbId'].$idExt.'"/>'.$lblRight."\n";
  1076. if($mdata['wrap']){
  1077. echo '<br/>'."\n";
  1078. }
  1079. }
  1080. }
  1081. echo $wrapClose;
  1082. }
  1083. break;
  1084. case 'bfCheckbox':
  1085. echo '<input class="ff_elem" '.($mdata['checked'] ? 'checked="checked" ' : '').$tabIndex.$onclick.$onblur.$onchange.$onfocus.$onselect.$readonly.'type="checkbox" name="ff_nm_'.$mdata['bfName'].'[]" value="'.htmlentities(trim($mdata['value']), ENT_QUOTES, 'UTF-8').'" id="ff_elem'.$mdata['dbId'].'"/>'."\n";
  1086. if($mdata['mailbackAccept']){
  1087. echo '<input type="hidden" class="ff_elem" name="mailbackConnectWith['.$mdata['mailbackConnectWith'].']" value="true_'.$mdata['bfName'].'"/>'."\n";
  1088. }
  1089. break;
  1090. case 'bfSelect':
  1091. if($mdata['list'] != ''){
  1092. $width = '';
  1093. if(isset($mdata['width']) && $mdata['width']!=''){
  1094. $width = 'width:'.htmlentities(strip_tags($mdata['width'])).';';
  1095. }
  1096. $height = '';
  1097. if(isset($mdata['height']) && $mdata['height']!=''){
  1098. $height = 'height:'.htmlentities(strip_tags($mdata['height'])).';';
  1099. }
  1100. $size = '';
  1101. if($height != '' || $width != ''){
  1102. $size = 'style="'.$width.$height.'" ';
  1103. }
  1104. $mdata['list'] = str_replace("\r", '', $mdata['list']);
  1105. $gEx = explode("\n", $mdata['list']);
  1106. $lines = count($gEx);
  1107. echo '<select class="ff_elem" '.$size.($mdata['multiple'] ? 'multiple="multiple" ' : '').$tabIndex.$onclick.$onblur.$onchange.$onfocus.$onselect.$readonly.'name="ff_nm_'.$mdata['bfName'].'[]" id="ff_elem'.$mdata['dbId'].'">'."\n";
  1108. for($i = 0; $i < $lines; $i++){
  1109. $iEx = explode(";", $gEx[$i]);
  1110. $iCnt = count($iEx);
  1111. if($iCnt == 3){
  1112. echo '<option '.($iEx[0] == 1 ? 'selected="selected" ' : '').'value="'.htmlentities(trim($iEx[2]), ENT_QUOTES, 'UTF-8').'">'.htmlentities(trim($iEx[1]), ENT_QUOTES, 'UTF-8').'</option>'."\n";
  1113. }
  1114. }
  1115. echo '</select>'."\n";
  1116. }
  1117. break;
  1118. case 'bfFile':
  1119. echo '<input class="ff_elem" '.$tabIndex.$onclick.$onblur.$onchange.$onfocus.$onselect.$readonly.'type="file" name="ff_nm_'.$mdata['bfName'].'[]" id="ff_elem'.$mdata['dbId'].'"/>'."\n";
  1120. if(isset( $mdata['flashUploader'] ) && $mdata['flashUploader']){
  1121. echo '<input type="hidden" id="flashUpload'.$mdata['bfName'].'" name="flashUpload'.$mdata['bfName'].'" value="bfFlashFileQueue'.$mdata['dbId'].'"/>'."\n";
  1122. $this->hasFlashUpload = true;
  1123. //allowedFileExtensions
  1124. $allowedExts = explode(',',$mdata['allowedFileExtensions']);
  1125. $allowedExtsCnt = count($allowedExts);
  1126. for($i = 0; $i < $allowedExtsCnt;$i++){
  1127. $allowedExts[$i] = '*.'.$allowedExts[$i];
  1128. }
  1129. $exts = '';
  1130. if($allowedExtsCnt != 0){
  1131. $exts = ',fileExt: "'.implode(';',$allowedExts).'", fileDesc: "'.addslashes(str_replace(array("'",'"',"\n","\r"),'',BFText::_('COM_BREEZINGFORMS_CHOOSE_FILE'))).'"';
  1132. }
  1133. $flashUploader = "
  1134. <span class=\"bfFlashFileQueueClass\" id=\"bfFlashFileQueue".$mdata['dbId']."\"></span>
  1135. <script type=\"text/javascript\">
  1136. <!--
  1137. bfFlashUploaders.push('ff_elem".$mdata['dbId']."');
  1138. var bfFlashFileQueue".$mdata['dbId']." = {};
  1139. var bfUploadified_ff_elem".$mdata['dbId']." = {
  1140. 'scriptAccess' : 'always',
  1141. 'buttonImg' : '".$this->uploadImagePath."',
  1142. 'width' : ".(isset($mdata['flashUploaderWidth']) && is_numeric($mdata['flashUploaderWidth']) && $mdata['flashUploaderWidth'] > 0 ? intval($mdata['flashUploaderWidth']) : '64').",
  1143. 'height' : ".(isset($mdata['flashUploaderHeight']) && is_numeric($mdata['flashUploaderHeight']) && $mdata['flashUploaderHeight'] > 0 ? intval($mdata['flashUploaderHeight']) : '64').",
  1144. ". ( isset($mdata['flashUploaderTransparent']) && $mdata['flashUploaderTransparent'] ? "'wmode' : 'transparent'," : '' ) ."
  1145. 'uploader' : '".JURI::root(true)."/components/com_breezingforms/libraries/jquery/uploadify.swf',
  1146. 'script' : '".JURI::root(true).(BFJoomlaConfig::get('config.sef') && !BFJoomlaConfig::get('config.sef_rewrite') ? '/index.php/' : '/').(JRequest::getCmd('lang','') && BFJoomlaConfig::get('config.sef') ? JRequest::getCmd('lang','') . ( BFJoomlaConfig::get('config.sef_rewrite') ? '/index.php' : '/' ) : 'index.php')."',
  1147. 'cancelImg' : '".$this->cancelImagePath."',
  1148. 'queueID' : 'bfFileQueue',
  1149. 'auto' : false,
  1150. 'multi' : ".( isset($mdata['flashUploaderMulti']) && $mdata['flashUploaderMulti'] ? 'true' : 'false' ).",
  1151. 'buttonText' : ' ',
  1152. 'onSelect' : function(event, queueID, fileObj){
  1153. bfFlashUploadersLength++;
  1154. var tooLarge = '';
  1155. var thebytes = ".(isset($mdata['flashUploaderBytes']) && is_numeric($mdata['flashUploaderBytes']) && $mdata['flashUploaderBytes'] > 0 ? intval($mdata['flashUploaderBytes']) : '0').";
  1156. if(thebytes > 0 && fileObj.size > thebytes){
  1157. bfFlashUploadTooLarge[queueID] = '#ff_elem".$mdata['dbId']."';
  1158. tooLarge = ' (".addslashes(BFText::_('COM_BREEZINGFORMS_FLASH_UPLOADER_TOO_LARGE')).")';
  1159. }
  1160. bfFlashUploadAll[queueID] = '#ff_elem".$mdata['dbId']."';
  1161. bfFlashFileQueue".$mdata['dbId']."[queueID] = {fname: fileObj.name, tooLarge: tooLarge};
  1162. JQuery('#bfFlashFileQueue".$mdata['dbId']."').html( JQuery('#bfFlashFileQueue".$mdata['dbId']."').html() + '<br/>' + '<a href=\"javascript:JQuery(\'#ff_elem".$mdata['dbId']."\').uploadifyCancel(\''+queueID+'\')\"><img src=\"".$this->cancelImagePath."\" border=\"0\"/></a>&nbsp;' + fileObj.name + tooLarge);
  1163. },
  1164. 'onCancel' : function(event, queueID, fileObj){
  1165. if(bfFlashUploadersLength > 0) bfFlashUploadersLength--;
  1166. delete bfFlashFileQueue".$mdata['dbId']."[queueID];
  1167. delete bfFlashUploadTooLarge[queueID];
  1168. delete bfFlashUploadAll[queueID];
  1169. JQuery('#bfFlashFileQueue".$mdata['dbId']."').html('');
  1170. for(qID in bfFlashFileQueue".$mdata['dbId']."){
  1171. JQuery('#bfFlashFileQueue".$mdata['dbId']."').html( JQuery('#bfFlashFileQueue".$mdata['dbId']."').html() + '<br/>' + '<a href=\"javascript:JQuery(\'#ff_elem".$mdata['dbId']."\').uploadifyCancel(\''+qID+'\')\"><img src=\"".$this->cancelImagePath."\" border=\"0\"/></a>&nbsp;' + bfFlashFileQueue".$mdata['dbId']."[qID].fname + bfFlashFileQueue".$mdata['dbId']."[qID].tooLarge );
  1172. }
  1173. },
  1174. 'scriptData' : { form: ".$this->p->form.", itemName : '".$mdata['bfName']."', bfFlashUploadTicket: '".$this->flashUploadTicket."', option: 'com_breezingforms', format: 'html', flashUpload: 'true', Itemid: 0 },
  1175. //'onError' : function(e,q,f,err) {alert(err.info)},
  1176. 'onComplete' : function(event, queueID, fileObj, response, data){ if(response!='1')alert( response ) }
  1177. ".$exts."
  1178. };
  1179. JQuery('#ff_elem".$mdata['dbId']."').uploadify(bfUploadified_ff_elem".$mdata['dbId'].");
  1180. //-->
  1181. </script>
  1182. ";
  1183. }
  1184. if($mdata['attachToAdminMail']){
  1185. echo '<input type="hidden" name="attachToAdminMail['.$mdata['bfName'].']" value="true"/>'."\n";
  1186. }
  1187. if($mdata['attachToUserMail']){
  1188. echo '<input type="hidden" name="attachToUserMail['.$mdata['bfName'].']" value="true"/>'."\n";
  1189. }
  1190. break;
  1191. case 'bfSubmitButton':
  1192. $value = '';
  1193. $type = 'submit';
  1194. $src = '';
  1195. if($mdata['src'] != ''){
  1196. $type = 'image';
  1197. $src = 'src="'.$mdata['src'].'" ';
  1198. }
  1199. if($mdata['value'] != ''){
  1200. $value = 'value="'.htmlentities(trim($mdata['value']), ENT_QUOTES, 'UTF-8').'" ';
  1201. }
  1202. if($mdata['actionClick'] == 1){
  1203. $onclick = 'onclick="if(typeof bf_htmltextareainit != \'undefined\'){ bf_htmltextareainit() }populateSummarizers();if(document.getElementById(\'bfPaymentMethod\')){document.getElementById(\'bfPaymentMethod\').value=\'\';};'.$mdata['actionFunctionName'] . '(this,\'click\');return false;" ';
  1204. } else {
  1205. $onclick = 'onclick="if(typeof bf_htmltextareainit != \'undefined\'){ bf_htmltextareainit() }populateSummarizers();if(document.getElementById(\'bfPaymentMethod\')){document.getElementById(\'bfPaymentMethod\').value=\'\';};return false;" ';
  1206. }
  1207. if($src == ''){
  1208. echo '<button class="ff_elem" '.$value.$src.$tabIndex.$onclick.$onblur.$onchange.$onfocus.$onselect.$readonly.'type="'.$type.'" name="ff_nm_'.$mdata['bfName'].'[]" id="ff_elem'.$mdata['dbId'].'"><span>'.$mdata['value'].'</span></button>'."\n";
  1209. }else{
  1210. echo '<input class="ff_elem" '.$value.$src.$tabIndex.$onclick.$onblur.$onchange.$onfocus.$onselect.$readonly.'type="'.$type.'" name="ff_nm_'.$mdata['bfName'].'[]" id="ff_elem'.$mdata['dbId'].'" value="'.$mdata['value'].'"/>'."\n";
  1211. }
  1212. break;
  1213. case 'bfHidden':
  1214. echo '<input class="ff_elem" type="hidden" name="ff_nm_'.$mdata['bfName'].'[]" value="'.htmlentities(trim($mdata['value']), ENT_QUOTES, 'UTF-8').'" id="ff_elem'.$mdata['dbId'].'"/>'."\n";
  1215. break;
  1216. case 'bfSummarize':
  1217. echo '<span class="ff_elem bfSummarize" id="ff_elem'.$mdata['dbId'].'"></span>'."\n";
  1218. echo '<script type="text/javascript"><!--'."\n".'bfRegisterSummarize("ff_elem'.$mdata['dbId'].'", "'.$mdata['connectWith'].'", "'.$mdata['connectType'].'", "'.addslashes($mdata['emptyMessage']).'", '.($mdata['hideIfEmpty'] ? 'true' : 'false').')'."\n".'//--></script>';
  1219. if(trim($mdata['fieldCalc']) != ''){
  1220. echo '<script type="text/javascript">
  1221. <!--
  1222. function bfFieldCalcff_elem'.$mdata['dbId'].'(value){
  1223. if(!isNaN(value)){
  1224. value = Number(value);
  1225. }
  1226. '.$mdata['fieldCalc'].'
  1227. return value;
  1228. }
  1229. //-->
  1230. </script>';
  1231. }
  1232. break;
  1233. case 'bfReCaptcha':
  1234. if(isset($mdata['pubkey']) && $mdata['pubkey'] != ''){
  1235. $http = 'http';
  1236. if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) {
  1237. $http .= 's';
  1238. }
  1239. $lang = JRequest::getVar('lang','');
  1240. if($lang != ''){
  1241. $lang = ',lang: "'.addslashes($lang).'"';
  1242. }
  1243. JFactory::getDocument()->addScript($http.'://www.google.com/recaptcha/api/js/recaptcha.js');
  1244. JFactory::getDocument()->addScriptDeclaration(
  1245. ' JQuery(document).ready(
  1246. function() {
  1247. document.getElementById("bfReCaptchaWrap").style.display = "";
  1248. Recaptcha.create("'.$mdata['pubkey'].'",
  1249. "bfReCaptchaDiv", {
  1250. theme: "'.addslashes($mdata['theme']).'"
  1251. '.$lang.'
  1252. }
  1253. );
  1254. setTimeout("document.getElementById(\"bfReCaptchaSpan\").appendChild(document.getElementById(\"bfReCaptchaWrap\"))",100);
  1255. }
  1256. );
  1257. ');
  1258. echo '<span id="bfReCaptchaSpan" class="bfCaptcha">'."\n";
  1259. echo '</span>'."\n";
  1260. }
  1261. else
  1262. {
  1263. echo '<span class="bfCaptcha">'."\n";
  1264. echo 'WARNING: No public key given for ReCaptcha element!';
  1265. echo '</span>'."\n";
  1266. }
  1267. break;
  1268. case 'bfCaptcha':
  1269. if(JFactory::getApplication()->isSite())
  1270. {
  1271. $captcha_url = JURI::root(true).'/components/com_breezingforms/images/captcha/securimage_show.php';
  1272. }
  1273. else
  1274. {
  1275. $captcha_url = JURI::root(true).'/administrator/components/com_breezingforms/images/captcha/securimage_show.php';
  1276. }
  1277. echo '<span class="bfCaptcha">'."\n";
  1278. echo '<img alt="" border="0" width="230" id="ff_capimgValue" class="ff_capimg" src="'.$captcha_url.'"/>'."\n";
  1279. echo '<br/>';
  1280. echo '<input autocomplete="off" class="ff_elem" type="text" name="bfCaptchaEntry" id="bfCaptchaEntry" />'."\n";
  1281. echo '<a href="#" class="ff_elem" onclick="document.getElementById(\'bfCaptchaEntry\').value=\'\';document.getElementById(\'bfCaptchaEntry\').focus();document.getElementById(\'ff_capimgValue\').src = \''.$captcha_url.'?bfMathRandom=\' + Math.random(); return false"><img alt="captcha" src="'.JURI::root(true) . '/components/com_breezingforms/images/captcha/refresh-captcha.png" border="0" /></a>'."\n";
  1282. echo '</span>'."\n";
  1283. break;
  1284. case 'bfCalendar':
  1285. JHTML::_( 'behavior.calendar' );
  1286. $size = '';
  1287. if($mdata['size']!=''){
  1288. $size = 'style="width:'.htmlentities(strip_tags($mdata['size'])).'" ';
  1289. }
  1290. $exploded = explode('::',trim($mdata['value']));
  1291. $left = '';
  1292. $right = '';
  1293. if(count($exploded) == 2){
  1294. $left = trim($exploded[0]);
  1295. $right = trim($exploded[1]);
  1296. }else{
  1297. $right = trim($exploded[0]);
  1298. }
  1299. echo '<span class="bfElementGroupNoWrap" id="bfElementGroupNoWrap'.$mdata['dbId'].'">'."\n";
  1300. echo '<input autocomplete="off" class="ff_elem" '.$size.'type="text" name="ff_nm_'.$mdata['bfName'].'[]" id="ff_elem'.$mdata['dbId'].'" value="'.htmlentities($left, ENT_QUOTES, 'UTF-8').'"/>'."\n";
  1301. echo '<button id="ff_elem'.$mdata['dbId'].'_calendarButton" type="submit" class="bfCalendar" value="'.htmlentities($right, ENT_QUOTES, 'UTF-8').'"><span>'.htmlentities($right, ENT_QUOTES, 'UTF-8').'</span></button>'."\n";
  1302. echo '</span>'."\n";
  1303. echo '<script type="text/javascript">
  1304. <!--
  1305. Calendar.setup({
  1306. inputField : "ff_elem'.$mdata['dbId'].'",
  1307. ifFormat : "'.$mdata['format'].'",
  1308. button : "ff_elem'.$mdata['dbId'].'_calendarButton",
  1309. align : "Bl",
  1310. singleClick : true
  1311. });
  1312. //-->
  1313. </script>'."\n";
  1314. break;
  1315. case 'bfPayPal':
  1316. $value = '';
  1317. $type = 'submit';
  1318. $src = '';
  1319. if($mdata['image'] != ''){
  1320. $type = 'image';
  1321. $src = 'src="'.$mdata['image'].'" ';
  1322. }else{
  1323. $value = 'value="PayPal" ';
  1324. }
  1325. if($mdata['actionClick'] == 1){
  1326. $onclick = 'onclick="document.getElementById(\'bfPaymentMethod\').value=\'PayPal\';'.$mdata['actionFunctionName'] . '(this,\'click\');" ';
  1327. } else {
  1328. $onclick = 'onclick="document.getElementById(\'bfPaymentMethod\').value=\'PayPal\';" ';
  1329. }
  1330. echo '<input class="ff_elem" '.$value.$src.$tabIndex.$onclick.$onblur.$onchange.$onfocus.$onselect.$readonly.'type="'.$type.'" name="ff_nm_'.$mdata['bfName'].'[]" id="ff_elem'.$mdata['dbId'].'"/>'."\n";
  1331. break;
  1332. case 'bfSofortueberweisung':
  1333. $value = '';
  1334. $type = 'submit';
  1335. $src = '';
  1336. if($mdata['image'] != ''){
  1337. $type = 'image';
  1338. $src = 'src="'.$mdata['image'].'" ';
  1339. }else{
  1340. $value = 'value="Sofortueberweisung" ';
  1341. }
  1342. if($mdata['actionClick'] == 1){
  1343. $onclick = 'onclick="document.getElementById(\'bfPaymentMethod\').value=\'Sofortueberweisung\';'.$mdata['actionFunctionName'] . '(this,\'click\');" ';
  1344. } else {
  1345. $onclick = 'onclick="document.getElementById(\'bfPaymentMethod\').value=\'Sofortueberweisung\';" ';
  1346. }
  1347. echo '<input class="ff_elem" '.$value.$src.$tabIndex.$onclick.$onblur.$onchange.$onfocus.$onselect.$readonly.'type="'.$type.'" name="ff_nm_'.$mdata['bfName'].'[]" id="ff_elem'.$mdata['dbId'].'"/>'."\n";
  1348. break;
  1349. }
  1350. if(isset($mdata['bfName']) && isset($mdata['off']) && $mdata['off']){
  1351. echo '<script type="text/javascript"><!--'."\n".'bfDeactivateField["ff_nm_'.$mdata['bfName'].'[]"]=true;'."\n".'//--></script>'."\n";
  1352. }
  1353. if($mdata['required']){
  1354. echo '<span class="bfRequired">*</span>'."\n";
  1355. }
  1356. if($mdata['bfType'] == 'bfFile'){
  1357. echo '<span id="ff_elem'.$mdata['dbId'].'_files"></span>';
  1358. }
  1359. echo $flashUploader;
  1360. if($mdata['bfType'] != 'bfHidden'){
  1361. if($options['displayType'] == 'breaks'){
  1362. echo '</p>'."\n";
  1363. } else {
  1364. echo '</span>'."\n";
  1365. }
  1366. }
  1367. }
  1368. }
  1369. /**
  1370. * Paging and wrapping of inline element containers
  1371. */
  1372. if(isset($dataObject['properties']) && $dataObject['properties']['type'] == 'section' && $dataObject['properties']['displayType'] == 'inline'){
  1373. echo '<div class="bfClearfix">'."\n";
  1374. }
  1375. if(isset($dataObject['children']) && count($dataObject['children']) != 0){
  1376. $childrenAmount = count($dataObject['children']);
  1377. for($i = 0; $i < $childrenAmount; $i++){
  1378. $this->process( $dataObject['children'][$i], $mdata, $parentPage, $i, $childrenAmount );
  1379. }
  1380. }
  1381. if(isset($dataObject['properties']) && $dataObject['properties']['type'] == 'section' && $dataObject['properties']['displayType'] == 'inline'){
  1382. echo '</div>'."\n";
  1383. }
  1384. if(isset($dataObject['properties']) && $dataObject['properties']['type'] == 'section' && $dataObject['properties']['bfType'] == 'section'){
  1385. echo '</fieldset></div></div></div><div class="bfFieldset-bl"><div class="bfFieldset-br"><div class="bfFieldset-b"></div></div></div></div><!-- bfFieldset-wrapper end -->'."\n";
  1386. } else if( isset($dataObject['properties']) && $dataObject['properties']['type'] == 'section' && $dataObject['properties']['bfType'] == 'normal' ) {
  1387. if(isset($dataObject['properties']['name']) && $dataObject['properties']['name'] != ''){
  1388. echo '</div>'."\n";
  1389. }
  1390. }
  1391. else if(isset($dataObject['properties']) && $dataObject['properties']['type'] == 'page'){
  1392. $isLastPage = false;
  1393. if($this->rootMdata['lastPageThankYou'] && $dataObject['properties']['pageNumber'] == count($this->dataObject['children']) && count($this->dataObject['children']) > 1){
  1394. $isLastPage = true;
  1395. }
  1396. if(!$isLastPage){
  1397. $last = 0;
  1398. if($this->rootMdata['lastPageThankYou']){
  1399. $last = 1;
  1400. }
  1401. if($this->rootMdata['pagingInclude'] && $dataObject['properties']['pageNumber'] > 1){
  1402. echo '<button class="bfPrevButton'.$this->fadingClass.'" type="submit" onclick="if(ff_currentpage > 1){ff_switchpage(ff_currentpage-1);self.scrollTo(0,0);}populateSummarizers();" value="'.htmlentities(trim($this->rootMdata['pagingPrevLabel']), ENT_QUOTES, 'UTF-8').'"><span>'.htmlentities(trim($this->rootMdata['pagingPrevLabel']), ENT_QUOTES, 'UTF-8').'</span></button>'."\n";
  1403. }
  1404. if($this->rootMdata['pagingInclude'] && $dataObject['properties']['pageNumber'] < count($this->dataObject['children']) - $last){
  1405. echo '<button class="bfNextButton'.$this->fadingClass.'" type="submit" onclick="ff_validate_nextpage(this, \'click\');populateSummarizers();" value="'.htmlentities(trim($this->rootMdata['pagingNextLabel']), ENT_QUOTES, 'UTF-8').'"><span>'.htmlentities(trim($this->rootMdata['pagingNextLabel']), ENT_QUOTES, 'UTF-8').'</span></button>'."\n";
  1406. }
  1407. if($this->rootMdata['cancelInclude'] && $dataObject['properties']['pageNumber'] + 1 > count($this->dataObject['children']) - $last){
  1408. echo '<button class="bfCancelButton'.$this->fadingClass.'" type="submit" onclick="ff_resetForm(this, \'click\');" value="'.htmlentities(trim($this->rootMdata['cancelLabel']), ENT_QUOTES, 'UTF-8').'"><span>'.htmlentities(trim($this->rootMdata['cancelLabel']), ENT_QUOTES, 'UTF-8').'</span></button>'."\n";
  1409. }
  1410. $callSubmit = 'ff_validate_submit(this, \'click\')';
  1411. if( $this->hasFlashUpload ){
  1412. $callSubmit = 'if(typeof bfAjaxObject101 == \'undefined\' && typeof bfReCaptchaLoaded == \'undefined\'){bfDoFlashUpload()}else{ff_validate_submit(this, \'click\')}';
  1413. }
  1414. if($this->rootMdata['submitInclude'] && $dataObject['properties']['pageNumber'] + 1 > count($this->dataObject['children']) - $last){
  1415. echo '<button id="bfSubmitButton" class="bfSubmitButton'.$this->fadingClass.'" type="submit" onclick="if(typeof bf_htmltextareainit != \'undefined\'){ bf_htmltextareainit() }if(document.getElementById(\'bfPaymentMethod\')){document.getElementById(\'bfPaymentMethod\').value=\'\';};'.$callSubmit.';" value="'.htmlentities(trim($this->rootMdata['submitLabel']), ENT_QUOTES, 'UTF-8').'"><span>'.htmlentities(trim($this->rootMdata['submitLabel']), ENT_QUOTES, 'UTF-8').'</span></button>'."\n";
  1416. }
  1417. }
  1418. }
  1419. }
  1420. public function render(){
  1421. $this->process($this->dataObject);
  1422. echo '</div>'."\n"; // closing last page
  1423. // we gonna add a blank to each textarea, since the value is transferred upon submit
  1424. // requires a different mandatory validation than ff_valuenotempty
  1425. if(count($this->htmltextareas)){
  1426. JImport( 'joomla.html.editor' );
  1427. $editor = JFactory::getEditor();
  1428. $htmltextarea_out = '';
  1429. foreach($this->htmltextareas As $htmltextarea){
  1430. $htmltextarea_out .= 'JQuery("[name=\"'.$htmltextarea.'\"]").val(JQuery.trim(JQuery("[name=\"'.$htmltextarea.'\"]").val())+" ");'."\n";
  1431. $htmltextarea_out .= 'bf_htmltextareas.push("'.rtrim(trim($editor->getContent($htmltextarea)),';').'")'."\n";
  1432. $htmltextarea_out .= 'bf_htmltextareanames.push("'.$htmltextarea.'")'."\n";
  1433. }
  1434. echo '<script type="text/javascript">
  1435. <!--
  1436. var bf_htmltextareas = [];
  1437. var bf_htmltextareanames = [];
  1438. function bf_htmltextareainit(){
  1439. '.$htmltextarea_out.'
  1440. }
  1441. //-->
  1442. </script>';
  1443. }
  1444. if( $this->hasFlashUpload ){
  1445. $tickets = JFactory::getSession()->get('bfFlashUploadTickets', array());
  1446. $tickets[$this->flashUploadTicket] = array(); // stores file info for later processing
  1447. JFactory::getSession()->set('bfFlashUploadTickets', $tickets);
  1448. echo '<input type="hidden" name="bfFlashUploadTicket" value="'.$this->flashUploadTicket.'"/>'."\n";
  1449. JFactory::getDocument()->addScript(JURI::root(true) . '/components/com_breezingforms/libraries/jquery/swfobject.js');
  1450. JFactory::getDocument()->addScript(JURI::root(true) . '/components/com_breezingforms/libraries/jquery/jquery.uploadify.v2.1.0.min.js');
  1451. JFactory::getDocument()->addScript(JURI::root(true) . '/components/com_breezingforms/libraries/jquery/center.js');
  1452. JFactory::getDocument()->addScriptDeclaration('
  1453. var bfFlashUploadInterval = null;
  1454. var bfFlashUploadTooLarge = {};
  1455. var bfFlashUploadAll = {};
  1456. var bfFlashUploaders = new Array();
  1457. var bfFlashUploadersLength = 0;
  1458. function bfDoFlashUpload(){
  1459. JQuery("#bfSubmitMessage").css("visibility","hidden");
  1460. JQuery(".bfErrorMessage").html("");
  1461. JQuery(".bfErrorMessage").css("display","none");
  1462. for(qID in bfFlashUploadTooLarge){
  1463. try{
  1464. JQuery(bfFlashUploadTooLarge[qID]).uploadifyCancel(qID);
  1465. if(bfFlashUploadersLength > 0) bfFlashUploadersLength--;
  1466. } catch(e){}
  1467. }
  1468. bfFlashUploadTooLarge = {};
  1469. if(ff_validation(0) == ""){
  1470. try{
  1471. bfFlashUploadInterval = window.setInterval( bfCheckFlashUploadProgress, 100 );
  1472. JQuery("#bfFileQueue").bfcenter(true);
  1473. JQuery("#bfFileQueue").css("visibility","visible");
  1474. for(var i = 0; i < bfFlashUploaders.length;i++){
  1475. try{
  1476. JQuery("#"+bfFlashUploaders[i]).uploadifyUpload();
  1477. } catch(e){}
  1478. }
  1479. } catch(e){alert(e)}
  1480. } else {
  1481. if(typeof bfUseErrorAlerts == "undefined"){
  1482. alert(error);
  1483. } else {
  1484. bfShowErrors(error);
  1485. }
  1486. ff_validationFocus("");
  1487. }
  1488. }
  1489. function bfCheckFlashUploadProgress(){
  1490. if( JQuery("#bfFileQueue").html() == "" ){ // empty indicates that all queues are uploaded or in any way cancelled
  1491. JQuery("#bfFileQueue").css("visibility","hidden");
  1492. window.clearInterval( bfFlashUploadInterval );
  1493. if(typeof bfAjaxObject101 != \'undefined\' || typeof bfReCaptchaLoaded != \'undefined\'){
  1494. ff_submitForm2();
  1495. }else{
  1496. ff_validate_submit(document.getElementById("bfSubmitButton"), "click");
  1497. }
  1498. JQuery(".bfFlashFileQueueClass").html("");
  1499. if(bfFlashUploadersLength > 0){
  1500. JQuery("#bfSubmitMessage").bfcenter(true);
  1501. JQuery("#bfSubmitMessage").css("visibility","visible");
  1502. }
  1503. }
  1504. }
  1505. ');
  1506. echo "<div style=\"visibility:hidden;\" id=\"bfFileQueue\"></div>";
  1507. echo "<div style=\"visibility:hidden;\" id=\"bfSubmitMessage\">".BFText::_('COM_BREEZINGFORMS_SUBMIT_MESSAGE')."</div>";
  1508. }
  1509. echo '<script type="text/javascript"><!--'."\n".'if(document.getElementById("bfPage'.$this->p->page.'"))document.getElementById("bfPage'.$this->p->page.'").style.display = "";'."\n".'//--></script>'."\n";
  1510. echo '<noscript>Please turn on javascript to submit your data. Thank you!</noscript>'."\n";
  1511. JFactory::getDocument()->addScriptDeclaration('//-->');
  1512. }
  1513. public function parseToggleFields( $code ){
  1514. /*
  1515. example codes:
  1516. turn on element bla if blub is on
  1517. turn off section bla if blub is on
  1518. turn on section bla if blub is off
  1519. turn off element bla if blub is off
  1520. if element opener is off set opener huhuu
  1521. syntax:
  1522. ACTION STATE TARGETCATEGORY TARGETNAME if SRCNAME is VALUE
  1523. */
  1524. $parsed = '';
  1525. $code = str_replace("\r", '', $code);
  1526. $lines = explode( "\n", $code );
  1527. $linesCnt = count( $lines );
  1528. for($i = 0; $i < $linesCnt;$i++){
  1529. $tokens = explode( ' ', trim($lines[$i]) );
  1530. $tokensCnt = count($tokens);
  1531. if($tokensCnt >= 8){
  1532. $state = '';
  1533. // rebuilding the state as it could be a value containing blanks
  1534. for($j = 7; $j < $tokensCnt; $j++){
  1535. if($j+1 < $tokensCnt)
  1536. $state .= $tokens[$j] . ' ';
  1537. else
  1538. $state .= $tokens[$j];
  1539. }
  1540. $parsed .= '{ action: "'.$tokens[0].'", state: "'.$tokens[1].'", tCat: "'.$tokens[2].'", tName: "'.$tokens[3].'", statement: "'.$tokens[4].'", sName: "'.$tokens[5].'", condition: "'.$tokens[6].'", value: "'.addslashes($state).'" },';
  1541. }
  1542. }
  1543. return "[".rtrim($parsed, ",")."]";
  1544. }
  1545. }