*/ public function __construct( Options_Helper $options, Url_Helper $url, Image_Helper $image, ID_Helper $id_helper, WPSEO_Replace_Vars $replace_vars, Site_Helper $site, User_Helper $user, Permalink_Helper $permalink_helper, Indexable_Helper $indexable_helper, Indexable_Repository $indexable_repository ) { $this->options = $options; $this->url = $url; $this->image = $image; $this->id_helper = $id_helper; $this->replace_vars = $replace_vars; $this->site = $site; $this->user = $user; $this->permalink_helper = $permalink_helper; $this->indexable_helper = $indexable_helper; $this->indexable_repository = $indexable_repository; } /** * Generates the title. * * @return string the title */ public function generate_title() { return $this->replace_vars->replace( $this->presentation->title, $this->presentation->source ); } /** * Generates the description. * * @return string the description */ public function generate_description() { return $this->replace_vars->replace( $this->presentation->meta_description, $this->presentation->source ); } /** * Generates the canonical. * * @return string the canonical */ public function generate_canonical() { return $this->presentation->canonical; } /** * Generates the permalink. * * @return string */ public function generate_permalink() { if ( ! \is_search() ) { return $this->presentation->permalink; } return \add_query_arg( 's', \get_search_query(), \trailingslashit( $this->site_url ) ); } /** * Generates the id. * * @return string the id */ public function generate_id() { return $this->indexable->object_id; } /** * Generates the site name. * * @return string The site name. */ public function generate_site_name() { $site_name = $this->options->get( 'website_name', '' ); if ( $site_name !== '' ) { return $site_name; } return \get_bloginfo( 'name' ); } /** * Generates the site name from the WordPress options. * * @return string The site name from the WordPress options. */ public function generate_wordpress_site_name() { return $this->site->get_site_name(); } /** * Generates the site url. * * @return string The site url. */ public function generate_site_url() { $home_page_indexable = $this->indexable_repository->find_for_home_page(); if ( $this->indexable_helper->dynamic_permalinks_enabled() ) { return \trailingslashit( $this->permalink_helper->get_permalink_for_indexable( $home_page_indexable ) ); } return \trailingslashit( $home_page_indexable->permalink ); } /** * Generates the company name. * * @return string The company name. */ public function generate_company_name() { /** * Filter: 'wpseo_schema_company_name' - Allows filtering company name * * @api string $company_name. */ $company_name = \apply_filters( 'wpseo_schema_company_name', $this->options->get( 'company_name' ) ); if ( empty( $company_name ) ) { $company_name = $this->site_name; } return $company_name; } /** * Generates the person logo id. * * @return int|bool The company logo id. */ public function generate_person_logo_id() { $person_logo_id = $this->image->get_attachment_id_from_settings( 'person_logo' ); if ( empty( $person_logo_id ) ) { $person_logo_id = $this->fallback_to_site_logo(); } /** * Filter: 'wpseo_schema_person_logo_id' - Allows filtering person logo id. * * @api integer $person_logo_id. */ return \apply_filters( 'wpseo_schema_person_logo_id', $person_logo_id ); } /** * Retrieve the person logo meta. * * @return array|bool */ public function generate_person_logo_meta() { $person_logo_meta = $this->image->get_attachment_meta_from_settings( 'person_logo' ); if ( empty( $person_logo_meta ) ) { $person_logo_id = $this->fallback_to_site_logo(); $person_logo_meta = $this->image->get_best_attachment_variation( $person_logo_id ); } /** * Filter: 'wpseo_schema_person_logo_meta' - Allows filtering person logo meta. * * @api string $person_logo_meta. */ return \apply_filters( 'wpseo_schema_person_logo_meta', $person_logo_meta ); } /** * Generates the company logo id. * * @return int|bool The company logo id. */ public function generate_company_logo_id() { $company_logo_id = $this->image->get_attachment_id_from_settings( 'company_logo' ); if ( empty( $company_logo_id ) ) { $company_logo_id = $this->fallback_to_site_logo(); } /** * Filter: 'wpseo_schema_company_logo_id' - Allows filtering company logo id. * * @api integer $company_logo_id. */ return \apply_filters( 'wpseo_schema_company_logo_id', $company_logo_id ); } /** * Retrieve the company logo meta. * * @return array|bool */ public function generate_company_logo_meta() { $company_logo_meta = $this->image->get_attachment_meta_from_settings( 'company_logo' ); /** * Filter: 'wpseo_schema_company_logo_meta' - Allows filtering company logo meta. * * @api string $company_logo_meta. */ return \apply_filters( 'wpseo_schema_company_logo_meta', $company_logo_meta ); } /** * Generates the site user id. * * @return int The site user id. */ public function generate_site_user_id() { return (int) $this->options->get( 'company_or_person_user_id', false ); } /** * Determines what our site represents, and grabs their values. * * @return string|false Person or company. False if invalid value. */ public function generate_site_represents() { switch ( $this->options->get( 'company_or_person', false ) ) { case 'company': // Do not use a non-named company. if ( empty( $this->company_name ) ) { return false; } /* * Do not use a company without a logo. * The logic check is on `< 1` instead of `false` due to how `get_attachment_id_from_settings` works. */ if ( $this->company_logo_id < 1 ) { return false; } return 'company'; case 'person': // Do not use a non-existing user. if ( $this->site_user_id !== false && \get_user_by( 'id', $this->site_user_id ) === false ) { return false; } return 'person'; } return false; } /** * Returns the site represents reference. * * @return array|bool The site represents reference. False if none. */ public function generate_site_represents_reference() { if ( $this->site_represents === 'person' ) { return [ '@id' => $this->id_helper->get_user_schema_id( $this->site_user_id, $this ) ]; } if ( $this->site_represents === 'company' ) { return [ '@id' => $this->site_url . Schema_IDs::ORGANIZATION_HASH ]; } return false; } /** * Returns whether or not open graph is enabled. * * @return bool Whether or not open graph is enabled. */ public function generate_open_graph_enabled() { return $this->options->get( 'opengraph' ) === true; } /** * Returns the open graph publisher. * * @return string The open graph publisher. */ public function generate_open_graph_publisher() { if ( $this->site_represents === 'company' ) { return $this->options->get( 'facebook_site', '' ); } if ( $this->site_represents === 'person' ) { return $this->user->get_the_author_meta( 'facebook', $this->site_user_id ); } return $this->options->get( 'facebook_site', '' ); } /** * Returns the twitter card type. * * @return string The twitter card type. */ public function generate_twitter_card() { return $this->options->get( 'twitter_card_type' ); } /** * Returns the schema page type. * * @return string|array The schema page type. */ public function generate_schema_page_type() { switch ( $this->indexable->object_type ) { case 'system-page': switch ( $this->indexable->object_sub_type ) { case 'search-result': $type = [ 'CollectionPage', 'SearchResultsPage' ]; break; default: $type = 'WebPage'; } break; case 'user': $type = 'ProfilePage'; break; case 'home-page': case 'date-archive': case 'term': case 'post-type-archive': $type = 'CollectionPage'; break; default: $additional_type = $this->indexable->schema_page_type; if ( \is_null( $additional_type ) ) { $additional_type = $this->options->get( 'schema-page-type-' . $this->indexable->object_sub_type ); } $type = [ 'WebPage', $additional_type ]; // Is this indexable set as a page for posts, e.g. in the WordPress reading settings as a static homepage? if ( (int) \get_option( 'page_for_posts' ) === $this->indexable->object_id ) { $type[] = 'CollectionPage'; } // Ensure we get only unique values, and remove any null values and the index. $type = \array_filter( \array_values( \array_unique( $type ) ) ); } /** * Filter: 'wpseo_schema_webpage_type' - Allow changing the WebPage type. * * @api string|array $type The WebPage type. */ return \apply_filters( 'wpseo_schema_webpage_type', $type ); } /** * Returns the schema article type. * * @return string|array The schema article type. */ public function generate_schema_article_type() { $additional_type = $this->indexable->schema_article_type; if ( \is_null( $additional_type ) ) { $additional_type = $this->options->get( 'schema-article-type-' . $this->indexable->object_sub_type ); } /** This filter is documented in inc/options/class-wpseo-option-titles.php */ $allowed_article_types = \apply_filters( 'wpseo_schema_article_types', Schema_Types::ARTICLE_TYPES ); if ( ! \array_key_exists( $additional_type, $allowed_article_types ) ) { $additional_type = $this->options->get_title_default( 'schema-article-type-' . $this->indexable->object_sub_type ); } // If the additional type is a subtype of Article, we're fine, and we can bail here. if ( \stripos( $additional_type, 'Article' ) !== false ) { /** * Filter: 'wpseo_schema_article_type' - Allow changing the Article type. * * @param string|string[] $type The Article type. * @param Indexable $indexable The indexable. */ return \apply_filters( 'wpseo_schema_article_type', $additional_type, $this->indexable ); } $type = 'Article'; /* * If `None` is set (either on the indexable or as a default), set type to 'None'. * This simplifies is_needed checks downstream. */ if ( $additional_type === 'None' ) { $type = $additional_type; } if ( $additional_type !== $type ) { $type = [ $type, $additional_type ]; } // Filter documented on line 499 above. return \apply_filters( 'wpseo_schema_article_type', $type, $this->indexable ); } /** * Returns the main schema id. * * The main schema id. * * @return string */ public function generate_main_schema_id() { return $this->permalink; } /** * Retrieves the main image URL. This is the featured image by default. * * @return string|null The main image URL. */ public function generate_main_image_url() { if ( $this->main_image_id !== null ) { return $this->image->get_attachment_image_url( $this->main_image_id, 'full' ); } if ( ! \is_singular() ) { return null; } $url = $this->image->get_post_content_image( $this->id ); if ( $url === '' ) { return null; } return $url; } /** * Gets the main image ID. * * @return int|null The main image ID. */ public function generate_main_image_id() { switch ( true ) { case \is_singular(): return $this->get_singular_post_image( $this->id ); case \is_author(): case \is_tax(): case \is_tag(): case \is_category(): case \is_search(): case \is_date(): case \is_post_type_archive(): if ( ! empty( $GLOBALS['wp_query']->posts ) ) { return $this->get_singular_post_image( $GLOBALS['wp_query']->posts[0]->ID ); } return null; default: return null; } } /** * Determines whether the current indexable has an image. * * @return bool Whether the current indexable has an image. */ public function generate_has_image() { return $this->main_image_url !== null; } /** * Strips all nested dependencies from the debug info. * * @return array */ public function __debugInfo() { return [ 'indexable' => $this->indexable, 'presentation' => $this->presentation, ]; } /** * Retrieve the site logo ID from WordPress settings. * * @return false|int */ public function fallback_to_site_logo() { $logo_id = \get_option( 'site_logo' ); if ( ! $logo_id ) { $logo_id = \get_theme_mod( 'custom_logo', false ); } return $logo_id; } /** * Get the ID for a post's featured image. * * @param int $id Post ID. * * @return int|null */ private function get_singular_post_image( $id ) { if ( \has_post_thumbnail( $id ) ) { $thumbnail_id = \get_post_thumbnail_id( $id ); // Prevent returning something else than an int or null. if ( \is_int( $thumbnail_id ) && $thumbnail_id > 0 ) { return $thumbnail_id; } } if ( \is_singular( 'attachment' ) ) { return \get_query_var( 'attachment_id' ); } return null; } /* ********************* DEPRECATED METHODS ********************* */ /** * Generates whether or not breadcrumbs are enabled. * * @deprecated 15.8 * @codeCoverageIgnore * * @return bool Whether or not breadcrumbs are enabled. */ public function generate_breadcrumbs_enabled() { \_deprecated_function( __METHOD__, 'WPSEO 15.8' ); $breadcrumbs_enabled = \current_theme_supports( 'yoast-seo-breadcrumbs' ); if ( ! $breadcrumbs_enabled ) { $breadcrumbs_enabled = $this->options->get( 'breadcrumbs-enable', false ); } if ( ! empty( $this->blocks['yoast-seo/breadcrumbs'] ) ) { $breadcrumbs_enabled = true; } return $breadcrumbs_enabled; } } \class_alias( Meta_Tags_Context::class, 'WPSEO_Schema_Context' ); هل بدأ اقتسام وليس "تقسيم" سوريا؟.. وهل باعت إيران وبشروط محددة رأس الأسد : أزاميل

هل بدأ اقتسام وليس “تقسيم” سوريا؟.. وهل باعت إيران وبشروط محددة رأس الأسد

أزاميل/ متابعة: نقرأ أدناه مقالا تحليلا نشره المرصد السوري لحقوق الإنسان، وهو تحليل قد تندرج بعض عباراته وفقراته ضمن الحملة الإعلامية-النفسية ضد النظام السوري، لكنه يعطي فكرة جيدة عن الخطاب السياسي الراهن للمعارضة السورية وأغلب الجهات المناهضة للأسد.

Advertisements

 

كل المؤشرات توحي بأن بشار الأسد انتهى وان ما يجري وراء الكواليس ليس سوى عملية مقايضة معقدة تتصل باقتسام سوريا مناطق نفوذ مرحلياً ريثما تتضح صورة المستقبل الذي لا يمكن فصله عن الشكل الإقليمي الجديد، وخصوصاً إذا تذكّرنا ان الحديث عن تقسيم العراق بات علنياً وصريحاً.

Advertisements
Advertisements

لكن هناك فرقاً في الواقع الميداني وفي التوزيع الأتني بين العراق وسوريا، ولهذا تستعمل في الحديث عن سوريا الآن كلمة اقتسام بدلاً من تقسيم.

والاقتسام قد يكون مرحلياً لترتيب الحصص والمصالح بين المقتسمين. ولهذا كان من الضروري ضخّ مقدار من دخان التعمية عبر المشاورات الجانبية التي يجريها ستيفان دو ميستورا في جنيف مع بعض الفرقاء السوريين، والتي لن تؤدي الآن الى أكثر من تحضير المنبر في إنتظار الاعلان عما يمكن ان يتوصل اليه المقتسمون وأعطائه شكلاً مشروعاً.

قبل أيام قليلة، ظهرت من طهران تحليلات غير رسمية تتحدث عن نقل العاصمة السورية دمشق الى طرطوس واللاذقية.

ومع ان المقربين من النظام سارعوا الى القول ان هذا الإقتراح بعيد عن الواقع، فان لا دخان بلا نار كما يقال، فبعد ٢٤ ساعة برزت تقارير ديبلوماسية تتحدث عن مساعي اميركية مع ايران تهدف الى إجبار الأسد على التنحي!

طهران على ما تردد وضعت شروطاً محددة ثمناً لرأس الأسد، كضمان الحصول على الديون المترتبة عليه لمصلحتها وعدم الإدعاء على أي من الاطراف الايرانيين الذين قاتلوا الى جانبه، وتثبيت الملكيات العقارية التي حصلت عليها مقابل بعض الديون للنظام، والاعتراف بالهوية السورية التي أُعطيت لكثيرين من الإيرانيين الذين حاربوا مع الأسد!

Advertisements

كل هذا يأتي في ظل التطورات الميدانية الأخيرة التي عكست انهيارات متلاحقة لجبهات النظام، سواء في الجنوب حيث صدّ “الجيش السوري الحر” الايرانيين و”حزب الله”، وإنتقل الى الهجوم ليسيطر على بصرى الشام التي كانت مركزاً لـ”الحرس الثوري”، ثم جرى إقتحام معبر نصيب على الحدود الأردنية، أم في الشمال حيث سقطت إدلب ثم جسر الشغور وباتت اللاذقية مهددة!

المعارضة ستجتمع في انقرة ومن المرجح إعلان الشمال منطقة آمنة وبموافقة أميركية على ما يبدو، وفي الجنوب تسعى دول عربية لجعله منطقة آمنة أيضاً، وهذا ما يجعل منطقة الساحل السوري مسرحاً لتجاذب النفوذ بين ايران وروسيا، والرهان ضمناً على اصابة عصفورين بحجر واحد الخلاص من الاسد لفتح الباب واسعاً للخلاص من “داعش” والمتطرفين الإرهابيين.

من خلال كل هذا يمكن ان نفهم لماذا التركيز الكبير على المعركة من القلمون الى دمشق، ذلك ان ايران التي تخشى سيطرة روسيا على الساحل السوري تحرص على إبقاء الكوريدور الذي يربط القلمون وضواحي دمشق بلبنان!

Advertisements

Advertisements