✏️ 正在编辑: pisponsors.php
路径:
/home/bpioifn/www/pigmentse/modules/pisponsors/pisponsors.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php # /modules/pisponsors/pisponsors.php /** * pi sponsors - A Prestashop Module * * pi sponsors * * @author pi sponsors <pi.sponsors@yopmail.com> * @version 0.0.1 */ if (!defined('_PS_VERSION_')) exit; // We look for our model since we want to install its SQL from the module install require_once(__DIR__ . '/models/PiSponsors.php'); use PrestaShop\PrestaShop\Core\Grid\Filter\Filter; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use PrestaShop\PrestaShop\Core\Grid\Column\Type\DataColumn; use PrestaShop\PrestaShop\Core\Grid\Definition\GridDefinitionInterface; use PrestaShop\PrestaShop\Core\Grid\Column\Type\Common\ToggleColumn; use PrestaShopBundle\Form\Admin\Type\YesAndNoChoiceType; class PiSponsors extends Module { const DEFAULT_CONFIGURATION = [ // Put your default configuration here, e.g : // 'PISPONSORS_BACKGROUND_COLOR' => '#eee', ]; public $sponsors_tabs = [ [ 'name' => "Pi Sponsors", 'class_name' => 'AdminPiSponsorsAdmin', 'parent_class_name' => 'SELL' ], [ 'name' => "Pi Commandes", 'class_name' => 'AdminPiOrders', 'parent_class_name' => 'DEFAULT', 'icon' => 'shopping_basket' ] ]; public function __construct() { $this->initializeModule(); } public function install() { //hookActionCustomerFormBuilderModifier //ROLE_MOD_TAB_ADMINPIORDERS_CREATE //Duplicate entry 'ROLE_MOD_TAB_ADMINPISPONSORSADMIN_CREATE' for key 'slug' //ps_authorization_role return parent::install() && $this->registerHook('header') && $this->registerHook('actionCustomerGridDefinitionModifier') && $this->registerHook('actionCustomerGridQueryBuilderModifier') //Hooks Admin && $this->registerHook('actionAdminCustomersControllerSaveAfter') && $this->registerHook('actionCustomerFormBuilderModifier') && $this->registerHook('displayAdminCustomers') && $this->registerHook('actionCustomerGridDefinitionModifier') && $this->registerHook('actionCustomerGridQueryBuilderModifier') && $this->registerHook('actionObjectCustomerAddAfter') && $this->registerHook('actionObjectCustomerUpdateAfter') && $this->registerHook('additionalCustomerFormFields') && $this->registerHook('validateCustomerFormFields') && $this->registerHook('actionAfterCreateCustomerFormHandler') && $this->registerHook('actionAfterUpdateCustomerFormHandler') && $this->installTab() && $this->initDefaultConfigurationValues() && PiSponsorsModel::installSql(); } public function uninstall() { return parent::uninstall() && $this->unregisterHook('header') //Hooks Admin && $this->unregisterHook('actionAdminCustomersControllerSaveAfter') && $this->unregisterHook('actionCustomerFormBuilderModifier') && $this->unregisterHook('displayAdminCustomers') && $this->unregisterHook('actionCustomerGridDefinitionModifier') && $this->unregisterHook('actionCustomerGridQueryBuilderModifier') && $this->unregisterHook('actionObjectCustomerAddAfter') && $this->unregisterHook('actionObjectCustomerUpdateAfter') && $this->unregisterHook('additionalCustomerFormFields') && $this->unregisterHook('validateCustomerFormFields') && $this->unregisterHook('actionAfterCreateCustomerFormHandler') && $this->unregisterHook('actionAfterUpdateCustomerFormHandler') && $this->uninstallTab() && $this->deleteDefaultConfigurationValues() && PiSponsorsModel::uninstallSql(); } /** Initialize the module declaration */ private function initializeModule() { $this->name = 'pisponsors'; $this->tab = 'front_office_features'; $this->version = '0.0.1'; $this->author = 'pi sponsors'; $this->need_instance = 1; $this->ps_versions_compliancy = [ 'min' => '1.7.x', 'max' => _PS_VERSION_, ]; $this->bootstrap = false; parent::__construct(); $this->displayName = $this->l('pi sponsors'); $this->description = $this->l('pi sponsors'); $this->confirmUninstall = $this->l('Are you sure you want to uninstall this module ?'); } /** Set module default configuration into database */ private function initDefaultConfigurationValues() { foreach (self::DEFAULT_CONFIGURATION as $key => $value) { if (!Configuration::get($key)) { Configuration::updateValue($key, $value); } } return true; } private function deleteDefaultConfigurationValues() { foreach (self::DEFAULT_CONFIGURATION as $key => $value) { if (!Configuration::get($key)) { Configuration::deleteByName($key); } } return true; } /** * @return bool */ public function installTab() { foreach($this->sponsors_tabs as $tab) { $Tab = new Tab(); $Tab->name = array_fill_keys(Language::getIDs(false) , $tab['name']); $Tab->module = $this->name; $Tab->class_name = $tab["class_name"]; $Tab->id_parent = (int) Tab::getIdFromClassName($tab['parent_class_name']); if (isset($tab['icon'])) { $Tab->icon = $tab['icon']; } if (false === (bool) $Tab->add()) { return false; } } return true; } /** * @return bool */ public function uninstallTab() { foreach($this->sponsors_tabs as $tab) { $tabId = (int) Tab::getIdFromClassName($tab['name']); $Tab = new Tab($tabId); if (false === (bool) $Tab->delete()) { return false; } } return true; } public function hookAdditionalCustomerFormFields($params) { $sponsors = PiSponsorsModel::getSponsors(); if(!empty($sponsors)) { $sponsor = (new FormField) ->setName('id_pi_sponsor') ->setType('select') ->setRequired(true) ->setLabel($this->l('Sponsor')) ->setValue( PiSponsorsModel::getCustomerSponsor( $this->context->customer->id ) ) ; foreach($sponsors as $s) { $sponsor->addAvailableValue( $s['id_pi_sponsors'], $s['name'] ); } if(isset($params['fields'])) { // insert the field into other fields, I choose to put it after teh birthday date $params['fields'] = $this->array_insert_after($params['fields'], 'birthday', ['sponsor'=>$sponsor]); // return empty array because the new field already added with current fields } else { return ['sponsor'=>$sponsor]; } } return []; } public function hookValidateCustomerFormFields($params) { foreach ( $params['fields'] as $field){ /** @var FormField $field */ //Validation custom du champ sponsor id si celui-ci n'est pas vide if ( $field->getName() == 'sponsor' && $field->getValue() != "") { //Mise en place de notre vérification ( ex: 6 caractère pour le champ) if ( !is_numeric($field->getValue())){ //Définition de l'erreur. $field->setErrors(array($this->l('Invalid sponsor'))); } } } //Renvoi du tableau des paramètres return $params['fields']; } /** * Ajouter un sponsor * @param type $params */ public function hookActionObjectCustomerAddAfter($params) { if(Tools::isSubmit('id_pi_sponsor')) { $id_sponsor =(int) Tools::getValue('id_pi_sponsor'); $customer = $params['object']; PiSponsorsModel::setCustomerSponsor($customer->id, $id_sponsor); } else if (Tools::getValue('customer')['id_pi_sponsor']) { $customer = $params['object']; $id_sponsor =(int) Tools::getValue('customer')['id_pi_sponsor']; PiSponsorsModel::setCustomerSponsor($customer->id, $id_sponsor); } } /** * Action effectuée APRES la mise à jour d'un client * Gestion de l'upload de la pièce jointe si il y'a an une * @param type $params */ public function hookActionObjectCustomerUpdateAfter($params) { $this->hookActionObjectCustomerAddAfter($params); } public function hookHeader() { $this->context->controller->addJS($this->_path.'views/js/front.js'); } function array_insert_after( array $array, $key, array $new ) { $keys = array_keys( $array ); $index = array_search( $key, $keys ); $pos = false === $index ? count( $array ) : $index + 1; return array_merge( array_slice( $array, 0, $pos ), $new, array_slice( $array, $pos ) ); } /** * Modification du formulaire d'édition d'un client en BO * @param type $params */ public function hookActionCustomerFormBuilderModifier($params) { $sponsors = PiSponsorsModel::getSponsors(); if(!empty($sponsors)) { $choices = array(); foreach($sponsors as $s) { $choices[$s['name']] = $s['id_pi_sponsors']; } $formBuilder = $params['form_builder']; $allFields = $formBuilder->all(); foreach ($allFields as $inputField => $input) { $formBuilder->add($input); if ($inputField == 'email') { $formBuilder->add( 'id_pi_sponsor', ChoiceType::class, ['label' => 'Sponsor', 'choices' => $choices, 'required' => false] ); } } $params['data']['id_pi_sponsor'] = PiSponsorsModel::getCustomerSponsor($this->context->customer->id); $formBuilder->setData($params['data']); } } public function hookActionAfterUpdateCustomerFormHandler(array $params) { $this->updateCustomerSponsor($params); } public function hookActionAfterCreateCustomerFormHandler(array $params) { $this->updateCustomerSponsor($params); } private function updateCustomerSponsor(array $params) { $customerId = $params['id']; /** @var array $customerFormData */ $customerFormData = $params['form_data']; $id_pi_sponsor = $customerFormData['id_pi_sponsor']; // implement review status saving here } public function hookDisplayAdminCustomers(array $params) { $id_sponsor = PiSponsorsModel::getCustomerSponsor($params['id_customer']); $sponsor_name = "--"; if($id_sponsor) { $sponsor = new PiSponsorsModel($id_sponsor); $sponsor_name = $sponsor->name; } $this->context->smarty->assign([ 'sponsor'=>$sponsor_name ]); return $this->display(__FILE__, 'customer_admin_sponsor.tpl'); } public function hookActionCustomerGridDefinitionModifier(array $params) { /** @var GridDefinitionInterface $definition */ $definition = $params['definition']; $definition ->getColumns() ->addAfter( 'optin', (new DataColumn('sponsor')) ->setName($this->l('Sponsor')) ->setOptions([ 'field' => 'sponsor', ]) ) ; $sponsors = PiSponsorsModel::getSponsors(); $choice_sponsors = [ ''=>null ]; if(!empty($sponsors)) { foreach($sponsors as $sponsor) { $choice_sponsors[$sponsor['name']] = $sponsor['id_pi_sponsors']; } } // For search filter $definition->getFilters()->add( (new Filter('sponsor', ChoiceType::class)) ->setTypeOptions([ 'choices' => $choice_sponsors, ]) ->setAssociatedColumn('sponsor') ); } /** * Hook allows to modify Customers query builder and add custom sql statements. * * @param array $params */ public function hookActionCustomerGridQueryBuilderModifier(array $params) { /** @var QueryBuilder $searchQueryBuilder */ $searchQueryBuilder = $params['search_query_builder']; /** @var CustomerFilters $searchCriteria */ $searchCriteria = $params['search_criteria']; $searchQueryBuilder->addSelect( 'sp.name AS `sponsor`' ); $searchQueryBuilder->leftJoin( 'c', '`' . pSQL(_DB_PREFIX_) . 'pi_sponsors`', 'sp', 'sp.`id_pi_sponsors` = c.`id_pi_sponsor`' ); if ('sponsor' === $searchCriteria->getOrderBy()) { $searchQueryBuilder->orderBy('sp.`name`', $searchCriteria->getOrderWay()); } foreach ($searchCriteria->getFilters() as $filterName => $filterValue) { if ('sponsor' === $filterName) { $searchQueryBuilder->andWhere('sp.`id_pi_sponsors` = :id_pi_sponsors'); $searchQueryBuilder->setParameter('id_pi_sponsors', $filterValue); if (!$filterValue) { $searchQueryBuilder->orWhere('sp.`id_pi_sponsors` IS NULL'); } } } } }
💾 保存文件
← 返回文件管理器