123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- <?php
- /**
- *
- * PHP Pro Bid $Id$ K9PfLDm6IYP5RLNLNc//Ik1uYkiidL77Wm6NaMualOA=
- *
- * @link http://www.phpprobid.com
- * @copyright Copyright (c) 2015 Online Ventures Software & CodeCube SRL
- * @license http://www.phpprobid.com/license Commercial License
- *
- * @version 7.4
- */
- /**
- * category selector form element
- */
- namespace Ppb\Form\Element;
- use Cube\Form\Element,
- Cube\Controller\Front,
- Ppb\Service\Table\Relational\Categories as CategoriesService;
- class Category extends Element
- {
- /**
- *
- * type of element - override the variable from the parent class
- *
- * @var string
- */
- protected $_element = 'category';
- /**
- *
- * base url of the application
- *
- * @var string
- */
- protected $_baseUrl;
- /**
- *
- * categories table service
- *
- * @var \Ppb\Service\Table\Relational\Categories
- */
- protected $_categories;
- /**
- *
- * refresh page on select
- *
- * @var bool
- */
- protected $_refresh = true;
- /**
- *
- * class constructor
- *
- * @param string $name
- */
- public function __construct($name)
- {
- parent::__construct($this->_element, $name);
- $view = Front::getInstance()->getBootstrap()->getResource('view');
- $translate = $this->getTranslate();
- $this->setBodyCode(
- "<script type=\"text/javascript\">" . "\n"
- . " function displayCategoryBoxes(el, selected, option) { " . "\n"
- . " var storeId = el.find('.btn-category').attr('data-store-id'); " . "\n"
- . " var categoryId = el.find('.btn-category').attr('data-store-id'); " . "\n"
- . " var refreshPage = el.find('.btn-category').attr('data-no-refresh'); " . "\n"
- . " $.post( " . "\n"
- . " '" . $view->url(array('module' => 'app', 'controller' => 'async', 'action' => 'select-category')) . "', " . "\n"
- . " { " . "\n"
- . " id: selected, " . "\n"
- . " storeId: storeId, " . "\n"
- . " option: option " . "\n"
- . " }, " . "\n"
- . " function(data) { " . "\n"
- . " el.find('.btn-category').attr('disabled', false).html(data['category_name']); " . "\n"
- . " el.find('.category-id').val(data['category_id']); " . "\n"
- . " el.find('.form-boxes').html(data['output']); " . "\n"
- . " if (!data['output'] && data['refresh'] && refreshPage != 'true') { " . "\n"
- . " $('body').addClass('loading'); " . "\n"
- . " el.closest('form').submit(); " . "\n"
- . " } " . "\n"
- . " }, " . "\n"
- . " 'json' " . "\n"
- . " ); " . "\n"
- . " } " . "\n"
- . " $(document).on('click', '.btn-category', function(e) { " . "\n"
- . " e.preventDefault(); " . "\n"
- . " $(this).attr('disabled', true).text('" . $translate->_('Please wait ...') . "'); " . "\n"
- . " var el = $(this).closest('.form-group'); " . "\n"
- . " el.find('.btn-category-cancel').show(); " . "\n"
- . " var selected = el.find('.category-id').val(); " . "\n"
- . " displayCategoryBoxes(el, selected, 'change'); " . "\n"
- . " }); " . "\n"
- . " $(document).on('click', '.btn-category-cancel', function(e) { " . "\n"
- . " e.preventDefault(); " . "\n"
- . " var el = $(this).closest('.form-group'); " . "\n"
- . " el.find('.btn-category').attr('disabled', true).text('" . $translate->_('Please wait ...') . "'); " . "\n"
- . " el.find('.category-id').val(''); " . "\n"
- . " el.find('.btn-category-cancel').hide(); " . "\n"
- . " displayCategoryBoxes(el, '', 'reset'); " . "\n"
- . " }); " . "\n"
- . " $(document).on('change', '.category-selector', function(e) { " . "\n"
- . " e.preventDefault(); " . "\n"
- . " $(this).closest('.form-group').find('.btn-category').attr('disabled', true).text('" . $translate->_('Please wait ...') . "'); " . "\n"
- . " var el = $(this).closest('.form-group'); " . "\n"
- . " var selected = $(this).val(); " . "\n"
- . " displayCategoryBoxes(el, selected, 'select'); " . "\n"
- . " }); " . "\n"
- . "</script>");
- }
- /**
- *
- * get categories table service
- *
- * @return \Ppb\Service\Table\Relational\Categories
- */
- public function getCategories()
- {
- if (!$this->_categories instanceof CategoriesService) {
- $this->setCategories(
- new CategoriesService()
- );
- }
- return $this->_categories;
- }
- /**
- *
- * set categories table service
- *
- * @param \Ppb\Service\Table\Relational\Categories $categories
- *
- * @return \Ppb\Form\Element\Category
- */
- public function setCategories(CategoriesService $categories)
- {
- $this->_categories = $categories;
- return $this;
- }
- /**
- *
- * set refresh flag
- *
- * @param boolean $refresh
- *
- * @return $this
- */
- public function setRefresh($refresh)
- {
- $this->_refresh = $refresh;
- return $this;
- }
- /**
- *
- * get refresh flag
- *
- * @return boolean
- */
- public function getRefresh()
- {
- return $this->_refresh;
- }
- /**
- *
- * render the form element
- *
- * @return string
- */
- public function render()
- {
- $output = null;
- $translate = $this->getTranslate();
- $value = (string)$this->getValue();
- $categoryName = $this->getCategories()->getFullName($value); // this is already translated
- $this->removeAttribute('class');
- $output = $this->getPrefix() . ' '
- . '<input type="hidden" name="' . $this->_name . '" value="' . $value . '" class="category-id" '
- . $this->_endTag
- . '<button class="btn btn-primary btn-category" '
- . $this->renderAttributes() . '>'
- . (($categoryName === null) ? $translate->_('Select Category') : $categoryName)
- . '</button> '
- . '<i class="fa fa-times btn-category-cancel" style="display: '
- . (($categoryName === null) ? 'none' : 'inline-block') . '"></i>'
- . $this->getSuffix()
- . '<div class="form-boxes"></div>';
- return $output;
- }
- }
|