wpsh', $option); } /** * Load JS and CSS * * Loads JS and CSS in user interface. * * @since 1.0.0 * */ public function script() { if ($this->option('persian-num', true, true) && (get_locale() == 'fa_IR' || get_locale() == 'fa_AF')) : wp_enqueue_script('wpsh', WPSH_URL . 'assets/js/wpsh.js', array('jquery'), WPSH_VERSION, true); $isShamsiInAdmin = array( 'in_admin' => (is_admin()) ? 1 : 0, 'base' => false ); wp_localize_script('wpsh', 'isShamsiInAdmin', $isShamsiInAdmin); endif; if (get_locale() == 'fa_IR' || get_locale() == 'fa_AF') : wp_enqueue_style('wpsh-style', WPSH_URL . 'assets/css/wpsh_custom.css', array(), WPSH_VERSION); wp_add_inline_style('wpsh-style', (string)$this->option('fa-custom-css')); endif; $theme = wp_get_theme()->stylesheet; if (in_array($theme, $this->supported_themes())) { $this->themes($theme); } } /** * Supported themes list * * Display themes which WP shamsi supported and makes them farsi compatible. * @see WPSH_Options * * @since 1.2.0 * * @return array array of supported themes. */ public function supported_themes() { $themes = array( 'twentytwentythree', // Since 4.2.3 'twentytwentytwo', // Since 4.2.0 'twentytwentyone', // Since 2.0.0 'twentytwenty', // Since 1.2.0 'twentynineteen', // Since 1.2.0 'astra', // Since 1.2.0 'hello-elementor', // Since 1.2.0 'oceanwp', // Since 1.2.0 'storefront', // Since 1.2.0 'shapely', // Since 1.2.0 'newstore', // Since 1.2.0 ); return $themes; } /** * Make supported themes farsi compatible. * * Detects wether current theme is supported by WP Shamsi and if so applies css changes and font modifications. * @see supported_themes/WPSH_Core * * @since 1.2.0 * * @param string $theme Name of current theme. */ public function themes($theme) { $css = ''; if ($theme != 'wp-admin') { if (!$this->pro() || !$this->option('activate-fonts', true, false)) { $css .= $this->font('Vazir'); } if ($this->option('fa-theme', true, true)) { include WPSH_PATH . 'themes/' . $theme . '.theme.php'; } } else { if (!$this->pro() || !$this->option('activate-fonts', true, false) || !$this->option('activate-font-admin', true, true)) { $font = $this->option('dashboard-font-default', false, 'IRANSansWeb'); if (!$this->pro() && ($font == 'IRANSansDn' || $font == 'IRANYekanWeb')) { $css .= $this->font('IRANSansWeb'); } else { $css .= $this->font($font); } $css .= ' .wp-block textarea, .wp-block, .components-menu-item__item, .components-notice__content, .components-panel__body-title p, .components-card__header p, .woocommerce-order-data__heading, .woocommerce-order-data__meta, .components-base-control__field, .components-base-control__help, .components-dropdown-menu__menu, #plugin-information-title.with-banner h2, .block-editor-inserter__search-input, .components-placeholder__label, .components-placeholder__instructions{ font-family: ' . $font . ', tahoma, sans-serif, arial, dashicons !important; letter-spacing: 0; } '; $css .= ' h1, h2, h3, h4, h5, h6, p, a, code, li, ul, strong, select, option, button, p, input, span, textarea, body { font-family: ' . $font . ', tahoma, sans-serif, arial, dashicons, Roboto-Regular, HelveticaNeue, sans-serif; letter-spacing: 0; } #yoast-snippet-preview-container * { font-family: Arial, Roboto-Regular, HelveticaNeue, sans-serif; } '; $css .= ' .rtl .media-frame, .rtl .media-frame .search, .rtl .media-frame input[type=email], .rtl .media-frame input[type=number], .rtl .media-frame input[type=password], .rtl .media-frame input[type=search], .rtl .media-frame input[type=tel], .rtl .media-frame input[type=text], .rtl .media-frame input[type=url], .rtl .media-frame select, .rtl .media-frame textarea, .rtl .media-modal { font-family: ' . $font . ', tahoma, sans-serif, arial !important; letter-spacing: 0; } '; $css .= ' body.rtl, body.rtl .press-this a.wp-switch-editor { font-family: ' . $font . ', tahoma, sans-serif, arial !important; letter-spacing: 0; } '; $css .= ' .rtl #wpadminbar * { font-family: ' . $font . ', tahoma, sans-serif, arial; letter-spacing: 0; } '; } } wp_enqueue_style('wpsh-theme', WPSH_URL . 'assets/css/wpsh_theme.css', array(), WPSH_VERSION); wp_add_inline_style('wpsh-theme', (string)$css); } /** * Generate fonts * * Generate farsi fonts. * * @since 3.0.1 * * @param string $name font name. * @return string Fonts CSS code. */ protected function font($name) { $path = WPSH_URL . 'assets/fonts/'; $css = ' @font-face { font-family: ' . $name . '; src: url(' . $path . $name . '.woff2) format("woff2"); font-weight: normal; font-style: normal; } @font-face { font-family: ' . $name . '; src: url(' . $path . $name . 'Bold.woff2) format("woff2"); font-weight: bold; font-style: normal; } '; return (string) $css; } /** * Change login page style * * Make login pages style farsi friendly. * * @since 2.0.0 * */ public function login_themes() { wp_enqueue_style('wpsh-admin-css', WPSH_URL . 'assets/css/wpsh_admin.css', array(), WPSH_VERSION); $this->themes('wp-admin'); } /** * Chane font of Tinymce * * Chane font of Tinymce and make it farsi friendly. * * @since 2.1.0 * */ public function tinymce_style($mce_css) { if (is_rtl()) { $font = $this->option('dashboard-font-default', false, 'IRANSansWeb'); if (!empty($mce_css)) { $mce_css .= ','; } if (is_admin()) { $mce_css .= WPSH_URL . 'assets/fonts/wpsh_editor-' . $font . '-rtl.css'; } else { $mce_css .= WPSH_URL . 'assets/fonts/wpsh_editor-Vazir-rtl.css'; } } return $mce_css; } /** * Translate strings * * Function to translate strings to farsi. * * @since 1.2.0 * * @param string $string String to translate. * @return string Translated string. */ public function translate($string) { $txts = (array)$this->option('translate-group'); foreach ($txts as $txt) { /** Do Not allow question mark */ if ($txt['translate-source'] == (string)'?') { return $string; } if (!isset($txt['translate-source']) || !isset($txt['translate-target'])) : return $string; endif; $string = preg_replace('/\b' . $txt['translate-source'] . '\b/u', $txt['translate-target'], $string); } return $string; } /** * Filter outgoing mails * * Filters mails to change and update support site * * @since 2.0.0 * * @param array $args Email function arguments. * @return array Returns filtered arguments. */ public function email($args) { if (!empty($args['message'])) { $args['message'] = str_replace('http://wp-persian.com/', 'https://wpvar.com/', $args['message']); $args['message'] = str_replace('WP-Persian.com', 'wpvar.com', $args['message']); $args['message'] = str_replace('https://wordpress.org/support/forums/', 'https://wpvar.com/support/', $args['message']); } return $args; } /** * Get Timezone * * Gets Correct timezone. * * @since 1.0.0 * * @return string Timezone format. */ private function timezone() { $utc = (wp_timezone_override_offset()) ? wp_timezone_override_offset() : get_option('gmt_offset'); $format = explode('.', $utc); $format = str_replace('+', '', $format); if (isset($format[1])) { $result = (($format[0] > 0) ? '+' . $format[0] : $format[0]) . ':' . (($format[1] == 5) ? '30' : $format[1]); } elseif (isset($format[0]) && !isset($format[1])) { if ($format[0] == 0) { return 0; } $result = ($format[0] > 0) ? '+' . $format[0] . ':00' : $format[0] . ':00'; } else { $result = 0; } return $result; } /** * Disable shamsi regarding lang * * If language is not set to farsi admins can choose to disable shamsi dates. * * @since 2.1.0 * * @return bool true or false. */ protected function no_lang_no_shamsi() { if ($this->option('activate-no-lang-no-shamsi', true, false) && get_locale() != 'fa_IR' && get_locale() != 'fa_AF') { return true; } return false; } /** * Disable shamsi dates * * Disable shamsi dates if link had set so. * * @since 3.0.0 * * @return bool true or false. */ protected function can_continue() { if (!$this->pro()) { return true; } $links = $this->option('advanced-group', false, null); $actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; if (!empty($links)) { foreach ($links as $link) { if ($link['advanced-link'] === $actual_link) { return false; } } } return true; } /** * Make dates Jalali aka Shamsi * * Convert wordpress dates to Shamsi aka Jalali dates. * * @since 1.0.0 * * @param string $date Date to convert. * @param string $format format of dates. * @param int $timestamp Date in timestamp. * @return mixed converted date. */ public function wp_shamsi($date = null, $format = null, $timestamp = null, $timezone = null) { if (!$this->can_continue()) { return $date; } if ($timestamp < 0) { return $date; } $date = $this->normalize_date($date); $go = apply_filters('wpsh_date_before', true); if ($go !== true) { return $date; } /* Hook to add modify formats*/ $format = apply_filters('wpsh_date_replace_formats', $format); $skip_formats = array( // DATE_W3C DATE_ATOM DATE_RFC3339 'Y-m-d\TH:i:sP', // DATE_RSS DATE_RFC822 DATE_RFC1036 DATE_RFC1123 DATE_RFC2822 'D, d M Y H:i:s O', // DATE_COOKIE DATE_RFC850 'l, d-M-Y H:i:s T', // DATE_ISO8601 'Y-m-d\TH:i:sO', // DATE_ISO8601 Variant 'Y-m-d\TH:i:s', // DATE_ISO8601 Variant 'Y-m-d\TH:i', // DATE_W3C DATE_ATOM DATE_RFC3339 Variant 'Y-m-dTH:i:sP' ); /* Hook to add custom formats to be skipped */ $skip_formats = apply_filters('wpsh_date_skip_formats', $skip_formats); if (is_array($skip_formats) && in_array($format, $skip_formats)) { return $date; } if (!$this->option('activate-shamsi', true, true) || $this->no_lang_no_shamsi()) { return $date; } if ($this->option('activate-admin-shamsi', true, false) && is_admin()) { return $date; } if ($format == null) { $format = 'Y m d H:i:s'; } $format = ($format == 'F j, Y') ? 'j F, Y' : $format; // Make date readable without changing default format. $format = str_replace(',', '', $format); $format = str_replace('،', '', $format); $format = str_replace('.', '', $format); $format = str_replace('S', '', $format); $format = str_replace('js', 'j s', $format); $format = str_replace('M j', 'j M', $format); $format = str_replace('F j', 'j F', $format); if ($timezone == null || $timezone == '0') { $timezone = $this->timezone(); } if ($this->timezone() == 0) { $timezone = 1; } $date = ($timezone == '1') ? new WPSH_Jalali($timestamp, 'UTC') : new WPSH_Jalali($timestamp, $timezone); $date = $date->format($format); /* Deprecated since 2.0.0 */ //$date = $this->persian_num($date); /* Filter returned date to extend plugins developement capacity */ return apply_filters('wpsh_date', $date, $format, $timestamp, $timezone); } /** * Correct diff * * Correct human readable dates * * @since 2.1.0 * * @param string $since The difference in human readable text. * @param int $diff The difference in seconds. * @param int $from Unix timestamp from which the difference begins. * @param int $to Unix timestamp to end the time difference. * @return string Corrected human readable date. */ public function wp_shamsi_diff($since, $diff, $from, $to) { if ($from < 0 && $to === time()) { $from = date('Y-m-d H:i:s', $from); $from = $this->gregorian($from, 'Y-m-d H:i:s'); $to = time(); return human_time_diff(strtotime($from), $to); } else { return $since; } } /** * Post date to gregorian * * Converts any shamsi dates that wants to be stored in posts database to gregorian. * * @since 2.0.0 * * @param array $data post data in array. * @return array new validated post in array. */ public function save_post_date($data) { $check_point = date('Y', strtotime($data['post_date'])); if ($check_point >= 1970) { return $data; } $data['post_date'] = $this->gregorian($data['post_date'], 'Y-m-d H:i:s'); $data['post_date_gmt'] = $this->gregorian($data['post_date_gmt'], 'Y-m-d H:i:s'); return $data; } /** * Comment date to gregorian * * Converts any shamsi dates that wants to be stored in comments database to gregorian. * * @since 2.0.0 * * @param array $data comment data in array. * @return array new validated comment data in array. */ public function save_comment_date($data) { $check_point = date('Y', strtotime($data['comment_date'])); if ($check_point >= 1970) { return $data; } $data['comment_date'] = $this->gregorian($data['comment_date'], 'Y-m-d H:i:s'); $data['comment_date_gmt'] = $this->gregorian($data['comment_date_gmt'], 'Y-m-d H:i:s'); return $data; } /** * Farsi numbers to English * * Farsi numbers should not be processed within PHP or Database * * @since 2.0.0 * * @param string $data Date wich we want to validate. * @return string new validated date. */ private function normalize_date($data) { $fa = array( '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹' ); $en = array( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ); $data = str_replace($fa, $en, $data); return $data; } /** * Shamsi to Gregorian * * Convert Shamsi dates to Gregorian. * * @since 2.0.0 * * @param mixed $date Date to convert. * @param string $format Format of converted dates. * @return mixed Converted date. */ public function gregorian($date, $format = null) { $date = $this->normalize_date($date); if ($format == null) { $format = 'Y m d H:i:s'; } $date = new WPSH_Jalali($date, $this->timezone()); $date = $date->tog() ->format($format); return $date; } /** * Latin numbers to Farsi * * Before showing dates converts its latin numbers to farsi. * * @deprecated 2.0.0 * * @param int $content Number to convert. * @return int Converted number. */ private function persian_num($content) // Display dates in persian numbers evein if jQuery is not available or dates displayed in admin area { if (!$this->option('persian-num', true, true)) { return $content; } $fa = array( '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹' ); $en = array( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ); $result = str_replace($en, $fa, $content); return $result; } /** * Validate pro * * Pro version validation. * * @since 3.0.0 * * @return bool true if is validated. */ protected function pro($soft = false) { $shamsi = WPSH_PLUGINS_PATH . '/wp-shamsi-pro/wp-shamsi-pro.php'; $exists = file_exists($shamsi) ? true : false; if (in_array('wp-shamsi-pro/wp-shamsi-pro.php', apply_filters('active_plugins', get_option('active_plugins'))) && $exists) { return true; } else { return false; } // @deprecated 4.3.0 /* $serial = !empty(get_option('wpsh_pro_license')) ? get_option('wpsh_pro_license') : false; $status = !empty(get_option('wpsh_pro_license_status')) && get_option('wpsh_pro_license_status') == 1 ? true : false; $due = !empty(get_option('wpsh_pro_license_due')) && get_option('wpsh_pro_license_due') > current_time('timestamp', false) ? true : false; if ($soft) { if ($serial && $status && $due) { return true; } else { return false; } } else { if (!in_array('wp-shamsi-pro/wp-shamsi-pro.php', apply_filters('active_plugins', get_option('active_plugins')))) { return false; } if ($serial && $status && $due && $exists) { return true; } else { return false; } } */ } /** * Validate VIP * * VIP version validation. * * @since 3.0.0 * * @return bool true if is validated. */ protected function vip() { if (!$this->pro()) { return false; } else { return true; // Since 4.3.0 } $vip = get_option('wpsh_pro_is_vip'); if (!empty($vip) && $vip == 1) { return true; } return false; } /** * Validate due * * Pro version due date. * * @since 3.0.0 * * @return mixed Return in dayas or bool. */ protected function pro_due($int = false) { if (!$this->pro()) { return null; } $reminder = 30; $due = get_option('wpsh_pro_license_due'); $days = 60 * 60 * 24; $now = current_time('timestamp', false); $remain = floor(($due - $now) / $days); if ($int) { return $remain; } else { if ($remain < $reminder) { return true; } else { return false; } } } /** * $_GET Mask * * Mask and escape $_GET * * @since 2.1.0 * * @param string $key Key of $_GET. * @param string $mode String or boolean. * @return mixed Escaped result or boolean. */ protected function get($key, $mode = 'string') { if ($mode == 'string') { $get = (isset($_GET[$key])) ? wp_kses_post($_GET[$key]) : null; } if ($mode == 'bool') { $get = (isset($_GET[$key])) ? true : false; } return $get; } /** * $_POST Mask * * Mask and escape $_POST * * @since 2.1.0 * * @param string $key Key of $_POST. * @param string $mode String or boolean. * @return mixed Escaped result or boolean. */ protected function post($key, $mode = 'string') { if ($mode == 'string') { $post = (isset($_POST[$key])) ? wp_kses_post($_POST[$key]) : null; } if ($mode == 'bool') { $post = (isset($_POST[$key])) ? true : false; } return $post; } }
Fatal error: Uncaught Error: Class 'WPSH_Core' not found in /home/arasetne/public_html/wp-content/plugins/wp-shamsi/inc/autoload.php:20 Stack trace: #0 /home/arasetne/public_html/wp-content/plugins/wp-shamsi/wp-shamsi.php(28): require_once() #1 /home/arasetne/public_html/wp-settings.php(517): include_once('/home/arasetne/...') #2 /home/arasetne/public_html/wp-config.php(188): require_once('/home/arasetne/...') #3 /home/arasetne/public_html/wp-load.php(50): require_once('/home/arasetne/...') #4 /home/arasetne/public_html/wp-blog-header.php(13): require_once('/home/arasetne/...') #5 /home/arasetne/public_html/index.php(17): require('/home/arasetne/...') #6 {main} thrown in /home/arasetne/public_html/wp-content/plugins/wp-shamsi/inc/autoload.php on line 20