Files
wyczarujprezent.pl/modules/jxwishlist/jxwishlist.php
2024-10-28 22:14:22 +01:00

473 lines
16 KiB
PHP

<?php
/**
* 2017-2019 Zemez
*
* JX Wishlist
*
* NOTICE OF LICENSE
*
* This source file is subject to the General Public License (GPL 2.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/GPL-2.0
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade the module to newer
* versions in the future.
*
* @author Zemez
* @copyright 2017-2019 Zemez
* @license http://opensource.org/licenses/GPL-2.0 General Public License (GPL 2.0)
*/
if (!defined('_PS_VERSION_')) {
exit;
}
include_once(_PS_MODULE_DIR_.'jxwishlist/classes/ClassJxWishlist.php');
class Jxwishlist extends ModuleGrid
{
protected $ssl = 'http://';
private $columns = null;
private $default_sort_column = null;
private $default_sort_direction = null;
private $empty_message = null;
private $paging_message = null;
public function __construct()
{
$this->name = 'jxwishlist';
$this->tab = 'front_office_features';
$this->version = '1.1.3';
$this->bootstrap = true;
$this->author = 'Zemez';
parent::__construct();
$this->default_sort_column = 'totalPriceSold';
$this->default_sort_direction = 'DESC';
$this->displayName = $this->l('JX Wishlist');
$this->module_key = '4807724721dbb4cdd5ad952d5da5bcf3';
$this->description = $this->l('Module to create a wishlist and share post on facebook.');
$this->default_wishlist_name = $this->l('My wishlist');
$this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_);
$this->id_shop = Context::getContext()->shop->id;
$this->controllers = array(
'wishlists',
'wishlist'
);
$this->columns = array(
array(
'id' => 'id_product',
'header' => $this->l('id'),
'dataIndex' => 'id_product',
'align' => 'center'
),
array(
'id' => 'name',
'header' => $this->l('Name'),
'dataIndex' => 'name',
'align' => 'left'
),
array(
'id' => 'totalQuantityAdds',
'header' => $this->l('Quantity adds'),
'dataIndex' => 'totalQuantityAdds',
'align' => 'center'
),
array(
'id' => 'totalQuantitySold',
'header' => $this->l('Quantity sold'),
'dataIndex' => 'totalQuantitySold',
'align' => 'center'
)
);
}
public function install()
{
include(dirname(__FILE__).'/sql/install.php');
Configuration::updateValue('JX_WISHLIST_APP_ID', '');
return parent::install()
&& $this->registerHook('registerGDPRConsent')
&& $this->registerHook('actionDeleteGDPRCustomer')
&& $this->registerHook('actionExportGDPRData')
&& $this->registerHook('displayHeader')
&& $this->registerHook('moduleRoutes')
&& $this->registerHook('displayCustomerAccount')
&& $this->registerHook('productActions')
&& $this->registerHook('displayBackOfficeHeader')
&& $this->registerHook('AdminStatsModules')
&& $this->registerHook('displayBeforeBodyClosingTag')
&& $this->registerHook('displayNav2')
&& $this->registerHook('displayMyAccountBlock')
&& $this->registerHook('displayProductListFunctionalButtons')
&& $this->registerHook('displayProductListReviews');
}
public function uninstall()
{
include(dirname(__FILE__).'/sql/uninstall.php');
if (!Configuration::deleteByName('JX_WISHLIST_APP_ID')
|| !parent::uninstall()) {
return false;
}
return true;
}
public function getContent()
{
$output = '';
$errors = array();
if (Tools::isSubmit('submitJxWishlist')) {
if (Tools::isEmpty(Tools::getValue('JX_WISHLIST_APP_ID'))) {
$errors[] = $this->l('App id is required.');
} else {
$this->postProcess();
}
if (isset($errors) && count($errors)) {
$output .= $this->displayError(implode('<br />', $errors));
} else {
$output .= $this->displayConfirmation($this->l('Settings updated.'));
}
}
return $output.$this->renderForm();
}
/**
* Generate form for setting creating
*/
public function renderForm()
{
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Settings'),
'icon' => 'icon-cogs'
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Facebook App Id'),
'name' => 'JX_WISHLIST_APP_ID',
'col' => 2,
'required' => true
)
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = $lang->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$helper->identifier = $this->identifier;
$helper->submit_action = 'submitJxWishlist';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).
'&configure='.$this->name.
'&tab_module='.$this->tab.
'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->tpl_vars = array(
'fields_value' => $this->getConfigFieldsValues(),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id
);
return $helper->generateForm(array($fields_form));
}
/**
* @return array setting values for list
*/
public function getConfigFieldsValues()
{
return array(
'JX_WISHLIST_APP_ID' => Tools::getValue('JX_WISHLIST_APP_ID', Configuration::get('JX_WISHLIST_APP_ID')),
);
}
/**
* Update Configuration values
*/
protected function postProcess()
{
$form_values = $this->getConfigFieldsValues();
foreach (array_keys($form_values) as $key) {
Configuration::updateValue($key, Tools::getValue($key));
}
}
public function getDateByClassJxWishlist()
{
return $this->getDate();
}
/**
* Creating Stats
*/
public function getData()
{
$adds = ClassJxWishlist::getProductByStatsAdds();
$orders = ClassJxWishlist::getProductByStatsOrders();
if ($orders) {
foreach ($orders as $order) {
foreach ($adds as $key => $add) {
if ($order['id_product'] == $add['id_product']) {
$adds[$key]['totalQuantitySold'] = $order['totalQuantitySold'];
}
if (!isset($adds[$key]['totalQuantitySold'])) {
$adds[$key]['totalQuantitySold'] = 0;
}
}
}
} else {
foreach ($adds as $key => $add) {
if (!isset($adds[$key]['totalQuantitySold'])) {
$adds[$key]['totalQuantitySold'] = 0;
}
}
}
$this->_values = $adds;
$this->_totalCount = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT FOUND_ROWS()');
}
/**
* Get link for ajax controller
* @param $type and $data
* @return string
*/
public function getAjaxHtml($type, $data)
{
$this->context->smarty->assign('data', $data);
return $this->display($this->_path, 'views/templates/front/'.$type.'.tpl');
}
public function hookActionExportGDPRData($customer)
{
if (!Tools::isEmpty($customer['email']) && Validate::isEmail($customer['email'])) {
$user = Customer::getCustomersByEmail($customer['email']);
if ($customerWishlists = ClassJxWishlist::getUsersWishlistsOnRequest($user[0]['id_customer'])) {
return json_encode($customerWishlists);
}
return json_encode($this->displayName.$this->l(' module doesn\'t contain any information about you or it is unable to export it using email.'));
}
}
public function hookActionDeleteGDPRCustomer($customer)
{
if (!empty($customer['email']) && Validate::isEmail($customer['email'])) {
if ($user = Customer::getCustomersByEmail($customer['email'])) {
return json_encode(ClassJxWishlist::removeUsersWishlistsOnRequest($user[0]['id_customer']));
}
return json_encode($this->displayName.$this->l(' module! An error occurred during customer data removing'));
}
}
/**
* Create url for wishlist result page
*
* @param $params
*
* @return array
*/
public function hookModuleRoutes($params)
{
return array(
'module-jxwishlist-wishlists' => array(
'controller' => 'wishlists',
'rule' => 'wishlists',
'keywords' => array(),
'params' => array(
'fc' => 'module',
'module' => 'jxwishlist',
),
),
'module-jxwishlist-wishlist' => array(
'controller' => 'wishlist',
'rule' => 'wishlist',
'keywords' => array(),
'params' => array(
'fc' => 'module',
'module' => 'jxwishlist'
),
)
);
}
public function hookAdminStatsModules()
{
$engine_params = array(
'id' => 'id_product',
'title' => $this->displayName,
'columns' => $this->columns,
'defaultSortColumn' => $this->default_sort_column,
'defaultSortDirection' => $this->default_sort_direction,
'emptyMessage' => $this->empty_message,
'pagingMessage' => $this->paging_message
);
if (Tools::getValue('export')) {
$this->csvExport($engine_params);
}
$this->smarty->assign(
array(
'display_name' => $this->displayName,
'engine_params' => $this->engine($engine_params),
'export_url' => Tools::safeOutput($_SERVER['REQUEST_URI'].'&export=1')
)
);
return $this->display(__FILE__, 'views/templates/admin/jxwishlist-stats.tpl');
}
public function hookDisplayNav2()
{
if (Configuration::get('JX_WISHLIST_APP_ID') != false) {
return $this->display(__FILE__, 'views/templates/hook/jxwishlist-top.tpl');
}
}
public function hookDisplayCustomerAccount()
{
if (Configuration::get('JX_WISHLIST_APP_ID') != false) {
return $this->display(__FILE__, 'views/templates/hook/jxwishlist-customer-account.tpl');
}
}
public function hookDisplayMyAccountBlock()
{
if (Configuration::get('JX_WISHLIST_APP_ID') != false) {
return $this->display(__FILE__, 'views/templates/hook/jxwishlist-my-account.tpl');
}
}
public function hookProductActions($params)
{
if (Configuration::get('JX_WISHLIST_APP_ID') != false) {
$cookie = $params['cookie'];
$this->smarty->assign(array(
'id_product' => (int)Tools::getValue('id_product'),
));
if (isset($cookie->id_customer)) {
$this->smarty->assign(array(
'wishlists' => ClassJxWishlist::getByIdCustomer($cookie->id_customer),
));
}
return $this->display(__FILE__, 'views/templates/hook/jxwishlist-product.tpl');
}
}
public function hookDisplayProductListFunctionalButtons($params)
{
if (Configuration::get('JX_WISHLIST_APP_ID') != false) {
$cookie = $params['cookie'];
$this->smarty->assign(array(
'product' => $params['product'],
));
if (isset($cookie->id_customer)) {
$this->smarty->assign(array(
'wishlists' => ClassJxWishlist::getByIdCustomer($cookie->id_customer),
));
}
return $this->display(__FILE__, 'views/templates/hook/jxwishlist-products-list.tpl');
}
}
public function hookDisplayProductListReviews($params)
{
return $this->hookDisplayProductListFunctionalButtons($params);
}
public function hookHeader()
{
$this->context->controller->requireAssets(array('font-awesome'));
$this->context->controller->registerJavascript('module-jxwishlist', 'modules/'.$this->name.'/views/js/ajax-wishlists.js');
$this->context->controller->registerStylesheet('module-jxwishlist', 'modules/'.$this->name.'/views/css/front_wishlists.css');
$layouts = Tools::scandir($this->local_path . 'views/js/layouts/', 'js');
foreach ($layouts as $layout) {
$this->context->controller->addJS($this->_path . 'views/js/layouts/' . $layout);
}
$wishlists = ClassJxWishlist::getByIdCustomer($this->context->customer->id);
if (empty($this->context->cookie->id_wishlist) === true || ClassJxWishlist::exists($this->context->cookie->id_wishlist, $this->context->customer->id) === false) {
if (!count($wishlists)) {
$id_wishlist = false;
} else {
$id_wishlist = (int)$wishlists[0]['id_wishlist'];
$this->context->cookie->id_wishlist = (int)$id_wishlist;
}
} else {
$id_wishlist = $this->context->cookie->id_wishlist;
}
$this->smarty->assign(
array(
'id_wishlist' => $id_wishlist,
'wishlists' => $wishlists
)
);
Media::addJsDefL('loggin_wishlist_required', $this->l('Musisz być zalogowany aby skorzystać z listy życzeń.'));
Media::addJsDefL('added_to_wishlist', $this->l('Product został dodany do listy życzeń.'));
Media::addJsDefL('change_name_wishlist', $this->l('Zmień nazwę'));
Media::addJsDefL('btn_wishlist', $this->l('Moje listy życzeń'));
Media::addJsDefL('share_btn_text', $this->l('Udostępnij'));
Media::addJsDefL('back_btn_text', $this->l('Wstecz'));
Media::addJsDefL('wishlist_title_step_1', $this->l('Krok 1'));
Media::addJsDefL('wishlist_title_step_1_desc', $this->l('(Select a layout to create an image that you post it)'));
Media::addJsDefL('wishlist_title_step_2_desc', $this->l('(To add to the image of the cell)'));
Media::addJsDefL('wishlist_title_step_2', $this->l('Krok 2'));
Media::addJsDefL('wishlist_no_product', $this->l('Brak produktów'));
Media::addJsDef(array('mywishlists_url' => $this->context->link->getModuleLink('jxwishlist','wishlists',array(), true)));
Media::addJsDef(array('logo_url' => _PS_IMG_.Configuration::get('PS_LOGO')));
Media::addJsDef(array('isLogged' => Context::getContext()->customer->isLogged()));
}
public function hookDisplayBackOfficeHeader()
{
if (Tools::getValue('configure') != $this->name) {
return;
}
$this->context->controller->addJS($this->_path.'views/js/jxwishlist_admin.js');
$this->context->controller->addCSS($this->_path.'views/css/jxwishlist_admin.css');
}
public function hookDisplayBeforeBodyClosingTag()
{
if (Tools::getValue('controller') == 'wishlists') {
return $this->display($this->_path, '/views/templates/hook/jxwishlist-script.tpl');
}
}
}