*/ if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once(DOKU_PLUGIN.'syntax.php'); /** * OnlineOrdering plugin. * * Form based ordering. */ class syntax_plugin_onlineordering extends DokuWiki_Syntax_Plugin { /** * Returns plugin information. * * @return array with plugin information. */ function getInfo() { return array( 'author' => 'Jannes Drost-Tenfelde', 'email' => 'info@drost-tenfelde.de', 'date' => '2011-09-27', 'name' => 'Online Ordering', 'desc' => 'Allows users to order items online using forms.', 'url' => 'http://www.drost-tenfelde.de/?id=dokuwiki:plugins:onlineordering', ); } /** * Returns the syntax type of the plugin. * * @return type. */ function getType(){ return 'substition'; } /** * Returns the paragraph type. * * @return paragraph type. */ function getPType(){ return 'block'; } /** * Where to sort in? */ function getSort(){ return 301; } /** * Connects the syntax pattern to the lexer */ function connectTo($mode) { $this->Lexer->addSpecialPattern('\{\{onlineordering>[^}]*\}\}', $mode, 'plugin_onlineordering'); } /** * Handle the match */ function handle($match, $state, $pos, &$handler){ global $ID; //strip markup from start and end $match = substr($match, 17, -2); // Get the parameters (key=value), seperated by & $pairs = explode('&', $match); // Turn the pairs into key=>value foreach ($pairs as $pair) { list($key, $value) = explode('=', $pair, 2); $data[trim($key)] = trim($value); } // Turn all keys to lower case $data = array_change_key_case($data, CASE_LOWER); // Adjust price $price = $data['price']; if ( isset( $price ) ) { $price = str_replace('.', '', $price); $price = str_replace(',', '.', $price); $data['price'] = floatval( $price ); } // Adjust porto $porto_default = $data['porto_default']; if ( isset( $porto_default ) ) { $porto_default = str_replace('.', '', $porto_default); $porto_default = str_replace(',', '.', $porto_default); $data['porto_default'] = floatval( $porto_default ); } return $data; } /** * Evaluates POST parameters and renders the appropriate for the current onlineticket stage. * * @param mode Display mode. * * @param renderer Renderer to which the output is sent. * * @param data data provided within the onlineticket tag. * */ function render($mode, &$renderer, $data) { global $conf; global $lang; if ($mode != 'xhtml') { return false; } $content = '
'; $message = ''; // Make sure the parameters are set properly if ( $this->_validate_configuration( $data, $message ) ) { // Get the form variables $form = $this->_get_form_variables(); // Ensure the variables are valid $message = ''; if ( !$this->_validate_form( $form, $message ) ) { // Display the error $content .= $this->getLang('error').'
'.$message; // Go one stage back $form['stage'] = 1; } // Get the querystring $querystring = $_SERVER['QUERY_STRING']; // Get the appropriate form switch ( $form['stage'] ) { default: case 1: @include('order_form.php'); $content .= $output; break; case 2: @include('confirm_form.php'); $content .= $output; break; case 3: @include('send_form.php'); $content .= $output; break; } } else { $content .= $this->getLang('error').'
'.$message; } $content .= '
'; $renderer->doc .= $content; return true; } /** * Checks if the data necessary for the onlineticket system is valid. * * @param data Array with data provided within the onlineticket tag. * * @param message Validation message. * * @return boolean */ function _validate_configuration( &$data, &$message ) { global $conf; global $lang; $validation = true; /* Parameters */ // Ensure that the item name is set if ( !isset( $data['item_name'] ) ) { $message .= $this->_get_error_message('error_item_name_not_set'); $validation = false; } // Ensure that the abbreviation is set if ( !isset( $data['abbreviation'] ) ) { $message .= $this->_get_error_message('error_abbreviation_not_set'); $validation = false; } // Ensure that the currencty is set if ( !isset( $data['currency'] ) ) { $message .= $this->_get_error_message('error_currency_not_set'); $validation = false; } // Ensure that the price is set if ( !isset( $data['price'] ) ) { $message .= $this->_get_error_message('error_price_not_set'); $validation = false; } /* Configuration */ // Ensure Bank details have been set $bank_account = $data['bank_account']; if ( !isset($bank_account)) { $bank_account = $this->getConf('bank_account'); } if ( (!isset($bank_account)) || $bank_account == '' ) { $message .= $this->_get_error_message('error_conf_bank_account_not_set'); $validation = false; } // Ensure the Sender E-mail is set $sender_email = $data['sender_email']; if ( !isset($sender_email)) { $sender_email = $this->getConf('sender_email'); } if ( (!isset($sender_email)) || $sender_email == '' ) { $message .= $this->_get_error_message('error_conf_sender_email_not_set'); $validation = false; } // Ensure the Sender E-mail is set $countries = $data['countries']; if ( !isset($countries)) { $countries = $this->getConf('countries'); } if ( (!isset($countries)) || $countries == '' ) { $message .= $this->_get_error_message('error_conf_countries_not_set'); $validation = false; } return $validation; } function _validate_form( $form, &$message ) { $valid = true; $stage = $form['stage']; $message = ''; switch ( $stage ) { // Empty form default: case 1: break; // Confirmation form case 2: case 3: // First name if ( ( !isset($form['firstname']) ) || $form['firstname'] == '' ) { $message .= $this->_get_error_message('error_firstname_not_set'); $valid = false; } // Last name if ( ( !isset($form['lastname']) ) || $form['lastname'] == '' ) { $message .= $this->_get_error_message('error_lastname_not_set'); $valid = false; } // Street + nr if ( ( !isset($form['street']) ) || $form['street'] == '' ) { $message .= $this->_get_error_message('error_street_not_set'); $valid = false; } // Zipcode if ( ( !isset($form['postcode']) ) || $form['postcode'] == '' ) { $message .= $this->_get_error_message('error_postcode_not_set'); $valid = false; } // Place if ( ( !isset($form['place']) ) || $form['place'] == '' ) { $message .= $this->_get_error_message('error_place_not_set'); $valid = false; } // Country if ( ( !isset($form['country']) ) || $form['country'] == '' ) { $message .= $this->_get_error_message('error_country_not_set'); $valid = false; } // E-mail if ( ( !isset($form['email']) ) || $form['email'] == '' ) { $message .= $this->_get_error_message('error_email_not_set'); $valid = false; } else { // Check that the email is of a valid format if (!eregi( "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-zÀ-Ýß?*-ý 0-9-]+(\.[a-zÀ-Ýß?*-ý 0-9-]+)*(\.[a-z]{2,5})$", $form['email'] ) ) { $message .= $this->_get_error_message('error_email_invalid'); $valid = false; } } // Tickets if ( ( !isset($form['tickets']) ) || $form['tickets'] == '' ) { $message .= $this->_get_error_message('error_tickets_not_set'); $valid = false; } else { if ( eregi('[^0-9]', $form['tickets']) || $form['tickets'] <= 0 ) { $message .= $this->_get_error_message('error_tickets_invalid'); $valid = false; } } break; // Send order case 2: break; } return $valid; } /** * Returns the appropriate error message. * * @return formatted error message. */ function _get_error_message( $id ) { return '
'.$this->getLang( $id ).'
'; } /** * Returns the form variables. * * @return form variables. */ function _get_form_variables() { $form = array(); $stage = $_POST['onlineordering_stage']; if ( !isset( $stage ) ) { $stage = 1; } else { $stage = $stage + 1; } $form['stage'] = $stage; $form['title'] = $_POST['onlineordering_title']; if ( !isset( $form['title'] ) ) { $form['title'] = ''; } $form['firstname'] = $_POST['onlineordering_firstname']; $form['lastname'] = $_POST['onlineordering_lastname']; $form['street'] = $_POST['onlineordering_street']; $form['postcode'] = $_POST['onlineordering_postcode']; $form['place'] = $_POST['onlineordering_place']; $form['country'] = $_POST['onlineordering_country']; $form['email'] = $_POST['onlineordering_email']; $form['tickets'] = $_POST['onlineordering_tickets']; $form['remarks'] = $_POST['onlineordering_remarks']; return $form; } /** * Returns the countries for which the orders can be made. * * @return Array() of countries. */ function _get_countries() { // Get the configured countries $conf_countries = $this->getConf('countries'); $countries = explode( ",", $conf_countries ); return $countries; } /** * Returns the porto settings for a specific country. * * @param data plugin parameters. * @param country Country name. * @return porto. */ function _get_porto( $data, $country ) { // Attempt to get the porto for the country $porto = $data['porto_'.strtolower($country)]; if ( isset( $porto ) ) { $porto = str_replace('.', '', $porto); $porto = str_replace(',', '.', $porto); $porto = floatval( $porto ); } else { // Get the default porto $porto = $data['porto_default']; if ( !isset( $porto ) ) { // No porto then $porto = 0; } } return $porto; } } //Setup VIM: ex: et ts=4 enc=utf-8 :