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

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

Соратник, ученик, друг

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

«Ленин — настоящий горный орёл»

На траурном заседании II съезда Советов СССР 26 января 1924 года выступали многие политические деятели: председатель ЦИК СССР и ВЦИК М.И. Калинин, заместитель председателя Совнаркома и СТО СССР Л.Б. Каменев, председатель Исполкома Коммунистического Интернационала Г.Е. Зиновьев, председатель ВЦСПС М.П. Томский, главный редактор газеты «Правда» Н.И. Бухарин, командующий Московским военным округом К.Е. Ворошилов, Надежда Константиновна Крупская, Клара Цеткин и другие. Генеральный секретарь ЦК РКП(б) И.В. Сталин был одним из выступавших, и речь его была достаточно короткой. Но что существенно: он был единственный, кто выступил у гроба Ленина с клятвой хранить в чистоте великое звание члена партии, беречь, как зеницу ока, единство партии, укреплять диктатуру пролетариата и союз рабочих и крестьян, Красную Армию и Красный Флот, укреплять и расширять Союз социалистических республик, хранить верность принципам Коммунистического Интернационала.
А через день было ещё одно выступление — перед кремлёвскими курсантами. Речь 28 января 1924 года была вдвое продолжительнее. Но главное её отличие: она выражала личное отношение Сталина к Владимиру Ильичу. При этом оратор всё время опирался только на конкретные факты.

И.В. Сталин начал рассказ с воспоминаний о первом письме, полученном от В.И. Ленина: «Впервые я познакомился с Лениным в 1903 году. Правда, это знакомство было не личное, а заочное, в порядке переписки. Но оно оставило во мне неизгладимое впечатление, которое не покидало меня за всё время моей работы в партии. Я находился тогда в Сибири в ссылке. Знакомство с революционной деятельностью Ленина с конца 90-х годов и особенно после 1901 года, после издания «Искры», привело меня к убеждению, что мы имеем в лице Ленина человека необыкновенного... Письмецо Ленина было сравнительно небольшое, но оно давало смелую, бесстрашную критику практики нашей партии и замечательно ясное и сжатое изложение всего плана работы партии на ближайший период. Только Ленин умел писать о самых запутанных вещах так просто и ясно, сжато и смело, — когда каждая фраза не говорит, а стреляет. Это простое и смелое письмецо ещё больше укрепило меня в том, что мы имеем в лице Ленина горного орла нашей партии».
Сталинское сравнение Ленина с горным орлом заслуживает особого внимания.

Ленинское письмо в сибирскую ссылку не сохранилось, так как подпольщики в России привыкли всю корреспонденцию уничтожать. Но сохранились два письма Сталина, написанные им в сентябре—октябре 1904 года своему товарищу по революционной борьбе в Закавказье М.Давиташвили, находившемуся в то время в Лейпциге. Они интересны тем, что в них ярко выражено отношение 25-летнего Иосифа Джугашвили к руководителю русских большевиков. В первом из них читаем: «Человек, стоящий на нашей позиции, должен говорить голосом твёрдым и непреклонным. В этом отношении Ленин — настоящий горный орёл». Выходит, естественное для кавказца сравнение с орлом родилось у Сталина за 20 лет до выступления у кремлёвских курсантов и все годы сохранялось в восприятии им Ленина. Но оно не было предназначено для публики и при жизни В.И. Ленина ни разу его соратником не использовалось.

Впрочем, два письма из Кутаиси, впервые опубликованные в 1-м томе Сочинений И.В. Сталина в 1946 году, привлекают серьёзным анализом молодого большевика ленинских политических позиций. В частности, Сталин анализирует работу «Что делать?» и критическую оценку, данную ей Г.В. Плехановым. Он пишет единомышленнику: «Заключение (практический вывод) отсюда таково: возвысим пролетариат до сознания истинных классовых интересов, до сознания социалистического идеала, а не то чтобы разменять этот идеал на мелочи или приспособить к стихийному движению. Ленин установил теоретический базис, на котором и строится этот практический вывод. Стоит только принять эту теоретическую предпосылку, и никакой оппортунизм не подступит к тебе близко. В этом значение ленинской идеи. Называю её ленинской, потому что никто в русской литературе не высказывал её с такой ясностью, как Ленин».

В тифлисской газете «Пролетариатис Брдзола» («Борьба пролетариата») Сталин печатает статью «Класс пролетариев и партия пролетариев (По поводу первого пункта устава партии)», в которой впервые публично пишет о достоинствах политической позиции Ленина как его ученик и последователь: «Значит, членом Российской социал-демократической рабочей партии может быть назван тот, кто принимает программу этой партии, оказывает партии материальную помощь и принимает участие в одной из партийных организаций.

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

«Особенности Ленина, как человека и как деятеля»

В этой статье молодой многообещающий кавказский большевик выражал уверенность, что III съезд РСДРП откажется от ошибочно принятой на предыдущем съезде мартовской формулировки первого параграфа устава и примет ленинский вариант пункта, определяющего требования к члену партии. Сталинский прогноз оказался точным: съезд, проходивший на гребне Первой русской революции, принял требование к члену партии непосредственно участвовать в деятельности партийной организации. Это случилось в мае 1905 года. А в декабре В.И. Ленин и И.В. Сталин впервые встретились. Это случилось на I Всероссийской конференции большевиков в Таммерфорсе (Тампере).

Затем были встречи на IV объединительном (стокгольмском) съезде РСДРП (1906 год), где большевики оказались в меньшинстве, и на V съезде в Лондоне (1907 год), на котором они вышли победителями.
Сразу же после VI (Пражской) Всероссийской конференции РСДРП, на которой И.В. Сталин не присутствовал, он по предложению Ленина был кооптирован в число членов ЦК партии. На VI съезде РСДРП(б), проходившем в августе 1917 года и взявшем курс на вооружённое восстание, случилась своеобразная рокировка: из-за преследования Временного правительства на нём отсутствовал В.И. Ленин. По его поручению Политический доклад Центрального Комитета съезду делал И.В. Сталин, а после съезда он вошёл в состав бюро ЦК.

10 октября 1917 года Сталин был избран в Политбюро ЦК партии большевиков, которое под руководством Ленина осуществляло политическую подготовку революционного выступления. А через 5 дней расширенное заседание ЦК большевистской партии избирает Партийный центр по руководству восстанием. Возглавил его И.В. Сталин. О том, что Владимир Ильич видел в Сталине надёжного единомышленника, свидетельствует и то, что Иосиф Виссарионович вошёл в состав первого Советского правительства, постоянно работал после победы Октябрьской революции в «узком составе» ЦК РКП(б), а с марта 1919 года неизменно был членом Политбюро ЦК, ставшего постоянно действующим органом партии. Верный ученик Ленина стал одним из его ближайших соратников. Он член Реввоенсовета Республики, ему постоянно приходится представлять Советскую власть на самых ответственных, самых трудных фронтах Гражданской войны.

Важную страницу в биографии И.В. Сталина занимает оборона Царицына (не случайно именно этот город в 1925 году получил имя Сталинграда, остальные города, которые носили имя Сталина, получили его позже). Практически ежедневно член РВС РСФСР докладывал председателю Совнаркома с места событий о положении дел в южном Поволжье и на Северном Кавказе: города Промышленного Центра ждали хлеб. В этих письмах и телеграммах обращает на себя внимание сугубо деловой стиль общения. Обращение только одно: «Товарищу Ленину». Никаких лирических отступлений. Только однажды, 31 августа 1918 года, когда Сталин узнал, что Ленин ранен, в письме появляются скупые эмоции близкого человека.
Да ещё в небольшой статье «Октябрьский переворот (24 и 25 октября 1917 года в Петрограде)», посвящённой первой годовщине Великой Октябрьской социалистической революции и опубликованной в «Правде» 6 ноября 1918 года, мы находим первое публичное заявление Сталина о решающей роли в Октябрьской победе Владимира Ильича Ленина.

«Эта скромность и мужество особенно нас пленяли»

Вечером 23 апреля 1920 года в Московском комитете РКП(б) состоялось собрание по поводу 50-летия В.И. Ленина. Выступление И.В. Сталина было заключительным (В.И. Ленин выступал уже после перерыва). О чём он говорил? Вот его ответ: «После произнесённых речей и воспоминаний мне остаётся мало, что сказать. Я хотел бы только отметить одну черту, о которой никто ещё не говорил, это — скромность товарища Ленина и его мужество признать свои ошибки».

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

Тут нельзя не обратить внимания на «причуды» истории. В апреле 1920 года В.И. Ленин приступил к работе над брошюрой «Детская болезнь «левизны» в коммунизме». В ней дан глубокий анализ отношения большевиков к парламентаризму. Ленин писал: «Большевистский бойкот «парламента» в 1905 году обогатил революционный пролетариат чрезвычайно ценным политическим опытом, показав, что при сочетании легальных и нелегальных, парламентских и внепарламентских форм борьбы иногда полезно и даже обязательно уметь отказаться от парламентских. Но слепое, подражательное, некритическое перенесение этого опыта на иные условия, в иную обстановку является величайшей ошибкой. Ошибкой, хотя и небольшой, легко поправимой, был уже бойкот большевиками «Думы» в 1906 году».
Но интерес представляет не отношение к «небольшой, легко поправимой» ошибке, а принципиальное отношение к бойкоту парламентских выборов: «Тогда (в 1905 году. — В.Т.) бойкот оказался правильным не потому, что правильно вообще неучастие в реакционных парламентах, а потому, что верно было учтено объективное положение, ведшее к быстрому превращению массовых стачек в политическую, затем в революционную стачку и затем в восстание. Притом борьба шла тогда из-за того, оставить ли в руках царя созыв первого представительного учреждения или попытаться вырвать этот созыв из рук старой власти. Поскольку не было и не могло быть уверенности в наличности аналогичного объективного положения, а равно в одинаковом направлении и темпе его развития, постольку бойкот переставал быть правильным».

