public function getByUserIDAndGroupableMinutes($user_id, $minutes = 0) { if ($minutes <= 0 || !is_numeric($minutes)) { return $this->getByUserID($user_id); } $notification_type_issue_updated_col = \thebuggenie\core\entities\Notification::TYPE_ISSUE_UPDATED; $seconds = $minutes * 60; list($target_id_col, $notification_type_col, $module_name_col, $is_read_col, $created_at_col, $triggered_by_user_id_col, $user_id_col, $scope_col, $id_col) = $this->getAliasColumns(); $sql = 'SELECT '; $sql_selects = array(); foreach ($this->getAliasColumns() as $column) { $sql_selects[] = $column . ' AS ' . str_replace('.', '_', $column); } $sql .= join(', ', $sql_selects); $sql .= ", (CASE WHEN {$notification_type_col} = '{$notification_type_issue_updated_col}' THEN 1 ELSE {$id_col} END) as {$this->b2db_alias}_custom_group_by"; $sql .= ' FROM ' . Core::getTablePrefix() . $this->getB2DBName() . ' ' . $this->getB2DBAlias(); $sql .= " WHERE {$user_id_col} = {$user_id} AND {$triggered_by_user_id_col} != {$user_id}"; $sql .= " GROUP BY {$this->b2db_alias}_custom_group_by, {$created_at_col} DIV {$seconds}, {$triggered_by_user_id_col}"; $sql .= " ORDER BY {$id_col} DESC"; $crit = $this->getCriteria(); $crit->sql = $sql; $crit->action = 'select'; $statement = \b2db\Statement::getPreparedStatement($crit); $resultset = $statement->performQuery(); return $this->_populateFromResultset($resultset->count() ? $resultset : null); }
:<?php echo \b2db\Core::getPort(); ?> </li> <li><b>Database:</b> <?php echo \b2db\Core::getDBname(); ?> </li> </ul> </li> <li><b>Username:</b> <?php echo \b2db\Core::getUname(); ?> </li> <li><b>Prefix:</b> <?php echo \b2db\Core::getTablePrefix(); ?> </li> <li><b>Connection status:</b> <?php echo \b2db\Core::isConnected() ? 'Connected' : 'Not connected'; ?> </li> <?php if (\b2db\Core::isConnected()) { ?> <li><b>Total query time:</b> <?php if (empty($dbgquerytime)) { echo '0 ms'; } else { echo $dbgquerytime > 1 ? round($dbgquerytime, 2) . 's' : round($dbgquerytime * 1000, 1) . 'ms'; }
public function markUserNotificationsReadByTypesAndIdAndGroupableMinutes($types, $id, $user_id, $minutes = 0, $is_read = 1, $mark_all = true) { if (!is_array($types)) { $types = array($types); } $notification_type_issue_updated_col = \thebuggenie\core\entities\Notification::TYPE_ISSUE_UPDATED; if (($key = array_search($notification_type_issue_updated_col, $types)) === false || ($minutes <= 0 || !is_numeric($minutes))) { if (!$mark_all) { return; } return $this->markUserNotificationsReadByTypesAndId($types, $id, $user_id); } $cols = array_map(function ($col) { return str_replace(self::B2DBNAME . '.', '', $col); }, array('id' => self::ID, 'target_id' => self::TARGET_ID, 'created_at' => self::CREATED_AT, 'is_read' => self::IS_READ, 'notification_type' => self::NOTIFICATION_TYPE, 'user_id' => self::USER_ID, 'scope' => self::SCOPE)); $b2dbname = \b2db\Core::getTablePrefix() . self::B2DBNAME; $seconds = $minutes * 60; $scope = framework\Context::getScope()->getID(); $sub_sql = "SELECT {$cols['id']}, {$cols['target_id']}, ({$cols['created_at']} DIV {$seconds}) AS created_at_div FROM {$b2dbname} WHERE "; if (is_array($id)) { $sub_sql .= $cols['target_id'] . ' IN (' . implode(', ', $id) . ')'; } else { $sub_sql .= "{$cols['target_id']} = {$id}"; } $sql = "UPDATE {$b2dbname} a JOIN ({$sub_sql}) b ON a.{$cols['id']} = b.{$cols['id']} SET a.{$cols['is_read']} = {$is_read} WHERE (a.{$cols['notification_type']} = '{$notification_type_issue_updated_col}') AND (a.{$cols['user_id']} = {$user_id}) AND (a.{$cols['scope']} = {$scope}) AND ((a.{$cols['created_at']} DIV {$seconds}) * a.{$cols['created_at']} DIV (a.{$cols['created_at']})) IN (b.created_at_div)"; $crit = $this->getCriteria(); $crit->sql = $sql; $crit->action = 'update'; $statement = \b2db\Statement::getPreparedStatement($crit); $statement->performQuery(); if (!$mark_all) { return; } unset($types[$key]); $this->markUserNotificationsReadByTypesAndId($types, $id, $user_id); }