$id]; $this->existsInDB = false; if (is_numeric($id) === true && $id > 0 ) { parent::__construct( $table, $filter, null, false ); $this->existsInDB = true; } else { // Create empty skel. parent::__construct($table, null); } } /** * Saves current definition to database. * * @return mixed Affected rows of false in case of error. * @throws \Exception On error. */ public function save() { if ($this->fields['id'] > 0) { // Update. $updates = $this->fields; $rs = \db_process_sql_update( $this->table, $updates, ['id' => $this->fields['id']] ); if ($rs === false) { global $config; throw new \Exception( __METHOD__.' error: '.$config['dbconnection']->error ); } } else { // Creation. $inserts = $this->fields; // Clean null fields. foreach ($inserts as $k => $v) { if ($v === null) { unset($inserts[$k]); } } $rs = \db_process_sql_insert( $this->table, $inserts ); if ($rs === false) { global $config; throw new \Exception( __METHOD__.' error: '.$config['dbconnection']->error ); } $this->fields['id'] = $rs; } return true; } /** * Remove this calendar. * * @return void */ public function delete() { if ($this->existsInDB === true) { \db_process_delete_temp( $this->table, 'id', $this->fields['id'] ); } } /** * Returns an array with all calendar filtered. * * @param array $fields Fields array or 'count' keyword to retrieve count. * @param array $filter Filters to be applied. * @param boolean $count Retrieve count of items instead results. * @param integer $offset Offset (pagination). * @param integer $limit Limit (pagination). * @param string $order Sort order. * @param string $sort_field Sort field. * @param boolean $select_options Array options for select. * * @return array With all results. * @throws \Exception On error. */ public static function calendars( array $fields=[ '`talert_calendar`.*' ], array $filter=[], bool $count=false, ?int $offset=null, ?int $limit=null, ?string $order=null, ?string $sort_field=null, ?bool $select_options=false ) { $sql_filters = []; $order_by = ''; $pagination = ''; $user_groups = users_get_groups(); $user_groups_ids = implode(',', array_keys($user_groups)); if (isset($filter['free_search']) === true && empty($filter['free_search']) === false ) { $sql_filters[] = vsprintf( ' AND (`talert_calendar`.`name` like "%%%s%%" OR `talert_calendar`.`description` like "%%%s%%")', array_fill(0, 2, $filter['free_search']) ); } $sql_filters[] = ' AND id_group IN ('.$user_groups_ids.')'; if (isset($order) === true) { $dir = 'asc'; if ($order === 'desc') { $dir = 'desc'; }; if (in_array( $sort_field, [ 'name' ] ) === true ) { $order_by = sprintf( 'ORDER BY `talert_calendar`.`%s` %s', $sort_field, $dir ); } else { // Custom field order. $order_by = sprintf( 'ORDER BY `%s` %s', $sort_field, $dir ); } } if (isset($limit) === true && $limit > 0 && isset($offset) === true && $offset >= 0 ) { $pagination = sprintf( ' LIMIT %d OFFSET %d ', $limit, $offset ); } $sql = sprintf( 'SELECT %s FROM `talert_calendar` WHERE 1=1 %s %s %s', join(',', $fields), join(' ', $sql_filters), $order_by, $pagination ); if ($count === true) { $sql = sprintf('SELECT count(*) as n FROM ( %s ) tt', $sql); return ['count' => \db_get_value_sql($sql)]; } $return = \db_get_all_rows_sql($sql); if (is_array($return) === false) { return []; } if ($select_options === true) { $return = array_reduce( $return, function ($carry, $item) { $carry[$item['id']] = $item['name']; return $carry; } ); } return $return; } }