Commit c09167c6 authored by Vladimir Kharinenkov's avatar Vladimir Kharinenkov
Browse files

release

parents
No related merge requests found
Showing with 386 additions and 0 deletions
+386 -0
MIT License
Copyright (c) 2021 E-Publish JSC <info@e-publish.ru>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Данная лицензия разрешает лицам, получившим копию данного программного
обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное
обеспечение»), безвозмездно использовать Программное обеспечение без ограничений,
включая неограниченное право на использование, копирование, изменение, слияние,
публикацию, распространение, сублицензирование и/или продажу копий Программного
обеспечения, а также лицам, которым предоставляется данное Программное
обеспечение, при соблюдении следующих условий:
Указанное выше уведомление об авторском праве и данные условия должны быть
включены во все копии или значимые части данного Программного обеспечения.
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО
ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ
ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ,
НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ
ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ,
ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
Плагин интеграции MagicSite с WordPress
=======================================
# Описание
Плагин предназначен для автоматического встраивания обязательных разделов сайта образовательных организаций, предусмотренных законодательством Российской Федерации, из информационной системы «MagicSite» на сайт под управлением CMS Wordpress.
Внешний вид сайта, включая меню и инкапсулированные обязательные разделы, устанавливается в CMS Wordpress. Плагин не оказывает влияния на необязательные разделы, которые ведутся на сайте CMS Wordpress.
При использовании плагина владелец сайта должен завести аккаунт в информационной системе MagicSite и внести в неё данные о своей организации.
Информационная система «MagicSite» зарегистрирована в РОСПАТЕНТ № 2020662557 от 16 октября 2020 год, включена в Единый реестр российских программ для электронных вычислительных машин и баз данных по Приказу Минцифры России от 15.03.2021 № 151 Приложение № 2, реестровый №9719, совместима со всеми операционными системами, в том числе с операционной системой Альт на платформе х86 и для архитектуры aarch64.
Информационная система «MagicSite» предусматривает ведение следующих обязательных разделов со своими подраздеоами:
* Сведения об образовательной организации;
* Информационная безопасность;
* Противодействие коррупции;
* Независимая оценка качества;
* Педагоги;
* Организация питания.
Представление на сайте производится в строгом соответствии с законодательством. При изменении законодательства в ИС MagicSite вносятся соответствующие правки, что автоматически находит отражение на сайте пользователя. Пользователь избавлен от необходимости отслеживать требования к сайтам образовательных организаций – достаточно заполнять поля ИС MagicSite. Данные попадают в систему мониторинга сайтов.
# Установка
1. Скачайте ZIP архив плагина https://github.com/e-publish/wp-magicsite-integration/raw/master/wp-magicsite-integration.zip
2. Зайдите в административную панель CMS WordPress вашего сайта
> Чтобы войти в административную панель WordPress, вбейте в адресной строке ссылку http://ваш_сайт/wp-login. php или http://ваш_сайт/wp-admin/, где вместо «ваш_сайт» — доменное имя (адрес) вашего сайта.
> Откроется страница с формой для входа в админ-панель.
3. Перейдите в раздел Плагины -> Добавить новый
4. Нажмите кнопку "Загрузить плагин"
5. Нажимите "Выберите файл" и выберите скачанный в шаге 1 архив, после чего нажмите кнопку "Установить"
6. После установки плагина активируйте его, нажав кнопку "Активировать плагин"
# Настройка
После успешной активации плагина необходимо указать адрес сайта в ИС MagicSite данные которого будут отображаться на вашем сайте. Для этого:
1. Зайдите в административную панель CMS WordPress вашего сайта
> Чтобы войти в административную панель WordPress, вбейте в адресной строке ссылку http://ваш_сайт/wp-login. php или http://ваш_сайт/wp-admin/, где вместо «ваш_сайт» — доменное имя (адрес) вашего сайта.
> Откроется страница с формой для входа в админ-панель.
2. Перейдите в Настройки -> MagicSite Integration;
3. В поле "URL сайта в ИС MagicSite" укажите адрес сайта, созданного в виртуальном кабинете MagicSite (https://cp.edusite.ru);
4. Нажмите кнопку "Сохранить изменения".
# Установка виджета
Виджет меню навигации MagicSite не требует настроек.
По умолчанию меню навигации виджета устанавливается в доступную для виджетов область сайта.
Для изменения расположения виждета:
1. Зайдите в административную панель CMS WordPress вашего сайта
> Чтобы войти в административную панель WordPress, вбейте в адресной строке ссылку http://ваш_сайт/wp-login. php или http://ваш_сайт/wp-admin/, где вместо «ваш_сайт» — доменное имя (адрес) вашего сайта.
> Откроется страница с формой для входа в админ-панель.
2. Перейдите в Внешний вид -> Виджеты;
3. Перетащите панель виджета MagicSite Menu в нужную область/место области сайта.
Если виджет не установился автоматически, добавьте его в нужную область сайта. Для этого:
1. Зайдите в административную панель CMS WordPress вашего сайта
> Чтобы войти в административную панель WordPress, вбейте в адресной строке ссылку http://ваш_сайт/wp-login. php или http://ваш_сайт/wp-admin/, где вместо «ваш_сайт» — доменное имя (адрес) вашего сайта.
> Откроется страница с формой для входа в админ-панель.
2. Перейдите в раздел Внешний вид -> Виджеты;
3. Щелкните по панели виджета MagicSite Menu;
4. Выберите в списке нужную область сайта для установки;
5. Нажимте на "Добавить виджет".
File added
<?php
// Silence is golden.
<div class='wrap'>
<h1>Настройки интеграции с MagicSite</h1>
<form name="" method="POST" action="options.php">
<?php
settings_fields( 'magicsite_intergration_settings' );
do_settings_sections( 'magicsite-integration-settings' );
submit_button();
?>
</form>
</div><div class="clear"></div>
.magicsite-navigation-menu-wrapper .magicsite-navigation-menu li.menu-item-has-children ul {
display: none;
}
.magicsite-navigation-menu-wrapper .magicsite-navigation-menu li.menu-item-has-children.magicsite-navigation-menu-opened > ul {
display: block;
}
.magicsite-navigation-menu li, .magicsite-navigation-submenu li {
list-style: none;
}
var $ = jQuery.noConflict();
$( document ).ready( function () {
$( '#magicsite_content a' ).each( function () {
var re = /^\//;
var hr = this.getAttribute( 'href' );
if ( re.test(hr) == true ) {
$( this ).attr( 'href', magicsite_url + hr );
}
})
$( '#magicsite_content img' ).each( function () {
var re = /^\//;
var hr = this.getAttribute( 'src' );
if ( re.test(hr) == true ) {
$( this ).attr( 'src', magicsite_url + hr );
}
})
});
$( document ).on( 'click', '.check-file-sign', function () {
var url = magicsite_url + $( this ).data( 'url' );
var nm = $( this ).data( 'name' );
$.ajax( {
type: 'POST',
url: 'https://sign.edusite.ru/vsignf.php',
data: { url: url },
datatype: 'json',
success: function ( response ) {
if ( response.status == 1 ) {
var msg = '';
if ( response.mess !== undefined ) {
msg += '<div class="error">' + response.mess + '</div>';
}
} else if ( response.data !== undefined ) {
var data = response.data,
msg = '';
if ( data.verify == 1 ) {
msg += '<div class="popup"><div class="popup-title">Подписи</div><div class="signinfo popup-name">' + nm +'</div><div class="signinfo popup-link">' + url + '</div>';
if ( data.signers !== undefined ) {
$.each( data.signers, function ( i, e ) {
dolgn = "";
if ( e.cert.subjectName.T && e.cert.subjectName.T != "" ) {
dolgn = ' (' + e.cert.subjectName.T + ')';
}
msg += '<div class="sign" ng-repeat="item in data.cryptoSigns" ng-if="data.cryptoSigns.length"> \
<div class="signinfo signingTime">' + e.signingTime + '</div> \
<div class="signinfo subjectNameSn">' + e.cert.subjectName.SN + ' ' + e.cert.subjectName.G + dolgn + '</div> \
<div class="signinfo subjectNameO">' + e.cert.subjectName.O + '</div> \
<div class="signinfo subjectNameCN">' + e.cert.subjectName.CN + '</div> \
</div>';
});
msg += '<div class="signinfo subjectSign"><div>' + data.sign + '</div></div>';
}
msg += '</div>';
}
}
$.fancybox.open( msg );
},
error: function ( xhr, ajaxOptions, thrownError ) {
console.log( xhr.status );
console.log( thrownError );
}
});
});
var $ = jQuery.noConflict();
$( document ).on( 'click', '.magicsite-navigation-menu li.menu-item-has-children > a', function () {
event.preventDefault();
$(this).parent().toggleClass( 'magicsite-navigation-menu-opened' );
});
$( document ).ready( function () {
$( '.magicsite-navigation-menu li.menu-item-has-children ul li' ).each( function () {
if ( $( this ).hasClass( 'current-menu-item' ) ) {
$( this ).parents( '.menu-item-has-children' ).addClass( 'magicsite-navigation-menu-opened' );
}
});
});
<?php
class MagicSite_Walker_Nav_Menu extends Walker_Nav_Menu {
public $tree_type = array( 'post_type', 'taxonomy', 'custom' );
public $db_fields = array( 'parent' => 'menu_item_parent', 'id' => 'db_id' );
public function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("\t", $depth);
$output .= "\n$indent<ul class=\"magicsite-navigation-submenu\">\n";
}
public function end_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("\t", $depth);
$output .= "$indent</ul>\n";
}
public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
if ( isset( $children_elements[$element->ID] ) ){
$element->has_sub = 1;
} else{
$element->has_sub = 0;
}
parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
}
public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$classes[] = 'magicsite-navigation-menu-item-' . $item->ID;
$classes[] = 'magicsite-navigation-item-level-' . $depth;
$this->item_classes = apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args, $depth );
$class_names = join( ' ', $this->item_classes );
$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
$output .= $indent . '<li' . $class_names . '>';
$atts = [];
$atts['title'] = $item->attr_title ?? '';
$atts['href'] = $item->url ?? '';
$atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args, $depth );
$attributes = '';
foreach ( $atts as $attr => $value ) {
if ( ! empty( $value ) ) {
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
if ( $attr === 'href' && ( $custom_url = ( isset( $data['custom_url'] ) ? $data['custom_url'] : '' ) ) ){
$value = do_shortcode( $custom_url );
}
$attributes .= ' ' . $attr . '="' . $value . '"';
}
}
$title = apply_filters( 'the_title', $item->title, $item->ID );
$title = do_shortcode( $title );
$item_output = '';
$item_output .= $args->before;
$item_output .= '<a ' . $attributes . '>';
$item_output .= $args->link_before . $title . $args->link_after;
$item_output .= '</a>';
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
public function end_el( &$output, $item, $depth = 0, $args = array() ) {
$output .= "</li>\n";
}
}
<?php
/**
* MagicSite Menu Navigation Widget
*
*/
class MagicSiteNavigationMenu_Widget extends WP_Widget {
public function __construct() {
$widget_options = [
'classname' => 'magicsite-navigation-menu-widget',
'description' => 'Виджет меню навигации для MagicSiteIntegration',
];
parent::__construct( 'magicsite_navigation_menu', 'MagicSite Menu', $widget_options );
}
public function widget( $args, $instance ) {
echo $args['before_widget'];
echo $args['before_title'] . 'Сведения об образовательной организации' . $args['after_title'];
$term = get_term_by( 'name', 'MagicSiteMenu', 'nav_menu' );
$nav_menu_id = $term->term_id;
$menu_args['menu'] = $nav_menu_id;
$menu_args['container'] = 'div';
$menu_args['container_class'] = 'magicsite-navigation-menu-wrapper widget_nav_menu';
$menu_args['menu_class'] = 'magicsite-navigation-menu';
$menu_args['menu_id'] = 'magicsite-navigation-menu';
$menu_args['container_id'] = 'magicsite-nav-' . $nav_menu_id;
$menu_args['items_wrap'] = '<ul id="%1$s" class="%2$s">%3$s</ul>';
$menu_args['walker'] = new MagicSite_Walker_Nav_Menu;
echo wp_nav_menu($menu_args);
echo $args['after_widget'];
}
}
add_action( 'widgets_init', function(){
register_widget('MagicSiteNavigationMenu_Widget');
});
<?php
// Silence is golden.
<?php
get_header();
$options = get_option( 'magicsite_intergration_settings_options' );
if ( isset( $options['magicsite_url'] ) ) {
$menu = $magicSite->get_magicsite_nav_menu();
foreach ( $menu['anticorruption']['below'] as $item_name => $item ) {
echo '<div calss="magicsite-menu-item"><a href="/' . $item['type'] . '/' . $item_name . '">' . $item['title'] . '</a></div>';
}
} else {
echo '<div class="form-message">Плагин интеграции с MagicSite не настроен.</div>';
echo '<pre>';
print_r(get_nav_menu_locations());
}
get_footer();
<?php
get_header();
$options = get_option( 'magicsite_intergration_settings_options' );
if ( isset( $options['magicsite_url'] ) ) {
$menu = $magicSite->get_magicsite_nav_menu();
foreach ( $menu['educative']['below'] as $item_name => $item ) {
echo '<div calss="magicsite-menu-item"><a href="/' . $item['type'] . '/' . $item_name . '">' . $item['title'] . '</a></div>';
}
} else {
echo '<div class="form-message">Плагин интеграции с MagicSite не настроен.</div>';
}
get_footer();
<?php
get_header();
$options = get_option( 'magicsite_intergration_settings_options' );
if (isset( $options['magicsite_url'] ) ) {
$menu = $magicSite->get_magicsite_nav_menu();
foreach ( $menu['infosec']['below'] as $item_name => $item ) {
echo '<div calss="magicsite-menu-item"><a href="/' . $item['type'] . '/' . $item_name . '">' . $item['title'] . '</a></div>';
}
} else {
echo '<div class="form-message">Плагин интеграции с MagicSite не настроен.</div>';
}
get_footer();
<?php
get_header();
$options = get_option( 'magicsite_intergration_settings_options' );
if ( isset( $options['magicsite_url'] ) ) {
$menu = $magicSite->get_magicsite_nav_menu();
foreach ( $menu['sveden']['below'] as $item_name => $item ) {
echo '<div calss="magicsite-menu-item"><a href="/' . $item['type'] . '/' . $item_name . '">' . $item['title'] . '</a></div>';
}
} else {
echo '<div class="form-message">Плагин интеграции с MagicSite не настроен.</div>';
}
get_footer();
<?php
get_header();
$options = get_option( 'magicsite_intergration_settings_options' );
if ( isset( $options['magicsite_url'] ) ) {
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
?>
<div <?php echo post_class(); ?>>
<header class="entry-header">
<h1 class="entry-title"><?php echo the_title(); ?></h1>
</header>
<div class="entry-content">
<?php echo the_content(); ?>
</div>
</article>
<?php
}
} else {
echo '<div class="form-message">Плагин интеграции с MagicSite установлен неверно.</div>';
}
?>
</div>
<?php
} else {
echo '<div class="form-message">Плагин интеграции с MagicSite не настроен.', 'wp-magicsite-intergation</div>';
}
get_footer();
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment