/** * 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); } Коммунист военной закалки и сегодня в боевом строю | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

Коммунист военной закалки и сегодня в боевом строю

«И вечный бой! Покой нам только снится!» Мне кажется, эти строчки Александра Блока как ни к кому другому имеют прямое отношение к коммунисту фронтовой поры, участнику Великой Отечественной войны, прошедшему ее от первого до последнего дня, человеку с боевым характером, огромной гражданской ответственностью Сквознякову Петру Васильевичу.
Родился он в провинциальном городке Клинцы, что на Брянщине, в семье ткачей. В городке с сорокатысячным населением функционировали четыре суконные фабрики, кожевенный завод, обеспечивавшие работой клинчан. Жили скромно, но дружно, растили детей, с радостью встречали каждый новый день, строили планы на будущее. Петр с братьями учился в школе и, как все мальчишки в ту пору, мечтал о небе. Поступил в аэроклуб.
Но в мирную жизнь советской страны, как и в жизнь каждой семьи, ворвалась война. На второй день после нападения гитлеровской Германии на СССР Петр, которому не было еще восемнадцати лет, пришел в военкомат. «Направьте меня на фронт!» - сказал паренек. «На фронт еще успеешь, – ответил военком. – А вот в училище поедешь: надо поучиться бить фашистов».
23 июня Петр Сквозняков был направлен в Тамбовское артиллерийско-оружейное техническое училище. Прошел ускоренный курс обучения и получил назначение в 475-й артиллерийский полк 195-й стрелковой дивизии на должность артиллерийского техника артдивизиона. Так началась боевая жизнь Петра Васильевича.
Потерпев поражение под Москвой, фашистская верхушка летом 1942 года основные усилия сосредоточила на южном направлении с целью овладеть Сталинградом, выйти на Кавказ, захватить богатейшие в промышленном и сырьевом отношении районы Советского Союза, нарушить его внешние связи через Иран, ускорить вступление в войну Турции на стороне Германии, поставить нашу страну на колени.
В начале мая 1942 года непродолжительное затишье сменилось ожесточенными боями под Воронежем, Харьковом, в Донбассе и Крыму. В июле 195-я стрелковая дивизия, а вместе с ней и Петр Сквозняков, прибыла под Воронеж. Три месяца не выходил из боя арттехник. Десятки орудий были отремонтированы им непосредственно на огневых позициях под огнем противника. Здесь он связал свою судьбу с Коммунистической партией, которой остается верен более семидесяти лет!
После доукомплектования личным составом и вооружением прибыл техник-лейтенант Сквозняков со ставшей уже родной дивизией на Донской фронт под Сталинград.
В боях коммунист Петр Сквозняков зажигательным словом воодушевлял товарищей на подвиг и сам совершал героические поступки. Я держу в руках пожелтевшую от времени, истертую сотнями рук дивизионную ежедневную красноармейскую газету «За нашу победу!» от 12 августа 1943 года, которую, как дорогую реликвию, хранит ветеран. Читаем вместе. «Самоотверженный поступок. Коммунисты Живописцев и Сквозняков спасли батарею.
Во время сильного огневого налета фашистов загорелись боеприпасы на огневой позиции. Неминуемый взрыв грозил уничтожить материальную часть и личный состав артиллерийской батареи.
Рискуя жизнью, бросились тушить пожар кандидаты в члены ВКП(б) лейтенанты Живописцев и Сквозняков. Примеру коммунистов последовали и другие артиллеристы. Усилиями смельчаков пожар был ликвидирован. Во время тушения пожара Сквозняков был ранен осколком снаряда, но продолжал спасать боеприпасы, пока огонь не был ликвидирован».
Читаешь и мысленно переносишься в тот жаркий бой. За этот героический поступок Петр Васильевич был награжден орденом Красной Звезды.
Артиллеристы-огневики любили и уважали своего арттехника за боевую удаль, виртуозную расторопность и мастерство.
С боями прошагал старший техник-лейтенант Сквозняков по югу Украины, вышел к Советской Молдавии.
А дальше – Ясско-Кишеневская стратегическая операция. На направлении главного удара в составе ударной группировки действовала 195-я стрелковая дивизия, в которую входил и 445-й артиллерийский полк, где арттехником дивизиона воевал старший лейтенант Сквозняков. Воинам предстояло форсировать Днестр, захватить плацдарм на правом берегу и не только удержать до подхода главных сил, но и расширить его.
И грянул бой… Дивизия, поддержанная танками, самоходной артиллерией и авиацией, овладела плацдармом с ходу, не дав противнику опомниться. Гитлеровцы пытались уничтожить подразделения, сбросить в Днестр. В этой обстановке беспримерными были стойкость и мужество воинов, в том числе и коммуниста Сквознякова.
«Не изгладится из памяти картина гигантского сражения, - вспоминает Петр Васильевич. - Восемь суток земля гудела от разрыва сотен тысяч снарядов и бомб, сплошная пелена дыма и пыли, море огня закрывали холмистые просторы Молдавии», - вспоминает он.
Отбив многочисленные атаки превосходящих сил противника, дивизия ликвидировала последние очаги сопротивления фашистов, внеся тем самым свой вклад в ликвидацию окруженной ясско-кишеневской группировки гитлеровцев и освобождение Молдавии.
Транспарантами, флагами, цветами, радостными улыбками и крепкими объятиями встречали жители стрелков и артиллеристов, выражая беспредельную признательность защитникам и освободителям. На северной окраине освобожденного молдавского города Кагула состоялся митинг. Когда начал свое выступление техник 1-го дивизиона артиллерийского полка старший лейтенант, член ВКП(б) Петр Сквозняков, раздались дружные аплодисменты: он стоял с перевязанной рукой, его поддерживала на трибуне санитарка.
«Дорогие боевые товарищи! - начал взволнованно коммунист Сквозняков. – После ранения у берега реки Прут я нахожусь на излечении в своем медсанбате. Упросил врачей, чтобы меня не отправляли в далекий тыл. До советской государственной границы дошел, и очень хочется принять участие в освобождении других стран и народов. На этой земле осталась моя русская кровь. Я теперь стал для молдаван кровным братом».
Успешное завершение Ясско-Кишеневской операции создало условия для решения новой задачи – стремительного броска советских войск на Балканы.
Марш «сквозняковской» 195-й по территории Румынии проходил стремительно, организованно. Посаженная на грузовые автомашины, повозки, верховые лошади дивизия проявила невиданную по тем временам мобильность. Это еще больше способствовало повышению темпа марша на Балканском направлении.
В период продвижения усиленное внимание уделялось политико-воспитательной работе. Во всех частях и подразделениях проводились беседы, партийные и комсомольские собрания, в которых принимал участие и коммунист Сквозняков. В армейской и дивизионной газетах печатались сообщения Совинформбюро, специальные статьи, посвященные благородной миссии воина-освободителя.
Советское правительство решило ускорить помощь болгарскому народу в его борьбе за национальное и социальное освобождение. Операцию по освобождению Болгарии должен был осуществить 1-й Украинский фронт под командованием генерала Ф.И.Толбухина. В составе фронта была и 195-я стрелковая дивизия, а в ней – старший лейтенант Петр Сквозняков. Военный Совет фронта обратился с воззванием «К болгарскому народу! К болгарской армии!» Его в своем артиллерийском дивизионе зачитал коммунист Сквозняков.
«Болгары! Красная Армия не имеет намерения воевать с болгарским народом и его армией, так как она считает болгарский народ братским народом. У Красной Армии одна задача – разбить фашистов и ускорить срок наступления всеобщего мира».
6 сентября Ставка Верховного Главнокомандования дала приказ начать военные действия. Вот как писал об этом в книге «Воспоминания и размышления» Маршал Советского Союза Г.К.Жуков.
«Утром 8 сентября все было готово, чтобы открыть огонь, но мы со своих наблюдательных пунктов не видели целей, по которым надо было вести этот огонь…
В стереотрубы, бинокли и невооруженным взглядом мы наблюдали на болгарской территории обычную мирную жизнь: в населенных пунктах из труб вился дымок, а люди занимались житейскими делами. Присутствия воинских частей обнаружено не было. Маршал В.И.Толбухин приказал войскам двинуть вперед передовые отряды. Не прошло и получаса, как командующий 57-й армией доложил, что одна из пехотных дивизий болгарской армии, построившись у дороги, встретила наши части с развернутыми красными знаменами и торжественной музыкой. Через некоторое время такие же события произошли и на других направлениях. Командиры доложили, что идет стихийное братание советских воинов с болгарским народом.
Я тотчас же позвонил в Ставку.
И.В.Сталин сказал: «Все оружие болгарских войск оставьте при них, пусть они занимаются своими обычными делами и ждут приказа своего правительства».
Этим простым актом со стороны Верховного Главнокомандования было выражено полное доверие болгарскому народу и болгарской армии, которые по-братски встретили Красную Армию, видя в ней свою освободительницу от немецких оккупантов и царского профашистского режима.
Продвигаясь в глубь страны, советские войска везде и всюду встречали самое теплое отношение… Было радостно сознавать, что в этой «войне» не было жертв ни с той, ни с другой стороны».
«Братушки» – первое слово, которое мы услышали в Болгарии, - вспоминает Петр Васильевич. - «Добре дошли, другари!» Слова эти, без переводчика понятные, близкие сердцу и разуму, навсегда запомнились мне и всем советским воинам, которые вступили в сентябре 1944 года в Болгарию».
Общительные и любознательные болгары при первой же возможности старались завязать беседы с советскими воинами, говорили сами, ждали ясных ответов. Советские войска получили право расквартировать подразделения в благоприятных местах, отведенных им болгарскими властями.
«Мы не вмешивались во внутренние политические дела болгар, - продолжает Петр Васильевич. – Вопрос о своем политическом и государственном устройстве решал сам болгарский народ. А вот всемерную помощь в налаживании народного хозяйства, в улучшении жизни трудящихся мы им оказывали. Артиллеристы нашего полка помогали крестьянам приводить в порядок запущенное хозяйство. В артиллерийской мастерской я делал мотыги. На изготовление незатейливого, но крайне необходимого в крестьянском хозяйстве инвентаря шли списанная металлическая тара, трофейные канистры и даже гильзы от снарядов».
Шли к советскому воину старшему лейтенанту Сквознякову болгары за помощью, а еще послушать о жизни советских колхозников, об организации труда в сельском хозяйстве Страны Советов. Опытный пропагандист и агитатор, военкор армейской и дивизионной газет, он знал цену правдивого слова большевистской пропаганды. За это и полюбили болгары коммуниста-арттехника.
С фронтов Великой Отечественной войны продолжали поступать радостные вести. Окончательная победа над фашистской Германией была не за горами.
… Ранним солнечным утром 9 мая 1945 года счастливое человечество слушало Москву.
«Приказ Верховного Главнокомандующего, - приводя в радостный трепет миллионы сердец, гремел в эфире голос советского диктора, - 8 мая 1945 года, - размеренно и торжественно читал Левитан, - в Берлине представителями германского верховного командования подписан Акт о безоговорочной капитуляции германских вооруженных сил. Великая Отечественная война, которую вел советский народ против немецко-фашистских захватчиков, победоносно завершилась…»
Вдохнув в себя полной грудью свежий и чистый горный воздух, Петр Сквозняков и тысячи солдат дивизии бросились обнимать друг друга, вверх полетели пилотки и фуражки, трещали автоматные и винтовочные выстрелы.
22 июля со станции Нова-Загора отправился с первым эшелоном демобилизованных и старший техник-лейтенант Петр Сквозняков. Вышедшие на улицу болгары с цветами провожали в счастливый путь своих освободителей, друзей, помощников.
Но не снял погоны старший лейтенант. Его направили в город Вознесенск под Николаевом на артиллерийскую базу техником оптического цеха. Здесь на его погонах появилась еще одна звездочка. Затем был Дальний Восток и должность начальника артвооружения полка, а на погоны «упала большая звезда» майора. Потом – высшие артиллерийские курсы и синеокая Беларусь, военный городок Станьково. Здесь за освоение новых образцов техники и вооружения член КПСС подполковник Петр Сквозняков был награжден вторым орденом Красной Звезды.
Но годы летят. В 1968 году ушел Петр Васильевич в запас. Окончил заочно Белорусскую сельскохозяйственную академию и более тридцати лет трудился в народном хозяйстве. Последние годы – на республиканском стадионе «Динамо».
«Распад Советского Союза стал для меня настоящим потрясением, - говорит Петр Васильевич. – Но мы не опустили руки. В короткий срок после запрета деятельности Компартии Беларуси я с группой соратников встал на защиту КПБ, ее истории, и вскоре мы воссоздали Партию коммунистов Белорусскую. Но со временем поняли, что руководство партии изменило марксистско-ленинским принципам. Мы с единомышленниками ушли из этой партии и возродили Коммунистическую партию Беларуси».
Много лет возглавлял коммунист Сквозняков первичную парторганизацию «Кировская» в Ленинском районе столицы. Сегодня он член бюро Ленинского райкома КПБ. С неподражаемым молодым задором, с неизменной верой в коммунистические идеалы, с партийным билетом у сердца Петр Васильевич и сегодня продолжает активно участвовать в предвыборных баталиях, в укреплении партийных рядов, в нравственно-патриотическом воспитании подрастающего поколения. И сегодня он продолжает вести свой главный бой – бой за умы и сердца людей.
«Всю мою жизнь, как путеводная звезда, озаряла жена Тамара Исидоровна, - с гордостью говорит ветеран о покойной супруге. – Вместе мы прожили счастливых 57 лет и воспитали двух прекрасных дочерей Надежду и Лидию. Сегодня у меня четверо внуков, семь правнуков. Я богатый дед».
13 июля Петр Васильевич выйдет на девяностолетний рубеж своей жизни. Но и сегодня в нем задор молодости, ясность ума, верность лучшим идеалам великой советской эпохи.
На мой вопрос, в чем секрет его активного долголетия, Петр Васильевич отвечает: «Не позволять душе лениться, не склонять головы перед трудностями».
Сквозняков щедро делится своим душевным богатством воина-патриота, учит молодежь мыслить и работать в соответствии с лучшими традициями Коммунистической партии. Он самой своей жизнью выстраивает связь времен, связь поколений.

Автор: 
Александр КОСЕНКО
Номер газеты: