]> git.mxchange.org Git - mailer.git/blobdiff - inc/expression-functions.php
Mailer project continued (heavy refactoring):
[mailer.git] / inc / expression-functions.php
index 3693439c41aafae59b8065992d2633f7fcfc4c94..e70d284bd82fe6f1fdf3fb8c622822378d24bde1 100644 (file)
@@ -106,7 +106,7 @@ function doExpressionCode ($data) {
        return $code;
 }
 
-// Expression call-back function for URLs
+// Expression call-back function for URLs (example: {%url=foo.php?bar=bar%})
 function doExpressionUrl ($data) {
        // Is there JS-mode?
        if ($data['callback'] == 'js') {
@@ -426,5 +426,124 @@ function doExpressionSessionPipe ($data) {
        return $code;
 }
 
+// Expression call-back for formulars
+function doExpressionForm ($data) {
+       // Default method is GET, target is _self
+       $data['__form_method'] = 'get';
+       $data['__form_target'] = '_self';
+       $data['__form_name']   = 'form';
+       $data['__form_id']     = 'form';
+       $data['__server']      = '';
+
+       // Check which method/target is set
+       foreach (array('callback', 'extra_func', 'extra_func2') as $key) {
+               // Make lower-case
+               $value = strtolower($data[$key]);
+
+               // Is formMethodPost set?
+               if ($value == 'formmethodpost') {
+                       // Use it
+                       $data['__form_method'] = 'post';
+               } elseif (($value == 'formmethodget') && (!isSpider()) && (!isSessionValid())) {
+                       // Then expand 'value' with session id
+                       if (strpos($data['value'], '?') !== FALSE) {
+                               // '?' is set
+                               $data['value'] .= '&amp';
+                       } else {
+                               // Is not set
+                               $data['value'] .= '?';
+                       }
+
+                       // Append session's name and id
+                       $data['value'] .= session_name() . '=' . session_id();
+               } elseif (substr($value, 0, 10) == 'formtarget') {
+                       // Form target is found
+                       $data['__form_target'] = substr($value, 10);
+               } elseif (substr($value, 0, 8) == 'formname') {
+                       // Form name is found
+                       $data['__form_name'] = substr($value, 8);
+               } elseif (substr($value, 0, 6) == 'formid') {
+                       // Form id found
+                       $data['__form_id'] = substr($value, 6);
+               } elseif (substr($value, 0, 6) == 'server') {
+                       // {%server,foo%} found
+                       $data['__server'] = '{%server=' . substr($value, 6) . '%}';
+               }
+       } // END - foreach
+
+       // Generate the replacement code which is the opening form tag
+       $data['__replacer'] = '<form accept-charset=\"UTF-8\"';
+       if (!empty($data['value'])) {
+               $data['__replacer'] .= ' action=\"{%url=' . $data['value'];
+               if (!empty($data['__server'])) {
+                       $data['__replacer'] .= $data['__server'];
+               } // END - if
+               $data['__replacer'] .= '%}\"';
+       } // END - if
+
+       // Add rest elements
+       foreach (array('method', 'target', 'name', 'id') as $key) {
+               $data['__replacer'] .= ' ' . $key . '=\"' . $data['__form_' . $key] . '\"';
+       } // END - foreach
+
+       // Close the tag here (don't move it below the next filter)
+       $data['__replacer'] .= '>' . PHP_EOL;
+
+       /*
+        * Call a filter chain to allow more hidden fields being added. You should
+        * not remove the > char from above line to add onsubmit="" or so. Instead
+        * you should better use jquery to accomplish the same.
+        */
+       $data = runFilterChain('open_form_fields', $data);
+
+       // Replace the code
+       $code = replaceExpressionCode($data, $data['__replacer']);
+
+       // Return the (maybe) replaced code
+       return $code;
+}
+
+// Expression call-back to close form tags
+function doExpressionFormClose ($data) {
+       // Initial replacer is really easy ...
+       $data['__replacer'] = '</form>' . PHP_EOL;
+
+       /*
+        * Call a filter chain to allow more hidden fields being added at the end
+        * of the form.
+        */
+       $data = runFilterChain('close_form_fields', $data);
+
+       // Replace the code
+       $code = replaceExpressionCode($data, $data['__replacer']);
+
+       // Return the (maybe) replaced code
+       return $code;
+}
+
+// Expression call-back to handle jquery inclusion
+function doExpressionJquery ($data) {
+       // Default is compressed
+       $jquery = 'jquery.js';
+
+       // Is debug mode enabled?
+       if ((isGetRequestElementSet('jquery')) || (isSessionVariableSet('jquery'))) {
+               // Then use uncompressed
+               $jquery = 'jquery-uncompressed.js';
+
+               // Remember it in session
+               setSession('jquery', '1');
+       } // END - if
+
+       // Add {%url%} around it
+       $replacer = '{%url=js/' . $jquery . '?dummy=1%}';
+
+       // Replace the code
+       $code = replaceExpressionCode($data, $replacer);
+
+       // Return the (maybe) replaced code
+       return $code;
+}
+
 // [EOF]
 ?>