// Only define DEBUG_MODE if it's not already defined if (!defined('DEBUG_MODE')) { define('DEBUG_MODE', false); } // Only show errors in development if (DEBUG_MODE === true) { ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); } // Check if article exists if (empty($article)) { // Article not found, show 404 page include_once FRONTEND_PATH . '/templates/404.php'; exit; } // Set page variables $pageTitle = $article['title'] . ' - ' . APP_NAME; $pageDescription = !empty($article['excerpt']) ? strip_tags($article['excerpt']) : truncate_text(strip_tags($article['content']), 160); // Clean any remaining HTML entities from the description $pageDescription = html_entity_decode(strip_tags($pageDescription)); $ogType = 'article'; $ogImage = !empty($article['featured_image']) ? 'https://' . $_SERVER['HTTP_HOST'] . '/' . $article['featured_image'] : null; $currentUrl = 'https://' . $_SERVER['HTTP_HOST'] . '/article/' . $article['slug']; $activeNav = ''; $showBreadcrumbs = true; // Set breadcrumbs $breadcrumbs = []; // Add category to breadcrumbs if available if (!empty($articleCategories) && count($articleCategories) > 0) { $category = $articleCategories[0]; // Use first category $breadcrumbs[] = [ 'title' => $category['name'], 'url' => '/category/' . $category['slug'] ]; } // Add article to breadcrumbs $breadcrumbs[] = [ 'title' => $article['title'], 'active' => true ]; // Generate schema.org markup for article $schemaMarkup = generate_article_schema($article); // The update_tags function has been moved to frontend/includes/functions.php // Debug: Before view count increment error_log("DEBUG: Before increment_article_views - Article ID: " . $article['id']); // Increment view count before displaying increment_article_views($article['id']); // Debug: After view count increment error_log("DEBUG: After increment_article_views - Article ID: " . $article['id']); // For debugging - create a debug log that will be displayed on the page $debugLog = []; $debugLog[] = "Debug: Article ID: " . $article['id']; // Get database connection global $db; // Initialize debug log $debugLog[] = "Using existing database connection via dbQuery"; // Debug: Database connection check error_log("DEBUG: Database connection check - DB is " . ($db ? "available" : "NOT available")); // Make sure article tags are loaded and initialized as an array if (!isset($articleTags)) { // Fetch existing tags for this article try { if ($db) { $tagQuery = "SELECT t.id, t.name, t.slug FROM tags t JOIN news_tags nt ON t.id = nt.tag_id WHERE nt.news_id = ?"; $tagStmt = $db->prepare($tagQuery); $tagStmt->execute([$article['id']]); $articleTags = $tagStmt->fetchAll(PDO::FETCH_ASSOC); } else { $articleTags = []; error_log('Database connection not available when fetching article tags'); } } catch (Exception $e) { // If there's an error, initialize as empty array $articleTags = []; error_log('Error fetching article tags: ' . $e->getMessage()); } } // Ensure $articleTags is always an array if (!is_array($articleTags)) { $articleTags = []; } // Debug: Before calling update_tags error_log("DEBUG: About to call update_tags function - Article ID: " . $article['id']); error_log("DEBUG: ArticleTags count before update: " . count($articleTags)); // Update article tags based on content $tagsUpdated = false; $tagsUpdated = update_tags(); error_log("DEBUG: update_tags function returned: " . ($tagsUpdated ? "TRUE" : "FALSE")); // Refresh article tags after potential updates if update was successful if ($tagsUpdated && $db) { error_log("DEBUG: Refreshing article tags after successful update"); try { $tagQuery = "SELECT t.id, t.name, t.slug FROM tags t JOIN news_tags nt ON t.id = nt.tag_id WHERE nt.news_id = ?"; $tagStmt = $db->prepare($tagQuery); $tagStmt->execute([$article['id']]); $articleTags = $tagStmt->fetchAll(PDO::FETCH_ASSOC); } catch (Exception $e) { // Log error but continue with existing tags error_log('Error refreshing article tags: ' . $e->getMessage()); } } // Update debug log with more information $debugLog[] = "Debug: Database connection: " . ($db ? "Available" : "NOT available"); $debugLog[] = "Debug: ArticleTags count: " . count($articleTags); // Add function call trace for debugging $debugLog[] = "Debug: Execution trace:"; $debugLog[] = "- Before increment_article_views"; $debugLog[] = "- After increment_article_views"; $debugLog[] = "- Database connection check: " . ($db ? "SUCCESS" : "FAILED"); $debugLog[] = "- Article tags loaded: " . (isset($articleTags) ? "YES" : "NO"); $debugLog[] = "- About to call update_tags"; $debugLog[] = "- update_tags result: " . ($tagsUpdated ? "SUCCESS" : "FAILED"); // Add database connection details $debugLog[] = "Debug: Database connection details:"; if ($db) { $debugLog[] = "- Connection type: " . get_class($db); $debugLog[] = "- Connection hash: " . spl_object_hash($db); } // Add more detailed database info if ($db) { try { $debugLog[] = "Debug: Database info:"; $stmt = $db->query("SELECT DATABASE() as db_name"); $dbInfo = $stmt->fetch(PDO::FETCH_ASSOC); $debugLog[] = "- Current database: " . ($dbInfo['db_name'] ?? 'unknown'); // Check if tags table exists and has data $stmt = $db->query("SELECT COUNT(*) as tag_count FROM tags"); $tagCount = $stmt->fetch(PDO::FETCH_ASSOC); $debugLog[] = "- Tags in database: " . ($tagCount['tag_count'] ?? 'unknown'); } catch (Exception $e) { $debugLog[] = "- Error getting DB info: " . $e->getMessage(); } } // Include header include_once FRONTEND_PATH . '/includes/header.php'; // Display debug information at the top of the page (only during development) if (defined('DEBUG_MODE') && DEBUG_MODE === true) { echo '
'; echo '

