Kaynağa Gözat

Merge branch 'master' of https://github.com/unaio/una

AntonLV 8 yıl önce
ebeveyn
işleme
366848526c

+ 1 - 1
inc/version.inc.php

@@ -7,6 +7,6 @@
  * @{
  */
 
-define('BX_DOL_VERSION', '9.0.0-RC11'); ///< system files version, for DB version @see bx_get_ver, DB and files version must match
+define('BX_DOL_VERSION', '9.0.0-DEV16'); ///< system files version, for DB version @see bx_get_ver, DB and files version must match
 
 /** @} */

+ 1 - 1
install/index.php

@@ -10,7 +10,7 @@
 define ('BX_DOL_INSTALL',  true);
 define ('BX_SKIP_INSTALL_CHECK', true);
 
-define ('BX_DOL_VER', '9.0.0-RC11');
+define ('BX_DOL_VER', '9.0.0-DEV16');
 
 define ('BX_INSTALL_DEFAULT_LANGUAGE', 'en');
 

+ 479 - 0
upgrade/files/9.0.0.RC10-9.0.0.RC11/files/modules/base/notifications/classes/BxBaseModNotificationsDb.php

@@ -0,0 +1,479 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    BaseNotifications Base classes for Notifications like modules
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/*
+ * Module database queries
+ */
+class BxBaseModNotificationsDb extends BxBaseModGeneralDb
+{
+    protected $_oConfig;
+
+    protected $_sTable;
+    protected $_sTableHandlers;
+    protected $_sTableSettings;
+    protected $_sTableSettings2Users;
+
+    protected $_sHandlerMask;
+    protected $_aDeliveryTypes;
+
+    public function __construct(&$oConfig)
+    {
+        parent::__construct($oConfig);
+
+        $this->_oConfig = $oConfig;
+
+        $this->_sTable = $this->_sPrefix . 'events';
+        $this->_sTableHandlers = $this->_sPrefix . 'handlers';
+        $this->_sTableSettings = $this->_sPrefix . 'settings';
+        $this->_sTableSettings2Users = $this->_sPrefix . 'settings2users';
+
+        $this->_sHandlerMask = "%s-%s";
+        $this->_aDeliveryTypes = array(BX_BASE_MOD_NTFS_DTYPE_SITE);
+    }
+
+    public function getAlertHandlerId()
+    {
+        $sQuery = $this->prepare("SELECT `id` FROM `sys_alerts_handlers` WHERE `name`=? LIMIT 1", $this->_oConfig->getObject('alert'));
+        return (int)$this->getOne($sQuery);
+    }
+
+    public function insertData($aData)
+    {
+        $aHandlers = array();
+    	$aHandlerDescriptor = $this->_oConfig->getHandlerDescriptor();
+
+    	//--- Update Timeline Handlers ---//
+        foreach($aData['handlers'] as $aHandler) {
+            $sContent = $sPrivacy = '';
+
+            $bInsert = $aHandler['type'] == BX_BASE_MOD_NTFS_HANDLER_TYPE_INSERT;
+            if($bInsert) {
+            	if(empty($aHandler['module_class']))
+            		$aHandler['module_class'] = 'Module';
+
+            	$sContent = serialize(array_intersect_key($aHandler, $aHandlerDescriptor));
+            	$sPrivacy = !empty($aHandler['module_event_privacy']) ? $aHandler['module_event_privacy'] : '';
+            }
+
+            $sQuery = $this->prepare("INSERT INTO
+                    `{$this->_sTableHandlers}`
+                SET
+                	`group`=?,
+                    `type`=?,
+                    `alert_unit`=?,
+                    `alert_action`=?,
+                    `content`=?,
+                    `privacy`=?", $aHandler['group'], $aHandler['type'], $aHandler['alert_unit'], $aHandler['alert_action'], $sContent, $sPrivacy);
+
+            if(!$this->query($sQuery))
+                continue;
+
+            $aHandlers[sprintf($this->_sHandlerMask, $aHandler['alert_unit'], $aHandler['alert_action'])] = (int)$this->lastId();
+        }
+
+        //--- Update Settings ---//
+        if(!empty($aData['settings']) && is_array($aData['settings']))
+            foreach($aData['settings'] as $aSetting) {
+                $sHandler = sprintf($this->_sHandlerMask, $aSetting['unit'], $aSetting['action']);
+                if(empty($aHandlers[$sHandler]))
+                    continue;
+
+                foreach($this->_aDeliveryTypes as $sDeliveryType) {
+                    $iOrder = (int)$this->getSetting(array('by' => 'delivery_max_order', 'delivery' => $sDeliveryType));
+
+                    foreach($aSetting['types'] as $sType) {
+                        $sTitle = $this->_oConfig->getHandlersActionTitle($aSetting['unit'], $aSetting['action'], $sType);
+
+                        $this->query("INSERT INTO `{$this->_sTableSettings}` SET `group`=:group, `handler_id`=:handler_id, `type`=:type, `delivery`=:delivery, `title`=:title, `order`=:order", array(
+                            'group' => $aSetting['group'],
+                            'handler_id' => (int)$aHandlers[$sHandler],
+                            'type' => $sType,
+                            'delivery' => $sDeliveryType,
+                            'title' => strcmp($sTitle, _t($sTitle)) !== 0 ? $sTitle : '',
+                            'order' => ++$iOrder
+                        ));
+                    }
+                }
+            }
+
+        //--- Update System Alerts ---//
+        $iHandlerId = $this->getAlertHandlerId();
+        foreach($aData['alerts'] as $aAlert) {
+            $sQuery = $this->prepare("INSERT INTO
+                    `sys_alerts`
+                SET
+                    `unit`=?,
+                    `action`=?,
+                    `handler_id`=?", $aAlert['unit'], $aAlert['action'], $iHandlerId);
+
+            $this->query($sQuery);
+        }
+    }
+
+    public function deleteData($aData)
+    {
+        $aHandlers = array();
+
+    	//--- Update Timeline Handlers ---//
+        foreach($aData['handlers'] as $aHandler) {
+            $sHandler = sprintf($this->_sHandlerMask, $aHandler['alert_unit'], $aHandler['alert_action']); 
+            $aBindings = array(
+                'alert_unit' => $aHandler['alert_unit'],
+                'alert_action' => $aHandler['alert_action'],
+
+                'group' => $aHandler['group'],
+                'type' => $aHandler['type']
+            );
+
+            $aHandlers[$sHandler] = $this->getOne("SELECT `id` FROM `{$this->_sTableHandlers}` WHERE (`alert_unit`=:alert_unit AND `alert_action`=:alert_action) OR (`group`=:group AND `type`=:type) LIMIT 1", $aBindings);
+
+            $this->query("DELETE FROM `{$this->_sTableHandlers}` WHERE (`alert_unit`=:alert_unit AND `alert_action`=:alert_action) OR (`group`=:group AND `type`=:type) LIMIT 1", $aBindings);
+        }
+
+        //--- Update Settings ---//
+        if(!empty($aData['settings']) && is_array($aData['settings']))
+            foreach($aData['settings'] as $aSetting) {
+                $sHandler = sprintf($this->_sHandlerMask, $aSetting['unit'], $aSetting['action']); 
+                if(empty($aHandlers[$sHandler]))
+                    continue;
+
+                foreach($aSetting['types'] as $sType)
+                    $this->query("DELETE FROM `ts`, `tsu` USING `{$this->_sTableSettings}` AS `ts` LEFT JOIN `{$this->_sTableSettings2Users}` AS `tsu` ON `ts`.`id`=`tsu`.`setting_id` WHERE `ts`.`handler_id`=:handler_id AND `ts`.`type`=:type", array(
+                        'handler_id' => (int)$aHandlers[$sHandler],
+                        'type' => $sType,
+                    ));
+            }
+
+        //--- Update System Alerts ---//
+        $iHandlerId = $this->getAlertHandlerId();
+        foreach($aData['alerts'] as $aAlert) {
+            $sQuery = $this->prepare("DELETE FROM
+                    `sys_alerts`
+                WHERE
+                    `unit`=? AND
+                    `action`=? AND
+                    `handler_id`=?
+                LIMIT 1", $aAlert['unit'], $aAlert['action'], $iHandlerId);
+
+            $this->query($sQuery);
+        }
+    }
+
+    public function deleteModuleEvents($aData)
+    {
+		//Delete system events.
+    	foreach($aData['handlers'] as $aHandler)
+            $this->deleteEvent(array('type' => $aHandler['alert_unit'], 'action' => $aHandler['alert_action']));
+    }
+
+    public function activateModuleEvents($aData, $bActivate = true)
+    {
+    	$iActivate = $bActivate ? 1 : 0;
+
+    	//Activate (deactivate) system events.
+    	foreach($aData['handlers'] as $aHandler)    		
+            $this->updateEvent(array('active' => $iActivate), array('type' => $aHandler['alert_unit'], 'action' => $aHandler['alert_action']));
+    }
+
+    public function getHandlers($aParams = array())
+    {
+        $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
+        $sWhereClause = '';
+
+        if(!empty($aParams))
+            switch($aParams['type']) {
+                case 'by_group_key_type':
+                    $aMethod['name'] = 'getAllWithKey';
+                    $aMethod['params'][1] = 'type';
+                    $aMethod['params'][2] = array(
+                            'group' => $aParams['group']
+                    );
+
+                    $sWhereClause = "AND `group`=:group";
+                    break;
+            }
+
+        $aMethod['params'][0] = "SELECT * FROM `{$this->_sTableHandlers}` WHERE 1 " . $sWhereClause;
+        return call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
+    }
+
+    public function getSetting($aParams = array())
+    {
+    	$CNF = &$this->_oConfig->CNF;
+    	$aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
+
+    	$sSelectClause = "`ts`.*, `th`.`alert_unit` AS `unit`, `th`.`alert_action` AS `action`";
+    	$sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = $sLimitClause = "";
+        switch($aParams['by']) {
+            case 'id':
+            	$aMethod['name'] = 'getRow';
+            	$aMethod['params'][1] = array(
+                    'id' => $aParams['id']
+                );
+
+                $sWhereClause = " AND `ts`.`id`=:id";
+                break;
+
+            case 'tsu_id':
+            	$aMethod['name'] = 'getRow';
+            	$aMethod['params'][1] = array(
+                    'id' => $aParams['id']
+                );
+
+                $sJoinClause = "LEFT JOIN `" . $this->_sTableSettings2Users . "` AS `tsu` ON `ts`.`id`=`tsu`.`setting_id`";
+                $sWhereClause = " AND `tsu`.`id`=:id";
+                break;
+
+            case 'tsu_allowed':
+                $aMethod['name'] = 'getRow';
+            	$aMethod['params'][1] = array(
+                    'handler_id' => $aParams['handler_id'], 
+                    'delivery' => $aParams['delivery'], 
+                    'type' => $aParams['type'], 
+                    'user_id' => $aParams['user_id']
+                );
+
+                $sSelectClause = "`ts`.`active` AS `active_adm`, IF(NOT ISNULL(`tsu`.`active`), `tsu`.`active`, 1) AS `active_pnl`";
+                $sJoinClause = "LEFT JOIN `" . $this->_sTableSettings2Users . "` AS `tsu` ON `ts`.`id`=`tsu`.`setting_id`";
+                $sWhereClause = " AND `ts`.`handler_id`=:handler_id AND `ts`.`delivery`=:delivery AND `ts`.`type`=:type AND `tsu`.`user_id`=:user_id";
+                break;
+
+            case 'delivery_max_order':
+                $aMethod['name'] = 'getOne';
+                $aMethod['params'][1] = array(
+                    'delivery' => $aParams['delivery'],
+                );
+
+                $sSelectClause = "`ts`.`order`";
+                $sWhereClause = " AND `ts`.`delivery`=:delivery";
+                $sOrderClause = "`ts`.`order` DESC";
+                $sLimitClause = "1";
+                break;
+
+            case 'group_type_delivery':
+                $aMethod['name'] = 'getColumn';
+                $aMethod['params'][1] = array(
+                    'group' => $aParams['group'],
+                    'delivery' => $aParams['delivery'],
+                    'type' => $aParams['type']
+                );
+
+                $sSelectClause = "`ts`.`id`";
+                $sWhereClause = " AND `ts`.`group`=:group AND `ts`.`delivery`=:delivery AND `ts`.`type`=:type";
+                if($aParams['active'])
+                     $sWhereClause .= " AND `ts`.`active`='1'";
+                break;
+
+            case 'user_id_pairs':
+                $aMethod['name'] = 'getPairs';
+                $aMethod['params'][1] = 'id';
+                $aMethod['params'][2] = 'active';
+                $aMethod['params'][3] = array(
+                    'user_id' => $aParams['user_id']
+                );
+
+                $sSelectClause = "`ts`.`id` AS `id`, `tsu`.`active` AS `active`";
+                $sJoinClause = "LEFT JOIN `" . $this->_sTableSettings2Users . "` AS `tsu` ON `ts`.`id`=`tsu`.`setting_id`";
+                $sWhereClause = " AND `tsu`.`user_id`=:user_id";
+                break;
+
+            case 'all_active':
+                $sWhereClause = " AND `ts`.`active`='1'";
+                break;
+
+            case 'all_inactive':
+                $sWhereClause = " AND `ts`.`active`='0'";
+                break;
+        }
+
+        $sOrderClause = !empty($sOrderClause) ? "ORDER BY " . $sOrderClause : $sOrderClause;
+        $sLimitClause = !empty($sLimitClause) ? "LIMIT " . $sLimitClause : $sLimitClause;
+
+        $aMethod['params'][0] = "SELECT
+                " . $sSelectClause . "
+            FROM `" . $this->_sTableSettings . "` AS `ts`
+            LEFT JOIN `" . $this->_sTableHandlers . "` AS `th` ON `ts`.`handler_id`=`th`.`id` " . $sJoinClause . "
+            WHERE 1" . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause . " " . $sLimitClause;
+
+        return call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
+    }
+
+    public function updateSetting($aParamsSet, $aParamsWhere)
+    {
+        if(empty($aParamsSet) || empty($aParamsWhere))
+            return false;
+
+        $sSql = "UPDATE `{$this->_sTableSettings}` SET " . $this->arrayToSQL($aParamsSet) . " WHERE " . $this->arrayToSQL($aParamsWhere, " AND ");
+        return $this->query($sSql);
+    }
+
+    public function activateSettingById($bActive, $mixedId)
+    {
+        if(!is_array($mixedId))
+            $mixedId = array($mixedId);
+
+        return $this->query("UPDATE `{$this->_sTableSettings}` SET `active`=:active WHERE `id` IN (" . $this->implode_escape($mixedId) . ")", array(
+            'active' => (int)$bActive
+        ));
+    }
+
+    public function activateSettingByIdUser($bActive, $iUserId, $mixedSettingId)
+    {
+        if(!is_array($mixedSettingId))
+            $mixedSettingId = array($mixedSettingId);
+
+        return $this->query("UPDATE `{$this->_sTableSettings2Users}` SET `active`=:active WHERE `user_id`=:user_id AND `setting_id` IN (" . $this->implode_escape($mixedSettingId) . ")", array(
+            'user_id' => $iUserId, 
+            'active' => (int)$bActive
+        ));
+    }
+
+    public function initSettingUser($iUserId)
+    {
+        $aSettingsAll = $this->getSetting(array('by' => 'all_active'));
+        $aSettingsUser = $this->getSetting(array('by' => 'user_id_pairs', 'user_id' => $iUserId));
+
+        foreach($aSettingsAll as $aSetting) {
+            if(isset($aSettingsUser[$aSetting['id']]))
+                continue;
+
+            $this->insertSettingUser(array(
+                'user_id' => $iUserId,
+                'setting_id' => $aSetting['id']
+            ));
+        }
+
+        $aSettingsAll = $this->getSetting(array('by' => 'all_inactive'));
+        foreach($aSettingsAll as $aSetting) {
+            if(!isset($aSettingsUser[$aSetting['id']]))
+                continue;
+
+            $this->deleteSettingUser(array(
+                'user_id' => $iUserId,
+                'setting_id' => $aSetting['id']
+            ));
+        }
+    }
+
+    public function insertSettingUser($aParamsSet)
+    {
+        if(empty($aParamsSet))
+            return 0;
+
+        if((int)$this->query("INSERT INTO `{$this->_sTableSettings2Users}` SET " . $this->arrayToSQL($aParamsSet)) <= 0)
+            return 0;
+
+        return (int)$this->lastId();
+    }
+
+    public function deleteSettingUser($aParamsWhere)
+    {
+        if(empty($aParamsWhere))
+            return false;
+
+        return (int)$this->query("DELETE FROM `{$this->_sTableSettings2Users}` WHERE " . $this->arrayToSQL($aParamsWhere, ' AND ')) <= 0;
+    }
+
+    public function insertEvent($aParamsSet)
+    {
+        if(empty($aParamsSet))
+            return 0;
+
+        $aSet = array();
+        foreach($aParamsSet as $sKey => $sValue)
+           $aSet[] = "`" . $sKey . "`=:" . $sKey;
+
+		if(!isset($aParamsSet['date']))
+			$aSet[] = "`date`=UNIX_TIMESTAMP()";
+
+        if((int)$this->query("INSERT INTO `{$this->_sTable}` SET " . implode(", ", $aSet), $aParamsSet) <= 0)
+            return 0;
+
+        return (int)$this->lastId();
+    }
+
+    public function updateEvent($aParamsSet, $aParamsWhere)
+    {
+        if(empty($aParamsSet) || empty($aParamsWhere))
+            return false;
+
+        $sSql = "UPDATE `{$this->_sTable}` SET " . $this->arrayToSQL($aParamsSet) . " WHERE " . $this->arrayToSQL($aParamsWhere, " AND ");
+        return $this->query($sSql);
+    }
+
+    public function deleteEvent($aParams, $sWhereAddon = "")
+    {
+        $sSql = "DELETE FROM `{$this->_sTable}` WHERE " . $this->arrayToSQL($aParams, " AND ") . $sWhereAddon;
+        return $this->query($sSql);
+    }
+
+    public function getEvents($aParams, $bReturnCount = false)
+    {
+        list($sMethod, $sSelectClause, $sJoinClause, $sWhereClause, $sOrderClause, $sLimitClause) = $this->_getSqlPartsEvents($aParams);
+
+        $sSql = "SELECT {select}
+            FROM `{$this->_sTable}`
+            LEFT JOIN `{$this->_sTableHandlers}` ON `{$this->_sTable}`.`type`=`{$this->_sTableHandlers}`.`alert_unit` AND `{$this->_sTable}`.`action`=`{$this->_sTableHandlers}`.`alert_action` " . $sJoinClause . "
+            WHERE 1 " . $sWhereClause . " {order} {limit}";
+
+        $aEntries = $this->$sMethod(str_replace(array('{select}', '{order}', '{limit}'), array($sSelectClause, $sOrderClause, $sLimitClause), $sSql));
+        if(!$bReturnCount)
+        	return $aEntries;
+
+        return array($aEntries, (int)$this->getOne(str_replace(array('{select}', '{order}', '{limit}'), array("COUNT(*)", "", ""), $sSql)));
+    }
+
+    protected function _getSqlPartsEvents($aParams)
+    {
+    	$sMethod = 'getAll';
+        $sSelectClause = "`{$this->_sTable}`.*";
+        $sJoinClause = $sWhereClause = $sOrderClause = $sLimitClause = "";
+
+        switch($aParams['browse']) {
+            case 'id':
+                $sMethod = 'getRow';
+                $sWhereClause = $this->prepareAsString("AND `{$this->_sTable}`.`id`=? ", $aParams['value']);
+                $sLimitClause = "LIMIT 1";
+                break;
+
+            case 'first':
+                    $sMethod = 'getRow';
+                    list($sJoinClause, $sWhereClause) = $this->_getSqlPartsEventsList($aParams);
+                    $sOrderClause = "ORDER BY `{$this->_sTable}`.`date` DESC, `{$this->_sTable}`.`id` DESC";
+                    $sLimitClause = "LIMIT 1";
+                    break;
+
+            case 'last':
+                    $sMethod = 'getRow';
+                    list($sJoinClause, $sWhereClause) = $this->_getSqlPartsEventsList($aParams);
+                    $sOrderClause = "ORDER BY `{$this->_sTable}`.`date` ASC, `{$this->_sTable}`.`id` ASC";
+                    $sLimitClause = "LIMIT 1";
+                    break;
+
+            case 'list':
+                    list($sJoinClause, $sWhereClause) = $this->_getSqlPartsEventsList($aParams);
+                    $sOrderClause = "ORDER BY `{$this->_sTable}`.`date` DESC, `{$this->_sTable}`.`id` DESC";
+                    $sLimitClause = isset($aParams['per_page']) ? "LIMIT " . $aParams['start'] . ", " . $aParams['per_page'] : "";
+                    break;
+        }
+
+        return array($sMethod, $sSelectClause, $sJoinClause, $sWhereClause, $sOrderClause, $sLimitClause);
+    }
+
+    protected function _getSqlPartsEventsList($aParams)
+    {
+    	$sJoinClause = $sWhereClause = "";
+
+    	return array($sJoinClause, $sWhereClause);
+    }
+}
+
+/** @} */