Commit 2258f4fb authored by APolitsin's avatar APolitsin
Browse files

init commit

parents
# synhelper
\ No newline at end of file
<h3>Last updated: <kbd>(add date)</kbd></h3>
<p>My Company <kbd>(change this)</kbd> ("us", "we", or "our") uses cookies on My Website <kbd>(change this)</kbd> (the "Service"). By using the Service, you consent to the use of cookies.</p>
<p>Our Cookies Policy explains what cookies are, how we use cookies, how third-parties we may partner with may use cookies on the Service, your choices regarding cookies and further information about cookies.
</p>
<h3>What are cookies</h3>
<p>Cookies are small pieces of text sent by your web browser by a website you visit. A cookie file is stored in your web browser and allows the Service or a third-party to recognize you and make your next visit easier and the Service more useful to you.
</p>
<p>Cookies can be "persistent" or "session" cookies.</p>
<h3>How My Company <kbd>(change this)</kbd> uses cookies</h3>
<p>When you use and access the Service, we may place a number of cookies files in your web browser.</p>
<p>We use cookies for the following purposes: to enable certain functions of the Service, to provide analytics, to store your preferences, to enable advertisements delivery, including behavioral advertising.
</p>
<p>We use both session and persistent cookies on the Service and we use different types of cookies to run the Service:</p>
<ul>
<li>
Essential cookies. We may use essential cookies to authenticate users and prevent fraudulent use of user accounts.
</li>
</ul>
<h3>Third-party cookies</h3>
<p>In addition to our own cookies, we may also use various third-parties cookies to report usage statistics of the Service, deliver advertisements on and through the Service, and so on.
</p>
<h3>What are your choices regarding cookies</h3>
<p>If you'd like to delete cookies or instruct your web browser to delete or refuse cookies, please visit the help pages of your web browser.</p>
<p>Please note, however, that if you delete cookies or refuse to accept them, you might not be able to use all of the features we offer, you may not be able to store your preferences, and some of our pages might not display properly.
</p>
<h3>Where can your find more information about cookies</h3>
<p>You can learn more about cookies and the following third-party websites:</p>
<ul>
<li>
AllAboutCookies: http://www.allaboutcookies.org/
</li>
<li>
Network Advertising Initiative: http://www.networkadvertising.org/
</li>
</ul>
<h2>1. Общие положения</h2>
<p>1.1. Настоящие Положение является официальным документом Администрации сайта, на котором оно размещено и определяет порядок обработки и защиты информации о физических лицах, пользующихся услугами интернет-сайта (далее - Сайт) и его сервисов (далее - Пользователи).</p>
<p>1.2. Отношения, связанные со сбором, хранением, распространением и защитой информации о пользователях Сайта, регулируются настоящим Положением, иными официальными документами Администрации Сайта и действующим законодательством Российской Федерации.</p>
<p>1.3. Регистрируясь, отправляя сообщения, заявки, лиды, иные послания с помощью средств и форм связи на Сайте, Пользователь выражает свое согласие с условиями Положения. В случае несогласия Пользователя с условиями Положения использование Сайта и его сервисов должно быть немедленно прекращено. Ответственность за это несет сам Пользователь.</p>
<p>1.4. Администрация Сайта не проверяет достоверность получаемой (собираемой) информации о Пользователях, за исключением случаев, когда такая проверка необходима в целях исполнения Администрацией Сайта обязательств перед Пользователем.</p>
<h2>2. Условия и цели обработки персональных данных</h2>
<p>2.1. Администрация Сайта осуществляет обработку персональных данных пользователя в целях исполнения своих обязательств между Администрацией Сайта и Пользователем в рамках предоставления информации о деятельности и работе структурных подразделений владельцев Сайта. В силу статьи 6 Федерального закона от 27.07.2006 № 152-ФЗ &laquo;О персональных данных&raquo; отдельное согласие пользователя на обработку его персональных данных не требуется. В силу п.п. 2 п. 2 статьи 22 указанного закона Администрация Сайта вправе осуществлять обработку персональных данных без уведомления уполномоченного органа по защите прав субъектов персональных данных.</p>
<p>2.2. Цели обработки персональных данных включают в себя: получение Пользователем информации, рассылок, документов и материалов, в том числе рекламного характера, обработка заказов Пользователя, направленных на получение товаров и услуг, консультационную поддержку Пользователя.</p>
<h2>3. Порядок ввода в действие и изменения Положения</h2>
<p>3.1. Положение вступает в силу с момента его размещения на Сайте и действует бессрочно, до замены его новым Положением.</p>
<p>3.2. Действующая редакция Положения, являющимся публичным документом, доступна любому пользователю сети Интернет.</p>
<p>3.3. Администрация Сайта вправе вносить изменения в Положение. При внесении изменений в Положение уведомляет об этом пользователей путем размещения новой редакции на Сайте по постоянному адресу. Предыдущие редакции Положения при этом утрачивают силу.</p>
<h2>4. Цели обработки информации</h2>
<p>4.1. Администрация Сайта осуществляет обработку информации о Пользователях, в том числе их персональных данных, в целях выполнения обязательств между Администрацией Сайта и Пользователем в рамках предоставления информации о деятельности и работе структурных подразделений владельцев Сайта.</p>
<h2>5. Состав персональных данных</h2>
<p>5.1. Персональные данные предоставляются Пользователем добровольно, означают согласие на их обработку Администрацией Сайта и включают в себя:</p>
<p>5.1.1. предоставляемые Пользователями минимально необходимые данные для связи: имя (возможно использование вымышленного), номер мобильного телефона и/или адрес электронной почты. Иные данные (в том числе пол, возраст, дата рождения, адрес и т.д.) предоставляется Пользователем по желанию и в случае необходимости таких данных для связи с пользователем и осуществлением действий, связанных с предоставлением услуг или доставкой товаров Пользователю.</p>
<p>5.2. Иная информация о Пользователях, обрабатываемая Администрацией Сайта.</p>
<p>Администрация Сайта обрабатывает также иную информацию о Пользователях, которая включает в себя:</p>
<p>5.2.1. стандартные данные, автоматически получаемые сервером при доступе к Сайту и последующих действиях Пользователя (IP-адрес хоста, вид операционной системы пользователя, страницы Сайта, посещаемые пользователем).</p>
<p>5.2.2. информация, автоматически получаемая при доступе к Сайту с использованием закладок (cookies).</p>
<p>5.2.3. информация, полученная в результате действий Пользователя на Сайте.</p>
<p>5.2.4. информация, полученная в результате действий других пользователей на Сайте.</p>
<p>5.2.5. информация, необходимая для идентификации Пользователя для доступа к сервисам сайта.</p>
<h2>6. Обработка информации о пользователях</h2>
<p>6.1. Обработка персональных данных осуществляется на основе следующих принципов:</p>
<p>- законности целей и способов обработки персональных данных;</p>
<p>- добросовестности;</p>
<p>- соответствия целей обработки персональных данных целям, заранее определенным и заявленным при сборе персональных данных, а также полномочиям Администрации Сайта;</p>
<p>- соответствия объема и характера обрабатываемых персональных данных, способов обработки персональных данных целям обработки персональных данных;</p>
<h3>6.2. Сбор персональных данных.</h3>
<p>6.2.1. Сбор персональных данных Пользователя осуществляется на Сайте при при внесении их пользователем по своей инициативе на момент обращения к Администрации сайта либо к сайту, согласно настроек Пользователя.</p>
<p>6.2.2. Имя, адрес электронной почты и\или телефон предоставляются Пользователем для осуществления обратной связи и для стандартной работы на Сайте не требуются.</p>
<p>6.2.3. Остальные Персональные данные, предоставляются Пользователем дополнительно по собственной инициативе с использованием соответствующих разделов и ресурсов Сайта.</p>
<p><h3>6.3. Хранение и использование персональных данных</h3></p>
<p>6.3.1. Персональные данные Пользователей хранятся исключительно на электронных носителях и обрабатываются с использованием автоматизированных систем, за исключением случаев, когда неавтоматизированная обработка персональных данных необходима в связи с исполнением требований законодательства.</p>
<p><h3>6.4. Передача персональных данных</h3></p>
<p>6.4.1. Персональные данные Пользователей не передаются каким-либо лицам, за исключением случаев, прямо предусмотренных настоящим Положением.</p>
<p>6.4.2. Приложения, используемые Пользователями на Сайте, размещаются и поддерживаются третьими лицами (разработчиками), которые действуют независимо от Администрации Сайта и не выступают от имени или по поручению Администрации Сайта. Пользователи обязаны самостоятельно ознакомиться с правилами оказания услуг и политикой защиты персональных данных таких третьих лиц (разработчиков) до начала использования соответствующих приложений.</p>
<p>6.4.3. Предоставление персональных данных Пользователей по запросу государственных органов (органов местного самоуправления) осуществляется в порядке, предусмотренном законодательством.</p>
<p><h3>6.5. Уничтожение персональных данных</h3></p>
<p>6.5.1. Персональные данные пользователя уничтожаются по письменной просьбе Пользователя. Просьба должна содержат идентификационные данные, которые прямо указывает на принадлежность информации данному Пользователю.</p>
<h2>7. Меры по защите информации о Пользователях.</h2>
<p>7.1. Администрация Сайта принимает технические и организационно-правовые меры в целях обеспечения защиты персональных данных Пользователя от неправомерного или случайного доступа к ним, уничтожения, изменения, блокирования, копирования, распространения, а также от иных неправомерных действий.</p>
<h2>8. Ограничение действия Правил.</h2>
<p>8.1. Действие настоящих Правил не распространяется на действия и интернет-ресурсов третьих лиц.</p>
<p>8.2. Администрация Сайта не несет ответственности за действия третьих лиц, получивших в результате использования Интернета или Услуг Сайта доступ к информации о Пользователе и за последствия использования информации, которая, в силу природы Сайта, доступна любому пользователю сети Интернет.</p>
<p>8.3. Администрация Сайта рекомендует Пользователям ответственно подходить к решению вопроса об объеме информации о себе, передаваемой с Сайта.</p>
{
"name": "synapse/synhelper",
"type": "drupal-custom-module",
"description": "Synapse.",
"homepage": "https://github.com/synapse-studio/synhelper",
"license": "GPL-2.0+",
"require": {
"drupal/core": "~8.3"
},
"minimum-stability": "dev"
}
<?php
namespace Drupal\synhelper\Controller;
/**
* @file
* Contains \Drupal\app\Controller\AjaxResult.
*/
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\HtmlCommand;
/**
* Controller routines for page example routes.
*/
class AjaxResult extends ControllerBase {
/**
* AJAX Responce.
*/
public static function ajax($wrapper, $otvet, $commands = FALSE) {
$output = '';
if ($otvet || $commands) {
$output .= '<pre>';
$output .= $otvet;
if ($commands) {
$output .= implode("\n", $commands);
}
$output .= '</pre>';
}
$response = new AjaxResponse();
$response->addCommand(new HtmlCommand("#" . $wrapper, $output));
return $response;
}
/**
* AJAX Button.
*/
public static function button($function, $button = "Отправить", $color = 'primary') {
return [
'#type' => 'submit',
'#value' => $button,
'#attributes' => ['class' => ['btn', 'btn-xs', 'btn-' . $color]],
'#ajax' => [
'callback' => $function,
'effect' => 'fade',
'progress' => ['type' => 'throbber', 'message' => ""],
],
];
}
/**
* AJAX Button.
*/
public static function select($function, $options, $default) {
$default_value = FALSE;
if (isset($options[$default])) {
$default_value = $default;
}
else {
$default_value = 'select';
$options['select'] = 'Select';
}
return [
'#type' => 'select',
'#options' => $options,
'#default_value' => $default_value,
'#ajax' => [
'callback' => $function,
'effect' => 'fade',
'progress' => ['type' => 'throbber', 'message' => ""],
],
];
}
}
<?php
namespace Drupal\synhelper\Controller;
/**
* @file
* Contains \Drupal\synhelper\Controller\Page.
*/
use Drupal\Core\Controller\ControllerBase;
/**
* Controller routines for page example routes.
*/
class Logo extends ControllerBase {
/**
* Svg.
*/
public static function renderable($color = '#2b2a29') {
return [
'#markup' => self::svg($color),
'#allowed_tags' => ['style', 'svg', 'g', 'path'],
];
}
/**
* Svg.
*/
public static function svg($color = '#2b2a29') {
$svg = "
<svg width='100%' height='auto' viewBox='0 0 138 58' version='1.1' xmlns='http://www.w3.org/2000/svg' >
<g id='logo'>
<path id='path5' class='path' transform='scale(1.15,1.15)'
stroke='{$color}' stroke-width='0.3472' fill='none'
d='m 22.62,41.42 c 1.83,0 3.69,0.22 5.5,0.45 0.46,0.1 0.93,0.18 1.4,
0.19 2.7,0.1 1.72,-3.52 2.84,-5.03 0.17,-0.22 0.38,-0.4 0.63,-0.53
0.1,0 0.95,-0.25 0.96,-0.29 0.28,-1.19 -0.52,-1.32 -0.35,-2.4 0.99,
0.1 1.8,-0.1 1.7,-1.31 0,0 -0.43,-1.44 0,-2.12 1.24,-0.6 2.65,-1.03
2.77,-2.74 -1.02,-1.96 -2.3,-3.66 -3.11,-5.83 0.78,-2.35 0.84,-5.04
0.32,-7.44 C 33.4,5.558 25.03,-1.048 15.53,0.3992 11.01,1.089 6.067,
3.278 4.062,7.598 3.43,8.961 3.084,10.44 2.866,11.91 c -0.238,1.62
-0.54,3.47 -0.425,5.1 0.12,1.67 1.086,5.45 0.924,7.12 -0.301,3.11
-2.989,3.94 -3.1562,7.1 -0.1782,3.39 2.2902,6.2 4.5142,8.52 2.138,
2.23 5.006,4.73 8.287,4.81 3.54,0.1 6.1,-3.11 9.61,-3.14 z' />
<path id='path7' transform='scale(1.15,1.15)'
fill='none' stroke='{$color}' stroke-width='0.1736'
d='m 19.44,37.91 c 1.17,0 2.36,0.14 3.52,0.29 0.3,0 0.6,0.11 0.9,
0.12 1.72,0 1.1,-2.28 1.81,-3.25 0.11,-0.15 0.25,-0.26 0.41,-0.34
0.1,0 0.6,-0.17 0.61,-0.19 0.18,-0.77 -0.33,-0.85 -0.22,-1.55 0.63,
0 1.15,-0.1 1.09,-0.85 0,0 -0.28,-0.93 0,-1.37 0.79,-0.39 1.7,-0.67
1.77,-1.77 -0.65,-1.27 -1.48,-2.37 -1.99,-3.77 0.5,-1.52 0.54,-3.27
0.2,-4.82 -1.22,-5.69 -6.58,-9.96 -12.66,-9.03 -2.9,0.45 -6.059,
1.86 -7.344,4.66 -0.405,0.88 -0.627,1.83 -0.766,2.79 -0.153,1.04
-0.345,2.24 -0.271,3.3 0.08,1.07 0.695,3.51 0.591,4.6 -0.192,2.01
-1.915,2.54 -2.02,4.59 -0.116,2.19 1.465,4.01 2.89,5.51 1.367,1.44
3.2,3.06 5.3,3.11 2.27,0.1 3.91,-2.01 6.16,-2.03 z'/>
<path id='path9' transform='scale(1.15,1.15)'
fill='none' stroke='{$color}' stroke-width='0.1736'
d='m 18.41,31.48 c 1.17,0 2.36,0.15 3.52,0.3 0.3,0 0.6,0.11 0.9,
0.12 1.72,0 1.1,-2.28 1.82,-3.26 0.1,-0.14 0.24,-0.26 0.4,-0.34
0.1,0 0.61,-0.16 0.61,-0.19 0.18,-0.77 -0.33,-0.85 -0.22,-1.55
0.63,0 1.15,-0.1 1.09,-0.84 0,0 -0.28,-0.94 0,-1.38 0.79,-0.39
1.7,-0.66 1.77,-1.77 -0.65,-1.27 -1.47,-2.37 -1.99,-3.77 0.5,
-1.52 0.54,-3.26 0.2,-4.81 C 25.31,8.291 19.95,4.02 13.87,4.955
10.98,5.402 7.812,6.819 6.528,9.612 6.123,10.49 5.901,11.45
5.762,12.4 5.609,13.45 5.417,14.64 5.49,15.7 c 0.08,1.08 0.696,
3.52 0.592,4.6 -0.192,2.01 -1.914,2.55 -2.022,4.59 -0.114,2.2
1.467,4.01 2.891,5.51 1.367,1.44 3.209,3.06 5.309,3.11 2.26,0.1
3.9,-2.01 6.15,-2.03 z'/>
<path id='path11' transform='scale(1.15,1.15)'
fill='none' stroke='{$color}' stroke-width='0.2604'
d='m 24.4,30.97 c 1.17,0 2.36,0.14 3.52,0.29 0.3,0 0.6,0.11 0.9,
0.12 1.72,0 1.1,-2.27 1.82,-3.25 0.1,-0.15 0.24,-0.26 0.4,-0.34
0.1,0 0.61,-0.17 0.61,-0.19 0.18,-0.77 -0.33,-0.85 -0.22,-1.55
0.64,0 1.15,-0.1 1.09,-0.85 0,0 -0.28,-0.93 0,-1.37 0.79,-0.39
1.7,-0.67 1.77,-1.77 -0.65,-1.27 -1.47,-2.37 -1.99,-3.77 0.5,
-1.52 0.54,-3.27 0.2,-4.82 C 31.3,7.777 25.94,3.507 19.86,4.442
16.97,4.887 13.8,6.304 12.52,9.098 c -0.41,0.88 -0.63,1.832 -0.77,
2.792 -0.15,1.04 -0.34,2.24 -0.27,3.3 0.1,1.08 0.7,3.51 0.59,4.6
-0.19,2.01 -1.91,2.54 -2.02,4.59 -0.114,2.19 1.47,4.01 2.89,5.51
1.37,1.44 3.21,3.06 5.31,3.11 2.26,0 3.9,-2.01 6.15,-2.03 z'/>
<path id='path13' transform='scale(1.15,1.15)'
fill='none' stroke='{$color}' stroke-width='0.2604'
d='m 24.5,39.45 c 1.17,0 2.36,0.14 3.52,0.29 0.3,0 0.59,0.12 0.9,
0.12 1.72,0 1.1,-2.28 1.82,-3.25 0.1,-0.14 0.24,-0.26 0.4,-0.34
0.1,0 0.6,-0.17 0.61,-0.19 0.18,-0.77 -0.33,-0.85 -0.22,-1.55 0.63,
0 1.15,-0.1 1.09,-0.85 0,0 -0.28,-0.93 0,-1.37 0.79,-0.39 1.69,-0.67
1.77,-1.77 -0.65,-1.27 -1.47,-2.37 -1.99,-3.77 0.5,-1.52 0.54,-3.26
0.2,-4.82 -1.22,-5.69 -6.58,-9.96 -12.66,-9.03 -2.9,0.45 -6.06,1.86
-7.34,4.66 -0.41,0.88 -0.63,1.83 -0.77,2.79 -0.15,1.05 -0.34,2.24
-0.27,3.3 0.1,1.08 0.69,3.52 0.59,4.6 -0.19,2.01 -1.91,2.54 -2.02,
4.59 -0.11,2.19 1.47,4.01 2.89,5.51 1.37,1.44 3.2,3.06 5.31,3.11
2.26,0.1 3.9,-2.01 6.15,-2.03 z'/>
<path id='path15' transform='scale(1.15,1.15)'
fill='{$color}' stroke='none' stroke-width='0.8696'
d='m 110.5,33.12 c -1.8,0.76 -2.6,2.29 -2.6,4.24 l 0,4.85 c 0,1.91
0.7,3.55 2.6,4.32 2.3,0.98 6.4,0.31 8.4,-1.29 l -1.5,-2.21 c -1.4,
0.98 -6.6,2.18 -6.6,-0.82 l 0,-4.85 c 0,-2.94 5.1,-1.58 6.6,-0.77
l 1.5,-2.23 c -2,-1.5 -6.1,-2.21 -8.4,-1.24 z'/>
<path id='path17' transform='scale(1.15,1.15)'
fill='{$color}' stroke='none' stroke-width='0.8696'
d='m 53.14,43.03 1.5,2.21 c -1.96,1.6 -6.06,2.27 -8.36,1.29 -1.89,
-0.77 -2.57,-2.41 -2.57,-4.32 l 0,-4.85 c 0,-1.95 0.72,-3.48 2.57,
-4.24 2.29,-0.97 6.37,-0.26 8.36,1.24 l -1.5,2.23 c -1.44,-0.81
-6.61,-2.17 -6.61,0.77 l 0,4.85 c 0,3 5.21,1.8 6.61,0.82 z'/>
<path id='path19' transform='scale(1.15,1.15)'
fill='{$color}' stroke='none' stroke-width='0.8696'
d='m 60.17,46.84 c -2.88,-0.21 -4.29,-1.98 -4.29,-4.83 l 0,-9.26
2.88,0 0,9.8 c 0,1.55 1.65,1.64 2.85,1.52 0.85,-0.1 1.81,-0.28
2.88,-0.62 l 0,-10.7 2.88,0 0,14.12 -2.88,0 0,-0.57 c -1.62,0.45
-3.06,0.63 -4.32,0.54 z'/>
<path id='path21' transform='scale(1.15,1.15)'
fill='{$color}' stroke='none' stroke-width='0.8696'
d='m 106.8,37.6 0,9.27 -2.8,0 0,-9.8 c 0,-2.52 -4.41,-1.34 -5.78,
-0.9 l 0,10.7 -2.88,0 0,-14.12 2.88,0 0,0.56 c 3.98,-1.1 8.58,
-0.99 8.58,4.29 z'/>
<path id='path23' transform='scale(1.15,1.15)'
fill='{$color}' stroke='none' stroke-width='0.8696'
d='m 77.53,32.76 0,4.03 c -2.08,-0.4 -3.73,-0.4 -5.81,0 l 0,-4.03
-2.91,0 0,14.11 2.91,0 0,-7.26 c 0,-1.25 5.81,-1.26 5.81,0 l 0,
7.26 2.91,0 0,-14.11 -2.91,0 z'/>
<path id='path25' transform='scale(1.15,1.15)'
fill='{$color}' stroke='none' stroke-width='0.8696'
d='m 85.04,42.26 c -0.17,0.25 -0.25,0.55 -0.25,0.91 0,1.61 1.75,
1.57 2.91,1.38 0.84,-0.13 1.82,-0.4 2.9,-0.82 l 0,-2.62 c -1.52,
-0.16 -4.53,-0.39 -5.56,1.15 z m 5.56,4.67 0,-0.28 c -2.59,0.78
-6.96,1.42 -8.35,-1.7 -0.48,-1.06 -0.51,-2.89 0,-3.95 1.37,-2.86
5.67,-2.85 8.35,-2.52 0,-0.52 0,-1 -0.22,-1.43 -1,-2.45 -5.07,
-1.45 -6.78,-0.29 l -1.15,-2.62 c 2.43,-1.67 7.68,-2.26 9.72,0
0.9,1.01 1.35,2.44 1.35,4.32 l 0,8.45 -2.92,0 z'/>
</g>
</svg>";
return $svg;
}
}
<?php
namespace Drupal\synhelper\Controller;
/**
* @file
* Contains \Drupal\synhelper\Controller\Page.
*/
use Drupal\Core\Controller\ControllerBase;
/**
* Controller routines for page example routes.
*/
class LogoPage extends ControllerBase {
/**
* Page Callback.
*/
public function page() {
return [
'logo' => Logo::renderable(),
];
}
}
<?php
namespace Drupal\synhelper\Controller;
/**
* @file
* Contains \Drupal\synapse\Controller\Page.
*/
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Menu\MenuTreeParameters;
use Drupal\menu_link_content\Entity\MenuLinkContent;
use Drupal\node\Entity\NodeType;
/**
* Controller routines for page example routes.
*/
class MenuFix extends ControllerBase {
/**
* Page Callback.
*/
public static function editor() {
$otvet = "";
$menu = \Drupal::entityTypeManager()->getStorage('menu')->load('main');
$menu_tree_parameters = new MenuTreeParameters();
$menu_tree = \Drupal::menuTree()->load('editor', $menu_tree_parameters);
foreach ($menu_tree as $key => $link) {
// Добавить -- сделать раскрытым.
if ($key == 'synmini.add') {
self::nodeAdd();
}
// R: synmini.menu -- скрыть .
if ($key == 'synmini.menu') {
self::menuMain();
self::hideSynminiMenu();
}
}
// Очистим кэш меню.
self::truncate();
return $otvet;
}
/**
* F menuMain.
*/
public static function menuMain() {
$otvet = "";
$link = self::getSynminiMenu();
$exist = self::menuLinkCheck();
if (!$exist) {
// Добавим пункт меню.
$menu_link = MenuLinkContent::create([
'title' => 'Меню',
'link' => ['uri' => 'internal:/admin/structure/menu/manage/main'],
'menu_name' => 'editor',
'weight' => $link['weight'],
'expanded' => TRUE,
]);
$menu_link->save();
}
return $otvet;
}
/**
* F nodeAdd.
*/
public static function nodeAdd() {
$otvet = "";
// Раскроем пункт меню.
self::expandSynminiAdd();
// Все типы материала.
$types = self::getNodeTypes();
foreach ($types as $type => $name) {
$link = self::getMenuLink($type);
if (!$link) {
// Добавим пункт меню.
$menu_link = MenuLinkContent::create([
'title' => $name,
'link' => ['uri' => 'internal:/node/add/' . $type],
'menu_name' => 'editor',
'parent' => 'synmini.add',
'expanded' => TRUE,
]);
$menu_link->save();
}
}
return TRUE;
}
/**
* F getMenuLink.
*/
public static function menuLinkCheck() {
$db = \Drupal::database();
$query = $db->select('menu_link_content_data', 'm');
$query->fields('m', ['id', 'title', 'link__uri']);
$query->condition('link__uri', 'internal:/admin/structure/menu/manage/main');
$data = $query->execute()->fetchAllAssoc('id', 'title', 'link__uri');
return array_shift($data);
}
/**
* F getMenuLink.
*/
public static function getMenuLink($type) {
$db = \Drupal::database();
$query = $db->select('menu_link_content_data', 'm');
$query->fields('m', ['id', 'title', 'link__uri']);
$query->condition('link__uri', 'internal:/node/add/' . $type);
$query->condition('parent', 'synmini.add');
$data = $query->execute()->fetchAllAssoc('id', 'title', 'link__uri');
return array_shift($data);
}
/**
* F getNodeTypes.
*/
public static function getNodeTypes() {
$node_types = NodeType::loadMultiple();
$types = [];
foreach ($node_types as $node_type) {
$ntype = $node_type->toArray();
$types[$ntype['type']] = $ntype['name'];
}
return $types;
}
/**
* F hideSynminiMenu.
*/
public static function expandSynminiAdd() {
// Скроем старый пункт.
$query = \Drupal::database()->update('menu_tree');
$query->fields(['expanded' => 1]);
$query->condition('id', 'synmini.add');
$query->condition('menu_name', 'editor');
$query->execute();
}
/**
* F getSynminiMenu.
*/
public static function getSynminiMenu() {
$db = \Drupal::database();
$query = $db->select('menu_tree', 'm');
$query->fields('m', ['menu_name', 'id', 'enabled', 'weight']);
$query->condition('menu_name', 'editor');
$query->condition('id', 'synmini.menu');
$data = $query->execute()->fetchAllAssoc('id', 'enabled', 'weight');
return array_shift($data);
}
/**
* F hideSynminiMenu.
*/
public static function hideSynminiMenu() {
// Скроем старый пункт.
$query = \Drupal::database()->update('menu_tree');
$query->fields(['enabled' => 0]);
$query->condition('id', 'synmini.menu');
$query->condition('menu_name', 'editor');
$query->execute();
}
/**
* Truncate cache_menu.
*/
public static function truncate() {
$query = \Drupal::database()->truncate('cache_menu');
$query->execute();
$query = \Drupal::database()->select('config', 'c');
$query->fields('c', ['name', 'data']);
$query->condition('name', 'core.menu.static_menu_link_overrides');
$data = $query->execute()->fetchAllAssoc('data');
foreach ($data as $key => $value) {
$str = $value->data;
}
$data = unserialize($str);
$data['definitions']['synmini__add']['expanded'] = TRUE;
$data['definitions']['synmini__menu']['enabled'] = FALSE;
$query = \Drupal::database()->update('config');
$query->fields(['data' => serialize($data)]);
$query->condition('name', 'core.menu.static_menu_link_overrides');
$query->execute();
}
}
<?php
namespace Drupal\synhelper\Controller;
use Drupal\Core\Controller\ControllerBase;
/**
* Controller routines for page routes.
*/
class PagePolicy extends ControllerBase {
/**
* Page Title.
*/
public function title($lang = FALSE) {
if (!$lang) {
$lang = \Drupal::languageManager()->getCurrentLanguage()->getId();
}
$titles = [
'en' => $this->t('Privacy and Cookie policy'),
'ru' => $this->t('Соглашение об использовании персональных данных'),
];
if (isset($titles[$lang])) {
$title = $titles[$lang];
}
else {
$title = $titles['en'];
}
return $title;
}
/**
* Constructs page from template.
*/
public function page($lang = FALSE) {
if (!$lang) {
$lang = \Drupal::languageManager()->getCurrentLanguage()->getId();
}
$path = \Drupal::service('module_handler')->getModule('synhelper')->getPath();
$templates = [
'en' => DRUPAL_ROOT . "/$path/assets/policy-en.html",
'ru' => DRUPAL_ROOT . "/$path/assets/policy-ru.html",
];
if (isset($templates[$lang])) {
$policy = $templates[$lang];
}
else {
$policy = $templates['en'];
}
$html = file_get_contents($policy);
return [
'policy' => [
'#type' => 'inline_template',
'#template' => $html,
'#context' => [
'url' => $host = \Drupal::request()->getHost(),
],
],
];
}
}
<?php
namespace Drupal\synhelper\Form;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\synhelper\Controller\AjaxResult;
use Drupal\synhelper\Controller\MenuFix;
/**
* Implements the form controller.
*/
class Settings extends ConfigFormBase {