Debug Information

'; echo ''; // Direct test of update_tags function with sample data if ($db) { echo '

Direct Test of update_tags Function

'; // Create sample data with proper string values $sampleArticle = [ 'id' => $article['id'], 'title' => 'Sample Title for Testing', 'content' => 'This is sample content for testing the update_tags function.' ]; // Ensure all values are strings to avoid null values $sampleArticle['title'] = (string)$sampleArticle['title']; $sampleArticle['content'] = (string)$sampleArticle['content']; $sampleTags = []; // Try to get some real tags for testing try { $stmt = $db->query("SELECT id, name, slug FROM tags LIMIT 5"); $testTags = $stmt->fetchAll(PDO::FETCH_ASSOC); echo '

Test with ' . count($testTags) . ' sample tags:

'; echo ''; // Run the test echo '

Running test update_tags function...

'; // Set global variables for the test global $article, $articleTags; $originalArticle = $article; $originalTags = $articleTags; // Temporarily set global variables for the test $article = $sampleArticle; $articleTags = $sampleTags; // Run the test $testResult = update_tags(); // Restore original values $article = $originalArticle; $articleTags = $originalTags; echo '

Test result: ' . ($testResult ? 'SUCCESS' : 'FAILED') . '

'; } catch (Exception $e) { echo '

Error during test: ' . htmlspecialchars($e->getMessage()) . '

'; } } echo '
'; } ?>

إيران تحت المجهر: ضربة إسرائيلية تكشف هشاشة الدفاعات وتثير تساؤلات حول مستقبل النظام

إيران تحت المجهر: ضربة إسرائيلية تكشف هشاشة الدفاعات وتثير تساؤلات حول مستقبل النظام

م. مشتاق هاشم العلوي.

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

الضربة الإسرائيلية القاتلة على إيران، لم تكن مفاجئة، وأيضاً لم تفعل ما كانت إسرائيل تهدد به فقط، ولكنها فعلته بطريقة تعيد صياغة ميزان القوة في المنطقة من جديد.

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

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

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

النظام الإيراني – بطبيعة الحال – لم يجد ما يقوله للشعب، ولجأ إلى بياناته الأثيرة: “القانون الدولي، العدوان الخارجي، الرد في الوقت المناسب”. أعاد تدوير نفس الخطابات التي قالها بعد اغتيال فخري زاده، وبعد قصف دمشق، وبعد استهداف قادة الحرس الثوري في العراق وسوريا واليمن. وكأن كل الهزائم التي لا ترد عليها طهران تتحول إلى رصيد وطني، وكل خيبة تصبح مبررًا لتجديد الشعارات…! لكن العالم لم يعد يشتري هذه اللغة، والداخل الإيراني لم يعد يصغي. والسقف الذي كان يظلل المشروع الإيراني في المنطقة، سقط على رؤوس أصحابه. والوقت الذي كانت فيه طهران قادرة على الصراخ في وجه العالم، قد انتهى. واليوم تحاصر طهران بأسئلتها، قبل صواريخ خصومها، والرد الذي وعدت به، لم يعد ممكنًا. فدولة لم تقدر على حماية عاصمتها، لن تجرؤ على اقتحام عواصم الآخرين.

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

مشاركة المقال:

Warning: Undefined variable $tagsUpdated in /home/comparecarriers/public_html/yallasyrianews.com/frontend/templates/article.php on line 419