%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sender/lib/internals/model/ |
Current File : /home/bitrix/www/bitrix/modules/sender/lib/internals/model/dailycounter.php |
<?php /** * Bitrix Framework * @package bitrix * @subpackage bitrix24 * @copyright 2001-2017 Bitrix */ namespace Bitrix\Sender\Internals\Model; use Bitrix\Main\Entity; use Bitrix\Main\Type; use Bitrix\Main\DB; /** * Class DailyCounterTable * @package Bitrix\Sender\Internals\Model */ class DailyCounterTable extends Entity\DataManager { /** * Get table name. * * @return string */ public static function getTableName() { return 'b_sender_counter_daily'; } /** * Get map. * * @return array */ public static function getMap() { return array( 'DATE_STAT' => array( 'data_type' => 'date', 'primary' => true, ), 'SENT_CNT' => array( 'data_type' => 'integer', 'default_value' => 0, ), 'TEST_SENT_CNT' => array( 'data_type' => 'integer', 'default_value' => 0, ), 'ERROR_CNT' => array( 'data_type' => 'integer', 'default_value' => 0, ), 'ABUSE_CNT' => array( 'data_type' => 'integer', 'default_value' => 0, ), ); } /** * Merge data. * * @param array $insert Insert data. * @param array $update Update data. * @return void */ public static function mergeData(array $insert, array $update) { $entity = static::getEntity(); $connection = $entity->getConnection(); $helper = $connection->getSqlHelper(); $sql = $helper->prepareMerge($entity->getDBTableName(), $entity->getPrimaryArray(), $insert, $update); $sql = current($sql); if($sql <> '') { $connection->queryExecute($sql); $entity->cleanCache(); } } /** * Increment field value. * * @param string $fieldName Field name. * @param int $increment Increment. * @return void */ public static function incrementFieldValue($fieldName, $increment = 1) { if (!array_key_exists($fieldName, static::getMap())) { return; } $insert = array( "DATE_STAT" => new Type\Date(), $fieldName => $increment, ); $update = array( $fieldName => new DB\SqlExpression("?# + ?i", $fieldName, $increment), ); static::mergeData($insert, $update); } /** * Get current field value. * * @param string $fieldName Field name. * @return int */ public static function getCurrentFieldValue($fieldName) { if (!array_key_exists($fieldName, static::getMap())) { return 0; } $result = static::getRowByDate(); return ($result && isset($result[$fieldName])) ? (int) $result[$fieldName] : 0; } /** * Get row by days left. * * @param integer $daysLeft Days left. * @return array|null */ public static function getRowByDate($daysLeft = 0) { $date = new Type\Date; if ($daysLeft) { $date->add("-$daysLeft day"); } return static::getRow(array( "filter" => array("=DATE_STAT" => $date), "cache" => array("ttl" => 60) )); } }