| @@ -162,9 +162,9 @@ | ||
| 162 | 162 | $orm = self::get_orm(); |
| 163 | 163 | $model = $orm->get_repository( self::class ) |
| 164 | 164 | ->where( 'synced', 'in', array( 0, 1 ) ) |
| 165 | 165 | ->order_by( 'id', 'desc' ) |
| 166 | - ->limit( '0,2' ) | |
| 166 | + ->limit( 2, 0 ) | |
| 167 | 167 | ->get(); |
| 168 | 168 | |
| 169 | 169 | return array_pop( $model ); |
| 170 | 170 | } |
| @@ -188,8 +188,9 @@ | ||
| 188 | 188 | * @param array $events Type of the event, e.g. comment, user, system. |
| 189 | 189 | * @param string $user_id Who trigger this event, if it 0, will be guest. |
| 190 | 190 | * @param string $ip IP of who trigger this. |
| 191 | 191 | * @param int|bool $paged Current page. |
| 192 | + * @param int $per_page Number of logs per page. | |
| 192 | 193 | * |
| 193 | 194 | * @return array |
| 194 | 195 | */ |
| 195 | 196 | public static function query( |
| @@ -197,9 +198,10 @@ | ||
| 197 | 198 | $date_to, |
| 198 | 199 | $events = array(), |
| 199 | 200 | $user_id = '', |
| 200 | 201 | $ip = '', |
| 201 | - $paged = 1 | |
| 202 | + $paged = 1, | |
| 203 | + $per_page = 10 | |
| 202 | 204 | ): array { |
| 203 | 205 | $orm = self::get_orm(); |
| 204 | 206 | $builder = $orm->get_repository( self::class ); |
| 205 | 207 | $builder->where( 'timestamp', '>=', $date_from ) |
| @@ -210,13 +212,13 @@ | ||
| 210 | 212 | && count( array_diff( $events, self::allowed_events() ) ) === 0 ) { |
| 211 | 213 | $builder->where( 'event_type', 'in', $events ); |
| 212 | 214 | } |
| 213 | 215 | |
| 214 | - if ( ! empty( $user_id ) ) { | |
| 216 | + if ( is_numeric( $user_id ) && $user_id > 0 ) { | |
| 215 | 217 | $builder->where( 'user_id', $user_id ); |
| 216 | 218 | } |
| 217 | 219 | |
| 218 | - if ( ! empty( $ip ) ) { | |
| 220 | + if ( is_string( $ip ) && '' !== trim( $ip ) ) { | |
| 219 | 221 | $builder->where( 'ip', 'like', "%$ip%" ); |
| 220 | 222 | } |
| 221 | 223 | $builder->order_by( 'timestamp', 'desc' ); |
| 222 | 224 | |
| @@ -221,11 +223,11 @@ | ||
| 221 | 223 | $builder->order_by( 'timestamp', 'desc' ); |
| 222 | 224 | |
| 223 | 225 | if ( false !== $paged ) { |
| 224 | 226 | // If paged == false, then it will be no paging. |
| 225 | - $per_page = 20; | |
| 226 | - $offset = ( ( $paged - 1 ) * $per_page ) . ',' . $per_page; | |
| 227 | - $builder->limit( $offset ); | |
| 227 | + $per_page = max( 1, (int) $per_page ); | |
| 228 | + $offset = ( $paged - 1 ) * $per_page; | |
| 229 | + $builder->limit( $per_page, $offset ); | |
| 228 | 230 | } |
| 229 | 231 | |
| 230 | 232 | return $builder->get(); |
| 231 | 233 | } |
| @@ -273,33 +275,34 @@ | ||
| 273 | 275 | if ( count( $events ) && count( array_diff( $events, self::allowed_events() ) ) === 0 ) { |
| 274 | 276 | $builder->where( 'event_type', 'in', $events ); |
| 275 | 277 | } |
| 276 | 278 | |
| 277 | - if ( ! empty( $user_id ) ) { | |
| 279 | + if ( is_numeric( $user_id ) && $user_id > 0 ) { | |
| 278 | 280 | $builder->where( 'user_id', $user_id ); |
| 279 | 281 | } |
| 280 | 282 | |
| 281 | - if ( ! empty( $ip ) ) { | |
| 283 | + if ( is_string( $ip ) && '' !== trim( $ip ) ) { | |
| 282 | 284 | $builder->where( 'ip', 'like', "%$ip%" ); |
| 283 | 285 | } |
| 284 | 286 | |
| 285 | - return $builder->count(); | |
| 287 | + return (int) $builder->count(); | |
| 286 | 288 | } |
| 287 | 289 | |
| 288 | 290 | /** |
| 289 | 291 | * Mass insert logs, usually fetched from API. |
| 290 | 292 | * |
| 291 | - * @param array $data An array of data to be inserted into the Audit_Log table. | |
| 293 | + * @param array $data An array of data to be inserted into the Audit_Log table. | |
| 294 | + * @param int $synced Whether the logs have already been synced. | |
| 292 | 295 | * |
| 293 | 296 | * @return void |
| 294 | 297 | * @throws ReflectionException If the import method of the Audit_Log class throws a ReflectionException. |
| 295 | 298 | */ |
| 296 | - public static function mass_insert( $data ) { | |
| 299 | + public static function mass_insert( $data, $synced = 1 ) { | |
| 297 | 300 | // Use raw sql for faster. |
| 298 | 301 | foreach ( $data as $datum ) { |
| 299 | 302 | $item = new Audit_Log(); |
| 300 | 303 | $item->import( $datum ); |
| 301 | - $item->synced = 1; | |
| 304 | + $item->synced = $synced; | |
| 302 | 305 | $item->save(); |
| 303 | 306 | } |
| 304 | 307 | } |
| 305 | 308 | |