( ! self::$table_exists && ! $this->table_exists() ) { return false; } return $this->update_item( $id, [ 'status' => 'in-progress', ] ); } /** * Change the status to be pending. * * @param int $id DB row ID. * @param string $job_id API job_id. * @param string $queue_name API Queue name. * * @return bool */ public function make_status_pending( int $id, string $job_id, string $queue_name ) { if ( ! self::$table_exists && ! $this->table_exists() ) { return false; } return $this->update_item( $id, [ 'job_id' => $job_id, 'queue_name' => $queue_name, 'status' => 'pending', ] ); } /** * Change the status to be failed. * * @param int $id DB row ID. * @param string $error_code error code. * @param string $error_message error message. * * @return bool */ public function make_status_failed( int $id, string $error_code, string $error_message ) { if ( ! self::$table_exists && ! $this->table_exists() ) { return false; } return $this->update_item( $id, [ 'status' => 'failed', 'error_code' => $error_code, 'error_message' => $error_message, ] ); } /** * Complete a job. * * @param int $id DB row ID. * @param string $hash Hash. * * @return bool */ public function make_status_completed( int $id, string $hash = '' ) { if ( ! self::$table_exists && ! $this->table_exists() ) { return false; } return $this->update_item( $id, [ 'hash' => $hash, 'status' => 'completed', ] ); } /** * Get Used CSS for specific url. * * @param string $url Page Url. * @param bool $is_mobile if the request is for mobile page. * * @return false|mixed */ public function get_row( string $url, bool $is_mobile = false ) { if ( ! self::$table_exists && ! $this->table_exists() ) { return false; } $query = $this->query( [ 'url' => untrailingslashit( $url ), 'is_mobile' => $is_mobile, ] ); if ( empty( $query[0] ) ) { return false; } return $query[0]; } /** * Get all rows with the same url (desktop and mobile versions). * * @param string $url Page url. * * @return array|false */ public function get_rows_by_url( string $url ) { if ( ! self::$table_exists && ! $this->table_exists() ) { return false; } $query = $this->query( [ 'url' => untrailingslashit( $url ), ] ); if ( empty( $query ) ) { return false; } return $query; } /** * Get number of rows with the same hash value. * * @param string $hash Hash. * * @return int */ public function count_rows_by_hash( string $hash ): int { if ( ! self::$table_exists && ! $this->table_exists() ) { return 0; } return $this->query( [ 'hash' => $hash, 'count' => true, ] ); } /** * Update UsedCSS Row last_accessed date to current date. * * @param int $id Used CSS id. * * @return bool */ public function update_last_accessed( int $id ): bool { if ( ! self::$table_exists && ! $this->table_exists() ) { return false; } return (bool) $this->update_item( $id, [ 'last_accessed' => current_time( 'mysql', true ), ] ); } /** * Delete DB row by url. * * @param string $url Page url to be deleted. * * @return bool */ public function delete_by_url( string $url ) { if ( ! self::$table_exists && ! $this->table_exists() ) { return false; } $items = $this->get_rows_by_url( $url ); if ( ! $items ) { return false; } $deleted = true; foreach ( $items as $item ) { $deleted = $deleted && $this->delete_item( $item->id ); } return $deleted; } /** * Get the count of not completed rows. * * @return int */ public function get_not_completed_count() { if ( ! self::$table_exists && ! $this->table_exists() ) { return 0; } return $this->query( [ 'count' => true, 'status__in' => [ 'pending', 'in-progress' ], ] ); } /** * Returns the current status of `wpr_rucss_used_css` table; true if it exists, false otherwise. * * @return boolean */ private function table_exists(): bool { if ( self::$table_exists ) { return true; } // Get the database interface. $db = $this->get_db(); // Bail if no database interface is available. if ( empty( $db ) ) { return false; } // Query statement. $query = 'SHOW TABLES LIKE %s'; $like = $db->esc_like( $db->{$this->table_name} ); $prepared = $db->prepare( $query, $like ); $result = $db->get_var( $prepared ); // Does the table exist? $exists = $this->is_success( $result ); if ( $exists ) { self::$table_exists = $exists; } return $exists; } }