/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * The below code uses the @ operator before parse_url() calls because in PHP * 5.3.2 and earlier, parse_url() causes a warning of parsing fails. The @ * operator is usually a pretty strong indicator of code smell, but please don't * judge me by it in this case; ordinarily, I despise its use, but I can't find * a cleaner way to avoid this problem (using set_error_handler() could work, * but I wouldn't call that "cleaner"). Fortunately, Drupal 8 will require at * least PHP 5.3.5, so this mess doesn't have to spread into the D8 branch of * Pathologic. * @see https://drupal.org/node/2104849 * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = @parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $cached_settings = &drupal_static(__FUNCTION__, array()); if (!isset($cached_settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = @parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… // @todo: This is pretty horrible. Can this be simplified? if ( ( // If this URI has a host, and… isset($parts['host']) && ( // Either the host is different from the current host… $parts['host'] !== $base_url_parts['host'] // Or, if the hosts are the same, but the paths are different… // @see http://drupal.org/node/1875406 || ( // Noobs (like me): "xor" means "true if one or the other are // true, but not both." (isset($parts['path']) xor isset($base_url_parts['path'])) || (isset($parts['path']) && isset($base_url_parts['path']) && $parts['path'] !== $base_url_parts['path']) ) ) ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; $cached_settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $cached_settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $cached_settings['current_settings'] = &$cached_settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~ (href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the base path. global $base_path; // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $cached_settings later and not have the changes be "permanent." $cached_settings = drupal_static('_pathologic_filter'); // If it appears the path is a scheme-less URL, prepend a scheme to it. // parse_url() cannot properly parse scheme-less URLs. Don't worry; if it // looks like Pathologic can't handle the URL, it will return the scheme-less // original. // @see https://drupal.org/node/1617944 // @see https://drupal.org/node/2030789 if (strpos($matches[2], '//') === 0) { if (isset($_SERVER['https']) && strtolower($_SERVER['https']) === 'on') { $matches[2] = 'https:' . $matches[2]; } else { $matches[2] = 'http:' . $matches[2]; } } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = @parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE || ( // If there's a scheme part and it doesn't look useful, bail out. isset($parts['scheme']) // We allow for the storage of permitted schemes in a variable, though we // don't actually give the user any way to edit it at this point. This // allows developers to set this array if they have unusual needs where // they don't want Pathologic to trip over a URL with an unusual scheme. // @see http://drupal.org/node/1834308 // "files" and "internal" are for Path Filter compatibility. && !in_array($parts['scheme'], variable_get('pathologic_scheme_whitelist', array('http', 'https', 'files', 'internal'))) ) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. // @todo Should we still try to do path correction on these files too? if (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = @parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $cached_settings['is_file'] = TRUE; } else { $cached_settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($cached_settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } // Is this is a root-relative url (no host) that didn't match above? // Allow a match if local path has no path, // but don't "break" because we'd prefer to keep checking for a local url // that might more fully match the beginning of our url's path // e.g.: if our url is /foo/bar we'll mark this as a match for // http://example.com but want to keep searching and would prefer a match // to http://example.com/foo if that's configured as a local path elseif (!isset($parts['host']) && (!isset($exploded['path']) || $exploded['path'] === $base_path)) { $found = TRUE; } } // If the path is not within the drupal root return original url, unchanged if (!$found) { return $matches[0]; } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. $parts['path'] = ltrim($parts['path'],'/'); // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // If we didn't previously identify this as a file, check to see if the file // exists now that we have the correct path relative to DRUPAL_ROOT if (!$cached_settings['is_file']) { $cached_settings['is_file'] = !empty($parts['path']) && is_file(DRUPAL_ROOT . '/'. $parts['path']); } // Okay, deal with language stuff. if ($cached_settings['is_file']) { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } else { // Let's see if we can split off a language prefix from the path. if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $cached_settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $cached_settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are disabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($cached_settings['is_file'])) { $cached_settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($cached_settings['is_file'] && !$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($cached_settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = @parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $cached_settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return " {$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Покушение на Брестскую крепость | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

Покушение на Брестскую крепость

В минский корпункт «Правды» обратился архитектор и скульптор Валентин Занкович — лауреат Ленинской премии, присуждённой за создание, совместно с группой мастеров изобразительного искусства, мемориального комплекса «Хатынь». Валентин Павлович — автор многих памятников, установленных на белорусской земле. В том числе Николаю Гастелло и его экипажу, легендарному подпольщику и партизану Константину Заслонову, сожжённой деревне Брусы, монумента «Беларусь партизанская». Особая страница в биографии Мастера — работа над мемориальным комплексом «Брестская крепость-герой». Проблемы, связанные с завершением комплекса, вынудили Валентина Павловича обратиться в нашу редакцию.

РАБОТЫ в крепости ведутся в соответствии с постановлением Совета министров Союзного государства. Всё расписано по пунктам: объёмы и порядок финансирования, мероприятия по годам и этапам реализации, ответственные за их выполнение. График, если и нарушается, то незначительно. Казалось бы, причин для беспокойства нет. Но Занковича тревожит то, что направленность заключительной стадии работ расходится с основным замыслом, заложенным в создание мемориального комплекса.
Замысел этот выкристаллизовывался долгие годы. В далёком 1955-м вышло распоряжение Совета Министров БССР о разработке проектов памятника защитникам Брестской крепости и музея обороны, подписанное Кириллом Трофимовичем Мазуровым, возглавлявшим правительство республики. Прославленный руководитель партизанского движения в Белоруссии, перед началом войны он был первым секретарём Брестского обкома комсомола и хорошо знал, видел и помнил, что происходило в Бресте после вероломного нападения гитлеровцев. Тема увековечения подвига защитников крепости стала для него не просто данью уважения, но и долгом перед памятью тех, с кем встречался, перед памятью сложившего головы погранотряда, в котором часто бывал, разделяя с бойцами тревоги предвоенного времени.
Избранный вскоре первым секретарём ЦК Компартии Белоруссии, Кирилл Трофимович продолжал постоянно встречаться с архитекторами и скульпторами, прислушивался к каждому предложению. Такое же пристальное внимание работе над проектом уделял сменивший его на посту первого секретаря ЦК Пётр Миронович Машеров. Во время этих встреч, вспоминает Занкович, был чётко определён каркас замысла будущего мемориала.

Из четырёх архитекторов и скульпторов, составлявших костяк их творческого коллектива, только он, Валентин Занкович, и Олег Стахович были освобождены от работы в проектных институтах и откомандированы приказом Госстроя БССР на проектирование мемориального комплекса. Они стали генератором творческих идей, которые следовало воплотить.

Работа над проектом продолжалась пять лет. Ещё шесть лет понадобилось на то, чтобы он прошёл всесоюзные и республиканские конкурсы, в которых архитекторы и художники из всех республик СССР, Польши, Венгрии и Чехословакии представили более тысячи проектов, а затем выдержал конкурсы заказные, завоевав право на осуществление авторских замыслов в натуре. Победителей, прошедших нелёгкое испытание, вызвали для беседы с первым секретарём ЦК Компартии Белоруссии П.М. Машеровым.

— Ваш проект, — сказал Пётр Миронович, — ближе всех подошёл к раскрытию темы Брестской крепости, поэтому мы берём его за основу для дальнейшей работы.
Мемориал был торжественно открыт 21 сентября 1971 года. Точнее — его первая очередь. Именно поэтому при попытке выдвинуть проект на Государственную премию СССР из Москвы пришёл мотивированный отказ: рассмотрение возможно только после завершения второй очереди.

Проектировал её тот же творческий коллектив. По линии Художественного фонда БССР, в частности, были разработаны шесть мемориальных композиций, посвящённых подвигу организаторов и героев-защитников цитадели Ивану Зубачёву, Андрею Кижеватову, Ефиму Фомину, Фёдору Бойко, Алексею Наганову и Пете Васильеву. Они были заказаны музеем обороны Брестской крепости и получили одобрение республиканского монументально-художественного Совета и технического совета Госстроя БССР как «решающие задачу идейно-художественного завершения ансамбля».

В августе 1987 года бюро ЦК КПБ приняло специальное постановление о строительстве второй очереди мемориального комплекса, которое намечалось завершить в 1994 году к 50-летию освобождения Бреста от фашистских захватчиков. Минкультуры и Госстрою БССР, Брестскому облисполкому и правлению Союза художников республики было поручено до 1 января 1988 года подготовить проектное предложение, а Совмину, Госплану и соответствующим ведомствам — предусмотреть строительство второй очереди в государственном плане социально-экономического развития республики.

В общем, дорога к завершению мемориала была расчищена.

— НО что мы видим? — Валентин Павлович не может скрыть горечи. — Вместо строительства второй очереди и воплощения в бронзе скульптурных композиций, посвящённых героям-защитникам крепости, её шпигуют новоделами, не имеющими отношения к её обороне.

Таким новоделам несть числа. Создали, например, музей казарм. В казармах зашпаклевали и заштукатурили раны и следы войны. Здесь же уродливо экспонируются трёхарочные ворота цитадели: четыре металлические трубы, на них плетёнообразное покрытие с битым зеркальным стеклом на клею. Истинный шедевр современных авангардистов. В ответ на недоумённый вопрос Занковича: «Что это?» — они, не задумываясь, «пояснили»: «Вы, как классик, не понимаете: это символ покровительства погибших защитников крепости солнцем».

Подпорные стенки площади облицевали полированным гранитом, которого никогда здесь не было. А ведь эти стенки — часть её архитектурного образа — и по замыслу должны органично вписаться в него, а не контрастировать и выделяться из общего плана. Демонтировали и разрушили фундаментальные металлоконструкции в местах для увековечения бессмертных надписей, сделанных защитниками крепостного подземелья: «Я умираю, но не сдаюсь 20/VII.41 г.», «Умираем не срамя», «Умираем, но из крепости не уйдём». А дороги и дорожки вымостили новомодной плиткой. «Представьте Красную площадь, вымощенную не брусчаткой, как сейчас, а мелкой бетонной плиткой, такой, какой мостят тротуары в городах, да ещё разного цвета, — приводит образное сравнение Валентин Павлович, — и вы поймёте, какое кощунство совершено в мемориале».

Не отвечает реальной обстановке в оборонявшейся цитадели и «прилизанный» рельеф её территории, словно призывающий забыть ту кровавую эпопею, когда в огненном смерче смешивались земля и небо. Упорное стремление архитектурной элиты Брестчины «зализать» в крепости следы войны, да ещё построить в ней гостиницы, рестораны, клубы, возмущает Занковича. Он не может избавиться от впечатления, что здесь произведён «евроремонт» и вместо уникального, самобытного и мужественного ансамбля мы получаем заурядный парк культуры и отдыха, да ещё ко всему — местечкового уровня.

При такой активности «новодельщиков» до сих пор нет архитектурно-скульптурной композиции, посвящённой последнему защитнику крепости Герою Советского Союза майору Петру Гаврилову на форте его имени. Она планировалась во второй очереди мемориала, основная идея которой — увековечить конкретных героев и их подвиги в бронзе и камне, а не виртуально, по рассказам экскурсоводов, полностью выхолощена. Чуждые элементы, появившиеся, по словам Занковича, самодельно и безвкусно, засорили крепость и, выпадая из пластического языка ансамбля, разрушают целостность замысла, снижают эмоциональный накал восприятия.

КАК могло такое произойти? Поворот к «самодельству» начался с «перестройки» и принесённых ею «демократических» веяний, подтачивавших патриотическую основу нашей жизни. Кулуарно был сформирован новый коллектив проектировщиков, который возглавил архитектор В. Темнов, не имевший ни одного монументального произведения, зато вскоре организовавший свою частную фирму. Он-то и представил в 1988 году проект, перечёркивающий прежние наработки.

С развалом Союза ситуация усугубилась. На историческую церемонию, связанную с 55-летием начала Великой Отечественной войны и проводившуюся в Брестской крепости с участием двух президентов — России и Белоруссии, никого из четырёх авторов мемориала не пригласили. Каждый из них внёс немалый вклад не только в увековечение памяти защитников цитадели, но и в развитие культуры республики. Олег Стахович был удостоен Государственной премии Белоруссии и медали студии имени Б. Грекова за создание монумента «Курган славы», Георгий Сысоев, заслуженный архитектор республики, член-корреспондент Петровской академии наук и искусств, ветеран Великой Отечественной войны, прошедший путь от Москвы до Берлина, участник освобождения Минска и Белоруссии — премии Совета Министров СССР и Государственной премии БССР. Ряд произведений, увековечивающих судьбоносные события в жизни республики, были созданы архитектором Юрием Казаковым.
Но ни одна из инстанций не обратилась к авторам мемориала за консультацией, хотя работы велись не только на второй, но и на первой очереди, созданной ими.
Из письма Занковича в администрацию президента Белоруссии: «Не имею ни одного официального (в любой форме доведения до меня) уведомления, извещения и тем более приглашения даже на обсуждение намерений и предлагаемых планов проектируемых работ ни из Бреста, ни тем более из Министерства культуры РБ. Заживо похоронили!»

Валентину Павловичу запомнилось, как министр культуры Сосновский за целый год не нашёл полчаса, чтобы принять авторов проекта, и «сбагрил» их своему заместителю, который тоже ничего не решил. Казалось бы, эпоха Сосновского, как прозвали её в архитектурных кругах, прошла — Сосновский давно снят за упущения в работе, но отношение республиканских властей к мемориалу и его создателям не изменилось. Вопреки всем моральным и юридическим нормам они по-прежнему лишены авторского права и права на интеллектуальную собственность.

Когда в ходе «мемориальной» эпопеи авторы обратились в министерство культуры, им предложили созвониться с начальником управления капитального строительства. «А зачем нам авторы? — ответил тот. — Это же капитальный ремонт». Ответ обескуражил неприкрытым лукавством: в мемориал ведь вводили новые элементы, чуждые его идее. Но даже при капитальном ремонте возникают сложные вопросы, требующие авторского вмешательства, без которого правильно, художественно и органично их никто не может решить. Если бы стояла даже одна задача — мощения мемориала, и то, считает Занкович, она настолько сложна и многогранна, что требует совершенного вкуса и опыта художника, его понимания, какой материал подобрать и как оформить, чтобы всё вписывалось в реальную картину того времени и работало на основную идею: «Должна быть, прежде всего, задумка пластического языка мощения, задумка его образа, и она не менее важна и ответственна, чем, например, архитектурное решение «Входа» в Брестскую крепость».

Из писем авторов проекта, направленных в разные инстанции: «Грубо попраны не только юридические положения об авторском праве. Проект по капитальному ремонту и реконструкции мемориального комплекса «Брестская крепость-герой» никем не рассматривается, проектные и строительные работы идут без участия Государственного экспертного совета по монументальному искусству, идут на недопустимо низком, дилетантском уровне, непрофессионально, с искажением авторского замысла, нелепость и бездарность увековечиваются в граните и бетоне. Закапываются в землю деньги, с таким трудом собранные Россией, Беларусью, Украиной, Казахстаном и Молдавией. Разве это по-государственному? Разве всё происходящее нельзя сравнить с тем, как если бы министерство культуры России вдруг поручило группе поэтов дописать поэму С. Есенина? Да ещё при живом авторе! Мы просим восстановить справедливость, когда любые реставрационные и иные работы по произведениям искусства ведутся только под руководством и при участии авторов».

Сначала письма отправляли все четверо. Сейчас, когда трое ушли из жизни, — один Занкович. Он продолжает борьбу и в этой борьбе нашёл поддержку брестской областной и республиканской ветеранских организаций, заинтересованность, в устной, правда, форме, руководства Брестского облисполкома.
Но республиканские инстанции, от которых прежде всего зависит судьба мемориала, не собираются менять позицию. Логика их поразительна. «Государственное учреждение «Мемориальный комплекс «Брестская крепость-герой» является вторым по посещаемости среди музеев страны (количество посещений в 2017 г. составило 425,2 тысячи), — отвечают Занковичу из министерства культуры. — В связи с этим предложение о вводе 2-й очереди мемориального комплекса «Брестская крепость-герой» является неактуальным».

Почему же из-за популярности первой очереди комплекса нужно отменить создание второй? Вот уж поистине, в огороде бузина, а в Киеве дядька! Не менее странной выглядит цель, поставленная перед теми, кто ведёт в цитадели работы: «В настоящее время актуальной задачей для развития Брестской крепости является вовлечение в хозяйственный оборот неиспользуемых территорий и строений крепости». Словно речь идёт о производственном или торговом объекте.

ЧТО придаёт силы Валентину Павловичу, уже перешагнувшему восьмидесятилетний рубеж? «Я выступаю на правах последнего ныне здравствующего из когорты творческого авторского коллектива архитекторов-скульпторов-монументалистов, — пишет он в одном из обращений к властям. — И пока жив, обязан завершить нереализованные замыслы нашего коллектива по увековечению Подвига защитников крепости».

Не меньше сил придаёт ему и осознание того, какое воздействие оказывает на людские сердца и души исполненный замысел первой очереди мемориала. Чтобы понять это, надо прочесть воспоминания Олега Стаховича. Он рассказывает, как почти девятнадцать лет назад вместе с членами государственного Совета по произведениям монументального искусства министерства культуры республики все четверо авторов мемориала посетили Брестскую крепость. Привожу, пусть извинит читатель за обширную цитату, выдержку из воспоминаний Олега Александровича:

«Плотный поток людей вливался в раскалённый докрасна от лучей прожекторов громадный, жёстко очерченный контуром звезды, зев звёздного входа крепости. А когда над ними, где-то там в верху рубленых сколов звезды, что образовывали купол, грянула музыка песни: «Идёт война народная, священная война...», люди не сговариваясь, молча взялись за руки и, крепко сжимая ладони, образовали живые цепи; и также молча шли дальше, где в контуре обратной стороны звезды, как бы в раме из сколов, билось пылающими всполохами прожекторов сердце защитников Брестской крепости. И вдруг мы ощутили, что людские цепи начали тесниться, сжиматься влево, и повернули туда головы — на чёрном фоне гранита контрастно обрисовывалось белое пятно фигуры совершенно седой женщины. Она стояла, уткнувшись лицом в стену, руки её были подняты вверх и плотно опирались о гранит, плечи ритмично вздрагивали — она рыдала. Её седые волосы, тяжело ниспадающие вниз, её распластавшиеся руки с ниспадающими складками белой тяжёлой ткани и драпировка её платья напоминали рисунок Леонардо да Винчи «Скорбящая».

И людские цепи, непроизвольно изгибаясь, теснились к противоположной стене, образуя немного пространства перед ней, будто это была святая и её надо было увидеть всем. К ней никто не подходил, ибо понимал, что женщине надо одной выплакаться и самой справиться со своим горем, очевидно, чувствуя, что ей уже никто и ничем не поможет. Увиденное напоминало белую раненую птицу, распластанную на чёрной, отливающей синевой и печалью, гранитной плите. Мы разжали руки, чтобы освободиться, и, пройдя звезду входа, направились к ближайшей скамейке.

По-прежнему нескончаемый людской поток двигался по прямой, как натянутая струна, аллее туда, где билось сердце защитников, где на «алтаре» цитадели навечно застыл в глубоком молчании силуэт солдата — непокорённого защитника крепости, и тут же рядом с ним взметнулся ввысь стометровым космическим следом, пронзая тёмное звёздное небо, штык-обелиск — символ воинской славы. Помнится, как тогда мы одновременно встали со скамейки и молча пожали друг другу руки, а перед глазами всё стояло белое видение на фоне чёрного гранита...

И каждый из нас понимал, что это было народным признанием мемориального комплекса «Брестская крепость-герой». А люди всё шли и шли, и казалось, что это неисчерпаемая в веках река народной памяти не обмелеет».

Уже тогда в цитадели появились первые новшества. И, натыкаясь на них, художники, члены Государственного экспертного совета хватались за голову. «А вы где были?» — спрашивали они Занковича и его коллег. «Сражались, — отвечали те, — с министерством».

После приезда в Минск на заседании Совета члены его единогласно высказались за немедленное прекращение всех «новаторских» работ — и строительных, и реставрационных. Но министерство культуры к их мнению не прислушалось, решило продолжать в том же духе. И сейчас к ошеломляющему впечатлению примешивается горечь от «новоделов», засоривших крепость.

Сегодня посетители подолгу останавливаются у композиции, посвящённой Герою Советского Союза Андрею Кижеватову. Единственная из шести композиций, воплощённая в бронзе и установленная в крепости, она вызывает те же чувства, что и другие произведения авторского коллектива, изначально разрабатывавшего проект мемориала. И это ещё раз доказывает, что нужно воплощать его изначальную идею, а не бросаться в омут «новодельничества».

ЕСТЕСТВЕННО, встаёт вопрос: что делать? В первую очередь, считает Валентин Павлович, остановить засорение крепости чуждыми для неё, противоречащими истинному зодчеству элементами. Не откладывая, провести ревизию проектов и отказаться от тех, что приняты без его и его ушедших из жизни товарищей авторского согласия. Средства, выделенные Союзным государством, направить не на устройство новых помещений типа… и чрезмерное благоустройство крепостной территории, а на воплощение проектов, отражающих изначальную идею мемориала. Основа этой идеи, концепция — приблизить облик Брестской крепости к состоянию на 22 июня 1941 года (например: траншея, окопы, оружие, разбитый немецкий танк вместо реставрируемых советских и современных). Наглядный пример — панорамы и экспозиции Севастополя и обороны Ленинграда.

Следует отказаться от уклона в музеефикацию, при которой вместо скульптурных композиций и памятных знаков героям крепости демонстрируют их фотографии в музее.
И, конечно, все работы должны вестись под контролем Государственного экспертного совета, отстранённого от участия в наблюдении за тем, что и как делается в цитадели.

Из письма Занковича в Совет министров республики: «Мы не имеем права позволить вторгаться на святую землю, политую кровью героев, вторгаться в этот священный для наших народов храм людям, далёким от настоящего искусства, и наш гражданский долг остановить поползновение также далёких от искусства чиновников всех мастей и рангов».

Всё это, не сомневается Валентин Павлович, сейчас особенно актуально ещё и потому, что Запад начал новое наступление на Брестскую крепость. Композиции мемориала, как и подвиг её защитников, пытаются «обесцветить» ярлыками, называют их уродливыми, а классику скульптурного жанра — «советскостью», «совковостью», «сталинизмом». В обычном своём стиле посягают на самое для нас святое. И этим самым «новодельцы» льют воду на их мельницу, способствуют объединённым усилиям Запада обезличить, принизить и переписать историю Великой Отечественной войны.

Слишком далеко отступили они от идеи мемориального комплекса. В этом Валентин Павлович убедился ещё раз, побывав на днях в Бресте. «Основной целью реализации проекта Союзного государства «Капитальный ремонт, реставрация и музеефикация сооружений Брестской крепости в мемориальном комплексе «Брестская крепость-герой», — записано в постановлении Совета Министров Союзного государства, — является сохранение памяти о подвиге советского народа в борьбе с фашизмом».
Но что делается сейчас в цитадели? Создано несколько отделений музея, не имеющих отношения к обороне крепости и борьбе с фашизмом. В одном из них — картины, скульптуры и графика белорусских художников. Во втором — манекены царских служивых: сторожевая будка с постовым, чиновник за письменным столом. Чем дальше — тем выше чины и тем больше выполненные в полный рост фигуры блестят эполетами. Как венец, двое служак навытяжку перед самим, надо понимать, губернатором. А в завершение экспозиции — праздничный бал: девушки в белых платьях, с ними гусары, дворяне…

Трудно даже представить, что в экспозициях мемориальных комплексов Курской дуги или обороны Ленинграда были бы представлены царские генералы и губернаторы. А здесь не просто представлены — за вход берут по пять белорусских рублей (175 российских). При нынешнем посещении крепости за год, считай, наберётся (в белорусских рублях) два миллиона, или 70 миллионов в российских. Святыню низводят до уровня коммерческого проекта.

Похоже, ситуация и впрямь зашла слишком далеко. Так далеко, что необходимо вмешательство президента республики. Остаётся надеяться, что Александр Григорьевич Лукашенко возьмёт, как бывшие руководители Белоруссии — Кирилл Трофимович Мазуров и Пётр МироновичМашеров, под свой контроль работу над завершением мемориала. Только он остановит покушение на Брестскую крепость.

Олег СТЕПАНЕНКО,
соб. корр. «Правды». г. Минск.
ПРАВДА, №30 (30817) 21 марта 2019 года

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.