AlkantarClanX12
Your IP : 216.73.217.24
<?php
/*
Copyright (C) 2015-26 CERBER TECH INC., https://wpcerber.com
Licensed under the GNU GPL.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
*========================================================================*
| |
| ATTENTION! Do not change or edit this file! |
| |
*========================================================================*
*/
final class CRB_Explainer {
private static int $counter = 0;
private static int $user_id = 0;
private static int $activity_type_id;
private static string $closing_html = '';
private static string $ip_address = '';
/* Prevents duplicates when including settings in the explainer */
private static array $dedup_sts = array();
/* Prevents duplicates when including links to the logs in the explainer */
private static array $dedup_links = array();
/**
* Generates UI HTML elements for displaying extended information on an event as a popup
*
* @param int $activity_type_id Activity type ID
* @param int $status_type_id Status type ID
* @param int $user_id User ID
* @param string $settings Comma-separated list of plugin settings from the log entry
* @param string $ip IP address
* @param string $control Link text to open the popup
* @param string $closing_html To be displayed below the explainer text, no block-level HTML tags are allowed
* @param string $footer To be displayed at the bottom of the explainer element
*
* @return string Sanitized HTML
*
* @since 9.6.1.3
*/
static function create_popup( int $activity_type_id, int $status_type_id, int $user_id, string $settings, string $ip = '', string $control = '', string $closing_html = '', string $footer = '' ): string {
$set_list = $settings ? explode( ',', $settings ) : array();
self::$activity_type_id = $activity_type_id;
self::$closing_html = $closing_html;
self::$ip_address = $ip;
if ( ! $explainer = self::create( $activity_type_id, $status_type_id, $user_id, $set_list ) ) {
return '';
}
self::$counter++;
$dom_id = 'crb-expl-' . self::$counter;
CRB_Globals::to_admin_footer( '<div class="crb-popup-dialog mfp-hide" id="' . $dom_id . '">' . $explainer . $footer . '</div>' );
if ( ! $control ) {
$control = '<svg height="2em" viewBox="-5 -5 28 28" preserveAspectRatio="xMidYMid meet" focusable="false"><path d="M9 6a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm0 5a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm0 5a2 2 0 1 1 0-4 2 2 0 0 1 0 4z" fill-rule="evenodd"></path></svg>';
}
return '<div class="crb-act-context-menu"><a href="#" data-popup_element_id="' . $dom_id . '" class="crb-popup-dialog-open">' . $control . '</a></div>';
}
/**
* Generate a KB explainer for the given event. Create HTML code using the event details.
*
* @param int $activity_type_id Activity type ID - what happened, always present
* @param int $status_type_id Status type ID - why it happened, optional
* @param int $user_id User ID - who did it OR who was affected, optional
* @param array $set_list List of settings from the log entry that affected WP Cerber behavior, if any
*
* @return string Sanitized HTML
*
* @since 9.6.1.3
*/
static function create( $activity_type_id, $status_type_id = 0, $user_id = 0, $set_list = array() ): string {
self::$dedup_links = array();
self::$dedup_sts = array();
self::$user_id = $user_id;
$explainer = array();
// IP Locked out
if ( $activity_type_id == CRB_EV_IPL || $activity_type_id == CRB_EV_NEL ) {
if ( ( $title = crb_get_lockout_reason( $status_type_id, '' ) )
&& $texts = self::make_explainer( 'reason', $status_type_id, $set_list ) ) {
$explainer[] = array( $title, $texts );
}
}
else {
if ( ( $title = cerber_get_labels( 'activity', $activity_type_id ) )
&& $texts = self::make_explainer( 'activity', $activity_type_id, $set_list ) ) {
$explainer[] = array( $title, $texts );
}
if ( $status_type_id > 0
&& $status_type_id != 520
&& ( $title = cerber_get_labels( 'status', $status_type_id ) )
&& $texts = self::make_explainer( 'status', $status_type_id, $set_list ) ) {
$explainer[] = array( $title, $texts );
}
}
if ( $explainer ) {
$html = '';
foreach ( $explainer as $section ) {
$html .= '<h4>' . $section[0] . '</h4>';
foreach ( $section[1] as $class => $sec_items ) {
$html .= '<div class="crb-kb-' . $class . '">';
foreach ( $sec_items as $item ) {
$html .= '<p class="' . ( $item[1] ?? '' ) . '">' . $item[0] . '</p>';
}
$html .= '</div>';
}
}
return '<div class="crb-explainer">' . $html . '</div>';
}
return '';
}
/**
* Builds and returns an array holding the explainer
*
* @param string $type Type of the event
* @param string|int $id ID of the event
* @param array $set_list Settings from the log entry
*
* @return array Elements of the explainer. HTML is filtered and escaped.
*
* @since 9.6.1.3
*/
static function make_explainer( string $type, $id, $set_list ) {
$setting_expl = array();
// Check for a "master" setting that guided WP Cerber
$final_id = ( $set_list ) ? array_pop( $set_list ) : '';
if ( $final_id
&& ! isset( self::$dedup_sts[ $final_id ] )
&& $st_desc = crb_get_setting_link( $final_id, self::$user_id, true ) ) {
$setting_expl[] = array( crb_get_icon( 'settings' ) . __( 'WP Cerber processed this request according to this setting', 'wp-cerber' ), 'crb-kb-setting-intro' );
$setting_expl[] = array( $st_desc );
self::$dedup_sts[ $final_id ] = 1;
}
else {
$st_desc = '';
}
if ( self::$user_id ) {
$act_link = self::get_user_log_link();
}
else {
$act_link = self::get_ip_log_link();
}
// Now build the explainer
$expl = array();
if ( $kb_entry = self::get_kb_data( $type, $id ) ) {
// Text
if ( $kb_entry['explainer'] ) {
$expl['kb_explain'] = array( array( crb_strip_tags( $kb_entry['explainer'] ) ) );
}
if ( $kb_entry['action'] ) {
$expl['kb_action'] = array( array( crb_strip_tags( $kb_entry['action'] ) ) );
}
if ( self::$closing_html ) {
$expl['kb_closing'] = array( array( self::$closing_html ) );
}
if ( $act_link ) {
$expl['kb_show_log'] = array( array( $act_link ) );
}
// Settings if any
if ( $list = $kb_entry['sts_list'] ?? false ) {
if ( $st_desc ) {
unset( $list[ $final_id ] );
}
$list = array_diff_key( $list, self::$dedup_sts );
if ( ! empty( $list ) ) {
$setting_expl[] = array( crb_get_icon( 'settings' ) . ( ( $st_desc ) ? __( 'Other related WP Cerber settings', 'wp-cerber' ) : __( 'Settings that control behavior of WP Cerber', 'wp-cerber' ) ), 'crb-kb-setting-intro' );
foreach ( $list as $st_id => $st_desc ) {
$setting_expl[] = array( $st_desc );
self::$dedup_sts[ $st_id ] = 1;
}
}
}
if ( $setting_expl ) {
$expl['kb_settings'] = $setting_expl;
}
// Documentation links
if ( $link = $kb_entry['doc_link'] ?? '' ) {
$link = crb_escape_url( $link );
$expl['kb_link'] = array( array( crb_get_icon( 'know_more' ) . '<a href="' . $link . '" target="_blank">' . $link . '</a>' ) );
}
}
else {
if ( $setting_expl ) {
$expl['kb_settings'] = $setting_expl;
if ( $act_link ) {
$expl['kb_show_log'] = array( array( $act_link ) );
}
}
}
return $expl;
}
/**
* Prepares KB entry for use to build an explainer
*
* @param string $type Type of the event
* @param int|string $id ID of the event
*
* @return array|false Returns false if no KB entry found
*
* @since 9.6.1.3
*/
static function get_kb_data( $type, $id ) {
if ( ! $kb = CRB_Wisdom::get( $type, $id ) ) {
return false;
}
$desc = $kb['kb_desc'] ?? '';
$action = $kb['kb_action'] ?? '';
$settings = array();
if ( $kb['kb_sts'] ?? false ) {
foreach ( $kb['kb_sts'] as $setting_id ) {
if ( ( $setting = CRB_Settings_Registry::get_config( array( 'setting' => $setting_id ) ) )
&& $title = $setting['title'] ?? '' ) {
$settings[ $setting_id ] = array( $title, $setting['page_tab_id'] );
}
$settings[ $setting_id ] = crb_get_setting_link( $setting_id, self::$user_id, true );
}
}
if ( $kb['kb_url'] ) {
$doc_link = crb_escape_url( $kb['kb_url'] );
}
else {
$doc_link = '';
}
if ( $desc || $settings || $doc_link ) {
return array( 'explainer' => $desc, 'action' => $action, 'sts_list' => $settings, 'doc_link' => $doc_link );
}
return false;
}
/**
* Returns a link to the IP activity log if applicable, empty string otherwise
*
* @return string
*/
private static function get_ip_log_link(): string {
if ( ! self::$ip_address
|| ( self::$dedup_links[ self::$ip_address ] ?? false ) ) {
return '';
}
self::$dedup_links[ self::$ip_address ] = 1;
$is_suspicious = in_array( self::$activity_type_id, crb_get_activity_set( 'suspicious' ) );
$args = array( 'filter_ip' => self::$ip_address );
if ( ! $is_suspicious ) {
$args['filter_set'] = 1;
$anchor = __( 'View the log of suspicious and malicious activity from this IP address', 'wp-cerber' );
}
else {
$anchor = __( 'View all activity from this IP address', 'wp-cerber' );
}
return crb_get_icon( 'activity' ) . '<a href="' . crb_admin_link_for_html( 'activity', $args ) . '">' . $anchor . '</a>';
}
/**
* Returns a link to the user activity log if applicable, empty string otherwise
*
* @return string
*/
static function get_user_log_link(): string {
if ( ! self::$user_id
|| ( self::$dedup_links[ self::$user_id ] ?? false ) ) {
return '';
}
self::$dedup_links[ self::$user_id ] = 1;
return crb_get_icon( 'activity' ) . '<a href="' . crb_admin_link_for_html( 'activity', [
'filter_user' => self::$user_id
] ) . '">' . __( 'View recent activity and security-related events for this user', 'wp-cerber' ) . '</a>';
}
}
/**
* Class CRB_Wisdom
*
* Retrieve knowledge base (KB), allowing for bundled file loading, remote updates,
* caching, and getting translated KB.
*
*/
final class CRB_Wisdom {
static $kb_data = array();
static bool $initialized = false;
/**
* Returns RAW, unescaped data from the KB
*
* @param string $kb_type
* @param string|int $id
*
* @return array
*
* @since 9.6.1.3
*/
static function get( $kb_type, $id, $default = false ) {
if ( ! self::$initialized ) {
self::load();
}
return crb_array_get( self::$kb_data, array( $kb_type, $id ), $default );
}
/**
* Loading KB to a variable and to the object cache
*
* @return void
*
* @since 9.6.1.3
*/
static function load() {
self::$initialized = true;
self::$kb_data = array();
$locale = self::determine_locale();
if ( self::$kb_data = cerber_cache_get( 'azoth_data' . $locale ) ) {
return;
}
$data = cerber_get_set( 'azoth_loaded' . $locale );
if ( ! $data
&& ! $data = self::load_local_file() ) { // Load from the bundled KB file
return;
}
self::$kb_data = $data['azoth'];
cerber_cache_set( 'azoth_data' . $locale, self::$kb_data, 8 * 3600 );
}
/**
* Loading KB data from the bundled KB file
*
* @return false|array
*
* @since 9.6.1.3
*/
static function load_local_file() {
$kb_file = __DIR__ . '/data/azoth_data.json';
if ( ! file_exists( $kb_file )
|| ! $json_text = file_get_contents( $kb_file ) ) {
return false;
}
$data = json_decode( $json_text, true );
if ( ! $data
|| JSON_ERROR_NONE != json_last_error()
|| empty( $data['azoth'] )
|| empty( $data['kb_updated'] ) ) {
return false;
}
return $data;
}
/**
* Loading updates to KB from the official WP Cerber website
*
* @param int $user_id User to determine the locale (translation) of KB files
*
* @return array|void|WP_Error
*
* @since 9.6.1.3
*/
static function load_remote_file( $user_id = 0 ) {
$user_locale = self::determine_locale( $user_id );
$loaded = crb_get_remote_json( 'https://downloads.wpcerber.com/azoth/azoth_data' . $user_locale . '.json' );
if ( crb_is_wp_error( $loaded ) ) {
return $loaded;
}
if ( empty( $loaded['azoth'] )
|| empty( $loaded['kb_updated'] ) ) {
return;
}
if ( ( $local_file = self::load_local_file() )
&& $local_file['kb_updated'] > $loaded['kb_updated'] ) {
// If we have a previously saved KB data, it's outdated now
cerber_update_set( 'azoth_loaded' . $user_locale, array() );
return;
}
if ( ( $stored = cerber_get_set( 'azoth_loaded' . $user_locale ) )
&& ( $stored['kb_updated'] >= $loaded['kb_updated'] ) ) {
// No update needed
return;
}
// There is an update to KB, let's store it
cerber_update_set( 'azoth_loaded' . $user_locale, $loaded );
return $loaded;
}
/**
* Schedule checking for possible updates to KB.
*
* @return void
*
* @since 9.6.1.3
*/
static function schedule_updating() {
$user_locale = self::determine_locale();
if ( get_site_transient( 'cerber_update_kb' . $user_locale ) ) {
return;
}
CRB_Deferred_Tasks::add( array( 'CRB_Wisdom', 'load_remote_file' ), array( 'load_admin' => 1, 'args' => array( get_current_user_id() ) ) );
set_site_transient( 'cerber_update_kb' . $user_locale, time(), 24 * 3600 );
}
/**
* Returns the user locale if it's non-English.
* Returns an empty string for any English-based locale.
*
* @param int $user_id User to determine the locale (translation). Defaults to the current user.
*
* @return string
*
* @since 9.6.1.3
*/
static function determine_locale( $user_id = 0 ): string {
static $user_locale;
if ( ! $user_locale ) {
$user_locale = crb_sanitize_id( crb_get_admin_locale( (int) $user_id ) );
$user_locale = ( 0 === strpos( $user_locale, 'en_' ) ) ? '' : '_' . $user_locale;
}
return $user_locale;
}
/**
* Clears all cached data.
* Typically, we use it when we need fresh data loaded from the disk or, if it's missing, from WP Cerber's cloud.
*
* @param bool $remote If true, forces to reload data from the cloud instantly. Should be used on installing a new version of WP Cerber.
*
* @return void
*
* @since 9.6.5.14
*/
static function clear_cache( $remote = false ) {
$user_locale = self::determine_locale();
cerber_cache_delete( 'azoth_data' . $user_locale );
cerber_delete_set( 'azoth_loaded' . $user_locale );
if ( $remote ) {
delete_site_transient( 'cerber_update_kb'.$user_locale );
}
else {
set_site_transient( 'cerber_update_kb'.$user_locale, time(), 120 );
}
}
}
Home - Capital GMC Buick Regina
Skip to content
{{ $t(category) }}
Error
{{vehicle.modelData.year}} {{vehicle.modelData.make}} {{vehicle.modelData.model}}
Starting from {{vehicle.modelData.startingPrice | moneyFormat(lang)}}
Welcome to Capital GMC BUICK – REGINA
Thank you for choosing Capital GMC Buick | Regina, your premier certified Buick and GMC dealership proudly serving drivers in Regina and the surrounding communities. Whether you’re searching for a brand-new Buick or GMC vehicle or a meticulously inspected pre-owned model, we have a diverse selection to match your needs and lifestyle.
Beyond our impressive inventory, we offer a seamless and stress-free financing experience through our well-connected finance centre, where our team of experts is dedicated to securing the best loan or lease options for you, quickly, transparently, and hassle-free.
But our commitment to you doesn’t stop at the sale. Our state-of-the-art service centre is staffed with skilled Buick and GMC technicians who use the latest equipment and genuine OEM parts to keep your vehicle running at its best. From routine maintenance to complex repairs, we’ve got you covered.
Experience top-tier customer service, quality vehicles, and expert care, all in one place. Visit Capital GMC Buick | Regina today or call us at 306-205-8072 with any questions. We’re here to help!
Ask a Question
Capital GMC Buick – Regina
Contact Us
Have a question or need assistance? Fill out the form and we will reach out to you as soon as possible.
Notice: JavaScript is required for this content.
CLOSE
Schedule a Visit
Let us know when you are coming and how we can assist you. We can ensure someone will be on hand to help you out at the desired date and time.
Notice: JavaScript is required for this content.
CLOSE
Find a Career
Have a look at our list of available positions and apply online today to join our team!
×
Opportunities to Grow
The auto industry is constantly changing and we want to continue to grow. We offer growth, leadership & mentorship programs to allow our staff to grow with us.
×
Competitive Salary
We have a significant earning potential with incentive-based pay in most roles. We also offer an employee referral bonus with paid bonuses.
×
Health & Dental
We offer a comprehensive benefits package including extended health, dental, and vision care. We also include paramedical, life insurance, paid sick leave, short & long-term disability coverages.
×
Vacation
We value our employees and want everyone to take their vacation time. We offer a minimum of 2 weeks vacation each year.
×
Training & Development
We have many opportunities for paid education and training in-house as well as training from the Manufacturer.
×
$10,000 Cash Giveaway – Terms & Conditions
All October long, stop by Capital GMC Buick Cadillac, to enter for your chance to win $10,000 cash. No purchase is required, but entries must be made in-store.
The contest is open to residents of Saskatchewan who are 18+. Dealership employees and their households are not eligible. Entries will be accepted from October 1 to October 31, 2025. A random draw will take place on November 1, 2025.
The prize is one $10,000 award, paid by cheque, and must be accepted as awarded. Winner will be contacted by phone or email and must respond within 7 days or another entry may be drawn. Odds of winning depend on the number of entries received.By entering, you agree that Capital Automotive Group may use your name and photo for winner announcements. The contest is governed by the laws of Saskatchewan.
Notice: JavaScript is required for this content.
CLOSE