123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- <?php
- /**
- *
- * PHP Pro Bid $Id$ HvoA/w5sRlmsGBwbblSCDtfTdlJpLzD9jOK9GEcPk6frjNe5F4amnF2xUX7SmtkZkn0l9qv/xu9Ekagx1/6w+w==
- *
- * @link http://www.phpprobid.com
- * @copyright Copyright (c) 2017 Online Ventures Software & CodeCube SRL
- * @license http://www.phpprobid.com/license Commercial License
- *
- * @version 7.9 [rev.7.9.01]
- */
- /**
- * flat rates location groups composite element
- *
- * creates an element that will contain an unlimited number of rows that include the following columns:
- * - a "first" field - for the postage cost of the first item in an invoice
- * - an "additional" field - for each additional item in an invoice
- * - a name text field
- * - a value select field of type ChznSelect
- */
- namespace Ppb\Form\Element;
- use Cube\Controller\Front,
- Cube\Form\Element,
- Cube\Locale\Format as LocaleFormat;
- class FlatRatesLocationGroups extends Element
- {
- const FIELD_NAME = 'name';
- const FIELD_LOCATIONS = 'locations';
- const FIELD_FIRST = 'first';
- const FIELD_ADDL = 'addl';
- /**
- *
- * type of element - override the variable from the parent class
- *
- * @var string
- */
- protected $_element = 'flatRatesLocationGroups';
- /**
- *
- * chzn select elements options
- *
- * @var array
- */
- protected $_chznMultiOptions = array();
- /**
- *
- * default currency
- *
- * @var string
- */
- protected $_currency;
- /**
- *
- * class constructor
- *
- * @param string $name
- */
- public function __construct($name)
- {
- parent::__construct($this->_element, $name);
- $translate = $this->getTranslate();
- $baseUrl = Front::getInstance()->getRequest()->getBaseUrl();
- $settings = Front::getInstance()->getBootstrap()->getResource('settings');
- $this->_currency = $settings['currency'];
- $this->setHeaderCode('<link href="' . $baseUrl . '/js/chosen/chosen.css" media="screen" rel="stylesheet" type="text/css">')
- ->setBodyCode('<script type="text/javascript" src="' . $baseUrl . '/js/chosen/chosen.jquery.min.js"></script>')
- ->setBodyCode(
- "<script type=\"text/javascript\">" . "\n"
- . " $('." . ChznSelect::ELEMENT_CLASS . "').chosen(); " . "\n"
- . "</script>");
- $this->setBodyCode(
- "<script type=\"text/javascript\">" . "\n"
- . " $(document).on('click', '.delete-field-row', function(e) { " . "\n"
- . " e.preventDefault(); " . "\n"
- . " var cnt = 0; " . "\n"
- . " $(this).closest('.field-row').remove(); " . "\n"
- . " $('.{$name}-row').each(function() { " . "\n"
- . " var selectName = $(this).find('select').attr('name').replace(/(\[\d+\])/g, '[' + cnt + ']');" . "\n"
- . " $(this).find('select').attr('name', selectName); " . "\n"
- . " cnt++; " . "\n"
- . " }); " . "\n"
- . " }); " . "\n"
- . " $(document).on('click', '.add-field-row', function(e) { " . "\n"
- . " e.preventDefault(); " . "\n"
- . " var nbRows = $('.{$name}-row').length; " . "\n"
- . " var row = $(this).closest('.field-row'); " . "\n"
- . " var cloned = row.clone(true, true); " . "\n"
- . " cloned.find('.add-field-row').remove(); " . "\n"
- . " cloned.find('select').val(row.find('select').val()); " . "\n" // as per jquery clone bug (doesnt copy selected values)
- . " cloned.find('.chzn-container').remove(); " . "\n"
- . " cloned.find('select').css({display: 'inline-block'}).removeAttr('id').removeClass('chzn-done'); " . "\n"
- . " $('<button>').attr('class', 'delete-field-row btn').html('" . $translate->_('Delete') . "').appendTo(cloned); " . "\n"
- . " cloned.insertBefore(row); " . "\n"
- . " var selectName = row.find('select').attr('name').replace(/(\[\d+\])/g, '[' + nbRows + ']'); " . "\n"
- . " row.find('.chzn-container').remove(); " . "\n"
- . " row.find('select').css({display: 'inline-block'}).removeAttr('id').removeClass('chzn-done').attr('name', selectName); " . "\n"
- . " row.find('input[type=text]').val(''); " . "\n"
- . " row.find('select').val(''); " . "\n"
- . " $('." . ChznSelect::ELEMENT_CLASS . "').chosen(); " . "\n"
- . " }); " . "\n"
- . "</script>");
- }
- /**
- *
- * get chzn elements multi options
- *
- * @return array
- */
- public function getChznMultiOptions()
- {
- return $this->_chznMultiOptions;
- }
- /**
- *
- * set chzn elements multi options
- *
- * @param array $chznMultiOptions
- *
- * @return $this
- */
- public function setChznMultiOptions($chznMultiOptions)
- {
- $this->_chznMultiOptions = (array)$chznMultiOptions;
- return $this;
- }
- /**
- *
- * render the form element
- *
- * @return string
- */
- public function render()
- {
- $output = null;
- $counter = 0;
- $values = $this->getValue();
- foreach ((array)$values[self::FIELD_NAME] as $id => $key) {
- if (!empty($key)) {
- $output .= $this->_renderRow(false, $key, $values[self::FIELD_LOCATIONS][$id], $values[self::FIELD_FIRST][$id], $values[self::FIELD_ADDL][$id], $counter++);
- }
- }
- $output .= $this->_renderRow(true, null, null, null, null, $counter);
- return $output;
- }
- /**
- *
- * render a single row of the element
- *
- * @param bool $new
- * @param string $key
- * @param string $locations
- * @param string $firstPrice
- * @param string $addlPrice
- * @param int $counter
- *
- * @return string
- */
- protected function _renderRow($new = true, $key = null, $locations = null, $firstPrice = null, $addlPrice = null, $counter = null)
- {
- $translate = $this->getTranslate();
- $brackets = '';
- if ($counter !== null) {
- $brackets = '[' . $counter . ']';
- }
- $chznSelect = new ChznSelect($this->_name . '[' . self::FIELD_LOCATIONS . ']' . $brackets, false);
- $chznSelect->setAttributes(array(
- 'data-placeholder' => $translate->_('Choose Locations...'),
- ))
- ->setMultiOptions(
- $this->getChznMultiOptions())
- ->setMultiple()
- ->setValue($locations);
- $localizedFirstPrice = LocaleFormat::getInstance()->numericToLocalized($firstPrice, true);
- $localizedAddlPrice = LocaleFormat::getInstance()->numericToLocalized($addlPrice, true);
- return '<div class="field-row ' . $this->_name . '-row">'
- . ' <input type="text" name="' . $this->_name . '[' . self::FIELD_FIRST . '][]" '
- . ' placeholder="' . $translate->_('First') . '" class="form-control input-mini input-flat-rates"'
- . ' value="' . $localizedFirstPrice . '" '
- . $this->_endTag
- . ' <input type="text" name="' . $this->_name . '[' . self::FIELD_ADDL . '][]" '
- . ' placeholder="' . $translate->_('Addl.') . '" class="form-control input-mini input-flat-rates"'
- . ' value="' . $localizedAddlPrice . '" '
- . $this->_endTag
- . ' <input type="text" name="' . $this->_name . '[' . self::FIELD_NAME . '][]" '
- . $this->renderAttributes()
- . 'value="' . $key . '" '
- . $this->_endTag
- . ' '
- . $chznSelect->render()
- . (($new === true) ?
- ' <button class="add-field-row btn btn-default">' . $translate->_('Add') . '</button>' :
- ' <button class="delete-field-row btn btn-default">' . $translate->_('Delete') . '</button>')
- . '</div>';
- }
- }
|