Да, Сталин был, конечно же, прав, говоря, что «этот великан» обладал уникальной способностью «признаваться в промахах, допущенных им», даже когда речь шла о «небольшой, легко поправимой» ошибке.
Но вернёмся к речи И.В. Сталина на юбилейном собрании: «В 1917 году, в сентябре, при Керенском, в момент, когда было созвано Демократическое совещание и когда меньшевики и эсеры строили новое учреждение — предпарламент, которое должно было подготовить переход от Советов к Учредилке, вот в этот момент у нас в ЦК в Петрограде было решение не разгонять Демократическое совещание и идти вперёд по пути укрепления Советов, созвать съезд Советов, открыть восстание и объявить съезд Советов органом государственной власти. Ильич, который в то время находился вне Петрограда в подполье, не соглашался с ЦК и писал, что эту сволочь (Демократическое совещание) надо теперь же разогнать и арестовать.

Нам казалось, что дело обстоит не так просто, ибо мы знали, что Демократическое совещание состоит в половине или, по крайней мере, в третьей своей части из делегатов фронта, что арестом и разгоном мы можем только испортить дело и ухудшить отношения с фронтом… Мы же, практики, считали, что невыгодно тогда было так действовать, что надо обойти эти преграды, чтобы взять потом быка за рога. И, несмотря на все требования Ильича, мы не послушались его, пошли дальше по пути укрепления Советов и довели дело до съезда Советов 25 октября, до успешного восстания. Ильич был уже тогда в Петрограде. Улыбаясь и хитро глядя на нас, он сказал: «Да, вы, пожалуй, были правы».
Это опять нас поразило.

Товарищ Ленин не боялся признать свои ошибки.
Эта скромность и мужество особенно нас пленяли».

«Сохранить себя, как партия рабочего класса»

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

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

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

«По сравнению с «рабочим вопросом» подчинённое значение национального вопроса не подлежит сомнению для Маркса».
Тут всего две строчки, но они решают всё. Вот это надо зарубить себе на носу некоторым не по разуму усердным товарищам».
Классовый характер национального вопроса требует, чтобы партия не допускала ни великодержавного русского шовинизма, ни шовинизма «местного», то есть других народов, входящих в федерацию. При этом ораторы усердно жонглируют цитатами из Ленина. В ответ Сталин произносит: «Позвольте и мне здесь сослаться на тов. Ленина. Я бы этого не сделал, но так как на нашем съезде есть много товарищей, которые вкривь и вкось цитируют тов. Ленина, искажая его, разрешите прочесть несколько слов из одной всем известной статьи тов. Ленина:
«Пролетариат должен требовать свободы политического отделения колоний и наций, угнетаемых «его» нацией. В противном случае интернационализм пролетариата останется пустым и словесным; ни доверие, ни классовая солидарность между рабочими угнетённой и угнетающей наций невозможны».

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

Ещё чаще Сталин проводил ленинские идеи без использования цитат из его речей и статей. В Организационном отчёте Центрального Комитета РКП(б) XII партсъезду значительная часть доклада непосредственно связана с пропагандой и проведением в жизнь идей, высказанных в последних ленинских статьях «Как нам реорганизовать Рабкрин» и «Лучше меньше, да лучше».
Сталин с удовлетворением докладывал съезду об успешном выполнении задач партийного строительства, поставленных В.И. Лениным на XI съезде РКП(б): «Наступил перелом, наметился определённый уклон в сторону увеличения процента рабочего состава нашей партии за счёт непролетарского её состава. Это именно тот успех, которого мы добивались до времени чистки и которого мы добились теперь... Очевидно, что придётся усилить преграды против наплыва непролетарских элементов, ибо в данный момент, в условиях нэпа, когда партия безусловно подвержена тлетворному влиянию нэповских элементов, необходимо добиться максимума однородности нашей партии и, во всяком случае, решительного преобладания рабочего состава за счёт нерабочего. Партия должна и обязана сделать это, если она хочет сохранить себя, как партия рабочего класса».

Впрочем, сегодня актуально звучат не только положения, сформулированные в развитии ленинских идей на XII съезде РКП(б). Не менее злободневны и положения сталинской работы «Партия до и после взятия власти», напечатанной в «Правде» 23 августа 1921 года. В ней очень по-сегодняшнему звучат задачи периода завоевания широких рабочих и крестьянских масс на сторону партии, на сторону авангарда пролетариата и обобщение этого периода (1905—1917 годы) деятельности большевистской партии. Сталин обращает внимание на то, что «движение пролетариата обогатилось такими мощными формами, как всеобщая политическая забастовка и вооружённое восстание… Деятельность партии и других революционных организаций оживилась завоеванием таких форм работы, как внепарламентская, легальная, открытая форма».

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

Виктор Трушков

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