From 8f169da61720be54c008c9041450ba67fd8cac60 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 17 Apr 2019 23:31:06 +0200 Subject: [PATCH 001/220] * readme added * main plugin file renamed --- LICENSE.txt | 339 ++++++++++++++++++++++++++++ README.md | 77 +++++++ README.txt | 51 +++++ shMapper.plugin.php => shmapper.php | 59 ++--- 4 files changed, 500 insertions(+), 26 deletions(-) create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 README.txt rename shMapper.plugin.php => shmapper.php (64%) diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..ecbc059 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f9fd384 --- /dev/null +++ b/README.md @@ -0,0 +1,77 @@ +# shMapper # + +**Scroll down for english description, please** + +shMapper - это плагин для WordPress. shMapper позволяет создавать простые краудсорсинговые карты на OpenStreet Maps с опцией формы обратной связи. Этот плагин предоставляет вам альтернативу текущим картографическим сервисам, таким как Яндекс.Карты, Карты Google и т.д., которые не предоставляют пользователям возможность добавлять новые объекты. + +Плагин разработан и поддерживается [Теплицей социальных технологий](//te-st.ru/). + +Задача плагина — удобный и минималистичный плагин по добавлению карт на WordPress. + +* Плагин элементарно устанавливается и требует минимальных настроек. +* Карты и формы доступны на отдельных старницах сразу после создания. +* Карты и формы можно размещать внутри контента при помощи шорткодов. + +Плагин предназначен для всех, кому нужно отобразить карту на сайте или получить от посетителей информацию, привязанную к карте. + +**Основные функции** + +* Настройка и отображение карт с маркерами на страницах сайта. +* Отображение карт с помощью шорткодов. +* Получать новые маркеры карты через форму обратной связи. +* Пре или пост-модерация новых маркеров. +* Защиты формы при помощи ReCaptcha. +* Пользовательские значки маркеров. + +Для корректной работы плагина необходим PHP версии не ниже 5.6. + +Если вам нужна помощь волонтеров в установке и настройке, создайте задачу на сайте нашего проекта [it-волонтёр](//itv.te-st.ru/). + + +## Помощь проекту ## + +Мы очень ждем вашей помощи проекту. Вы можете помочь следующими способами: + +* Добавить сообщение об ошибке или предложение по улучшению на GitHub +* Поделиться улучшениями кода, послав нам Pull Request +* Сделать перевод плагина или оптимизировать его для вашей страны. + +Если у вас есть вопросы по работе плагина, то обратитесь к нам за поддержкой на [GitHub](https://github.com/Teplitsa/shmapper/issues). + + +## In English ## + +shMapper is a WordPress plugin. The shMapper allows you to create simple crowdsourcing maps on OpenStreet Maps with an option of feedback messages form. This plugin gives you an alternative to current online map services such as Yandex.Maps, Google Maps etc which don’t provide the option for users to add new objects. + +This plugin developed and supported by [Teplitsa of social technologies](//te-st.ru/). + +The main features of the plugin is a convenient and minimalistic functions for adding maps on WordPress. + +* Plugin is very easy to install, and it requires only a minimum of settings. +* Maps and forms are available on individual pages immediately after creation. +* Maps and forms can be placed within the content using shortcodes. + +The plugin is designed for anyone who needs to display a map on the site or get information from visitors linked to the map. + +**Core features** + +* Configure and display maps with markers on pages. +* Display maps using shortcodes. +* Receive new map markers via feedback form. +* Pre or post-moderation of new markers. +* reCaptcha form protection. +* Custom markers icons. + +## Installation ## + +PHP at least 5.6 is required. + +## Help the project ## + +We will be very grateful if you will help us to make Leyka better. + +* You can add a bugreport or a feature request on [GitHub](https://github.com/Teplitsa/shmapper/issues). +* Send us your pull request to share a code impovement. +* You can make a new plugin translation for your language or send us a fixes for an existing translation, if needed. + +**Please note:** if you have a questions for the plugin work in any aspect, please address our support service on [GitHub](https://github.com/Teplitsa/shmapper/issues). diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..591af56 --- /dev/null +++ b/README.txt @@ -0,0 +1,51 @@ +=== shMapper === +Contributors: Genagl, denis.cherniatev +Author URI: http://te-st.ru +Plugin URI: http://genagl.ru/?p=652 +Tags: map, Open Street Maps, OSM, yandex.map, crowdsourcing, карта, yandex.карты +Requires at least: 3.6.1 +Tested up to: 5.1.1 +Stable tag: trunk +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +shMapper is a plugin, that allows you to create simple crowdsourcing maps based on Open Street Maps and Yandex.Maps. + +== Description == + +The shMapper plugin allows you to create simple crowdsourcing maps on OpenStreet Maps with an option of feedback messages form. This plugin gives you an alternative to current online map services such as Yandex.Maps, Google Maps etc which don’t provide the option for users to add new objects. + +**Core features** + +* Configure and display maps with markers on pages. +* Display maps using shortcodes. +* Receive new map markers via feedback form. +* Pre or post-moderation of new markers. +* reCaptcha form protection. +* Custom markers icons. + +PHP at least 5.6 is required for plugin to work correctly. + +**Help the project** + +We will be very grateful if you will help us to make ShMapper better. + +* You can add a bugreport or a feature request on [GitHub](https://github.com/Teplitsa/shmapper/issues). +* Send us your pull request to share a code impovement. +* You can make a new plugin translation for your language or send us a fixes for an existing translation, if needed. + +If you have a questions for the plugin work in any aspect, please address our support service on [GitHub](https://github.com/Teplitsa/shmapper/issues). + +== Installation == + +PHP version required: 5.6+ + +== Screenshots == + +1. Edit map page example +2. Map and feedback from example + +== Changelog == + += 1.0 = +* First official release! \ No newline at end of file diff --git a/shMapper.plugin.php b/shmapper.php similarity index 64% rename from shMapper.plugin.php rename to shmapper.php index a8cc773..39a5007 100644 --- a/shMapper.plugin.php +++ b/shmapper.php @@ -1,34 +1,41 @@ - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ -//библиотека переводов +// load textdomain function init_textdomain_shmapper() { if (function_exists('load_plugin_textdomain')) From da6d08cb747439ab95042075d9292fe4a8cafd7b Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Thu, 18 Apr 2019 06:25:56 +0200 Subject: [PATCH 002/220] * name changed --- shmapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shmapper.php b/shmapper.php index 39a5007..63828cc 100644 --- a/shmapper.php +++ b/shmapper.php @@ -1,6 +1,6 @@ Date: Thu, 18 Apr 2019 07:21:46 +0200 Subject: [PATCH 003/220] * jquery fix --- README.txt | 4 ++-- class/ShMapper.class.php | 7 ++----- class/ShmMap.class.php | 7 ++++--- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/README.txt b/README.txt index 591af56..6c784ce 100644 --- a/README.txt +++ b/README.txt @@ -42,8 +42,8 @@ PHP version required: 5.6+ == Screenshots == -1. Edit map page example -2. Map and feedback from example +1. Edit map form example +2. Map and feedback form example == Changelog == diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index 27bb21d..d6eac80 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -194,7 +194,6 @@ static function add_admin_js_script() wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array()); wp_enqueue_style( "ShMapper"); //js - wp_register_script("jquery", 'https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js' , array()); wp_enqueue_script("jquery"); wp_register_script("inline", get_bloginfo("url").'/wp-admin/js/inline-edit-post.js', array()); wp_enqueue_script("inline"); @@ -286,11 +285,9 @@ static function add_frons_js_script() wp_enqueue_style( "ShMapper"); //js - wp_register_script("jquery", 'https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js' , array()); wp_enqueue_script("jquery"); - //wp_register_script("jquery-ui", "https://code.jquery.com/ui/1.12.1/jquery-ui.js", array()); - wp_register_script("jquery-ui", plugins_url( '../assets/js/jquery-ui.min.js', __FILE__ ), array()); - wp_enqueue_script("jquery-ui"); + wp_enqueue_script('jquery-ui-core'); + wp_enqueue_script('jquery-ui-draggable'); wp_register_script("touchpunch", plugins_url( '../assets/js/touchpunch.js', __FILE__ ), array()); wp_enqueue_script("touchpunch"); wp_register_script("ShMapper", plugins_url( '../assets/js/ShMapper.js', __FILE__ ), array()); diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 524b66c..0102483 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -594,8 +594,9 @@ function get_csv() ]); } $csv_data = iconv ("UTF-8", "cp1251", implode( SHM_CSV_ROW_SEPARATOR, $csv)); - $path = WP_CONTENT_DIR . "/uploads/shmapper/shmap_" . $p->id . ".csv"; - $href = "/wp-content/uploads/shmapper/shmap_" . $p->id . ".csv"; + $upload_dir = upload_dir(); + $path = $upload_dir['basedir'] . "/shmapper/shmap_" . $p->id . ".csv"; + $href = $upload_dir['baseurl'] . "/shmapper/shmap_" . $p->id . ".csv"; file_put_contents( $path, $csv_data ); return $href; @@ -610,7 +611,7 @@ function get_csv() $zip->addFile( $path ); $zip->close(); if(file_exists($zip_name)) - return "/wp-content/uploads/shmapper/" . $zip_name; + return $upload_dir['basedir'] . "/shmapper/" . $zip_name; else return $href; } From 36558e51834b300e62a7300decfa74abf8f732a2 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Thu, 18 Apr 2019 08:07:36 +0200 Subject: [PATCH 004/220] * input sanitize fixed --- assets/recaptcha-php/example-captcha.php | 4 +-- class/ShMapPointType.class.php | 8 ++--- class/ShMapperRequest.class.php | 2 +- class/ShmMap.class.php | 38 ++++++++++++------------ class/ShmPoint.class.php | 10 +++---- 5 files changed, 31 insertions(+), 31 deletions(-) diff --git a/assets/recaptcha-php/example-captcha.php b/assets/recaptcha-php/example-captcha.php index f6f7fa0..25e52e6 100644 --- a/assets/recaptcha-php/example-captcha.php +++ b/assets/recaptcha-php/example-captcha.php @@ -18,8 +18,8 @@ if ($_POST["recaptcha_response_field"]) { $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], - $_POST["recaptcha_challenge_field"], - $_POST["recaptcha_response_field"]); + sanitize_text_field($_POST["recaptcha_challenge_field"]), + sanitize_text_field($_POST["recaptcha_response_field"])); if ($resp->is_valid) { echo "You got it!"; diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index c503785..dee415f 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -207,10 +207,10 @@ static function add_ctg( $term, $tax_name ) } static function save_ctg( $term_id ) { - update_term_meta($term_id, "icon", $_POST['icon0']); - update_term_meta($term_id, "color", $_POST['color']); - update_term_meta($term_id, "height", $_POST['height']); - update_term_meta($term_id, "width", $_POST['width']); + update_term_meta($term_id, "icon", sanitize_text_field($_POST['icon0'])); + update_term_meta($term_id, "color", sanitize_text_field($_POST['color'])); + update_term_meta($term_id, "height", sanitize_text_field($_POST['height'])); + update_term_meta($term_id, "width", sanitize_text_field($_POST['width'])); } static function get_icon($term, $is_locked=false) { diff --git a/class/ShMapperRequest.class.php b/class/ShMapperRequest.class.php index 22716b5..006d6ce 100644 --- a/class/ShMapperRequest.class.php +++ b/class/ShMapperRequest.class.php @@ -190,7 +190,7 @@ static function save_admin_edit($obj) if($key == "notified" && $_POST[$key] != 1) $arr[$key] = -1; else - $arr[$key] = $_POST[$key]; + $arr[$key] = sanitize_text_field($_POST[$key]); } return $arr; diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 0102483..546c4d3 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -481,10 +481,10 @@ static function view_form_fields_edit($obj) static function save_admin_edit($obj) { return [ - "map_type" => $_POST['map_type'], - "latitude" => $_POST['latitude'], - "longitude" => $_POST['longitude'], - "zoom" => $_POST['zoom'], + "map_type" => sanitize_text_field($_POST['map_type']), + "latitude" => sanitize_text_field($_POST['latitude']), + "longitude" => sanitize_text_field($_POST['longitude']), + "zoom" => sanitize_text_field($_POST['zoom']), "is_legend" => $_POST['is_legend'] ? 1 : 0, "is_filtered" => $_POST['is_filtered'] ? 1 : 0, "is_csv" => $_POST['is_csv'] ? 1 : 0, @@ -494,25 +494,25 @@ static function save_admin_edit($obj) "is_zoomer" => $_POST['is_zoomer'] ? 1 : 0, "is_layer_switcher" => $_POST['is_layer_switcher'] ? 1 : 0, "is_fullscreen" => $_POST['is_fullscreen'] ? 1 : 0, - "default_icon_id" => $_POST['default_icon_id'], - "width" => $_POST['width'], - "height" => $_POST['height'], + "default_icon_id" => sanitize_text_field($_POST['default_icon_id']), + "width" => sanitize_text_field($_POST['width']), + "height" => sanitize_text_field($_POST['height']), "is_form" => $_POST['is_form'] ? 1 : 0, - "form_title" => $_POST['form_title'], - "form_contents" => $_POST['form_contents'], + "form_title" => sanitize_title($_POST['form_title']), + "form_contents" => sanitize_textarea_field($_POST['form_contents']), "notify_owner" => $_POST['notify_owner'] ? 1: 0, "form_forms" => $_POST['form_forms'], - "is_personal_data" => $_POST['is_personal_data'], - "is_name_iclude" => $_POST['is_name_iclude'], - "personal_name" => $_POST['personal_name'], - "is_name_required" => $_POST['is_name_required'], - "is_email_iclude" => $_POST['is_email_iclude'], - "personal_email" => $_POST['personal_email'], - "is_email_required" => $_POST['is_email_required'], - "is_phone_iclude" => $_POST['is_phone_iclude'], - "personal_phone" => $_POST['personal_phone'], - "is_phone_required" => $_POST['is_phone_required'], + "is_personal_data" => sanitize_text_field($_POST['is_personal_data']), + "is_name_iclude" => sanitize_text_field($_POST['is_name_iclude']), + "personal_name" => sanitize_text_field($_POST['personal_name']), + "is_name_required" => sanitize_text_field($_POST['is_name_required']), + "is_email_iclude" => sanitize_text_field($_POST['is_email_iclude']), + "personal_email" => sanitize_text_field($_POST['personal_email']), + "is_email_required" => sanitize_text_field($_POST['is_email_required']), + "is_phone_iclude" => sanitize_text_field($_POST['is_phone_iclude']), + "personal_phone" => sanitize_text_field($_POST['personal_phone']), + "is_phone_required" => sanitize_text_field($_POST['is_phone_required']), ]; } static function post_row_actions($actions, $post) diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index c78d1b1..0f76509 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -143,11 +143,11 @@ static function save_admin_edit($obj) wp_set_object_terms($obj->id, (int)$_POST['point_type'], SHM_POINT_TYPE); static::update_map_owners($obj); return [ - "latitude" => $_POST['latitude'], - "longitude" => $_POST['longitude'], - "location" => $_POST['location'], - "zoom" => $_POST['zoom'], - "approved" => $_POST['approved'], + "latitude" => sanitize_text_field($_POST['latitude']), + "longitude" => sanitize_text_field($_POST['longitude']), + "location" => sanitize_text_field($_POST['location']), + "zoom" => sanitize_text_field($_POST['zoom']), + "approved" => sanitize_text_field($_POST['approved']), ]; } static function owner_fields() From ce646ab37406a67e3cc737feb998b537036b71d7 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Thu, 18 Apr 2019 08:36:48 +0200 Subject: [PATCH 005/220] * readme updated --- README.txt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.txt b/README.txt index 6c784ce..99dae01 100644 --- a/README.txt +++ b/README.txt @@ -1,10 +1,11 @@ -=== shMapper === +=== shMapper by Teplitsa === Contributors: Genagl, denis.cherniatev Author URI: http://te-st.ru Plugin URI: http://genagl.ru/?p=652 Tags: map, Open Street Maps, OSM, yandex.map, crowdsourcing, карта, yandex.карты Requires at least: 3.6.1 Tested up to: 5.1.1 +Requires PHP: 5.6 Stable tag: trunk License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -40,6 +41,14 @@ If you have a questions for the plugin work in any aspect, please address our su PHP version required: 5.6+ +== Upgrade Notice == + +No upgrade needed yet. + +== Frequently Asked Questions == + +No questions yet. + == Screenshots == 1. Edit map form example From 7d4ee28dd2c723adfb49c6e60eaae47fa5d8d495 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Thu, 18 Apr 2019 16:05:42 +0200 Subject: [PATCH 006/220] * files path fixed --- class/ShmMap.class.php | 6 +++--- shmapper.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 546c4d3..85fe089 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -595,8 +595,8 @@ function get_csv() } $csv_data = iconv ("UTF-8", "cp1251", implode( SHM_CSV_ROW_SEPARATOR, $csv)); $upload_dir = upload_dir(); - $path = $upload_dir['basedir'] . "/shmapper/shmap_" . $p->id . ".csv"; - $href = $upload_dir['baseurl'] . "/shmapper/shmap_" . $p->id . ".csv"; + $path = $upload_dir['basedir'] . "/shmapper-by-teplitsa/shmap_" . $p->id . ".csv"; + $href = $upload_dir['baseurl'] . "/shmapper-by-teplitsa/shmap_" . $p->id . ".csv"; file_put_contents( $path, $csv_data ); return $href; @@ -611,7 +611,7 @@ function get_csv() $zip->addFile( $path ); $zip->close(); if(file_exists($zip_name)) - return $upload_dir['basedir'] . "/shmapper/" . $zip_name; + return $upload_dir['basedir'] . "/shmapper-by-teplitsa/" . $zip_name; else return $href; } diff --git a/shmapper.php b/shmapper.php index 63828cc..d3daf47 100644 --- a/shmapper.php +++ b/shmapper.php @@ -46,7 +46,7 @@ function init_textdomain_shmapper() add_action('plugins_loaded', 'init_textdomain_shmapper'); //Paths -define('SHM_URLPATH', WP_PLUGIN_URL.'/shmapper/'); +define('SHM_URLPATH', WP_PLUGIN_URL.'/shmapper-by-teplitsa/'); define('SHM_REAL_PATH', WP_PLUGIN_DIR.'/'.plugin_basename(dirname(__FILE__)).'/'); define('SHMAPPER', 'shmapper'); define('SHM_MAP', 'shm_map'); From 3726f4e674e55c3c366d137cd2ab6f0facc7668e Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Thu, 18 Apr 2019 16:13:42 +0200 Subject: [PATCH 007/220] * fix --- class/ShmMap.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 85fe089..0755b6b 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -499,7 +499,7 @@ static function save_admin_edit($obj) "height" => sanitize_text_field($_POST['height']), "is_form" => $_POST['is_form'] ? 1 : 0, - "form_title" => sanitize_title($_POST['form_title']), + "form_title" => sanitize_text_field($_POST['form_title']), "form_contents" => sanitize_textarea_field($_POST['form_contents']), "notify_owner" => $_POST['notify_owner'] ? 1: 0, "form_forms" => $_POST['form_forms'], From 461b4b4b1eecab7506634db78f0789c09f854b78 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Thu, 25 Apr 2019 14:18:08 +0200 Subject: [PATCH 008/220] * map type selector fixed --- class/ShmMap.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 0755b6b..3ad42c0 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -481,7 +481,7 @@ static function view_form_fields_edit($obj) static function save_admin_edit($obj) { return [ - "map_type" => sanitize_text_field($_POST['map_type']), + "map_type" => $_POST['map_type'], "latitude" => sanitize_text_field($_POST['latitude']), "longitude" => sanitize_text_field($_POST['longitude']), "zoom" => sanitize_text_field($_POST['zoom']), From 96c633d1f9d5b4b32c65abe511a2410c7c8fdeb6 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Mon, 13 May 2019 08:32:04 +0200 Subject: [PATCH 009/220] * sanitizing of input params improved --- class/ShMapPointType.class.php | 2 +- class/ShMapperRequest.class.php | 28 +++---- class/ShMapper_ajax.class.php | 140 ++++++++++++++++---------------- class/ShmMap.class.php | 4 +- 4 files changed, 88 insertions(+), 86 deletions(-) diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index dee415f..87e5f03 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -208,7 +208,7 @@ static function add_ctg( $term, $tax_name ) static function save_ctg( $term_id ) { update_term_meta($term_id, "icon", sanitize_text_field($_POST['icon0'])); - update_term_meta($term_id, "color", sanitize_text_field($_POST['color'])); + update_term_meta($term_id, "color", sanitize_hex_color($_POST['color'])); update_term_meta($term_id, "height", sanitize_text_field($_POST['height'])); update_term_meta($term_id, "width", sanitize_text_field($_POST['width'])); } diff --git a/class/ShMapperRequest.class.php b/class/ShMapperRequest.class.php index 006d6ce..d6f0ac1 100644 --- a/class/ShMapperRequest.class.php +++ b/class/ShMapperRequest.class.php @@ -206,15 +206,15 @@ static function insert($data) $contacts = []; if( $data['shm_form_name'] ) { - $contacts[] = $data['shm_form_name']; - $author = $data['shm_form_name']; + $contacts[] = sanitize_text_field($data['shm_form_name']); + $author = sanitize_text_field($data['shm_form_name']); } if( $data['shm_form_phone'] ) - $contacts[] = $data['shm_form_phone']; + $contacts[] = sanitize_text_field($data['shm_form_phone']); if( $data['shm_form_email']) { - $contacts[] = $data['shm_form_email']; - $emails[] = $data['shm_form_email']; + $contacts[] = sanitize_email($data['shm_form_email']); + $emails[] = sanitize_email($data['shm_form_email']); } foreach($form as $key => $val) { @@ -222,16 +222,16 @@ static function insert($data) continue; if($val['type'] == SHMAPPER_EMAIL_TYPE_ID) { - $emails[] = $data['elem'][$key]; - $contacts[] = $data['elem'][$key]; + $emails[] = sanitize_email($data['elem'][$key]); + $contacts[] = sanitize_email($data['elem'][$key]); } if( $val['type'] == SHMAPPER_PHONE_TYPE_ID || $val['type'] == SHMAPPER_NAME_TYPE_ID ) - $contacts[] = $data['elem'][$key]; + $contacts[] = sanitize_text_field($data['elem'][$key]); if($val['type'] == SHMAPPER_NAME_TYPE_ID) - $author = $data['elem'][$key]; + $author = sanitize_text_field($data['elem'][$key]); if($val['type'] == SHMAPPER_TEXTAREA_TYPE_ID) { $description .= "

" . $data['elem'][$key]; @@ -242,13 +242,13 @@ static function insert($data) } if($val['type'] == SHMAPPER_TITLE_TYPE_ID) { - $title .= $data['elem'][$key]; + $title .= sanitize_text_field($data['elem'][$key]); } $tpp = ShmForm::get_type_by( "id", $val['type'] ); if(SHMAPPER_IMAGE_TYPE_ID != $val['type'] ) - $contents[] = "".$tpp['title'].": ".$data['elem'][$key].""; + $contents[] = "".$tpp['title'].": ".sanitize_text_field($data['elem'][$key]).""; } - $contents[] = "

" . $data['shm_point_loc'] . "
"; + $contents[] = "
" . sanitize_text_field($data['shm_point_loc']) . "
"; $h['contents'] = implode("
", $contents); $arr = [ "post_type" => static::get_type(), @@ -256,10 +256,10 @@ static function insert($data) "post_title" => $title ? $title : $map->get("post_title"), "post_content" => sanitize_text_field( $h['contents'] ), "map" => (int)$data['id'], - "location" => $data['shm_point_loc'], + "location" => sanitize_text_field($data['shm_point_loc']), "latitude" => ( (int) ($data['shm_point_lat'] * 10000)) / 10000, "longitude" => ( (int) ($data['shm_point_lon'] * 10000)) / 10000, - "type" => $data['shm_point_type'], + "type" => sanitize_text_field($data['shm_point_type']), "contacts" => $contacts, "description" => $description, "author" => $author diff --git a/class/ShMapper_ajax.class.php b/class/ShMapper_ajax.class.php index 2957d5a..9e37547 100644 --- a/class/ShMapper_ajax.class.php +++ b/class/ShMapper_ajax.class.php @@ -106,26 +106,27 @@ static function myajax_submit() $nonce = $_POST['nonce']; if ( !wp_verify_nonce( $nonce, 'myajax-nonce' ) ) die ( $_POST['params'][0] ); - $params = $_POST['params']; - $d = array( $_POST['params'][0], array() ); - switch($params[0]) + $params = $_POST['params']; + $action = sanitize_text_field($params[0]); + $d = array( $action, array() ); + switch($action) { case "test": - $map_id = $params[1]; - $num = $params[2]; + $map_id = sanitize_text_field($params[1]); + $num = sanitize_text_field($params[2]); $d = array( - $params[0], + $action, array( "text" => 'testing', ) ); break; case "shm_doubled": - $map_id = $params[1]; + $map_id = sanitize_text_field($params[1]); $map = ShmMap::get_instance( $map_id ); $new_map = $map->doubled(); $d = array( - $params[0], + $action, array( "text" => 'shm_doubled', ) @@ -148,7 +149,7 @@ static function myajax_submit() } update_option("shm_wizard_step", $step); $d = array( - $params[0], + $action, array( "href" => $stepData['href'], "msg" => $messge @@ -160,7 +161,7 @@ static function myajax_submit() ShMapper::update_options(); update_option("shm_wizard_step", 0); $d = array( - $params[0], + $action, array( "msg" => __("Wizzard closed", SHMAPPER) , ) @@ -171,18 +172,18 @@ static function myajax_submit() ShMapper::update_options(); update_option("shm_wizard_step", 0); $d = array( - $params[0], + $action, array( "msg" => __("Wizzard restarted", SHMAPPER), ) ); break; case "shm_notify_req": - $req_id = $params[1]; + $req_id = sanitize_text_field($params[1]); $req = ShMapperRequest::get_instance($req_id); $new_id = $req->notify(); $d = array( - $params[0], + $action, array( "text" => $req->get_notified_form(), "post_id" => $req_id, @@ -192,11 +193,11 @@ static function myajax_submit() ); break; case "shm_trash_req": - $req_id = $params[1]; + $req_id = sanitize_text_field($params[1]); $req = ShMapperRequest::get_instance($req_id); wp_trash_post( $req_id ); $d = array( - $params[0], + $action, array( "post_id" => $req_id, "msg" => __("Request put to Trash", SHMAPPER) @@ -204,11 +205,11 @@ static function myajax_submit() ); break; case "shm_add_before": - $num = $params[1]; - $post_id = $params[2]; - $type_id = $params[3]; + $num = sanitize_text_field($params[1]); + $post_id = sanitize_text_field($params[2]); + $type_id = sanitize_text_field($params[3]); $d = array( - $params[0], + $action, array( "text" => ShmForm::get_admin_element($num,["type" => $type_id]), "order" => $num, @@ -217,11 +218,11 @@ static function myajax_submit() ); break; case "shm_add_after": - $num = $params[1]; - $post_id = $params[2]; - $type_id = $params[3]; + $num = sanitize_text_field($params[1]); + $post_id = sanitize_text_field($params[2]); + $type_id = sanitize_text_field($params[3]); $d = array( - $params[0], + $action, array( "text" => ShmForm::get_admin_element($num,["type" => $type_id]), "order" => $num, @@ -230,11 +231,11 @@ static function myajax_submit() ); break; case "shm_csv": - $map_id = $params[1]; + $map_id = sanitize_text_field($params[1]); $map = ShmMap::get_instance($map_id); $link = $map->get_csv(); $d = array( - $params[0], + $action, [ "text" => $link, "name" => "map" //$map->get("post_title") @@ -249,7 +250,7 @@ static function myajax_submit() $reCaptcha = new ReCaptcha( ShMapper::$options['shm_captcha_secretKey'] ); $response = $reCaptcha->verifyResponse( $_SERVER["REMOTE_ADDR"], - $data['cap'] + sanitize_text_field($data['cap']) ); switch( $response->success ) { @@ -272,7 +273,7 @@ static function myajax_submit() } $d = array( - $params[0], + $action, array( "msg" => $msg, "res" => $res, @@ -283,11 +284,11 @@ static function myajax_submit() break; case "shm_delete_map_hndl": $data = $params[1]; - $id = $data["id"]; + $id = sanitize_text_field($data["id"]); $map = ShmMap::get_instance( $id ); $res = $map->shm_delete_map_hndl($data); $d = array( - $params[0], + $action, array( "msg" => $res['message'], "res" => $res, @@ -297,11 +298,11 @@ static function myajax_submit() ); break; case "shm_delete_map": - $id = $params[1]; - $href = $params[2]; + $id = sanitize_text_field($params[1]); + $href = sanitize_text_field($params[2]); $map = ShmMap::get_instance( $id ); $d = array( - $params[0], + $action, array( "text" => [ "title" => sprintf(__("Are you want delete %s?", SHMAPPER), $map->get("post_title") ), @@ -314,12 +315,12 @@ static function myajax_submit() ); break; case "shm_add_point_prepaire": - $map_id = $params[1][0]; - $x = $params[1][1]; - $y = $params[1][2]; - $ad = $params[1][3]; + $map_id = $params[1][0] = sanitize_text_field($params[1][0]); + $x = $params[1][1] = sanitize_text_field($params[1][1]); + $y = $params[1][2] = sanitize_text_field($params[1][2]); + $ad = $params[1][3] = sanitize_text_field($params[1][3]); $d = array( - $params[0], + $action, array( "text" => [ 'title' => __("add Map Point", SHMAPPER), @@ -333,21 +334,22 @@ static function myajax_submit() case "shm_create_map_point": $data = $params[1]; $point = ShmPoint::insert($data); - $type = get_term($data['type'], SHM_POINT_TYPE); + $type_term_id = sanitize_text_field($data['type']); + $type = get_term($type_term_id, SHM_POINT_TYPE); $pointdata = [ - "post_title" => $data["post_title"], + "post_title" => sanitize_text_field($data["post_title"]), "post_content" => $data["post_content"], - "latitude" => $data["latitude"], - "longitude" => $data["longitude"], - "location" => $data["location"], + "latitude" => sanitize_text_field($data["latitude"]), + "longitude" => sanitize_text_field($data["longitude"]), + "location" => sanitize_text_field($data["location"]), "color" => get_term_meta($type->term_id, "color", true), "height" => get_term_meta($type->term_id, "height", true), "icon" => ShMapPointType::get_icon_src($type->term_id)[0], - "term_id" => $data['type'], - "mapid" => "ShmMap".$data['map_id'].$data['map_id'] + "term_id" => $type_term_id, + "mapid" => "ShmMap".sanitize_text_field($data['map_id']).sanitize_text_field($data['map_id']) ]; $d = array( - $params[0], + $action, array( "id" => $point->id, "data" => $pointdata, @@ -356,85 +358,85 @@ static function myajax_submit() ); break; case "shm_voc": - $voc = $params[1]; - ShMapper::$options[$voc] = $params[2]; + $voc = sanitize_text_field($params[1]); + ShMapper::$options[$voc] = sanitize_text_field($params[2]); ShMapper::update_options(); $d = array( - $params[0], + $action, array( "msg" => __("Change Vocabulaty: ", SHMAPPER) . $voc.": ".ShMapper::$options[$voc], ) ); break; case "map_api": - ShMapper::$options['map_api'] = $params[1]; + ShMapper::$options['map_api'] = sanitize_text_field($params[1]); ShMapper::update_options(); $d = array( - $params[0], + $action, array( - "msg" => $params[1] == 1 ? "Yandex Map API" : "OpenStreet Map API", + "msg" => sanitize_text_field($params[1]) == 1 ? "Yandex Map API" : "OpenStreet Map API", ) ); break; case "shm_map_is_crowdsourced": - ShMapper::$options['shm_map_is_crowdsourced'] = $params[1]; + ShMapper::$options['shm_map_is_crowdsourced'] = sanitize_text_field($params[1]); ShMapper::update_options(); $d = array( - $params[0], + $action, array( - "msg" => __($params[1] ? "Users can add Placemarks" : "Users don't can add Placemarks", SHMAPPER), + "msg" => __(sanitize_text_field($params[1]) ? "Users can add Placemarks" : "Users don't can add Placemarks", SHMAPPER), ) ); break; case "shm_map_marker_premoderation": - ShMapper::$options['shm_map_marker_premoderation'] = $params[1]; + ShMapper::$options['shm_map_marker_premoderation'] = sanitize_text_field($params[1]); ShMapper::update_options(); $d = array( - $params[0], + $action, array( - "msg" => __($params[1] ?"Pre-moderation on" : "Pre-moderation off", SHMAPPER), + "msg" => __(sanitize_text_field($params[1]) ? "Pre-moderation on" : "Pre-moderation off", SHMAPPER), ) ); break; case "shm_reload": - ShMapper::$options['shm_reload'] = $params[1]; + ShMapper::$options['shm_reload'] = sanitize_text_field($params[1]); ShMapper::update_options(); $d = array( - $params[0], + $action, array( - "msg" => __($params[1] ? "Reload mode" : "Not relaod mode", SHMAPPER), + "msg" => __(sanitize_text_field($params[1]) ? "Reload mode" : "Not relaod mode", SHMAPPER), ) ); break; case "shm_settings_captcha": - ShMapper::$options['shm_settings_captcha'] = $params[1]; + ShMapper::$options['shm_settings_captcha'] = sanitize_text_field($params[1]); ShMapper::update_options(); $d = array( - $params[0], + $action, array( - "msg" => __($params[1] ? "captha added" : "captcha removed", SHMAPPER), + "msg" => __(sanitize_text_field($params[1]) ? "captha added" : "captcha removed", SHMAPPER), ) ); break; case "shm_captcha_siteKey": - ShMapper::$options['shm_captcha_siteKey'] = $params[1]; + ShMapper::$options['shm_captcha_siteKey'] = sanitize_text_field($params[1]); ShMapper::update_options(); $d = array( - $params[0], + $action, array( "msg" => __( "Set key" , SHMAPPER), - "hide_dang" => $params[1] != "" && ShMapper::$options['shm_captcha_secretKey'] != "" ? 1 : 0 + "hide_dang" => sanitize_text_field($params[1]) != "" && ShMapper::$options['shm_captcha_secretKey'] != "" ? 1 : 0 ) ); break; case "shm_captcha_secretKey": - ShMapper::$options['shm_captcha_secretKey'] = $params[1]; + ShMapper::$options['shm_captcha_secretKey'] = sanitize_text_field($params[1]); ShMapper::update_options(); $d = array( - $params[0], + $action, array( "msg" => __( "Set key" , SHMAPPER), - "hide_dang" => $params[1] != "" && ShMapper::$options['shm_captcha_siteKey'] != "" ? 1 : 0 + "hide_dang" => sanitize_text_field($params[1]) != "" && ShMapper::$options['shm_captcha_siteKey'] != "" ? 1 : 0 ) ); break; diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 3ad42c0..263a449 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -762,9 +762,9 @@ function shm_delete_map_hndl($data) break; case 3: $count = $wpdb->get_var("SELECT COUNT(point_id) FROM ".$wpdb->prefix."point_map WHERE map_id=".$this->id); - $query = "UPDATE " . $wpdb->prefix . "point_map SET map_id=".$data['anover']. " WHERE map_id=".$this->id; + $query = "UPDATE " . $wpdb->prefix . "point_map SET map_id=".((int)sanitize_text_field($data['anover'])). " WHERE map_id=".$this->id; $res = $wpdb->query($query); - $map2 = static::get_instance($data['anover']); + $map2 = static::get_instance(sanitize_text_field($data['anover'])); $message = sprintf(__("Succesfuly delete map and %s points migrates to %s", SHMAPPER), $count, $map2->get("post_title") ); break; } From 1732948d6b3598fa15a56f0e164b2154e75fc077 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Mon, 13 May 2019 08:39:05 +0200 Subject: [PATCH 010/220] * WP version updated --- README.txt | 2 +- shmapper.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.txt b/README.txt index 99dae01..aab8d6b 100644 --- a/README.txt +++ b/README.txt @@ -4,7 +4,7 @@ Author URI: http://te-st.ru Plugin URI: http://genagl.ru/?p=652 Tags: map, Open Street Maps, OSM, yandex.map, crowdsourcing, карта, yandex.карты Requires at least: 3.6.1 -Tested up to: 5.1.1 +Tested up to: 5.2 Requires PHP: 5.6 Stable tag: trunk License: GPLv2 or later diff --git a/shmapper.php b/shmapper.php index d3daf47..93f59c3 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 0.0.121 + * Version: 1.0 * Author: Genagl * Author URI: http://genagl.ru/author * Contributors: Teplitsa Support Team (suptestru@gmail.com) From 56f0efc49144ebb0f7adf7d90b9cb7056235bf26 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Mon, 13 May 2019 08:54:45 +0200 Subject: [PATCH 011/220] * useless js deleted --- assets/js/jquery-ui.min.js | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 assets/js/jquery-ui.min.js diff --git a/assets/js/jquery-ui.min.js b/assets/js/jquery-ui.min.js deleted file mode 100644 index 25398a1..0000000 --- a/assets/js/jquery-ui.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/*! jQuery UI - v1.12.1 - 2016-09-14 -* http://jqueryui.com -* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js -* Copyright jQuery Foundation and other contributors; Licensed MIT */ - -(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("
"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("

")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("

").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n) -}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("
").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("
").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t(""),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n; -this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("
    ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("
    ").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("
    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(t("
    ").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("
    ").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"
    ",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t(""),this.iconSpace=t(" "),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"").addClass(this._triggerClass).html(o?t("").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t(""),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s)) -}},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?""+i+"":q?"":""+i+"",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?""+n+"":q?"":""+n+"",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"",l=j?"
    "+(Y?h:"")+(this._isInRange(t,r)?"":"")+(Y?"":h)+"
    ":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="
    "}for(T+="
    "+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"
    "+"",P=u?"":"",w=0;7>w;w++)M=(w+c)%7,P+="";for(T+=P+"",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="",W=u?"":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+""}Z++,Z>11&&(Z=0,te++),T+="
    "+this._get(t,"weekHeader")+"=5?" class='ui-datepicker-week-end'":"")+">"+""+p[M]+"
    "+this._get(t,"calculateWeek")(A)+""+(F&&!_?" ":L?""+A.getDate()+"":""+A.getDate()+"")+"
    "+(X?"
    "+(U[0]>0&&C===U[1]-1?"
    ":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="
    ",y="";if(o||!m)y+=""+a[e]+"";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+=""}if(v||(b+=y+(!o&&m&&_?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!_)b+=""+i+"";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":" ")+y),b+="
    "},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("
    ").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())} -},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.lefti[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
    "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog -},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("
    ").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("
    "),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("").button({label:t("").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html(" ")},_createButtonPane:function(){this.uiDialogButtonPane=t("
    "),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("
    ").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("
    ").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("
    ").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("
    ").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("
    ").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("
    "),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("").parent().append("")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("
    ").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("
    ").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("
    ").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("
    ").attr("role","tooltip"),s=t("
    ").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip}); \ No newline at end of file From 4fbf98bf7e0c24e36fb8c3ce20ab35b85b986fda Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Mon, 20 May 2019 11:57:55 +0200 Subject: [PATCH 012/220] * contributors list updated --- shmapper.php | 1 + 1 file changed, 1 insertion(+) diff --git a/shmapper.php b/shmapper.php index 93f59c3..7d5c806 100644 --- a/shmapper.php +++ b/shmapper.php @@ -14,6 +14,7 @@ * Contributors: Genagl (genag1@list.ru) Denis Cherniatev (denis.cherniatev@gmail.com) + Teplitsa Support Team (suptestru@gmail.com) * License: GPLv2 or later Copyright 2018 Genagl (email: genag1@list.ru) From a3570b010476627c2d068226972c0725b41ca708 Mon Sep 17 00:00:00 2001 From: sidorenkoa Date: Mon, 24 Jun 2019 15:24:59 +0200 Subject: [PATCH 013/220] Added small changes to the description --- README.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.txt b/README.txt index aab8d6b..fcfa962 100644 --- a/README.txt +++ b/README.txt @@ -1,8 +1,8 @@ === shMapper by Teplitsa === -Contributors: Genagl, denis.cherniatev +Contributors: Genagl, denis.cherniatev, Teplitsa Support Team (suptestru@gmail.com) Author URI: http://te-st.ru Plugin URI: http://genagl.ru/?p=652 -Tags: map, Open Street Maps, OSM, yandex.map, crowdsourcing, карта, yandex.карты +Tags: map, OpenStreetMap, OSM, yandex.map, crowdsourcing, карта, Яндекс.карты, картирование, mapping, crowdsourced mapping, user mapping Requires at least: 3.6.1 Tested up to: 5.2 Requires PHP: 5.6 @@ -10,11 +10,11 @@ Stable tag: trunk License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html -shMapper is a plugin, that allows you to create simple crowdsourcing maps based on Open Street Maps and Yandex.Maps. +shMapper is a plugin, that allows you to create simple crowdsourcing maps based on OpenStreetMap and Yandex.Maps. == Description == -The shMapper plugin allows you to create simple crowdsourcing maps on OpenStreet Maps with an option of feedback messages form. This plugin gives you an alternative to current online map services such as Yandex.Maps, Google Maps etc which don’t provide the option for users to add new objects. +The shMapper plugin allows you to create simple crowdsourcing maps on OpenStreetMap with an option of feedback messages form. This plugin gives you an alternative to current online map services such as Yandex.Maps, Google Maps etc which don’t provide the option for users to add new objects. **Core features** @@ -57,4 +57,4 @@ No questions yet. == Changelog == = 1.0 = -* First official release! \ No newline at end of file +* First official release! From f1d8114d75452ff02b6909bc31e7a1eaac3994f7 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Mon, 8 Jul 2019 23:59:56 +0200 Subject: [PATCH 014/220] * readme update --- README.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.txt b/README.txt index aab8d6b..8a65f6f 100644 --- a/README.txt +++ b/README.txt @@ -1,5 +1,5 @@ === shMapper by Teplitsa === -Contributors: Genagl, denis.cherniatev +Contributors: Genagl, denis.cherniatev, teplosup Author URI: http://te-st.ru Plugin URI: http://genagl.ru/?p=652 Tags: map, Open Street Maps, OSM, yandex.map, crowdsourcing, карта, yandex.карты From 28e39782ae98dc55d3199c3dd4387669a9d4a6ad Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Tue, 9 Jul 2019 00:08:45 +0200 Subject: [PATCH 015/220] * fixes from asana added --- README.txt | 4 ++- class/ShMapper.class.php | 2 +- class/ShMapper_ajax.class.php | 24 ++++++++++++++++-- class/ShmMap.class.php | 11 +++++++- .../shmapper-by-teplitsa-ru_RU.mo | Bin .../shmapper-by-teplitsa-ru_RU.po | 0 shmapper.php | 12 ++++----- shortcode/shmMap.shortcode.php | 1 + 8 files changed, 42 insertions(+), 12 deletions(-) rename lang/shmapper-ru_RU.mo => languages/shmapper-by-teplitsa-ru_RU.mo (100%) rename lang/shmapper-ru_RU.po => languages/shmapper-by-teplitsa-ru_RU.po (100%) diff --git a/README.txt b/README.txt index fcfa962..0ce5ae4 100644 --- a/README.txt +++ b/README.txt @@ -16,6 +16,8 @@ shMapper is a plugin, that allows you to create simple crowdsourcing maps based The shMapper plugin allows you to create simple crowdsourcing maps on OpenStreetMap with an option of feedback messages form. This plugin gives you an alternative to current online map services such as Yandex.Maps, Google Maps etc which don’t provide the option for users to add new objects. +Most of the code written by Gennadiy Glazunov aka [Genagl](http://genagl.ru/author) + **Core features** * Configure and display maps with markers on pages. @@ -57,4 +59,4 @@ No questions yet. == Changelog == = 1.0 = -* First official release! +* First official release! \ No newline at end of file diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index d6eac80..f4a1b1e 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -195,7 +195,7 @@ static function add_admin_js_script() wp_enqueue_style( "ShMapper"); //js wp_enqueue_script("jquery"); - wp_register_script("inline", get_bloginfo("url").'/wp-admin/js/inline-edit-post.js', array()); + wp_register_script("inline", admin_url().'/js/inline-edit-post.js', array()); wp_enqueue_script("inline"); wp_register_script("ShMapper", plugins_url( '../assets/js/ShMapper.js', __FILE__ ), array()); wp_enqueue_script("ShMapper"); diff --git a/class/ShMapper_ajax.class.php b/class/ShMapper_ajax.class.php index 9e37547..984c58f 100644 --- a/class/ShMapper_ajax.class.php +++ b/class/ShMapper_ajax.class.php @@ -35,6 +35,7 @@ static function shm_ajax3_submit() /**/ $data = $_POST; $data['elem'] = explode(",", $data['elem']); + if( ShMapper::$options['shm_settings_captcha'] ) { require_once( SHM_REAL_PATH . "assets/recaptcha-php/recaptcha.class.php" ); @@ -57,8 +58,27 @@ static function shm_ajax3_submit() } else { - - $res = ShMapperRequest::insert($data); + $res = ShMapperRequest::insert($data); + + if( !ShMapper::$options['shm_map_marker_premoderation'] ) { + $point = ShmPoint::insert([ + "post_title" => (string)$res->get("post_title"), + "post_name" => (string)$res->get("post_name"), + "post_content" => (string)$res->get_meta("description"), + "latitude" => $res->get_meta("latitude"), + "longitude" => $res->get_meta("longitude"), + "location" => $res->get_meta("location"), + "type" => (int)$res->get_meta("type"), + "map_id" => (int)$res->get_meta("map"), + ]); + if($attach_id = get_post_thumbnail_id($res->id)) + { + set_post_thumbnail($point->id, (int)$attach_id); + } + + SMC_Post::delete($res->id); + } + $msg = ShMapper::$options['shm_succ_request_text']; } //load image diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 263a449..b31249c 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -578,6 +578,16 @@ function get_include_types() } function get_csv() { + + $upload_dir = wp_upload_dir(); + if( + !file_exists($upload_dir['basedir']."/shmapper-by-teplitsa") + && !wp_mkdir_p($upload_dir['basedir']."/shmapper-by-teplitsa") + ) { + echo '
    '.print_r('FAIL', 1).'
    '; + return false; + } + $points = $this->get_points(); $csv = [implode(SHM_CSV_STROKE_SEPARATOR, [ "#", __("Title", SHMAPPER), __("Description", SHMAPPER), __("Location", SHMAPPER), __("Longitude", SHMAPPER), __("Latitude", SHMAPPER) ])]; $i = 0; @@ -594,7 +604,6 @@ function get_csv() ]); } $csv_data = iconv ("UTF-8", "cp1251", implode( SHM_CSV_ROW_SEPARATOR, $csv)); - $upload_dir = upload_dir(); $path = $upload_dir['basedir'] . "/shmapper-by-teplitsa/shmap_" . $p->id . ".csv"; $href = $upload_dir['baseurl'] . "/shmapper-by-teplitsa/shmap_" . $p->id . ".csv"; file_put_contents( $path, $csv_data ); diff --git a/lang/shmapper-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo similarity index 100% rename from lang/shmapper-ru_RU.mo rename to languages/shmapper-by-teplitsa-ru_RU.mo diff --git a/lang/shmapper-ru_RU.po b/languages/shmapper-by-teplitsa-ru_RU.po similarity index 100% rename from lang/shmapper-ru_RU.po rename to languages/shmapper-by-teplitsa-ru_RU.po diff --git a/shmapper.php b/shmapper.php index 7d5c806..1fd1588 100644 --- a/shmapper.php +++ b/shmapper.php @@ -4,12 +4,10 @@ * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO * Version: 1.0 - * Author: Genagl - * Author URI: http://genagl.ru/author - * Contributors: Teplitsa Support Team (suptestru@gmail.com) + * Author: Teplitsa. Technologies for Social Good + * Author URI: https://te-st.ru * License: GPL2 - * Text Domain: shmapper - * Domain Path: /lang/ + * Text Domain: shmapper-by-teplitsa * License URI: http://www.gnu.org/licenses/gpl-2.0.txt * Contributors: Genagl (genag1@list.ru) @@ -41,7 +39,7 @@ function init_textdomain_shmapper() { if (function_exists('load_plugin_textdomain')) { - load_plugin_textdomain("shmapper", false , dirname( plugin_basename( __FILE__ ) ) .'/lang/'); + load_plugin_textdomain("shmapper-by-teplitsa", false , dirname( plugin_basename( __FILE__ ) ) .'/languages/'); } } add_action('plugins_loaded', 'init_textdomain_shmapper'); @@ -49,7 +47,7 @@ function init_textdomain_shmapper() //Paths define('SHM_URLPATH', WP_PLUGIN_URL.'/shmapper-by-teplitsa/'); define('SHM_REAL_PATH', WP_PLUGIN_DIR.'/'.plugin_basename(dirname(__FILE__)).'/'); -define('SHMAPPER', 'shmapper'); +define('SHMAPPER', 'shmapper-by-teplitsa'); define('SHM_MAP', 'shm_map'); define('SHM_POINT', 'shm_point'); define('SHM_POINT_TYPE', 'shm_point_type'); diff --git a/shortcode/shmMap.shortcode.php b/shortcode/shmMap.shortcode.php index 1de68a3..cafe36f 100644 --- a/shortcode/shmMap.shortcode.php +++ b/shortcode/shmMap.shortcode.php @@ -46,5 +46,6 @@ function shmMap($args)
    "; } + return $html; } \ No newline at end of file From a594411f8f3703cc4ce2eec8e6d21ae8e1fa5864 Mon Sep 17 00:00:00 2001 From: Ahaenor Date: Tue, 9 Jul 2019 09:09:51 +0300 Subject: [PATCH 016/220] Small notices bugfixes; --- class/ShMapper.class.php | 23 ++++++++++++++--------- class/ShmMap.class.php | 2 +- shmapper.php | 4 ++-- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index f4a1b1e..1f5e3be 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -2,7 +2,7 @@ class ShMapper { - static function activate() + public static function activate() { global $wpdb; init_textdomain_shmapper(); @@ -31,7 +31,7 @@ static function activate() $upload_dir = $upload_dir . '/shmapper'; wp_mkdir_p( $upload_dir ); } - static function deactivate() + public static function deactivate() { } @@ -243,7 +243,9 @@ static function add_admin_js_script() wp_register_script("ShMapper.osm", plugins_url( '../assets/js/ShMapper_osm.js', __FILE__ ), array()); wp_enqueue_script("ShMapper.osm"); } - wp_localize_script( "jquery", "map_type", static::$options['map_api'] ); + if(is_array(static::$options['map_api'])) { + wp_localize_script( "jquery", "map_type", static::$options['map_api'] ); + } // load media library scripts wp_enqueue_media(); @@ -264,7 +266,7 @@ static function add_admin_js_script() ) ); - wp_localize_script( 'jquery', 'shm_maps', [] ); + // wp_localize_script( 'jquery', 'shm_maps', array() ); wp_localize_script( 'jquery', 'voc', @@ -335,7 +337,10 @@ static function add_frons_js_script() wp_enqueue_script("ShMapper.osm"); } - wp_localize_script( "jquery", "map_type", static::$options['map_api'] ); + if(is_array(static::$options['map_api'])) { + wp_localize_script( "jquery", "map_type", static::$options['map_api'] ); + } + //ajax wp_localize_script( 'jquery', @@ -359,7 +364,7 @@ static function add_frons_js_script() 'url' => admin_url('admin-ajax.php') ) ); - wp_localize_script( 'jquery', 'shm_maps', [] ); + // wp_localize_script( 'jquery', 'shm_maps', array() ); wp_localize_script( 'jquery', 'voc', @@ -624,15 +629,15 @@ function shm_show_wizz() } jQuery(document).ready(function($) { - jQuery('" . $stepData["selector"] . "').addClass('shm_wizzard_current'); + jQuery('" . (empty($stepData["selector"]) ? '' : $stepData["selector"]) . "').addClass('shm_wizzard_current'); var loc = jQuery('" . $stepData["selector"] . "').offset(); if( loc.top < 0 ) { - loc = jQuery('" . $stepData["parent_selector"] . "').offset(); + loc = jQuery('" . (empty($stepData["parent_selector"]) ? '' : $stepData["parent_selector"]) . "').offset(); } jQuery('#shm_wizzard').appendTo('#adminmenu').hide().fadeIn('slow').css({top: loc.top - 15}); jQuery('#shm_wizzard_closed').appendTo('#adminmenu').hide().css({top: loc.top - 28}); - jQuery('" . $stepData["alt_selector"] . "').each((num, elem) => { + jQuery('" .(empty($stepData["alt_selector"]) ? '' : $stepData["alt_selector"]) . "').each((num, elem) => { var ofset = $(elem).offset(); var poss = ofset.left < window.innerWidth/2 ? 1 : 2; var arr = poss == 1 ? '
    ' : '
    '; diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index b31249c..37f8b8c 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -176,7 +176,7 @@ static function fill_views_column($column_name, $post_id) static function admin_redirect() { global $pagenow, $submenu ; - if("shm_page" == $_GET["page"] && "admin.php" === $pagenow) + if( !empty($_GET["page"]) && "shm_page" == $_GET["page"] && "admin.php" === $pagenow) { wp_redirect( admin_url( '/admin.php?page=shm_settings_page' ) ); } diff --git a/shmapper.php b/shmapper.php index 1fd1588..7755356 100644 --- a/shmapper.php +++ b/shmapper.php @@ -80,10 +80,10 @@ function init_textdomain_shmapper() require_once(SHM_REAL_PATH.'shortcode/shm_shortcodes.php'); require_once(SHM_REAL_PATH.'widget/ShMap.widget.php'); -register_activation_hook( __FILE__, array( ShMapper, 'activate' ) ); +register_activation_hook( __FILE__, array( 'ShMapper', 'activate' ) ); if (function_exists('register_deactivation_hook')) { - register_deactivation_hook(__FILE__, array(ShMapper, 'deactivate')); + register_deactivation_hook(__FILE__, array('ShMapper', 'deactivate')); } add_action("init", "init_shmapper", 1); function init_shmapper() From b1f1f46ba2aac723426e07c5997600cbf969388e Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Tue, 9 Jul 2019 08:31:34 +0200 Subject: [PATCH 017/220] * version updated --- README.txt | 6 +++++- shmapper.php | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.txt b/README.txt index 0ce5ae4..b1d493b 100644 --- a/README.txt +++ b/README.txt @@ -4,7 +4,7 @@ Author URI: http://te-st.ru Plugin URI: http://genagl.ru/?p=652 Tags: map, OpenStreetMap, OSM, yandex.map, crowdsourcing, карта, Яндекс.карты, картирование, mapping, crowdsourced mapping, user mapping Requires at least: 3.6.1 -Tested up to: 5.2 +Tested up to: 5.2.2 Requires PHP: 5.6 Stable tag: trunk License: GPLv2 or later @@ -58,5 +58,9 @@ No questions yet. == Changelog == += 1.1 = +* Pre-moderation of markers fixed. +* Other minor fixes. + = 1.0 = * First official release! \ No newline at end of file diff --git a/shmapper.php b/shmapper.php index 7755356..035ecb7 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.0 + * Version: 1.1 * Author: Teplitsa. Technologies for Social Good * Author URI: https://te-st.ru * License: GPL2 From 92ab2cb9e915bfa4e40599f93f9f68530c705141 Mon Sep 17 00:00:00 2001 From: Ahaenor Date: Tue, 9 Jul 2019 10:24:11 +0300 Subject: [PATCH 018/220] More notices bugfixes; --- class/ShMapPointType.class.php | 16 +++++++++------- class/ShMapper.class.php | 20 ++++++++------------ class/ShMapper_Assistants.class.php | 2 +- class/ShmForm.class.php | 4 ++-- class/ShmMap.class.php | 8 ++++---- tpl/input_file_form.php | 4 ++-- 6 files changed, 26 insertions(+), 28 deletions(-) diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index 87e5f03..8bea035 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -118,19 +118,19 @@ static function new_ctg( $tax_name )
    - +
    - +
    - +
    @@ -264,10 +264,12 @@ static function get_icon_src($term_id, $size=-1) } static function get_ganre_swicher($params = -1, $type="checkbox", $form_factor="large") { - if(!is_array($params)) - $params = ["prefix" =>"ganre" ]; + if(!is_array($params)) { + $params = array("prefix" => "ganre"); + } + $selected = is_array($params['selected']) ? $params['selected'] : explode(",", $params['selected']); - $includes = $params['includes'] ; + $includes = empty($params['includes']) ? '' : $params['includes']; $row_class = isset($params['row_class']) ? $params['row_class'] : "" ; $row_style = isset($params['row_style']) ? $params['row_style'] : ""; ; $ganres = get_terms(["taxonomy" => SHM_POINT_TYPE, 'hide_empty' => false ]); diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index 1f5e3be..2aa7c31 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -243,9 +243,7 @@ static function add_admin_js_script() wp_register_script("ShMapper.osm", plugins_url( '../assets/js/ShMapper_osm.js', __FILE__ ), array()); wp_enqueue_script("ShMapper.osm"); } - if(is_array(static::$options['map_api'])) { - wp_localize_script( "jquery", "map_type", static::$options['map_api'] ); - } + wp_localize_script( "jquery", "map_type", array(static::$options['map_api']) ); // load media library scripts wp_enqueue_media(); @@ -266,7 +264,7 @@ static function add_admin_js_script() ) ); - // wp_localize_script( 'jquery', 'shm_maps', array() ); + wp_localize_script( 'jquery', 'shm_maps', array() ); wp_localize_script( 'jquery', 'voc', @@ -337,9 +335,7 @@ static function add_frons_js_script() wp_enqueue_script("ShMapper.osm"); } - if(is_array(static::$options['map_api'])) { - wp_localize_script( "jquery", "map_type", static::$options['map_api'] ); - } + wp_localize_script( "jquery", "map_type", array(static::$options['map_api']) ); //ajax wp_localize_script( @@ -364,7 +360,7 @@ static function add_frons_js_script() 'url' => admin_url('admin-ajax.php') ) ); - // wp_localize_script( 'jquery', 'shm_maps', array() ); + wp_localize_script( 'jquery', 'shm_maps', array() ); wp_localize_script( 'jquery', 'voc', @@ -501,21 +497,21 @@ static function setting_pages() "

    Google reCAPTCHA site key
    - +

    Google reCAPTCHA secret key
    - + ". sprintf(__("What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s.", SHMAPPER), "
    ", "") . " -
    +
    ". __("Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha", SHMAPPER). " diff --git a/class/ShMapper_Assistants.class.php b/class/ShMapper_Assistants.class.php index a170cf9..f71483b 100644 --- a/class/ShMapper_Assistants.class.php +++ b/class/ShMapper_Assistants.class.php @@ -33,7 +33,7 @@ static function ba_admin_posts_filter_restrict_manage_posts() { global $wpdb, $post, $wp_list_table, $map_dropdown; $current = isset($_GET['ADMIN_FILTER_FIELD'])? $_GET['ADMIN_FILTER_FIELD']:''; - if($post->post_type == SHM_POINT) + if($post && $post->post_type == SHM_POINT) { $map_dropdown = $map_dropdown ? $map_dropdown : ShmMap::get_all(); echo ShmMap::wp_dropdown([ diff --git a/class/ShmForm.class.php b/class/ShmForm.class.php index 45eafd7..a544270 100644 --- a/class/ShmForm.class.php +++ b/class/ShmForm.class.php @@ -204,7 +204,7 @@ static function get_admin_element( $id, $data=-1 ) ". __("Placeholder", SHMAPPER) . " - +
    ". @@ -214,7 +214,7 @@ static function get_admin_element( $id, $data=-1 ) "prefix" => "ganre$id". MD5(rand(0,100000000)), "id" => $id, "name" => "form_forms[$id][placemarks]", - "selected" => $data['placemarks'], + "selected" => empty($data['placemarks']) ? '' : $data['placemarks'], "col_width" => 6 ]). "
    diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 37f8b8c..847963f 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -232,7 +232,7 @@ static function view_admin_edit($obj) $is_clustered = $obj->get_meta("is_clustered"); $is_lock = $obj->get_meta("is_lock"); $form_title = $obj->get_meta("form_title"); - $html .= " + $html = "

    ". __("1.1. Pan map and choose zoom", SHMAPPER). "

    ". @@ -376,7 +376,7 @@ static function view_form_fields_edit($obj) $is_phone_iclude = $obj->get_meta("is_phone_iclude"); $personal_phone = $obj->get_meta("personal_phone"); $is_phone_required = $obj->get_meta("is_phone_required"); - $html .= " + $html = "
    @@ -548,7 +548,7 @@ static function smc_after_doubled_post($new_smc_post, $origin_smc_post) } static function formEditor($data) { - $html .= " + $html = "
      "; //for( $i = 0; $i < 5; $i ++ ) @@ -808,7 +808,7 @@ static function get_type_radio($params=-1) foreach(static::get_map_types()[ 1 ] as $type) { - $selected = $params[ 'selected' ][1][0] == $type ? " checked " : ""; + $selected = !empty($params['selected']) && !empty($params['selected'][1][0]) && $params[ 'selected' ][1][0] == $type ? " checked " : ""; $name = $params[ 'name' ]; $id = $params[ 'id' ]; $html .= " diff --git a/tpl/input_file_form.php b/tpl/input_file_form.php index 815a458..6617d0e 100644 --- a/tpl/input_file_form.php +++ b/tpl/input_file_form.php @@ -104,10 +104,10 @@ function _get_media($media_id, $size=300) } else { - return ""; + return ""; } } -function _get_default($file_url="") +function _get_default() { return SHM_URLPATH."assets/img/empty.png"; } From 4ad733177848794fa320b3cd9125ab9a25c010ba Mon Sep 17 00:00:00 2001 From: ahaenor Date: Wed, 10 Jul 2019 13:29:49 +0300 Subject: [PATCH 019/220] * More notices bugfixes.; --- class/ShMapper_Assistants.class.php | 2 +- class/ShmForm.class.php | 2 +- tpl/shmMap.php | 13 +++++++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/class/ShMapper_Assistants.class.php b/class/ShMapper_Assistants.class.php index f71483b..d73f222 100644 --- a/class/ShMapper_Assistants.class.php +++ b/class/ShMapper_Assistants.class.php @@ -54,7 +54,7 @@ static function ba_admin_posts_filter_restrict_manage_posts() static function shm_after_request_form( $text ) { - if( !ShMapper::$options['shm_settings_captcha'] ) return $text; + if( empty(ShMapper::$options['shm_settings_captcha']) ) return $text; //require_once( SHM_REAL_PATH .'assets/recaptcha-php-1.11/recaptchalib.php'); // Register API keys at https://www.google.com/recaptcha/admin $siteKey = ShMapper::$options['shm_captcha_siteKey']; diff --git a/class/ShmForm.class.php b/class/ShmForm.class.php index a544270..d0d2e12 100644 --- a/class/ShmForm.class.php +++ b/class/ShmForm.class.php @@ -571,7 +571,7 @@ static function form($data, $map )
    "; } $html1 .= apply_filters("shm_end_request_form", ""); - $html = $def_mark . $html . $html1 . $att. apply_filters("shm_after_request_form", ""); + $html = $def_mark . $html . $html1 . (empty($att) ? '' : $att) . apply_filters("shm_after_request_form", ""); return $html ; } diff --git a/tpl/shmMap.php b/tpl/shmMap.php index 281254c..1d82f15 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -43,9 +43,18 @@ function draw_shMap($map, $args ) { foreach($include as $term_id) { + if( !$term_id ) { + continue; + } + $term = get_term($term_id); - $color = get_term_meta($term_id, "color", true); - $leg .= "
    " . $term->name . ""; + if( !is_wp_error($term) ) { // echo '
    HERE: '.print_r($include, 1).'
    '; + + $color = get_term_meta($term_id, "color", true); + $leg .= "
    " . $term->name . ""; + + } + } $legend = "
    From 756cb7d3a65161fc4a42fe1c2d5fe157e8a3d4e2 Mon Sep 17 00:00:00 2001 From: Ahaenor Date: Fri, 12 Jul 2019 16:58:39 +0300 Subject: [PATCH 020/220] * Admin notices & bugs fixed. --- class/SMC_Post.php | 23 +++++---- class/ShMapPointType.class.php | 8 +-- class/ShMapperRequest.class.php | 28 +++++++---- class/ShmPoint.class.php | 86 +++++++++++++++++---------------- 4 files changed, 82 insertions(+), 63 deletions(-) diff --git a/class/SMC_Post.php b/class/SMC_Post.php index a5356e4..5e3d946 100644 --- a/class/SMC_Post.php +++ b/class/SMC_Post.php @@ -265,24 +265,29 @@ static function amount_meta($meta_key, $post_ids=-1) */ static function wp_dropdown($params="-1") { - if(!is_array($params)) + if( !is_array($params) ) $params = array(); - $hubs = $params['posts'] ? $params['posts'] : self::get_all($params['args']); + + $hubs = empty($params['posts']) ? + (empty($params['args']) ? array() : self::get_all($params['args'])) : + $params['posts']; + $html = " +
    "; + return $html; + } } \ No newline at end of file diff --git a/class/ShMapperRequest.class.php b/class/ShMapperRequest.class.php index d6f0ac1..bc6fb8e 100644 --- a/class/ShMapperRequest.class.php +++ b/class/ShMapperRequest.class.php @@ -121,29 +121,36 @@ class='shm_type_icon' break; } } + static function view_admin_edit($obj) - { - require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + { + + require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + $SMC_Object_type = SMC_Object_Type::get_instance(); - $bb = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; - foreach($bb as $key=>$value) + $bb = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; + $html = ''; + + foreach($bb as $key => $value) { if($key == 't' || $key == 'class' || $key == 'contacts' || $key == 'notify_user' ) continue; $meta = get_post_meta( $obj->id, $key, true); - $$key = $meta; + +// $$key = $meta; + switch( $value['type'] ) { case "number": $h = ""; break; case "boolean": - $h = "$meta"; + $h = "$meta"; break; case "post": $h = "$meta"; break; default: - $h = ""; + $h = ""; } switch($key) { @@ -168,7 +175,8 @@ static function view_admin_edit($obj) $h = ""; break; } - $html .="
    + + $html .= "
    ".$value['name'] . "
    $h @@ -176,7 +184,9 @@ static function view_admin_edit($obj)
    "; } - echo $html; + + echo empty($html) ? '' : $html; + } static function save_admin_edit($obj) { diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index 0f76509..b089da0 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -3,7 +3,7 @@ class ShmPoint extends SMC_Post { static function init() { - $typee = static::get_type(); +// $typee = static::get_type(); add_action('init', array(__CLASS__, 'add_class'), 14 ); add_action('admin_menu', array(__CLASS__, 'owner_fields'), 20); //bulk-actions @@ -88,7 +88,7 @@ static function view_admin_edit($obj) $h = ""; } - $html .="
    + $html ="
    ".$value['name'] . "
    $h @@ -100,7 +100,9 @@ static function view_admin_edit($obj) $tp = wp_get_object_terms($obj->id, SHM_POINT_TYPE); $term = $tp[0]; $term_id = $term ? $term->term_id : -1; - $html .="
    + + $html = empty($html) ? '' : $html; + $html .= "
    ".__("Map marker type", SHMAPPER). "
    ". $h = ShMapPointType::get_ganre_swicher([ @@ -160,10 +162,11 @@ static function owner_fields_box_func( $post ) $lt = static::get_instance( $post ); echo static::owner_fields_edit($lt, "radio"); } - static function owner_fields_edit($obj = -1, $type="checkbox") + static function owner_fields_edit($obj = false, $type = 'checkbox') { global $wpdb; - $id = $obj == -1 ? -1 : $obj->id; + + $id = $obj && is_object($obj) ? $obj->id : -1; $query = "SELECT map_id FROM ".$wpdb->prefix."point_map WHERE point_id=".$id; $d = $wpdb->get_results($query); $selects = []; @@ -182,8 +185,8 @@ static function owner_fields_edit($obj = -1, $type="checkbox") $html .= " "; @@ -249,20 +252,21 @@ static function fill_views_column($column_name, $post_id) break; case "type": $terms = get_the_terms( $post_id, SHM_POINT_TYPE ); - if($terms[0]->term_id) - foreach($terms as $term) - { - //$term = get_term($obj->get_meta("type"), SHM_POINT_TYPE); - echo ShMapPointType::get_icon($term); - } + if($terms && !empty($terms[0]) && $terms[0]->term_id) { + foreach($terms as $term) { + //$term = get_term($obj->get_meta("type"), SHM_POINT_TYPE); + echo ShMapPointType::get_icon($term); + } + } else { +// $color = get_term_meta($type->term_id, "color", true); $owners = $obj->get_owners(); $map_id = $owners[0]->ID; $diid = get_post_meta($map_id, "default_icon_id", true); $icon = "
    "; echo $icon; @@ -383,14 +387,14 @@ function draw() $longitude = $longitude ? $longitude : 37.8; $zoom = $this->get_meta("zoom"); $zoom = $zoom ? $zoom : 11; - $color = get_term_meta($type->term_id, "color", true); +// $color = get_term_meta($type->term_id, "color", true); $height = get_term_meta($type->term_id, "height", true); $icon = ShMapPointType::get_icon_src( $type->term_id )[0]; - $width = ShMapPointType::get_icon_src( $type->term_id )[2]/ShMapPointType::get_icon_src( $type->term_id )[1] * $this->height ; + $width = ShMapPointType::get_icon_src( $type->term_id )[2]/ShMapPointType::get_icon_src( $type->term_id )[1] * ($height ? absint($height) : 1); //$type = $type->name; //$term_id = $type->term_id; - $html .= " + $html = "
    @@ -400,33 +404,31 @@ function draw()
    "; - $point = $this->body; - $p .= " - var p = {}; - p.post_id = '" . $point->ID . "'; - p.post_title = '" . $post_title . "'; - p.post_content = '" . $post_content . " ID) . "\" class=\"shm-no-uline\">
    " . $location . "
    '; - p.latitude = '" . $latitude . "'; - p.longitude = '" . $longitude . "'; - p.location = '" . $location . "'; - p.draggable = " . (is_admin() ? 1: 0) . "; - p.type = '" . $term_id . "'; - p.height = '" . get_term_meta($term_id, "height", true) . "'; - p.width = '" . get_term_meta($term_id, "width", true) . "'; - p.term_id = '" . $term_id . "'; - p.icon = '" . (ShMapPointType::get_icon_src( $term_id )[0]) . "'; - p.color = '" . get_term_meta($term_id, 'color', true) . "'; - points.push(p); - "; + $point = $this->body; $html .= "
    '; - return $txt.$html; + return $text.$html; + } static function get_recaptcha_form() { diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 847963f..93d622b 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -481,38 +481,38 @@ static function view_form_fields_edit($obj) static function save_admin_edit($obj) { return [ - "map_type" => $_POST['map_type'], + "map_type" => empty($_POST['map_type']) ? '' : $_POST['map_type'], "latitude" => sanitize_text_field($_POST['latitude']), "longitude" => sanitize_text_field($_POST['longitude']), "zoom" => sanitize_text_field($_POST['zoom']), - "is_legend" => $_POST['is_legend'] ? 1 : 0, - "is_filtered" => $_POST['is_filtered'] ? 1 : 0, - "is_csv" => $_POST['is_csv'] ? 1 : 0, - "is_lock" => $_POST['is_lock'] ? 1 : 0, - "is_clustered" => $_POST['is_clustered'] ? 1 : 0, - "is_search" => $_POST['is_search'] ? 1 : 0, - "is_zoomer" => $_POST['is_zoomer'] ? 1 : 0, - "is_layer_switcher" => $_POST['is_layer_switcher'] ? 1 : 0, - "is_fullscreen" => $_POST['is_fullscreen'] ? 1 : 0, + "is_legend" => empty($_POST['is_legend']) ? 0 : 1, + "is_filtered" => empty($_POST['is_filtered']) ? 0 : 1, + "is_csv" => empty($_POST['is_csv']) ? 0 : 1, + "is_lock" => empty($_POST['is_lock']) ? 0 : 1, + "is_clustered" => empty($_POST['is_clustered']) ? 0 : 1, + "is_search" => empty($_POST['is_search']) ? 0 : 1, + "is_zoomer" => empty($_POST['is_zoomer']) ? 0 : 1, + "is_layer_switcher" => empty($_POST['is_layer_switcher']) ? 0 : 1, + "is_fullscreen" => empty($_POST['is_fullscreen']) ? 0 : 1, "default_icon_id" => sanitize_text_field($_POST['default_icon_id']), "width" => sanitize_text_field($_POST['width']), "height" => sanitize_text_field($_POST['height']), - - "is_form" => $_POST['is_form'] ? 1 : 0, + + "is_form" => empty($_POST['is_form']) ? 0 : 1, "form_title" => sanitize_text_field($_POST['form_title']), - "form_contents" => sanitize_textarea_field($_POST['form_contents']), - "notify_owner" => $_POST['notify_owner'] ? 1: 0, - "form_forms" => $_POST['form_forms'], - "is_personal_data" => sanitize_text_field($_POST['is_personal_data']), - "is_name_iclude" => sanitize_text_field($_POST['is_name_iclude']), - "personal_name" => sanitize_text_field($_POST['personal_name']), - "is_name_required" => sanitize_text_field($_POST['is_name_required']), - "is_email_iclude" => sanitize_text_field($_POST['is_email_iclude']), - "personal_email" => sanitize_text_field($_POST['personal_email']), - "is_email_required" => sanitize_text_field($_POST['is_email_required']), - "is_phone_iclude" => sanitize_text_field($_POST['is_phone_iclude']), - "personal_phone" => sanitize_text_field($_POST['personal_phone']), - "is_phone_required" => sanitize_text_field($_POST['is_phone_required']), + "form_contents" => sanitize_textarea_field(empty($_POST['form_contents']) ? '' : $_POST['form_contents']), + "notify_owner" => empty($_POST['notify_owner']) ? 0 : 1, + "form_forms" => empty($_POST['form_forms']) ? '' : $_POST['form_forms'], + "is_personal_data" => sanitize_text_field(empty($_POST['is_personal_data']) ? '' : $_POST['is_personal_data']), + "is_name_iclude" => sanitize_text_field(empty($_POST['is_name_iclude']) ? '' : $_POST['is_name_iclude']), + "personal_name" => sanitize_text_field(empty($_POST['personal_name']) ? '' : $_POST['personal_name']), + "is_name_required" => sanitize_text_field(empty($_POST['is_name_required']) ? '' : $_POST['is_name_required']), + "is_email_iclude" => sanitize_text_field(empty($_POST['is_email_iclude']) ? '' : $_POST['is_email_iclude']), + "personal_email" => sanitize_text_field(empty($_POST['personal_email']) ? '' : $_POST['personal_email']), + "is_email_required" => sanitize_text_field(empty($_POST['is_email_required']) ? '' : $_POST['is_email_required']), + "is_phone_iclude" => sanitize_text_field(empty($_POST['is_phone_iclude']) ? '' : $_POST['is_phone_iclude']), + "personal_phone" => sanitize_text_field(empty($_POST['personal_phone']) ? '' : $_POST['personal_phone']), + "is_phone_required" => sanitize_text_field(empty($_POST['is_phone_required']) ? '' : $_POST['is_phone_required']), ]; } static function post_row_actions($actions, $post) diff --git a/tpl/shmMap.php b/tpl/shmMap.php index 1d82f15..2eb8692 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -72,11 +72,15 @@ function draw_shMap($map, $args ) "includes" => $includes, "col_width" => 2 ], "checkbox", "stroke" ); - } - if($is_csv = $map->get_meta("is_csv")) - { - $csv = ""; - } + } else { + $filters = ''; + } + + $is_csv = $map->get_meta("is_csv"); + if($is_csv) { + $csv = ""; + } + $points = $map->get_map_points(); if($is_filtered || $is_csv) { From d97d536025d20fdbd6d2994b9e37229da9489f85 Mon Sep 17 00:00:00 2001 From: Ahaenor Date: Wed, 17 Jul 2019 20:26:57 +0300 Subject: [PATCH 025/220] * Admin notices & bugs fixed. --- class/ShMapPointType.class.php | 2 +- widget/ShMap.widget.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index ea4a766..2b58d50 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -17,7 +17,7 @@ static function init() } - function before_delete_post( $post_id ) + static function before_delete_post( $post_id ) { global $wpdb; $query = " diff --git a/widget/ShMap.widget.php b/widget/ShMap.widget.php index 80fcf66..55b69c2 100644 --- a/widget/ShMap.widget.php +++ b/widget/ShMap.widget.php @@ -4,7 +4,7 @@ class ShmLocationNavigatorWidget extends WP_Widget { /* Constructor /* ------------------------------------ */ - function ShmLocationNavigatorWidget() + function __construct() { parent::__construct( false, __("Shmapper Locations", SHMAPPER), array('description' => 'Locations accordeon', 'classname' => 'widget_location_navigator') );; add_action( 'init', array($this, 'redirect_login_page')); From 4ac7fb25e7cbbd79c7b727748ac1a0160c832b52 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Sun, 21 Jul 2019 21:47:53 +0200 Subject: [PATCH 026/220] * available marker types selector fixed * marker placement for mobile devices fixed * anti-moderation fixed when recaptcha enabled --- assets/css/ShMapper.css | 4 + assets/js/ShMapper.js | 25 ++++- assets/js/ShMapper.yandex.js | 150 ++++++++++++++------------ assets/js/ShMapper_osm.js | 192 +++++++++++++++++++-------------- class/ShMapPointType.class.php | 2 +- class/ShMapper_ajax.class.php | 54 +++++----- 6 files changed, 250 insertions(+), 177 deletions(-) diff --git a/assets/css/ShMapper.css b/assets/css/ShMapper.css index 8955fa4..9fb9298 100644 --- a/assets/css/ShMapper.css +++ b/assets/css/ShMapper.css @@ -1591,4 +1591,8 @@ input[type=radio].ganre_checkbox2:not(checked) + label img { width:100%; } +} + +.shm-type-icon.shmapperMarkerSelected { + border: 1px solid #111111; } \ No newline at end of file diff --git a/assets/js/ShMapper.js b/assets/js/ShMapper.js index bc62b97..620626b 100644 --- a/assets/js/ShMapper.js +++ b/assets/js/ShMapper.js @@ -23,6 +23,17 @@ function open_media_uploader_image() media_uploader.open(); } +function shmapperIsMobileView() { + var isMobile = false; + + if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) + || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0,4))) { + isMobile = true; + } + + return isMobile; +} + jQuery(document).ready(function($) { @@ -556,4 +567,16 @@ function shm_send( params, type ) } } ); -} \ No newline at end of file +} + +// click marker event for mobiles +jQuery(document).ready(function($) { + if(shmapperIsMobileView()) { + $(".shm-type-icon").click(function(e) { + e.preventDefault(); + $(this).closest('.shm-form-placemarks').find('.shm-type-icon').removeClass('shmapperMarkerSelected'); + $(this).addClass('shmapperMarkerSelected'); + }); + } +}); + diff --git a/assets/js/ShMapper.yandex.js b/assets/js/ShMapper.yandex.js index 374e3b4..35864ec 100644 --- a/assets/js/ShMapper.yandex.js +++ b/assets/js/ShMapper.yandex.js @@ -109,73 +109,7 @@ jQuery(document).ready(function($) }, stop: (evt, ui) => { - $this = $(ui.helper); - var $map_id = $this.parents("form.shm-form-request").attr("form_id"); - map = shm_maps[$map_id]; - // - //console.log(evt.clientX, evt.clientY + window.scrollY); - var globalPixelPoint = map.converter.pageToGlobal( [evt.clientX, evt.clientY + window.scrollY] ); - new_mark_coords = map.options.get('projection').fromGlobalPixels(globalPixelPoint, map.getZoom()); - map.geoObjects.remove(shm_placemark); - var bg = $this.css('background-image'); - if( bg !== "none") - { - bg = bg.replace('url(','').replace(')','').replace(/\"/gi, ""); - shm_paramet = { - balloonMaxWidth: 250, - hideIconOnBalloonOpen: false, - iconLayout: 'default#imageWithContent', - iconShadow:true, - iconImageHref: bg, - iconImageSize:[40,40], - iconImageOffset: [-20, -20], - draggable:true, - term_id:$this.attr("shm_type_id"), - type:'point', - fill:true, - fillColor: "#FF0000", - opacity:0.22 - }; - } - else - { - shm_paramet = { - balloonMaxWidth: 250, - hideIconOnBalloonOpen: false, - iconColor: $this.attr("shm_clr") ? $this.attr("shm_clr"):'#FF0000', - preset: 'islands#dotIcon', - draggable:true, - term_id:$this.attr("shm_type_id"), - type:'point', - fill:true, - fillColor: "#FF0000", - iconShadow:true, - opacity:0.22 - } - } - - shm_placemark = new ymaps.GeoObject({ - geometry: - { - type: 'Point', - coordinates: new_mark_coords, - } - } , - shm_paramet); - - shm_placemark.events.add("dragend", evt => - { - var pos = evt.get("position"); - var globalPixelPoint = map.converter.pageToGlobal( [pos[0], pos[1]] ); - new_mark_coords = map.options.get('projection').fromGlobalPixels(globalPixelPoint, map.getZoom()); - //console.log(pos); - //console.log( evt.originalEvent.target.options.get("type") ); - addAdress( $this, new_mark_coords ); - }); - addAdress( $this, new_mark_coords ); - map.geoObjects.add(shm_placemark); - $this.css({left:0, top:0}).hide().fadeIn("slow"); - $this.parents(".shm-form-placemarks").removeAttr("required").removeClass("shm-alert"); + shmapperPlaceMarkerOnMap(evt, ui); } }); } @@ -360,8 +294,16 @@ jQuery(document).ready(function($) { clusterer.add(myPlacemark); } - else + else myMap.geoObjects.add(myPlacemark); + + myMap.events.add('click', evt => { + $selectedMarker = $('.shm-form-request .shm-type-icon.shmapperMarkerSelected'); + if($selectedMarker.size()) { + shmapperPlaceMarkerOnMap({"clientX": evt.get('domEvent').get('pageX'), "clientY": evt.get('domEvent').get('pageY') - window.scrollY}, {"helper": $selectedMarker}); + } + }); + }) if( mData.isClausterer ) myMap.geoObjects.add(clusterer); if(mData.isAdmin) @@ -399,5 +341,77 @@ jQuery(document).ready(function($) } } + + function shmapperPlaceMarkerOnMap(evt, ui) { + $this = $(ui.helper); + var $map_id = $this.parents("form.shm-form-request").attr("form_id"); + map = shm_maps[$map_id]; + // +// console.log(evt.clientX, evt.clientY + window.scrollY); + var globalPixelPoint = map.converter.pageToGlobal( [evt.clientX, evt.clientY + window.scrollY] ); + new_mark_coords = map.options.get('projection').fromGlobalPixels(globalPixelPoint, map.getZoom()); + map.geoObjects.remove(shm_placemark); + var bg = $this.css('background-image'); + if( bg !== "none") + { + bg = bg.replace('url(','').replace(')','').replace(/\"/gi, ""); + shm_paramet = { + balloonMaxWidth: 250, + hideIconOnBalloonOpen: false, + iconLayout: 'default#imageWithContent', + iconShadow:true, + iconImageHref: bg, + iconImageSize:[40,40], + iconImageOffset: [-20, -20], + draggable:true, + term_id:$this.attr("shm_type_id"), + type:'point', + fill:true, + fillColor: "#FF0000", + opacity:0.22 + }; + } + else + { + shm_paramet = { + balloonMaxWidth: 250, + hideIconOnBalloonOpen: false, + iconColor: $this.attr("shm_clr") ? $this.attr("shm_clr"):'#FF0000', + preset: 'islands#dotIcon', + draggable:true, + term_id:$this.attr("shm_type_id"), + type:'point', + fill:true, + fillColor: "#FF0000", + iconShadow:true, + opacity:0.22 + } + } + + shm_placemark = new ymaps.GeoObject({ + geometry: + { + type: 'Point', + coordinates: new_mark_coords, + } + } , + shm_paramet); + + shm_placemark.events.add("dragend", evt => + { + var pos = evt.get("position"); + var globalPixelPoint = map.converter.pageToGlobal( [pos[0], pos[1]] ); + new_mark_coords = map.options.get('projection').fromGlobalPixels(globalPixelPoint, map.getZoom()); + //console.log(pos); + //console.log( evt.originalEvent.target.options.get("type") ); + addAdress( $this, new_mark_coords ); + }); + addAdress( $this, new_mark_coords ); + map.geoObjects.add(shm_placemark); + $this.css({left:0, top:0}).hide().fadeIn("slow"); + $this.parents(".shm-form-placemarks").removeAttr("required").removeClass("shm-alert"); + + $this.removeClass('shmapperMarkerSelected'); + } }) \ No newline at end of file diff --git a/assets/js/ShMapper_osm.js b/assets/js/ShMapper_osm.js index e92569f..81d97f7 100644 --- a/assets/js/ShMapper_osm.js +++ b/assets/js/ShMapper_osm.js @@ -31,8 +31,10 @@ jQuery(document).ready(function($) { var dat = e.detail; var data = dat[0]; - var map = dat[1]; - eclectMarker.remove(map); + var map = dat[1]; + if(eclectMarker) { + eclectMarker.remove(map); + } }); if($(".shm-type-icon").size()) @@ -54,87 +56,7 @@ jQuery(document).ready(function($) }, stop: function(evt, ui) { - $this = $(ui.helper); - var $map_id = $this.parents("form.shm-form-request").attr("form_id"); - map = shm_maps[$map_id]; - // - - setTimeout(function() - { - - //заполняем формы отправки - var lat = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_lat]"); - var lon = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_lon]"); - var type = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_type]"); - var loc = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_loc]"); - lat.val(eclectCoords[0]); - lon.val(eclectCoords[1]); - type.val($this.attr("shm_type_id")); - // - geocodeService.reverse().latlng(eclectCoords).run(function(error, result) { - //console.log(result.address.Match_addr); - loc.val(result.address.Match_addr).removeClass("hidden").hide().fadeIn("slow"); - }); - - //set marker - var bg = $this.css('background-image'); - if( bg !== "none") - { - bg = bg.replace('url(','').replace(')','').replace(/\"/gi, ""); - s_style = {draggable:true}; - s_style.icon = L.icon({ - iconUrl: bg, - shadowUrl: '', - iconSize: [40, 40], // size of the icon - iconAnchor: [20, 40], // point of the icon which will correspond to marker's location - }); - } - else if($this.attr("shm_clr")) - { - var clr = $this.attr("shm_clr"); - var style = document.createElement('style'); - var iid = $this.attr("shm_type_id"); - style.type = 'text/css'; - style.innerHTML = '.__class'+ iid + ' { color:' + clr + '; }'; - document.getElementsByTagName('head')[0].appendChild(style); - var classes = 'dashicons dashicons-location shm-size-40 __class'+ iid; - var myIcon = L.divIcon({className: classes, iconSize:L.point(30, 40), iconAnchor: [20, 30] });// - s_style = { draggable:true, icon: myIcon }; - } - else - { - s_style = {draggable:true}; - - } - - if(eclectMarker) - { - eclectMarker.remove(map); - } - eclectMarker = L.marker(eclectCoords,s_style).addTo(map); - map.mp.disable(); - eclectMarker.on("dragend touchend", function(evt) - { - //console.log(evt.target._latlng); - eclectCoords = [evt.target._latlng.lat, evt.target._latlng.lng] - //заполняем формы отправки - var lat = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_lat]"); - var lon = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_lon]"); - var type = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_type]"); - var loc = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_loc]"); - lat.val(eclectCoords[0]); - lon.val(eclectCoords[1]); - type.val($this.attr("shm_type_id")); - // - geocodeService.reverse().latlng(eclectCoords).run(function(error, result) { - //console.log(result.address.Match_addr); - loc.val(result.address.Match_addr).removeClass("hidden").hide().fadeIn("slow"); - }); - }) - }, 100); - - $this.css({left:0, top:0}).hide().fadeIn("slow"); - $this.parents(".shm-form-placemarks").removeAttr("required").removeClass("shm-alert"); + shmapperPlaceMarkerOnMap(evt, ui); } }); } @@ -174,6 +96,7 @@ jQuery(document).ready(function($) L.DomEvent.on(myMap, 'mousemove', this.onmousemove, this); L.DomEvent.on(myMap, 'touchmove', this.onmousemove, this); L.DomEvent.on(myMap, 'touchstart', this.ontouchstart, this); + L.DomEvent.on(myMap, 'click', this.onmouseclick, this); }, removeHooks: function() { @@ -194,6 +117,23 @@ jQuery(document).ready(function($) ontouchstart: function(evt) { + }, + onmouseclick: function(evt) + { + eclectCoords = [ + L.Util.formatNum(evt.latlng.lat, 7), + L.Util.formatNum(evt.latlng.lng, 7) + ]; + + $("[name='latitude']").val( L.Util.formatNum(myMap.getCenter().lat )); + $("[name='longitude']").val( L.Util.formatNum(myMap.getCenter().lng )); + $("[name='zoom']").val( myMap.getZoom() ); + + $selectedMarker = $('.shm-form-request .shm-type-icon.shmapperMarkerSelected'); + if($selectedMarker.size()) { + shmapperPlaceMarkerOnMap(evt, {"helper": $selectedMarker}); + } + } }); L.Map.addInitHook('addHandler', 'mp', L.MousePosit); @@ -347,6 +287,92 @@ jQuery(document).ready(function($) } + + function shmapperPlaceMarkerOnMap(evt, ui) { + $this = $(ui.helper); + + var $map_id = $this.parents("form.shm-form-request").attr("form_id"); + map = shm_maps[$map_id]; + + setTimeout(function() + { + + //заполняем формы отправки + var lat = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_lat]"); + var lon = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_lon]"); + var type = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_type]"); + var loc = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_loc]"); + lat.val(eclectCoords[0]); + lon.val(eclectCoords[1]); + type.val($this.attr("shm_type_id")); + // + geocodeService.reverse().latlng(eclectCoords).run(function(error, result) { + //console.log(result.address.Match_addr); + loc.val(result.address.Match_addr).removeClass("hidden").hide().fadeIn("slow"); + }); + + //set marker + var bg = $this.css('background-image'); + if( bg !== "none") + { + bg = bg.replace('url(','').replace(')','').replace(/\"/gi, ""); + s_style = {draggable:true}; + s_style.icon = L.icon({ + iconUrl: bg, + shadowUrl: '', + iconSize: [40, 40], // size of the icon + iconAnchor: [20, 40], // point of the icon which will correspond to marker's location + }); + } + else if($this.attr("shm_clr")) + { + var clr = $this.attr("shm_clr"); + var style = document.createElement('style'); + var iid = $this.attr("shm_type_id"); + style.type = 'text/css'; + style.innerHTML = '.__class'+ iid + ' { color:' + clr + '; }'; + document.getElementsByTagName('head')[0].appendChild(style); + var classes = 'dashicons dashicons-location shm-size-40 __class'+ iid; + var myIcon = L.divIcon({className: classes, iconSize:L.point(30, 40), iconAnchor: [20, 30] });// + s_style = { draggable:true, icon: myIcon }; + } + else + { + s_style = {draggable:true}; + + } + + if(eclectMarker) + { + eclectMarker.remove(map); + } + eclectMarker = L.marker(eclectCoords,s_style).addTo(map); + map.mp.disable(); + eclectMarker.on("dragend touchend", function(evt) + { + //console.log(evt.target._latlng); + eclectCoords = [evt.target._latlng.lat, evt.target._latlng.lng] + //заполняем формы отправки + var lat = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_lat]"); + var lon = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_lon]"); + var type = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_type]"); + var loc = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_loc]"); + lat.val(eclectCoords[0]); + lon.val(eclectCoords[1]); + type.val($this.attr("shm_type_id")); + // + geocodeService.reverse().latlng(eclectCoords).run(function(error, result) { + //console.log(result.address.Match_addr); + loc.val(result.address.Match_addr).removeClass("hidden").hide().fadeIn("slow"); + }); + }) + }, 100); + + $this.css({left:0, top:0}).hide().fadeIn("slow"); + $this.parents(".shm-form-placemarks").removeAttr("required").removeClass("shm-alert"); + + $this.removeClass('shmapperMarkerSelected'); + } }); diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index 2b58d50..cebe136 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -362,7 +362,7 @@ class='$class' } $html .= " - +
    "; return $html; diff --git a/class/ShMapper_ajax.class.php b/class/ShMapper_ajax.class.php index 984c58f..af84bf0 100644 --- a/class/ShMapper_ajax.class.php +++ b/class/ShMapper_ajax.class.php @@ -30,6 +30,32 @@ function __construct() add_action('wp_ajax_shm_set_req-admin', array(__CLASS__, 'shm_ajax3_submit')); } + + static function insert_marker($data) { + $res = ShMapperRequest::insert($data); + + if( !ShMapper::$options['shm_map_marker_premoderation'] ) { + $point = ShmPoint::insert([ + "post_title" => (string)$res->get("post_title"), + "post_name" => (string)$res->get("post_name"), + "post_content" => (string)$res->get_meta("description"), + "latitude" => $res->get_meta("latitude"), + "longitude" => $res->get_meta("longitude"), + "location" => $res->get_meta("location"), + "type" => (int)$res->get_meta("type"), + "map_id" => (int)$res->get_meta("map"), + ]); + + if($attach_id = get_post_thumbnail_id($res->id)) { + set_post_thumbnail($point->id, (int)$attach_id); + } + + SMC_Post::delete($res->id); + } + + return $res; + } + static function shm_ajax3_submit() { /**/ @@ -47,7 +73,7 @@ static function shm_ajax3_submit() switch( $response->success ) { case(true): - $res = ShMapperRequest::insert($data); + $res = static::insert_marker($data); $msg = ShMapper::$options['shm_succ_request_text']; break; default: @@ -58,32 +84,12 @@ static function shm_ajax3_submit() } else { - $res = ShMapperRequest::insert($data); - - if( !ShMapper::$options['shm_map_marker_premoderation'] ) { - $point = ShmPoint::insert([ - "post_title" => (string)$res->get("post_title"), - "post_name" => (string)$res->get("post_name"), - "post_content" => (string)$res->get_meta("description"), - "latitude" => $res->get_meta("latitude"), - "longitude" => $res->get_meta("longitude"), - "location" => $res->get_meta("location"), - "type" => (int)$res->get_meta("type"), - "map_id" => (int)$res->get_meta("map"), - ]); - if($attach_id = get_post_thumbnail_id($res->id)) - { - set_post_thumbnail($point->id, (int)$attach_id); - } - - SMC_Post::delete($res->id); - } - + $res = static::insert_marker($data); $msg = ShMapper::$options['shm_succ_request_text']; } + //load image - if( $res AND $res->id > 1 ) - { + if( $res AND $res->id > 1 ) { } $form = ShmForm::form( get_post_meta( $data['id'], "form_forms", true ), ShmMap::get_instance($data['id']) ); From 194ea9ec05e83aba829ef75f2d6f728c10868a72 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Mon, 22 Jul 2019 18:45:05 +0200 Subject: [PATCH 027/220] * notices fixed * version updated --- README.txt | 5 +++++ assets/js/ShMapper.yandex.js | 17 ++++++++--------- assets/js/ShMapper_osm.js | 2 +- class/ShMapPointType.class.php | 2 +- class/ShmMap.class.php | 20 +++++++++++++------- shmapper.php | 2 +- tpl/shmMap.php | 2 ++ 7 files changed, 31 insertions(+), 19 deletions(-) diff --git a/README.txt b/README.txt index 2bb4b90..2b1e2d3 100644 --- a/README.txt +++ b/README.txt @@ -58,6 +58,11 @@ No questions yet. == Changelog == += 1.2 = +* Post-moderation of markers fixed for forms with enabled reCaptcha. +* Marker setup fixed for mobile screens. +* Other minor fixes. + = 1.1 = * Pre-moderation of markers fixed. * Other minor fixes. diff --git a/assets/js/ShMapper.yandex.js b/assets/js/ShMapper.yandex.js index 35864ec..e00abaf 100644 --- a/assets/js/ShMapper.yandex.js +++ b/assets/js/ShMapper.yandex.js @@ -296,18 +296,17 @@ jQuery(document).ready(function($) } else myMap.geoObjects.add(myPlacemark); - - myMap.events.add('click', evt => { - $selectedMarker = $('.shm-form-request .shm-type-icon.shmapperMarkerSelected'); - if($selectedMarker.size()) { - shmapperPlaceMarkerOnMap({"clientX": evt.get('domEvent').get('pageX'), "clientY": evt.get('domEvent').get('pageY') - window.scrollY}, {"helper": $selectedMarker}); - } - }); - }) if( mData.isClausterer ) myMap.geoObjects.add(clusterer); if(mData.isAdmin) - is_admin(myMap, mData); + is_admin(myMap, mData); + + myMap.events.add('click', evt => { + var $selectedMarker = $('.shm-type-icon.shmapperMarkerSelected'); + if($selectedMarker.size()) { + shmapperPlaceMarkerOnMap({"clientX": evt.get('domEvent').get('pageX'), "clientY": evt.get('domEvent').get('pageY') - window.scrollY}, {"helper": $selectedMarker}); + } + }); } is_admin = function(myMap, mData) { diff --git a/assets/js/ShMapper_osm.js b/assets/js/ShMapper_osm.js index 81d97f7..0f66fcd 100644 --- a/assets/js/ShMapper_osm.js +++ b/assets/js/ShMapper_osm.js @@ -129,7 +129,7 @@ jQuery(document).ready(function($) $("[name='longitude']").val( L.Util.formatNum(myMap.getCenter().lng )); $("[name='zoom']").val( myMap.getZoom() ); - $selectedMarker = $('.shm-form-request .shm-type-icon.shmapperMarkerSelected'); + var $selectedMarker = $('.shm-type-icon.shmapperMarkerSelected'); if($selectedMarker.size()) { shmapperPlaceMarkerOnMap(evt, {"helper": $selectedMarker}); } diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index cebe136..1a3b32e 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -362,7 +362,7 @@ class='$class' } $html .= " - +
    "; return $html; diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 93d622b..a291ac9 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -567,13 +567,17 @@ static function formEditor($data) function get_include_types() { $form_forms = $this->get_meta("form_forms"); - foreach($form_forms as $element) - { - if( $element['type'] == 8 ) - { - return explode(",", $element["placemarks"]); - } + + if($form_forms) { + foreach($form_forms as $element) + { + if( $element['type'] == 8 ) + { + return explode(",", $element["placemarks"]); + } + } } + return false; } function get_csv() @@ -827,9 +831,11 @@ static function get_type_radio($params=-1) $html .= "

    Open Street Map

    "; + $i = 0; + foreach(static::get_map_types()[ 2 ] as $type) { - $selected = $params[ 'selected' ][2][0] ==$type ? " checked " : ""; + $selected = isset($params[ 'selected' ][2][0]) && $params[ 'selected' ][2][0] == $type ? " checked " : ""; $name = $params[ 'name' ]; $id = $params[ 'id' ]; $html .= " diff --git a/shmapper.php b/shmapper.php index 18ddafc..d644e2c 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.1 + * Version: 1.2 * Author: Teplitsa. Technologies for Social Good * Author URI: https://te-st.ru * License: GPL2 diff --git a/tpl/shmMap.php b/tpl/shmMap.php index 2eb8692..5c848b8 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -77,6 +77,8 @@ function draw_shMap($map, $args ) } $is_csv = $map->get_meta("is_csv"); + $csv = ""; + if($is_csv) { $csv = ""; } From 6ae541f5f6223a487ea596c28f778356ddc2938d Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Thu, 25 Jul 2019 08:29:35 +0200 Subject: [PATCH 028/220] * Layer switcher for OSM fixed. * Map owner email notification about new map requests fixed. * Display of marker clouds content fixed. * version changed --- README.txt | 5 ++++ assets/css/ShMapper.css | 36 +++++++++++++++++++++++++ assets/js/ShMapper_osm.js | 47 +++++++++++++++++++++++---------- class/ShMapperRequest.class.php | 8 +++--- class/ShmMap.class.php | 7 ++--- class/ShmPoint.class.php | 11 +++----- shmapper.php | 2 +- tpl/shmMap.php | 7 +++-- 8 files changed, 90 insertions(+), 33 deletions(-) diff --git a/README.txt b/README.txt index 2b1e2d3..5cf88f9 100644 --- a/README.txt +++ b/README.txt @@ -58,6 +58,11 @@ No questions yet. == Changelog == += 1.3 = +* Layer switcher for OSM fixed. +* Map owner email notification about new map requests fixed. +* Display of marker clouds content fixed. + = 1.2 = * Post-moderation of markers fixed for forms with enabled reCaptcha. * Marker setup fixed for mobile screens. diff --git a/assets/css/ShMapper.css b/assets/css/ShMapper.css index 9fb9298..d3ff67c 100644 --- a/assets/css/ShMapper.css +++ b/assets/css/ShMapper.css @@ -1595,4 +1595,40 @@ input[type=radio].ganre_checkbox2:not(checked) + label img .shm-type-icon.shmapperMarkerSelected { border: 1px solid #111111; +} + +/* OSM cloud */ +.leaflet-popup-content .shml-title { +} + +.leaflet-popup-content .shml-popup-post-content { +} + +.shm_container .leaflet-popup .leaflet-popup-content-wrapper .leaflet-popup-content { + overflow: hidden; +} + +.shm_container .leaflet-popup .leaflet-popup-content-wrapper .leaflet-popup-content .shml-body { + overflow: auto; + padding-right: 5px; +} + +.leaflet-popup-content .shml-popup-scroll::-webkit-scrollbar-track +{ + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); + border-radius: 6px; + background-color: #F5F5F5; +} + +.leaflet-popup-content .shml-popup-scroll::-webkit-scrollbar +{ + width: 8px; + background-color: #F5F5F5; +} + +.leaflet-popup-content .shml-popup-scroll::-webkit-scrollbar-thumb +{ + border-radius: 6px; + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); + background-color: #888888; } \ No newline at end of file diff --git a/assets/js/ShMapper_osm.js b/assets/js/ShMapper_osm.js index 0f66fcd..e12c293 100644 --- a/assets/js/ShMapper_osm.js +++ b/assets/js/ShMapper_osm.js @@ -138,16 +138,35 @@ jQuery(document).ready(function($) }); L.Map.addInitHook('addHandler', 'mp', L.MousePosit); } - console.log(mData.mapType); - var shmLayer1 = mData.mapType && "OpenStreetMap" !== mData.mapType - ? L.esri.basemapLayer( mData.mapType) : - L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - { - attribution: 'OpenStreetMap' - }); + //console.log(mData.mapType); + //var shmLayer1 = mData.mapType && + + var possibleMapTypes = mData.isLayerSwitcher ? ['OpenStreetMap', 'Topographic', 'Streets', 'Gray', 'DarkGray', 'Imagery', 'Physical'] : []; + var currentMapTypeIndex = possibleMapTypes.indexOf(mData.mapType); + if (currentMapTypeIndex !== -1) { + possibleMapTypes.splice(currentMapTypeIndex, 1); + } + possibleMapTypes.push(mData.mapType); + + var shmLayers = []; + var shmBaseMaps = {}; + + for(var li in possibleMapTypes) { + + shmBaseMaps[possibleMapTypes[li]] = "OpenStreetMap" !== possibleMapTypes[li] + ? L.esri.basemapLayer( possibleMapTypes[li] ) : + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + { + attribution: 'OpenStreetMap' + }); + + shmLayers.push(shmBaseMaps[possibleMapTypes[li]]); + } + myMap = L.map(mData.uniq, { - layers: [shmLayer1], + //layers: [shmLayer1], + layers: shmLayers, center: [mData.latitude, mData.longitude], zoom: mData.zoom, renderer: L.svg(), @@ -166,8 +185,8 @@ jQuery(document).ready(function($) //layer switcher if(mData.isLayerSwitcher) { - var layerControl = L.control.layerSwitcher({}); - layerControl.addTo(myMap); + var layerControl = L.control.layerSwitcher(); + L.control.layers(shmBaseMaps).addTo(myMap); } if(mData.isMap) myMap.mp.disable(); @@ -220,7 +239,7 @@ jQuery(document).ready(function($) shadowSize : [w, h], // size of the shadow iconAnchor : [w/2, h/2], // point of the icon which will correspond to marker's location shadowAnchor: [0, h], // the same for the shadow - popupAnchor : [-w/4, -w/2] // point from which the popup should open relative to the iconAnchor + popupAnchor : [-w/4, -h/4] // point from which the popup should open relative to the iconAnchor }); } @@ -234,7 +253,7 @@ jQuery(document).ready(function($) } marker = L.marker([ elem.latitude, elem.longitude ], shoptions ) .addTo(dist) - .bindPopup('
    ' + elem.post_title +'
    ' + elem.post_content + '
    '); + .bindPopup('
    ' + '
    ' + elem.post_title +'
    ' + elem.post_content + '
    '); } else if( mData.default_icon && !elem.color ) @@ -251,7 +270,7 @@ jQuery(document).ready(function($) }; marker = L.marker([ elem.latitude, elem.longitude ], shoptions ) .addTo(dist) - .bindPopup('
    ' + elem.post_title +'
    ' + elem.post_content + '
    '); + .bindPopup('
    ' + '
    ' + elem.post_title +'
    ' + elem.post_content + '
    '); } else @@ -268,7 +287,7 @@ jQuery(document).ready(function($) {draggable : elem.draggable,icon: myIcon, term_id: elem.term_id} ) .addTo(dist) - .bindPopup('
    ' + elem.post_title +'
    ' + elem.post_content + '
    '); + .bindPopup('
    ' + '
    ' + elem.post_title +'
    ' + elem.post_content + '
    '); } all_markers[mData.uniq].push(marker); if(elem.draggable) diff --git a/class/ShMapperRequest.class.php b/class/ShMapperRequest.class.php index a5b111b..02ff4f5 100644 --- a/class/ShMapperRequest.class.php +++ b/class/ShMapperRequest.class.php @@ -321,9 +321,8 @@ static function insert($data) { $author_id = $map->get("post_author"); $user = get_user_by("id", $author_id); - $email = "genag1@list.ru";//$user->get('user_email'); + $email = $user->get('user_email'); $semail = get_bloginfo( "admin_email" ); - //$semail1 = "admin@" . substr( get_bloginfo("url"), strpos(get_bloginfo("url"), "://") + 3 ); $suser = $author ? $author : __("Uknown User", SHMAPPER); $site = get_bloginfo("name"); $headers = array( @@ -333,8 +332,9 @@ static function insert($data) $is = wp_mail( $email, sprintf(__("<%s> Request to your Map from [%s] [%s]", SHMAPPER), $site, $suser, $map->get("post_title")) , - $h['contents']. "

    " . - sprintf(__("You may see this %s", SHMAPPER), get_bloginfo("url") . "/wp-admin/edit.php?post_type=shm_request"), + $h['contents']. "\n\n

    " . + sprintf(__("You may see this %s", SHMAPPER), get_bloginfo("url") . "/wp-admin/edit.php?post_type=shm_request") + . "

    ", $headers ); } diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index a291ac9..3881999 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -703,10 +703,7 @@ function get_map_points() { $points = $this->get_points(); $p = []; - $str = [" -"," - -"]; + foreach($points as $point) { $pn = ShmPoint::get_instance($point); @@ -715,7 +712,7 @@ function get_map_points() $pnt = new StdClass; $pnt->ID = $pn->id; $pnt->post_title = $pn->get("post_title"); - $pnt->post_content = str_replace( $str , " " , wp_trim_words($pn->get("post_content"), 20) ); + $pnt->post_content = wpautop( $pn->get("post_content") ); $pnt->latitude = $pn->get_meta("latitude"); $pnt->longitude = $pn->get_meta("longitude"); $pnt->location = $pn->get_meta("location"); diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index 447b729..c0942ac 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -54,6 +54,7 @@ static function view_admin_edit($obj) require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); $SMC_Object_type = SMC_Object_Type::get_instance(); $bb = $SMC_Object_type->object [static::get_type()]; + $html = ""; foreach($bb as $key=>$value) { if($key == 't' || $key == 'class' ) continue; @@ -88,7 +89,7 @@ static function view_admin_edit($obj) $h = ""; } - $html ="
    + $html .="
    ".$value['name'] . "
    $h @@ -371,16 +372,12 @@ function get_owner_list( $before = "", $separator = "
    ", $after = "") } function draw() { - $str = [" -"," - -"]; $mapType = ShmMap::get_map_types()[ ShMapper::$options['map_api'] ][0]; $types = wp_get_object_terms($this->id, SHM_POINT_TYPE); $type = empty($types) ? false : $types[0]; $term_id = $type && $type->term_id ? $type->term_id : -1; $post_title = $this->get("post_title"); - $post_content = str_replace($str, " " , wpautop( wp_trim_words($this->get("post_content"), 20) )); + $post_content = wpautop( $this->get("post_content") ); $location = $this->get_meta("location"); $latitude = $this->get_meta("latitude"); $latitude = $latitude ? $latitude : 55.8; @@ -411,7 +408,7 @@ function draw() p = {}; p.post_id = '" . $point->ID . "'; p.post_title = '" . $post_title . "'; - p.post_content = '" . esc_js($post_content)." ID) . "\" class=\"shm-no-uline\">
    " . $location . "
    '; + p.post_content = '" . html_entity_decode( esc_js($post_content) )." ID) . "\" class=\"shm-no-uline\">
    " . $location . "
    '; p.latitude = '" . $latitude . "'; p.longitude = '" . $longitude . "'; p.location = '" . $location . "'; diff --git a/shmapper.php b/shmapper.php index d644e2c..ff748c1 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.2 + * Version: 1.3 * Author: Teplitsa. Technologies for Social Good * Author URI: https://te-st.ru * License: GPL2 diff --git a/tpl/shmMap.php b/tpl/shmMap.php index 5c848b8..80298a8 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -107,7 +107,7 @@ function draw_shMap($map, $args ) var p = {}; p.post_id = '" . $point->ID . "'; p.post_title = '" . $point->post_title . "'; - p.post_content = '" . $point->post_content . " ID) . "\" class=\"shm-no-uline\">
    " . $point->location . "
    '; + p.post_content = '
    " . html_entity_decode( esc_js($point->post_content) ) . "
    ID) . "\" class=\"shm-no-uline\">
    " . $point->location . "
    '; p.latitude = '" . $point->latitude . "'; p.longitude = '" . $point->longitude . "'; p.location = '" . $point->location . "'; @@ -153,7 +153,7 @@ function draw_shMap($map, $args ) isZoomer : ". ($is_zoomer ? 1 : 0). ", isAdmin : ". (is_admin() ? 1 : 0). ", isMap : true, - default_icon : '$icon', + default_icon : '$icon' }; /* var clear_form = new CustomEvent( @@ -173,6 +173,9 @@ function draw_shMap($map, $args ) init_map( mData, points ); }); + + jQuery(\"\").appendTo('head'); + "; return $html; } \ No newline at end of file From 2f9b39fd65f3d1e6d9792cdf1be783793dce0000 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Thu, 15 Aug 2019 22:43:17 +0200 Subject: [PATCH 029/220] * Marker placement for OSM fixed. * Map selector fixed in widget. * Map selector fixed in map-request edit form. --- README.txt | 5 +++++ assets/js/ShMapper_osm.js | 2 +- class/SMC_Post.php | 17 +++++++++++++---- class/ShMapperRequest.class.php | 1 + class/ShmMap.class.php | 4 +++- shmapper.php | 2 +- widget/ShMap.widget.php | 3 ++- 7 files changed, 26 insertions(+), 8 deletions(-) diff --git a/README.txt b/README.txt index 5cf88f9..5736088 100644 --- a/README.txt +++ b/README.txt @@ -58,6 +58,11 @@ No questions yet. == Changelog == += 1.3.1 = +* Marker placement for OSM fixed. +* Map selector fixed in widget. +* Map selector fixed in map-request edit form. + = 1.3 = * Layer switcher for OSM fixed. * Map owner email notification about new map requests fixed. diff --git a/assets/js/ShMapper_osm.js b/assets/js/ShMapper_osm.js index e12c293..524eed4 100644 --- a/assets/js/ShMapper_osm.js +++ b/assets/js/ShMapper_osm.js @@ -340,7 +340,7 @@ jQuery(document).ready(function($) iconUrl: bg, shadowUrl: '', iconSize: [40, 40], // size of the icon - iconAnchor: [20, 40], // point of the icon which will correspond to marker's location + iconAnchor: [20, 20], // point of the icon which will correspond to marker's location }); } else if($this.attr("shm_clr")) diff --git a/class/SMC_Post.php b/class/SMC_Post.php index 5e3d946..29a9c0c 100644 --- a/class/SMC_Post.php +++ b/class/SMC_Post.php @@ -113,7 +113,7 @@ public function update_meta($name, $value) } public function get($field) { - return $this->body->$field; + return is_object($this->body) ? $this->body->$field : NULL; } function set($field) { @@ -265,13 +265,18 @@ static function amount_meta($meta_key, $post_ids=-1) */ static function wp_dropdown($params="-1") { - if( !is_array($params) ) + if( !is_array($params) ) { $params = array(); + } + if(isset($params["exclude_post_id"]) && !is_array($params["exclude_post_id"])) { + $params["exclude_post_id"] = array($params["exclude_post_id"]); + } + $hubs = empty($params['posts']) ? (empty($params['args']) ? array() : self::get_all($params['args'])) : $params['posts']; - + $html = " - "; - $element['description'] .= __("Drag choosed icon and place it to map.", SHMAPPER); + "; + $element['description'] .= __("Drag choosed icon and place it to map or enter exact address.", SHMAPPER); } break; default: @@ -526,7 +526,7 @@ static function form($data, $map ) $def_mark .= " - + "; } if( $is_personal_data ) diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index c0942ac..38f73b3 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -408,10 +408,10 @@ function draw() p = {}; p.post_id = '" . $point->ID . "'; p.post_title = '" . $post_title . "'; - p.post_content = '" . html_entity_decode( esc_js($post_content) )." ID) . "\" class=\"shm-no-uline\">
    " . $location . "
    '; + p.post_content = '" . html_entity_decode( esc_js($post_content) )." ID) . "\" class=\"shm-no-uline\">
    " . esc_js($location) . "
    '; p.latitude = '" . $latitude . "'; p.longitude = '" . $longitude . "'; - p.location = '" . $location . "'; + p.location = '" . esc_js($location) . "'; p.draggable = ".(is_admin() ? 1 : 0)."; p.type = '" . $term_id . "'; p.height = '" . get_term_meta($term_id, "height", true) . "'; diff --git a/tpl/shmMap.php b/tpl/shmMap.php index 80298a8..6b99921 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -107,10 +107,10 @@ function draw_shMap($map, $args ) var p = {}; p.post_id = '" . $point->ID . "'; p.post_title = '" . $point->post_title . "'; - p.post_content = '
    " . html_entity_decode( esc_js($point->post_content) ) . "
    ID) . "\" class=\"shm-no-uline\">
    " . $point->location . "
    '; + p.post_content = '
    " . html_entity_decode( esc_js($point->post_content) ) . "
    ID) . "\" class=\"shm-no-uline\">
    " . esc_js($point->location) . "
    '; p.latitude = '" . $point->latitude . "'; p.longitude = '" . $point->longitude . "'; - p.location = '" . $point->location . "'; + p.location = '" . esc_js($point->location) . "'; p.type = '" . $point->type . "'; p.term_id = '" . $point->term_id . "'; p.icon = '" . $point->icon . "'; From 6ee842af0031d82fdf823c369fa357f876c20192 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Fri, 30 Aug 2019 09:55:33 +0200 Subject: [PATCH 031/220] + straight geocoding added for OSM --- assets/js/ShMapper.js | 2 + assets/js/ShMapper.yandex.js | 14 ++++-- assets/js/ShMapper_osm.js | 90 ++++++++++++++++++++++++++++-------- class/ShmForm.class.php | 6 +-- 4 files changed, 85 insertions(+), 27 deletions(-) diff --git a/assets/js/ShMapper.js b/assets/js/ShMapper.js index 3510793..af6e427 100644 --- a/assets/js/ShMapper.js +++ b/assets/js/ShMapper.js @@ -579,6 +579,8 @@ jQuery(document).ready(function($) { $shmapperIcons.click(function(e) { e.preventDefault(); $(this).closest('.shm-form-placemarks').find('.shm-type-icon').removeClass('shmapperMarkerSelected'); + $(this).parents("form.shm-form-request").find('input[name="shm_point_loc"]').removeClass("hidden"); + if(!$(this).hasClass('shmapperDragged')) { $(this).addClass('shmapperMarkerSelected'); } diff --git a/assets/js/ShMapper.yandex.js b/assets/js/ShMapper.yandex.js index 8de645d..d7b3b12 100644 --- a/assets/js/ShMapper.yandex.js +++ b/assets/js/ShMapper.yandex.js @@ -92,7 +92,9 @@ jQuery(document).ready(function($) var loc = $this.parents("form.shm-form-request").find("[name=shm_point_loc]"); lat.val(new_mark_coords[0]); lon.val(new_mark_coords[1]); - loc.val(shm_address).removeClass("hidden").hide().fadeIn("slow"); + if(!$this.data("straight_geocoding")) { + loc.val(shm_address).removeClass("hidden").hide().fadeIn("slow"); + } type.val($this.attr("shm_type_id")); }) } @@ -119,7 +121,7 @@ jQuery(document).ready(function($) // place marker by addr function shm_place_marker_by_addr($this) { var addr = $this.val(); -// console.log(addr); + console.log(addr); var $selectedMarker = $this.closest('.shm-form-request').find('.shm-form-placemarks .shm-type-icon.shmapperMarkerSelected'); @@ -137,6 +139,8 @@ jQuery(document).ready(function($) var $map_id = $selectedMarker.parents("form.shm-form-request").attr("form_id"); map = shm_maps[$map_id]; + + $selectedMarker.data("straight_geocoding", "true"); shmapperPlaceMarkerOnMapByCoords(map, new_mark_coords, $selectedMarker); }, function (err) { @@ -149,7 +153,7 @@ jQuery(document).ready(function($) $addrInput.change(function(){ shm_place_marker_by_addr($(this)); }); - $addrInput.keyup(function(e){ + $addrInput.keydown(function(e){ if(e.keyCode == 13){ e.preventDefault(); shm_place_marker_by_addr($(this)); @@ -254,7 +258,7 @@ jQuery(document).ready(function($) { var h = parseInt(elem.height); var w = elem.width ? parseInt(elem.width) : h; - console.log( w, h ); +// console.log( w, h ); paramet = { balloonMaxWidth: 250, balloonItemContentLayout: customItemContentLayout, @@ -457,7 +461,7 @@ jQuery(document).ready(function($) $markerIcon.css({left:0, top:0}).hide().fadeIn("slow"); $markerIcon.parents(".shm-form-placemarks").removeAttr("required").removeClass("shm-alert"); - $markerIcon.removeClass('shmapperMarkerSelected'); + $selectedMarker.data("straight_geocoding", ""); } }) diff --git a/assets/js/ShMapper_osm.js b/assets/js/ShMapper_osm.js index 9e0b4c0..693f770 100644 --- a/assets/js/ShMapper_osm.js +++ b/assets/js/ShMapper_osm.js @@ -62,6 +62,48 @@ jQuery(document).ready(function($) } }); } + + // place marker by addr + function shm_place_marker_by_addr($this) { + var addr = $this.val(); +// console.log(addr); + + var $selectedMarker = $this.closest('.shm-form-request').find('.shm-form-placemarks .shm-type-icon.shmapperMarkerSelected'); + + if(!$selectedMarker.length) { + $selectedMarker = $this.closest('.shm-form-request').find('.shm-form-placemarks .shm-type-icon').first(); + $selectedMarker.addClass('shmapperMarkerSelected'); + } + + geocodeService.geocode().text(addr).run(function(error, result) + { +// console.log("decoded"); +// console.log(result); + + if(result.results[0]) { + new_mark_coords = result.results[0].latlng; +// console.log(new_mark_coords); + + eclectCoords = [new_mark_coords.lat, new_mark_coords.lng]; + + var $map_id = $selectedMarker.parents("form.shm-form-request").attr("form_id"); + $selectedMarker.data("straight_geocoding", "true"); + shmapperPlaceMarkerOnMapByCoords($map_id, $selectedMarker); + } + }); + } + + var $addrInput = $("input[name='shm_point_loc']"); + $addrInput.change(function(){ + shm_place_marker_by_addr($(this)); + }); + $addrInput.keydown(function(e){ + if(e.keyCode == 13){ + e.preventDefault(); + shm_place_marker_by_addr($(this)); + } + }); + // init_map = function(mData, points) { @@ -311,8 +353,13 @@ jQuery(document).ready(function($) function shmapperPlaceMarkerOnMap(evt, ui) { $this = $(ui.helper); - var $map_id = $this.parents("form.shm-form-request").attr("form_id"); + +// console.log(eclectCoords); + shmapperPlaceMarkerOnMapByCoords($map_id, $this); + } + + function shmapperPlaceMarkerOnMapByCoords($map_id, $selectedMarker) { map = shm_maps[$map_id]; setTimeout(function() @@ -325,15 +372,17 @@ jQuery(document).ready(function($) var loc = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_loc]"); lat.val(eclectCoords[0]); lon.val(eclectCoords[1]); - type.val($this.attr("shm_type_id")); + type.val($selectedMarker.attr("shm_type_id")); // - geocodeService.reverse().latlng(eclectCoords).run(function(error, result) { - //console.log(result.address.Match_addr); - loc.val(result.address.Match_addr).removeClass("hidden").hide().fadeIn("slow"); - }); + if(!$selectedMarker.data("straight_geocoding")) { + geocodeService.reverse().latlng(eclectCoords).run(function(error, result) { + //console.log(result.address.Match_addr); + loc.val(result.address.Match_addr).removeClass("hidden").hide().fadeIn("slow"); + }); + } //set marker - var bg = $this.css('background-image'); + var bg = $selectedMarker.css('background-image'); if( bg !== "none") { bg = bg.replace('url(','').replace(')','').replace(/\"/gi, ""); @@ -345,11 +394,11 @@ jQuery(document).ready(function($) iconAnchor: [20, 20], // point of the icon which will correspond to marker's location }); } - else if($this.attr("shm_clr")) + else if($selectedMarker.attr("shm_clr")) { - var clr = $this.attr("shm_clr"); + var clr = $selectedMarker.attr("shm_clr"); var style = document.createElement('style'); - var iid = $this.attr("shm_type_id"); + var iid = $selectedMarker.attr("shm_type_id"); style.type = 'text/css'; style.innerHTML = '.__class'+ iid + ' { color:' + clr + '; }'; document.getElementsByTagName('head')[0].appendChild(style); @@ -380,19 +429,22 @@ jQuery(document).ready(function($) var loc = $("form.shm-form-request[form_id='" + $map_id + "']").find("[name=shm_point_loc]"); lat.val(eclectCoords[0]); lon.val(eclectCoords[1]); - type.val($this.attr("shm_type_id")); + type.val($selectedMarker.attr("shm_type_id")); // - geocodeService.reverse().latlng(eclectCoords).run(function(error, result) { - //console.log(result.address.Match_addr); - loc.val(result.address.Match_addr).removeClass("hidden").hide().fadeIn("slow"); - }); + if(!$selectedMarker.data("straight_geocoding")) { + geocodeService.reverse().latlng(eclectCoords).run(function(error, result) { + //console.log(result.address.Match_addr); + loc.val(result.address.Match_addr).removeClass("hidden").hide().fadeIn("slow"); + }); + } }) + + $selectedMarker.data("straight_geocoding", ""); + }, 100); - $this.css({left:0, top:0}).hide().fadeIn("slow"); - $this.parents(".shm-form-placemarks").removeAttr("required").removeClass("shm-alert"); - - $this.removeClass('shmapperMarkerSelected'); + $selectedMarker.css({left:0, top:0}).hide().fadeIn("slow"); + $selectedMarker.parents(".shm-form-placemarks").removeAttr("required").removeClass("shm-alert"); } }); diff --git a/class/ShmForm.class.php b/class/ShmForm.class.php index 3c093f0..e9fe445 100644 --- a/class/ShmForm.class.php +++ b/class/ShmForm.class.php @@ -477,8 +477,8 @@ static function form($data, $map ) - "; - $element['description'] .= __("Drag choosed icon and place it to map or enter exact address.", SHMAPPER); + "; + $element['description'] .= __("Drag choosed icon and place it to map or click it and enter exact address.", SHMAPPER); } break; default: @@ -526,7 +526,7 @@ static function form($data, $map ) $def_mark .= " - + "; } if( $is_personal_data ) From 3a24b6f583c067aaaee38ddc8b80325a07d73882 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Tue, 3 Sep 2019 07:51:09 +0200 Subject: [PATCH 032/220] * link in admin footer added --- README.txt | 5 ++++ assets/css/ShMapper.css | 14 +++++++++ class/ShMapper.class.php | 2 +- class/ShmAdminPage.class.php | 36 ++++++++++++++++++++++++ languages/shmapper-by-teplitsa-ru_RU.mo | Bin 19904 -> 20021 bytes languages/shmapper-by-teplitsa-ru_RU.po | 6 ++-- shmapper.php | 4 ++- 7 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 class/ShmAdminPage.class.php diff --git a/README.txt b/README.txt index 5736088..1626225 100644 --- a/README.txt +++ b/README.txt @@ -58,6 +58,11 @@ No questions yet. == Changelog == += 1.3.2 = +* Marker placement by address added. +* Marker placement by click added. +* Minor fixes. + = 1.3.1 = * Marker placement for OSM fixed. * Map selector fixed in widget. diff --git a/assets/css/ShMapper.css b/assets/css/ShMapper.css index d3ff67c..db3d199 100644 --- a/assets/css/ShMapper.css +++ b/assets/css/ShMapper.css @@ -1631,4 +1631,18 @@ input[type=radio].ganre_checkbox2:not(checked) + label img border-radius: 6px; -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); background-color: #888888; +} + +/* admin footer */ +.shmapper-admin-footer { + display: block; + margin-top: 16px; + margin-bottom: 8px; +} + +.post-type-shm_map #footer-upgrade, +.post-type-shm_point #footer-upgrade, +.post-type-shm_request #footer-upgrade, +.shmapper_page_shm_settings_page #footer-upgrade { + margin-top: 40px; } \ No newline at end of file diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index 2aa7c31..984a767 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -191,7 +191,7 @@ static function add_shortcodes() static function add_admin_js_script() { //css - wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array()); + wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array(), SHMAPPER_VERSION); wp_enqueue_style( "ShMapper"); //js wp_enqueue_script("jquery"); diff --git a/class/ShmAdminPage.class.php b/class/ShmAdminPage.class.php new file mode 100644 index 0000000..4433066 --- /dev/null +++ b/class/ShmAdminPage.class.php @@ -0,0 +1,36 @@ +parent_base == 'shm_page') { + return $this->get_admin_footer('', $old_footer_html); + } + + return $old_footer_html; + } + + function get_admin_footer($footer_class='', $old_footer_html='') { + ob_start(); + ?> + + + + init_hooks(); \ No newline at end of file diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo index bf42660617bd1c12060e57156e8e4bba6cf8d945..a1b98274b3c9e1dc3429490a99805ed62bf7012e 100644 GIT binary patch delta 3171 zcmXZdc~F&A7{~E*2gL;t5CjyI%W_>12yp@2ury80Ovntk5rJ_5Wke>jNv|5&FpQN@ zmge51DWjQiM@+%Yrb*PiwD?D8la@3onHr;xruO~uzN2$L=bZO!&vVZE^3}%<&o;;5 z(GK?%W6aP{WBTD548iT#9lyYlcml)l9tL2KUdF^ajETZH>X|%L|2*u0%P|#Kqdy+D zpEsZ%_3tnee+o11jt;kI=t;vP^u?fXYoT!LMBRm5FabwnDzdgIMost@2H_^`ihEES zt+DIJZ~*nMQR`gCZultNZHy0vE)muOey9mUkiD2_48#$rffG@Y<{-&1`S$Zws0~!0 z#&1P!U@vN+I@GvEWNmW>71$Lw1*NDJHQ-;=07q}DgC8oQAk@UYQAgxLZ7c&d@nlr$ zUqa23XV+JtGPM>pelu#^9@K{2M<^(=)7Td;q9$xd4S0e{=-0=Xc+5a;cs?ovg{Td# zMNM3RI@>L%40=$Jo6a9c4Eg_VLSCRcoQ2*&pSXVXQSpTLJyYV1Wa-gh?_zQ1?_kPmSYuahv6~Sz!+Rg zJrR@fLsZ1yq82=hI`bb<5ne%U;5LS!iM7r;6m?`SRKJnv*4a&=AhYcUb5UnhWVf$E zU6%Fs^J>&YpP(YFN4>U9s0Evm|K=J$3al$131uJ@HE%SkJu!~_>p{BRFdlUWrlT(7 zV$|*3fZE_T)PkR)F4s|12EIqla}jkUS5W=h?RMXI>u7^f^Q550XT+0#HM~fJBFsUh zW+^Jd*HII_Yr7k@^IBBOPvRJdG3Rj_b-(`1g*mtk4`4P%44@wt;R>~5I!3t%8Z(o^ zOne1vYyrj+_ToQFT)Fic6X-iiX-b*RX3> zQFs8E$8B0E?4qF$S9>lVM{OwLDPyWhZ92}NelEpYxZe;y$JDbh6)RBvPoVD1CFI!6 z1AGSi(MfkG7q!tc^v7-3U+@2ZyTOav`DHA@n@HA8F56TpE0J%D*@c?m1age#40gxc zsL1}qDop3Rl*zNG=f9xFT|;f?4i090)0Mota2OJ#nT_gLiTWUYguU=6@-;T+Q4{}( ze4ET&RKy{qg^#F7LtcH8g<7~2HO`F+V2fS%pj#7Npdf#>JN%6^sCP@V&Ug;?q+W=L zxCVW(1~u*oYJpQ2hAnpe4l0BGTy?IE8G%!AAu7N_>EvH$cbtZa*n(vkn_*436*)#z zhoRVtO8G<7L~$dn4^1&@BUMQD&2Ch`pHT}vLfwt-oR2a*5Z}a{QRIICh08QNi(^Og z3Sl{N{3eN)RueBkMO=*G_^RzYsMPO8U9Kk7>-7(+f1k0|yfIi#eGyKWeX`dZz6h+cMM!s?muxs0h!YE@2A> zV=HQ&`<8AKHrc-Y*m3(&5m(yvT2usopk7ZW`P1zlg5xk7wZQv!`%b%l3OhD{x??RE zhYv9gqq#t1^#0GHkW9k|s0hBn{&>l5_j%sB)v2iGlTjJVMIAvoYGXT4cjj|chOVOK zd2H8R)2#Z_s0=Jt-9=#o1x0ia75N3!PVb=>hl=Q|6Qmll*b3tr33qn@8%Qm}GmvYAklyQn%d zG_rP8=*z)ADapfYy{@P()1BUW?{ROv)BC01x4~QAyx!|^dQW;Aozy(uWAt%)kMPgq lt+SufrLp;KZ$opX9v}ABHLvx0n%5;)Z%PcW^+{@Q{tx(DnhgK| delta 3033 zcmXZdeN0zX9LMqR)kGi^A^0gNg1}FF02L5KKw)O!15{?Hp*3|A9~v2!qAA|_EL*Ah z(@H7q37^t(l3RbsOkHj{T~@BmO#dL2Euoy2HLcbA!@V2(z0SG!p6@x|?>YB!;yvf9 zM(0?O;|?~noH(jx20RDiz@K;Q6%>Kqy`u(}7=Zmp7PQh$^9;5IL z|Nb6)l>R5!ACCph?Rww>7h<_^1;eldHPJnM1f9NSJuwW6us6ozR8+uu*avGc9M_`8 zZ}I!PF`a%BYMyf#fmiyvX5DH0!UavxjtclYGPga%XpHUW4NO60nu{cFC8+zAs0A!Q zjbDLUzRn)?7qbl(isxmzWc=zK_6;8u`%x@!T$_!3G|h zj>l1z3uAR!NCN5%C7~uv#~92*#hZjDa5_%Jh-4CRX*@+kE1r)V@nzHs@1X|%i%T$k z5R1iEQ5k=Pn(zQB)6Y>AXhkjHBC1k9qxSj^YRjAy@3{cF+PlFt@+`0>;@{4JE*u1{p;bW7HaGf;p&+rJ|x=y;iz*s z5p{6qqt><(HP<@SxeB3@Ka7ff9JL#*sOK*E*V|CL+KGx2mFA6)NA)w(I0H&9mkX+1 zDJr=cs6a3I)}t1>9aZf{EOg8cVFmr0L9=Hthc9XkZbTiEyEqO@)6Hsi9rN)%R^rGZ zoPk+1HVyH-j<3-lGt}$_Jc6S!a+vo*6#LFbWnPC$U_B1U5GsLFsESEdqUF0Za%s#$ottg`jrUO{YDJQ;bC`pjs7ejW@IDDysBNEt3cLihMXRw2cVZcK zVj<>cdU0y;1Nv?=jX5+*Io(>(#~7ltXK@<+nWMY`hcJ)+HO$7iEbsX;)R|d`Y_n~` z33v!~hB}a4vTh8D!gN$ZqrJXsvuSAMi*OmPLaJ^Zs8R+cIf}p;McR8ZZI*0NX57;AO~X z$=0DVZbH77b_RLN?HX$0|4`#1DVq{VL-k8gajGQq+hYHLl{k(5F4P|1!dSeI85l9f zd)4z$0mh*MmSX^`{eC^Fg72U*J&jYb6P4gtUIA@&DY~UJs%g~WQB=U-SnuCJF~-ra zMU{LrD$r-hXT%<$7Lr)toskUGb8}G>ZAG1p-KYw;;0C;bb8%52^?#DaH*DZRj4tvH z*O#ckw=oPKU|)22nPmd1^jWCGRf)V=_B!hMW>nlGxDoH-6s#NX#XW<~9P;nRQ-3w; zO8DaPKq5!C0jp7&+(Bj1?+MQ!CeY7DO<0avP#vZbXFF=bFD812axAOpMSnTA;Re*! zR#WyAT%r0m(b$8`W%*@Z$ycKe%??b&BYyw9?=9bMtXc~gh{>3Ts@zP}A*{w2tVPAy z;QJv4>ARp2QNoj+!8ey6XBcRKFa%7Jxcr)tHK# zaSR?tcEj3m1oK-mCrTMSje~I^a>KTvPIaq)|1zp%9jGmcF83BT6!}zG0jgp(s5lLN z|CryufU3YfzaLYfg%6 Date: Tue, 3 Sep 2019 09:01:05 +0200 Subject: [PATCH 033/220] * lang updated --- class/ShmAdminPage.class.php | 2 +- languages/shmapper-by-teplitsa-ru_RU.mo | Bin 20021 -> 20129 bytes languages/shmapper-by-teplitsa-ru_RU.po | 4 ++++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/class/ShmAdminPage.class.php b/class/ShmAdminPage.class.php index 4433066..317f1fc 100644 --- a/class/ShmAdminPage.class.php +++ b/class/ShmAdminPage.class.php @@ -24,7 +24,7 @@ function get_admin_footer($footer_class='', $old_footer_html='') { ob_start(); ?> - + h?GI{h+ndNaw)!7>P;U%%U(88H-(m9kBqju@F09HR}D#Fa{sO zURdY$??V3U6<(sT1tai%*FWj?gJx%F#Btyp@@FyK{Szl6ld&wK7R}~fe-LH{5z^*i9P&*T#Lz6xDfkseY=aJ`oJ30Og7+P+=03a@4MswKn>tO zr~zMe$9pqvif5^)fek^;cqF#RVpIi7umEpIu5C|ZP$%3?<4SxLRoWKR2~N2F=crrs zCF(+5xxp%ZDz?Lcs0-ww&NmDhn-$>|cqi&}^H39g04a(+*4u*K8yeW50qjMc;3#SU z@1QR9G3tX~AY-tvQ8SC|<5wsK_5L{2`}?Dg=baP=5u|uU_ zjylmA*WZLHRU_&IhfyDFK@Ipr)XYv}JYGVbFL0Ir{&dWypNA<}j=H4}qbg7vq@fWu zqE5UQb#LE5mGBePOwOZbegSoYSl*#+ozQ5ERKv#zHh z7@(mGB%=n9j+$vcsuH77m6`00m!V2LA9cZ{n1{8fr{FF0ZWW%V|23Y)FDOq2zQ>zx z#!E=$f>y%tG?GfxjOL;)Sc7`}R-#T=ht0SZ3vo)4Ka+aYfcM}kJct_L$iDvP#^D_L zrI>?9P!m3j9l5@JLqjwDAF2Y8e4S|keNd&!K;7#C)IBRky>BM!)>S)~x&5n9x2VqT zZ$N$i1$X=q>O5~_EZ4WsXy~~;hq~Ye#sx2 zv>sKV7f~}kgt~CZc?xyQ&Zkg+m0rIj!^0>$7So-WW_AcM^FG{-Roah3 za5^h%3U0vL@Qiazf3pSjpT_CfEz|63tU?|H+nGuI)i}xy&F~~@2LHwZ_+Qiv(&(r% z!%+Q6$RVphy?-sTE^RAbgGW$n=v%kHeU@Lb6l5-zjd@raq@hwhf>gyeqSnA`s1vuM zN_+~R#|v15+p`%Ao<^N0ou&N@PQyF!B5FWW2l8lA*(Erce)J&!{WI`d`oUTngK4y& zKJWu-@x-%}!`G)Qn4!Z&_Q6d?i>d>cY*a55A6?!H2H@9cqAA=KCh1j_2TH z9FMxio3ShI!Yn+39k{-op`jCegStRCOS&fpQ2jhq35!uPU4#>GJ8Fhsp>Ewp9E*XW zyay{#pZ^HCtM)B+$Moy`iWgu|Cz?e=UpP&uft*0@ik(8;nx5PbU1$VqZA?Iw_-=d< z>#+{0wPjpHX+xxd1|Xn!I*Q4@K``O)a0U!s4pBa;K+h5pF0 zF@+P3L0xbTS7(y;6-MI#>U;`^qV8>gXHpf+!l&^@^y*~$h(+?XHcb!9_KH@0LIc!N1bS>^HxlyzYx9EkLmP}yZ(991X3xR9?x>@i@|Cd z*VCxOD16Ty_{{agSs>m3Fp=W{?1u%Ik7dYRvyGU8e??6oVxs@O5Rcklh+5P&sN;_! z6${!n8d{~tFcUvTjWDX%Up#TB(oMoNoa6fITz@yJ67RbHIn>PhO!6x*3^m{i)OA)P zch>GBuju*b7TfLQ^2YUThwIc|-r2^Lw2!*JZiNQ5h|D5P{wJHBdEJWk?#Pp*B8GdTU?*-A#aP~bt9n=wv0SS=98xgPqf`i zeoyqBpzC{EDX;42UdEA8WGm4&m-HuV)M>N*iFP;Fe;KEf2gyQ`MOeFb3(@vVAMgK} z%V|GP>U7B!?!Z#)K=NIm+vNR}s{4@J*U2evA_1aBRYkN_5UrgIQcj}D2C{&>PR5d5 zq?#Ncdo^W!(`hU5@qS*_%ppl+9a&GbJxq8oY&4llULyCCV?^5}6-caXP9JkhV+ z<3!tC^?-n|J+9H1w^tm|RURZ!gfuB^^mN8A9G9cM@%D$xsqWenB>qB}Cgc z@~YSJe+8$|zLE4J*ONbzT3vr6jmJnYvYTj2Bv*JX|0SkPyKVDPI%TA}&CbKL=a75d zzA<G^_Id%6smkRg+XPyL`dEh?GqknW5)GO|2`FT33XcLi@efy`jUcD_d8G X4ulSd4u@V!s+sM7e&3df8^it&{^8XC delta 4413 zcmXxmdwkDT9LMp`GQ(zLHa099+cax)zic8xWVNs*jmRYti%2b9d|j4W?h_)nsoa)J zW+76di%S<>{L#`Q%6e3~dz6P#z24vN*?IWYo|3J=;d*IyyeadUzSb@tPPj=3(`+c@G5r4 zL#T}Xg_=lIV=_jD6EK;aFnSvehNz^XvcHh5&n!x+034i9k{}oA^T}4f- zA!*Q!;xH6bQ5j6f9@r7Nw@pP)13pEiAudCub`xrVa@Rh9+M>5nH~ImUp{rO6>#*Uv zK?G{N7-TM%hz+nS>bm}@g%%*muzTap^M5dt4o#p0HNYCw1U92?v=?>ZVdS269JR7@ zs0>x3e*XvR_aRM#?;}tPYKR)QDQb&SQ4`BWuo89Q zCe(!YpjLJiuf;Q{@h+i${~u;zL^HD#%tlRk6e*K7e_+2$g}aQBQ++iHdG;1vP>HP&049%RrfE zj>=3M)c0Aa6yJinVIFqE$*8Ab1NvKqmuMfypYbs1Ny8odC?C%tne!~2>1ifCQ7h_; zy5X&;$8R`lz(TCVBJ78mNx@2{qb58bi?I|n!MK*ebuDoc?F?*-t56Gm7wd3;J4r<= z{S>vrbEpaYhB2tuoAx>uwP&fQ-*rcAU5+!~_1}%!qC(d{6LtMu_x*CzI4@!}_qY92 z^xU36-S9N>&o1zxmDNoSRuYREI1$yK;rg>&yDw@>2B8k)MAYG(kDBOOR7PJ$ovnT7 zDdithQHsx?PV+g`4==g?u#{kLqfrC3M-7ne+JjLmEI?&u5^9Byp~hL_EJIDa0+sPM zQ^nplaNR%{bb3 z<3ZGf;@g=mC$m{Ng!ZZS!S7pi;B`zp4?Ch)LPZxGLLHhfk!`mt*autiD;=USsEHO~ zeO!xL(Kgrq7&Y;;I30gRvTkFTr82nyd9~O^)b)puUG(fYm2f(KL#^x|EX6D~OsPDH z`u+>lg%?m0`W?xp)g|w#*cn-*4M+WM0qTYHJT}IC$lKUHK#ltyCg}P9lZsXxLtc1` zS~uj;w>;F1XP_?hP%BvN+Lfq*K5~BLzW)h_&|j}xu*V~?5$(yCfwM3S%Q1@k+a4;q z!4YhNRj&OzDuwkq>RM@6ycNfyR=5+jbqBFOR$&pg$_~a`gY2U1#aOIHQf_~v#!2qZ zqV%GfN<}LvMY3;Ys2_fgy3tkC*$8KUl;Sj;hXptq&*IH^V-KDnEJn89GI?e-?r7AC zr(zsF;#}O5{44dF>CoXifqJ}tL0!=7#$e!P=Tg z-j%^0aXm&22%ef9sFeST&9OGKx)xia+P$13JXa|~O<*}DVL57rr%;Em3Ztp3X}0~?1qV) zAa==yVOv~*TEH=EjbFO{TDJvDcAR*S;4=UJ_PP;g(Jz{W%4q-7>;>#YJm%U5aFnZyCy8+yh^_I9(zut< zK5rvlCGI3t$fjR5@R>qr3u?-JuJShK)pX)g;t`_2^*x7M2#$_l()skrj{m1tsf!^N z5-KN&eSXdCHC*EAvvGv0i%o>Kqf`xw_Ex2s;32V>iT%X$L@eyTU!N!; zCUbwkJj~}@qJqfqdxHNsEOYg{FpMZ7UMI?kl|)Tx<0|jtOT;sTUgd{~2}CAQQIpn{AoT) oeGai)Z;S<0-f&;0;Tl&LIm9|uDl(&M#Z(MTS(#Q5p1UgKe-|XRrT_o{ diff --git a/languages/shmapper-by-teplitsa-ru_RU.po b/languages/shmapper-by-teplitsa-ru_RU.po index 8ba8594..bf7f2e0 100644 --- a/languages/shmapper-by-teplitsa-ru_RU.po +++ b/languages/shmapper-by-teplitsa-ru_RU.po @@ -820,3 +820,7 @@ msgstr "Ошибка: форма не связана с картой. Чтобы #: class/ShMap.class.php:1 msgid "Reload page after User send request." msgstr "Перегрузить страницу после того, как юзер отправил форму запроса" + +#: class/ShmAdminPage.class.php:1 +msgid "shMapper developers chat" +msgstr "Чат разработчиков shMapper" From c8799ed4c4fb49ad76d7552284b71ee8405fed45 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 4 Sep 2019 06:57:45 +0200 Subject: [PATCH 034/220] * fix description from form --- assets/js/ShMapper.front.js | 8 +++++++- class/ShMapperRequest.class.php | 2 +- class/ShMapper_ajax.class.php | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/assets/js/ShMapper.front.js b/assets/js/ShMapper.front.js index 2b4d086..c223675 100644 --- a/assets/js/ShMapper.front.js +++ b/assets/js/ShMapper.front.js @@ -42,7 +42,13 @@ jQuery(document).ready(function($) d.append("shm_form_name", $this.find( "[name='shm_form_name']" ).val()); d.append("shm_form_email", $this.find( "[name='shm_form_email']" ).val()); d.append("shm_form_phone", $this.find( "[name='shm_form_phone']" ).val()); - d.append("elem", $this.find( "[name='elem[]']" ).map( function(num,el){ return el.value} ).get() ); + d.append("elem", $this.find( "[name='elem[]']" ).map( function(num,el){ + var val = el.value; + if(val) { + val = String(val).replace(/,/g, "{{shmapper_comma}}"); + } + return val; + } ).get() ); $.each( shm_img, function( key, value ) { d.append( key, value ); diff --git a/class/ShMapperRequest.class.php b/class/ShMapperRequest.class.php index e2c52fb..c20ed79 100644 --- a/class/ShMapperRequest.class.php +++ b/class/ShMapperRequest.class.php @@ -245,7 +245,7 @@ static function insert($data) $author = sanitize_text_field($data['elem'][$key]); if($val['type'] == SHMAPPER_TEXTAREA_TYPE_ID) { - $description .= "

    " . $data['elem'][$key]; + $description .= $data['elem'][$key]; } if($key == 1) { diff --git a/class/ShMapper_ajax.class.php b/class/ShMapper_ajax.class.php index af84bf0..e7d7839 100644 --- a/class/ShMapper_ajax.class.php +++ b/class/ShMapper_ajax.class.php @@ -61,6 +61,9 @@ static function shm_ajax3_submit() /**/ $data = $_POST; $data['elem'] = explode(",", $data['elem']); + foreach($data['elem'] as $i => $v) { + $data['elem'][$i] = str_replace("{{shmapper_comma}}", ",", $v); + } if( ShMapper::$options['shm_settings_captcha'] ) { From 1aafe0ce64a857b3eb5fd1321f3c78d61b1628de Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 4 Sep 2019 07:30:54 +0200 Subject: [PATCH 035/220] * fix --- assets/js/ShMapper_osm.js | 17 +++++++++++++++-- class/ShmForm.class.php | 30 +++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/assets/js/ShMapper_osm.js b/assets/js/ShMapper_osm.js index 693f770..4cd516d 100644 --- a/assets/js/ShMapper_osm.js +++ b/assets/js/ShMapper_osm.js @@ -273,6 +273,8 @@ jQuery(document).ready(function($) { var h = parseInt(elem.height); var w = elem.width ? parseInt(elem.width) : h; +// console.log(String(w) + ' x ' + h); + if(!icons[elem.term_id]) { icons[elem.term_id] = L.icon({ @@ -387,11 +389,22 @@ jQuery(document).ready(function($) { bg = bg.replace('url(','').replace(')','').replace(/\"/gi, ""); s_style = {draggable:true}; + + var icon_width = $selectedMarker.data('icon-width'); + var icon_height = $selectedMarker.data('icon-height'); + + if(!icon_width) { + icon_width = 40; + } + if(!icon_height) { + icon_height = 40; + } + s_style.icon = L.icon({ iconUrl: bg, shadowUrl: '', - iconSize: [40, 40], // size of the icon - iconAnchor: [20, 20], // point of the icon which will correspond to marker's location + iconSize: [icon_width, icon_height], // size of the icon + iconAnchor: [icon_width / 2, icon_height / 2], // point of the icon which will correspond to marker's location }); } else if($selectedMarker.attr("shm_clr")) diff --git a/class/ShmForm.class.php b/class/ShmForm.class.php index e9fe445..97ec300 100644 --- a/class/ShmForm.class.php +++ b/class/ShmForm.class.php @@ -450,25 +450,41 @@ static function form($data, $map ) { $clr = get_term_meta($term_id, "color", true); $icon = ShMapPointType::get_icon_src($term_id)[0]; + if($icon) { + $icon_width = get_term_meta( $term_id, "width", true ); + $icon_height = get_term_meta( $term_id, "height", true ); $icons .= " -

    +
    "; } else { $diid = $map->get_meta("default_icon_id"); $icon = wp_get_attachment_image_src($diid, [60, 60])[0]; - if(!$icon) - $icon = ShMapper::$options['map_api'] == 2 - ? "https://unpkg.com/leaflet@1.3.4/dist/images/marker-icon.png" - : SHM_URLPATH . 'assets/img/ym_default.png'; + if(!$icon) { + if(ShMapper::$options['map_api'] == 2) { + $icon = "https://unpkg.com/leaflet@1.3.4/dist/images/marker-icon.png"; // 25 x 41 + $icon_width = 25; + $icon_height = 41; + } + else { + $icon = SHM_URLPATH . 'assets/img/ym_default.png'; // 34 x 41 + $icon_width = 34; + $icon_height = 41; + } + } + else { + $icon_width = 25; + $icon_height = 41; + } + $icons .= !$icon ? " -
    +
    " : - "
    "; + "
    "; } } $html1 .= " From 7a43b0e9bf51bae4abf6abfc79d72b2c77431069 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 4 Sep 2019 07:41:26 +0200 Subject: [PATCH 036/220] * yandex maps warning fix --- assets/js/ShMapper.yandex.js | 2 +- assets/js/ShMapper_osm.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/assets/js/ShMapper.yandex.js b/assets/js/ShMapper.yandex.js index d7b3b12..262be0e 100644 --- a/assets/js/ShMapper.yandex.js +++ b/assets/js/ShMapper.yandex.js @@ -461,7 +461,7 @@ jQuery(document).ready(function($) $markerIcon.css({left:0, top:0}).hide().fadeIn("slow"); $markerIcon.parents(".shm-form-placemarks").removeAttr("required").removeClass("shm-alert"); - $selectedMarker.data("straight_geocoding", ""); + $markerIcon.data("straight_geocoding", ""); } }) diff --git a/assets/js/ShMapper_osm.js b/assets/js/ShMapper_osm.js index 4cd516d..70a9b2e 100644 --- a/assets/js/ShMapper_osm.js +++ b/assets/js/ShMapper_osm.js @@ -431,6 +431,10 @@ jQuery(document).ready(function($) } eclectMarker = L.marker(eclectCoords,s_style).addTo(map); map.mp.disable(); + eclectMarker.on("dragstart", function(evt){ + console.log(evt); + }); + eclectMarker.on("dragend touchend", function(evt) { //console.log(evt.target._latlng); From a52d92bdc66c08ef17c5f815825031c36f985980 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 4 Sep 2019 07:45:28 +0200 Subject: [PATCH 037/220] * stable tag changed --- README.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.txt b/README.txt index 1626225..f2724bd 100644 --- a/README.txt +++ b/README.txt @@ -6,7 +6,7 @@ Tags: map, OpenStreetMap, OSM, yandex.map, crowdsourcing, карта, Яндек Requires at least: 3.6.1 Tested up to: 5.2.2 Requires PHP: 5.6 -Stable tag: trunk +Stable tag: 1.3.1 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html From 40b3167ee8633cb4051d856c65831b7557ef1327 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 4 Sep 2019 08:10:14 +0200 Subject: [PATCH 038/220] * disable gutenberg for marker edit --- shmapper.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/shmapper.php b/shmapper.php index f49dc2d..795c5fc 100644 --- a/shmapper.php +++ b/shmapper.php @@ -104,4 +104,12 @@ function shm_is_session() { require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); return is_plugin_active( 'wp-session-manager/wp-session-manager.php' ) ; -} \ No newline at end of file +} + +function shmapper_prefix_disable_gutenberg($current_status, $post_type) { + if(in_array($post_type, array(SHM_POINT))) { + return false; + } + return $current_status; +} +add_filter('use_block_editor_for_post_type', 'shmapper_prefix_disable_gutenberg', 10, 2); From 703c1fc00c732b21ec4e48c2295aa8213a9df474 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 4 Sep 2019 08:56:07 +0200 Subject: [PATCH 039/220] * URL path fix --- shmapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shmapper.php b/shmapper.php index 795c5fc..ffd19fd 100644 --- a/shmapper.php +++ b/shmapper.php @@ -46,7 +46,7 @@ function init_textdomain_shmapper() add_action('plugins_loaded', 'init_textdomain_shmapper'); //Paths -define('SHM_URLPATH', WP_PLUGIN_URL.'/shmapper-by-teplitsa/'); +define('SHM_URLPATH', WP_PLUGIN_URL.'/' . plugin_basename(dirname(__FILE__)) . '/'); define('SHM_REAL_PATH', WP_PLUGIN_DIR.'/'.plugin_basename(dirname(__FILE__)).'/'); define('SHMAPPER', 'shmapper-by-teplitsa'); define('SHM_MAP', 'shm_map'); From 7990178a35d676cadbafedc46b34a14a1d979d18 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 4 Sep 2019 10:10:33 +0200 Subject: [PATCH 040/220] * fix --- class/ShmForm.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/class/ShmForm.class.php b/class/ShmForm.class.php index 97ec300..72c08c5 100644 --- a/class/ShmForm.class.php +++ b/class/ShmForm.class.php @@ -476,8 +476,8 @@ static function form($data, $map ) } } else { - $icon_width = 25; - $icon_height = 41; + $icon_width = ""; + $icon_height = ""; } $icons .= !$icon ? " From 15479d4209328f96e4f13dd192dc680ff64f5e5c Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 4 Sep 2019 10:12:06 +0200 Subject: [PATCH 041/220] * lang updated --- languages/shmapper-by-teplitsa-ru_RU.mo | Bin 20129 -> 20923 bytes languages/shmapper-by-teplitsa-ru_RU.po | 1365 +++++++++++++---------- 2 files changed, 760 insertions(+), 605 deletions(-) diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo index 4489f407aaa0e53d13a02fedbd96f779d826065e..5fe0c11c0b1f79589aea94488e9762f1326cd210 100644 GIT binary patch delta 8444 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 Kp8Kafi~kd4=xa6r delta 7694 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\n" -"Language-Team: genagl\n" +"PO-Revision-Date: 2019-09-04 06:14:53+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: GlotPress/2.4.0-alpha\n" "Language: ru\n" -"\"\"X-Poedit-SourceCharset: UTF-8\n" -"X-Generator: Poedit 2.0.5\n" -"PO-Revision-Date: \n" +"Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" -#: class/shmapper.php:1 -msgid "Location and logistics services for NKO" -msgstr "Картографирование на службе НКО" +#: class/ShmAdminPage.class.php:27 +msgid "shMapper developers chat" +msgstr "Чат разработчиков shMapper" -#: class/shmapper.php:1 -msgid "Double" -msgstr "Дублировать" +#: class/ShmForm.class.php:497 +msgid "Drag choosed icon and place it to map or click it and enter exact address." +msgstr "Перетащите выбранную иконку в нужное место Карты или кликните по ней и введите точный адрес." -#: class/shmapper.php:1 -msgid "Adress" -msgstr "Адрес" +#: assets/js/ShMapper.front.js:9 +msgid "Error: no map" +msgstr "Ошибка: нет карты" -#: class/shmapper.php:1 -msgid "Maps Manager" -msgstr "Менеджер карт" +#: widget/ShMap.widget.php:64 +msgid "Tite" +msgstr "Название" -#: class/shmapper.php:1 -msgid "Map API" -msgstr "API карт" +#: widget/ShMap.widget.php:17 +msgid "Player Cabinet" +msgstr "Кабинет" -#: class/shmapper.php:1 -msgid "Yandex Map" -msgstr "Яндекс карты" +#: widget/ShMap.widget.php:16 +msgid "Ermak Locations" +msgstr "Области Ermak" -#: class/shmapper.php:1 -msgid "Open Street Map" -msgstr "Open Street Map" +#: widget/ShMap.widget.php:9 +msgid "Shmapper Locations" +msgstr "Области Shmapper" -#: class/shmapper.php:1 -msgid "What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s." -msgstr "Что такое Google reCAPTCHA? Как получить ключи для сайта? Смотрите %sэту инстукцию%s." +#: tpl/shmMap.php:83 +msgid "download %s.csv" +msgstr "скачать %s.csv" -#: class/shmapper.php:1 -msgid "Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha" -msgstr "Ваша Капча пока не работает. Для включения этой функции получите ключи API на google.com/recaptch" +#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 +msgid "Submit" +msgstr "Отправить" -#: class/shmapper.php:1 -msgid "We give a guarantee of the full confidentiality of your data, in accordance with Federal Law No. 152-FZ of July 27, 2006. By clicking send you consent to the processing of personal data contained in the request and the attached documents." -msgstr "Даем гарантию полной конфидециальности Ваших данных, в соответствии с Федеральным законом от 27.07.2006 года №152-ФЗ. Нажав отправить Вы даете согласие на обработку персональных данных содержащихся в запросе и прилагаемых документах." +#: tpl/input_file_form.php:77 +msgid "Insert" +msgstr "Вставить" -#: class/shmapper.php:1 -msgid "Your message was successfully delivered. You can observe the reaction of the Administration at the bottom of this form on this page." -msgstr "Ваше сообщение успешно доставлено. Вы можете наблюдать реакцию Администрации в нижней части данной формы на этой странице." +#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 +msgid "Remove" +msgstr "Удалить" -#: class/shmapper.php:1 -msgid "Unknown error." -msgstr "Неизвестная ошибка." +#: tpl/input_file_form.php:72 +msgid "Browse" +msgstr "Просмотр" -#: class/shmapper.php:1 -msgid "Interactive" -msgstr "Интерактив" +#: tpl/input_file_form.php:66 +msgid "File" +msgstr "Файл" -#: class/shmapper.php:1 -msgid "Third-party users can use the marker creation form to mark the markers on the map." -msgstr "Сторонние пользователи могут наносить маркеры на карту с помощью формы создания сообщений." +#: tpl/input_file_form.php:64 +msgid "Upload Image" +msgstr "Загрузить изображение" -#: class/shmapper.php:1 -msgid "Protection" -msgstr "Защита" +#: class/ShmPoint.class.php:312 +msgid "Address" +msgstr "Адрес" -#: class/shmapper.php:1 -msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" -msgstr "Включать капчу в форме (плагин использует только ключи reCAPTCHA v2)" +#: class/ShmPoint.class.php:158 +msgid "Map owner" +msgstr "Родительская карта" -#: class/shmapper.php:1 -msgid "Pre-modertion from Map owner." -msgstr "Премодерация со стороны владельца Карты." +#: class/ShmPoint.class.php:33 +msgid "no found Map marker in trash" +msgstr "Маркеры в корзине не найдены" -#: class/shmapper.php:1 -msgid "This required field" -msgstr "Обязательно для заполнения" +#: class/ShmPoint.class.php:32 +msgid "Map marker not found" +msgstr "Маркер не найден" -#: class/shmapper.php:1 -msgid "Latitude" -msgstr "Широта" +#: class/ShmPoint.class.php:31 +msgid "search Map marker" +msgstr "искать Маркер" -#: class/shmapper.php:1 -msgid "Longitude" -msgstr "Долгота" +#: class/ShmPoint.class.php:30 +msgid "view Map marker" +msgstr "смотреть Маркер" -#: class/shmapper.php:1 -msgid "Type" -msgstr "Тип" +#: class/ShmPoint.class.php:29 +msgid "all Map markers" +msgstr "Маркеры" -#: class/shmapper.php:1 -msgid "Approved" -msgstr "Согласован" +#: class/ShmPoint.class.php:27 +msgid "edit Map marker" +msgstr "редактировать Маркер" -#: class/shmapper.php:1 -msgid "Zoom" -msgstr "Увеличение" +#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 +#: class/ShmPoint.class.php:28 +msgid "add Map marker" +msgstr "Добавить новый" -#: class/shmapper.php:1 -msgid "Legend exists" -msgstr "Легенда присутствует" +#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 +msgid "Map marker" +msgstr "Маркер" -#: class/shmapper.php:1 -msgid "Filters exists" -msgstr "Панель фильтров присутствует" +#: class/ShMapper_Assistants.class.php:90 +msgid "Your requests to this Map " +msgstr "Ваши запросы к этой карте" -#: class/shmapper.php:1 -msgid "Export csv" -msgstr "Загрузка сводки в формате csv" +#: class/ShMapper_Assistants.class.php:44 +msgid "all maps" +msgstr "все карты" -#: class/shmapper.php:1 -msgid "Form exists" -msgstr "Форма присутствует" +#: class/SMC_Post.php:631 class/SMC_Post.php:636 +msgid "Parameters" +msgstr "Параметры" -#: class/shmapper.php:1 -msgid "Form Title" -msgstr "Заголовок Формы" +#: class/SMC_Post.php:566 +msgid "Yes" +msgstr "Да" -#: class/shmapper.php:1 -msgid "start whrite default text here" -msgstr "напишите изначальный текст" +#: class/SMC_Post.php:563 +msgid "No" +msgstr "Нет" -#: class/shmapper.php:1 -msgid "Form Content" -msgstr "содержимое Формы" +#: class/SMC_Post.php:560 +msgid "— No Change —" +msgstr "— Без изменений —" -#: class/ShMap.class.php:1 -msgid "Maps Settings" -msgstr "Настройки карт" +#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 +#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 +msgid "Usage in Maps: " +msgstr "Используется в Картах: " -#: class/ShMap.class.php:1 -msgid "Map" -msgstr "Карта" +#: class/ShmMap.class.php:780 +msgid "Succesfuly delete map and %s points migrates to %s" +msgstr "Карта успешно удалена и %s точек перенесено в %s" -#: class/ShMap.class.php:1 -msgid "add Map" -msgstr "Добавить новую" +#: class/ShmMap.class.php:773 +msgid "Succesfuly delete map and %s points are orphans now" +msgstr "Карта успешно удалена и %s точек сейчас не привязаны ни к какой карте" -#: class/ShMap.class.php:1 -msgid "edit Map" -msgstr "редактировать Карту" +#: class/ShmMap.class.php:768 +msgid "Succesfuly delete map width %s points" +msgstr "Карта успешно удалена с %s точками" -#: class/ShMap.class.php:1 -msgid "all Maps" -msgstr "Карты" +#: class/ShmMap.class.php:682 +msgid "Switch all Points to anover Map" +msgstr "Перенести все Маркеры на другую Карту" -#: class/ShMap.class.php:1 -msgid "all maps" -msgstr "все карты" +#: class/ShmMap.class.php:676 +msgid "Escape all Points without Owner Map" +msgstr "Оставить все Маркеры без родительской Карты" -#: class/ShMap.class.php:1 -msgid "Maps" -msgstr "Карты" +#: class/ShmMap.class.php:670 +msgid "Delete all Points" +msgstr "Удалить все Маркеры" -#: class/ShMap.class.php:1 -msgid "view Map" -msgstr "смотреть Карту" +#: class/ShmMap.class.php:665 +msgid "What do with placemarks of deleting Map?" +msgstr "Что делать с Маркерами удаляемой Карты?" -#: class/ShMap.class.php:1 -msgid "search Map" -msgstr "искать Карту" +#: class/ShmMap.class.php:521 class/SMC_Post.php:496 +msgid "Double" +msgstr "Дублировать" -#: class/ShMap.class.php:1 -msgid "Map not found" -msgstr "Карт не найдено" +#: class/ShmMap.class.php:450 +msgid "Personal email" +msgstr "Адрес электронной почты" -#: class/ShMap.class.php:1 -msgid "no found Map in trash" -msgstr "Карт в корзине не найдено" +#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 +#: class/ShmMap.class.php:471 +msgid "Required" +msgstr "Обязателен" -#: class/ShMap.class.php:1 -msgid "edit Maps in page" -msgstr "редактировать Карты на странице" +#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 +#: class/ShmMap.class.php:461 +msgid "Include" +msgstr "Включать" -#: class/ShMap.class.php:1 -msgid "Map Request" -msgstr "Карт-запрос" +#: class/ShmMap.class.php:426 +msgid "2.5. What data users will have to put?" +msgstr "2.5. Какие данные пользователи должны будут ставить?" -#: class/ShMap.class.php:1 -msgid "add Map Request" -msgstr "Добавить новый" +#: class/ShmMap.class.php:418 +msgid "2.4. Can users leave their contact information?" +msgstr "2.4. Могут ли пользователи оставлять свою контактную информацию?" -#: class/ShMap.class.php:1 -msgid "all Map Requests" -msgstr "Карт-запросы" +#: class/ShmMap.class.php:409 +msgid "You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;" +msgstr "Вы можете создавать собственные формы, используя элементы формы: «Строка текста», «Поле текста», «Загрузка файлов», «Категории Маркеров»" -#: class/ShMap.class.php:1 -msgid "edit Map Request" -msgstr "редактировать Карт-запрос" +#: class/ShmMap.class.php:406 +msgid "2.3. What information can users enter?" +msgstr "2.3. Какую информацию могут вводить пользователи?" -#: class/ShMap.class.php:1 -msgid "view Map Request" -msgstr "смотреть Карт-запрос" +#: class/ShmMap.class.php:398 +msgid "2.2. Will I notify the author about new posts?" +msgstr "2.2. Оповещать ли автора Карты о новых сообщениях?" -#: class/ShMap.class.php:1 -msgid "search Map Request" -msgstr "искать Карт-запрос" +#: class/ShmMap.class.php:392 +msgid "For example «All beaches by the river»" +msgstr "Например «Все пляжи у реки»" -#: class/ShMap.class.php:1 -msgid "Map Request not found" -msgstr "Карт-запросы не найдены" +#: class/ShmMap.class.php:388 +msgid "2.1. What is the name of your information form?" +msgstr "2.1. Как называется Ваша форма сбора информации?" -#: class/ShMap.class.php:1 -msgid "no found Map Request in trash" -msgstr "Карт-запросы в корзине не найдены" +#: class/ShmMap.class.php:383 +msgid "Enable crowdsourcing function (free add Users new Markers)" +msgstr "Включить функцию краудсорсинга (свободного добавления Пользователями новых Маркеров) " -#: class/ShMap.class.php:1 -msgid "Map marker" -msgstr "Маркер" +#: class/ShmMap.class.php:351 +msgid "Recommended size is 64х64 px, format is .png" +msgstr "Рекомендуемый размер: 64х64 pxб формат .png" -#: class/ShMap.class.php:1 -msgid "add Map marker" -msgstr "Добавить новый" +#: class/ShmMap.class.php:346 +msgid "1.7. Default Marker icon" +msgstr "1.7. Иконка маркера по умолчанию" -#: class/ShMap.class.php:1 -msgid "edit Map marker" -msgstr "редактировать Маркер" +#: class/ShmMap.class.php:335 +msgid "1.6. Will Marker type filter be displayed?" +msgstr "1.6. Будет ли отображаться панель фильтрации по типам Маркеров?" -#: class/ShMap.class.php:1 -msgid "all Map markers" -msgstr "Маркеры" +#: class/ShmMap.class.php:324 +msgid "1.5. Will the legend be displayed?" +msgstr "1.5. Будет ли отображаться легенда?" -#: class/ShMap.class.php:1 -msgid "Map markers" -msgstr "Маркеры" +#: class/ShmMap.class.php:313 +msgid "1.4. May User download data in *.csv?" +msgstr "1.4. Можно ли скачать данные карты в формате .csv?" -#: class/ShMap.class.php:1 -msgid "view Map marker" -msgstr "смотреть Маркер" +#: class/ShmMap.class.php:299 +msgid "Choose layers" +msgstr "Выбор типа визуализации слоя" -#: class/ShMap.class.php:1 -msgid "search Map marker" -msgstr "искать Маркер" +#: class/ShmMap.class.php:277 +msgid "Map zoom slider enabled" +msgstr "Ползунок масштаба" -#: class/ShMap.class.php:1 -msgid "Map marker not found" -msgstr "Маркер не найден" +#: class/ShmMap.class.php:269 +msgid "1.3. Include interface" +msgstr "1.3. Какие элементы управления картой должны присутствовать?" -#: class/ShMap.class.php:1 -msgid "GEO location" -msgstr "гео-позиция" +#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 +msgid "Empty for " +msgstr "Оставьте пустым, чтобы было " -#: class/ShMap.class.php:1 -msgid "shortcodes" -msgstr "шорткоды" +#: class/ShmMap.class.php:249 +msgid "1.2. Set size for map's div (per pixels)" +msgstr "1.2. Установите размер окна карты (в пикселях)" -#: class/ShMap.class.php:1 -msgid "include all (map and request form)" -msgstr "включено все(карта и Форма запроса)" +#: class/ShmMap.class.php:237 +msgid "1.1. Pan map and choose zoom" +msgstr "1.1. Отцентрируйте карту и выберите масштаб" -#: class/ShMap.class.php:1 -msgid "only map" -msgstr "только карта" +#: class/ShmMap.class.php:212 +msgid "Step 2. May anover Users add information for Map." +msgstr "Шаг 2. Смогут ли другие пользователи добавлять информацию на Вашу карту?" + +#: class/ShmMap.class.php:198 +msgid "You can insert a card into a post or page by copying this shortcode." +msgstr "Вы сможете вставить карту в запись или страницу скопировав этот шорткод" + +#: class/ShmMap.class.php:186 +msgid "Including Map to post" +msgstr "Вставка карты в звпись" -#: class/ShMap.class.php:1 +#: class/ShmMap.class.php:162 msgid "only request form" msgstr "только Форма запроса" -#: class/ShMap.class.php:1 -msgid "Request form" -msgstr "Форма запроса" +#: class/ShmMap.class.php:153 +msgid "only map" +msgstr "только карта" -#: class/ShMap.class.php:1 -msgid "Map marker type" -msgstr "Тип маркера" +#: class/ShmMap.class.php:145 +msgid "include all (map and request form)" +msgstr "включено все(карта и Форма запроса)" -#: class/ShMap.class.php:1 -msgid "Search Map marker type" -msgstr "искать Тип маркера" +#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 +msgid "Map markers" +msgstr "Маркеры" -#: class/ShMap.class.php:1 -msgid "all Map marker types" -msgstr "все Типы маркеров" +#: class/ShmMap.class.php:124 +msgid "shortcodes" +msgstr "шорткоды" -#: class/ShMap.class.php:1 -msgid "Map marker types" -msgstr "Типы маркеров" +#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 +msgid "ID" +msgstr "ID" -#: class/ShMap.class.php:1 -msgid "view Map marker type" -msgstr "смотреть Тип маркера" +#: class/ShmMap.class.php:80 +msgid "no found Map in trash" +msgstr "Карт в корзине не найдено" -#: class/ShMap.class.php:1 -msgid "parent Map marker type" -msgstr "родительский Тип маркера" +#: class/ShmMap.class.php:79 +msgid "Map not found" +msgstr "Карт не найдено" -#: class/ShMap.class.php:1 -msgid "edit Map marker type" -msgstr "редактировать Тип маркера" +#: class/ShmMap.class.php:78 +msgid "search Map" +msgstr "искать Карту" -#: class/ShMap.class.php:1 -msgid "update Map marker type" -msgstr "обновить Тип маркера" +#: class/ShmMap.class.php:77 +msgid "view Map" +msgstr "смотреть Карту" -#: class/ShMap.class.php:1 -msgid "add Map marker type" -msgstr "Добавить новый" +#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 +msgid "all Maps" +msgstr "Карты" -#: class/ShMap.class.php:1 -msgid "new Map marker type name" -msgstr "название нового Типа маркеров" +#: class/ShmMap.class.php:74 +msgid "edit Map" +msgstr "редактировать Карту" -#: class/ShMap.class.php:1 -msgid "Session" -msgstr "Сессия" +#: class/ShmMap.class.php:65 +msgid "Step 1. Set up your map." +msgstr "Шаг 1. Настройте Вашу карту" -#: class/ShMap.class.php:1 -msgid "Notified" -msgstr "Одобрен" +#: class/ShMapPointType.class.php:358 +msgid "None" +msgstr "Никакой" -#: class/ShMap.class.php:1 -msgid "Notify date" -msgstr "Дата одобрения" +#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 +msgid "Color" +msgstr "Цвет" -#: class/ShMap.class.php:1 +#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 +#: class/ShMapPointType.class.php:197 msgid "Icon" msgstr "Иконка" -#: class/ShMap.class.php:1 -msgid "Color" -msgstr "Цвет" - -#: class/ShMap.class.php:1 -msgid "enable" -msgstr "доступно" +#: class/ShMapPointType.class.php:86 +msgid "Name" +msgstr "Название" -#: class/ShMap.class.php:1 -msgid "require" -msgstr "обязательно" +#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 +msgid "Map marker types" +msgstr "Типы маркеров" -#: class/ShMap.class.php:1 -msgid "Label of element" -msgstr "Лейбл элемента" +#: class/ShMapPointType.class.php:49 +msgid "Unique type of every Map markers" +msgstr "Уникальный тип каждого маркера карты" -#: class/ShMap.class.php:1 -msgid "write title" -msgstr "напишите заголовок" - -#: class/ShMap.class.php:1 -msgid "Type of element" -msgstr "Тип элемента" +#: class/ShMapPointType.class.php:42 +msgid "new Map marker type name" +msgstr "название нового Типа маркеров" -#: class/ShMap.class.php:1 -msgid "Placeholder" -msgstr "плейсхолдер" +#: class/ShMapPointType.class.php:41 +msgid "add Map marker type" +msgstr "Добавить новый" -#: class/ShMap.class.php:1 -msgid "write placeholder" -msgstr "напишите плейсхолдер" +#: class/ShMapPointType.class.php:40 +msgid "update Map marker type" +msgstr "обновить Тип маркера" -#: class/ShMap.class.php:1 -msgid "Description" -msgstr "Описание" +#: class/ShMapPointType.class.php:39 +msgid "edit Map marker type" +msgstr "редактировать Тип маркера" -#: class/ShMap.class.php:1 -msgid "write description" -msgstr "напишите описание" +#: class/ShMapPointType.class.php:38 +msgid "parent Map marker type:" +msgstr "Тип маркера родительской карты:" -#: class/ShMap.class.php:1 -msgid "Attantion" -msgstr "Внимание" +#: class/ShMapPointType.class.php:37 +msgid "parent Map marker type" +msgstr "родительский Тип маркера" -#: class/ShMap.class.php:1 -msgid "Send" -msgstr "Послать" +#: class/ShMapPointType.class.php:36 +msgid "view Map marker type" +msgstr "смотреть Тип маркера" -#: class/ShMap.class.php:1 -msgid "Close" -msgstr "Закрыть" +#: class/ShMapPointType.class.php:35 +msgid "all Map marker types" +msgstr "все Типы маркеров" -#: class/ShMap.class.php:1 -msgid "Usage in Maps: " -msgstr "Используется в Картах: " +#: class/ShMapPointType.class.php:34 +msgid "Search Map marker type" +msgstr "искать Тип маркера" -#: class/ShMap.class.php:1 -msgid "Notify owner of Map" -msgstr "Присылать уведомления о новых картах автору" +#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 +#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 +msgid "Map marker type" +msgstr "Тип маркера" -#: class/ShMap.class.php:1 -msgid "Approve" -msgstr "Одобрить" +#: class/ShMapper.class.php:607 +msgid "Prevous step" +msgstr "Предыдущий шаг" -#: class/ShMap.class.php:1 -msgid "Approving" -msgstr "Одобрение" +#: class/ShMapper.class.php:602 class/ShMapper.class.php:608 +msgid "Go to current page" +msgstr "На текущую страницу" -#: class/ShMap.class.php:1 -msgid "Trash" -msgstr "Корзина" +#: class/ShMapper.class.php:601 class/ShMapper.class.php:609 +msgid "Close wizzard" +msgstr "Закрыть навсегда" -#: class/ShMap.class.php:1 -msgid "Approve succesfully and insert new Map marker" -msgstr "Одобрено. Маркер создан" +#: class/ShMapper.class.php:559 +msgid "Restart wizzard" +msgstr "Перезапустить Мастер" -#: class/ShMap.class.php:1 -msgid "Request put to Trash" -msgstr "Запрос отправлен в корзину" +#: class/ShMapper.class.php:556 +msgid "Wizzard" +msgstr "Мастер" -#: class/ShMap.class.php:1 -msgid "Delete %s" -msgstr "Удалён %s" +#: class/ShMapper.class.php:544 +msgid "Error send map request" +msgstr "Сообщение об ошибки регистрации запроса на Маркер" -#: class/ShMap.class.php:1 -msgid "add Map Point" -msgstr "Маркер добавлен" +#: class/ShMapper.class.php:538 +msgid "Successful send map request" +msgstr "Сообщение об успешной регистрации запроса на Маркер" -#: class/ShMap.class.php:1 -msgid "Location" -msgstr "Адрес" +#: class/ShMapper.class.php:532 +msgid "Save personal data garantee" +msgstr "Гарантия сохранения персональных данных" -#: class/ShMap.class.php:1 -msgid "Change Vocabulaty: " -msgstr "Изменён словарь: " +#: class/ShMapper.class.php:528 +msgid "Vocabulary" +msgstr "Словарь" -#: class/ShMap.class.php:1 -msgid "Users can add Placemarks" -msgstr "Пользователи могут добавлять Маркеры" +#: class/ShMapper.class.php:516 +msgid "Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha" +msgstr "Ваша Капча пока не работает. Для включения этой функции получите ключи API на google.com/recaptch" -#: class/ShMap.class.php:1 -msgid "Users don't can add Placemarks" -msgstr "Пользователи не могут добавлять Маркеры" +#: class/ShMapper.class.php:512 +msgid "What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s." +msgstr "Что такое Google reCAPTCHA? Как получить ключи для сайта? Смотрите %sэту инстукцию%s." -#: class/ShMap.class.php:1 -msgid "Pre-moderation o" -msgstr "Пермодерация включена" +#: class/ShMapper.class.php:503 +msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" +msgstr "Включать капчу в форме (плагин использует только ключи reCAPTCHA v2)" -#: class/ShMap.class.php:1 -msgid "Pre-moderation off" -msgstr "Пермодерация отключена" +#: class/ShMapper.class.php:496 +msgid "Protection" +msgstr "Защита" -#: class/ShMap.class.php:1 -msgid "captha added" -msgstr "добавлена капча" +#: class/ShMapper.class.php:484 +msgid "Reload page after User send request." +msgstr "Перегрузить страницу после того, как юзер отправил форму запроса" -#: class/ShMap.class.php:1 -msgid "captcha removed" -msgstr "капча отключена" +#: class/ShMapper.class.php:476 +msgid "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" +msgstr "ВНИМАНИЕ: отключить эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" -#: class/ShMap.class.php:1 -msgid "Set key" -msgstr "Ключ установлен" +#: class/ShMapper.class.php:472 +msgid "все сообщения будут добавляться в статусе «Черновик»" +msgstr "все сообщения будут добавляться в статусе «Черновик»" -#: class/ShMap.class.php:1 -msgid "Vocabulary" -msgstr "Словарь" +#: class/ShMapper.class.php:468 +msgid "Pre-modertion from Map owner." +msgstr "Премодерация со стороны владельца Карты." -#: class/ShMap.class.php:1 -msgid "Save personal data garantee" -msgstr "Гарантия сохранения персональных данных" +#: class/ShMapper.class.php:460 +msgid "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." +msgstr "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." -#: class/ShMap.class.php:1 -msgid "Successful send map request" -msgstr "Сообщение об успешной регистрации запроса на Маркер" +#: class/ShMapper.class.php:456 +msgid "Включить глобальный режим неинтерактивных карт" +msgstr "Включить глобальный режим неинтерактивных карт" -#: class/ShMap.class.php:1 -msgid "Error send map request" -msgstr "Сообщение об ошибки регистрации запроса на Маркер" +#: class/ShMapper.class.php:448 +msgid "Interactive" +msgstr "Интерактив" -#: class/ShMap.class.php:1 -msgid "Uknown User" -msgstr "некто Имярек" +#: class/ShMapper.class.php:439 +msgid "Open Street Map" +msgstr "Open Street Map" -#: class/ShMap.class.php:1 -msgid "<%s> Request to your Map from [%s] [%s]" -msgstr "<%s> Новый карт-запрос от [%s] [%s]" +#: class/ShMapper.class.php:433 +msgid "Yandex Map" +msgstr "Яндекс карты" -#: class/ShMap.class.php:1 -msgid "You may see this %s" -msgstr "Вы можете посмотреть его здесь %s" +#: class/ShMapper.class.php:426 +msgid "Map API" +msgstr "API карт" -#: class/ShMap.class.php:1 -msgid "Drag choosed icon and place it to map or click it and enter exact address." -msgstr "Перетащите выбранную иконку в нужное место Карты или кликните по ней и введите точный адрес." +#: class/ShMapper.class.php:402 class/ShMapper.class.php:403 +#: class/ShMapper.class.php:417 +msgid "Settings" +msgstr "Настройки" -#: class/ShMap.class.php:1 -msgid "Drag icon and place it to map." -msgstr "Перетащите иконку в нужное место Карты" +#: class/ShMapper.class.php:276 assets/js/ShMapper.admin.js:155 +msgid "Are you shure?" +msgstr "Вы уверены?" -#: class/ShMap.class.php:1 -msgid "Send request" -msgstr "Отправить информацию" +#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 +msgid "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match" +msgstr "Ошибка: форма не связана с картой. Чтобы связать карту и форму, на одной странице должно быть 2 шорткода (карта - [shmMap id='6' map='true' uniq='например, 777'] и форма - [shmMap id='94' form='true' uniq='например, 777']), у которых параметр uniq будет совпадать" -#: class/ShMap.class.php:1 -msgid "Add before" -msgstr "Добавить перед" +#: class/ShMapper.class.php:274 class/ShMapper.class.php:370 +#: assets/js/ShMapper.js:391 +msgid "Close" +msgstr "Закрыть" -#: class/ShMap.class.php:1 -msgid "Add after" -msgstr "Добавить после" +#: class/ShMapper.class.php:273 class/ShMapper.class.php:369 +msgid "Send" +msgstr "Послать" -#: class/ShMap.class.php:1 -msgid "Delete me" -msgstr "Удали меня" +#: class/ShMapper.class.php:272 class/ShMapper.class.php:368 +#: assets/js/ShMapper.js:381 +msgid "Attantion" +msgstr "Внимание" -#: class/ShMap.class.php:1 -msgid "input title" -msgstr "напишите заголовок" +#: class/ShMapper.class.php:178 +msgid "Accessed User" +msgstr "Доступ пользователя" -#: class/ShMap.class.php:1 -msgid "input text" -msgstr "текстовая строка" +#: class/ShMapper.class.php:177 +msgid "Aprove date" +msgstr "Утвержденная дата" -#: class/ShMap.class.php:1 -msgid "User name" -msgstr "имя" +#: class/ShMapper.class.php:176 +msgid "Aproved" +msgstr "Одобрен" -#: class/ShMap.class.php:1 -msgid "input number" -msgstr "номер" +#: class/ShMapper.class.php:175 +msgid "Contacts" +msgstr "Контакты" -#: class/ShMap.class.php:1 -msgid "input email" -msgstr "почта" +#: class/ShMapper.class.php:173 +msgid "Session" +msgstr "Сессия" -#: class/ShMap.class.php:1 -msgid "input phone" -msgstr "телефон" +#: class/ShMapper.class.php:172 class/ShmPoint.class.php:231 +#: class/ShmPoint.class.php:308 +msgid "Type" +msgstr "Тип" -#: class/ShMap.class.php:1 -msgid "textarea" -msgstr "текстовый блок" +#: class/ShMapper.class.php:167 class/ShmMap.class.php:103 +#: class/ShmMap.class.php:596 class/SMC_Post.php:370 +#: class/ShmPoint.class.php:300 +msgid "Title" +msgstr "Название" -#: class/ShMap.class.php:1 -msgid "input file" -msgstr "загрузка картинки" +#: class/ShMapper.class.php:166 class/ShmMap.class.php:70 +#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 +msgid "Map" +msgstr "Карта" -#: class/ShMap.class.php:1 -msgid "enabled Map markers" -msgstr "доступные маркеры" +#: class/ShMapper.class.php:160 +msgid "Required Personal phone" +msgstr "Требуется личный телефон" -#: class/ShMap.class.php:1 -msgid "Place the mark to Map" -msgstr "Укажите место" +#: class/ShMapper.class.php:159 class/ShmMap.class.php:466 +msgid "Personal phone" +msgstr "Телефон" -#: class/ShMap.class.php:1 -msgid "Put a title" -msgstr "Укажите название" +#: class/ShMapper.class.php:158 +msgid "Unclude Personal phone" +msgstr "Включить личный телефон" -#: class/ShMap.class.php:1 -msgid "How call You?" -msgstr "Как к Вам обращаться?" +#: class/ShMapper.class.php:157 +msgid "Required Personal e-mail" +msgstr "Требуется личный e-mail" -#: class/ShMap.class.php:1 -msgid "Send Your e-mail please" -msgstr "Укажите свой e-mail пожалуйста" +#: class/ShMapper.class.php:156 +msgid "Personal e-mail" +msgstr "Личный e-mail" -#: class/ShMap.class.php:1 -msgid "Whrite description" -msgstr "Напишите комментарий" +#: class/ShMapper.class.php:155 +msgid "Unclude Personal e-mail" +msgstr "Включить личный телефон e-mail" -#: class/ShMap.class.php:1 -msgid "Close wizzard" -msgstr "Закрыть навсегда" +#: class/ShMapper.class.php:154 +msgid "Required Personal name" +msgstr "Обязательно личное имя" -#: class/ShMap.class.php:1 -msgid "Next step" -msgstr "Следующий шаг" +#: class/ShMapper.class.php:153 class/ShmMap.class.php:434 +msgid "Personal name" +msgstr "Имя" -#: class/ShMap.class.php:1 -msgid "Congratulation! That's all!" -msgstr "Поздравляем! Это всё." +#: class/ShMapper.class.php:152 +msgid "Unclude Personal name" +msgstr "Включить личное имя" -#: class/ShMap.class.php:1 -msgid "Wizzard closed" -msgstr "Мастер закрыт" +#: class/ShMapper.class.php:151 class/ShmMap.class.php:421 +msgid "Users can leave their contact details for feedback." +msgstr "Пользователи могут оставлять свои контактные данные для обратной связи" -#: class/ShMap.class.php:1 -msgid "Wizzard restarted" -msgstr "Мастер запущен сызнова" +#: class/ShMapper.class.php:150 +msgid "Form generator" +msgstr "Генератор форм" -#: class/ShMap.class.php:1 -msgid "Go to current page" -msgstr "На текущую страницу" +#: class/ShMapper.class.php:149 +msgid "Form Title" +msgstr "Заголовок Формы" -#: class/ShMap.class.php:1 -msgid "1.1. Pan map and choose zoom" -msgstr "1.1. Отцентрируйте карту и выберите масштаб" +#: class/ShMapper.class.php:148 class/ShmMap.class.php:122 +#: class/ShmMap.class.php:401 +msgid "Notify owner of Map" +msgstr "Присылать уведомления о новых картах автору" -#: class/ShMap.class.php:1 -msgid "1.2. Set size for map's div (per pixels)" -msgstr "1.2. Установите размер окна карты (в пикселях)" +#: class/ShMapper.class.php:147 class/ShmMap.class.php:117 +msgid "Form exists" +msgstr "Форма присутствует" -#: class/ShMap.class.php:1 -msgid "1.3. Include interface" -msgstr "1.3. Какие элементы управления картой должны присутствовать?" +#: class/ShMapper.class.php:145 +msgid "Default Marker icon" +msgstr "Иконка маркера по умолчанию" -#: class/ShMap.class.php:1 -msgid "Map search" -msgstr "Поиск по карте" +#: class/ShMapper.class.php:144 class/ShmMap.class.php:291 +msgid "Formating Marker to cluster" +msgstr "Укладывать маркеры карты в кластеры" -#: class/ShMap.class.php:1 -msgid "Map zoom slider enabled" -msgstr "Ползунок масштаба" +#: class/ShMapper.class.php:143 class/ShmMap.class.php:295 +msgid "Lock zoom and drag" +msgstr "Заблокировать перетаскивание карты и изменение размера средним колёсиком мышы" -#: class/ShMap.class.php:1 +#: class/ShMapper.class.php:142 class/ShmMap.class.php:281 msgid "Map layer switcher" msgstr "Переключатель слоев карты" -#: class/ShMap.class.php:1 +#: class/ShMapper.class.php:141 +msgid "Map zoom slider" +msgstr "Слайдер масштаба" + +#: class/ShMapper.class.php:140 class/ShmMap.class.php:287 msgid "Map full screen" msgstr "Полноэкранный режим" -#: class/ShMap.class.php:1 -msgid "Formating Marker to cluster" -msgstr "Укладывать маркеры карты в кластеры" +#: class/ShMapper.class.php:139 class/ShmMap.class.php:273 +msgid "Map search" +msgstr "Поиск по карте" -#: class/ShMap.class.php:1 -msgid "Lock zoom and drag" -msgstr "Заблокировать перетаскивание карты и изменение размера средним колёсиком мышы" +#: class/ShMapper.class.php:138 class/ShMapPointType.class.php:125 +#: class/ShMapPointType.class.php:177 class/ShmMap.class.php:252 +#: widget/ShMap.widget.php:80 +msgid "Height" +msgstr "Высота" -#: class/ShMap.class.php:1 -msgid "1.4. May User download data in *.csv?" -msgstr "1.4. Можно ли скачать данные карты в формате .csv?" +#: class/ShMapper.class.php:137 class/ShMapPointType.class.php:131 +#: class/ShMapPointType.class.php:187 class/ShmMap.class.php:257 +msgid "Width" +msgstr "Ширина" -#: class/ShMap.class.php:1 -msgid "Empty for " -msgstr "Оставьте пустым, чтобы было " +#: class/ShMapper.class.php:136 class/ShmMap.class.php:107 +#: class/ShmMap.class.php:316 +msgid "Export csv" +msgstr "Загрузка сводки в формате csv" -#: class/ShMap.class.php:1 -msgid "1.5. Will the legend be displayed?" -msgstr "1.5. Будет ли отображаться легенда?" +#: class/ShMapper.class.php:135 class/ShmMap.class.php:338 +msgid "Filters exists" +msgstr "Панель фильтров присутствует" -#: class/ShMap.class.php:1 -msgid "1.6. Will Marker type filter be displayed?" -msgstr "1.6. Будет ли отображаться панель фильтрации по типам Маркеров?" +#: class/ShMapper.class.php:134 class/ShmMap.class.php:112 +#: class/ShmMap.class.php:327 +msgid "Legend exists" +msgstr "Легенда присутствует" -#: class/ShMap.class.php:1 -msgid "1.7. Default Marker icon" -msgstr "1.7. Иконка маркера по умолчанию" +#: class/ShMapper.class.php:126 class/ShMapper.class.php:133 +msgid "Zoom" +msgstr "Увеличение" -#: class/ShMap.class.php:1 -msgid "Recommended size is 64х64 px, format is .png" -msgstr "Рекомендуемый размер: 64х64 pxб формат .png" +#: class/ShMapper.class.php:93 +msgid "edit Maps in page" +msgstr "редактировать Карты на странице" -#: class/ShMap.class.php:1 -msgid "Default Marker icon" -msgstr "Иконка маркера по умолчанию" +#: class/ShMapper.class.php:87 +msgid "Maps" +msgstr "Карты" -#: class/ShMap.class.php:1 -msgid "Step 1. Set up your map." -msgstr "Шаг 1. Настройте Вашу карту" +#: class/ShMapper.class.php:81 class/ShmMap.class.php:72 +#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 +msgid "add Map" +msgstr "Добавить новую" -#: class/ShMap.class.php:1 -msgid "Step 2. May anover Users add information for Map." -msgstr "Шаг 2. Смогут ли другие пользователи добавлять информацию на Вашу карту?" +#: class/ShMapper.class.php:75 class/ShMapper.class.php:389 +#: class/ShMapper.class.php:390 +msgid "Shmapper" +msgstr "shMapper" -#: class/ShMap.class.php:1 -msgid "Enable crowdsourcing function (free add Users new Markers)" -msgstr "Включить функцию краудсорсинга (свободного добавления Пользователями новых Маркеров) " +#: class/ShMapper.class.php:27 +msgid "Unknown error." +msgstr "Неизвестная ошибка." -#: class/ShMap.class.php:1 -msgid "2.1. What is the name of your information form?" -msgstr "2.1. Как называется Ваша форма сбора информации?" +#: class/ShMapper.class.php:26 +msgid "Your request has been successfully registered." +msgstr "Ваш запрос успешно зарегистрирован." -#: class/ShMap.class.php:1 -msgid "For example «All beaches by the river»" -msgstr "Например «Все пляжи у реки»" +#: class/ShMapper.class.php:25 +msgid "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +msgstr "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." -#: class/ShMap.class.php:1 -msgid "2.2. Will I notify the author about new posts?" -msgstr "2.2. Оповещать ли автора Карты о новых сообщениях?" +#: class/ShmForm.class.php:574 +msgid "Your phone" +msgstr "Ваш номер телефона" -#: class/ShMap.class.php:1 -msgid "2.3. What information can users enter?" -msgstr "2.3. Какую информацию могут вводить пользователи?" +#: class/ShmForm.class.php:564 +msgid "Your e-mail" +msgstr "Ваш e-mail" -#: class/ShMap.class.php:1 -msgid "2.4. Can users leave their contact information?" -msgstr "2.4. Могут ли пользователи оставлять свою контактную информацию?" +#: class/ShmForm.class.php:553 +msgid "Your name" +msgstr "Ваше имя" -#: class/ShMap.class.php:1 -msgid "Users can leave their contact details for feedback." -msgstr "Пользователи могут оставлять свои контактные данные для обратной связи" +#: class/ShmForm.class.php:520 +msgid "Drag icon and place it to map." +msgstr "Перетащите иконку в нужное место Карты" -#: class/ShMap.class.php:1 -msgid "2.5. What data users will have to put?" -msgstr "2.5. Какие данные пользователи должны будут ставить?" +#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 +#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 +#: class/ShmForm.class.php:578 +msgid "This required field" +msgstr "Обязательно для заполнения" -#: class/ShMap.class.php:1 -msgid "Personal name" -msgstr "Имя" +#: class/ShmForm.class.php:436 +msgid "Сhoose files" +msgstr "Выберите файл" -#: class/ShMap.class.php:1 -msgid "Personal email" -msgstr "Адрес электронной почты" +#: class/ShmForm.class.php:378 +msgid "The name of the parameter that refers to this element" +msgstr "Имя параметра, который ссылается на этот элемент" -#: class/ShMap.class.php:1 -msgid "Personal phone" -msgstr "Телефон" +#: class/ShmForm.class.php:326 +msgid "enable" +msgstr "доступно" -#: class/ShMap.class.php:1 -msgid "Include" -msgstr "Включать" +#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 +msgid "require" +msgstr "обязательно" -#: class/ShMap.class.php:1 -msgid "Required" -msgstr "Обязателен" +#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 +msgid "Delete me" +msgstr "Удали меня" + +#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 +msgid "Add after" +msgstr "Добавить после" + +#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 +msgid "Add before" +msgstr "Добавить перед" -#: class/ShMap.class.php:1 +#: class/ShmForm.class.php:231 msgid "Element is required" msgstr "Элемент обязателен к заполнению" -#: class/ShMap.class.php:1 +#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 +#: class/ShmForm.class.php:374 +msgid "write description" +msgstr "напишите описание" + +#: class/ShmForm.class.php:223 class/ShmForm.class.php:295 +#: class/ShmForm.class.php:372 class/ShMapper.class.php:168 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 +msgid "Description" +msgstr "Описание" + +#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:361 msgid "Placemark types" msgstr "Типы маркеров" -#: class/ShMap.class.php:1 -msgid "Including Map to post" -msgstr "Вставка карты в звпись" +#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 +#: class/ShmForm.class.php:357 +msgid "write placeholder" +msgstr "напишите плейсхолдер" -#: class/ShMap.class.php:1 -msgid "You can insert a card into a post or page by copying this shortcode." -msgstr "Вы сможете вставить карту в запись или страницу скопировав этот шорткод" +#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 +#: class/ShmForm.class.php:355 +msgid "Placeholder" +msgstr "Заполнитель" -#: class/ShMap.class.php:1 -msgid "Your name" -msgstr "Ваше имя" +#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 +#: class/ShmForm.class.php:336 +msgid "write title" +msgstr "напишите заголовок" -#: class/ShMap.class.php:1 -msgid "We give a guarantee of complete confidentiality of your data, in accordance with the Federal Law of July 27, 2006 No. 152-ФЗ. By clicking send you consent to the processing of personal data contained in the request and the attached documents." -msgstr "Даем гарантию полной конфидециальности Ваших данных, в соответствии с Федеральным законом от 27.07.2006 года №152-ФЗ. Нажав отправить Вы даете согласие на обработку персональных данных содержащихся в запросе и прилагаемых документах." +#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 +#: class/ShmForm.class.php:334 +msgid "Label of element" +msgstr "Лейбл элемента" -#: class/ShMap.class.php:1 -msgid "Your request has been successfully registered." -msgstr "Ваш запрос успешно зарегистрирован." +#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 +#: class/ShmForm.class.php:340 +msgid "Type of element" +msgstr "Тип элемента" -#: class/ShMap.class.php:1 -msgid "Сhoose files" -msgstr "Выберите файл" +#: class/ShmForm.class.php:104 +msgid "enabled Map markers" +msgstr "доступные маркеры" -#: class/ShMap.class.php:1 -msgid "Unknown error" -msgstr "Неизвестная ошибка" +#: class/ShmForm.class.php:98 +msgid "input file" +msgstr "загрузка картинки" -#: class/ShMap.class.php:1 -msgid "Your e-mail" -msgstr "Ваш e-mail" +#: class/ShmForm.class.php:92 +msgid "textarea" +msgstr "текстовый блок" -#: class/ShMap.class.php:1 -msgid "Your phone" -msgstr "Ваш номер телефона" +#: class/ShmForm.class.php:62 +msgid "input text" +msgstr "текстовая строка" -#: class/ShMap.class.php:1 -msgid "Error: no map" -msgstr "Ошибка: нет карты" +#: class/ShmForm.class.php:56 +msgid "input title" +msgstr "напишите заголовок" -#: class/ShMap.class.php:1 -msgid "You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;" -msgstr "Вы можете создавать собственные формы, используя элементы формы: «Строка текста», «Поле текста», «Загрузка файлов», «Категории Маркеров»" +#: class/ShmForm.class.php:43 +msgid "Whrite description" +msgstr "Напишите комментарий" -#: class/ShMap.class.php:1 -msgid "Wizzard" -msgstr "Мастер" +#: class/ShmForm.class.php:22 +msgid "Put a title" +msgstr "Укажите название" -#: class/ShMap.class.php:1 -msgid "Restart wizzard" -msgstr "Перезапустить Мастер" +#: class/ShmForm.class.php:14 +msgid "Place the mark to Map" +msgstr "Укажите место" -#: class/ShMap.class.php:1 -msgid "Are you shure?" -msgstr "Вы уверены?" +#: class/ShMapperRequest.class.php:360 +msgid "Trash" +msgstr "Корзина" -#: class/ShMap.class.php:1 -msgid "Height" -msgstr "Высота" +#: class/ShMapperRequest.class.php:358 +msgid "Approve" +msgstr "Одобрить" -#: class/ShMap.class.php:1 -msgid "Width" -msgstr "Ширина" +#: class/ShMapperRequest.class.php:337 +msgid "You may see this %s" +msgstr "Вы можете посмотреть его здесь %s" -#: class/ShMap.class.php:1 -msgid "Choose layers" -msgstr "Выбор типа визуализации слоя" +#: class/ShMapperRequest.class.php:335 +msgid "<%s> Request to your Map from [%s] [%s]" +msgstr "<%s> Новый карт-запрос от [%s] [%s]" -#: class/ShMap.class.php:1 -msgid "Parameters" -msgstr "Параметры" +#: class/ShMapperRequest.class.php:327 +msgid "Uknown User" +msgstr "некто Имярек" -#: class/ShMap.class.php:1 -msgid "Map owner" -msgstr "Родительская карта" +#: class/ShMapperRequest.class.php:88 class/ShMapper.class.php:123 +#: class/ShMapper.class.php:171 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:250 +msgid "Location" +msgstr "Адрес" -#: class/ShMap.class.php:1 -msgid "None" -msgstr "Никакой" +#: class/ShMapperRequest.class.php:86 class/ShMapper.class.php:125 +#: class/ShMapper.class.php:132 class/ShMapper.class.php:170 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 +msgid "Longitude" +msgstr "Долгота" + +#: class/ShMapperRequest.class.php:84 class/ShMapper.class.php:124 +#: class/ShMapper.class.php:131 class/ShMapper.class.php:169 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 +msgid "Latitude" +msgstr "Широта" + +#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 +msgid "GEO location" +msgstr "гео-позиция" + +#: class/ShMapperRequest.class.php:67 class/ShMapper.class.php:174 +#: class/ShmMap.class.php:126 +msgid "Author" +msgstr "Автор" + +#: class/ShMapperRequest.class.php:64 +msgid "Approving" +msgstr "Одобрение" + +#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 +msgid "Image" +msgstr "Изображение" + +#: class/ShMapperRequest.class.php:29 +msgid "no found Map Request in trash" +msgstr "Карт-запросы в корзине не найдены" + +#: class/ShMapperRequest.class.php:28 +msgid "Map Request not found" +msgstr "Запрос не найден" + +#: class/ShMapperRequest.class.php:27 +msgid "search Map Request" +msgstr "искать Карт-запрос" + +#: class/ShMapperRequest.class.php:26 +msgid "view Map Request" +msgstr "смотреть Карт-запрос" + +#: class/ShMapperRequest.class.php:25 class/ShMapperRequest.class.php:30 +#: class/ShMapper.class.php:112 +msgid "all Map Requests" +msgstr "Карт-запросы" -#: class/ShMap.class.php:1 +#: class/ShMapperRequest.class.php:23 +msgid "edit Map Request" +msgstr "редактировать Карт-запрос" + +#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 +#: class/ShMapperRequest.class.php:24 +msgid "add Map Request" +msgstr "Добавить новый" + +#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 +msgid "Map Request" +msgstr "Карт-запрос" + +#: class/ShMapper_ajax.class.php:456 class/ShMapper_ajax.class.php:467 +msgid "Set key" +msgstr "Ключ установлен" + +#: class/ShMapper_ajax.class.php:396 +msgid "Change Vocabulaty: " +msgstr "Изменён словарь: " + +#: class/ShMapper_ajax.class.php:357 +msgid "Create" +msgstr "Создать" + +#: class/ShMapper_ajax.class.php:355 +msgid "add Map Point" +msgstr "Маркер добавлен" + +#: class/ShMapper_ajax.class.php:339 +msgid "Delete" +msgstr "Удалить" + +#: class/ShMapper_ajax.class.php:337 msgid "Are you want delete %s?" msgstr "Хотите удалить карту %s?" -#: class/ShMap.class.php:1 -msgid "What do with placemarks of deleting Map?" -msgstr "Что делать с Маркерами удаляемой Карты?" +#: class/ShMapper_ajax.class.php:232 +msgid "Request put to Trash" +msgstr "Запрос отправлен в корзину" -#: class/ShMap.class.php:1 -msgid "Delete all Points" -msgstr "Удалить все Маркеры" +#: class/ShMapper_ajax.class.php:220 +msgid "Approve succesfully and insert new Map marker" +msgstr "Одобрено. Маркер создан" -#: class/ShMap.class.php:1 -msgid "Escape all Points without Owner Map" -msgstr "Оставить все Маркеры без родительской Карты" +#: class/ShMapper_ajax.class.php:206 +msgid "Wizzard restarted" +msgstr "Мастер запущен сызнова" -#: class/ShMap.class.php:1 -msgid "Switch all Points to anover Map" -msgstr "Перенести все Маркеры на другую Карту" +#: class/ShMapper_ajax.class.php:195 +msgid "Wizzard closed" +msgstr "Мастер закрыт" -#: class/ShMap.class.php:1 -msgid "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match" -msgstr "Ошибка: форма не связана с картой. Чтобы связать карту и форму, на одной странице должно быть 2 шорткода (карта - [shmMap id='6' map='true' uniq='например, 777'] и форма - [shmMap id='94' form='true' uniq='например, 777']), у которых параметр uniq будет совпадать" +#: class/ShMapper_ajax.class.php:177 +msgid "Congratulation! That's all!" +msgstr "Поздравляем! Это всё." -#: class/ShMap.class.php:1 -msgid "Reload page after User send request." -msgstr "Перегрузить страницу после того, как юзер отправил форму запроса" +#: class/ShMapper_ajax.class.php:170 class/ShMapper.class.php:605 +msgid "Next step" +msgstr "Следующий шаг" -#: class/ShmAdminPage.class.php:1 -msgid "shMapper developers chat" -msgstr "Чат разработчиков shMapper" +#: shortcode/shmMap.shortcode.php:43 +msgid "Send request" +msgstr "Отправить информацию" + +#: shortcode/shmMap.shortcode.php:19 +msgid "No map on ID " +msgstr "Не указан ID карты" + +#. Author URI of the plugin +msgid "https://te-st.ru" +msgstr "https://te-st.ru" + +#. Author of the plugin +msgid "Teplitsa. Technologies for Social Good" +msgstr "Теплица социальных технологий" + +#. Description of the plugin +msgid "Location and logistics services for NKO" +msgstr "Картографирование на службе НКО" + +#. Plugin URI of the plugin +msgid "http://genagl.ru/?p=652" +msgstr "http://genagl.ru/?p=652" + +#. Plugin Name of the plugin +msgid "ShMapper by Teplitsa" +msgstr "ShMapper by Teplitsa" \ No newline at end of file From 229deb9f4d4ea103c9ed658e4919d4171a184c75 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 4 Sep 2019 10:21:25 +0200 Subject: [PATCH 042/220] * switch stable tag --- README.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.txt b/README.txt index f2724bd..1626225 100644 --- a/README.txt +++ b/README.txt @@ -6,7 +6,7 @@ Tags: map, OpenStreetMap, OSM, yandex.map, crowdsourcing, карта, Яндек Requires at least: 3.6.1 Tested up to: 5.2.2 Requires PHP: 5.6 -Stable tag: 1.3.1 +Stable tag: trunk License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html From 8d8dee0466e75bb2096e1245c022bd05b2945547 Mon Sep 17 00:00:00 2001 From: Denis Cherniatev Date: Wed, 4 Sep 2019 14:59:36 +0200 Subject: [PATCH 043/220] Update shmapper.php --- shmapper.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/shmapper.php b/shmapper.php index ffd19fd..e30c3c6 100644 --- a/shmapper.php +++ b/shmapper.php @@ -38,9 +38,12 @@ // load textdomain function init_textdomain_shmapper() { - if (function_exists('load_plugin_textdomain')) - { - load_plugin_textdomain("shmapper-by-teplitsa", false , dirname( plugin_basename( __FILE__ ) ) .'/languages/'); + if (function_exists('load_textdomain')) { + load_textdomain("shmapper-by-teplitsa", WP_PLUGIN_DIR . '/' . dirname( plugin_basename( __FILE__ ) ) .'/languages/shmapper-by-teplitsa-'.get_locale().'.mo'); + } + + if (function_exists('load_plugin_textdomain')) { + load_plugin_textdomain("shmapper-by-teplitsa", false , dirname( plugin_basename( __FILE__ ) ) .'/languages'); } } add_action('plugins_loaded', 'init_textdomain_shmapper'); From 960c54485444ec992d5840b417ef9b7172a0cf9e Mon Sep 17 00:00:00 2001 From: Denis Cherniatev Date: Wed, 4 Sep 2019 15:07:50 +0200 Subject: [PATCH 044/220] Update shmapper.php --- shmapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shmapper.php b/shmapper.php index e30c3c6..a4d215e 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.3.2 + * Version: 1.3.3 * Author: Teplitsa. Technologies for Social Good * Author URI: https://te-st.ru * License: GPL2 From 054dc6be5ed0235e01588054a23a18c7c1a085fb Mon Sep 17 00:00:00 2001 From: Denis Cherniatev Date: Wed, 4 Sep 2019 15:08:17 +0200 Subject: [PATCH 045/220] Update shmapper.php --- shmapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shmapper.php b/shmapper.php index a4d215e..b46f784 100644 --- a/shmapper.php +++ b/shmapper.php @@ -68,7 +68,7 @@ function init_textdomain_shmapper() define('SHM_CSV_STROKE_SEPARATOR', ';'); define('SHM_CSV_ROW_SEPARATOR', ' '); -define('SHMAPPER_VERSION', '1.3.2'); +define('SHMAPPER_VERSION', '1.3.3'); require_once(SHM_REAL_PATH.'class/ShMapper.class.php'); require_once(SHM_REAL_PATH.'class/ShMapper_ajax.class.php'); From 70a59b1af913bc1793cda1942a5f0a40e3281580 Mon Sep 17 00:00:00 2001 From: Denis Cherniatev Date: Wed, 4 Sep 2019 15:09:36 +0200 Subject: [PATCH 046/220] Update README.txt --- README.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.txt b/README.txt index 1626225..c36b6a8 100644 --- a/README.txt +++ b/README.txt @@ -58,6 +58,9 @@ No questions yet. == Changelog == += 1.3.3 = +* Textdomain load forced. + = 1.3.2 = * Marker placement by address added. * Marker placement by click added. @@ -83,4 +86,4 @@ No questions yet. * Other minor fixes. = 1.0 = -* First official release! \ No newline at end of file +* First official release! From 8ddda63449edbd2414afcc44e4ee82f52499fc09 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Thu, 5 Sep 2019 13:12:51 +0200 Subject: [PATCH 047/220] * link to author fixed --- README.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.txt b/README.txt index c36b6a8..567b7ac 100644 --- a/README.txt +++ b/README.txt @@ -16,7 +16,7 @@ shMapper is a plugin, that allows you to create simple crowdsourcing maps based The shMapper plugin allows you to create simple crowdsourcing maps on OpenStreetMap with an option of feedback messages form. This plugin gives you an alternative to current online map services such as Yandex.Maps, Google Maps etc which don’t provide the option for users to add new objects. -Most of the code written by Gennadiy Glazunov aka [Genagl](http://genagl.ru/author) +Most of the code written by Gennadiy Glazunov aka [Genagl](http://genagl.ru) **Core features** From 876e9ab42baf7ad256128aba449d35ec2a25fff0 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 11 Sep 2019 11:12:49 +0200 Subject: [PATCH 048/220] * debug removed --- class/ShmPoint.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index 38f73b3..14e2d13 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -137,7 +137,7 @@ static function update_map_owners($obj) $current = file_get_contents( ABSPATH. "alert.log" ); file_put_contents( ABSPATH. "alert.log", $current. $query."\n" ); $wpdb->query( $query ); - var_dump( $query ); + //var_dump( $query ); return $query; } static function save_admin_edit($obj) From b5f4c94f82826005b0631e138151214a1ac11d7f Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 20 Nov 2019 08:58:29 +0200 Subject: [PATCH 049/220] * WP 5.3 compatibility fixes * Yandex.Maps temporarily disabled --- README.txt | 2 +- assets/css/ShMapper.css | 4 ++++ assets/js/ShMapper.js | 2 ++ class/ShMapper.class.php | 13 ++++++++----- shmapper.php | 2 +- 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/README.txt b/README.txt index 567b7ac..aaa058a 100644 --- a/README.txt +++ b/README.txt @@ -4,7 +4,7 @@ Author URI: http://te-st.ru Plugin URI: http://genagl.ru/?p=652 Tags: map, OpenStreetMap, OSM, yandex.map, crowdsourcing, карта, Яндекс.карты, картирование, mapping, crowdsourced mapping, user mapping Requires at least: 3.6.1 -Tested up to: 5.2.2 +Tested up to: 5.3 Requires PHP: 5.6 Stable tag: trunk License: GPLv2 or later diff --git a/assets/css/ShMapper.css b/assets/css/ShMapper.css index db3d199..40d8b13 100644 --- a/assets/css/ShMapper.css +++ b/assets/css/ShMapper.css @@ -881,6 +881,10 @@ ul.shm-card li:nth-of-type(even) { background-color:rgba(0,0,0,0.05); } +.wp-admin.shmapper_page_shm_settings_page ul.shm-card li:first-child +{ + display: none; +} .sh-right { text-align:right; diff --git a/assets/js/ShMapper.js b/assets/js/ShMapper.js index af6e427..5e85b51 100644 --- a/assets/js/ShMapper.js +++ b/assets/js/ShMapper.js @@ -409,6 +409,7 @@ jQuery(document).ready(function($) function shm_send( params, type ) { + var $ = jQuery; console.log(params, type); jQuery.post ( myajax.url, @@ -419,6 +420,7 @@ function shm_send( params, type ) }, function( response ) { + var $ = jQuery; console.log(response); try { diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index 984a767..2c0943f 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -17,7 +17,8 @@ public static function activate() PRIMARY KEY (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;"); update_option(SHMAPPER,[ - "map_api" => 1, +// "map_api" => 1, + "map_api" => 2, "shm_map_is_crowdsourced" => 0, "shm_map_marker_premoderation" => 1, "shm_reload" => 1, @@ -51,6 +52,8 @@ static function update_options() function __construct() { static::$options = get_option(SHMAPPER); + static::$options['map_api'] = 2; // hot fix to disable Maps.Yandex + add_action( "init", [__CLASS__, "add_shortcodes"], 80); add_action( "wp_head", [__CLASS__, "set_styles"]); add_filter( "smc_add_post_types", [__CLASS__, "init_obj"], 10); @@ -634,14 +637,14 @@ function shm_show_wizz() jQuery('#shm_wizzard').appendTo('#adminmenu').hide().fadeIn('slow').css({top: loc.top - 15}); jQuery('#shm_wizzard_closed').appendTo('#adminmenu').hide().css({top: loc.top - 28}); jQuery('" .(empty($stepData["alt_selector"]) ? '' : $stepData["alt_selector"]) . "').each((num, elem) => { - var ofset = $(elem).offset(); + var ofset = jQuery(elem).offset(); var poss = ofset.left < window.innerWidth/2 ? 1 : 2; var arr = poss == 1 ? '
    ' : '
    '; - var lpos = poss == 1 ? ofset.left + $(elem).width() + 20 : ofset.left - 50; - $(arr) + var lpos = poss == 1 ? ofset.left + jQuery(elem).width() + 20 : ofset.left - 50; + jQuery(arr) .appendTo('body') .offset({top:ofset.top - 8, left:lpos}) - $(elem).live({click:evt => + jQuery(elem).live({click:evt => { shm_send(['shm_wnext']); }}); diff --git a/shmapper.php b/shmapper.php index b46f784..3c1082e 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.3.3 + * Version: 1.3.4 * Author: Teplitsa. Technologies for Social Good * Author URI: https://te-st.ru * License: GPL2 From 8fa8a9603fe3c9ab898bd1c0eb7bb31c6b27bf25 Mon Sep 17 00:00:00 2001 From: DenisCherniatev Date: Wed, 27 Nov 2019 23:03:31 +0200 Subject: [PATCH 050/220] * Yandex.Maps API key option added * Yandex.Maps enabled * minor lang fixes --- assets/css/ShMapper.css | 2 +- assets/js/ShMapper.admin.js | 26 ++++++++++++++++++++++++ assets/js/ShMapper.js | 12 +++++++++++ class/ShMapper.class.php | 24 ++++++++++++++++------ class/ShMapper_ajax.class.php | 11 ++++++++++ languages/shmapper-by-teplitsa-ru_RU.mo | Bin 20923 -> 22718 bytes languages/shmapper-by-teplitsa-ru_RU.po | 17 +++++++++++++++- shmapper.php | 2 +- 8 files changed, 85 insertions(+), 9 deletions(-) diff --git a/assets/css/ShMapper.css b/assets/css/ShMapper.css index 40d8b13..2a0889f 100644 --- a/assets/css/ShMapper.css +++ b/assets/css/ShMapper.css @@ -881,7 +881,7 @@ ul.shm-card li:nth-of-type(even) { background-color:rgba(0,0,0,0.05); } -.wp-admin.shmapper_page_shm_settings_page ul.shm-card li:first-child +.wp-admin.shmapper_page_shm_settings_page #shm_settings_yandex_map_api_key_cont { display: none; } diff --git a/assets/js/ShMapper.admin.js b/assets/js/ShMapper.admin.js index 41f3ca7..d4acc32 100644 --- a/assets/js/ShMapper.admin.js +++ b/assets/js/ShMapper.admin.js @@ -164,4 +164,30 @@ jQuery(document).ready(function($) }, 1200); } }}); +}); + +jQuery(function($){ + var $yandexMapsAPIKeyControl = $('#shm_settings_yandex_map_api_key_cont'); + + function shmMapProviderChangeHandler(mapProvider) { + console.log(mapProvider); + if(mapProvider == 1) { + $yandexMapsAPIKeyControl.show(); + if($yandexMapsAPIKeyControl.find('input').val()) { + $yandexMapsAPIKeyControl.find('.shm-color-alert').hide(); + } + else { + $yandexMapsAPIKeyControl.find('.shm-color-alert').show(); + } + } + else { + $yandexMapsAPIKeyControl.hide(); + } + } + + $('.map_api_cont input[name="map_api"]').change(function(){ + shmMapProviderChangeHandler($(this).val()); + }); + + shmMapProviderChangeHandler($('.map_api_cont input[name="map_api"]:checked').val()); }); \ No newline at end of file diff --git a/assets/js/ShMapper.js b/assets/js/ShMapper.js index 5e85b51..9e6b9f9 100644 --- a/assets/js/ShMapper.js +++ b/assets/js/ShMapper.js @@ -73,6 +73,11 @@ jQuery(document).ready(function($) $(".map_api_cont").css("opacity", 0.7); shm_send(["map_api", $(evt.currentTarget).val()]); }}); + $("[name=shm_yandex_maps_api_key]").live({change:function(evt) + { + $(".map_api_cont").css("opacity", 0.7); + shm_send(["shm_yandex_maps_api_key", $(evt.currentTarget).val() ]); + }}); $("#shm_map_is_crowdsourced").live({click:function(evt) { $("#shm_map_is_crowdsourced_cont").css("opacity", 0.7); @@ -528,6 +533,13 @@ function shm_send( params, type ) break; case "map_api": $(".map_api_cont").css("opacity", 1); + case "shm_yandex_maps_api_key": + $(".map_api_cont").css("opacity", 1); + if(datas['hide_dang']) + $("#shm_settings_yandex_map_api_key_cont .shm-color-alert").hide(); + else + $("#shm_settings_yandex_map_api_key_cont .shm-color-alert").fadeIn("slow"); + break; case "shm_voc": $("#shm_vocabulary_cont").css("opacity", 1); break; diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index 2c0943f..3ea0045 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -52,7 +52,7 @@ static function update_options() function __construct() { static::$options = get_option(SHMAPPER); - static::$options['map_api'] = 2; // hot fix to disable Maps.Yandex +// static::$options['map_api'] = 2; // hot fix to disable Maps.Yandex add_action( "init", [__CLASS__, "add_shortcodes"], 80); add_action( "wp_head", [__CLASS__, "set_styles"]); @@ -206,7 +206,7 @@ static function add_admin_js_script() wp_enqueue_script("ShMapper.admin"); if( static::$options['map_api'] == 1 ) { - wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?load=package.full&lang=ru_RU", array()); + wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=".ShMapper::$options['shm_yandex_maps_api_key']."&load=package.full&lang=ru_RU", array()); wp_enqueue_script("api-maps"); wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); wp_enqueue_script("ShMapper.yandex"); @@ -301,7 +301,7 @@ static function add_frons_js_script() wp_enqueue_script("ShMapper.front"); if( static::$options['map_api'] == 1 ) { - wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?load=package.full&lang=ru_RU", array()); + wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=".ShMapper::$options['shm_yandex_maps_api_key']."&load=package.full&lang=ru_RU", array()); wp_enqueue_script("api-maps"); wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); wp_enqueue_script("ShMapper.yandex"); @@ -423,7 +423,7 @@ static function setting_pages()
      -
    • +
    • ". __("Map API", SHMAPPER) . @@ -433,15 +433,27 @@ static function setting_pages() - +
      - +
      +
      + +
      +
      +

      +

      ".__("Yandex.Maps API Key", SHMAPPER)."
      + + ".__("ATTENTION: you must specify a key for working with the Yandex.Maps API.", SHMAPPER)."
      ".__("Learn more here:", SHMAPPER)." https://tech.yandex.ru/maps/jsapi/doc/2.1/dg/concepts/load-docpage/
      +

      +

      +
      +
    diff --git a/class/ShMapper_ajax.class.php b/class/ShMapper_ajax.class.php index e7d7839..bbffec8 100644 --- a/class/ShMapper_ajax.class.php +++ b/class/ShMapper_ajax.class.php @@ -407,6 +407,17 @@ static function myajax_submit() ) ); break; + case "shm_yandex_maps_api_key": + ShMapper::$options['shm_yandex_maps_api_key'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => __( "Yandex.Maps API key Saved" , SHMAPPER), + "hide_dang" => sanitize_text_field($params[1]) != "" && ShMapper::$options['shm_yandex_maps_api_key'] != "" ? 1 : 0 + ) + ); + break; case "shm_map_is_crowdsourced": ShMapper::$options['shm_map_is_crowdsourced'] = sanitize_text_field($params[1]); ShMapper::update_options(); diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo index 5fe0c11c0b1f79589aea94488e9762f1326cd210..3e9a8e9999e04cf50f1115b10215f555ca212116 100644 GIT binary patch delta 5671 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 Oq0!e?k4Ss4<-Y(38xDa0 delta 3856 zcmYM$32e`29LMpeRkWt`?&|Jem9|=1rPMM0?si>^xuP=`_o&g%EX>c;ily#jVq;yj zHrpJ{U)2zE#vHMRS|-^XQCYAUyJSY}{ps&XCgt@!&+oau-{<-L>R6@Uk)3|d^{{}= zhCg@t+ls$a8mnf^*UkPnhTtfd3lnh;zKC0~3szzZ-okhc z38`;)Oa=utOvjG627~b+2H|OJf|pQxyJo$G$<*(n`bCEt^8&`A`XwWKG~F>82ci1q zVfaW#Fdo~mzL`fs6Rbl;T8^2x56PCfhf4Jm)CNQ8?D1nFY){=A;f|Yz0o3QAB42=M z_ z3#~^^$81MsY%eN+YFj@OX`K2qzeIx;{u}F4Mz{^AhocsXMorij>0**lnHhi@Hv*Np zDM$=vu6@27wSi5j@fD~IRHD}THj4af;5iyJVJ+&i)S)7NYW1U00~(<+5`vm29Mvxt zb%gP#c`{M+X4(2^)R9a@jVrSCWex>Jv>vs?&ruWjY==|Wn)+qb5j{jr{0!AUkasK@ zBQOrVs3Vw;%0vMw^~K1KDditxG8M=a#yLu%K62DusIwgmFTEm*MlIY5brcEKRMf=1 zPz!l&eJtuoCLvRqLQKU{)W(isH#~!BtZ)9Ipbtpr7VZW{Vq5A37>{ePJ654md>^&3 z=cvmVz^-KzRC@?2ph#4PI-nv=MP+(8Dg&=$JJvS~DClfHLPfd@>yH4n(^IIFKgLez z&u4HHCZQsAP#f5Q%FtHSd}XNbz&_OY6R1ml5v#BU2kHGU;eZv{1=Nmjpf1~e)WE-R z7MeEhC-hAuc(V-^aTRLe!>G%35*0uVY9lvM^Z$l=8yb*a9a#iA>X<;G{w%FtRL5*v z&$sodsQwF36O^DL{1|n%dr%7 znuBD?6r(m+hFWkp>I{#d7P^eez&+FgzoU-k8LEFstUJF4^}IJ~z9F%WJ5jD}n1QIW1gO;lm6Ms55Y?!v1$4i^)qj^HXz^fTr*zCqm^$E%AKSV;R8ZhQjuCQe6V zaww!@9xlTGK`mTsO-|(FLcIiE!+$Xy$0xaO*&5^? zn*&y-hJsS^D=PBG$d3u^?4~ds3C;{fU8b3+j4VXvHmgzN4x#2bXX~}dahp5X9UCUQ z<9nmpvydZj%q$9e&kIo#Z9^^e6?VhJw*COgo_U7h=t*(=_dwl+p|~3-;!q6i!Z~9e zYMxRo!{ev`CU@ok0`>1d1?}hxZsctKz!B6}@Ojd}YsgMbFqIw{g*2HQ)MZ_Y`Zc@* zmD-c&#p|d`983PS@eFK=`RI=`RpP*Ew;P>E3I{3hZ7>&+i)rp7Nid-qZbvWbc`mAd z0rJ&0%TW{WK)t4WP?l{+CVlcpfNqkzb2YagFYbdqXw)*P5cGw zD5|kJ2K90;WekQ>?~L3p(;qc{4r*Kx#$Yi<;dWa;fO>ujv+?I%w$aEtejM~6R z9D?)l9sCA0FqOQfVt>?8%tu|`6_|*7F$J%ojwG;;yHHo;Q(zXO=J^!$e6K@6XYm8- zGTp{7^y8)10uiXomw?fjhB}%oEXGBs{?BnShV?V%Ra}cSnL3<=o|pJ$U@?+Ra}LL& zYIdSBbHVx}#!$b5n&>%dLy4>wfL@IAHFS1)sMI^y5;tLM+;8ibtoN*q*u6I5!FHI5%G?Ch zZJ&jq_%`b8S%DpJJ9cG#bBaPo{8J6sYPh@e9MqAl!dTpfTIi^4uf_h<@7U+@S?=W> zhV5yeff-nex(laK0s3?G(=iqG|4%cGLOd=(b*Mltys1UKKFwct7mi1zt{>_sCSxKl zLTz*xDr42C`L5Xd6I+kUaWmN$^?X7OUus3Rj0R<(9JTX{SdI^I9BzKaUGM?w*J@y{ z`)hT2p8IR{e4g(?c(A{3V3dDD- Date: Tue, 14 Apr 2020 17:11:11 +0200 Subject: [PATCH 051/220] add german --- languages/shmapper-by-teplitsa-ger_GER.po | 996 ++++++++++++++++++++++ 1 file changed, 996 insertions(+) create mode 100644 languages/shmapper-by-teplitsa-ger_GER.po diff --git a/languages/shmapper-by-teplitsa-ger_GER.po b/languages/shmapper-by-teplitsa-ger_GER.po new file mode 100644 index 0000000..3e96f6b --- /dev/null +++ b/languages/shmapper-by-teplitsa-ger_GER.po @@ -0,0 +1,996 @@ +# Translation of Plugins - shMapper by Teplitsa - Development (trunk) in Russian +# This file is distributed under the same license as the Plugins - shMapper by Teplitsa - Development (trunk) package. +msgid "" +msgstr "" +"PO-Revision-Date: 2019-09-04 06:14:53+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: ger\n" +"Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" + +#: class/ShmAdminPage.class.php:27 +msgid "shMapper developers chat" +msgstr "shMapper Entwicklerchat" + +#: class/ShmForm.class.php:497 +msgid "Drag choosed icon and place it to map or click it and enter exact address." +msgstr "Ziehen Sie das ausgewählte Symbol an die gewünschte Stelle auf der Karte oder klicken Sie darauf und geben Sie die genaue Adresse ein." + +#: assets/js/ShMapper.front.js:9 +msgid "Error: no map" +msgstr "Fehler: Keine Karte" + +#: widget/ShMap.widget.php:64 +msgid "Tite" +msgstr "Titel" + +#: widget/ShMap.widget.php:17 +msgid "Player Cabinet" +msgstr "Dashboard" + +#: widget/ShMap.widget.php:16 +msgid "Ermak Locations" +msgstr "Position verschieben" + +#: widget/ShMap.widget.php:9 +msgid "Shmapper Locations" +msgstr "Shmapper Position" + +#: tpl/shmMap.php:83 +msgid "download %s.csv" +msgstr "%s.csv herunterladen" + +#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 +msgid "Submit" +msgstr "Senden" + +#: tpl/input_file_form.php:77 +msgid "Insert" +msgstr "Einfügen" + +#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 +msgid "Remove" +msgstr "Entfernen" + +#: tpl/input_file_form.php:72 +msgid "Browse" +msgstr "Durchsuchen" + +#: tpl/input_file_form.php:66 +msgid "File" +msgstr "Datei" + +#: tpl/input_file_form.php:64 +msgid "Upload Image" +msgstr "Bild hochladen" + +#: class/ShmPoint.class.php:312 +msgid "Address" +msgstr "Adresse" + +#: class/ShmPoint.class.php:158 +msgid "Map owner" +msgstr "Kartenbesitzer" + +#: class/ShmPoint.class.php:33 +msgid "no found Map marker in trash" +msgstr "Keinen Kartenpunkt im Papierkorb gefunden" + +#: class/ShmPoint.class.php:32 +msgid "Map marker not found" +msgstr "Markierung nicht gefunden" + +#: class/ShmPoint.class.php:31 +msgid "search Map marker" +msgstr "Markierung suchen" + +#: class/ShmPoint.class.php:30 +msgid "view Map marker" +msgstr "Markierung ansehen" + +#: class/ShmPoint.class.php:29 +msgid "all Map markers" +msgstr "Alle Markierungen" + +#: class/ShmPoint.class.php:27 +msgid "edit Map marker" +msgstr "Markierung bearbeiten" + +#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 +#: class/ShmPoint.class.php:28 +msgid "add Map marker" +msgstr "Markierung hinzufügen" + +#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 +msgid "Map marker" +msgstr "Markierung" + +#: class/ShMapper_Assistants.class.php:90 +msgid "Your requests to this Map " +msgstr "Ihre Einreichung für die Karte " + +#: class/ShMapper_Assistants.class.php:44 +msgid "all maps" +msgstr "Alle Karten" + +#: class/SMC_Post.php:631 class/SMC_Post.php:636 +msgid "Parameters" +msgstr "Optionen" + +#: class/SMC_Post.php:566 +msgid "Yes" +msgstr "Ja" + +#: class/SMC_Post.php:563 +msgid "No" +msgstr "Nein" + +#: class/SMC_Post.php:560 +msgid "— No Change —" +msgstr "— Keine Veränderung —" + +#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 +#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 +msgid "Usage in Maps: " +msgstr "Wird in Karte verwendet: " + +#: class/ShmMap.class.php:780 +msgid "Succesfuly delete map and %s points migrates to %s" +msgstr "Karte erfolgreich gelöscht und %s Punkte nach %s verschoben" + +#: class/ShmMap.class.php:773 +msgid "Succesfuly delete map and %s points are orphans now" +msgstr "Karte erfolgreich gelöscht und %s Punkte sind keiner Karte zugeordnet" + +#: class/ShmMap.class.php:768 +msgid "Succesfuly delete map width %s points" +msgstr "Karte erfolgreich mit %s Punkten gelöscht" + +#: class/ShmMap.class.php:682 +msgid "Switch all Points to anover Map" +msgstr "Verschiebe alle Markierung auf eine andere Karte" + +#: class/ShmMap.class.php:676 +msgid "Escape all Points without Owner Map" +msgstr "Alle Markierungen ohne Eltern-Karte stehen lassen" + +#: class/ShmMap.class.php:670 +msgid "Delete all Points" +msgstr "Lösche alle Markierung" + +#: class/ShmMap.class.php:665 +msgid "What do with placemarks of deleting Map?" +msgstr "Was soll mit den Markierungen der gelöschten Karte passieren?" + +#: class/ShmMap.class.php:521 class/SMC_Post.php:496 +msgid "Double" +msgstr "Duplizieren" + +#: class/ShmMap.class.php:450 +msgid "Personal email" +msgstr "E-Mail Addresse" + +#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 +#: class/ShmMap.class.php:471 +msgid "Required" +msgstr "Erforderlich" + +#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 +#: class/ShmMap.class.php:461 +msgid "Include" +msgstr "Einschalten" + +#: class/ShmMap.class.php:426 +msgid "2.5. What data users will have to put?" +msgstr "2.5. Welche Daten müssen Benutzer angeben?" + +#: class/ShmMap.class.php:418 +msgid "2.4. Can users leave their contact information?" +msgstr "2.4. Sollen Benutzer ihre Kontaktinformationen hinterlassen können?" + +#: class/ShmMap.class.php:409 +msgid "You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;" +msgstr "Sie können ein eigenes Fomrular mit folgenden Elementen erstellen: & laquo; Textlinie & raquo;, & laquo; Textfeld & raquo;, & laquo; Dateiupload & raquo;, & laquo; Markierungskategorien & raquo;" + +#: class/ShmMap.class.php:406 +msgid "2.3. What information can users enter?" +msgstr "2.3. Welche Informationen können Benutzer hinterlassen?" + +#: class/ShmMap.class.php:398 +msgid "2.2. Will I notify the author about new posts?" +msgstr "2.2. Soll der Autor über neue Beiträge informiert werden?" + +#: class/ShmMap.class.php:392 +msgid "For example «All beaches by the river»" +msgstr "Zum Beispiel «Alle Strände am Fluss»" + +#: class/ShmMap.class.php:388 +msgid "2.1. What is the name of your information form?" +msgstr "2.1. Wie lautet der Name des Formulars?" + +#: class/ShmMap.class.php:383 +msgid "Enable crowdsourcing function (free add Users new Markers)" +msgstr "Aktivieren der Crowdsourcing-Funktion (hinzufügen neuer Markierungen durch Benutzer) " + +#: class/ShmMap.class.php:351 +msgid "Recommended size is 64х64 px, format is .png" +msgstr "Empfohlene Größe ist 64x64 pc, empfohlenes Format ist .png" + +#: class/ShmMap.class.php:346 +msgid "1.7. Default Marker icon" +msgstr "1.7. Standard Marker Icon" + +#: class/ShmMap.class.php:335 +msgid "1.6. Will Marker type filter be displayed?" +msgstr "1.6. Soll das Filterfeld nach Markertypen angezeigt werden?" + +#: class/ShmMap.class.php:324 +msgid "1.5. Will the legend be displayed?" +msgstr "1.5. Soll die Legende angezeigt werden?" + +#: class/ShmMap.class.php:313 +msgid "1.4. May User download data in *.csv?" +msgstr "1.4. Dürfen Benutzer Daten als .csv herunterladen?" + +#: class/ShmMap.class.php:299 +msgid "Choose layers" +msgstr "Ebene Auswählen" + +#: class/ShmMap.class.php:277 +msgid "Map zoom slider enabled" +msgstr "Vergößerungschieberegler aktivieren" + +#: class/ShmMap.class.php:269 +msgid "1.3. Include interface" +msgstr "1.3. Welche Kartensteuerungen sollen vorhanden sein?" + +#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 +msgid "Empty for " +msgstr "Leer lassen für " + +#: class/ShmMap.class.php:249 +msgid "1.2. Set size for map's div (per pixels)" +msgstr "1.2. Einstellen der Kartengröße (in Pixeln)" + +#: class/ShmMap.class.php:237 +msgid "1.1. Pan map and choose zoom" +msgstr "1.1. Karte zentireren und Maßstab auswählen" + +#: class/ShmMap.class.php:212 +msgid "Step 2. May anover Users add information for Map." +msgstr "Schritt 2. Können andere Benutzer Ihrer Karte Informationen hinzufügen?" + +#: class/ShmMap.class.php:198 +msgid "You can insert a card into a post or page by copying this shortcode." +msgstr "Sie können eine Karte in einen Beitrag oder in eine Seite einfügen, indem Sie diesen Shortcode kopieren." + +#: class/ShmMap.class.php:186 +msgid "Including Map to post" +msgstr "Karte einem Beitrag hinzufügen" + +#: class/ShmMap.class.php:162 +msgid "only request form" +msgstr "nur Anfrageformular" + +#: class/ShmMap.class.php:153 +msgid "only map" +msgstr "nur Karte" + +#: class/ShmMap.class.php:145 +msgid "include all (map and request form)" +msgstr "alles inklusive(Karte und Anfrageformular)" + +#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 +msgid "Map markers" +msgstr "Markierungen" + +#: class/ShmMap.class.php:124 +msgid "shortcodes" +msgstr "Shortcodes" + +#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 +msgid "ID" +msgstr "ID" + +#: class/ShmMap.class.php:80 +msgid "no found Map in trash" +msgstr "Keine Karte im Papierkorb gefunden" + +#: class/ShmMap.class.php:79 +msgid "Map not found" +msgstr "Karte nicht gefunden" + +#: class/ShmMap.class.php:78 +msgid "search Map" +msgstr "Karte suchen" + +#: class/ShmMap.class.php:77 +msgid "view Map" +msgstr "Karte anzeigen" + +#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 +msgid "all Maps" +msgstr "alle Karten" + +#: class/ShmMap.class.php:74 +msgid "edit Map" +msgstr "Karte bearbeiten" + +#: class/ShmMap.class.php:65 +msgid "Step 1. Set up your map." +msgstr "Schritt 1. Karte einrichten" + +#: class/ShMapPointType.class.php:358 +msgid "None" +msgstr "Keine" + +#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 +msgid "Color" +msgstr "Farbe" + +#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 +#: class/ShMapPointType.class.php:197 +msgid "Icon" +msgstr "Icon" + +#: class/ShMapPointType.class.php:86 +msgid "Name" +msgstr "Name" + +#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 +msgid "Map marker types" +msgstr "Markertypen" + +#: class/ShMapPointType.class.php:49 +msgid "Unique type of every Map markers" +msgstr "Einzigartiger Typ jeder Kartenmarkierung" + +#: class/ShMapPointType.class.php:42 +msgid "new Map marker type name" +msgstr "Name des neuen Markertyps" + +#: class/ShMapPointType.class.php:41 +msgid "add Map marker type" +msgstr "neuen Markertyp hinzufügen" + +#: class/ShMapPointType.class.php:40 +msgid "update Map marker type" +msgstr "Markertyp aktualisieren" + +#: class/ShMapPointType.class.php:39 +msgid "edit Map marker type" +msgstr "Makrertyp bearbeiten" + +#: class/ShMapPointType.class.php:38 +msgid "parent Map marker type:" +msgstr "Markertyp der übergeordneten Karte:" + +#: class/ShMapPointType.class.php:37 +msgid "parent Map marker type" +msgstr "übergeordneter Markertyp" + +#: class/ShMapPointType.class.php:36 +msgid "view Map marker type" +msgstr "Markertyp ansehen" + +#: class/ShMapPointType.class.php:35 +msgid "all Map marker types" +msgstr "alle Markertypen" + +#: class/ShMapPointType.class.php:34 +msgid "Search Map marker type" +msgstr "Markertyp suchen" + +#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 +#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 +msgid "Map marker type" +msgstr "Markertyp" + +#: class/ShMapper.class.php:607 +msgid "Prevous step" +msgstr "Vorheriger Schritt" + +#: class/ShMapper.class.php:602 class/ShMapper.class.php:608 +msgid "Go to current page" +msgstr "Zur aktuellen Seite" + +#: class/ShMapper.class.php:601 class/ShMapper.class.php:609 +msgid "Close wizzard" +msgstr "Assisten schließen" + +#: class/ShMapper.class.php:559 +msgid "Restart wizzard" +msgstr "Assistent neustarten" + +#: class/ShMapper.class.php:556 +msgid "Wizzard" +msgstr "Assistent" + +#: class/ShMapper.class.php:544 +msgid "Error send map request" +msgstr "Fehler beim Senden der Anfrage" + +#: class/ShMapper.class.php:538 +msgid "Successful send map request" +msgstr "Anfrage erfolgreich gesendet" + +#: class/ShMapper.class.php:532 +msgid "Save personal data garantee" +msgstr "Garantierte Speicherung personenbezogener Daten" + +#: class/ShMapper.class.php:528 +msgid "Vocabulary" +msgstr "Textbausteine" + +#: class/ShMapper.class.php:516 +msgid "Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha" +msgstr "Dein Captcha funktioniert noch nicht. Um diese Funktion zu aktivieren, rufen Sie die API-Schlüssel unter google.com/recaptch ab" + +#: class/ShMapper.class.php:512 +msgid "What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s." +msgstr "Was ist Google reCAPTCHA? Wie erhalte ich einen Schlüssel? Weitere Informationen %gibt es hier%s." + +#: class/ShMapper.class.php:503 +msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" +msgstr "Aktivieren Sie Captcha im Formular (das Plugin verwendet nur reCAPTCHA v2-Schlüssel)." + +#: class/ShMapper.class.php:496 +msgid "Protection" +msgstr "Sicherheit" + +#: class/ShMapper.class.php:484 +msgid "Reload page after User send request." +msgstr "Neuladen der Seite nach einer Benutzereinreichung" + +#: class/ShMapper.class.php:476 +msgid "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" +msgstr "ACHTUNG: Deaktivieren Sie diese Option nur auf eigene Gefahr. Es besteht die Gefahr von Spam-Angriffen" + +#: class/ShMapper.class.php:472 +msgid "все сообщения будут добавляться в статусе «Черновик»" +msgstr "Alle Nachrichten erhalten den Status «Entwurf»" + +#: class/ShMapper.class.php:468 +msgid "Pre-modertion from Map owner." +msgstr "Vormoderation durch den Karteninhaber." + +#: class/ShMapper.class.php:460 +msgid "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." +msgstr "Benutzer können keiner Karte Nachrichten hinzufügen. Wenn das Häkchen aktiviert ist, wird der Interaktivitätsblock nicht einmal angezeigt." + +#: class/ShMapper.class.php:456 +msgid "Включить глобальный режим неинтерактивных карт" +msgstr "Aktivieren Sie den globalen nicht interaktiven Kartenmodus" + +#: class/ShMapper.class.php:448 +msgid "Interactive" +msgstr "Interaktiv" + +#: class/ShMapper.class.php:439 +msgid "Open Street Map" +msgstr "Open Street Map" + +#: class/ShMapper.class.php:433 +msgid "Yandex Map" +msgstr "Yandex Map" + +#: class/ShMapper.class.php:426 +msgid "Map API" +msgstr "Karten API" + +#: class/ShMapper.class.php:402 class/ShMapper.class.php:403 +#: class/ShMapper.class.php:417 +msgid "Settings" +msgstr "Einstellungen" + +#: class/ShMapper.class.php:276 assets/js/ShMapper.admin.js:155 +msgid "Are you shure?" +msgstr "Sind Sie sicher?" + +#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 +msgid "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match" +msgstr "Fehler: Das Formular ist nicht mit der Karte verknüpft. Um eine Karte und ein Formular zu verknüpfen, müssen auf einer Seite zwei Shortcodes vorhanden sein (Karte - [shmMap id='6' map='true' uniq='z.B., 777'] und Formular - [shmMap id='94' form='true' uniq='z.B., 777']), für die die uniq-Parameter übereinstimmen." + +#: class/ShMapper.class.php:274 class/ShMapper.class.php:370 +#: assets/js/ShMapper.js:391 +msgid "Close" +msgstr "Schließen" + +#: class/ShMapper.class.php:273 class/ShMapper.class.php:369 +msgid "Send" +msgstr "Senden" + +#: class/ShMapper.class.php:272 class/ShMapper.class.php:368 +#: assets/js/ShMapper.js:381 +msgid "Attantion" +msgstr "Achtung" + +#: class/ShMapper.class.php:178 +msgid "Accessed User" +msgstr "Benutzerzugriff" + +#: class/ShMapper.class.php:177 +msgid "Aprove date" +msgstr "Datum bestätigen" + +#: class/ShMapper.class.php:176 +msgid "Aproved" +msgstr "Bestätigt" + +#: class/ShMapper.class.php:175 +msgid "Contacts" +msgstr "Kontakte" + +#: class/ShMapper.class.php:173 +msgid "Session" +msgstr "Sitzung|Session" + +#: class/ShMapper.class.php:172 class/ShmPoint.class.php:231 +#: class/ShmPoint.class.php:308 +msgid "Type" +msgstr "Typ" + +#: class/ShMapper.class.php:167 class/ShmMap.class.php:103 +#: class/ShmMap.class.php:596 class/SMC_Post.php:370 +#: class/ShmPoint.class.php:300 +msgid "Title" +msgstr "Titel" + +#: class/ShMapper.class.php:166 class/ShmMap.class.php:70 +#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 +msgid "Map" +msgstr "Karte" + +#: class/ShMapper.class.php:160 +msgid "Required Personal phone" +msgstr "Telefonnummer erforderlich" + +#: class/ShMapper.class.php:159 class/ShmMap.class.php:466 +msgid "Personal phone" +msgstr "Telefonnummer" + +#: class/ShMapper.class.php:158 +msgid "Unclude Personal phone" +msgstr "Telefonnummer aktivieren" + +#: class/ShMapper.class.php:157 +msgid "Required Personal e-mail" +msgstr "E-Mail erforderlich" + +#: class/ShMapper.class.php:156 +msgid "Personal e-mail" +msgstr "E-Mail Adresse" + +#: class/ShMapper.class.php:155 +msgid "Unclude Personal e-mail" +msgstr "E-Mail aktivieren" + +#: class/ShMapper.class.php:154 +msgid "Required Personal name" +msgstr "Name erforderlich" + +#: class/ShMapper.class.php:153 class/ShmMap.class.php:434 +msgid "Personal name" +msgstr "Name" + +#: class/ShMapper.class.php:152 +msgid "Unclude Personal name" +msgstr "Name aktivieren" + +#: class/ShMapper.class.php:151 class/ShmMap.class.php:421 +msgid "Users can leave their contact details for feedback." +msgstr "Benutzer können ihre Kontaktdaten für Feedback hinterlassen." + +#: class/ShMapper.class.php:150 +msgid "Form generator" +msgstr "Formular Generator" + +#: class/ShMapper.class.php:149 +msgid "Form Title" +msgstr "Formular Titel" + +#: class/ShMapper.class.php:148 class/ShmMap.class.php:122 +#: class/ShmMap.class.php:401 +msgid "Notify owner of Map" +msgstr "Autor der Karte benachrichtigen" + +#: class/ShMapper.class.php:147 class/ShmMap.class.php:117 +msgid "Form exists" +msgstr "Formular vorhanden" + +#: class/ShMapper.class.php:145 +msgid "Default Marker icon" +msgstr "Standard Markierungs Icon" + +#: class/ShMapper.class.php:144 class/ShmMap.class.php:291 +msgid "Formating Marker to cluster" +msgstr "Kartenmakierungen zu Cluster stappeln" + +#: class/ShMapper.class.php:143 class/ShmMap.class.php:295 +msgid "Lock zoom and drag" +msgstr "Blockieren der Vergößerung und des Verschiebens" + +#: class/ShMapper.class.php:142 class/ShmMap.class.php:281 +msgid "Map layer switcher" +msgstr "Kartenebenen" + +#: class/ShMapper.class.php:141 +msgid "Map zoom slider" +msgstr "Kartenvergrößerungsschieberegler" + +#: class/ShMapper.class.php:140 class/ShmMap.class.php:287 +msgid "Map full screen" +msgstr "Voolbildmodus" + +#: class/ShMapper.class.php:139 class/ShmMap.class.php:273 +msgid "Map search" +msgstr "Kartensuche" + +#: class/ShMapper.class.php:138 class/ShMapPointType.class.php:125 +#: class/ShMapPointType.class.php:177 class/ShmMap.class.php:252 +#: widget/ShMap.widget.php:80 +msgid "Height" +msgstr "Höhe" + +#: class/ShMapper.class.php:137 class/ShMapPointType.class.php:131 +#: class/ShMapPointType.class.php:187 class/ShmMap.class.php:257 +msgid "Width" +msgstr "Breite" + +#: class/ShMapper.class.php:136 class/ShmMap.class.php:107 +#: class/ShmMap.class.php:316 +msgid "Export csv" +msgstr "csv exportieren" + +#: class/ShMapper.class.php:135 class/ShmMap.class.php:338 +msgid "Filters exists" +msgstr "Filter vorhanden" + +#: class/ShMapper.class.php:134 class/ShmMap.class.php:112 +#: class/ShmMap.class.php:327 +msgid "Legend exists" +msgstr "Legende vorhanden" + +#: class/ShMapper.class.php:126 class/ShMapper.class.php:133 +msgid "Zoom" +msgstr "Zoom" + +#: class/ShMapper.class.php:93 +msgid "edit Maps in page" +msgstr "Karten auf der Seite bearbeiten" + +#: class/ShMapper.class.php:87 +msgid "Maps" +msgstr "Karten" + +#: class/ShMapper.class.php:81 class/ShmMap.class.php:72 +#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 +msgid "add Map" +msgstr "Karte hinzufügen" + +#: class/ShMapper.class.php:75 class/ShMapper.class.php:389 +#: class/ShMapper.class.php:390 +msgid "Shmapper" +msgstr "shMapper" + +#: class/ShMapper.class.php:27 +msgid "Unknown error." +msgstr "Unbekannter Fehler" + +#: class/ShMapper.class.php:26 +msgid "Your request has been successfully registered." +msgstr "Ihre Anfrage wurde erfolgreich registriert." + +#: class/ShMapper.class.php:25 +msgid "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +msgstr "Ich erteile dem Site-Administrator meine Zustimmung, meine personenbezogenen Daten gemäß dem Bundesgesetz vom 27. Juli 2006 N 152-ФЗ "Über personenbezogene Daten" einschließlich automatisierter Daten zu verarbeiten." + +#: class/ShmForm.class.php:574 +msgid "Your phone" +msgstr "Telefonnummer" + +#: class/ShmForm.class.php:564 +msgid "Your e-mail" +msgstr "E-Mail" + +#: class/ShmForm.class.php:553 +msgid "Your name" +msgstr "Name" + +#: class/ShmForm.class.php:520 +msgid "Drag icon and place it to map." +msgstr "Ziehen Sie das Icon und platzieren Sie es auf der Karte" + +#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 +#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 +#: class/ShmForm.class.php:578 +msgid "This required field" +msgstr "Dieses Feld ist erforderlich" + +#: class/ShmForm.class.php:436 +msgid "Сhoose files" +msgstr "Datei auswählen" + +#: class/ShmForm.class.php:378 +msgid "The name of the parameter that refers to this element" +msgstr "Der Name des Parameters, der auf dieses Element verweist" + +#: class/ShmForm.class.php:326 +msgid "enable" +msgstr "aktivieren" + +#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 +msgid "require" +msgstr "erforderlich" + +#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 +msgid "Delete me" +msgstr "Lösch mich" + +#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 +msgid "Add after" +msgstr "Nachher hinzufügen" + +#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 +msgid "Add before" +msgstr "Vorher hinzufügen" + +#: class/ShmForm.class.php:231 +msgid "Element is required" +msgstr "Feld ist erforderlich" + +#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 +#: class/ShmForm.class.php:374 +msgid "write description" +msgstr "Beschreibung einfügen" + +#: class/ShmForm.class.php:223 class/ShmForm.class.php:295 +#: class/ShmForm.class.php:372 class/ShMapper.class.php:168 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 +msgid "Description" +msgstr "Beschreibung" + +#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:361 +msgid "Placemark types" +msgstr "Markertypen" + +#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 +#: class/ShmForm.class.php:357 +msgid "write placeholder" +msgstr "Platzhalter einfügen" + +#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 +#: class/ShmForm.class.php:355 +msgid "Placeholder" +msgstr "Platzhalter" + +#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 +#: class/ShmForm.class.php:336 +msgid "write title" +msgstr "Titel einfügen" + +#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 +#: class/ShmForm.class.php:334 +msgid "Label of element" +msgstr "Elementbezeichnung" + +#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 +#: class/ShmForm.class.php:340 +msgid "Type of element" +msgstr "Typ des Elements" + +#: class/ShmForm.class.php:104 +msgid "enabled Map markers" +msgstr "verfügbare Marker" + +#: class/ShmForm.class.php:98 +msgid "input file" +msgstr "Bild hochladen" + +#: class/ShmForm.class.php:92 +msgid "textarea" +msgstr "Textfeld" + +#: class/ShmForm.class.php:62 +msgid "input text" +msgstr "Text eingeben" + +#: class/ShmForm.class.php:56 +msgid "input title" +msgstr "Titel eingeben" + +#: class/ShmForm.class.php:43 +msgid "Whrite description" +msgstr "Beschreibung hinzufügen" + +#: class/ShmForm.class.php:22 +msgid "Put a title" +msgstr "Titel eingeben" + +#: class/ShmForm.class.php:14 +msgid "Place the mark to Map" +msgstr "Marker platzieren" + +#: class/ShMapperRequest.class.php:360 +msgid "Trash" +msgstr "Papierkorb" + +#: class/ShMapperRequest.class.php:358 +msgid "Approve" +msgstr "zu genehmigen" + +#: class/ShMapperRequest.class.php:337 +msgid "You may see this %s" +msgstr "Hier zu sehen %s" + +#: class/ShMapperRequest.class.php:335 +msgid "<%s> Request to your Map from [%s] [%s]" +msgstr "<%s> Neue Kartenanfrage von [%s] [%s]" + +#: class/ShMapperRequest.class.php:327 +msgid "Uknown User" +msgstr "Unbekannter Benutzer" + +#: class/ShMapperRequest.class.php:88 class/ShMapper.class.php:123 +#: class/ShMapper.class.php:171 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:250 +msgid "Location" +msgstr "Adresse" + +#: class/ShMapperRequest.class.php:86 class/ShMapper.class.php:125 +#: class/ShMapper.class.php:132 class/ShMapper.class.php:170 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 +msgid "Longitude" +msgstr "Längengrad" + +#: class/ShMapperRequest.class.php:84 class/ShMapper.class.php:124 +#: class/ShMapper.class.php:131 class/ShMapper.class.php:169 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 +msgid "Latitude" +msgstr "Breitengrad" + +#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 +msgid "GEO location" +msgstr "Geo-Position" + +#: class/ShMapperRequest.class.php:67 class/ShMapper.class.php:174 +#: class/ShmMap.class.php:126 +msgid "Author" +msgstr "Autor" + +#: class/ShMapperRequest.class.php:64 +msgid "Approving" +msgstr "Genehmigung" + +#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 +msgid "Image" +msgstr "Bild" + +#: class/ShMapperRequest.class.php:29 +msgid "no found Map Request in trash" +msgstr "Keine Kartenanfrage im Papierkorb gefunden" + +#: class/ShMapperRequest.class.php:28 +msgid "Map Request not found" +msgstr "Anfrage nicht gefunden" + +#: class/ShMapperRequest.class.php:27 +msgid "search Map Request" +msgstr "Kartenanfrage suchen" + +#: class/ShMapperRequest.class.php:26 +msgid "view Map Request" +msgstr "Kartenanfrage ansehen" + +#: class/ShMapperRequest.class.php:25 class/ShMapperRequest.class.php:30 +#: class/ShMapper.class.php:112 +msgid "all Map Requests" +msgstr "Alle Kartenanfragen" + +#: class/ShMapperRequest.class.php:23 +msgid "edit Map Request" +msgstr "Kartenanfrage bearbeiten" + +#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 +#: class/ShMapperRequest.class.php:24 +msgid "add Map Request" +msgstr "Neu hinzufügen" + +#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 +msgid "Map Request" +msgstr "Kartenanfrage" + +#: class/ShMapper_ajax.class.php:456 class/ShMapper_ajax.class.php:467 +msgid "Set key" +msgstr "Schlüssel setzen" + +#: class/ShMapper_ajax.class.php:396 +msgid "Change Vocabulaty: " +msgstr "Textbausteine ändern: " + +#: class/ShMapper_ajax.class.php:357 +msgid "Create" +msgstr "Erstellen" + +#: class/ShMapper_ajax.class.php:355 +msgid "add Map Point" +msgstr "Marker hinzugefügt" + +#: class/ShMapper_ajax.class.php:339 +msgid "Delete" +msgstr "Löschen" + +#: class/ShMapper_ajax.class.php:337 +msgid "Are you want delete %s?" +msgstr "Möchten Sie %s löschen?" + +#: class/ShMapper_ajax.class.php:232 +msgid "Request put to Trash" +msgstr "Anfrage in Papierkorb verschoben" + +#: class/ShMapper_ajax.class.php:220 +msgid "Approve succesfully and insert new Map marker" +msgstr "Genehmigt. Marker erstellt" + +#: class/ShMapper_ajax.class.php:206 +msgid "Wizzard restarted" +msgstr "Assistent wird neugestartet" + +#: class/ShMapper_ajax.class.php:195 +msgid "Wizzard closed" +msgstr "Assistent geschlossen" + +#: class/ShMapper_ajax.class.php:177 +msgid "Congratulation! That's all!" +msgstr "Glückwunsch! Das ist alles!" + +#: class/ShMapper_ajax.class.php:170 class/ShMapper.class.php:605 +msgid "Next step" +msgstr "Nächster Schritt" + +#: shortcode/shmMap.shortcode.php:43 +msgid "Send request" +msgstr "Anfrage senden" + +#: shortcode/shmMap.shortcode.php:19 +msgid "No map on ID " +msgstr "Karten-ID nicht angegeben" + +#. Author URI of the plugin +msgid "https://te-st.ru" +msgstr "https://te-st.ru" + +#. Author of the plugin +msgid "Teplitsa. Technologies for Social Good" +msgstr "Teplitsa. Technologies for Social Good" + +#. Description of the plugin +msgid "Location and logistics services for NKO" +msgstr "Location and logistics services for NKO" + +#. Plugin URI of the plugin +msgid "http://genagl.ru/?p=652" +msgstr "http://genagl.ru/?p=652" + +#. Plugin Name of the plugin +msgid "ShMapper by Teplitsa" +msgstr "ShMapper by Teplitsa" + +msgid "Yandex.Maps API key Saved" +msgstr "Yandey.Maps API Schlüssel gespeichert" + +msgid "Yandex.Maps API Key" +msgstr "Yandex.Maps API Schlüssel" + +msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." +msgstr "ACHTUNG: Sie müssen einen Schlüssel angeben, um die Yandex.Maps API benutzen zu können." + +msgid "Learn more here:" +msgstr "Mehr Informationen:" + +msgid "Yandex.Maps" +msgstr "Yandex.Maps" \ No newline at end of file From 6de5765468d91bd6922fe8e843541c25a200949f Mon Sep 17 00:00:00 2001 From: BootWP Date: Thu, 18 Jun 2020 05:57:34 +0300 Subject: [PATCH 052/220] Change language ger_GER to de_DE. Add .pot file. Add missing end slash. --- languages/shmapper-by-teplitsa-de_DE.mo | Bin 0 -> 18331 bytes ...r_GER.po => shmapper-by-teplitsa-de_DE.po} | 1995 +++++++++-------- languages/shmapper-by-teplitsa.pot | 1043 +++++++++ shmapper.php | 2 +- 4 files changed, 2043 insertions(+), 997 deletions(-) create mode 100644 languages/shmapper-by-teplitsa-de_DE.mo rename languages/{shmapper-by-teplitsa-ger_GER.po => shmapper-by-teplitsa-de_DE.po} (95%) create mode 100644 languages/shmapper-by-teplitsa.pot diff --git a/languages/shmapper-by-teplitsa-de_DE.mo b/languages/shmapper-by-teplitsa-de_DE.mo new file mode 100644 index 0000000000000000000000000000000000000000..fb2c6bab15e02d2fb4958e947d44869088797a15 GIT binary patch literal 18331 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 literal 0 HcmV?d00001 diff --git a/languages/shmapper-by-teplitsa-ger_GER.po b/languages/shmapper-by-teplitsa-de_DE.po similarity index 95% rename from languages/shmapper-by-teplitsa-ger_GER.po rename to languages/shmapper-by-teplitsa-de_DE.po index 3e96f6b..a1ea512 100644 --- a/languages/shmapper-by-teplitsa-ger_GER.po +++ b/languages/shmapper-by-teplitsa-de_DE.po @@ -1,996 +1,999 @@ -# Translation of Plugins - shMapper by Teplitsa - Development (trunk) in Russian -# This file is distributed under the same license as the Plugins - shMapper by Teplitsa - Development (trunk) package. -msgid "" -msgstr "" -"PO-Revision-Date: 2019-09-04 06:14:53+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: GlotPress/2.4.0-alpha\n" -"Language: ger\n" -"Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" - -#: class/ShmAdminPage.class.php:27 -msgid "shMapper developers chat" -msgstr "shMapper Entwicklerchat" - -#: class/ShmForm.class.php:497 -msgid "Drag choosed icon and place it to map or click it and enter exact address." -msgstr "Ziehen Sie das ausgewählte Symbol an die gewünschte Stelle auf der Karte oder klicken Sie darauf und geben Sie die genaue Adresse ein." - -#: assets/js/ShMapper.front.js:9 -msgid "Error: no map" -msgstr "Fehler: Keine Karte" - -#: widget/ShMap.widget.php:64 -msgid "Tite" -msgstr "Titel" - -#: widget/ShMap.widget.php:17 -msgid "Player Cabinet" -msgstr "Dashboard" - -#: widget/ShMap.widget.php:16 -msgid "Ermak Locations" -msgstr "Position verschieben" - -#: widget/ShMap.widget.php:9 -msgid "Shmapper Locations" -msgstr "Shmapper Position" - -#: tpl/shmMap.php:83 -msgid "download %s.csv" -msgstr "%s.csv herunterladen" - -#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 -msgid "Submit" -msgstr "Senden" - -#: tpl/input_file_form.php:77 -msgid "Insert" -msgstr "Einfügen" - -#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 -msgid "Remove" -msgstr "Entfernen" - -#: tpl/input_file_form.php:72 -msgid "Browse" -msgstr "Durchsuchen" - -#: tpl/input_file_form.php:66 -msgid "File" -msgstr "Datei" - -#: tpl/input_file_form.php:64 -msgid "Upload Image" -msgstr "Bild hochladen" - -#: class/ShmPoint.class.php:312 -msgid "Address" -msgstr "Adresse" - -#: class/ShmPoint.class.php:158 -msgid "Map owner" -msgstr "Kartenbesitzer" - -#: class/ShmPoint.class.php:33 -msgid "no found Map marker in trash" -msgstr "Keinen Kartenpunkt im Papierkorb gefunden" - -#: class/ShmPoint.class.php:32 -msgid "Map marker not found" -msgstr "Markierung nicht gefunden" - -#: class/ShmPoint.class.php:31 -msgid "search Map marker" -msgstr "Markierung suchen" - -#: class/ShmPoint.class.php:30 -msgid "view Map marker" -msgstr "Markierung ansehen" - -#: class/ShmPoint.class.php:29 -msgid "all Map markers" -msgstr "Alle Markierungen" - -#: class/ShmPoint.class.php:27 -msgid "edit Map marker" -msgstr "Markierung bearbeiten" - -#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 -#: class/ShmPoint.class.php:28 -msgid "add Map marker" -msgstr "Markierung hinzufügen" - -#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 -msgid "Map marker" -msgstr "Markierung" - -#: class/ShMapper_Assistants.class.php:90 -msgid "Your requests to this Map " -msgstr "Ihre Einreichung für die Karte " - -#: class/ShMapper_Assistants.class.php:44 -msgid "all maps" -msgstr "Alle Karten" - -#: class/SMC_Post.php:631 class/SMC_Post.php:636 -msgid "Parameters" -msgstr "Optionen" - -#: class/SMC_Post.php:566 -msgid "Yes" -msgstr "Ja" - -#: class/SMC_Post.php:563 -msgid "No" -msgstr "Nein" - -#: class/SMC_Post.php:560 -msgid "— No Change —" -msgstr "— Keine Veränderung —" - -#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 -#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 -msgid "Usage in Maps: " -msgstr "Wird in Karte verwendet: " - -#: class/ShmMap.class.php:780 -msgid "Succesfuly delete map and %s points migrates to %s" -msgstr "Karte erfolgreich gelöscht und %s Punkte nach %s verschoben" - -#: class/ShmMap.class.php:773 -msgid "Succesfuly delete map and %s points are orphans now" -msgstr "Karte erfolgreich gelöscht und %s Punkte sind keiner Karte zugeordnet" - -#: class/ShmMap.class.php:768 -msgid "Succesfuly delete map width %s points" -msgstr "Karte erfolgreich mit %s Punkten gelöscht" - -#: class/ShmMap.class.php:682 -msgid "Switch all Points to anover Map" -msgstr "Verschiebe alle Markierung auf eine andere Karte" - -#: class/ShmMap.class.php:676 -msgid "Escape all Points without Owner Map" -msgstr "Alle Markierungen ohne Eltern-Karte stehen lassen" - -#: class/ShmMap.class.php:670 -msgid "Delete all Points" -msgstr "Lösche alle Markierung" - -#: class/ShmMap.class.php:665 -msgid "What do with placemarks of deleting Map?" -msgstr "Was soll mit den Markierungen der gelöschten Karte passieren?" - -#: class/ShmMap.class.php:521 class/SMC_Post.php:496 -msgid "Double" -msgstr "Duplizieren" - -#: class/ShmMap.class.php:450 -msgid "Personal email" -msgstr "E-Mail Addresse" - -#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 -#: class/ShmMap.class.php:471 -msgid "Required" -msgstr "Erforderlich" - -#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 -#: class/ShmMap.class.php:461 -msgid "Include" -msgstr "Einschalten" - -#: class/ShmMap.class.php:426 -msgid "2.5. What data users will have to put?" -msgstr "2.5. Welche Daten müssen Benutzer angeben?" - -#: class/ShmMap.class.php:418 -msgid "2.4. Can users leave their contact information?" -msgstr "2.4. Sollen Benutzer ihre Kontaktinformationen hinterlassen können?" - -#: class/ShmMap.class.php:409 -msgid "You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;" -msgstr "Sie können ein eigenes Fomrular mit folgenden Elementen erstellen: & laquo; Textlinie & raquo;, & laquo; Textfeld & raquo;, & laquo; Dateiupload & raquo;, & laquo; Markierungskategorien & raquo;" - -#: class/ShmMap.class.php:406 -msgid "2.3. What information can users enter?" -msgstr "2.3. Welche Informationen können Benutzer hinterlassen?" - -#: class/ShmMap.class.php:398 -msgid "2.2. Will I notify the author about new posts?" -msgstr "2.2. Soll der Autor über neue Beiträge informiert werden?" - -#: class/ShmMap.class.php:392 -msgid "For example «All beaches by the river»" -msgstr "Zum Beispiel «Alle Strände am Fluss»" - -#: class/ShmMap.class.php:388 -msgid "2.1. What is the name of your information form?" -msgstr "2.1. Wie lautet der Name des Formulars?" - -#: class/ShmMap.class.php:383 -msgid "Enable crowdsourcing function (free add Users new Markers)" -msgstr "Aktivieren der Crowdsourcing-Funktion (hinzufügen neuer Markierungen durch Benutzer) " - -#: class/ShmMap.class.php:351 -msgid "Recommended size is 64х64 px, format is .png" -msgstr "Empfohlene Größe ist 64x64 pc, empfohlenes Format ist .png" - -#: class/ShmMap.class.php:346 -msgid "1.7. Default Marker icon" -msgstr "1.7. Standard Marker Icon" - -#: class/ShmMap.class.php:335 -msgid "1.6. Will Marker type filter be displayed?" -msgstr "1.6. Soll das Filterfeld nach Markertypen angezeigt werden?" - -#: class/ShmMap.class.php:324 -msgid "1.5. Will the legend be displayed?" -msgstr "1.5. Soll die Legende angezeigt werden?" - -#: class/ShmMap.class.php:313 -msgid "1.4. May User download data in *.csv?" -msgstr "1.4. Dürfen Benutzer Daten als .csv herunterladen?" - -#: class/ShmMap.class.php:299 -msgid "Choose layers" -msgstr "Ebene Auswählen" - -#: class/ShmMap.class.php:277 -msgid "Map zoom slider enabled" -msgstr "Vergößerungschieberegler aktivieren" - -#: class/ShmMap.class.php:269 -msgid "1.3. Include interface" -msgstr "1.3. Welche Kartensteuerungen sollen vorhanden sein?" - -#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 -msgid "Empty for " -msgstr "Leer lassen für " - -#: class/ShmMap.class.php:249 -msgid "1.2. Set size for map's div (per pixels)" -msgstr "1.2. Einstellen der Kartengröße (in Pixeln)" - -#: class/ShmMap.class.php:237 -msgid "1.1. Pan map and choose zoom" -msgstr "1.1. Karte zentireren und Maßstab auswählen" - -#: class/ShmMap.class.php:212 -msgid "Step 2. May anover Users add information for Map." -msgstr "Schritt 2. Können andere Benutzer Ihrer Karte Informationen hinzufügen?" - -#: class/ShmMap.class.php:198 -msgid "You can insert a card into a post or page by copying this shortcode." -msgstr "Sie können eine Karte in einen Beitrag oder in eine Seite einfügen, indem Sie diesen Shortcode kopieren." - -#: class/ShmMap.class.php:186 -msgid "Including Map to post" -msgstr "Karte einem Beitrag hinzufügen" - -#: class/ShmMap.class.php:162 -msgid "only request form" -msgstr "nur Anfrageformular" - -#: class/ShmMap.class.php:153 -msgid "only map" -msgstr "nur Karte" - -#: class/ShmMap.class.php:145 -msgid "include all (map and request form)" -msgstr "alles inklusive(Karte und Anfrageformular)" - -#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 -msgid "Map markers" -msgstr "Markierungen" - -#: class/ShmMap.class.php:124 -msgid "shortcodes" -msgstr "Shortcodes" - -#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 -msgid "ID" -msgstr "ID" - -#: class/ShmMap.class.php:80 -msgid "no found Map in trash" -msgstr "Keine Karte im Papierkorb gefunden" - -#: class/ShmMap.class.php:79 -msgid "Map not found" -msgstr "Karte nicht gefunden" - -#: class/ShmMap.class.php:78 -msgid "search Map" -msgstr "Karte suchen" - -#: class/ShmMap.class.php:77 -msgid "view Map" -msgstr "Karte anzeigen" - -#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 -msgid "all Maps" -msgstr "alle Karten" - -#: class/ShmMap.class.php:74 -msgid "edit Map" -msgstr "Karte bearbeiten" - -#: class/ShmMap.class.php:65 -msgid "Step 1. Set up your map." -msgstr "Schritt 1. Karte einrichten" - -#: class/ShMapPointType.class.php:358 -msgid "None" -msgstr "Keine" - -#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 -msgid "Color" -msgstr "Farbe" - -#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 -#: class/ShMapPointType.class.php:197 -msgid "Icon" -msgstr "Icon" - -#: class/ShMapPointType.class.php:86 -msgid "Name" -msgstr "Name" - -#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 -msgid "Map marker types" -msgstr "Markertypen" - -#: class/ShMapPointType.class.php:49 -msgid "Unique type of every Map markers" -msgstr "Einzigartiger Typ jeder Kartenmarkierung" - -#: class/ShMapPointType.class.php:42 -msgid "new Map marker type name" -msgstr "Name des neuen Markertyps" - -#: class/ShMapPointType.class.php:41 -msgid "add Map marker type" -msgstr "neuen Markertyp hinzufügen" - -#: class/ShMapPointType.class.php:40 -msgid "update Map marker type" -msgstr "Markertyp aktualisieren" - -#: class/ShMapPointType.class.php:39 -msgid "edit Map marker type" -msgstr "Makrertyp bearbeiten" - -#: class/ShMapPointType.class.php:38 -msgid "parent Map marker type:" -msgstr "Markertyp der übergeordneten Karte:" - -#: class/ShMapPointType.class.php:37 -msgid "parent Map marker type" -msgstr "übergeordneter Markertyp" - -#: class/ShMapPointType.class.php:36 -msgid "view Map marker type" -msgstr "Markertyp ansehen" - -#: class/ShMapPointType.class.php:35 -msgid "all Map marker types" -msgstr "alle Markertypen" - -#: class/ShMapPointType.class.php:34 -msgid "Search Map marker type" -msgstr "Markertyp suchen" - -#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 -#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 -msgid "Map marker type" -msgstr "Markertyp" - -#: class/ShMapper.class.php:607 -msgid "Prevous step" -msgstr "Vorheriger Schritt" - -#: class/ShMapper.class.php:602 class/ShMapper.class.php:608 -msgid "Go to current page" -msgstr "Zur aktuellen Seite" - -#: class/ShMapper.class.php:601 class/ShMapper.class.php:609 -msgid "Close wizzard" -msgstr "Assisten schließen" - -#: class/ShMapper.class.php:559 -msgid "Restart wizzard" -msgstr "Assistent neustarten" - -#: class/ShMapper.class.php:556 -msgid "Wizzard" -msgstr "Assistent" - -#: class/ShMapper.class.php:544 -msgid "Error send map request" -msgstr "Fehler beim Senden der Anfrage" - -#: class/ShMapper.class.php:538 -msgid "Successful send map request" -msgstr "Anfrage erfolgreich gesendet" - -#: class/ShMapper.class.php:532 -msgid "Save personal data garantee" -msgstr "Garantierte Speicherung personenbezogener Daten" - -#: class/ShMapper.class.php:528 -msgid "Vocabulary" -msgstr "Textbausteine" - -#: class/ShMapper.class.php:516 -msgid "Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha" -msgstr "Dein Captcha funktioniert noch nicht. Um diese Funktion zu aktivieren, rufen Sie die API-Schlüssel unter google.com/recaptch ab" - -#: class/ShMapper.class.php:512 -msgid "What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s." -msgstr "Was ist Google reCAPTCHA? Wie erhalte ich einen Schlüssel? Weitere Informationen %gibt es hier%s." - -#: class/ShMapper.class.php:503 -msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" -msgstr "Aktivieren Sie Captcha im Formular (das Plugin verwendet nur reCAPTCHA v2-Schlüssel)." - -#: class/ShMapper.class.php:496 -msgid "Protection" -msgstr "Sicherheit" - -#: class/ShMapper.class.php:484 -msgid "Reload page after User send request." -msgstr "Neuladen der Seite nach einer Benutzereinreichung" - -#: class/ShMapper.class.php:476 -msgid "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" -msgstr "ACHTUNG: Deaktivieren Sie diese Option nur auf eigene Gefahr. Es besteht die Gefahr von Spam-Angriffen" - -#: class/ShMapper.class.php:472 -msgid "все сообщения будут добавляться в статусе «Черновик»" -msgstr "Alle Nachrichten erhalten den Status «Entwurf»" - -#: class/ShMapper.class.php:468 -msgid "Pre-modertion from Map owner." -msgstr "Vormoderation durch den Karteninhaber." - -#: class/ShMapper.class.php:460 -msgid "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." -msgstr "Benutzer können keiner Karte Nachrichten hinzufügen. Wenn das Häkchen aktiviert ist, wird der Interaktivitätsblock nicht einmal angezeigt." - -#: class/ShMapper.class.php:456 -msgid "Включить глобальный режим неинтерактивных карт" -msgstr "Aktivieren Sie den globalen nicht interaktiven Kartenmodus" - -#: class/ShMapper.class.php:448 -msgid "Interactive" -msgstr "Interaktiv" - -#: class/ShMapper.class.php:439 -msgid "Open Street Map" -msgstr "Open Street Map" - -#: class/ShMapper.class.php:433 -msgid "Yandex Map" -msgstr "Yandex Map" - -#: class/ShMapper.class.php:426 -msgid "Map API" -msgstr "Karten API" - -#: class/ShMapper.class.php:402 class/ShMapper.class.php:403 -#: class/ShMapper.class.php:417 -msgid "Settings" -msgstr "Einstellungen" - -#: class/ShMapper.class.php:276 assets/js/ShMapper.admin.js:155 -msgid "Are you shure?" -msgstr "Sind Sie sicher?" - -#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 -msgid "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match" -msgstr "Fehler: Das Formular ist nicht mit der Karte verknüpft. Um eine Karte und ein Formular zu verknüpfen, müssen auf einer Seite zwei Shortcodes vorhanden sein (Karte - [shmMap id='6' map='true' uniq='z.B., 777'] und Formular - [shmMap id='94' form='true' uniq='z.B., 777']), für die die uniq-Parameter übereinstimmen." - -#: class/ShMapper.class.php:274 class/ShMapper.class.php:370 -#: assets/js/ShMapper.js:391 -msgid "Close" -msgstr "Schließen" - -#: class/ShMapper.class.php:273 class/ShMapper.class.php:369 -msgid "Send" -msgstr "Senden" - -#: class/ShMapper.class.php:272 class/ShMapper.class.php:368 -#: assets/js/ShMapper.js:381 -msgid "Attantion" -msgstr "Achtung" - -#: class/ShMapper.class.php:178 -msgid "Accessed User" -msgstr "Benutzerzugriff" - -#: class/ShMapper.class.php:177 -msgid "Aprove date" -msgstr "Datum bestätigen" - -#: class/ShMapper.class.php:176 -msgid "Aproved" -msgstr "Bestätigt" - -#: class/ShMapper.class.php:175 -msgid "Contacts" -msgstr "Kontakte" - -#: class/ShMapper.class.php:173 -msgid "Session" -msgstr "Sitzung|Session" - -#: class/ShMapper.class.php:172 class/ShmPoint.class.php:231 -#: class/ShmPoint.class.php:308 -msgid "Type" -msgstr "Typ" - -#: class/ShMapper.class.php:167 class/ShmMap.class.php:103 -#: class/ShmMap.class.php:596 class/SMC_Post.php:370 -#: class/ShmPoint.class.php:300 -msgid "Title" -msgstr "Titel" - -#: class/ShMapper.class.php:166 class/ShmMap.class.php:70 -#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 -msgid "Map" -msgstr "Karte" - -#: class/ShMapper.class.php:160 -msgid "Required Personal phone" -msgstr "Telefonnummer erforderlich" - -#: class/ShMapper.class.php:159 class/ShmMap.class.php:466 -msgid "Personal phone" -msgstr "Telefonnummer" - -#: class/ShMapper.class.php:158 -msgid "Unclude Personal phone" -msgstr "Telefonnummer aktivieren" - -#: class/ShMapper.class.php:157 -msgid "Required Personal e-mail" -msgstr "E-Mail erforderlich" - -#: class/ShMapper.class.php:156 -msgid "Personal e-mail" -msgstr "E-Mail Adresse" - -#: class/ShMapper.class.php:155 -msgid "Unclude Personal e-mail" -msgstr "E-Mail aktivieren" - -#: class/ShMapper.class.php:154 -msgid "Required Personal name" -msgstr "Name erforderlich" - -#: class/ShMapper.class.php:153 class/ShmMap.class.php:434 -msgid "Personal name" -msgstr "Name" - -#: class/ShMapper.class.php:152 -msgid "Unclude Personal name" -msgstr "Name aktivieren" - -#: class/ShMapper.class.php:151 class/ShmMap.class.php:421 -msgid "Users can leave their contact details for feedback." -msgstr "Benutzer können ihre Kontaktdaten für Feedback hinterlassen." - -#: class/ShMapper.class.php:150 -msgid "Form generator" -msgstr "Formular Generator" - -#: class/ShMapper.class.php:149 -msgid "Form Title" -msgstr "Formular Titel" - -#: class/ShMapper.class.php:148 class/ShmMap.class.php:122 -#: class/ShmMap.class.php:401 -msgid "Notify owner of Map" -msgstr "Autor der Karte benachrichtigen" - -#: class/ShMapper.class.php:147 class/ShmMap.class.php:117 -msgid "Form exists" -msgstr "Formular vorhanden" - -#: class/ShMapper.class.php:145 -msgid "Default Marker icon" -msgstr "Standard Markierungs Icon" - -#: class/ShMapper.class.php:144 class/ShmMap.class.php:291 -msgid "Formating Marker to cluster" -msgstr "Kartenmakierungen zu Cluster stappeln" - -#: class/ShMapper.class.php:143 class/ShmMap.class.php:295 -msgid "Lock zoom and drag" -msgstr "Blockieren der Vergößerung und des Verschiebens" - -#: class/ShMapper.class.php:142 class/ShmMap.class.php:281 -msgid "Map layer switcher" -msgstr "Kartenebenen" - -#: class/ShMapper.class.php:141 -msgid "Map zoom slider" -msgstr "Kartenvergrößerungsschieberegler" - -#: class/ShMapper.class.php:140 class/ShmMap.class.php:287 -msgid "Map full screen" -msgstr "Voolbildmodus" - -#: class/ShMapper.class.php:139 class/ShmMap.class.php:273 -msgid "Map search" -msgstr "Kartensuche" - -#: class/ShMapper.class.php:138 class/ShMapPointType.class.php:125 -#: class/ShMapPointType.class.php:177 class/ShmMap.class.php:252 -#: widget/ShMap.widget.php:80 -msgid "Height" -msgstr "Höhe" - -#: class/ShMapper.class.php:137 class/ShMapPointType.class.php:131 -#: class/ShMapPointType.class.php:187 class/ShmMap.class.php:257 -msgid "Width" -msgstr "Breite" - -#: class/ShMapper.class.php:136 class/ShmMap.class.php:107 -#: class/ShmMap.class.php:316 -msgid "Export csv" -msgstr "csv exportieren" - -#: class/ShMapper.class.php:135 class/ShmMap.class.php:338 -msgid "Filters exists" -msgstr "Filter vorhanden" - -#: class/ShMapper.class.php:134 class/ShmMap.class.php:112 -#: class/ShmMap.class.php:327 -msgid "Legend exists" -msgstr "Legende vorhanden" - -#: class/ShMapper.class.php:126 class/ShMapper.class.php:133 -msgid "Zoom" -msgstr "Zoom" - -#: class/ShMapper.class.php:93 -msgid "edit Maps in page" -msgstr "Karten auf der Seite bearbeiten" - -#: class/ShMapper.class.php:87 -msgid "Maps" -msgstr "Karten" - -#: class/ShMapper.class.php:81 class/ShmMap.class.php:72 -#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 -msgid "add Map" -msgstr "Karte hinzufügen" - -#: class/ShMapper.class.php:75 class/ShMapper.class.php:389 -#: class/ShMapper.class.php:390 -msgid "Shmapper" -msgstr "shMapper" - -#: class/ShMapper.class.php:27 -msgid "Unknown error." -msgstr "Unbekannter Fehler" - -#: class/ShMapper.class.php:26 -msgid "Your request has been successfully registered." -msgstr "Ihre Anfrage wurde erfolgreich registriert." - -#: class/ShMapper.class.php:25 -msgid "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." -msgstr "Ich erteile dem Site-Administrator meine Zustimmung, meine personenbezogenen Daten gemäß dem Bundesgesetz vom 27. Juli 2006 N 152-ФЗ "Über personenbezogene Daten" einschließlich automatisierter Daten zu verarbeiten." - -#: class/ShmForm.class.php:574 -msgid "Your phone" -msgstr "Telefonnummer" - -#: class/ShmForm.class.php:564 -msgid "Your e-mail" -msgstr "E-Mail" - -#: class/ShmForm.class.php:553 -msgid "Your name" -msgstr "Name" - -#: class/ShmForm.class.php:520 -msgid "Drag icon and place it to map." -msgstr "Ziehen Sie das Icon und platzieren Sie es auf der Karte" - -#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 -#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 -#: class/ShmForm.class.php:578 -msgid "This required field" -msgstr "Dieses Feld ist erforderlich" - -#: class/ShmForm.class.php:436 -msgid "Сhoose files" -msgstr "Datei auswählen" - -#: class/ShmForm.class.php:378 -msgid "The name of the parameter that refers to this element" -msgstr "Der Name des Parameters, der auf dieses Element verweist" - -#: class/ShmForm.class.php:326 -msgid "enable" -msgstr "aktivieren" - -#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 -msgid "require" -msgstr "erforderlich" - -#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 -msgid "Delete me" -msgstr "Lösch mich" - -#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 -msgid "Add after" -msgstr "Nachher hinzufügen" - -#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 -msgid "Add before" -msgstr "Vorher hinzufügen" - -#: class/ShmForm.class.php:231 -msgid "Element is required" -msgstr "Feld ist erforderlich" - -#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 -#: class/ShmForm.class.php:374 -msgid "write description" -msgstr "Beschreibung einfügen" - -#: class/ShmForm.class.php:223 class/ShmForm.class.php:295 -#: class/ShmForm.class.php:372 class/ShMapper.class.php:168 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 -msgid "Description" -msgstr "Beschreibung" - -#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 -#: class/ShmForm.class.php:361 -msgid "Placemark types" -msgstr "Markertypen" - -#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 -#: class/ShmForm.class.php:357 -msgid "write placeholder" -msgstr "Platzhalter einfügen" - -#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 -#: class/ShmForm.class.php:355 -msgid "Placeholder" -msgstr "Platzhalter" - -#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 -#: class/ShmForm.class.php:336 -msgid "write title" -msgstr "Titel einfügen" - -#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 -#: class/ShmForm.class.php:334 -msgid "Label of element" -msgstr "Elementbezeichnung" - -#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 -#: class/ShmForm.class.php:340 -msgid "Type of element" -msgstr "Typ des Elements" - -#: class/ShmForm.class.php:104 -msgid "enabled Map markers" -msgstr "verfügbare Marker" - -#: class/ShmForm.class.php:98 -msgid "input file" -msgstr "Bild hochladen" - -#: class/ShmForm.class.php:92 -msgid "textarea" -msgstr "Textfeld" - -#: class/ShmForm.class.php:62 -msgid "input text" -msgstr "Text eingeben" - -#: class/ShmForm.class.php:56 -msgid "input title" -msgstr "Titel eingeben" - -#: class/ShmForm.class.php:43 -msgid "Whrite description" -msgstr "Beschreibung hinzufügen" - -#: class/ShmForm.class.php:22 -msgid "Put a title" -msgstr "Titel eingeben" - -#: class/ShmForm.class.php:14 -msgid "Place the mark to Map" -msgstr "Marker platzieren" - -#: class/ShMapperRequest.class.php:360 -msgid "Trash" -msgstr "Papierkorb" - -#: class/ShMapperRequest.class.php:358 -msgid "Approve" -msgstr "zu genehmigen" - -#: class/ShMapperRequest.class.php:337 -msgid "You may see this %s" -msgstr "Hier zu sehen %s" - -#: class/ShMapperRequest.class.php:335 -msgid "<%s> Request to your Map from [%s] [%s]" -msgstr "<%s> Neue Kartenanfrage von [%s] [%s]" - -#: class/ShMapperRequest.class.php:327 -msgid "Uknown User" -msgstr "Unbekannter Benutzer" - -#: class/ShMapperRequest.class.php:88 class/ShMapper.class.php:123 -#: class/ShMapper.class.php:171 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:250 -msgid "Location" -msgstr "Adresse" - -#: class/ShMapperRequest.class.php:86 class/ShMapper.class.php:125 -#: class/ShMapper.class.php:132 class/ShMapper.class.php:170 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 -msgid "Longitude" -msgstr "Längengrad" - -#: class/ShMapperRequest.class.php:84 class/ShMapper.class.php:124 -#: class/ShMapper.class.php:131 class/ShMapper.class.php:169 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 -msgid "Latitude" -msgstr "Breitengrad" - -#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 -msgid "GEO location" -msgstr "Geo-Position" - -#: class/ShMapperRequest.class.php:67 class/ShMapper.class.php:174 -#: class/ShmMap.class.php:126 -msgid "Author" -msgstr "Autor" - -#: class/ShMapperRequest.class.php:64 -msgid "Approving" -msgstr "Genehmigung" - -#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 -msgid "Image" -msgstr "Bild" - -#: class/ShMapperRequest.class.php:29 -msgid "no found Map Request in trash" -msgstr "Keine Kartenanfrage im Papierkorb gefunden" - -#: class/ShMapperRequest.class.php:28 -msgid "Map Request not found" -msgstr "Anfrage nicht gefunden" - -#: class/ShMapperRequest.class.php:27 -msgid "search Map Request" -msgstr "Kartenanfrage suchen" - -#: class/ShMapperRequest.class.php:26 -msgid "view Map Request" -msgstr "Kartenanfrage ansehen" - -#: class/ShMapperRequest.class.php:25 class/ShMapperRequest.class.php:30 -#: class/ShMapper.class.php:112 -msgid "all Map Requests" -msgstr "Alle Kartenanfragen" - -#: class/ShMapperRequest.class.php:23 -msgid "edit Map Request" -msgstr "Kartenanfrage bearbeiten" - -#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 -#: class/ShMapperRequest.class.php:24 -msgid "add Map Request" -msgstr "Neu hinzufügen" - -#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 -msgid "Map Request" -msgstr "Kartenanfrage" - -#: class/ShMapper_ajax.class.php:456 class/ShMapper_ajax.class.php:467 -msgid "Set key" -msgstr "Schlüssel setzen" - -#: class/ShMapper_ajax.class.php:396 -msgid "Change Vocabulaty: " -msgstr "Textbausteine ändern: " - -#: class/ShMapper_ajax.class.php:357 -msgid "Create" -msgstr "Erstellen" - -#: class/ShMapper_ajax.class.php:355 -msgid "add Map Point" -msgstr "Marker hinzugefügt" - -#: class/ShMapper_ajax.class.php:339 -msgid "Delete" -msgstr "Löschen" - -#: class/ShMapper_ajax.class.php:337 -msgid "Are you want delete %s?" -msgstr "Möchten Sie %s löschen?" - -#: class/ShMapper_ajax.class.php:232 -msgid "Request put to Trash" -msgstr "Anfrage in Papierkorb verschoben" - -#: class/ShMapper_ajax.class.php:220 -msgid "Approve succesfully and insert new Map marker" -msgstr "Genehmigt. Marker erstellt" - -#: class/ShMapper_ajax.class.php:206 -msgid "Wizzard restarted" -msgstr "Assistent wird neugestartet" - -#: class/ShMapper_ajax.class.php:195 -msgid "Wizzard closed" -msgstr "Assistent geschlossen" - -#: class/ShMapper_ajax.class.php:177 -msgid "Congratulation! That's all!" -msgstr "Glückwunsch! Das ist alles!" - -#: class/ShMapper_ajax.class.php:170 class/ShMapper.class.php:605 -msgid "Next step" -msgstr "Nächster Schritt" - -#: shortcode/shmMap.shortcode.php:43 -msgid "Send request" -msgstr "Anfrage senden" - -#: shortcode/shmMap.shortcode.php:19 -msgid "No map on ID " -msgstr "Karten-ID nicht angegeben" - -#. Author URI of the plugin -msgid "https://te-st.ru" -msgstr "https://te-st.ru" - -#. Author of the plugin -msgid "Teplitsa. Technologies for Social Good" -msgstr "Teplitsa. Technologies for Social Good" - -#. Description of the plugin -msgid "Location and logistics services for NKO" -msgstr "Location and logistics services for NKO" - -#. Plugin URI of the plugin -msgid "http://genagl.ru/?p=652" -msgstr "http://genagl.ru/?p=652" - -#. Plugin Name of the plugin -msgid "ShMapper by Teplitsa" -msgstr "ShMapper by Teplitsa" - -msgid "Yandex.Maps API key Saved" -msgstr "Yandey.Maps API Schlüssel gespeichert" - -msgid "Yandex.Maps API Key" -msgstr "Yandex.Maps API Schlüssel" - -msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." -msgstr "ACHTUNG: Sie müssen einen Schlüssel angeben, um die Yandex.Maps API benutzen zu können." - -msgid "Learn more here:" -msgstr "Mehr Informationen:" - -msgid "Yandex.Maps" -msgstr "Yandex.Maps" \ No newline at end of file +# Translation of Plugins - shMapper by Teplitsa - Development (trunk) in Russian +# This file is distributed under the same license as the Plugins - shMapper by Teplitsa - Development (trunk) package. +msgid "" +msgstr "" +"PO-Revision-Date: 2020-06-18 05:54+0300\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.8.8\n" +"Language: de\n" +"Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" +"POT-Creation-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" + +#: class/ShmAdminPage.class.php:27 +msgid "shMapper developers chat" +msgstr "shMapper Entwicklerchat" + +#: class/ShmForm.class.php:497 +msgid "Drag choosed icon and place it to map or click it and enter exact address." +msgstr "Ziehen Sie das ausgewählte Symbol an die gewünschte Stelle auf der Karte oder klicken Sie darauf und geben Sie die genaue Adresse ein." + +#: assets/js/ShMapper.front.js:9 +msgid "Error: no map" +msgstr "Fehler: Keine Karte" + +#: widget/ShMap.widget.php:64 +msgid "Tite" +msgstr "Titel" + +#: widget/ShMap.widget.php:17 +msgid "Player Cabinet" +msgstr "Dashboard" + +#: widget/ShMap.widget.php:16 +msgid "Ermak Locations" +msgstr "Position verschieben" + +#: widget/ShMap.widget.php:9 +msgid "Shmapper Locations" +msgstr "Shmapper Position" + +#: tpl/shmMap.php:83 +msgid "download %s.csv" +msgstr "%s.csv herunterladen" + +#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 +msgid "Submit" +msgstr "Senden" + +#: tpl/input_file_form.php:77 +msgid "Insert" +msgstr "Einfügen" + +#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 +msgid "Remove" +msgstr "Entfernen" + +#: tpl/input_file_form.php:72 +msgid "Browse" +msgstr "Durchsuchen" + +#: tpl/input_file_form.php:66 +msgid "File" +msgstr "Datei" + +#: tpl/input_file_form.php:64 +msgid "Upload Image" +msgstr "Bild hochladen" + +#: class/ShmPoint.class.php:312 +msgid "Address" +msgstr "Adresse" + +#: class/ShmPoint.class.php:158 +msgid "Map owner" +msgstr "Kartenbesitzer" + +#: class/ShmPoint.class.php:33 +msgid "no found Map marker in trash" +msgstr "Keinen Kartenpunkt im Papierkorb gefunden" + +#: class/ShmPoint.class.php:32 +msgid "Map marker not found" +msgstr "Markierung nicht gefunden" + +#: class/ShmPoint.class.php:31 +msgid "search Map marker" +msgstr "Markierung suchen" + +#: class/ShmPoint.class.php:30 +msgid "view Map marker" +msgstr "Markierung ansehen" + +#: class/ShmPoint.class.php:29 +msgid "all Map markers" +msgstr "Alle Markierungen" + +#: class/ShmPoint.class.php:27 +msgid "edit Map marker" +msgstr "Markierung bearbeiten" + +#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 +#: class/ShmPoint.class.php:28 +msgid "add Map marker" +msgstr "Markierung hinzufügen" + +#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 +msgid "Map marker" +msgstr "Markierung" + +#: class/ShMapper_Assistants.class.php:90 +msgid "Your requests to this Map " +msgstr "Ihre Einreichung für die Karte " + +#: class/ShMapper_Assistants.class.php:44 +msgid "all maps" +msgstr "Alle Karten" + +#: class/SMC_Post.php:631 class/SMC_Post.php:636 +msgid "Parameters" +msgstr "Optionen" + +#: class/SMC_Post.php:566 +msgid "Yes" +msgstr "Ja" + +#: class/SMC_Post.php:563 +msgid "No" +msgstr "Nein" + +#: class/SMC_Post.php:560 +msgid "— No Change —" +msgstr "— Keine Veränderung —" + +#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 +#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 +msgid "Usage in Maps: " +msgstr "Wird in Karte verwendet: " + +#: class/ShmMap.class.php:780 +msgid "Succesfuly delete map and %s points migrates to %s" +msgstr "Karte erfolgreich gelöscht und %s Punkte nach %s verschoben" + +#: class/ShmMap.class.php:773 +msgid "Succesfuly delete map and %s points are orphans now" +msgstr "Karte erfolgreich gelöscht und %s Punkte sind keiner Karte zugeordnet" + +#: class/ShmMap.class.php:768 +msgid "Succesfuly delete map width %s points" +msgstr "Karte erfolgreich mit %s Punkten gelöscht" + +#: class/ShmMap.class.php:682 +msgid "Switch all Points to anover Map" +msgstr "Verschiebe alle Markierung auf eine andere Karte" + +#: class/ShmMap.class.php:676 +msgid "Escape all Points without Owner Map" +msgstr "Alle Markierungen ohne Eltern-Karte stehen lassen" + +#: class/ShmMap.class.php:670 +msgid "Delete all Points" +msgstr "Lösche alle Markierung" + +#: class/ShmMap.class.php:665 +msgid "What do with placemarks of deleting Map?" +msgstr "Was soll mit den Markierungen der gelöschten Karte passieren?" + +#: class/ShmMap.class.php:521 class/SMC_Post.php:496 +msgid "Double" +msgstr "Duplizieren" + +#: class/ShmMap.class.php:450 +msgid "Personal email" +msgstr "E-Mail Addresse" + +#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 +#: class/ShmMap.class.php:471 +msgid "Required" +msgstr "Erforderlich" + +#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 +#: class/ShmMap.class.php:461 +msgid "Include" +msgstr "Einschalten" + +#: class/ShmMap.class.php:426 +msgid "2.5. What data users will have to put?" +msgstr "2.5. Welche Daten müssen Benutzer angeben?" + +#: class/ShmMap.class.php:418 +msgid "2.4. Can users leave their contact information?" +msgstr "2.4. Sollen Benutzer ihre Kontaktinformationen hinterlassen können?" + +#: class/ShmMap.class.php:409 +msgid "You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;" +msgstr "Sie können ein eigenes Fomrular mit folgenden Elementen erstellen: & laquo; Textlinie & raquo;, & laquo; Textfeld & raquo;, & laquo; Dateiupload & raquo;, & laquo; Markierungskategorien & raquo;" + +#: class/ShmMap.class.php:406 +msgid "2.3. What information can users enter?" +msgstr "2.3. Welche Informationen können Benutzer hinterlassen?" + +#: class/ShmMap.class.php:398 +msgid "2.2. Will I notify the author about new posts?" +msgstr "2.2. Soll der Autor über neue Beiträge informiert werden?" + +#: class/ShmMap.class.php:392 +msgid "For example «All beaches by the river»" +msgstr "Zum Beispiel «Alle Strände am Fluss»" + +#: class/ShmMap.class.php:388 +msgid "2.1. What is the name of your information form?" +msgstr "2.1. Wie lautet der Name des Formulars?" + +#: class/ShmMap.class.php:383 +msgid "Enable crowdsourcing function (free add Users new Markers)" +msgstr "Aktivieren der Crowdsourcing-Funktion (hinzufügen neuer Markierungen durch Benutzer) " + +#: class/ShmMap.class.php:351 +msgid "Recommended size is 64х64 px, format is .png" +msgstr "Empfohlene Größe ist 64x64 pc, empfohlenes Format ist .png" + +#: class/ShmMap.class.php:346 +msgid "1.7. Default Marker icon" +msgstr "1.7. Standard Marker Icon" + +#: class/ShmMap.class.php:335 +msgid "1.6. Will Marker type filter be displayed?" +msgstr "1.6. Soll das Filterfeld nach Markertypen angezeigt werden?" + +#: class/ShmMap.class.php:324 +msgid "1.5. Will the legend be displayed?" +msgstr "1.5. Soll die Legende angezeigt werden?" + +#: class/ShmMap.class.php:313 +msgid "1.4. May User download data in *.csv?" +msgstr "1.4. Dürfen Benutzer Daten als .csv herunterladen?" + +#: class/ShmMap.class.php:299 +msgid "Choose layers" +msgstr "Ebene Auswählen" + +#: class/ShmMap.class.php:277 +msgid "Map zoom slider enabled" +msgstr "Vergößerungschieberegler aktivieren" + +#: class/ShmMap.class.php:269 +msgid "1.3. Include interface" +msgstr "1.3. Welche Kartensteuerungen sollen vorhanden sein?" + +#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 +msgid "Empty for " +msgstr "Leer lassen für " + +#: class/ShmMap.class.php:249 +msgid "1.2. Set size for map's div (per pixels)" +msgstr "1.2. Einstellen der Kartengröße (in Pixeln)" + +#: class/ShmMap.class.php:237 +msgid "1.1. Pan map and choose zoom" +msgstr "1.1. Karte zentireren und Maßstab auswählen" + +#: class/ShmMap.class.php:212 +msgid "Step 2. May anover Users add information for Map." +msgstr "Schritt 2. Können andere Benutzer Ihrer Karte Informationen hinzufügen?" + +#: class/ShmMap.class.php:198 +msgid "You can insert a card into a post or page by copying this shortcode." +msgstr "Sie können eine Karte in einen Beitrag oder in eine Seite einfügen, indem Sie diesen Shortcode kopieren." + +#: class/ShmMap.class.php:186 +msgid "Including Map to post" +msgstr "Karte einem Beitrag hinzufügen" + +#: class/ShmMap.class.php:162 +msgid "only request form" +msgstr "nur Anfrageformular" + +#: class/ShmMap.class.php:153 +msgid "only map" +msgstr "nur Karte" + +#: class/ShmMap.class.php:145 +msgid "include all (map and request form)" +msgstr "alles inklusive(Karte und Anfrageformular)" + +#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 +msgid "Map markers" +msgstr "Markierungen" + +#: class/ShmMap.class.php:124 +msgid "shortcodes" +msgstr "Shortcodes" + +#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 +msgid "ID" +msgstr "ID" + +#: class/ShmMap.class.php:80 +msgid "no found Map in trash" +msgstr "Keine Karte im Papierkorb gefunden" + +#: class/ShmMap.class.php:79 +msgid "Map not found" +msgstr "Karte nicht gefunden" + +#: class/ShmMap.class.php:78 +msgid "search Map" +msgstr "Karte suchen" + +#: class/ShmMap.class.php:77 +msgid "view Map" +msgstr "Karte anzeigen" + +#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 +msgid "all Maps" +msgstr "alle Karten" + +#: class/ShmMap.class.php:74 +msgid "edit Map" +msgstr "Karte bearbeiten" + +#: class/ShmMap.class.php:65 +msgid "Step 1. Set up your map." +msgstr "Schritt 1. Karte einrichten" + +#: class/ShMapPointType.class.php:358 +msgid "None" +msgstr "Keine" + +#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 +msgid "Color" +msgstr "Farbe" + +#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 +#: class/ShMapPointType.class.php:197 +msgid "Icon" +msgstr "Icon" + +#: class/ShMapPointType.class.php:86 +msgid "Name" +msgstr "Name" + +#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 +msgid "Map marker types" +msgstr "Markertypen" + +#: class/ShMapPointType.class.php:49 +msgid "Unique type of every Map markers" +msgstr "Einzigartiger Typ jeder Kartenmarkierung" + +#: class/ShMapPointType.class.php:42 +msgid "new Map marker type name" +msgstr "Name des neuen Markertyps" + +#: class/ShMapPointType.class.php:41 +msgid "add Map marker type" +msgstr "neuen Markertyp hinzufügen" + +#: class/ShMapPointType.class.php:40 +msgid "update Map marker type" +msgstr "Markertyp aktualisieren" + +#: class/ShMapPointType.class.php:39 +msgid "edit Map marker type" +msgstr "Makrertyp bearbeiten" + +#: class/ShMapPointType.class.php:38 +msgid "parent Map marker type:" +msgstr "Markertyp der übergeordneten Karte:" + +#: class/ShMapPointType.class.php:37 +msgid "parent Map marker type" +msgstr "übergeordneter Markertyp" + +#: class/ShMapPointType.class.php:36 +msgid "view Map marker type" +msgstr "Markertyp ansehen" + +#: class/ShMapPointType.class.php:35 +msgid "all Map marker types" +msgstr "alle Markertypen" + +#: class/ShMapPointType.class.php:34 +msgid "Search Map marker type" +msgstr "Markertyp suchen" + +#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 +#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 +msgid "Map marker type" +msgstr "Markertyp" + +#: class/ShMapper.class.php:607 +msgid "Prevous step" +msgstr "Vorheriger Schritt" + +#: class/ShMapper.class.php:602 class/ShMapper.class.php:608 +msgid "Go to current page" +msgstr "Zur aktuellen Seite" + +#: class/ShMapper.class.php:601 class/ShMapper.class.php:609 +msgid "Close wizzard" +msgstr "Assisten schließen" + +#: class/ShMapper.class.php:559 +msgid "Restart wizzard" +msgstr "Assistent neustarten" + +#: class/ShMapper.class.php:556 +msgid "Wizzard" +msgstr "Assistent" + +#: class/ShMapper.class.php:544 +msgid "Error send map request" +msgstr "Fehler beim Senden der Anfrage" + +#: class/ShMapper.class.php:538 +msgid "Successful send map request" +msgstr "Anfrage erfolgreich gesendet" + +#: class/ShMapper.class.php:532 +msgid "Save personal data garantee" +msgstr "Garantierte Speicherung personenbezogener Daten" + +#: class/ShMapper.class.php:528 +msgid "Vocabulary" +msgstr "Textbausteine" + +#: class/ShMapper.class.php:516 +msgid "Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha" +msgstr "Dein Captcha funktioniert noch nicht. Um diese Funktion zu aktivieren, rufen Sie die API-Schlüssel unter google.com/recaptch ab" + +#: class/ShMapper.class.php:512 +msgid "What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s." +msgstr "Was ist Google reCAPTCHA? Wie erhalte ich einen Schlüssel? Weitere Informationen %gibt es hier%s." + +#: class/ShMapper.class.php:503 +msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" +msgstr "Aktivieren Sie Captcha im Formular (das Plugin verwendet nur reCAPTCHA v2-Schlüssel)." + +#: class/ShMapper.class.php:496 +msgid "Protection" +msgstr "Sicherheit" + +#: class/ShMapper.class.php:484 +msgid "Reload page after User send request." +msgstr "Neuladen der Seite nach einer Benutzereinreichung" + +#: class/ShMapper.class.php:476 +msgid "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" +msgstr "ACHTUNG: Deaktivieren Sie diese Option nur auf eigene Gefahr. Es besteht die Gefahr von Spam-Angriffen" + +#: class/ShMapper.class.php:472 +msgid "все сообщения будут добавляться в статусе «Черновик»" +msgstr "Alle Nachrichten erhalten den Status «Entwurf»" + +#: class/ShMapper.class.php:468 +msgid "Pre-modertion from Map owner." +msgstr "Vormoderation durch den Karteninhaber." + +#: class/ShMapper.class.php:460 +msgid "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." +msgstr "Benutzer können keiner Karte Nachrichten hinzufügen. Wenn das Häkchen aktiviert ist, wird der Interaktivitätsblock nicht einmal angezeigt." + +#: class/ShMapper.class.php:456 +msgid "Включить глобальный режим неинтерактивных карт" +msgstr "Aktivieren Sie den globalen nicht interaktiven Kartenmodus" + +#: class/ShMapper.class.php:448 +msgid "Interactive" +msgstr "Interaktiv" + +#: class/ShMapper.class.php:439 +msgid "Open Street Map" +msgstr "Open Street Map" + +#: class/ShMapper.class.php:433 +msgid "Yandex Map" +msgstr "Yandex Map" + +#: class/ShMapper.class.php:426 +msgid "Map API" +msgstr "Karten API" + +#: class/ShMapper.class.php:402 class/ShMapper.class.php:403 +#: class/ShMapper.class.php:417 +msgid "Settings" +msgstr "Einstellungen" + +#: class/ShMapper.class.php:276 assets/js/ShMapper.admin.js:155 +msgid "Are you shure?" +msgstr "Sind Sie sicher?" + +#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 +msgid "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match" +msgstr "Fehler: Das Formular ist nicht mit der Karte verknüpft. Um eine Karte und ein Formular zu verknüpfen, müssen auf einer Seite zwei Shortcodes vorhanden sein (Karte - [shmMap id='6' map='true' uniq='z.B., 777'] und Formular - [shmMap id='94' form='true' uniq='z.B., 777']), für die die uniq-Parameter übereinstimmen." + +#: class/ShMapper.class.php:274 class/ShMapper.class.php:370 +#: assets/js/ShMapper.js:391 +msgid "Close" +msgstr "Schließen" + +#: class/ShMapper.class.php:273 class/ShMapper.class.php:369 +msgid "Send" +msgstr "Senden" + +#: class/ShMapper.class.php:272 class/ShMapper.class.php:368 +#: assets/js/ShMapper.js:381 +msgid "Attantion" +msgstr "Achtung" + +#: class/ShMapper.class.php:178 +msgid "Accessed User" +msgstr "Benutzerzugriff" + +#: class/ShMapper.class.php:177 +msgid "Aprove date" +msgstr "Datum bestätigen" + +#: class/ShMapper.class.php:176 +msgid "Aproved" +msgstr "Bestätigt" + +#: class/ShMapper.class.php:175 +msgid "Contacts" +msgstr "Kontakte" + +#: class/ShMapper.class.php:173 +msgid "Session" +msgstr "Sitzung|Session" + +#: class/ShMapper.class.php:172 class/ShmPoint.class.php:231 +#: class/ShmPoint.class.php:308 +msgid "Type" +msgstr "Typ" + +#: class/ShMapper.class.php:167 class/ShmMap.class.php:103 +#: class/ShmMap.class.php:596 class/SMC_Post.php:370 +#: class/ShmPoint.class.php:300 +msgid "Title" +msgstr "Titel" + +#: class/ShMapper.class.php:166 class/ShmMap.class.php:70 +#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 +msgid "Map" +msgstr "Karte" + +#: class/ShMapper.class.php:160 +msgid "Required Personal phone" +msgstr "Telefonnummer erforderlich" + +#: class/ShMapper.class.php:159 class/ShmMap.class.php:466 +msgid "Personal phone" +msgstr "Telefonnummer" + +#: class/ShMapper.class.php:158 +msgid "Unclude Personal phone" +msgstr "Telefonnummer aktivieren" + +#: class/ShMapper.class.php:157 +msgid "Required Personal e-mail" +msgstr "E-Mail erforderlich" + +#: class/ShMapper.class.php:156 +msgid "Personal e-mail" +msgstr "E-Mail Adresse" + +#: class/ShMapper.class.php:155 +msgid "Unclude Personal e-mail" +msgstr "E-Mail aktivieren" + +#: class/ShMapper.class.php:154 +msgid "Required Personal name" +msgstr "Name erforderlich" + +#: class/ShMapper.class.php:153 class/ShmMap.class.php:434 +msgid "Personal name" +msgstr "Name" + +#: class/ShMapper.class.php:152 +msgid "Unclude Personal name" +msgstr "Name aktivieren" + +#: class/ShMapper.class.php:151 class/ShmMap.class.php:421 +msgid "Users can leave their contact details for feedback." +msgstr "Benutzer können ihre Kontaktdaten für Feedback hinterlassen." + +#: class/ShMapper.class.php:150 +msgid "Form generator" +msgstr "Formular Generator" + +#: class/ShMapper.class.php:149 +msgid "Form Title" +msgstr "Formular Titel" + +#: class/ShMapper.class.php:148 class/ShmMap.class.php:122 +#: class/ShmMap.class.php:401 +msgid "Notify owner of Map" +msgstr "Autor der Karte benachrichtigen" + +#: class/ShMapper.class.php:147 class/ShmMap.class.php:117 +msgid "Form exists" +msgstr "Formular vorhanden" + +#: class/ShMapper.class.php:145 +msgid "Default Marker icon" +msgstr "Standard Markierungs Icon" + +#: class/ShMapper.class.php:144 class/ShmMap.class.php:291 +msgid "Formating Marker to cluster" +msgstr "Kartenmakierungen zu Cluster stappeln" + +#: class/ShMapper.class.php:143 class/ShmMap.class.php:295 +msgid "Lock zoom and drag" +msgstr "Blockieren der Vergößerung und des Verschiebens" + +#: class/ShMapper.class.php:142 class/ShmMap.class.php:281 +msgid "Map layer switcher" +msgstr "Kartenebenen" + +#: class/ShMapper.class.php:141 +msgid "Map zoom slider" +msgstr "Kartenvergrößerungsschieberegler" + +#: class/ShMapper.class.php:140 class/ShmMap.class.php:287 +msgid "Map full screen" +msgstr "Voolbildmodus" + +#: class/ShMapper.class.php:139 class/ShmMap.class.php:273 +msgid "Map search" +msgstr "Kartensuche" + +#: class/ShMapper.class.php:138 class/ShMapPointType.class.php:125 +#: class/ShMapPointType.class.php:177 class/ShmMap.class.php:252 +#: widget/ShMap.widget.php:80 +msgid "Height" +msgstr "Höhe" + +#: class/ShMapper.class.php:137 class/ShMapPointType.class.php:131 +#: class/ShMapPointType.class.php:187 class/ShmMap.class.php:257 +msgid "Width" +msgstr "Breite" + +#: class/ShMapper.class.php:136 class/ShmMap.class.php:107 +#: class/ShmMap.class.php:316 +msgid "Export csv" +msgstr "csv exportieren" + +#: class/ShMapper.class.php:135 class/ShmMap.class.php:338 +msgid "Filters exists" +msgstr "Filter vorhanden" + +#: class/ShMapper.class.php:134 class/ShmMap.class.php:112 +#: class/ShmMap.class.php:327 +msgid "Legend exists" +msgstr "Legende vorhanden" + +#: class/ShMapper.class.php:126 class/ShMapper.class.php:133 +msgid "Zoom" +msgstr "Zoom" + +#: class/ShMapper.class.php:93 +msgid "edit Maps in page" +msgstr "Karten auf der Seite bearbeiten" + +#: class/ShMapper.class.php:87 +msgid "Maps" +msgstr "Karten" + +#: class/ShMapper.class.php:81 class/ShmMap.class.php:72 +#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 +msgid "add Map" +msgstr "Karte hinzufügen" + +#: class/ShMapper.class.php:75 class/ShMapper.class.php:389 +#: class/ShMapper.class.php:390 +msgid "Shmapper" +msgstr "shMapper" + +#: class/ShMapper.class.php:27 +msgid "Unknown error." +msgstr "Unbekannter Fehler" + +#: class/ShMapper.class.php:26 +msgid "Your request has been successfully registered." +msgstr "Ihre Anfrage wurde erfolgreich registriert." + +#: class/ShMapper.class.php:25 +msgid "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +msgstr "Ich erteile dem Site-Administrator meine Zustimmung, meine personenbezogenen Daten gemäß dem Bundesgesetz vom 27. Juli 2006 N 152-ФЗ \"Über personenbezogene Daten\" einschließlich automatisierter Daten zu verarbeiten." + +#: class/ShmForm.class.php:574 +msgid "Your phone" +msgstr "Telefonnummer" + +#: class/ShmForm.class.php:564 +msgid "Your e-mail" +msgstr "E-Mail" + +#: class/ShmForm.class.php:553 +msgid "Your name" +msgstr "Name" + +#: class/ShmForm.class.php:520 +msgid "Drag icon and place it to map." +msgstr "Ziehen Sie das Icon und platzieren Sie es auf der Karte" + +#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 +#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 +#: class/ShmForm.class.php:578 +msgid "This required field" +msgstr "Dieses Feld ist erforderlich" + +#: class/ShmForm.class.php:436 +msgid "Сhoose files" +msgstr "Datei auswählen" + +#: class/ShmForm.class.php:378 +msgid "The name of the parameter that refers to this element" +msgstr "Der Name des Parameters, der auf dieses Element verweist" + +#: class/ShmForm.class.php:326 +msgid "enable" +msgstr "aktivieren" + +#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 +msgid "require" +msgstr "erforderlich" + +#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 +msgid "Delete me" +msgstr "Lösch mich" + +#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 +msgid "Add after" +msgstr "Nachher hinzufügen" + +#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 +msgid "Add before" +msgstr "Vorher hinzufügen" + +#: class/ShmForm.class.php:231 +msgid "Element is required" +msgstr "Feld ist erforderlich" + +#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 +#: class/ShmForm.class.php:374 +msgid "write description" +msgstr "Beschreibung einfügen" + +#: class/ShmForm.class.php:223 class/ShmForm.class.php:295 +#: class/ShmForm.class.php:372 class/ShMapper.class.php:168 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 +msgid "Description" +msgstr "Beschreibung" + +#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:361 +msgid "Placemark types" +msgstr "Markertypen" + +#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 +#: class/ShmForm.class.php:357 +msgid "write placeholder" +msgstr "Platzhalter einfügen" + +#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 +#: class/ShmForm.class.php:355 +msgid "Placeholder" +msgstr "Platzhalter" + +#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 +#: class/ShmForm.class.php:336 +msgid "write title" +msgstr "Titel einfügen" + +#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 +#: class/ShmForm.class.php:334 +msgid "Label of element" +msgstr "Elementbezeichnung" + +#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 +#: class/ShmForm.class.php:340 +msgid "Type of element" +msgstr "Typ des Elements" + +#: class/ShmForm.class.php:104 +msgid "enabled Map markers" +msgstr "verfügbare Marker" + +#: class/ShmForm.class.php:98 +msgid "input file" +msgstr "Bild hochladen" + +#: class/ShmForm.class.php:92 +msgid "textarea" +msgstr "Textfeld" + +#: class/ShmForm.class.php:62 +msgid "input text" +msgstr "Text eingeben" + +#: class/ShmForm.class.php:56 +msgid "input title" +msgstr "Titel eingeben" + +#: class/ShmForm.class.php:43 +msgid "Whrite description" +msgstr "Beschreibung hinzufügen" + +#: class/ShmForm.class.php:22 +msgid "Put a title" +msgstr "Titel eingeben" + +#: class/ShmForm.class.php:14 +msgid "Place the mark to Map" +msgstr "Marker platzieren" + +#: class/ShMapperRequest.class.php:360 +msgid "Trash" +msgstr "Papierkorb" + +#: class/ShMapperRequest.class.php:358 +msgid "Approve" +msgstr "zu genehmigen" + +#: class/ShMapperRequest.class.php:337 +msgid "You may see this %s" +msgstr "Hier zu sehen %s" + +#: class/ShMapperRequest.class.php:335 +msgid "<%s> Request to your Map from [%s] [%s]" +msgstr "<%s> Neue Kartenanfrage von [%s] [%s]" + +#: class/ShMapperRequest.class.php:327 +msgid "Uknown User" +msgstr "Unbekannter Benutzer" + +#: class/ShMapperRequest.class.php:88 class/ShMapper.class.php:123 +#: class/ShMapper.class.php:171 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:250 +msgid "Location" +msgstr "Adresse" + +#: class/ShMapperRequest.class.php:86 class/ShMapper.class.php:125 +#: class/ShMapper.class.php:132 class/ShMapper.class.php:170 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 +msgid "Longitude" +msgstr "Längengrad" + +#: class/ShMapperRequest.class.php:84 class/ShMapper.class.php:124 +#: class/ShMapper.class.php:131 class/ShMapper.class.php:169 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 +msgid "Latitude" +msgstr "Breitengrad" + +#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 +msgid "GEO location" +msgstr "Geo-Position" + +#: class/ShMapperRequest.class.php:67 class/ShMapper.class.php:174 +#: class/ShmMap.class.php:126 +msgid "Author" +msgstr "Autor" + +#: class/ShMapperRequest.class.php:64 +msgid "Approving" +msgstr "Genehmigung" + +#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 +msgid "Image" +msgstr "Bild" + +#: class/ShMapperRequest.class.php:29 +msgid "no found Map Request in trash" +msgstr "Keine Kartenanfrage im Papierkorb gefunden" + +#: class/ShMapperRequest.class.php:28 +msgid "Map Request not found" +msgstr "Anfrage nicht gefunden" + +#: class/ShMapperRequest.class.php:27 +msgid "search Map Request" +msgstr "Kartenanfrage suchen" + +#: class/ShMapperRequest.class.php:26 +msgid "view Map Request" +msgstr "Kartenanfrage ansehen" + +#: class/ShMapperRequest.class.php:25 class/ShMapperRequest.class.php:30 +#: class/ShMapper.class.php:112 +msgid "all Map Requests" +msgstr "Alle Kartenanfragen" + +#: class/ShMapperRequest.class.php:23 +msgid "edit Map Request" +msgstr "Kartenanfrage bearbeiten" + +#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 +#: class/ShMapperRequest.class.php:24 +msgid "add Map Request" +msgstr "Neu hinzufügen" + +#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 +msgid "Map Request" +msgstr "Kartenanfrage" + +#: class/ShMapper_ajax.class.php:456 class/ShMapper_ajax.class.php:467 +msgid "Set key" +msgstr "Schlüssel setzen" + +#: class/ShMapper_ajax.class.php:396 +msgid "Change Vocabulaty: " +msgstr "Textbausteine ändern: " + +#: class/ShMapper_ajax.class.php:357 +msgid "Create" +msgstr "Erstellen" + +#: class/ShMapper_ajax.class.php:355 +msgid "add Map Point" +msgstr "Marker hinzugefügt" + +#: class/ShMapper_ajax.class.php:339 +msgid "Delete" +msgstr "Löschen" + +#: class/ShMapper_ajax.class.php:337 +msgid "Are you want delete %s?" +msgstr "Möchten Sie %s löschen?" + +#: class/ShMapper_ajax.class.php:232 +msgid "Request put to Trash" +msgstr "Anfrage in Papierkorb verschoben" + +#: class/ShMapper_ajax.class.php:220 +msgid "Approve succesfully and insert new Map marker" +msgstr "Genehmigt. Marker erstellt" + +#: class/ShMapper_ajax.class.php:206 +msgid "Wizzard restarted" +msgstr "Assistent wird neugestartet" + +#: class/ShMapper_ajax.class.php:195 +msgid "Wizzard closed" +msgstr "Assistent geschlossen" + +#: class/ShMapper_ajax.class.php:177 +msgid "Congratulation! That's all!" +msgstr "Glückwunsch! Das ist alles!" + +#: class/ShMapper_ajax.class.php:170 class/ShMapper.class.php:605 +msgid "Next step" +msgstr "Nächster Schritt" + +#: shortcode/shmMap.shortcode.php:43 +msgid "Send request" +msgstr "Anfrage senden" + +#: shortcode/shmMap.shortcode.php:19 +msgid "No map on ID " +msgstr "Karten-ID nicht angegeben" + +#. Author URI of the plugin +msgid "https://te-st.ru" +msgstr "https://te-st.ru" + +#. Author of the plugin +msgid "Teplitsa. Technologies for Social Good" +msgstr "Teplitsa. Technologies for Social Good" + +#. Description of the plugin +msgid "Location and logistics services for NKO" +msgstr "Location and logistics services for NKO" + +#. Plugin URI of the plugin +msgid "http://genagl.ru/?p=652" +msgstr "http://genagl.ru/?p=652" + +#. Plugin Name of the plugin +msgid "ShMapper by Teplitsa" +msgstr "ShMapper by Teplitsa" + +msgid "Yandex.Maps API key Saved" +msgstr "Yandey.Maps API Schlüssel gespeichert" + +msgid "Yandex.Maps API Key" +msgstr "Yandex.Maps API Schlüssel" + +msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." +msgstr "ACHTUNG: Sie müssen einen Schlüssel angeben, um die Yandex.Maps API benutzen zu können." + +msgid "Learn more here:" +msgstr "Mehr Informationen:" + +msgid "Yandex.Maps" +msgstr "Yandex.Maps" diff --git a/languages/shmapper-by-teplitsa.pot b/languages/shmapper-by-teplitsa.pot new file mode 100644 index 0000000..069f87b --- /dev/null +++ b/languages/shmapper-by-teplitsa.pot @@ -0,0 +1,1043 @@ +#, fuzzy +msgid "" +msgstr "" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +"Project-Id-Version: ShMapper by Teplitsa\n" +"POT-Creation-Date: 2020-06-18 05:16+0300\n" +"PO-Revision-Date: 2020-06-18 05:16+0300\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.8\n" +"X-Poedit-Basepath: ..\n" +"X-Poedit-WPHeader: shmapper.php\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" +"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" +"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: *.js\n" + +#: class/SMC_Post.php:370 class/ShMapper.class.php:170 +#: class/ShmMap.class.php:103 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:300 +msgid "Title" +msgstr "" + +#: class/SMC_Post.php:496 class/ShmMap.class.php:521 +msgid "Double" +msgstr "" + +#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 +#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 +msgid "Usage in Maps: " +msgstr "" + +#: class/SMC_Post.php:560 +msgid "— No Change —" +msgstr "" + +#: class/SMC_Post.php:563 +msgid "No" +msgstr "" + +#: class/SMC_Post.php:566 +msgid "Yes" +msgstr "" + +#: class/SMC_Post.php:631 class/SMC_Post.php:636 +msgid "Parameters" +msgstr "" + +#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 +#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 +msgid "Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:34 +msgid "Search Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:35 +msgid "all Map marker types" +msgstr "" + +#: class/ShMapPointType.class.php:36 +msgid "view Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:37 +msgid "parent Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:38 +msgid "parent Map marker type:" +msgstr "" + +#: class/ShMapPointType.class.php:39 +msgid "edit Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:40 +msgid "update Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:41 +msgid "add Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:42 +msgid "new Map marker type name" +msgstr "" + +#: class/ShMapPointType.class.php:49 +msgid "Unique type of every Map markers" +msgstr "" + +#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 +msgid "Map marker types" +msgstr "" + +#: class/ShMapPointType.class.php:86 +msgid "Name" +msgstr "" + +#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 +#: class/ShMapPointType.class.php:197 +msgid "Icon" +msgstr "" + +#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 +msgid "Color" +msgstr "" + +#: class/ShMapPointType.class.php:125 class/ShMapPointType.class.php:177 +#: class/ShMapper.class.php:141 class/ShmMap.class.php:252 +#: widget/ShMap.widget.php:80 +msgid "Height" +msgstr "" + +#: class/ShMapPointType.class.php:131 class/ShMapPointType.class.php:187 +#: class/ShMapper.class.php:140 class/ShmMap.class.php:257 +msgid "Width" +msgstr "" + +#: class/ShMapPointType.class.php:358 +msgid "None" +msgstr "" + +#: class/ShMapper.class.php:26 +msgid "" +"Я даю свое согласие администратору сайта на обработку, в том числе " +"автоматизированную, своих персональных данных в соответствии с Федеральным " +"законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +msgstr "" + +#: class/ShMapper.class.php:27 +msgid "Your request has been successfully registered." +msgstr "" + +#: class/ShMapper.class.php:28 +msgid "Unknown error." +msgstr "" + +#: class/ShMapper.class.php:78 class/ShMapper.class.php:392 +#: class/ShMapper.class.php:393 +msgid "Shmapper" +msgstr "" + +#: class/ShMapper.class.php:84 class/ShmMap.class.php:72 +#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 +msgid "add Map" +msgstr "" + +#: class/ShMapper.class.php:90 +msgid "Maps" +msgstr "" + +#: class/ShMapper.class.php:96 +msgid "edit Maps in page" +msgstr "" + +#: class/ShMapper.class.php:115 class/ShMapperRequest.class.php:25 +#: class/ShMapperRequest.class.php:30 +msgid "all Map Requests" +msgstr "" + +#: class/ShMapper.class.php:126 class/ShMapper.class.php:174 +#: class/ShMapperRequest.class.php:88 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:250 +msgid "Location" +msgstr "" + +#: class/ShMapper.class.php:127 class/ShMapper.class.php:134 +#: class/ShMapper.class.php:172 class/ShMapperRequest.class.php:84 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 +msgid "Latitude" +msgstr "" + +#: class/ShMapper.class.php:128 class/ShMapper.class.php:135 +#: class/ShMapper.class.php:173 class/ShMapperRequest.class.php:86 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 +msgid "Longitude" +msgstr "" + +#: class/ShMapper.class.php:129 class/ShMapper.class.php:136 +msgid "Zoom" +msgstr "" + +#: class/ShMapper.class.php:137 class/ShmMap.class.php:112 +#: class/ShmMap.class.php:327 +msgid "Legend exists" +msgstr "" + +#: class/ShMapper.class.php:138 class/ShmMap.class.php:338 +msgid "Filters exists" +msgstr "" + +#: class/ShMapper.class.php:139 class/ShmMap.class.php:107 +#: class/ShmMap.class.php:316 +msgid "Export csv" +msgstr "" + +#: class/ShMapper.class.php:142 class/ShmMap.class.php:273 +msgid "Map search" +msgstr "" + +#: class/ShMapper.class.php:143 class/ShmMap.class.php:287 +msgid "Map full screen" +msgstr "" + +#: class/ShMapper.class.php:144 +msgid "Map zoom slider" +msgstr "" + +#: class/ShMapper.class.php:145 class/ShmMap.class.php:281 +msgid "Map layer switcher" +msgstr "" + +#: class/ShMapper.class.php:146 class/ShmMap.class.php:295 +msgid "Lock zoom and drag" +msgstr "" + +#: class/ShMapper.class.php:147 class/ShmMap.class.php:291 +msgid "Formating Marker to cluster" +msgstr "" + +#: class/ShMapper.class.php:148 +msgid "Default Marker icon" +msgstr "" + +#: class/ShMapper.class.php:150 class/ShmMap.class.php:117 +msgid "Form exists" +msgstr "" + +#: class/ShMapper.class.php:151 class/ShmMap.class.php:122 +#: class/ShmMap.class.php:401 +msgid "Notify owner of Map" +msgstr "" + +#: class/ShMapper.class.php:152 +msgid "Form Title" +msgstr "" + +#: class/ShMapper.class.php:153 +msgid "Form generator" +msgstr "" + +#: class/ShMapper.class.php:154 class/ShmMap.class.php:421 +msgid "Users can leave their contact details for feedback." +msgstr "" + +#: class/ShMapper.class.php:155 +msgid "Unclude Personal name" +msgstr "" + +#: class/ShMapper.class.php:156 class/ShmMap.class.php:434 +msgid "Personal name" +msgstr "" + +#: class/ShMapper.class.php:157 +msgid "Required Personal name" +msgstr "" + +#: class/ShMapper.class.php:158 +msgid "Unclude Personal e-mail" +msgstr "" + +#: class/ShMapper.class.php:159 +msgid "Personal e-mail" +msgstr "" + +#: class/ShMapper.class.php:160 +msgid "Required Personal e-mail" +msgstr "" + +#: class/ShMapper.class.php:161 +msgid "Unclude Personal phone" +msgstr "" + +#: class/ShMapper.class.php:162 class/ShmMap.class.php:466 +msgid "Personal phone" +msgstr "" + +#: class/ShMapper.class.php:163 +msgid "Required Personal phone" +msgstr "" + +#: class/ShMapper.class.php:169 class/ShmMap.class.php:70 +#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 +msgid "Map" +msgstr "" + +#: class/ShMapper.class.php:171 class/ShmForm.class.php:223 +#: class/ShmForm.class.php:295 class/ShmForm.class.php:372 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 +msgid "Description" +msgstr "" + +#: class/ShMapper.class.php:175 class/ShmPoint.class.php:231 +#: class/ShmPoint.class.php:308 +msgid "Type" +msgstr "" + +#: class/ShMapper.class.php:176 +msgid "Session" +msgstr "" + +#: class/ShMapper.class.php:177 class/ShMapperRequest.class.php:67 +#: class/ShmMap.class.php:126 +msgid "Author" +msgstr "" + +#: class/ShMapper.class.php:178 +msgid "Contacts" +msgstr "" + +#: class/ShMapper.class.php:179 +msgid "Aproved" +msgstr "" + +#: class/ShMapper.class.php:180 +msgid "Aprove date" +msgstr "" + +#: class/ShMapper.class.php:181 +msgid "Accessed User" +msgstr "" + +#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 +msgid "Attantion" +msgstr "" + +#: class/ShMapper.class.php:276 class/ShMapper.class.php:372 +msgid "Send" +msgstr "" + +#: class/ShMapper.class.php:277 class/ShMapper.class.php:373 +msgid "Close" +msgstr "" + +#: class/ShMapper.class.php:278 class/ShMapper.class.php:374 +msgid "" +"Error: the form is not associated with the card. To link a map and a form, " +"there should be 2 shortcodes on one page (map - [shmMap id = '6' map = " +"'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' " +"uniq = 'for example, 777']), in which the uniq parameter will match" +msgstr "" + +#: class/ShMapper.class.php:279 +msgid "Are you shure?" +msgstr "" + +#: class/ShMapper.class.php:405 class/ShMapper.class.php:406 +#: class/ShMapper.class.php:420 +msgid "Settings" +msgstr "" + +#: class/ShMapper.class.php:429 +msgid "Map API" +msgstr "" + +#: class/ShMapper.class.php:436 +msgid "Yandex.Maps" +msgstr "" + +#: class/ShMapper.class.php:442 +msgid "OpenStreetMap" +msgstr "" + +#: class/ShMapper.class.php:450 +msgid "Yandex.Maps API Key" +msgstr "" + +#: class/ShMapper.class.php:452 +msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." +msgstr "" + +#: class/ShMapper.class.php:452 +msgid "Learn more here:" +msgstr "" + +#: class/ShMapper.class.php:463 +msgid "Interactive" +msgstr "" + +#: class/ShMapper.class.php:471 +msgid "Включить глобальный режим неинтерактивных карт" +msgstr "" + +#: class/ShMapper.class.php:475 +msgid "" +"пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " +"включена у карт даже не появляется блок интерактивности." +msgstr "" + +#: class/ShMapper.class.php:483 +msgid "Pre-modertion from Map owner." +msgstr "" + +#: class/ShMapper.class.php:487 +msgid "все сообщения будут добавляться в статусе «Черновик»" +msgstr "" + +#: class/ShMapper.class.php:491 +msgid "" +"ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует " +"угроза спам-атаки" +msgstr "" + +#: class/ShMapper.class.php:499 +msgid "Reload page after User send request." +msgstr "" + +#: class/ShMapper.class.php:511 +msgid "Protection" +msgstr "" + +#: class/ShMapper.class.php:518 +msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" +msgstr "" + +#: class/ShMapper.class.php:527 +#, php-format +msgid "" +"What is Google reCAPTCHA? How recived keys for your site? See %sthis " +"instruction%s." +msgstr "" + +#: class/ShMapper.class.php:531 +msgid "" +"Your reCAPTCHA doesn't work yet. In order to make it work, please get the " +"API keys at google.com/recaptcha" +msgstr "" + +#: class/ShMapper.class.php:543 +msgid "Vocabulary" +msgstr "" + +#: class/ShMapper.class.php:547 +msgid "Save personal data garantee" +msgstr "" + +#: class/ShMapper.class.php:553 +msgid "Successful send map request" +msgstr "" + +#: class/ShMapper.class.php:559 +msgid "Error send map request" +msgstr "" + +#: class/ShMapper.class.php:571 +msgid "Wizzard" +msgstr "" + +#: class/ShMapper.class.php:574 +msgid "Restart wizzard" +msgstr "" + +#: class/ShMapper.class.php:616 class/ShMapper.class.php:624 +msgid "Close wizzard" +msgstr "" + +#: class/ShMapper.class.php:617 class/ShMapper.class.php:623 +msgid "Go to current page" +msgstr "" + +#: class/ShMapper.class.php:620 class/ShMapper_ajax.class.php:170 +msgid "Next step" +msgstr "" + +#: class/ShMapper.class.php:622 +msgid "Prevous step" +msgstr "" + +#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 +msgid "Map Request" +msgstr "" + +#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 +#: class/ShMapperRequest.class.php:24 +msgid "add Map Request" +msgstr "" + +#: class/ShMapperRequest.class.php:23 +msgid "edit Map Request" +msgstr "" + +#: class/ShMapperRequest.class.php:26 +msgid "view Map Request" +msgstr "" + +#: class/ShMapperRequest.class.php:27 +msgid "search Map Request" +msgstr "" + +#: class/ShMapperRequest.class.php:28 +msgid "Map Request not found" +msgstr "" + +#: class/ShMapperRequest.class.php:29 +msgid "no found Map Request in trash" +msgstr "" + +#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 +msgid "Image" +msgstr "" + +#: class/ShMapperRequest.class.php:64 +msgid "Approving" +msgstr "" + +#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 +msgid "GEO location" +msgstr "" + +#: class/ShMapperRequest.class.php:327 +msgid "Uknown User" +msgstr "" + +#: class/ShMapperRequest.class.php:335 +#, php-format +msgid "<%s> Request to your Map from [%s] [%s]" +msgstr "" + +#: class/ShMapperRequest.class.php:337 +#, php-format +msgid "You may see this %s" +msgstr "" + +#: class/ShMapperRequest.class.php:358 +msgid "Approve" +msgstr "" + +#: class/ShMapperRequest.class.php:360 +msgid "Trash" +msgstr "" + +#: class/ShMapper_Assistants.class.php:44 +msgid "all maps" +msgstr "" + +#: class/ShMapper_Assistants.class.php:90 +msgid "Your requests to this Map " +msgstr "" + +#: class/ShMapper_ajax.class.php:177 +msgid "Congratulation! That's all!" +msgstr "" + +#: class/ShMapper_ajax.class.php:195 +msgid "Wizzard closed" +msgstr "" + +#: class/ShMapper_ajax.class.php:206 +msgid "Wizzard restarted" +msgstr "" + +#: class/ShMapper_ajax.class.php:220 +msgid "Approve succesfully and insert new Map marker" +msgstr "" + +#: class/ShMapper_ajax.class.php:232 +msgid "Request put to Trash" +msgstr "" + +#: class/ShMapper_ajax.class.php:337 +#, php-format +msgid "Are you want delete %s?" +msgstr "" + +#: class/ShMapper_ajax.class.php:339 +msgid "Delete" +msgstr "" + +#: class/ShMapper_ajax.class.php:355 +msgid "add Map Point" +msgstr "" + +#: class/ShMapper_ajax.class.php:357 +msgid "Create" +msgstr "" + +#: class/ShMapper_ajax.class.php:396 +msgid "Change Vocabulaty: " +msgstr "" + +#: class/ShMapper_ajax.class.php:416 +msgid "Yandex.Maps API key Saved" +msgstr "" + +#: class/ShMapper_ajax.class.php:427 +msgid "Users can add Placemarks" +msgstr "" + +#: class/ShMapper_ajax.class.php:437 +msgid "Pre-moderation on" +msgstr "" + +#: class/ShMapper_ajax.class.php:447 +msgid "Reload mode" +msgstr "" + +#: class/ShMapper_ajax.class.php:457 +msgid "captha added" +msgstr "" + +#: class/ShMapper_ajax.class.php:467 class/ShMapper_ajax.class.php:478 +msgid "Set key" +msgstr "" + +#: class/ShmAdminPage.class.php:27 +msgid "shMapper developers chat" +msgstr "" + +#: class/ShmForm.class.php:14 +msgid "Place the mark to Map" +msgstr "" + +#: class/ShmForm.class.php:22 +msgid "Put a title" +msgstr "" + +#: class/ShmForm.class.php:43 +msgid "Whrite description" +msgstr "" + +#: class/ShmForm.class.php:56 +msgid "input title" +msgstr "" + +#: class/ShmForm.class.php:62 +msgid "input text" +msgstr "" + +#: class/ShmForm.class.php:92 +msgid "textarea" +msgstr "" + +#: class/ShmForm.class.php:98 +msgid "input file" +msgstr "" + +#: class/ShmForm.class.php:104 +msgid "enabled Map markers" +msgstr "" + +#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 +#: class/ShmForm.class.php:340 +msgid "Type of element" +msgstr "" + +#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 +#: class/ShmForm.class.php:334 +msgid "Label of element" +msgstr "" + +#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 +#: class/ShmForm.class.php:336 +msgid "write title" +msgstr "" + +#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 +#: class/ShmForm.class.php:355 +msgid "Placeholder" +msgstr "" + +#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 +#: class/ShmForm.class.php:357 +msgid "write placeholder" +msgstr "" + +#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:361 +msgid "Placemark types" +msgstr "" + +#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 +#: class/ShmForm.class.php:374 +msgid "write description" +msgstr "" + +#: class/ShmForm.class.php:231 +msgid "Element is required" +msgstr "" + +#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 +msgid "Add before" +msgstr "" + +#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 +msgid "Add after" +msgstr "" + +#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 +msgid "Delete me" +msgstr "" + +#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 +msgid "require" +msgstr "" + +#: class/ShmForm.class.php:326 +msgid "enable" +msgstr "" + +#: class/ShmForm.class.php:378 +msgid "The name of the parameter that refers to this element" +msgstr "" + +#: class/ShmForm.class.php:436 +msgid "Сhoose files" +msgstr "" + +#: class/ShmForm.class.php:497 +msgid "" +"Drag choosed icon and place it to map or click it and enter exact address." +msgstr "" + +#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 +#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 +#: class/ShmForm.class.php:578 +msgid "This required field" +msgstr "" + +#: class/ShmForm.class.php:520 +msgid "Drag icon and place it to map." +msgstr "" + +#: class/ShmForm.class.php:553 +msgid "Your name" +msgstr "" + +#: class/ShmForm.class.php:564 +msgid "Your e-mail" +msgstr "" + +#: class/ShmForm.class.php:574 +msgid "Your phone" +msgstr "" + +#: class/ShmMap.class.php:65 +msgid "Step 1. Set up your map." +msgstr "" + +#: class/ShmMap.class.php:74 +msgid "edit Map" +msgstr "" + +#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 +msgid "all Maps" +msgstr "" + +#: class/ShmMap.class.php:77 +msgid "view Map" +msgstr "" + +#: class/ShmMap.class.php:78 +msgid "search Map" +msgstr "" + +#: class/ShmMap.class.php:79 +msgid "Map not found" +msgstr "" + +#: class/ShmMap.class.php:80 +msgid "no found Map in trash" +msgstr "" + +#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 +msgid "ID" +msgstr "" + +#: class/ShmMap.class.php:124 +msgid "shortcodes" +msgstr "" + +#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 +msgid "Map markers" +msgstr "" + +#: class/ShmMap.class.php:145 +msgid "include all (map and request form)" +msgstr "" + +#: class/ShmMap.class.php:153 +msgid "only map" +msgstr "" + +#: class/ShmMap.class.php:162 +msgid "only request form" +msgstr "" + +#: class/ShmMap.class.php:186 +msgid "Including Map to post" +msgstr "" + +#: class/ShmMap.class.php:198 +msgid "You can insert a card into a post or page by copying this shortcode." +msgstr "" + +#: class/ShmMap.class.php:212 +msgid "Step 2. May anover Users add information for Map." +msgstr "" + +#: class/ShmMap.class.php:237 +msgid "1.1. Pan map and choose zoom" +msgstr "" + +#: class/ShmMap.class.php:249 +msgid "1.2. Set size for map's div (per pixels)" +msgstr "" + +#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 +msgid "Empty for " +msgstr "" + +#: class/ShmMap.class.php:269 +msgid "1.3. Include interface" +msgstr "" + +#: class/ShmMap.class.php:277 +msgid "Map zoom slider enabled" +msgstr "" + +#: class/ShmMap.class.php:299 +msgid "Choose layers" +msgstr "" + +#: class/ShmMap.class.php:313 +msgid "1.4. May User download data in *.csv?" +msgstr "" + +#: class/ShmMap.class.php:324 +msgid "1.5. Will the legend be displayed?" +msgstr "" + +#: class/ShmMap.class.php:335 +msgid "1.6. Will Marker type filter be displayed?" +msgstr "" + +#: class/ShmMap.class.php:346 +msgid "1.7. Default Marker icon" +msgstr "" + +#: class/ShmMap.class.php:351 +msgid "Recommended size is 64х64 px, format is .png" +msgstr "" + +#: class/ShmMap.class.php:383 +msgid "Enable crowdsourcing function (free add Users new Markers)" +msgstr "" + +#: class/ShmMap.class.php:388 +msgid "2.1. What is the name of your information form?" +msgstr "" + +#: class/ShmMap.class.php:392 +msgid "For example «All beaches by the river»" +msgstr "" + +#: class/ShmMap.class.php:398 +msgid "2.2. Will I notify the author about new posts?" +msgstr "" + +#: class/ShmMap.class.php:406 +msgid "2.3. What information can users enter?" +msgstr "" + +#: class/ShmMap.class.php:409 +msgid "" +"You can create your own forms using form elements: & laquo; Text line & " +"raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & " +"laquo; Categories of Markers & raquo;" +msgstr "" + +#: class/ShmMap.class.php:418 +msgid "2.4. Can users leave their contact information?" +msgstr "" + +#: class/ShmMap.class.php:426 +msgid "2.5. What data users will have to put?" +msgstr "" + +#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 +#: class/ShmMap.class.php:461 +msgid "Include" +msgstr "" + +#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 +#: class/ShmMap.class.php:471 +msgid "Required" +msgstr "" + +#: class/ShmMap.class.php:450 +msgid "Personal email" +msgstr "" + +#: class/ShmMap.class.php:665 +msgid "What do with placemarks of deleting Map?" +msgstr "" + +#: class/ShmMap.class.php:670 +msgid "Delete all Points" +msgstr "" + +#: class/ShmMap.class.php:676 +msgid "Escape all Points without Owner Map" +msgstr "" + +#: class/ShmMap.class.php:682 +msgid "Switch all Points to anover Map" +msgstr "" + +#: class/ShmMap.class.php:768 +#, php-format +msgid "Succesfuly delete map width %s points" +msgstr "" + +#: class/ShmMap.class.php:773 +#, php-format +msgid "Succesfuly delete map and %s points are orphans now" +msgstr "" + +#: class/ShmMap.class.php:780 +#, php-format +msgid "Succesfuly delete map and %s points migrates to %s" +msgstr "" + +#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 +msgid "Map marker" +msgstr "" + +#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 +#: class/ShmPoint.class.php:28 +msgid "add Map marker" +msgstr "" + +#: class/ShmPoint.class.php:27 +msgid "edit Map marker" +msgstr "" + +#: class/ShmPoint.class.php:29 +msgid "all Map markers" +msgstr "" + +#: class/ShmPoint.class.php:30 +msgid "view Map marker" +msgstr "" + +#: class/ShmPoint.class.php:31 +msgid "search Map marker" +msgstr "" + +#: class/ShmPoint.class.php:32 +msgid "Map marker not found" +msgstr "" + +#: class/ShmPoint.class.php:33 +msgid "no found Map marker in trash" +msgstr "" + +#: class/ShmPoint.class.php:158 +msgid "Map owner" +msgstr "" + +#: class/ShmPoint.class.php:312 +msgid "Address" +msgstr "" + +#: shortcode/shmMap.shortcode.php:19 +msgid "No map on ID " +msgstr "" + +#: shortcode/shmMap.shortcode.php:43 +msgid "Send request" +msgstr "" + +#: tpl/input_file_form.php:64 +msgid "Upload Image" +msgstr "" + +#: tpl/input_file_form.php:66 +msgid "File" +msgstr "" + +#: tpl/input_file_form.php:72 +msgid "Browse" +msgstr "" + +#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 +msgid "Remove" +msgstr "" + +#: tpl/input_file_form.php:77 +msgid "Insert" +msgstr "" + +#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 +msgid "Submit" +msgstr "" + +#: tpl/shmMap.php:83 +#, php-format +msgid "download %s.csv" +msgstr "" + +#: widget/ShMap.widget.php:9 +msgid "Shmapper Locations" +msgstr "" + +#: widget/ShMap.widget.php:16 +msgid "Ermak Locations" +msgstr "" + +#: widget/ShMap.widget.php:17 +msgid "Player Cabinet" +msgstr "" + +#: widget/ShMap.widget.php:64 +msgid "Tite" +msgstr "" + +#. Plugin Name of the plugin/theme +msgid "ShMapper by Teplitsa" +msgstr "" + +#. Plugin URI of the plugin/theme +msgid "http://genagl.ru/?p=652" +msgstr "" + +#. Description of the plugin/theme +msgid "Location and logistics services for NKO" +msgstr "" + +#. Author of the plugin/theme +msgid "Teplitsa. Technologies for Social Good" +msgstr "" + +#. Author URI of the plugin/theme +msgid "https://te-st.ru" +msgstr "" diff --git a/shmapper.php b/shmapper.php index 6a6d119..e3666ab 100644 --- a/shmapper.php +++ b/shmapper.php @@ -43,7 +43,7 @@ function init_textdomain_shmapper() } if (function_exists('load_plugin_textdomain')) { - load_plugin_textdomain("shmapper-by-teplitsa", false , dirname( plugin_basename( __FILE__ ) ) .'/languages'); + load_plugin_textdomain("shmapper-by-teplitsa", false , dirname( plugin_basename( __FILE__ ) ) .'/languages/'); } } add_action('plugins_loaded', 'init_textdomain_shmapper'); From 7e7379f46813c51ebceaed209faab156e7e21bf4 Mon Sep 17 00:00:00 2001 From: BootWP Date: Mon, 22 Jun 2020 07:32:36 +0300 Subject: [PATCH 053/220] Update .pot file --- languages/shmapper-by-teplitsa.pot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/languages/shmapper-by-teplitsa.pot b/languages/shmapper-by-teplitsa.pot index 069f87b..19ee0ab 100644 --- a/languages/shmapper-by-teplitsa.pot +++ b/languages/shmapper-by-teplitsa.pot @@ -3,14 +3,14 @@ msgid "" msgstr "" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "Project-Id-Version: ShMapper by Teplitsa\n" -"POT-Creation-Date: 2020-06-18 05:16+0300\n" +"POT-Creation-Date: 2020-06-22 07:31+0300\n" "PO-Revision-Date: 2020-06-18 05:16+0300\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.8\n" +"X-Generator: Poedit 2.3.1\n" "X-Poedit-Basepath: ..\n" "X-Poedit-WPHeader: shmapper.php\n" "X-Poedit-SourceCharset: UTF-8\n" From cfd4cd0479272da07f03883bcad6207f78ddc639 Mon Sep 17 00:00:00 2001 From: BootWP Date: Mon, 22 Jun 2020 07:50:42 +0300 Subject: [PATCH 054/220] Update Author URI --- README.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.txt b/README.txt index aaa058a..571a249 100644 --- a/README.txt +++ b/README.txt @@ -1,6 +1,6 @@ === shMapper by Teplitsa === -Contributors: Genagl, Ahaenor, denis.cherniatev, Teplitsa Support Team (suptestru@gmail.com) -Author URI: http://te-st.ru +Contributors: Genagl, Ahaenor, denis.cherniatev, burdianov, teplosup +Author URI: https://te-st.ru/ Plugin URI: http://genagl.ru/?p=652 Tags: map, OpenStreetMap, OSM, yandex.map, crowdsourcing, карта, Яндекс.карты, картирование, mapping, crowdsourced mapping, user mapping Requires at least: 3.6.1 From 9b6f010c12edde292afd6f226aa48a8cab8df409 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 7 Jul 2020 07:23:47 +0300 Subject: [PATCH 055/220] Remove unnecessary closing tags --- class/ShmPoint.class.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index 14e2d13..eaab245 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -399,9 +399,8 @@ function draw()

    "; $point = $this->body; - $html .= "
    -
    - + + + + + +
    +
    +
    +
  • ". @@ -569,12 +667,10 @@ static function setting_pages() "
    " . __("Restart wizzard", SHMAPPER) . "
    -
    -
    - -
    -
    -
  • +
    +
    +
"; } diff --git a/class/ShMapper_ajax.class.php b/class/ShMapper_ajax.class.php index bbffec8..922f685 100644 --- a/class/ShMapper_ajax.class.php +++ b/class/ShMapper_ajax.class.php @@ -418,6 +418,36 @@ static function myajax_submit() ) ); break; + case "shm_default_longitude": + ShMapper::$options['shm_default_longitude'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => __( "New coordinates saved" , SHMAPPER ), + ), + ); + break; + case "shm_default_latitude": + ShMapper::$options['shm_default_latitude'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + //"msg" => __( "New coordinates saved" , SHMAPPER ), + ), + ); + break; + case "shm_default_zoom": + ShMapper::$options['shm_default_zoom'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + //"msg" => __( "New coordinates saved" , SHMAPPER ), + ), + ); + break; case "shm_map_is_crowdsourced": ShMapper::$options['shm_map_is_crowdsourced'] = sanitize_text_field($params[1]); ShMapper::update_options(); diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index b937254..4840e3d 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -61,6 +61,19 @@ static function view_admin_edit($obj) $SMC_Object_type = SMC_Object_Type::get_instance(); $bb = $SMC_Object_type->object [static::get_type()]; $html = ""; + + $default_latitude = 55.8; + $default_longitude = 37.8; + $default_zoom = 4; + if ( isset( ShMapper::$options['shm_default_latitude'] ) ) { + $default_latitude = ShMapper::$options['shm_default_latitude']; + } + if ( isset( ShMapper::$options['shm_default_longitude'] ) ) { + $default_longitude = ShMapper::$options['shm_default_longitude']; + } + if ( isset( ShMapper::$options['shm_default_zoom'] ) ) { + $default_zoom = ShMapper::$options['shm_default_zoom']; + } foreach($bb as $key=>$value) { if($key == 't' || $key == 'class' ) continue; @@ -68,15 +81,15 @@ static function view_admin_edit($obj) switch($key) { case "latitude": - $meta = $meta ? $meta : 55.8; + $meta = $meta ? $meta : $default_latitude; $opacity = " style='display:none;' " ; break; case "longitude": - $meta = $meta ? $meta : 37.8; + $meta = $meta ? $meta : $default_longitude; $opacity = " style='display:none;' " ; break; case "zoom": - $meta = $meta ? $meta : 4; + $meta = $meta ? $meta : $default_zoom; $opacity = " style='display:none;' " ; break; default: @@ -318,7 +331,7 @@ static function get_insert_form( $data ) -
+
"; return $html; @@ -376,8 +389,21 @@ function get_owner_list( $before = "", $separator = "
", $after = "") return $before . implode($separator, $d) . $after; } - function draw() - { + function draw() { + + $default_latitude = 55.8; + $default_longitude = 37.8; + $default_zoom = 4; + if ( isset( ShMapper::$options['shm_default_latitude'] ) ) { + $default_latitude = ShMapper::$options['shm_default_latitude']; + } + if ( isset( ShMapper::$options['shm_default_longitude'] ) ) { + $default_longitude = ShMapper::$options['shm_default_longitude']; + } + if ( isset( ShMapper::$options['shm_default_zoom'] ) ) { + $default_zoom = ShMapper::$options['shm_default_zoom']; + } + $mapType = ShmMap::get_map_types()[ ShMapper::$options['map_api'] ][0]; $types = wp_get_object_terms($this->id, SHM_POINT_TYPE); $type = empty($types) ? false : $types[0]; @@ -386,12 +412,12 @@ function draw() $post_content = wpautop( $this->get("post_content") ); $location = $this->get_meta("location"); $latitude = $this->get_meta("latitude"); - $latitude = $latitude ? $latitude : 55.8; + $latitude = $latitude ? $latitude : $default_latitude; $longitude = $this->get_meta("longitude"); - $longitude = $longitude ? $longitude : 37.8; + $longitude = $longitude ? $longitude : $default_longitude; $zoom = $this->get_meta("zoom"); - $zoom = $zoom ? $zoom : 4; + $zoom = $zoom ? $zoom : $default_zoom; $html = "
@@ -402,32 +428,31 @@ function draw()
- "; + "; $point = $this->body; - $html .= " -
+ $html .= " "; return $html; } diff --git a/shmapper.php b/shmapper.php index 28f3c35..ac651b0 100644 --- a/shmapper.php +++ b/shmapper.php @@ -124,4 +124,3 @@ function shmapper_disable_gutenberg( $current_status, $post_type ) { return $current_status; } add_filter( 'use_block_editor_for_post_type', 'shmapper_disable_gutenberg', 10, 2); - From 2933879fa1d641a64760d9d1f1203bba9bacd7a2 Mon Sep 17 00:00:00 2001 From: BootWP Date: Mon, 14 Sep 2020 06:33:36 +0300 Subject: [PATCH 063/220] Remove CR LF endinglines files. --- LICENSE.txt | 339 -------- README.md | 77 -- README.txt | 92 -- class/SMC_Object_type.php | 468 ---------- class/SMC_Post.php | 702 --------------- class/ShMapPointType.class.php | 374 -------- class/ShMapper.class.php | 802 ----------------- class/ShMapperRequest.class.php | 478 ----------- class/ShMapper_Assistants.class.php | 99 --- class/ShMapper_ajax.class.php | 521 ----------- class/ShmAdminPage.class.php | 36 - class/ShmForm.class.php | 596 ------------- class/ShmMap.class.php | 856 ------------------- class/ShmPoint.class.php | 540 ------------ languages/shmapper-by-teplitsa-de_DE.mo | Bin 18331 -> 0 bytes languages/shmapper-by-teplitsa-de_DE.po | 999 ---------------------- languages/shmapper-by-teplitsa-ru_RU.mo | Bin 22718 -> 0 bytes languages/shmapper-by-teplitsa-ru_RU.po | 996 ---------------------- languages/shmapper-by-teplitsa.pot | 1043 ----------------------- shmapper.php | 126 --- shortcode/shmMap.shortcode.php | 51 -- shortcode/shm_shortcodes.php | 6 - tpl/input_file_form.php | 130 --- tpl/shmMap.php | 181 ---- unistall.php | 20 - widget/ShMap.widget.php | 95 --- 26 files changed, 9627 deletions(-) delete mode 100644 LICENSE.txt delete mode 100644 README.md delete mode 100644 README.txt delete mode 100644 class/SMC_Object_type.php delete mode 100644 class/SMC_Post.php delete mode 100644 class/ShMapPointType.class.php delete mode 100644 class/ShMapper.class.php delete mode 100644 class/ShMapperRequest.class.php delete mode 100644 class/ShMapper_Assistants.class.php delete mode 100644 class/ShMapper_ajax.class.php delete mode 100644 class/ShmAdminPage.class.php delete mode 100644 class/ShmForm.class.php delete mode 100644 class/ShmMap.class.php delete mode 100644 class/ShmPoint.class.php delete mode 100644 languages/shmapper-by-teplitsa-de_DE.mo delete mode 100644 languages/shmapper-by-teplitsa-de_DE.po delete mode 100644 languages/shmapper-by-teplitsa-ru_RU.mo delete mode 100644 languages/shmapper-by-teplitsa-ru_RU.po delete mode 100644 languages/shmapper-by-teplitsa.pot delete mode 100644 shmapper.php delete mode 100644 shortcode/shmMap.shortcode.php delete mode 100644 shortcode/shm_shortcodes.php delete mode 100644 tpl/input_file_form.php delete mode 100644 tpl/shmMap.php delete mode 100644 unistall.php delete mode 100644 widget/ShMap.widget.php diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index ecbc059..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index f9fd384..0000000 --- a/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# shMapper # - -**Scroll down for english description, please** - -shMapper - это плагин для WordPress. shMapper позволяет создавать простые краудсорсинговые карты на OpenStreet Maps с опцией формы обратной связи. Этот плагин предоставляет вам альтернативу текущим картографическим сервисам, таким как Яндекс.Карты, Карты Google и т.д., которые не предоставляют пользователям возможность добавлять новые объекты. - -Плагин разработан и поддерживается [Теплицей социальных технологий](//te-st.ru/). - -Задача плагина — удобный и минималистичный плагин по добавлению карт на WordPress. - -* Плагин элементарно устанавливается и требует минимальных настроек. -* Карты и формы доступны на отдельных старницах сразу после создания. -* Карты и формы можно размещать внутри контента при помощи шорткодов. - -Плагин предназначен для всех, кому нужно отобразить карту на сайте или получить от посетителей информацию, привязанную к карте. - -**Основные функции** - -* Настройка и отображение карт с маркерами на страницах сайта. -* Отображение карт с помощью шорткодов. -* Получать новые маркеры карты через форму обратной связи. -* Пре или пост-модерация новых маркеров. -* Защиты формы при помощи ReCaptcha. -* Пользовательские значки маркеров. - -Для корректной работы плагина необходим PHP версии не ниже 5.6. - -Если вам нужна помощь волонтеров в установке и настройке, создайте задачу на сайте нашего проекта [it-волонтёр](//itv.te-st.ru/). - - -## Помощь проекту ## - -Мы очень ждем вашей помощи проекту. Вы можете помочь следующими способами: - -* Добавить сообщение об ошибке или предложение по улучшению на GitHub -* Поделиться улучшениями кода, послав нам Pull Request -* Сделать перевод плагина или оптимизировать его для вашей страны. - -Если у вас есть вопросы по работе плагина, то обратитесь к нам за поддержкой на [GitHub](https://github.com/Teplitsa/shmapper/issues). - - -## In English ## - -shMapper is a WordPress plugin. The shMapper allows you to create simple crowdsourcing maps on OpenStreet Maps with an option of feedback messages form. This plugin gives you an alternative to current online map services such as Yandex.Maps, Google Maps etc which don’t provide the option for users to add new objects. - -This plugin developed and supported by [Teplitsa of social technologies](//te-st.ru/). - -The main features of the plugin is a convenient and minimalistic functions for adding maps on WordPress. - -* Plugin is very easy to install, and it requires only a minimum of settings. -* Maps and forms are available on individual pages immediately after creation. -* Maps and forms can be placed within the content using shortcodes. - -The plugin is designed for anyone who needs to display a map on the site or get information from visitors linked to the map. - -**Core features** - -* Configure and display maps with markers on pages. -* Display maps using shortcodes. -* Receive new map markers via feedback form. -* Pre or post-moderation of new markers. -* reCaptcha form protection. -* Custom markers icons. - -## Installation ## - -PHP at least 5.6 is required. - -## Help the project ## - -We will be very grateful if you will help us to make Leyka better. - -* You can add a bugreport or a feature request on [GitHub](https://github.com/Teplitsa/shmapper/issues). -* Send us your pull request to share a code impovement. -* You can make a new plugin translation for your language or send us a fixes for an existing translation, if needed. - -**Please note:** if you have a questions for the plugin work in any aspect, please address our support service on [GitHub](https://github.com/Teplitsa/shmapper/issues). diff --git a/README.txt b/README.txt deleted file mode 100644 index a869304..0000000 --- a/README.txt +++ /dev/null @@ -1,92 +0,0 @@ -=== shMapper by Teplitsa === -Contributors: Genagl, Ahaenor, denis.cherniatev, burdianov, teplosup -Author URI: https://te-st.ru/ -Plugin URI: http://genagl.ru/?p=652 -Tags: map, OpenStreetMap, OSM, yandex.map, crowdsourcing, карта, Яндекс.карты, картирование, mapping, crowdsourced mapping, user mapping -Requires at least: 3.6.1 -Tested up to: 5.5 -Requires PHP: 5.6 -Stable tag: trunk -License: GPLv2 or later -License URI: http://www.gnu.org/licenses/gpl-2.0.html - -shMapper is a plugin, that allows you to create simple crowdsourcing maps based on OpenStreetMap and Yandex.Maps. - -== Description == - -The shMapper plugin allows you to create simple crowdsourcing maps on OpenStreetMap with an option of feedback messages form. This plugin gives you an alternative to current online map services such as Yandex.Maps, Google Maps etc which don’t provide the option for users to add new objects. - -Most of the code written by Gennadiy Glazunov aka [Genagl](http://genagl.ru) - -**Core features** - -* Configure and display maps with markers on pages. -* Display maps using shortcodes. -* Receive new map markers via feedback form. -* Pre or post-moderation of new markers. -* reCaptcha form protection. -* Custom markers icons. - -PHP at least 5.6 is required for plugin to work correctly. - -**Help the project** - -We will be very grateful if you will help us to make ShMapper better. - -* You can add a bugreport or a feature request on [GitHub](https://github.com/Teplitsa/shmapper/issues). -* Send us your pull request to share a code impovement. -* You can make a new plugin translation for your language or send us a fixes for an existing translation, if needed. - -If you have a questions for the plugin work in any aspect, please address our support service on [GitHub](https://github.com/Teplitsa/shmapper/issues). - -== Installation == - -PHP version required: 5.6+ - -== Upgrade Notice == - -No upgrade needed yet. - -== Frequently Asked Questions == - -No questions yet. - -== Screenshots == - -1. Edit map form example -2. Map and feedback form example - -== Changelog == - -= 1.3.6 = -* WordPress 5.5 compatibility. - -= 1.3.3 = -* Textdomain load forced. - -= 1.3.2 = -* Marker placement by address added. -* Marker placement by click added. -* Minor fixes. - -= 1.3.1 = -* Marker placement for OSM fixed. -* Map selector fixed in widget. -* Map selector fixed in map-request edit form. - -= 1.3 = -* Layer switcher for OSM fixed. -* Map owner email notification about new map requests fixed. -* Display of marker clouds content fixed. - -= 1.2 = -* Post-moderation of markers fixed for forms with enabled reCaptcha. -* Marker setup fixed for mobile screens. -* Other minor fixes. - -= 1.1 = -* Pre-moderation of markers fixed. -* Other minor fixes. - -= 1.0 = -* First official release! diff --git a/class/SMC_Object_type.php b/class/SMC_Object_type.php deleted file mode 100644 index d1254de..0000000 --- a/class/SMC_Object_type.php +++ /dev/null @@ -1,468 +0,0 @@ -object = apply_filters("smc_add_post_types", $this->object); - //$this->init(); - } - static function get_instance() - { - if(null === static::$_instance) - static::$_instance = new static; - return static::$_instance; - } - function init_options($array) - { - - } - function get($string) - { - return $this->object[$string]; - } - function get_meta($string) - { - $r = $this->get($string); - unset($r['t']); - return $r; - } - function get_type($string) - { - $r = $this->get($string); - return $r['t']['type']; - } - - function is_meta_exists($string, $meta) - { - $obj = $this->get($string); - return array_key_exists($meta, $obj); - } - - function get_object($id, $t) - { - global $new_dir; - $d = $this->get($t); - $obj = array(); - switch($d['t']['type']) - { - case "post": - $obj = $this->get_post_elements($id, $t, $d); - if(is_wp_error($obj)) - insertLog("SMC_Object.get_object", array($id, $t, $d)); - break; - case "taxonomy": - $obj = $this->get_taxonomy_element($id, $t, $d); - if(is_wp_error($obj)) - insertLog("SMC_Object.get_object", array($id, $t, $d)); - break; - case "db_row": - - break; - default: - return $t; - } - return apply_filters("smc_get_object", $obj, $obj); - } - - function get_post_elements($id, $type, $data) - { - $el = get_post($id); - $obj = array( - 'post_type' => $type, - 'obj_type' => $data['t']['type'], - 'title' => htmlentities(stripslashes ($el->post_title)), - 'name' => $el->post_name, - //'id' => $id, - 'text' => htmlentities(stripslashes ($el->post_content)), - ); - $keys = array_keys($data); - $values = array_values($data); - for($i = 0; $i < count($keys); $i++) - { - $meta = get_post_meta($id, $keys[$i], true); - if($keys[$i] == 't' ||$keys[$i] == 'class') continue; - if($values[$i]['type'] == 'id') - { - $pos = $this->get($values[$i]['object']); - //return $meta . ' -- ' . $values[$i]['object'] . ' -- ' . $pos['t']['type']; - switch($pos['t']['type']) - { - case 'post': - $obj[$keys[$i]] = $this->get_post_property($meta, $values[$i]['object']); - break; - case 'taxonomy': - $obj[$keys[$i]] = $this->get_taxonomy_property($meta, $values[$i]['object'], $i); - break; - case 'user': - $obj[$keys[$i]] = $this->get_user_property($meta, $values, $i); - break; - case 'array': - $arr = $this->get_array_property( $meta, $values ); - if(!is_wp_error($arr)) $obj[$keys[$i]] = $arr; - default: - ob_start(); - print_r($meta); - $obj[$keys[$i]] = ob_get_clean(); - break; - } - } - else if($values[$i]['type'] == 'array') - { - $arr = $this->get_array_property($meta, $values[$i]); - if(!is_wp_error($arr)) $obj[$keys[$i]] = $arr; - } - else if($values[$i]['type'] == 'media') - { - $meta = htmlentities(stripslashes (get_post_meta($id, $keys[$i], true))); - if($values[$i]['download']) - { - $imageUrl = wp_get_attachment_url( $meta ); - // echo $imageUrl."
"; - // continue; - $stt = (strrpos($imageUrl, '/'))+1; - $fnn = (strrpos($imageUrl, '.')) - $stt; - $filename = substr($imageUrl, $stt, $fnn); - $thumbnail = substr($imageUrl, $stt); - $wp_check_filetype = wp_check_filetype($imageUrl); - file_copy($imageUrl, $new_dir ."/". $filename . "." . $wp_check_filetype['ext']); - $obj[$keys[$i]] = $imageUrl;//$filename . "." . $wp_check_filetype['ext']; - /**/ - } - //$obj['download'] = true; - } - - else if($values[$i]['type'] == 'bool' || $values[$i]['type'] == 'number') - { - $obj[$keys[$i]] = (int)$meta; - } - else if($values[$i]['type'] == 'string') - { - - $meta = get_post_meta($id, $keys[$i], true); - $obj[$keys[$i]] = ($meta); - if($values[$i]['download']) - { - - } - } - } - return $obj; - } - - /* ================= - // - // - // - =================*/ - function get_taxonomy_element($id, $type, $data) - { - if($data['t']['type'] != "taxonomy") return new WP_Error('no taxonomy'); - $el = get_term_by("id", $id, $type); - $parent = get_term_by("id", $el->parent, $type); - $parent = $parent==0 ? "" : $parent->slug; - $obj = array( - 'post_type' => $type, - 'obj_type' => $data['t']['type'], - 'title' => $el->name, - 'name' => $el->slug, - 'id' => $id, - 'text' => '', - 'parent' => $parent - ); - $class_name = $data['class']; - $option = $this->object_property_args($class_name,"get_term_meta", $id); - $keys = array_keys($data); - $values = array_values($data); - - for($i = 0; $i < count($keys); $i++) - { - if($keys[$i] == "class") continue; - if($values[$i]['type'] == 'db_row') - { - //$obj[$keys[$i]] = array("db_field" => $values[$i]['db_field'], "db_name" => $values[$i]['db_name']); - continue; - } - $meta = $option[$keys[$i]]; - if($values[$i]['type'] == 'id') - { - $pos = $this->get($values[$i]['object']); - - //return $meta . ' -- ' . $values[$i]['object'] . ' -- ' . $pos['t']['type']; - switch($pos['t']['type']) - { - case 'post': - $obj[$keys[$i]] = $this->get_post_property($meta); - break; - case 'taxonomy': - $obj[$keys[$i]] = $this->get_taxonomy_property($meta, $values[$i]['object']); - break; - case 'user': - $obj[$keys[$i]] = $this->get_user_property($meta); - break; - case 'array': - default: - ob_start(); - print_r($meta); - $obj[$keys[$i]] = ob_get_clean(); - break; - } - } - else if($values[$i]['type'] == 'array') - { - ob_start(); - print_r($meta); - $obj[$keys[$i]] = ob_get_clean(); - } - else if($values[$i]['type'] == 'bool' || $values[$i]['type'] == 'number') - { - $obj[$keys[$i]] = (int)$meta; - } - else - { - $meta = $option[$keys[$i]]; - $obj[$keys[$i]] = $meta; - } - } - return $obj; - } - function get_property($val, $value) - { - if($value == "number" || $value == "bool") - return (int)$val; - if($value == "string") - return $val; - if(is_array($value)) - { - if($value['type'] == 'id') - { - foreach($val as $v) - { - switch($value['t']) - { - case "post": - $obj = $this->get_post_property($v); - //insertLog("get_property "."post", $obj ); - return $obj; - case "taxonomy": - $obj = @$this->get_taxonomy_property($v, $value['object']); - insertLog( "get_property ", array( $obj, $v ) ); - return $obj; - default: - insertLog( "get_property error", array( $obj, $value) ); - } - } - } - $obj = $this->get_array_property($val, $value); - if(!is_wp_error($obj)) - return $obj; - } - //insertLog("get_property", array($val, $value)); - } - function get_post_property($meta) - { - $pp = get_post($meta); - if(!$pp) return ""; - $pos_slug = $pp->post_name; - return $pos_slug; - } - function get_user_property($meta) - { - //$user = get_userdata($meta); - return "==$meta";//$user ? $user->user_login : " - "; - } - function get_taxonomy_property($meta, $object) - { - $pp = get_term_by("id", $meta, $object ); - $pos_slug = $pp->slug; - //insertLog("get_taxonomy_property", $pp->slug); - return $pos_slug; - } - function get_db_row_property($meta) - { - return $meta; - } - function get_array_property( $meta, $values ) - { - if(!is_array($meta) || count($meta)==0) return new WP_Error("parameter is not array"); - if(!is_array($values)) return new WP_Error("SMC_Object element is not array"); - $obj = array( ); - foreach( $meta as $el => $val) - { - foreach($values as $key => $value ) - { - if($key == "type") continue; - if($key == "object") - { - $obj[] = array($this->get_array_property($val, $value)); - } - else - { - $xx = $this->get_property($val, $value); - $obj[$key] = is_wp_error($xx) ? "" : $xx; - } - - } - } - //insertLog("get_array_property = obj", $obj); - return $obj; - } - /* - что делать, когда тип = id - */ - function convert_id($key, $val, $d, $id) - { - global $wpdb, $httml, $migration_url, $components; - require_once(IMPORMAN_REAL_PATH."tpl/post_trumbnail.php"); - if( - $key == 'title' || - $key == 'post_content' || - $key == 'name' || - $key == 'obj_type' || - $key == 'id' || - $key == 't' || - $key == 'text' || - $key == 'parent' || - $key == 'post_type' - ) - return new WP_Error( $key ); - //echo "

------- ".$key . ': ' . Assistants::echo_me($d[$key]['object'])."

"; - if($d[$key]['type'] == 'id') - { - $pos = $this->get($d[$key]['object']); - switch($pos['t']['type']) - { - case 'post': - $p = $wpdb->get_row("SELECT ID FROM ".$wpdb->prefix."posts WHERE post_name='" .$val. "' LIMIT 1", ARRAY_A ); - $val = $p["ID"]; - break; - case 'taxonomy': - $p = $wpdb->get_row("SELECT term_id FROM ".$wpdb->prefix."terms WHERE slug='" .$val. "' LIMIT 1", ARRAY_A ); - $val = $p["term_id"]; - break; - case 'user': - break; - default: - break; - } - } - if(is_array($val)) - { - $components[] = array( "key" => $key, "value" => $val, "id" => $id ); - $val = ""; //$this->convert_array($key, $val, $id); - } - - if($key == 'png_url') - $val = IMPORMAN_URLPATH . "picto/" . $val; - if($key == "_thumbnail_id") - { - $wp_upload_dir = wp_upload_dir(); - //$filename = download_url($migration_url . $val); - $filename = (ERMAK_MIGRATION_PATH . $val); - $httml .= "
". $migration_url . $val ."
"; - if(is_wp_error($filename)) - { - $httml .= "
". echo_me($filename->get_error_messages())."
"; - } - else - { - $httml .= "
filename = $filename
"; - $wp_filetype = wp_check_filetype(basename($filename), null ); - cyfu_publish_post($id, $filename); - return new WP_Error( $key ); - } - } - return $val=="" ? new WP_Error( $key ) : $val; - } - - function convert_array($val) - { - $arr = array(); - foreach($val as $k => $v) - { - if(!$this->get($k)) - { - if(is_array( $v )) - { - //$arr[$k] = array(); - //foreach($v as $k1 => $v1) - { - $arr[$k] = $this->convert_array($v); - //break; - } - } - else - { - $arr[$k] = $v; - } - } - else - { - $tp = $this->get($k); - switch($tp['t']['type']) - { - case "post": - $arr[$k] = get_postId_by_slug($v, $k);//$this->convert_id($k, $v, $this->get($k), -1);//$v; - break; - case "taxonomy": - $arr[$k] = get_termId_by_slug($v, $k); - } - //echo Assistants::echo_me( $this->get($k)); - } - } - return $arr; - } - - function insert_post_meta($metas, $id, $post_type) - { - global $wpdb; - $d = $this->get($post_type); - foreach($metas as $key=>$val) - { - $val = $this->convert_id($key, $val, $d, $id); - if(!is_wp_error($val)) - update_post_meta($id, $key, $val); - } - } - function object_property_args($class_name, $method, $args) - { - return @call_user_func(array($class_name, $method), $args); - } - } - - function file_copy($file, $distination) - { - if($file != "") - { - try { - $adress = str_replace(esc_url( home_url( '/' ) ), ABSPATH, $file); - //insertLog("file_copy", $adress); - $cl = @copy($adress, $distination) ; - } - catch (Exception $e) - { - insertLog("file_copy", $e->getMessage()); - } - if ($cl) - { - return true; - } - } - else - return false; - } - function get_postId_by_slug($slug, $post_type) - { - global $wpdb; - $query = "SELECT ID AS id FROM ".$wpdb->prefix."posts WHERE post_type='$post_type' AND post_name='$slug' LIMIT 1"; - return $wpdb->get_var($query); - } - function get_termId_by_slug($slug, $tax) - { - $term = get_term_by("slug", $slug, $tax); - return $term->term_id; - } -?> \ No newline at end of file diff --git a/class/SMC_Post.php b/class/SMC_Post.php deleted file mode 100644 index 29a9c0c..0000000 --- a/class/SMC_Post.php +++ /dev/null @@ -1,702 +0,0 @@ -ID)) - { - $this->id = $this->ID = $id->ID; - $this->body = $id; - } - else - { - $this->id = $id; - $this->body = get_post($id); - } - } - function is_enabled() - { - return isset($this->body->ID); - } - public static function get_instance($id) - { - $obj = is_numeric($id) ? $id : $id->ID; - if(!static::$instances) static::$instances = array(); - if(!isset(static::$instances[$obj])) - static::$instances[$obj] = new static($obj); - return static::$instances[$obj]; - } - static function insert($data) - { - $id = wp_insert_post( - array( - "post_type" => $data['post_type'] ? $data['post_type'] : static::get_type(), - 'post_name' => $data['post_name'], - 'post_title' => $data['post_title'], - 'post_content' => $data['post_content'], - 'post_status' => 'publish', - "post_author" => $data['post_author'] ? $data['post_author'] : get_current_user_id() - ) - ); - $post = static::get_instance($id); - $post->update_metas($data); - return $post; - } - function doubled() - { - $metas = array('post_title'=>$this->body->post_title, 'post_content' => $this->body->post_content); - require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); - $SMC_Object_Type = new SMC_Object_Type(); - $object = $SMC_Object_Type->object; - foreach($object[static::get_type()] as $key=>$val) - { - if($key == "t") continue; - $metas[$key] = $this->get_meta($key); - } - $metas = apply_filters("smc_before_doubled_post", $metas, $this); - $metas['post_author'] = $this->get("post_author"); - $post = static::insert($metas); - do_action("smc_after_doubled_post", $post, $this); - return $post; - } - static function delete($id) - { - if(is_numeric($id)) - { - return wp_delete_post($id); - } - else - { - return wp_delete_post($id->ID); - } - } - - function update_metas($meta_array) - { - $data = array(); - foreach($meta_array as $meta=>$val) - { - if( $meta == 'post_title' || $meta == 'post_content' ) - { - $data[$meta] = $val; - continue; - } - if( $meta == 'title' || $meta == 'name' || $meta == 'obj_type' ) - { - continue; - } - //insertLog("update_metas", array($meta, $val)); - $this->update_meta($meta, $val); - } - if(count($data)) - { - $data['ID'] = $this->id; - $id = wp_update_post($data); - //insertLog("update_metas", $id); - } - } - public function get_meta($name) - { - return get_post_meta($this->id, $name, true); - } - public function update_meta($name, $value) - { - update_post_meta( $this->id, $name, $value ); - return $value; - } - public function get($field) - { - return is_object($this->body) ? $this->body->$field : NULL; - } - function set($field) - { - $this->body->$field = $field; - wp_update_post($this->body); - } - public function get_the_author() - { - global $authordata; - $autor_id = $this->body->post_author; - $authordata = get_userdata($autor_id); - $author = apply_filters("the_author", $authordata->display_name); - return $author; - } - - /* - - */ - static function get_random($count=1) - { - $args = array( - 'numberposts' => $count, - 'offset' => 0, - 'orderby' => "rand", - 'post_status' => 'publish', - 'fields' => 'all', - 'post_type' => static::get_type(), - ); - $p = get_posts($args); - return static::get_instance($p[0]); - } - - /* - - */ - static function get_all($metas=-1, $numberposts=-1, $offset=0, $order_by='title', $order='DESC', $order_by_meta="", $fields="all", $relation="AND", $author=-1) - { - $args = array( - "numberposts" => $numberposts, - "offset" => $offset, - 'orderby' => $order_by, - 'order' => $order, - 'post_type' => static::get_type(), - 'post_status' => 'publish', - 'fields' => $fields - ); - if($author !=-1) - { - $args['author'] = $author; - } - if($order_by == "meta_value" || $order_by == "meta_value_num") - $args['meta_key'] = $order_by_meta; - if(is_array($metas)) - { - $arr = array(); - foreach($metas as $key=>$val) - { - $ar = array(); - $ar["value"] = is_array($val) ? $val["value"] : $val; - $ar["key"] = $key; - if(is_array($val) && !isset($val["value"])) - $ar["operator"] = "OR"; - else - $ar["compare"] = is_array($val) ? $val["compare"] : "="; - $arr[] = $ar; - } - $args['meta_query'] = array('relation' => $relation); - $args['meta_query'][] = $arr; - } - //return $args; - self::$all_posts = get_posts($args); - return self::$all_posts; - } - static function get_all_count( $args=-1 ) - { - if(is_array($args )) - { - $args["numberposts"] = -1; - $args['fields'] = "ids"; - $args['post_status'] = "publish"; - return count(get_posts($args)); - } - else - { - global $wpdb; - $query = "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status='publish' AND post_type='".static::get_type()."';"; - return $wpdb->get_var( $query ); - } - /**/ - } - - - - static function get_all_ids($metas=-1, $numberposts=-1, $offset=0, $order_by='title', $order='DESC', $is_update=false) - { - $args = array( - "numberposts" => $numberposts, - "offset" => $offset * $numberposts, - 'orderby' => $order_by, - 'order' => $order, - 'fields' => "ids", - 'post_type' => static::get_type(), - 'post_status' => 'publish', - ); - if(is_array($metas)) - { - $arr = array(); - foreach($metas as $key=>$val) - { - $ar = array(); - $ar["value"] = $val; - $ar["key"] = $key; - $ar["compare"] = "="; - $arr[] = $ar; - } - //$args['meta_query'] = array('relation' => 'AND'); - $args['meta_query'][] = $arr; - - } - //insertLog("SMC_Post", array("action" => "get_all_ids", "args"=>$args)); - static::$all_ids = get_posts($args); - return static::$all_ids; - } - - /* - - */ - static function amount_meta($meta_key, $post_ids=-1) - { - if(!is_array($post_ids)) return 0; - global $wpdb; - $ids = array(); - foreach($post_ids as $post_id) - { - if( $post_id instanceof SMC_Post ) - $ids[] = $post_id->id; - else if( $post_id instanceof WP_Post ) - $ids[] = $post_id->ID; - else if( is_numeric($post_id ) ) - $ids[] = $post_id; - } - $query = "SELECT SUM(meta_value) FROM " . $wpdb->prefix . "postmeta WHERE post_id IN(" . implode(",", $ids) . ") AND meta_key='count';"; - $amount = $wpdb->get_var($query); - return $amount; - } - - /* - - */ - static function wp_dropdown($params="-1") - { - if( !is_array($params) ) { - $params = array(); - } - - if(isset($params["exclude_post_id"]) && !is_array($params["exclude_post_id"])) { - $params["exclude_post_id"] = array($params["exclude_post_id"]); - } - - $hubs = empty($params['posts']) ? - (empty($params['args']) ? array() : self::get_all($params['args'])) : - $params['posts']; - - $html = ""; - return $html; - } - - static function dropdown($data_array, $params="-1") - { - if(!is_array($params)) - $params = array(); - $hubs = $data_array; - $html = ""; - return $html; - } - static function get_type() - { - return "post"; - } - - - static function init() - { - if(!static::$instances || !is_array( static::$instances )) - static::$instances = []; - $typee = static::get_type(); - add_action('admin_menu', array(get_called_class(), 'my_extra_fields')); - add_action("save_post_{$typee}", array(get_called_class(), 'true_save_box_data'), 10); - - //admin table - add_filter("manage_edit-{$typee}_columns", array(get_called_class(), 'add_views_column'), 4); - add_filter("manage_edit-{$typee}_sortable_columns", array(get_called_class(), 'add_views_sortable_column')); - add_filter("manage_{$typee}_posts_custom_column", array(get_called_class(), 'fill_views_column'), 5, 2); - add_filter("pre_get_posts", array(get_called_class(), 'add_column_views_request')); - - //bulk actions - add_filter("bulk_actions-edit-{$typee}", array(get_called_class(), "register_my_bulk_actions")); - add_filter("handle_bulk_actions-edit-{$typee}", array(get_called_class(), 'my_bulk_action_handler'), 10, 3 ); - //add_action('admin_notices', array(get_called_class(), 'my_bulk_action_admin_notice' )); - add_action("bulk_edit_custom_box", array(get_called_class(), 'my_bulk_edit_custom_box'), 2, 2 ); - //add_action("quick_edit_custom_box", array(get_called_class(), 'my_bulk_edit_custom_box'), 2, 2 ); - add_action("wp_ajax_save_bulk_edit", array(get_called_class(), 'save_bulk_edit_book') ); - return; - } - - static function add_views_column( $columns ) - { - require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); - $SMC_Object_type = SMC_Object_Type::get_instance(); - $obj = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; - $posts_columns = array( - "cb" => " ", - //"IDs" => __("ID", 'smp'), - "title" => __("Title") - ); - //insertLog("add_views_column", "----"); - foreach($obj as $key=>$value) - { - if($key == 't' ||$key == 'class' ) continue; - $posts_columns[$key] = isset($value['name']) ? $value['name'] : $key; - } - return $posts_columns; - } - - static function fill_views_column($column_name, $post_id) - { - $p = static::get_instance($post_id); - require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); - - $SMC_Object_type = SMC_Object_type::get_instance(); - $obj = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; - - switch( $column_name) - { - case 'IDs': - $color = $p->get_meta( "color" ); - if($post_id) - echo "
ID".$post_id. "
-

"; - break; - default: - if(array_key_exists($column_name, $obj)) - { - $meta = $p->get_meta($column_name); - switch($obj[$column_name]['type']) - { - case "number": - case "string": - echo $meta; - break; - case "date": - echo $meta ? date("d.m.Y H:i", $meta) : ""; - break; - case "boolean": - echo $meta - ? " " . $obj[$column_name]['name'] . "" - : " " . $obj[$column_name]['name'] . ""; - break; - case "media": - echo ""; - break; - case "array": - echo implode(", ", $meta); - break; - case "post": - if($meta) - { - $p = get_post($meta); - $post_title = is_object($p) ? $p->post_title : ''; - $color = $obj[$column_name]['color']; - echo " - $post_title -

ID$meta
"; - } - break; - case "taxonomy": - if($term) - { - $term = get_term_by("term_id", $meta, $elem); - echo $term ? "
".$term->name ."
ID".$meta. "
-
" : $meta; - } - break; - case "id": - default: - $elem = $SMC_Object_type->get_object($meta, $obj[$column_name]["object"] ); - switch( $obj[$column_name]["object"]) - { - case "user": - if($meta) - { - $user = get_user_by("id", $meta); - $display_name = $user ? $user->display_name : "=="; - echo $display_name."
ID".$meta. "
-
"; - } - break; - case "post": - if($meta) - { - $p = get_post($meta); - $post_title = $p->post_title; - echo " - $post_title -
-
ID".$meta. "
-
"; - } - break; - case "taxonomy": - default: - $term = get_term_by("term_id", $meta, $elem); - echo $term ? "
".$term->name ."
ID".$meta. "
-
" : $meta; - break; - } - break; - } - } - break; - } - } - - // добавляем возможность сортировать колонку - static function add_views_sortable_column($sortable_columns) - { - - return $sortable_columns; - } - - // изменяем запрос при сортировке колонки - static function add_column_views_request( $object ) - { - - } - - //bulk actions - static function register_my_bulk_actions( $bulk_actions ) - { - $bulk_actions['double'] = __("Double", SHMAPPER); - return $bulk_actions; - } - - static function my_bulk_action_handler( $redirect_to, $doaction, $post_ids ) - { - // ничего не делаем если это не наше действие - if( $doaction !== 'double' ) - return $redirect_to; - foreach( $post_ids as $post_id ) - { - $ppost = static::get_instance($post_id); - $ppost->doubled(); - } - $redirect_to = add_query_arg( 'my_bulk_action_done', count( $post_ids ), $redirect_to ); - return $redirect_to; - } - static function my_bulk_action_admin_notice() - { - if( empty( $_GET['my_bulk_action_done'] ) ) return; - $data = $_GET['my_bulk_action_done']; - $msg = sprintf( 'Doubled: %s.', $data ); - echo '

'. $msg .'

'; - } - static function my_bulk_edit_custom_box( $column_name, $post_type ) - { - if($post_type != forward_static_call_array( array( get_called_class(),"get_type"), array())) return; - /**/ - static $printNonce = TRUE; - if ( $printNonce ) { - $printNonce = FALSE; - wp_nonce_field( plugin_basename( __FILE__ ), 'book_edit_nonce' ); - } - - $p = static::get_instance($post_id); - require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); - $SMC_Object_type = SMC_Object_type::get_instance(); - $obj = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; - - ?> -
-
- ".__("Usage in Maps: ", SHMAPPER).""; - break; - default: - if(array_key_exists($column_name, $obj)) - { - echo "
".$obj[$column_name]['name']."
" ; - switch($obj[$column_name]['type']) - { - case "number": - case "string": - - break; - case "date": - - break; - case "boolean": - echo " - - - - - - - - "; - break; - case "media": - - break; - case "array": - - break; - case "post": - - break; - case "taxonomy": - - break; - case "id": - default: - break; - } - } - break; - } - ?> -
-
- object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; - - if ( ! empty( $post_ids ) && is_array( $post_ids ) ) - foreach( $post_ids as $post_id ) - { - $_obj = static::get_instance((int)$post_id); - foreach($obj as $key => $value) - { - if($key == 't' ||$key == 'class' ) continue; - switch($obj[$key]['type']) - { - case "number": - case "string": - - break; - case "date": - - break; - case "boolean": - if(!isset($_POST['smc_post_changer'][ $key ]) || (int)$_POST['smc_post_changer'][ $key ] < 0 ) break; - $val = (int)$_POST['smc_post_changer'][ $key ]; - $_obj->update_meta( $key, $val ); - break; - } - } - } - echo json_encode( $_POST ); - wp_die(); - } - - - static function get_extra_fields_title() - { - return __('Parameters', SHMAPPER); - } - - static function my_extra_fields() - { - add_meta_box( 'extra_fields', __('Parameters', SHMAPPER), array(get_called_class(), 'extra_fields_box_func'), static::get_type(), 'normal', 'high' ); - - } - static function extra_fields_box_func( $post ) - { - $lt = static::get_instance( $post ); - //echo static::get_type(); - echo static::view_admin_edit($lt); - wp_nonce_field( basename( __FILE__ ), static::get_type().'_metabox_nonce' ); - } - static function true_save_box_data ( $post_id ) - { - // проверяем, пришёл ли запрос со страницы с метабоксом - if ( !isset( $_POST[static::get_type().'_metabox_nonce' ] ) - || !wp_verify_nonce( $_POST[static::get_type().'_metabox_nonce' ], basename( __FILE__ ) ) ) - return $post_id; - // проверяем, является ли запрос автосохранением - if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) - return $post_id; - // проверяем, права пользователя, может ли он редактировать записи - if ( !current_user_can( 'edit_post', $post_id ) ) - return $post_id; - $lt = static::get_instance( $post_id ); - $metas = static::save_admin_edit($lt); - //var_dump($metas); - //wp_die(); - $lt->update_metas( $metas ); - return $post_id; - } - static function view_admin_edit($obj) - { - require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); - $SMC_Object_type = SMC_Object_Type::get_instance(); - $bb = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; - foreach($bb as $key=>$value) - { - if($key == 't' || $key == 'class' ) continue; - $meta = get_post_meta( $obj->id, $key, true); - $$key = $meta; - switch( $value['type'] ) - { - case "number": - $h = ""; - break; - case "boolean": - $h = ""; - break; - default: - $h = ""; - } - $html .="
-
".$value['name'] . "
-
- $h -
-
-
"; - } - echo $html; - //echo "
You must override static methods view_admin_edit and save_admin_edit in class " . get_called_class() . ".
"; - } - static function save_admin_edit($obj) - { - return array(); - } - } -?> \ No newline at end of file diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php deleted file mode 100644 index bba72a3..0000000 --- a/class/ShMapPointType.class.php +++ /dev/null @@ -1,374 +0,0 @@ -prefix . "point_map - WHERE point_id=$post_id;"; - $wpdb->query($query); - } - static function register_all() - { - //Map marker type - $labels = array( - 'name' => __("Map marker type", SHMAPPER), - 'singular_name' => __("Map marker type", SHMAPPER), - 'search_items' => __("Search Map marker type", SHMAPPER), - 'all_items' => __("all Map marker types", SHMAPPER), - 'view_item ' => __("view Map marker type", SHMAPPER), - 'parent_item' => __("parent Map marker type", SHMAPPER), - 'parent_item_colon' => __("parent Map marker type:", SHMAPPER), - 'edit_item' => __("edit Map marker type", SHMAPPER), - 'update_item' => __("update Map marker type", SHMAPPER), - 'add_new_item' => __("add Map marker type", SHMAPPER), - 'new_item_name' => __("new Map marker type name", SHMAPPER), - 'menu_name' => __("Map marker type", SHMAPPER), - ); - register_taxonomy(SHM_POINT_TYPE, [ ], - [ - 'label' => '', // определяется параметром $labels->name - 'labels' => $labels, - 'description' => __('Unique type of every Map markers', SHMAPPER), // описание таксономии - 'public' => true, - 'hierarchical' => false, - 'update_count_callback' => '', - 'show_in_nav_menus' => true, - 'rewrite' => true, - 'capabilities' => array(), - 'meta_box_cb' => "post_categories_meta_box", // callback функция. Отвечает за html код метабокса (с версии 3.8): post_categories_meta_box или post_tags_meta_box. Если указать false, то метабокс будет отключен вообще - 'show_admin_column' => true, // Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5) - '_builtin' => false, - 'show_in_quick_edit' => true, // по умолчанию значение show_ui - ] ); - } - static function tax_menu_correction($parent_file) - { - global $current_screen; - $taxonomy = $current_screen->taxonomy; - if ( $taxonomy == SHM_POINT_TYPE ) - $parent_file = 'shm_page'; - return $parent_file; - } - static function tax_add_admin_menus() - { - add_submenu_page( - 'shm_page', - __("Map marker types", SHMAPPER), - __("Map marker types", SHMAPPER), - 'manage_options', - 'edit-tags.php?taxonomy=' . SHM_POINT_TYPE - ); - } - static function ctg_columns($theme_columns) - { - $new_columns = array - ( - 'cb' => ' ', - 'id' => 'id', - 'name' => __('Name'), - 'icon' => __('Icon', SHMAPPER) - ); - return $new_columns; - } - static function manage_ctg_columns($out, $column_name, $term_id) - { - switch ($column_name) { - case 'id': - $out .= $term_id; - break; - case 'icon': - $icon = get_term_meta( $term_id, 'icon', true ); - $color = get_term_meta( $term_id, 'color', true ); - $logo = wp_get_attachment_image_src($icon, "full")[0]; - echo "
- -
-
"; - break; - default: - break; - } - return $out; - } - static function new_ctg( $tax_name ) - { - require_once(SHM_REAL_PATH."tpl/input_file_form.php"); - ?> -
- -
-
- -
-
- - -
-
- - -
-
- -
- -
-
- - term_id; - $icon = get_term_meta($term_id, "icon", true); - $color = get_term_meta($term_id, "color", true); - $height = get_term_meta($term_id, "height", true); - $height = !$height ? 30 : $height; - $width = get_term_meta($term_id, "width", true); - $width = !$width ? 30 : $width; - } - ?> - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - term_id, "color", true); - $icon = (int)get_term_meta($term->term_id, "icon", true); - $d = wp_get_attachment_image_src($icon, array(100, 100)); - $cur_bgnd = $d[0]; - $class = $is_locked ? " shm-muffle " : ""; - return " -
-
-
-
" . $term->name . "
-
"; - } - static function get_all_ids() - { - return get_terms([ - "taxonomy" => SHM_POINT_TYPE, - "hide_empty" => false, - "fields" => "ids" - - ]); - } - static function wp_dropdown($params=-1) - { - if(!is_array($params)) - $params=[ "id" => "ganres", "name" => "ganres", "class"=> "form-control", "taxonomy"=> SHM_POINT_TYPE]; - $all = get_terms(['taxonomy' => $params['taxonomy'], 'hide_empty' => false ]); - $multiple = $params['multiple'] ? " multiple " : "" ; - $selector =$params['selector'] ? " selector='" . $params['selector'] . "' " : " s='ee' "; - $html = ""; - return $html; - } - static function get_icon_src($term_id, $size=-1) - { - $size = $size == -1 ? get_term_meta( $term_id, "height", true ) : $size; - $icon = get_term_meta( $term_id, "icon", true ); - $d = wp_get_attachment_image_src( $icon, array($size, $size) ); - return $d; - } - static function get_ganre_swicher($params = -1, $type="checkbox", $form_factor="large") - { - if( !is_array($params) || empty($params['prefix']) ) { - $params = array('prefix' => 'ganre'); - } - - $selected = is_array($params['selected']) ? $params['selected'] : explode(",", $params['selected']); - $includes = empty($params['includes']) ? '' : $params['includes']; - $row_class = isset($params['row_class']) ? $params['row_class'] : "" ; - $row_style = isset($params['row_style']) ? $params['row_style'] : ""; ; - $ganres = get_terms(["taxonomy" => SHM_POINT_TYPE, 'hide_empty' => false ]); - $html = "
"; - switch($params['col_width']) - { - case 12: - $col_width = "shm-1"; - break; - case 6: - $col_width = "shm-2"; - break; - case 4: - $col_width = "shm-3"; - break; - case 3: - $col_width = "shm-4"; - break; - default: - case 2: - $col_width = "shm-6"; - break; - - } - foreach($ganres as $ganre) - { - if( is_array($includes) && !in_array( $ganre->term_id, $includes ) ) continue; - - $icon = get_term_meta($ganre->term_id, "icon", true); - $color = get_term_meta($ganre->term_id, "color", true); - $d = wp_get_attachment_image_src($icon, array(100, 100)); - $cur_bgnd = $d[0]; - $before = ""; - $after = ""; - switch( $form_factor ) - { - case "large": - $class = "ganre_checkbox"; - $before = "
"; - $after = " - -
"; - break; - case "stroke": - $class = "ganre_checkbox2"; - $after = " - "; - break; - default: - $class = "ganre_checkbox"; - break; - } - $html .= " - $before - term_id . "' - term_id='" . $ganre->term_id . "' - class='$class' - value='" . $ganre->term_id . "' ". - checked(1, in_array( $ganre->term_id, $selected) ? 1 : 0, false). - "/> - $after"; - } - - if( isset($params['default_none']) ) - { - if ( ! isset( $class ) ) { - $class = ''; - } - $html .= " -
- - -
"; - } - - $html .= " - -
"; - - return $html; - - } -} \ No newline at end of file diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php deleted file mode 100644 index 2684d15..0000000 --- a/class/ShMapper.class.php +++ /dev/null @@ -1,802 +0,0 @@ -query("CREATE TABLE IF NOT EXISTS `".$wpdb->prefix."point_map` ( - `ID` int(255) unsigned NOT NULL AUTO_INCREMENT, - `point_id` int(255) unsigned NOT NULL, - `map_id` int(255) unsigned NOT NULL, - `date` int(31) unsigned NOT NULL, - `session_id` int(255) unsigned NOT NULL DEFAULT '1', - `approved_date` int(31) unsigned NOT NULL DEFAULT '1', - `approve_user_id` int(255) unsigned NOT NULL, - PRIMARY KEY (`ID`) - ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;"); - update_option(SHMAPPER,[ -// "map_api" => 1, - "map_api" => 2, - "shm_map_is_crowdsourced" => 0, - "shm_map_marker_premoderation" => 1, - "shm_reload" => 1, - "wizzard" => 1, - "shm_personal_text" => __("Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных».", SHMAPPER), - "shm_succ_request_text" => __("Your request has been successfully registered.", SHMAPPER), - "shm_error_request_text" => __("Unknown error.", SHMAPPER), - ]); - $upload = wp_upload_dir(); - $upload_dir = $upload['basedir']; - $upload_dir = $upload_dir . '/shmapper'; - wp_mkdir_p( $upload_dir ); - } - public static function deactivate() - { - - } - static $options; - static $instance; - static function get_instance() - { - if(!static::$instance) - static::$instance = new static; - return static::$instance; - } - static function update_options() - { - update_option( SHMAPPER, static::$options ); - static::$options = get_option(SHMAPPER); - } - function __construct() - { - static::$options = get_option(SHMAPPER); -// static::$options['map_api'] = 2; // hot fix to disable Maps.Yandex - - add_action( "init", [__CLASS__, "add_shortcodes"], 80); - add_action( "wp_head", [__CLASS__, "set_styles"]); - add_filter( "smc_add_post_types", [__CLASS__, "init_obj"], 10); - add_action( 'admin_menu', [__CLASS__, 'admin_page_handler'], 9); - add_action( 'admin_menu', [__CLASS__, 'admin_page_handler2'], 99); - add_action( 'admin_enqueue_scripts', [__CLASS__, 'add_admin_js_script'], 99 ); - add_action( 'wp_enqueue_scripts', [__CLASS__, 'add_frons_js_script'], 99 ); - add_action( "admin_footer", [__CLASS__, "add_wizzard"]); - add_action( 'wp_before_admin_bar_render', [__CLASS__, 'my_admin_bar_render'], 11); - } - - - - static function my_admin_bar_render() - { - global $wp_admin_bar, $shm_all_maps; - if(!current_user_can("manage_options")) return; - - $wp_admin_bar->add_menu( array( - 'parent' => false, - 'id' => 'shmapper_panel', - 'title' => __('Shmapper', SHMAPPER), - 'href' => "/wp-admin/admin.php?page=shm_settings_page" - )); - $wp_admin_bar->add_menu( array( - 'parent' => 'shmapper_panel', - 'id' => 'shmapper_add_map', - 'title' => __('add Map', SHMAPPER), - 'href' => "/wp-admin/post-new.php?post_type=shm_map" - )); - $wp_admin_bar->add_menu( array( - 'parent' => 'shmapper_panel', - 'id' => 'shmapper_maps', - 'title' => __('Maps', SHMAPPER), - 'href' => "/wp-admin/edit.php?post_type=shm_map" - )); - $wp_admin_bar->add_menu( array( - 'parent' => 'shmapper_panel', - 'id' => 'shmapper_edit_maps', - 'title' => __('edit Maps in page', SHMAPPER), - 'href' => "#" - )); - if(is_array($shm_all_maps)) - { - foreach($shm_all_maps as $mid) - { - $map = ShmMap::get_instance($mid); - $wp_admin_bar->add_menu( [ - 'parent' => 'shmapper_edit_maps', - 'id' => 'shmapper_edit_map'.$mid, - 'title' => $map->get("post_title"), - 'href' => "/wp-admin/post.php?post=$mid&action=edit" - ] ); - } - } - $wp_admin_bar->add_menu( array( - 'parent' => 'shmapper_panel', - 'id' => 'shmapper_map_req', - 'title' => __("all Map Requests", SHMAPPER), - 'href' => "/wp-admin/edit.php?post_type=shm_request" - )); - } - - - static function init_obj($init_object) - { - if(!is_array($init_object)) $init_object = []; - $point = []; - $point['t'] = ['type'=>'post']; - $point['location'] = ['type' => 'string', "name" => __("Location", SHMAPPER)]; - $point['latitude'] = ['type'=>'string', "name" => __("Latitude", SHMAPPER)]; - $point['longitude'] = ['type'=>'string', "name" => __("Longitude", SHMAPPER)]; - $point['zoom'] = ['type'=>'number', "name" => __("Zoom", SHMAPPER)]; - $init_object[SHM_POINT] = $point; - - $map = []; - $map['t'] = ['type'=>'post']; - $map['latitude'] = ['type'=>'string', "distination" => "map", "name" => __("Latitude", SHMAPPER)]; - $map['longitude'] = ['type'=>'string', "distination" => "map", "name" => __("Longitude", SHMAPPER)]; - $map['zoom'] = ['type'=>'number', "distination" => "map", "name" => __("Zoom", SHMAPPER)]; - $map['is_legend'] = ['type'=>'boolean', "distination" => "map", "name" => __("Legend exists", SHMAPPER)]; - $map['is_filtered'] = ['type'=>'boolean', "distination" => "map", "name" => __("Filters exists", SHMAPPER)]; - $map['is_csv'] = ['type'=>'boolean', "distination" => "map", "name" => __("Export csv", SHMAPPER)]; - $map['width'] = ['type'=>'number', "distination" => "map", "name" => __("Width")]; - $map['height'] = ['type'=>'number', "distination" => "map", "name" => __("Height")]; - $map['is_search'] = ['type'=>'boolean', "distination" => "map", "name" => __("Map search", SHMAPPER)]; - $map['is_fullscreen'] = ['type'=>'boolean', "distination" => "map", "name" => __("Map full screen", SHMAPPER)]; - $map['is_zoomer'] = ['type'=>'boolean', "distination" => "map", "name" => __("Map zoom slider", SHMAPPER)]; - $map['is_layer_switcher'] = ['type'=>'boolean',"distination"=>"map","name"=>__("Map layer switcher",SHMAPPER)]; - $map['is_lock'] = ['type'=>'boolean',"distination"=>"map","name"=>__("Lock zoom and drag",SHMAPPER)]; - $map['is_clustered'] = ['type'=>'boolean',"distination"=>"map","name"=>__("Formating Marker to cluster", SHMAPPER)]; - $map['default_icon_id'] = ['type'=>'boolean',"distination"=>"map","name"=>__("Default Marker icon", SHMAPPER)]; - - $map['is_form'] = ['type'=>'boolean', "distination" => "form", "name" => __("Form exists", SHMAPPER)]; - $map['notify_owner'] = ['type'=>'boolean', "distination" => "form", "name" => __("Notify owner of Map", SHMAPPER)]; - $map['form_title'] = ['type'=>'string', "distination" => "form", "name" => __("Form Title", SHMAPPER)]; - $map['form_forms'] = ['type'=>'form_editor', "distination" => "form", "name" => __("Form generator", SHMAPPER)]; - $map['is_personal_data'] = ['type'=>'boolean', "distination" => "form", "name" => __("Users can leave their contact details for feedback.", SHMAPPER)]; - $map['is_name_iclude'] = ['type'=>'boolean', "distination" => "form", "name" => __("Unclude Personal name", SHMAPPER)]; - $map['personal_name'] = ['type'=>'string', "distination" => "form", "name" => __("Personal name", SHMAPPER)]; - $map['is_name_required'] = ['type'=>'boolean', "distination" => "form", "name" => __("Required Personal name", SHMAPPER)]; - $map['is_email_iclude'] = ['type'=>'boolean', "distination" => "form", "name" => __("Unclude Personal e-mail",SHMAPPER)]; - $map['personal_email'] = ['type'=>'string', "distination" => "form", "name" => __("Personal e-mail", SHMAPPER)]; - $map['is_email_required'] = ['type'=>'boolean', "distination" => "form", "name" => __("Required Personal e-mail", SHMAPPER)]; - $map['is_phone_iclude'] = ['type'=>'boolean', "distination" => "form", "name" => __("Unclude Personal phone", SHMAPPER)]; - $map['personal_phone'] = ['type'=>'string', "distination" => "form", "name" => __("Personal phone", SHMAPPER)]; - $map['is_phone_required'] = ['type'=>'boolean', "distination" => "form", "name" => __("Required Personal phone", SHMAPPER)]; - $init_object[SHM_MAP] = $map; - - - $req = []; - $req['t'] = ['type' => 'post']; - $req['map'] = ['type' => 'post', "object" => SHM_REQUEST, "color"=> "#5880a2", "name" => __("Map", SHMAPPER)]; - $req['title'] = ['type' => 'string', "name" => __("Title")]; - $req['description'] = ['type' => 'string', "name" => __("Description", SHMAPPER)]; - $req['latitude'] = ['type' => 'string', "name" => __("Latitude", SHMAPPER)]; - $req['longitude'] = ['type' => 'string', "name" => __("Longitude", SHMAPPER)]; - $req['location'] = ['type' => 'string', "name" => __("Location", SHMAPPER)]; - $req['type'] = ['type' => 'taxonomy', "object" => SHM_POINT_TYPE, "name" => __("Type", SHMAPPER)]; - $req['session'] = ['type' => 'id', "object" => "session", "name" => __("Session", SHMAPPER)]; - $req['author'] = ['type' => 'string', "name" => __("Author")]; - $req['contacts'] = ['type' => 'array', "name" => __("Contacts", SHMAPPER)]; - $req['notified'] = ['type' => 'boolean', "name" => __("Aproved", SHMAPPER)]; - $req['notify_date'] = ['type' => 'number', "name" => __("Aprove date", SHMAPPER)]; - $req['notify_user'] = ['type' => 'id', "object" => "user", "name" => __("Accessed User", SHMAPPER)]; - $init_object[SHM_REQUEST] = $req; - - return $init_object; - - } - - static function add_shortcodes() - { - require_once(SHM_REAL_PATH.'shortcode/shmMap.shortcode.php'); - add_shortcode('shmMap', 'shmMap'); - } - - static function add_admin_js_script() - { - //css - wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array(), SHMAPPER_VERSION); - wp_enqueue_style( "ShMapper"); - //js - wp_register_script("inline", admin_url().'/js/inline-edit-post.js', array()); - wp_enqueue_script("inline"); - wp_register_script("ShMapper", plugins_url( '../assets/js/ShMapper.js', __FILE__ ), array('jquery-migrate')); - wp_enqueue_script("ShMapper"); - wp_register_script("ShMapper.admin", plugins_url( '../assets/js/ShMapper.admin.js', __FILE__ ), array()); - wp_enqueue_script("ShMapper.admin"); - if( static::$options['map_api'] == 1 ) - { - wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=".ShMapper::$options['shm_yandex_maps_api_key']."&load=package.full&lang=ru_RU", array()); - wp_enqueue_script("api-maps"); - wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); - wp_enqueue_script("ShMapper.yandex"); - } - else if( static::$options['map_api'] == 2 ) - { - //css - wp_register_style("easyGeocoder", SHM_URLPATH . 'assets/css/easyGeocoder.css', array()); - wp_enqueue_style( "easyGeocoder"); - wp_register_style("leaflet", "https://unpkg.com/leaflet@1.3.4/dist/leaflet.css", array()); - wp_enqueue_style( "leaflet"); - wp_register_style("layerSwitcher", SHM_URLPATH . 'assets/css/layerSwitcher.css', array()); - wp_enqueue_style( "layerSwitcher"); - wp_register_style("MarkerCluster", SHM_URLPATH . 'assets/css/MarkerCluster.css', array()); - wp_enqueue_style( "MarkerCluster"); - wp_register_style("MarkerClusterD", SHM_URLPATH . 'assets/css/MarkerCluster.Default.css', array()); - wp_enqueue_style( "MarkerClusterD"); - wp_register_style("esri-leaflet-geocoder", "https://unpkg.com/esri-leaflet-geocoder@2.2.13/dist/esri-leaflet-geocoder.css", array()); - wp_enqueue_style( "esri-leaflet-geocoder"); - //js - wp_register_script("leaflet", "https://unpkg.com/leaflet@1.3.4/dist/leaflet.js", array()); - wp_enqueue_script("leaflet"); - wp_register_script("esri-leaflet", "https://unpkg.com/esri-leaflet@2.2.3/dist/esri-leaflet.js", array()); - wp_enqueue_script("esri-leaflet"); - wp_register_script("esri-leaflet-geocoder", "https://unpkg.com/esri-leaflet-geocoder@2.2.13/dist/esri-leaflet-geocoder.js", array()); - wp_enqueue_script("esri-leaflet-geocoder"); - wp_register_script("leaflet.markercluster", plugins_url( '../assets/js/leaflet.markercluster-src.js', __FILE__ ), array()); - wp_enqueue_script("leaflet.markercluster"); - wp_register_script("layerSwitcher", plugins_url( '../assets/js/Leaflet.layerSwitcher.js', __FILE__ ), array()); - wp_enqueue_script("layerSwitcher"); - - wp_register_script("easyGeocoder", plugins_url( '../assets/js/easyGeocoder.js', __FILE__ ), array()); - wp_enqueue_script("easyGeocoder"); - - wp_register_script("Leaflet.fs", plugins_url( '../assets/js/Leaflet.fullscreen.min.js', __FILE__ ), array()); - wp_enqueue_script("Leaflet.fs"); - wp_register_script("ShMapper.osm", plugins_url( '../assets/js/ShMapper_osm.js', __FILE__ ), array()); - wp_enqueue_script("ShMapper.osm"); - } - wp_localize_script( "ShMapper", "map_type", array(static::$options['map_api']) ); - - // load media library scripts - wp_enqueue_media(); - //ajax - wp_localize_script( - 'ShMapper', - 'myajax', - array( - 'url' => admin_url('admin-ajax.php'), - 'nonce' => wp_create_nonce('myajax-nonce') - ) - ); - wp_localize_script( - 'ShMapper', - 'myajax2', - array( - 'url' => admin_url('admin-ajax.php') - ) - ); - - wp_localize_script( 'ShMapper', 'shm_maps', array() ); - wp_localize_script( - 'ShMapper', - 'voc', - array( - 'Attantion' => __( "Attantion", SHMAPPER ), - 'Send' => __( "Send" ), - 'Close' => __( "Close" ), - 'Error: no map' => __( "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match", SHMAPPER ), - 'Are you shure?' => __( "Are you shure?", SHMAPPER ), - ) - ); - } - static function add_frons_js_script() - { - - //css - wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array()); - wp_enqueue_style( "ShMapper"); - - wp_enqueue_script('jquery-ui-core'); - wp_enqueue_script('jquery-ui-draggable'); - wp_register_script("touchpunch", plugins_url( '../assets/js/touchpunch.js', __FILE__ ), array()); - wp_enqueue_script("touchpunch"); - wp_register_script("ShMapper", plugins_url( '../assets/js/ShMapper.js', __FILE__ ), array( 'jquery-migrate')); - wp_enqueue_script("ShMapper"); - wp_register_style("layerSwitcher", SHM_URLPATH . 'assets/css/layerSwitcher.css', array()); - wp_enqueue_style( "layerSwitcher"); - wp_register_script("ShMapper.front", plugins_url( '../assets/js/ShMapper.front.js', __FILE__ ), array()); - wp_enqueue_script("ShMapper.front"); - if( static::$options['map_api'] == 1 ) - { - wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=".ShMapper::$options['shm_yandex_maps_api_key']."&load=package.full&lang=ru_RU", array()); - wp_enqueue_script("api-maps"); - wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); - wp_enqueue_script("ShMapper.yandex"); - } - else if( static::$options['map_api'] == 2 ) - { - //css - wp_register_style("easyGeocoder", SHM_URLPATH . 'assets/css/easyGeocoder.css', array()); - wp_enqueue_style( "easyGeocoder"); - wp_register_style("MarkerCluster", SHM_URLPATH . 'assets/css/MarkerCluster.css', array()); - wp_enqueue_style( "MarkerCluster"); - wp_register_style("MarkerClusterD", SHM_URLPATH . 'assets/css/MarkerCluster.Default.css', array()); - wp_enqueue_style( "MarkerClusterD"); - wp_register_style("leaflet", "https://unpkg.com/leaflet@1.3.4/dist/leaflet.css", array()); - wp_enqueue_style( "leaflet"); - wp_register_style("esri-leaflet-geocoder", "https://unpkg.com/esri-leaflet-geocoder@2.2.13/dist/esri-leaflet-geocoder.css", array()); - wp_enqueue_style( "esri-leaflet-geocoder"); - //js - wp_register_script("leaflet", "https://unpkg.com/leaflet@1.3.4/dist/leaflet.js", array()); - wp_enqueue_script("leaflet"); - wp_register_script("esri-leaflet", "https://unpkg.com/esri-leaflet@2.2.3/dist/esri-leaflet.js", array()); - wp_enqueue_script("esri-leaflet"); - wp_register_script("esri-leaflet-geocoder", "https://unpkg.com/esri-leaflet-geocoder@2.2.13/dist/esri-leaflet-geocoder.js", array()); - wp_enqueue_script("esri-leaflet-geocoder"); - wp_register_script("easyGeocoder", plugins_url( '../assets/js/easyGeocoder.js', __FILE__ ), array()); - wp_enqueue_script("easyGeocoder"); - wp_register_script("leaflet.markercluster", plugins_url( '../assets/js/leaflet.markercluster-src.js', __FILE__ ), array()); - wp_enqueue_script("leaflet.markercluster"); - wp_register_script("layerSwitcher", plugins_url( '../assets/js/Leaflet.layerSwitcher.js', __FILE__ ), array()); - wp_enqueue_script("layerSwitcher"); - wp_register_script("Leaflet.fs", plugins_url( '../assets/js/Leaflet.fullscreen.min.js', __FILE__ ), array()); - wp_enqueue_script("Leaflet.fs"); - wp_register_script("ShMapper.osm", plugins_url( '../assets/js/ShMapper_osm.js', __FILE__ ), array()); - wp_enqueue_script("ShMapper.osm"); - - } - wp_localize_script( 'ShMapper', 'map_type', array( static::$options['map_api'] ) ); - - // ajax. - wp_localize_script( - 'ShMapper', - 'myajax', - array( - 'url' => admin_url( 'admin-ajax.php' ), - 'nonce' => wp_create_nonce( 'myajax-nonce' ), - ) - ); - wp_localize_script( - 'ShMapper', - 'myajax2', - array( - 'url' => admin_url('admin-ajax.php') - ) - ); - wp_localize_script( - 'ShMapper', - 'shm_set_req', - array( - 'url' => admin_url('admin-ajax.php') - ) - ); - wp_localize_script( 'ShMapper', 'shm_maps', array() ); - wp_localize_script( - 'ShMapper', - 'voc', - array( - 'Attantion' => __( "Attantion", SHMAPPER ), - 'Send' => __( "Send" ), - 'Close' => __( "Close" ), - 'Error: no map' => __( "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match", SHMAPPER ), - ) - ); - } - static function set_styles() - { - echo ""; - } - static function admin_page_handler() - { - /**/ - add_menu_page( - __('Shmapper', SHMAPPER), - __('Shmapper', SHMAPPER), - 'manage_options', - 'shm_page', - [ __CLASS__, 'setting_pages' ], - SHM_URLPATH . "assets/img/shmapper_32x32_white.svg",//"dashicons-admin-site", // icon url - '19.123456' - ); - } - static function admin_page_handler2() - { - add_submenu_page( - 'shm_page', - __("Settings"), - __("Settings"), - 'manage_options', - 'shm_settings_page', - [ __CLASS__, 'setting_pages' ] - ); - } - static function setting_pages() - { - $latitude = 55.8; - $longitude = 37.8; - $zoom = 4; - if ( static::$options['shm_default_zoom'] ) { - $zoom = static::$options['shm_default_zoom']; - } - if ( static::$options['shm_default_latitude'] ) { - $latitude = static::$options['shm_default_latitude']; - } - if ( static::$options['shm_default_longitude'] ) { - $longitude = static::$options['shm_default_longitude']; - } - - $mapType = ShmMap::get_map_types()[ ShMapper::$options['map_api'] ][0]; - - echo "
-
-
- -

". - __("Settings") . - "

-
-
-
-
    -
  • -
    -
    ". - __("Map API", SHMAPPER) . - "
    -
    -
    - - -
    -
    - - -
    - -
    - -
    -
    -

    -

    ".__("Yandex.Maps API Key", SHMAPPER)."
    - - ".__("ATTENTION: you must specify a key for working with the Yandex.Maps API.", SHMAPPER)."
    ".__("Learn more here:", SHMAPPER)." https://tech.yandex.ru/maps/jsapi/doc/2.1/dg/concepts/load-docpage/
    -

    -

    -
    - -
    -
    -
  • -
  • -
    -
    ". - __("Interactive", SHMAPPER) . - "
    -
    -

    - - -
    - ". - __("пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности.", SHMAPPER). - " -

    -

    - - -
    - ". - __("все сообщения будут добавляться в статусе «Черновик»", SHMAPPER). - " -
    - ". - __("ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки", SHMAPPER). - " -

    -

    - - -

    -
    -
    - -
    -
    -
  • -
  • -
    -
    ". - __("Protection", SHMAPPER) . - "
    -
    - - -

    -

    Google reCAPTCHA site key
    - -

    -

    Google reCAPTCHA secret key
    - - ". - sprintf(__("What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s.", SHMAPPER), "", "") . - " -
    - ". - __("Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha", SHMAPPER). - " -
    -
    -
    - -
    -
    -
  • -
  • -
    -
    ". - __("Vocabulary", SHMAPPER) . - "
    -
    -
    ". - __("Save personal data garantee", SHMAPPER) . - "
    - - -

    -

    ". - __("Successful send map request", SHMAPPER) . - "
    - - -

    -

    ". - __("Error send map request", SHMAPPER) . - "
    - -
    -
    - -
    -
    -
  • - - -
  • -
    -
    ". - __( "Coordinates", SHMAPPER ) . - "
    -
    -
    - -
    -

    - " . esc_html__( "Set default coordinates", SHMAPPER ) . " -

    - - - - - - - -
    -
    -
    -
  • -
  • -
    -
    ". - __("Wizzard", SHMAPPER) . - "
    -
    -
    " . __("Restart wizzard", SHMAPPER) . "
    -
    -
    -
    -
-
"; - } - static function add_wizzard() - { - if(!static::$options['wizzard']) return; - //update_option("shm_wizard_step", 0); - $step = (int)get_option("shm_wizard_step"); - $stepData = static::get_wizzard_lst()[$step]; - $i =0; - foreach(static::get_wizzard_lst() as $st) - { - $i++; - $active = $i == $step+1 ? "active" : ""; - $steps_line .= " -
$i
"; - } - - $title = $stepData['title']; - $text = $stepData['text']; - $html = " -
-
- -
-
- $steps_line -
-
- $title -
-
- $text -
- -
-
- -
- "; - echo $html; - } - static function get_wizzard_lst() - { - return [ - [ - "title" => "Приветствуем Вас в Мастере конфигурации Shmapper", - "text" => "Сначала необходимо указать общие настройки. Нажмите на кнопку чтобы перейти в нужный раздел", - "selector" => ' a[href="admin.php?page=shm_page"].toplevel_page_shm_page', - "parent_selector" => '#toplevel_page_shm_page', - "href" => "/wp-admin/admin.php?page=shm_page" - ], - [ - "title" => "Настройте Shmapper", - "text" => "Измените настройки, которые Вас не устраивают. Для подключения reCAPTCHA необходимо создать учётную запись на Google.com", - "selector" => ' a[href="admin.php?page=shm_page"].toplevel_page_shm_page', - "parent_selector" => '#toplevel_page_shm_page', - "href" => '/wp-admin/admin.php?page=shm_page', - ], - [ - "title" => "Создайте вашу первую карту", - "text" => "Нажмите кнопку \"Добавить карту\" в самом верху страницы", - "selector" => '#adminmenuwrap a[href=\"edit.php?post_type=shm_map\"]', - "alt_selector" => "body.post-type-shm_map .page-title-action" , - "href" => '/wp-admin/edit.php?post_type=shm_map', - ], - [ - "title" => "Новая карта", - "text" => "На карте выберите видимую область.

Создайте первый Маркер указав на нужное место карты правой кнопкой мыши.

Заполните поля и нажмите \"Создать\". ", - "selector" => '#adminmenuwrap a[href=\"edit.php?post_type=shm_map\"]', - "alt_selector" => 'body.post-type-shm_map #publish', - "parent_selector" => '#adminmenuwrap .toplevel_page_shm_page', - "href" => '/wp-admin/post-new.php?post_type=shm_map', - ], - [ - "title" => "Новая карта", - "text" => "Последовательно заполните предлаженные поля. В разделе \"Форма запроса\" создайте простейшую форму обратной связи, по которой Посетители смогут информировать Вас о предлагаемых Вам новых Маркерах. По окончании нажмите кнопку \"Опубликовать\"", - "selector" => '#adminmenuwrap a[href=\"edit.php?post_type=shm_map\"]', - "parent_selector" => '#adminmenuwrap .toplevel_page_shm_page', - "href" => '', - ], - ]; - } -} \ No newline at end of file diff --git a/class/ShMapperRequest.class.php b/class/ShMapperRequest.class.php deleted file mode 100644 index c20ed79..0000000 --- a/class/ShMapperRequest.class.php +++ /dev/null @@ -1,478 +0,0 @@ - __('Map Request', SHMAPPER), - 'singular_name' => __("Map Request", SHMAPPER), - 'add_new' => __("add Map Request", SHMAPPER), - 'add_new_item' => __("add Map Request", SHMAPPER), - 'edit_item' => __("edit Map Request", SHMAPPER), - 'new_item' => __("add Map Request", SHMAPPER), - 'all_items' => __("all Map Requests", SHMAPPER), - 'view_item' => __("view Map Request", SHMAPPER), - 'search_items' => __("search Map Request", SHMAPPER), - 'not_found' => __("Map Request not found", SHMAPPER), - 'not_found_in_trash' => __("no found Map Request in trash", SHMAPPER), - 'menu_name' => __("all Map Requests", SHMAPPER) - ); - $args = array( - 'labels' => $labels - ,'public' => true - ,'show_ui' => true - ,'has_archive' => true - ,'exclude_from_search' => false - ,'menu_position' => 19 - ,'menu_icon' => "dashicons-edit" - ,'show_in_menu' => "shm_page" - ,'show_in_rest' => true - ,'supports' => array( 'title', "editor", "thumbnail" ) - ,'capability_type' => 'page' - ); - register_post_type(SHM_REQUEST, $args); - } - - static function add_views_column( $columns ) - { - $columns = parent::add_views_column( $columns ); - unset($columns['contacts']); - unset($columns['location']); - unset($columns['longitude']); - unset($columns['notify_date']); - unset($columns['notify_user']); - unset($columns['author']); - $columns['thumb'] = "

"; - $new = []; - foreach($columns as $key => $val) - { - switch($key) - { - case "notified": - $new[$key] = __("Approving", SHMAPPER); - break; - case "session": - $new["session"] = __("Author"); - break; - case "latitude": - $new["location"] = __("GEO location", SHMAPPER); - break; - default: - $new[$key] = $val; - } - } - return $new; - } - static function fill_views_column($column_name, $post_id) - { - $obj = static::get_instance( $post_id ); - switch($column_name) - { - case "location": - echo __("Latitude", SHMAPPER).": " . $obj->get_meta("latitude") ."". - "
". - __("Longitude", SHMAPPER).": " . $obj->get_meta("longitude") ."". - "
". - __("Location", SHMAPPER).": " . $obj->get_meta("location") .""; - break; - case "session": - $contacts = $obj->get_meta("contacts"); - echo implode("
", $contacts); - break; - case "type": - $term_id = $obj->get_meta("type"); - $term = get_term($term_id, SHM_POINT_TYPE); - if($term_id) - { - $icon = ShMapPointType::get_icon($term , $obj->get_meta("notified")); - } - else - { - $map_id = $obj->get_meta("map"); - $diid = get_post_meta($map_id, "default_icon_id", true); - $icon = "
-
"; - } - echo $icon; - break; - case "notified": - echo $obj->get_notified_form(); - break; - case "thumb": - $img = get_the_post_thumbnail_url( $post_id, [75, 75] ); - echo "
" ; - break; - default: - parent::fill_views_column($column_name, $post_id); - break; - } - } - - static function view_admin_edit($obj) - { - - require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); - - $SMC_Object_type = SMC_Object_Type::get_instance(); - $bb = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; - $html = ''; - - foreach($bb as $key => $value) - { - if($key == 't' || $key == 'class' || $key == 'contacts' || $key == 'notify_user' ) continue; - $meta = get_post_meta( $obj->id, $key, true); - -// $$key = $meta; - - switch( $value['type'] ) - { - case "number": - $h = ""; - break; - case "boolean": - $h = ""; - break; - case "post": - $h = "$meta"; - break; - default: - $h = ""; - } - switch($key) - { - case "map": - $h = ShmMap::wp_dropdown([ - "selected" => $meta, - "class" => "sh-form", - "name" => "map", - "id" => "map", - "posts" => ShmMap::get_all(), - ]); - break; - case "type": - $h = ShMapPointType::get_ganre_swicher([ - 'selected' => $meta, - 'prefix' => "type", - 'col_width' => 3 - ], 'radio' ); - - - break; - case "description": - $h = ""; - break; - } - - $html .= "
-
".$value['name'] . "
-
- $h -
-
-
"; - } - - echo empty($html) ? '' : $html; - - } - static function save_admin_edit($obj) - { - require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); - $SMC_Object_type = SMC_Object_Type::get_instance(); - $_obj = $SMC_Object_type->object [static::get_type()]; - $arr = []; - foreach($_obj as $key=>$value) - { - if( $key == 't' || $key == 'class' || $key == 'contacts' || $key == 'notify_user' ) continue; - if($key == "notified" && $_POST[$key] != 1) - $arr[$key] = -1; - else - $arr[$key] = sanitize_text_field($_POST[$key]); - } - - return $arr; - } - static function insert($data) - { - $h = array(); - $map = ShmMap::get_instance((int)$data['id']); - $h['map_id'] = $map->get('post_title'); - $contents = array(); - $form = $map->get_meta('form_forms'); - $emails = array(); - $contacts = array(); - $title = $description = ''; - - if( $data['shm_form_name'] ) - { - $contacts[] = sanitize_text_field($data['shm_form_name']); - $author = sanitize_text_field($data['shm_form_name']); - } - if( $data['shm_form_phone'] ) - $contacts[] = sanitize_text_field($data['shm_form_phone']); - if( $data['shm_form_email']) - { - $contacts[] = sanitize_email($data['shm_form_email']); - $emails[] = sanitize_email($data['shm_form_email']); - } - foreach($form as $key => $val) - { - if($val['type'] == SHMAPPER_MARK_TYPE_ID) - continue; - if($val['type'] == SHMAPPER_EMAIL_TYPE_ID) - { - $emails[] = sanitize_email($data['elem'][$key]); - $contacts[] = sanitize_email($data['elem'][$key]); - } - if( - $val['type'] == SHMAPPER_PHONE_TYPE_ID || - $val['type'] == SHMAPPER_NAME_TYPE_ID - ) - $contacts[] = sanitize_text_field($data['elem'][$key]); - if($val['type'] == SHMAPPER_NAME_TYPE_ID) - $author = sanitize_text_field($data['elem'][$key]); - if($val['type'] == SHMAPPER_TEXTAREA_TYPE_ID) - { - $description .= $data['elem'][$key]; - } - if($key == 1) - { - //$description .= $data['elem'][1] . ", title type=". SHMAPPER_TITLE_TYPE_ID; - } - if($val['type'] == SHMAPPER_TITLE_TYPE_ID) - { - $title .= sanitize_text_field($data['elem'][$key]); - } - $tpp = ShmForm::get_type_by( "id", $val['type'] ); - if(SHMAPPER_IMAGE_TYPE_ID != $val['type'] ) - $contents[] = "".$tpp['title'].": ".sanitize_text_field($data['elem'][$key]).""; - } - $contents[] = "
" . sanitize_text_field($data['shm_point_loc']) . "
"; - $h['contents'] = implode("
", $contents); - $arr = [ - "post_type" => static::get_type(), - "post_name" => $title ? $title : $map->get("post_name"), - "post_title" => $title ? $title : $map->get("post_title"), - "post_content" => sanitize_text_field( $h['contents'] ), - "map" => (int)$data['id'], - "location" => sanitize_text_field($data['shm_point_loc']), - "latitude" => ( (int) ($data['shm_point_lat'] * 10000)) / 10000, - "longitude" => ( (int) ($data['shm_point_lon'] * 10000)) / 10000, - "type" => sanitize_text_field($data['shm_point_type']), - "contacts" => $contacts, - "description" => $description, - "author" => $author - ]; - $new_req = parent::insert($arr); - - //attach - require_once( ABSPATH . 'wp-admin/includes/image.php' ); - require_once( ABSPATH . 'wp-admin/includes/file.php' ); - require_once( ABSPATH . 'wp-admin/includes/media.php' ); - $overrides = array( 'test_form' => false ); - foreach( $_FILES as $file ) - { - $movefile = wp_handle_upload( $file, $overrides ); - if ( $movefile && empty($movefile['error']) ) - { - $filename = $movefile['file']; - $filetype = $movefile['type']; - $filetype = wp_check_filetype( basename( $filename ), null ); - $url = $movefile['url']; - $parent_post_id = $new_req->id; - $wp_upload_dir = wp_upload_dir(); - - $attachment = [ - 'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ), - 'post_mime_type' => $filetype['type'], - 'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ), - 'post_content' => '', - 'post_status' => 'inherit' - ]; - // Вставляем запись в базу данных. - $attach_id = wp_insert_attachment( $attachment, $filename, $parent_post_id ); - set_post_thumbnail($parent_post_id, $attach_id); - $h['contents'] .= "

- -

"; - } - else - { - //echo "Возможны атаки при загрузке файла!\n"; - } - - } - - - - //notify map owner - if($notify_owner = $map->get_meta("notify_owner")) - { - $author_id = $map->get("post_author"); - $user = get_user_by("id", $author_id); - $email = $user->get('user_email'); - $semail = get_bloginfo( "admin_email" ); - $suser = $author ? $author : __("Uknown User", SHMAPPER); - $site = get_bloginfo("name"); - $headers = array( - "From: $site <$semail>", - 'content-type: text/html', - ); - $is = wp_mail( - $email, - sprintf(__("<%s> Request to your Map from [%s] [%s]", SHMAPPER), $site, $suser, $map->get("post_title")) , - $h['contents']. "\n\n

" . - sprintf(__("You may see this %s", SHMAPPER), get_bloginfo("url") . "/wp-admin/edit.php?post_type=shm_request") - . "

", - $headers - ); - } - - return $new_req; - } - function get_notified_form() - { - if($notify = $this->get_meta("notified") > 0) - { - $user = get_user_by("id", $this->get_meta("notify_user")); - $html = "

" . $user->display_name . "

" . date("j.n.Y H:m", $this->get_meta("notify_date")); - } - else - { - $html = " -

-
-
". - __("Approve", SHMAPPER). - "
-
- -
-
-
"; - } - return $html; - } - function notify() - { - $this->update_meta("notify_user", get_current_user_id()); - $this->update_meta("notify_date", time()); - $this->update_meta("notified", true); - $point = ShmPoint::insert([ - "post_title" => (string)$this->get("post_title"), - "post_name" => (string)$this->get("post_name"), - "post_content" => (string)$this->get_meta("description"), - "latitude" => $this->get_meta("latitude"), - "longitude" => $this->get_meta("longitude"), - "location" => $this->get_meta("location"), - "type" => (int)$this->get_meta("type"), - "map_id" => (int)$this->get_meta("map"), - ]); - if($attach_id = get_post_thumbnail_id($this->id)) - { - set_post_thumbnail($point->id, (int)$attach_id); - } - return $point; - } - static function before_delete_post( $post_id ) - { - $obj = static::get_instance($post_id); - if($obj->get("post_type") !== static::get_type()) return; - if( has_post_thumbnail( $post_id ) ) - { - $attachment_id = get_post_thumbnail_id( $post_id ); - if ( - empty ( - get_posts([ - 'post_type' => 'any', - 'post_status' => 'any', - 'fields' => 'ids', - 'no_found_rows' => true, - 'posts_per_page' => -1, - 'meta_key' => '_thumbnail_id', - 'meta_value' => $attachment_id, - 'post__not_in' => array( $post_id ) - ]) - ) - ) - { - $attachment_urls = array( wp_get_attachment_url( $attachment_id ) ); - foreach ( get_intermediate_image_sizes() as $size ) - { - $intermediate = image_get_intermediate_size( $attachment_id, $size ); - if ( $intermediate ) - { - $attachment_urls[] = $intermediate['url']; - } - } - $used = array(); - foreach ( $attachment_urls as $attachment_url ) - { - $used = array_merge( - $used, - get_posts( [ - 'post_type' => 'any', - 'post_status' => 'any', - 'fields' => 'ids', - 'no_found_rows' => true, - 'posts_per_page' => -1, - 's' => $attachment_url, - 'post__not_in' => array( $post_id ) - ] ) - ); - } - if ( empty( $used ) ) - wp_delete_attachment( $attachment_id, true ); - } - } - return $post_id; - } - static function add_menu_notification() - { - global $submenu ; - $not_approved = get_posts([ - "numberposts" => -1, - "post_type" => static::get_type(), - "fields" => "ids", - "post_status" => "publish", - "meta_query" => [ - "relation" => "OR", - [ - "key" => "notified", - "compare" => "NOT EXISTS" - ], - [ - "key" => "notified", - "value" => -1, - "compare" => "=", - - ] - ] - ]); - //var_dump($submenu["shm_page"] ); - //wp_die(); - if(count($not_approved)) - { - foreach ( $submenu["shm_page"] as $key => $value ) - { - if ( $submenu["shm_page"][$key][2] == "edit.php?post_type=shm_request" ) - { - $submenu["shm_page"][$key][0] .= ' ' . count($not_approved) . ''; - return; - } - } - } - } -} \ No newline at end of file diff --git a/class/ShMapper_Assistants.class.php b/class/ShMapper_Assistants.class.php deleted file mode 100644 index dfa6cd6..0000000 --- a/class/ShMapper_Assistants.class.php +++ /dev/null @@ -1,99 +0,0 @@ -get('post_type') ) - { - if (isset($_GET['ADMIN_FILTER_FIELD']) && $_GET['ADMIN_FILTER_FIELD'] > 1) - { - $map = ShmMap::get_instance( $_GET['ADMIN_FILTER_FIELD'] ); - $query->query_vars['post__in'] = $map->get_points_args(); - } - } - } - - static function ba_admin_posts_filter_restrict_manage_posts() - { - global $wpdb, $post, $wp_list_table, $map_dropdown; - $current = isset($_GET['ADMIN_FILTER_FIELD'])? $_GET['ADMIN_FILTER_FIELD']:''; - if($post && $post->post_type == SHM_POINT) - { - $map_dropdown = $map_dropdown ? $map_dropdown : ShmMap::get_all(); - echo ShmMap::wp_dropdown([ - "posts" => $map_dropdown, - "name" => "ADMIN_FILTER_FIELD", - "selected" => $current, - "style" => "width:120px;", - "select_none" => __("all maps", SHMAPPER) - ]); - ?> - - - - -
- - '; - return $text.$html; - - } - static function get_recaptcha_form() - { - - } - static function shm_after_request_form2($text) - { - //SESSION if session-plugin active - if(!shm_is_session() || !$_SESSION) return $text; - $shm_reqs = $_SESSION['shm_reqs']; - if(!is_array($shm_reqs)) - $shm_reqs = [ ]; - $html = "
-
-
" . - __("Your requests to this Map ", SHMAPPER) . - "
-
-
". - $shm_reqs[0] . - "
-
"; - return $text.$html; - } -} \ No newline at end of file diff --git a/class/ShMapper_ajax.class.php b/class/ShMapper_ajax.class.php deleted file mode 100644 index 922f685..0000000 --- a/class/ShMapper_ajax.class.php +++ /dev/null @@ -1,521 +0,0 @@ - (string)$res->get("post_title"), - "post_name" => (string)$res->get("post_name"), - "post_content" => (string)$res->get_meta("description"), - "latitude" => $res->get_meta("latitude"), - "longitude" => $res->get_meta("longitude"), - "location" => $res->get_meta("location"), - "type" => (int)$res->get_meta("type"), - "map_id" => (int)$res->get_meta("map"), - ]); - - if($attach_id = get_post_thumbnail_id($res->id)) { - set_post_thumbnail($point->id, (int)$attach_id); - } - - SMC_Post::delete($res->id); - } - - return $res; - } - - static function shm_ajax3_submit() - { - /**/ - $data = $_POST; - $data['elem'] = explode(",", $data['elem']); - foreach($data['elem'] as $i => $v) { - $data['elem'][$i] = str_replace("{{shmapper_comma}}", ",", $v); - } - - if( ShMapper::$options['shm_settings_captcha'] ) - { - require_once( SHM_REAL_PATH . "assets/recaptcha-php/recaptcha.class.php" ); - $reCaptcha = new ReCaptcha( ShMapper::$options['shm_captcha_secretKey'] ); - $response = $reCaptcha->verifyResponse( - $_SERVER["REMOTE_ADDR"], - $data['cap'] - ); - switch( $response->success ) - { - case(true): - $res = static::insert_marker($data); - $msg = ShMapper::$options['shm_succ_request_text']; - break; - default: - $msg = ShMapper::$options['shm_error_request_text'] . " : " . $response->errorCodes->msg; - break; - } - $grec = ShMapper_Assistants::shm_after_request_form(""); - } - else - { - $res = static::insert_marker($data); - $msg = ShMapper::$options['shm_succ_request_text']; - } - - //load image - if( $res AND $res->id > 1 ) { - - } - $form = ShmForm::form( get_post_meta( $data['id'], "form_forms", true ), ShmMap::get_instance($data['id']) ); - $answer = [ - "reload" => ShMapper::$options['shm_reload'] ? 1 : 0, - 'res' => $res, - 'data' => $data, - "msg" => $msg, - //"form" => $form, - "grec" => $grec, - //"attach_id" => $attach_id, - 'grecaptcha' => ShMapper::$options['shm_settings_captcha'] - ]; - wp_die( json_encode( $answer ) ); - } - static function ajax_submit() - { - try - { - static::myajax_submit(); - } - catch(Error $ex) - { - $d = [ - "Error", - array( - 'msg' => $ex->getMessage (), - 'log' => $ex->getTrace () - ) - ]; - $d_obj = json_encode( $d ); - print $d_obj; - wp_die(); - } - wp_die(); - } - static function myajax_submit() - { - global $wpdb; - $nonce = $_POST['nonce']; - if ( !wp_verify_nonce( $nonce, 'myajax-nonce' ) ) die ( $_POST['params'][0] ); - - $params = $_POST['params']; - $action = sanitize_text_field($params[0]); - $d = array( $action, array() ); - switch($action) - { - case "test": - $map_id = sanitize_text_field($params[1]); - $num = sanitize_text_field($params[2]); - $d = array( - $action, - array( - "text" => 'testing', - ) - ); - break; - case "shm_doubled": - $map_id = sanitize_text_field($params[1]); - $map = ShmMap::get_instance( $map_id ); - $new_map = $map->doubled(); - $d = array( - $action, - array( - "text" => 'shm_doubled', - ) - ); - break; - case "shm_wnext": - $step = (int)get_option("shm_wizard_step"); - $step++; - if($step < count(ShMapper::get_wizzard_lst())) - { - $stepData = ShMapper::get_wizzard_lst()[$step]; - $messge = __("Next step", SHMAPPER); - } - else - { - ShMapper::$options["wizzard"] = 0; - ShMapper::update_options(); - $step = 0; - $messge = __("Congratulation! That's all!", SHMAPPER); - } - update_option("shm_wizard_step", $step); - $d = array( - $action, - array( - "href" => $stepData['href'], - "msg" => $messge - ) - ); - break; - case "shm_wclose": - ShMapper::$options["wizzard"] = 0; - ShMapper::update_options(); - update_option("shm_wizard_step", 0); - $d = array( - $action, - array( - "msg" => __("Wizzard closed", SHMAPPER) , - ) - ); - break; - case "shm_wrestart": - ShMapper::$options["wizzard"] = 1; - ShMapper::update_options(); - update_option("shm_wizard_step", 0); - $d = array( - $action, - array( - "msg" => __("Wizzard restarted", SHMAPPER), - ) - ); - break; - case "shm_notify_req": - $req_id = sanitize_text_field($params[1]); - $req = ShMapperRequest::get_instance($req_id); - $new_id = $req->notify(); - $d = array( - $action, - array( - "text" => $req->get_notified_form(), - "post_id" => $req_id, - "newpointid"=> $new_id, - "msg" => __("Approve succesfully and insert new Map marker", SHMAPPER) - ) - ); - break; - case "shm_trash_req": - $req_id = sanitize_text_field($params[1]); - $req = ShMapperRequest::get_instance($req_id); - wp_trash_post( $req_id ); - $d = array( - $action, - array( - "post_id" => $req_id, - "msg" => __("Request put to Trash", SHMAPPER) - ) - ); - break; - case "shm_add_before": - $num = sanitize_text_field($params[1]); - $post_id = sanitize_text_field($params[2]); - $type_id = sanitize_text_field($params[3]); - $d = array( - $action, - array( - "text" => ShmForm::get_admin_element($num,["type" => $type_id]), - "order" => $num, - "type_id" => $type_id - ) - ); - break; - case "shm_add_after": - $num = sanitize_text_field($params[1]); - $post_id = sanitize_text_field($params[2]); - $type_id = sanitize_text_field($params[3]); - $d = array( - $action, - array( - "text" => ShmForm::get_admin_element($num,["type" => $type_id]), - "order" => $num, - "type_id" => $type_id - ) - ); - break; - case "shm_csv": - $map_id = sanitize_text_field($params[1]); - $map = ShmMap::get_instance($map_id); - $link = $map->get_csv(); - $d = array( - $action, - [ - "text" => $link, - "name" => "map" //$map->get("post_title") - ] - ); - break; - case "shm_set_req": - $data = $params[1]; - if( ShMapper::$options['shm_settings_captcha'] ) - { - require_once( SHM_REAL_PATH . "assets/recaptcha-php/recaptcha.class.php" ); - $reCaptcha = new ReCaptcha( ShMapper::$options['shm_captcha_secretKey'] ); - $response = $reCaptcha->verifyResponse( - $_SERVER["REMOTE_ADDR"], - sanitize_text_field($data['cap']) - ); - switch( $response->success ) - { - case(true): - $res = ShMapperRequest::insert($data); - $msg = ShMapper::$options['shm_succ_request_text']; - break; - default: - $msg = ShMapper::$options['shm_error_request_text'] . " : " . $response->errorCodes->msg; - break; - } - $grec = ShMapper_Assistants::shm_after_request_form(""); - /**/ - //$msg = "msg: ". $data['cap']; - } - else - { - $res = ShMapperRequest::insert($data); - $msg = ShMapper::$options['shm_succ_request_text']; - } - - $d = array( - $action, - array( - "msg" => $msg, - "res" => $res, - //"grec" => $grec, - //'grecaptcha' => ShMapper::$options['shm_settings_captcha'] - ) - ); - break; - case "shm_delete_map_hndl": - $data = $params[1]; - $id = sanitize_text_field($data["id"]); - $map = ShmMap::get_instance( $id ); - $res = $map->shm_delete_map_hndl($data); - $d = array( - $action, - array( - "msg" => $res['message'], - "res" => $res, - "data" => $data, - "id" => $id - ) - ); - break; - case "shm_delete_map": - $id = sanitize_text_field($params[1]); - $href = sanitize_text_field($params[2]); - $map = ShmMap::get_instance( $id ); - $d = array( - $action, - array( - "text" => [ - "title" => sprintf(__("Are you want delete %s?", SHMAPPER), $map->get("post_title") ), - "content" => $map->get_delete_form( $href ), - "send" => __("Delete"), - "sendHandler" => "shm_delete_map_hand", - "sendArgs" => $id - ], - ) - ); - break; - case "shm_add_point_prepaire": - $map_id = $params[1][0] = sanitize_text_field($params[1][0]); - $x = $params[1][1] = sanitize_text_field($params[1][1]); - $y = $params[1][2] = sanitize_text_field($params[1][2]); - $ad = $params[1][3] = sanitize_text_field($params[1][3]); - $d = array( - $action, - array( - "text" => [ - 'title' => __("add Map Point", SHMAPPER), - "content" => ShmPoint::get_insert_form( $params[1] ), - "send" => __("Create"), - "sendHandler" => "create_point" - ], - ) - ); - break; - case "shm_create_map_point": - $data = $params[1]; - $point = ShmPoint::insert($data); - $type_term_id = sanitize_text_field($data['type']); - $type = get_term($type_term_id, SHM_POINT_TYPE); - $pointdata = [ - "post_title" => sanitize_text_field($data["post_title"]), - "post_content" => $data["post_content"], - "latitude" => sanitize_text_field($data["latitude"]), - "longitude" => sanitize_text_field($data["longitude"]), - "location" => sanitize_text_field($data["location"]), - "color" => get_term_meta($type->term_id, "color", true), - "height" => get_term_meta($type->term_id, "height", true), - "icon" => ShMapPointType::get_icon_src($type->term_id)[0], - "term_id" => $type_term_id, - "mapid" => "ShmMap".sanitize_text_field($data['map_id']).sanitize_text_field($data['map_id']) - ]; - $d = array( - $action, - array( - "id" => $point->id, - "data" => $pointdata, - "msg" => 'success', - ) - ); - break; - case "shm_voc": - $voc = sanitize_text_field($params[1]); - ShMapper::$options[$voc] = sanitize_text_field($params[2]); - ShMapper::update_options(); - $d = array( - $action, - array( - "msg" => __("Change Vocabulaty: ", SHMAPPER) . $voc.": ".ShMapper::$options[$voc], - ) - ); - break; - case "map_api": - ShMapper::$options['map_api'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - "msg" => sanitize_text_field($params[1]) == 1 ? "Yandex Map API" : "OpenStreet Map API", - ) - ); - break; - case "shm_yandex_maps_api_key": - ShMapper::$options['shm_yandex_maps_api_key'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - "msg" => __( "Yandex.Maps API key Saved" , SHMAPPER), - "hide_dang" => sanitize_text_field($params[1]) != "" && ShMapper::$options['shm_yandex_maps_api_key'] != "" ? 1 : 0 - ) - ); - break; - case "shm_default_longitude": - ShMapper::$options['shm_default_longitude'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - "msg" => __( "New coordinates saved" , SHMAPPER ), - ), - ); - break; - case "shm_default_latitude": - ShMapper::$options['shm_default_latitude'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - //"msg" => __( "New coordinates saved" , SHMAPPER ), - ), - ); - break; - case "shm_default_zoom": - ShMapper::$options['shm_default_zoom'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - //"msg" => __( "New coordinates saved" , SHMAPPER ), - ), - ); - break; - case "shm_map_is_crowdsourced": - ShMapper::$options['shm_map_is_crowdsourced'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - "msg" => __(sanitize_text_field($params[1]) ? "Users can add Placemarks" : "Users don't can add Placemarks", SHMAPPER), - ) - ); - break; - case "shm_map_marker_premoderation": - ShMapper::$options['shm_map_marker_premoderation'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - "msg" => __(sanitize_text_field($params[1]) ? "Pre-moderation on" : "Pre-moderation off", SHMAPPER), - ) - ); - break; - case "shm_reload": - ShMapper::$options['shm_reload'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - "msg" => __(sanitize_text_field($params[1]) ? "Reload mode" : "Not relaod mode", SHMAPPER), - ) - ); - break; - case "shm_settings_captcha": - ShMapper::$options['shm_settings_captcha'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - "msg" => __(sanitize_text_field($params[1]) ? "captha added" : "captcha removed", SHMAPPER), - ) - ); - break; - case "shm_captcha_siteKey": - ShMapper::$options['shm_captcha_siteKey'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - "msg" => __( "Set key" , SHMAPPER), - "hide_dang" => sanitize_text_field($params[1]) != "" && ShMapper::$options['shm_captcha_secretKey'] != "" ? 1 : 0 - ) - ); - break; - case "shm_captcha_secretKey": - ShMapper::$options['shm_captcha_secretKey'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - "msg" => __( "Set key" , SHMAPPER), - "hide_dang" => sanitize_text_field($params[1]) != "" && ShMapper::$options['shm_captcha_siteKey'] != "" ? 1 : 0 - ) - ); - break; - default: - do_action("shm_ajax_submit", $params); - break; - } - $d_obj = json_encode(apply_filters("shm_ajax_data", $d, $params)); - print $d_obj; - wp_die(); - } -} \ No newline at end of file diff --git a/class/ShmAdminPage.class.php b/class/ShmAdminPage.class.php deleted file mode 100644 index 317f1fc..0000000 --- a/class/ShmAdminPage.class.php +++ /dev/null @@ -1,36 +0,0 @@ -parent_base == 'shm_page') { - return $this->get_admin_footer('', $old_footer_html); - } - - return $old_footer_html; - } - - function get_admin_footer($footer_class='', $old_footer_html='') { - ob_start(); - ?> - - - - init_hooks(); \ No newline at end of file diff --git a/class/ShmForm.class.php b/class/ShmForm.class.php deleted file mode 100644 index 72c08c5..0000000 --- a/class/ShmForm.class.php +++ /dev/null @@ -1,596 +0,0 @@ - SHMAPPER_MARK_TYPE_ID, - "require" => 1, - "title" => __("Place the mark to Map", SHMAPPER), - "placemarks" => [], - "placeholde" => "", - "description" => "", - ], - [ - "type" => SHMAPPER_TITLE_TYPE_ID, - "require" => 1, - "title" => __("Put a title", SHMAPPER), - "placeholde" => "", - "description" => "", - ], - /*[ - "type" => SHMAPPER_NAME_TYPE_ID, - "require" => 1, - "title" => __("How call You?", SHMAPPER), - "placeholde" => "", - "description" => "", - ], - [ - "type" => SHMAPPER_EMAIL_TYPE_ID, - "require" => 1, - "title" => __("Send Your e-mail please", SHMAPPER), - "placeholde" => "", - "description" => "", - ],*/ - [ - "type" => SHMAPPER_TEXTAREA_TYPE_ID, - "require" => 1, - "title" => __("Whrite description", SHMAPPER), - "placeholde" => "", - "description" => "", - ], - - ]; - } - static function getTypes() - { - return [ - [ - "id" => SHMAPPER_TITLE_TYPE_ID, //9 - "name" => "title", - "title" => __("input title", SHMAPPER), - 'fields' => ['title', 'placeholder', 'description'] - ],/**/ - [ - "id" => SHMAPPER_PLAIN_TEXT_TYPE_ID, //1 - "name" => "text", - "title" => __("input text", SHMAPPER), - 'fields' => ['title', 'placeholder', 'description'] - ], - /*[ - "id" => SHMAPPER_NAME_TYPE_ID, //2 - "name" => "name", - "title" => __("User name", SHMAPPER), - 'fields' => ['title', 'placeholder', 'description'] - ], - [ - "id" => SHMAPPER_PLAIN_NUMBER_TYPE_ID, //3 - "name" => "number", - "title" => __("input number", SHMAPPER), - 'fields' => ['title', 'placeholder', 'description'] - ], - [ - "id" => SHMAPPER_EMAIL_TYPE_ID, //4 - "name" => "email", - "title" => __("input email", SHMAPPER), - 'fields' => ['title', 'placeholder', 'description' ] - ], - [ - "id" => SHMAPPER_PHONE_TYPE_ID, //5 - "name" => "phone", - "title" => __("input phone", SHMAPPER), - 'fields' => ['title', 'placeholder', 'description' ] - ],*/ - [ - "id" => SHMAPPER_TEXTAREA_TYPE_ID, //6 - "name" => "textarea", - "title" => __("textarea", SHMAPPER), - 'fields' => ['title', 'placeholder', 'description' ] - ], - [ - "id" => SHMAPPER_IMAGE_TYPE_ID, //7 - "name" => "file", - "title" => __("input file", SHMAPPER), - 'fields' => ['title', 'placeholder', 'description'] - ], - [ - "id" => SHMAPPER_MARK_TYPE_ID, //8 - "name" => "placemark", - "title" => __("enabled Map markers", SHMAPPER), - 'fields' => ['title', 'placemarks', 'description'] - ] - ]; - } - static function get_type_by ($field="id", $id = 1) - { - foreach(static::getTypes() as $type) - { - if($type[$field] == $id) - return $type; - } - return false; - } - static function wp_dropdown($params=-1) - { - if(!is_array($params)) - $params = ['id' => 'shmform', 'name' => 'shmform', "class" => "sh-form"]; - $selector = $params['selector'] ? " selector='" . $params['selector'] . "' " : " s='ee' "; - $html = ""; - return $html; - } - - static function wp_params_dropdown( $meta, $id, $selected = -1 ) - { - $html = ""; - return $html; - } - - - static function wp_params_radio( $params=-1, $id, $post_id=1 ) - { - $params = is_array($params) ? $params : []; - $html = " -
-
-
-
X
-
"; - foreach(static::getTypes() as $m) - { - $html .= " -
- - -
-
"; - } - $html .= " -
-
"; - return $html; - } - - static function get_admin_element( $id, $data=-1 ) - { - $data = !is_array($data) ? [ "require"=>1, "selected" => 0 ] : $data; - $type = static::get_type_by("id", $data['type']); - $fields = $type['fields']; - $mark_emable = false; - return " -
  • - -
    -
    - " . __("Type of element", SHMAPPER) . " -
    " . - static::wp_params_dropdown( static::getTypes(), $id, $type['id'] ) . - "
    -
    -
    - -
    - -
    - -
    -
    - ". - __("Placeholder", SHMAPPER) . - " - -
    -
    - ". - __("Placemark types", SHMAPPER) . - "". - ShMapPointType::get_ganre_swicher([ - "prefix" => "ganre$id". MD5(rand(0,100000000)), - "id" => $id, - "name" => "form_forms[$id][placemarks]", - "selected" => empty($data['placemarks']) ? '' : $data['placemarks'], - "col_width" => 6 - ]). - "
    -
    - ". - __("Description", SHMAPPER) . - " - -
    -
    -
    -
    - - - -
    -
    -
    - -
    -
  • "; - } - static function get_admin_element1( $id, $data=-1 ) - { - $data = !is_array($data) ? [ "require"=>1, "selected" => 0 ] : $data; - $type = static::get_type_by("id", $data['type']); - $fields = $type['fields']; - return " -
  • -
    -
    -

    " . __("Type of element", SHMAPPER) . "

    -

    " . $type['title'] . "

    -
    - -
    -
    -
    - - -
    -
    - -
    -
    -
    -
    -
    - ". - __("Placeholder", SHMAPPER) . - " - -
    -
    - ". - __("Placemark types", SHMAPPER) . - "". - ShMapPointType::get_ganre_swicher([ - "prefix" => "ganre$id". MD5(rand(0,100000000)), - "id" => $id, - "name" => "form_forms[$id][placemarks]", - "selected" => $data['placemarks'], - "col_width" => 6 - ]). - "
    -
    - ". - __("Description", SHMAPPER) . - " - -
    -
    - -
    -
  • "; - } - static function get_admin_element2( $id, $data=-1 ) - { - $data = !is_array($data) ?["enable"=>1, "require"=>1, "selected" => 0] : $data; - $type = static::get_type_by("id", $data['type']); - $fields = $type['fields']; - //ob_start(); - //var_dump($data); - //$v = ob_get_contents(); - //ob_end_clean(); - return " -
  • -
    -
    - - -

    - - -
    -
    - -
    - ". - __("Type of element", SHMAPPER) . - "". - ShmForm::wp_dropdown([ - "name" => "form_forms[$id][type]", - "id" => "type$id", - "class" => "sh-form", - "selected" => $data['type'], - "selector" => "type" - ]) . - " -
    -
    -
    -
    - ". - __("Placeholder", SHMAPPER) . - " - -
    -
    - ". - __("Placemark types", SHMAPPER) . - "". - ShMapPointType::get_ganre_swicher([ - "prefix" => "ganre$id", - "id" => $id, - "name" => "form_forms[$id][placemarks]", - "selected" => $data['placemarks'] - ]). - "
    -
    - ". - __("Description", SHMAPPER) . - " - -
    - -
    -
    -
  • "; - } - static function form($data, $map ) - { - $default_icon_id = $map->get_meta("default_icon_id"); - $is_personal_data = $map->get_meta("is_personal_data"); - $is_name_iclude = $map->get_meta("is_name_iclude"); - $personal_name = $map->get_meta("personal_name"); - $is_name_required = $map->get_meta("is_name_required"); - $is_email_iclude = $map->get_meta("is_email_iclude"); - $personal_email = $map->get_meta("personal_email"); - $is_email_required = $map->get_meta("is_email_required"); - $is_phone_iclude = $map->get_meta("is_phone_iclude"); - $personal_phone = $map->get_meta("personal_phone"); - $is_phone_required = $map->get_meta("is_phone_required"); - $def_mark = ""; - - - $html = apply_filters("shm_before_request_form", ""); - $html .= ""; - $html1 = apply_filters("shm_start_request_form", ""); - $i = 0; - foreach($data as $element) - { - if(!is_array($element)) continue; - $require = isset($element['require']) && $element['require'] == 1 ? " required " : ""; - $html1 .= "
    "; - $html1 .= $element['title'] ? "
    " . $element['title'] . "
    " : ""; - $type = static::get_type_by("id", $element['type']); - $data_types = " data-types='".implode( ",", $type['fields'] )."' "; - switch($element['type']) - { - case SHMAPPER_PLAIN_TEXT_TYPE_ID: - $html1 .= ""; - break; - case SHMAPPER_NAME_TYPE_ID: - $html1 .= ""; - break; - case SHMAPPER_PLAIN_NUMBER_TYPE_ID: - $html1 .= ""; - break; - case SHMAPPER_EMAIL_TYPE_ID: - $html1 .= ""; - break; - case SHMAPPER_PHONE_TYPE_ID: - $html1 .= ""; - break; - case SHMAPPER_TEXTAREA_TYPE_ID: - $html1 .= ""; - break; - case SHMAPPER_IMAGE_TYPE_ID: - $file_map = " " . - ($element['placeholder'] ? $element['placeholder'] : __("Сhoose files", SHMAPPER)) ; - $html1 .= " -
    - - -
    "; - break; - case SHMAPPER_MARK_TYPE_ID: - $mark_emable = true; - $terms = explode(",", $element["placemarks"]); - $icons = ""; - if(count($terms)) - { - foreach($terms as $term_id) - { - $clr = get_term_meta($term_id, "color", true); - $icon = ShMapPointType::get_icon_src($term_id)[0]; - - if($icon) - { - $icon_width = get_term_meta( $term_id, "width", true ); - $icon_height = get_term_meta( $term_id, "height", true ); - $icons .= " -
    -
    "; - } - else - { - $diid = $map->get_meta("default_icon_id"); - $icon = wp_get_attachment_image_src($diid, [60, 60])[0]; - if(!$icon) { - if(ShMapper::$options['map_api'] == 2) { - $icon = "https://unpkg.com/leaflet@1.3.4/dist/images/marker-icon.png"; // 25 x 41 - $icon_width = 25; - $icon_height = 41; - } - else { - $icon = SHM_URLPATH . 'assets/img/ym_default.png'; // 34 x 41 - $icon_width = 34; - $icon_height = 41; - } - } - else { - $icon_width = ""; - $icon_height = ""; - } - - $icons .= !$icon ? " -
    -
    -
    " : - "
    "; - } - } - $html1 .= " -
    $icons
    - - - - - "; - $element['description'] .= __("Drag choosed icon and place it to map or click it and enter exact address.", SHMAPPER); - } - break; - default: - $html1 .= "";break; - } - $req = $require ? "".__("This required field", SHMAPPER)."" : "$require"; - $html1 .= $element['description'] ? "
    " . $req . $element['description'] ."
    " : "
    $req
    "; - - $html1 .= "
    "; - $i++; - } - if(!$mark_emable) - { - $diid = $map->get_meta("default_icon_id"); - $icon = wp_get_attachment_image_src($diid, [60, 60])[0]; - - if(!$icon) - $icon = ShMapper::$options['map_api'] == 2 ? "https://unpkg.com/leaflet@1.3.4/dist/images/marker-icon.png" - : SHM_URLPATH . 'assets/img/ym_default.png'; - $desc = " -
    -
    " . - __("Drag icon and place it to map.", SHMAPPER) . - "
    -
    - ".__("This required field", SHMAPPER)." -
    -
    "; - $def_mark = true ? " -
    $desc -
    -
    -
    -
    " - : - "
    $desc -
    -
    -
    -
    -
    -
    - "; - - $def_mark .= " - - - - "; - } - if( $is_personal_data ) - { - $require = $is_name_required ? " required " : ""; - $html1 .= $is_name_iclude ? " -
    -
    " . __("Your name",SHMAPPER) . "
    - -
    " : ""; - $html1 .= $is_name_required ? "
    - ".__("This required field", SHMAPPER)." -
    " : ""; - - - $require = $is_email_required ? " required " : ""; - $html1 .= $is_email_iclude ? " -
    -
    " . __("Your e-mail",SHMAPPER) . "
    - -
    " : ""; - $html1 .= $is_email_required ? "
    - ".__("This required field", SHMAPPER)." -
    " : ""; - - $require = $is_phone_required ? " required " : ""; - $html1 .= $is_phone_iclude ? " -
    -
    " . __("Your phone",SHMAPPER) . "
    - -
    " : ""; - $html1 .= $is_phone_required ? "
    - ".__("This required field", SHMAPPER)." -
    " : ""; - - $att = " -
    -
    - ". - ShMapper::$options['shm_personal_text'] . - "
    -
    "; - } - $html1 .= apply_filters("shm_end_request_form", ""); - $html = $def_mark . $html . $html1 . (empty($att) ? '' : $att) . apply_filters("shm_after_request_form", ""); - return $html ; - } - - - -} \ No newline at end of file diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php deleted file mode 100644 index 63ec52e..0000000 --- a/class/ShmMap.class.php +++ /dev/null @@ -1,856 +0,0 @@ - [ - "map", - "hybrid", - "satellite", - ], - "2" => [ - "OpenStreetMap", - "Topographic", - "Streets", - "Gray", - "DarkGray", - "Imagery", - "Physical" - ] - ]; - } - static function init() - { - $typee = static::get_type(); - add_action('init', array(__CLASS__, 'add_class'), 14 ); - add_action('admin_menu', array(__CLASS__, 'my_form_fields'), 11); - add_action('admin_menu', array(__CLASS__, 'shortcode_fields'), 11); - add_action('admin_menu', array(__CLASS__, 'admin_redirect'), 11); - add_filter("the_content", array(__CLASS__, "the_content")); - add_filter( 'post_row_actions', [__CLASS__, 'post_row_actions'], 10, 2 ); - add_action("smc_before_doubled_post", [__CLASS__, "smc_before_doubled_post"], 10, 2); - add_action("smc_after_doubled_post", [__CLASS__, "smc_after_doubled_post"], 10, 2); - add_filter("bulk_actions-edit-{$typee}",[__CLASS__, "register_my_bulk_actions"]); - parent::init(); - } - static function get_osm_types() - { - return [ - "Topographic", - "Streets", - "NationalGeographic", - "Oceans", - "Gray", - "DarkGray", - "StreetsRelief", - "Imagery", - "ImageryClarity", - "ImageryFirefly", - "Physical" - ]; - } - static function register_my_bulk_actions( $bulk_actions ) - { - unset($bulk_actions['trash']); - $bulk_actions = parent::register_my_bulk_actions( $bulk_actions ); - return $bulk_actions; - } - static function get_type() - { - return SHM_MAP; - } - static function get_extra_fields_title() - { - return __("Step 1. Set up your map.", SHMAPPER); - } - static function add_class() - { - $labels = array( - 'name' => __('Map', SHMAPPER), - 'singular_name' => __("Map", SHMAPPER), - 'add_new' => __("add Map", SHMAPPER), - 'add_new_item' => __("add Map", SHMAPPER), - 'edit_item' => __("edit Map", SHMAPPER), - 'new_item' => __("add Map", SHMAPPER), - 'all_items' => __("all Maps", SHMAPPER), - 'view_item' => __("view Map", SHMAPPER), - 'search_items' => __("search Map", SHMAPPER), - 'not_found' => __("Map not found", SHMAPPER), - 'not_found_in_trash' => __("no found Map in trash", SHMAPPER), - 'menu_name' => __("all Maps", SHMAPPER) - ); - $args = array( - 'labels' => $labels - ,'public' => true - ,'show_ui' => true // показывать интерфейс в админке - ,'has_archive' => true - ,'exclude_from_search' => false - ,'menu_position' => 17 - ,'menu_icon' => "dashicons-location-alt" - ,'show_in_menu' => "shm_page" - ,'show_in_rest' => true - ,'supports' => array( 'title', 'author' ) - ,'capability_type' => 'post' - ); - register_post_type(SHM_MAP, $args); - } - - static function add_views_column( $columns ) - { - $_columns["cb"] = " "; - $_columns['ids'] = __("ID", SHMAPPER ); - $_columns['title'] = __("Title" ); - $_columns['is_csv'] = " - - "; - $_columns['is_legend'] = " - - "; - $_columns['is_form'] = " - - "; - $_columns['notify_owner'] = " - - "; - $_columns['shortcodes'] = __("shortcodes", SHMAPPER); - $_columns['placemarks'] = __("Map markers", SHMAPPER); - $_columns['author'] = __("Author"); - return $_columns; - } - - static function fill_views_column($column_name, $post_id) - { - $obj = static::get_instance($post_id); - switch($column_name) - { - case "ids": - echo $post_id; - break; - case "placemarks": - echo "
    " . $obj->get_point_count() . "
    "; - break; - case "shortcodes": - $html = " -
    -
    ". - __("include all (map and request form)", SHMAPPER) . - "
    -
    - -
    -
    -
    -
    ". - __("only map", SHMAPPER) . - "
    -
    - -
    -
    - -
    -
    ". - __("only request form", SHMAPPER) . - "
    -
    - -
    -
    - "; - echo $html; - break; - default: - parent::fill_views_column($column_name, $post_id); - } - } - - static function admin_redirect() - { - global $pagenow, $submenu ; - if( !empty($_GET["page"]) && "shm_page" == $_GET["page"] && "admin.php" === $pagenow) - { - wp_redirect( admin_url( '/admin.php?page=shm_settings_page' ) ); - } - } - static function shortcode_fields() - { - add_meta_box( 'shortcode_fields', __('Including Map to post', SHMAPPER), [__CLASS__, 'shortcode_fields_box_func'], static::get_type(), 'side', 'low' ); - } - - static function shortcode_fields_box_func( $post ) - { - $lt = static::get_instance( $post ); - echo static::shortcode_fields_edit($lt); - } - static function shortcode_fields_edit($obj) - { - $html = " -

    " . - __("You can insert a card into a post or page by copying this shortcode.", SHMAPPER). - "

    - "; - - return $html; - } - - static function my_extra_fields() - { - add_meta_box( 'map_fields', static::get_extra_fields_title(), [__CLASS__, 'extra_fields_box_func'], static::get_type(), 'normal', 'high' ); - - } - static function my_form_fields() - { - add_meta_box( 'form_fields', __('Step 2. May anover Users add information for Map.', SHMAPPER), [__CLASS__, 'form_fields_box_func'], static::get_type(), 'normal', 'high' ); - - } - - static function view_admin_edit($obj) - { - require_once( SHM_REAL_PATH . "tpl/input_file_form.php" ); - $height = $obj->get_meta("height") ? $obj->get_meta("height") : 400; - $latitude = $obj->get_meta("latitude"); - $longitude = $obj->get_meta("longitude"); - $zoom = $obj->get_meta("zoom"); - $width = $obj->get_meta("width"); - $is_search = $obj->get_meta("is_search"); - $is_zoomer = $obj->get_meta("is_zoomer"); - $is_layer_switcher = $obj->get_meta("is_layer_switcher"); - $is_fullscreen = $obj->get_meta("is_fullscreen"); - $is_csv = $obj->get_meta("is_csv"); - $is_legend = $obj->get_meta("is_legend"); - $is_filtered = $obj->get_meta("is_filtered"); - $default_icon_id = $obj->get_meta("default_icon_id"); - $is_clustered = $obj->get_meta("is_clustered"); - $is_lock = $obj->get_meta("is_lock"); - $form_title = $obj->get_meta("form_title"); - $html = " -
    -

    ". __("1.1. Pan map and choose zoom", SHMAPPER). "

    -
    ". - $obj->draw( [ 'height'=>$height, 'id' => $obj->id ] ). - "
    -
    - - - -
    -
    -
    -
    -

    ". __("1.2. Set size for map's div (per pixels)", SHMAPPER). "

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    ". __("1.3. Include interface", SHMAPPER). "

    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -

    ". __("Choose layers", SHMAPPER). "

    -
    ". - static::get_type_radio([ - "id" => "map_type", - "name" => "map_type", - "selected" => $obj->get_meta("map_type"), - ]). - "
    -
    - -
    -
    -
    -
    -

    ". __("1.4. May User download data in *.csv?", SHMAPPER). "

    -
    - -
    -
    -
    -
    -
    -
    -

    ". __("1.5. Will the legend be displayed?", SHMAPPER). "

    -
    - -
    -
    -
    -
    -
    -
    -

    ". __("1.6. Will Marker type filter be displayed?", SHMAPPER). "

    -
    - -
    -
    -
    -
    -
    -
    -

    ". __("1.7. Default Marker icon", SHMAPPER). "

    -
    ". - get_input_file_form2( "" , $default_icon_id, "default_icon_id"). - "
    -

    ". - __("Recommended size is 64х64 px, format is .png", SHMAPPER) . - "

    -
    "; - - return $html; - } - static function form_fields_box_func( $post ) - { - $lt = static::get_instance( $post ); - echo static::view_form_fields_edit($lt); - } - static function view_form_fields_edit($obj) - { - $is_form = $obj->get_meta("is_form") ? 1 : 0; - $is_filtered = $obj->get_meta("is_filtered") ? 1 : 0; - $form_title = $obj->get_meta("form_title"); - $notify_owner = $obj->get_meta("notify_owner") ? 1 : 0; - $form_forms = $obj->get_meta("form_forms"); - $is_personal_data = $obj->get_meta("is_personal_data"); - $is_name_iclude = $obj->get_meta("is_name_iclude"); - $personal_name = $obj->get_meta("personal_name"); - $is_name_required = $obj->get_meta("is_name_required"); - $is_email_iclude = $obj->get_meta("is_email_iclude"); - $personal_email = $obj->get_meta("personal_email"); - $is_email_required = $obj->get_meta("is_email_required"); - $is_phone_iclude = $obj->get_meta("is_phone_iclude"); - $personal_phone = $obj->get_meta("personal_phone"); - $is_phone_required = $obj->get_meta("is_phone_required"); - $html = " -
    -
    - - -
    -
    -
    -
    -

    ". __("2.1. What is the name of your information form?", SHMAPPER). "

    -
    - -

    " . - __("For example «All beaches by the river»", SHMAPPER) . - "

    -
    -
    -
    -
    -

    ". __("2.2. Will I notify the author about new posts?", SHMAPPER). "

    -
    - - -
    -
    -
    -
    -

    ". __("2.3. What information can users enter?", SHMAPPER). "

    -
    -

    " . - __("You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;", SHMAPPER) . - "

    -
    -
    ". - static::formEditor( $form_forms ? $form_forms : ShmForm::get_default() ). - "
    -
    -
    -
    -

    ". __("2.4. Can users leave their contact information?", SHMAPPER). "

    -
    - - -
    -
    -
    -
    -

    ". __("2.5. What data users will have to put?", SHMAPPER). "

    -
    -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    -
    -
    "; - - - - return $html; - } - static function save_admin_edit($obj) - { - return [ - "map_type" => empty($_POST['map_type']) ? '' : $_POST['map_type'], - "latitude" => sanitize_text_field($_POST['latitude']), - "longitude" => sanitize_text_field($_POST['longitude']), - "zoom" => sanitize_text_field($_POST['zoom']), - "is_legend" => empty($_POST['is_legend']) ? 0 : 1, - "is_filtered" => empty($_POST['is_filtered']) ? 0 : 1, - "is_csv" => empty($_POST['is_csv']) ? 0 : 1, - "is_lock" => empty($_POST['is_lock']) ? 0 : 1, - "is_clustered" => empty($_POST['is_clustered']) ? 0 : 1, - "is_search" => empty($_POST['is_search']) ? 0 : 1, - "is_zoomer" => empty($_POST['is_zoomer']) ? 0 : 1, - "is_layer_switcher" => empty($_POST['is_layer_switcher']) ? 0 : 1, - "is_fullscreen" => empty($_POST['is_fullscreen']) ? 0 : 1, - "default_icon_id" => sanitize_text_field($_POST['default_icon_id']), - "width" => sanitize_text_field($_POST['width']), - "height" => sanitize_text_field($_POST['height']), - - "is_form" => empty($_POST['is_form']) ? 0 : 1, - "form_title" => sanitize_text_field($_POST['form_title']), - "form_contents" => sanitize_textarea_field(empty($_POST['form_contents']) ? '' : $_POST['form_contents']), - "notify_owner" => empty($_POST['notify_owner']) ? 0 : 1, - "form_forms" => empty($_POST['form_forms']) ? '' : $_POST['form_forms'], - "is_personal_data" => sanitize_text_field(empty($_POST['is_personal_data']) ? '' : $_POST['is_personal_data']), - "is_name_iclude" => sanitize_text_field(empty($_POST['is_name_iclude']) ? '' : $_POST['is_name_iclude']), - "personal_name" => sanitize_text_field(empty($_POST['personal_name']) ? '' : $_POST['personal_name']), - "is_name_required" => sanitize_text_field(empty($_POST['is_name_required']) ? '' : $_POST['is_name_required']), - "is_email_iclude" => sanitize_text_field(empty($_POST['is_email_iclude']) ? '' : $_POST['is_email_iclude']), - "personal_email" => sanitize_text_field(empty($_POST['personal_email']) ? '' : $_POST['personal_email']), - "is_email_required" => sanitize_text_field(empty($_POST['is_email_required']) ? '' : $_POST['is_email_required']), - "is_phone_iclude" => sanitize_text_field(empty($_POST['is_phone_iclude']) ? '' : $_POST['is_phone_iclude']), - "personal_phone" => sanitize_text_field(empty($_POST['personal_phone']) ? '' : $_POST['personal_phone']), - "is_phone_required" => sanitize_text_field(empty($_POST['is_phone_required']) ? '' : $_POST['is_phone_required']), - ]; - } - static function post_row_actions($actions, $post) - { - if($post->post_type !== static::get_type()) return $actions; - $actions['doubled'] = "".__("Double", SHMAPPER).""; - return $actions; - } - static function smc_before_doubled_post($metas, $smc_post) - { - - if($smc_post->get("post_type") !== ShmPoint::get_type()) return $metas; - - $types = get_the_terms($smc_post->id, SHM_POINT_TYPE); - $maps = $smc_post->get_owners(); - $metas['type'] = $types[0]->term_id; - $metas['map_id'] = $maps[0]->ID; - return $metas; - } - static function smc_after_doubled_post($new_smc_post, $origin_smc_post) - { - global $wpdb; - if($origin_smc_post->get("post_type") !== static::get_type()) return; - $old_points = $origin_smc_post->get_points(); - - foreach($old_points as $point) - { - $p = ShmPoint::get_instance($point); - $new_point = $p->doubled(); - $new_point->remove_from_map($origin_smc_post->id); - $new_point->add_to_map($new_smc_post->id); - } - } - static function formEditor($data) - { - $html = " -
    -
      "; - //for( $i = 0; $i < 5; $i ++ ) - $i = 0; - foreach($data as $dat) - { - $html .= ShmForm::get_admin_element( $i, $dat ); - $i++; - } - $html .= ShmForm::wp_params_radio( -1, -1 ) . " -
    -
    "; - return $html; - - } - function get_include_types() - { - $form_forms = $this->get_meta("form_forms"); - - if($form_forms) { - foreach($form_forms as $element) - { - if( $element['type'] == 8 ) - { - return explode(",", $element["placemarks"]); - } - } - } - - return false; - } - function get_csv() - { - - $upload_dir = wp_upload_dir(); - if( - !file_exists($upload_dir['basedir']."/shmapper-by-teplitsa") - && !wp_mkdir_p($upload_dir['basedir']."/shmapper-by-teplitsa") - ) { - echo '
    '.print_r('FAIL', 1).'
    '; - return false; - } - - $points = $this->get_points(); - $csv = [implode(SHM_CSV_STROKE_SEPARATOR, [ "#", __("Title", SHMAPPER), __("Description", SHMAPPER), __("Location", SHMAPPER), __("Longitude", SHMAPPER), __("Latitude", SHMAPPER) ])]; - $i = 0; - foreach($points as $point) - { - $p = ShmPoint::get_instance($point); - $csv[] = implode(SHM_CSV_STROKE_SEPARATOR, [ - ($i++) . ". ", - '"' . str_replace(';', ",", $p->get("post_title") ) . '"', - '"' . str_replace(';', ",", wp_strip_all_tags( wp_specialchars_decode ($p->get("post_content")))) . '"', - '"' . str_replace(';', ",", $p->get_meta("location")) . '"', - '"' . str_replace(';', ",", $p->get_meta("longitude")). '"', - '"' . str_replace(';', ",", $p->get_meta("latitude")) . '"', - ]); - } - $csv_data = iconv ("UTF-8", "cp1251", implode( SHM_CSV_ROW_SEPARATOR, $csv)); - $path = $upload_dir['basedir'] . "/shmapper-by-teplitsa/shmap_" . $p->id . ".csv"; - $href = $upload_dir['baseurl'] . "/shmapper-by-teplitsa/shmap_" . $p->id . ".csv"; - file_put_contents( $path, $csv_data ); - return $href; - - if(class_exists("ZipArchive")) - { - $zip = new ZipArchive(); - $zip_name = "shmap_" . $p->id . ".zip"; - if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE) - { - return $href; - } - $zip->addFile( $path ); - $zip->close(); - if(file_exists($zip_name)) - return $upload_dir['basedir'] . "/shmapper-by-teplitsa/" . $zip_name; - else - return $href; - } - else - return $href; - } - function get_points_args() - { - global $wpdb; - return explode(",", $wpdb->get_var("SELECT GROUP_CONCAT( mp.point_id ) - FROM ".$wpdb->prefix."point_map as mp - WHERE map_id=$this->id - GROUP BY map_id")); - } - function get_points() - { - $args = [ - "post_type" => SHM_POINT, - "post_status" => "publish", - "numberposts" => -1, - "post__in" => $this->get_points_args() - ]; - return get_posts($args); - } - - function get_point_count() - { - global $wpdb; - return $wpdb->get_var("SELECT COUNT(*) - FROM ".$wpdb->prefix."point_map as mp - WHERE map_id=$this->id;"); - } - function get_delete_form( $href ) - { - $html =" -
    -
    " . - __("What do with placemarks of deleting Map?", SHMAPPER) . - "
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    " . - ShmMap::wp_dropdown([ - "class" => "shm-form", - "id" => "shm_esc_points_id", - "style" => "display:none;", - "posts" => ShmMap::get_all(), - "exclude_post_id" => $this->id, - - ]) . - "
    -
    -
    - "; - return $html; - } - function get_map_points() - { - $points = $this->get_points(); - $p = []; - - foreach($points as $point) - { - $pn = ShmPoint::get_instance($point); - $types = wp_get_object_terms($pn->id, SHM_POINT_TYPE); - $type = count( $types ) ? $types[0] : null; - $pnt = new StdClass; - $pnt->ID = $pn->id; - $pnt->post_title = $pn->get("post_title"); - $pnt->post_content = wpautop( $pn->get("post_content") ); - $pnt->latitude = $pn->get_meta("latitude"); - $pnt->longitude = $pn->get_meta("longitude"); - $pnt->location = $pn->get_meta("location"); - $pnt->color = $type ? get_term_meta($type->term_id, "color", true) : ""; - $pnt->height = $type ? get_term_meta($type->term_id, "height", true): 40; - $pnt->height = $pnt->height ? $pnt->height : 30; - $pnt->width = $type ? get_term_meta($type->term_id, "width", true): 40; - $pnt->width = $pnt->width ? $pnt->width : 30; - $pnt->type = $type ? $type->name : ""; - $pnt->term_id = $type ? $type->term_id: -1; - $pnt->icon = $type ? ShMapPointType::get_icon_src( $type->term_id )[0] : ""; - //$pnt->width = ShMapPointType::get_icon_src( $type->term_id )[2]/ShMapPointType::get_icon_src( $type->term_id )[1] * $pnt->height ; - //$pnt->width = $pnt->width ? $pnt->width : $pnt->height; - $p[] = $pnt; - } - return $p; - } - function draw($args=-1) - { - if(!is_array($args)) $args = [ "height" => 450, "id" => $this->id ]; - require_once(SHM_REAL_PATH . "tpl/shmMap.php"); - return draw_shMap($this, $args); - } - - /* - final delete map and difference placemarks migration - */ - function shm_delete_map_hndl($data) - { - global $wpdb; - $points = $this->get_points(); - switch($data['action']) - { - case 1: - // search once usage points in deleted Map (only_once == 1) - $query = "SELECT DISTINCT( p1.point_id ) AS point, COUNT(p1.map_id)=1 AS only_once, GROUP_CONCAT(p1.map_id) AS maps - FROM " . $wpdb->prefix . "point_map AS p1 - LEFT JOIN " . $wpdb->prefix . "point_map AS p2 ON p1.point_id=p2.point_id - WHERE p2.map_id=".$this->id." - GROUP BY p1.point_id"; - $res = $wpdb->get_results($query); - $i = 0; - foreach($res as $point) - { - if($point->only_once == 1) - { - ShmPoint::delete($point->point); - $i++; - } - } - $message = sprintf(__("Succesfuly delete map width %s points", SHMAPPER), $i ); - break; - case 2: - $count = $wpdb->get_var("SELECT COUNT(point_id) FROM ".$wpdb->prefix."point_map WHERE map_id=".$this->id); $query = "DELETE FROM " . $wpdb->prefix . "point_map WHERE map_id=".$this->id; - $res = $wpdb->query($query); - $message = sprintf(__("Succesfuly delete map and %s points are orphans now", SHMAPPER), $count ); - break; - case 3: - $count = $wpdb->get_var("SELECT COUNT(point_id) FROM ".$wpdb->prefix."point_map WHERE map_id=".$this->id); - $query = "UPDATE " . $wpdb->prefix . "point_map SET map_id=".((int)sanitize_text_field($data['anover'])). " WHERE map_id=".$this->id; - $res = $wpdb->query($query); - $map2 = static::get_instance(sanitize_text_field($data['anover'])); - $message = sprintf(__("Succesfuly delete map and %s points migrates to %s", SHMAPPER), $count, $map2->get("post_title") ); - break; - } - static::delete( $this->id ); - return ["query" => $query, "res" => $res, "message" => $message]; - } - static function the_content($content) - { - global $post; - $t = ($post->post_type == SHM_MAP && (is_single() || is_archive() )) ? '[shmMap id="' . $post->ID . '" map form ]' : ""; - return $t . $content; - } - static function get_type_radio($params=-1) - { - if(!is_array($params)) - { - $params = [ - "id" => "map_radio", - "name" => "type_radio[" . ShMapper::$options['map_api'] . "][]", - 'selected' => [] - ]; - } - $html = " -
    -
    "; - - if( ShMapper::$options['map_api'] != 2 ) - { - $html .= "
    -

    Yandex Map

    "; - $i = 0; - - foreach(static::get_map_types()[ 1 ] as $type) - { - $selected = !empty($params['selected']) && !empty($params['selected'][1][0]) && $params[ 'selected' ][1][0] == $type ? " checked " : ""; - $name = $params[ 'name' ]; - $id = $params[ 'id' ]; - $html .= " -
    - - -
    "; - $i++; - } - - $html .= " -
    "; - } - else - { - $html .= "
    -

    Open Street Map

    "; - - $i = 0; - - foreach(static::get_map_types()[ 2 ] as $type) - { - $selected = isset($params[ 'selected' ][2][0]) && $params[ 'selected' ][2][0] == $type ? " checked " : ""; - $name = $params[ 'name' ]; - $id = $params[ 'id' ]; - $html .= " -
    - - -
    "; - $i++; - } - - $html .= " -
    "; - } - $html .= " -
    -
    "; - return $html; - } -} \ No newline at end of file diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php deleted file mode 100644 index 4840e3d..0000000 --- a/class/ShmPoint.class.php +++ /dev/null @@ -1,540 +0,0 @@ - __('Map marker', SHMAPPER), - 'singular_name' => __("Map marker", SHMAPPER), - 'add_new' => __("add Map marker", SHMAPPER), - 'add_new_item' => __("add Map marker", SHMAPPER), - 'edit_item' => __("edit Map marker", SHMAPPER), - 'new_item' => __("add Map marker", SHMAPPER), - 'all_items' => __("all Map markers", SHMAPPER), - 'view_item' => __("view Map marker", SHMAPPER), - 'search_items' => __("search Map marker", SHMAPPER), - 'not_found' => __("Map marker not found", SHMAPPER), - 'not_found_in_trash' => __("no found Map marker in trash", SHMAPPER), - 'menu_name' => __("Map markers", SHMAPPER) - ); - $args = array( - 'labels' => $labels - ,'public' => true - ,'show_ui' => true - ,'has_archive' => true - ,'exclude_from_search' => false - ,'menu_position' => 18 - ,'menu_icon' => "dashicons-location" - ,'show_in_menu' => "shm_page" - ,'show_in_rest' => true - ,'supports' => array( 'title', "editor", "thumbnail") - ,'capability_type' => 'post' - ); - register_post_type(SHM_POINT, $args); - } - - static function view_admin_edit($obj) - { - require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); - $SMC_Object_type = SMC_Object_Type::get_instance(); - $bb = $SMC_Object_type->object [static::get_type()]; - $html = ""; - - $default_latitude = 55.8; - $default_longitude = 37.8; - $default_zoom = 4; - if ( isset( ShMapper::$options['shm_default_latitude'] ) ) { - $default_latitude = ShMapper::$options['shm_default_latitude']; - } - if ( isset( ShMapper::$options['shm_default_longitude'] ) ) { - $default_longitude = ShMapper::$options['shm_default_longitude']; - } - if ( isset( ShMapper::$options['shm_default_zoom'] ) ) { - $default_zoom = ShMapper::$options['shm_default_zoom']; - } - foreach($bb as $key=>$value) - { - if($key == 't' || $key == 'class' ) continue; - $meta = get_post_meta( $obj->id, $key, true); - switch($key) - { - case "latitude": - $meta = $meta ? $meta : $default_latitude; - $opacity = " style='display:none;' " ; - break; - case "longitude": - $meta = $meta ? $meta : $default_longitude; - $opacity = " style='display:none;' " ; - break; - case "zoom": - $meta = $meta ? $meta : $default_zoom; - $opacity = " style='display:none;' " ; - break; - default: - $opacity = " "; - } - $$key = $meta; - switch( $value['type'] ) - { - case "number": - $h = ""; - break; - case "boolean": - $h = ""; - break; - default: - $h = ""; - } - - $html .="
    -
    ".$value['name'] . "
    -
    - $h -
    -
    -
    "; - } - //type switcher - $tp = wp_get_object_terms($obj->id, SHM_POINT_TYPE); - $term = empty($tp) ? false : $tp[0]; - $term_id = $term ? $term->term_id : -1; - - $html = empty($html) ? '' : $html; - $html .= "
    -
    ".__("Map marker type", SHMAPPER). "
    -
    ". - $h = ShMapPointType::get_ganre_swicher([ - 'selected' => $term_id, - 'prefix' => "point_type", - 'col_width' => 3, - "default_none" => true, - ], 'radio' ). - "
    -
    -
    "; - $html .= " -
    " . $obj->draw(); - - echo $html; - } - static function update_map_owners($obj) - { - global $wpdb; - $query = "DELETE FROM ".$wpdb->prefix."point_map - WHERE point_id=".$obj->id; - $wpdb->query($query); - $query = "INSERT INTO ".$wpdb->prefix."point_map - (`ID`, `point_id`, `map_id`, `date`, `session_id`, `approved_date`, `approve_user_id`) VALUES"; - $q = []; - foreach($_POST['owner_id'] as $owner) - { - $q[] = " (NULL, '".$obj->id."', '$owner', '".time()."', '0', '1', '0')"; - } - $query .= implode(",", $q); - $current = file_get_contents( ABSPATH. "alert.log" ); - file_put_contents( ABSPATH. "alert.log", $current. $query."\n" ); - $wpdb->query( $query ); - //var_dump( $query ); - return $query; - } - static function save_admin_edit($obj) - { - //if($_POST['point_type'] != 0) - wp_set_object_terms($obj->id, (int)$_POST['point_type'], SHM_POINT_TYPE); - static::update_map_owners($obj); - return [ - "latitude" => sanitize_text_field($_POST['latitude']), - "longitude" => sanitize_text_field($_POST['longitude']), - "location" => sanitize_text_field($_POST['location']), - "zoom" => sanitize_text_field($_POST['zoom']), - "approved" => sanitize_text_field($_POST['approved']), - ]; - } - static function owner_fields() - { - add_meta_box( 'owner_fields', __('Map owner', SHMAPPER), [__CLASS__, 'owner_fields_box_func'], static::get_type(), 'side', 'low' ); - } - - static function owner_fields_box_func( $post ) - { - $lt = static::get_instance( $post ); - echo static::owner_fields_edit($lt, "radio"); - } - static function owner_fields_edit($obj = false, $type = 'checkbox') - { - global $wpdb; - - $id = $obj && is_object($obj) ? $obj->id : -1; - $query = "SELECT map_id FROM ".$wpdb->prefix."point_map WHERE point_id=".$id; - $d = $wpdb->get_results($query); - $selects = []; - foreach($d as $dd) - $selects[] = $dd->map_id; - //var_dump( $selects ); - //wp_die(); - $all = ShmMap::get_all(-1, -1, 0, 'title', 'ASC' ); - $html = " -
    -
    -
      "; - foreach($all as $map) - { - $selected = in_array($map->ID, $selects) ? " checked " : ""; - $html .= " - - "; - } - $html .= " -
    -
    -
    "; - return $html; - } - static function bulk_owner_fields_edit( $params=-1, $type="radio") - { - - $all = ShmMap::get_all(-1, -1, 0, 'title', 'ASC' ); - - $html = "
      "; - foreach($all as $map) - { - - $selected = ''; // in_array($map->ID, $selects) ? " checked " : ""; - $html .= " - "; - } - $html .= " -
    "; - return $html; - } - - static function add_views_column( $columns ) - { - $columns = parent::add_views_column( $columns ); - unset( $columns['zoom'] ); - unset( $columns['latitude'] ); - unset( $columns['longitude'] ); - unset( $columns['approved'] ); - $columns = array_slice($columns, 0, 1, true) + ["ids"=>__("ID"), 'type' => __("Type")] + array_slice($columns, 1, count($columns) - 1, true) ; - $columns['location'] = __("GEO location", SHMAPPER); - $columns['thumb'] = "
    "; - $columns['owner_map'] = __("Usage in Maps: ", SHMAPPER); - return $columns; - } - static function fill_views_column($column_name, $post_id) - { - $obj = static::get_instance($post_id); - switch($column_name) - { - case "ids": - echo $post_id; - break; - case "location": - echo __("Latitude", SHMAPPER).": " . $obj->get_meta("latitude") ."". - "
    ". - __("Longitude", SHMAPPER).": " . $obj->get_meta("longitude") ."". - "
    ". - __("Location", SHMAPPER).": " . $obj->get_meta("location") .""; - break; - case "owner_map": - echo $obj->get_owner_list(); - break; - case "type": - $terms = get_the_terms( $post_id, SHM_POINT_TYPE ); - if($terms && !empty($terms[0]) && $terms[0]->term_id) { - foreach($terms as $term) { - //$term = get_term($obj->get_meta("type"), SHM_POINT_TYPE); - echo ShMapPointType::get_icon($term); - } - } - else - { -// $color = get_term_meta($type->term_id, "color", true); - $owners = $obj->get_owners(); - $map_id = $owners[0]->ID; - $diid = get_post_meta($map_id, "default_icon_id", true); - $icon = "
    -
    "; - echo $icon; - } - - //the_terms( $post_id, SHM_POINT_TYPE, "", ", ", "" ); - break; - case "thumb": - echo "
    " ; - break; - default: - parent::fill_views_column($column_name, $post_id); - } - } - - static function get_insert_form( $data ) - { - // 0 - map_id - // 1 - x - // 2 - y - // 3 - address - $html = " -
    - - - - -
    - - -
    -
    - - -
    -
    - ". - ShMapPointType::get_ganre_swicher( ["name"=>"shm-new-point-type", "prefix" => "shm-new-type"], "radio" ). - "
    -
    - - -
    -
    - "; - - return $html; - } - static function insert($data) - { - $type = (int)$data['type']; - $map_id = (int)$data['map_id']; - unset( $data['type'] ); - unset( $data['map_id'] ); - $point = parent::insert($data); - $query = $point->add_to_map( $map_id ); - wp_set_object_terms( $point->id, (int)$type, SHM_POINT_TYPE ); - return $point; - } - function remove_from_map($map_id) - { - global $wpdb; - $query = "DELETE FROM " . $wpdb->prefix . "point_map - WHERE map_id=$map_id AND point_id=$this->id;"; - $wpdb->query($query); - } - function add_to_map($map_id) - { - global $wpdb; - $query = "DELETE FROM " . $wpdb->prefix . "point_map - WHERE map_id=$map_id AND point_id=$this->id;"; - $wpdb->query($query); - $query = "INSERT INTO " . $wpdb->prefix . "point_map - (`ID`, `point_id`, `map_id`, `date`, `session_id`, `approved_date`, `approve_user_id`) VALUES - (NULL, $this->id, $map_id, " .time() . ", 1, 0, 1);"; - $wpdb->query($query); - return [ $this->id, $query ]; - } - - function get_owners() - { - global $wpdb; - $post_id = $this->id; - $query = "SELECT p.ID, p.post_title FROM `".$wpdb->prefix."point_map` as mp - left join ".$wpdb->prefix."posts as p on mp.map_id=p.ID - where point_id=$post_id"; - $res = $wpdb->get_results($query); - return $res; - } - function get_owner_list( $before = "", $separator = "
    ", $after = "") - { - $owners = $this->get_owners(); - $d = []; - foreach($owners as $r) - { - $link = is_admin() ? "/wp-admin/post.php?post=".$r->ID."&action=edit" : get_permalink($r->ID); - $d[] = "".$r->post_title.""; - } - - return $before . implode($separator, $d) . $after; - } - function draw() { - - $default_latitude = 55.8; - $default_longitude = 37.8; - $default_zoom = 4; - if ( isset( ShMapper::$options['shm_default_latitude'] ) ) { - $default_latitude = ShMapper::$options['shm_default_latitude']; - } - if ( isset( ShMapper::$options['shm_default_longitude'] ) ) { - $default_longitude = ShMapper::$options['shm_default_longitude']; - } - if ( isset( ShMapper::$options['shm_default_zoom'] ) ) { - $default_zoom = ShMapper::$options['shm_default_zoom']; - } - - $mapType = ShmMap::get_map_types()[ ShMapper::$options['map_api'] ][0]; - $types = wp_get_object_terms($this->id, SHM_POINT_TYPE); - $type = empty($types) ? false : $types[0]; - $term_id = $type && $type->term_id ? $type->term_id : -1; - $post_title = $this->get("post_title"); - $post_content = wpautop( $this->get("post_content") ); - $location = $this->get_meta("location"); - $latitude = $this->get_meta("latitude"); - $latitude = $latitude ? $latitude : $default_latitude; - $longitude = $this->get_meta("longitude"); - $longitude = $longitude ? $longitude : $default_longitude; - - $zoom = $this->get_meta("zoom"); - $zoom = $zoom ? $zoom : $default_zoom; - - $html = " -
    -
    -
    -
    - -
    -
    -
    -
    "; - $point = $this->body; - - $html .= " - "; - return $html; - } - static function the_content($content) - { - global $post; - if($post->post_type == SHM_POINT && (is_single() || is_archive() )) - { - - $point = static::get_instance($post); - - return $point->draw().$point->get_owner_list( __("Usage in Maps: ", SHMAPPER), ", ", " " )."
    ".$content; - - } - return $content; - - } - static function my_bulk_edit_custom_box( $column_name, $post_type ) - { - if($post_type != static::get_type()) return; - ?> -
    -
    - ".__("Usage in Maps: ", SHMAPPER)."". static::bulk_owner_fields_edit( ); - break; - default: - break; - } - ?> -
    -
    - );sq;Gxsw0Ezk4Z zOp<0-k|>BGR4Y{~NR=qHXbT|;A%svEm-S`W-mz7?w(53Yl&-F}Zrjgxw|u(a-#O>G z_s%4Axu5*!_nh;bm;e8N{^x)G=bR@$I`54848LDM7eaTx-kAPZ8S~F?RIV|9`(|U# z2mcP#`!nBS%mQ!$_*U>Yz`0-vyac=lybOFCd^`A8;9~F}z#KUD*NvG6j)2Plt&n~c zoKN~Y;Ck@?fM#0!fd2#{qAR3+-$LQnf|r0wF9_)s;02^tfxiac2&$btsQRUl-V45o^Z`))-3N-V zhr;_u!D~q$0^bR~1gidpC{1$qf_>ms;5pz<5EjiHp!j(Zyo7Oj6nr=7Z!<`$_bc!W z@Fh@kzxo}ir-nKDK~*e={g~ZUfH(?*PvOe+QIYUjknZeic-^kAc$55m4js zG`I?!0vR&bnCiWiM%B+n;JM&JQ2Oc%>9wHb7zz2KpvHd!bp3!9@WBT)5z0ZPtSVXT;(ISbVLi$U?R1XTSsp!(kos-Igx)f)pETRJ`nMn^V-|w4r!}DDd>`oK z22r8e7v4VzO8`h5!2IJ^+>+o0P09;kkP9MXReYCK*7)!(`ALigZ8P<-7CUIC7R zOTpg-(P%FZ7KkARPWgW#=9Zk782sCq|1+28Y^+WQaSZQ%F8 z9JuCEW0;C&2Pi$<4T_&nfU?v3LCN(9DE^)V)&2{h=En~}jpNTimD8YTe9sMdKB#h+ zg!C05y$V$MO`z)E3QF!6)OddgR6idBH4YDfYUfE1QO(yu$@8;-{|HLnSIzVGb2f-c zn|YwdZxCcEnVUfIHwmi0+d+-%Cqeb|Wl-`z2de#VfEuqq2UY&3pzQOX!u#{)`}QsZ z)y}+-?gz#1I#6Lq|6c*$|0-jSgQKL+zl=2& z+zUQPe)V#%k29Ifn$Nj_w}8t?e-yj|d={i>^S{8WzzZ0B+0k}T`8z=6-w$31eis}B z-?-Qqx-i2aDmEVkZvwvvo&%a*KThX@($l5j>%o=a+2CqW_O%I=oF!25r=awE2Y4>{ z2~hle0aX1H;A_FJfvWdSP~-DG@Lcd0pz8k%C_9<6#Fu|3sByj&)Hn}-vj1yAwLcQ_ zYoOYj1l9h%pyu&sL;4TEkB~kLt_1sWI1IaF9pTljiB0(K((_Qd^Pw% z@CUodHcAx#7l10a0MvL~0g9hZpxWCGs$2nl3)ldqmk)>c zp8_@ie;<@yroh*Me*;SXzXiqjKZNw_F=q917AQXFfzrbwP~))?l%3oHs-Gz2r=Z&V z5GZ->0@d!PLGk(JfJZ>_{~U-*Fy8{D&tHL(^R@5s?Vby+BK4> zPl3|^3!wV@0jT-&b5QzteV>nmF9c;j8$ro`D=7YppyWzG)jt4=|NB7Ie;Aa!$HM#P zK&_vD25ta<397yK;0)G*?*+y8o#18Q*Fep$UxG|Ma~3ZpcRz^8rU>f&gP`<%Jm8;z z(#H$nYrttx{C^h|Uq1oG@BanG|JnWC&t3#BAiV;VUVjsmoH2MlxDUJ<{46Lre-P3y zg7TO1dHHtmqoCw^7?j@s5d3xUFn9s@O;G&(1l0Kc9rzCLB~bFceYKxwtHCMKYrxyU z*S*)vu>(~5`$5^wU7+~62fQ780K6Q$Xuyy622ka010{DI)VS{hCI5Y(=Fb;F@pmG; z{|iuh`#Gq3FM;CsoHZUV0Hx3QpvtWRCI2Q+@{Wb~dqK^EPk@s9aZvg_0lp3VQ&9DP z3SI{OZ%}%F_gXL4Qc&slf*OY{pvslOOTbTo3&AHr>HDui$@eo*<^Kh|6g+>>+x^u6 zuLH&ZjiBVKg5u|cp!obWDEs|F$bS?RA5);@`wl2MUId*zfzspIL;n4xp!C}Zj)B*L zn7nx$bb1AUNcttP7yQe0j3Ic|dSVN(0PTSElU-2Et&^`-2EP%g3Vj*+ZRjJA{O5-u z{mRgd(4)|2pdUl}9rxgL^CvvN2uYt8Li+s;biaG@dN_mUzYJ+X3Qa=qgyupYgl>YC zK)(rPzdbxiFaHCQ-RLL1{jPh$uLgV&Y(lp|{|d>!2uYoRyrl4Oy*>5=y|28D<1%H&i0B?rg5YpcY zcsKYCNd77Nt>@t&v=h?&n*BQ(GJXsE@6ZY8PUzdvX6WBQ_dx#z<7H&jGgv>;=CGRYH0d_}9?)Li)*o*Me_> zav}X+!PU_7(9_Tj(A%LGApP!wJ^=j{l!x?tGxSC1^Uy_*g&u9+tn4D~^O2u09eK(|AmfU@5$*#o!*IvYAGgb`CAlRzyER|4)qKO|Yeicq)$2)Q_tfiEUM|hq z;V899c~4}=>aj}APi(Qg(=KR4v2B!hMU`YB1+U224Yfk0S&VGCmPYYdz7UbUEN3_6 zciU|Vg^TscTBV*Z+G0MJl`a?RHM3NbZZG9iTTWb0wR|T(3#c>T1d(ykl#Ft<}@=*lt%V-%Lv=B0pMhrnVMM+D1J|6BS1VzWJ`E z3TU>8@QID26%|7zYumY%D8DmOyXDxzWSTF)UZ=jwOF81&Y0bAaDP@&h&AM$g)756x z+~jI|eYB$)C8uRoBLG6R+|)08c{*g&ax|FOfvp>IW}r}rk|Zj+ku?LwqRo#XpL-gOP++9T zm@;Od(TM9iNqe+OQ+3Chl?q)l(&ZZZ@v0QVRX1dzG)(ZM>JndV=(%VH;>huzl$vq0 zx}BWN*U(c`iPFfY_-Q8!&b9OI-ixac9 z!X)s2(ZZfR`M7A-)+_axzqRo=pQ;)SUu;Jh8>U3QQn^^~G=fx*Be8orGaPj6@yc;Y zHM_OWj7hSbs;VW0xZH4z57wKb6|&;|c$k`K3`=pUV|o;rZ*IhynHIY&RLX@3Wl6Qp z=4`Y}R+aa|k@HQxToXAnREet8(AK`P-HP-;uK^jW6fH@ z&71{eaTKX5XBUZ^AASzvB!-w@6Lup?SJ{Mg48w_LyO>vRSg+6SW6CKvOUW~6T8b?u zqs=Ety--HS#g35{7^IvXsoP4qHi0#(QE4IXYA%u?V>U^t-mEzPvQ*D;TBsMJ#G=u9 zEwYU~zHxzS_Sl<~Qgstg<)ZDk^HX@C~#(S2{_fouqRu(Rji<~T#3w{c^{u=ohrzNN7Tmb&6P%=YFA&)ogn37Y8+|!oH z8by)84DD(ls>R=$b!F^{KeU2Z+EvDTnROi@?7T{TN3(v_0G2r#xZ`3O0WjAzAm>_XvVRO zPs3oYiOS=p)NB|u8!&jYp{mTV$Yf{{9UZvkWK3)I9j#qA7?cYGPTlnm3J#|(v{(# zH77g0v(Sf564Zo=suM*NHmQ`0;Z;`}Mb$HxkW?abag8gtRIf-JSHizUTlD7Dy*58uu0^TY8q+IYCU!p3t;kY{<2|RhJL^qM zLc(s1>uKbCsoBZ|&Rfil8FqbCs8=z-BL2?BVz|K-%ceiPVwr91TI76+k85%bR?O=o z7iKwM=9Xn2e>qPZyljp_RjtawloUlsvXPiL(PcWvueW-zv-NlC3#YkLv%Lzh$Fb+} zKiN_`tk{JB(vOLYY{nTZW?p25oykbYnO!;)97cNH;m_l+Pz)1YXl+-3%DfiJ(AWWHSA+uttSajSy(OO!xR&JFFGBV%OK}MKi+e z$l__ul+HqxDt3*dF|9T#t}In{pt3@+a}Oh z%}1Zx!oFj+jh>S4O!SmoZ=u^*&YMKySw9T*?k*cl%(j~EGE&r%Gus+&j`>AtTcWUm zRR@hF#FE zVc}Zs3!*}XV4R?=z0$3=*VHFT7FffIZq0K8<~BMB`dy8sD?)aILHtcb<9yECBuASu zCFrOVgKn2Sne8DA4#+Z2h+NFF>CH`Xa{OjNx(JVM-_ZT6h0I>Zl%2J&a2pW$1{%SQ zzK

    l*lrM&HHJoQP)DBu)<3ZZqX0+gzD#6AH86$tRDn|>~yVCEkPZ^O{C zyTs5>Q+qAUjMrmL1Gn&Ki`gmI<~ry zNEN4(Fi!3rlO1&sYWnrdJv)1LPu_;zW7`PWZ%0XOK2De2oZTIz+M&}o>yRcQvAEkh z=(g<6-u(yjN1v|t> zMJG<|COSsaaRXS0H8<&?LGD!c63}mn+9|CnRBWd;8=`nt(oJ2XAXv?YDoH!T*9p-} zR?26#3;BmCbJ(=cDwriYr7%&EJ(XC@9E<1`SD6FZZ2Nk=wGpXsZoByi!|y)v5+EK*=5V& zF=b+8k1n>*8HQBW#jbPZh8>s->ADqaVLx>-!i=}4&kZfMU%GG{^_mcu`_l^XX;?25 z_s`WMs`SKD<=5uE+MsblwKxOp-+g#b_r%k|Gdx)%lbc*-p?%L2#2d&4$h# zPT^^1*(=Os5AFWi8D8*CfiBgW$y3~`&vAY}#FIY9hkmV3wjOMKru9JUw;kTsXIm$y z_qUF>o}RvE`p(v4t*1yGvC|))-ambScdciq?`R#HzQ>Y%l0tV=^rUS)(|XLd4z(Ve z{)nC4N737P{IG2uvpgM}-q$+5hzhyZ@tj^Cn7*rZM8#T%rVsG6-vUoi@?`5t+M)Qf zbbO+RHum#yymidLX2#Mnn!nq&o@hNy`Nw%LCZ3u8SnDZucBFN*b*yzl93A1|8F4Re zTE}@h28)ywXUA#$_UZkm^?83V}^yHOy!lGa)=V{;SAvioq%aZySnmFb(f>LSe z8I*PpI`mu}lLXI7FfvZ6qf7~UfdH2Qhl7SPJ)%5@ zLE}m@Fyt)4E?t@HU71_j+q=SUwo8^T?V;|c?emYeKKII4dH(5~VZ8TcDwSd|1G+di zeXk{Ppmi7__lti&u7?onUJW)pQ$ms;1=^vQnxXGU9P8rp5F#Ca{%M0+yjec!GNsES zDEOE&2Eo%k@wATQZ0kPSbnQQ(Q9#jm%CRdHw=*!qQ=zkX^of~QpT~I*}A3Y`e;E z+Pk#3r*}oqk}GZR^1kKEF7Lgfw|CB_4V#8~Zonf^u#eqH?;IT`;uU)o{PtP-rNwxO za_uVltT>6%{%s@cdamr0V+WNGX!i`&IMgDn=(AUjmeV;~E6q4x=~<_+iGwvxNJu9A zS6s!iugCrcwYf`r`}>#JdGo9udoS)^vc#^oy_VvnukK%(y;{}3OpmTc@2VxecJE$a zg)+Shsk4MSOBY@>=f$zJMm*lR@T{&kX7Z6PX=01YVIc#`uW5e6Cq1cff zemTNPID%{Y>#m&~*@NDDyK~9~1h2J;g>$xU8R>Dyt{pwoQ-b!S6;5mGai4AX-7^y9 ztEAgEBiBWW6;c1xL3Y_RIX?4>h|*QianN zcV{xBpgO9MM#k8>${ZU{9i4iJ<3$$4t-3g=g^QEzQH4{PP>Om@*T3Sax@%%*J!X?w zR0dq?HiSEb!KoAR7+GtgS~J~4C$cS$h1pmrV9}{mQzu!KJQc$w%P{S6trA&(SjCwk zS3!F?W+O<92n=00Zd!afqB?&}IL5w=kbr~8O)m1%CP@d-r`F}_Wtb!Pq9R^j*1EGh zfA>Pi6|PT+F{PBvx_;5otL&2F^w?dZ=)%cyNeK?^36-Z#jPhJVE67?-86daUQrJ+| z#X-iozkum&Dv{5wryVD zXNS>S)|jlcW`_%}ih2<*_kN+zKV^ zMWXF#j!m5)@?<|6&(0cf7dnxlDM~~o4kIY2X|6~17h%ZpVKV--{fgOSPzo%L630&+ zOkKq_*)zu_WoDD)OgQe=HQA=AqlJ>}S($SaTbVkV@CM}#kgxWfahO4FAWGaQ@yck+ zH_A**-BkAT7*A@3&;eVT&J>mU$`MnMdm)aHsKCtXFhC6HZiGnql`CCOjtI_%{aLO?YsPI9>T-A>US!ouQ$>I4X}ioi#bU z+CwSYzo{G{q|*m?x$-#Uk@GpYrQzMx(YkEGnSk<7h;6-bUWn2L}7q=%T3I zV5|~yY0gA_FKC|e&10rv;4O;H&1OXN+tp-gNgK#5~> zc=0pQVtKJO157v~Y57?3xwiYJsb?L&-rqEJ*{X96y6525GIO0p8Af~VEwpB9os$n{ zu;pY2-IO&I;R&Cu8{~48BN69f)#repkl}S7M-^He++=O%$s#h(<;1EXPRby9@8;JF z`kJUsooI|PIks^}(r(6SjAW+?CRMw%=5sdVr9{=^ybbTi5;Pf=?Qna$g45_;9P9$$ zarezrf4IBq@4C6_pT8%!CYN1UY2e$k%&eMSS-os!?y20kX;~5Jo~oyP^6tGi{B!N0 z18i=NnL#s$s$N35L%NTu^?2@?Q?hk$7DlUCJl71_y>YxDP5j;|VLCT#;_yw>`QEKcrqvRsiX ztoLMg20wfyFp)NW7~lraTr+jF#2r?+(OOgHymJWM5Y8b!-l${x@_TEuyDgXxYouME z$?pRs*~_GimdkVc>Ky#+T-r0-ULh9dj903R$Z3fE`}ho34-3KR`@1i3k=+B2Dn8)g zSMF#HehD@?f##+rD#e^9jdd2r>-T~wI<|Yp{rL$ z83}G^nn|cF=fJCuN9lT;UEeQy#6+$P5s9LsuJR=O0L<#wGsl8hR`?b=c1u}!W_Ux$ z=oXV8GskMUEHgtjGhWH)f&&c=g&Vc0gDjQIGKCKuLZsZWl>=|J9xm2Ae~MDvB4C`? z^XqKa;(=y}7GgO&w~Eicblc*-TR`Zco=qHcXKP0%8B9XqA4_(Hk40*=CcZ(plJ0Ar z&O)M#v~-V~9NAm1U7T-ew62db2vgkEnv2e?_xg&Iy>`pBQl98hr|XJlV7MdwFd{_c za$Dm(fxN62oX;J`>I&u~yFSG1TDMj#+ok)q!Xg{B3-~p_-MyvOUA__5xscnb%)4wC zI&1pH?FESxlc`YBv>K|VY}#aRnT2YDkjIb36ZLpBELe4|S3})PXHf8r<lV+?HfdN!sHvdz;5Vy-Man&H*D9p&mww$KBEQ5ko`NTB2+RPGP)Qgd<93RD!& zlAQ2k?`sirM}$AR7k=f}8eRE~ru6%Ngg zOI`dX*5$ROE!QP;*59c9e{KW^(Pw*$*Nz90MQ&cW$dC(^C}H9E-y0zskqxK(gFgTC z;i6x&{ol?M(e+@5NT# z-4-cYbZQ|s$fC~~9s3B=XsNfQI!3SUIG1MbN+_7B6CD+&Y*yM9nQdCTH=;!%AFjU? zCa((@hcmXLIR>X|4`j9zD0g+lNpmCx^CNT<}$gQU`wRvo9jiY%kiChy||s| z1mCHsg|E>{EnPT3WA}Ead#Z(4qrE>%J5Lxk z2Fv9m2Hcf9DV5^Kcx@MzNO;DXZ@LPfV-47p(wLIEE!>LaxxVWspz^v{rV_9k|st~E?S z|23daAQBhX&*j@c7aaJ&WX6Q!<43y6B40u@x80*Uixktx2Ptkd<+`)&4I!;}=ISCF zH+47`*itaq6%ym4MoWRsR^rJf$6{{P%p9k`*5vj#PIJEOP-iXgY=yjg z_P3kT~8vVpz2JGLSn`d$Y#$i- zu&Jw3XJie|Qu-R@iY|!d?nPhGeW?W14eSIPH$IIBdu6TIVZ61S(ezz7+hJ=Kb^^p% z@nU9A!4OAg@};WbqFs5ko$Jq4=pNq zgv{sUy#La9b_o6v)gP|F9P2^KDRjc=kSwnmk8vDyO29QETJLVD%YpM>GNKyilLScD uOdXuizNfwV=+pUh5g%_6k0?CsoT-#`^qq|Aj3bO1GFJJ7u6>n~Gye~+dx&KK diff --git a/languages/shmapper-by-teplitsa-de_DE.po b/languages/shmapper-by-teplitsa-de_DE.po deleted file mode 100644 index a1ea512..0000000 --- a/languages/shmapper-by-teplitsa-de_DE.po +++ /dev/null @@ -1,999 +0,0 @@ -# Translation of Plugins - shMapper by Teplitsa - Development (trunk) in Russian -# This file is distributed under the same license as the Plugins - shMapper by Teplitsa - Development (trunk) package. -msgid "" -msgstr "" -"PO-Revision-Date: 2020-06-18 05:54+0300\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.8.8\n" -"Language: de\n" -"Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" -"POT-Creation-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" - -#: class/ShmAdminPage.class.php:27 -msgid "shMapper developers chat" -msgstr "shMapper Entwicklerchat" - -#: class/ShmForm.class.php:497 -msgid "Drag choosed icon and place it to map or click it and enter exact address." -msgstr "Ziehen Sie das ausgewählte Symbol an die gewünschte Stelle auf der Karte oder klicken Sie darauf und geben Sie die genaue Adresse ein." - -#: assets/js/ShMapper.front.js:9 -msgid "Error: no map" -msgstr "Fehler: Keine Karte" - -#: widget/ShMap.widget.php:64 -msgid "Tite" -msgstr "Titel" - -#: widget/ShMap.widget.php:17 -msgid "Player Cabinet" -msgstr "Dashboard" - -#: widget/ShMap.widget.php:16 -msgid "Ermak Locations" -msgstr "Position verschieben" - -#: widget/ShMap.widget.php:9 -msgid "Shmapper Locations" -msgstr "Shmapper Position" - -#: tpl/shmMap.php:83 -msgid "download %s.csv" -msgstr "%s.csv herunterladen" - -#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 -msgid "Submit" -msgstr "Senden" - -#: tpl/input_file_form.php:77 -msgid "Insert" -msgstr "Einfügen" - -#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 -msgid "Remove" -msgstr "Entfernen" - -#: tpl/input_file_form.php:72 -msgid "Browse" -msgstr "Durchsuchen" - -#: tpl/input_file_form.php:66 -msgid "File" -msgstr "Datei" - -#: tpl/input_file_form.php:64 -msgid "Upload Image" -msgstr "Bild hochladen" - -#: class/ShmPoint.class.php:312 -msgid "Address" -msgstr "Adresse" - -#: class/ShmPoint.class.php:158 -msgid "Map owner" -msgstr "Kartenbesitzer" - -#: class/ShmPoint.class.php:33 -msgid "no found Map marker in trash" -msgstr "Keinen Kartenpunkt im Papierkorb gefunden" - -#: class/ShmPoint.class.php:32 -msgid "Map marker not found" -msgstr "Markierung nicht gefunden" - -#: class/ShmPoint.class.php:31 -msgid "search Map marker" -msgstr "Markierung suchen" - -#: class/ShmPoint.class.php:30 -msgid "view Map marker" -msgstr "Markierung ansehen" - -#: class/ShmPoint.class.php:29 -msgid "all Map markers" -msgstr "Alle Markierungen" - -#: class/ShmPoint.class.php:27 -msgid "edit Map marker" -msgstr "Markierung bearbeiten" - -#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 -#: class/ShmPoint.class.php:28 -msgid "add Map marker" -msgstr "Markierung hinzufügen" - -#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 -msgid "Map marker" -msgstr "Markierung" - -#: class/ShMapper_Assistants.class.php:90 -msgid "Your requests to this Map " -msgstr "Ihre Einreichung für die Karte " - -#: class/ShMapper_Assistants.class.php:44 -msgid "all maps" -msgstr "Alle Karten" - -#: class/SMC_Post.php:631 class/SMC_Post.php:636 -msgid "Parameters" -msgstr "Optionen" - -#: class/SMC_Post.php:566 -msgid "Yes" -msgstr "Ja" - -#: class/SMC_Post.php:563 -msgid "No" -msgstr "Nein" - -#: class/SMC_Post.php:560 -msgid "— No Change —" -msgstr "— Keine Veränderung —" - -#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 -#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 -msgid "Usage in Maps: " -msgstr "Wird in Karte verwendet: " - -#: class/ShmMap.class.php:780 -msgid "Succesfuly delete map and %s points migrates to %s" -msgstr "Karte erfolgreich gelöscht und %s Punkte nach %s verschoben" - -#: class/ShmMap.class.php:773 -msgid "Succesfuly delete map and %s points are orphans now" -msgstr "Karte erfolgreich gelöscht und %s Punkte sind keiner Karte zugeordnet" - -#: class/ShmMap.class.php:768 -msgid "Succesfuly delete map width %s points" -msgstr "Karte erfolgreich mit %s Punkten gelöscht" - -#: class/ShmMap.class.php:682 -msgid "Switch all Points to anover Map" -msgstr "Verschiebe alle Markierung auf eine andere Karte" - -#: class/ShmMap.class.php:676 -msgid "Escape all Points without Owner Map" -msgstr "Alle Markierungen ohne Eltern-Karte stehen lassen" - -#: class/ShmMap.class.php:670 -msgid "Delete all Points" -msgstr "Lösche alle Markierung" - -#: class/ShmMap.class.php:665 -msgid "What do with placemarks of deleting Map?" -msgstr "Was soll mit den Markierungen der gelöschten Karte passieren?" - -#: class/ShmMap.class.php:521 class/SMC_Post.php:496 -msgid "Double" -msgstr "Duplizieren" - -#: class/ShmMap.class.php:450 -msgid "Personal email" -msgstr "E-Mail Addresse" - -#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 -#: class/ShmMap.class.php:471 -msgid "Required" -msgstr "Erforderlich" - -#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 -#: class/ShmMap.class.php:461 -msgid "Include" -msgstr "Einschalten" - -#: class/ShmMap.class.php:426 -msgid "2.5. What data users will have to put?" -msgstr "2.5. Welche Daten müssen Benutzer angeben?" - -#: class/ShmMap.class.php:418 -msgid "2.4. Can users leave their contact information?" -msgstr "2.4. Sollen Benutzer ihre Kontaktinformationen hinterlassen können?" - -#: class/ShmMap.class.php:409 -msgid "You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;" -msgstr "Sie können ein eigenes Fomrular mit folgenden Elementen erstellen: & laquo; Textlinie & raquo;, & laquo; Textfeld & raquo;, & laquo; Dateiupload & raquo;, & laquo; Markierungskategorien & raquo;" - -#: class/ShmMap.class.php:406 -msgid "2.3. What information can users enter?" -msgstr "2.3. Welche Informationen können Benutzer hinterlassen?" - -#: class/ShmMap.class.php:398 -msgid "2.2. Will I notify the author about new posts?" -msgstr "2.2. Soll der Autor über neue Beiträge informiert werden?" - -#: class/ShmMap.class.php:392 -msgid "For example «All beaches by the river»" -msgstr "Zum Beispiel «Alle Strände am Fluss»" - -#: class/ShmMap.class.php:388 -msgid "2.1. What is the name of your information form?" -msgstr "2.1. Wie lautet der Name des Formulars?" - -#: class/ShmMap.class.php:383 -msgid "Enable crowdsourcing function (free add Users new Markers)" -msgstr "Aktivieren der Crowdsourcing-Funktion (hinzufügen neuer Markierungen durch Benutzer) " - -#: class/ShmMap.class.php:351 -msgid "Recommended size is 64х64 px, format is .png" -msgstr "Empfohlene Größe ist 64x64 pc, empfohlenes Format ist .png" - -#: class/ShmMap.class.php:346 -msgid "1.7. Default Marker icon" -msgstr "1.7. Standard Marker Icon" - -#: class/ShmMap.class.php:335 -msgid "1.6. Will Marker type filter be displayed?" -msgstr "1.6. Soll das Filterfeld nach Markertypen angezeigt werden?" - -#: class/ShmMap.class.php:324 -msgid "1.5. Will the legend be displayed?" -msgstr "1.5. Soll die Legende angezeigt werden?" - -#: class/ShmMap.class.php:313 -msgid "1.4. May User download data in *.csv?" -msgstr "1.4. Dürfen Benutzer Daten als .csv herunterladen?" - -#: class/ShmMap.class.php:299 -msgid "Choose layers" -msgstr "Ebene Auswählen" - -#: class/ShmMap.class.php:277 -msgid "Map zoom slider enabled" -msgstr "Vergößerungschieberegler aktivieren" - -#: class/ShmMap.class.php:269 -msgid "1.3. Include interface" -msgstr "1.3. Welche Kartensteuerungen sollen vorhanden sein?" - -#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 -msgid "Empty for " -msgstr "Leer lassen für " - -#: class/ShmMap.class.php:249 -msgid "1.2. Set size for map's div (per pixels)" -msgstr "1.2. Einstellen der Kartengröße (in Pixeln)" - -#: class/ShmMap.class.php:237 -msgid "1.1. Pan map and choose zoom" -msgstr "1.1. Karte zentireren und Maßstab auswählen" - -#: class/ShmMap.class.php:212 -msgid "Step 2. May anover Users add information for Map." -msgstr "Schritt 2. Können andere Benutzer Ihrer Karte Informationen hinzufügen?" - -#: class/ShmMap.class.php:198 -msgid "You can insert a card into a post or page by copying this shortcode." -msgstr "Sie können eine Karte in einen Beitrag oder in eine Seite einfügen, indem Sie diesen Shortcode kopieren." - -#: class/ShmMap.class.php:186 -msgid "Including Map to post" -msgstr "Karte einem Beitrag hinzufügen" - -#: class/ShmMap.class.php:162 -msgid "only request form" -msgstr "nur Anfrageformular" - -#: class/ShmMap.class.php:153 -msgid "only map" -msgstr "nur Karte" - -#: class/ShmMap.class.php:145 -msgid "include all (map and request form)" -msgstr "alles inklusive(Karte und Anfrageformular)" - -#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 -msgid "Map markers" -msgstr "Markierungen" - -#: class/ShmMap.class.php:124 -msgid "shortcodes" -msgstr "Shortcodes" - -#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 -msgid "ID" -msgstr "ID" - -#: class/ShmMap.class.php:80 -msgid "no found Map in trash" -msgstr "Keine Karte im Papierkorb gefunden" - -#: class/ShmMap.class.php:79 -msgid "Map not found" -msgstr "Karte nicht gefunden" - -#: class/ShmMap.class.php:78 -msgid "search Map" -msgstr "Karte suchen" - -#: class/ShmMap.class.php:77 -msgid "view Map" -msgstr "Karte anzeigen" - -#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 -msgid "all Maps" -msgstr "alle Karten" - -#: class/ShmMap.class.php:74 -msgid "edit Map" -msgstr "Karte bearbeiten" - -#: class/ShmMap.class.php:65 -msgid "Step 1. Set up your map." -msgstr "Schritt 1. Karte einrichten" - -#: class/ShMapPointType.class.php:358 -msgid "None" -msgstr "Keine" - -#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 -msgid "Color" -msgstr "Farbe" - -#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 -#: class/ShMapPointType.class.php:197 -msgid "Icon" -msgstr "Icon" - -#: class/ShMapPointType.class.php:86 -msgid "Name" -msgstr "Name" - -#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 -msgid "Map marker types" -msgstr "Markertypen" - -#: class/ShMapPointType.class.php:49 -msgid "Unique type of every Map markers" -msgstr "Einzigartiger Typ jeder Kartenmarkierung" - -#: class/ShMapPointType.class.php:42 -msgid "new Map marker type name" -msgstr "Name des neuen Markertyps" - -#: class/ShMapPointType.class.php:41 -msgid "add Map marker type" -msgstr "neuen Markertyp hinzufügen" - -#: class/ShMapPointType.class.php:40 -msgid "update Map marker type" -msgstr "Markertyp aktualisieren" - -#: class/ShMapPointType.class.php:39 -msgid "edit Map marker type" -msgstr "Makrertyp bearbeiten" - -#: class/ShMapPointType.class.php:38 -msgid "parent Map marker type:" -msgstr "Markertyp der übergeordneten Karte:" - -#: class/ShMapPointType.class.php:37 -msgid "parent Map marker type" -msgstr "übergeordneter Markertyp" - -#: class/ShMapPointType.class.php:36 -msgid "view Map marker type" -msgstr "Markertyp ansehen" - -#: class/ShMapPointType.class.php:35 -msgid "all Map marker types" -msgstr "alle Markertypen" - -#: class/ShMapPointType.class.php:34 -msgid "Search Map marker type" -msgstr "Markertyp suchen" - -#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 -#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 -msgid "Map marker type" -msgstr "Markertyp" - -#: class/ShMapper.class.php:607 -msgid "Prevous step" -msgstr "Vorheriger Schritt" - -#: class/ShMapper.class.php:602 class/ShMapper.class.php:608 -msgid "Go to current page" -msgstr "Zur aktuellen Seite" - -#: class/ShMapper.class.php:601 class/ShMapper.class.php:609 -msgid "Close wizzard" -msgstr "Assisten schließen" - -#: class/ShMapper.class.php:559 -msgid "Restart wizzard" -msgstr "Assistent neustarten" - -#: class/ShMapper.class.php:556 -msgid "Wizzard" -msgstr "Assistent" - -#: class/ShMapper.class.php:544 -msgid "Error send map request" -msgstr "Fehler beim Senden der Anfrage" - -#: class/ShMapper.class.php:538 -msgid "Successful send map request" -msgstr "Anfrage erfolgreich gesendet" - -#: class/ShMapper.class.php:532 -msgid "Save personal data garantee" -msgstr "Garantierte Speicherung personenbezogener Daten" - -#: class/ShMapper.class.php:528 -msgid "Vocabulary" -msgstr "Textbausteine" - -#: class/ShMapper.class.php:516 -msgid "Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha" -msgstr "Dein Captcha funktioniert noch nicht. Um diese Funktion zu aktivieren, rufen Sie die API-Schlüssel unter google.com/recaptch ab" - -#: class/ShMapper.class.php:512 -msgid "What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s." -msgstr "Was ist Google reCAPTCHA? Wie erhalte ich einen Schlüssel? Weitere Informationen %gibt es hier%s." - -#: class/ShMapper.class.php:503 -msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" -msgstr "Aktivieren Sie Captcha im Formular (das Plugin verwendet nur reCAPTCHA v2-Schlüssel)." - -#: class/ShMapper.class.php:496 -msgid "Protection" -msgstr "Sicherheit" - -#: class/ShMapper.class.php:484 -msgid "Reload page after User send request." -msgstr "Neuladen der Seite nach einer Benutzereinreichung" - -#: class/ShMapper.class.php:476 -msgid "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" -msgstr "ACHTUNG: Deaktivieren Sie diese Option nur auf eigene Gefahr. Es besteht die Gefahr von Spam-Angriffen" - -#: class/ShMapper.class.php:472 -msgid "все сообщения будут добавляться в статусе «Черновик»" -msgstr "Alle Nachrichten erhalten den Status «Entwurf»" - -#: class/ShMapper.class.php:468 -msgid "Pre-modertion from Map owner." -msgstr "Vormoderation durch den Karteninhaber." - -#: class/ShMapper.class.php:460 -msgid "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." -msgstr "Benutzer können keiner Karte Nachrichten hinzufügen. Wenn das Häkchen aktiviert ist, wird der Interaktivitätsblock nicht einmal angezeigt." - -#: class/ShMapper.class.php:456 -msgid "Включить глобальный режим неинтерактивных карт" -msgstr "Aktivieren Sie den globalen nicht interaktiven Kartenmodus" - -#: class/ShMapper.class.php:448 -msgid "Interactive" -msgstr "Interaktiv" - -#: class/ShMapper.class.php:439 -msgid "Open Street Map" -msgstr "Open Street Map" - -#: class/ShMapper.class.php:433 -msgid "Yandex Map" -msgstr "Yandex Map" - -#: class/ShMapper.class.php:426 -msgid "Map API" -msgstr "Karten API" - -#: class/ShMapper.class.php:402 class/ShMapper.class.php:403 -#: class/ShMapper.class.php:417 -msgid "Settings" -msgstr "Einstellungen" - -#: class/ShMapper.class.php:276 assets/js/ShMapper.admin.js:155 -msgid "Are you shure?" -msgstr "Sind Sie sicher?" - -#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 -msgid "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match" -msgstr "Fehler: Das Formular ist nicht mit der Karte verknüpft. Um eine Karte und ein Formular zu verknüpfen, müssen auf einer Seite zwei Shortcodes vorhanden sein (Karte - [shmMap id='6' map='true' uniq='z.B., 777'] und Formular - [shmMap id='94' form='true' uniq='z.B., 777']), für die die uniq-Parameter übereinstimmen." - -#: class/ShMapper.class.php:274 class/ShMapper.class.php:370 -#: assets/js/ShMapper.js:391 -msgid "Close" -msgstr "Schließen" - -#: class/ShMapper.class.php:273 class/ShMapper.class.php:369 -msgid "Send" -msgstr "Senden" - -#: class/ShMapper.class.php:272 class/ShMapper.class.php:368 -#: assets/js/ShMapper.js:381 -msgid "Attantion" -msgstr "Achtung" - -#: class/ShMapper.class.php:178 -msgid "Accessed User" -msgstr "Benutzerzugriff" - -#: class/ShMapper.class.php:177 -msgid "Aprove date" -msgstr "Datum bestätigen" - -#: class/ShMapper.class.php:176 -msgid "Aproved" -msgstr "Bestätigt" - -#: class/ShMapper.class.php:175 -msgid "Contacts" -msgstr "Kontakte" - -#: class/ShMapper.class.php:173 -msgid "Session" -msgstr "Sitzung|Session" - -#: class/ShMapper.class.php:172 class/ShmPoint.class.php:231 -#: class/ShmPoint.class.php:308 -msgid "Type" -msgstr "Typ" - -#: class/ShMapper.class.php:167 class/ShmMap.class.php:103 -#: class/ShmMap.class.php:596 class/SMC_Post.php:370 -#: class/ShmPoint.class.php:300 -msgid "Title" -msgstr "Titel" - -#: class/ShMapper.class.php:166 class/ShmMap.class.php:70 -#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 -msgid "Map" -msgstr "Karte" - -#: class/ShMapper.class.php:160 -msgid "Required Personal phone" -msgstr "Telefonnummer erforderlich" - -#: class/ShMapper.class.php:159 class/ShmMap.class.php:466 -msgid "Personal phone" -msgstr "Telefonnummer" - -#: class/ShMapper.class.php:158 -msgid "Unclude Personal phone" -msgstr "Telefonnummer aktivieren" - -#: class/ShMapper.class.php:157 -msgid "Required Personal e-mail" -msgstr "E-Mail erforderlich" - -#: class/ShMapper.class.php:156 -msgid "Personal e-mail" -msgstr "E-Mail Adresse" - -#: class/ShMapper.class.php:155 -msgid "Unclude Personal e-mail" -msgstr "E-Mail aktivieren" - -#: class/ShMapper.class.php:154 -msgid "Required Personal name" -msgstr "Name erforderlich" - -#: class/ShMapper.class.php:153 class/ShmMap.class.php:434 -msgid "Personal name" -msgstr "Name" - -#: class/ShMapper.class.php:152 -msgid "Unclude Personal name" -msgstr "Name aktivieren" - -#: class/ShMapper.class.php:151 class/ShmMap.class.php:421 -msgid "Users can leave their contact details for feedback." -msgstr "Benutzer können ihre Kontaktdaten für Feedback hinterlassen." - -#: class/ShMapper.class.php:150 -msgid "Form generator" -msgstr "Formular Generator" - -#: class/ShMapper.class.php:149 -msgid "Form Title" -msgstr "Formular Titel" - -#: class/ShMapper.class.php:148 class/ShmMap.class.php:122 -#: class/ShmMap.class.php:401 -msgid "Notify owner of Map" -msgstr "Autor der Karte benachrichtigen" - -#: class/ShMapper.class.php:147 class/ShmMap.class.php:117 -msgid "Form exists" -msgstr "Formular vorhanden" - -#: class/ShMapper.class.php:145 -msgid "Default Marker icon" -msgstr "Standard Markierungs Icon" - -#: class/ShMapper.class.php:144 class/ShmMap.class.php:291 -msgid "Formating Marker to cluster" -msgstr "Kartenmakierungen zu Cluster stappeln" - -#: class/ShMapper.class.php:143 class/ShmMap.class.php:295 -msgid "Lock zoom and drag" -msgstr "Blockieren der Vergößerung und des Verschiebens" - -#: class/ShMapper.class.php:142 class/ShmMap.class.php:281 -msgid "Map layer switcher" -msgstr "Kartenebenen" - -#: class/ShMapper.class.php:141 -msgid "Map zoom slider" -msgstr "Kartenvergrößerungsschieberegler" - -#: class/ShMapper.class.php:140 class/ShmMap.class.php:287 -msgid "Map full screen" -msgstr "Voolbildmodus" - -#: class/ShMapper.class.php:139 class/ShmMap.class.php:273 -msgid "Map search" -msgstr "Kartensuche" - -#: class/ShMapper.class.php:138 class/ShMapPointType.class.php:125 -#: class/ShMapPointType.class.php:177 class/ShmMap.class.php:252 -#: widget/ShMap.widget.php:80 -msgid "Height" -msgstr "Höhe" - -#: class/ShMapper.class.php:137 class/ShMapPointType.class.php:131 -#: class/ShMapPointType.class.php:187 class/ShmMap.class.php:257 -msgid "Width" -msgstr "Breite" - -#: class/ShMapper.class.php:136 class/ShmMap.class.php:107 -#: class/ShmMap.class.php:316 -msgid "Export csv" -msgstr "csv exportieren" - -#: class/ShMapper.class.php:135 class/ShmMap.class.php:338 -msgid "Filters exists" -msgstr "Filter vorhanden" - -#: class/ShMapper.class.php:134 class/ShmMap.class.php:112 -#: class/ShmMap.class.php:327 -msgid "Legend exists" -msgstr "Legende vorhanden" - -#: class/ShMapper.class.php:126 class/ShMapper.class.php:133 -msgid "Zoom" -msgstr "Zoom" - -#: class/ShMapper.class.php:93 -msgid "edit Maps in page" -msgstr "Karten auf der Seite bearbeiten" - -#: class/ShMapper.class.php:87 -msgid "Maps" -msgstr "Karten" - -#: class/ShMapper.class.php:81 class/ShmMap.class.php:72 -#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 -msgid "add Map" -msgstr "Karte hinzufügen" - -#: class/ShMapper.class.php:75 class/ShMapper.class.php:389 -#: class/ShMapper.class.php:390 -msgid "Shmapper" -msgstr "shMapper" - -#: class/ShMapper.class.php:27 -msgid "Unknown error." -msgstr "Unbekannter Fehler" - -#: class/ShMapper.class.php:26 -msgid "Your request has been successfully registered." -msgstr "Ihre Anfrage wurde erfolgreich registriert." - -#: class/ShMapper.class.php:25 -msgid "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." -msgstr "Ich erteile dem Site-Administrator meine Zustimmung, meine personenbezogenen Daten gemäß dem Bundesgesetz vom 27. Juli 2006 N 152-ФЗ \"Über personenbezogene Daten\" einschließlich automatisierter Daten zu verarbeiten." - -#: class/ShmForm.class.php:574 -msgid "Your phone" -msgstr "Telefonnummer" - -#: class/ShmForm.class.php:564 -msgid "Your e-mail" -msgstr "E-Mail" - -#: class/ShmForm.class.php:553 -msgid "Your name" -msgstr "Name" - -#: class/ShmForm.class.php:520 -msgid "Drag icon and place it to map." -msgstr "Ziehen Sie das Icon und platzieren Sie es auf der Karte" - -#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 -#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 -#: class/ShmForm.class.php:578 -msgid "This required field" -msgstr "Dieses Feld ist erforderlich" - -#: class/ShmForm.class.php:436 -msgid "Сhoose files" -msgstr "Datei auswählen" - -#: class/ShmForm.class.php:378 -msgid "The name of the parameter that refers to this element" -msgstr "Der Name des Parameters, der auf dieses Element verweist" - -#: class/ShmForm.class.php:326 -msgid "enable" -msgstr "aktivieren" - -#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 -msgid "require" -msgstr "erforderlich" - -#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 -msgid "Delete me" -msgstr "Lösch mich" - -#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 -msgid "Add after" -msgstr "Nachher hinzufügen" - -#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 -msgid "Add before" -msgstr "Vorher hinzufügen" - -#: class/ShmForm.class.php:231 -msgid "Element is required" -msgstr "Feld ist erforderlich" - -#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 -#: class/ShmForm.class.php:374 -msgid "write description" -msgstr "Beschreibung einfügen" - -#: class/ShmForm.class.php:223 class/ShmForm.class.php:295 -#: class/ShmForm.class.php:372 class/ShMapper.class.php:168 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 -msgid "Description" -msgstr "Beschreibung" - -#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 -#: class/ShmForm.class.php:361 -msgid "Placemark types" -msgstr "Markertypen" - -#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 -#: class/ShmForm.class.php:357 -msgid "write placeholder" -msgstr "Platzhalter einfügen" - -#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 -#: class/ShmForm.class.php:355 -msgid "Placeholder" -msgstr "Platzhalter" - -#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 -#: class/ShmForm.class.php:336 -msgid "write title" -msgstr "Titel einfügen" - -#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 -#: class/ShmForm.class.php:334 -msgid "Label of element" -msgstr "Elementbezeichnung" - -#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 -#: class/ShmForm.class.php:340 -msgid "Type of element" -msgstr "Typ des Elements" - -#: class/ShmForm.class.php:104 -msgid "enabled Map markers" -msgstr "verfügbare Marker" - -#: class/ShmForm.class.php:98 -msgid "input file" -msgstr "Bild hochladen" - -#: class/ShmForm.class.php:92 -msgid "textarea" -msgstr "Textfeld" - -#: class/ShmForm.class.php:62 -msgid "input text" -msgstr "Text eingeben" - -#: class/ShmForm.class.php:56 -msgid "input title" -msgstr "Titel eingeben" - -#: class/ShmForm.class.php:43 -msgid "Whrite description" -msgstr "Beschreibung hinzufügen" - -#: class/ShmForm.class.php:22 -msgid "Put a title" -msgstr "Titel eingeben" - -#: class/ShmForm.class.php:14 -msgid "Place the mark to Map" -msgstr "Marker platzieren" - -#: class/ShMapperRequest.class.php:360 -msgid "Trash" -msgstr "Papierkorb" - -#: class/ShMapperRequest.class.php:358 -msgid "Approve" -msgstr "zu genehmigen" - -#: class/ShMapperRequest.class.php:337 -msgid "You may see this %s" -msgstr "Hier zu sehen %s" - -#: class/ShMapperRequest.class.php:335 -msgid "<%s> Request to your Map from [%s] [%s]" -msgstr "<%s> Neue Kartenanfrage von [%s] [%s]" - -#: class/ShMapperRequest.class.php:327 -msgid "Uknown User" -msgstr "Unbekannter Benutzer" - -#: class/ShMapperRequest.class.php:88 class/ShMapper.class.php:123 -#: class/ShMapper.class.php:171 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:250 -msgid "Location" -msgstr "Adresse" - -#: class/ShMapperRequest.class.php:86 class/ShMapper.class.php:125 -#: class/ShMapper.class.php:132 class/ShMapper.class.php:170 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 -msgid "Longitude" -msgstr "Längengrad" - -#: class/ShMapperRequest.class.php:84 class/ShMapper.class.php:124 -#: class/ShMapper.class.php:131 class/ShMapper.class.php:169 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 -msgid "Latitude" -msgstr "Breitengrad" - -#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 -msgid "GEO location" -msgstr "Geo-Position" - -#: class/ShMapperRequest.class.php:67 class/ShMapper.class.php:174 -#: class/ShmMap.class.php:126 -msgid "Author" -msgstr "Autor" - -#: class/ShMapperRequest.class.php:64 -msgid "Approving" -msgstr "Genehmigung" - -#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 -msgid "Image" -msgstr "Bild" - -#: class/ShMapperRequest.class.php:29 -msgid "no found Map Request in trash" -msgstr "Keine Kartenanfrage im Papierkorb gefunden" - -#: class/ShMapperRequest.class.php:28 -msgid "Map Request not found" -msgstr "Anfrage nicht gefunden" - -#: class/ShMapperRequest.class.php:27 -msgid "search Map Request" -msgstr "Kartenanfrage suchen" - -#: class/ShMapperRequest.class.php:26 -msgid "view Map Request" -msgstr "Kartenanfrage ansehen" - -#: class/ShMapperRequest.class.php:25 class/ShMapperRequest.class.php:30 -#: class/ShMapper.class.php:112 -msgid "all Map Requests" -msgstr "Alle Kartenanfragen" - -#: class/ShMapperRequest.class.php:23 -msgid "edit Map Request" -msgstr "Kartenanfrage bearbeiten" - -#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 -#: class/ShMapperRequest.class.php:24 -msgid "add Map Request" -msgstr "Neu hinzufügen" - -#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 -msgid "Map Request" -msgstr "Kartenanfrage" - -#: class/ShMapper_ajax.class.php:456 class/ShMapper_ajax.class.php:467 -msgid "Set key" -msgstr "Schlüssel setzen" - -#: class/ShMapper_ajax.class.php:396 -msgid "Change Vocabulaty: " -msgstr "Textbausteine ändern: " - -#: class/ShMapper_ajax.class.php:357 -msgid "Create" -msgstr "Erstellen" - -#: class/ShMapper_ajax.class.php:355 -msgid "add Map Point" -msgstr "Marker hinzugefügt" - -#: class/ShMapper_ajax.class.php:339 -msgid "Delete" -msgstr "Löschen" - -#: class/ShMapper_ajax.class.php:337 -msgid "Are you want delete %s?" -msgstr "Möchten Sie %s löschen?" - -#: class/ShMapper_ajax.class.php:232 -msgid "Request put to Trash" -msgstr "Anfrage in Papierkorb verschoben" - -#: class/ShMapper_ajax.class.php:220 -msgid "Approve succesfully and insert new Map marker" -msgstr "Genehmigt. Marker erstellt" - -#: class/ShMapper_ajax.class.php:206 -msgid "Wizzard restarted" -msgstr "Assistent wird neugestartet" - -#: class/ShMapper_ajax.class.php:195 -msgid "Wizzard closed" -msgstr "Assistent geschlossen" - -#: class/ShMapper_ajax.class.php:177 -msgid "Congratulation! That's all!" -msgstr "Glückwunsch! Das ist alles!" - -#: class/ShMapper_ajax.class.php:170 class/ShMapper.class.php:605 -msgid "Next step" -msgstr "Nächster Schritt" - -#: shortcode/shmMap.shortcode.php:43 -msgid "Send request" -msgstr "Anfrage senden" - -#: shortcode/shmMap.shortcode.php:19 -msgid "No map on ID " -msgstr "Karten-ID nicht angegeben" - -#. Author URI of the plugin -msgid "https://te-st.ru" -msgstr "https://te-st.ru" - -#. Author of the plugin -msgid "Teplitsa. Technologies for Social Good" -msgstr "Teplitsa. Technologies for Social Good" - -#. Description of the plugin -msgid "Location and logistics services for NKO" -msgstr "Location and logistics services for NKO" - -#. Plugin URI of the plugin -msgid "http://genagl.ru/?p=652" -msgstr "http://genagl.ru/?p=652" - -#. Plugin Name of the plugin -msgid "ShMapper by Teplitsa" -msgstr "ShMapper by Teplitsa" - -msgid "Yandex.Maps API key Saved" -msgstr "Yandey.Maps API Schlüssel gespeichert" - -msgid "Yandex.Maps API Key" -msgstr "Yandex.Maps API Schlüssel" - -msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." -msgstr "ACHTUNG: Sie müssen einen Schlüssel angeben, um die Yandex.Maps API benutzen zu können." - -msgid "Learn more here:" -msgstr "Mehr Informationen:" - -msgid "Yandex.Maps" -msgstr "Yandex.Maps" diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo deleted file mode 100644 index 3e9a8e9999e04cf50f1115b10215f555ca212116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22718 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 Df(5TK diff --git a/languages/shmapper-by-teplitsa-ru_RU.po b/languages/shmapper-by-teplitsa-ru_RU.po deleted file mode 100644 index e788d7e..0000000 --- a/languages/shmapper-by-teplitsa-ru_RU.po +++ /dev/null @@ -1,996 +0,0 @@ -# Translation of Plugins - shMapper by Teplitsa - Development (trunk) in Russian -# This file is distributed under the same license as the Plugins - shMapper by Teplitsa - Development (trunk) package. -msgid "" -msgstr "" -"PO-Revision-Date: 2019-09-04 06:14:53+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: GlotPress/2.4.0-alpha\n" -"Language: ru\n" -"Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" - -#: class/ShmAdminPage.class.php:27 -msgid "shMapper developers chat" -msgstr "Чат разработчиков shMapper" - -#: class/ShmForm.class.php:497 -msgid "Drag choosed icon and place it to map or click it and enter exact address." -msgstr "Перетащите выбранную иконку в нужное место Карты или кликните по ней и введите точный адрес." - -#: assets/js/ShMapper.front.js:9 -msgid "Error: no map" -msgstr "Ошибка: нет карты" - -#: widget/ShMap.widget.php:64 -msgid "Tite" -msgstr "Название" - -#: widget/ShMap.widget.php:17 -msgid "Player Cabinet" -msgstr "Кабинет" - -#: widget/ShMap.widget.php:16 -msgid "Ermak Locations" -msgstr "Области Ermak" - -#: widget/ShMap.widget.php:9 -msgid "Shmapper Locations" -msgstr "Области Shmapper" - -#: tpl/shmMap.php:83 -msgid "download %s.csv" -msgstr "скачать %s.csv" - -#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 -msgid "Submit" -msgstr "Отправить" - -#: tpl/input_file_form.php:77 -msgid "Insert" -msgstr "Вставить" - -#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 -msgid "Remove" -msgstr "Удалить" - -#: tpl/input_file_form.php:72 -msgid "Browse" -msgstr "Просмотр" - -#: tpl/input_file_form.php:66 -msgid "File" -msgstr "Файл" - -#: tpl/input_file_form.php:64 -msgid "Upload Image" -msgstr "Загрузить изображение" - -#: class/ShmPoint.class.php:312 -msgid "Address" -msgstr "Адрес" - -#: class/ShmPoint.class.php:158 -msgid "Map owner" -msgstr "Родительская карта" - -#: class/ShmPoint.class.php:33 -msgid "no found Map marker in trash" -msgstr "Маркеры в корзине не найдены" - -#: class/ShmPoint.class.php:32 -msgid "Map marker not found" -msgstr "Маркер не найден" - -#: class/ShmPoint.class.php:31 -msgid "search Map marker" -msgstr "искать Маркер" - -#: class/ShmPoint.class.php:30 -msgid "view Map marker" -msgstr "смотреть Маркер" - -#: class/ShmPoint.class.php:29 -msgid "all Map markers" -msgstr "Маркеры" - -#: class/ShmPoint.class.php:27 -msgid "edit Map marker" -msgstr "редактировать Маркер" - -#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 -#: class/ShmPoint.class.php:28 -msgid "add Map marker" -msgstr "Добавить новый" - -#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 -msgid "Map marker" -msgstr "Маркер" - -#: class/ShMapper_Assistants.class.php:90 -msgid "Your requests to this Map " -msgstr "Ваши запросы к этой карте" - -#: class/ShMapper_Assistants.class.php:44 -msgid "all maps" -msgstr "все карты" - -#: class/SMC_Post.php:631 class/SMC_Post.php:636 -msgid "Parameters" -msgstr "Параметры" - -#: class/SMC_Post.php:566 -msgid "Yes" -msgstr "Да" - -#: class/SMC_Post.php:563 -msgid "No" -msgstr "Нет" - -#: class/SMC_Post.php:560 -msgid "— No Change —" -msgstr "— Без изменений —" - -#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 -#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 -msgid "Usage in Maps: " -msgstr "Используется в Картах: " - -#: class/ShmMap.class.php:780 -msgid "Succesfuly delete map and %s points migrates to %s" -msgstr "Карта успешно удалена и %s точек перенесено в %s" - -#: class/ShmMap.class.php:773 -msgid "Succesfuly delete map and %s points are orphans now" -msgstr "Карта успешно удалена и %s точек сейчас не привязаны ни к какой карте" - -#: class/ShmMap.class.php:768 -msgid "Succesfuly delete map width %s points" -msgstr "Карта успешно удалена с %s точками" - -#: class/ShmMap.class.php:682 -msgid "Switch all Points to anover Map" -msgstr "Перенести все Маркеры на другую Карту" - -#: class/ShmMap.class.php:676 -msgid "Escape all Points without Owner Map" -msgstr "Оставить все Маркеры без родительской Карты" - -#: class/ShmMap.class.php:670 -msgid "Delete all Points" -msgstr "Удалить все Маркеры" - -#: class/ShmMap.class.php:665 -msgid "What do with placemarks of deleting Map?" -msgstr "Что делать с Маркерами удаляемой Карты?" - -#: class/ShmMap.class.php:521 class/SMC_Post.php:496 -msgid "Double" -msgstr "Дублировать" - -#: class/ShmMap.class.php:450 -msgid "Personal email" -msgstr "Адрес электронной почты" - -#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 -#: class/ShmMap.class.php:471 -msgid "Required" -msgstr "Обязателен" - -#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 -#: class/ShmMap.class.php:461 -msgid "Include" -msgstr "Включать" - -#: class/ShmMap.class.php:426 -msgid "2.5. What data users will have to put?" -msgstr "2.5. Какие данные пользователи должны будут ставить?" - -#: class/ShmMap.class.php:418 -msgid "2.4. Can users leave their contact information?" -msgstr "2.4. Могут ли пользователи оставлять свою контактную информацию?" - -#: class/ShmMap.class.php:409 -msgid "You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;" -msgstr "Вы можете создавать собственные формы, используя элементы формы: «Строка текста», «Поле текста», «Загрузка файлов», «Категории Маркеров»" - -#: class/ShmMap.class.php:406 -msgid "2.3. What information can users enter?" -msgstr "2.3. Какую информацию могут вводить пользователи?" - -#: class/ShmMap.class.php:398 -msgid "2.2. Will I notify the author about new posts?" -msgstr "2.2. Оповещать ли автора Карты о новых сообщениях?" - -#: class/ShmMap.class.php:392 -msgid "For example «All beaches by the river»" -msgstr "Например «Все пляжи у реки»" - -#: class/ShmMap.class.php:388 -msgid "2.1. What is the name of your information form?" -msgstr "2.1. Как называется Ваша форма сбора информации?" - -#: class/ShmMap.class.php:383 -msgid "Enable crowdsourcing function (free add Users new Markers)" -msgstr "Включить функцию краудсорсинга (свободного добавления Пользователями новых Маркеров) " - -#: class/ShmMap.class.php:351 -msgid "Recommended size is 64х64 px, format is .png" -msgstr "Рекомендуемый размер: 64х64 pxб формат .png" - -#: class/ShmMap.class.php:346 -msgid "1.7. Default Marker icon" -msgstr "1.7. Иконка маркера по умолчанию" - -#: class/ShmMap.class.php:335 -msgid "1.6. Will Marker type filter be displayed?" -msgstr "1.6. Будет ли отображаться панель фильтрации по типам Маркеров?" - -#: class/ShmMap.class.php:324 -msgid "1.5. Will the legend be displayed?" -msgstr "1.5. Будет ли отображаться легенда?" - -#: class/ShmMap.class.php:313 -msgid "1.4. May User download data in *.csv?" -msgstr "1.4. Можно ли скачать данные карты в формате .csv?" - -#: class/ShmMap.class.php:299 -msgid "Choose layers" -msgstr "Выбор типа визуализации слоя" - -#: class/ShmMap.class.php:277 -msgid "Map zoom slider enabled" -msgstr "Ползунок масштаба" - -#: class/ShmMap.class.php:269 -msgid "1.3. Include interface" -msgstr "1.3. Какие элементы управления картой должны присутствовать?" - -#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 -msgid "Empty for " -msgstr "Оставьте пустым, чтобы было " - -#: class/ShmMap.class.php:249 -msgid "1.2. Set size for map's div (per pixels)" -msgstr "1.2. Установите размер окна карты (в пикселях)" - -#: class/ShmMap.class.php:237 -msgid "1.1. Pan map and choose zoom" -msgstr "1.1. Отцентрируйте карту и выберите масштаб" - -#: class/ShmMap.class.php:212 -msgid "Step 2. May anover Users add information for Map." -msgstr "Шаг 2. Смогут ли другие пользователи добавлять информацию на Вашу карту?" - -#: class/ShmMap.class.php:198 -msgid "You can insert a card into a post or page by copying this shortcode." -msgstr "Вы сможете вставить карту в запись или страницу скопировав этот шорткод" - -#: class/ShmMap.class.php:186 -msgid "Including Map to post" -msgstr "Вставка карты в звпись" - -#: class/ShmMap.class.php:162 -msgid "only request form" -msgstr "только Форма запроса" - -#: class/ShmMap.class.php:153 -msgid "only map" -msgstr "только карта" - -#: class/ShmMap.class.php:145 -msgid "include all (map and request form)" -msgstr "включено все(карта и Форма запроса)" - -#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 -msgid "Map markers" -msgstr "Маркеры" - -#: class/ShmMap.class.php:124 -msgid "shortcodes" -msgstr "шорткоды" - -#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 -msgid "ID" -msgstr "ID" - -#: class/ShmMap.class.php:80 -msgid "no found Map in trash" -msgstr "Карт в корзине не найдено" - -#: class/ShmMap.class.php:79 -msgid "Map not found" -msgstr "Карт не найдено" - -#: class/ShmMap.class.php:78 -msgid "search Map" -msgstr "искать Карту" - -#: class/ShmMap.class.php:77 -msgid "view Map" -msgstr "смотреть Карту" - -#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 -msgid "all Maps" -msgstr "Карты" - -#: class/ShmMap.class.php:74 -msgid "edit Map" -msgstr "редактировать Карту" - -#: class/ShmMap.class.php:65 -msgid "Step 1. Set up your map." -msgstr "Шаг 1. Настройте Вашу карту" - -#: class/ShMapPointType.class.php:358 -msgid "None" -msgstr "Никакой" - -#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 -msgid "Color" -msgstr "Цвет" - -#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 -#: class/ShMapPointType.class.php:197 -msgid "Icon" -msgstr "Иконка" - -#: class/ShMapPointType.class.php:86 -msgid "Name" -msgstr "Название" - -#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 -msgid "Map marker types" -msgstr "Типы маркеров" - -#: class/ShMapPointType.class.php:49 -msgid "Unique type of every Map markers" -msgstr "Уникальный тип каждого маркера карты" - -#: class/ShMapPointType.class.php:42 -msgid "new Map marker type name" -msgstr "название нового Типа маркеров" - -#: class/ShMapPointType.class.php:41 -msgid "add Map marker type" -msgstr "Добавить новый" - -#: class/ShMapPointType.class.php:40 -msgid "update Map marker type" -msgstr "обновить Тип маркера" - -#: class/ShMapPointType.class.php:39 -msgid "edit Map marker type" -msgstr "редактировать Тип маркера" - -#: class/ShMapPointType.class.php:38 -msgid "parent Map marker type:" -msgstr "Тип маркера родительской карты:" - -#: class/ShMapPointType.class.php:37 -msgid "parent Map marker type" -msgstr "родительский Тип маркера" - -#: class/ShMapPointType.class.php:36 -msgid "view Map marker type" -msgstr "смотреть Тип маркера" - -#: class/ShMapPointType.class.php:35 -msgid "all Map marker types" -msgstr "все Типы маркеров" - -#: class/ShMapPointType.class.php:34 -msgid "Search Map marker type" -msgstr "искать Тип маркера" - -#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 -#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 -msgid "Map marker type" -msgstr "Тип маркера" - -#: class/ShMapper.class.php:607 -msgid "Prevous step" -msgstr "Предыдущий шаг" - -#: class/ShMapper.class.php:602 class/ShMapper.class.php:608 -msgid "Go to current page" -msgstr "На текущую страницу" - -#: class/ShMapper.class.php:601 class/ShMapper.class.php:609 -msgid "Close wizzard" -msgstr "Закрыть навсегда" - -#: class/ShMapper.class.php:559 -msgid "Restart wizzard" -msgstr "Перезапустить Мастер" - -#: class/ShMapper.class.php:556 -msgid "Wizzard" -msgstr "Мастер" - -#: class/ShMapper.class.php:544 -msgid "Error send map request" -msgstr "Сообщение об ошибки регистрации запроса на Маркер" - -#: class/ShMapper.class.php:538 -msgid "Successful send map request" -msgstr "Сообщение об успешной регистрации запроса на Маркер" - -#: class/ShMapper.class.php:532 -msgid "Save personal data garantee" -msgstr "Гарантия сохранения персональных данных" - -#: class/ShMapper.class.php:528 -msgid "Vocabulary" -msgstr "Словарь" - -#: class/ShMapper.class.php:516 -msgid "Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha" -msgstr "Ваша Капча пока не работает. Для включения этой функции получите ключи API на google.com/recaptch" - -#: class/ShMapper.class.php:512 -msgid "What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s." -msgstr "Что такое Google reCAPTCHA? Как получить ключи для сайта? Смотрите %sэту инстукцию%s." - -#: class/ShMapper.class.php:503 -msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" -msgstr "Включать капчу в форме (плагин использует только ключи reCAPTCHA v2)" - -#: class/ShMapper.class.php:496 -msgid "Protection" -msgstr "Защита" - -#: class/ShMapper.class.php:484 -msgid "Reload page after User send request." -msgstr "Перегрузить страницу после того, как юзер отправил форму запроса" - -#: class/ShMapper.class.php:476 -msgid "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" -msgstr "ВНИМАНИЕ: отключить эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" - -#: class/ShMapper.class.php:472 -msgid "все сообщения будут добавляться в статусе «Черновик»" -msgstr "все сообщения будут добавляться в статусе «Черновик»" - -#: class/ShMapper.class.php:468 -msgid "Pre-modertion from Map owner." -msgstr "Премодерация со стороны владельца Карты." - -#: class/ShMapper.class.php:460 -msgid "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." -msgstr "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." - -#: class/ShMapper.class.php:456 -msgid "Включить глобальный режим неинтерактивных карт" -msgstr "Включить глобальный режим неинтерактивных карт" - -#: class/ShMapper.class.php:448 -msgid "Interactive" -msgstr "Интерактив" - -#: class/ShMapper.class.php:439 -msgid "Open Street Map" -msgstr "Open Street Map" - -#: class/ShMapper.class.php:433 -msgid "Yandex Map" -msgstr "Яндекс карты" - -#: class/ShMapper.class.php:426 -msgid "Map API" -msgstr "API карт" - -#: class/ShMapper.class.php:402 class/ShMapper.class.php:403 -#: class/ShMapper.class.php:417 -msgid "Settings" -msgstr "Настройки" - -#: class/ShMapper.class.php:276 assets/js/ShMapper.admin.js:155 -msgid "Are you shure?" -msgstr "Вы уверены?" - -#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 -msgid "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match" -msgstr "Ошибка: форма не связана с картой. Чтобы связать карту и форму, на одной странице должно быть 2 шорткода (карта - [shmMap id='6' map='true' uniq='например, 777'] и форма - [shmMap id='94' form='true' uniq='например, 777']), у которых параметр uniq будет совпадать" - -#: class/ShMapper.class.php:274 class/ShMapper.class.php:370 -#: assets/js/ShMapper.js:391 -msgid "Close" -msgstr "Закрыть" - -#: class/ShMapper.class.php:273 class/ShMapper.class.php:369 -msgid "Send" -msgstr "Послать" - -#: class/ShMapper.class.php:272 class/ShMapper.class.php:368 -#: assets/js/ShMapper.js:381 -msgid "Attantion" -msgstr "Внимание" - -#: class/ShMapper.class.php:178 -msgid "Accessed User" -msgstr "Доступ пользователя" - -#: class/ShMapper.class.php:177 -msgid "Aprove date" -msgstr "Утвержденная дата" - -#: class/ShMapper.class.php:176 -msgid "Aproved" -msgstr "Одобрен" - -#: class/ShMapper.class.php:175 -msgid "Contacts" -msgstr "Контакты" - -#: class/ShMapper.class.php:173 -msgid "Session" -msgstr "Сессия" - -#: class/ShMapper.class.php:172 class/ShmPoint.class.php:231 -#: class/ShmPoint.class.php:308 -msgid "Type" -msgstr "Тип" - -#: class/ShMapper.class.php:167 class/ShmMap.class.php:103 -#: class/ShmMap.class.php:596 class/SMC_Post.php:370 -#: class/ShmPoint.class.php:300 -msgid "Title" -msgstr "Название" - -#: class/ShMapper.class.php:166 class/ShmMap.class.php:70 -#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 -msgid "Map" -msgstr "Карта" - -#: class/ShMapper.class.php:160 -msgid "Required Personal phone" -msgstr "Требуется личный телефон" - -#: class/ShMapper.class.php:159 class/ShmMap.class.php:466 -msgid "Personal phone" -msgstr "Телефон" - -#: class/ShMapper.class.php:158 -msgid "Unclude Personal phone" -msgstr "Включить личный телефон" - -#: class/ShMapper.class.php:157 -msgid "Required Personal e-mail" -msgstr "Требуется личный e-mail" - -#: class/ShMapper.class.php:156 -msgid "Personal e-mail" -msgstr "Личный e-mail" - -#: class/ShMapper.class.php:155 -msgid "Unclude Personal e-mail" -msgstr "Включить личный телефон e-mail" - -#: class/ShMapper.class.php:154 -msgid "Required Personal name" -msgstr "Обязательно личное имя" - -#: class/ShMapper.class.php:153 class/ShmMap.class.php:434 -msgid "Personal name" -msgstr "Имя" - -#: class/ShMapper.class.php:152 -msgid "Unclude Personal name" -msgstr "Включить личное имя" - -#: class/ShMapper.class.php:151 class/ShmMap.class.php:421 -msgid "Users can leave their contact details for feedback." -msgstr "Пользователи могут оставлять свои контактные данные для обратной связи" - -#: class/ShMapper.class.php:150 -msgid "Form generator" -msgstr "Генератор форм" - -#: class/ShMapper.class.php:149 -msgid "Form Title" -msgstr "Заголовок Формы" - -#: class/ShMapper.class.php:148 class/ShmMap.class.php:122 -#: class/ShmMap.class.php:401 -msgid "Notify owner of Map" -msgstr "Присылать уведомления о новых картах автору" - -#: class/ShMapper.class.php:147 class/ShmMap.class.php:117 -msgid "Form exists" -msgstr "Форма присутствует" - -#: class/ShMapper.class.php:145 -msgid "Default Marker icon" -msgstr "Иконка маркера по умолчанию" - -#: class/ShMapper.class.php:144 class/ShmMap.class.php:291 -msgid "Formating Marker to cluster" -msgstr "Укладывать маркеры карты в кластеры" - -#: class/ShMapper.class.php:143 class/ShmMap.class.php:295 -msgid "Lock zoom and drag" -msgstr "Заблокировать перетаскивание карты и изменение размера средним колёсиком мышы" - -#: class/ShMapper.class.php:142 class/ShmMap.class.php:281 -msgid "Map layer switcher" -msgstr "Переключатель слоев карты" - -#: class/ShMapper.class.php:141 -msgid "Map zoom slider" -msgstr "Слайдер масштаба" - -#: class/ShMapper.class.php:140 class/ShmMap.class.php:287 -msgid "Map full screen" -msgstr "Полноэкранный режим" - -#: class/ShMapper.class.php:139 class/ShmMap.class.php:273 -msgid "Map search" -msgstr "Поиск по карте" - -#: class/ShMapper.class.php:138 class/ShMapPointType.class.php:125 -#: class/ShMapPointType.class.php:177 class/ShmMap.class.php:252 -#: widget/ShMap.widget.php:80 -msgid "Height" -msgstr "Высота" - -#: class/ShMapper.class.php:137 class/ShMapPointType.class.php:131 -#: class/ShMapPointType.class.php:187 class/ShmMap.class.php:257 -msgid "Width" -msgstr "Ширина" - -#: class/ShMapper.class.php:136 class/ShmMap.class.php:107 -#: class/ShmMap.class.php:316 -msgid "Export csv" -msgstr "Загрузка сводки в формате csv" - -#: class/ShMapper.class.php:135 class/ShmMap.class.php:338 -msgid "Filters exists" -msgstr "Панель фильтров присутствует" - -#: class/ShMapper.class.php:134 class/ShmMap.class.php:112 -#: class/ShmMap.class.php:327 -msgid "Legend exists" -msgstr "Легенда присутствует" - -#: class/ShMapper.class.php:126 class/ShMapper.class.php:133 -msgid "Zoom" -msgstr "Увеличение" - -#: class/ShMapper.class.php:93 -msgid "edit Maps in page" -msgstr "редактировать Карты на странице" - -#: class/ShMapper.class.php:87 -msgid "Maps" -msgstr "Карты" - -#: class/ShMapper.class.php:81 class/ShmMap.class.php:72 -#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 -msgid "add Map" -msgstr "Добавить новую" - -#: class/ShMapper.class.php:75 class/ShMapper.class.php:389 -#: class/ShMapper.class.php:390 -msgid "Shmapper" -msgstr "shMapper" - -#: class/ShMapper.class.php:27 -msgid "Unknown error." -msgstr "Неизвестная ошибка." - -#: class/ShMapper.class.php:26 -msgid "Your request has been successfully registered." -msgstr "Ваш запрос успешно зарегистрирован." - -#: class/ShMapper.class.php:25 -msgid "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." -msgstr "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." - -#: class/ShmForm.class.php:574 -msgid "Your phone" -msgstr "Ваш номер телефона" - -#: class/ShmForm.class.php:564 -msgid "Your e-mail" -msgstr "Ваш e-mail" - -#: class/ShmForm.class.php:553 -msgid "Your name" -msgstr "Ваше имя" - -#: class/ShmForm.class.php:520 -msgid "Drag icon and place it to map." -msgstr "Перетащите иконку в нужное место Карты" - -#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 -#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 -#: class/ShmForm.class.php:578 -msgid "This required field" -msgstr "Обязательно для заполнения" - -#: class/ShmForm.class.php:436 -msgid "Сhoose files" -msgstr "Выберите файл" - -#: class/ShmForm.class.php:378 -msgid "The name of the parameter that refers to this element" -msgstr "Имя параметра, который ссылается на этот элемент" - -#: class/ShmForm.class.php:326 -msgid "enable" -msgstr "доступно" - -#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 -msgid "require" -msgstr "обязательно" - -#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 -msgid "Delete me" -msgstr "Удали меня" - -#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 -msgid "Add after" -msgstr "Добавить после" - -#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 -msgid "Add before" -msgstr "Добавить перед" - -#: class/ShmForm.class.php:231 -msgid "Element is required" -msgstr "Элемент обязателен к заполнению" - -#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 -#: class/ShmForm.class.php:374 -msgid "write description" -msgstr "напишите описание" - -#: class/ShmForm.class.php:223 class/ShmForm.class.php:295 -#: class/ShmForm.class.php:372 class/ShMapper.class.php:168 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 -msgid "Description" -msgstr "Описание" - -#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 -#: class/ShmForm.class.php:361 -msgid "Placemark types" -msgstr "Типы маркеров" - -#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 -#: class/ShmForm.class.php:357 -msgid "write placeholder" -msgstr "напишите плейсхолдер" - -#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 -#: class/ShmForm.class.php:355 -msgid "Placeholder" -msgstr "Заполнитель" - -#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 -#: class/ShmForm.class.php:336 -msgid "write title" -msgstr "напишите заголовок" - -#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 -#: class/ShmForm.class.php:334 -msgid "Label of element" -msgstr "Лейбл элемента" - -#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 -#: class/ShmForm.class.php:340 -msgid "Type of element" -msgstr "Тип элемента" - -#: class/ShmForm.class.php:104 -msgid "enabled Map markers" -msgstr "доступные маркеры" - -#: class/ShmForm.class.php:98 -msgid "input file" -msgstr "загрузка картинки" - -#: class/ShmForm.class.php:92 -msgid "textarea" -msgstr "текстовый блок" - -#: class/ShmForm.class.php:62 -msgid "input text" -msgstr "текстовая строка" - -#: class/ShmForm.class.php:56 -msgid "input title" -msgstr "напишите заголовок" - -#: class/ShmForm.class.php:43 -msgid "Whrite description" -msgstr "Напишите комментарий" - -#: class/ShmForm.class.php:22 -msgid "Put a title" -msgstr "Укажите название" - -#: class/ShmForm.class.php:14 -msgid "Place the mark to Map" -msgstr "Укажите место" - -#: class/ShMapperRequest.class.php:360 -msgid "Trash" -msgstr "Корзина" - -#: class/ShMapperRequest.class.php:358 -msgid "Approve" -msgstr "Одобрить" - -#: class/ShMapperRequest.class.php:337 -msgid "You may see this %s" -msgstr "Вы можете посмотреть его здесь %s" - -#: class/ShMapperRequest.class.php:335 -msgid "<%s> Request to your Map from [%s] [%s]" -msgstr "<%s> Новый карт-запрос от [%s] [%s]" - -#: class/ShMapperRequest.class.php:327 -msgid "Uknown User" -msgstr "некто Имярек" - -#: class/ShMapperRequest.class.php:88 class/ShMapper.class.php:123 -#: class/ShMapper.class.php:171 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:250 -msgid "Location" -msgstr "Адрес" - -#: class/ShMapperRequest.class.php:86 class/ShMapper.class.php:125 -#: class/ShMapper.class.php:132 class/ShMapper.class.php:170 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 -msgid "Longitude" -msgstr "Долгота" - -#: class/ShMapperRequest.class.php:84 class/ShMapper.class.php:124 -#: class/ShMapper.class.php:131 class/ShMapper.class.php:169 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 -msgid "Latitude" -msgstr "Широта" - -#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 -msgid "GEO location" -msgstr "гео-позиция" - -#: class/ShMapperRequest.class.php:67 class/ShMapper.class.php:174 -#: class/ShmMap.class.php:126 -msgid "Author" -msgstr "Автор" - -#: class/ShMapperRequest.class.php:64 -msgid "Approving" -msgstr "Одобрение" - -#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 -msgid "Image" -msgstr "Изображение" - -#: class/ShMapperRequest.class.php:29 -msgid "no found Map Request in trash" -msgstr "Карт-запросы в корзине не найдены" - -#: class/ShMapperRequest.class.php:28 -msgid "Map Request not found" -msgstr "Запрос не найден" - -#: class/ShMapperRequest.class.php:27 -msgid "search Map Request" -msgstr "искать Карт-запрос" - -#: class/ShMapperRequest.class.php:26 -msgid "view Map Request" -msgstr "смотреть Карт-запрос" - -#: class/ShMapperRequest.class.php:25 class/ShMapperRequest.class.php:30 -#: class/ShMapper.class.php:112 -msgid "all Map Requests" -msgstr "Карт-запросы" - -#: class/ShMapperRequest.class.php:23 -msgid "edit Map Request" -msgstr "редактировать Карт-запрос" - -#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 -#: class/ShMapperRequest.class.php:24 -msgid "add Map Request" -msgstr "Добавить новый" - -#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 -msgid "Map Request" -msgstr "Карт-запрос" - -#: class/ShMapper_ajax.class.php:456 class/ShMapper_ajax.class.php:467 -msgid "Set key" -msgstr "Ключ установлен" - -#: class/ShMapper_ajax.class.php:396 -msgid "Change Vocabulaty: " -msgstr "Изменён словарь: " - -#: class/ShMapper_ajax.class.php:357 -msgid "Create" -msgstr "Создать" - -#: class/ShMapper_ajax.class.php:355 -msgid "add Map Point" -msgstr "Маркер добавлен" - -#: class/ShMapper_ajax.class.php:339 -msgid "Delete" -msgstr "Удалить" - -#: class/ShMapper_ajax.class.php:337 -msgid "Are you want delete %s?" -msgstr "Хотите удалить карту %s?" - -#: class/ShMapper_ajax.class.php:232 -msgid "Request put to Trash" -msgstr "Запрос отправлен в корзину" - -#: class/ShMapper_ajax.class.php:220 -msgid "Approve succesfully and insert new Map marker" -msgstr "Одобрено. Маркер создан" - -#: class/ShMapper_ajax.class.php:206 -msgid "Wizzard restarted" -msgstr "Мастер запущен сызнова" - -#: class/ShMapper_ajax.class.php:195 -msgid "Wizzard closed" -msgstr "Мастер закрыт" - -#: class/ShMapper_ajax.class.php:177 -msgid "Congratulation! That's all!" -msgstr "Поздравляем! Это всё." - -#: class/ShMapper_ajax.class.php:170 class/ShMapper.class.php:605 -msgid "Next step" -msgstr "Следующий шаг" - -#: shortcode/shmMap.shortcode.php:43 -msgid "Send request" -msgstr "Отправить информацию" - -#: shortcode/shmMap.shortcode.php:19 -msgid "No map on ID " -msgstr "Не указан ID карты" - -#. Author URI of the plugin -msgid "https://te-st.ru" -msgstr "https://te-st.ru" - -#. Author of the plugin -msgid "Teplitsa. Technologies for Social Good" -msgstr "Теплица социальных технологий" - -#. Description of the plugin -msgid "Location and logistics services for NKO" -msgstr "Картографирование на службе НКО" - -#. Plugin URI of the plugin -msgid "http://genagl.ru/?p=652" -msgstr "http://genagl.ru/?p=652" - -#. Plugin Name of the plugin -msgid "ShMapper by Teplitsa" -msgstr "ShMapper by Teplitsa" - -msgid "Yandex.Maps API key Saved" -msgstr "Ключ API Яндекс.Карт сохранен" - -msgid "Yandex.Maps API Key" -msgstr "Ключ API Яндекс.Карт" - -msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." -msgstr "ВНИМАНИЕ: необходимо указать ключ для работы с API Яндекс.Карт." - -msgid "Learn more here:" -msgstr "Подробнее здесь:" - -msgid "Yandex.Maps" -msgstr "Яндекс.Карты" \ No newline at end of file diff --git a/languages/shmapper-by-teplitsa.pot b/languages/shmapper-by-teplitsa.pot deleted file mode 100644 index 19ee0ab..0000000 --- a/languages/shmapper-by-teplitsa.pot +++ /dev/null @@ -1,1043 +0,0 @@ -#, fuzzy -msgid "" -msgstr "" -"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -"Project-Id-Version: ShMapper by Teplitsa\n" -"POT-Creation-Date: 2020-06-22 07:31+0300\n" -"PO-Revision-Date: 2020-06-18 05:16+0300\n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-WPHeader: shmapper.php\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"X-Poedit-SearchPath-0: .\n" -"X-Poedit-SearchPathExcluded-0: *.js\n" - -#: class/SMC_Post.php:370 class/ShMapper.class.php:170 -#: class/ShmMap.class.php:103 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:300 -msgid "Title" -msgstr "" - -#: class/SMC_Post.php:496 class/ShmMap.class.php:521 -msgid "Double" -msgstr "" - -#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 -#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 -msgid "Usage in Maps: " -msgstr "" - -#: class/SMC_Post.php:560 -msgid "— No Change —" -msgstr "" - -#: class/SMC_Post.php:563 -msgid "No" -msgstr "" - -#: class/SMC_Post.php:566 -msgid "Yes" -msgstr "" - -#: class/SMC_Post.php:631 class/SMC_Post.php:636 -msgid "Parameters" -msgstr "" - -#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 -#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 -msgid "Map marker type" -msgstr "" - -#: class/ShMapPointType.class.php:34 -msgid "Search Map marker type" -msgstr "" - -#: class/ShMapPointType.class.php:35 -msgid "all Map marker types" -msgstr "" - -#: class/ShMapPointType.class.php:36 -msgid "view Map marker type" -msgstr "" - -#: class/ShMapPointType.class.php:37 -msgid "parent Map marker type" -msgstr "" - -#: class/ShMapPointType.class.php:38 -msgid "parent Map marker type:" -msgstr "" - -#: class/ShMapPointType.class.php:39 -msgid "edit Map marker type" -msgstr "" - -#: class/ShMapPointType.class.php:40 -msgid "update Map marker type" -msgstr "" - -#: class/ShMapPointType.class.php:41 -msgid "add Map marker type" -msgstr "" - -#: class/ShMapPointType.class.php:42 -msgid "new Map marker type name" -msgstr "" - -#: class/ShMapPointType.class.php:49 -msgid "Unique type of every Map markers" -msgstr "" - -#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 -msgid "Map marker types" -msgstr "" - -#: class/ShMapPointType.class.php:86 -msgid "Name" -msgstr "" - -#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 -#: class/ShMapPointType.class.php:197 -msgid "Icon" -msgstr "" - -#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 -msgid "Color" -msgstr "" - -#: class/ShMapPointType.class.php:125 class/ShMapPointType.class.php:177 -#: class/ShMapper.class.php:141 class/ShmMap.class.php:252 -#: widget/ShMap.widget.php:80 -msgid "Height" -msgstr "" - -#: class/ShMapPointType.class.php:131 class/ShMapPointType.class.php:187 -#: class/ShMapper.class.php:140 class/ShmMap.class.php:257 -msgid "Width" -msgstr "" - -#: class/ShMapPointType.class.php:358 -msgid "None" -msgstr "" - -#: class/ShMapper.class.php:26 -msgid "" -"Я даю свое согласие администратору сайта на обработку, в том числе " -"автоматизированную, своих персональных данных в соответствии с Федеральным " -"законом от 27.07.2006 N 152-ФЗ «О персональных данных»." -msgstr "" - -#: class/ShMapper.class.php:27 -msgid "Your request has been successfully registered." -msgstr "" - -#: class/ShMapper.class.php:28 -msgid "Unknown error." -msgstr "" - -#: class/ShMapper.class.php:78 class/ShMapper.class.php:392 -#: class/ShMapper.class.php:393 -msgid "Shmapper" -msgstr "" - -#: class/ShMapper.class.php:84 class/ShmMap.class.php:72 -#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 -msgid "add Map" -msgstr "" - -#: class/ShMapper.class.php:90 -msgid "Maps" -msgstr "" - -#: class/ShMapper.class.php:96 -msgid "edit Maps in page" -msgstr "" - -#: class/ShMapper.class.php:115 class/ShMapperRequest.class.php:25 -#: class/ShMapperRequest.class.php:30 -msgid "all Map Requests" -msgstr "" - -#: class/ShMapper.class.php:126 class/ShMapper.class.php:174 -#: class/ShMapperRequest.class.php:88 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:250 -msgid "Location" -msgstr "" - -#: class/ShMapper.class.php:127 class/ShMapper.class.php:134 -#: class/ShMapper.class.php:172 class/ShMapperRequest.class.php:84 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 -msgid "Latitude" -msgstr "" - -#: class/ShMapper.class.php:128 class/ShMapper.class.php:135 -#: class/ShMapper.class.php:173 class/ShMapperRequest.class.php:86 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 -msgid "Longitude" -msgstr "" - -#: class/ShMapper.class.php:129 class/ShMapper.class.php:136 -msgid "Zoom" -msgstr "" - -#: class/ShMapper.class.php:137 class/ShmMap.class.php:112 -#: class/ShmMap.class.php:327 -msgid "Legend exists" -msgstr "" - -#: class/ShMapper.class.php:138 class/ShmMap.class.php:338 -msgid "Filters exists" -msgstr "" - -#: class/ShMapper.class.php:139 class/ShmMap.class.php:107 -#: class/ShmMap.class.php:316 -msgid "Export csv" -msgstr "" - -#: class/ShMapper.class.php:142 class/ShmMap.class.php:273 -msgid "Map search" -msgstr "" - -#: class/ShMapper.class.php:143 class/ShmMap.class.php:287 -msgid "Map full screen" -msgstr "" - -#: class/ShMapper.class.php:144 -msgid "Map zoom slider" -msgstr "" - -#: class/ShMapper.class.php:145 class/ShmMap.class.php:281 -msgid "Map layer switcher" -msgstr "" - -#: class/ShMapper.class.php:146 class/ShmMap.class.php:295 -msgid "Lock zoom and drag" -msgstr "" - -#: class/ShMapper.class.php:147 class/ShmMap.class.php:291 -msgid "Formating Marker to cluster" -msgstr "" - -#: class/ShMapper.class.php:148 -msgid "Default Marker icon" -msgstr "" - -#: class/ShMapper.class.php:150 class/ShmMap.class.php:117 -msgid "Form exists" -msgstr "" - -#: class/ShMapper.class.php:151 class/ShmMap.class.php:122 -#: class/ShmMap.class.php:401 -msgid "Notify owner of Map" -msgstr "" - -#: class/ShMapper.class.php:152 -msgid "Form Title" -msgstr "" - -#: class/ShMapper.class.php:153 -msgid "Form generator" -msgstr "" - -#: class/ShMapper.class.php:154 class/ShmMap.class.php:421 -msgid "Users can leave their contact details for feedback." -msgstr "" - -#: class/ShMapper.class.php:155 -msgid "Unclude Personal name" -msgstr "" - -#: class/ShMapper.class.php:156 class/ShmMap.class.php:434 -msgid "Personal name" -msgstr "" - -#: class/ShMapper.class.php:157 -msgid "Required Personal name" -msgstr "" - -#: class/ShMapper.class.php:158 -msgid "Unclude Personal e-mail" -msgstr "" - -#: class/ShMapper.class.php:159 -msgid "Personal e-mail" -msgstr "" - -#: class/ShMapper.class.php:160 -msgid "Required Personal e-mail" -msgstr "" - -#: class/ShMapper.class.php:161 -msgid "Unclude Personal phone" -msgstr "" - -#: class/ShMapper.class.php:162 class/ShmMap.class.php:466 -msgid "Personal phone" -msgstr "" - -#: class/ShMapper.class.php:163 -msgid "Required Personal phone" -msgstr "" - -#: class/ShMapper.class.php:169 class/ShmMap.class.php:70 -#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 -msgid "Map" -msgstr "" - -#: class/ShMapper.class.php:171 class/ShmForm.class.php:223 -#: class/ShmForm.class.php:295 class/ShmForm.class.php:372 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 -msgid "Description" -msgstr "" - -#: class/ShMapper.class.php:175 class/ShmPoint.class.php:231 -#: class/ShmPoint.class.php:308 -msgid "Type" -msgstr "" - -#: class/ShMapper.class.php:176 -msgid "Session" -msgstr "" - -#: class/ShMapper.class.php:177 class/ShMapperRequest.class.php:67 -#: class/ShmMap.class.php:126 -msgid "Author" -msgstr "" - -#: class/ShMapper.class.php:178 -msgid "Contacts" -msgstr "" - -#: class/ShMapper.class.php:179 -msgid "Aproved" -msgstr "" - -#: class/ShMapper.class.php:180 -msgid "Aprove date" -msgstr "" - -#: class/ShMapper.class.php:181 -msgid "Accessed User" -msgstr "" - -#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 -msgid "Attantion" -msgstr "" - -#: class/ShMapper.class.php:276 class/ShMapper.class.php:372 -msgid "Send" -msgstr "" - -#: class/ShMapper.class.php:277 class/ShMapper.class.php:373 -msgid "Close" -msgstr "" - -#: class/ShMapper.class.php:278 class/ShMapper.class.php:374 -msgid "" -"Error: the form is not associated with the card. To link a map and a form, " -"there should be 2 shortcodes on one page (map - [shmMap id = '6' map = " -"'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' " -"uniq = 'for example, 777']), in which the uniq parameter will match" -msgstr "" - -#: class/ShMapper.class.php:279 -msgid "Are you shure?" -msgstr "" - -#: class/ShMapper.class.php:405 class/ShMapper.class.php:406 -#: class/ShMapper.class.php:420 -msgid "Settings" -msgstr "" - -#: class/ShMapper.class.php:429 -msgid "Map API" -msgstr "" - -#: class/ShMapper.class.php:436 -msgid "Yandex.Maps" -msgstr "" - -#: class/ShMapper.class.php:442 -msgid "OpenStreetMap" -msgstr "" - -#: class/ShMapper.class.php:450 -msgid "Yandex.Maps API Key" -msgstr "" - -#: class/ShMapper.class.php:452 -msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." -msgstr "" - -#: class/ShMapper.class.php:452 -msgid "Learn more here:" -msgstr "" - -#: class/ShMapper.class.php:463 -msgid "Interactive" -msgstr "" - -#: class/ShMapper.class.php:471 -msgid "Включить глобальный режим неинтерактивных карт" -msgstr "" - -#: class/ShMapper.class.php:475 -msgid "" -"пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " -"включена у карт даже не появляется блок интерактивности." -msgstr "" - -#: class/ShMapper.class.php:483 -msgid "Pre-modertion from Map owner." -msgstr "" - -#: class/ShMapper.class.php:487 -msgid "все сообщения будут добавляться в статусе «Черновик»" -msgstr "" - -#: class/ShMapper.class.php:491 -msgid "" -"ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует " -"угроза спам-атаки" -msgstr "" - -#: class/ShMapper.class.php:499 -msgid "Reload page after User send request." -msgstr "" - -#: class/ShMapper.class.php:511 -msgid "Protection" -msgstr "" - -#: class/ShMapper.class.php:518 -msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" -msgstr "" - -#: class/ShMapper.class.php:527 -#, php-format -msgid "" -"What is Google reCAPTCHA? How recived keys for your site? See %sthis " -"instruction%s." -msgstr "" - -#: class/ShMapper.class.php:531 -msgid "" -"Your reCAPTCHA doesn't work yet. In order to make it work, please get the " -"API keys at google.com/recaptcha" -msgstr "" - -#: class/ShMapper.class.php:543 -msgid "Vocabulary" -msgstr "" - -#: class/ShMapper.class.php:547 -msgid "Save personal data garantee" -msgstr "" - -#: class/ShMapper.class.php:553 -msgid "Successful send map request" -msgstr "" - -#: class/ShMapper.class.php:559 -msgid "Error send map request" -msgstr "" - -#: class/ShMapper.class.php:571 -msgid "Wizzard" -msgstr "" - -#: class/ShMapper.class.php:574 -msgid "Restart wizzard" -msgstr "" - -#: class/ShMapper.class.php:616 class/ShMapper.class.php:624 -msgid "Close wizzard" -msgstr "" - -#: class/ShMapper.class.php:617 class/ShMapper.class.php:623 -msgid "Go to current page" -msgstr "" - -#: class/ShMapper.class.php:620 class/ShMapper_ajax.class.php:170 -msgid "Next step" -msgstr "" - -#: class/ShMapper.class.php:622 -msgid "Prevous step" -msgstr "" - -#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 -msgid "Map Request" -msgstr "" - -#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 -#: class/ShMapperRequest.class.php:24 -msgid "add Map Request" -msgstr "" - -#: class/ShMapperRequest.class.php:23 -msgid "edit Map Request" -msgstr "" - -#: class/ShMapperRequest.class.php:26 -msgid "view Map Request" -msgstr "" - -#: class/ShMapperRequest.class.php:27 -msgid "search Map Request" -msgstr "" - -#: class/ShMapperRequest.class.php:28 -msgid "Map Request not found" -msgstr "" - -#: class/ShMapperRequest.class.php:29 -msgid "no found Map Request in trash" -msgstr "" - -#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 -msgid "Image" -msgstr "" - -#: class/ShMapperRequest.class.php:64 -msgid "Approving" -msgstr "" - -#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 -msgid "GEO location" -msgstr "" - -#: class/ShMapperRequest.class.php:327 -msgid "Uknown User" -msgstr "" - -#: class/ShMapperRequest.class.php:335 -#, php-format -msgid "<%s> Request to your Map from [%s] [%s]" -msgstr "" - -#: class/ShMapperRequest.class.php:337 -#, php-format -msgid "You may see this %s" -msgstr "" - -#: class/ShMapperRequest.class.php:358 -msgid "Approve" -msgstr "" - -#: class/ShMapperRequest.class.php:360 -msgid "Trash" -msgstr "" - -#: class/ShMapper_Assistants.class.php:44 -msgid "all maps" -msgstr "" - -#: class/ShMapper_Assistants.class.php:90 -msgid "Your requests to this Map " -msgstr "" - -#: class/ShMapper_ajax.class.php:177 -msgid "Congratulation! That's all!" -msgstr "" - -#: class/ShMapper_ajax.class.php:195 -msgid "Wizzard closed" -msgstr "" - -#: class/ShMapper_ajax.class.php:206 -msgid "Wizzard restarted" -msgstr "" - -#: class/ShMapper_ajax.class.php:220 -msgid "Approve succesfully and insert new Map marker" -msgstr "" - -#: class/ShMapper_ajax.class.php:232 -msgid "Request put to Trash" -msgstr "" - -#: class/ShMapper_ajax.class.php:337 -#, php-format -msgid "Are you want delete %s?" -msgstr "" - -#: class/ShMapper_ajax.class.php:339 -msgid "Delete" -msgstr "" - -#: class/ShMapper_ajax.class.php:355 -msgid "add Map Point" -msgstr "" - -#: class/ShMapper_ajax.class.php:357 -msgid "Create" -msgstr "" - -#: class/ShMapper_ajax.class.php:396 -msgid "Change Vocabulaty: " -msgstr "" - -#: class/ShMapper_ajax.class.php:416 -msgid "Yandex.Maps API key Saved" -msgstr "" - -#: class/ShMapper_ajax.class.php:427 -msgid "Users can add Placemarks" -msgstr "" - -#: class/ShMapper_ajax.class.php:437 -msgid "Pre-moderation on" -msgstr "" - -#: class/ShMapper_ajax.class.php:447 -msgid "Reload mode" -msgstr "" - -#: class/ShMapper_ajax.class.php:457 -msgid "captha added" -msgstr "" - -#: class/ShMapper_ajax.class.php:467 class/ShMapper_ajax.class.php:478 -msgid "Set key" -msgstr "" - -#: class/ShmAdminPage.class.php:27 -msgid "shMapper developers chat" -msgstr "" - -#: class/ShmForm.class.php:14 -msgid "Place the mark to Map" -msgstr "" - -#: class/ShmForm.class.php:22 -msgid "Put a title" -msgstr "" - -#: class/ShmForm.class.php:43 -msgid "Whrite description" -msgstr "" - -#: class/ShmForm.class.php:56 -msgid "input title" -msgstr "" - -#: class/ShmForm.class.php:62 -msgid "input text" -msgstr "" - -#: class/ShmForm.class.php:92 -msgid "textarea" -msgstr "" - -#: class/ShmForm.class.php:98 -msgid "input file" -msgstr "" - -#: class/ShmForm.class.php:104 -msgid "enabled Map markers" -msgstr "" - -#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 -#: class/ShmForm.class.php:340 -msgid "Type of element" -msgstr "" - -#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 -#: class/ShmForm.class.php:334 -msgid "Label of element" -msgstr "" - -#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 -#: class/ShmForm.class.php:336 -msgid "write title" -msgstr "" - -#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 -#: class/ShmForm.class.php:355 -msgid "Placeholder" -msgstr "" - -#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 -#: class/ShmForm.class.php:357 -msgid "write placeholder" -msgstr "" - -#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 -#: class/ShmForm.class.php:361 -msgid "Placemark types" -msgstr "" - -#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 -#: class/ShmForm.class.php:374 -msgid "write description" -msgstr "" - -#: class/ShmForm.class.php:231 -msgid "Element is required" -msgstr "" - -#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 -msgid "Add before" -msgstr "" - -#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 -msgid "Add after" -msgstr "" - -#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 -msgid "Delete me" -msgstr "" - -#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 -msgid "require" -msgstr "" - -#: class/ShmForm.class.php:326 -msgid "enable" -msgstr "" - -#: class/ShmForm.class.php:378 -msgid "The name of the parameter that refers to this element" -msgstr "" - -#: class/ShmForm.class.php:436 -msgid "Сhoose files" -msgstr "" - -#: class/ShmForm.class.php:497 -msgid "" -"Drag choosed icon and place it to map or click it and enter exact address." -msgstr "" - -#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 -#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 -#: class/ShmForm.class.php:578 -msgid "This required field" -msgstr "" - -#: class/ShmForm.class.php:520 -msgid "Drag icon and place it to map." -msgstr "" - -#: class/ShmForm.class.php:553 -msgid "Your name" -msgstr "" - -#: class/ShmForm.class.php:564 -msgid "Your e-mail" -msgstr "" - -#: class/ShmForm.class.php:574 -msgid "Your phone" -msgstr "" - -#: class/ShmMap.class.php:65 -msgid "Step 1. Set up your map." -msgstr "" - -#: class/ShmMap.class.php:74 -msgid "edit Map" -msgstr "" - -#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 -msgid "all Maps" -msgstr "" - -#: class/ShmMap.class.php:77 -msgid "view Map" -msgstr "" - -#: class/ShmMap.class.php:78 -msgid "search Map" -msgstr "" - -#: class/ShmMap.class.php:79 -msgid "Map not found" -msgstr "" - -#: class/ShmMap.class.php:80 -msgid "no found Map in trash" -msgstr "" - -#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 -msgid "ID" -msgstr "" - -#: class/ShmMap.class.php:124 -msgid "shortcodes" -msgstr "" - -#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 -msgid "Map markers" -msgstr "" - -#: class/ShmMap.class.php:145 -msgid "include all (map and request form)" -msgstr "" - -#: class/ShmMap.class.php:153 -msgid "only map" -msgstr "" - -#: class/ShmMap.class.php:162 -msgid "only request form" -msgstr "" - -#: class/ShmMap.class.php:186 -msgid "Including Map to post" -msgstr "" - -#: class/ShmMap.class.php:198 -msgid "You can insert a card into a post or page by copying this shortcode." -msgstr "" - -#: class/ShmMap.class.php:212 -msgid "Step 2. May anover Users add information for Map." -msgstr "" - -#: class/ShmMap.class.php:237 -msgid "1.1. Pan map and choose zoom" -msgstr "" - -#: class/ShmMap.class.php:249 -msgid "1.2. Set size for map's div (per pixels)" -msgstr "" - -#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 -msgid "Empty for " -msgstr "" - -#: class/ShmMap.class.php:269 -msgid "1.3. Include interface" -msgstr "" - -#: class/ShmMap.class.php:277 -msgid "Map zoom slider enabled" -msgstr "" - -#: class/ShmMap.class.php:299 -msgid "Choose layers" -msgstr "" - -#: class/ShmMap.class.php:313 -msgid "1.4. May User download data in *.csv?" -msgstr "" - -#: class/ShmMap.class.php:324 -msgid "1.5. Will the legend be displayed?" -msgstr "" - -#: class/ShmMap.class.php:335 -msgid "1.6. Will Marker type filter be displayed?" -msgstr "" - -#: class/ShmMap.class.php:346 -msgid "1.7. Default Marker icon" -msgstr "" - -#: class/ShmMap.class.php:351 -msgid "Recommended size is 64х64 px, format is .png" -msgstr "" - -#: class/ShmMap.class.php:383 -msgid "Enable crowdsourcing function (free add Users new Markers)" -msgstr "" - -#: class/ShmMap.class.php:388 -msgid "2.1. What is the name of your information form?" -msgstr "" - -#: class/ShmMap.class.php:392 -msgid "For example «All beaches by the river»" -msgstr "" - -#: class/ShmMap.class.php:398 -msgid "2.2. Will I notify the author about new posts?" -msgstr "" - -#: class/ShmMap.class.php:406 -msgid "2.3. What information can users enter?" -msgstr "" - -#: class/ShmMap.class.php:409 -msgid "" -"You can create your own forms using form elements: & laquo; Text line & " -"raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & " -"laquo; Categories of Markers & raquo;" -msgstr "" - -#: class/ShmMap.class.php:418 -msgid "2.4. Can users leave their contact information?" -msgstr "" - -#: class/ShmMap.class.php:426 -msgid "2.5. What data users will have to put?" -msgstr "" - -#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 -#: class/ShmMap.class.php:461 -msgid "Include" -msgstr "" - -#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 -#: class/ShmMap.class.php:471 -msgid "Required" -msgstr "" - -#: class/ShmMap.class.php:450 -msgid "Personal email" -msgstr "" - -#: class/ShmMap.class.php:665 -msgid "What do with placemarks of deleting Map?" -msgstr "" - -#: class/ShmMap.class.php:670 -msgid "Delete all Points" -msgstr "" - -#: class/ShmMap.class.php:676 -msgid "Escape all Points without Owner Map" -msgstr "" - -#: class/ShmMap.class.php:682 -msgid "Switch all Points to anover Map" -msgstr "" - -#: class/ShmMap.class.php:768 -#, php-format -msgid "Succesfuly delete map width %s points" -msgstr "" - -#: class/ShmMap.class.php:773 -#, php-format -msgid "Succesfuly delete map and %s points are orphans now" -msgstr "" - -#: class/ShmMap.class.php:780 -#, php-format -msgid "Succesfuly delete map and %s points migrates to %s" -msgstr "" - -#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 -msgid "Map marker" -msgstr "" - -#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 -#: class/ShmPoint.class.php:28 -msgid "add Map marker" -msgstr "" - -#: class/ShmPoint.class.php:27 -msgid "edit Map marker" -msgstr "" - -#: class/ShmPoint.class.php:29 -msgid "all Map markers" -msgstr "" - -#: class/ShmPoint.class.php:30 -msgid "view Map marker" -msgstr "" - -#: class/ShmPoint.class.php:31 -msgid "search Map marker" -msgstr "" - -#: class/ShmPoint.class.php:32 -msgid "Map marker not found" -msgstr "" - -#: class/ShmPoint.class.php:33 -msgid "no found Map marker in trash" -msgstr "" - -#: class/ShmPoint.class.php:158 -msgid "Map owner" -msgstr "" - -#: class/ShmPoint.class.php:312 -msgid "Address" -msgstr "" - -#: shortcode/shmMap.shortcode.php:19 -msgid "No map on ID " -msgstr "" - -#: shortcode/shmMap.shortcode.php:43 -msgid "Send request" -msgstr "" - -#: tpl/input_file_form.php:64 -msgid "Upload Image" -msgstr "" - -#: tpl/input_file_form.php:66 -msgid "File" -msgstr "" - -#: tpl/input_file_form.php:72 -msgid "Browse" -msgstr "" - -#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 -msgid "Remove" -msgstr "" - -#: tpl/input_file_form.php:77 -msgid "Insert" -msgstr "" - -#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 -msgid "Submit" -msgstr "" - -#: tpl/shmMap.php:83 -#, php-format -msgid "download %s.csv" -msgstr "" - -#: widget/ShMap.widget.php:9 -msgid "Shmapper Locations" -msgstr "" - -#: widget/ShMap.widget.php:16 -msgid "Ermak Locations" -msgstr "" - -#: widget/ShMap.widget.php:17 -msgid "Player Cabinet" -msgstr "" - -#: widget/ShMap.widget.php:64 -msgid "Tite" -msgstr "" - -#. Plugin Name of the plugin/theme -msgid "ShMapper by Teplitsa" -msgstr "" - -#. Plugin URI of the plugin/theme -msgid "http://genagl.ru/?p=652" -msgstr "" - -#. Description of the plugin/theme -msgid "Location and logistics services for NKO" -msgstr "" - -#. Author of the plugin/theme -msgid "Teplitsa. Technologies for Social Good" -msgstr "" - -#. Author URI of the plugin/theme -msgid "https://te-st.ru" -msgstr "" diff --git a/shmapper.php b/shmapper.php deleted file mode 100644 index ac651b0..0000000 --- a/shmapper.php +++ /dev/null @@ -1,126 +0,0 @@ - - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/** Load textdomain */ -function init_textdomain_shmapper() { - if ( function_exists('load_textdomain') ) { - load_textdomain( 'shmapper-by-teplitsa', WP_PLUGIN_DIR . '/' . dirname( plugin_basename( __FILE__ ) ) . '/languages/shmapper-by-teplitsa-' . get_locale() . '.mo' ); - } - - if ( function_exists( 'load_plugin_textdomain' ) ) { - load_plugin_textdomain( 'shmapper-by-teplitsa', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); - } -} -add_action('plugins_loaded', 'init_textdomain_shmapper'); - -// Paths. -define( 'SHM_URLPATH', WP_PLUGIN_URL . '/' . plugin_basename( dirname(__FILE__) ) . '/' ); -define( 'SHM_REAL_PATH', WP_PLUGIN_DIR . '/' . plugin_basename(dirname(__FILE__) ) . '/' ); -define( 'SHMAPPER', 'shmapper-by-teplitsa' ); -define( 'SHM_MAP', 'shm_map' ); -define( 'SHM_POINT', 'shm_point' ); -define( 'SHM_POINT_TYPE', 'shm_point_type' ); -define( 'SHM_REQUEST', 'shm_request' ); -define( 'SHMAPPER_PLAIN_TEXT_TYPE_ID', 1 ); -define( 'SHMAPPER_NAME_TYPE_ID', 2 ); -define( 'SHMAPPER_PLAIN_NUMBER_TYPE_ID', 3 ); -define( 'SHMAPPER_EMAIL_TYPE_ID', 4 ); -define( 'SHMAPPER_PHONE_TYPE_ID', 5 ); -define( 'SHMAPPER_TEXTAREA_TYPE_ID', 6 ); -define( 'SHMAPPER_IMAGE_TYPE_ID', 7 ); -define( 'SHMAPPER_MARK_TYPE_ID', 8 ); -define( 'SHMAPPER_TITLE_TYPE_ID', 9 ); -define( 'SHM_CSV_STROKE_SEPARATOR', ';' ); -define( 'SHM_CSV_ROW_SEPARATOR', ' -'); -define('SHMAPPER_VERSION', '1.3.3' ); - -require_once SHM_REAL_PATH . 'class/ShMapper.class.php'; -require_once SHM_REAL_PATH . 'class/ShMapper_ajax.class.php'; -if ( ! class_exists( 'SMC_Post' ) ) { - require_once SHM_REAL_PATH . 'class/SMC_Post.php'; -} -if ( ! class_exists( 'SMC_Object_type' ) ) { - require_once SHM_REAL_PATH . 'class/SMC_Object_type.php'; -} -require_once SHM_REAL_PATH . 'class/ShmMap.class.php'; -require_once SHM_REAL_PATH . 'class/ShMapPointType.class.php'; -require_once SHM_REAL_PATH . 'class/ShmPoint.class.php'; -require_once SHM_REAL_PATH . 'class/ShMapperRequest.class.php'; -require_once SHM_REAL_PATH . 'class/ShmForm.class.php'; -require_once SHM_REAL_PATH . 'class/ShMapper_Assistants.class.php'; -require_once SHM_REAL_PATH . 'class/ShmAdminPage.class.php'; -require_once SHM_REAL_PATH . 'shortcode/shm_shortcodes.php'; -require_once SHM_REAL_PATH . 'widget/ShMap.widget.php'; - -register_activation_hook( __FILE__, array( 'ShMapper', 'activate' ) ); - -if ( function_exists( 'register_deactivation_hook' ) ) { - register_deactivation_hook(__FILE__, array( 'ShMapper', 'deactivate' ) ); -} - -/** Shamapper init */ -function init_shmapper() { - ShMapper::get_instance(); - ShMapper_Assistants::get_instance(); - ShMapper_ajax::get_instance(); - ShmMap::init(); - ShMapperRequest::init(); - ShMapPointType::init(); - ShmPoint::init(); - ShmForm::init(); -} -add_action( 'init', 'init_shmapper', 1 ); - -/** Is session */ -function shm_is_session() { - require_once ABSPATH . 'wp-admin/includes/plugin.php'; - return is_plugin_active( 'wp-session-manager/wp-session-manager.php' ); -} - -/** - * Disable Gugenberg - * @param bool $current_status Current gutenberg status. Default true. - * @param string $post_type The post type being checked. - */ -function shmapper_disable_gutenberg( $current_status, $post_type ) { - if ( in_array( $post_type, array( SHM_POINT ), true ) ) { - return false; - } - return $current_status; -} -add_filter( 'use_block_editor_for_post_type', 'shmapper_disable_gutenberg', 10, 2); diff --git a/shortcode/shmMap.shortcode.php b/shortcode/shmMap.shortcode.php deleted file mode 100644 index cafe36f..0000000 --- a/shortcode/shmMap.shortcode.php +++ /dev/null @@ -1,51 +0,0 @@ - 450, - "id" => -1, - "map" => false, - "form" => false, - "uniq" => false - ), $args, 'shmMap' ); - - $id = $args['id']; - $args['uniq'] = $args['uniq'] ? $args['uniq'] : substr( MD5(rand(0, 100000000)), 0, 8 ); - $uniq = $args['uniq']; - $map = ShmMap::get_instance($args['id']); - if(!$map->is_enabled() || $map->get("post_type") !== SHM_MAP) - { - return __("No map on ID ", SHMAPPER) . $args['id']; - } - $map_enb = $args["map"] || ( !$args["map"] && !$args["form"]) ? 1 : 0; - $form_enb = $args["form"] || ( !$args["map"] && !$args["form"]) ? 1 : 0; - $html = "

    " . $map->get("post_title") . "
    "; - if($map_enb) - { - $html .= $map->draw($args); - } - if( $form_enb && $map->get_meta("is_form") && !ShMapper::$options['shm_map_is_crowdsourced']) - { - $form_title = $map->get_meta("form_title"); - $form_forms = $map->get_meta("form_forms"); - $html .= " -
    -
    -
    -
    - $form_title -
    -
    ". - ShmForm::form( $form_forms, $map ). - "
    -
    - -
    -
    -
    -
    "; - } - - return $html; -} \ No newline at end of file diff --git a/shortcode/shm_shortcodes.php b/shortcode/shm_shortcodes.php deleted file mode 100644 index ebc5725..0000000 --- a/shortcode/shm_shortcodes.php +++ /dev/null @@ -1,6 +0,0 @@ -
    -
    -
    -
    -
    -
    - - - - - - -
    Browse - - -
    - -
    - - -
    - - -
    Or drag and drop files here
    -
    - -
    -
    10% Complete
    -
    -
    - -
    -
    -
    -
    - '; -} - -function get_input_file_form2($image_input_name = "image-file", $media_id='-1', $prefix='user_ava', $id='') -{ - return " -
    -
    ". - _get_media($media_id, 68). - "
    -
    -
    - -
    - "; -} - - - -function get_input_file_form3($image_input_name = "image-file") -{ - return ' - -
    -
    -

    ' . __("Upload Image", FRMRU) . '

    -
    - - -
    -
    -
    - - - -
    -
    -
    - -
    - -
    -
    - - - -
    -
    -
    - -
    -
    -
    '; -} - -function _get_media($media_id, $size=300) -{ - $src = $size == "full" ? wp_get_attachment_image_src($media_id, $size): wp_get_attachment_image_src($media_id, array($size, $size)); - if($src) - { - return ""; - } - else - { - return ""; - } -} -function _get_default() -{ - return SHM_URLPATH."assets/img/empty.png"; -} - -function recurse_copy($src, $dst) -{ - $dir = opendir($src); - @mkdir($dst); - while(false !== ( $file = readdir($dir)) ) { - if (( $file != '.' ) && ( $file != '..' )) { - if ( is_dir($src . '/' . $file) ) { - recurse_copy($src . '/' . $file, $dst . '/' . $file); - } - else { - copy($src . '/' . $file, $dst . '/' . $file); - } - } - } - closedir($dir); -} \ No newline at end of file diff --git a/tpl/shmMap.php b/tpl/shmMap.php deleted file mode 100644 index 6b99921..0000000 --- a/tpl/shmMap.php +++ /dev/null @@ -1,181 +0,0 @@ -id); - - $html = ""; - $legend = ""; - - $mapType = $map->get_meta("map_type"); - $mapType = $mapType && ShMapper::$options['map_api'] == array_keys($mapType)[0] - ? $mapType - : ShmMap::get_map_types(); - $mapType = $mapType[ ShMapper::$options['map_api'] ][0]; - $id = $map->id; - $muniq = isset($args['uniq']) ? $args['uniq'] : $id; - $uniq = "ShmMap$id$muniq"; - $title = $map->get("post_title"); - $height = isset($args['height']) ? $args['height'] : $map->get("height"); - $width = $map->get_meta("width"); - $width = $width ? $width."px" : "100%"; - $latitude = $map->get_meta("latitude"); - $longitude = $map->get_meta("longitude"); - $is_lock = $map->get_meta("is_lock"); - $is_layer_switcher = $map->get_meta("is_layer_switcher"); - $is_zoomer = $map->get_meta("is_zoomer"); - $is_search = $map->get_meta("is_search"); - $is_clustered= $map->get_meta("is_clustered"); - $is_legend = $map->get_meta("is_legend"); - $is_filtered = $map->get_meta("is_filtered"); - $is_fullscreen = $map->get_meta("is_fullscreen"); - $zoom = $map->get_meta("zoom"); - $latitude = $latitude ? $latitude : 55; - $longitude = $longitude ? $longitude : 55; - $zoom = $zoom ? $zoom : 4; - $leg = ""; - if( $is_legend ) - { - $include = $map->get_include_types(); - if(is_array($include) && count($include)) - { - foreach($include as $term_id) - { - if( !$term_id ) { - continue; - } - - $term = get_term($term_id); - if( !is_wp_error($term) ) { // echo '
    HERE: '.print_r($include, 1).'
    '; - - $color = get_term_meta($term_id, "color", true); - $leg .= "
    " . $term->name . ""; - - } - - } - $legend = " -
    - $leg -
    "; - }; - } - if( $is_filtered ) - { - $includes = $map->get_include_types(); - $filters = ShMapPointType::get_ganre_swicher([ - 'prefix' => 'filtered'.$uniq, - 'row_style' => "float:right;margin-left: 5px;margin-right: 0px;", - "selected" => ShMapPointType::get_all_ids(), - "includes" => $includes, - "col_width" => 2 - ], "checkbox", "stroke" ); - } else { - $filters = ''; - } - - $is_csv = $map->get_meta("is_csv"); - $csv = ""; - - if($is_csv) { - $csv = ""; - } - - $points = $map->get_map_points(); - if($is_filtered || $is_csv) - { - $html .=" -
    - $filters $csv -
    "; - } - $html .= " -
    -
    $legend "; - $p = ""; - $str = [" -"," - -"]; - -//line javascript - foreach($points as $point) - { - $p .= " - var p = {}; - p.post_id = '" . $point->ID . "'; - p.post_title = '" . $point->post_title . "'; - p.post_content = '
    " . html_entity_decode( esc_js($point->post_content) ) . "
    ID) . "\" class=\"shm-no-uline\">
    " . esc_js($point->location) . "
    '; - p.latitude = '" . $point->latitude . "'; - p.longitude = '" . $point->longitude . "'; - p.location = '" . esc_js($point->location) . "'; - p.type = '" . $point->type . "'; - p.term_id = '" . $point->term_id . "'; - p.icon = '" . $point->icon . "'; - p.color = '" . $point->color . "'; - p.height = " . $point->height . "; - p.width = " . $point->width . "; - points.push(p); - "; - } - $desabled = $is_lock ? " - myMap.behaviors.disable('scrollZoom'); - myMap.behaviors.disable('drag'); - " : ""; - $is_admin = ""; - if(is_admin()) - { - $is_admin = " is_admin( myMap, $map->id );"; - } - $default_icon_id = $map->get_meta("default_icon_id"); - $icon = wp_get_attachment_image_src($default_icon_id, [60, 60])[0]; - $html .= " - "; - return $html; -} \ No newline at end of file diff --git a/unistall.php b/unistall.php deleted file mode 100644 index 31a21b8..0000000 --- a/unistall.php +++ /dev/null @@ -1,20 +0,0 @@ -get_col( "SELECT blog_id FROM $wpdb->blogs" ); - $original_blog_id = get_current_blog_id(); - foreach ( $blog_ids as $blog_id ) - { - switch_to_blog( $blog_id ); - delete_site_option( SHMAPPER ); - } - switch_to_blog( $original_blog_id ); -} diff --git a/widget/ShMap.widget.php b/widget/ShMap.widget.php deleted file mode 100644 index 30321a0..0000000 --- a/widget/ShMap.widget.php +++ /dev/null @@ -1,95 +0,0 @@ - 'Locations accordeon', 'classname' => 'widget_location_navigator') );; - add_action( 'init', array($this, 'redirect_login_page')); - } - function redirect_login_page() - { - $login_page = home_url( '/' ); - $page_viewed = basename($_SERVER['REQUEST_URI']); - $this->name = __('Ermak Locations', SHMAPPER); - $this->widget_options['description'] = __('Player Cabinet', SHMAPPER); - } - /* Widget - /* ------------------------------------ */ - public function widget($args, $instance) - { - extract( $args ); - $instance['title'] ? NULL : $instance['title'] = ''; - $instance['map_id'] ? NULL : $instance['map_id'] = ''; - $title = apply_filters('widget_title',$instance['title']); - $output = $before_widget."\n"; - if($title) - $output .= $before_title.$title.$after_title; - else - $output .= $before_title. $instance['title'].$after_title; - $map = ShmMap::get_instance($instance['map_id']); - $output .= $map->draw([ "height" => $instance['height'], "id" => $map->id ]); - $output .= $after_widget."\n"; - echo $output; - } - - /* Widget update - /* ------------------------------------ */ - public function update($new,$old) - { - $instance = $old; - $instance['title'] = strip_tags($new['title']); - $instance['map_id'] = strip_tags($new['map_id']); - $instance['height'] = strip_tags($new['height']); - return $instance; - } - - /* Widget form - /* ------------------------------------ */ - public function form($instance) - { - // Default widget settings - $defaults = array( - 'title' => '', - 'map_id' => '', - 'height' => 250, - ); - $instance = wp_parse_args( (array) $instance, $defaults ); - ?> -
    -
    -

    - - " /> -

    -

    - - "shm-form", - "name" => $this->get_field_name('map_id'), - "selected" => esc_attr($instance["map_id"]), - "id" => $instance['map_id'], - "posts" => ShmMap::get_all(), - ]); - ?> -

    -

    - - " /> -

    -
    -
    - \ No newline at end of file From 4bb2f5fcca721dd5f8e5af763ccc8cb8cd8fa76a Mon Sep 17 00:00:00 2001 From: BootWP Date: Mon, 14 Sep 2020 06:34:35 +0300 Subject: [PATCH 064/220] Add CF ending lines files. --- LICENSE.txt | 339 ++++++++ README.md | 77 ++ README.txt | 92 ++ class/SMC_Object_type.php | 468 ++++++++++ class/SMC_Post.php | 702 +++++++++++++++ class/ShMapPointType.class.php | 374 ++++++++ class/ShMapper.class.php | 802 +++++++++++++++++ class/ShMapperRequest.class.php | 478 +++++++++++ class/ShMapper_Assistants.class.php | 99 +++ class/ShMapper_ajax.class.php | 521 +++++++++++ class/ShmAdminPage.class.php | 36 + class/ShmForm.class.php | 596 +++++++++++++ class/ShmMap.class.php | 856 +++++++++++++++++++ class/ShmPoint.class.php | 540 ++++++++++++ languages/shmapper-by-teplitsa-de_DE.mo | Bin 0 -> 18331 bytes languages/shmapper-by-teplitsa-de_DE.po | 999 ++++++++++++++++++++++ languages/shmapper-by-teplitsa-ru_RU.mo | Bin 0 -> 22718 bytes languages/shmapper-by-teplitsa-ru_RU.po | 996 ++++++++++++++++++++++ languages/shmapper-by-teplitsa.pot | 1043 +++++++++++++++++++++++ shmapper.php | 126 +++ shortcode/shmMap.shortcode.php | 51 ++ shortcode/shm_shortcodes.php | 6 + tpl/input_file_form.php | 130 +++ tpl/shmMap.php | 181 ++++ unistall.php | 20 + widget/ShMap.widget.php | 95 +++ 26 files changed, 9627 insertions(+) create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 README.txt create mode 100644 class/SMC_Object_type.php create mode 100644 class/SMC_Post.php create mode 100644 class/ShMapPointType.class.php create mode 100644 class/ShMapper.class.php create mode 100644 class/ShMapperRequest.class.php create mode 100644 class/ShMapper_Assistants.class.php create mode 100644 class/ShMapper_ajax.class.php create mode 100644 class/ShmAdminPage.class.php create mode 100644 class/ShmForm.class.php create mode 100644 class/ShmMap.class.php create mode 100644 class/ShmPoint.class.php create mode 100644 languages/shmapper-by-teplitsa-de_DE.mo create mode 100644 languages/shmapper-by-teplitsa-de_DE.po create mode 100644 languages/shmapper-by-teplitsa-ru_RU.mo create mode 100644 languages/shmapper-by-teplitsa-ru_RU.po create mode 100644 languages/shmapper-by-teplitsa.pot create mode 100644 shmapper.php create mode 100644 shortcode/shmMap.shortcode.php create mode 100644 shortcode/shm_shortcodes.php create mode 100644 tpl/input_file_form.php create mode 100644 tpl/shmMap.php create mode 100644 unistall.php create mode 100644 widget/ShMap.widget.php diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..ecbc059 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f9fd384 --- /dev/null +++ b/README.md @@ -0,0 +1,77 @@ +# shMapper # + +**Scroll down for english description, please** + +shMapper - это плагин для WordPress. shMapper позволяет создавать простые краудсорсинговые карты на OpenStreet Maps с опцией формы обратной связи. Этот плагин предоставляет вам альтернативу текущим картографическим сервисам, таким как Яндекс.Карты, Карты Google и т.д., которые не предоставляют пользователям возможность добавлять новые объекты. + +Плагин разработан и поддерживается [Теплицей социальных технологий](//te-st.ru/). + +Задача плагина — удобный и минималистичный плагин по добавлению карт на WordPress. + +* Плагин элементарно устанавливается и требует минимальных настроек. +* Карты и формы доступны на отдельных старницах сразу после создания. +* Карты и формы можно размещать внутри контента при помощи шорткодов. + +Плагин предназначен для всех, кому нужно отобразить карту на сайте или получить от посетителей информацию, привязанную к карте. + +**Основные функции** + +* Настройка и отображение карт с маркерами на страницах сайта. +* Отображение карт с помощью шорткодов. +* Получать новые маркеры карты через форму обратной связи. +* Пре или пост-модерация новых маркеров. +* Защиты формы при помощи ReCaptcha. +* Пользовательские значки маркеров. + +Для корректной работы плагина необходим PHP версии не ниже 5.6. + +Если вам нужна помощь волонтеров в установке и настройке, создайте задачу на сайте нашего проекта [it-волонтёр](//itv.te-st.ru/). + + +## Помощь проекту ## + +Мы очень ждем вашей помощи проекту. Вы можете помочь следующими способами: + +* Добавить сообщение об ошибке или предложение по улучшению на GitHub +* Поделиться улучшениями кода, послав нам Pull Request +* Сделать перевод плагина или оптимизировать его для вашей страны. + +Если у вас есть вопросы по работе плагина, то обратитесь к нам за поддержкой на [GitHub](https://github.com/Teplitsa/shmapper/issues). + + +## In English ## + +shMapper is a WordPress plugin. The shMapper allows you to create simple crowdsourcing maps on OpenStreet Maps with an option of feedback messages form. This plugin gives you an alternative to current online map services such as Yandex.Maps, Google Maps etc which don’t provide the option for users to add new objects. + +This plugin developed and supported by [Teplitsa of social technologies](//te-st.ru/). + +The main features of the plugin is a convenient and minimalistic functions for adding maps on WordPress. + +* Plugin is very easy to install, and it requires only a minimum of settings. +* Maps and forms are available on individual pages immediately after creation. +* Maps and forms can be placed within the content using shortcodes. + +The plugin is designed for anyone who needs to display a map on the site or get information from visitors linked to the map. + +**Core features** + +* Configure and display maps with markers on pages. +* Display maps using shortcodes. +* Receive new map markers via feedback form. +* Pre or post-moderation of new markers. +* reCaptcha form protection. +* Custom markers icons. + +## Installation ## + +PHP at least 5.6 is required. + +## Help the project ## + +We will be very grateful if you will help us to make Leyka better. + +* You can add a bugreport or a feature request on [GitHub](https://github.com/Teplitsa/shmapper/issues). +* Send us your pull request to share a code impovement. +* You can make a new plugin translation for your language or send us a fixes for an existing translation, if needed. + +**Please note:** if you have a questions for the plugin work in any aspect, please address our support service on [GitHub](https://github.com/Teplitsa/shmapper/issues). diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..390de26 --- /dev/null +++ b/README.txt @@ -0,0 +1,92 @@ +=== shMapper by Teplitsa === +Contributors: Genagl, Ahaenor, denis.cherniatev, burdianov, teplosup +Author URI: https://te-st.ru/ +Plugin URI: http://genagl.ru/?p=652 +Tags: map, OpenStreetMap, OSM, yandex.map, crowdsourcing, карта, Яндекс.карты, картирование, mapping, crowdsourced mapping, user mapping +Requires at least: 3.6.1 +Tested up to: 5.5.1 +Requires PHP: 5.6 +Stable tag: trunk +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +shMapper is a plugin, that allows you to create simple crowdsourcing maps based on OpenStreetMap and Yandex.Maps. + +== Description == + +The shMapper plugin allows you to create simple crowdsourcing maps on OpenStreetMap with an option of feedback messages form. This plugin gives you an alternative to current online map services such as Yandex.Maps, Google Maps etc which don’t provide the option for users to add new objects. + +Most of the code written by Gennadiy Glazunov aka [Genagl](http://genagl.ru) + +**Core features** + +* Configure and display maps with markers on pages. +* Display maps using shortcodes. +* Receive new map markers via feedback form. +* Pre or post-moderation of new markers. +* reCaptcha form protection. +* Custom markers icons. + +PHP at least 5.6 is required for plugin to work correctly. + +**Help the project** + +We will be very grateful if you will help us to make ShMapper better. + +* You can add a bugreport or a feature request on [GitHub](https://github.com/Teplitsa/shmapper/issues). +* Send us your pull request to share a code impovement. +* You can make a new plugin translation for your language or send us a fixes for an existing translation, if needed. + +If you have a questions for the plugin work in any aspect, please address our support service on [GitHub](https://github.com/Teplitsa/shmapper/issues). + +== Installation == + +PHP version required: 5.6+ + +== Upgrade Notice == + +No upgrade needed yet. + +== Frequently Asked Questions == + +No questions yet. + +== Screenshots == + +1. Edit map form example +2. Map and feedback form example + +== Changelog == + += 1.3.6 = +* WordPress 5.5 compatibility. + += 1.3.3 = +* Textdomain load forced. + += 1.3.2 = +* Marker placement by address added. +* Marker placement by click added. +* Minor fixes. + += 1.3.1 = +* Marker placement for OSM fixed. +* Map selector fixed in widget. +* Map selector fixed in map-request edit form. + += 1.3 = +* Layer switcher for OSM fixed. +* Map owner email notification about new map requests fixed. +* Display of marker clouds content fixed. + += 1.2 = +* Post-moderation of markers fixed for forms with enabled reCaptcha. +* Marker setup fixed for mobile screens. +* Other minor fixes. + += 1.1 = +* Pre-moderation of markers fixed. +* Other minor fixes. + += 1.0 = +* First official release! diff --git a/class/SMC_Object_type.php b/class/SMC_Object_type.php new file mode 100644 index 0000000..d1254de --- /dev/null +++ b/class/SMC_Object_type.php @@ -0,0 +1,468 @@ +object = apply_filters("smc_add_post_types", $this->object); + //$this->init(); + } + static function get_instance() + { + if(null === static::$_instance) + static::$_instance = new static; + return static::$_instance; + } + function init_options($array) + { + + } + function get($string) + { + return $this->object[$string]; + } + function get_meta($string) + { + $r = $this->get($string); + unset($r['t']); + return $r; + } + function get_type($string) + { + $r = $this->get($string); + return $r['t']['type']; + } + + function is_meta_exists($string, $meta) + { + $obj = $this->get($string); + return array_key_exists($meta, $obj); + } + + function get_object($id, $t) + { + global $new_dir; + $d = $this->get($t); + $obj = array(); + switch($d['t']['type']) + { + case "post": + $obj = $this->get_post_elements($id, $t, $d); + if(is_wp_error($obj)) + insertLog("SMC_Object.get_object", array($id, $t, $d)); + break; + case "taxonomy": + $obj = $this->get_taxonomy_element($id, $t, $d); + if(is_wp_error($obj)) + insertLog("SMC_Object.get_object", array($id, $t, $d)); + break; + case "db_row": + + break; + default: + return $t; + } + return apply_filters("smc_get_object", $obj, $obj); + } + + function get_post_elements($id, $type, $data) + { + $el = get_post($id); + $obj = array( + 'post_type' => $type, + 'obj_type' => $data['t']['type'], + 'title' => htmlentities(stripslashes ($el->post_title)), + 'name' => $el->post_name, + //'id' => $id, + 'text' => htmlentities(stripslashes ($el->post_content)), + ); + $keys = array_keys($data); + $values = array_values($data); + for($i = 0; $i < count($keys); $i++) + { + $meta = get_post_meta($id, $keys[$i], true); + if($keys[$i] == 't' ||$keys[$i] == 'class') continue; + if($values[$i]['type'] == 'id') + { + $pos = $this->get($values[$i]['object']); + //return $meta . ' -- ' . $values[$i]['object'] . ' -- ' . $pos['t']['type']; + switch($pos['t']['type']) + { + case 'post': + $obj[$keys[$i]] = $this->get_post_property($meta, $values[$i]['object']); + break; + case 'taxonomy': + $obj[$keys[$i]] = $this->get_taxonomy_property($meta, $values[$i]['object'], $i); + break; + case 'user': + $obj[$keys[$i]] = $this->get_user_property($meta, $values, $i); + break; + case 'array': + $arr = $this->get_array_property( $meta, $values ); + if(!is_wp_error($arr)) $obj[$keys[$i]] = $arr; + default: + ob_start(); + print_r($meta); + $obj[$keys[$i]] = ob_get_clean(); + break; + } + } + else if($values[$i]['type'] == 'array') + { + $arr = $this->get_array_property($meta, $values[$i]); + if(!is_wp_error($arr)) $obj[$keys[$i]] = $arr; + } + else if($values[$i]['type'] == 'media') + { + $meta = htmlentities(stripslashes (get_post_meta($id, $keys[$i], true))); + if($values[$i]['download']) + { + $imageUrl = wp_get_attachment_url( $meta ); + // echo $imageUrl."
    "; + // continue; + $stt = (strrpos($imageUrl, '/'))+1; + $fnn = (strrpos($imageUrl, '.')) - $stt; + $filename = substr($imageUrl, $stt, $fnn); + $thumbnail = substr($imageUrl, $stt); + $wp_check_filetype = wp_check_filetype($imageUrl); + file_copy($imageUrl, $new_dir ."/". $filename . "." . $wp_check_filetype['ext']); + $obj[$keys[$i]] = $imageUrl;//$filename . "." . $wp_check_filetype['ext']; + /**/ + } + //$obj['download'] = true; + } + + else if($values[$i]['type'] == 'bool' || $values[$i]['type'] == 'number') + { + $obj[$keys[$i]] = (int)$meta; + } + else if($values[$i]['type'] == 'string') + { + + $meta = get_post_meta($id, $keys[$i], true); + $obj[$keys[$i]] = ($meta); + if($values[$i]['download']) + { + + } + } + } + return $obj; + } + + /* ================= + // + // + // + =================*/ + function get_taxonomy_element($id, $type, $data) + { + if($data['t']['type'] != "taxonomy") return new WP_Error('no taxonomy'); + $el = get_term_by("id", $id, $type); + $parent = get_term_by("id", $el->parent, $type); + $parent = $parent==0 ? "" : $parent->slug; + $obj = array( + 'post_type' => $type, + 'obj_type' => $data['t']['type'], + 'title' => $el->name, + 'name' => $el->slug, + 'id' => $id, + 'text' => '', + 'parent' => $parent + ); + $class_name = $data['class']; + $option = $this->object_property_args($class_name,"get_term_meta", $id); + $keys = array_keys($data); + $values = array_values($data); + + for($i = 0; $i < count($keys); $i++) + { + if($keys[$i] == "class") continue; + if($values[$i]['type'] == 'db_row') + { + //$obj[$keys[$i]] = array("db_field" => $values[$i]['db_field'], "db_name" => $values[$i]['db_name']); + continue; + } + $meta = $option[$keys[$i]]; + if($values[$i]['type'] == 'id') + { + $pos = $this->get($values[$i]['object']); + + //return $meta . ' -- ' . $values[$i]['object'] . ' -- ' . $pos['t']['type']; + switch($pos['t']['type']) + { + case 'post': + $obj[$keys[$i]] = $this->get_post_property($meta); + break; + case 'taxonomy': + $obj[$keys[$i]] = $this->get_taxonomy_property($meta, $values[$i]['object']); + break; + case 'user': + $obj[$keys[$i]] = $this->get_user_property($meta); + break; + case 'array': + default: + ob_start(); + print_r($meta); + $obj[$keys[$i]] = ob_get_clean(); + break; + } + } + else if($values[$i]['type'] == 'array') + { + ob_start(); + print_r($meta); + $obj[$keys[$i]] = ob_get_clean(); + } + else if($values[$i]['type'] == 'bool' || $values[$i]['type'] == 'number') + { + $obj[$keys[$i]] = (int)$meta; + } + else + { + $meta = $option[$keys[$i]]; + $obj[$keys[$i]] = $meta; + } + } + return $obj; + } + function get_property($val, $value) + { + if($value == "number" || $value == "bool") + return (int)$val; + if($value == "string") + return $val; + if(is_array($value)) + { + if($value['type'] == 'id') + { + foreach($val as $v) + { + switch($value['t']) + { + case "post": + $obj = $this->get_post_property($v); + //insertLog("get_property "."post", $obj ); + return $obj; + case "taxonomy": + $obj = @$this->get_taxonomy_property($v, $value['object']); + insertLog( "get_property ", array( $obj, $v ) ); + return $obj; + default: + insertLog( "get_property error", array( $obj, $value) ); + } + } + } + $obj = $this->get_array_property($val, $value); + if(!is_wp_error($obj)) + return $obj; + } + //insertLog("get_property", array($val, $value)); + } + function get_post_property($meta) + { + $pp = get_post($meta); + if(!$pp) return ""; + $pos_slug = $pp->post_name; + return $pos_slug; + } + function get_user_property($meta) + { + //$user = get_userdata($meta); + return "==$meta";//$user ? $user->user_login : " - "; + } + function get_taxonomy_property($meta, $object) + { + $pp = get_term_by("id", $meta, $object ); + $pos_slug = $pp->slug; + //insertLog("get_taxonomy_property", $pp->slug); + return $pos_slug; + } + function get_db_row_property($meta) + { + return $meta; + } + function get_array_property( $meta, $values ) + { + if(!is_array($meta) || count($meta)==0) return new WP_Error("parameter is not array"); + if(!is_array($values)) return new WP_Error("SMC_Object element is not array"); + $obj = array( ); + foreach( $meta as $el => $val) + { + foreach($values as $key => $value ) + { + if($key == "type") continue; + if($key == "object") + { + $obj[] = array($this->get_array_property($val, $value)); + } + else + { + $xx = $this->get_property($val, $value); + $obj[$key] = is_wp_error($xx) ? "" : $xx; + } + + } + } + //insertLog("get_array_property = obj", $obj); + return $obj; + } + /* + что делать, когда тип = id + */ + function convert_id($key, $val, $d, $id) + { + global $wpdb, $httml, $migration_url, $components; + require_once(IMPORMAN_REAL_PATH."tpl/post_trumbnail.php"); + if( + $key == 'title' || + $key == 'post_content' || + $key == 'name' || + $key == 'obj_type' || + $key == 'id' || + $key == 't' || + $key == 'text' || + $key == 'parent' || + $key == 'post_type' + ) + return new WP_Error( $key ); + //echo "

    ------- ".$key . ': ' . Assistants::echo_me($d[$key]['object'])."

    "; + if($d[$key]['type'] == 'id') + { + $pos = $this->get($d[$key]['object']); + switch($pos['t']['type']) + { + case 'post': + $p = $wpdb->get_row("SELECT ID FROM ".$wpdb->prefix."posts WHERE post_name='" .$val. "' LIMIT 1", ARRAY_A ); + $val = $p["ID"]; + break; + case 'taxonomy': + $p = $wpdb->get_row("SELECT term_id FROM ".$wpdb->prefix."terms WHERE slug='" .$val. "' LIMIT 1", ARRAY_A ); + $val = $p["term_id"]; + break; + case 'user': + break; + default: + break; + } + } + if(is_array($val)) + { + $components[] = array( "key" => $key, "value" => $val, "id" => $id ); + $val = ""; //$this->convert_array($key, $val, $id); + } + + if($key == 'png_url') + $val = IMPORMAN_URLPATH . "picto/" . $val; + if($key == "_thumbnail_id") + { + $wp_upload_dir = wp_upload_dir(); + //$filename = download_url($migration_url . $val); + $filename = (ERMAK_MIGRATION_PATH . $val); + $httml .= "
    ". $migration_url . $val ."
    "; + if(is_wp_error($filename)) + { + $httml .= "
    ". echo_me($filename->get_error_messages())."
    "; + } + else + { + $httml .= "
    filename = $filename
    "; + $wp_filetype = wp_check_filetype(basename($filename), null ); + cyfu_publish_post($id, $filename); + return new WP_Error( $key ); + } + } + return $val=="" ? new WP_Error( $key ) : $val; + } + + function convert_array($val) + { + $arr = array(); + foreach($val as $k => $v) + { + if(!$this->get($k)) + { + if(is_array( $v )) + { + //$arr[$k] = array(); + //foreach($v as $k1 => $v1) + { + $arr[$k] = $this->convert_array($v); + //break; + } + } + else + { + $arr[$k] = $v; + } + } + else + { + $tp = $this->get($k); + switch($tp['t']['type']) + { + case "post": + $arr[$k] = get_postId_by_slug($v, $k);//$this->convert_id($k, $v, $this->get($k), -1);//$v; + break; + case "taxonomy": + $arr[$k] = get_termId_by_slug($v, $k); + } + //echo Assistants::echo_me( $this->get($k)); + } + } + return $arr; + } + + function insert_post_meta($metas, $id, $post_type) + { + global $wpdb; + $d = $this->get($post_type); + foreach($metas as $key=>$val) + { + $val = $this->convert_id($key, $val, $d, $id); + if(!is_wp_error($val)) + update_post_meta($id, $key, $val); + } + } + function object_property_args($class_name, $method, $args) + { + return @call_user_func(array($class_name, $method), $args); + } + } + + function file_copy($file, $distination) + { + if($file != "") + { + try { + $adress = str_replace(esc_url( home_url( '/' ) ), ABSPATH, $file); + //insertLog("file_copy", $adress); + $cl = @copy($adress, $distination) ; + } + catch (Exception $e) + { + insertLog("file_copy", $e->getMessage()); + } + if ($cl) + { + return true; + } + } + else + return false; + } + function get_postId_by_slug($slug, $post_type) + { + global $wpdb; + $query = "SELECT ID AS id FROM ".$wpdb->prefix."posts WHERE post_type='$post_type' AND post_name='$slug' LIMIT 1"; + return $wpdb->get_var($query); + } + function get_termId_by_slug($slug, $tax) + { + $term = get_term_by("slug", $slug, $tax); + return $term->term_id; + } +?> \ No newline at end of file diff --git a/class/SMC_Post.php b/class/SMC_Post.php new file mode 100644 index 0000000..29a9c0c --- /dev/null +++ b/class/SMC_Post.php @@ -0,0 +1,702 @@ +ID)) + { + $this->id = $this->ID = $id->ID; + $this->body = $id; + } + else + { + $this->id = $id; + $this->body = get_post($id); + } + } + function is_enabled() + { + return isset($this->body->ID); + } + public static function get_instance($id) + { + $obj = is_numeric($id) ? $id : $id->ID; + if(!static::$instances) static::$instances = array(); + if(!isset(static::$instances[$obj])) + static::$instances[$obj] = new static($obj); + return static::$instances[$obj]; + } + static function insert($data) + { + $id = wp_insert_post( + array( + "post_type" => $data['post_type'] ? $data['post_type'] : static::get_type(), + 'post_name' => $data['post_name'], + 'post_title' => $data['post_title'], + 'post_content' => $data['post_content'], + 'post_status' => 'publish', + "post_author" => $data['post_author'] ? $data['post_author'] : get_current_user_id() + ) + ); + $post = static::get_instance($id); + $post->update_metas($data); + return $post; + } + function doubled() + { + $metas = array('post_title'=>$this->body->post_title, 'post_content' => $this->body->post_content); + require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + $SMC_Object_Type = new SMC_Object_Type(); + $object = $SMC_Object_Type->object; + foreach($object[static::get_type()] as $key=>$val) + { + if($key == "t") continue; + $metas[$key] = $this->get_meta($key); + } + $metas = apply_filters("smc_before_doubled_post", $metas, $this); + $metas['post_author'] = $this->get("post_author"); + $post = static::insert($metas); + do_action("smc_after_doubled_post", $post, $this); + return $post; + } + static function delete($id) + { + if(is_numeric($id)) + { + return wp_delete_post($id); + } + else + { + return wp_delete_post($id->ID); + } + } + + function update_metas($meta_array) + { + $data = array(); + foreach($meta_array as $meta=>$val) + { + if( $meta == 'post_title' || $meta == 'post_content' ) + { + $data[$meta] = $val; + continue; + } + if( $meta == 'title' || $meta == 'name' || $meta == 'obj_type' ) + { + continue; + } + //insertLog("update_metas", array($meta, $val)); + $this->update_meta($meta, $val); + } + if(count($data)) + { + $data['ID'] = $this->id; + $id = wp_update_post($data); + //insertLog("update_metas", $id); + } + } + public function get_meta($name) + { + return get_post_meta($this->id, $name, true); + } + public function update_meta($name, $value) + { + update_post_meta( $this->id, $name, $value ); + return $value; + } + public function get($field) + { + return is_object($this->body) ? $this->body->$field : NULL; + } + function set($field) + { + $this->body->$field = $field; + wp_update_post($this->body); + } + public function get_the_author() + { + global $authordata; + $autor_id = $this->body->post_author; + $authordata = get_userdata($autor_id); + $author = apply_filters("the_author", $authordata->display_name); + return $author; + } + + /* + + */ + static function get_random($count=1) + { + $args = array( + 'numberposts' => $count, + 'offset' => 0, + 'orderby' => "rand", + 'post_status' => 'publish', + 'fields' => 'all', + 'post_type' => static::get_type(), + ); + $p = get_posts($args); + return static::get_instance($p[0]); + } + + /* + + */ + static function get_all($metas=-1, $numberposts=-1, $offset=0, $order_by='title', $order='DESC', $order_by_meta="", $fields="all", $relation="AND", $author=-1) + { + $args = array( + "numberposts" => $numberposts, + "offset" => $offset, + 'orderby' => $order_by, + 'order' => $order, + 'post_type' => static::get_type(), + 'post_status' => 'publish', + 'fields' => $fields + ); + if($author !=-1) + { + $args['author'] = $author; + } + if($order_by == "meta_value" || $order_by == "meta_value_num") + $args['meta_key'] = $order_by_meta; + if(is_array($metas)) + { + $arr = array(); + foreach($metas as $key=>$val) + { + $ar = array(); + $ar["value"] = is_array($val) ? $val["value"] : $val; + $ar["key"] = $key; + if(is_array($val) && !isset($val["value"])) + $ar["operator"] = "OR"; + else + $ar["compare"] = is_array($val) ? $val["compare"] : "="; + $arr[] = $ar; + } + $args['meta_query'] = array('relation' => $relation); + $args['meta_query'][] = $arr; + } + //return $args; + self::$all_posts = get_posts($args); + return self::$all_posts; + } + static function get_all_count( $args=-1 ) + { + if(is_array($args )) + { + $args["numberposts"] = -1; + $args['fields'] = "ids"; + $args['post_status'] = "publish"; + return count(get_posts($args)); + } + else + { + global $wpdb; + $query = "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status='publish' AND post_type='".static::get_type()."';"; + return $wpdb->get_var( $query ); + } + /**/ + } + + + + static function get_all_ids($metas=-1, $numberposts=-1, $offset=0, $order_by='title', $order='DESC', $is_update=false) + { + $args = array( + "numberposts" => $numberposts, + "offset" => $offset * $numberposts, + 'orderby' => $order_by, + 'order' => $order, + 'fields' => "ids", + 'post_type' => static::get_type(), + 'post_status' => 'publish', + ); + if(is_array($metas)) + { + $arr = array(); + foreach($metas as $key=>$val) + { + $ar = array(); + $ar["value"] = $val; + $ar["key"] = $key; + $ar["compare"] = "="; + $arr[] = $ar; + } + //$args['meta_query'] = array('relation' => 'AND'); + $args['meta_query'][] = $arr; + + } + //insertLog("SMC_Post", array("action" => "get_all_ids", "args"=>$args)); + static::$all_ids = get_posts($args); + return static::$all_ids; + } + + /* + + */ + static function amount_meta($meta_key, $post_ids=-1) + { + if(!is_array($post_ids)) return 0; + global $wpdb; + $ids = array(); + foreach($post_ids as $post_id) + { + if( $post_id instanceof SMC_Post ) + $ids[] = $post_id->id; + else if( $post_id instanceof WP_Post ) + $ids[] = $post_id->ID; + else if( is_numeric($post_id ) ) + $ids[] = $post_id; + } + $query = "SELECT SUM(meta_value) FROM " . $wpdb->prefix . "postmeta WHERE post_id IN(" . implode(",", $ids) . ") AND meta_key='count';"; + $amount = $wpdb->get_var($query); + return $amount; + } + + /* + + */ + static function wp_dropdown($params="-1") + { + if( !is_array($params) ) { + $params = array(); + } + + if(isset($params["exclude_post_id"]) && !is_array($params["exclude_post_id"])) { + $params["exclude_post_id"] = array($params["exclude_post_id"]); + } + + $hubs = empty($params['posts']) ? + (empty($params['args']) ? array() : self::get_all($params['args'])) : + $params['posts']; + + $html = ""; + return $html; + } + + static function dropdown($data_array, $params="-1") + { + if(!is_array($params)) + $params = array(); + $hubs = $data_array; + $html = ""; + return $html; + } + static function get_type() + { + return "post"; + } + + + static function init() + { + if(!static::$instances || !is_array( static::$instances )) + static::$instances = []; + $typee = static::get_type(); + add_action('admin_menu', array(get_called_class(), 'my_extra_fields')); + add_action("save_post_{$typee}", array(get_called_class(), 'true_save_box_data'), 10); + + //admin table + add_filter("manage_edit-{$typee}_columns", array(get_called_class(), 'add_views_column'), 4); + add_filter("manage_edit-{$typee}_sortable_columns", array(get_called_class(), 'add_views_sortable_column')); + add_filter("manage_{$typee}_posts_custom_column", array(get_called_class(), 'fill_views_column'), 5, 2); + add_filter("pre_get_posts", array(get_called_class(), 'add_column_views_request')); + + //bulk actions + add_filter("bulk_actions-edit-{$typee}", array(get_called_class(), "register_my_bulk_actions")); + add_filter("handle_bulk_actions-edit-{$typee}", array(get_called_class(), 'my_bulk_action_handler'), 10, 3 ); + //add_action('admin_notices', array(get_called_class(), 'my_bulk_action_admin_notice' )); + add_action("bulk_edit_custom_box", array(get_called_class(), 'my_bulk_edit_custom_box'), 2, 2 ); + //add_action("quick_edit_custom_box", array(get_called_class(), 'my_bulk_edit_custom_box'), 2, 2 ); + add_action("wp_ajax_save_bulk_edit", array(get_called_class(), 'save_bulk_edit_book') ); + return; + } + + static function add_views_column( $columns ) + { + require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + $SMC_Object_type = SMC_Object_Type::get_instance(); + $obj = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; + $posts_columns = array( + "cb" => " ", + //"IDs" => __("ID", 'smp'), + "title" => __("Title") + ); + //insertLog("add_views_column", "----"); + foreach($obj as $key=>$value) + { + if($key == 't' ||$key == 'class' ) continue; + $posts_columns[$key] = isset($value['name']) ? $value['name'] : $key; + } + return $posts_columns; + } + + static function fill_views_column($column_name, $post_id) + { + $p = static::get_instance($post_id); + require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + + $SMC_Object_type = SMC_Object_type::get_instance(); + $obj = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; + + switch( $column_name) + { + case 'IDs': + $color = $p->get_meta( "color" ); + if($post_id) + echo "
    ID".$post_id. "
    +

    "; + break; + default: + if(array_key_exists($column_name, $obj)) + { + $meta = $p->get_meta($column_name); + switch($obj[$column_name]['type']) + { + case "number": + case "string": + echo $meta; + break; + case "date": + echo $meta ? date("d.m.Y H:i", $meta) : ""; + break; + case "boolean": + echo $meta + ? " " . $obj[$column_name]['name'] . "" + : " " . $obj[$column_name]['name'] . ""; + break; + case "media": + echo ""; + break; + case "array": + echo implode(", ", $meta); + break; + case "post": + if($meta) + { + $p = get_post($meta); + $post_title = is_object($p) ? $p->post_title : ''; + $color = $obj[$column_name]['color']; + echo " + $post_title +

    ID$meta
    "; + } + break; + case "taxonomy": + if($term) + { + $term = get_term_by("term_id", $meta, $elem); + echo $term ? "
    ".$term->name ."
    ID".$meta. "
    +
    " : $meta; + } + break; + case "id": + default: + $elem = $SMC_Object_type->get_object($meta, $obj[$column_name]["object"] ); + switch( $obj[$column_name]["object"]) + { + case "user": + if($meta) + { + $user = get_user_by("id", $meta); + $display_name = $user ? $user->display_name : "=="; + echo $display_name."
    ID".$meta. "
    +
    "; + } + break; + case "post": + if($meta) + { + $p = get_post($meta); + $post_title = $p->post_title; + echo " + $post_title +
    +
    ID".$meta. "
    +
    "; + } + break; + case "taxonomy": + default: + $term = get_term_by("term_id", $meta, $elem); + echo $term ? "
    ".$term->name ."
    ID".$meta. "
    +
    " : $meta; + break; + } + break; + } + } + break; + } + } + + // добавляем возможность сортировать колонку + static function add_views_sortable_column($sortable_columns) + { + + return $sortable_columns; + } + + // изменяем запрос при сортировке колонки + static function add_column_views_request( $object ) + { + + } + + //bulk actions + static function register_my_bulk_actions( $bulk_actions ) + { + $bulk_actions['double'] = __("Double", SHMAPPER); + return $bulk_actions; + } + + static function my_bulk_action_handler( $redirect_to, $doaction, $post_ids ) + { + // ничего не делаем если это не наше действие + if( $doaction !== 'double' ) + return $redirect_to; + foreach( $post_ids as $post_id ) + { + $ppost = static::get_instance($post_id); + $ppost->doubled(); + } + $redirect_to = add_query_arg( 'my_bulk_action_done', count( $post_ids ), $redirect_to ); + return $redirect_to; + } + static function my_bulk_action_admin_notice() + { + if( empty( $_GET['my_bulk_action_done'] ) ) return; + $data = $_GET['my_bulk_action_done']; + $msg = sprintf( 'Doubled: %s.', $data ); + echo '

    '. $msg .'

    '; + } + static function my_bulk_edit_custom_box( $column_name, $post_type ) + { + if($post_type != forward_static_call_array( array( get_called_class(),"get_type"), array())) return; + /**/ + static $printNonce = TRUE; + if ( $printNonce ) { + $printNonce = FALSE; + wp_nonce_field( plugin_basename( __FILE__ ), 'book_edit_nonce' ); + } + + $p = static::get_instance($post_id); + require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + $SMC_Object_type = SMC_Object_type::get_instance(); + $obj = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; + + ?> +
    +
    + ".__("Usage in Maps: ", SHMAPPER).""; + break; + default: + if(array_key_exists($column_name, $obj)) + { + echo "
    ".$obj[$column_name]['name']."
    " ; + switch($obj[$column_name]['type']) + { + case "number": + case "string": + + break; + case "date": + + break; + case "boolean": + echo " + + + + + + + + "; + break; + case "media": + + break; + case "array": + + break; + case "post": + + break; + case "taxonomy": + + break; + case "id": + default: + break; + } + } + break; + } + ?> +
    +
    + object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; + + if ( ! empty( $post_ids ) && is_array( $post_ids ) ) + foreach( $post_ids as $post_id ) + { + $_obj = static::get_instance((int)$post_id); + foreach($obj as $key => $value) + { + if($key == 't' ||$key == 'class' ) continue; + switch($obj[$key]['type']) + { + case "number": + case "string": + + break; + case "date": + + break; + case "boolean": + if(!isset($_POST['smc_post_changer'][ $key ]) || (int)$_POST['smc_post_changer'][ $key ] < 0 ) break; + $val = (int)$_POST['smc_post_changer'][ $key ]; + $_obj->update_meta( $key, $val ); + break; + } + } + } + echo json_encode( $_POST ); + wp_die(); + } + + + static function get_extra_fields_title() + { + return __('Parameters', SHMAPPER); + } + + static function my_extra_fields() + { + add_meta_box( 'extra_fields', __('Parameters', SHMAPPER), array(get_called_class(), 'extra_fields_box_func'), static::get_type(), 'normal', 'high' ); + + } + static function extra_fields_box_func( $post ) + { + $lt = static::get_instance( $post ); + //echo static::get_type(); + echo static::view_admin_edit($lt); + wp_nonce_field( basename( __FILE__ ), static::get_type().'_metabox_nonce' ); + } + static function true_save_box_data ( $post_id ) + { + // проверяем, пришёл ли запрос со страницы с метабоксом + if ( !isset( $_POST[static::get_type().'_metabox_nonce' ] ) + || !wp_verify_nonce( $_POST[static::get_type().'_metabox_nonce' ], basename( __FILE__ ) ) ) + return $post_id; + // проверяем, является ли запрос автосохранением + if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) + return $post_id; + // проверяем, права пользователя, может ли он редактировать записи + if ( !current_user_can( 'edit_post', $post_id ) ) + return $post_id; + $lt = static::get_instance( $post_id ); + $metas = static::save_admin_edit($lt); + //var_dump($metas); + //wp_die(); + $lt->update_metas( $metas ); + return $post_id; + } + static function view_admin_edit($obj) + { + require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + $SMC_Object_type = SMC_Object_Type::get_instance(); + $bb = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; + foreach($bb as $key=>$value) + { + if($key == 't' || $key == 'class' ) continue; + $meta = get_post_meta( $obj->id, $key, true); + $$key = $meta; + switch( $value['type'] ) + { + case "number": + $h = ""; + break; + case "boolean": + $h = ""; + break; + default: + $h = ""; + } + $html .="
    +
    ".$value['name'] . "
    +
    + $h +
    +
    +
    "; + } + echo $html; + //echo "
    You must override static methods view_admin_edit and save_admin_edit in class " . get_called_class() . ".
    "; + } + static function save_admin_edit($obj) + { + return array(); + } + } +?> \ No newline at end of file diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php new file mode 100644 index 0000000..bba72a3 --- /dev/null +++ b/class/ShMapPointType.class.php @@ -0,0 +1,374 @@ +prefix . "point_map + WHERE point_id=$post_id;"; + $wpdb->query($query); + } + static function register_all() + { + //Map marker type + $labels = array( + 'name' => __("Map marker type", SHMAPPER), + 'singular_name' => __("Map marker type", SHMAPPER), + 'search_items' => __("Search Map marker type", SHMAPPER), + 'all_items' => __("all Map marker types", SHMAPPER), + 'view_item ' => __("view Map marker type", SHMAPPER), + 'parent_item' => __("parent Map marker type", SHMAPPER), + 'parent_item_colon' => __("parent Map marker type:", SHMAPPER), + 'edit_item' => __("edit Map marker type", SHMAPPER), + 'update_item' => __("update Map marker type", SHMAPPER), + 'add_new_item' => __("add Map marker type", SHMAPPER), + 'new_item_name' => __("new Map marker type name", SHMAPPER), + 'menu_name' => __("Map marker type", SHMAPPER), + ); + register_taxonomy(SHM_POINT_TYPE, [ ], + [ + 'label' => '', // определяется параметром $labels->name + 'labels' => $labels, + 'description' => __('Unique type of every Map markers', SHMAPPER), // описание таксономии + 'public' => true, + 'hierarchical' => false, + 'update_count_callback' => '', + 'show_in_nav_menus' => true, + 'rewrite' => true, + 'capabilities' => array(), + 'meta_box_cb' => "post_categories_meta_box", // callback функция. Отвечает за html код метабокса (с версии 3.8): post_categories_meta_box или post_tags_meta_box. Если указать false, то метабокс будет отключен вообще + 'show_admin_column' => true, // Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5) + '_builtin' => false, + 'show_in_quick_edit' => true, // по умолчанию значение show_ui + ] ); + } + static function tax_menu_correction($parent_file) + { + global $current_screen; + $taxonomy = $current_screen->taxonomy; + if ( $taxonomy == SHM_POINT_TYPE ) + $parent_file = 'shm_page'; + return $parent_file; + } + static function tax_add_admin_menus() + { + add_submenu_page( + 'shm_page', + __("Map marker types", SHMAPPER), + __("Map marker types", SHMAPPER), + 'manage_options', + 'edit-tags.php?taxonomy=' . SHM_POINT_TYPE + ); + } + static function ctg_columns($theme_columns) + { + $new_columns = array + ( + 'cb' => ' ', + 'id' => 'id', + 'name' => __('Name'), + 'icon' => __('Icon', SHMAPPER) + ); + return $new_columns; + } + static function manage_ctg_columns($out, $column_name, $term_id) + { + switch ($column_name) { + case 'id': + $out .= $term_id; + break; + case 'icon': + $icon = get_term_meta( $term_id, 'icon', true ); + $color = get_term_meta( $term_id, 'color', true ); + $logo = wp_get_attachment_image_src($icon, "full")[0]; + echo "
    + +
    +
    "; + break; + default: + break; + } + return $out; + } + static function new_ctg( $tax_name ) + { + require_once(SHM_REAL_PATH."tpl/input_file_form.php"); + ?> +
    + +
    +
    + +
    +
    + + +
    +
    + + +
    +
    + +
    + +
    +
    + + term_id; + $icon = get_term_meta($term_id, "icon", true); + $color = get_term_meta($term_id, "color", true); + $height = get_term_meta($term_id, "height", true); + $height = !$height ? 30 : $height; + $width = get_term_meta($term_id, "width", true); + $width = !$width ? 30 : $width; + } + ?> + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + term_id, "color", true); + $icon = (int)get_term_meta($term->term_id, "icon", true); + $d = wp_get_attachment_image_src($icon, array(100, 100)); + $cur_bgnd = $d[0]; + $class = $is_locked ? " shm-muffle " : ""; + return " +
    +
    +
    +
    " . $term->name . "
    +
    "; + } + static function get_all_ids() + { + return get_terms([ + "taxonomy" => SHM_POINT_TYPE, + "hide_empty" => false, + "fields" => "ids" + + ]); + } + static function wp_dropdown($params=-1) + { + if(!is_array($params)) + $params=[ "id" => "ganres", "name" => "ganres", "class"=> "form-control", "taxonomy"=> SHM_POINT_TYPE]; + $all = get_terms(['taxonomy' => $params['taxonomy'], 'hide_empty' => false ]); + $multiple = $params['multiple'] ? " multiple " : "" ; + $selector =$params['selector'] ? " selector='" . $params['selector'] . "' " : " s='ee' "; + $html = ""; + return $html; + } + static function get_icon_src($term_id, $size=-1) + { + $size = $size == -1 ? get_term_meta( $term_id, "height", true ) : $size; + $icon = get_term_meta( $term_id, "icon", true ); + $d = wp_get_attachment_image_src( $icon, array($size, $size) ); + return $d; + } + static function get_ganre_swicher($params = -1, $type="checkbox", $form_factor="large") + { + if( !is_array($params) || empty($params['prefix']) ) { + $params = array('prefix' => 'ganre'); + } + + $selected = is_array($params['selected']) ? $params['selected'] : explode(",", $params['selected']); + $includes = empty($params['includes']) ? '' : $params['includes']; + $row_class = isset($params['row_class']) ? $params['row_class'] : "" ; + $row_style = isset($params['row_style']) ? $params['row_style'] : ""; ; + $ganres = get_terms(["taxonomy" => SHM_POINT_TYPE, 'hide_empty' => false ]); + $html = "
    "; + switch($params['col_width']) + { + case 12: + $col_width = "shm-1"; + break; + case 6: + $col_width = "shm-2"; + break; + case 4: + $col_width = "shm-3"; + break; + case 3: + $col_width = "shm-4"; + break; + default: + case 2: + $col_width = "shm-6"; + break; + + } + foreach($ganres as $ganre) + { + if( is_array($includes) && !in_array( $ganre->term_id, $includes ) ) continue; + + $icon = get_term_meta($ganre->term_id, "icon", true); + $color = get_term_meta($ganre->term_id, "color", true); + $d = wp_get_attachment_image_src($icon, array(100, 100)); + $cur_bgnd = $d[0]; + $before = ""; + $after = ""; + switch( $form_factor ) + { + case "large": + $class = "ganre_checkbox"; + $before = "
    "; + $after = " + +
    "; + break; + case "stroke": + $class = "ganre_checkbox2"; + $after = " + "; + break; + default: + $class = "ganre_checkbox"; + break; + } + $html .= " + $before + term_id . "' + term_id='" . $ganre->term_id . "' + class='$class' + value='" . $ganre->term_id . "' ". + checked(1, in_array( $ganre->term_id, $selected) ? 1 : 0, false). + "/> + $after"; + } + + if( isset($params['default_none']) ) + { + if ( ! isset( $class ) ) { + $class = ''; + } + $html .= " +
    + + +
    "; + } + + $html .= " + +
    "; + + return $html; + + } +} \ No newline at end of file diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php new file mode 100644 index 0000000..2684d15 --- /dev/null +++ b/class/ShMapper.class.php @@ -0,0 +1,802 @@ +query("CREATE TABLE IF NOT EXISTS `".$wpdb->prefix."point_map` ( + `ID` int(255) unsigned NOT NULL AUTO_INCREMENT, + `point_id` int(255) unsigned NOT NULL, + `map_id` int(255) unsigned NOT NULL, + `date` int(31) unsigned NOT NULL, + `session_id` int(255) unsigned NOT NULL DEFAULT '1', + `approved_date` int(31) unsigned NOT NULL DEFAULT '1', + `approve_user_id` int(255) unsigned NOT NULL, + PRIMARY KEY (`ID`) + ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;"); + update_option(SHMAPPER,[ +// "map_api" => 1, + "map_api" => 2, + "shm_map_is_crowdsourced" => 0, + "shm_map_marker_premoderation" => 1, + "shm_reload" => 1, + "wizzard" => 1, + "shm_personal_text" => __("Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных».", SHMAPPER), + "shm_succ_request_text" => __("Your request has been successfully registered.", SHMAPPER), + "shm_error_request_text" => __("Unknown error.", SHMAPPER), + ]); + $upload = wp_upload_dir(); + $upload_dir = $upload['basedir']; + $upload_dir = $upload_dir . '/shmapper'; + wp_mkdir_p( $upload_dir ); + } + public static function deactivate() + { + + } + static $options; + static $instance; + static function get_instance() + { + if(!static::$instance) + static::$instance = new static; + return static::$instance; + } + static function update_options() + { + update_option( SHMAPPER, static::$options ); + static::$options = get_option(SHMAPPER); + } + function __construct() + { + static::$options = get_option(SHMAPPER); +// static::$options['map_api'] = 2; // hot fix to disable Maps.Yandex + + add_action( "init", [__CLASS__, "add_shortcodes"], 80); + add_action( "wp_head", [__CLASS__, "set_styles"]); + add_filter( "smc_add_post_types", [__CLASS__, "init_obj"], 10); + add_action( 'admin_menu', [__CLASS__, 'admin_page_handler'], 9); + add_action( 'admin_menu', [__CLASS__, 'admin_page_handler2'], 99); + add_action( 'admin_enqueue_scripts', [__CLASS__, 'add_admin_js_script'], 99 ); + add_action( 'wp_enqueue_scripts', [__CLASS__, 'add_frons_js_script'], 99 ); + add_action( "admin_footer", [__CLASS__, "add_wizzard"]); + add_action( 'wp_before_admin_bar_render', [__CLASS__, 'my_admin_bar_render'], 11); + } + + + + static function my_admin_bar_render() + { + global $wp_admin_bar, $shm_all_maps; + if(!current_user_can("manage_options")) return; + + $wp_admin_bar->add_menu( array( + 'parent' => false, + 'id' => 'shmapper_panel', + 'title' => __('Shmapper', SHMAPPER), + 'href' => "/wp-admin/admin.php?page=shm_settings_page" + )); + $wp_admin_bar->add_menu( array( + 'parent' => 'shmapper_panel', + 'id' => 'shmapper_add_map', + 'title' => __('add Map', SHMAPPER), + 'href' => "/wp-admin/post-new.php?post_type=shm_map" + )); + $wp_admin_bar->add_menu( array( + 'parent' => 'shmapper_panel', + 'id' => 'shmapper_maps', + 'title' => __('Maps', SHMAPPER), + 'href' => "/wp-admin/edit.php?post_type=shm_map" + )); + $wp_admin_bar->add_menu( array( + 'parent' => 'shmapper_panel', + 'id' => 'shmapper_edit_maps', + 'title' => __('edit Maps in page', SHMAPPER), + 'href' => "#" + )); + if(is_array($shm_all_maps)) + { + foreach($shm_all_maps as $mid) + { + $map = ShmMap::get_instance($mid); + $wp_admin_bar->add_menu( [ + 'parent' => 'shmapper_edit_maps', + 'id' => 'shmapper_edit_map'.$mid, + 'title' => $map->get("post_title"), + 'href' => "/wp-admin/post.php?post=$mid&action=edit" + ] ); + } + } + $wp_admin_bar->add_menu( array( + 'parent' => 'shmapper_panel', + 'id' => 'shmapper_map_req', + 'title' => __("all Map Requests", SHMAPPER), + 'href' => "/wp-admin/edit.php?post_type=shm_request" + )); + } + + + static function init_obj($init_object) + { + if(!is_array($init_object)) $init_object = []; + $point = []; + $point['t'] = ['type'=>'post']; + $point['location'] = ['type' => 'string', "name" => __("Location", SHMAPPER)]; + $point['latitude'] = ['type'=>'string', "name" => __("Latitude", SHMAPPER)]; + $point['longitude'] = ['type'=>'string', "name" => __("Longitude", SHMAPPER)]; + $point['zoom'] = ['type'=>'number', "name" => __("Zoom", SHMAPPER)]; + $init_object[SHM_POINT] = $point; + + $map = []; + $map['t'] = ['type'=>'post']; + $map['latitude'] = ['type'=>'string', "distination" => "map", "name" => __("Latitude", SHMAPPER)]; + $map['longitude'] = ['type'=>'string', "distination" => "map", "name" => __("Longitude", SHMAPPER)]; + $map['zoom'] = ['type'=>'number', "distination" => "map", "name" => __("Zoom", SHMAPPER)]; + $map['is_legend'] = ['type'=>'boolean', "distination" => "map", "name" => __("Legend exists", SHMAPPER)]; + $map['is_filtered'] = ['type'=>'boolean', "distination" => "map", "name" => __("Filters exists", SHMAPPER)]; + $map['is_csv'] = ['type'=>'boolean', "distination" => "map", "name" => __("Export csv", SHMAPPER)]; + $map['width'] = ['type'=>'number', "distination" => "map", "name" => __("Width")]; + $map['height'] = ['type'=>'number', "distination" => "map", "name" => __("Height")]; + $map['is_search'] = ['type'=>'boolean', "distination" => "map", "name" => __("Map search", SHMAPPER)]; + $map['is_fullscreen'] = ['type'=>'boolean', "distination" => "map", "name" => __("Map full screen", SHMAPPER)]; + $map['is_zoomer'] = ['type'=>'boolean', "distination" => "map", "name" => __("Map zoom slider", SHMAPPER)]; + $map['is_layer_switcher'] = ['type'=>'boolean',"distination"=>"map","name"=>__("Map layer switcher",SHMAPPER)]; + $map['is_lock'] = ['type'=>'boolean',"distination"=>"map","name"=>__("Lock zoom and drag",SHMAPPER)]; + $map['is_clustered'] = ['type'=>'boolean',"distination"=>"map","name"=>__("Formating Marker to cluster", SHMAPPER)]; + $map['default_icon_id'] = ['type'=>'boolean',"distination"=>"map","name"=>__("Default Marker icon", SHMAPPER)]; + + $map['is_form'] = ['type'=>'boolean', "distination" => "form", "name" => __("Form exists", SHMAPPER)]; + $map['notify_owner'] = ['type'=>'boolean', "distination" => "form", "name" => __("Notify owner of Map", SHMAPPER)]; + $map['form_title'] = ['type'=>'string', "distination" => "form", "name" => __("Form Title", SHMAPPER)]; + $map['form_forms'] = ['type'=>'form_editor', "distination" => "form", "name" => __("Form generator", SHMAPPER)]; + $map['is_personal_data'] = ['type'=>'boolean', "distination" => "form", "name" => __("Users can leave their contact details for feedback.", SHMAPPER)]; + $map['is_name_iclude'] = ['type'=>'boolean', "distination" => "form", "name" => __("Unclude Personal name", SHMAPPER)]; + $map['personal_name'] = ['type'=>'string', "distination" => "form", "name" => __("Personal name", SHMAPPER)]; + $map['is_name_required'] = ['type'=>'boolean', "distination" => "form", "name" => __("Required Personal name", SHMAPPER)]; + $map['is_email_iclude'] = ['type'=>'boolean', "distination" => "form", "name" => __("Unclude Personal e-mail",SHMAPPER)]; + $map['personal_email'] = ['type'=>'string', "distination" => "form", "name" => __("Personal e-mail", SHMAPPER)]; + $map['is_email_required'] = ['type'=>'boolean', "distination" => "form", "name" => __("Required Personal e-mail", SHMAPPER)]; + $map['is_phone_iclude'] = ['type'=>'boolean', "distination" => "form", "name" => __("Unclude Personal phone", SHMAPPER)]; + $map['personal_phone'] = ['type'=>'string', "distination" => "form", "name" => __("Personal phone", SHMAPPER)]; + $map['is_phone_required'] = ['type'=>'boolean', "distination" => "form", "name" => __("Required Personal phone", SHMAPPER)]; + $init_object[SHM_MAP] = $map; + + + $req = []; + $req['t'] = ['type' => 'post']; + $req['map'] = ['type' => 'post', "object" => SHM_REQUEST, "color"=> "#5880a2", "name" => __("Map", SHMAPPER)]; + $req['title'] = ['type' => 'string', "name" => __("Title")]; + $req['description'] = ['type' => 'string', "name" => __("Description", SHMAPPER)]; + $req['latitude'] = ['type' => 'string', "name" => __("Latitude", SHMAPPER)]; + $req['longitude'] = ['type' => 'string', "name" => __("Longitude", SHMAPPER)]; + $req['location'] = ['type' => 'string', "name" => __("Location", SHMAPPER)]; + $req['type'] = ['type' => 'taxonomy', "object" => SHM_POINT_TYPE, "name" => __("Type", SHMAPPER)]; + $req['session'] = ['type' => 'id', "object" => "session", "name" => __("Session", SHMAPPER)]; + $req['author'] = ['type' => 'string', "name" => __("Author")]; + $req['contacts'] = ['type' => 'array', "name" => __("Contacts", SHMAPPER)]; + $req['notified'] = ['type' => 'boolean', "name" => __("Aproved", SHMAPPER)]; + $req['notify_date'] = ['type' => 'number', "name" => __("Aprove date", SHMAPPER)]; + $req['notify_user'] = ['type' => 'id', "object" => "user", "name" => __("Accessed User", SHMAPPER)]; + $init_object[SHM_REQUEST] = $req; + + return $init_object; + + } + + static function add_shortcodes() + { + require_once(SHM_REAL_PATH.'shortcode/shmMap.shortcode.php'); + add_shortcode('shmMap', 'shmMap'); + } + + static function add_admin_js_script() + { + //css + wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array(), SHMAPPER_VERSION); + wp_enqueue_style( "ShMapper"); + //js + wp_register_script("inline", admin_url().'/js/inline-edit-post.js', array()); + wp_enqueue_script("inline"); + wp_register_script("ShMapper", plugins_url( '../assets/js/ShMapper.js', __FILE__ ), array('jquery-migrate')); + wp_enqueue_script("ShMapper"); + wp_register_script("ShMapper.admin", plugins_url( '../assets/js/ShMapper.admin.js', __FILE__ ), array()); + wp_enqueue_script("ShMapper.admin"); + if( static::$options['map_api'] == 1 ) + { + wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=".ShMapper::$options['shm_yandex_maps_api_key']."&load=package.full&lang=ru_RU", array()); + wp_enqueue_script("api-maps"); + wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); + wp_enqueue_script("ShMapper.yandex"); + } + else if( static::$options['map_api'] == 2 ) + { + //css + wp_register_style("easyGeocoder", SHM_URLPATH . 'assets/css/easyGeocoder.css', array()); + wp_enqueue_style( "easyGeocoder"); + wp_register_style("leaflet", "https://unpkg.com/leaflet@1.3.4/dist/leaflet.css", array()); + wp_enqueue_style( "leaflet"); + wp_register_style("layerSwitcher", SHM_URLPATH . 'assets/css/layerSwitcher.css', array()); + wp_enqueue_style( "layerSwitcher"); + wp_register_style("MarkerCluster", SHM_URLPATH . 'assets/css/MarkerCluster.css', array()); + wp_enqueue_style( "MarkerCluster"); + wp_register_style("MarkerClusterD", SHM_URLPATH . 'assets/css/MarkerCluster.Default.css', array()); + wp_enqueue_style( "MarkerClusterD"); + wp_register_style("esri-leaflet-geocoder", "https://unpkg.com/esri-leaflet-geocoder@2.2.13/dist/esri-leaflet-geocoder.css", array()); + wp_enqueue_style( "esri-leaflet-geocoder"); + //js + wp_register_script("leaflet", "https://unpkg.com/leaflet@1.3.4/dist/leaflet.js", array()); + wp_enqueue_script("leaflet"); + wp_register_script("esri-leaflet", "https://unpkg.com/esri-leaflet@2.2.3/dist/esri-leaflet.js", array()); + wp_enqueue_script("esri-leaflet"); + wp_register_script("esri-leaflet-geocoder", "https://unpkg.com/esri-leaflet-geocoder@2.2.13/dist/esri-leaflet-geocoder.js", array()); + wp_enqueue_script("esri-leaflet-geocoder"); + wp_register_script("leaflet.markercluster", plugins_url( '../assets/js/leaflet.markercluster-src.js', __FILE__ ), array()); + wp_enqueue_script("leaflet.markercluster"); + wp_register_script("layerSwitcher", plugins_url( '../assets/js/Leaflet.layerSwitcher.js', __FILE__ ), array()); + wp_enqueue_script("layerSwitcher"); + + wp_register_script("easyGeocoder", plugins_url( '../assets/js/easyGeocoder.js', __FILE__ ), array()); + wp_enqueue_script("easyGeocoder"); + + wp_register_script("Leaflet.fs", plugins_url( '../assets/js/Leaflet.fullscreen.min.js', __FILE__ ), array()); + wp_enqueue_script("Leaflet.fs"); + wp_register_script("ShMapper.osm", plugins_url( '../assets/js/ShMapper_osm.js', __FILE__ ), array()); + wp_enqueue_script("ShMapper.osm"); + } + wp_localize_script( "ShMapper", "map_type", array(static::$options['map_api']) ); + + // load media library scripts + wp_enqueue_media(); + //ajax + wp_localize_script( + 'ShMapper', + 'myajax', + array( + 'url' => admin_url('admin-ajax.php'), + 'nonce' => wp_create_nonce('myajax-nonce') + ) + ); + wp_localize_script( + 'ShMapper', + 'myajax2', + array( + 'url' => admin_url('admin-ajax.php') + ) + ); + + wp_localize_script( 'ShMapper', 'shm_maps', array() ); + wp_localize_script( + 'ShMapper', + 'voc', + array( + 'Attantion' => __( "Attantion", SHMAPPER ), + 'Send' => __( "Send" ), + 'Close' => __( "Close" ), + 'Error: no map' => __( "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match", SHMAPPER ), + 'Are you shure?' => __( "Are you shure?", SHMAPPER ), + ) + ); + } + static function add_frons_js_script() + { + + //css + wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array()); + wp_enqueue_style( "ShMapper"); + + wp_enqueue_script('jquery-ui-core'); + wp_enqueue_script('jquery-ui-draggable'); + wp_register_script("touchpunch", plugins_url( '../assets/js/touchpunch.js', __FILE__ ), array()); + wp_enqueue_script("touchpunch"); + wp_register_script("ShMapper", plugins_url( '../assets/js/ShMapper.js', __FILE__ ), array( 'jquery-migrate')); + wp_enqueue_script("ShMapper"); + wp_register_style("layerSwitcher", SHM_URLPATH . 'assets/css/layerSwitcher.css', array()); + wp_enqueue_style( "layerSwitcher"); + wp_register_script("ShMapper.front", plugins_url( '../assets/js/ShMapper.front.js', __FILE__ ), array()); + wp_enqueue_script("ShMapper.front"); + if( static::$options['map_api'] == 1 ) + { + wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=".ShMapper::$options['shm_yandex_maps_api_key']."&load=package.full&lang=ru_RU", array()); + wp_enqueue_script("api-maps"); + wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); + wp_enqueue_script("ShMapper.yandex"); + } + else if( static::$options['map_api'] == 2 ) + { + //css + wp_register_style("easyGeocoder", SHM_URLPATH . 'assets/css/easyGeocoder.css', array()); + wp_enqueue_style( "easyGeocoder"); + wp_register_style("MarkerCluster", SHM_URLPATH . 'assets/css/MarkerCluster.css', array()); + wp_enqueue_style( "MarkerCluster"); + wp_register_style("MarkerClusterD", SHM_URLPATH . 'assets/css/MarkerCluster.Default.css', array()); + wp_enqueue_style( "MarkerClusterD"); + wp_register_style("leaflet", "https://unpkg.com/leaflet@1.3.4/dist/leaflet.css", array()); + wp_enqueue_style( "leaflet"); + wp_register_style("esri-leaflet-geocoder", "https://unpkg.com/esri-leaflet-geocoder@2.2.13/dist/esri-leaflet-geocoder.css", array()); + wp_enqueue_style( "esri-leaflet-geocoder"); + //js + wp_register_script("leaflet", "https://unpkg.com/leaflet@1.3.4/dist/leaflet.js", array()); + wp_enqueue_script("leaflet"); + wp_register_script("esri-leaflet", "https://unpkg.com/esri-leaflet@2.2.3/dist/esri-leaflet.js", array()); + wp_enqueue_script("esri-leaflet"); + wp_register_script("esri-leaflet-geocoder", "https://unpkg.com/esri-leaflet-geocoder@2.2.13/dist/esri-leaflet-geocoder.js", array()); + wp_enqueue_script("esri-leaflet-geocoder"); + wp_register_script("easyGeocoder", plugins_url( '../assets/js/easyGeocoder.js', __FILE__ ), array()); + wp_enqueue_script("easyGeocoder"); + wp_register_script("leaflet.markercluster", plugins_url( '../assets/js/leaflet.markercluster-src.js', __FILE__ ), array()); + wp_enqueue_script("leaflet.markercluster"); + wp_register_script("layerSwitcher", plugins_url( '../assets/js/Leaflet.layerSwitcher.js', __FILE__ ), array()); + wp_enqueue_script("layerSwitcher"); + wp_register_script("Leaflet.fs", plugins_url( '../assets/js/Leaflet.fullscreen.min.js', __FILE__ ), array()); + wp_enqueue_script("Leaflet.fs"); + wp_register_script("ShMapper.osm", plugins_url( '../assets/js/ShMapper_osm.js', __FILE__ ), array()); + wp_enqueue_script("ShMapper.osm"); + + } + wp_localize_script( 'ShMapper', 'map_type', array( static::$options['map_api'] ) ); + + // ajax. + wp_localize_script( + 'ShMapper', + 'myajax', + array( + 'url' => admin_url( 'admin-ajax.php' ), + 'nonce' => wp_create_nonce( 'myajax-nonce' ), + ) + ); + wp_localize_script( + 'ShMapper', + 'myajax2', + array( + 'url' => admin_url('admin-ajax.php') + ) + ); + wp_localize_script( + 'ShMapper', + 'shm_set_req', + array( + 'url' => admin_url('admin-ajax.php') + ) + ); + wp_localize_script( 'ShMapper', 'shm_maps', array() ); + wp_localize_script( + 'ShMapper', + 'voc', + array( + 'Attantion' => __( "Attantion", SHMAPPER ), + 'Send' => __( "Send" ), + 'Close' => __( "Close" ), + 'Error: no map' => __( "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match", SHMAPPER ), + ) + ); + } + static function set_styles() + { + echo ""; + } + static function admin_page_handler() + { + /**/ + add_menu_page( + __('Shmapper', SHMAPPER), + __('Shmapper', SHMAPPER), + 'manage_options', + 'shm_page', + [ __CLASS__, 'setting_pages' ], + SHM_URLPATH . "assets/img/shmapper_32x32_white.svg",//"dashicons-admin-site", // icon url + '19.123456' + ); + } + static function admin_page_handler2() + { + add_submenu_page( + 'shm_page', + __("Settings"), + __("Settings"), + 'manage_options', + 'shm_settings_page', + [ __CLASS__, 'setting_pages' ] + ); + } + static function setting_pages() + { + $latitude = 55.8; + $longitude = 37.8; + $zoom = 4; + if ( static::$options['shm_default_zoom'] ) { + $zoom = static::$options['shm_default_zoom']; + } + if ( static::$options['shm_default_latitude'] ) { + $latitude = static::$options['shm_default_latitude']; + } + if ( static::$options['shm_default_longitude'] ) { + $longitude = static::$options['shm_default_longitude']; + } + + $mapType = ShmMap::get_map_types()[ ShMapper::$options['map_api'] ][0]; + + echo "
    +
    +
    + +

    ". + __("Settings") . + "

    +
    +
    +
    +
      +
    • +
      +
      ". + __("Map API", SHMAPPER) . + "
      +
      +
      + + +
      +
      + + +
      + +
      + +
      +
      +

      +

      ".__("Yandex.Maps API Key", SHMAPPER)."
      + + ".__("ATTENTION: you must specify a key for working with the Yandex.Maps API.", SHMAPPER)."
      ".__("Learn more here:", SHMAPPER)." https://tech.yandex.ru/maps/jsapi/doc/2.1/dg/concepts/load-docpage/
      +

      +

      +
      + +
      +
      +
    • +
    • +
      +
      ". + __("Interactive", SHMAPPER) . + "
      +
      +

      + + +
      + ". + __("пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности.", SHMAPPER). + " +

      +

      + + +
      + ". + __("все сообщения будут добавляться в статусе «Черновик»", SHMAPPER). + " +
      + ". + __("ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки", SHMAPPER). + " +

      +

      + + +

      +
      +
      + +
      +
      +
    • +
    • +
      +
      ". + __("Protection", SHMAPPER) . + "
      +
      + + +

      +

      Google reCAPTCHA site key
      + +

      +

      Google reCAPTCHA secret key
      + + ". + sprintf(__("What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s.", SHMAPPER), "", "") . + " +
      + ". + __("Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha", SHMAPPER). + " +
      +
      +
      + +
      +
      +
    • +
    • +
      +
      ". + __("Vocabulary", SHMAPPER) . + "
      +
      +
      ". + __("Save personal data garantee", SHMAPPER) . + "
      + + +

      +

      ". + __("Successful send map request", SHMAPPER) . + "
      + + +

      +

      ". + __("Error send map request", SHMAPPER) . + "
      + +
      +
      + +
      +
      +
    • + + +
    • +
      +
      ". + __( "Coordinates", SHMAPPER ) . + "
      +
      +
      + +
      +

      + " . esc_html__( "Set default coordinates", SHMAPPER ) . " +

      + + + + + + + +
      +
      +
      +
    • +
    • +
      +
      ". + __("Wizzard", SHMAPPER) . + "
      +
      +
      " . __("Restart wizzard", SHMAPPER) . "
      +
      +
      +
      +
    +
    "; + } + static function add_wizzard() + { + if(!static::$options['wizzard']) return; + //update_option("shm_wizard_step", 0); + $step = (int)get_option("shm_wizard_step"); + $stepData = static::get_wizzard_lst()[$step]; + $i =0; + foreach(static::get_wizzard_lst() as $st) + { + $i++; + $active = $i == $step+1 ? "active" : ""; + $steps_line .= " +
    $i
    "; + } + + $title = $stepData['title']; + $text = $stepData['text']; + $html = " +
    +
    + +
    +
    + $steps_line +
    +
    + $title +
    +
    + $text +
    + +
    +
    + +
    + "; + echo $html; + } + static function get_wizzard_lst() + { + return [ + [ + "title" => "Приветствуем Вас в Мастере конфигурации Shmapper", + "text" => "Сначала необходимо указать общие настройки. Нажмите на кнопку чтобы перейти в нужный раздел", + "selector" => ' a[href="admin.php?page=shm_page"].toplevel_page_shm_page', + "parent_selector" => '#toplevel_page_shm_page', + "href" => "/wp-admin/admin.php?page=shm_page" + ], + [ + "title" => "Настройте Shmapper", + "text" => "Измените настройки, которые Вас не устраивают. Для подключения reCAPTCHA необходимо создать учётную запись на Google.com", + "selector" => ' a[href="admin.php?page=shm_page"].toplevel_page_shm_page', + "parent_selector" => '#toplevel_page_shm_page', + "href" => '/wp-admin/admin.php?page=shm_page', + ], + [ + "title" => "Создайте вашу первую карту", + "text" => "Нажмите кнопку \"Добавить карту\" в самом верху страницы", + "selector" => '#adminmenuwrap a[href=\"edit.php?post_type=shm_map\"]', + "alt_selector" => "body.post-type-shm_map .page-title-action" , + "href" => '/wp-admin/edit.php?post_type=shm_map', + ], + [ + "title" => "Новая карта", + "text" => "На карте выберите видимую область.

    Создайте первый Маркер указав на нужное место карты правой кнопкой мыши.

    Заполните поля и нажмите \"Создать\". ", + "selector" => '#adminmenuwrap a[href=\"edit.php?post_type=shm_map\"]', + "alt_selector" => 'body.post-type-shm_map #publish', + "parent_selector" => '#adminmenuwrap .toplevel_page_shm_page', + "href" => '/wp-admin/post-new.php?post_type=shm_map', + ], + [ + "title" => "Новая карта", + "text" => "Последовательно заполните предлаженные поля. В разделе \"Форма запроса\" создайте простейшую форму обратной связи, по которой Посетители смогут информировать Вас о предлагаемых Вам новых Маркерах. По окончании нажмите кнопку \"Опубликовать\"", + "selector" => '#adminmenuwrap a[href=\"edit.php?post_type=shm_map\"]', + "parent_selector" => '#adminmenuwrap .toplevel_page_shm_page', + "href" => '', + ], + ]; + } +} \ No newline at end of file diff --git a/class/ShMapperRequest.class.php b/class/ShMapperRequest.class.php new file mode 100644 index 0000000..c20ed79 --- /dev/null +++ b/class/ShMapperRequest.class.php @@ -0,0 +1,478 @@ + __('Map Request', SHMAPPER), + 'singular_name' => __("Map Request", SHMAPPER), + 'add_new' => __("add Map Request", SHMAPPER), + 'add_new_item' => __("add Map Request", SHMAPPER), + 'edit_item' => __("edit Map Request", SHMAPPER), + 'new_item' => __("add Map Request", SHMAPPER), + 'all_items' => __("all Map Requests", SHMAPPER), + 'view_item' => __("view Map Request", SHMAPPER), + 'search_items' => __("search Map Request", SHMAPPER), + 'not_found' => __("Map Request not found", SHMAPPER), + 'not_found_in_trash' => __("no found Map Request in trash", SHMAPPER), + 'menu_name' => __("all Map Requests", SHMAPPER) + ); + $args = array( + 'labels' => $labels + ,'public' => true + ,'show_ui' => true + ,'has_archive' => true + ,'exclude_from_search' => false + ,'menu_position' => 19 + ,'menu_icon' => "dashicons-edit" + ,'show_in_menu' => "shm_page" + ,'show_in_rest' => true + ,'supports' => array( 'title', "editor", "thumbnail" ) + ,'capability_type' => 'page' + ); + register_post_type(SHM_REQUEST, $args); + } + + static function add_views_column( $columns ) + { + $columns = parent::add_views_column( $columns ); + unset($columns['contacts']); + unset($columns['location']); + unset($columns['longitude']); + unset($columns['notify_date']); + unset($columns['notify_user']); + unset($columns['author']); + $columns['thumb'] = "

    "; + $new = []; + foreach($columns as $key => $val) + { + switch($key) + { + case "notified": + $new[$key] = __("Approving", SHMAPPER); + break; + case "session": + $new["session"] = __("Author"); + break; + case "latitude": + $new["location"] = __("GEO location", SHMAPPER); + break; + default: + $new[$key] = $val; + } + } + return $new; + } + static function fill_views_column($column_name, $post_id) + { + $obj = static::get_instance( $post_id ); + switch($column_name) + { + case "location": + echo __("Latitude", SHMAPPER).": " . $obj->get_meta("latitude") ."". + "
    ". + __("Longitude", SHMAPPER).": " . $obj->get_meta("longitude") ."". + "
    ". + __("Location", SHMAPPER).": " . $obj->get_meta("location") .""; + break; + case "session": + $contacts = $obj->get_meta("contacts"); + echo implode("
    ", $contacts); + break; + case "type": + $term_id = $obj->get_meta("type"); + $term = get_term($term_id, SHM_POINT_TYPE); + if($term_id) + { + $icon = ShMapPointType::get_icon($term , $obj->get_meta("notified")); + } + else + { + $map_id = $obj->get_meta("map"); + $diid = get_post_meta($map_id, "default_icon_id", true); + $icon = "
    +
    "; + } + echo $icon; + break; + case "notified": + echo $obj->get_notified_form(); + break; + case "thumb": + $img = get_the_post_thumbnail_url( $post_id, [75, 75] ); + echo "
    " ; + break; + default: + parent::fill_views_column($column_name, $post_id); + break; + } + } + + static function view_admin_edit($obj) + { + + require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + + $SMC_Object_type = SMC_Object_Type::get_instance(); + $bb = $SMC_Object_type->object [forward_static_call_array( array( get_called_class(),"get_type"), array()) ]; + $html = ''; + + foreach($bb as $key => $value) + { + if($key == 't' || $key == 'class' || $key == 'contacts' || $key == 'notify_user' ) continue; + $meta = get_post_meta( $obj->id, $key, true); + +// $$key = $meta; + + switch( $value['type'] ) + { + case "number": + $h = ""; + break; + case "boolean": + $h = ""; + break; + case "post": + $h = "$meta"; + break; + default: + $h = ""; + } + switch($key) + { + case "map": + $h = ShmMap::wp_dropdown([ + "selected" => $meta, + "class" => "sh-form", + "name" => "map", + "id" => "map", + "posts" => ShmMap::get_all(), + ]); + break; + case "type": + $h = ShMapPointType::get_ganre_swicher([ + 'selected' => $meta, + 'prefix' => "type", + 'col_width' => 3 + ], 'radio' ); + + + break; + case "description": + $h = ""; + break; + } + + $html .= "
    +
    ".$value['name'] . "
    +
    + $h +
    +
    +
    "; + } + + echo empty($html) ? '' : $html; + + } + static function save_admin_edit($obj) + { + require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + $SMC_Object_type = SMC_Object_Type::get_instance(); + $_obj = $SMC_Object_type->object [static::get_type()]; + $arr = []; + foreach($_obj as $key=>$value) + { + if( $key == 't' || $key == 'class' || $key == 'contacts' || $key == 'notify_user' ) continue; + if($key == "notified" && $_POST[$key] != 1) + $arr[$key] = -1; + else + $arr[$key] = sanitize_text_field($_POST[$key]); + } + + return $arr; + } + static function insert($data) + { + $h = array(); + $map = ShmMap::get_instance((int)$data['id']); + $h['map_id'] = $map->get('post_title'); + $contents = array(); + $form = $map->get_meta('form_forms'); + $emails = array(); + $contacts = array(); + $title = $description = ''; + + if( $data['shm_form_name'] ) + { + $contacts[] = sanitize_text_field($data['shm_form_name']); + $author = sanitize_text_field($data['shm_form_name']); + } + if( $data['shm_form_phone'] ) + $contacts[] = sanitize_text_field($data['shm_form_phone']); + if( $data['shm_form_email']) + { + $contacts[] = sanitize_email($data['shm_form_email']); + $emails[] = sanitize_email($data['shm_form_email']); + } + foreach($form as $key => $val) + { + if($val['type'] == SHMAPPER_MARK_TYPE_ID) + continue; + if($val['type'] == SHMAPPER_EMAIL_TYPE_ID) + { + $emails[] = sanitize_email($data['elem'][$key]); + $contacts[] = sanitize_email($data['elem'][$key]); + } + if( + $val['type'] == SHMAPPER_PHONE_TYPE_ID || + $val['type'] == SHMAPPER_NAME_TYPE_ID + ) + $contacts[] = sanitize_text_field($data['elem'][$key]); + if($val['type'] == SHMAPPER_NAME_TYPE_ID) + $author = sanitize_text_field($data['elem'][$key]); + if($val['type'] == SHMAPPER_TEXTAREA_TYPE_ID) + { + $description .= $data['elem'][$key]; + } + if($key == 1) + { + //$description .= $data['elem'][1] . ", title type=". SHMAPPER_TITLE_TYPE_ID; + } + if($val['type'] == SHMAPPER_TITLE_TYPE_ID) + { + $title .= sanitize_text_field($data['elem'][$key]); + } + $tpp = ShmForm::get_type_by( "id", $val['type'] ); + if(SHMAPPER_IMAGE_TYPE_ID != $val['type'] ) + $contents[] = "".$tpp['title'].": ".sanitize_text_field($data['elem'][$key]).""; + } + $contents[] = "
    " . sanitize_text_field($data['shm_point_loc']) . "
    "; + $h['contents'] = implode("
    ", $contents); + $arr = [ + "post_type" => static::get_type(), + "post_name" => $title ? $title : $map->get("post_name"), + "post_title" => $title ? $title : $map->get("post_title"), + "post_content" => sanitize_text_field( $h['contents'] ), + "map" => (int)$data['id'], + "location" => sanitize_text_field($data['shm_point_loc']), + "latitude" => ( (int) ($data['shm_point_lat'] * 10000)) / 10000, + "longitude" => ( (int) ($data['shm_point_lon'] * 10000)) / 10000, + "type" => sanitize_text_field($data['shm_point_type']), + "contacts" => $contacts, + "description" => $description, + "author" => $author + ]; + $new_req = parent::insert($arr); + + //attach + require_once( ABSPATH . 'wp-admin/includes/image.php' ); + require_once( ABSPATH . 'wp-admin/includes/file.php' ); + require_once( ABSPATH . 'wp-admin/includes/media.php' ); + $overrides = array( 'test_form' => false ); + foreach( $_FILES as $file ) + { + $movefile = wp_handle_upload( $file, $overrides ); + if ( $movefile && empty($movefile['error']) ) + { + $filename = $movefile['file']; + $filetype = $movefile['type']; + $filetype = wp_check_filetype( basename( $filename ), null ); + $url = $movefile['url']; + $parent_post_id = $new_req->id; + $wp_upload_dir = wp_upload_dir(); + + $attachment = [ + 'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ), + 'post_mime_type' => $filetype['type'], + 'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ), + 'post_content' => '', + 'post_status' => 'inherit' + ]; + // Вставляем запись в базу данных. + $attach_id = wp_insert_attachment( $attachment, $filename, $parent_post_id ); + set_post_thumbnail($parent_post_id, $attach_id); + $h['contents'] .= "

    + +

    "; + } + else + { + //echo "Возможны атаки при загрузке файла!\n"; + } + + } + + + + //notify map owner + if($notify_owner = $map->get_meta("notify_owner")) + { + $author_id = $map->get("post_author"); + $user = get_user_by("id", $author_id); + $email = $user->get('user_email'); + $semail = get_bloginfo( "admin_email" ); + $suser = $author ? $author : __("Uknown User", SHMAPPER); + $site = get_bloginfo("name"); + $headers = array( + "From: $site <$semail>", + 'content-type: text/html', + ); + $is = wp_mail( + $email, + sprintf(__("<%s> Request to your Map from [%s] [%s]", SHMAPPER), $site, $suser, $map->get("post_title")) , + $h['contents']. "\n\n

    " . + sprintf(__("You may see this %s", SHMAPPER), get_bloginfo("url") . "/wp-admin/edit.php?post_type=shm_request") + . "

    ", + $headers + ); + } + + return $new_req; + } + function get_notified_form() + { + if($notify = $this->get_meta("notified") > 0) + { + $user = get_user_by("id", $this->get_meta("notify_user")); + $html = "

    " . $user->display_name . "

    " . date("j.n.Y H:m", $this->get_meta("notify_date")); + } + else + { + $html = " +

    +
    +
    ". + __("Approve", SHMAPPER). + "
    +
    + +
    +
    +
    "; + } + return $html; + } + function notify() + { + $this->update_meta("notify_user", get_current_user_id()); + $this->update_meta("notify_date", time()); + $this->update_meta("notified", true); + $point = ShmPoint::insert([ + "post_title" => (string)$this->get("post_title"), + "post_name" => (string)$this->get("post_name"), + "post_content" => (string)$this->get_meta("description"), + "latitude" => $this->get_meta("latitude"), + "longitude" => $this->get_meta("longitude"), + "location" => $this->get_meta("location"), + "type" => (int)$this->get_meta("type"), + "map_id" => (int)$this->get_meta("map"), + ]); + if($attach_id = get_post_thumbnail_id($this->id)) + { + set_post_thumbnail($point->id, (int)$attach_id); + } + return $point; + } + static function before_delete_post( $post_id ) + { + $obj = static::get_instance($post_id); + if($obj->get("post_type") !== static::get_type()) return; + if( has_post_thumbnail( $post_id ) ) + { + $attachment_id = get_post_thumbnail_id( $post_id ); + if ( + empty ( + get_posts([ + 'post_type' => 'any', + 'post_status' => 'any', + 'fields' => 'ids', + 'no_found_rows' => true, + 'posts_per_page' => -1, + 'meta_key' => '_thumbnail_id', + 'meta_value' => $attachment_id, + 'post__not_in' => array( $post_id ) + ]) + ) + ) + { + $attachment_urls = array( wp_get_attachment_url( $attachment_id ) ); + foreach ( get_intermediate_image_sizes() as $size ) + { + $intermediate = image_get_intermediate_size( $attachment_id, $size ); + if ( $intermediate ) + { + $attachment_urls[] = $intermediate['url']; + } + } + $used = array(); + foreach ( $attachment_urls as $attachment_url ) + { + $used = array_merge( + $used, + get_posts( [ + 'post_type' => 'any', + 'post_status' => 'any', + 'fields' => 'ids', + 'no_found_rows' => true, + 'posts_per_page' => -1, + 's' => $attachment_url, + 'post__not_in' => array( $post_id ) + ] ) + ); + } + if ( empty( $used ) ) + wp_delete_attachment( $attachment_id, true ); + } + } + return $post_id; + } + static function add_menu_notification() + { + global $submenu ; + $not_approved = get_posts([ + "numberposts" => -1, + "post_type" => static::get_type(), + "fields" => "ids", + "post_status" => "publish", + "meta_query" => [ + "relation" => "OR", + [ + "key" => "notified", + "compare" => "NOT EXISTS" + ], + [ + "key" => "notified", + "value" => -1, + "compare" => "=", + + ] + ] + ]); + //var_dump($submenu["shm_page"] ); + //wp_die(); + if(count($not_approved)) + { + foreach ( $submenu["shm_page"] as $key => $value ) + { + if ( $submenu["shm_page"][$key][2] == "edit.php?post_type=shm_request" ) + { + $submenu["shm_page"][$key][0] .= ' ' . count($not_approved) . ''; + return; + } + } + } + } +} \ No newline at end of file diff --git a/class/ShMapper_Assistants.class.php b/class/ShMapper_Assistants.class.php new file mode 100644 index 0000000..dfa6cd6 --- /dev/null +++ b/class/ShMapper_Assistants.class.php @@ -0,0 +1,99 @@ +get('post_type') ) + { + if (isset($_GET['ADMIN_FILTER_FIELD']) && $_GET['ADMIN_FILTER_FIELD'] > 1) + { + $map = ShmMap::get_instance( $_GET['ADMIN_FILTER_FIELD'] ); + $query->query_vars['post__in'] = $map->get_points_args(); + } + } + } + + static function ba_admin_posts_filter_restrict_manage_posts() + { + global $wpdb, $post, $wp_list_table, $map_dropdown; + $current = isset($_GET['ADMIN_FILTER_FIELD'])? $_GET['ADMIN_FILTER_FIELD']:''; + if($post && $post->post_type == SHM_POINT) + { + $map_dropdown = $map_dropdown ? $map_dropdown : ShmMap::get_all(); + echo ShmMap::wp_dropdown([ + "posts" => $map_dropdown, + "name" => "ADMIN_FILTER_FIELD", + "selected" => $current, + "style" => "width:120px;", + "select_none" => __("all maps", SHMAPPER) + ]); + ?> + + + + +
    + + '; + return $text.$html; + + } + static function get_recaptcha_form() + { + + } + static function shm_after_request_form2($text) + { + //SESSION if session-plugin active + if(!shm_is_session() || !$_SESSION) return $text; + $shm_reqs = $_SESSION['shm_reqs']; + if(!is_array($shm_reqs)) + $shm_reqs = [ ]; + $html = "
    +
    +
    " . + __("Your requests to this Map ", SHMAPPER) . + "
    +
    +
    ". + $shm_reqs[0] . + "
    +
    "; + return $text.$html; + } +} \ No newline at end of file diff --git a/class/ShMapper_ajax.class.php b/class/ShMapper_ajax.class.php new file mode 100644 index 0000000..922f685 --- /dev/null +++ b/class/ShMapper_ajax.class.php @@ -0,0 +1,521 @@ + (string)$res->get("post_title"), + "post_name" => (string)$res->get("post_name"), + "post_content" => (string)$res->get_meta("description"), + "latitude" => $res->get_meta("latitude"), + "longitude" => $res->get_meta("longitude"), + "location" => $res->get_meta("location"), + "type" => (int)$res->get_meta("type"), + "map_id" => (int)$res->get_meta("map"), + ]); + + if($attach_id = get_post_thumbnail_id($res->id)) { + set_post_thumbnail($point->id, (int)$attach_id); + } + + SMC_Post::delete($res->id); + } + + return $res; + } + + static function shm_ajax3_submit() + { + /**/ + $data = $_POST; + $data['elem'] = explode(",", $data['elem']); + foreach($data['elem'] as $i => $v) { + $data['elem'][$i] = str_replace("{{shmapper_comma}}", ",", $v); + } + + if( ShMapper::$options['shm_settings_captcha'] ) + { + require_once( SHM_REAL_PATH . "assets/recaptcha-php/recaptcha.class.php" ); + $reCaptcha = new ReCaptcha( ShMapper::$options['shm_captcha_secretKey'] ); + $response = $reCaptcha->verifyResponse( + $_SERVER["REMOTE_ADDR"], + $data['cap'] + ); + switch( $response->success ) + { + case(true): + $res = static::insert_marker($data); + $msg = ShMapper::$options['shm_succ_request_text']; + break; + default: + $msg = ShMapper::$options['shm_error_request_text'] . " : " . $response->errorCodes->msg; + break; + } + $grec = ShMapper_Assistants::shm_after_request_form(""); + } + else + { + $res = static::insert_marker($data); + $msg = ShMapper::$options['shm_succ_request_text']; + } + + //load image + if( $res AND $res->id > 1 ) { + + } + $form = ShmForm::form( get_post_meta( $data['id'], "form_forms", true ), ShmMap::get_instance($data['id']) ); + $answer = [ + "reload" => ShMapper::$options['shm_reload'] ? 1 : 0, + 'res' => $res, + 'data' => $data, + "msg" => $msg, + //"form" => $form, + "grec" => $grec, + //"attach_id" => $attach_id, + 'grecaptcha' => ShMapper::$options['shm_settings_captcha'] + ]; + wp_die( json_encode( $answer ) ); + } + static function ajax_submit() + { + try + { + static::myajax_submit(); + } + catch(Error $ex) + { + $d = [ + "Error", + array( + 'msg' => $ex->getMessage (), + 'log' => $ex->getTrace () + ) + ]; + $d_obj = json_encode( $d ); + print $d_obj; + wp_die(); + } + wp_die(); + } + static function myajax_submit() + { + global $wpdb; + $nonce = $_POST['nonce']; + if ( !wp_verify_nonce( $nonce, 'myajax-nonce' ) ) die ( $_POST['params'][0] ); + + $params = $_POST['params']; + $action = sanitize_text_field($params[0]); + $d = array( $action, array() ); + switch($action) + { + case "test": + $map_id = sanitize_text_field($params[1]); + $num = sanitize_text_field($params[2]); + $d = array( + $action, + array( + "text" => 'testing', + ) + ); + break; + case "shm_doubled": + $map_id = sanitize_text_field($params[1]); + $map = ShmMap::get_instance( $map_id ); + $new_map = $map->doubled(); + $d = array( + $action, + array( + "text" => 'shm_doubled', + ) + ); + break; + case "shm_wnext": + $step = (int)get_option("shm_wizard_step"); + $step++; + if($step < count(ShMapper::get_wizzard_lst())) + { + $stepData = ShMapper::get_wizzard_lst()[$step]; + $messge = __("Next step", SHMAPPER); + } + else + { + ShMapper::$options["wizzard"] = 0; + ShMapper::update_options(); + $step = 0; + $messge = __("Congratulation! That's all!", SHMAPPER); + } + update_option("shm_wizard_step", $step); + $d = array( + $action, + array( + "href" => $stepData['href'], + "msg" => $messge + ) + ); + break; + case "shm_wclose": + ShMapper::$options["wizzard"] = 0; + ShMapper::update_options(); + update_option("shm_wizard_step", 0); + $d = array( + $action, + array( + "msg" => __("Wizzard closed", SHMAPPER) , + ) + ); + break; + case "shm_wrestart": + ShMapper::$options["wizzard"] = 1; + ShMapper::update_options(); + update_option("shm_wizard_step", 0); + $d = array( + $action, + array( + "msg" => __("Wizzard restarted", SHMAPPER), + ) + ); + break; + case "shm_notify_req": + $req_id = sanitize_text_field($params[1]); + $req = ShMapperRequest::get_instance($req_id); + $new_id = $req->notify(); + $d = array( + $action, + array( + "text" => $req->get_notified_form(), + "post_id" => $req_id, + "newpointid"=> $new_id, + "msg" => __("Approve succesfully and insert new Map marker", SHMAPPER) + ) + ); + break; + case "shm_trash_req": + $req_id = sanitize_text_field($params[1]); + $req = ShMapperRequest::get_instance($req_id); + wp_trash_post( $req_id ); + $d = array( + $action, + array( + "post_id" => $req_id, + "msg" => __("Request put to Trash", SHMAPPER) + ) + ); + break; + case "shm_add_before": + $num = sanitize_text_field($params[1]); + $post_id = sanitize_text_field($params[2]); + $type_id = sanitize_text_field($params[3]); + $d = array( + $action, + array( + "text" => ShmForm::get_admin_element($num,["type" => $type_id]), + "order" => $num, + "type_id" => $type_id + ) + ); + break; + case "shm_add_after": + $num = sanitize_text_field($params[1]); + $post_id = sanitize_text_field($params[2]); + $type_id = sanitize_text_field($params[3]); + $d = array( + $action, + array( + "text" => ShmForm::get_admin_element($num,["type" => $type_id]), + "order" => $num, + "type_id" => $type_id + ) + ); + break; + case "shm_csv": + $map_id = sanitize_text_field($params[1]); + $map = ShmMap::get_instance($map_id); + $link = $map->get_csv(); + $d = array( + $action, + [ + "text" => $link, + "name" => "map" //$map->get("post_title") + ] + ); + break; + case "shm_set_req": + $data = $params[1]; + if( ShMapper::$options['shm_settings_captcha'] ) + { + require_once( SHM_REAL_PATH . "assets/recaptcha-php/recaptcha.class.php" ); + $reCaptcha = new ReCaptcha( ShMapper::$options['shm_captcha_secretKey'] ); + $response = $reCaptcha->verifyResponse( + $_SERVER["REMOTE_ADDR"], + sanitize_text_field($data['cap']) + ); + switch( $response->success ) + { + case(true): + $res = ShMapperRequest::insert($data); + $msg = ShMapper::$options['shm_succ_request_text']; + break; + default: + $msg = ShMapper::$options['shm_error_request_text'] . " : " . $response->errorCodes->msg; + break; + } + $grec = ShMapper_Assistants::shm_after_request_form(""); + /**/ + //$msg = "msg: ". $data['cap']; + } + else + { + $res = ShMapperRequest::insert($data); + $msg = ShMapper::$options['shm_succ_request_text']; + } + + $d = array( + $action, + array( + "msg" => $msg, + "res" => $res, + //"grec" => $grec, + //'grecaptcha' => ShMapper::$options['shm_settings_captcha'] + ) + ); + break; + case "shm_delete_map_hndl": + $data = $params[1]; + $id = sanitize_text_field($data["id"]); + $map = ShmMap::get_instance( $id ); + $res = $map->shm_delete_map_hndl($data); + $d = array( + $action, + array( + "msg" => $res['message'], + "res" => $res, + "data" => $data, + "id" => $id + ) + ); + break; + case "shm_delete_map": + $id = sanitize_text_field($params[1]); + $href = sanitize_text_field($params[2]); + $map = ShmMap::get_instance( $id ); + $d = array( + $action, + array( + "text" => [ + "title" => sprintf(__("Are you want delete %s?", SHMAPPER), $map->get("post_title") ), + "content" => $map->get_delete_form( $href ), + "send" => __("Delete"), + "sendHandler" => "shm_delete_map_hand", + "sendArgs" => $id + ], + ) + ); + break; + case "shm_add_point_prepaire": + $map_id = $params[1][0] = sanitize_text_field($params[1][0]); + $x = $params[1][1] = sanitize_text_field($params[1][1]); + $y = $params[1][2] = sanitize_text_field($params[1][2]); + $ad = $params[1][3] = sanitize_text_field($params[1][3]); + $d = array( + $action, + array( + "text" => [ + 'title' => __("add Map Point", SHMAPPER), + "content" => ShmPoint::get_insert_form( $params[1] ), + "send" => __("Create"), + "sendHandler" => "create_point" + ], + ) + ); + break; + case "shm_create_map_point": + $data = $params[1]; + $point = ShmPoint::insert($data); + $type_term_id = sanitize_text_field($data['type']); + $type = get_term($type_term_id, SHM_POINT_TYPE); + $pointdata = [ + "post_title" => sanitize_text_field($data["post_title"]), + "post_content" => $data["post_content"], + "latitude" => sanitize_text_field($data["latitude"]), + "longitude" => sanitize_text_field($data["longitude"]), + "location" => sanitize_text_field($data["location"]), + "color" => get_term_meta($type->term_id, "color", true), + "height" => get_term_meta($type->term_id, "height", true), + "icon" => ShMapPointType::get_icon_src($type->term_id)[0], + "term_id" => $type_term_id, + "mapid" => "ShmMap".sanitize_text_field($data['map_id']).sanitize_text_field($data['map_id']) + ]; + $d = array( + $action, + array( + "id" => $point->id, + "data" => $pointdata, + "msg" => 'success', + ) + ); + break; + case "shm_voc": + $voc = sanitize_text_field($params[1]); + ShMapper::$options[$voc] = sanitize_text_field($params[2]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => __("Change Vocabulaty: ", SHMAPPER) . $voc.": ".ShMapper::$options[$voc], + ) + ); + break; + case "map_api": + ShMapper::$options['map_api'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => sanitize_text_field($params[1]) == 1 ? "Yandex Map API" : "OpenStreet Map API", + ) + ); + break; + case "shm_yandex_maps_api_key": + ShMapper::$options['shm_yandex_maps_api_key'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => __( "Yandex.Maps API key Saved" , SHMAPPER), + "hide_dang" => sanitize_text_field($params[1]) != "" && ShMapper::$options['shm_yandex_maps_api_key'] != "" ? 1 : 0 + ) + ); + break; + case "shm_default_longitude": + ShMapper::$options['shm_default_longitude'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => __( "New coordinates saved" , SHMAPPER ), + ), + ); + break; + case "shm_default_latitude": + ShMapper::$options['shm_default_latitude'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + //"msg" => __( "New coordinates saved" , SHMAPPER ), + ), + ); + break; + case "shm_default_zoom": + ShMapper::$options['shm_default_zoom'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + //"msg" => __( "New coordinates saved" , SHMAPPER ), + ), + ); + break; + case "shm_map_is_crowdsourced": + ShMapper::$options['shm_map_is_crowdsourced'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => __(sanitize_text_field($params[1]) ? "Users can add Placemarks" : "Users don't can add Placemarks", SHMAPPER), + ) + ); + break; + case "shm_map_marker_premoderation": + ShMapper::$options['shm_map_marker_premoderation'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => __(sanitize_text_field($params[1]) ? "Pre-moderation on" : "Pre-moderation off", SHMAPPER), + ) + ); + break; + case "shm_reload": + ShMapper::$options['shm_reload'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => __(sanitize_text_field($params[1]) ? "Reload mode" : "Not relaod mode", SHMAPPER), + ) + ); + break; + case "shm_settings_captcha": + ShMapper::$options['shm_settings_captcha'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => __(sanitize_text_field($params[1]) ? "captha added" : "captcha removed", SHMAPPER), + ) + ); + break; + case "shm_captcha_siteKey": + ShMapper::$options['shm_captcha_siteKey'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => __( "Set key" , SHMAPPER), + "hide_dang" => sanitize_text_field($params[1]) != "" && ShMapper::$options['shm_captcha_secretKey'] != "" ? 1 : 0 + ) + ); + break; + case "shm_captcha_secretKey": + ShMapper::$options['shm_captcha_secretKey'] = sanitize_text_field($params[1]); + ShMapper::update_options(); + $d = array( + $action, + array( + "msg" => __( "Set key" , SHMAPPER), + "hide_dang" => sanitize_text_field($params[1]) != "" && ShMapper::$options['shm_captcha_siteKey'] != "" ? 1 : 0 + ) + ); + break; + default: + do_action("shm_ajax_submit", $params); + break; + } + $d_obj = json_encode(apply_filters("shm_ajax_data", $d, $params)); + print $d_obj; + wp_die(); + } +} \ No newline at end of file diff --git a/class/ShmAdminPage.class.php b/class/ShmAdminPage.class.php new file mode 100644 index 0000000..317f1fc --- /dev/null +++ b/class/ShmAdminPage.class.php @@ -0,0 +1,36 @@ +parent_base == 'shm_page') { + return $this->get_admin_footer('', $old_footer_html); + } + + return $old_footer_html; + } + + function get_admin_footer($footer_class='', $old_footer_html='') { + ob_start(); + ?> + + + + init_hooks(); \ No newline at end of file diff --git a/class/ShmForm.class.php b/class/ShmForm.class.php new file mode 100644 index 0000000..72c08c5 --- /dev/null +++ b/class/ShmForm.class.php @@ -0,0 +1,596 @@ + SHMAPPER_MARK_TYPE_ID, + "require" => 1, + "title" => __("Place the mark to Map", SHMAPPER), + "placemarks" => [], + "placeholde" => "", + "description" => "", + ], + [ + "type" => SHMAPPER_TITLE_TYPE_ID, + "require" => 1, + "title" => __("Put a title", SHMAPPER), + "placeholde" => "", + "description" => "", + ], + /*[ + "type" => SHMAPPER_NAME_TYPE_ID, + "require" => 1, + "title" => __("How call You?", SHMAPPER), + "placeholde" => "", + "description" => "", + ], + [ + "type" => SHMAPPER_EMAIL_TYPE_ID, + "require" => 1, + "title" => __("Send Your e-mail please", SHMAPPER), + "placeholde" => "", + "description" => "", + ],*/ + [ + "type" => SHMAPPER_TEXTAREA_TYPE_ID, + "require" => 1, + "title" => __("Whrite description", SHMAPPER), + "placeholde" => "", + "description" => "", + ], + + ]; + } + static function getTypes() + { + return [ + [ + "id" => SHMAPPER_TITLE_TYPE_ID, //9 + "name" => "title", + "title" => __("input title", SHMAPPER), + 'fields' => ['title', 'placeholder', 'description'] + ],/**/ + [ + "id" => SHMAPPER_PLAIN_TEXT_TYPE_ID, //1 + "name" => "text", + "title" => __("input text", SHMAPPER), + 'fields' => ['title', 'placeholder', 'description'] + ], + /*[ + "id" => SHMAPPER_NAME_TYPE_ID, //2 + "name" => "name", + "title" => __("User name", SHMAPPER), + 'fields' => ['title', 'placeholder', 'description'] + ], + [ + "id" => SHMAPPER_PLAIN_NUMBER_TYPE_ID, //3 + "name" => "number", + "title" => __("input number", SHMAPPER), + 'fields' => ['title', 'placeholder', 'description'] + ], + [ + "id" => SHMAPPER_EMAIL_TYPE_ID, //4 + "name" => "email", + "title" => __("input email", SHMAPPER), + 'fields' => ['title', 'placeholder', 'description' ] + ], + [ + "id" => SHMAPPER_PHONE_TYPE_ID, //5 + "name" => "phone", + "title" => __("input phone", SHMAPPER), + 'fields' => ['title', 'placeholder', 'description' ] + ],*/ + [ + "id" => SHMAPPER_TEXTAREA_TYPE_ID, //6 + "name" => "textarea", + "title" => __("textarea", SHMAPPER), + 'fields' => ['title', 'placeholder', 'description' ] + ], + [ + "id" => SHMAPPER_IMAGE_TYPE_ID, //7 + "name" => "file", + "title" => __("input file", SHMAPPER), + 'fields' => ['title', 'placeholder', 'description'] + ], + [ + "id" => SHMAPPER_MARK_TYPE_ID, //8 + "name" => "placemark", + "title" => __("enabled Map markers", SHMAPPER), + 'fields' => ['title', 'placemarks', 'description'] + ] + ]; + } + static function get_type_by ($field="id", $id = 1) + { + foreach(static::getTypes() as $type) + { + if($type[$field] == $id) + return $type; + } + return false; + } + static function wp_dropdown($params=-1) + { + if(!is_array($params)) + $params = ['id' => 'shmform', 'name' => 'shmform', "class" => "sh-form"]; + $selector = $params['selector'] ? " selector='" . $params['selector'] . "' " : " s='ee' "; + $html = ""; + return $html; + } + + static function wp_params_dropdown( $meta, $id, $selected = -1 ) + { + $html = ""; + return $html; + } + + + static function wp_params_radio( $params=-1, $id, $post_id=1 ) + { + $params = is_array($params) ? $params : []; + $html = " +
    +
    +
    +
    X
    +
    "; + foreach(static::getTypes() as $m) + { + $html .= " +
    + + +
    +
    "; + } + $html .= " +
    +
    "; + return $html; + } + + static function get_admin_element( $id, $data=-1 ) + { + $data = !is_array($data) ? [ "require"=>1, "selected" => 0 ] : $data; + $type = static::get_type_by("id", $data['type']); + $fields = $type['fields']; + $mark_emable = false; + return " +
  • + +
    +
    + " . __("Type of element", SHMAPPER) . " +
    " . + static::wp_params_dropdown( static::getTypes(), $id, $type['id'] ) . + "
    +
    +
    + +
    + +
    + +
    +
    + ". + __("Placeholder", SHMAPPER) . + " + +
    +
    + ". + __("Placemark types", SHMAPPER) . + "". + ShMapPointType::get_ganre_swicher([ + "prefix" => "ganre$id". MD5(rand(0,100000000)), + "id" => $id, + "name" => "form_forms[$id][placemarks]", + "selected" => empty($data['placemarks']) ? '' : $data['placemarks'], + "col_width" => 6 + ]). + "
    +
    + ". + __("Description", SHMAPPER) . + " + +
    +
    +
    +
    + + + +
    +
    +
    + +
    +
  • "; + } + static function get_admin_element1( $id, $data=-1 ) + { + $data = !is_array($data) ? [ "require"=>1, "selected" => 0 ] : $data; + $type = static::get_type_by("id", $data['type']); + $fields = $type['fields']; + return " +
  • +
    +
    +

    " . __("Type of element", SHMAPPER) . "

    +

    " . $type['title'] . "

    +
    + +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    + ". + __("Placeholder", SHMAPPER) . + " + +
    +
    + ". + __("Placemark types", SHMAPPER) . + "". + ShMapPointType::get_ganre_swicher([ + "prefix" => "ganre$id". MD5(rand(0,100000000)), + "id" => $id, + "name" => "form_forms[$id][placemarks]", + "selected" => $data['placemarks'], + "col_width" => 6 + ]). + "
    +
    + ". + __("Description", SHMAPPER) . + " + +
    +
    + +
    +
  • "; + } + static function get_admin_element2( $id, $data=-1 ) + { + $data = !is_array($data) ?["enable"=>1, "require"=>1, "selected" => 0] : $data; + $type = static::get_type_by("id", $data['type']); + $fields = $type['fields']; + //ob_start(); + //var_dump($data); + //$v = ob_get_contents(); + //ob_end_clean(); + return " +
  • +
    +
    + + +

    + + +
    +
    + +
    + ". + __("Type of element", SHMAPPER) . + "". + ShmForm::wp_dropdown([ + "name" => "form_forms[$id][type]", + "id" => "type$id", + "class" => "sh-form", + "selected" => $data['type'], + "selector" => "type" + ]) . + " +
    +
    +
    +
    + ". + __("Placeholder", SHMAPPER) . + " + +
    +
    + ". + __("Placemark types", SHMAPPER) . + "". + ShMapPointType::get_ganre_swicher([ + "prefix" => "ganre$id", + "id" => $id, + "name" => "form_forms[$id][placemarks]", + "selected" => $data['placemarks'] + ]). + "
    +
    + ". + __("Description", SHMAPPER) . + " + +
    + +
    +
    +
  • "; + } + static function form($data, $map ) + { + $default_icon_id = $map->get_meta("default_icon_id"); + $is_personal_data = $map->get_meta("is_personal_data"); + $is_name_iclude = $map->get_meta("is_name_iclude"); + $personal_name = $map->get_meta("personal_name"); + $is_name_required = $map->get_meta("is_name_required"); + $is_email_iclude = $map->get_meta("is_email_iclude"); + $personal_email = $map->get_meta("personal_email"); + $is_email_required = $map->get_meta("is_email_required"); + $is_phone_iclude = $map->get_meta("is_phone_iclude"); + $personal_phone = $map->get_meta("personal_phone"); + $is_phone_required = $map->get_meta("is_phone_required"); + $def_mark = ""; + + + $html = apply_filters("shm_before_request_form", ""); + $html .= ""; + $html1 = apply_filters("shm_start_request_form", ""); + $i = 0; + foreach($data as $element) + { + if(!is_array($element)) continue; + $require = isset($element['require']) && $element['require'] == 1 ? " required " : ""; + $html1 .= "
    "; + $html1 .= $element['title'] ? "
    " . $element['title'] . "
    " : ""; + $type = static::get_type_by("id", $element['type']); + $data_types = " data-types='".implode( ",", $type['fields'] )."' "; + switch($element['type']) + { + case SHMAPPER_PLAIN_TEXT_TYPE_ID: + $html1 .= ""; + break; + case SHMAPPER_NAME_TYPE_ID: + $html1 .= ""; + break; + case SHMAPPER_PLAIN_NUMBER_TYPE_ID: + $html1 .= ""; + break; + case SHMAPPER_EMAIL_TYPE_ID: + $html1 .= ""; + break; + case SHMAPPER_PHONE_TYPE_ID: + $html1 .= ""; + break; + case SHMAPPER_TEXTAREA_TYPE_ID: + $html1 .= ""; + break; + case SHMAPPER_IMAGE_TYPE_ID: + $file_map = " " . + ($element['placeholder'] ? $element['placeholder'] : __("Сhoose files", SHMAPPER)) ; + $html1 .= " +
    + + +
    "; + break; + case SHMAPPER_MARK_TYPE_ID: + $mark_emable = true; + $terms = explode(",", $element["placemarks"]); + $icons = ""; + if(count($terms)) + { + foreach($terms as $term_id) + { + $clr = get_term_meta($term_id, "color", true); + $icon = ShMapPointType::get_icon_src($term_id)[0]; + + if($icon) + { + $icon_width = get_term_meta( $term_id, "width", true ); + $icon_height = get_term_meta( $term_id, "height", true ); + $icons .= " +
    +
    "; + } + else + { + $diid = $map->get_meta("default_icon_id"); + $icon = wp_get_attachment_image_src($diid, [60, 60])[0]; + if(!$icon) { + if(ShMapper::$options['map_api'] == 2) { + $icon = "https://unpkg.com/leaflet@1.3.4/dist/images/marker-icon.png"; // 25 x 41 + $icon_width = 25; + $icon_height = 41; + } + else { + $icon = SHM_URLPATH . 'assets/img/ym_default.png'; // 34 x 41 + $icon_width = 34; + $icon_height = 41; + } + } + else { + $icon_width = ""; + $icon_height = ""; + } + + $icons .= !$icon ? " +
    +
    +
    " : + "
    "; + } + } + $html1 .= " +
    $icons
    + + + + + "; + $element['description'] .= __("Drag choosed icon and place it to map or click it and enter exact address.", SHMAPPER); + } + break; + default: + $html1 .= "";break; + } + $req = $require ? "".__("This required field", SHMAPPER)."" : "$require"; + $html1 .= $element['description'] ? "
    " . $req . $element['description'] ."
    " : "
    $req
    "; + + $html1 .= "
    "; + $i++; + } + if(!$mark_emable) + { + $diid = $map->get_meta("default_icon_id"); + $icon = wp_get_attachment_image_src($diid, [60, 60])[0]; + + if(!$icon) + $icon = ShMapper::$options['map_api'] == 2 ? "https://unpkg.com/leaflet@1.3.4/dist/images/marker-icon.png" + : SHM_URLPATH . 'assets/img/ym_default.png'; + $desc = " +
    +
    " . + __("Drag icon and place it to map.", SHMAPPER) . + "
    +
    + ".__("This required field", SHMAPPER)." +
    +
    "; + $def_mark = true ? " +
    $desc +
    +
    +
    +
    " + : + "
    $desc +
    +
    +
    +
    +
    +
    + "; + + $def_mark .= " + + + + "; + } + if( $is_personal_data ) + { + $require = $is_name_required ? " required " : ""; + $html1 .= $is_name_iclude ? " +
    +
    " . __("Your name",SHMAPPER) . "
    + +
    " : ""; + $html1 .= $is_name_required ? "
    + ".__("This required field", SHMAPPER)." +
    " : ""; + + + $require = $is_email_required ? " required " : ""; + $html1 .= $is_email_iclude ? " +
    +
    " . __("Your e-mail",SHMAPPER) . "
    + +
    " : ""; + $html1 .= $is_email_required ? "
    + ".__("This required field", SHMAPPER)." +
    " : ""; + + $require = $is_phone_required ? " required " : ""; + $html1 .= $is_phone_iclude ? " +
    +
    " . __("Your phone",SHMAPPER) . "
    + +
    " : ""; + $html1 .= $is_phone_required ? "
    + ".__("This required field", SHMAPPER)." +
    " : ""; + + $att = " +
    +
    + ". + ShMapper::$options['shm_personal_text'] . + "
    +
    "; + } + $html1 .= apply_filters("shm_end_request_form", ""); + $html = $def_mark . $html . $html1 . (empty($att) ? '' : $att) . apply_filters("shm_after_request_form", ""); + return $html ; + } + + + +} \ No newline at end of file diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php new file mode 100644 index 0000000..63ec52e --- /dev/null +++ b/class/ShmMap.class.php @@ -0,0 +1,856 @@ + [ + "map", + "hybrid", + "satellite", + ], + "2" => [ + "OpenStreetMap", + "Topographic", + "Streets", + "Gray", + "DarkGray", + "Imagery", + "Physical" + ] + ]; + } + static function init() + { + $typee = static::get_type(); + add_action('init', array(__CLASS__, 'add_class'), 14 ); + add_action('admin_menu', array(__CLASS__, 'my_form_fields'), 11); + add_action('admin_menu', array(__CLASS__, 'shortcode_fields'), 11); + add_action('admin_menu', array(__CLASS__, 'admin_redirect'), 11); + add_filter("the_content", array(__CLASS__, "the_content")); + add_filter( 'post_row_actions', [__CLASS__, 'post_row_actions'], 10, 2 ); + add_action("smc_before_doubled_post", [__CLASS__, "smc_before_doubled_post"], 10, 2); + add_action("smc_after_doubled_post", [__CLASS__, "smc_after_doubled_post"], 10, 2); + add_filter("bulk_actions-edit-{$typee}",[__CLASS__, "register_my_bulk_actions"]); + parent::init(); + } + static function get_osm_types() + { + return [ + "Topographic", + "Streets", + "NationalGeographic", + "Oceans", + "Gray", + "DarkGray", + "StreetsRelief", + "Imagery", + "ImageryClarity", + "ImageryFirefly", + "Physical" + ]; + } + static function register_my_bulk_actions( $bulk_actions ) + { + unset($bulk_actions['trash']); + $bulk_actions = parent::register_my_bulk_actions( $bulk_actions ); + return $bulk_actions; + } + static function get_type() + { + return SHM_MAP; + } + static function get_extra_fields_title() + { + return __("Step 1. Set up your map.", SHMAPPER); + } + static function add_class() + { + $labels = array( + 'name' => __('Map', SHMAPPER), + 'singular_name' => __("Map", SHMAPPER), + 'add_new' => __("add Map", SHMAPPER), + 'add_new_item' => __("add Map", SHMAPPER), + 'edit_item' => __("edit Map", SHMAPPER), + 'new_item' => __("add Map", SHMAPPER), + 'all_items' => __("all Maps", SHMAPPER), + 'view_item' => __("view Map", SHMAPPER), + 'search_items' => __("search Map", SHMAPPER), + 'not_found' => __("Map not found", SHMAPPER), + 'not_found_in_trash' => __("no found Map in trash", SHMAPPER), + 'menu_name' => __("all Maps", SHMAPPER) + ); + $args = array( + 'labels' => $labels + ,'public' => true + ,'show_ui' => true // показывать интерфейс в админке + ,'has_archive' => true + ,'exclude_from_search' => false + ,'menu_position' => 17 + ,'menu_icon' => "dashicons-location-alt" + ,'show_in_menu' => "shm_page" + ,'show_in_rest' => true + ,'supports' => array( 'title', 'author' ) + ,'capability_type' => 'post' + ); + register_post_type(SHM_MAP, $args); + } + + static function add_views_column( $columns ) + { + $_columns["cb"] = " "; + $_columns['ids'] = __("ID", SHMAPPER ); + $_columns['title'] = __("Title" ); + $_columns['is_csv'] = " + + "; + $_columns['is_legend'] = " + + "; + $_columns['is_form'] = " + + "; + $_columns['notify_owner'] = " + + "; + $_columns['shortcodes'] = __("shortcodes", SHMAPPER); + $_columns['placemarks'] = __("Map markers", SHMAPPER); + $_columns['author'] = __("Author"); + return $_columns; + } + + static function fill_views_column($column_name, $post_id) + { + $obj = static::get_instance($post_id); + switch($column_name) + { + case "ids": + echo $post_id; + break; + case "placemarks": + echo "
    " . $obj->get_point_count() . "
    "; + break; + case "shortcodes": + $html = " +
    +
    ". + __("include all (map and request form)", SHMAPPER) . + "
    +
    + +
    +
    +
    +
    ". + __("only map", SHMAPPER) . + "
    +
    + +
    +
    + +
    +
    ". + __("only request form", SHMAPPER) . + "
    +
    + +
    +
    + "; + echo $html; + break; + default: + parent::fill_views_column($column_name, $post_id); + } + } + + static function admin_redirect() + { + global $pagenow, $submenu ; + if( !empty($_GET["page"]) && "shm_page" == $_GET["page"] && "admin.php" === $pagenow) + { + wp_redirect( admin_url( '/admin.php?page=shm_settings_page' ) ); + } + } + static function shortcode_fields() + { + add_meta_box( 'shortcode_fields', __('Including Map to post', SHMAPPER), [__CLASS__, 'shortcode_fields_box_func'], static::get_type(), 'side', 'low' ); + } + + static function shortcode_fields_box_func( $post ) + { + $lt = static::get_instance( $post ); + echo static::shortcode_fields_edit($lt); + } + static function shortcode_fields_edit($obj) + { + $html = " +

    " . + __("You can insert a card into a post or page by copying this shortcode.", SHMAPPER). + "

    + "; + + return $html; + } + + static function my_extra_fields() + { + add_meta_box( 'map_fields', static::get_extra_fields_title(), [__CLASS__, 'extra_fields_box_func'], static::get_type(), 'normal', 'high' ); + + } + static function my_form_fields() + { + add_meta_box( 'form_fields', __('Step 2. May anover Users add information for Map.', SHMAPPER), [__CLASS__, 'form_fields_box_func'], static::get_type(), 'normal', 'high' ); + + } + + static function view_admin_edit($obj) + { + require_once( SHM_REAL_PATH . "tpl/input_file_form.php" ); + $height = $obj->get_meta("height") ? $obj->get_meta("height") : 400; + $latitude = $obj->get_meta("latitude"); + $longitude = $obj->get_meta("longitude"); + $zoom = $obj->get_meta("zoom"); + $width = $obj->get_meta("width"); + $is_search = $obj->get_meta("is_search"); + $is_zoomer = $obj->get_meta("is_zoomer"); + $is_layer_switcher = $obj->get_meta("is_layer_switcher"); + $is_fullscreen = $obj->get_meta("is_fullscreen"); + $is_csv = $obj->get_meta("is_csv"); + $is_legend = $obj->get_meta("is_legend"); + $is_filtered = $obj->get_meta("is_filtered"); + $default_icon_id = $obj->get_meta("default_icon_id"); + $is_clustered = $obj->get_meta("is_clustered"); + $is_lock = $obj->get_meta("is_lock"); + $form_title = $obj->get_meta("form_title"); + $html = " +
    +

    ". __("1.1. Pan map and choose zoom", SHMAPPER). "

    +
    ". + $obj->draw( [ 'height'=>$height, 'id' => $obj->id ] ). + "
    +
    + + + +
    +
    +
    +
    +

    ". __("1.2. Set size for map's div (per pixels)", SHMAPPER). "

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    ". __("1.3. Include interface", SHMAPPER). "

    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +

    ". __("Choose layers", SHMAPPER). "

    +
    ". + static::get_type_radio([ + "id" => "map_type", + "name" => "map_type", + "selected" => $obj->get_meta("map_type"), + ]). + "
    +
    + +
    +
    +
    +
    +

    ". __("1.4. May User download data in *.csv?", SHMAPPER). "

    +
    + +
    +
    +
    +
    +
    +
    +

    ". __("1.5. Will the legend be displayed?", SHMAPPER). "

    +
    + +
    +
    +
    +
    +
    +
    +

    ". __("1.6. Will Marker type filter be displayed?", SHMAPPER). "

    +
    + +
    +
    +
    +
    +
    +
    +

    ". __("1.7. Default Marker icon", SHMAPPER). "

    +
    ". + get_input_file_form2( "" , $default_icon_id, "default_icon_id"). + "
    +

    ". + __("Recommended size is 64х64 px, format is .png", SHMAPPER) . + "

    +
    "; + + return $html; + } + static function form_fields_box_func( $post ) + { + $lt = static::get_instance( $post ); + echo static::view_form_fields_edit($lt); + } + static function view_form_fields_edit($obj) + { + $is_form = $obj->get_meta("is_form") ? 1 : 0; + $is_filtered = $obj->get_meta("is_filtered") ? 1 : 0; + $form_title = $obj->get_meta("form_title"); + $notify_owner = $obj->get_meta("notify_owner") ? 1 : 0; + $form_forms = $obj->get_meta("form_forms"); + $is_personal_data = $obj->get_meta("is_personal_data"); + $is_name_iclude = $obj->get_meta("is_name_iclude"); + $personal_name = $obj->get_meta("personal_name"); + $is_name_required = $obj->get_meta("is_name_required"); + $is_email_iclude = $obj->get_meta("is_email_iclude"); + $personal_email = $obj->get_meta("personal_email"); + $is_email_required = $obj->get_meta("is_email_required"); + $is_phone_iclude = $obj->get_meta("is_phone_iclude"); + $personal_phone = $obj->get_meta("personal_phone"); + $is_phone_required = $obj->get_meta("is_phone_required"); + $html = " +
    +
    + + +
    +
    +
    +
    +

    ". __("2.1. What is the name of your information form?", SHMAPPER). "

    +
    + +

    " . + __("For example «All beaches by the river»", SHMAPPER) . + "

    +
    +
    +
    +
    +

    ". __("2.2. Will I notify the author about new posts?", SHMAPPER). "

    +
    + + +
    +
    +
    +
    +

    ". __("2.3. What information can users enter?", SHMAPPER). "

    +
    +

    " . + __("You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;", SHMAPPER) . + "

    +
    +
    ". + static::formEditor( $form_forms ? $form_forms : ShmForm::get_default() ). + "
    +
    +
    +
    +

    ". __("2.4. Can users leave their contact information?", SHMAPPER). "

    +
    + + +
    +
    +
    +
    +

    ". __("2.5. What data users will have to put?", SHMAPPER). "

    +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    +
    +
    "; + + + + return $html; + } + static function save_admin_edit($obj) + { + return [ + "map_type" => empty($_POST['map_type']) ? '' : $_POST['map_type'], + "latitude" => sanitize_text_field($_POST['latitude']), + "longitude" => sanitize_text_field($_POST['longitude']), + "zoom" => sanitize_text_field($_POST['zoom']), + "is_legend" => empty($_POST['is_legend']) ? 0 : 1, + "is_filtered" => empty($_POST['is_filtered']) ? 0 : 1, + "is_csv" => empty($_POST['is_csv']) ? 0 : 1, + "is_lock" => empty($_POST['is_lock']) ? 0 : 1, + "is_clustered" => empty($_POST['is_clustered']) ? 0 : 1, + "is_search" => empty($_POST['is_search']) ? 0 : 1, + "is_zoomer" => empty($_POST['is_zoomer']) ? 0 : 1, + "is_layer_switcher" => empty($_POST['is_layer_switcher']) ? 0 : 1, + "is_fullscreen" => empty($_POST['is_fullscreen']) ? 0 : 1, + "default_icon_id" => sanitize_text_field($_POST['default_icon_id']), + "width" => sanitize_text_field($_POST['width']), + "height" => sanitize_text_field($_POST['height']), + + "is_form" => empty($_POST['is_form']) ? 0 : 1, + "form_title" => sanitize_text_field($_POST['form_title']), + "form_contents" => sanitize_textarea_field(empty($_POST['form_contents']) ? '' : $_POST['form_contents']), + "notify_owner" => empty($_POST['notify_owner']) ? 0 : 1, + "form_forms" => empty($_POST['form_forms']) ? '' : $_POST['form_forms'], + "is_personal_data" => sanitize_text_field(empty($_POST['is_personal_data']) ? '' : $_POST['is_personal_data']), + "is_name_iclude" => sanitize_text_field(empty($_POST['is_name_iclude']) ? '' : $_POST['is_name_iclude']), + "personal_name" => sanitize_text_field(empty($_POST['personal_name']) ? '' : $_POST['personal_name']), + "is_name_required" => sanitize_text_field(empty($_POST['is_name_required']) ? '' : $_POST['is_name_required']), + "is_email_iclude" => sanitize_text_field(empty($_POST['is_email_iclude']) ? '' : $_POST['is_email_iclude']), + "personal_email" => sanitize_text_field(empty($_POST['personal_email']) ? '' : $_POST['personal_email']), + "is_email_required" => sanitize_text_field(empty($_POST['is_email_required']) ? '' : $_POST['is_email_required']), + "is_phone_iclude" => sanitize_text_field(empty($_POST['is_phone_iclude']) ? '' : $_POST['is_phone_iclude']), + "personal_phone" => sanitize_text_field(empty($_POST['personal_phone']) ? '' : $_POST['personal_phone']), + "is_phone_required" => sanitize_text_field(empty($_POST['is_phone_required']) ? '' : $_POST['is_phone_required']), + ]; + } + static function post_row_actions($actions, $post) + { + if($post->post_type !== static::get_type()) return $actions; + $actions['doubled'] = "".__("Double", SHMAPPER).""; + return $actions; + } + static function smc_before_doubled_post($metas, $smc_post) + { + + if($smc_post->get("post_type") !== ShmPoint::get_type()) return $metas; + + $types = get_the_terms($smc_post->id, SHM_POINT_TYPE); + $maps = $smc_post->get_owners(); + $metas['type'] = $types[0]->term_id; + $metas['map_id'] = $maps[0]->ID; + return $metas; + } + static function smc_after_doubled_post($new_smc_post, $origin_smc_post) + { + global $wpdb; + if($origin_smc_post->get("post_type") !== static::get_type()) return; + $old_points = $origin_smc_post->get_points(); + + foreach($old_points as $point) + { + $p = ShmPoint::get_instance($point); + $new_point = $p->doubled(); + $new_point->remove_from_map($origin_smc_post->id); + $new_point->add_to_map($new_smc_post->id); + } + } + static function formEditor($data) + { + $html = " +
    +
      "; + //for( $i = 0; $i < 5; $i ++ ) + $i = 0; + foreach($data as $dat) + { + $html .= ShmForm::get_admin_element( $i, $dat ); + $i++; + } + $html .= ShmForm::wp_params_radio( -1, -1 ) . " +
    +
    "; + return $html; + + } + function get_include_types() + { + $form_forms = $this->get_meta("form_forms"); + + if($form_forms) { + foreach($form_forms as $element) + { + if( $element['type'] == 8 ) + { + return explode(",", $element["placemarks"]); + } + } + } + + return false; + } + function get_csv() + { + + $upload_dir = wp_upload_dir(); + if( + !file_exists($upload_dir['basedir']."/shmapper-by-teplitsa") + && !wp_mkdir_p($upload_dir['basedir']."/shmapper-by-teplitsa") + ) { + echo '
    '.print_r('FAIL', 1).'
    '; + return false; + } + + $points = $this->get_points(); + $csv = [implode(SHM_CSV_STROKE_SEPARATOR, [ "#", __("Title", SHMAPPER), __("Description", SHMAPPER), __("Location", SHMAPPER), __("Longitude", SHMAPPER), __("Latitude", SHMAPPER) ])]; + $i = 0; + foreach($points as $point) + { + $p = ShmPoint::get_instance($point); + $csv[] = implode(SHM_CSV_STROKE_SEPARATOR, [ + ($i++) . ". ", + '"' . str_replace(';', ",", $p->get("post_title") ) . '"', + '"' . str_replace(';', ",", wp_strip_all_tags( wp_specialchars_decode ($p->get("post_content")))) . '"', + '"' . str_replace(';', ",", $p->get_meta("location")) . '"', + '"' . str_replace(';', ",", $p->get_meta("longitude")). '"', + '"' . str_replace(';', ",", $p->get_meta("latitude")) . '"', + ]); + } + $csv_data = iconv ("UTF-8", "cp1251", implode( SHM_CSV_ROW_SEPARATOR, $csv)); + $path = $upload_dir['basedir'] . "/shmapper-by-teplitsa/shmap_" . $p->id . ".csv"; + $href = $upload_dir['baseurl'] . "/shmapper-by-teplitsa/shmap_" . $p->id . ".csv"; + file_put_contents( $path, $csv_data ); + return $href; + + if(class_exists("ZipArchive")) + { + $zip = new ZipArchive(); + $zip_name = "shmap_" . $p->id . ".zip"; + if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE) + { + return $href; + } + $zip->addFile( $path ); + $zip->close(); + if(file_exists($zip_name)) + return $upload_dir['basedir'] . "/shmapper-by-teplitsa/" . $zip_name; + else + return $href; + } + else + return $href; + } + function get_points_args() + { + global $wpdb; + return explode(",", $wpdb->get_var("SELECT GROUP_CONCAT( mp.point_id ) + FROM ".$wpdb->prefix."point_map as mp + WHERE map_id=$this->id + GROUP BY map_id")); + } + function get_points() + { + $args = [ + "post_type" => SHM_POINT, + "post_status" => "publish", + "numberposts" => -1, + "post__in" => $this->get_points_args() + ]; + return get_posts($args); + } + + function get_point_count() + { + global $wpdb; + return $wpdb->get_var("SELECT COUNT(*) + FROM ".$wpdb->prefix."point_map as mp + WHERE map_id=$this->id;"); + } + function get_delete_form( $href ) + { + $html =" +
    +
    " . + __("What do with placemarks of deleting Map?", SHMAPPER) . + "
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    " . + ShmMap::wp_dropdown([ + "class" => "shm-form", + "id" => "shm_esc_points_id", + "style" => "display:none;", + "posts" => ShmMap::get_all(), + "exclude_post_id" => $this->id, + + ]) . + "
    +
    +
    + "; + return $html; + } + function get_map_points() + { + $points = $this->get_points(); + $p = []; + + foreach($points as $point) + { + $pn = ShmPoint::get_instance($point); + $types = wp_get_object_terms($pn->id, SHM_POINT_TYPE); + $type = count( $types ) ? $types[0] : null; + $pnt = new StdClass; + $pnt->ID = $pn->id; + $pnt->post_title = $pn->get("post_title"); + $pnt->post_content = wpautop( $pn->get("post_content") ); + $pnt->latitude = $pn->get_meta("latitude"); + $pnt->longitude = $pn->get_meta("longitude"); + $pnt->location = $pn->get_meta("location"); + $pnt->color = $type ? get_term_meta($type->term_id, "color", true) : ""; + $pnt->height = $type ? get_term_meta($type->term_id, "height", true): 40; + $pnt->height = $pnt->height ? $pnt->height : 30; + $pnt->width = $type ? get_term_meta($type->term_id, "width", true): 40; + $pnt->width = $pnt->width ? $pnt->width : 30; + $pnt->type = $type ? $type->name : ""; + $pnt->term_id = $type ? $type->term_id: -1; + $pnt->icon = $type ? ShMapPointType::get_icon_src( $type->term_id )[0] : ""; + //$pnt->width = ShMapPointType::get_icon_src( $type->term_id )[2]/ShMapPointType::get_icon_src( $type->term_id )[1] * $pnt->height ; + //$pnt->width = $pnt->width ? $pnt->width : $pnt->height; + $p[] = $pnt; + } + return $p; + } + function draw($args=-1) + { + if(!is_array($args)) $args = [ "height" => 450, "id" => $this->id ]; + require_once(SHM_REAL_PATH . "tpl/shmMap.php"); + return draw_shMap($this, $args); + } + + /* + final delete map and difference placemarks migration + */ + function shm_delete_map_hndl($data) + { + global $wpdb; + $points = $this->get_points(); + switch($data['action']) + { + case 1: + // search once usage points in deleted Map (only_once == 1) + $query = "SELECT DISTINCT( p1.point_id ) AS point, COUNT(p1.map_id)=1 AS only_once, GROUP_CONCAT(p1.map_id) AS maps + FROM " . $wpdb->prefix . "point_map AS p1 + LEFT JOIN " . $wpdb->prefix . "point_map AS p2 ON p1.point_id=p2.point_id + WHERE p2.map_id=".$this->id." + GROUP BY p1.point_id"; + $res = $wpdb->get_results($query); + $i = 0; + foreach($res as $point) + { + if($point->only_once == 1) + { + ShmPoint::delete($point->point); + $i++; + } + } + $message = sprintf(__("Succesfuly delete map width %s points", SHMAPPER), $i ); + break; + case 2: + $count = $wpdb->get_var("SELECT COUNT(point_id) FROM ".$wpdb->prefix."point_map WHERE map_id=".$this->id); $query = "DELETE FROM " . $wpdb->prefix . "point_map WHERE map_id=".$this->id; + $res = $wpdb->query($query); + $message = sprintf(__("Succesfuly delete map and %s points are orphans now", SHMAPPER), $count ); + break; + case 3: + $count = $wpdb->get_var("SELECT COUNT(point_id) FROM ".$wpdb->prefix."point_map WHERE map_id=".$this->id); + $query = "UPDATE " . $wpdb->prefix . "point_map SET map_id=".((int)sanitize_text_field($data['anover'])). " WHERE map_id=".$this->id; + $res = $wpdb->query($query); + $map2 = static::get_instance(sanitize_text_field($data['anover'])); + $message = sprintf(__("Succesfuly delete map and %s points migrates to %s", SHMAPPER), $count, $map2->get("post_title") ); + break; + } + static::delete( $this->id ); + return ["query" => $query, "res" => $res, "message" => $message]; + } + static function the_content($content) + { + global $post; + $t = ($post->post_type == SHM_MAP && (is_single() || is_archive() )) ? '[shmMap id="' . $post->ID . '" map form ]' : ""; + return $t . $content; + } + static function get_type_radio($params=-1) + { + if(!is_array($params)) + { + $params = [ + "id" => "map_radio", + "name" => "type_radio[" . ShMapper::$options['map_api'] . "][]", + 'selected' => [] + ]; + } + $html = " +
    +
    "; + + if( ShMapper::$options['map_api'] != 2 ) + { + $html .= "
    +

    Yandex Map

    "; + $i = 0; + + foreach(static::get_map_types()[ 1 ] as $type) + { + $selected = !empty($params['selected']) && !empty($params['selected'][1][0]) && $params[ 'selected' ][1][0] == $type ? " checked " : ""; + $name = $params[ 'name' ]; + $id = $params[ 'id' ]; + $html .= " +
    + + +
    "; + $i++; + } + + $html .= " +
    "; + } + else + { + $html .= "
    +

    Open Street Map

    "; + + $i = 0; + + foreach(static::get_map_types()[ 2 ] as $type) + { + $selected = isset($params[ 'selected' ][2][0]) && $params[ 'selected' ][2][0] == $type ? " checked " : ""; + $name = $params[ 'name' ]; + $id = $params[ 'id' ]; + $html .= " +
    + + +
    "; + $i++; + } + + $html .= " +
    "; + } + $html .= " +
    +
    "; + return $html; + } +} \ No newline at end of file diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php new file mode 100644 index 0000000..4840e3d --- /dev/null +++ b/class/ShmPoint.class.php @@ -0,0 +1,540 @@ + __('Map marker', SHMAPPER), + 'singular_name' => __("Map marker", SHMAPPER), + 'add_new' => __("add Map marker", SHMAPPER), + 'add_new_item' => __("add Map marker", SHMAPPER), + 'edit_item' => __("edit Map marker", SHMAPPER), + 'new_item' => __("add Map marker", SHMAPPER), + 'all_items' => __("all Map markers", SHMAPPER), + 'view_item' => __("view Map marker", SHMAPPER), + 'search_items' => __("search Map marker", SHMAPPER), + 'not_found' => __("Map marker not found", SHMAPPER), + 'not_found_in_trash' => __("no found Map marker in trash", SHMAPPER), + 'menu_name' => __("Map markers", SHMAPPER) + ); + $args = array( + 'labels' => $labels + ,'public' => true + ,'show_ui' => true + ,'has_archive' => true + ,'exclude_from_search' => false + ,'menu_position' => 18 + ,'menu_icon' => "dashicons-location" + ,'show_in_menu' => "shm_page" + ,'show_in_rest' => true + ,'supports' => array( 'title', "editor", "thumbnail") + ,'capability_type' => 'post' + ); + register_post_type(SHM_POINT, $args); + } + + static function view_admin_edit($obj) + { + require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + $SMC_Object_type = SMC_Object_Type::get_instance(); + $bb = $SMC_Object_type->object [static::get_type()]; + $html = ""; + + $default_latitude = 55.8; + $default_longitude = 37.8; + $default_zoom = 4; + if ( isset( ShMapper::$options['shm_default_latitude'] ) ) { + $default_latitude = ShMapper::$options['shm_default_latitude']; + } + if ( isset( ShMapper::$options['shm_default_longitude'] ) ) { + $default_longitude = ShMapper::$options['shm_default_longitude']; + } + if ( isset( ShMapper::$options['shm_default_zoom'] ) ) { + $default_zoom = ShMapper::$options['shm_default_zoom']; + } + foreach($bb as $key=>$value) + { + if($key == 't' || $key == 'class' ) continue; + $meta = get_post_meta( $obj->id, $key, true); + switch($key) + { + case "latitude": + $meta = $meta ? $meta : $default_latitude; + $opacity = " style='display:none;' " ; + break; + case "longitude": + $meta = $meta ? $meta : $default_longitude; + $opacity = " style='display:none;' " ; + break; + case "zoom": + $meta = $meta ? $meta : $default_zoom; + $opacity = " style='display:none;' " ; + break; + default: + $opacity = " "; + } + $$key = $meta; + switch( $value['type'] ) + { + case "number": + $h = ""; + break; + case "boolean": + $h = ""; + break; + default: + $h = ""; + } + + $html .="
    +
    ".$value['name'] . "
    +
    + $h +
    +
    +
    "; + } + //type switcher + $tp = wp_get_object_terms($obj->id, SHM_POINT_TYPE); + $term = empty($tp) ? false : $tp[0]; + $term_id = $term ? $term->term_id : -1; + + $html = empty($html) ? '' : $html; + $html .= "
    +
    ".__("Map marker type", SHMAPPER). "
    +
    ". + $h = ShMapPointType::get_ganre_swicher([ + 'selected' => $term_id, + 'prefix' => "point_type", + 'col_width' => 3, + "default_none" => true, + ], 'radio' ). + "
    +
    +
    "; + $html .= " +
    " . $obj->draw(); + + echo $html; + } + static function update_map_owners($obj) + { + global $wpdb; + $query = "DELETE FROM ".$wpdb->prefix."point_map + WHERE point_id=".$obj->id; + $wpdb->query($query); + $query = "INSERT INTO ".$wpdb->prefix."point_map + (`ID`, `point_id`, `map_id`, `date`, `session_id`, `approved_date`, `approve_user_id`) VALUES"; + $q = []; + foreach($_POST['owner_id'] as $owner) + { + $q[] = " (NULL, '".$obj->id."', '$owner', '".time()."', '0', '1', '0')"; + } + $query .= implode(",", $q); + $current = file_get_contents( ABSPATH. "alert.log" ); + file_put_contents( ABSPATH. "alert.log", $current. $query."\n" ); + $wpdb->query( $query ); + //var_dump( $query ); + return $query; + } + static function save_admin_edit($obj) + { + //if($_POST['point_type'] != 0) + wp_set_object_terms($obj->id, (int)$_POST['point_type'], SHM_POINT_TYPE); + static::update_map_owners($obj); + return [ + "latitude" => sanitize_text_field($_POST['latitude']), + "longitude" => sanitize_text_field($_POST['longitude']), + "location" => sanitize_text_field($_POST['location']), + "zoom" => sanitize_text_field($_POST['zoom']), + "approved" => sanitize_text_field($_POST['approved']), + ]; + } + static function owner_fields() + { + add_meta_box( 'owner_fields', __('Map owner', SHMAPPER), [__CLASS__, 'owner_fields_box_func'], static::get_type(), 'side', 'low' ); + } + + static function owner_fields_box_func( $post ) + { + $lt = static::get_instance( $post ); + echo static::owner_fields_edit($lt, "radio"); + } + static function owner_fields_edit($obj = false, $type = 'checkbox') + { + global $wpdb; + + $id = $obj && is_object($obj) ? $obj->id : -1; + $query = "SELECT map_id FROM ".$wpdb->prefix."point_map WHERE point_id=".$id; + $d = $wpdb->get_results($query); + $selects = []; + foreach($d as $dd) + $selects[] = $dd->map_id; + //var_dump( $selects ); + //wp_die(); + $all = ShmMap::get_all(-1, -1, 0, 'title', 'ASC' ); + $html = " +
    +
    +
      "; + foreach($all as $map) + { + $selected = in_array($map->ID, $selects) ? " checked " : ""; + $html .= " + + "; + } + $html .= " +
    +
    +
    "; + return $html; + } + static function bulk_owner_fields_edit( $params=-1, $type="radio") + { + + $all = ShmMap::get_all(-1, -1, 0, 'title', 'ASC' ); + + $html = "
      "; + foreach($all as $map) + { + + $selected = ''; // in_array($map->ID, $selects) ? " checked " : ""; + $html .= " + "; + } + $html .= " +
    "; + return $html; + } + + static function add_views_column( $columns ) + { + $columns = parent::add_views_column( $columns ); + unset( $columns['zoom'] ); + unset( $columns['latitude'] ); + unset( $columns['longitude'] ); + unset( $columns['approved'] ); + $columns = array_slice($columns, 0, 1, true) + ["ids"=>__("ID"), 'type' => __("Type")] + array_slice($columns, 1, count($columns) - 1, true) ; + $columns['location'] = __("GEO location", SHMAPPER); + $columns['thumb'] = "
    "; + $columns['owner_map'] = __("Usage in Maps: ", SHMAPPER); + return $columns; + } + static function fill_views_column($column_name, $post_id) + { + $obj = static::get_instance($post_id); + switch($column_name) + { + case "ids": + echo $post_id; + break; + case "location": + echo __("Latitude", SHMAPPER).": " . $obj->get_meta("latitude") ."". + "
    ". + __("Longitude", SHMAPPER).": " . $obj->get_meta("longitude") ."". + "
    ". + __("Location", SHMAPPER).": " . $obj->get_meta("location") .""; + break; + case "owner_map": + echo $obj->get_owner_list(); + break; + case "type": + $terms = get_the_terms( $post_id, SHM_POINT_TYPE ); + if($terms && !empty($terms[0]) && $terms[0]->term_id) { + foreach($terms as $term) { + //$term = get_term($obj->get_meta("type"), SHM_POINT_TYPE); + echo ShMapPointType::get_icon($term); + } + } + else + { +// $color = get_term_meta($type->term_id, "color", true); + $owners = $obj->get_owners(); + $map_id = $owners[0]->ID; + $diid = get_post_meta($map_id, "default_icon_id", true); + $icon = "
    +
    "; + echo $icon; + } + + //the_terms( $post_id, SHM_POINT_TYPE, "", ", ", "" ); + break; + case "thumb": + echo "
    " ; + break; + default: + parent::fill_views_column($column_name, $post_id); + } + } + + static function get_insert_form( $data ) + { + // 0 - map_id + // 1 - x + // 2 - y + // 3 - address + $html = " +
    + + + + +
    + + +
    +
    + + +
    +
    + ". + ShMapPointType::get_ganre_swicher( ["name"=>"shm-new-point-type", "prefix" => "shm-new-type"], "radio" ). + "
    +
    + + +
    +
    + "; + + return $html; + } + static function insert($data) + { + $type = (int)$data['type']; + $map_id = (int)$data['map_id']; + unset( $data['type'] ); + unset( $data['map_id'] ); + $point = parent::insert($data); + $query = $point->add_to_map( $map_id ); + wp_set_object_terms( $point->id, (int)$type, SHM_POINT_TYPE ); + return $point; + } + function remove_from_map($map_id) + { + global $wpdb; + $query = "DELETE FROM " . $wpdb->prefix . "point_map + WHERE map_id=$map_id AND point_id=$this->id;"; + $wpdb->query($query); + } + function add_to_map($map_id) + { + global $wpdb; + $query = "DELETE FROM " . $wpdb->prefix . "point_map + WHERE map_id=$map_id AND point_id=$this->id;"; + $wpdb->query($query); + $query = "INSERT INTO " . $wpdb->prefix . "point_map + (`ID`, `point_id`, `map_id`, `date`, `session_id`, `approved_date`, `approve_user_id`) VALUES + (NULL, $this->id, $map_id, " .time() . ", 1, 0, 1);"; + $wpdb->query($query); + return [ $this->id, $query ]; + } + + function get_owners() + { + global $wpdb; + $post_id = $this->id; + $query = "SELECT p.ID, p.post_title FROM `".$wpdb->prefix."point_map` as mp + left join ".$wpdb->prefix."posts as p on mp.map_id=p.ID + where point_id=$post_id"; + $res = $wpdb->get_results($query); + return $res; + } + function get_owner_list( $before = "", $separator = "
    ", $after = "") + { + $owners = $this->get_owners(); + $d = []; + foreach($owners as $r) + { + $link = is_admin() ? "/wp-admin/post.php?post=".$r->ID."&action=edit" : get_permalink($r->ID); + $d[] = "".$r->post_title.""; + } + + return $before . implode($separator, $d) . $after; + } + function draw() { + + $default_latitude = 55.8; + $default_longitude = 37.8; + $default_zoom = 4; + if ( isset( ShMapper::$options['shm_default_latitude'] ) ) { + $default_latitude = ShMapper::$options['shm_default_latitude']; + } + if ( isset( ShMapper::$options['shm_default_longitude'] ) ) { + $default_longitude = ShMapper::$options['shm_default_longitude']; + } + if ( isset( ShMapper::$options['shm_default_zoom'] ) ) { + $default_zoom = ShMapper::$options['shm_default_zoom']; + } + + $mapType = ShmMap::get_map_types()[ ShMapper::$options['map_api'] ][0]; + $types = wp_get_object_terms($this->id, SHM_POINT_TYPE); + $type = empty($types) ? false : $types[0]; + $term_id = $type && $type->term_id ? $type->term_id : -1; + $post_title = $this->get("post_title"); + $post_content = wpautop( $this->get("post_content") ); + $location = $this->get_meta("location"); + $latitude = $this->get_meta("latitude"); + $latitude = $latitude ? $latitude : $default_latitude; + $longitude = $this->get_meta("longitude"); + $longitude = $longitude ? $longitude : $default_longitude; + + $zoom = $this->get_meta("zoom"); + $zoom = $zoom ? $zoom : $default_zoom; + + $html = " +
    +
    +
    +
    + +
    +
    +
    +
    "; + $point = $this->body; + + $html .= " + "; + return $html; + } + static function the_content($content) + { + global $post; + if($post->post_type == SHM_POINT && (is_single() || is_archive() )) + { + + $point = static::get_instance($post); + + return $point->draw().$point->get_owner_list( __("Usage in Maps: ", SHMAPPER), ", ", " " )."
    ".$content; + + } + return $content; + + } + static function my_bulk_edit_custom_box( $column_name, $post_type ) + { + if($post_type != static::get_type()) return; + ?> +
    +
    + ".__("Usage in Maps: ", SHMAPPER)."". static::bulk_owner_fields_edit( ); + break; + default: + break; + } + ?> +
    +
    + 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 literal 0 HcmV?d00001 diff --git a/languages/shmapper-by-teplitsa-de_DE.po b/languages/shmapper-by-teplitsa-de_DE.po new file mode 100644 index 0000000..a1ea512 --- /dev/null +++ b/languages/shmapper-by-teplitsa-de_DE.po @@ -0,0 +1,999 @@ +# Translation of Plugins - shMapper by Teplitsa - Development (trunk) in Russian +# This file is distributed under the same license as the Plugins - shMapper by Teplitsa - Development (trunk) package. +msgid "" +msgstr "" +"PO-Revision-Date: 2020-06-18 05:54+0300\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.8.8\n" +"Language: de\n" +"Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" +"POT-Creation-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" + +#: class/ShmAdminPage.class.php:27 +msgid "shMapper developers chat" +msgstr "shMapper Entwicklerchat" + +#: class/ShmForm.class.php:497 +msgid "Drag choosed icon and place it to map or click it and enter exact address." +msgstr "Ziehen Sie das ausgewählte Symbol an die gewünschte Stelle auf der Karte oder klicken Sie darauf und geben Sie die genaue Adresse ein." + +#: assets/js/ShMapper.front.js:9 +msgid "Error: no map" +msgstr "Fehler: Keine Karte" + +#: widget/ShMap.widget.php:64 +msgid "Tite" +msgstr "Titel" + +#: widget/ShMap.widget.php:17 +msgid "Player Cabinet" +msgstr "Dashboard" + +#: widget/ShMap.widget.php:16 +msgid "Ermak Locations" +msgstr "Position verschieben" + +#: widget/ShMap.widget.php:9 +msgid "Shmapper Locations" +msgstr "Shmapper Position" + +#: tpl/shmMap.php:83 +msgid "download %s.csv" +msgstr "%s.csv herunterladen" + +#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 +msgid "Submit" +msgstr "Senden" + +#: tpl/input_file_form.php:77 +msgid "Insert" +msgstr "Einfügen" + +#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 +msgid "Remove" +msgstr "Entfernen" + +#: tpl/input_file_form.php:72 +msgid "Browse" +msgstr "Durchsuchen" + +#: tpl/input_file_form.php:66 +msgid "File" +msgstr "Datei" + +#: tpl/input_file_form.php:64 +msgid "Upload Image" +msgstr "Bild hochladen" + +#: class/ShmPoint.class.php:312 +msgid "Address" +msgstr "Adresse" + +#: class/ShmPoint.class.php:158 +msgid "Map owner" +msgstr "Kartenbesitzer" + +#: class/ShmPoint.class.php:33 +msgid "no found Map marker in trash" +msgstr "Keinen Kartenpunkt im Papierkorb gefunden" + +#: class/ShmPoint.class.php:32 +msgid "Map marker not found" +msgstr "Markierung nicht gefunden" + +#: class/ShmPoint.class.php:31 +msgid "search Map marker" +msgstr "Markierung suchen" + +#: class/ShmPoint.class.php:30 +msgid "view Map marker" +msgstr "Markierung ansehen" + +#: class/ShmPoint.class.php:29 +msgid "all Map markers" +msgstr "Alle Markierungen" + +#: class/ShmPoint.class.php:27 +msgid "edit Map marker" +msgstr "Markierung bearbeiten" + +#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 +#: class/ShmPoint.class.php:28 +msgid "add Map marker" +msgstr "Markierung hinzufügen" + +#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 +msgid "Map marker" +msgstr "Markierung" + +#: class/ShMapper_Assistants.class.php:90 +msgid "Your requests to this Map " +msgstr "Ihre Einreichung für die Karte " + +#: class/ShMapper_Assistants.class.php:44 +msgid "all maps" +msgstr "Alle Karten" + +#: class/SMC_Post.php:631 class/SMC_Post.php:636 +msgid "Parameters" +msgstr "Optionen" + +#: class/SMC_Post.php:566 +msgid "Yes" +msgstr "Ja" + +#: class/SMC_Post.php:563 +msgid "No" +msgstr "Nein" + +#: class/SMC_Post.php:560 +msgid "— No Change —" +msgstr "— Keine Veränderung —" + +#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 +#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 +msgid "Usage in Maps: " +msgstr "Wird in Karte verwendet: " + +#: class/ShmMap.class.php:780 +msgid "Succesfuly delete map and %s points migrates to %s" +msgstr "Karte erfolgreich gelöscht und %s Punkte nach %s verschoben" + +#: class/ShmMap.class.php:773 +msgid "Succesfuly delete map and %s points are orphans now" +msgstr "Karte erfolgreich gelöscht und %s Punkte sind keiner Karte zugeordnet" + +#: class/ShmMap.class.php:768 +msgid "Succesfuly delete map width %s points" +msgstr "Karte erfolgreich mit %s Punkten gelöscht" + +#: class/ShmMap.class.php:682 +msgid "Switch all Points to anover Map" +msgstr "Verschiebe alle Markierung auf eine andere Karte" + +#: class/ShmMap.class.php:676 +msgid "Escape all Points without Owner Map" +msgstr "Alle Markierungen ohne Eltern-Karte stehen lassen" + +#: class/ShmMap.class.php:670 +msgid "Delete all Points" +msgstr "Lösche alle Markierung" + +#: class/ShmMap.class.php:665 +msgid "What do with placemarks of deleting Map?" +msgstr "Was soll mit den Markierungen der gelöschten Karte passieren?" + +#: class/ShmMap.class.php:521 class/SMC_Post.php:496 +msgid "Double" +msgstr "Duplizieren" + +#: class/ShmMap.class.php:450 +msgid "Personal email" +msgstr "E-Mail Addresse" + +#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 +#: class/ShmMap.class.php:471 +msgid "Required" +msgstr "Erforderlich" + +#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 +#: class/ShmMap.class.php:461 +msgid "Include" +msgstr "Einschalten" + +#: class/ShmMap.class.php:426 +msgid "2.5. What data users will have to put?" +msgstr "2.5. Welche Daten müssen Benutzer angeben?" + +#: class/ShmMap.class.php:418 +msgid "2.4. Can users leave their contact information?" +msgstr "2.4. Sollen Benutzer ihre Kontaktinformationen hinterlassen können?" + +#: class/ShmMap.class.php:409 +msgid "You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;" +msgstr "Sie können ein eigenes Fomrular mit folgenden Elementen erstellen: & laquo; Textlinie & raquo;, & laquo; Textfeld & raquo;, & laquo; Dateiupload & raquo;, & laquo; Markierungskategorien & raquo;" + +#: class/ShmMap.class.php:406 +msgid "2.3. What information can users enter?" +msgstr "2.3. Welche Informationen können Benutzer hinterlassen?" + +#: class/ShmMap.class.php:398 +msgid "2.2. Will I notify the author about new posts?" +msgstr "2.2. Soll der Autor über neue Beiträge informiert werden?" + +#: class/ShmMap.class.php:392 +msgid "For example «All beaches by the river»" +msgstr "Zum Beispiel «Alle Strände am Fluss»" + +#: class/ShmMap.class.php:388 +msgid "2.1. What is the name of your information form?" +msgstr "2.1. Wie lautet der Name des Formulars?" + +#: class/ShmMap.class.php:383 +msgid "Enable crowdsourcing function (free add Users new Markers)" +msgstr "Aktivieren der Crowdsourcing-Funktion (hinzufügen neuer Markierungen durch Benutzer) " + +#: class/ShmMap.class.php:351 +msgid "Recommended size is 64х64 px, format is .png" +msgstr "Empfohlene Größe ist 64x64 pc, empfohlenes Format ist .png" + +#: class/ShmMap.class.php:346 +msgid "1.7. Default Marker icon" +msgstr "1.7. Standard Marker Icon" + +#: class/ShmMap.class.php:335 +msgid "1.6. Will Marker type filter be displayed?" +msgstr "1.6. Soll das Filterfeld nach Markertypen angezeigt werden?" + +#: class/ShmMap.class.php:324 +msgid "1.5. Will the legend be displayed?" +msgstr "1.5. Soll die Legende angezeigt werden?" + +#: class/ShmMap.class.php:313 +msgid "1.4. May User download data in *.csv?" +msgstr "1.4. Dürfen Benutzer Daten als .csv herunterladen?" + +#: class/ShmMap.class.php:299 +msgid "Choose layers" +msgstr "Ebene Auswählen" + +#: class/ShmMap.class.php:277 +msgid "Map zoom slider enabled" +msgstr "Vergößerungschieberegler aktivieren" + +#: class/ShmMap.class.php:269 +msgid "1.3. Include interface" +msgstr "1.3. Welche Kartensteuerungen sollen vorhanden sein?" + +#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 +msgid "Empty for " +msgstr "Leer lassen für " + +#: class/ShmMap.class.php:249 +msgid "1.2. Set size for map's div (per pixels)" +msgstr "1.2. Einstellen der Kartengröße (in Pixeln)" + +#: class/ShmMap.class.php:237 +msgid "1.1. Pan map and choose zoom" +msgstr "1.1. Karte zentireren und Maßstab auswählen" + +#: class/ShmMap.class.php:212 +msgid "Step 2. May anover Users add information for Map." +msgstr "Schritt 2. Können andere Benutzer Ihrer Karte Informationen hinzufügen?" + +#: class/ShmMap.class.php:198 +msgid "You can insert a card into a post or page by copying this shortcode." +msgstr "Sie können eine Karte in einen Beitrag oder in eine Seite einfügen, indem Sie diesen Shortcode kopieren." + +#: class/ShmMap.class.php:186 +msgid "Including Map to post" +msgstr "Karte einem Beitrag hinzufügen" + +#: class/ShmMap.class.php:162 +msgid "only request form" +msgstr "nur Anfrageformular" + +#: class/ShmMap.class.php:153 +msgid "only map" +msgstr "nur Karte" + +#: class/ShmMap.class.php:145 +msgid "include all (map and request form)" +msgstr "alles inklusive(Karte und Anfrageformular)" + +#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 +msgid "Map markers" +msgstr "Markierungen" + +#: class/ShmMap.class.php:124 +msgid "shortcodes" +msgstr "Shortcodes" + +#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 +msgid "ID" +msgstr "ID" + +#: class/ShmMap.class.php:80 +msgid "no found Map in trash" +msgstr "Keine Karte im Papierkorb gefunden" + +#: class/ShmMap.class.php:79 +msgid "Map not found" +msgstr "Karte nicht gefunden" + +#: class/ShmMap.class.php:78 +msgid "search Map" +msgstr "Karte suchen" + +#: class/ShmMap.class.php:77 +msgid "view Map" +msgstr "Karte anzeigen" + +#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 +msgid "all Maps" +msgstr "alle Karten" + +#: class/ShmMap.class.php:74 +msgid "edit Map" +msgstr "Karte bearbeiten" + +#: class/ShmMap.class.php:65 +msgid "Step 1. Set up your map." +msgstr "Schritt 1. Karte einrichten" + +#: class/ShMapPointType.class.php:358 +msgid "None" +msgstr "Keine" + +#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 +msgid "Color" +msgstr "Farbe" + +#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 +#: class/ShMapPointType.class.php:197 +msgid "Icon" +msgstr "Icon" + +#: class/ShMapPointType.class.php:86 +msgid "Name" +msgstr "Name" + +#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 +msgid "Map marker types" +msgstr "Markertypen" + +#: class/ShMapPointType.class.php:49 +msgid "Unique type of every Map markers" +msgstr "Einzigartiger Typ jeder Kartenmarkierung" + +#: class/ShMapPointType.class.php:42 +msgid "new Map marker type name" +msgstr "Name des neuen Markertyps" + +#: class/ShMapPointType.class.php:41 +msgid "add Map marker type" +msgstr "neuen Markertyp hinzufügen" + +#: class/ShMapPointType.class.php:40 +msgid "update Map marker type" +msgstr "Markertyp aktualisieren" + +#: class/ShMapPointType.class.php:39 +msgid "edit Map marker type" +msgstr "Makrertyp bearbeiten" + +#: class/ShMapPointType.class.php:38 +msgid "parent Map marker type:" +msgstr "Markertyp der übergeordneten Karte:" + +#: class/ShMapPointType.class.php:37 +msgid "parent Map marker type" +msgstr "übergeordneter Markertyp" + +#: class/ShMapPointType.class.php:36 +msgid "view Map marker type" +msgstr "Markertyp ansehen" + +#: class/ShMapPointType.class.php:35 +msgid "all Map marker types" +msgstr "alle Markertypen" + +#: class/ShMapPointType.class.php:34 +msgid "Search Map marker type" +msgstr "Markertyp suchen" + +#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 +#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 +msgid "Map marker type" +msgstr "Markertyp" + +#: class/ShMapper.class.php:607 +msgid "Prevous step" +msgstr "Vorheriger Schritt" + +#: class/ShMapper.class.php:602 class/ShMapper.class.php:608 +msgid "Go to current page" +msgstr "Zur aktuellen Seite" + +#: class/ShMapper.class.php:601 class/ShMapper.class.php:609 +msgid "Close wizzard" +msgstr "Assisten schließen" + +#: class/ShMapper.class.php:559 +msgid "Restart wizzard" +msgstr "Assistent neustarten" + +#: class/ShMapper.class.php:556 +msgid "Wizzard" +msgstr "Assistent" + +#: class/ShMapper.class.php:544 +msgid "Error send map request" +msgstr "Fehler beim Senden der Anfrage" + +#: class/ShMapper.class.php:538 +msgid "Successful send map request" +msgstr "Anfrage erfolgreich gesendet" + +#: class/ShMapper.class.php:532 +msgid "Save personal data garantee" +msgstr "Garantierte Speicherung personenbezogener Daten" + +#: class/ShMapper.class.php:528 +msgid "Vocabulary" +msgstr "Textbausteine" + +#: class/ShMapper.class.php:516 +msgid "Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha" +msgstr "Dein Captcha funktioniert noch nicht. Um diese Funktion zu aktivieren, rufen Sie die API-Schlüssel unter google.com/recaptch ab" + +#: class/ShMapper.class.php:512 +msgid "What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s." +msgstr "Was ist Google reCAPTCHA? Wie erhalte ich einen Schlüssel? Weitere Informationen %gibt es hier%s." + +#: class/ShMapper.class.php:503 +msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" +msgstr "Aktivieren Sie Captcha im Formular (das Plugin verwendet nur reCAPTCHA v2-Schlüssel)." + +#: class/ShMapper.class.php:496 +msgid "Protection" +msgstr "Sicherheit" + +#: class/ShMapper.class.php:484 +msgid "Reload page after User send request." +msgstr "Neuladen der Seite nach einer Benutzereinreichung" + +#: class/ShMapper.class.php:476 +msgid "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" +msgstr "ACHTUNG: Deaktivieren Sie diese Option nur auf eigene Gefahr. Es besteht die Gefahr von Spam-Angriffen" + +#: class/ShMapper.class.php:472 +msgid "все сообщения будут добавляться в статусе «Черновик»" +msgstr "Alle Nachrichten erhalten den Status «Entwurf»" + +#: class/ShMapper.class.php:468 +msgid "Pre-modertion from Map owner." +msgstr "Vormoderation durch den Karteninhaber." + +#: class/ShMapper.class.php:460 +msgid "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." +msgstr "Benutzer können keiner Karte Nachrichten hinzufügen. Wenn das Häkchen aktiviert ist, wird der Interaktivitätsblock nicht einmal angezeigt." + +#: class/ShMapper.class.php:456 +msgid "Включить глобальный режим неинтерактивных карт" +msgstr "Aktivieren Sie den globalen nicht interaktiven Kartenmodus" + +#: class/ShMapper.class.php:448 +msgid "Interactive" +msgstr "Interaktiv" + +#: class/ShMapper.class.php:439 +msgid "Open Street Map" +msgstr "Open Street Map" + +#: class/ShMapper.class.php:433 +msgid "Yandex Map" +msgstr "Yandex Map" + +#: class/ShMapper.class.php:426 +msgid "Map API" +msgstr "Karten API" + +#: class/ShMapper.class.php:402 class/ShMapper.class.php:403 +#: class/ShMapper.class.php:417 +msgid "Settings" +msgstr "Einstellungen" + +#: class/ShMapper.class.php:276 assets/js/ShMapper.admin.js:155 +msgid "Are you shure?" +msgstr "Sind Sie sicher?" + +#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 +msgid "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match" +msgstr "Fehler: Das Formular ist nicht mit der Karte verknüpft. Um eine Karte und ein Formular zu verknüpfen, müssen auf einer Seite zwei Shortcodes vorhanden sein (Karte - [shmMap id='6' map='true' uniq='z.B., 777'] und Formular - [shmMap id='94' form='true' uniq='z.B., 777']), für die die uniq-Parameter übereinstimmen." + +#: class/ShMapper.class.php:274 class/ShMapper.class.php:370 +#: assets/js/ShMapper.js:391 +msgid "Close" +msgstr "Schließen" + +#: class/ShMapper.class.php:273 class/ShMapper.class.php:369 +msgid "Send" +msgstr "Senden" + +#: class/ShMapper.class.php:272 class/ShMapper.class.php:368 +#: assets/js/ShMapper.js:381 +msgid "Attantion" +msgstr "Achtung" + +#: class/ShMapper.class.php:178 +msgid "Accessed User" +msgstr "Benutzerzugriff" + +#: class/ShMapper.class.php:177 +msgid "Aprove date" +msgstr "Datum bestätigen" + +#: class/ShMapper.class.php:176 +msgid "Aproved" +msgstr "Bestätigt" + +#: class/ShMapper.class.php:175 +msgid "Contacts" +msgstr "Kontakte" + +#: class/ShMapper.class.php:173 +msgid "Session" +msgstr "Sitzung|Session" + +#: class/ShMapper.class.php:172 class/ShmPoint.class.php:231 +#: class/ShmPoint.class.php:308 +msgid "Type" +msgstr "Typ" + +#: class/ShMapper.class.php:167 class/ShmMap.class.php:103 +#: class/ShmMap.class.php:596 class/SMC_Post.php:370 +#: class/ShmPoint.class.php:300 +msgid "Title" +msgstr "Titel" + +#: class/ShMapper.class.php:166 class/ShmMap.class.php:70 +#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 +msgid "Map" +msgstr "Karte" + +#: class/ShMapper.class.php:160 +msgid "Required Personal phone" +msgstr "Telefonnummer erforderlich" + +#: class/ShMapper.class.php:159 class/ShmMap.class.php:466 +msgid "Personal phone" +msgstr "Telefonnummer" + +#: class/ShMapper.class.php:158 +msgid "Unclude Personal phone" +msgstr "Telefonnummer aktivieren" + +#: class/ShMapper.class.php:157 +msgid "Required Personal e-mail" +msgstr "E-Mail erforderlich" + +#: class/ShMapper.class.php:156 +msgid "Personal e-mail" +msgstr "E-Mail Adresse" + +#: class/ShMapper.class.php:155 +msgid "Unclude Personal e-mail" +msgstr "E-Mail aktivieren" + +#: class/ShMapper.class.php:154 +msgid "Required Personal name" +msgstr "Name erforderlich" + +#: class/ShMapper.class.php:153 class/ShmMap.class.php:434 +msgid "Personal name" +msgstr "Name" + +#: class/ShMapper.class.php:152 +msgid "Unclude Personal name" +msgstr "Name aktivieren" + +#: class/ShMapper.class.php:151 class/ShmMap.class.php:421 +msgid "Users can leave their contact details for feedback." +msgstr "Benutzer können ihre Kontaktdaten für Feedback hinterlassen." + +#: class/ShMapper.class.php:150 +msgid "Form generator" +msgstr "Formular Generator" + +#: class/ShMapper.class.php:149 +msgid "Form Title" +msgstr "Formular Titel" + +#: class/ShMapper.class.php:148 class/ShmMap.class.php:122 +#: class/ShmMap.class.php:401 +msgid "Notify owner of Map" +msgstr "Autor der Karte benachrichtigen" + +#: class/ShMapper.class.php:147 class/ShmMap.class.php:117 +msgid "Form exists" +msgstr "Formular vorhanden" + +#: class/ShMapper.class.php:145 +msgid "Default Marker icon" +msgstr "Standard Markierungs Icon" + +#: class/ShMapper.class.php:144 class/ShmMap.class.php:291 +msgid "Formating Marker to cluster" +msgstr "Kartenmakierungen zu Cluster stappeln" + +#: class/ShMapper.class.php:143 class/ShmMap.class.php:295 +msgid "Lock zoom and drag" +msgstr "Blockieren der Vergößerung und des Verschiebens" + +#: class/ShMapper.class.php:142 class/ShmMap.class.php:281 +msgid "Map layer switcher" +msgstr "Kartenebenen" + +#: class/ShMapper.class.php:141 +msgid "Map zoom slider" +msgstr "Kartenvergrößerungsschieberegler" + +#: class/ShMapper.class.php:140 class/ShmMap.class.php:287 +msgid "Map full screen" +msgstr "Voolbildmodus" + +#: class/ShMapper.class.php:139 class/ShmMap.class.php:273 +msgid "Map search" +msgstr "Kartensuche" + +#: class/ShMapper.class.php:138 class/ShMapPointType.class.php:125 +#: class/ShMapPointType.class.php:177 class/ShmMap.class.php:252 +#: widget/ShMap.widget.php:80 +msgid "Height" +msgstr "Höhe" + +#: class/ShMapper.class.php:137 class/ShMapPointType.class.php:131 +#: class/ShMapPointType.class.php:187 class/ShmMap.class.php:257 +msgid "Width" +msgstr "Breite" + +#: class/ShMapper.class.php:136 class/ShmMap.class.php:107 +#: class/ShmMap.class.php:316 +msgid "Export csv" +msgstr "csv exportieren" + +#: class/ShMapper.class.php:135 class/ShmMap.class.php:338 +msgid "Filters exists" +msgstr "Filter vorhanden" + +#: class/ShMapper.class.php:134 class/ShmMap.class.php:112 +#: class/ShmMap.class.php:327 +msgid "Legend exists" +msgstr "Legende vorhanden" + +#: class/ShMapper.class.php:126 class/ShMapper.class.php:133 +msgid "Zoom" +msgstr "Zoom" + +#: class/ShMapper.class.php:93 +msgid "edit Maps in page" +msgstr "Karten auf der Seite bearbeiten" + +#: class/ShMapper.class.php:87 +msgid "Maps" +msgstr "Karten" + +#: class/ShMapper.class.php:81 class/ShmMap.class.php:72 +#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 +msgid "add Map" +msgstr "Karte hinzufügen" + +#: class/ShMapper.class.php:75 class/ShMapper.class.php:389 +#: class/ShMapper.class.php:390 +msgid "Shmapper" +msgstr "shMapper" + +#: class/ShMapper.class.php:27 +msgid "Unknown error." +msgstr "Unbekannter Fehler" + +#: class/ShMapper.class.php:26 +msgid "Your request has been successfully registered." +msgstr "Ihre Anfrage wurde erfolgreich registriert." + +#: class/ShMapper.class.php:25 +msgid "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +msgstr "Ich erteile dem Site-Administrator meine Zustimmung, meine personenbezogenen Daten gemäß dem Bundesgesetz vom 27. Juli 2006 N 152-ФЗ \"Über personenbezogene Daten\" einschließlich automatisierter Daten zu verarbeiten." + +#: class/ShmForm.class.php:574 +msgid "Your phone" +msgstr "Telefonnummer" + +#: class/ShmForm.class.php:564 +msgid "Your e-mail" +msgstr "E-Mail" + +#: class/ShmForm.class.php:553 +msgid "Your name" +msgstr "Name" + +#: class/ShmForm.class.php:520 +msgid "Drag icon and place it to map." +msgstr "Ziehen Sie das Icon und platzieren Sie es auf der Karte" + +#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 +#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 +#: class/ShmForm.class.php:578 +msgid "This required field" +msgstr "Dieses Feld ist erforderlich" + +#: class/ShmForm.class.php:436 +msgid "Сhoose files" +msgstr "Datei auswählen" + +#: class/ShmForm.class.php:378 +msgid "The name of the parameter that refers to this element" +msgstr "Der Name des Parameters, der auf dieses Element verweist" + +#: class/ShmForm.class.php:326 +msgid "enable" +msgstr "aktivieren" + +#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 +msgid "require" +msgstr "erforderlich" + +#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 +msgid "Delete me" +msgstr "Lösch mich" + +#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 +msgid "Add after" +msgstr "Nachher hinzufügen" + +#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 +msgid "Add before" +msgstr "Vorher hinzufügen" + +#: class/ShmForm.class.php:231 +msgid "Element is required" +msgstr "Feld ist erforderlich" + +#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 +#: class/ShmForm.class.php:374 +msgid "write description" +msgstr "Beschreibung einfügen" + +#: class/ShmForm.class.php:223 class/ShmForm.class.php:295 +#: class/ShmForm.class.php:372 class/ShMapper.class.php:168 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 +msgid "Description" +msgstr "Beschreibung" + +#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:361 +msgid "Placemark types" +msgstr "Markertypen" + +#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 +#: class/ShmForm.class.php:357 +msgid "write placeholder" +msgstr "Platzhalter einfügen" + +#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 +#: class/ShmForm.class.php:355 +msgid "Placeholder" +msgstr "Platzhalter" + +#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 +#: class/ShmForm.class.php:336 +msgid "write title" +msgstr "Titel einfügen" + +#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 +#: class/ShmForm.class.php:334 +msgid "Label of element" +msgstr "Elementbezeichnung" + +#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 +#: class/ShmForm.class.php:340 +msgid "Type of element" +msgstr "Typ des Elements" + +#: class/ShmForm.class.php:104 +msgid "enabled Map markers" +msgstr "verfügbare Marker" + +#: class/ShmForm.class.php:98 +msgid "input file" +msgstr "Bild hochladen" + +#: class/ShmForm.class.php:92 +msgid "textarea" +msgstr "Textfeld" + +#: class/ShmForm.class.php:62 +msgid "input text" +msgstr "Text eingeben" + +#: class/ShmForm.class.php:56 +msgid "input title" +msgstr "Titel eingeben" + +#: class/ShmForm.class.php:43 +msgid "Whrite description" +msgstr "Beschreibung hinzufügen" + +#: class/ShmForm.class.php:22 +msgid "Put a title" +msgstr "Titel eingeben" + +#: class/ShmForm.class.php:14 +msgid "Place the mark to Map" +msgstr "Marker platzieren" + +#: class/ShMapperRequest.class.php:360 +msgid "Trash" +msgstr "Papierkorb" + +#: class/ShMapperRequest.class.php:358 +msgid "Approve" +msgstr "zu genehmigen" + +#: class/ShMapperRequest.class.php:337 +msgid "You may see this %s" +msgstr "Hier zu sehen %s" + +#: class/ShMapperRequest.class.php:335 +msgid "<%s> Request to your Map from [%s] [%s]" +msgstr "<%s> Neue Kartenanfrage von [%s] [%s]" + +#: class/ShMapperRequest.class.php:327 +msgid "Uknown User" +msgstr "Unbekannter Benutzer" + +#: class/ShMapperRequest.class.php:88 class/ShMapper.class.php:123 +#: class/ShMapper.class.php:171 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:250 +msgid "Location" +msgstr "Adresse" + +#: class/ShMapperRequest.class.php:86 class/ShMapper.class.php:125 +#: class/ShMapper.class.php:132 class/ShMapper.class.php:170 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 +msgid "Longitude" +msgstr "Längengrad" + +#: class/ShMapperRequest.class.php:84 class/ShMapper.class.php:124 +#: class/ShMapper.class.php:131 class/ShMapper.class.php:169 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 +msgid "Latitude" +msgstr "Breitengrad" + +#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 +msgid "GEO location" +msgstr "Geo-Position" + +#: class/ShMapperRequest.class.php:67 class/ShMapper.class.php:174 +#: class/ShmMap.class.php:126 +msgid "Author" +msgstr "Autor" + +#: class/ShMapperRequest.class.php:64 +msgid "Approving" +msgstr "Genehmigung" + +#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 +msgid "Image" +msgstr "Bild" + +#: class/ShMapperRequest.class.php:29 +msgid "no found Map Request in trash" +msgstr "Keine Kartenanfrage im Papierkorb gefunden" + +#: class/ShMapperRequest.class.php:28 +msgid "Map Request not found" +msgstr "Anfrage nicht gefunden" + +#: class/ShMapperRequest.class.php:27 +msgid "search Map Request" +msgstr "Kartenanfrage suchen" + +#: class/ShMapperRequest.class.php:26 +msgid "view Map Request" +msgstr "Kartenanfrage ansehen" + +#: class/ShMapperRequest.class.php:25 class/ShMapperRequest.class.php:30 +#: class/ShMapper.class.php:112 +msgid "all Map Requests" +msgstr "Alle Kartenanfragen" + +#: class/ShMapperRequest.class.php:23 +msgid "edit Map Request" +msgstr "Kartenanfrage bearbeiten" + +#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 +#: class/ShMapperRequest.class.php:24 +msgid "add Map Request" +msgstr "Neu hinzufügen" + +#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 +msgid "Map Request" +msgstr "Kartenanfrage" + +#: class/ShMapper_ajax.class.php:456 class/ShMapper_ajax.class.php:467 +msgid "Set key" +msgstr "Schlüssel setzen" + +#: class/ShMapper_ajax.class.php:396 +msgid "Change Vocabulaty: " +msgstr "Textbausteine ändern: " + +#: class/ShMapper_ajax.class.php:357 +msgid "Create" +msgstr "Erstellen" + +#: class/ShMapper_ajax.class.php:355 +msgid "add Map Point" +msgstr "Marker hinzugefügt" + +#: class/ShMapper_ajax.class.php:339 +msgid "Delete" +msgstr "Löschen" + +#: class/ShMapper_ajax.class.php:337 +msgid "Are you want delete %s?" +msgstr "Möchten Sie %s löschen?" + +#: class/ShMapper_ajax.class.php:232 +msgid "Request put to Trash" +msgstr "Anfrage in Papierkorb verschoben" + +#: class/ShMapper_ajax.class.php:220 +msgid "Approve succesfully and insert new Map marker" +msgstr "Genehmigt. Marker erstellt" + +#: class/ShMapper_ajax.class.php:206 +msgid "Wizzard restarted" +msgstr "Assistent wird neugestartet" + +#: class/ShMapper_ajax.class.php:195 +msgid "Wizzard closed" +msgstr "Assistent geschlossen" + +#: class/ShMapper_ajax.class.php:177 +msgid "Congratulation! That's all!" +msgstr "Glückwunsch! Das ist alles!" + +#: class/ShMapper_ajax.class.php:170 class/ShMapper.class.php:605 +msgid "Next step" +msgstr "Nächster Schritt" + +#: shortcode/shmMap.shortcode.php:43 +msgid "Send request" +msgstr "Anfrage senden" + +#: shortcode/shmMap.shortcode.php:19 +msgid "No map on ID " +msgstr "Karten-ID nicht angegeben" + +#. Author URI of the plugin +msgid "https://te-st.ru" +msgstr "https://te-st.ru" + +#. Author of the plugin +msgid "Teplitsa. Technologies for Social Good" +msgstr "Teplitsa. Technologies for Social Good" + +#. Description of the plugin +msgid "Location and logistics services for NKO" +msgstr "Location and logistics services for NKO" + +#. Plugin URI of the plugin +msgid "http://genagl.ru/?p=652" +msgstr "http://genagl.ru/?p=652" + +#. Plugin Name of the plugin +msgid "ShMapper by Teplitsa" +msgstr "ShMapper by Teplitsa" + +msgid "Yandex.Maps API key Saved" +msgstr "Yandey.Maps API Schlüssel gespeichert" + +msgid "Yandex.Maps API Key" +msgstr "Yandex.Maps API Schlüssel" + +msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." +msgstr "ACHTUNG: Sie müssen einen Schlüssel angeben, um die Yandex.Maps API benutzen zu können." + +msgid "Learn more here:" +msgstr "Mehr Informationen:" + +msgid "Yandex.Maps" +msgstr "Yandex.Maps" diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo new file mode 100644 index 0000000000000000000000000000000000000000..06965506afa2b456b193208f4b788bd9f5e6694c GIT binary patch literal 22718 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 A3jhEB literal 0 HcmV?d00001 diff --git a/languages/shmapper-by-teplitsa-ru_RU.po b/languages/shmapper-by-teplitsa-ru_RU.po new file mode 100644 index 0000000..e788d7e --- /dev/null +++ b/languages/shmapper-by-teplitsa-ru_RU.po @@ -0,0 +1,996 @@ +# Translation of Plugins - shMapper by Teplitsa - Development (trunk) in Russian +# This file is distributed under the same license as the Plugins - shMapper by Teplitsa - Development (trunk) package. +msgid "" +msgstr "" +"PO-Revision-Date: 2019-09-04 06:14:53+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: ru\n" +"Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" + +#: class/ShmAdminPage.class.php:27 +msgid "shMapper developers chat" +msgstr "Чат разработчиков shMapper" + +#: class/ShmForm.class.php:497 +msgid "Drag choosed icon and place it to map or click it and enter exact address." +msgstr "Перетащите выбранную иконку в нужное место Карты или кликните по ней и введите точный адрес." + +#: assets/js/ShMapper.front.js:9 +msgid "Error: no map" +msgstr "Ошибка: нет карты" + +#: widget/ShMap.widget.php:64 +msgid "Tite" +msgstr "Название" + +#: widget/ShMap.widget.php:17 +msgid "Player Cabinet" +msgstr "Кабинет" + +#: widget/ShMap.widget.php:16 +msgid "Ermak Locations" +msgstr "Области Ermak" + +#: widget/ShMap.widget.php:9 +msgid "Shmapper Locations" +msgstr "Области Shmapper" + +#: tpl/shmMap.php:83 +msgid "download %s.csv" +msgstr "скачать %s.csv" + +#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 +msgid "Submit" +msgstr "Отправить" + +#: tpl/input_file_form.php:77 +msgid "Insert" +msgstr "Вставить" + +#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 +msgid "Remove" +msgstr "Удалить" + +#: tpl/input_file_form.php:72 +msgid "Browse" +msgstr "Просмотр" + +#: tpl/input_file_form.php:66 +msgid "File" +msgstr "Файл" + +#: tpl/input_file_form.php:64 +msgid "Upload Image" +msgstr "Загрузить изображение" + +#: class/ShmPoint.class.php:312 +msgid "Address" +msgstr "Адрес" + +#: class/ShmPoint.class.php:158 +msgid "Map owner" +msgstr "Родительская карта" + +#: class/ShmPoint.class.php:33 +msgid "no found Map marker in trash" +msgstr "Маркеры в корзине не найдены" + +#: class/ShmPoint.class.php:32 +msgid "Map marker not found" +msgstr "Маркер не найден" + +#: class/ShmPoint.class.php:31 +msgid "search Map marker" +msgstr "искать Маркер" + +#: class/ShmPoint.class.php:30 +msgid "view Map marker" +msgstr "смотреть Маркер" + +#: class/ShmPoint.class.php:29 +msgid "all Map markers" +msgstr "Маркеры" + +#: class/ShmPoint.class.php:27 +msgid "edit Map marker" +msgstr "редактировать Маркер" + +#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 +#: class/ShmPoint.class.php:28 +msgid "add Map marker" +msgstr "Добавить новый" + +#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 +msgid "Map marker" +msgstr "Маркер" + +#: class/ShMapper_Assistants.class.php:90 +msgid "Your requests to this Map " +msgstr "Ваши запросы к этой карте" + +#: class/ShMapper_Assistants.class.php:44 +msgid "all maps" +msgstr "все карты" + +#: class/SMC_Post.php:631 class/SMC_Post.php:636 +msgid "Parameters" +msgstr "Параметры" + +#: class/SMC_Post.php:566 +msgid "Yes" +msgstr "Да" + +#: class/SMC_Post.php:563 +msgid "No" +msgstr "Нет" + +#: class/SMC_Post.php:560 +msgid "— No Change —" +msgstr "— Без изменений —" + +#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 +#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 +msgid "Usage in Maps: " +msgstr "Используется в Картах: " + +#: class/ShmMap.class.php:780 +msgid "Succesfuly delete map and %s points migrates to %s" +msgstr "Карта успешно удалена и %s точек перенесено в %s" + +#: class/ShmMap.class.php:773 +msgid "Succesfuly delete map and %s points are orphans now" +msgstr "Карта успешно удалена и %s точек сейчас не привязаны ни к какой карте" + +#: class/ShmMap.class.php:768 +msgid "Succesfuly delete map width %s points" +msgstr "Карта успешно удалена с %s точками" + +#: class/ShmMap.class.php:682 +msgid "Switch all Points to anover Map" +msgstr "Перенести все Маркеры на другую Карту" + +#: class/ShmMap.class.php:676 +msgid "Escape all Points without Owner Map" +msgstr "Оставить все Маркеры без родительской Карты" + +#: class/ShmMap.class.php:670 +msgid "Delete all Points" +msgstr "Удалить все Маркеры" + +#: class/ShmMap.class.php:665 +msgid "What do with placemarks of deleting Map?" +msgstr "Что делать с Маркерами удаляемой Карты?" + +#: class/ShmMap.class.php:521 class/SMC_Post.php:496 +msgid "Double" +msgstr "Дублировать" + +#: class/ShmMap.class.php:450 +msgid "Personal email" +msgstr "Адрес электронной почты" + +#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 +#: class/ShmMap.class.php:471 +msgid "Required" +msgstr "Обязателен" + +#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 +#: class/ShmMap.class.php:461 +msgid "Include" +msgstr "Включать" + +#: class/ShmMap.class.php:426 +msgid "2.5. What data users will have to put?" +msgstr "2.5. Какие данные пользователи должны будут ставить?" + +#: class/ShmMap.class.php:418 +msgid "2.4. Can users leave their contact information?" +msgstr "2.4. Могут ли пользователи оставлять свою контактную информацию?" + +#: class/ShmMap.class.php:409 +msgid "You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;" +msgstr "Вы можете создавать собственные формы, используя элементы формы: «Строка текста», «Поле текста», «Загрузка файлов», «Категории Маркеров»" + +#: class/ShmMap.class.php:406 +msgid "2.3. What information can users enter?" +msgstr "2.3. Какую информацию могут вводить пользователи?" + +#: class/ShmMap.class.php:398 +msgid "2.2. Will I notify the author about new posts?" +msgstr "2.2. Оповещать ли автора Карты о новых сообщениях?" + +#: class/ShmMap.class.php:392 +msgid "For example «All beaches by the river»" +msgstr "Например «Все пляжи у реки»" + +#: class/ShmMap.class.php:388 +msgid "2.1. What is the name of your information form?" +msgstr "2.1. Как называется Ваша форма сбора информации?" + +#: class/ShmMap.class.php:383 +msgid "Enable crowdsourcing function (free add Users new Markers)" +msgstr "Включить функцию краудсорсинга (свободного добавления Пользователями новых Маркеров) " + +#: class/ShmMap.class.php:351 +msgid "Recommended size is 64х64 px, format is .png" +msgstr "Рекомендуемый размер: 64х64 pxб формат .png" + +#: class/ShmMap.class.php:346 +msgid "1.7. Default Marker icon" +msgstr "1.7. Иконка маркера по умолчанию" + +#: class/ShmMap.class.php:335 +msgid "1.6. Will Marker type filter be displayed?" +msgstr "1.6. Будет ли отображаться панель фильтрации по типам Маркеров?" + +#: class/ShmMap.class.php:324 +msgid "1.5. Will the legend be displayed?" +msgstr "1.5. Будет ли отображаться легенда?" + +#: class/ShmMap.class.php:313 +msgid "1.4. May User download data in *.csv?" +msgstr "1.4. Можно ли скачать данные карты в формате .csv?" + +#: class/ShmMap.class.php:299 +msgid "Choose layers" +msgstr "Выбор типа визуализации слоя" + +#: class/ShmMap.class.php:277 +msgid "Map zoom slider enabled" +msgstr "Ползунок масштаба" + +#: class/ShmMap.class.php:269 +msgid "1.3. Include interface" +msgstr "1.3. Какие элементы управления картой должны присутствовать?" + +#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 +msgid "Empty for " +msgstr "Оставьте пустым, чтобы было " + +#: class/ShmMap.class.php:249 +msgid "1.2. Set size for map's div (per pixels)" +msgstr "1.2. Установите размер окна карты (в пикселях)" + +#: class/ShmMap.class.php:237 +msgid "1.1. Pan map and choose zoom" +msgstr "1.1. Отцентрируйте карту и выберите масштаб" + +#: class/ShmMap.class.php:212 +msgid "Step 2. May anover Users add information for Map." +msgstr "Шаг 2. Смогут ли другие пользователи добавлять информацию на Вашу карту?" + +#: class/ShmMap.class.php:198 +msgid "You can insert a card into a post or page by copying this shortcode." +msgstr "Вы сможете вставить карту в запись или страницу скопировав этот шорткод" + +#: class/ShmMap.class.php:186 +msgid "Including Map to post" +msgstr "Вставка карты в звпись" + +#: class/ShmMap.class.php:162 +msgid "only request form" +msgstr "только Форма запроса" + +#: class/ShmMap.class.php:153 +msgid "only map" +msgstr "только карта" + +#: class/ShmMap.class.php:145 +msgid "include all (map and request form)" +msgstr "включено все(карта и Форма запроса)" + +#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 +msgid "Map markers" +msgstr "Маркеры" + +#: class/ShmMap.class.php:124 +msgid "shortcodes" +msgstr "шорткоды" + +#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 +msgid "ID" +msgstr "ID" + +#: class/ShmMap.class.php:80 +msgid "no found Map in trash" +msgstr "Карт в корзине не найдено" + +#: class/ShmMap.class.php:79 +msgid "Map not found" +msgstr "Карт не найдено" + +#: class/ShmMap.class.php:78 +msgid "search Map" +msgstr "искать Карту" + +#: class/ShmMap.class.php:77 +msgid "view Map" +msgstr "смотреть Карту" + +#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 +msgid "all Maps" +msgstr "Карты" + +#: class/ShmMap.class.php:74 +msgid "edit Map" +msgstr "редактировать Карту" + +#: class/ShmMap.class.php:65 +msgid "Step 1. Set up your map." +msgstr "Шаг 1. Настройте Вашу карту" + +#: class/ShMapPointType.class.php:358 +msgid "None" +msgstr "Никакой" + +#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 +msgid "Color" +msgstr "Цвет" + +#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 +#: class/ShMapPointType.class.php:197 +msgid "Icon" +msgstr "Иконка" + +#: class/ShMapPointType.class.php:86 +msgid "Name" +msgstr "Название" + +#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 +msgid "Map marker types" +msgstr "Типы маркеров" + +#: class/ShMapPointType.class.php:49 +msgid "Unique type of every Map markers" +msgstr "Уникальный тип каждого маркера карты" + +#: class/ShMapPointType.class.php:42 +msgid "new Map marker type name" +msgstr "название нового Типа маркеров" + +#: class/ShMapPointType.class.php:41 +msgid "add Map marker type" +msgstr "Добавить новый" + +#: class/ShMapPointType.class.php:40 +msgid "update Map marker type" +msgstr "обновить Тип маркера" + +#: class/ShMapPointType.class.php:39 +msgid "edit Map marker type" +msgstr "редактировать Тип маркера" + +#: class/ShMapPointType.class.php:38 +msgid "parent Map marker type:" +msgstr "Тип маркера родительской карты:" + +#: class/ShMapPointType.class.php:37 +msgid "parent Map marker type" +msgstr "родительский Тип маркера" + +#: class/ShMapPointType.class.php:36 +msgid "view Map marker type" +msgstr "смотреть Тип маркера" + +#: class/ShMapPointType.class.php:35 +msgid "all Map marker types" +msgstr "все Типы маркеров" + +#: class/ShMapPointType.class.php:34 +msgid "Search Map marker type" +msgstr "искать Тип маркера" + +#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 +#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 +msgid "Map marker type" +msgstr "Тип маркера" + +#: class/ShMapper.class.php:607 +msgid "Prevous step" +msgstr "Предыдущий шаг" + +#: class/ShMapper.class.php:602 class/ShMapper.class.php:608 +msgid "Go to current page" +msgstr "На текущую страницу" + +#: class/ShMapper.class.php:601 class/ShMapper.class.php:609 +msgid "Close wizzard" +msgstr "Закрыть навсегда" + +#: class/ShMapper.class.php:559 +msgid "Restart wizzard" +msgstr "Перезапустить Мастер" + +#: class/ShMapper.class.php:556 +msgid "Wizzard" +msgstr "Мастер" + +#: class/ShMapper.class.php:544 +msgid "Error send map request" +msgstr "Сообщение об ошибки регистрации запроса на Маркер" + +#: class/ShMapper.class.php:538 +msgid "Successful send map request" +msgstr "Сообщение об успешной регистрации запроса на Маркер" + +#: class/ShMapper.class.php:532 +msgid "Save personal data garantee" +msgstr "Гарантия сохранения персональных данных" + +#: class/ShMapper.class.php:528 +msgid "Vocabulary" +msgstr "Словарь" + +#: class/ShMapper.class.php:516 +msgid "Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha" +msgstr "Ваша Капча пока не работает. Для включения этой функции получите ключи API на google.com/recaptch" + +#: class/ShMapper.class.php:512 +msgid "What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s." +msgstr "Что такое Google reCAPTCHA? Как получить ключи для сайта? Смотрите %sэту инстукцию%s." + +#: class/ShMapper.class.php:503 +msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" +msgstr "Включать капчу в форме (плагин использует только ключи reCAPTCHA v2)" + +#: class/ShMapper.class.php:496 +msgid "Protection" +msgstr "Защита" + +#: class/ShMapper.class.php:484 +msgid "Reload page after User send request." +msgstr "Перегрузить страницу после того, как юзер отправил форму запроса" + +#: class/ShMapper.class.php:476 +msgid "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" +msgstr "ВНИМАНИЕ: отключить эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" + +#: class/ShMapper.class.php:472 +msgid "все сообщения будут добавляться в статусе «Черновик»" +msgstr "все сообщения будут добавляться в статусе «Черновик»" + +#: class/ShMapper.class.php:468 +msgid "Pre-modertion from Map owner." +msgstr "Премодерация со стороны владельца Карты." + +#: class/ShMapper.class.php:460 +msgid "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." +msgstr "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." + +#: class/ShMapper.class.php:456 +msgid "Включить глобальный режим неинтерактивных карт" +msgstr "Включить глобальный режим неинтерактивных карт" + +#: class/ShMapper.class.php:448 +msgid "Interactive" +msgstr "Интерактив" + +#: class/ShMapper.class.php:439 +msgid "Open Street Map" +msgstr "Open Street Map" + +#: class/ShMapper.class.php:433 +msgid "Yandex Map" +msgstr "Яндекс карты" + +#: class/ShMapper.class.php:426 +msgid "Map API" +msgstr "API карт" + +#: class/ShMapper.class.php:402 class/ShMapper.class.php:403 +#: class/ShMapper.class.php:417 +msgid "Settings" +msgstr "Настройки" + +#: class/ShMapper.class.php:276 assets/js/ShMapper.admin.js:155 +msgid "Are you shure?" +msgstr "Вы уверены?" + +#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 +msgid "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match" +msgstr "Ошибка: форма не связана с картой. Чтобы связать карту и форму, на одной странице должно быть 2 шорткода (карта - [shmMap id='6' map='true' uniq='например, 777'] и форма - [shmMap id='94' form='true' uniq='например, 777']), у которых параметр uniq будет совпадать" + +#: class/ShMapper.class.php:274 class/ShMapper.class.php:370 +#: assets/js/ShMapper.js:391 +msgid "Close" +msgstr "Закрыть" + +#: class/ShMapper.class.php:273 class/ShMapper.class.php:369 +msgid "Send" +msgstr "Послать" + +#: class/ShMapper.class.php:272 class/ShMapper.class.php:368 +#: assets/js/ShMapper.js:381 +msgid "Attantion" +msgstr "Внимание" + +#: class/ShMapper.class.php:178 +msgid "Accessed User" +msgstr "Доступ пользователя" + +#: class/ShMapper.class.php:177 +msgid "Aprove date" +msgstr "Утвержденная дата" + +#: class/ShMapper.class.php:176 +msgid "Aproved" +msgstr "Одобрен" + +#: class/ShMapper.class.php:175 +msgid "Contacts" +msgstr "Контакты" + +#: class/ShMapper.class.php:173 +msgid "Session" +msgstr "Сессия" + +#: class/ShMapper.class.php:172 class/ShmPoint.class.php:231 +#: class/ShmPoint.class.php:308 +msgid "Type" +msgstr "Тип" + +#: class/ShMapper.class.php:167 class/ShmMap.class.php:103 +#: class/ShmMap.class.php:596 class/SMC_Post.php:370 +#: class/ShmPoint.class.php:300 +msgid "Title" +msgstr "Название" + +#: class/ShMapper.class.php:166 class/ShmMap.class.php:70 +#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 +msgid "Map" +msgstr "Карта" + +#: class/ShMapper.class.php:160 +msgid "Required Personal phone" +msgstr "Требуется личный телефон" + +#: class/ShMapper.class.php:159 class/ShmMap.class.php:466 +msgid "Personal phone" +msgstr "Телефон" + +#: class/ShMapper.class.php:158 +msgid "Unclude Personal phone" +msgstr "Включить личный телефон" + +#: class/ShMapper.class.php:157 +msgid "Required Personal e-mail" +msgstr "Требуется личный e-mail" + +#: class/ShMapper.class.php:156 +msgid "Personal e-mail" +msgstr "Личный e-mail" + +#: class/ShMapper.class.php:155 +msgid "Unclude Personal e-mail" +msgstr "Включить личный телефон e-mail" + +#: class/ShMapper.class.php:154 +msgid "Required Personal name" +msgstr "Обязательно личное имя" + +#: class/ShMapper.class.php:153 class/ShmMap.class.php:434 +msgid "Personal name" +msgstr "Имя" + +#: class/ShMapper.class.php:152 +msgid "Unclude Personal name" +msgstr "Включить личное имя" + +#: class/ShMapper.class.php:151 class/ShmMap.class.php:421 +msgid "Users can leave their contact details for feedback." +msgstr "Пользователи могут оставлять свои контактные данные для обратной связи" + +#: class/ShMapper.class.php:150 +msgid "Form generator" +msgstr "Генератор форм" + +#: class/ShMapper.class.php:149 +msgid "Form Title" +msgstr "Заголовок Формы" + +#: class/ShMapper.class.php:148 class/ShmMap.class.php:122 +#: class/ShmMap.class.php:401 +msgid "Notify owner of Map" +msgstr "Присылать уведомления о новых картах автору" + +#: class/ShMapper.class.php:147 class/ShmMap.class.php:117 +msgid "Form exists" +msgstr "Форма присутствует" + +#: class/ShMapper.class.php:145 +msgid "Default Marker icon" +msgstr "Иконка маркера по умолчанию" + +#: class/ShMapper.class.php:144 class/ShmMap.class.php:291 +msgid "Formating Marker to cluster" +msgstr "Укладывать маркеры карты в кластеры" + +#: class/ShMapper.class.php:143 class/ShmMap.class.php:295 +msgid "Lock zoom and drag" +msgstr "Заблокировать перетаскивание карты и изменение размера средним колёсиком мышы" + +#: class/ShMapper.class.php:142 class/ShmMap.class.php:281 +msgid "Map layer switcher" +msgstr "Переключатель слоев карты" + +#: class/ShMapper.class.php:141 +msgid "Map zoom slider" +msgstr "Слайдер масштаба" + +#: class/ShMapper.class.php:140 class/ShmMap.class.php:287 +msgid "Map full screen" +msgstr "Полноэкранный режим" + +#: class/ShMapper.class.php:139 class/ShmMap.class.php:273 +msgid "Map search" +msgstr "Поиск по карте" + +#: class/ShMapper.class.php:138 class/ShMapPointType.class.php:125 +#: class/ShMapPointType.class.php:177 class/ShmMap.class.php:252 +#: widget/ShMap.widget.php:80 +msgid "Height" +msgstr "Высота" + +#: class/ShMapper.class.php:137 class/ShMapPointType.class.php:131 +#: class/ShMapPointType.class.php:187 class/ShmMap.class.php:257 +msgid "Width" +msgstr "Ширина" + +#: class/ShMapper.class.php:136 class/ShmMap.class.php:107 +#: class/ShmMap.class.php:316 +msgid "Export csv" +msgstr "Загрузка сводки в формате csv" + +#: class/ShMapper.class.php:135 class/ShmMap.class.php:338 +msgid "Filters exists" +msgstr "Панель фильтров присутствует" + +#: class/ShMapper.class.php:134 class/ShmMap.class.php:112 +#: class/ShmMap.class.php:327 +msgid "Legend exists" +msgstr "Легенда присутствует" + +#: class/ShMapper.class.php:126 class/ShMapper.class.php:133 +msgid "Zoom" +msgstr "Увеличение" + +#: class/ShMapper.class.php:93 +msgid "edit Maps in page" +msgstr "редактировать Карты на странице" + +#: class/ShMapper.class.php:87 +msgid "Maps" +msgstr "Карты" + +#: class/ShMapper.class.php:81 class/ShmMap.class.php:72 +#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 +msgid "add Map" +msgstr "Добавить новую" + +#: class/ShMapper.class.php:75 class/ShMapper.class.php:389 +#: class/ShMapper.class.php:390 +msgid "Shmapper" +msgstr "shMapper" + +#: class/ShMapper.class.php:27 +msgid "Unknown error." +msgstr "Неизвестная ошибка." + +#: class/ShMapper.class.php:26 +msgid "Your request has been successfully registered." +msgstr "Ваш запрос успешно зарегистрирован." + +#: class/ShMapper.class.php:25 +msgid "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +msgstr "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." + +#: class/ShmForm.class.php:574 +msgid "Your phone" +msgstr "Ваш номер телефона" + +#: class/ShmForm.class.php:564 +msgid "Your e-mail" +msgstr "Ваш e-mail" + +#: class/ShmForm.class.php:553 +msgid "Your name" +msgstr "Ваше имя" + +#: class/ShmForm.class.php:520 +msgid "Drag icon and place it to map." +msgstr "Перетащите иконку в нужное место Карты" + +#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 +#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 +#: class/ShmForm.class.php:578 +msgid "This required field" +msgstr "Обязательно для заполнения" + +#: class/ShmForm.class.php:436 +msgid "Сhoose files" +msgstr "Выберите файл" + +#: class/ShmForm.class.php:378 +msgid "The name of the parameter that refers to this element" +msgstr "Имя параметра, который ссылается на этот элемент" + +#: class/ShmForm.class.php:326 +msgid "enable" +msgstr "доступно" + +#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 +msgid "require" +msgstr "обязательно" + +#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 +msgid "Delete me" +msgstr "Удали меня" + +#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 +msgid "Add after" +msgstr "Добавить после" + +#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 +msgid "Add before" +msgstr "Добавить перед" + +#: class/ShmForm.class.php:231 +msgid "Element is required" +msgstr "Элемент обязателен к заполнению" + +#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 +#: class/ShmForm.class.php:374 +msgid "write description" +msgstr "напишите описание" + +#: class/ShmForm.class.php:223 class/ShmForm.class.php:295 +#: class/ShmForm.class.php:372 class/ShMapper.class.php:168 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 +msgid "Description" +msgstr "Описание" + +#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:361 +msgid "Placemark types" +msgstr "Типы маркеров" + +#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 +#: class/ShmForm.class.php:357 +msgid "write placeholder" +msgstr "напишите плейсхолдер" + +#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 +#: class/ShmForm.class.php:355 +msgid "Placeholder" +msgstr "Заполнитель" + +#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 +#: class/ShmForm.class.php:336 +msgid "write title" +msgstr "напишите заголовок" + +#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 +#: class/ShmForm.class.php:334 +msgid "Label of element" +msgstr "Лейбл элемента" + +#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 +#: class/ShmForm.class.php:340 +msgid "Type of element" +msgstr "Тип элемента" + +#: class/ShmForm.class.php:104 +msgid "enabled Map markers" +msgstr "доступные маркеры" + +#: class/ShmForm.class.php:98 +msgid "input file" +msgstr "загрузка картинки" + +#: class/ShmForm.class.php:92 +msgid "textarea" +msgstr "текстовый блок" + +#: class/ShmForm.class.php:62 +msgid "input text" +msgstr "текстовая строка" + +#: class/ShmForm.class.php:56 +msgid "input title" +msgstr "напишите заголовок" + +#: class/ShmForm.class.php:43 +msgid "Whrite description" +msgstr "Напишите комментарий" + +#: class/ShmForm.class.php:22 +msgid "Put a title" +msgstr "Укажите название" + +#: class/ShmForm.class.php:14 +msgid "Place the mark to Map" +msgstr "Укажите место" + +#: class/ShMapperRequest.class.php:360 +msgid "Trash" +msgstr "Корзина" + +#: class/ShMapperRequest.class.php:358 +msgid "Approve" +msgstr "Одобрить" + +#: class/ShMapperRequest.class.php:337 +msgid "You may see this %s" +msgstr "Вы можете посмотреть его здесь %s" + +#: class/ShMapperRequest.class.php:335 +msgid "<%s> Request to your Map from [%s] [%s]" +msgstr "<%s> Новый карт-запрос от [%s] [%s]" + +#: class/ShMapperRequest.class.php:327 +msgid "Uknown User" +msgstr "некто Имярек" + +#: class/ShMapperRequest.class.php:88 class/ShMapper.class.php:123 +#: class/ShMapper.class.php:171 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:250 +msgid "Location" +msgstr "Адрес" + +#: class/ShMapperRequest.class.php:86 class/ShMapper.class.php:125 +#: class/ShMapper.class.php:132 class/ShMapper.class.php:170 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 +msgid "Longitude" +msgstr "Долгота" + +#: class/ShMapperRequest.class.php:84 class/ShMapper.class.php:124 +#: class/ShMapper.class.php:131 class/ShMapper.class.php:169 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 +msgid "Latitude" +msgstr "Широта" + +#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 +msgid "GEO location" +msgstr "гео-позиция" + +#: class/ShMapperRequest.class.php:67 class/ShMapper.class.php:174 +#: class/ShmMap.class.php:126 +msgid "Author" +msgstr "Автор" + +#: class/ShMapperRequest.class.php:64 +msgid "Approving" +msgstr "Одобрение" + +#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 +msgid "Image" +msgstr "Изображение" + +#: class/ShMapperRequest.class.php:29 +msgid "no found Map Request in trash" +msgstr "Карт-запросы в корзине не найдены" + +#: class/ShMapperRequest.class.php:28 +msgid "Map Request not found" +msgstr "Запрос не найден" + +#: class/ShMapperRequest.class.php:27 +msgid "search Map Request" +msgstr "искать Карт-запрос" + +#: class/ShMapperRequest.class.php:26 +msgid "view Map Request" +msgstr "смотреть Карт-запрос" + +#: class/ShMapperRequest.class.php:25 class/ShMapperRequest.class.php:30 +#: class/ShMapper.class.php:112 +msgid "all Map Requests" +msgstr "Карт-запросы" + +#: class/ShMapperRequest.class.php:23 +msgid "edit Map Request" +msgstr "редактировать Карт-запрос" + +#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 +#: class/ShMapperRequest.class.php:24 +msgid "add Map Request" +msgstr "Добавить новый" + +#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 +msgid "Map Request" +msgstr "Карт-запрос" + +#: class/ShMapper_ajax.class.php:456 class/ShMapper_ajax.class.php:467 +msgid "Set key" +msgstr "Ключ установлен" + +#: class/ShMapper_ajax.class.php:396 +msgid "Change Vocabulaty: " +msgstr "Изменён словарь: " + +#: class/ShMapper_ajax.class.php:357 +msgid "Create" +msgstr "Создать" + +#: class/ShMapper_ajax.class.php:355 +msgid "add Map Point" +msgstr "Маркер добавлен" + +#: class/ShMapper_ajax.class.php:339 +msgid "Delete" +msgstr "Удалить" + +#: class/ShMapper_ajax.class.php:337 +msgid "Are you want delete %s?" +msgstr "Хотите удалить карту %s?" + +#: class/ShMapper_ajax.class.php:232 +msgid "Request put to Trash" +msgstr "Запрос отправлен в корзину" + +#: class/ShMapper_ajax.class.php:220 +msgid "Approve succesfully and insert new Map marker" +msgstr "Одобрено. Маркер создан" + +#: class/ShMapper_ajax.class.php:206 +msgid "Wizzard restarted" +msgstr "Мастер запущен сызнова" + +#: class/ShMapper_ajax.class.php:195 +msgid "Wizzard closed" +msgstr "Мастер закрыт" + +#: class/ShMapper_ajax.class.php:177 +msgid "Congratulation! That's all!" +msgstr "Поздравляем! Это всё." + +#: class/ShMapper_ajax.class.php:170 class/ShMapper.class.php:605 +msgid "Next step" +msgstr "Следующий шаг" + +#: shortcode/shmMap.shortcode.php:43 +msgid "Send request" +msgstr "Отправить информацию" + +#: shortcode/shmMap.shortcode.php:19 +msgid "No map on ID " +msgstr "Не указан ID карты" + +#. Author URI of the plugin +msgid "https://te-st.ru" +msgstr "https://te-st.ru" + +#. Author of the plugin +msgid "Teplitsa. Technologies for Social Good" +msgstr "Теплица социальных технологий" + +#. Description of the plugin +msgid "Location and logistics services for NKO" +msgstr "Картографирование на службе НКО" + +#. Plugin URI of the plugin +msgid "http://genagl.ru/?p=652" +msgstr "http://genagl.ru/?p=652" + +#. Plugin Name of the plugin +msgid "ShMapper by Teplitsa" +msgstr "ShMapper by Teplitsa" + +msgid "Yandex.Maps API key Saved" +msgstr "Ключ API Яндекс.Карт сохранен" + +msgid "Yandex.Maps API Key" +msgstr "Ключ API Яндекс.Карт" + +msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." +msgstr "ВНИМАНИЕ: необходимо указать ключ для работы с API Яндекс.Карт." + +msgid "Learn more here:" +msgstr "Подробнее здесь:" + +msgid "Yandex.Maps" +msgstr "Яндекс.Карты" \ No newline at end of file diff --git a/languages/shmapper-by-teplitsa.pot b/languages/shmapper-by-teplitsa.pot new file mode 100644 index 0000000..19ee0ab --- /dev/null +++ b/languages/shmapper-by-teplitsa.pot @@ -0,0 +1,1043 @@ +#, fuzzy +msgid "" +msgstr "" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +"Project-Id-Version: ShMapper by Teplitsa\n" +"POT-Creation-Date: 2020-06-22 07:31+0300\n" +"PO-Revision-Date: 2020-06-18 05:16+0300\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3.1\n" +"X-Poedit-Basepath: ..\n" +"X-Poedit-WPHeader: shmapper.php\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" +"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" +"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: *.js\n" + +#: class/SMC_Post.php:370 class/ShMapper.class.php:170 +#: class/ShmMap.class.php:103 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:300 +msgid "Title" +msgstr "" + +#: class/SMC_Post.php:496 class/ShmMap.class.php:521 +msgid "Double" +msgstr "" + +#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 +#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 +msgid "Usage in Maps: " +msgstr "" + +#: class/SMC_Post.php:560 +msgid "— No Change —" +msgstr "" + +#: class/SMC_Post.php:563 +msgid "No" +msgstr "" + +#: class/SMC_Post.php:566 +msgid "Yes" +msgstr "" + +#: class/SMC_Post.php:631 class/SMC_Post.php:636 +msgid "Parameters" +msgstr "" + +#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 +#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 +msgid "Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:34 +msgid "Search Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:35 +msgid "all Map marker types" +msgstr "" + +#: class/ShMapPointType.class.php:36 +msgid "view Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:37 +msgid "parent Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:38 +msgid "parent Map marker type:" +msgstr "" + +#: class/ShMapPointType.class.php:39 +msgid "edit Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:40 +msgid "update Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:41 +msgid "add Map marker type" +msgstr "" + +#: class/ShMapPointType.class.php:42 +msgid "new Map marker type name" +msgstr "" + +#: class/ShMapPointType.class.php:49 +msgid "Unique type of every Map markers" +msgstr "" + +#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 +msgid "Map marker types" +msgstr "" + +#: class/ShMapPointType.class.php:86 +msgid "Name" +msgstr "" + +#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 +#: class/ShMapPointType.class.php:197 +msgid "Icon" +msgstr "" + +#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 +msgid "Color" +msgstr "" + +#: class/ShMapPointType.class.php:125 class/ShMapPointType.class.php:177 +#: class/ShMapper.class.php:141 class/ShmMap.class.php:252 +#: widget/ShMap.widget.php:80 +msgid "Height" +msgstr "" + +#: class/ShMapPointType.class.php:131 class/ShMapPointType.class.php:187 +#: class/ShMapper.class.php:140 class/ShmMap.class.php:257 +msgid "Width" +msgstr "" + +#: class/ShMapPointType.class.php:358 +msgid "None" +msgstr "" + +#: class/ShMapper.class.php:26 +msgid "" +"Я даю свое согласие администратору сайта на обработку, в том числе " +"автоматизированную, своих персональных данных в соответствии с Федеральным " +"законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +msgstr "" + +#: class/ShMapper.class.php:27 +msgid "Your request has been successfully registered." +msgstr "" + +#: class/ShMapper.class.php:28 +msgid "Unknown error." +msgstr "" + +#: class/ShMapper.class.php:78 class/ShMapper.class.php:392 +#: class/ShMapper.class.php:393 +msgid "Shmapper" +msgstr "" + +#: class/ShMapper.class.php:84 class/ShmMap.class.php:72 +#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 +msgid "add Map" +msgstr "" + +#: class/ShMapper.class.php:90 +msgid "Maps" +msgstr "" + +#: class/ShMapper.class.php:96 +msgid "edit Maps in page" +msgstr "" + +#: class/ShMapper.class.php:115 class/ShMapperRequest.class.php:25 +#: class/ShMapperRequest.class.php:30 +msgid "all Map Requests" +msgstr "" + +#: class/ShMapper.class.php:126 class/ShMapper.class.php:174 +#: class/ShMapperRequest.class.php:88 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:250 +msgid "Location" +msgstr "" + +#: class/ShMapper.class.php:127 class/ShMapper.class.php:134 +#: class/ShMapper.class.php:172 class/ShMapperRequest.class.php:84 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 +msgid "Latitude" +msgstr "" + +#: class/ShMapper.class.php:128 class/ShMapper.class.php:135 +#: class/ShMapper.class.php:173 class/ShMapperRequest.class.php:86 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 +msgid "Longitude" +msgstr "" + +#: class/ShMapper.class.php:129 class/ShMapper.class.php:136 +msgid "Zoom" +msgstr "" + +#: class/ShMapper.class.php:137 class/ShmMap.class.php:112 +#: class/ShmMap.class.php:327 +msgid "Legend exists" +msgstr "" + +#: class/ShMapper.class.php:138 class/ShmMap.class.php:338 +msgid "Filters exists" +msgstr "" + +#: class/ShMapper.class.php:139 class/ShmMap.class.php:107 +#: class/ShmMap.class.php:316 +msgid "Export csv" +msgstr "" + +#: class/ShMapper.class.php:142 class/ShmMap.class.php:273 +msgid "Map search" +msgstr "" + +#: class/ShMapper.class.php:143 class/ShmMap.class.php:287 +msgid "Map full screen" +msgstr "" + +#: class/ShMapper.class.php:144 +msgid "Map zoom slider" +msgstr "" + +#: class/ShMapper.class.php:145 class/ShmMap.class.php:281 +msgid "Map layer switcher" +msgstr "" + +#: class/ShMapper.class.php:146 class/ShmMap.class.php:295 +msgid "Lock zoom and drag" +msgstr "" + +#: class/ShMapper.class.php:147 class/ShmMap.class.php:291 +msgid "Formating Marker to cluster" +msgstr "" + +#: class/ShMapper.class.php:148 +msgid "Default Marker icon" +msgstr "" + +#: class/ShMapper.class.php:150 class/ShmMap.class.php:117 +msgid "Form exists" +msgstr "" + +#: class/ShMapper.class.php:151 class/ShmMap.class.php:122 +#: class/ShmMap.class.php:401 +msgid "Notify owner of Map" +msgstr "" + +#: class/ShMapper.class.php:152 +msgid "Form Title" +msgstr "" + +#: class/ShMapper.class.php:153 +msgid "Form generator" +msgstr "" + +#: class/ShMapper.class.php:154 class/ShmMap.class.php:421 +msgid "Users can leave their contact details for feedback." +msgstr "" + +#: class/ShMapper.class.php:155 +msgid "Unclude Personal name" +msgstr "" + +#: class/ShMapper.class.php:156 class/ShmMap.class.php:434 +msgid "Personal name" +msgstr "" + +#: class/ShMapper.class.php:157 +msgid "Required Personal name" +msgstr "" + +#: class/ShMapper.class.php:158 +msgid "Unclude Personal e-mail" +msgstr "" + +#: class/ShMapper.class.php:159 +msgid "Personal e-mail" +msgstr "" + +#: class/ShMapper.class.php:160 +msgid "Required Personal e-mail" +msgstr "" + +#: class/ShMapper.class.php:161 +msgid "Unclude Personal phone" +msgstr "" + +#: class/ShMapper.class.php:162 class/ShmMap.class.php:466 +msgid "Personal phone" +msgstr "" + +#: class/ShMapper.class.php:163 +msgid "Required Personal phone" +msgstr "" + +#: class/ShMapper.class.php:169 class/ShmMap.class.php:70 +#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 +msgid "Map" +msgstr "" + +#: class/ShMapper.class.php:171 class/ShmForm.class.php:223 +#: class/ShmForm.class.php:295 class/ShmForm.class.php:372 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 +msgid "Description" +msgstr "" + +#: class/ShMapper.class.php:175 class/ShmPoint.class.php:231 +#: class/ShmPoint.class.php:308 +msgid "Type" +msgstr "" + +#: class/ShMapper.class.php:176 +msgid "Session" +msgstr "" + +#: class/ShMapper.class.php:177 class/ShMapperRequest.class.php:67 +#: class/ShmMap.class.php:126 +msgid "Author" +msgstr "" + +#: class/ShMapper.class.php:178 +msgid "Contacts" +msgstr "" + +#: class/ShMapper.class.php:179 +msgid "Aproved" +msgstr "" + +#: class/ShMapper.class.php:180 +msgid "Aprove date" +msgstr "" + +#: class/ShMapper.class.php:181 +msgid "Accessed User" +msgstr "" + +#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 +msgid "Attantion" +msgstr "" + +#: class/ShMapper.class.php:276 class/ShMapper.class.php:372 +msgid "Send" +msgstr "" + +#: class/ShMapper.class.php:277 class/ShMapper.class.php:373 +msgid "Close" +msgstr "" + +#: class/ShMapper.class.php:278 class/ShMapper.class.php:374 +msgid "" +"Error: the form is not associated with the card. To link a map and a form, " +"there should be 2 shortcodes on one page (map - [shmMap id = '6' map = " +"'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' " +"uniq = 'for example, 777']), in which the uniq parameter will match" +msgstr "" + +#: class/ShMapper.class.php:279 +msgid "Are you shure?" +msgstr "" + +#: class/ShMapper.class.php:405 class/ShMapper.class.php:406 +#: class/ShMapper.class.php:420 +msgid "Settings" +msgstr "" + +#: class/ShMapper.class.php:429 +msgid "Map API" +msgstr "" + +#: class/ShMapper.class.php:436 +msgid "Yandex.Maps" +msgstr "" + +#: class/ShMapper.class.php:442 +msgid "OpenStreetMap" +msgstr "" + +#: class/ShMapper.class.php:450 +msgid "Yandex.Maps API Key" +msgstr "" + +#: class/ShMapper.class.php:452 +msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." +msgstr "" + +#: class/ShMapper.class.php:452 +msgid "Learn more here:" +msgstr "" + +#: class/ShMapper.class.php:463 +msgid "Interactive" +msgstr "" + +#: class/ShMapper.class.php:471 +msgid "Включить глобальный режим неинтерактивных карт" +msgstr "" + +#: class/ShMapper.class.php:475 +msgid "" +"пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " +"включена у карт даже не появляется блок интерактивности." +msgstr "" + +#: class/ShMapper.class.php:483 +msgid "Pre-modertion from Map owner." +msgstr "" + +#: class/ShMapper.class.php:487 +msgid "все сообщения будут добавляться в статусе «Черновик»" +msgstr "" + +#: class/ShMapper.class.php:491 +msgid "" +"ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует " +"угроза спам-атаки" +msgstr "" + +#: class/ShMapper.class.php:499 +msgid "Reload page after User send request." +msgstr "" + +#: class/ShMapper.class.php:511 +msgid "Protection" +msgstr "" + +#: class/ShMapper.class.php:518 +msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" +msgstr "" + +#: class/ShMapper.class.php:527 +#, php-format +msgid "" +"What is Google reCAPTCHA? How recived keys for your site? See %sthis " +"instruction%s." +msgstr "" + +#: class/ShMapper.class.php:531 +msgid "" +"Your reCAPTCHA doesn't work yet. In order to make it work, please get the " +"API keys at google.com/recaptcha" +msgstr "" + +#: class/ShMapper.class.php:543 +msgid "Vocabulary" +msgstr "" + +#: class/ShMapper.class.php:547 +msgid "Save personal data garantee" +msgstr "" + +#: class/ShMapper.class.php:553 +msgid "Successful send map request" +msgstr "" + +#: class/ShMapper.class.php:559 +msgid "Error send map request" +msgstr "" + +#: class/ShMapper.class.php:571 +msgid "Wizzard" +msgstr "" + +#: class/ShMapper.class.php:574 +msgid "Restart wizzard" +msgstr "" + +#: class/ShMapper.class.php:616 class/ShMapper.class.php:624 +msgid "Close wizzard" +msgstr "" + +#: class/ShMapper.class.php:617 class/ShMapper.class.php:623 +msgid "Go to current page" +msgstr "" + +#: class/ShMapper.class.php:620 class/ShMapper_ajax.class.php:170 +msgid "Next step" +msgstr "" + +#: class/ShMapper.class.php:622 +msgid "Prevous step" +msgstr "" + +#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 +msgid "Map Request" +msgstr "" + +#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 +#: class/ShMapperRequest.class.php:24 +msgid "add Map Request" +msgstr "" + +#: class/ShMapperRequest.class.php:23 +msgid "edit Map Request" +msgstr "" + +#: class/ShMapperRequest.class.php:26 +msgid "view Map Request" +msgstr "" + +#: class/ShMapperRequest.class.php:27 +msgid "search Map Request" +msgstr "" + +#: class/ShMapperRequest.class.php:28 +msgid "Map Request not found" +msgstr "" + +#: class/ShMapperRequest.class.php:29 +msgid "no found Map Request in trash" +msgstr "" + +#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 +msgid "Image" +msgstr "" + +#: class/ShMapperRequest.class.php:64 +msgid "Approving" +msgstr "" + +#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 +msgid "GEO location" +msgstr "" + +#: class/ShMapperRequest.class.php:327 +msgid "Uknown User" +msgstr "" + +#: class/ShMapperRequest.class.php:335 +#, php-format +msgid "<%s> Request to your Map from [%s] [%s]" +msgstr "" + +#: class/ShMapperRequest.class.php:337 +#, php-format +msgid "You may see this %s" +msgstr "" + +#: class/ShMapperRequest.class.php:358 +msgid "Approve" +msgstr "" + +#: class/ShMapperRequest.class.php:360 +msgid "Trash" +msgstr "" + +#: class/ShMapper_Assistants.class.php:44 +msgid "all maps" +msgstr "" + +#: class/ShMapper_Assistants.class.php:90 +msgid "Your requests to this Map " +msgstr "" + +#: class/ShMapper_ajax.class.php:177 +msgid "Congratulation! That's all!" +msgstr "" + +#: class/ShMapper_ajax.class.php:195 +msgid "Wizzard closed" +msgstr "" + +#: class/ShMapper_ajax.class.php:206 +msgid "Wizzard restarted" +msgstr "" + +#: class/ShMapper_ajax.class.php:220 +msgid "Approve succesfully and insert new Map marker" +msgstr "" + +#: class/ShMapper_ajax.class.php:232 +msgid "Request put to Trash" +msgstr "" + +#: class/ShMapper_ajax.class.php:337 +#, php-format +msgid "Are you want delete %s?" +msgstr "" + +#: class/ShMapper_ajax.class.php:339 +msgid "Delete" +msgstr "" + +#: class/ShMapper_ajax.class.php:355 +msgid "add Map Point" +msgstr "" + +#: class/ShMapper_ajax.class.php:357 +msgid "Create" +msgstr "" + +#: class/ShMapper_ajax.class.php:396 +msgid "Change Vocabulaty: " +msgstr "" + +#: class/ShMapper_ajax.class.php:416 +msgid "Yandex.Maps API key Saved" +msgstr "" + +#: class/ShMapper_ajax.class.php:427 +msgid "Users can add Placemarks" +msgstr "" + +#: class/ShMapper_ajax.class.php:437 +msgid "Pre-moderation on" +msgstr "" + +#: class/ShMapper_ajax.class.php:447 +msgid "Reload mode" +msgstr "" + +#: class/ShMapper_ajax.class.php:457 +msgid "captha added" +msgstr "" + +#: class/ShMapper_ajax.class.php:467 class/ShMapper_ajax.class.php:478 +msgid "Set key" +msgstr "" + +#: class/ShmAdminPage.class.php:27 +msgid "shMapper developers chat" +msgstr "" + +#: class/ShmForm.class.php:14 +msgid "Place the mark to Map" +msgstr "" + +#: class/ShmForm.class.php:22 +msgid "Put a title" +msgstr "" + +#: class/ShmForm.class.php:43 +msgid "Whrite description" +msgstr "" + +#: class/ShmForm.class.php:56 +msgid "input title" +msgstr "" + +#: class/ShmForm.class.php:62 +msgid "input text" +msgstr "" + +#: class/ShmForm.class.php:92 +msgid "textarea" +msgstr "" + +#: class/ShmForm.class.php:98 +msgid "input file" +msgstr "" + +#: class/ShmForm.class.php:104 +msgid "enabled Map markers" +msgstr "" + +#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 +#: class/ShmForm.class.php:340 +msgid "Type of element" +msgstr "" + +#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 +#: class/ShmForm.class.php:334 +msgid "Label of element" +msgstr "" + +#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 +#: class/ShmForm.class.php:336 +msgid "write title" +msgstr "" + +#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 +#: class/ShmForm.class.php:355 +msgid "Placeholder" +msgstr "" + +#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 +#: class/ShmForm.class.php:357 +msgid "write placeholder" +msgstr "" + +#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:361 +msgid "Placemark types" +msgstr "" + +#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 +#: class/ShmForm.class.php:374 +msgid "write description" +msgstr "" + +#: class/ShmForm.class.php:231 +msgid "Element is required" +msgstr "" + +#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 +msgid "Add before" +msgstr "" + +#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 +msgid "Add after" +msgstr "" + +#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 +msgid "Delete me" +msgstr "" + +#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 +msgid "require" +msgstr "" + +#: class/ShmForm.class.php:326 +msgid "enable" +msgstr "" + +#: class/ShmForm.class.php:378 +msgid "The name of the parameter that refers to this element" +msgstr "" + +#: class/ShmForm.class.php:436 +msgid "Сhoose files" +msgstr "" + +#: class/ShmForm.class.php:497 +msgid "" +"Drag choosed icon and place it to map or click it and enter exact address." +msgstr "" + +#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 +#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 +#: class/ShmForm.class.php:578 +msgid "This required field" +msgstr "" + +#: class/ShmForm.class.php:520 +msgid "Drag icon and place it to map." +msgstr "" + +#: class/ShmForm.class.php:553 +msgid "Your name" +msgstr "" + +#: class/ShmForm.class.php:564 +msgid "Your e-mail" +msgstr "" + +#: class/ShmForm.class.php:574 +msgid "Your phone" +msgstr "" + +#: class/ShmMap.class.php:65 +msgid "Step 1. Set up your map." +msgstr "" + +#: class/ShmMap.class.php:74 +msgid "edit Map" +msgstr "" + +#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 +msgid "all Maps" +msgstr "" + +#: class/ShmMap.class.php:77 +msgid "view Map" +msgstr "" + +#: class/ShmMap.class.php:78 +msgid "search Map" +msgstr "" + +#: class/ShmMap.class.php:79 +msgid "Map not found" +msgstr "" + +#: class/ShmMap.class.php:80 +msgid "no found Map in trash" +msgstr "" + +#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 +msgid "ID" +msgstr "" + +#: class/ShmMap.class.php:124 +msgid "shortcodes" +msgstr "" + +#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 +msgid "Map markers" +msgstr "" + +#: class/ShmMap.class.php:145 +msgid "include all (map and request form)" +msgstr "" + +#: class/ShmMap.class.php:153 +msgid "only map" +msgstr "" + +#: class/ShmMap.class.php:162 +msgid "only request form" +msgstr "" + +#: class/ShmMap.class.php:186 +msgid "Including Map to post" +msgstr "" + +#: class/ShmMap.class.php:198 +msgid "You can insert a card into a post or page by copying this shortcode." +msgstr "" + +#: class/ShmMap.class.php:212 +msgid "Step 2. May anover Users add information for Map." +msgstr "" + +#: class/ShmMap.class.php:237 +msgid "1.1. Pan map and choose zoom" +msgstr "" + +#: class/ShmMap.class.php:249 +msgid "1.2. Set size for map's div (per pixels)" +msgstr "" + +#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 +msgid "Empty for " +msgstr "" + +#: class/ShmMap.class.php:269 +msgid "1.3. Include interface" +msgstr "" + +#: class/ShmMap.class.php:277 +msgid "Map zoom slider enabled" +msgstr "" + +#: class/ShmMap.class.php:299 +msgid "Choose layers" +msgstr "" + +#: class/ShmMap.class.php:313 +msgid "1.4. May User download data in *.csv?" +msgstr "" + +#: class/ShmMap.class.php:324 +msgid "1.5. Will the legend be displayed?" +msgstr "" + +#: class/ShmMap.class.php:335 +msgid "1.6. Will Marker type filter be displayed?" +msgstr "" + +#: class/ShmMap.class.php:346 +msgid "1.7. Default Marker icon" +msgstr "" + +#: class/ShmMap.class.php:351 +msgid "Recommended size is 64х64 px, format is .png" +msgstr "" + +#: class/ShmMap.class.php:383 +msgid "Enable crowdsourcing function (free add Users new Markers)" +msgstr "" + +#: class/ShmMap.class.php:388 +msgid "2.1. What is the name of your information form?" +msgstr "" + +#: class/ShmMap.class.php:392 +msgid "For example «All beaches by the river»" +msgstr "" + +#: class/ShmMap.class.php:398 +msgid "2.2. Will I notify the author about new posts?" +msgstr "" + +#: class/ShmMap.class.php:406 +msgid "2.3. What information can users enter?" +msgstr "" + +#: class/ShmMap.class.php:409 +msgid "" +"You can create your own forms using form elements: & laquo; Text line & " +"raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & " +"laquo; Categories of Markers & raquo;" +msgstr "" + +#: class/ShmMap.class.php:418 +msgid "2.4. Can users leave their contact information?" +msgstr "" + +#: class/ShmMap.class.php:426 +msgid "2.5. What data users will have to put?" +msgstr "" + +#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 +#: class/ShmMap.class.php:461 +msgid "Include" +msgstr "" + +#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 +#: class/ShmMap.class.php:471 +msgid "Required" +msgstr "" + +#: class/ShmMap.class.php:450 +msgid "Personal email" +msgstr "" + +#: class/ShmMap.class.php:665 +msgid "What do with placemarks of deleting Map?" +msgstr "" + +#: class/ShmMap.class.php:670 +msgid "Delete all Points" +msgstr "" + +#: class/ShmMap.class.php:676 +msgid "Escape all Points without Owner Map" +msgstr "" + +#: class/ShmMap.class.php:682 +msgid "Switch all Points to anover Map" +msgstr "" + +#: class/ShmMap.class.php:768 +#, php-format +msgid "Succesfuly delete map width %s points" +msgstr "" + +#: class/ShmMap.class.php:773 +#, php-format +msgid "Succesfuly delete map and %s points are orphans now" +msgstr "" + +#: class/ShmMap.class.php:780 +#, php-format +msgid "Succesfuly delete map and %s points migrates to %s" +msgstr "" + +#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 +msgid "Map marker" +msgstr "" + +#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 +#: class/ShmPoint.class.php:28 +msgid "add Map marker" +msgstr "" + +#: class/ShmPoint.class.php:27 +msgid "edit Map marker" +msgstr "" + +#: class/ShmPoint.class.php:29 +msgid "all Map markers" +msgstr "" + +#: class/ShmPoint.class.php:30 +msgid "view Map marker" +msgstr "" + +#: class/ShmPoint.class.php:31 +msgid "search Map marker" +msgstr "" + +#: class/ShmPoint.class.php:32 +msgid "Map marker not found" +msgstr "" + +#: class/ShmPoint.class.php:33 +msgid "no found Map marker in trash" +msgstr "" + +#: class/ShmPoint.class.php:158 +msgid "Map owner" +msgstr "" + +#: class/ShmPoint.class.php:312 +msgid "Address" +msgstr "" + +#: shortcode/shmMap.shortcode.php:19 +msgid "No map on ID " +msgstr "" + +#: shortcode/shmMap.shortcode.php:43 +msgid "Send request" +msgstr "" + +#: tpl/input_file_form.php:64 +msgid "Upload Image" +msgstr "" + +#: tpl/input_file_form.php:66 +msgid "File" +msgstr "" + +#: tpl/input_file_form.php:72 +msgid "Browse" +msgstr "" + +#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 +msgid "Remove" +msgstr "" + +#: tpl/input_file_form.php:77 +msgid "Insert" +msgstr "" + +#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 +msgid "Submit" +msgstr "" + +#: tpl/shmMap.php:83 +#, php-format +msgid "download %s.csv" +msgstr "" + +#: widget/ShMap.widget.php:9 +msgid "Shmapper Locations" +msgstr "" + +#: widget/ShMap.widget.php:16 +msgid "Ermak Locations" +msgstr "" + +#: widget/ShMap.widget.php:17 +msgid "Player Cabinet" +msgstr "" + +#: widget/ShMap.widget.php:64 +msgid "Tite" +msgstr "" + +#. Plugin Name of the plugin/theme +msgid "ShMapper by Teplitsa" +msgstr "" + +#. Plugin URI of the plugin/theme +msgid "http://genagl.ru/?p=652" +msgstr "" + +#. Description of the plugin/theme +msgid "Location and logistics services for NKO" +msgstr "" + +#. Author of the plugin/theme +msgid "Teplitsa. Technologies for Social Good" +msgstr "" + +#. Author URI of the plugin/theme +msgid "https://te-st.ru" +msgstr "" diff --git a/shmapper.php b/shmapper.php new file mode 100644 index 0000000..ac651b0 --- /dev/null +++ b/shmapper.php @@ -0,0 +1,126 @@ + + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/** Load textdomain */ +function init_textdomain_shmapper() { + if ( function_exists('load_textdomain') ) { + load_textdomain( 'shmapper-by-teplitsa', WP_PLUGIN_DIR . '/' . dirname( plugin_basename( __FILE__ ) ) . '/languages/shmapper-by-teplitsa-' . get_locale() . '.mo' ); + } + + if ( function_exists( 'load_plugin_textdomain' ) ) { + load_plugin_textdomain( 'shmapper-by-teplitsa', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); + } +} +add_action('plugins_loaded', 'init_textdomain_shmapper'); + +// Paths. +define( 'SHM_URLPATH', WP_PLUGIN_URL . '/' . plugin_basename( dirname(__FILE__) ) . '/' ); +define( 'SHM_REAL_PATH', WP_PLUGIN_DIR . '/' . plugin_basename(dirname(__FILE__) ) . '/' ); +define( 'SHMAPPER', 'shmapper-by-teplitsa' ); +define( 'SHM_MAP', 'shm_map' ); +define( 'SHM_POINT', 'shm_point' ); +define( 'SHM_POINT_TYPE', 'shm_point_type' ); +define( 'SHM_REQUEST', 'shm_request' ); +define( 'SHMAPPER_PLAIN_TEXT_TYPE_ID', 1 ); +define( 'SHMAPPER_NAME_TYPE_ID', 2 ); +define( 'SHMAPPER_PLAIN_NUMBER_TYPE_ID', 3 ); +define( 'SHMAPPER_EMAIL_TYPE_ID', 4 ); +define( 'SHMAPPER_PHONE_TYPE_ID', 5 ); +define( 'SHMAPPER_TEXTAREA_TYPE_ID', 6 ); +define( 'SHMAPPER_IMAGE_TYPE_ID', 7 ); +define( 'SHMAPPER_MARK_TYPE_ID', 8 ); +define( 'SHMAPPER_TITLE_TYPE_ID', 9 ); +define( 'SHM_CSV_STROKE_SEPARATOR', ';' ); +define( 'SHM_CSV_ROW_SEPARATOR', ' +'); +define('SHMAPPER_VERSION', '1.3.3' ); + +require_once SHM_REAL_PATH . 'class/ShMapper.class.php'; +require_once SHM_REAL_PATH . 'class/ShMapper_ajax.class.php'; +if ( ! class_exists( 'SMC_Post' ) ) { + require_once SHM_REAL_PATH . 'class/SMC_Post.php'; +} +if ( ! class_exists( 'SMC_Object_type' ) ) { + require_once SHM_REAL_PATH . 'class/SMC_Object_type.php'; +} +require_once SHM_REAL_PATH . 'class/ShmMap.class.php'; +require_once SHM_REAL_PATH . 'class/ShMapPointType.class.php'; +require_once SHM_REAL_PATH . 'class/ShmPoint.class.php'; +require_once SHM_REAL_PATH . 'class/ShMapperRequest.class.php'; +require_once SHM_REAL_PATH . 'class/ShmForm.class.php'; +require_once SHM_REAL_PATH . 'class/ShMapper_Assistants.class.php'; +require_once SHM_REAL_PATH . 'class/ShmAdminPage.class.php'; +require_once SHM_REAL_PATH . 'shortcode/shm_shortcodes.php'; +require_once SHM_REAL_PATH . 'widget/ShMap.widget.php'; + +register_activation_hook( __FILE__, array( 'ShMapper', 'activate' ) ); + +if ( function_exists( 'register_deactivation_hook' ) ) { + register_deactivation_hook(__FILE__, array( 'ShMapper', 'deactivate' ) ); +} + +/** Shamapper init */ +function init_shmapper() { + ShMapper::get_instance(); + ShMapper_Assistants::get_instance(); + ShMapper_ajax::get_instance(); + ShmMap::init(); + ShMapperRequest::init(); + ShMapPointType::init(); + ShmPoint::init(); + ShmForm::init(); +} +add_action( 'init', 'init_shmapper', 1 ); + +/** Is session */ +function shm_is_session() { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + return is_plugin_active( 'wp-session-manager/wp-session-manager.php' ); +} + +/** + * Disable Gugenberg + * @param bool $current_status Current gutenberg status. Default true. + * @param string $post_type The post type being checked. + */ +function shmapper_disable_gutenberg( $current_status, $post_type ) { + if ( in_array( $post_type, array( SHM_POINT ), true ) ) { + return false; + } + return $current_status; +} +add_filter( 'use_block_editor_for_post_type', 'shmapper_disable_gutenberg', 10, 2); diff --git a/shortcode/shmMap.shortcode.php b/shortcode/shmMap.shortcode.php new file mode 100644 index 0000000..cafe36f --- /dev/null +++ b/shortcode/shmMap.shortcode.php @@ -0,0 +1,51 @@ + 450, + "id" => -1, + "map" => false, + "form" => false, + "uniq" => false + ), $args, 'shmMap' ); + + $id = $args['id']; + $args['uniq'] = $args['uniq'] ? $args['uniq'] : substr( MD5(rand(0, 100000000)), 0, 8 ); + $uniq = $args['uniq']; + $map = ShmMap::get_instance($args['id']); + if(!$map->is_enabled() || $map->get("post_type") !== SHM_MAP) + { + return __("No map on ID ", SHMAPPER) . $args['id']; + } + $map_enb = $args["map"] || ( !$args["map"] && !$args["form"]) ? 1 : 0; + $form_enb = $args["form"] || ( !$args["map"] && !$args["form"]) ? 1 : 0; + $html = "
    " . $map->get("post_title") . "
    "; + if($map_enb) + { + $html .= $map->draw($args); + } + if( $form_enb && $map->get_meta("is_form") && !ShMapper::$options['shm_map_is_crowdsourced']) + { + $form_title = $map->get_meta("form_title"); + $form_forms = $map->get_meta("form_forms"); + $html .= " +
    +
    +
    +
    + $form_title +
    +
    ". + ShmForm::form( $form_forms, $map ). + "
    +
    + +
    +
    +
    +
    "; + } + + return $html; +} \ No newline at end of file diff --git a/shortcode/shm_shortcodes.php b/shortcode/shm_shortcodes.php new file mode 100644 index 0000000..ebc5725 --- /dev/null +++ b/shortcode/shm_shortcodes.php @@ -0,0 +1,6 @@ +
    +
    +
    +
    +
    +
    + + + + + + +
    Browse + + +
    + +
    + + +
    + + +
    Or drag and drop files here
    +
    + +
    +
    10% Complete
    +
    +
    + +
    +
    +
    +
    + '; +} + +function get_input_file_form2($image_input_name = "image-file", $media_id='-1', $prefix='user_ava', $id='') +{ + return " +
    +
    ". + _get_media($media_id, 68). + "
    +
    +
    + +
    + "; +} + + + +function get_input_file_form3($image_input_name = "image-file") +{ + return ' + +
    +
    +

    ' . __("Upload Image", FRMRU) . '

    +
    + + +
    +
    +
    + + + +
    +
    +
    + +
    + +
    +
    + + + +
    +
    +
    + +
    +
    +
    '; +} + +function _get_media($media_id, $size=300) +{ + $src = $size == "full" ? wp_get_attachment_image_src($media_id, $size): wp_get_attachment_image_src($media_id, array($size, $size)); + if($src) + { + return ""; + } + else + { + return ""; + } +} +function _get_default() +{ + return SHM_URLPATH."assets/img/empty.png"; +} + +function recurse_copy($src, $dst) +{ + $dir = opendir($src); + @mkdir($dst); + while(false !== ( $file = readdir($dir)) ) { + if (( $file != '.' ) && ( $file != '..' )) { + if ( is_dir($src . '/' . $file) ) { + recurse_copy($src . '/' . $file, $dst . '/' . $file); + } + else { + copy($src . '/' . $file, $dst . '/' . $file); + } + } + } + closedir($dir); +} \ No newline at end of file diff --git a/tpl/shmMap.php b/tpl/shmMap.php new file mode 100644 index 0000000..6b99921 --- /dev/null +++ b/tpl/shmMap.php @@ -0,0 +1,181 @@ +id); + + $html = ""; + $legend = ""; + + $mapType = $map->get_meta("map_type"); + $mapType = $mapType && ShMapper::$options['map_api'] == array_keys($mapType)[0] + ? $mapType + : ShmMap::get_map_types(); + $mapType = $mapType[ ShMapper::$options['map_api'] ][0]; + $id = $map->id; + $muniq = isset($args['uniq']) ? $args['uniq'] : $id; + $uniq = "ShmMap$id$muniq"; + $title = $map->get("post_title"); + $height = isset($args['height']) ? $args['height'] : $map->get("height"); + $width = $map->get_meta("width"); + $width = $width ? $width."px" : "100%"; + $latitude = $map->get_meta("latitude"); + $longitude = $map->get_meta("longitude"); + $is_lock = $map->get_meta("is_lock"); + $is_layer_switcher = $map->get_meta("is_layer_switcher"); + $is_zoomer = $map->get_meta("is_zoomer"); + $is_search = $map->get_meta("is_search"); + $is_clustered= $map->get_meta("is_clustered"); + $is_legend = $map->get_meta("is_legend"); + $is_filtered = $map->get_meta("is_filtered"); + $is_fullscreen = $map->get_meta("is_fullscreen"); + $zoom = $map->get_meta("zoom"); + $latitude = $latitude ? $latitude : 55; + $longitude = $longitude ? $longitude : 55; + $zoom = $zoom ? $zoom : 4; + $leg = ""; + if( $is_legend ) + { + $include = $map->get_include_types(); + if(is_array($include) && count($include)) + { + foreach($include as $term_id) + { + if( !$term_id ) { + continue; + } + + $term = get_term($term_id); + if( !is_wp_error($term) ) { // echo '
    HERE: '.print_r($include, 1).'
    '; + + $color = get_term_meta($term_id, "color", true); + $leg .= "
    " . $term->name . ""; + + } + + } + $legend = " +
    + $leg +
    "; + }; + } + if( $is_filtered ) + { + $includes = $map->get_include_types(); + $filters = ShMapPointType::get_ganre_swicher([ + 'prefix' => 'filtered'.$uniq, + 'row_style' => "float:right;margin-left: 5px;margin-right: 0px;", + "selected" => ShMapPointType::get_all_ids(), + "includes" => $includes, + "col_width" => 2 + ], "checkbox", "stroke" ); + } else { + $filters = ''; + } + + $is_csv = $map->get_meta("is_csv"); + $csv = ""; + + if($is_csv) { + $csv = ""; + } + + $points = $map->get_map_points(); + if($is_filtered || $is_csv) + { + $html .=" +
    + $filters $csv +
    "; + } + $html .= " +
    +
    $legend "; + $p = ""; + $str = [" +"," + +"]; + +//line javascript + foreach($points as $point) + { + $p .= " + var p = {}; + p.post_id = '" . $point->ID . "'; + p.post_title = '" . $point->post_title . "'; + p.post_content = '
    " . html_entity_decode( esc_js($point->post_content) ) . "
    ID) . "\" class=\"shm-no-uline\">
    " . esc_js($point->location) . "
    '; + p.latitude = '" . $point->latitude . "'; + p.longitude = '" . $point->longitude . "'; + p.location = '" . esc_js($point->location) . "'; + p.type = '" . $point->type . "'; + p.term_id = '" . $point->term_id . "'; + p.icon = '" . $point->icon . "'; + p.color = '" . $point->color . "'; + p.height = " . $point->height . "; + p.width = " . $point->width . "; + points.push(p); + "; + } + $desabled = $is_lock ? " + myMap.behaviors.disable('scrollZoom'); + myMap.behaviors.disable('drag'); + " : ""; + $is_admin = ""; + if(is_admin()) + { + $is_admin = " is_admin( myMap, $map->id );"; + } + $default_icon_id = $map->get_meta("default_icon_id"); + $icon = wp_get_attachment_image_src($default_icon_id, [60, 60])[0]; + $html .= " + "; + return $html; +} \ No newline at end of file diff --git a/unistall.php b/unistall.php new file mode 100644 index 0000000..31a21b8 --- /dev/null +++ b/unistall.php @@ -0,0 +1,20 @@ +get_col( "SELECT blog_id FROM $wpdb->blogs" ); + $original_blog_id = get_current_blog_id(); + foreach ( $blog_ids as $blog_id ) + { + switch_to_blog( $blog_id ); + delete_site_option( SHMAPPER ); + } + switch_to_blog( $original_blog_id ); +} diff --git a/widget/ShMap.widget.php b/widget/ShMap.widget.php new file mode 100644 index 0000000..30321a0 --- /dev/null +++ b/widget/ShMap.widget.php @@ -0,0 +1,95 @@ + 'Locations accordeon', 'classname' => 'widget_location_navigator') );; + add_action( 'init', array($this, 'redirect_login_page')); + } + function redirect_login_page() + { + $login_page = home_url( '/' ); + $page_viewed = basename($_SERVER['REQUEST_URI']); + $this->name = __('Ermak Locations', SHMAPPER); + $this->widget_options['description'] = __('Player Cabinet', SHMAPPER); + } + /* Widget + /* ------------------------------------ */ + public function widget($args, $instance) + { + extract( $args ); + $instance['title'] ? NULL : $instance['title'] = ''; + $instance['map_id'] ? NULL : $instance['map_id'] = ''; + $title = apply_filters('widget_title',$instance['title']); + $output = $before_widget."\n"; + if($title) + $output .= $before_title.$title.$after_title; + else + $output .= $before_title. $instance['title'].$after_title; + $map = ShmMap::get_instance($instance['map_id']); + $output .= $map->draw([ "height" => $instance['height'], "id" => $map->id ]); + $output .= $after_widget."\n"; + echo $output; + } + + /* Widget update + /* ------------------------------------ */ + public function update($new,$old) + { + $instance = $old; + $instance['title'] = strip_tags($new['title']); + $instance['map_id'] = strip_tags($new['map_id']); + $instance['height'] = strip_tags($new['height']); + return $instance; + } + + /* Widget form + /* ------------------------------------ */ + public function form($instance) + { + // Default widget settings + $defaults = array( + 'title' => '', + 'map_id' => '', + 'height' => 250, + ); + $instance = wp_parse_args( (array) $instance, $defaults ); + ?> +
    +
    +

    + + " /> +

    +

    + + "shm-form", + "name" => $this->get_field_name('map_id'), + "selected" => esc_attr($instance["map_id"]), + "id" => $instance['map_id'], + "posts" => ShmMap::get_all(), + ]); + ?> +

    +

    + + " /> +

    +
    +
    + \ No newline at end of file From cd0098d1d0e6bba8ecfc2124fa70906032db6db5 Mon Sep 17 00:00:00 2001 From: BootWP Date: Mon, 14 Sep 2020 12:12:03 +0300 Subject: [PATCH 065/220] Add support for yandex map default geolacation select. --- assets/js/ShMapper.yandex.js | 14 ++++ class/ShMapper.class.php | 116 +++++++++++++++++++++------------- class/ShMapper_ajax.class.php | 2 +- 3 files changed, 88 insertions(+), 44 deletions(-) diff --git a/assets/js/ShMapper.yandex.js b/assets/js/ShMapper.yandex.js index 262be0e..b486564 100644 --- a/assets/js/ShMapper.yandex.js +++ b/assets/js/ShMapper.yandex.js @@ -329,6 +329,11 @@ jQuery(document).ready(function($) }) myPlacemark.events.add("dragend", evt => { + + var shmCoordinates = evt.get('target').geometry.getCoordinates(); + $("[name='shm_default_latitude']").val(shmCoordinates[0]).trigger('change'); + $("[name='shm_default_longitude']").val(shmCoordinates[1]).trigger('change'); + var pos = evt.get("position"); var globalPixelPoint = myMap.converter.pageToGlobal( [pos[0], pos[1]] ); var new_mark_coords = myMap.options.get('projection').fromGlobalPixels(globalPixelPoint, myMap.getZoom()); @@ -336,7 +341,14 @@ jQuery(document).ready(function($) $("[name='longitude']").val(new_mark_coords[1].toFixed(6)); initAddress(new_mark_coords); }); + + // On change zoom. + myMap.events.add('boundschange', function(e){ + zoom = myMap.getZoom(); + $('[name=shm_default_zoom]').val( zoom ).trigger('change'); + }); } + if( mData.isClausterer ) { clusterer.add(myPlacemark); @@ -357,8 +369,10 @@ jQuery(document).ready(function($) } is_admin = function(myMap, mData) { + if(mData.isMap) { + myMap.events.add( 'boundschange', function(event) { coords = myMap.getCenter(); diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index 2684d15..be4a159 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -411,13 +411,13 @@ static function setting_pages() $latitude = 55.8; $longitude = 37.8; $zoom = 4; - if ( static::$options['shm_default_zoom'] ) { + if ( isset( static::$options['shm_default_zoom'] ) && static::$options['shm_default_zoom'] ) { $zoom = static::$options['shm_default_zoom']; } - if ( static::$options['shm_default_latitude'] ) { + if ( isset( static::$options['shm_default_latitude'] ) && static::$options['shm_default_latitude'] ) { $latitude = static::$options['shm_default_latitude']; } - if ( static::$options['shm_default_longitude'] ) { + if ( isset( static::$options['shm_default_longitude'] ) && static::$options['shm_default_longitude'] ) { $longitude = static::$options['shm_default_longitude']; } @@ -594,50 +594,69 @@ static function setting_pages() + diff --git a/class/ShMapper_ajax.class.php b/class/ShMapper_ajax.class.php index 922f685..c4346c9 100644 --- a/class/ShMapper_ajax.class.php +++ b/class/ShMapper_ajax.class.php @@ -444,7 +444,7 @@ static function myajax_submit() $d = array( $action, array( - //"msg" => __( "New coordinates saved" , SHMAPPER ), + "msg" => __( "New coordinates saved" , SHMAPPER ), ), ); break; From a264459db0338a1fde652823bcd03e74d9d16aa8 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 24 Nov 2020 06:32:50 +0300 Subject: [PATCH 066/220] Improvements --- assets/js/ShMapper.js | 22 +- assets/js/ShMapper.yandex.js | 1 + class/ShMapper.class.php | 94 +- class/ShMapper_ajax.class.php | 37 +- languages/shmapper-by-teplitsa-ru_RU.mo | Bin 22718 -> 22765 bytes languages/shmapper-by-teplitsa-ru_RU.po | 1583 ++++++++++++----------- languages/shmapper-by-teplitsa.pot | 165 +-- tpl/shmMap.php | 8 + 8 files changed, 1014 insertions(+), 896 deletions(-) diff --git a/assets/js/ShMapper.js b/assets/js/ShMapper.js index ace8ef0..6fcbb0d 100644 --- a/assets/js/ShMapper.js +++ b/assets/js/ShMapper.js @@ -69,12 +69,11 @@ jQuery(document).ready(function($) shm_send(["shm_voc", $(evt.currentTarget).attr("name"), $(evt.currentTarget).val()]); }}); $("[name=shm_default_longitude]").on( 'change', function(evt) { - setTimeout(function(){ - shm_send(["shm_default_longitude", $(evt.currentTarget).val() ]); - },100); - setTimeout(function(){ - shm_send(["shm_default_latitude", $('[name=shm_default_latitude]').val() ]); - },500); + var shmDefaultLongitude = $('[name=shm_default_longitude]').val(); + var shmDefaultLatitude = $('[name=shm_default_latitude]').val(); + shm_send([ 'shm_default_coordinates', [ shmDefaultLongitude, shmDefaultLatitude ] ]); + console.log(shmDefaultLongitude); + console.log(shmDefaultLatitude) ; }); $("[name=shm_default_zoom]").on( 'change', function(evt) { setTimeout(function(){ @@ -84,7 +83,7 @@ jQuery(document).ready(function($) $("[name='map_api']").live({click:function(evt) { $(".map_api_cont").css("opacity", 0.7); - shm_send(["map_api", $(evt.currentTarget).val()]); + shm_send(["map_api", $(evt.currentTarget).val()]); }}); $("[name=shm_yandex_maps_api_key]").live({change:function(evt) { @@ -359,8 +358,7 @@ jQuery(document).ready(function($) // input file $(".shm-form-file > input[type='file']").each(function(num, elem) { - $(elem).live({change:function(evt) - { + $(elem).on('change', function(evt) { var file = evt.target.files[0]; if(!file) return; shm_img = evt.target.files; @@ -387,7 +385,7 @@ jQuery(document).ready(function($) }; })(img); reader.readAsDataURL(file); - }}) + }) }); // shm_add_modal = function (data) @@ -430,6 +428,7 @@ function shm_send( params, type ) var $ = jQuery; console.log(params, type); jQuery.post ( + myajax.url, { action : 'myajax', @@ -546,6 +545,9 @@ function shm_send( params, type ) break; case "map_api": $(".map_api_cont").css("opacity", 1); + setTimeout( function() { + window.location.reload(window.location.href); + }, 500 ); case "shm_yandex_maps_api_key": $(".map_api_cont").css("opacity", 1); if(datas['hide_dang']) diff --git a/assets/js/ShMapper.yandex.js b/assets/js/ShMapper.yandex.js index b486564..8dd5229 100644 --- a/assets/js/ShMapper.yandex.js +++ b/assets/js/ShMapper.yandex.js @@ -367,6 +367,7 @@ jQuery(document).ready(function($) } }); } + is_admin = function(myMap, mData) { diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index be4a159..9b6933e 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -18,7 +18,7 @@ public static function activate() ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;"); update_option(SHMAPPER,[ // "map_api" => 1, - "map_api" => 2, + "map_api" => 2, "shm_map_is_crowdsourced" => 0, "shm_map_marker_premoderation" => 1, "shm_reload" => 1, @@ -194,7 +194,7 @@ static function add_shortcodes() static function add_admin_js_script() { //css - wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array(), SHMAPPER_VERSION); + wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array(), SHMAPPER_VERSION); wp_enqueue_style( "ShMapper"); //js wp_register_script("inline", admin_url().'/js/inline-edit-post.js', array()); @@ -205,7 +205,11 @@ static function add_admin_js_script() wp_enqueue_script("ShMapper.admin"); if( static::$options['map_api'] == 1 ) { - wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=".ShMapper::$options['shm_yandex_maps_api_key']."&load=package.full&lang=ru_RU", array()); + $ymap_key = ''; + if ( isset( ShMapper::$options['shm_yandex_maps_api_key'] ) ) { + $ymap_key = ShMapper::$options['shm_yandex_maps_api_key']; + } + wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=" . esc_attr( $ymap_key ) . "&load=package.full&lang=ru_RU", array()); wp_enqueue_script("api-maps"); wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); wp_enqueue_script("ShMapper.yandex"); @@ -280,12 +284,15 @@ static function add_admin_js_script() ); } static function add_frons_js_script() - { - + { + $ymap_key = ''; + if ( isset( ShMapper::$options['shm_yandex_maps_api_key'] ) ) { + $ymap_key = ShMapper::$options['shm_yandex_maps_api_key']; + } //css wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array()); wp_enqueue_style( "ShMapper"); - + wp_enqueue_script('jquery-ui-core'); wp_enqueue_script('jquery-ui-draggable'); wp_register_script("touchpunch", plugins_url( '../assets/js/touchpunch.js', __FILE__ ), array()); @@ -298,7 +305,7 @@ static function add_frons_js_script() wp_enqueue_script("ShMapper.front"); if( static::$options['map_api'] == 1 ) { - wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=".ShMapper::$options['shm_yandex_maps_api_key']."&load=package.full&lang=ru_RU", array()); + wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=" . esc_attr( $ymap_key ) . "&load=package.full&lang=ru_RU", array()); wp_enqueue_script("api-maps"); wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); wp_enqueue_script("ShMapper.yandex"); @@ -406,8 +413,8 @@ static function admin_page_handler2() [ __CLASS__, 'setting_pages' ] ); } - static function setting_pages() - { + static function setting_pages() { + $latitude = 55.8; $longitude = 37.8; $zoom = 4; @@ -421,7 +428,7 @@ static function setting_pages() $longitude = static::$options['shm_default_longitude']; } - $mapType = ShmMap::get_map_types()[ ShMapper::$options['map_api'] ][0]; + $map_type = ShmMap::get_map_types()[ self::$options['map_api'] ][0]; echo "
    @@ -436,34 +443,34 @@ static function setting_pages()
    • -
      ". - __("Map API", SHMAPPER) . +
      " . + esc_html__("Map API", SHMAPPER ) . "
      - - +
      - - +
      -
      -
      -

      -

      ".__("Yandex.Maps API Key", SHMAPPER)."
      - - ".__("ATTENTION: you must specify a key for working with the Yandex.Maps API.", SHMAPPER)."
      ".__("Learn more here:", SHMAPPER)." https://tech.yandex.ru/maps/jsapi/doc/2.1/dg/concepts/load-docpage/
      -

      -

      -
      +
      +
      +

      +

      " . __("Yandex.Maps API Key", SHMAPPER)."
      + + ".__("ATTENTION: you must specify a key for working with the Yandex.Maps API.", SHMAPPER)."
      ".__("Learn more here:", SHMAPPER)." https://tech.yandex.ru/maps/jsapi/doc/2.1/dg/concepts/load-docpage/
      +

      +

      +
      @@ -581,7 +588,7 @@ static function setting_pages()
    • ". - __( "Coordinates", SHMAPPER ) . + esc_html__( "Coordinates", SHMAPPER ) . "
      @@ -590,17 +597,22 @@ static function setting_pages()

      " . esc_html__( "Set default coordinates", SHMAPPER ) . "

      +
      " . esc_html__( "Longitude", SHMAPPER ) . "
      + +
      " . esc_html__( "Latitude", SHMAPPER ) . "
      + +
      " . esc_html__( "Zoom", SHMAPPER ) . "
      + - - - - - -
      diff --git a/class/ShMapper_ajax.class.php b/class/ShMapper_ajax.class.php index c4346c9..85ad9e1 100644 --- a/class/ShMapper_ajax.class.php +++ b/class/ShMapper_ajax.class.php @@ -352,9 +352,9 @@ static function myajax_submit() $action, array( "text" => [ - 'title' => __("add Map Point", SHMAPPER), + 'title' => esc_html__( 'add Map Point', SHMAPPER ), "content" => ShmPoint::get_insert_form( $params[1] ), - "send" => __("Create"), + "send" => esc_html__( 'Create', SHMAPPER ), "sendHandler" => "create_point" ], ) @@ -382,7 +382,7 @@ static function myajax_submit() array( "id" => $point->id, "data" => $pointdata, - "msg" => 'success', + "msg" => esc_html__( 'Success', SHMAPPER ), ) ); break; @@ -397,16 +397,17 @@ static function myajax_submit() ) ); break; - case "map_api": - ShMapper::$options['map_api'] = sanitize_text_field($params[1]); + case "map_api": + ShMapper::$options['map_api'] = sanitize_text_field( $params[1] ); ShMapper::update_options(); - $d = array( + $d = array( $action, array( - "msg" => sanitize_text_field($params[1]) == 1 ? "Yandex Map API" : "OpenStreet Map API", - ) + "msg" => sanitize_text_field( $params[1]) == 1 ? "Yandex Map API" : "OpenStreet Map API", + 'reload' => 'true', + ), ); - break; + break; case "shm_yandex_maps_api_key": ShMapper::$options['shm_yandex_maps_api_key'] = sanitize_text_field($params[1]); ShMapper::update_options(); @@ -418,23 +419,15 @@ static function myajax_submit() ) ); break; - case "shm_default_longitude": - ShMapper::$options['shm_default_longitude'] = sanitize_text_field($params[1]); - ShMapper::update_options(); - $d = array( - $action, - array( - "msg" => __( "New coordinates saved" , SHMAPPER ), - ), - ); - break; - case "shm_default_latitude": - ShMapper::$options['shm_default_latitude'] = sanitize_text_field($params[1]); + case "shm_default_coordinates": + ShMapper::$options['shm_default_longitude'] = $params[1][0]; + ShMapper::$options['shm_default_latitude'] = $params[1][1]; ShMapper::update_options(); $d = array( $action, array( - //"msg" => __( "New coordinates saved" , SHMAPPER ), + "msg" => esc_html__( "New coordinates saved" , SHMAPPER ), + "value" => array( $params[1][0], $params[1][1] ), ), ); break; diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo index 06965506afa2b456b193208f4b788bd9f5e6694c..2c7b6dfeb93e3e3e36fd31d011f3b832d08dbe0a 100644 GIT binary patch delta 4591 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 delta 4556 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 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: GlotPress/2.4.0-alpha\n" -"Language: ru\n" -"Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 2.4.1\n" -#: class/ShmAdminPage.class.php:27 -msgid "shMapper developers chat" -msgstr "Чат разработчиков shMapper" +#: class/SMC_Post.php:370 class/ShMapper.class.php:170 +#: class/ShmMap.class.php:103 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:319 +msgid "Title" +msgstr "Название" -#: class/ShmForm.class.php:497 -msgid "Drag choosed icon and place it to map or click it and enter exact address." -msgstr "Перетащите выбранную иконку в нужное место Карты или кликните по ней и введите точный адрес." +#: class/SMC_Post.php:496 class/ShmMap.class.php:521 +msgid "Double" +msgstr "Дублировать" -#: assets/js/ShMapper.front.js:9 -msgid "Error: no map" -msgstr "Ошибка: нет карты" +#: class/SMC_Post.php:542 class/ShmPoint.class.php:253 +#: class/ShmPoint.class.php:499 class/ShmPoint.class.php:515 +msgid "Usage in Maps: " +msgstr "Используется в Картах: " -#: widget/ShMap.widget.php:64 -msgid "Tite" -msgstr "Название" +#: class/SMC_Post.php:560 +msgid "— No Change —" +msgstr "— Без изменений —" -#: widget/ShMap.widget.php:17 -msgid "Player Cabinet" -msgstr "Кабинет" +#: class/SMC_Post.php:563 +msgid "No" +msgstr "Нет" -#: widget/ShMap.widget.php:16 -msgid "Ermak Locations" -msgstr "Области Ermak" +#: class/SMC_Post.php:566 +msgid "Yes" +msgstr "Да" -#: widget/ShMap.widget.php:9 -msgid "Shmapper Locations" -msgstr "Области Shmapper" +#: class/SMC_Post.php:631 class/SMC_Post.php:636 +msgid "Parameters" +msgstr "Параметры" -#: tpl/shmMap.php:83 -msgid "download %s.csv" -msgstr "скачать %s.csv" +#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 +#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:126 +msgid "Map marker type" +msgstr "Тип маркера" -#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 -msgid "Submit" -msgstr "Отправить" +#: class/ShMapPointType.class.php:34 +msgid "Search Map marker type" +msgstr "искать Тип маркера" -#: tpl/input_file_form.php:77 -msgid "Insert" -msgstr "Вставить" +#: class/ShMapPointType.class.php:35 +msgid "all Map marker types" +msgstr "все Типы маркеров" -#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 -msgid "Remove" -msgstr "Удалить" +#: class/ShMapPointType.class.php:36 +msgid "view Map marker type" +msgstr "смотреть Тип маркера" -#: tpl/input_file_form.php:72 -msgid "Browse" -msgstr "Просмотр" +#: class/ShMapPointType.class.php:37 +msgid "parent Map marker type" +msgstr "родительский Тип маркера" -#: tpl/input_file_form.php:66 -msgid "File" -msgstr "Файл" +#: class/ShMapPointType.class.php:38 +msgid "parent Map marker type:" +msgstr "Тип маркера родительской карты:" -#: tpl/input_file_form.php:64 -msgid "Upload Image" -msgstr "Загрузить изображение" +#: class/ShMapPointType.class.php:39 +msgid "edit Map marker type" +msgstr "редактировать Тип маркера" -#: class/ShmPoint.class.php:312 -msgid "Address" -msgstr "Адрес" +#: class/ShMapPointType.class.php:40 +msgid "update Map marker type" +msgstr "обновить Тип маркера" -#: class/ShmPoint.class.php:158 -msgid "Map owner" -msgstr "Родительская карта" +#: class/ShMapPointType.class.php:41 +msgid "add Map marker type" +msgstr "Добавить новый" -#: class/ShmPoint.class.php:33 -msgid "no found Map marker in trash" -msgstr "Маркеры в корзине не найдены" +#: class/ShMapPointType.class.php:42 +msgid "new Map marker type name" +msgstr "название нового Типа маркеров" -#: class/ShmPoint.class.php:32 -msgid "Map marker not found" -msgstr "Маркер не найден" +#: class/ShMapPointType.class.php:49 +msgid "Unique type of every Map markers" +msgstr "Уникальный тип каждого маркера карты" -#: class/ShmPoint.class.php:31 -msgid "search Map marker" -msgstr "искать Маркер" +#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 +msgid "Map marker types" +msgstr "Типы маркеров" -#: class/ShmPoint.class.php:30 -msgid "view Map marker" -msgstr "смотреть Маркер" +#: class/ShMapPointType.class.php:86 +msgid "Name" +msgstr "Название" -#: class/ShmPoint.class.php:29 -msgid "all Map markers" -msgstr "Маркеры" +#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 +#: class/ShMapPointType.class.php:197 +msgid "Icon" +msgstr "Иконка" -#: class/ShmPoint.class.php:27 -msgid "edit Map marker" -msgstr "редактировать Маркер" +#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 +msgid "Color" +msgstr "Цвет" -#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 -#: class/ShmPoint.class.php:28 -msgid "add Map marker" -msgstr "Добавить новый" +#: class/ShMapPointType.class.php:125 class/ShMapPointType.class.php:177 +#: class/ShMapper.class.php:141 class/ShmMap.class.php:252 +#: widget/ShMap.widget.php:80 +msgid "Height" +msgstr "Высота" -#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 -msgid "Map marker" -msgstr "Маркер" +#: class/ShMapPointType.class.php:131 class/ShMapPointType.class.php:187 +#: class/ShMapper.class.php:140 class/ShmMap.class.php:257 +msgid "Width" +msgstr "Ширина" -#: class/ShMapper_Assistants.class.php:90 -msgid "Your requests to this Map " -msgstr "Ваши запросы к этой карте" +#: class/ShMapPointType.class.php:361 +msgid "None" +msgstr "Никакой" -#: class/ShMapper_Assistants.class.php:44 -msgid "all maps" -msgstr "все карты" +#: class/ShMapper.class.php:26 +msgid "" +"Я даю свое согласие администратору сайта на обработку, в том числе " +"автоматизированную, своих персональных данных в соответствии с Федеральным " +"законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +msgstr "" +"Я даю свое согласие администратору сайта на обработку, в том числе " +"автоматизированную, своих персональных данных в соответствии с Федеральным " +"законом от 27.07.2006 N 152-ФЗ «О персональных данных»." -#: class/SMC_Post.php:631 class/SMC_Post.php:636 -msgid "Parameters" -msgstr "Параметры" +#: class/ShMapper.class.php:27 +msgid "Your request has been successfully registered." +msgstr "Ваш запрос успешно зарегистрирован." -#: class/SMC_Post.php:566 -msgid "Yes" -msgstr "Да" +#: class/ShMapper.class.php:28 +msgid "Unknown error." +msgstr "Неизвестная ошибка." -#: class/SMC_Post.php:563 -msgid "No" -msgstr "Нет" +#: class/ShMapper.class.php:78 class/ShMapper.class.php:396 +#: class/ShMapper.class.php:397 +msgid "Shmapper" +msgstr "shMapper" -#: class/SMC_Post.php:560 -msgid "— No Change —" -msgstr "— Без изменений —" +#: class/ShMapper.class.php:84 class/ShmMap.class.php:72 +#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 +msgid "add Map" +msgstr "Добавить новую" -#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 -#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 -msgid "Usage in Maps: " -msgstr "Используется в Картах: " +#: class/ShMapper.class.php:90 +msgid "Maps" +msgstr "Карты" -#: class/ShmMap.class.php:780 -msgid "Succesfuly delete map and %s points migrates to %s" -msgstr "Карта успешно удалена и %s точек перенесено в %s" +#: class/ShMapper.class.php:96 +msgid "edit Maps in page" +msgstr "редактировать Карты на странице" -#: class/ShmMap.class.php:773 -msgid "Succesfuly delete map and %s points are orphans now" -msgstr "Карта успешно удалена и %s точек сейчас не привязаны ни к какой карте" +#: class/ShMapper.class.php:115 class/ShMapperRequest.class.php:25 +#: class/ShMapperRequest.class.php:30 +msgid "all Map Requests" +msgstr "Карт-запросы" -#: class/ShmMap.class.php:768 -msgid "Succesfuly delete map width %s points" -msgstr "Карта успешно удалена с %s точками" +#: class/ShMapper.class.php:126 class/ShMapper.class.php:174 +#: class/ShMapperRequest.class.php:88 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:269 +msgid "Location" +msgstr "Адрес" -#: class/ShmMap.class.php:682 -msgid "Switch all Points to anover Map" -msgstr "Перенести все Маркеры на другую Карту" +#: class/ShMapper.class.php:127 class/ShMapper.class.php:134 +#: class/ShMapper.class.php:172 class/ShMapper.class.php:602 +#: class/ShMapperRequest.class.php:84 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:265 +msgid "Latitude" +msgstr "Широта" -#: class/ShmMap.class.php:676 -msgid "Escape all Points without Owner Map" -msgstr "Оставить все Маркеры без родительской Карты" +#: class/ShMapper.class.php:128 class/ShMapper.class.php:135 +#: class/ShMapper.class.php:173 class/ShMapper.class.php:600 +#: class/ShMapperRequest.class.php:86 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:267 +msgid "Longitude" +msgstr "Долгота" -#: class/ShmMap.class.php:670 -msgid "Delete all Points" -msgstr "Удалить все Маркеры" +#: class/ShMapper.class.php:129 class/ShMapper.class.php:136 +#: class/ShMapper.class.php:604 +msgid "Zoom" +msgstr "Увеличение" -#: class/ShmMap.class.php:665 -msgid "What do with placemarks of deleting Map?" -msgstr "Что делать с Маркерами удаляемой Карты?" +#: class/ShMapper.class.php:137 class/ShmMap.class.php:112 +#: class/ShmMap.class.php:327 +msgid "Legend exists" +msgstr "Легенда присутствует" -#: class/ShmMap.class.php:521 class/SMC_Post.php:496 -msgid "Double" -msgstr "Дублировать" +#: class/ShMapper.class.php:138 class/ShmMap.class.php:338 +msgid "Filters exists" +msgstr "Панель фильтров присутствует" -#: class/ShmMap.class.php:450 -msgid "Personal email" -msgstr "Адрес электронной почты" +#: class/ShMapper.class.php:139 class/ShmMap.class.php:107 +#: class/ShmMap.class.php:316 +msgid "Export csv" +msgstr "Загрузка сводки в формате csv" -#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 -#: class/ShmMap.class.php:471 -msgid "Required" -msgstr "Обязателен" +#: class/ShMapper.class.php:142 class/ShmMap.class.php:273 +msgid "Map search" +msgstr "Поиск по карте" -#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 -#: class/ShmMap.class.php:461 -msgid "Include" -msgstr "Включать" +#: class/ShMapper.class.php:143 class/ShmMap.class.php:287 +msgid "Map full screen" +msgstr "Полноэкранный режим" -#: class/ShmMap.class.php:426 -msgid "2.5. What data users will have to put?" -msgstr "2.5. Какие данные пользователи должны будут ставить?" +#: class/ShMapper.class.php:144 +msgid "Map zoom slider" +msgstr "Слайдер масштаба" -#: class/ShmMap.class.php:418 -msgid "2.4. Can users leave their contact information?" -msgstr "2.4. Могут ли пользователи оставлять свою контактную информацию?" +#: class/ShMapper.class.php:145 class/ShmMap.class.php:281 +msgid "Map layer switcher" +msgstr "Переключатель слоев карты" -#: class/ShmMap.class.php:409 -msgid "You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;" -msgstr "Вы можете создавать собственные формы, используя элементы формы: «Строка текста», «Поле текста», «Загрузка файлов», «Категории Маркеров»" +#: class/ShMapper.class.php:146 class/ShmMap.class.php:295 +msgid "Lock zoom and drag" +msgstr "" +"Заблокировать перетаскивание карты и изменение размера средним колёсиком мышы" -#: class/ShmMap.class.php:406 -msgid "2.3. What information can users enter?" -msgstr "2.3. Какую информацию могут вводить пользователи?" +#: class/ShMapper.class.php:147 class/ShmMap.class.php:291 +msgid "Formating Marker to cluster" +msgstr "Укладывать маркеры карты в кластеры" -#: class/ShmMap.class.php:398 -msgid "2.2. Will I notify the author about new posts?" -msgstr "2.2. Оповещать ли автора Карты о новых сообщениях?" +#: class/ShMapper.class.php:148 +msgid "Default Marker icon" +msgstr "Иконка маркера по умолчанию" -#: class/ShmMap.class.php:392 -msgid "For example «All beaches by the river»" -msgstr "Например «Все пляжи у реки»" +#: class/ShMapper.class.php:150 class/ShmMap.class.php:117 +msgid "Form exists" +msgstr "Форма присутствует" -#: class/ShmMap.class.php:388 -msgid "2.1. What is the name of your information form?" -msgstr "2.1. Как называется Ваша форма сбора информации?" +#: class/ShMapper.class.php:151 class/ShmMap.class.php:122 +#: class/ShmMap.class.php:401 +msgid "Notify owner of Map" +msgstr "Присылать уведомления о новых картах автору" -#: class/ShmMap.class.php:383 -msgid "Enable crowdsourcing function (free add Users new Markers)" -msgstr "Включить функцию краудсорсинга (свободного добавления Пользователями новых Маркеров) " +#: class/ShMapper.class.php:152 +msgid "Form Title" +msgstr "Заголовок Формы" -#: class/ShmMap.class.php:351 -msgid "Recommended size is 64х64 px, format is .png" -msgstr "Рекомендуемый размер: 64х64 pxб формат .png" +#: class/ShMapper.class.php:153 +msgid "Form generator" +msgstr "Генератор форм" -#: class/ShmMap.class.php:346 -msgid "1.7. Default Marker icon" -msgstr "1.7. Иконка маркера по умолчанию" +#: class/ShMapper.class.php:154 class/ShmMap.class.php:421 +msgid "Users can leave their contact details for feedback." +msgstr "Пользователи могут оставлять свои контактные данные для обратной связи" -#: class/ShmMap.class.php:335 -msgid "1.6. Will Marker type filter be displayed?" -msgstr "1.6. Будет ли отображаться панель фильтрации по типам Маркеров?" +#: class/ShMapper.class.php:155 +msgid "Unclude Personal name" +msgstr "Включить личное имя" -#: class/ShmMap.class.php:324 -msgid "1.5. Will the legend be displayed?" -msgstr "1.5. Будет ли отображаться легенда?" +#: class/ShMapper.class.php:156 class/ShmMap.class.php:434 +msgid "Personal name" +msgstr "Имя" -#: class/ShmMap.class.php:313 -msgid "1.4. May User download data in *.csv?" -msgstr "1.4. Можно ли скачать данные карты в формате .csv?" +#: class/ShMapper.class.php:157 +msgid "Required Personal name" +msgstr "Обязательно личное имя" -#: class/ShmMap.class.php:299 -msgid "Choose layers" -msgstr "Выбор типа визуализации слоя" +#: class/ShMapper.class.php:158 +msgid "Unclude Personal e-mail" +msgstr "Включить личный телефон e-mail" -#: class/ShmMap.class.php:277 -msgid "Map zoom slider enabled" -msgstr "Ползунок масштаба" +#: class/ShMapper.class.php:159 +msgid "Personal e-mail" +msgstr "Личный e-mail" -#: class/ShmMap.class.php:269 -msgid "1.3. Include interface" -msgstr "1.3. Какие элементы управления картой должны присутствовать?" +#: class/ShMapper.class.php:160 +msgid "Required Personal e-mail" +msgstr "Требуется личный e-mail" -#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 -msgid "Empty for " -msgstr "Оставьте пустым, чтобы было " +#: class/ShMapper.class.php:161 +msgid "Unclude Personal phone" +msgstr "Включить личный телефон" -#: class/ShmMap.class.php:249 -msgid "1.2. Set size for map's div (per pixels)" -msgstr "1.2. Установите размер окна карты (в пикселях)" +#: class/ShMapper.class.php:162 class/ShmMap.class.php:466 +msgid "Personal phone" +msgstr "Телефон" -#: class/ShmMap.class.php:237 -msgid "1.1. Pan map and choose zoom" -msgstr "1.1. Отцентрируйте карту и выберите масштаб" +#: class/ShMapper.class.php:163 +msgid "Required Personal phone" +msgstr "Требуется личный телефон" -#: class/ShmMap.class.php:212 -msgid "Step 2. May anover Users add information for Map." -msgstr "Шаг 2. Смогут ли другие пользователи добавлять информацию на Вашу карту?" +#: class/ShMapper.class.php:169 class/ShmMap.class.php:70 +#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 +msgid "Map" +msgstr "Карта" -#: class/ShmMap.class.php:198 -msgid "You can insert a card into a post or page by copying this shortcode." -msgstr "Вы сможете вставить карту в запись или страницу скопировав этот шорткод" +#: class/ShMapper.class.php:171 class/ShmForm.class.php:223 +#: class/ShmForm.class.php:295 class/ShmForm.class.php:372 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:323 +msgid "Description" +msgstr "Описание" -#: class/ShmMap.class.php:186 -msgid "Including Map to post" -msgstr "Вставка карты в звпись" +#: class/ShMapper.class.php:175 class/ShmPoint.class.php:250 +#: class/ShmPoint.class.php:327 +msgid "Type" +msgstr "Тип" -#: class/ShmMap.class.php:162 -msgid "only request form" -msgstr "только Форма запроса" +#: class/ShMapper.class.php:176 +msgid "Session" +msgstr "Сессия" -#: class/ShmMap.class.php:153 -msgid "only map" -msgstr "только карта" +#: class/ShMapper.class.php:177 class/ShMapperRequest.class.php:67 +#: class/ShmMap.class.php:126 +msgid "Author" +msgstr "Автор" -#: class/ShmMap.class.php:145 -msgid "include all (map and request form)" -msgstr "включено все(карта и Форма запроса)" +#: class/ShMapper.class.php:178 +msgid "Contacts" +msgstr "Контакты" -#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 -msgid "Map markers" -msgstr "Маркеры" +#: class/ShMapper.class.php:179 +msgid "Aproved" +msgstr "Одобрен" -#: class/ShmMap.class.php:124 -msgid "shortcodes" -msgstr "шорткоды" +#: class/ShMapper.class.php:180 +msgid "Aprove date" +msgstr "Утвержденная дата" -#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 -msgid "ID" -msgstr "ID" +#: class/ShMapper.class.php:181 +msgid "Accessed User" +msgstr "Доступ пользователя" -#: class/ShmMap.class.php:80 -msgid "no found Map in trash" -msgstr "Карт в корзине не найдено" +#: class/ShMapper.class.php:278 class/ShMapper.class.php:375 +msgid "Attantion" +msgstr "Внимание" -#: class/ShmMap.class.php:79 -msgid "Map not found" -msgstr "Карт не найдено" +#: class/ShMapper.class.php:279 class/ShMapper.class.php:376 +msgid "Send" +msgstr "Послать" -#: class/ShmMap.class.php:78 -msgid "search Map" -msgstr "искать Карту" +#: class/ShMapper.class.php:280 class/ShMapper.class.php:377 +msgid "Close" +msgstr "Закрыть" -#: class/ShmMap.class.php:77 -msgid "view Map" -msgstr "смотреть Карту" +#: class/ShMapper.class.php:281 class/ShMapper.class.php:378 +msgid "" +"Error: the form is not associated with the card. To link a map and a form, " +"there should be 2 shortcodes on one page (map - [shmMap id = '6' map = " +"'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' " +"uniq = 'for example, 777']), in which the uniq parameter will match" +msgstr "" +"Ошибка: форма не связана с картой. Чтобы связать карту и форму, на одной " +"странице должно быть 2 шорткода (карта - [shmMap id='6' map='true' " +"uniq='например, 777'] и форма - [shmMap id='94' form='true' uniq='например, " +"777']), у которых параметр uniq будет совпадать" -#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 -msgid "all Maps" -msgstr "Карты" +#: class/ShMapper.class.php:282 +msgid "Are you shure?" +msgstr "Вы уверены?" -#: class/ShmMap.class.php:74 -msgid "edit Map" -msgstr "редактировать Карту" +#: class/ShMapper.class.php:409 class/ShMapper.class.php:410 +#: class/ShMapper.class.php:438 +msgid "Settings" +msgstr "Настройки" -#: class/ShmMap.class.php:65 -msgid "Step 1. Set up your map." -msgstr "Шаг 1. Настройте Вашу карту" +#: class/ShMapper.class.php:447 +msgid "Map API" +msgstr "API карт" -#: class/ShMapPointType.class.php:358 -msgid "None" -msgstr "Никакой" +#: class/ShMapper.class.php:460 +#, fuzzy +#| msgid "Open Street Map" +msgid "OpenStreetMap" +msgstr "Open Street Map" -#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 -msgid "Color" -msgstr "Цвет" +#: class/ShMapper.class.php:468 +msgid "Yandex.Maps API Key" +msgstr "Ключ API Яндекс.Карт" -#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 -#: class/ShMapPointType.class.php:197 -msgid "Icon" -msgstr "Иконка" +#: class/ShMapper.class.php:470 +msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." +msgstr "ВНИМАНИЕ: необходимо указать ключ для работы с API Яндекс.Карт." -#: class/ShMapPointType.class.php:86 -msgid "Name" -msgstr "Название" +#: class/ShMapper.class.php:470 +msgid "Learn more here:" +msgstr "Подробнее здесь:" -#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 -msgid "Map marker types" -msgstr "Типы маркеров" +#: class/ShMapper.class.php:481 +msgid "Interactive" +msgstr "Интерактив" -#: class/ShMapPointType.class.php:49 -msgid "Unique type of every Map markers" -msgstr "Уникальный тип каждого маркера карты" +#: class/ShMapper.class.php:489 +msgid "Включить глобальный режим неинтерактивных карт" +msgstr "Включить глобальный режим неинтерактивных карт" -#: class/ShMapPointType.class.php:42 -msgid "new Map marker type name" -msgstr "название нового Типа маркеров" +#: class/ShMapper.class.php:493 +msgid "" +"пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " +"включена у карт даже не появляется блок интерактивности." +msgstr "" +"пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " +"включена у карт даже не появляется блок интерактивности." -#: class/ShMapPointType.class.php:41 -msgid "add Map marker type" -msgstr "Добавить новый" +#: class/ShMapper.class.php:501 +msgid "Pre-modertion from Map owner." +msgstr "Премодерация со стороны владельца Карты." -#: class/ShMapPointType.class.php:40 -msgid "update Map marker type" -msgstr "обновить Тип маркера" +#: class/ShMapper.class.php:505 +msgid "все сообщения будут добавляться в статусе «Черновик»" +msgstr "все сообщения будут добавляться в статусе «Черновик»" -#: class/ShMapPointType.class.php:39 -msgid "edit Map marker type" -msgstr "редактировать Тип маркера" +#: class/ShMapper.class.php:509 +msgid "" +"ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует " +"угроза спам-атаки" +msgstr "" +"ВНИМАНИЕ: отключить эту опцию только на ваш страх и риск, т.к. существует " +"угроза спам-атаки" -#: class/ShMapPointType.class.php:38 -msgid "parent Map marker type:" -msgstr "Тип маркера родительской карты:" +#: class/ShMapper.class.php:517 +msgid "Reload page after User send request." +msgstr "Перегрузить страницу после того, как юзер отправил форму запроса" -#: class/ShMapPointType.class.php:37 -msgid "parent Map marker type" -msgstr "родительский Тип маркера" +#: class/ShMapper.class.php:529 +msgid "Protection" +msgstr "Защита" -#: class/ShMapPointType.class.php:36 -msgid "view Map marker type" -msgstr "смотреть Тип маркера" +#: class/ShMapper.class.php:536 +msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" +msgstr "Включать капчу в форме (плагин использует только ключи reCAPTCHA v2)" -#: class/ShMapPointType.class.php:35 -msgid "all Map marker types" -msgstr "все Типы маркеров" +#: class/ShMapper.class.php:545 +#, php-format +msgid "" +"What is Google reCAPTCHA? How recived keys for your site? See %sthis " +"instruction%s." +msgstr "" +"Что такое Google reCAPTCHA? Как получить ключи для сайта? Смотрите %sэту " +"инстукцию%s." -#: class/ShMapPointType.class.php:34 -msgid "Search Map marker type" -msgstr "искать Тип маркера" +#: class/ShMapper.class.php:549 +msgid "" +"Your reCAPTCHA doesn't work yet. In order to make it work, please get the " +"API keys at google.com/recaptcha" +msgstr "" +"Ваша Капча пока не работает. Для включения этой функции получите ключи API " +"на google.com/recaptch" -#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 -#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 -msgid "Map marker type" -msgstr "Тип маркера" +#: class/ShMapper.class.php:561 +msgid "Vocabulary" +msgstr "Словарь" -#: class/ShMapper.class.php:607 -msgid "Prevous step" -msgstr "Предыдущий шаг" +#: class/ShMapper.class.php:565 +msgid "Save personal data garantee" +msgstr "Гарантия сохранения персональных данных" -#: class/ShMapper.class.php:602 class/ShMapper.class.php:608 -msgid "Go to current page" -msgstr "На текущую страницу" +#: class/ShMapper.class.php:571 +msgid "Successful send map request" +msgstr "Сообщение об успешной регистрации запроса на Маркер" -#: class/ShMapper.class.php:601 class/ShMapper.class.php:609 -msgid "Close wizzard" -msgstr "Закрыть навсегда" +#: class/ShMapper.class.php:577 +msgid "Error send map request" +msgstr "Сообщение об ошибки регистрации запроса на Маркер" -#: class/ShMapper.class.php:559 -msgid "Restart wizzard" -msgstr "Перезапустить Мастер" +#: class/ShMapper.class.php:591 class/ShMapper.class.php:614 +msgid "Coordinates" +msgstr "Координаты" + +#: class/ShMapper.class.php:598 +msgid "Set default coordinates" +msgstr "Установить координаты по умолчанию" -#: class/ShMapper.class.php:556 +#: class/ShMapper.class.php:703 msgid "Wizzard" msgstr "Мастер" -#: class/ShMapper.class.php:544 -msgid "Error send map request" -msgstr "Сообщение об ошибки регистрации запроса на Маркер" +#: class/ShMapper.class.php:706 +msgid "Restart wizzard" +msgstr "Перезапустить Мастер" -#: class/ShMapper.class.php:538 -msgid "Successful send map request" -msgstr "Сообщение об успешной регистрации запроса на Маркер" +#: class/ShMapper.class.php:746 class/ShMapper.class.php:754 +msgid "Close wizzard" +msgstr "Закрыть навсегда" -#: class/ShMapper.class.php:532 -msgid "Save personal data garantee" -msgstr "Гарантия сохранения персональных данных" +#: class/ShMapper.class.php:747 class/ShMapper.class.php:753 +msgid "Go to current page" +msgstr "На текущую страницу" -#: class/ShMapper.class.php:528 -msgid "Vocabulary" -msgstr "Словарь" - -#: class/ShMapper.class.php:516 -msgid "Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha" -msgstr "Ваша Капча пока не работает. Для включения этой функции получите ключи API на google.com/recaptch" +#: class/ShMapper.class.php:750 class/ShMapper_ajax.class.php:170 +msgid "Next step" +msgstr "Следующий шаг" -#: class/ShMapper.class.php:512 -msgid "What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s." -msgstr "Что такое Google reCAPTCHA? Как получить ключи для сайта? Смотрите %sэту инстукцию%s." +#: class/ShMapper.class.php:752 +msgid "Prevous step" +msgstr "Предыдущий шаг" -#: class/ShMapper.class.php:503 -msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" -msgstr "Включать капчу в форме (плагин использует только ключи reCAPTCHA v2)" +#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 +msgid "Map Request" +msgstr "Карт-запрос" -#: class/ShMapper.class.php:496 -msgid "Protection" -msgstr "Защита" +#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 +#: class/ShMapperRequest.class.php:24 +msgid "add Map Request" +msgstr "Добавить новый" -#: class/ShMapper.class.php:484 -msgid "Reload page after User send request." -msgstr "Перегрузить страницу после того, как юзер отправил форму запроса" +#: class/ShMapperRequest.class.php:23 +msgid "edit Map Request" +msgstr "редактировать Карт-запрос" -#: class/ShMapper.class.php:476 -msgid "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" -msgstr "ВНИМАНИЕ: отключить эту опцию только на ваш страх и риск, т.к. существует угроза спам-атаки" +#: class/ShMapperRequest.class.php:26 +msgid "view Map Request" +msgstr "смотреть Карт-запрос" -#: class/ShMapper.class.php:472 -msgid "все сообщения будут добавляться в статусе «Черновик»" -msgstr "все сообщения будут добавляться в статусе «Черновик»" +#: class/ShMapperRequest.class.php:27 +msgid "search Map Request" +msgstr "искать Карт-запрос" -#: class/ShMapper.class.php:468 -msgid "Pre-modertion from Map owner." -msgstr "Премодерация со стороны владельца Карты." +#: class/ShMapperRequest.class.php:28 +msgid "Map Request not found" +msgstr "Запрос не найден" -#: class/ShMapper.class.php:460 -msgid "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." -msgstr "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка включена у карт даже не появляется блок интерактивности." +#: class/ShMapperRequest.class.php:29 +msgid "no found Map Request in trash" +msgstr "Карт-запросы в корзине не найдены" -#: class/ShMapper.class.php:456 -msgid "Включить глобальный режим неинтерактивных карт" -msgstr "Включить глобальный режим неинтерактивных карт" +#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:252 +msgid "Image" +msgstr "Изображение" -#: class/ShMapper.class.php:448 -msgid "Interactive" -msgstr "Интерактив" +#: class/ShMapperRequest.class.php:64 +msgid "Approving" +msgstr "Одобрение" -#: class/ShMapper.class.php:439 -msgid "Open Street Map" -msgstr "Open Street Map" +#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:251 +msgid "GEO location" +msgstr "гео-позиция" -#: class/ShMapper.class.php:433 -msgid "Yandex Map" -msgstr "Яндекс карты" +#: class/ShMapperRequest.class.php:327 +msgid "Uknown User" +msgstr "некто Имярек" -#: class/ShMapper.class.php:426 -msgid "Map API" -msgstr "API карт" +#: class/ShMapperRequest.class.php:335 +#, php-format +msgid "<%s> Request to your Map from [%s] [%s]" +msgstr "<%s> Новый карт-запрос от [%s] [%s]" -#: class/ShMapper.class.php:402 class/ShMapper.class.php:403 -#: class/ShMapper.class.php:417 -msgid "Settings" -msgstr "Настройки" +#: class/ShMapperRequest.class.php:337 +#, php-format +msgid "You may see this %s" +msgstr "Вы можете посмотреть его здесь %s" -#: class/ShMapper.class.php:276 assets/js/ShMapper.admin.js:155 -msgid "Are you shure?" -msgstr "Вы уверены?" +#: class/ShMapperRequest.class.php:358 +msgid "Approve" +msgstr "Одобрить" -#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 -msgid "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match" -msgstr "Ошибка: форма не связана с картой. Чтобы связать карту и форму, на одной странице должно быть 2 шорткода (карта - [shmMap id='6' map='true' uniq='например, 777'] и форма - [shmMap id='94' form='true' uniq='например, 777']), у которых параметр uniq будет совпадать" +#: class/ShMapperRequest.class.php:360 +msgid "Trash" +msgstr "Корзина" -#: class/ShMapper.class.php:274 class/ShMapper.class.php:370 -#: assets/js/ShMapper.js:391 -msgid "Close" -msgstr "Закрыть" +#: class/ShMapper_Assistants.class.php:44 +msgid "all maps" +msgstr "все карты" -#: class/ShMapper.class.php:273 class/ShMapper.class.php:369 -msgid "Send" -msgstr "Послать" +#: class/ShMapper_Assistants.class.php:90 +msgid "Your requests to this Map " +msgstr "Ваши запросы к этой карте" -#: class/ShMapper.class.php:272 class/ShMapper.class.php:368 -#: assets/js/ShMapper.js:381 -msgid "Attantion" -msgstr "Внимание" +#: class/ShMapper_ajax.class.php:177 +msgid "Congratulation! That's all!" +msgstr "Поздравляем! Это всё." -#: class/ShMapper.class.php:178 -msgid "Accessed User" -msgstr "Доступ пользователя" +#: class/ShMapper_ajax.class.php:195 +msgid "Wizzard closed" +msgstr "Мастер закрыт" -#: class/ShMapper.class.php:177 -msgid "Aprove date" -msgstr "Утвержденная дата" +#: class/ShMapper_ajax.class.php:206 +msgid "Wizzard restarted" +msgstr "Мастер запущен сызнова" -#: class/ShMapper.class.php:176 -msgid "Aproved" -msgstr "Одобрен" +#: class/ShMapper_ajax.class.php:220 +msgid "Approve succesfully and insert new Map marker" +msgstr "Одобрено. Маркер создан" -#: class/ShMapper.class.php:175 -msgid "Contacts" -msgstr "Контакты" +#: class/ShMapper_ajax.class.php:232 +msgid "Request put to Trash" +msgstr "Запрос отправлен в корзину" -#: class/ShMapper.class.php:173 -msgid "Session" -msgstr "Сессия" +#: class/ShMapper_ajax.class.php:337 +#, php-format +msgid "Are you want delete %s?" +msgstr "Хотите удалить карту %s?" -#: class/ShMapper.class.php:172 class/ShmPoint.class.php:231 -#: class/ShmPoint.class.php:308 -msgid "Type" -msgstr "Тип" +#: class/ShMapper_ajax.class.php:339 +msgid "Delete" +msgstr "Удалить" -#: class/ShMapper.class.php:167 class/ShmMap.class.php:103 -#: class/ShmMap.class.php:596 class/SMC_Post.php:370 -#: class/ShmPoint.class.php:300 -msgid "Title" -msgstr "Название" +#: class/ShMapper_ajax.class.php:355 +msgid "add Map Point" +msgstr "Маркер добавлен" -#: class/ShMapper.class.php:166 class/ShmMap.class.php:70 -#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 -msgid "Map" -msgstr "Карта" +#: class/ShMapper_ajax.class.php:357 +msgid "Create" +msgstr "Создать" -#: class/ShMapper.class.php:160 -msgid "Required Personal phone" -msgstr "Требуется личный телефон" +#: class/ShMapper_ajax.class.php:385 +msgid "Success" +msgstr "Успешно" -#: class/ShMapper.class.php:159 class/ShmMap.class.php:466 -msgid "Personal phone" -msgstr "Телефон" +#: class/ShMapper_ajax.class.php:396 +msgid "Change Vocabulaty: " +msgstr "Изменён словарь: " -#: class/ShMapper.class.php:158 -msgid "Unclude Personal phone" -msgstr "Включить личный телефон" +#: class/ShMapper_ajax.class.php:417 +msgid "Yandex.Maps API key Saved" +msgstr "Ключ API Яндекс.Карт сохранен" -#: class/ShMapper.class.php:157 -msgid "Required Personal e-mail" -msgstr "Требуется личный e-mail" +#: class/ShMapper_ajax.class.php:429 class/ShMapper_ajax.class.php:440 +msgid "New coordinates saved" +msgstr "Новые координаты сохранены" -#: class/ShMapper.class.php:156 -msgid "Personal e-mail" -msgstr "Личный e-mail" +#: class/ShMapper_ajax.class.php:450 +msgid "Users can add Placemarks" +msgstr "" -#: class/ShMapper.class.php:155 -msgid "Unclude Personal e-mail" -msgstr "Включить личный телефон e-mail" +#: class/ShMapper_ajax.class.php:460 +#, fuzzy +#| msgid "Pre-modertion from Map owner." +msgid "Pre-moderation on" +msgstr "Премодерация со стороны владельца Карты." -#: class/ShMapper.class.php:154 -msgid "Required Personal name" -msgstr "Обязательно личное имя" +#: class/ShMapper_ajax.class.php:470 +#, fuzzy +#| msgid "Upload Image" +msgid "Reload mode" +msgstr "Загрузить изображение" -#: class/ShMapper.class.php:153 class/ShmMap.class.php:434 -msgid "Personal name" -msgstr "Имя" +#: class/ShMapper_ajax.class.php:480 +msgid "captha added" +msgstr "" -#: class/ShMapper.class.php:152 -msgid "Unclude Personal name" -msgstr "Включить личное имя" +#: class/ShMapper_ajax.class.php:490 class/ShMapper_ajax.class.php:501 +msgid "Set key" +msgstr "Ключ установлен" -#: class/ShMapper.class.php:151 class/ShmMap.class.php:421 -msgid "Users can leave their contact details for feedback." -msgstr "Пользователи могут оставлять свои контактные данные для обратной связи" +#: class/ShmAdminPage.class.php:27 +msgid "shMapper developers chat" +msgstr "Чат разработчиков shMapper" -#: class/ShMapper.class.php:150 -msgid "Form generator" -msgstr "Генератор форм" +#: class/ShmForm.class.php:14 +msgid "Place the mark to Map" +msgstr "Укажите место" -#: class/ShMapper.class.php:149 -msgid "Form Title" -msgstr "Заголовок Формы" +#: class/ShmForm.class.php:22 +msgid "Put a title" +msgstr "Укажите название" -#: class/ShMapper.class.php:148 class/ShmMap.class.php:122 -#: class/ShmMap.class.php:401 -msgid "Notify owner of Map" -msgstr "Присылать уведомления о новых картах автору" +#: class/ShmForm.class.php:43 +msgid "Whrite description" +msgstr "Напишите комментарий" -#: class/ShMapper.class.php:147 class/ShmMap.class.php:117 -msgid "Form exists" -msgstr "Форма присутствует" +#: class/ShmForm.class.php:56 +msgid "input title" +msgstr "напишите заголовок" -#: class/ShMapper.class.php:145 -msgid "Default Marker icon" -msgstr "Иконка маркера по умолчанию" +#: class/ShmForm.class.php:62 +msgid "input text" +msgstr "текстовая строка" -#: class/ShMapper.class.php:144 class/ShmMap.class.php:291 -msgid "Formating Marker to cluster" -msgstr "Укладывать маркеры карты в кластеры" +#: class/ShmForm.class.php:92 +msgid "textarea" +msgstr "текстовый блок" -#: class/ShMapper.class.php:143 class/ShmMap.class.php:295 -msgid "Lock zoom and drag" -msgstr "Заблокировать перетаскивание карты и изменение размера средним колёсиком мышы" +#: class/ShmForm.class.php:98 +msgid "input file" +msgstr "загрузка картинки" -#: class/ShMapper.class.php:142 class/ShmMap.class.php:281 -msgid "Map layer switcher" -msgstr "Переключатель слоев карты" +#: class/ShmForm.class.php:104 +msgid "enabled Map markers" +msgstr "доступные маркеры" -#: class/ShMapper.class.php:141 -msgid "Map zoom slider" -msgstr "Слайдер масштаба" +#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 +#: class/ShmForm.class.php:340 +msgid "Type of element" +msgstr "Тип элемента" -#: class/ShMapper.class.php:140 class/ShmMap.class.php:287 -msgid "Map full screen" -msgstr "Полноэкранный режим" +#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 +#: class/ShmForm.class.php:334 +msgid "Label of element" +msgstr "Лейбл элемента" -#: class/ShMapper.class.php:139 class/ShmMap.class.php:273 -msgid "Map search" -msgstr "Поиск по карте" +#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 +#: class/ShmForm.class.php:336 +msgid "write title" +msgstr "напишите заголовок" -#: class/ShMapper.class.php:138 class/ShMapPointType.class.php:125 -#: class/ShMapPointType.class.php:177 class/ShmMap.class.php:252 -#: widget/ShMap.widget.php:80 -msgid "Height" -msgstr "Высота" +#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 +#: class/ShmForm.class.php:355 +msgid "Placeholder" +msgstr "Заполнитель" -#: class/ShMapper.class.php:137 class/ShMapPointType.class.php:131 -#: class/ShMapPointType.class.php:187 class/ShmMap.class.php:257 -msgid "Width" -msgstr "Ширина" +#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 +#: class/ShmForm.class.php:357 +msgid "write placeholder" +msgstr "напишите плейсхолдер" -#: class/ShMapper.class.php:136 class/ShmMap.class.php:107 -#: class/ShmMap.class.php:316 -msgid "Export csv" -msgstr "Загрузка сводки в формате csv" +#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:361 +msgid "Placemark types" +msgstr "Типы маркеров" -#: class/ShMapper.class.php:135 class/ShmMap.class.php:338 -msgid "Filters exists" -msgstr "Панель фильтров присутствует" +#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 +#: class/ShmForm.class.php:374 +msgid "write description" +msgstr "напишите описание" -#: class/ShMapper.class.php:134 class/ShmMap.class.php:112 -#: class/ShmMap.class.php:327 -msgid "Legend exists" -msgstr "Легенда присутствует" +#: class/ShmForm.class.php:231 +msgid "Element is required" +msgstr "Элемент обязателен к заполнению" -#: class/ShMapper.class.php:126 class/ShMapper.class.php:133 -msgid "Zoom" -msgstr "Увеличение" +#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 +msgid "Add before" +msgstr "Добавить перед" -#: class/ShMapper.class.php:93 -msgid "edit Maps in page" -msgstr "редактировать Карты на странице" +#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 +msgid "Add after" +msgstr "Добавить после" -#: class/ShMapper.class.php:87 -msgid "Maps" -msgstr "Карты" +#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 +msgid "Delete me" +msgstr "Удали меня" -#: class/ShMapper.class.php:81 class/ShmMap.class.php:72 -#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 -msgid "add Map" -msgstr "Добавить новую" +#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 +msgid "require" +msgstr "обязательно" -#: class/ShMapper.class.php:75 class/ShMapper.class.php:389 -#: class/ShMapper.class.php:390 -msgid "Shmapper" -msgstr "shMapper" +#: class/ShmForm.class.php:326 +msgid "enable" +msgstr "доступно" -#: class/ShMapper.class.php:27 -msgid "Unknown error." -msgstr "Неизвестная ошибка." +#: class/ShmForm.class.php:378 +msgid "The name of the parameter that refers to this element" +msgstr "Имя параметра, который ссылается на этот элемент" -#: class/ShMapper.class.php:26 -msgid "Your request has been successfully registered." -msgstr "Ваш запрос успешно зарегистрирован." +#: class/ShmForm.class.php:436 +msgid "Сhoose files" +msgstr "Выберите файл" -#: class/ShMapper.class.php:25 -msgid "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." -msgstr "Я даю свое согласие администратору сайта на обработку, в том числе автоматизированную, своих персональных данных в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +#: class/ShmForm.class.php:497 +msgid "" +"Drag choosed icon and place it to map or click it and enter exact address." +msgstr "" +"Перетащите выбранную иконку в нужное место Карты или кликните по ней и " +"введите точный адрес." -#: class/ShmForm.class.php:574 -msgid "Your phone" -msgstr "Ваш номер телефона" +#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 +#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 +#: class/ShmForm.class.php:578 +msgid "This required field" +msgstr "Обязательно для заполнения" -#: class/ShmForm.class.php:564 -msgid "Your e-mail" -msgstr "Ваш e-mail" +#: class/ShmForm.class.php:520 +msgid "Drag icon and place it to map." +msgstr "Перетащите иконку в нужное место Карты" #: class/ShmForm.class.php:553 msgid "Your name" msgstr "Ваше имя" -#: class/ShmForm.class.php:520 -msgid "Drag icon and place it to map." -msgstr "Перетащите иконку в нужное место Карты" +#: class/ShmForm.class.php:564 +msgid "Your e-mail" +msgstr "Ваш e-mail" -#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 -#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 -#: class/ShmForm.class.php:578 -msgid "This required field" -msgstr "Обязательно для заполнения" +#: class/ShmForm.class.php:574 +msgid "Your phone" +msgstr "Ваш номер телефона" -#: class/ShmForm.class.php:436 -msgid "Сhoose files" -msgstr "Выберите файл" +#: class/ShmMap.class.php:65 +msgid "Step 1. Set up your map." +msgstr "Шаг 1. Настройте Вашу карту" -#: class/ShmForm.class.php:378 -msgid "The name of the parameter that refers to this element" -msgstr "Имя параметра, который ссылается на этот элемент" +#: class/ShmMap.class.php:74 +msgid "edit Map" +msgstr "редактировать Карту" -#: class/ShmForm.class.php:326 -msgid "enable" -msgstr "доступно" +#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 +msgid "all Maps" +msgstr "Карты" -#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 -msgid "require" -msgstr "обязательно" +#: class/ShmMap.class.php:77 +msgid "view Map" +msgstr "смотреть Карту" -#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 -msgid "Delete me" -msgstr "Удали меня" +#: class/ShmMap.class.php:78 +msgid "search Map" +msgstr "искать Карту" -#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 -msgid "Add after" -msgstr "Добавить после" +#: class/ShmMap.class.php:79 +msgid "Map not found" +msgstr "Карт не найдено" -#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 -msgid "Add before" -msgstr "Добавить перед" +#: class/ShmMap.class.php:80 +msgid "no found Map in trash" +msgstr "Карт в корзине не найдено" -#: class/ShmForm.class.php:231 -msgid "Element is required" -msgstr "Элемент обязателен к заполнению" +#: class/ShmMap.class.php:102 class/ShmPoint.class.php:250 +msgid "ID" +msgstr "ID" -#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 -#: class/ShmForm.class.php:374 -msgid "write description" -msgstr "напишите описание" +#: class/ShmMap.class.php:124 +msgid "shortcodes" +msgstr "шорткоды" -#: class/ShmForm.class.php:223 class/ShmForm.class.php:295 -#: class/ShmForm.class.php:372 class/ShMapper.class.php:168 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 -msgid "Description" -msgstr "Описание" +#: class/ShmMap.class.php:125 class/ShmPoint.class.php:40 +msgid "Map markers" +msgstr "Маркеры" -#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 -#: class/ShmForm.class.php:361 -msgid "Placemark types" -msgstr "Типы маркеров" +#: class/ShmMap.class.php:145 +msgid "include all (map and request form)" +msgstr "включено все(карта и Форма запроса)" -#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 -#: class/ShmForm.class.php:357 -msgid "write placeholder" -msgstr "напишите плейсхолдер" +#: class/ShmMap.class.php:153 +msgid "only map" +msgstr "только карта" -#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 -#: class/ShmForm.class.php:355 -msgid "Placeholder" -msgstr "Заполнитель" +#: class/ShmMap.class.php:162 +msgid "only request form" +msgstr "только Форма запроса" -#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 -#: class/ShmForm.class.php:336 -msgid "write title" -msgstr "напишите заголовок" +#: class/ShmMap.class.php:186 +msgid "Including Map to post" +msgstr "Вставка карты в звпись" -#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 -#: class/ShmForm.class.php:334 -msgid "Label of element" -msgstr "Лейбл элемента" +#: class/ShmMap.class.php:198 +msgid "You can insert a card into a post or page by copying this shortcode." +msgstr "" +"Вы сможете вставить карту в запись или страницу скопировав этот шорткод" -#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 -#: class/ShmForm.class.php:340 -msgid "Type of element" -msgstr "Тип элемента" +#: class/ShmMap.class.php:212 +msgid "Step 2. May anover Users add information for Map." +msgstr "" +"Шаг 2. Смогут ли другие пользователи добавлять информацию на Вашу карту?" -#: class/ShmForm.class.php:104 -msgid "enabled Map markers" -msgstr "доступные маркеры" +#: class/ShmMap.class.php:237 +msgid "1.1. Pan map and choose zoom" +msgstr "1.1. Отцентрируйте карту и выберите масштаб" -#: class/ShmForm.class.php:98 -msgid "input file" -msgstr "загрузка картинки" +#: class/ShmMap.class.php:249 +msgid "1.2. Set size for map's div (per pixels)" +msgstr "1.2. Установите размер окна карты (в пикселях)" -#: class/ShmForm.class.php:92 -msgid "textarea" -msgstr "текстовый блок" +#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 +msgid "Empty for " +msgstr "Оставьте пустым, чтобы было " -#: class/ShmForm.class.php:62 -msgid "input text" -msgstr "текстовая строка" +#: class/ShmMap.class.php:269 +msgid "1.3. Include interface" +msgstr "1.3. Какие элементы управления картой должны присутствовать?" -#: class/ShmForm.class.php:56 -msgid "input title" -msgstr "напишите заголовок" +#: class/ShmMap.class.php:277 +msgid "Map zoom slider enabled" +msgstr "Ползунок масштаба" -#: class/ShmForm.class.php:43 -msgid "Whrite description" -msgstr "Напишите комментарий" +#: class/ShmMap.class.php:299 +msgid "Choose layers" +msgstr "Выбор типа визуализации слоя" -#: class/ShmForm.class.php:22 -msgid "Put a title" -msgstr "Укажите название" +#: class/ShmMap.class.php:313 +msgid "1.4. May User download data in *.csv?" +msgstr "1.4. Можно ли скачать данные карты в формате .csv?" -#: class/ShmForm.class.php:14 -msgid "Place the mark to Map" -msgstr "Укажите место" +#: class/ShmMap.class.php:324 +msgid "1.5. Will the legend be displayed?" +msgstr "1.5. Будет ли отображаться легенда?" -#: class/ShMapperRequest.class.php:360 -msgid "Trash" -msgstr "Корзина" +#: class/ShmMap.class.php:335 +msgid "1.6. Will Marker type filter be displayed?" +msgstr "1.6. Будет ли отображаться панель фильтрации по типам Маркеров?" -#: class/ShMapperRequest.class.php:358 -msgid "Approve" -msgstr "Одобрить" +#: class/ShmMap.class.php:346 +msgid "1.7. Default Marker icon" +msgstr "1.7. Иконка маркера по умолчанию" -#: class/ShMapperRequest.class.php:337 -msgid "You may see this %s" -msgstr "Вы можете посмотреть его здесь %s" +#: class/ShmMap.class.php:351 +msgid "Recommended size is 64х64 px, format is .png" +msgstr "Рекомендуемый размер: 64х64 pxб формат .png" -#: class/ShMapperRequest.class.php:335 -msgid "<%s> Request to your Map from [%s] [%s]" -msgstr "<%s> Новый карт-запрос от [%s] [%s]" +#: class/ShmMap.class.php:383 +msgid "Enable crowdsourcing function (free add Users new Markers)" +msgstr "" +"Включить функцию краудсорсинга (свободного добавления Пользователями новых " +"Маркеров) " -#: class/ShMapperRequest.class.php:327 -msgid "Uknown User" -msgstr "некто Имярек" +#: class/ShmMap.class.php:388 +msgid "2.1. What is the name of your information form?" +msgstr "2.1. Как называется Ваша форма сбора информации?" -#: class/ShMapperRequest.class.php:88 class/ShMapper.class.php:123 -#: class/ShMapper.class.php:171 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:250 -msgid "Location" -msgstr "Адрес" +#: class/ShmMap.class.php:392 +msgid "For example «All beaches by the river»" +msgstr "Например «Все пляжи у реки»" -#: class/ShMapperRequest.class.php:86 class/ShMapper.class.php:125 -#: class/ShMapper.class.php:132 class/ShMapper.class.php:170 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 -msgid "Longitude" -msgstr "Долгота" +#: class/ShmMap.class.php:398 +msgid "2.2. Will I notify the author about new posts?" +msgstr "2.2. Оповещать ли автора Карты о новых сообщениях?" -#: class/ShMapperRequest.class.php:84 class/ShMapper.class.php:124 -#: class/ShMapper.class.php:131 class/ShMapper.class.php:169 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 -msgid "Latitude" -msgstr "Широта" +#: class/ShmMap.class.php:406 +msgid "2.3. What information can users enter?" +msgstr "2.3. Какую информацию могут вводить пользователи?" -#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 -msgid "GEO location" -msgstr "гео-позиция" +#: class/ShmMap.class.php:409 +msgid "" +"You can create your own forms using form elements: & laquo; Text line & " +"raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & " +"laquo; Categories of Markers & raquo;" +msgstr "" +"Вы можете создавать собственные формы, используя элементы формы: «" +"Строка текста», «Поле текста», «Загрузка " +"файлов», «Категории Маркеров»" -#: class/ShMapperRequest.class.php:67 class/ShMapper.class.php:174 -#: class/ShmMap.class.php:126 -msgid "Author" -msgstr "Автор" +#: class/ShmMap.class.php:418 +msgid "2.4. Can users leave their contact information?" +msgstr "2.4. Могут ли пользователи оставлять свою контактную информацию?" -#: class/ShMapperRequest.class.php:64 -msgid "Approving" -msgstr "Одобрение" +#: class/ShmMap.class.php:426 +msgid "2.5. What data users will have to put?" +msgstr "2.5. Какие данные пользователи должны будут ставить?" -#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 -msgid "Image" -msgstr "Изображение" +#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 +#: class/ShmMap.class.php:461 +msgid "Include" +msgstr "Включать" -#: class/ShMapperRequest.class.php:29 -msgid "no found Map Request in trash" -msgstr "Карт-запросы в корзине не найдены" +#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 +#: class/ShmMap.class.php:471 +msgid "Required" +msgstr "Обязателен" -#: class/ShMapperRequest.class.php:28 -msgid "Map Request not found" -msgstr "Запрос не найден" +#: class/ShmMap.class.php:450 +msgid "Personal email" +msgstr "Адрес электронной почты" -#: class/ShMapperRequest.class.php:27 -msgid "search Map Request" -msgstr "искать Карт-запрос" +#: class/ShmMap.class.php:665 +msgid "What do with placemarks of deleting Map?" +msgstr "Что делать с Маркерами удаляемой Карты?" -#: class/ShMapperRequest.class.php:26 -msgid "view Map Request" -msgstr "смотреть Карт-запрос" +#: class/ShmMap.class.php:670 +msgid "Delete all Points" +msgstr "Удалить все Маркеры" -#: class/ShMapperRequest.class.php:25 class/ShMapperRequest.class.php:30 -#: class/ShMapper.class.php:112 -msgid "all Map Requests" -msgstr "Карт-запросы" +#: class/ShmMap.class.php:676 +msgid "Escape all Points without Owner Map" +msgstr "Оставить все Маркеры без родительской Карты" -#: class/ShMapperRequest.class.php:23 -msgid "edit Map Request" -msgstr "редактировать Карт-запрос" +#: class/ShmMap.class.php:682 +msgid "Switch all Points to anover Map" +msgstr "Перенести все Маркеры на другую Карту" -#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 -#: class/ShMapperRequest.class.php:24 -msgid "add Map Request" -msgstr "Добавить новый" +#: class/ShmMap.class.php:768 +#, php-format +msgid "Succesfuly delete map width %s points" +msgstr "Карта успешно удалена с %s точками" -#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 -msgid "Map Request" -msgstr "Карт-запрос" +#: class/ShmMap.class.php:773 +#, php-format +msgid "Succesfuly delete map and %s points are orphans now" +msgstr "Карта успешно удалена и %s точек сейчас не привязаны ни к какой карте" -#: class/ShMapper_ajax.class.php:456 class/ShMapper_ajax.class.php:467 -msgid "Set key" -msgstr "Ключ установлен" +#: class/ShmMap.class.php:780 +#, php-format +msgid "Succesfuly delete map and %s points migrates to %s" +msgstr "Карта успешно удалена и %s точек перенесено в %s" -#: class/ShMapper_ajax.class.php:396 -msgid "Change Vocabulaty: " -msgstr "Изменён словарь: " +#: class/ShmPoint.class.php:29 class/ShmPoint.class.php:30 +msgid "Map marker" +msgstr "Маркер" -#: class/ShMapper_ajax.class.php:357 -msgid "Create" -msgstr "Создать" +#: class/ShmPoint.class.php:31 class/ShmPoint.class.php:32 +#: class/ShmPoint.class.php:34 +msgid "add Map marker" +msgstr "Добавить новый" -#: class/ShMapper_ajax.class.php:355 -msgid "add Map Point" -msgstr "Маркер добавлен" +#: class/ShmPoint.class.php:33 +msgid "edit Map marker" +msgstr "редактировать Маркер" -#: class/ShMapper_ajax.class.php:339 -msgid "Delete" -msgstr "Удалить" +#: class/ShmPoint.class.php:35 +msgid "all Map markers" +msgstr "Маркеры" -#: class/ShMapper_ajax.class.php:337 -msgid "Are you want delete %s?" -msgstr "Хотите удалить карту %s?" +#: class/ShmPoint.class.php:36 +msgid "view Map marker" +msgstr "смотреть Маркер" -#: class/ShMapper_ajax.class.php:232 -msgid "Request put to Trash" -msgstr "Запрос отправлен в корзину" +#: class/ShmPoint.class.php:37 +msgid "search Map marker" +msgstr "искать Маркер" -#: class/ShMapper_ajax.class.php:220 -msgid "Approve succesfully and insert new Map marker" -msgstr "Одобрено. Маркер создан" +#: class/ShmPoint.class.php:38 +msgid "Map marker not found" +msgstr "Маркер не найден" -#: class/ShMapper_ajax.class.php:206 -msgid "Wizzard restarted" -msgstr "Мастер запущен сызнова" +#: class/ShmPoint.class.php:39 +msgid "no found Map marker in trash" +msgstr "Маркеры в корзине не найдены" -#: class/ShMapper_ajax.class.php:195 -msgid "Wizzard closed" -msgstr "Мастер закрыт" +#: class/ShmPoint.class.php:177 +msgid "Map owner" +msgstr "Родительская карта" -#: class/ShMapper_ajax.class.php:177 -msgid "Congratulation! That's all!" -msgstr "Поздравляем! Это всё." +#: class/ShmPoint.class.php:331 +msgid "Address" +msgstr "Адрес" -#: class/ShMapper_ajax.class.php:170 class/ShMapper.class.php:605 -msgid "Next step" -msgstr "Следующий шаг" +#: shortcode/shmMap.shortcode.php:19 +msgid "No map on ID " +msgstr "Не указан ID карты" #: shortcode/shmMap.shortcode.php:43 msgid "Send request" msgstr "Отправить информацию" -#: shortcode/shmMap.shortcode.php:19 -msgid "No map on ID " -msgstr "Не указан ID карты" +#: tpl/input_file_form.php:64 +msgid "Upload Image" +msgstr "Загрузить изображение" -#. Author URI of the plugin -msgid "https://te-st.ru" -msgstr "https://te-st.ru" +#: tpl/input_file_form.php:66 +msgid "File" +msgstr "Файл" -#. Author of the plugin -msgid "Teplitsa. Technologies for Social Good" -msgstr "Теплица социальных технологий" +#: tpl/input_file_form.php:72 +msgid "Browse" +msgstr "Просмотр" -#. Description of the plugin -msgid "Location and logistics services for NKO" -msgstr "Картографирование на службе НКО" +#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 +msgid "Remove" +msgstr "Удалить" -#. Plugin URI of the plugin -msgid "http://genagl.ru/?p=652" -msgstr "http://genagl.ru/?p=652" +#: tpl/input_file_form.php:77 +msgid "Insert" +msgstr "Вставить" + +#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 +msgid "Submit" +msgstr "Отправить" + +#: tpl/shmMap.php:83 +#, php-format +msgid "download %s.csv" +msgstr "скачать %s.csv" + +#: widget/ShMap.widget.php:9 +msgid "Shmapper Locations" +msgstr "Области Shmapper" + +#: widget/ShMap.widget.php:16 +msgid "Ermak Locations" +msgstr "Области Ermak" + +#: widget/ShMap.widget.php:17 +msgid "Player Cabinet" +msgstr "Кабинет" -#. Plugin Name of the plugin +#: widget/ShMap.widget.php:64 +msgid "Tite" +msgstr "Название" + +#. Plugin Name of the plugin/theme msgid "ShMapper by Teplitsa" msgstr "ShMapper by Teplitsa" -msgid "Yandex.Maps API key Saved" -msgstr "Ключ API Яндекс.Карт сохранен" +#. Plugin URI of the plugin/theme +msgid "http://genagl.ru/?p=652" +msgstr "http://genagl.ru/?p=652" -msgid "Yandex.Maps API Key" -msgstr "Ключ API Яндекс.Карт" +#. Description of the plugin/theme +msgid "Location and logistics services for NKO" +msgstr "Картографирование на службе НКО" -msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." -msgstr "ВНИМАНИЕ: необходимо указать ключ для работы с API Яндекс.Карт." +#. Author of the plugin/theme +msgid "Teplitsa. Technologies for Social Good" +msgstr "Теплица социальных технологий" -msgid "Learn more here:" -msgstr "Подробнее здесь:" +#. Author URI of the plugin/theme +msgid "https://te-st.ru" +msgstr "https://te-st.ru" + +#~ msgid "Error: no map" +#~ msgstr "Ошибка: нет карты" + +#~ msgid "Yandex Map" +#~ msgstr "Яндекс карты" -msgid "Yandex.Maps" -msgstr "Яндекс.Карты" \ No newline at end of file +#~ msgid "Yandex.Maps" +#~ msgstr "Яндекс.Карты" diff --git a/languages/shmapper-by-teplitsa.pot b/languages/shmapper-by-teplitsa.pot index 19ee0ab..7ce1869 100644 --- a/languages/shmapper-by-teplitsa.pot +++ b/languages/shmapper-by-teplitsa.pot @@ -3,14 +3,14 @@ msgid "" msgstr "" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "Project-Id-Version: ShMapper by Teplitsa\n" -"POT-Creation-Date: 2020-06-22 07:31+0300\n" +"POT-Creation-Date: 2020-09-23 13:48+0300\n" "PO-Revision-Date: 2020-06-18 05:16+0300\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3.1\n" +"X-Generator: Poedit 2.4.1\n" "X-Poedit-Basepath: ..\n" "X-Poedit-WPHeader: shmapper.php\n" "X-Poedit-SourceCharset: UTF-8\n" @@ -22,7 +22,7 @@ msgstr "" #: class/SMC_Post.php:370 class/ShMapper.class.php:170 #: class/ShmMap.class.php:103 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:300 +#: class/ShmPoint.class.php:319 msgid "Title" msgstr "" @@ -30,8 +30,8 @@ msgstr "" msgid "Double" msgstr "" -#: class/SMC_Post.php:542 class/ShmPoint.class.php:234 -#: class/ShmPoint.class.php:460 class/ShmPoint.class.php:476 +#: class/SMC_Post.php:542 class/ShmPoint.class.php:253 +#: class/ShmPoint.class.php:499 class/ShmPoint.class.php:515 msgid "Usage in Maps: " msgstr "" @@ -52,7 +52,7 @@ msgid "Parameters" msgstr "" #: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 -#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:107 +#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:126 msgid "Map marker type" msgstr "" @@ -124,7 +124,7 @@ msgstr "" msgid "Width" msgstr "" -#: class/ShMapPointType.class.php:358 +#: class/ShMapPointType.class.php:361 msgid "None" msgstr "" @@ -143,8 +143,8 @@ msgstr "" msgid "Unknown error." msgstr "" -#: class/ShMapper.class.php:78 class/ShMapper.class.php:392 -#: class/ShMapper.class.php:393 +#: class/ShMapper.class.php:78 class/ShMapper.class.php:396 +#: class/ShMapper.class.php:397 msgid "Shmapper" msgstr "" @@ -168,23 +168,26 @@ msgstr "" #: class/ShMapper.class.php:126 class/ShMapper.class.php:174 #: class/ShMapperRequest.class.php:88 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:250 +#: class/ShmPoint.class.php:269 msgid "Location" msgstr "" #: class/ShMapper.class.php:127 class/ShMapper.class.php:134 -#: class/ShMapper.class.php:172 class/ShMapperRequest.class.php:84 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:246 +#: class/ShMapper.class.php:172 class/ShMapper.class.php:602 +#: class/ShMapperRequest.class.php:84 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:265 msgid "Latitude" msgstr "" #: class/ShMapper.class.php:128 class/ShMapper.class.php:135 -#: class/ShMapper.class.php:173 class/ShMapperRequest.class.php:86 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:248 +#: class/ShMapper.class.php:173 class/ShMapper.class.php:600 +#: class/ShMapperRequest.class.php:86 class/ShmMap.class.php:596 +#: class/ShmPoint.class.php:267 msgid "Longitude" msgstr "" #: class/ShMapper.class.php:129 class/ShMapper.class.php:136 +#: class/ShMapper.class.php:604 msgid "Zoom" msgstr "" @@ -294,12 +297,12 @@ msgstr "" #: class/ShMapper.class.php:171 class/ShmForm.class.php:223 #: class/ShmForm.class.php:295 class/ShmForm.class.php:372 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:304 +#: class/ShmMap.class.php:596 class/ShmPoint.class.php:323 msgid "Description" msgstr "" -#: class/ShMapper.class.php:175 class/ShmPoint.class.php:231 -#: class/ShmPoint.class.php:308 +#: class/ShMapper.class.php:175 class/ShmPoint.class.php:250 +#: class/ShmPoint.class.php:327 msgid "Type" msgstr "" @@ -328,19 +331,19 @@ msgstr "" msgid "Accessed User" msgstr "" -#: class/ShMapper.class.php:275 class/ShMapper.class.php:371 +#: class/ShMapper.class.php:278 class/ShMapper.class.php:375 msgid "Attantion" msgstr "" -#: class/ShMapper.class.php:276 class/ShMapper.class.php:372 +#: class/ShMapper.class.php:279 class/ShMapper.class.php:376 msgid "Send" msgstr "" -#: class/ShMapper.class.php:277 class/ShMapper.class.php:373 +#: class/ShMapper.class.php:280 class/ShMapper.class.php:377 msgid "Close" msgstr "" -#: class/ShMapper.class.php:278 class/ShMapper.class.php:374 +#: class/ShMapper.class.php:281 class/ShMapper.class.php:378 msgid "" "Error: the form is not associated with the card. To link a map and a form, " "there should be 2 shortcodes on one page (map - [shmMap id = '6' map = " @@ -348,129 +351,133 @@ msgid "" "uniq = 'for example, 777']), in which the uniq parameter will match" msgstr "" -#: class/ShMapper.class.php:279 +#: class/ShMapper.class.php:282 msgid "Are you shure?" msgstr "" -#: class/ShMapper.class.php:405 class/ShMapper.class.php:406 -#: class/ShMapper.class.php:420 +#: class/ShMapper.class.php:409 class/ShMapper.class.php:410 +#: class/ShMapper.class.php:438 msgid "Settings" msgstr "" -#: class/ShMapper.class.php:429 +#: class/ShMapper.class.php:447 msgid "Map API" msgstr "" -#: class/ShMapper.class.php:436 -msgid "Yandex.Maps" -msgstr "" - -#: class/ShMapper.class.php:442 +#: class/ShMapper.class.php:460 msgid "OpenStreetMap" msgstr "" -#: class/ShMapper.class.php:450 +#: class/ShMapper.class.php:468 msgid "Yandex.Maps API Key" msgstr "" -#: class/ShMapper.class.php:452 +#: class/ShMapper.class.php:470 msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." msgstr "" -#: class/ShMapper.class.php:452 +#: class/ShMapper.class.php:470 msgid "Learn more here:" msgstr "" -#: class/ShMapper.class.php:463 +#: class/ShMapper.class.php:481 msgid "Interactive" msgstr "" -#: class/ShMapper.class.php:471 +#: class/ShMapper.class.php:489 msgid "Включить глобальный режим неинтерактивных карт" msgstr "" -#: class/ShMapper.class.php:475 +#: class/ShMapper.class.php:493 msgid "" "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " "включена у карт даже не появляется блок интерактивности." msgstr "" -#: class/ShMapper.class.php:483 +#: class/ShMapper.class.php:501 msgid "Pre-modertion from Map owner." msgstr "" -#: class/ShMapper.class.php:487 +#: class/ShMapper.class.php:505 msgid "все сообщения будут добавляться в статусе «Черновик»" msgstr "" -#: class/ShMapper.class.php:491 +#: class/ShMapper.class.php:509 msgid "" "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует " "угроза спам-атаки" msgstr "" -#: class/ShMapper.class.php:499 +#: class/ShMapper.class.php:517 msgid "Reload page after User send request." msgstr "" -#: class/ShMapper.class.php:511 +#: class/ShMapper.class.php:529 msgid "Protection" msgstr "" -#: class/ShMapper.class.php:518 +#: class/ShMapper.class.php:536 msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" msgstr "" -#: class/ShMapper.class.php:527 +#: class/ShMapper.class.php:545 #, php-format msgid "" "What is Google reCAPTCHA? How recived keys for your site? See %sthis " "instruction%s." msgstr "" -#: class/ShMapper.class.php:531 +#: class/ShMapper.class.php:549 msgid "" "Your reCAPTCHA doesn't work yet. In order to make it work, please get the " "API keys at google.com/recaptcha" msgstr "" -#: class/ShMapper.class.php:543 +#: class/ShMapper.class.php:561 msgid "Vocabulary" msgstr "" -#: class/ShMapper.class.php:547 +#: class/ShMapper.class.php:565 msgid "Save personal data garantee" msgstr "" -#: class/ShMapper.class.php:553 +#: class/ShMapper.class.php:571 msgid "Successful send map request" msgstr "" -#: class/ShMapper.class.php:559 +#: class/ShMapper.class.php:577 msgid "Error send map request" msgstr "" -#: class/ShMapper.class.php:571 +#: class/ShMapper.class.php:591 class/ShMapper.class.php:614 +msgid "Coordinates" +msgstr "" + +#: class/ShMapper.class.php:598 +msgid "Set default coordinates" +msgstr "" + +#: class/ShMapper.class.php:703 msgid "Wizzard" msgstr "" -#: class/ShMapper.class.php:574 +#: class/ShMapper.class.php:706 msgid "Restart wizzard" msgstr "" -#: class/ShMapper.class.php:616 class/ShMapper.class.php:624 +#: class/ShMapper.class.php:746 class/ShMapper.class.php:754 msgid "Close wizzard" msgstr "" -#: class/ShMapper.class.php:617 class/ShMapper.class.php:623 +#: class/ShMapper.class.php:747 class/ShMapper.class.php:753 msgid "Go to current page" msgstr "" -#: class/ShMapper.class.php:620 class/ShMapper_ajax.class.php:170 +#: class/ShMapper.class.php:750 class/ShMapper_ajax.class.php:170 msgid "Next step" msgstr "" -#: class/ShMapper.class.php:622 +#: class/ShMapper.class.php:752 msgid "Prevous step" msgstr "" @@ -503,7 +510,7 @@ msgstr "" msgid "no found Map Request in trash" msgstr "" -#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:233 +#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:252 msgid "Image" msgstr "" @@ -511,7 +518,7 @@ msgstr "" msgid "Approving" msgstr "" -#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:232 +#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:251 msgid "GEO location" msgstr "" @@ -582,31 +589,39 @@ msgstr "" msgid "Create" msgstr "" +#: class/ShMapper_ajax.class.php:385 +msgid "Success" +msgstr "" + #: class/ShMapper_ajax.class.php:396 msgid "Change Vocabulaty: " msgstr "" -#: class/ShMapper_ajax.class.php:416 +#: class/ShMapper_ajax.class.php:417 msgid "Yandex.Maps API key Saved" msgstr "" -#: class/ShMapper_ajax.class.php:427 +#: class/ShMapper_ajax.class.php:429 class/ShMapper_ajax.class.php:440 +msgid "New coordinates saved" +msgstr "" + +#: class/ShMapper_ajax.class.php:450 msgid "Users can add Placemarks" msgstr "" -#: class/ShMapper_ajax.class.php:437 +#: class/ShMapper_ajax.class.php:460 msgid "Pre-moderation on" msgstr "" -#: class/ShMapper_ajax.class.php:447 +#: class/ShMapper_ajax.class.php:470 msgid "Reload mode" msgstr "" -#: class/ShMapper_ajax.class.php:457 +#: class/ShMapper_ajax.class.php:480 msgid "captha added" msgstr "" -#: class/ShMapper_ajax.class.php:467 class/ShMapper_ajax.class.php:478 +#: class/ShMapper_ajax.class.php:490 class/ShMapper_ajax.class.php:501 msgid "Set key" msgstr "" @@ -768,7 +783,7 @@ msgstr "" msgid "no found Map in trash" msgstr "" -#: class/ShmMap.class.php:102 class/ShmPoint.class.php:231 +#: class/ShmMap.class.php:102 class/ShmPoint.class.php:250 msgid "ID" msgstr "" @@ -776,7 +791,7 @@ msgstr "" msgid "shortcodes" msgstr "" -#: class/ShmMap.class.php:125 class/ShmPoint.class.php:34 +#: class/ShmMap.class.php:125 class/ShmPoint.class.php:40 msgid "Map markers" msgstr "" @@ -928,44 +943,44 @@ msgstr "" msgid "Succesfuly delete map and %s points migrates to %s" msgstr "" -#: class/ShmPoint.class.php:23 class/ShmPoint.class.php:24 +#: class/ShmPoint.class.php:29 class/ShmPoint.class.php:30 msgid "Map marker" msgstr "" -#: class/ShmPoint.class.php:25 class/ShmPoint.class.php:26 -#: class/ShmPoint.class.php:28 +#: class/ShmPoint.class.php:31 class/ShmPoint.class.php:32 +#: class/ShmPoint.class.php:34 msgid "add Map marker" msgstr "" -#: class/ShmPoint.class.php:27 +#: class/ShmPoint.class.php:33 msgid "edit Map marker" msgstr "" -#: class/ShmPoint.class.php:29 +#: class/ShmPoint.class.php:35 msgid "all Map markers" msgstr "" -#: class/ShmPoint.class.php:30 +#: class/ShmPoint.class.php:36 msgid "view Map marker" msgstr "" -#: class/ShmPoint.class.php:31 +#: class/ShmPoint.class.php:37 msgid "search Map marker" msgstr "" -#: class/ShmPoint.class.php:32 +#: class/ShmPoint.class.php:38 msgid "Map marker not found" msgstr "" -#: class/ShmPoint.class.php:33 +#: class/ShmPoint.class.php:39 msgid "no found Map marker in trash" msgstr "" -#: class/ShmPoint.class.php:158 +#: class/ShmPoint.class.php:177 msgid "Map owner" msgstr "" -#: class/ShmPoint.class.php:312 +#: class/ShmPoint.class.php:331 msgid "Address" msgstr "" diff --git a/tpl/shmMap.php b/tpl/shmMap.php index 6b99921..020e022 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -172,6 +172,14 @@ function draw_shMap($map, $args ) else if (map_type == 2) init_map( mData, points ); + // Disable submit post form on this page. + $('form#post').on('keyup keypress', function(e) { + var keyCode = e.keyCode || e.which; + if (keyCode === 13) { + e.preventDefault(); + return false; + } + }); }); jQuery(\"\").appendTo('head'); From 0ba1d56ade9975b25f2d709354170c654d2214c1 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 24 Nov 2020 07:18:50 +0300 Subject: [PATCH 067/220] Escape marker args. --- tpl/shmMap.php | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/tpl/shmMap.php b/tpl/shmMap.php index 020e022..137681f 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -100,26 +100,27 @@ function draw_shMap($map, $args ) "]; -//line javascript - foreach($points as $point) - { + //line javascript. + foreach ( $points as $point ) { $p .= " var p = {}; - p.post_id = '" . $point->ID . "'; + p.post_id = '" . esc_attr( $point->ID ) . "'; p.post_title = '" . $point->post_title . "'; - p.post_content = '
      " . html_entity_decode( esc_js($point->post_content) ) . "
      ID) . "\" class=\"shm-no-uline\">
      " . esc_js($point->location) . "
      '; - p.latitude = '" . $point->latitude . "'; - p.longitude = '" . $point->longitude . "'; - p.location = '" . esc_js($point->location) . "'; - p.type = '" . $point->type . "'; - p.term_id = '" . $point->term_id . "'; - p.icon = '" . $point->icon . "'; - p.color = '" . $point->color . "'; - p.height = " . $point->height . "; - p.width = " . $point->width . "; + p.post_title = '" . esc_html( $point->post_title ) . "'; + p.post_content = '
      " . html_entity_decode( esc_js( $point->post_content ) ) . "
      ID ) . "\" class=\"shm-no-uline\">
      " . esc_js( $point->location ) . "
      '; + p.latitude = '" . esc_attr( $point->latitude ) . "'; + p.longitude = '" . esc_attr( $point->longitude ) . "'; + p.location = '" . esc_js( $point->location ) . "'; + p.type = '" . esc_attr( $point->type ) . "'; + p.term_id = '" . esc_attr( $point->term_id ) . "'; + p.icon = '" . esc_attr( $point->icon ) . "'; + p.color = '" . esc_attr( $point->color ) . "'; + p.height = " . esc_attr( $point->height ) . "; + p.width = " . esc_attr( $point->width ) . "; points.push(p); "; } + $desabled = $is_lock ? " myMap.behaviors.disable('scrollZoom'); myMap.behaviors.disable('drag'); From 972dad1b52095f27d18893825c1b66a9f2deae35 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 1 Dec 2020 09:07:14 +0200 Subject: [PATCH 068/220] Fix: Symbol ' breaks the script ShMapper.class.php --- tpl/shmMap.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tpl/shmMap.php b/tpl/shmMap.php index 137681f..9118cdb 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -105,7 +105,6 @@ function draw_shMap($map, $args ) $p .= " var p = {}; p.post_id = '" . esc_attr( $point->ID ) . "'; - p.post_title = '" . $point->post_title . "'; p.post_title = '" . esc_html( $point->post_title ) . "'; p.post_content = '
      " . html_entity_decode( esc_js( $point->post_content ) ) . "
      ID ) . "\" class=\"shm-no-uline\">
      " . esc_js( $point->location ) . "
      '; p.latitude = '" . esc_attr( $point->latitude ) . "'; From fe31846ec32e7f619272b231202b67131921fb37 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 1 Dec 2020 09:11:42 +0200 Subject: [PATCH 069/220] Escape post_title. --- class/ShmPoint.class.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index 4840e3d..4c5ce83 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -437,13 +437,13 @@ function draw() { { var points = [], p = {}; - p.post_id = '" . $point->ID . "'; - p.post_title = '" . $post_title . "'; + p.post_id = '" . esc_attr( $point->ID ) . "'; + p.post_title = '" . esc_html( $post_title ) . "'; p.post_content = '" . html_entity_decode( esc_js($post_content) )." ID) . "\" class=\"shm-no-uline\">
      " . esc_js($location) . "
      '; - p.latitude = '" . $latitude . "'; - p.longitude = '" . $longitude . "'; + p.latitude = '" . esc_attr( $latitude ) . "'; + p.longitude = '" . esc_attr( $longitude ) . "'; p.location = '" . esc_js($location) . "'; - p.draggable = ".(is_admin() ? 1 : 0)."; + p.draggable = " . ( is_admin() ? 1 : 0) . "; p.type = '" . $term_id . "'; p.height = '" . get_term_meta($term_id, "height", true) . "'; p.width = '" . get_term_meta($term_id, "width", true) . "'; From 828b0a5f45a1c8ec3f775a60560ee6d691880fa4 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 1 Dec 2020 09:51:51 +0200 Subject: [PATCH 070/220] Fix: Wizard no have correct link on click play button --- assets/js/ShMapper.js | 9 ++++----- class/ShMapper.class.php | 11 +++++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/assets/js/ShMapper.js b/assets/js/ShMapper.js index 6fcbb0d..463f348 100644 --- a/assets/js/ShMapper.js +++ b/assets/js/ShMapper.js @@ -38,10 +38,9 @@ function shmapperIsMobileView() { jQuery(document).ready(function($) { // ajax - $("[name='shm_wnext']").live({click:function(evt) - { - shm_send(['shm_wnext']); - }}); + $( '[name="shm_wnext"]' ).on( 'click', function() { + shm_send(['shm_wnext']); + }); $(".shm_doubled[post_id]").live({click:function(evt) { evt.preventDefault(); @@ -522,7 +521,7 @@ function shm_send( params, type ) window.location.href = datas['href']; $(".shm_wizzard").detach(); $(".shm_wizzard_current").removeClass("shm_wizzard_current"); - break; + break; case "shm_delete_map_hndl": shm_close_modal(); jQuery("#post-"+datas['id']).slideUp( 800 ).hide("slow"); diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index 9b6933e..ad1f0a9 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -771,6 +771,9 @@ function shm_show_wizz() { loc = jQuery('" . (empty($stepData["parent_selector"]) ? '' : $stepData["parent_selector"]) . "').offset(); } + if ( typeof loc === 'undefined' ) { + loc = jQuery('#toplevel_page_shm_page').offset(); + } jQuery('#shm_wizzard').appendTo('#adminmenu').hide().fadeIn('slow').css({top: loc.top - 15}); jQuery('#shm_wizzard_closed').appendTo('#adminmenu').hide().css({top: loc.top - 28}); jQuery('" .(empty($stepData["alt_selector"]) ? '' : $stepData["alt_selector"]) . "').each((num, elem) => { @@ -798,21 +801,21 @@ static function get_wizzard_lst() "text" => "Сначала необходимо указать общие настройки. Нажмите на кнопку чтобы перейти в нужный раздел", "selector" => ' a[href="admin.php?page=shm_page"].toplevel_page_shm_page', "parent_selector" => '#toplevel_page_shm_page', - "href" => "/wp-admin/admin.php?page=shm_page" + "href" => admin_url( 'admin.php?page=shm_page' ), ], [ "title" => "Настройте Shmapper", "text" => "Измените настройки, которые Вас не устраивают. Для подключения reCAPTCHA необходимо создать учётную запись на Google.com", "selector" => ' a[href="admin.php?page=shm_page"].toplevel_page_shm_page', "parent_selector" => '#toplevel_page_shm_page', - "href" => '/wp-admin/admin.php?page=shm_page', + "href" => admin_url( 'admin.php?page=shm_page' ), ], [ "title" => "Создайте вашу первую карту", "text" => "Нажмите кнопку \"Добавить карту\" в самом верху страницы", "selector" => '#adminmenuwrap a[href=\"edit.php?post_type=shm_map\"]', "alt_selector" => "body.post-type-shm_map .page-title-action" , - "href" => '/wp-admin/edit.php?post_type=shm_map', + "href" => admin_url( 'edit.php?post_type=shm_map' ), ], [ "title" => "Новая карта", @@ -820,7 +823,7 @@ static function get_wizzard_lst() "selector" => '#adminmenuwrap a[href=\"edit.php?post_type=shm_map\"]', "alt_selector" => 'body.post-type-shm_map #publish', "parent_selector" => '#adminmenuwrap .toplevel_page_shm_page', - "href" => '/wp-admin/post-new.php?post_type=shm_map', + "href" => admin_url( 'edit.php?post_type=shm_map' ), ], [ "title" => "Новая карта", From 50e259555457913cca998ba0b9d9d278533343ad Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 1 Dec 2020 11:36:38 +0200 Subject: [PATCH 071/220] Fix: undefined variables or index. --- class/ShMapPointType.class.php | 19 +++++++++++++----- class/ShMapper.class.php | 11 +++++++++-- class/ShmForm.class.php | 11 +++++++---- class/ShmMap.class.php | 16 ++++++++++++++-- class/ShmPoint.class.php | 35 ++++++++++++++++++++++++---------- tpl/shmMap.php | 7 +++++-- 6 files changed, 74 insertions(+), 25 deletions(-) diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index bba72a3..9f9552e 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -96,8 +96,8 @@ static function manage_ctg_columns($out, $column_name, $term_id) break; case 'icon': $icon = get_term_meta( $term_id, 'icon', true ); - $color = get_term_meta( $term_id, 'color', true ); - $logo = wp_get_attachment_image_src($icon, "full")[0]; + $color = get_term_meta( $term_id, 'color', true ); + $logo = wp_get_attachment_image_url( $icon, "full" ); echo "
      @@ -106,11 +106,14 @@ static function manage_ctg_columns($out, $column_name, $term_id) default: break; } - return $out; + return $out; } static function new_ctg( $tax_name ) { require_once(SHM_REAL_PATH."tpl/input_file_form.php"); + if ( ! isset( $color ) ) { + $color = ''; + } ?>
    • "; - } + } $html .= "
    "; return $html; @@ -270,14 +270,12 @@ static function fill_views_column($column_name, $post_id) case "type": $terms = get_the_terms( $post_id, SHM_POINT_TYPE ); if($terms && !empty($terms[0]) && $terms[0]->term_id) { - foreach($terms as $term) { - //$term = get_term($obj->get_meta("type"), SHM_POINT_TYPE); - echo ShMapPointType::get_icon($term); - } - } + foreach($terms as $term) { + echo ShMapPointType::get_icon($term); + } + } else { -// $color = get_term_meta($type->term_id, "color", true); $owners = $obj->get_owners(); $map_id = null; if ( $owners ) { @@ -296,8 +294,6 @@ class='shm_type_icon'
    "; echo $icon; } - - //the_terms( $post_id, SHM_POINT_TYPE, "", ", ", "" ); break; case "thumb": echo "
    " ; @@ -519,7 +515,7 @@ static function my_bulk_edit_custom_box( $column_name, $post_type ) if($post_type != static::get_type()) return; ?>
    -
    +
    -
    +
    -
    +
    "; } return $html; -} \ No newline at end of file +} diff --git a/shortcode/shm_shortcodes.php b/shortcode/shm_shortcodes.php index ebc5725..8bfab5f 100644 --- a/shortcode/shm_shortcodes.php +++ b/shortcode/shm_shortcodes.php @@ -1,6 +1,11 @@
    @@ -13,28 +19,28 @@ function get_input_file_form() -
    Browse +
    ' . esc_html__( 'Browse', 'shmapper-by-teplitsa' ) . '
    - +

    -
    Or drag and drop files here
    +
    ' . esc_html__( 'Or drag and drop files here', 'shmapper-by-teplitsa' ) . '

    -
    10% Complete
    +
    10% ' . esc_html__( 'Complete', 'shmapper-by-teplitsa' ) . '

    - + '; } @@ -53,43 +59,41 @@ function get_input_file_form2($image_input_name = "image-file", $media_id='-1', "; } - - function get_input_file_form3($image_input_name = "image-file") { return '
    -

    ' . __("Upload Image", FRMRU) . '

    +

    ' . __( 'Upload Image', 'shmapper-by-teplitsa' ) . '

    - - + +
    - - + +
    - +
    - +
    - +
    - +
    '; @@ -127,4 +131,4 @@ function recurse_copy($src, $dst) } } closedir($dir); -} \ No newline at end of file +} diff --git a/tpl/shmMap.php b/tpl/shmMap.php index c52c921..3d2e2d5 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -1,4 +1,9 @@ "; + $csv = ""; } $points = $map->get_map_points(); @@ -189,4 +194,4 @@ function draw_shMap($map, $args ) "; return $html; -} \ No newline at end of file +} diff --git a/unistall.php b/unistall.php index 31a21b8..da9b68c 100644 --- a/unistall.php +++ b/unistall.php @@ -1,20 +1,23 @@ get_col( "SELECT blog_id FROM $wpdb->blogs" ); +} else { + $blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" ); $original_blog_id = get_current_blog_id(); - foreach ( $blog_ids as $blog_id ) - { + foreach ( $blog_ids as $blog_id ) { switch_to_blog( $blog_id ); - delete_site_option( SHMAPPER ); + delete_site_option( SHMAPPER ); } switch_to_blog( $original_blog_id ); } diff --git a/widget/ShMap.widget.php b/widget/ShMap.widget.php index 30321a0..c011d8a 100644 --- a/widget/ShMap.widget.php +++ b/widget/ShMap.widget.php @@ -1,95 +1,99 @@ 'Locations accordeon', 'classname' => 'widget_location_navigator') );; - add_action( 'init', array($this, 'redirect_login_page')); - } - function redirect_login_page() - { - $login_page = home_url( '/' ); - $page_viewed = basename($_SERVER['REQUEST_URI']); - $this->name = __('Ermak Locations', SHMAPPER); - $this->widget_options['description'] = __('Player Cabinet', SHMAPPER); - } - /* Widget - /* ------------------------------------ */ - public function widget($args, $instance) - { - extract( $args ); - $instance['title'] ? NULL : $instance['title'] = ''; - $instance['map_id'] ? NULL : $instance['map_id'] = ''; - $title = apply_filters('widget_title',$instance['title']); - $output = $before_widget."\n"; - if($title) - $output .= $before_title.$title.$after_title; - else - $output .= $before_title. $instance['title'].$after_title; - $map = ShmMap::get_instance($instance['map_id']); - $output .= $map->draw([ "height" => $instance['height'], "id" => $map->id ]); - $output .= $after_widget."\n"; - echo $output; - } - - /* Widget update - /* ------------------------------------ */ - public function update($new,$old) - { - $instance = $old; - $instance['title'] = strip_tags($new['title']); - $instance['map_id'] = strip_tags($new['map_id']); - $instance['height'] = strip_tags($new['height']); - return $instance; - } - - /* Widget form - /* ------------------------------------ */ - public function form($instance) - { - // Default widget settings - $defaults = array( - 'title' => '', - 'map_id' => '', - 'height' => 250, - ); - $instance = wp_parse_args( (array) $instance, $defaults ); - ?> -
    -
    -

    - - " /> -

    -

    - - "shm-form", - "name" => $this->get_field_name('map_id'), - "selected" => esc_attr($instance["map_id"]), - "id" => $instance['map_id'], - "posts" => ShmMap::get_all(), - ]); - ?> -

    -

    - - " /> -

    -
    -
    - 'Locations accordeon', 'classname' => 'widget_location_navigator') );; + add_action( 'init', array($this, 'redirect_login_page')); + } + function redirect_login_page() + { + $login_page = home_url( '/' ); + $page_viewed = basename($_SERVER['REQUEST_URI']); + $this->name = __('Ermak Locations', SHMAPPER); + $this->widget_options['description'] = __('Player Cabinet', SHMAPPER); + } + /* Widget + /* ------------------------------------ */ + public function widget($args, $instance) + { + extract( $args ); + $instance['title'] ? NULL : $instance['title'] = ''; + $instance['map_id'] ? NULL : $instance['map_id'] = ''; + $title = apply_filters('widget_title',$instance['title']); + $output = $before_widget."\n"; + if($title) + $output .= $before_title.$title.$after_title; + else + $output .= $before_title. $instance['title'].$after_title; + $map = ShmMap::get_instance($instance['map_id']); + $output .= $map->draw([ "height" => $instance['height'], "id" => $map->id ]); + $output .= $after_widget."\n"; + echo $output; + } + + /* Widget update + /* ------------------------------------ */ + public function update($new,$old) + { + $instance = $old; + $instance['title'] = strip_tags($new['title']); + $instance['map_id'] = strip_tags($new['map_id']); + $instance['height'] = strip_tags($new['height']); + return $instance; } - /* Register widget + + /* Widget form /* ------------------------------------ */ - function register_widget_shmloc_navi() { - register_widget( 'ShmLocationNavigatorWidget' ); + public function form($instance) + { + // Default widget settings + $defaults = array( + 'title' => '', + 'map_id' => '', + 'height' => 250, + ); + $instance = wp_parse_args( (array) $instance, $defaults ); + ?> +
    +
    +

    + + " /> +

    +

    + + "shm-form", + "name" => $this->get_field_name('map_id'), + "selected" => esc_attr($instance["map_id"]), + "id" => $instance['map_id'], + "posts" => ShmMap::get_all(), + ]); + ?> +

    +

    + + " /> +

    +
    +
    + \ No newline at end of file + +} + +/* Register widget +/* ------------------------------------ */ +function register_widget_shmloc_navi() { + register_widget( 'ShmLocationNavigatorWidget' ); +} +add_action( 'widgets_init', 'register_widget_shmloc_navi' ); From 36863a54d8766d38618f3dbfd90d6f31a4ba8486 Mon Sep 17 00:00:00 2001 From: BootWP Date: Mon, 7 Dec 2020 21:36:15 +0200 Subject: [PATCH 078/220] Update pot file. --- languages/shmapper-by-teplitsa.pot | 640 ++++++++++++++++------------- 1 file changed, 360 insertions(+), 280 deletions(-) diff --git a/languages/shmapper-by-teplitsa.pot b/languages/shmapper-by-teplitsa.pot index 7ce1869..fea8828 100644 --- a/languages/shmapper-by-teplitsa.pot +++ b/languages/shmapper-by-teplitsa.pot @@ -3,14 +3,14 @@ msgid "" msgstr "" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "Project-Id-Version: ShMapper by Teplitsa\n" -"POT-Creation-Date: 2020-09-23 13:48+0300\n" +"POT-Creation-Date: 2020-12-07 21:25+0200\n" "PO-Revision-Date: 2020-06-18 05:16+0300\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.1\n" +"X-Generator: Poedit 2.4.2\n" "X-Poedit-Basepath: ..\n" "X-Poedit-WPHeader: shmapper.php\n" "X-Poedit-SourceCharset: UTF-8\n" @@ -20,330 +20,330 @@ msgstr "" "X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPathExcluded-0: *.js\n" -#: class/SMC_Post.php:370 class/ShMapper.class.php:170 -#: class/ShmMap.class.php:103 class/ShmMap.class.php:596 +#: class/SMC_Post.php:372 class/ShMapper.class.php:174 +#: class/ShmMap.class.php:109 class/ShmMap.class.php:601 #: class/ShmPoint.class.php:319 msgid "Title" msgstr "" -#: class/SMC_Post.php:496 class/ShmMap.class.php:521 +#: class/SMC_Post.php:498 class/ShmMap.class.php:527 msgid "Double" msgstr "" -#: class/SMC_Post.php:542 class/ShmPoint.class.php:253 -#: class/ShmPoint.class.php:499 class/ShmPoint.class.php:515 +#: class/SMC_Post.php:543 class/ShmPoint.class.php:249 +#: class/ShmPoint.class.php:506 class/ShmPoint.class.php:523 msgid "Usage in Maps: " msgstr "" -#: class/SMC_Post.php:560 +#: class/SMC_Post.php:561 msgid "— No Change —" msgstr "" -#: class/SMC_Post.php:563 +#: class/SMC_Post.php:564 msgid "No" msgstr "" -#: class/SMC_Post.php:566 +#: class/SMC_Post.php:567 msgid "Yes" msgstr "" -#: class/SMC_Post.php:631 class/SMC_Post.php:636 +#: class/SMC_Post.php:632 class/SMC_Post.php:637 msgid "Parameters" msgstr "" -#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 -#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:126 +#: class/ShMapPointType.class.php:37 class/ShMapPointType.class.php:38 +#: class/ShMapPointType.class.php:48 class/ShmPoint.class.php:126 msgid "Map marker type" msgstr "" -#: class/ShMapPointType.class.php:34 +#: class/ShMapPointType.class.php:39 msgid "Search Map marker type" msgstr "" -#: class/ShMapPointType.class.php:35 +#: class/ShMapPointType.class.php:40 msgid "all Map marker types" msgstr "" -#: class/ShMapPointType.class.php:36 +#: class/ShMapPointType.class.php:41 msgid "view Map marker type" msgstr "" -#: class/ShMapPointType.class.php:37 +#: class/ShMapPointType.class.php:42 msgid "parent Map marker type" msgstr "" -#: class/ShMapPointType.class.php:38 +#: class/ShMapPointType.class.php:43 msgid "parent Map marker type:" msgstr "" -#: class/ShMapPointType.class.php:39 +#: class/ShMapPointType.class.php:44 msgid "edit Map marker type" msgstr "" -#: class/ShMapPointType.class.php:40 +#: class/ShMapPointType.class.php:45 msgid "update Map marker type" msgstr "" -#: class/ShMapPointType.class.php:41 +#: class/ShMapPointType.class.php:46 msgid "add Map marker type" msgstr "" -#: class/ShMapPointType.class.php:42 +#: class/ShMapPointType.class.php:47 msgid "new Map marker type name" msgstr "" -#: class/ShMapPointType.class.php:49 +#: class/ShMapPointType.class.php:54 msgid "Unique type of every Map markers" msgstr "" -#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 +#: class/ShMapPointType.class.php:79 class/ShMapPointType.class.php:80 msgid "Map marker types" msgstr "" -#: class/ShMapPointType.class.php:86 +#: class/ShMapPointType.class.php:91 msgid "Name" msgstr "" -#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 -#: class/ShMapPointType.class.php:197 +#: class/ShMapPointType.class.php:92 class/ShMapPointType.class.php:145 +#: class/ShMapPointType.class.php:205 msgid "Icon" msgstr "" -#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 +#: class/ShMapPointType.class.php:125 class/ShMapPointType.class.php:173 msgid "Color" msgstr "" -#: class/ShMapPointType.class.php:125 class/ShMapPointType.class.php:177 -#: class/ShMapper.class.php:141 class/ShmMap.class.php:252 -#: widget/ShMap.widget.php:80 +#: class/ShMapPointType.class.php:133 class/ShMapPointType.class.php:185 +#: class/ShMapper.class.php:145 class/ShmMap.class.php:258 +#: widget/ShMap.widget.php:84 msgid "Height" msgstr "" -#: class/ShMapPointType.class.php:131 class/ShMapPointType.class.php:187 -#: class/ShMapper.class.php:140 class/ShmMap.class.php:257 +#: class/ShMapPointType.class.php:139 class/ShMapPointType.class.php:195 +#: class/ShMapper.class.php:144 class/ShmMap.class.php:263 msgid "Width" msgstr "" -#: class/ShMapPointType.class.php:361 +#: class/ShMapPointType.class.php:375 msgid "None" msgstr "" -#: class/ShMapper.class.php:26 +#: class/ShMapper.class.php:30 msgid "" -"Я даю свое согласие администратору сайта на обработку, в том числе " -"автоматизированную, своих персональных данных в соответствии с Федеральным " -"законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +"I give my consent to the site administrator to process, including automated, " +"my personal data in accordance with Federal Law of 27.07.2006 N 152-FZ \"On " +"Personal Data\"." msgstr "" -#: class/ShMapper.class.php:27 +#: class/ShMapper.class.php:31 msgid "Your request has been successfully registered." msgstr "" -#: class/ShMapper.class.php:28 +#: class/ShMapper.class.php:32 msgid "Unknown error." msgstr "" -#: class/ShMapper.class.php:78 class/ShMapper.class.php:396 -#: class/ShMapper.class.php:397 +#: class/ShMapper.class.php:82 class/ShMapper.class.php:393 +#: class/ShMapper.class.php:394 msgid "Shmapper" msgstr "" -#: class/ShMapper.class.php:84 class/ShmMap.class.php:72 -#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 +#: class/ShMapper.class.php:88 class/ShmMap.class.php:78 +#: class/ShmMap.class.php:79 class/ShmMap.class.php:81 msgid "add Map" msgstr "" -#: class/ShMapper.class.php:90 +#: class/ShMapper.class.php:94 msgid "Maps" msgstr "" -#: class/ShMapper.class.php:96 +#: class/ShMapper.class.php:100 msgid "edit Maps in page" msgstr "" -#: class/ShMapper.class.php:115 class/ShMapperRequest.class.php:25 -#: class/ShMapperRequest.class.php:30 +#: class/ShMapper.class.php:119 class/ShMapperRequest.class.php:30 +#: class/ShMapperRequest.class.php:35 msgid "all Map Requests" msgstr "" -#: class/ShMapper.class.php:126 class/ShMapper.class.php:174 -#: class/ShMapperRequest.class.php:88 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:269 +#: class/ShMapper.class.php:130 class/ShMapper.class.php:178 +#: class/ShMapperRequest.class.php:93 class/ShmMap.class.php:601 +#: class/ShmPoint.class.php:265 msgid "Location" msgstr "" -#: class/ShMapper.class.php:127 class/ShMapper.class.php:134 -#: class/ShMapper.class.php:172 class/ShMapper.class.php:602 -#: class/ShMapperRequest.class.php:84 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:265 +#: class/ShMapper.class.php:131 class/ShMapper.class.php:138 +#: class/ShMapper.class.php:176 class/ShMapper.class.php:599 +#: class/ShMapperRequest.class.php:89 class/ShmMap.class.php:601 +#: class/ShmPoint.class.php:261 msgid "Latitude" msgstr "" -#: class/ShMapper.class.php:128 class/ShMapper.class.php:135 -#: class/ShMapper.class.php:173 class/ShMapper.class.php:600 -#: class/ShMapperRequest.class.php:86 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:267 +#: class/ShMapper.class.php:132 class/ShMapper.class.php:139 +#: class/ShMapper.class.php:177 class/ShMapper.class.php:597 +#: class/ShMapperRequest.class.php:91 class/ShmMap.class.php:601 +#: class/ShmPoint.class.php:263 msgid "Longitude" msgstr "" -#: class/ShMapper.class.php:129 class/ShMapper.class.php:136 -#: class/ShMapper.class.php:604 +#: class/ShMapper.class.php:133 class/ShMapper.class.php:140 +#: class/ShMapper.class.php:601 msgid "Zoom" msgstr "" -#: class/ShMapper.class.php:137 class/ShmMap.class.php:112 -#: class/ShmMap.class.php:327 +#: class/ShMapper.class.php:141 class/ShmMap.class.php:118 +#: class/ShmMap.class.php:333 msgid "Legend exists" msgstr "" -#: class/ShMapper.class.php:138 class/ShmMap.class.php:338 +#: class/ShMapper.class.php:142 class/ShmMap.class.php:344 msgid "Filters exists" msgstr "" -#: class/ShMapper.class.php:139 class/ShmMap.class.php:107 -#: class/ShmMap.class.php:316 +#: class/ShMapper.class.php:143 class/ShmMap.class.php:113 +#: class/ShmMap.class.php:322 msgid "Export csv" msgstr "" -#: class/ShMapper.class.php:142 class/ShmMap.class.php:273 +#: class/ShMapper.class.php:146 class/ShmMap.class.php:279 msgid "Map search" msgstr "" -#: class/ShMapper.class.php:143 class/ShmMap.class.php:287 +#: class/ShMapper.class.php:147 class/ShmMap.class.php:293 msgid "Map full screen" msgstr "" -#: class/ShMapper.class.php:144 +#: class/ShMapper.class.php:148 msgid "Map zoom slider" msgstr "" -#: class/ShMapper.class.php:145 class/ShmMap.class.php:281 +#: class/ShMapper.class.php:149 class/ShmMap.class.php:287 msgid "Map layer switcher" msgstr "" -#: class/ShMapper.class.php:146 class/ShmMap.class.php:295 +#: class/ShMapper.class.php:150 class/ShmMap.class.php:301 msgid "Lock zoom and drag" msgstr "" -#: class/ShMapper.class.php:147 class/ShmMap.class.php:291 +#: class/ShMapper.class.php:151 class/ShmMap.class.php:297 msgid "Formating Marker to cluster" msgstr "" -#: class/ShMapper.class.php:148 +#: class/ShMapper.class.php:152 msgid "Default Marker icon" msgstr "" -#: class/ShMapper.class.php:150 class/ShmMap.class.php:117 +#: class/ShMapper.class.php:154 class/ShmMap.class.php:123 msgid "Form exists" msgstr "" -#: class/ShMapper.class.php:151 class/ShmMap.class.php:122 -#: class/ShmMap.class.php:401 +#: class/ShMapper.class.php:155 class/ShmMap.class.php:128 +#: class/ShmMap.class.php:407 msgid "Notify owner of Map" msgstr "" -#: class/ShMapper.class.php:152 +#: class/ShMapper.class.php:156 msgid "Form Title" msgstr "" -#: class/ShMapper.class.php:153 +#: class/ShMapper.class.php:157 msgid "Form generator" msgstr "" -#: class/ShMapper.class.php:154 class/ShmMap.class.php:421 +#: class/ShMapper.class.php:158 class/ShmMap.class.php:427 msgid "Users can leave their contact details for feedback." msgstr "" -#: class/ShMapper.class.php:155 +#: class/ShMapper.class.php:159 msgid "Unclude Personal name" msgstr "" -#: class/ShMapper.class.php:156 class/ShmMap.class.php:434 +#: class/ShMapper.class.php:160 class/ShmMap.class.php:440 msgid "Personal name" msgstr "" -#: class/ShMapper.class.php:157 +#: class/ShMapper.class.php:161 msgid "Required Personal name" msgstr "" -#: class/ShMapper.class.php:158 +#: class/ShMapper.class.php:162 msgid "Unclude Personal e-mail" msgstr "" -#: class/ShMapper.class.php:159 +#: class/ShMapper.class.php:163 msgid "Personal e-mail" msgstr "" -#: class/ShMapper.class.php:160 +#: class/ShMapper.class.php:164 msgid "Required Personal e-mail" msgstr "" -#: class/ShMapper.class.php:161 +#: class/ShMapper.class.php:165 msgid "Unclude Personal phone" msgstr "" -#: class/ShMapper.class.php:162 class/ShmMap.class.php:466 +#: class/ShMapper.class.php:166 class/ShmMap.class.php:472 msgid "Personal phone" msgstr "" -#: class/ShMapper.class.php:163 +#: class/ShMapper.class.php:167 msgid "Required Personal phone" msgstr "" -#: class/ShMapper.class.php:169 class/ShmMap.class.php:70 -#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 +#: class/ShMapper.class.php:173 class/ShmMap.class.php:76 +#: class/ShmMap.class.php:77 widget/ShMap.widget.php:72 msgid "Map" msgstr "" -#: class/ShMapper.class.php:171 class/ShmForm.class.php:223 -#: class/ShmForm.class.php:295 class/ShmForm.class.php:372 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:323 +#: class/ShMapper.class.php:175 class/ShmForm.class.php:229 +#: class/ShmForm.class.php:301 class/ShmForm.class.php:374 +#: class/ShmMap.class.php:601 class/ShmPoint.class.php:323 msgid "Description" msgstr "" -#: class/ShMapper.class.php:175 class/ShmPoint.class.php:250 +#: class/ShMapper.class.php:179 class/ShmPoint.class.php:246 #: class/ShmPoint.class.php:327 msgid "Type" msgstr "" -#: class/ShMapper.class.php:176 +#: class/ShMapper.class.php:180 msgid "Session" msgstr "" -#: class/ShMapper.class.php:177 class/ShMapperRequest.class.php:67 -#: class/ShmMap.class.php:126 +#: class/ShMapper.class.php:181 class/ShMapperRequest.class.php:72 +#: class/ShmMap.class.php:132 msgid "Author" msgstr "" -#: class/ShMapper.class.php:178 +#: class/ShMapper.class.php:182 msgid "Contacts" msgstr "" -#: class/ShMapper.class.php:179 +#: class/ShMapper.class.php:183 msgid "Aproved" msgstr "" -#: class/ShMapper.class.php:180 +#: class/ShMapper.class.php:184 msgid "Aprove date" msgstr "" -#: class/ShMapper.class.php:181 +#: class/ShMapper.class.php:185 msgid "Accessed User" msgstr "" -#: class/ShMapper.class.php:278 class/ShMapper.class.php:375 +#: class/ShMapper.class.php:280 class/ShMapper.class.php:372 msgid "Attantion" msgstr "" -#: class/ShMapper.class.php:279 class/ShMapper.class.php:376 +#: class/ShMapper.class.php:281 class/ShMapper.class.php:373 msgid "Send" msgstr "" -#: class/ShMapper.class.php:280 class/ShMapper.class.php:377 +#: class/ShMapper.class.php:282 class/ShMapper.class.php:374 msgid "Close" msgstr "" -#: class/ShMapper.class.php:281 class/ShMapper.class.php:378 +#: class/ShMapper.class.php:283 class/ShMapper.class.php:375 msgid "" "Error: the form is not associated with the card. To link a map and a form, " "there should be 2 shortcodes on one page (map - [shmMap id = '6' map = " @@ -351,598 +351,658 @@ msgid "" "uniq = 'for example, 777']), in which the uniq parameter will match" msgstr "" -#: class/ShMapper.class.php:282 +#: class/ShMapper.class.php:284 msgid "Are you shure?" msgstr "" -#: class/ShMapper.class.php:409 class/ShMapper.class.php:410 -#: class/ShMapper.class.php:438 +#: class/ShMapper.class.php:406 class/ShMapper.class.php:407 +#: class/ShMapper.class.php:435 msgid "Settings" msgstr "" -#: class/ShMapper.class.php:447 +#: class/ShMapper.class.php:444 msgid "Map API" msgstr "" -#: class/ShMapper.class.php:460 +#: class/ShMapper.class.php:457 msgid "OpenStreetMap" msgstr "" -#: class/ShMapper.class.php:468 +#: class/ShMapper.class.php:465 msgid "Yandex.Maps API Key" msgstr "" -#: class/ShMapper.class.php:470 +#: class/ShMapper.class.php:467 msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." msgstr "" -#: class/ShMapper.class.php:470 +#: class/ShMapper.class.php:467 msgid "Learn more here:" msgstr "" -#: class/ShMapper.class.php:481 +#: class/ShMapper.class.php:478 msgid "Interactive" msgstr "" -#: class/ShMapper.class.php:489 -msgid "Включить глобальный режим неинтерактивных карт" +#: class/ShMapper.class.php:486 +msgid "Enable global mode for non-interactive maps" msgstr "" -#: class/ShMapper.class.php:493 +#: class/ShMapper.class.php:490 msgid "" -"пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " -"включена у карт даже не появляется блок интерактивности." +"users will not be able to add posts to any map. If the checkbox is enabled, " +"the interactivity block does not even appear on the maps." msgstr "" -#: class/ShMapper.class.php:501 +#: class/ShMapper.class.php:498 msgid "Pre-modertion from Map owner." msgstr "" -#: class/ShMapper.class.php:505 -msgid "все сообщения будут добавляться в статусе «Черновик»" +#: class/ShMapper.class.php:502 +msgid "all messages will be added in the Draft status" msgstr "" -#: class/ShMapper.class.php:509 +#: class/ShMapper.class.php:506 msgid "" -"ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует " -"угроза спам-атаки" +"ATTENTION: disable this option only at your own peril and risk, because " +"there is a threat of spam attacks" msgstr "" -#: class/ShMapper.class.php:517 +#: class/ShMapper.class.php:514 msgid "Reload page after User send request." msgstr "" -#: class/ShMapper.class.php:529 +#: class/ShMapper.class.php:526 msgid "Protection" msgstr "" -#: class/ShMapper.class.php:536 +#: class/ShMapper.class.php:533 msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" msgstr "" -#: class/ShMapper.class.php:545 +#: class/ShMapper.class.php:542 #, php-format msgid "" "What is Google reCAPTCHA? How recived keys for your site? See %sthis " "instruction%s." msgstr "" -#: class/ShMapper.class.php:549 +#: class/ShMapper.class.php:546 msgid "" "Your reCAPTCHA doesn't work yet. In order to make it work, please get the " "API keys at google.com/recaptcha" msgstr "" -#: class/ShMapper.class.php:561 +#: class/ShMapper.class.php:558 msgid "Vocabulary" msgstr "" -#: class/ShMapper.class.php:565 +#: class/ShMapper.class.php:562 msgid "Save personal data garantee" msgstr "" -#: class/ShMapper.class.php:571 +#: class/ShMapper.class.php:568 msgid "Successful send map request" msgstr "" -#: class/ShMapper.class.php:577 +#: class/ShMapper.class.php:574 msgid "Error send map request" msgstr "" -#: class/ShMapper.class.php:591 class/ShMapper.class.php:614 +#: class/ShMapper.class.php:588 class/ShMapper.class.php:611 msgid "Coordinates" msgstr "" -#: class/ShMapper.class.php:598 +#: class/ShMapper.class.php:595 msgid "Set default coordinates" msgstr "" -#: class/ShMapper.class.php:703 +#: class/ShMapper.class.php:695 msgid "Wizzard" msgstr "" -#: class/ShMapper.class.php:706 +#: class/ShMapper.class.php:698 msgid "Restart wizzard" msgstr "" -#: class/ShMapper.class.php:746 class/ShMapper.class.php:754 +#: class/ShMapper.class.php:745 class/ShMapper.class.php:753 msgid "Close wizzard" msgstr "" -#: class/ShMapper.class.php:747 class/ShMapper.class.php:753 +#: class/ShMapper.class.php:746 class/ShMapper.class.php:752 msgid "Go to current page" msgstr "" -#: class/ShMapper.class.php:750 class/ShMapper_ajax.class.php:170 +#: class/ShMapper.class.php:749 class/ShMapper_ajax.class.php:172 msgid "Next step" msgstr "" -#: class/ShMapper.class.php:752 +#: class/ShMapper.class.php:751 msgid "Prevous step" msgstr "" -#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 +#: class/ShMapper.class.php:803 +msgid "Welcome to the Shmapper Configuration Wizard" +msgstr "" + +#: class/ShMapper.class.php:804 +msgid "" +"First, you need to specify the general settings. Click on the button to go to the desired " +"section" +msgstr "" + +#: class/ShMapper.class.php:810 +msgid "Configure Shmapper" +msgstr "" + +#: class/ShMapper.class.php:811 +msgid "" +"Change the settings that do not suit you. To connect reCAPTCHA, you need to " +"create an account on Google.com" +msgstr "" + +#: class/ShMapper.class.php:817 +msgid "Create your first map" +msgstr "" + +#: class/ShMapper.class.php:818 +msgid "Click the \"Add Map\" button at the very top of the page" +msgstr "" + +#: class/ShMapper.class.php:824 class/ShMapper.class.php:832 +msgid "New map" +msgstr "" + +#: class/ShMapper.class.php:825 +msgid "" +"Select a visible area on the map.

    Create the first Marker by pointing to " +"the desired location on the map with the right mouse button.

    Fill in the " +"fields and click \"Create\"." +msgstr "" + +#: class/ShMapper.class.php:833 +msgid "" +"Fill in the provided fields in sequence. In the \"Request Form\" section, " +"create a simple feedback form by which Visitors will be able to inform you " +"about the new Markers offered to you. When finished, click the \"Publish\" " +"button." +msgstr "" + +#: class/ShMapperRequest.class.php:24 class/ShMapperRequest.class.php:25 msgid "Map Request" msgstr "" -#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 -#: class/ShMapperRequest.class.php:24 +#: class/ShMapperRequest.class.php:26 class/ShMapperRequest.class.php:27 +#: class/ShMapperRequest.class.php:29 msgid "add Map Request" msgstr "" -#: class/ShMapperRequest.class.php:23 +#: class/ShMapperRequest.class.php:28 msgid "edit Map Request" msgstr "" -#: class/ShMapperRequest.class.php:26 +#: class/ShMapperRequest.class.php:31 msgid "view Map Request" msgstr "" -#: class/ShMapperRequest.class.php:27 +#: class/ShMapperRequest.class.php:32 msgid "search Map Request" msgstr "" -#: class/ShMapperRequest.class.php:28 +#: class/ShMapperRequest.class.php:33 msgid "Map Request not found" msgstr "" -#: class/ShMapperRequest.class.php:29 +#: class/ShMapperRequest.class.php:34 msgid "no found Map Request in trash" msgstr "" -#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:252 +#: class/ShMapperRequest.class.php:62 class/ShmPoint.class.php:248 msgid "Image" msgstr "" -#: class/ShMapperRequest.class.php:64 +#: class/ShMapperRequest.class.php:69 msgid "Approving" msgstr "" -#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:251 +#: class/ShMapperRequest.class.php:75 class/ShmPoint.class.php:247 msgid "GEO location" msgstr "" -#: class/ShMapperRequest.class.php:327 +#: class/ShMapperRequest.class.php:332 msgid "Uknown User" msgstr "" -#: class/ShMapperRequest.class.php:335 +#: class/ShMapperRequest.class.php:340 #, php-format msgid "<%s> Request to your Map from [%s] [%s]" msgstr "" -#: class/ShMapperRequest.class.php:337 +#: class/ShMapperRequest.class.php:342 #, php-format msgid "You may see this %s" msgstr "" -#: class/ShMapperRequest.class.php:358 +#: class/ShMapperRequest.class.php:363 msgid "Approve" msgstr "" -#: class/ShMapperRequest.class.php:360 +#: class/ShMapperRequest.class.php:365 msgid "Trash" msgstr "" -#: class/ShMapper_Assistants.class.php:44 +#: class/ShMapper_Assistants.class.php:50 msgid "all maps" msgstr "" -#: class/ShMapper_Assistants.class.php:90 +#: class/ShMapper_Assistants.class.php:96 msgid "Your requests to this Map " msgstr "" -#: class/ShMapper_ajax.class.php:177 +#: class/ShMapper_ajax.class.php:179 msgid "Congratulation! That's all!" msgstr "" -#: class/ShMapper_ajax.class.php:195 +#: class/ShMapper_ajax.class.php:197 msgid "Wizzard closed" msgstr "" -#: class/ShMapper_ajax.class.php:206 +#: class/ShMapper_ajax.class.php:208 msgid "Wizzard restarted" msgstr "" -#: class/ShMapper_ajax.class.php:220 +#: class/ShMapper_ajax.class.php:222 msgid "Approve succesfully and insert new Map marker" msgstr "" -#: class/ShMapper_ajax.class.php:232 +#: class/ShMapper_ajax.class.php:234 msgid "Request put to Trash" msgstr "" -#: class/ShMapper_ajax.class.php:337 +#: class/ShMapper_ajax.class.php:339 #, php-format msgid "Are you want delete %s?" msgstr "" -#: class/ShMapper_ajax.class.php:339 +#: class/ShMapper_ajax.class.php:341 msgid "Delete" msgstr "" -#: class/ShMapper_ajax.class.php:355 +#: class/ShMapper_ajax.class.php:357 msgid "add Map Point" msgstr "" -#: class/ShMapper_ajax.class.php:357 +#: class/ShMapper_ajax.class.php:359 msgid "Create" msgstr "" -#: class/ShMapper_ajax.class.php:385 +#: class/ShMapper_ajax.class.php:387 msgid "Success" msgstr "" -#: class/ShMapper_ajax.class.php:396 +#: class/ShMapper_ajax.class.php:398 msgid "Change Vocabulaty: " msgstr "" -#: class/ShMapper_ajax.class.php:417 +#: class/ShMapper_ajax.class.php:419 msgid "Yandex.Maps API key Saved" msgstr "" -#: class/ShMapper_ajax.class.php:429 class/ShMapper_ajax.class.php:440 +#: class/ShMapper_ajax.class.php:431 class/ShMapper_ajax.class.php:442 msgid "New coordinates saved" msgstr "" -#: class/ShMapper_ajax.class.php:450 +#: class/ShMapper_ajax.class.php:452 msgid "Users can add Placemarks" msgstr "" -#: class/ShMapper_ajax.class.php:460 +#: class/ShMapper_ajax.class.php:462 msgid "Pre-moderation on" msgstr "" -#: class/ShMapper_ajax.class.php:470 +#: class/ShMapper_ajax.class.php:472 msgid "Reload mode" msgstr "" -#: class/ShMapper_ajax.class.php:480 +#: class/ShMapper_ajax.class.php:482 msgid "captha added" msgstr "" -#: class/ShMapper_ajax.class.php:490 class/ShMapper_ajax.class.php:501 +#: class/ShMapper_ajax.class.php:492 class/ShMapper_ajax.class.php:503 msgid "Set key" msgstr "" -#: class/ShmAdminPage.class.php:27 +#: class/ShmAdminPage.class.php:30 msgid "shMapper developers chat" msgstr "" -#: class/ShmForm.class.php:14 +#: class/ShmForm.class.php:20 msgid "Place the mark to Map" msgstr "" -#: class/ShmForm.class.php:22 +#: class/ShmForm.class.php:28 msgid "Put a title" msgstr "" -#: class/ShmForm.class.php:43 +#: class/ShmForm.class.php:49 msgid "Whrite description" msgstr "" -#: class/ShmForm.class.php:56 +#: class/ShmForm.class.php:62 msgid "input title" msgstr "" -#: class/ShmForm.class.php:62 +#: class/ShmForm.class.php:68 msgid "input text" msgstr "" -#: class/ShmForm.class.php:92 +#: class/ShmForm.class.php:98 msgid "textarea" msgstr "" -#: class/ShmForm.class.php:98 +#: class/ShmForm.class.php:104 msgid "input file" msgstr "" -#: class/ShmForm.class.php:104 +#: class/ShmForm.class.php:110 msgid "enabled Map markers" msgstr "" -#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 -#: class/ShmForm.class.php:340 +#: class/ShmForm.class.php:192 class/ShmForm.class.php:260 +#: class/ShmForm.class.php:342 msgid "Type of element" msgstr "" -#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 -#: class/ShmForm.class.php:334 +#: class/ShmForm.class.php:202 class/ShmForm.class.php:273 +#: class/ShmForm.class.php:336 msgid "Label of element" msgstr "" -#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 -#: class/ShmForm.class.php:336 +#: class/ShmForm.class.php:204 class/ShmForm.class.php:275 +#: class/ShmForm.class.php:338 msgid "write title" msgstr "" -#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 -#: class/ShmForm.class.php:355 +#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:357 msgid "Placeholder" msgstr "" -#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 -#: class/ShmForm.class.php:357 +#: class/ShmForm.class.php:213 class/ShmForm.class.php:285 +#: class/ShmForm.class.php:359 msgid "write placeholder" msgstr "" -#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 -#: class/ShmForm.class.php:361 +#: class/ShmForm.class.php:217 class/ShmForm.class.php:289 +#: class/ShmForm.class.php:363 msgid "Placemark types" msgstr "" -#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 -#: class/ShmForm.class.php:374 +#: class/ShmForm.class.php:231 class/ShmForm.class.php:303 +#: class/ShmForm.class.php:376 msgid "write description" msgstr "" -#: class/ShmForm.class.php:231 +#: class/ShmForm.class.php:237 msgid "Element is required" msgstr "" -#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 +#: class/ShmForm.class.php:239 class/ShmForm.class.php:308 msgid "Add before" msgstr "" -#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 +#: class/ShmForm.class.php:240 class/ShmForm.class.php:309 msgid "Add after" msgstr "" -#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 +#: class/ShmForm.class.php:241 class/ShmForm.class.php:310 msgid "Delete me" msgstr "" -#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 +#: class/ShmForm.class.php:267 class/ShmForm.class.php:331 msgid "require" msgstr "" -#: class/ShmForm.class.php:326 +#: class/ShmForm.class.php:328 msgid "enable" msgstr "" -#: class/ShmForm.class.php:378 +#: class/ShmForm.class.php:380 msgid "The name of the parameter that refers to this element" msgstr "" -#: class/ShmForm.class.php:436 +#: class/ShmForm.class.php:438 msgid "Сhoose files" msgstr "" -#: class/ShmForm.class.php:497 +#: class/ShmForm.class.php:502 msgid "" "Drag choosed icon and place it to map or click it and enter exact address." msgstr "" -#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 -#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 -#: class/ShmForm.class.php:578 +#: class/ShmForm.class.php:508 class/ShmForm.class.php:528 +#: class/ShmForm.class.php:562 class/ShmForm.class.php:573 +#: class/ShmForm.class.php:583 msgid "This required field" msgstr "" -#: class/ShmForm.class.php:520 +#: class/ShmForm.class.php:525 msgid "Drag icon and place it to map." msgstr "" -#: class/ShmForm.class.php:553 +#: class/ShmForm.class.php:558 msgid "Your name" msgstr "" -#: class/ShmForm.class.php:564 +#: class/ShmForm.class.php:569 msgid "Your e-mail" msgstr "" -#: class/ShmForm.class.php:574 +#: class/ShmForm.class.php:579 msgid "Your phone" msgstr "" -#: class/ShmMap.class.php:65 +#: class/ShmMap.class.php:71 msgid "Step 1. Set up your map." msgstr "" -#: class/ShmMap.class.php:74 +#: class/ShmMap.class.php:80 msgid "edit Map" msgstr "" -#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 +#: class/ShmMap.class.php:82 class/ShmMap.class.php:87 msgid "all Maps" msgstr "" -#: class/ShmMap.class.php:77 +#: class/ShmMap.class.php:83 msgid "view Map" msgstr "" -#: class/ShmMap.class.php:78 +#: class/ShmMap.class.php:84 msgid "search Map" msgstr "" -#: class/ShmMap.class.php:79 +#: class/ShmMap.class.php:85 msgid "Map not found" msgstr "" -#: class/ShmMap.class.php:80 +#: class/ShmMap.class.php:86 msgid "no found Map in trash" msgstr "" -#: class/ShmMap.class.php:102 class/ShmPoint.class.php:250 +#: class/ShmMap.class.php:108 class/ShmPoint.class.php:246 msgid "ID" msgstr "" -#: class/ShmMap.class.php:124 +#: class/ShmMap.class.php:130 msgid "shortcodes" msgstr "" -#: class/ShmMap.class.php:125 class/ShmPoint.class.php:40 +#: class/ShmMap.class.php:131 class/ShmPoint.class.php:40 msgid "Map markers" msgstr "" -#: class/ShmMap.class.php:145 +#: class/ShmMap.class.php:151 msgid "include all (map and request form)" msgstr "" -#: class/ShmMap.class.php:153 +#: class/ShmMap.class.php:159 msgid "only map" msgstr "" -#: class/ShmMap.class.php:162 +#: class/ShmMap.class.php:168 msgid "only request form" msgstr "" -#: class/ShmMap.class.php:186 +#: class/ShmMap.class.php:192 msgid "Including Map to post" msgstr "" -#: class/ShmMap.class.php:198 +#: class/ShmMap.class.php:204 msgid "You can insert a card into a post or page by copying this shortcode." msgstr "" -#: class/ShmMap.class.php:212 +#: class/ShmMap.class.php:218 msgid "Step 2. May anover Users add information for Map." msgstr "" -#: class/ShmMap.class.php:237 +#: class/ShmMap.class.php:243 msgid "1.1. Pan map and choose zoom" msgstr "" -#: class/ShmMap.class.php:249 +#: class/ShmMap.class.php:255 msgid "1.2. Set size for map's div (per pixels)" msgstr "" -#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 +#: class/ShmMap.class.php:260 class/ShmMap.class.php:265 msgid "Empty for " msgstr "" -#: class/ShmMap.class.php:269 +#: class/ShmMap.class.php:275 msgid "1.3. Include interface" msgstr "" -#: class/ShmMap.class.php:277 +#: class/ShmMap.class.php:283 msgid "Map zoom slider enabled" msgstr "" -#: class/ShmMap.class.php:299 +#: class/ShmMap.class.php:305 msgid "Choose layers" msgstr "" -#: class/ShmMap.class.php:313 +#: class/ShmMap.class.php:319 msgid "1.4. May User download data in *.csv?" msgstr "" -#: class/ShmMap.class.php:324 +#: class/ShmMap.class.php:330 msgid "1.5. Will the legend be displayed?" msgstr "" -#: class/ShmMap.class.php:335 +#: class/ShmMap.class.php:341 msgid "1.6. Will Marker type filter be displayed?" msgstr "" -#: class/ShmMap.class.php:346 +#: class/ShmMap.class.php:352 msgid "1.7. Default Marker icon" msgstr "" -#: class/ShmMap.class.php:351 +#: class/ShmMap.class.php:357 msgid "Recommended size is 64х64 px, format is .png" msgstr "" -#: class/ShmMap.class.php:383 +#: class/ShmMap.class.php:389 msgid "Enable crowdsourcing function (free add Users new Markers)" msgstr "" -#: class/ShmMap.class.php:388 +#: class/ShmMap.class.php:394 msgid "2.1. What is the name of your information form?" msgstr "" -#: class/ShmMap.class.php:392 +#: class/ShmMap.class.php:398 msgid "For example «All beaches by the river»" msgstr "" -#: class/ShmMap.class.php:398 +#: class/ShmMap.class.php:404 msgid "2.2. Will I notify the author about new posts?" msgstr "" -#: class/ShmMap.class.php:406 +#: class/ShmMap.class.php:412 msgid "2.3. What information can users enter?" msgstr "" -#: class/ShmMap.class.php:409 +#: class/ShmMap.class.php:415 msgid "" "You can create your own forms using form elements: & laquo; Text line & " "raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & " "laquo; Categories of Markers & raquo;" msgstr "" -#: class/ShmMap.class.php:418 +#: class/ShmMap.class.php:424 msgid "2.4. Can users leave their contact information?" msgstr "" -#: class/ShmMap.class.php:426 +#: class/ShmMap.class.php:432 msgid "2.5. What data users will have to put?" msgstr "" -#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 -#: class/ShmMap.class.php:461 +#: class/ShmMap.class.php:435 class/ShmMap.class.php:451 +#: class/ShmMap.class.php:467 msgid "Include" msgstr "" -#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 -#: class/ShmMap.class.php:471 +#: class/ShmMap.class.php:445 class/ShmMap.class.php:461 +#: class/ShmMap.class.php:477 msgid "Required" msgstr "" -#: class/ShmMap.class.php:450 +#: class/ShmMap.class.php:456 msgid "Personal email" msgstr "" -#: class/ShmMap.class.php:665 +#: class/ShmMap.class.php:670 msgid "What do with placemarks of deleting Map?" msgstr "" -#: class/ShmMap.class.php:670 +#: class/ShmMap.class.php:675 msgid "Delete all Points" msgstr "" -#: class/ShmMap.class.php:676 +#: class/ShmMap.class.php:681 msgid "Escape all Points without Owner Map" msgstr "" -#: class/ShmMap.class.php:682 +#: class/ShmMap.class.php:687 msgid "Switch all Points to anover Map" msgstr "" -#: class/ShmMap.class.php:768 +#: class/ShmMap.class.php:703 +msgid "delete" +msgstr "" + +#: class/ShmMap.class.php:782 #, php-format msgid "Succesfuly delete map width %s points" msgstr "" -#: class/ShmMap.class.php:773 +#: class/ShmMap.class.php:787 #, php-format msgid "Succesfuly delete map and %s points are orphans now" msgstr "" -#: class/ShmMap.class.php:780 +#: class/ShmMap.class.php:794 #, php-format msgid "Succesfuly delete map and %s points migrates to %s" msgstr "" +#: class/ShmMap.class.php:826 +msgid "Yandex Map" +msgstr "" + +#: class/ShmMap.class.php:848 +msgid "Open Street Map" +msgstr "" + #: class/ShmPoint.class.php:29 class/ShmPoint.class.php:30 msgid "Map marker" msgstr "" @@ -976,64 +1036,84 @@ msgstr "" msgid "no found Map marker in trash" msgstr "" -#: class/ShmPoint.class.php:177 +#: class/ShmPoint.class.php:178 msgid "Map owner" msgstr "" +#: class/ShmPoint.class.php:229 +msgid "(untitled map)" +msgstr "" + #: class/ShmPoint.class.php:331 msgid "Address" msgstr "" -#: shortcode/shmMap.shortcode.php:19 +#: shortcode/shmMap.shortcode.php:25 msgid "No map on ID " msgstr "" -#: shortcode/shmMap.shortcode.php:43 +#: shortcode/shmMap.shortcode.php:49 msgid "Send request" msgstr "" -#: tpl/input_file_form.php:64 +#: tpl/input_file_form.php:22 tpl/input_file_form.php:76 +msgid "Browse" +msgstr "" + +#: tpl/input_file_form.php:26 +msgid "Upload" +msgstr "" + +#: tpl/input_file_form.php:33 +msgid "Or drag and drop files here" +msgstr "" + +#: tpl/input_file_form.php:37 +msgid "Complete" +msgstr "" + +#: tpl/input_file_form.php:68 msgid "Upload Image" msgstr "" -#: tpl/input_file_form.php:66 +#: tpl/input_file_form.php:70 msgid "File" msgstr "" -#: tpl/input_file_form.php:72 -msgid "Browse" +#: tpl/input_file_form.php:71 +msgid "URL" msgstr "" -#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 +#: tpl/input_file_form.php:80 tpl/input_file_form.php:90 msgid "Remove" msgstr "" -#: tpl/input_file_form.php:77 +#: tpl/input_file_form.php:81 msgid "Insert" msgstr "" -#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 +#: tpl/input_file_form.php:87 tpl/input_file_form.php:96 msgid "Submit" msgstr "" -#: tpl/shmMap.php:83 +#: tpl/shmMap.php:88 #, php-format -msgid "download %s.csv" +msgid "download %s.csv" msgstr "" -#: widget/ShMap.widget.php:9 +#: widget/ShMap.widget.php:13 msgid "Shmapper Locations" msgstr "" -#: widget/ShMap.widget.php:16 +#: widget/ShMap.widget.php:20 msgid "Ermak Locations" msgstr "" -#: widget/ShMap.widget.php:17 +#: widget/ShMap.widget.php:21 msgid "Player Cabinet" msgstr "" -#: widget/ShMap.widget.php:64 +#: widget/ShMap.widget.php:68 msgid "Tite" msgstr "" From cea3d2cbd04a950b9d182c5630f1facfea6b9f7a Mon Sep 17 00:00:00 2001 From: BootWP Date: Mon, 7 Dec 2020 21:36:28 +0200 Subject: [PATCH 079/220] Update ru translate. --- languages/shmapper-by-teplitsa-ru_RU.mo | Bin 22765 -> 25680 bytes languages/shmapper-by-teplitsa-ru_RU.po | 714 ++++++++++++++---------- 2 files changed, 413 insertions(+), 301 deletions(-) diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo index 2c7b6dfeb93e3e3e36fd31d011f3b832d08dbe0a..95c635c837adb7b69cfd73a652c668907b812e94 100644 GIT binary patch delta 9109 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 delta 5637 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 diff --git a/languages/shmapper-by-teplitsa-ru_RU.po b/languages/shmapper-by-teplitsa-ru_RU.po index 7a144b6..d0998fb 100644 --- a/languages/shmapper-by-teplitsa-ru_RU.po +++ b/languages/shmapper-by-teplitsa-ru_RU.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" -"POT-Creation-Date: 2020-09-23 13:48+0300\n" -"PO-Revision-Date: 2020-09-23 13:49+0300\n" +"POT-Creation-Date: 2020-12-07 21:25+0200\n" +"PO-Revision-Date: 2020-12-07 21:35+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: ru\n" @@ -13,336 +13,336 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.4.1\n" +"X-Generator: Poedit 2.4.2\n" -#: class/SMC_Post.php:370 class/ShMapper.class.php:170 -#: class/ShmMap.class.php:103 class/ShmMap.class.php:596 +#: class/SMC_Post.php:372 class/ShMapper.class.php:174 +#: class/ShmMap.class.php:109 class/ShmMap.class.php:601 #: class/ShmPoint.class.php:319 msgid "Title" msgstr "Название" -#: class/SMC_Post.php:496 class/ShmMap.class.php:521 +#: class/SMC_Post.php:498 class/ShmMap.class.php:527 msgid "Double" msgstr "Дублировать" -#: class/SMC_Post.php:542 class/ShmPoint.class.php:253 -#: class/ShmPoint.class.php:499 class/ShmPoint.class.php:515 +#: class/SMC_Post.php:543 class/ShmPoint.class.php:249 +#: class/ShmPoint.class.php:506 class/ShmPoint.class.php:523 msgid "Usage in Maps: " msgstr "Используется в Картах: " -#: class/SMC_Post.php:560 +#: class/SMC_Post.php:561 msgid "— No Change —" msgstr "— Без изменений —" -#: class/SMC_Post.php:563 +#: class/SMC_Post.php:564 msgid "No" msgstr "Нет" -#: class/SMC_Post.php:566 +#: class/SMC_Post.php:567 msgid "Yes" msgstr "Да" -#: class/SMC_Post.php:631 class/SMC_Post.php:636 +#: class/SMC_Post.php:632 class/SMC_Post.php:637 msgid "Parameters" msgstr "Параметры" -#: class/ShMapPointType.class.php:32 class/ShMapPointType.class.php:33 -#: class/ShMapPointType.class.php:43 class/ShmPoint.class.php:126 +#: class/ShMapPointType.class.php:37 class/ShMapPointType.class.php:38 +#: class/ShMapPointType.class.php:48 class/ShmPoint.class.php:126 msgid "Map marker type" msgstr "Тип маркера" -#: class/ShMapPointType.class.php:34 +#: class/ShMapPointType.class.php:39 msgid "Search Map marker type" -msgstr "искать Тип маркера" +msgstr "Искать Тип маркера" -#: class/ShMapPointType.class.php:35 +#: class/ShMapPointType.class.php:40 msgid "all Map marker types" msgstr "все Типы маркеров" -#: class/ShMapPointType.class.php:36 +#: class/ShMapPointType.class.php:41 msgid "view Map marker type" msgstr "смотреть Тип маркера" -#: class/ShMapPointType.class.php:37 +#: class/ShMapPointType.class.php:42 msgid "parent Map marker type" msgstr "родительский Тип маркера" -#: class/ShMapPointType.class.php:38 +#: class/ShMapPointType.class.php:43 msgid "parent Map marker type:" -msgstr "Тип маркера родительской карты:" +msgstr "тип маркера родительской карты:" -#: class/ShMapPointType.class.php:39 +#: class/ShMapPointType.class.php:44 msgid "edit Map marker type" msgstr "редактировать Тип маркера" -#: class/ShMapPointType.class.php:40 +#: class/ShMapPointType.class.php:45 msgid "update Map marker type" msgstr "обновить Тип маркера" -#: class/ShMapPointType.class.php:41 +#: class/ShMapPointType.class.php:46 msgid "add Map marker type" msgstr "Добавить новый" -#: class/ShMapPointType.class.php:42 +#: class/ShMapPointType.class.php:47 msgid "new Map marker type name" msgstr "название нового Типа маркеров" -#: class/ShMapPointType.class.php:49 +#: class/ShMapPointType.class.php:54 msgid "Unique type of every Map markers" msgstr "Уникальный тип каждого маркера карты" -#: class/ShMapPointType.class.php:74 class/ShMapPointType.class.php:75 +#: class/ShMapPointType.class.php:79 class/ShMapPointType.class.php:80 msgid "Map marker types" msgstr "Типы маркеров" -#: class/ShMapPointType.class.php:86 +#: class/ShMapPointType.class.php:91 msgid "Name" msgstr "Название" -#: class/ShMapPointType.class.php:87 class/ShMapPointType.class.php:137 -#: class/ShMapPointType.class.php:197 +#: class/ShMapPointType.class.php:92 class/ShMapPointType.class.php:145 +#: class/ShMapPointType.class.php:205 msgid "Icon" msgstr "Иконка" -#: class/ShMapPointType.class.php:117 class/ShMapPointType.class.php:165 +#: class/ShMapPointType.class.php:125 class/ShMapPointType.class.php:173 msgid "Color" msgstr "Цвет" -#: class/ShMapPointType.class.php:125 class/ShMapPointType.class.php:177 -#: class/ShMapper.class.php:141 class/ShmMap.class.php:252 -#: widget/ShMap.widget.php:80 +#: class/ShMapPointType.class.php:133 class/ShMapPointType.class.php:185 +#: class/ShMapper.class.php:145 class/ShmMap.class.php:258 +#: widget/ShMap.widget.php:84 msgid "Height" msgstr "Высота" -#: class/ShMapPointType.class.php:131 class/ShMapPointType.class.php:187 -#: class/ShMapper.class.php:140 class/ShmMap.class.php:257 +#: class/ShMapPointType.class.php:139 class/ShMapPointType.class.php:195 +#: class/ShMapper.class.php:144 class/ShmMap.class.php:263 msgid "Width" msgstr "Ширина" -#: class/ShMapPointType.class.php:361 +#: class/ShMapPointType.class.php:375 msgid "None" msgstr "Никакой" -#: class/ShMapper.class.php:26 +#: class/ShMapper.class.php:30 msgid "" -"Я даю свое согласие администратору сайта на обработку, в том числе " -"автоматизированную, своих персональных данных в соответствии с Федеральным " -"законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +"I give my consent to the site administrator to process, including automated, " +"my personal data in accordance with Federal Law of 27.07.2006 N 152-FZ \"On " +"Personal Data\"." msgstr "" "Я даю свое согласие администратору сайта на обработку, в том числе " "автоматизированную, своих персональных данных в соответствии с Федеральным " "законом от 27.07.2006 N 152-ФЗ «О персональных данных»." -#: class/ShMapper.class.php:27 +#: class/ShMapper.class.php:31 msgid "Your request has been successfully registered." msgstr "Ваш запрос успешно зарегистрирован." -#: class/ShMapper.class.php:28 +#: class/ShMapper.class.php:32 msgid "Unknown error." msgstr "Неизвестная ошибка." -#: class/ShMapper.class.php:78 class/ShMapper.class.php:396 -#: class/ShMapper.class.php:397 +#: class/ShMapper.class.php:82 class/ShMapper.class.php:393 +#: class/ShMapper.class.php:394 msgid "Shmapper" msgstr "shMapper" -#: class/ShMapper.class.php:84 class/ShmMap.class.php:72 -#: class/ShmMap.class.php:73 class/ShmMap.class.php:75 +#: class/ShMapper.class.php:88 class/ShmMap.class.php:78 +#: class/ShmMap.class.php:79 class/ShmMap.class.php:81 msgid "add Map" -msgstr "Добавить новую" +msgstr "добавить карту" -#: class/ShMapper.class.php:90 +#: class/ShMapper.class.php:94 msgid "Maps" msgstr "Карты" -#: class/ShMapper.class.php:96 +#: class/ShMapper.class.php:100 msgid "edit Maps in page" msgstr "редактировать Карты на странице" -#: class/ShMapper.class.php:115 class/ShMapperRequest.class.php:25 -#: class/ShMapperRequest.class.php:30 +#: class/ShMapper.class.php:119 class/ShMapperRequest.class.php:30 +#: class/ShMapperRequest.class.php:35 msgid "all Map Requests" -msgstr "Карт-запросы" +msgstr "все запросы на карту" -#: class/ShMapper.class.php:126 class/ShMapper.class.php:174 -#: class/ShMapperRequest.class.php:88 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:269 +#: class/ShMapper.class.php:130 class/ShMapper.class.php:178 +#: class/ShMapperRequest.class.php:93 class/ShmMap.class.php:601 +#: class/ShmPoint.class.php:265 msgid "Location" msgstr "Адрес" -#: class/ShMapper.class.php:127 class/ShMapper.class.php:134 -#: class/ShMapper.class.php:172 class/ShMapper.class.php:602 -#: class/ShMapperRequest.class.php:84 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:265 +#: class/ShMapper.class.php:131 class/ShMapper.class.php:138 +#: class/ShMapper.class.php:176 class/ShMapper.class.php:599 +#: class/ShMapperRequest.class.php:89 class/ShmMap.class.php:601 +#: class/ShmPoint.class.php:261 msgid "Latitude" msgstr "Широта" -#: class/ShMapper.class.php:128 class/ShMapper.class.php:135 -#: class/ShMapper.class.php:173 class/ShMapper.class.php:600 -#: class/ShMapperRequest.class.php:86 class/ShmMap.class.php:596 -#: class/ShmPoint.class.php:267 +#: class/ShMapper.class.php:132 class/ShMapper.class.php:139 +#: class/ShMapper.class.php:177 class/ShMapper.class.php:597 +#: class/ShMapperRequest.class.php:91 class/ShmMap.class.php:601 +#: class/ShmPoint.class.php:263 msgid "Longitude" msgstr "Долгота" -#: class/ShMapper.class.php:129 class/ShMapper.class.php:136 -#: class/ShMapper.class.php:604 +#: class/ShMapper.class.php:133 class/ShMapper.class.php:140 +#: class/ShMapper.class.php:601 msgid "Zoom" msgstr "Увеличение" -#: class/ShMapper.class.php:137 class/ShmMap.class.php:112 -#: class/ShmMap.class.php:327 +#: class/ShMapper.class.php:141 class/ShmMap.class.php:118 +#: class/ShmMap.class.php:333 msgid "Legend exists" msgstr "Легенда присутствует" -#: class/ShMapper.class.php:138 class/ShmMap.class.php:338 +#: class/ShMapper.class.php:142 class/ShmMap.class.php:344 msgid "Filters exists" msgstr "Панель фильтров присутствует" -#: class/ShMapper.class.php:139 class/ShmMap.class.php:107 -#: class/ShmMap.class.php:316 +#: class/ShMapper.class.php:143 class/ShmMap.class.php:113 +#: class/ShmMap.class.php:322 msgid "Export csv" msgstr "Загрузка сводки в формате csv" -#: class/ShMapper.class.php:142 class/ShmMap.class.php:273 +#: class/ShMapper.class.php:146 class/ShmMap.class.php:279 msgid "Map search" msgstr "Поиск по карте" -#: class/ShMapper.class.php:143 class/ShmMap.class.php:287 +#: class/ShMapper.class.php:147 class/ShmMap.class.php:293 msgid "Map full screen" msgstr "Полноэкранный режим" -#: class/ShMapper.class.php:144 +#: class/ShMapper.class.php:148 msgid "Map zoom slider" msgstr "Слайдер масштаба" -#: class/ShMapper.class.php:145 class/ShmMap.class.php:281 +#: class/ShMapper.class.php:149 class/ShmMap.class.php:287 msgid "Map layer switcher" msgstr "Переключатель слоев карты" -#: class/ShMapper.class.php:146 class/ShmMap.class.php:295 +#: class/ShMapper.class.php:150 class/ShmMap.class.php:301 msgid "Lock zoom and drag" msgstr "" "Заблокировать перетаскивание карты и изменение размера средним колёсиком мышы" -#: class/ShMapper.class.php:147 class/ShmMap.class.php:291 +#: class/ShMapper.class.php:151 class/ShmMap.class.php:297 msgid "Formating Marker to cluster" msgstr "Укладывать маркеры карты в кластеры" -#: class/ShMapper.class.php:148 +#: class/ShMapper.class.php:152 msgid "Default Marker icon" msgstr "Иконка маркера по умолчанию" -#: class/ShMapper.class.php:150 class/ShmMap.class.php:117 +#: class/ShMapper.class.php:154 class/ShmMap.class.php:123 msgid "Form exists" msgstr "Форма присутствует" -#: class/ShMapper.class.php:151 class/ShmMap.class.php:122 -#: class/ShmMap.class.php:401 +#: class/ShMapper.class.php:155 class/ShmMap.class.php:128 +#: class/ShmMap.class.php:407 msgid "Notify owner of Map" msgstr "Присылать уведомления о новых картах автору" -#: class/ShMapper.class.php:152 +#: class/ShMapper.class.php:156 msgid "Form Title" msgstr "Заголовок Формы" -#: class/ShMapper.class.php:153 +#: class/ShMapper.class.php:157 msgid "Form generator" msgstr "Генератор форм" -#: class/ShMapper.class.php:154 class/ShmMap.class.php:421 +#: class/ShMapper.class.php:158 class/ShmMap.class.php:427 msgid "Users can leave their contact details for feedback." msgstr "Пользователи могут оставлять свои контактные данные для обратной связи" -#: class/ShMapper.class.php:155 +#: class/ShMapper.class.php:159 msgid "Unclude Personal name" msgstr "Включить личное имя" -#: class/ShMapper.class.php:156 class/ShmMap.class.php:434 +#: class/ShMapper.class.php:160 class/ShmMap.class.php:440 msgid "Personal name" msgstr "Имя" -#: class/ShMapper.class.php:157 +#: class/ShMapper.class.php:161 msgid "Required Personal name" msgstr "Обязательно личное имя" -#: class/ShMapper.class.php:158 +#: class/ShMapper.class.php:162 msgid "Unclude Personal e-mail" msgstr "Включить личный телефон e-mail" -#: class/ShMapper.class.php:159 +#: class/ShMapper.class.php:163 msgid "Personal e-mail" msgstr "Личный e-mail" -#: class/ShMapper.class.php:160 +#: class/ShMapper.class.php:164 msgid "Required Personal e-mail" msgstr "Требуется личный e-mail" -#: class/ShMapper.class.php:161 +#: class/ShMapper.class.php:165 msgid "Unclude Personal phone" msgstr "Включить личный телефон" -#: class/ShMapper.class.php:162 class/ShmMap.class.php:466 +#: class/ShMapper.class.php:166 class/ShmMap.class.php:472 msgid "Personal phone" msgstr "Телефон" -#: class/ShMapper.class.php:163 +#: class/ShMapper.class.php:167 msgid "Required Personal phone" msgstr "Требуется личный телефон" -#: class/ShMapper.class.php:169 class/ShmMap.class.php:70 -#: class/ShmMap.class.php:71 widget/ShMap.widget.php:68 +#: class/ShMapper.class.php:173 class/ShmMap.class.php:76 +#: class/ShmMap.class.php:77 widget/ShMap.widget.php:72 msgid "Map" msgstr "Карта" -#: class/ShMapper.class.php:171 class/ShmForm.class.php:223 -#: class/ShmForm.class.php:295 class/ShmForm.class.php:372 -#: class/ShmMap.class.php:596 class/ShmPoint.class.php:323 +#: class/ShMapper.class.php:175 class/ShmForm.class.php:229 +#: class/ShmForm.class.php:301 class/ShmForm.class.php:374 +#: class/ShmMap.class.php:601 class/ShmPoint.class.php:323 msgid "Description" msgstr "Описание" -#: class/ShMapper.class.php:175 class/ShmPoint.class.php:250 +#: class/ShMapper.class.php:179 class/ShmPoint.class.php:246 #: class/ShmPoint.class.php:327 msgid "Type" msgstr "Тип" -#: class/ShMapper.class.php:176 +#: class/ShMapper.class.php:180 msgid "Session" msgstr "Сессия" -#: class/ShMapper.class.php:177 class/ShMapperRequest.class.php:67 -#: class/ShmMap.class.php:126 +#: class/ShMapper.class.php:181 class/ShMapperRequest.class.php:72 +#: class/ShmMap.class.php:132 msgid "Author" msgstr "Автор" -#: class/ShMapper.class.php:178 +#: class/ShMapper.class.php:182 msgid "Contacts" msgstr "Контакты" -#: class/ShMapper.class.php:179 +#: class/ShMapper.class.php:183 msgid "Aproved" msgstr "Одобрен" -#: class/ShMapper.class.php:180 +#: class/ShMapper.class.php:184 msgid "Aprove date" msgstr "Утвержденная дата" -#: class/ShMapper.class.php:181 +#: class/ShMapper.class.php:185 msgid "Accessed User" msgstr "Доступ пользователя" -#: class/ShMapper.class.php:278 class/ShMapper.class.php:375 +#: class/ShMapper.class.php:280 class/ShMapper.class.php:372 msgid "Attantion" msgstr "Внимание" -#: class/ShMapper.class.php:279 class/ShMapper.class.php:376 +#: class/ShMapper.class.php:281 class/ShMapper.class.php:373 msgid "Send" msgstr "Послать" -#: class/ShMapper.class.php:280 class/ShMapper.class.php:377 +#: class/ShMapper.class.php:282 class/ShMapper.class.php:374 msgid "Close" msgstr "Закрыть" -#: class/ShMapper.class.php:281 class/ShMapper.class.php:378 +#: class/ShMapper.class.php:283 class/ShMapper.class.php:375 msgid "" "Error: the form is not associated with the card. To link a map and a form, " "there should be 2 shortcodes on one page (map - [shmMap id = '6' map = " @@ -354,82 +354,80 @@ msgstr "" "uniq='например, 777'] и форма - [shmMap id='94' form='true' uniq='например, " "777']), у которых параметр uniq будет совпадать" -#: class/ShMapper.class.php:282 +#: class/ShMapper.class.php:284 msgid "Are you shure?" msgstr "Вы уверены?" -#: class/ShMapper.class.php:409 class/ShMapper.class.php:410 -#: class/ShMapper.class.php:438 +#: class/ShMapper.class.php:406 class/ShMapper.class.php:407 +#: class/ShMapper.class.php:435 msgid "Settings" msgstr "Настройки" -#: class/ShMapper.class.php:447 +#: class/ShMapper.class.php:444 msgid "Map API" msgstr "API карт" -#: class/ShMapper.class.php:460 -#, fuzzy -#| msgid "Open Street Map" +#: class/ShMapper.class.php:457 msgid "OpenStreetMap" -msgstr "Open Street Map" +msgstr "Open Street Карта" -#: class/ShMapper.class.php:468 +#: class/ShMapper.class.php:465 msgid "Yandex.Maps API Key" msgstr "Ключ API Яндекс.Карт" -#: class/ShMapper.class.php:470 +#: class/ShMapper.class.php:467 msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." msgstr "ВНИМАНИЕ: необходимо указать ключ для работы с API Яндекс.Карт." -#: class/ShMapper.class.php:470 +#: class/ShMapper.class.php:467 msgid "Learn more here:" msgstr "Подробнее здесь:" -#: class/ShMapper.class.php:481 +#: class/ShMapper.class.php:478 msgid "Interactive" msgstr "Интерактив" -#: class/ShMapper.class.php:489 -msgid "Включить глобальный режим неинтерактивных карт" +#: class/ShMapper.class.php:486 +msgid "Enable global mode for non-interactive maps" msgstr "Включить глобальный режим неинтерактивных карт" -#: class/ShMapper.class.php:493 +#: class/ShMapper.class.php:490 msgid "" -"пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " -"включена у карт даже не появляется блок интерактивности." +"users will not be able to add posts to any map. If the checkbox is enabled, " +"the interactivity block does not even appear on the maps." msgstr "" "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " "включена у карт даже не появляется блок интерактивности." -#: class/ShMapper.class.php:501 +#: class/ShMapper.class.php:498 msgid "Pre-modertion from Map owner." msgstr "Премодерация со стороны владельца Карты." -#: class/ShMapper.class.php:505 -msgid "все сообщения будут добавляться в статусе «Черновик»" -msgstr "все сообщения будут добавляться в статусе «Черновик»" +#: class/ShMapper.class.php:502 +msgid "all messages will be added in the Draft status" +msgstr "все сообщения будут добавляться в статусе Черновик" -#: class/ShMapper.class.php:509 +#: class/ShMapper.class.php:506 msgid "" -"ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует " -"угроза спам-атаки" +"ATTENTION: disable this option only at your own peril and risk, because " +"there is a threat of spam attacks" msgstr "" -"ВНИМАНИЕ: отключить эту опцию только на ваш страх и риск, т.к. существует " +"ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует " "угроза спам-атаки" -#: class/ShMapper.class.php:517 +#: class/ShMapper.class.php:514 msgid "Reload page after User send request." msgstr "Перегрузить страницу после того, как юзер отправил форму запроса" -#: class/ShMapper.class.php:529 +#: class/ShMapper.class.php:526 msgid "Protection" msgstr "Защита" -#: class/ShMapper.class.php:536 +#: class/ShMapper.class.php:533 msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" msgstr "Включать капчу в форме (плагин использует только ключи reCAPTCHA v2)" -#: class/ShMapper.class.php:545 +#: class/ShMapper.class.php:542 #, php-format msgid "" "What is Google reCAPTCHA? How recived keys for your site? See %sthis " @@ -438,7 +436,7 @@ msgstr "" "Что такое Google reCAPTCHA? Как получить ключи для сайта? Смотрите %sэту " "инстукцию%s." -#: class/ShMapper.class.php:549 +#: class/ShMapper.class.php:546 msgid "" "Your reCAPTCHA doesn't work yet. In order to make it work, please get the " "API keys at google.com/recaptcha" @@ -446,467 +444,523 @@ msgstr "" "Ваша Капча пока не работает. Для включения этой функции получите ключи API " "на google.com/recaptch" -#: class/ShMapper.class.php:561 +#: class/ShMapper.class.php:558 msgid "Vocabulary" msgstr "Словарь" -#: class/ShMapper.class.php:565 +#: class/ShMapper.class.php:562 msgid "Save personal data garantee" msgstr "Гарантия сохранения персональных данных" -#: class/ShMapper.class.php:571 +#: class/ShMapper.class.php:568 msgid "Successful send map request" msgstr "Сообщение об успешной регистрации запроса на Маркер" -#: class/ShMapper.class.php:577 +#: class/ShMapper.class.php:574 msgid "Error send map request" msgstr "Сообщение об ошибки регистрации запроса на Маркер" -#: class/ShMapper.class.php:591 class/ShMapper.class.php:614 +#: class/ShMapper.class.php:588 class/ShMapper.class.php:611 msgid "Coordinates" msgstr "Координаты" -#: class/ShMapper.class.php:598 +#: class/ShMapper.class.php:595 msgid "Set default coordinates" msgstr "Установить координаты по умолчанию" -#: class/ShMapper.class.php:703 +#: class/ShMapper.class.php:695 msgid "Wizzard" msgstr "Мастер" -#: class/ShMapper.class.php:706 +#: class/ShMapper.class.php:698 msgid "Restart wizzard" msgstr "Перезапустить Мастер" -#: class/ShMapper.class.php:746 class/ShMapper.class.php:754 +#: class/ShMapper.class.php:745 class/ShMapper.class.php:753 msgid "Close wizzard" msgstr "Закрыть навсегда" -#: class/ShMapper.class.php:747 class/ShMapper.class.php:753 +#: class/ShMapper.class.php:746 class/ShMapper.class.php:752 msgid "Go to current page" msgstr "На текущую страницу" -#: class/ShMapper.class.php:750 class/ShMapper_ajax.class.php:170 +#: class/ShMapper.class.php:749 class/ShMapper_ajax.class.php:172 msgid "Next step" msgstr "Следующий шаг" -#: class/ShMapper.class.php:752 +#: class/ShMapper.class.php:751 msgid "Prevous step" msgstr "Предыдущий шаг" -#: class/ShMapperRequest.class.php:19 class/ShMapperRequest.class.php:20 +#: class/ShMapper.class.php:803 +msgid "Welcome to the Shmapper Configuration Wizard" +msgstr "Приветствуем Вас в Мастере конфигурации Shmapper" + +#: class/ShMapper.class.php:804 +msgid "" +"First, you need to specify the general settings. Click on the button to go to the desired " +"section" +msgstr "" +"Сначала необходимо указать общие настройки. Нажмите на кнопку чтобы перейти в нужный " +"раздел" + +#: class/ShMapper.class.php:810 +msgid "Configure Shmapper" +msgstr "Настройте Shmapper" + +#: class/ShMapper.class.php:811 +msgid "" +"Change the settings that do not suit you. To connect reCAPTCHA, you need to " +"create an account on Google.com" +msgstr "" +"Измените настройки, которые Вас не устраивают. Для подключения reCAPTCHA " +"необходимо создать учётную запись на Google.com" + +#: class/ShMapper.class.php:817 +msgid "Create your first map" +msgstr "Создайте вашу первую карту" + +#: class/ShMapper.class.php:818 +msgid "Click the \"Add Map\" button at the very top of the page" +msgstr "Нажмите кнопку \"Добавить карту\" в самом верху страницы" + +#: class/ShMapper.class.php:824 class/ShMapper.class.php:832 +msgid "New map" +msgstr "Новая карта" + +#: class/ShMapper.class.php:825 +msgid "" +"Select a visible area on the map.

    Create the first Marker by pointing to " +"the desired location on the map with the right mouse button.

    Fill in the " +"fields and click \"Create\"." +msgstr "" +"На карте выберите видимую область.

    Создайте первый Маркер указав на " +"нужное место карты правой кнопкой мыши.

    Заполните поля и нажмите " +"\"Создать\"." + +#: class/ShMapper.class.php:833 +msgid "" +"Fill in the provided fields in sequence. In the \"Request Form\" section, " +"create a simple feedback form by which Visitors will be able to inform you " +"about the new Markers offered to you. When finished, click the \"Publish\" " +"button." +msgstr "" +"Последовательно заполните предлаженные поля. В разделе \"Форма запроса\" " +"создайте простейшую форму обратной связи, по которой Посетители смогут " +"информировать Вас о предлагаемых Вам новых Маркерах. По окончании нажмите " +"кнопку \"Опубликовать\"." + +#: class/ShMapperRequest.class.php:24 class/ShMapperRequest.class.php:25 msgid "Map Request" msgstr "Карт-запрос" -#: class/ShMapperRequest.class.php:21 class/ShMapperRequest.class.php:22 -#: class/ShMapperRequest.class.php:24 +#: class/ShMapperRequest.class.php:26 class/ShMapperRequest.class.php:27 +#: class/ShMapperRequest.class.php:29 msgid "add Map Request" msgstr "Добавить новый" -#: class/ShMapperRequest.class.php:23 +#: class/ShMapperRequest.class.php:28 msgid "edit Map Request" msgstr "редактировать Карт-запрос" -#: class/ShMapperRequest.class.php:26 +#: class/ShMapperRequest.class.php:31 msgid "view Map Request" msgstr "смотреть Карт-запрос" -#: class/ShMapperRequest.class.php:27 +#: class/ShMapperRequest.class.php:32 msgid "search Map Request" msgstr "искать Карт-запрос" -#: class/ShMapperRequest.class.php:28 +#: class/ShMapperRequest.class.php:33 msgid "Map Request not found" msgstr "Запрос не найден" -#: class/ShMapperRequest.class.php:29 +#: class/ShMapperRequest.class.php:34 msgid "no found Map Request in trash" msgstr "Карт-запросы в корзине не найдены" -#: class/ShMapperRequest.class.php:57 class/ShmPoint.class.php:252 +#: class/ShMapperRequest.class.php:62 class/ShmPoint.class.php:248 msgid "Image" msgstr "Изображение" -#: class/ShMapperRequest.class.php:64 +#: class/ShMapperRequest.class.php:69 msgid "Approving" msgstr "Одобрение" -#: class/ShMapperRequest.class.php:70 class/ShmPoint.class.php:251 +#: class/ShMapperRequest.class.php:75 class/ShmPoint.class.php:247 msgid "GEO location" msgstr "гео-позиция" -#: class/ShMapperRequest.class.php:327 +#: class/ShMapperRequest.class.php:332 msgid "Uknown User" msgstr "некто Имярек" -#: class/ShMapperRequest.class.php:335 +#: class/ShMapperRequest.class.php:340 #, php-format msgid "<%s> Request to your Map from [%s] [%s]" msgstr "<%s> Новый карт-запрос от [%s] [%s]" -#: class/ShMapperRequest.class.php:337 +#: class/ShMapperRequest.class.php:342 #, php-format msgid "You may see this %s" msgstr "Вы можете посмотреть его здесь %s" -#: class/ShMapperRequest.class.php:358 +#: class/ShMapperRequest.class.php:363 msgid "Approve" msgstr "Одобрить" -#: class/ShMapperRequest.class.php:360 +#: class/ShMapperRequest.class.php:365 msgid "Trash" msgstr "Корзина" -#: class/ShMapper_Assistants.class.php:44 +#: class/ShMapper_Assistants.class.php:50 msgid "all maps" msgstr "все карты" -#: class/ShMapper_Assistants.class.php:90 +#: class/ShMapper_Assistants.class.php:96 msgid "Your requests to this Map " msgstr "Ваши запросы к этой карте" -#: class/ShMapper_ajax.class.php:177 +#: class/ShMapper_ajax.class.php:179 msgid "Congratulation! That's all!" msgstr "Поздравляем! Это всё." -#: class/ShMapper_ajax.class.php:195 +#: class/ShMapper_ajax.class.php:197 msgid "Wizzard closed" msgstr "Мастер закрыт" -#: class/ShMapper_ajax.class.php:206 +#: class/ShMapper_ajax.class.php:208 msgid "Wizzard restarted" msgstr "Мастер запущен сызнова" -#: class/ShMapper_ajax.class.php:220 +#: class/ShMapper_ajax.class.php:222 msgid "Approve succesfully and insert new Map marker" msgstr "Одобрено. Маркер создан" -#: class/ShMapper_ajax.class.php:232 +#: class/ShMapper_ajax.class.php:234 msgid "Request put to Trash" msgstr "Запрос отправлен в корзину" -#: class/ShMapper_ajax.class.php:337 +#: class/ShMapper_ajax.class.php:339 #, php-format msgid "Are you want delete %s?" msgstr "Хотите удалить карту %s?" -#: class/ShMapper_ajax.class.php:339 +#: class/ShMapper_ajax.class.php:341 msgid "Delete" msgstr "Удалить" -#: class/ShMapper_ajax.class.php:355 +#: class/ShMapper_ajax.class.php:357 msgid "add Map Point" msgstr "Маркер добавлен" -#: class/ShMapper_ajax.class.php:357 +#: class/ShMapper_ajax.class.php:359 msgid "Create" msgstr "Создать" -#: class/ShMapper_ajax.class.php:385 +#: class/ShMapper_ajax.class.php:387 msgid "Success" msgstr "Успешно" -#: class/ShMapper_ajax.class.php:396 +#: class/ShMapper_ajax.class.php:398 msgid "Change Vocabulaty: " msgstr "Изменён словарь: " -#: class/ShMapper_ajax.class.php:417 +#: class/ShMapper_ajax.class.php:419 msgid "Yandex.Maps API key Saved" msgstr "Ключ API Яндекс.Карт сохранен" -#: class/ShMapper_ajax.class.php:429 class/ShMapper_ajax.class.php:440 +#: class/ShMapper_ajax.class.php:431 class/ShMapper_ajax.class.php:442 msgid "New coordinates saved" msgstr "Новые координаты сохранены" -#: class/ShMapper_ajax.class.php:450 +#: class/ShMapper_ajax.class.php:452 msgid "Users can add Placemarks" -msgstr "" +msgstr "Пользователи могут добавлять placemarks" -#: class/ShMapper_ajax.class.php:460 -#, fuzzy -#| msgid "Pre-modertion from Map owner." +#: class/ShMapper_ajax.class.php:462 msgid "Pre-moderation on" -msgstr "Премодерация со стороны владельца Карты." +msgstr "Премодерация со стороны владельца Карты" -#: class/ShMapper_ajax.class.php:470 -#, fuzzy -#| msgid "Upload Image" +#: class/ShMapper_ajax.class.php:472 msgid "Reload mode" msgstr "Загрузить изображение" -#: class/ShMapper_ajax.class.php:480 +#: class/ShMapper_ajax.class.php:482 msgid "captha added" -msgstr "" +msgstr "капча добавлена" -#: class/ShMapper_ajax.class.php:490 class/ShMapper_ajax.class.php:501 +#: class/ShMapper_ajax.class.php:492 class/ShMapper_ajax.class.php:503 msgid "Set key" msgstr "Ключ установлен" -#: class/ShmAdminPage.class.php:27 +#: class/ShmAdminPage.class.php:30 msgid "shMapper developers chat" msgstr "Чат разработчиков shMapper" -#: class/ShmForm.class.php:14 +#: class/ShmForm.class.php:20 msgid "Place the mark to Map" msgstr "Укажите место" -#: class/ShmForm.class.php:22 +#: class/ShmForm.class.php:28 msgid "Put a title" msgstr "Укажите название" -#: class/ShmForm.class.php:43 +#: class/ShmForm.class.php:49 msgid "Whrite description" msgstr "Напишите комментарий" -#: class/ShmForm.class.php:56 +#: class/ShmForm.class.php:62 msgid "input title" msgstr "напишите заголовок" -#: class/ShmForm.class.php:62 +#: class/ShmForm.class.php:68 msgid "input text" msgstr "текстовая строка" -#: class/ShmForm.class.php:92 +#: class/ShmForm.class.php:98 msgid "textarea" msgstr "текстовый блок" -#: class/ShmForm.class.php:98 +#: class/ShmForm.class.php:104 msgid "input file" msgstr "загрузка картинки" -#: class/ShmForm.class.php:104 +#: class/ShmForm.class.php:110 msgid "enabled Map markers" msgstr "доступные маркеры" -#: class/ShmForm.class.php:186 class/ShmForm.class.php:254 -#: class/ShmForm.class.php:340 +#: class/ShmForm.class.php:192 class/ShmForm.class.php:260 +#: class/ShmForm.class.php:342 msgid "Type of element" msgstr "Тип элемента" -#: class/ShmForm.class.php:196 class/ShmForm.class.php:267 -#: class/ShmForm.class.php:334 +#: class/ShmForm.class.php:202 class/ShmForm.class.php:273 +#: class/ShmForm.class.php:336 msgid "Label of element" msgstr "Лейбл элемента" -#: class/ShmForm.class.php:198 class/ShmForm.class.php:269 -#: class/ShmForm.class.php:336 +#: class/ShmForm.class.php:204 class/ShmForm.class.php:275 +#: class/ShmForm.class.php:338 msgid "write title" msgstr "напишите заголовок" -#: class/ShmForm.class.php:205 class/ShmForm.class.php:277 -#: class/ShmForm.class.php:355 +#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:357 msgid "Placeholder" msgstr "Заполнитель" -#: class/ShmForm.class.php:207 class/ShmForm.class.php:279 -#: class/ShmForm.class.php:357 +#: class/ShmForm.class.php:213 class/ShmForm.class.php:285 +#: class/ShmForm.class.php:359 msgid "write placeholder" msgstr "напишите плейсхолдер" -#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 -#: class/ShmForm.class.php:361 +#: class/ShmForm.class.php:217 class/ShmForm.class.php:289 +#: class/ShmForm.class.php:363 msgid "Placemark types" msgstr "Типы маркеров" -#: class/ShmForm.class.php:225 class/ShmForm.class.php:297 -#: class/ShmForm.class.php:374 +#: class/ShmForm.class.php:231 class/ShmForm.class.php:303 +#: class/ShmForm.class.php:376 msgid "write description" msgstr "напишите описание" -#: class/ShmForm.class.php:231 +#: class/ShmForm.class.php:237 msgid "Element is required" msgstr "Элемент обязателен к заполнению" -#: class/ShmForm.class.php:233 class/ShmForm.class.php:302 +#: class/ShmForm.class.php:239 class/ShmForm.class.php:308 msgid "Add before" msgstr "Добавить перед" -#: class/ShmForm.class.php:234 class/ShmForm.class.php:303 +#: class/ShmForm.class.php:240 class/ShmForm.class.php:309 msgid "Add after" msgstr "Добавить после" -#: class/ShmForm.class.php:235 class/ShmForm.class.php:304 +#: class/ShmForm.class.php:241 class/ShmForm.class.php:310 msgid "Delete me" msgstr "Удали меня" -#: class/ShmForm.class.php:261 class/ShmForm.class.php:329 +#: class/ShmForm.class.php:267 class/ShmForm.class.php:331 msgid "require" msgstr "обязательно" -#: class/ShmForm.class.php:326 +#: class/ShmForm.class.php:328 msgid "enable" msgstr "доступно" -#: class/ShmForm.class.php:378 +#: class/ShmForm.class.php:380 msgid "The name of the parameter that refers to this element" msgstr "Имя параметра, который ссылается на этот элемент" -#: class/ShmForm.class.php:436 +#: class/ShmForm.class.php:438 msgid "Сhoose files" msgstr "Выберите файл" -#: class/ShmForm.class.php:497 +#: class/ShmForm.class.php:502 msgid "" "Drag choosed icon and place it to map or click it and enter exact address." msgstr "" "Перетащите выбранную иконку в нужное место Карты или кликните по ней и " "введите точный адрес." -#: class/ShmForm.class.php:503 class/ShmForm.class.php:523 -#: class/ShmForm.class.php:557 class/ShmForm.class.php:568 -#: class/ShmForm.class.php:578 +#: class/ShmForm.class.php:508 class/ShmForm.class.php:528 +#: class/ShmForm.class.php:562 class/ShmForm.class.php:573 +#: class/ShmForm.class.php:583 msgid "This required field" msgstr "Обязательно для заполнения" -#: class/ShmForm.class.php:520 +#: class/ShmForm.class.php:525 msgid "Drag icon and place it to map." msgstr "Перетащите иконку в нужное место Карты" -#: class/ShmForm.class.php:553 +#: class/ShmForm.class.php:558 msgid "Your name" msgstr "Ваше имя" -#: class/ShmForm.class.php:564 +#: class/ShmForm.class.php:569 msgid "Your e-mail" msgstr "Ваш e-mail" -#: class/ShmForm.class.php:574 +#: class/ShmForm.class.php:579 msgid "Your phone" msgstr "Ваш номер телефона" -#: class/ShmMap.class.php:65 +#: class/ShmMap.class.php:71 msgid "Step 1. Set up your map." msgstr "Шаг 1. Настройте Вашу карту" -#: class/ShmMap.class.php:74 +#: class/ShmMap.class.php:80 msgid "edit Map" msgstr "редактировать Карту" -#: class/ShmMap.class.php:76 class/ShmMap.class.php:81 +#: class/ShmMap.class.php:82 class/ShmMap.class.php:87 msgid "all Maps" msgstr "Карты" -#: class/ShmMap.class.php:77 +#: class/ShmMap.class.php:83 msgid "view Map" msgstr "смотреть Карту" -#: class/ShmMap.class.php:78 +#: class/ShmMap.class.php:84 msgid "search Map" msgstr "искать Карту" -#: class/ShmMap.class.php:79 +#: class/ShmMap.class.php:85 msgid "Map not found" msgstr "Карт не найдено" -#: class/ShmMap.class.php:80 +#: class/ShmMap.class.php:86 msgid "no found Map in trash" msgstr "Карт в корзине не найдено" -#: class/ShmMap.class.php:102 class/ShmPoint.class.php:250 +#: class/ShmMap.class.php:108 class/ShmPoint.class.php:246 msgid "ID" msgstr "ID" -#: class/ShmMap.class.php:124 +#: class/ShmMap.class.php:130 msgid "shortcodes" msgstr "шорткоды" -#: class/ShmMap.class.php:125 class/ShmPoint.class.php:40 +#: class/ShmMap.class.php:131 class/ShmPoint.class.php:40 msgid "Map markers" msgstr "Маркеры" -#: class/ShmMap.class.php:145 +#: class/ShmMap.class.php:151 msgid "include all (map and request form)" msgstr "включено все(карта и Форма запроса)" -#: class/ShmMap.class.php:153 +#: class/ShmMap.class.php:159 msgid "only map" msgstr "только карта" -#: class/ShmMap.class.php:162 +#: class/ShmMap.class.php:168 msgid "only request form" msgstr "только Форма запроса" -#: class/ShmMap.class.php:186 +#: class/ShmMap.class.php:192 msgid "Including Map to post" msgstr "Вставка карты в звпись" -#: class/ShmMap.class.php:198 +#: class/ShmMap.class.php:204 msgid "You can insert a card into a post or page by copying this shortcode." msgstr "" "Вы сможете вставить карту в запись или страницу скопировав этот шорткод" -#: class/ShmMap.class.php:212 +#: class/ShmMap.class.php:218 msgid "Step 2. May anover Users add information for Map." msgstr "" "Шаг 2. Смогут ли другие пользователи добавлять информацию на Вашу карту?" -#: class/ShmMap.class.php:237 +#: class/ShmMap.class.php:243 msgid "1.1. Pan map and choose zoom" msgstr "1.1. Отцентрируйте карту и выберите масштаб" -#: class/ShmMap.class.php:249 +#: class/ShmMap.class.php:255 msgid "1.2. Set size for map's div (per pixels)" msgstr "1.2. Установите размер окна карты (в пикселях)" -#: class/ShmMap.class.php:254 class/ShmMap.class.php:259 +#: class/ShmMap.class.php:260 class/ShmMap.class.php:265 msgid "Empty for " msgstr "Оставьте пустым, чтобы было " -#: class/ShmMap.class.php:269 +#: class/ShmMap.class.php:275 msgid "1.3. Include interface" msgstr "1.3. Какие элементы управления картой должны присутствовать?" -#: class/ShmMap.class.php:277 +#: class/ShmMap.class.php:283 msgid "Map zoom slider enabled" msgstr "Ползунок масштаба" -#: class/ShmMap.class.php:299 +#: class/ShmMap.class.php:305 msgid "Choose layers" msgstr "Выбор типа визуализации слоя" -#: class/ShmMap.class.php:313 +#: class/ShmMap.class.php:319 msgid "1.4. May User download data in *.csv?" msgstr "1.4. Можно ли скачать данные карты в формате .csv?" -#: class/ShmMap.class.php:324 +#: class/ShmMap.class.php:330 msgid "1.5. Will the legend be displayed?" msgstr "1.5. Будет ли отображаться легенда?" -#: class/ShmMap.class.php:335 +#: class/ShmMap.class.php:341 msgid "1.6. Will Marker type filter be displayed?" msgstr "1.6. Будет ли отображаться панель фильтрации по типам Маркеров?" -#: class/ShmMap.class.php:346 +#: class/ShmMap.class.php:352 msgid "1.7. Default Marker icon" msgstr "1.7. Иконка маркера по умолчанию" -#: class/ShmMap.class.php:351 +#: class/ShmMap.class.php:357 msgid "Recommended size is 64х64 px, format is .png" msgstr "Рекомендуемый размер: 64х64 pxб формат .png" -#: class/ShmMap.class.php:383 +#: class/ShmMap.class.php:389 msgid "Enable crowdsourcing function (free add Users new Markers)" msgstr "" "Включить функцию краудсорсинга (свободного добавления Пользователями новых " "Маркеров) " -#: class/ShmMap.class.php:388 +#: class/ShmMap.class.php:394 msgid "2.1. What is the name of your information form?" msgstr "2.1. Как называется Ваша форма сбора информации?" -#: class/ShmMap.class.php:392 +#: class/ShmMap.class.php:398 msgid "For example «All beaches by the river»" msgstr "Например «Все пляжи у реки»" -#: class/ShmMap.class.php:398 +#: class/ShmMap.class.php:404 msgid "2.2. Will I notify the author about new posts?" msgstr "2.2. Оповещать ли автора Карты о новых сообщениях?" -#: class/ShmMap.class.php:406 +#: class/ShmMap.class.php:412 msgid "2.3. What information can users enter?" msgstr "2.3. Какую информацию могут вводить пользователи?" -#: class/ShmMap.class.php:409 +#: class/ShmMap.class.php:415 msgid "" "You can create your own forms using form elements: & laquo; Text line & " "raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & " @@ -916,59 +970,71 @@ msgstr "" "Строка текста», «Поле текста», «Загрузка " "файлов», «Категории Маркеров»" -#: class/ShmMap.class.php:418 +#: class/ShmMap.class.php:424 msgid "2.4. Can users leave their contact information?" msgstr "2.4. Могут ли пользователи оставлять свою контактную информацию?" -#: class/ShmMap.class.php:426 +#: class/ShmMap.class.php:432 msgid "2.5. What data users will have to put?" msgstr "2.5. Какие данные пользователи должны будут ставить?" -#: class/ShmMap.class.php:429 class/ShmMap.class.php:445 -#: class/ShmMap.class.php:461 +#: class/ShmMap.class.php:435 class/ShmMap.class.php:451 +#: class/ShmMap.class.php:467 msgid "Include" msgstr "Включать" -#: class/ShmMap.class.php:439 class/ShmMap.class.php:455 -#: class/ShmMap.class.php:471 +#: class/ShmMap.class.php:445 class/ShmMap.class.php:461 +#: class/ShmMap.class.php:477 msgid "Required" msgstr "Обязателен" -#: class/ShmMap.class.php:450 +#: class/ShmMap.class.php:456 msgid "Personal email" msgstr "Адрес электронной почты" -#: class/ShmMap.class.php:665 +#: class/ShmMap.class.php:670 msgid "What do with placemarks of deleting Map?" msgstr "Что делать с Маркерами удаляемой Карты?" -#: class/ShmMap.class.php:670 +#: class/ShmMap.class.php:675 msgid "Delete all Points" msgstr "Удалить все Маркеры" -#: class/ShmMap.class.php:676 +#: class/ShmMap.class.php:681 msgid "Escape all Points without Owner Map" msgstr "Оставить все Маркеры без родительской Карты" -#: class/ShmMap.class.php:682 +#: class/ShmMap.class.php:687 msgid "Switch all Points to anover Map" msgstr "Перенести все Маркеры на другую Карту" -#: class/ShmMap.class.php:768 +#: class/ShmMap.class.php:703 +msgid "delete" +msgstr "удалить" + +#: class/ShmMap.class.php:782 #, php-format msgid "Succesfuly delete map width %s points" msgstr "Карта успешно удалена с %s точками" -#: class/ShmMap.class.php:773 +#: class/ShmMap.class.php:787 #, php-format msgid "Succesfuly delete map and %s points are orphans now" msgstr "Карта успешно удалена и %s точек сейчас не привязаны ни к какой карте" -#: class/ShmMap.class.php:780 +#: class/ShmMap.class.php:794 #, php-format msgid "Succesfuly delete map and %s points migrates to %s" msgstr "Карта успешно удалена и %s точек перенесено в %s" +#: class/ShmMap.class.php:826 +msgid "Yandex Map" +msgstr "Яндекс карты" + +#: class/ShmMap.class.php:848 +msgid "Open Street Map" +msgstr "Open Street Карта" + #: class/ShmPoint.class.php:29 class/ShmPoint.class.php:30 msgid "Map marker" msgstr "Маркер" @@ -1002,64 +1068,84 @@ msgstr "Маркер не найден" msgid "no found Map marker in trash" msgstr "Маркеры в корзине не найдены" -#: class/ShmPoint.class.php:177 +#: class/ShmPoint.class.php:178 msgid "Map owner" msgstr "Родительская карта" +#: class/ShmPoint.class.php:229 +msgid "(untitled map)" +msgstr "(карта без названия)" + #: class/ShmPoint.class.php:331 msgid "Address" msgstr "Адрес" -#: shortcode/shmMap.shortcode.php:19 +#: shortcode/shmMap.shortcode.php:25 msgid "No map on ID " msgstr "Не указан ID карты" -#: shortcode/shmMap.shortcode.php:43 +#: shortcode/shmMap.shortcode.php:49 msgid "Send request" msgstr "Отправить информацию" -#: tpl/input_file_form.php:64 +#: tpl/input_file_form.php:22 tpl/input_file_form.php:76 +msgid "Browse" +msgstr "Просмотр" + +#: tpl/input_file_form.php:26 +msgid "Upload" +msgstr "Загрузить изображение" + +#: tpl/input_file_form.php:33 +msgid "Or drag and drop files here" +msgstr "Или перетащите файлы сюда" + +#: tpl/input_file_form.php:37 +msgid "Complete" +msgstr "Завершить" + +#: tpl/input_file_form.php:68 msgid "Upload Image" msgstr "Загрузить изображение" -#: tpl/input_file_form.php:66 +#: tpl/input_file_form.php:70 msgid "File" msgstr "Файл" -#: tpl/input_file_form.php:72 -msgid "Browse" -msgstr "Просмотр" +#: tpl/input_file_form.php:71 +msgid "URL" +msgstr "УРЛ" -#: tpl/input_file_form.php:76 tpl/input_file_form.php:86 +#: tpl/input_file_form.php:80 tpl/input_file_form.php:90 msgid "Remove" msgstr "Удалить" -#: tpl/input_file_form.php:77 +#: tpl/input_file_form.php:81 msgid "Insert" msgstr "Вставить" -#: tpl/input_file_form.php:83 tpl/input_file_form.php:92 +#: tpl/input_file_form.php:87 tpl/input_file_form.php:96 msgid "Submit" msgstr "Отправить" -#: tpl/shmMap.php:83 +#: tpl/shmMap.php:88 #, php-format -msgid "download %s.csv" +msgid "download %s.csv" msgstr "скачать %s.csv" -#: widget/ShMap.widget.php:9 +#: widget/ShMap.widget.php:13 msgid "Shmapper Locations" msgstr "Области Shmapper" -#: widget/ShMap.widget.php:16 +#: widget/ShMap.widget.php:20 msgid "Ermak Locations" msgstr "Области Ermak" -#: widget/ShMap.widget.php:17 +#: widget/ShMap.widget.php:21 msgid "Player Cabinet" msgstr "Кабинет" -#: widget/ShMap.widget.php:64 +#: widget/ShMap.widget.php:68 msgid "Tite" msgstr "Название" @@ -1083,11 +1169,37 @@ msgstr "Теплица социальных технологий" msgid "https://te-st.ru" msgstr "https://te-st.ru" +#~ msgid "" +#~ "Я даю свое согласие администратору сайта на обработку, в том числе " +#~ "автоматизированную, своих персональных данных в соответствии с " +#~ "Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." +#~ msgstr "" +#~ "Я даю свое согласие администратору сайта на обработку, в том числе " +#~ "автоматизированную, своих персональных данных в соответствии с " +#~ "Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных»." + +#~ msgid "Включить глобальный режим неинтерактивных карт" +#~ msgstr "Включить глобальный режим неинтерактивных карт" + +#~ msgid "" +#~ "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " +#~ "включена у карт даже не появляется блок интерактивности." +#~ msgstr "" +#~ "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " +#~ "включена у карт даже не появляется блок интерактивности." + +#~ msgid "все сообщения будут добавляться в статусе «Черновик»" +#~ msgstr "все сообщения будут добавляться в статусе «Черновик»" + +#~ msgid "" +#~ "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. " +#~ "существует угроза спам-атаки" +#~ msgstr "" +#~ "ВНИМАНИЕ: отключить эту опцию только на ваш страх и риск, т.к. существует " +#~ "угроза спам-атаки" + #~ msgid "Error: no map" #~ msgstr "Ошибка: нет карты" -#~ msgid "Yandex Map" -#~ msgstr "Яндекс карты" - #~ msgid "Yandex.Maps" #~ msgstr "Яндекс.Карты" From 28f1a20478df1f7fec899bf19f1c7a23f2383ea7 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 8 Dec 2020 08:54:14 +0200 Subject: [PATCH 080/220] Improvements. --- class/ShMapper.class.php | 28 ++++++++++++++++++++-------- class/ShMapperRequest.class.php | 17 ++++++++++++++--- class/ShmForm.class.php | 2 +- class/ShmPoint.class.php | 2 +- tpl/shmMap.php | 2 +- 5 files changed, 37 insertions(+), 14 deletions(-) diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index 41ebd90..e5c4137 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -292,7 +292,7 @@ static function add_frons_js_script() $ymap_key = ShMapper::$options['shm_yandex_maps_api_key']; } //css - wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array()); + wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array( 'dashicons' ) ); wp_enqueue_style( "ShMapper"); wp_register_script("ShMapper", plugins_url( '../assets/js/ShMapper.js', __FILE__ ), array( 'jquery-ui-draggable', 'jquery-touch-punch')); wp_enqueue_script("ShMapper"); @@ -645,7 +645,23 @@ static function setting_pages() { } else if (map_type == 2) { // if is OpenStreetMap - var points = []; + var points = [], + p = {}; + p.post_id = ''; + p.post_title = '" . esc_html__( "Coordinates", SHMAPPER ) . "'; + p.post_content = ''; + p.latitude = '$latitude'; + p.longitude = '$longitude'; + p.location = ''; + p.draggable = 1; + p.type = '-1'; + p.height = ''; + p.width = ''; + p.term_id = '-1'; + p.icon = ''; + p.color = ''; + + points.push(p); var mData = { mapType : '$map_type', @@ -667,19 +683,15 @@ static function setting_pages() { init_map( mData, points ); - // Add Center Marker. - var classes = 'dashicons dashicons-location shm-size-40 shm-color-danger'; - var myIcon = L.divIcon({className: classes, iconSize:L.point(40, 40) }); - // On zoom map. myMap.on('zoom', function(e) { $('[name=shm_default_zoom]').val( myMap.getZoom() ).trigger('change'); }); - marker.on('dragend', function (e) { + /*marker.on('dragend', function (e) { $('[name=shm_default_latitude]').val(marker.getLatLng().lat).trigger('change'); $('[name=shm_default_longitude]').val(marker.getLatLng().lng).trigger('change'); - }); + });*/ } }); diff --git a/class/ShMapperRequest.class.php b/class/ShMapperRequest.class.php index 2f6ad34..26e1963 100644 --- a/class/ShMapperRequest.class.php +++ b/class/ShMapperRequest.class.php @@ -349,10 +349,21 @@ static function insert($data) } function get_notified_form() { - if($notify = $this->get_meta("notified") > 0) - { + if($notify = $this->get_meta("notified") > 0) { + $user = get_user_by("id", $this->get_meta("notify_user")); - $html = "

    " . $user->display_name . "

    " . date("j.n.Y H:m", $this->get_meta("notify_date")); + $user_name = ''; + + $html = ''; + if ( $user ) { + $html .= "

    " . $user_name . "

    "; + } else { + $user_name = esc_html__( 'Visitor', 'shmapper-by-teplitsa' ); + } + if ( $this->get_meta("notify_date") ) { + $html .= "

    " . date("j.n.Y H:m", $this->get_meta("notify_date")); + } + } else { diff --git a/class/ShmForm.class.php b/class/ShmForm.class.php index 40d0626..37cd477 100644 --- a/class/ShmForm.class.php +++ b/class/ShmForm.class.php @@ -46,7 +46,7 @@ static function get_default() [ "type" => SHMAPPER_TEXTAREA_TYPE_ID, "require" => 1, - "title" => __("Whrite description", SHMAPPER), + "title" => __("Write description", SHMAPPER), "placeholde" => "", "description" => "", ], diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index 6f3335f..d6756db 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -476,7 +476,7 @@ function draw() { isAdmin : 1, isMap : 0 }; - + if(map_type == 1) ymaps.ready(() => init_map( mData, points )); else if (map_type == 2) diff --git a/tpl/shmMap.php b/tpl/shmMap.php index 3d2e2d5..bb4ddae 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -174,7 +174,7 @@ function draw_shMap($map, $args ) ); document.documentElement.dispatchEvent(clear_form); */ - + if(map_type == 1) ymaps.ready( function(){ init_map( mData, points ) } ); else if (map_type == 2) From edf2723721195ae051ccdc72c3a0274651254714 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 8 Dec 2020 08:57:35 +0200 Subject: [PATCH 081/220] Update version 1.4.0 --- shmapper.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shmapper.php b/shmapper.php index 5f30109..33fdc3f 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,9 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.3.7 + * Version: 1.4.0 + * Requires at least: 5.0 + * Requires PHP: 5.6 * Author: Teplitsa. Technologies for Social Good * Author URI: https://te-st.ru * License: GPL2 From f58a4e2d47ee40d981beaf594fc4f0e53de08e90 Mon Sep 17 00:00:00 2001 From: BootWP Date: Wed, 27 Jan 2021 19:50:40 +0200 Subject: [PATCH 082/220] Added support for importing data from Google Sheets --- assets/css/ShMapper.css | 2 + assets/css/ShMapperDrive.css | 73 ++ assets/google-sheets/composer.json | 5 + assets/google-sheets/composer.lock | 87 ++ assets/google-sheets/google-sheets.php | 25 + assets/google-sheets/vendor/autoload.php | 7 + .../vendor/composer/ClassLoader.php | 445 +++++++ assets/google-sheets/vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 9 + .../vendor/composer/autoload_files.php | 10 + .../vendor/composer/autoload_namespaces.php | 9 + .../vendor/composer/autoload_psr4.php | 10 + .../vendor/composer/autoload_real.php | 70 ++ .../vendor/composer/autoload_static.php | 35 + .../vendor/composer/installed.json | 73 ++ .../vendor/league/csv/CHANGELOG.md | 1050 +++++++++++++++++ .../google-sheets/vendor/league/csv/LICENSE | 20 + .../vendor/league/csv/autoload.php | 18 + .../vendor/league/csv/composer.json | 82 ++ .../vendor/league/csv/src/AbstractCsv.php | 500 ++++++++ .../vendor/league/csv/src/ByteSequence.php | 43 + .../league/csv/src/CannotInsertRecord.php | 75 ++ .../league/csv/src/CharsetConverter.php | 251 ++++ .../league/csv/src/ColumnConsistency.php | 67 ++ .../vendor/league/csv/src/EncloseField.php | 143 +++ .../vendor/league/csv/src/EscapeFormula.php | 152 +++ .../vendor/league/csv/src/Exception.php | 21 + .../vendor/league/csv/src/HTMLConverter.php | 157 +++ .../vendor/league/csv/src/InvalidArgument.php | 21 + .../vendor/league/csv/src/MapIterator.php | 49 + .../csv/src/Polyfill/EmptyEscapeParser.php | 254 ++++ .../vendor/league/csv/src/RFC4180Field.php | 206 ++++ .../vendor/league/csv/src/Reader.php | 435 +++++++ .../vendor/league/csv/src/ResultSet.php | 241 ++++ .../vendor/league/csv/src/Statement.php | 169 +++ .../vendor/league/csv/src/Stream.php | 518 ++++++++ .../vendor/league/csv/src/SyntaxError.php | 21 + .../league/csv/src/UnavailableFeature.php | 21 + .../vendor/league/csv/src/Writer.php | 330 ++++++ .../vendor/league/csv/src/XMLConverter.php | 243 ++++ .../vendor/league/csv/src/functions.php | 138 +++ .../league/csv/src/functions_include.php | 14 + assets/js/ShMapperDrive.admin.js | 136 +++ assets/js/ShMapperDrive.front.js | 11 + class/ShMapper.class.php | 10 +- class/ShMapperDrive.class.php | 523 ++++++++ class/ShMapperDrive_ajax.class.php | 210 ++++ class/ShMapperDriverPreview.class.php | 284 +++++ class/ShMapperPointMessage.class.php | 135 +++ shortcode/shmMapFeed.shortcode.php | 26 + 50 files changed, 7451 insertions(+), 4 deletions(-) create mode 100644 assets/css/ShMapperDrive.css create mode 100644 assets/google-sheets/composer.json create mode 100644 assets/google-sheets/composer.lock create mode 100644 assets/google-sheets/google-sheets.php create mode 100644 assets/google-sheets/vendor/autoload.php create mode 100644 assets/google-sheets/vendor/composer/ClassLoader.php create mode 100644 assets/google-sheets/vendor/composer/LICENSE create mode 100644 assets/google-sheets/vendor/composer/autoload_classmap.php create mode 100644 assets/google-sheets/vendor/composer/autoload_files.php create mode 100644 assets/google-sheets/vendor/composer/autoload_namespaces.php create mode 100644 assets/google-sheets/vendor/composer/autoload_psr4.php create mode 100644 assets/google-sheets/vendor/composer/autoload_real.php create mode 100644 assets/google-sheets/vendor/composer/autoload_static.php create mode 100644 assets/google-sheets/vendor/composer/installed.json create mode 100644 assets/google-sheets/vendor/league/csv/CHANGELOG.md create mode 100644 assets/google-sheets/vendor/league/csv/LICENSE create mode 100644 assets/google-sheets/vendor/league/csv/autoload.php create mode 100644 assets/google-sheets/vendor/league/csv/composer.json create mode 100644 assets/google-sheets/vendor/league/csv/src/AbstractCsv.php create mode 100644 assets/google-sheets/vendor/league/csv/src/ByteSequence.php create mode 100644 assets/google-sheets/vendor/league/csv/src/CannotInsertRecord.php create mode 100644 assets/google-sheets/vendor/league/csv/src/CharsetConverter.php create mode 100644 assets/google-sheets/vendor/league/csv/src/ColumnConsistency.php create mode 100644 assets/google-sheets/vendor/league/csv/src/EncloseField.php create mode 100644 assets/google-sheets/vendor/league/csv/src/EscapeFormula.php create mode 100644 assets/google-sheets/vendor/league/csv/src/Exception.php create mode 100644 assets/google-sheets/vendor/league/csv/src/HTMLConverter.php create mode 100644 assets/google-sheets/vendor/league/csv/src/InvalidArgument.php create mode 100644 assets/google-sheets/vendor/league/csv/src/MapIterator.php create mode 100644 assets/google-sheets/vendor/league/csv/src/Polyfill/EmptyEscapeParser.php create mode 100644 assets/google-sheets/vendor/league/csv/src/RFC4180Field.php create mode 100644 assets/google-sheets/vendor/league/csv/src/Reader.php create mode 100644 assets/google-sheets/vendor/league/csv/src/ResultSet.php create mode 100644 assets/google-sheets/vendor/league/csv/src/Statement.php create mode 100644 assets/google-sheets/vendor/league/csv/src/Stream.php create mode 100644 assets/google-sheets/vendor/league/csv/src/SyntaxError.php create mode 100644 assets/google-sheets/vendor/league/csv/src/UnavailableFeature.php create mode 100644 assets/google-sheets/vendor/league/csv/src/Writer.php create mode 100644 assets/google-sheets/vendor/league/csv/src/XMLConverter.php create mode 100644 assets/google-sheets/vendor/league/csv/src/functions.php create mode 100644 assets/google-sheets/vendor/league/csv/src/functions_include.php create mode 100644 assets/js/ShMapperDrive.admin.js create mode 100644 assets/js/ShMapperDrive.front.js create mode 100644 class/ShMapperDrive.class.php create mode 100644 class/ShMapperDrive_ajax.class.php create mode 100644 class/ShMapperDriverPreview.class.php create mode 100644 class/ShMapperPointMessage.class.php create mode 100644 shortcode/shmMapFeed.shortcode.php diff --git a/assets/css/ShMapper.css b/assets/css/ShMapper.css index 2a0889f..7d74078 100644 --- a/assets/css/ShMapper.css +++ b/assets/css/ShMapper.css @@ -1064,6 +1064,8 @@ tfoot .shm-notify2:after font-size:1rem; font-weight:100; font-family:sans-serif; + max-height: 380px; + overflow-y: auto; } .shm_modal_close { diff --git a/assets/css/ShMapperDrive.css b/assets/css/ShMapperDrive.css new file mode 100644 index 0000000..b0a7140 --- /dev/null +++ b/assets/css/ShMapperDrive.css @@ -0,0 +1,73 @@ +.ganre_picto +{ + display:inline-flex; + align-items:center; +} + +.shm_type_icon, .shm_type_icon2 +{ + width: 20px; + height: 20px; + background-size: 20px; + margin-right:10px; +} +.shmapper-drive-post-content +{ + padding:10px; + margin-bottom:2px; + border:1px solid #00000020; +} +.shmapper-drive-post-content.active +{ + border-color:#FF0000; +} +.shmapper-drive-post-content .title +{ + line-height:1.4; + font-weight:900; +} +#shm_google_params +{ + display:none; +} +.callout-danger +{ + background-color: #f9abab; + border: 1px solid #ff8e8e; + padding:20px; + color:#FFF; +} +.callout-danger li +{ + background-color:transparent!important; + padding:0!important; + border-bottom: 1px solid transparent!important; +} +.d-flex +{ + display:flex!important; +} +.button-2 +{ + width: 44px; + height: 40px; + margin-bottom: 3px !important; + display: flex!important; + justify-content: center; + align-items: center; + text-align: center; +} +.button-reload { + background-size:40%!important; + background-position:center!important; + background-repeat:no-repeat!important; + /*background-image:url(../img/reload.svg)!important;*/ +} + +.balloon-content__header, +.shml-popup-post-content, +.shm_ya_footer +{ + padding:5px!important; + margin:auto!important; +} \ No newline at end of file diff --git a/assets/google-sheets/composer.json b/assets/google-sheets/composer.json new file mode 100644 index 0000000..5a59020 --- /dev/null +++ b/assets/google-sheets/composer.json @@ -0,0 +1,5 @@ +{ + "require": { + "league/csv": "^9.5" + } +} diff --git a/assets/google-sheets/composer.lock b/assets/google-sheets/composer.lock new file mode 100644 index 0000000..39e72c6 --- /dev/null +++ b/assets/google-sheets/composer.lock @@ -0,0 +1,87 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "e161c2ad1c2eeba31c092b193912f79a", + "packages": [ + { + "name": "league/csv", + "version": "9.5.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/csv.git", + "reference": "b348d09d0d258a4f068efb50a2510dc63101c213" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/b348d09d0d258a4f068efb50a2510dc63101c213", + "reference": "b348d09d0d258a4f068efb50a2510dc63101c213", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": ">=7.0.10" + }, + "require-dev": { + "ext-curl": "*", + "friendsofphp/php-cs-fixer": "^2.12", + "phpstan/phpstan": "^0.9.2", + "phpstan/phpstan-phpunit": "^0.9.4", + "phpstan/phpstan-strict-rules": "^0.9.0", + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Csv\\": "src" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://github.com/nyamsprod/", + "role": "Developer" + } + ], + "description": "Csv data manipulation made easy in PHP", + "homepage": "http://csv.thephpleague.com", + "keywords": [ + "csv", + "export", + "filter", + "import", + "read", + "write" + ], + "time": "2019-12-15T19:51:41+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/assets/google-sheets/google-sheets.php b/assets/google-sheets/google-sheets.php new file mode 100644 index 0000000..c57a688 --- /dev/null +++ b/assets/google-sheets/google-sheets.php @@ -0,0 +1,25 @@ +getRecords()); + + $data = explode("\n", $data); + $result = []; + foreach ($data as $row) + { + $result[] = str_getcsv($row); + } + return $result; +} + +//$id = "1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U"; +//print_r(get_sheet($id)); \ No newline at end of file diff --git a/assets/google-sheets/vendor/autoload.php b/assets/google-sheets/vendor/autoload.php new file mode 100644 index 0000000..e9fdd3b --- /dev/null +++ b/assets/google-sheets/vendor/autoload.php @@ -0,0 +1,7 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + private $classMapAuthoritative = false; + private $missingClasses = array(); + private $apcuPrefix; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/assets/google-sheets/vendor/composer/LICENSE b/assets/google-sheets/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/assets/google-sheets/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +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. + diff --git a/assets/google-sheets/vendor/composer/autoload_classmap.php b/assets/google-sheets/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..7a91153 --- /dev/null +++ b/assets/google-sheets/vendor/composer/autoload_classmap.php @@ -0,0 +1,9 @@ + $vendorDir . '/league/csv/src/functions_include.php', +); diff --git a/assets/google-sheets/vendor/composer/autoload_namespaces.php b/assets/google-sheets/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..b7fc012 --- /dev/null +++ b/assets/google-sheets/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/league/csv/src'), +); diff --git a/assets/google-sheets/vendor/composer/autoload_real.php b/assets/google-sheets/vendor/composer/autoload_real.php new file mode 100644 index 0000000..4a3c475 --- /dev/null +++ b/assets/google-sheets/vendor/composer/autoload_real.php @@ -0,0 +1,70 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require_once __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit1fa9c47f05d437de3eb50dbf62eb57a1::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInit1fa9c47f05d437de3eb50dbf62eb57a1::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire1fa9c47f05d437de3eb50dbf62eb57a1($fileIdentifier, $file); + } + + return $loader; + } +} + +function composerRequire1fa9c47f05d437de3eb50dbf62eb57a1($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + require $file; + + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + } +} diff --git a/assets/google-sheets/vendor/composer/autoload_static.php b/assets/google-sheets/vendor/composer/autoload_static.php new file mode 100644 index 0000000..41284ab --- /dev/null +++ b/assets/google-sheets/vendor/composer/autoload_static.php @@ -0,0 +1,35 @@ + __DIR__ . '/..' . '/league/csv/src/functions_include.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'L' => + array ( + 'League\\Csv\\' => 11, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'League\\Csv\\' => + array ( + 0 => __DIR__ . '/..' . '/league/csv/src', + ), + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit1fa9c47f05d437de3eb50dbf62eb57a1::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit1fa9c47f05d437de3eb50dbf62eb57a1::$prefixDirsPsr4; + + }, null, ClassLoader::class); + } +} diff --git a/assets/google-sheets/vendor/composer/installed.json b/assets/google-sheets/vendor/composer/installed.json new file mode 100644 index 0000000..0a821b9 --- /dev/null +++ b/assets/google-sheets/vendor/composer/installed.json @@ -0,0 +1,73 @@ +[ + { + "name": "league/csv", + "version": "9.5.0", + "version_normalized": "9.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/csv.git", + "reference": "b348d09d0d258a4f068efb50a2510dc63101c213" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/b348d09d0d258a4f068efb50a2510dc63101c213", + "reference": "b348d09d0d258a4f068efb50a2510dc63101c213", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": ">=7.0.10" + }, + "require-dev": { + "ext-curl": "*", + "friendsofphp/php-cs-fixer": "^2.12", + "phpstan/phpstan": "^0.9.2", + "phpstan/phpstan-phpunit": "^0.9.4", + "phpstan/phpstan-strict-rules": "^0.9.0", + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters" + }, + "time": "2019-12-15T19:51:41+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "League\\Csv\\": "src" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://github.com/nyamsprod/", + "role": "Developer" + } + ], + "description": "Csv data manipulation made easy in PHP", + "homepage": "http://csv.thephpleague.com", + "keywords": [ + "csv", + "export", + "filter", + "import", + "read", + "write" + ] + } +] diff --git a/assets/google-sheets/vendor/league/csv/CHANGELOG.md b/assets/google-sheets/vendor/league/csv/CHANGELOG.md new file mode 100644 index 0000000..54b98fc --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/CHANGELOG.md @@ -0,0 +1,1050 @@ +# Changelog + +All Notable changes to `Csv` will be documented in this file + +## 9.5.0 - 2019-12-15 + +### Added + +- Improve package exception throwing by adding new exceptions classes that extends +the `League\Csv\Exception` exception marker class [#360](https://github.com/thephpleague/csv/issues/360), [#361](https://github.com/thephpleague/csv/issues/360) +feature proposed and developed by [Darren Miller](https://github.com/dmlogic) + - `League\Csv\UnavailableFeature` + - `League\Csv\InvalidArgument` + - `League\Csv\SyntaxError` + +### Deprecated + +- Nothing + +### Fixed + +- bug fix `bom_match` function see issue [#363](https://github.com/thephpleague/csv/issues/363) resolved based on PR from [Jerry Martinez](https://github.com/jmwebservices) +- bug fix `delemiter_detect` function see issue [#366](https://github.com/thephpleague/csv/issues/366) + +### Removed + +- Nothing + +## 9.4.1 - 2019-10-17 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- bug fix the escape mechanism polyfill [#358](https://github.com/thephpleague/csv/pull/358) fix provided by [on2](https://github.com/on2) + +### Removed + +- Nothing + +## 9.4.0 - 2019-10-02 + +### Added + +- Adding support for controlling empty record presence in `Reader::getRecords` return value. + - `Reader::includeEmptyRecords` + - `Reader::skipEmptyRecords` + - `Reader::isEmptyRecordsIncluded` + +- Adding support for controlling Input BOM usage in the library: + - `AbstractCsv::skipInputBOM` + - `AbstractCsv::includeInputBOM` + - `AbstractCsv::isInputBOMIncluded` + +### Deprecated + +- Nothing + +### Fixed + +- `EmptyEscapeParser::parse` no longer auto skip empty records + +### Removed + +- Nothing + +## 9.3.0 - 2019-07-30 + +### Added + +- `XMLConverter::import` see [#348](https://github.com/thephpleague/csv/pull/348) thanks [@kusabi](https://github.com/kusabi) +- Support for `thead`, `tfoot` and `tbody` in `HTMLConverter::convert` via the addition of +protected methods `HTMLConverter::addHTMLAttributes` and `HTMLConverter::appendHeaderSection` [#348](https://github.com/thephpleague/csv/pull/348) thanks [@kusabi](https://github.com/kusabi) + +### Deprecated + +- Nothing + +### Fixed + +- Internal improvement in `Reader` dockblock thanks [@ghobaty](https://github.com/ghobaty). +- Improve strict comparison when using `preg_match`. +- Improve CSV control in `Stream`. + +### Removed + +- Nothing + +## 9.2.1 - 2019-06-08 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- `AbstractCSV::chunk` see [#325](https://github.com/thephpleague/csv/pull/325) remove CSV flags from the Stream class to avoid infinite loop. +- Internal improve `HTMLConverter`. + +### Removed + +- Nothing + +## 9.2.0 - 2019-03-08 + +### Added + +- Supports for PHP7.4 empty string for the escape character +- Supports for empty string for the escape character with a polyfill for PHP7.4- versions. +- `AbstractCSV::getPathname` see [#321](https://github.com/thephpleague/csv/pull/321) thanks [@tomkyle](https://github.com/tomkyle) + +### Deprecated + +- `League\Csv\RFC4180Field` use `AbstractCSV::setEscape` method with an empty string instead. + +### Fixed + +- `AbstractCSV::__construct` correctly initializes properties +- `AbstractCSV::createFromString` named constructor default argument is now the empty string +- `AbstractCSV::setEscape` now accepts the empty string like `fputcsv` and `fgetcsv` +- `Writer::insertOne` fixes throwing exception when record can not be inserted +- `XMLConverter` convert to string the record value to avoid PHP warning on `null` value +- Internal `Stream::createFromString` named constructor default argument is now the empty string +- Internal `Stream::fwrite` improved +- Internal `Stream::__destruct` no longer emit warning on invalid stream filter removal. +- Internal `Stream::seek` returns `0` if the seeked position `0` is valid see [#321](https://github.com/thephpleague/csv/pull/332) thanks [@HaozhouChen](https://github.com/HaozhouChen) + +- `Reader:getHeader` when the record is an empty line. + +### Removed + +- Nothing + +## 9.1.4 - 2018-05-01 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- `Writer::setFlushThreshold` should accept 1 as an argument [#289](https://github.com/thephpleague/csv/issue/289) +- `CharsetConverter::convert` should not try to convert numeric value [#287](https://github.com/thephpleague/csv/issue/287) + +### Removed + +- Nothing + +## 9.1.3 - 2018-03-12 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- `Writer::insertOne` allow empty array to be added to the CSV (allow inserting empty row) +- Removed all return type from named constructor see [#285](https://github.com/thephpleague/csv/pull/285) +- Added PHPStan for static code analysis + +### Removed + +- Nothing + +## 9.1.2 - 2018-02-05 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- `is_iterable` polyfill for PHP7.0 +- `Reader::getHeader` no longer throws exception because of a bug in PHP7.2+ [issue #279](https://github.com/thephpleague/csv/issues/279) + +### Removed + +- Nothing + +## 9.1.1 - 2017-11-28 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- issue with `error_get_last` usage when using a modified PHP error handler see [#254](https://github.com/thephpleague/csv/issues/254) - fixed by [@csiszarattila](https://github.com/csiszarattila) + +- Removed seekable word from Stream exception messages. + +### Removed + +- Nothing + +## 9.1.0 - 2017-10-20 + +### Added + +- Support for non seekable stream. When seekable feature are required an exceptions will be thrown. +- `League\Csv\EncloseField` to force enclosure insertion on every field. [#269](https://github.com/thephpleague/csv/pull/269) +- `League\Csv\EscapeFormula` a League CSV formatter to prevent CSV Formula Injection in Spreadsheet programs. +- `League\Csv\RFC4180Field::addTo` accept an option `$replace_whitespace` argument to improve RFC4180 compliance. +- `League\Csv\Abstract::getContent` to replace `League\Csv\Abstract::__toString`. The `__toString` method may trigger a Fatal Error with non seekable stream, instead you are recommended to used the new `getContent` method which will trigger an exception instead. + +### Deprecated + +- `League\Csv\Abstract::__toString` use `League\Csv\Abstract::getContent` instead. the `__toString` triggers a Fatal Error when used on a non-seekable CSV document. use the `getContent` method instead which will trigger an exception instead. + +### Fixed + +- Bug fixes headers from AbstractCsv::output according to RFC6266 [#250](https://github.com/thephpleague/csv/issues/250) +- Make sure the internal source still exists before closing it [#251](https://github.com/thephpleague/csv/issues/251) +- Make sure the `Reader::createFromPath` default open mode is `r` see [#258](https://github.com/thephpleague/csv/pull/258) and [#266](https://github.com/thephpleague/csv/pull/266) + +### Removed + +- Nothing + +## 9.0.1 - 2017-08-21 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- CSV controls not applied when calling Writer::insertOne + +### Removed + +- Nothing + +## 9.0.0 - 2017-08-18 + +### Added + +- Improved CSV Records selection + - `League\Csv\Reader::getRecords` to access all CSV records + - `League\Csv\Statement` provides a constraint builder to select CSV records. + - `League\Csv\ResultSet` represents the result set of the selected CSV records. + - `League\Csv\delimiter_detect` function to detect CSV delimiter character +- Improved CSV document header selection. + - `League\Csv\Reader::getHeader` + - `League\Csv\Reader::getHeaderOffset` + - `League\Csv\Reader::setHeaderOffset` +- Improved CSV Records conversion + - `League\Csv\CharsetConverter` converts CSV records charset. + - `League\Csv\XMLConverter` converts CSV records into DOMDocument + - `League\Csv\HTMLConverter` converts CSV records into HTML table. +- Improved Exception handling + - `League\Csv\Exception` the default exception + - `League\Csv\CannotInsertRecord` +- Improved CSV document output + - `League\Csv\AbstractCsv::chunk` method to output the CSV document in chunk + - `League\Csv\bom_match` function to detect BOM sequence in a given string + - `League\Csv\ByteSequence` interface to decoupled BOM sequence from CSV documents +- Improved CSV records column count consistency on insertion + - `League\Csv\ColumnConsistency` +- Improved CSV document flush mechanism on insertion + - `League\Csv\Writer::setFlushThreshold` + - `League\Csv\Writer::getFlushThreshold` +- Improve RFC4180 compliance + - `League\Csv\RFC4180Field` to format field according to RFC4180 rules + +### Deprecated + +- Nothing + +### Fixed + +- Improved CSV record insertion + - `League\Csv\Writer::insertOne` only accepts an array and returns a integer + - `League\Csv\Writer::insertAll` only accepts an iterable of array and returns an integer + +- Normalized CSV offset returned value + - `League\Csv\Reader::fetchColumn` always returns the CSV document original offset. + +### Removed + +- `examples` directory +- `PHP5` support +- The following method is removed because The BOM API is simplified: + - `League\Csv\AbstractCsv::stripBOM` +- All conversion methods are removed in favor of the conversion classes: + - `League\Csv\Writer::jsonSerialize` + - `League\Csv\AbstractCsv::toHTML` + - `League\Csv\AbstractCsv::toXML` + - `League\Csv\AbstractCsv::setInputEncoding` + - `League\Csv\AbstractCsv::getInputEncoding` +- The following methods are removed because the PHP stream filter API is simplified: + - `League\Csv\AbstractCsv::isActiveStreamFilter` + - `League\Csv\AbstractCsv::setStreamFilterMode` + - `League\Csv\AbstractCsv::appendStreamFilter` + - `League\Csv\AbstractCsv::prependStreamFilter` + - `League\Csv\AbstractCsv::removeStreamFilter` + - `League\Csv\AbstractCsv::clearStreamFilters` +- The following methods are removed because switching between connections is no longer possible: + - `League\Csv\AbstractCsv::newReader` + - `League\Csv\AbstractCsv::newWriter` + - `League\Csv\Reader::getNewline` + - `League\Csv\Reader::setNewline` +- The Exception mechanism is improved thus the following class is removed: + - `League\Csv\Exception\InvalidRowException`; +- The CSV records filtering methods are removed in favor of the `League\Csv\Statement` class: + - `League\Csv\AbstractCsv::addFilter`, + - `League\Csv\AbstractCsv::addSortBy`, + - `League\Csv\AbstractCsv::setOffset`, + - `League\Csv\AbstractCsv::setLimit`; +- CSV records selecting API methods is simplified: + - `League\Csv\Reader::each` + - `League\Csv\Reader::fetch` + - `League\Csv\Reader::fetchAll` + - `League\Csv\Reader::fetchAssoc` + - `League\Csv\Reader::fetchPairsWithoutDuplicates` +- Formatting and validating CSV records on insertion is simplified, the following methods are removed: + - `League\Csv\Writer::hasFormatter` + - `League\Csv\Writer::removeFormatter` + - `League\Csv\Writer::clearFormatters` + - `League\Csv\Writer::hasValidator` + - `League\Csv\Writer::removeValidator` + - `League\Csv\Writer::clearValidators` + - `League\Csv\Writer::getIterator` +- The following Formatters and Validators classes are removed from the package: + - `League\Csv\Plugin\SkipNullValuesFormatter` + - `League\Csv\Plugin\ForbiddenNullValuesValidator` + - `League\Csv\Plugin\ColumnConsistencyValidator` *replace by `League\Csv\ColumnConsistency`* +- `League\Csv\Writer` no longers implements the `IteratorAggregate` interface +- `League\Csv\AbstractCsv::fetchDelimitersOccurrence` is removed *replace by `League\Csv\delimiter_detect` function* + +## 8.2.2 - 2017-07-12 + +### Added + +- None + +### Deprecated + +- None + +### Fixed + +- `Writer::insertOne` was silently failing when inserting record in a CSV document in non-writing mode. +- bug fix docblock + +### Removed + +- None + +## 8.2.1 - 2017-02-22 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- internal `Reader::getRow` when using a `StreamIterator` [issue #213](https://github.com/thephpleague/csv/issues/213) +- Removed `@deprecated` from selected methods [issue #208](https://github.com/thephpleague/csv/issues/213) + +### Removed + +- Nothing + +## 8.2.0 - 2017-01-25 + +### Added + +- `AbstractCsv::createFromStream` to enable working with resource stream [issue #202](https://github.com/thephpleague/csv/issues/202) + +### Deprecated + +- `League\Csv\AbstractCsv::stripBom` +- `League\Csv\Reader::getOffset` +- `League\Csv\Reader::getLimit` +- `League\Csv\Reader::getSortBy` +- `League\Csv\Reader::getFilter` +- `League\Csv\Reader::setOffset` +- `League\Csv\Reader::setLimit` +- `League\Csv\Reader::addSortBy` +- `League\Csv\Reader::addFilter` +- `League\Csv\Reader::fetch` +- `League\Csv\Reader::each` +- `League\Csv\Reader::fetchPairsWithoutDuplicates` +- `League\Csv\Reader::fetchAssoc` +- `League\Csv\Writer::removeFormatter` +- `League\Csv\Writer::hasFormatter` +- `League\Csv\Writer::clearFormatters` +- `League\Csv\Writer::removeValidator` +- `League\Csv\Writer::hasValidator` +- `League\Csv\Writer::clearValidators` +- `League\Csv\Writer::jsonSerialize` +- `League\Csv\Writer::toHTML` +- `League\Csv\Writer::toXML` + +### Fixed + +- Nothing + +### Removed + +- Nothing + +## 8.1.2 - 2016-10-27 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- BOM filtering fix [issue #184](https://github.com/thephpleague/csv/issues/184) +- `AbstractCsv::BOM_UTF32_LE` value fixed + +### Removed + +- Nothing + +## 8.1.1 - 2016-09-05 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- `getInputBOM` method name is now consistent everywhere in the API [PR #171](https://github.com/thephpleague/csv/pull/171) +- preserve fileObject CSV controls [commit #8a20c56](https://github.com/thephpleague/csv/commit/8a20c56144effa552a8cba5d8c626063222975b7) +- Change `output` method header content-type value to `text/csv` [PR #175](https://github.com/thephpleague/csv/pull/175) + +### Removed + +- Nothing + +## 8.1.0 - 2016-05-31 + +### Added + +- The package now includes its own autoloader. +- `Ouput::getInputEncoding` +- `Ouput::setInputEncoding` + +### Deprecated + +- `Ouput::getEncodingFrom` replaced by `Ouput::getInputEncoding` +- `Ouput::setEncodingFrom` replaced by `Ouput::setInputEncoding` + +### Fixed + +- Stream Filters are now url encoded before usage [issue #72](https://github.com/thephpleague/csv/issues/72) +- All internal parameters are now using the snake case format + +### Removed + +- Nothing + +## 8.0.0 - 2015-12-11 + +### Added + +- `Reader::fetchPairs` +- `Reader::fetchPairsWithoutDuplicates` + +### Deprecated + +- Nothing + +### Fixed + +- `Reader::fetchColumn` and `Reader::fetchAssoc` now return `Iterator` +- `Reader::fetchAssoc` callable argument expects an indexed row using the submitted keys as its first argument +- `Reader::fetchColumn` callable argument expects the selected column value as its first argument +- Default value on `setOutputBOM` is removed +- `AbstractCsv::getOutputBOM` always return a string +- `AbstractCsv::getInputBOM` always return a string + +### Removed + +- `Controls::setFlags` +- `Controls::getFlags` +- `Controls::detectDelimiterList` +- `QueryFilter::removeFilter` +- `QueryFilter::removeSortBy` +- `QueryFilter::hasFilter` +- `QueryFilter::hasSortBy` +- `QueryFilter::clearFilter` +- `QueryFilter::clearSortBy` +- `Reader::query` +- The `$newline` argument from `AbstractCsv::createFromString` + +## 7.2.0 - 2015-11-02 + +### Added + +- `Reader::fetch` replaces `League\Csv\Reader::query` for naming consistency +- `Controls::fetchDelimitersOccurrence` to replace `Controls::detectDelimiterList` the latter gives erronous results + +### Deprecated + +- `Controls::detectDelimiterList` +- `Reader::query` +- The `$newline` argument from `AbstractCsv::createFromString` + +### Fixed + +- Streamming feature no longer trim filter name argument [issue #122](https://github.com/thephpleague/csv/issues/122) +- Fix default `SplFileObject` flags usage [PR #130](https://github.com/thephpleague/csv/pull/130) +- `AbstractCsv::createFromString` no longer trim the submitted string [issue #132](https://github.com/thephpleague/csv/issues/132) + +### Removed + +- Nothing + +## 7.1.2 - 2015-06-10 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- Enclosures should be removed when a BOM sequence is stripped [issue #102](http://github.com/thephpleague/csv/issues/99) + +### Removed + +- Nothing + +## 7.1.1 - 2015-05-20 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- `SplFileObject` flags were not always applied using query filter [issue #99](http://github.com/thephpleague/csv/issues/99) + +### Removed + +- Nothing + +## 7.1.0 - 2015-05-06 + +### Added + +- `stripBOM` query filtering method to ease removing the BOM sequence when querying the CSV document. +- All query filters are now accessible in the `Writer` class for conversion methods. + +### Deprecated + +- Nothing + +### Fixed + +- Internal code has been updated to take into account [issue #68479](http://bugs.php.net/68479) +- `setFlags` on conversion methods SplFileObject default flags are `SplFileObject::READ_AHEAD|SplFileObject::SKIP_EMPTY` +- `insertOne` now takes into account the escape character when modified after the first insert. + +### Removed + +- Nothing + +## 7.0.1 - 2015-03-23 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- `setFlags`: `SplFileObject::DROP_NEW_LINE` can be remove using `setFlags` method. + +### Removed + +- Nothing + +## 7.0.0 - 2015-02-19 + +### Added + +- A new flexible mechanism to format and validate a row before its insertion by adding + - `Writer::addFormatter` to add a formatter to the `Writer` object + - `Writer::removeFormatter` to remove an already registered formatter + - `Writer::hasFormatter` to detect the presence of a formatter + - `Writer::clearFormatters` to clear all registered formatter + - `Writer::addValidator` to add a validator to the `Writer` object + - `Writer::removeValidator` to remove an already registered validator + - `Writer::hasValidator` to detect the presence of a validator + - `Writer::clearValidators` to clear all registered validator + - `League\Csv\Exception\InvalidRowException` exception thrown when row validation failed +- Classes to maintain removed features from the `Writer` class + - `League\Csv\Plugin\ColumnConsistencyValidator` to validate column consistency on insertion + - `League\Csv\Plugin\ForbiddenNullValuesValidator` to validate `null` value on insertion + - `League\Csv\Plugin\SkipNullValuesFormatter` to format `null` value on insertion + +### Deprecated + +- Nothing + +### Fixed + +- `jsonSerialize`, `toXML` and `toHTML` output can be modified using `Reader` query options methods. +- `AbstractCSV::detectDelimiterList` index keys now represents the occurrence of the found delimiter. +- `getNewline` and `setNewline` are accessible on the `Reader` class too. +- the named constructor `createFromString` now accepts the `$newline` sequence as a second argument to specify the last added new line character to better work with interoperability. +- Default value on CSV controls setter methods `setDelimiter`, `setEnclosure` and `setEscape` are removed +- Default `SplFileObject` flags value is now `SplFileObject::READ_CSV|SplFileObject::DROP_NEW_LINE` +- All CSV properties are now copied when using `newReader` and `newWriter` methods +- BOM addition on output improved by removing if found the existing BOM character +- the `AbstractCSV::output` method now returns the number of bytes send to the output buffer +- `Reader::fetchColumn` will automatically filter out non existing values from the return array + +### Removed + +- Setting `ini_set("auto_detect_line_endings", true);` is no longer set in the class constructor. Mac OS X users must explicitly set this ini options in their script. +- `Writer` and `Reader` default constructor are removed from public API in favor of the named constructors. +- All `Writer` methods and constant related to CSV data validation and formatting before insertion + - `Writer::getNullHandlingMode` + - `Writer::setNullHandlingMode` + - `Writer::setColumnsCount` + - `Writer::getColumnsCount` + - `Writer::autodetectColumnsCount` + - `Writer::NULL_AS_EXCEPTION` + - `Writer::NULL_AS_EMPTY` + - `Writer::NULL_AS_SKIP_CELL` + +## 6.3.0 - 2015-01-21 + +### Added + +- `AbstractCSV::setOutputBOM` +- `AbstractCSV::getOutputBOM` +- `AbstractCSV::getInputBOM` + +to manage BOM character with CSV. + +### Deprecated + +- Nothing + +### Fixed + +- Nothing + +### Removed + +- Nothing + +## 6.2.0 - 2014-12-12 + +### Added + +- `Writer::setNewline` , `Writer::getNewline` to control the newline sequence character added at the end of each CSV row. + +### Deprecated + +- Nothing + +### Fixed + +- Nothing + +### Removed + +- Nothing + +## 6.1.0 - 2014-12-08 + +### Added + +- `Reader::fetchAssoc` now also accepts an integer as first argument representing a row index. + +### Deprecated + +- Nothing + +### Fixed + +- Nothing + +### Removed + +- Nothing + +## 6.0.1 - 2014-11-12 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- Bug Fixed `detectDelimiterList` + +### Removed + +- Nothing + +## 6.0.0 - 2014-08-28 + +### Added + +- Stream Filter API in `League\Csv\AbstractCsv` +- named constructors `createFromPath` and `createFromFileObject` in `League\Csv\AbstractCsv` to ease CSV object instantiation +- `detectDelimiterList` in `League\Csv\AbstractCsv` to replace and remove the use of `RuntimeException` in `detectDelimiter` +- `setEncodingFrom` and `setDecodingFrom` in `League\Csv\AbstractCsv` to replace `setEncoding` and `getEncoding` for naming consistency +- `newWriter` and `newReader` methods in `League\Csv\AbstractCsv` to replace `Writer::getReader` and `Reader::getWriter` + +### Deprecated + +- Nothing + +### Fixed + +- `League\Csv\Reader::each` more strict `$callable` MUST returns `true` + +### Remove + +- `League\Csv\AbstractCsv::detectDelimiter` +- `League\Csv\AbstractCsv::setEncoding` and `League\Csv\AbstractCsv::getEncoding` +- `League\Csv\Reader::setSortBy` +- `League\Csv\Reader::setFilter` +- `League\Csv\Reader::getWriter` +- `League\Csv\Writer::getReader` +- `League\Csv\Reader::fetchCol` + +## 5.4.0 - 2014-04-17 + +### Added + +- `League\Csv\Writer::setColumnsCount`, `League\Csv\Writer::getColumnsCount`, `League\Csv\Writer::autodetectColumnsCount` to enable column consistency in writer mode +- `League\Csv\Reader::fetchColumn` replaces `League\Csv\Reader::fetchCol` for naming consistency + +### Deprecated + +- `League\Csv\Reader::fetchCol` + +### Fixed + +- Nothing + +### Removed + +- Nothing + +## 5.3.1 - 2014-04-09 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- `$open_mode` default to `r+` in `League\Csv\AbstractCsv` constructors + +### Removed + +- Nothing + +## 5.3.0 - 2014-03-24 + +### Added + +- `League\Csv\Writer::setNullHandlingMode` and `League\Csv\Writer::getNullHandlingMode` to handle `null` value + +### Deprecated + +- Nothing + +### Fixed + +- `setting ini_set("auto_detect_line_endings", true);` no longer needed for Mac OS + +### Removed + +- Nothing + +## 5.2.0 - 2014-03-13 + +### Added + +- `League\Csv\Reader::addSortBy`, `League\Csv\Reader::removeSortBy`, `League\Csv\Reader::hasSortBy`, `League\Csv\Reader::clearSortBy` to improve sorting +- `League\Csv\Reader::clearFilter` to align extract filter capabilities to sorting capabilities + +### Deprecated + +- `League\Csv\Reader::setSortBy` replaced by a better implementation + +### Fixed + +- `League\Csv\Reader::setOffset` now default to 0; +- `League\Csv\Reader::setLimit` now default to -1; +- `detectDelimiter` bug fixes + +### Removed + +- Nothing + +## 5.1.0 - 2014-03-11 + +### Added + +- `League\Csv\Reader::each` to ease CSV import data +- `League\Csv\Reader::addFilter`, `League\Csv\Reader::removeFilter`, `League\Csv\Reader::hasFilter` to improve extract filter capabilities +- `detectDelimiter` method to `League\Csv\AbstractCsv` to sniff CSV delimiter character. + +### Deprecated + +- `League\Csv\Reader::setFilter` replaced by a better implementation + +### Fixed + +- Nothing + +### Removed + +- Nothing + +## 5.0.0 - 2014-02-28 + +### Added + +- Change namespace from `Bakame\Csv` to `League\Csv` + +### Deprecated + +- Nothing + +### Fixed + +- Nothing + +### Removed + +- Nothing + +## 4.2.1 - 2014-02-22 + +### Fixed + +- `$open_mode` validation is done by PHP internals directly + +### Removed + +- Nothing + +## 4.2.0 - 2014-02-17 + +### Added + +- `toXML` method to transcode the CSV into a XML in `Bakame\Csv\AbstractCsv` + +### Fixed + +- `toHTML` method bug in `Bakame\Csv\AbstractCsv` +- `output` method accepts an optional `$filename` argument +- `Bakame\Csv\Reader::fetchCol` default to `$columnIndex = 0` +- `Bakame\Csv\Reader::fetchOne` default to `$offset = 0` + +## 4.1.2 - 2014-02-14 + +### Added + +- Move from `PSR-0` to `PSR-4` to autoload the library + +## 4.1.1 - 2014-02-14 + +### Fixed + +- `Bakame\Csv\Reader` methods fixed +- `jsonSerialize` bug fixed + +## 4.1.0 - 2014-02-07 + +### Added + +- `getEncoding` and `setEncoding` methods to `Bakame\Csv\AbstractCsv` + +### Fixed + +- `Bakame\Csv\Writer::insertOne` takes into account CSV controls +- `toHTML` method takes into account encoding + +## 4.0.0 - 2014-02-05 + +### Added + +- `Bakame\Csv\Writer` +- `Bakame\Csv\Writer` and `Bakame\Csv\Reader` extend `Bakame\Csv\AbstractCsv` + +### Deprecated + +- Nothing + +### Fixed + +- `Bakame\Csv\Reader::fetchOne` is no longer deprecated +- `Bakame\Csv\Reader::fetchCol` no longer accepts a third parameter `$strict` + +### Removed + +- `Bakame\Csv\Codec` now the library is composer of 2 main classes +- `Bakame\Csv\Reader::getFile` +- `Bakame\Csv\Reader::fetchValue` +- `Bakame\Csv\Reader` no longer implements the `ArrayAccess` interface + +## 3.3.0 - 2014-01-28 + +### Added + +- `Bakame\Csv\Reader` implements `IteratorAggregate` Interface +- `Bakame\Csv\Reader::createFromString` to create a CSV object from a raw string +- `Bakame\Csv\Reader::query` accept an optional `$callable` parameter + +### Deprecated + +- `Bakame\Csv\Reader::getFile` in favor of `Bakame\Csv\Reader::getIterator` + +### Removed + +- `Bakame\Csv\ReaderInterface` useless interface + +### Fixed + +- `Bakame\Csv\Reader::fetch*` `$callable` parameter is normalized to accept an array +- `Bakame\Csv\Reader::fetchCol` accepts a third parameter `$strict` + +## 3.2.0 - 2014-01-16 + +### Added + +- `Bakame\Csv\Reader` implements the following interfaces `JsonSerializable` and `ArrayAccess` +- `Bakame\Csv\Reader::toHTML` to output the CSV as a HTML table +- `Bakame\Csv\Reader::setFilter`, `Bakame\Csv\Reader::setSortBy`, `Bakame\Csv\Reader::setOffset`, `Bakame\Csv\Reader::setLimit`, `Bakame\Csv\Reader::query` to perform SQL like queries on the CSV content. +- `Bakame\Csv\Codec::setFlags`, `Bakame\Csv\Codec::getFlags`, Bakame\Csv\Codec::__construct : add an optional `$flags` parameter to enable the use of `SplFileObject` constants flags + +### Deprecated + +- `Bakame\Csv\Reader::fetchOne` replaced by `Bakame\Csv\Reader::offsetGet` +- `Bakame\Csv\Reader::fetchValue` useless method + +## 3.1.0 - 2014-01-13 + +### Added + +- `Bakame\Csv\Reader::output` output the CSV data directly in the output buffer +- `Bakame\Csv\Reader::__toString` can be use to echo the raw CSV + +## 3.0.1 - 2014-01-10 + +### Fixed + +- `Bakame\Csv\Reader::fetchAssoc` when users keys and CSV row data don't have the same length + +## 3.0.0 - 2014-01-10 + +### Added + +- `Bakame\Csv\ReaderInterface` +- `Bakame\Csv\Reader` class + +### Fixed + +- `Bakame\Csv\Codec::loadString`returns a `Bakame\Csv\Reader` object +- `Bakame\Csv\Codec::loadFile` returns a `Bakame\Csv\Reader` object +- `Bakame\Csv\Codec::save` returns a `Bakame\Csv\Reader` object + +## 2.0.0 - 2014-01-09 + +### Added + +- `Bakame\Csv\CsvCodec` class renamed `Bakame\Csv\Codec` + +### Deprecated + +- Nothing + +### Fixed + +- Nothing + +### Removed + +- `Bakame\Csv\Codec::create` from public API + +## 1.0.0 - 2013-12-03 + +Initial Release of `Bakame\Csv` diff --git a/assets/google-sheets/vendor/league/csv/LICENSE b/assets/google-sheets/vendor/league/csv/LICENSE new file mode 100644 index 0000000..baa67a6 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-2017 ignace nyamagana butera + +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. diff --git a/assets/google-sheets/vendor/league/csv/autoload.php b/assets/google-sheets/vendor/league/csv/autoload.php new file mode 100644 index 0000000..a5af4a0 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/autoload.php @@ -0,0 +1,18 @@ +=7.0.10", + "ext-dom" : "*", + "ext-json" : "*", + "ext-mbstring" : "*" + }, + "require-dev": { + "ext-curl" : "*", + "friendsofphp/php-cs-fixer": "^2.12", + "phpunit/phpunit" : "^6.0", + "phpstan/phpstan": "^0.9.2", + "phpstan/phpstan-strict-rules": "^0.9.0", + "phpstan/phpstan-phpunit": "^0.9.4" + }, + "autoload": { + "psr-4": { + "League\\Csv\\": "src" + }, + "files": ["src/functions_include.php"] + }, + "autoload-dev": { + "psr-4": { + "LeagueTest\\Csv\\": "tests" + } + }, + "scripts": { + "phpcs": "php-cs-fixer fix -v --diff --dry-run --allow-risky=yes --ansi", + "phpstan-src": "phpstan analyse -l max -c phpstan.src.neon src --ansi", + "phpstan-tests": "phpstan analyse -l max -c phpstan.tests.neon tests --ansi", + "phpstan": [ + "@phpstan-src", + "@phpstan-tests" + ], + "phpunit": "phpunit --coverage-text", + "test": [ + "@phpcs", + "@phpstan", + "@phpunit" + ] + }, + "scripts-descriptions": { + "phpcs": "Runs coding style test suite", + "phpstan": "Runs complete codebase static analysis", + "phpstan-src": "Runs source code static analysis", + "phpstan-test": "Runs test suite static analysis", + "phpunit": "Runs unit and functional testing", + "test": "Runs full test suite" + }, + "suggest": { + "ext-iconv" : "Needed to ease transcoding CSV using iconv stream filters" + }, + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "config": { + "sort-packages": true + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/AbstractCsv.php b/assets/google-sheets/vendor/league/csv/src/AbstractCsv.php new file mode 100644 index 0000000..0c35837 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/AbstractCsv.php @@ -0,0 +1,500 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use Generator; +use SplFileObject; +use function filter_var; +use function get_class; +use function mb_strlen; +use function rawurlencode; +use function sprintf; +use function str_replace; +use function str_split; +use function strcspn; +use function strlen; +use const FILTER_FLAG_STRIP_HIGH; +use const FILTER_FLAG_STRIP_LOW; +use const FILTER_SANITIZE_STRING; + +/** + * An abstract class to enable CSV document loading. + */ +abstract class AbstractCsv implements ByteSequence +{ + /** + * The stream filter mode (read or write). + * + * @var int + */ + protected $stream_filter_mode; + + /** + * collection of stream filters. + * + * @var bool[] + */ + protected $stream_filters = []; + + /** + * The CSV document BOM sequence. + * + * @var string|null + */ + protected $input_bom = null; + + /** + * The Output file BOM character. + * + * @var string + */ + protected $output_bom = ''; + + /** + * the field delimiter (one character only). + * + * @var string + */ + protected $delimiter = ','; + + /** + * the field enclosure character (one character only). + * + * @var string + */ + protected $enclosure = '"'; + + /** + * the field escape character (one character only). + * + * @var string + */ + protected $escape = '\\'; + + /** + * The CSV document. + * + * @var SplFileObject|Stream + */ + protected $document; + + /** + * Tells whether the Input BOM must be included or skipped. + * + * @var bool + */ + protected $is_input_bom_included = false; + + /** + * New instance. + * + * @param SplFileObject|Stream $document The CSV Object instance + */ + protected function __construct($document) + { + $this->document = $document; + list($this->delimiter, $this->enclosure, $this->escape) = $this->document->getCsvControl(); + $this->resetProperties(); + } + + /** + * Reset dynamic object properties to improve performance. + */ + protected function resetProperties() + { + } + + /** + * {@inheritdoc} + */ + public function __destruct() + { + unset($this->document); + } + + /** + * {@inheritdoc} + */ + public function __clone() + { + throw new Exception(sprintf('An object of class %s cannot be cloned', static::class)); + } + + /** + * Return a new instance from a SplFileObject. + * + * @return static + */ + public static function createFromFileObject(SplFileObject $file) + { + return new static($file); + } + + /** + * Return a new instance from a PHP resource stream. + * + * @param resource $stream + * + * @return static + */ + public static function createFromStream($stream) + { + return new static(new Stream($stream)); + } + + /** + * Return a new instance from a string. + * + * @return static + */ + public static function createFromString(string $content = '') + { + return new static(Stream::createFromString($content)); + } + + /** + * Return a new instance from a file path. + * + * @param resource|null $context the resource context + * + * @return static + */ + public static function createFromPath(string $path, string $open_mode = 'r+', $context = null) + { + return new static(Stream::createFromPath($path, $open_mode, $context)); + } + + /** + * Returns the current field delimiter. + */ + public function getDelimiter(): string + { + return $this->delimiter; + } + + /** + * Returns the current field enclosure. + */ + public function getEnclosure(): string + { + return $this->enclosure; + } + + /** + * Returns the pathname of the underlying document. + */ + public function getPathname(): string + { + return $this->document->getPathname(); + } + + /** + * Returns the current field escape character. + */ + public function getEscape(): string + { + return $this->escape; + } + + /** + * Returns the BOM sequence in use on Output methods. + */ + public function getOutputBOM(): string + { + return $this->output_bom; + } + + /** + * Returns the BOM sequence of the given CSV. + */ + public function getInputBOM(): string + { + if (null !== $this->input_bom) { + return $this->input_bom; + } + + $this->document->setFlags(SplFileObject::READ_CSV); + $this->document->rewind(); + $this->input_bom = bom_match((string) $this->document->fread(4)); + + return $this->input_bom; + } + + /** + * Returns the stream filter mode. + */ + public function getStreamFilterMode(): int + { + return $this->stream_filter_mode; + } + + /** + * Tells whether the stream filter capabilities can be used. + */ + public function supportsStreamFilter(): bool + { + return $this->document instanceof Stream; + } + + /** + * Tell whether the specify stream filter is attach to the current stream. + */ + public function hasStreamFilter(string $filtername): bool + { + return $this->stream_filters[$filtername] ?? false; + } + + /** + * Tells whether the BOM can be stripped if presents. + */ + public function isInputBOMIncluded(): bool + { + return $this->is_input_bom_included; + } + + /** + * Retuns the CSV document as a Generator of string chunk. + * + * @param int $length number of bytes read + * + * @throws Exception if the number of bytes is lesser than 1 + */ + public function chunk(int $length): Generator + { + if ($length < 1) { + throw new InvalidArgument(sprintf('%s() expects the length to be a positive integer %d given', __METHOD__, $length)); + } + + $input_bom = $this->getInputBOM(); + $this->document->rewind(); + $this->document->setFlags(0); + $this->document->fseek(strlen($input_bom)); + foreach (str_split($this->output_bom.$this->document->fread($length), $length) as $chunk) { + yield $chunk; + } + + while ($this->document->valid()) { + yield $this->document->fread($length); + } + } + + /** + * DEPRECATION WARNING! This method will be removed in the next major point release. + * + * @deprecated deprecated since version 9.1.0 + * @see AbstractCsv::getContent + * + * Retrieves the CSV content + */ + public function __toString(): string + { + return $this->getContent(); + } + + /** + * Retrieves the CSV content. + */ + public function getContent(): string + { + $raw = ''; + foreach ($this->chunk(8192) as $chunk) { + $raw .= $chunk; + } + + return $raw; + } + + /** + * Outputs all data on the CSV file. + * + * @return int Returns the number of characters read from the handle + * and passed through to the output. + */ + public function output(string $filename = null): int + { + if (null !== $filename) { + $this->sendHeaders($filename); + } + + $this->document->rewind(); + if (!$this->is_input_bom_included) { + $this->document->fseek(strlen($this->getInputBOM())); + } + + echo $this->output_bom; + + return strlen($this->output_bom) + $this->document->fpassthru(); + } + + /** + * Send the CSV headers. + * + * Adapted from Symfony\Component\HttpFoundation\ResponseHeaderBag::makeDisposition + * + * @throws Exception if the submitted header is invalid according to RFC 6266 + * + * @see https://tools.ietf.org/html/rfc6266#section-4.3 + */ + protected function sendHeaders(string $filename) + { + if (strlen($filename) != strcspn($filename, '\\/')) { + throw new InvalidArgument('The filename cannot contain the "/" and "\\" characters.'); + } + + $flag = FILTER_FLAG_STRIP_LOW; + if (strlen($filename) !== mb_strlen($filename)) { + $flag |= FILTER_FLAG_STRIP_HIGH; + } + + $filenameFallback = str_replace('%', '', filter_var($filename, FILTER_SANITIZE_STRING, $flag)); + + $disposition = sprintf('attachment; filename="%s"', str_replace('"', '\\"', $filenameFallback)); + if ($filename !== $filenameFallback) { + $disposition .= sprintf("; filename*=utf-8''%s", rawurlencode($filename)); + } + + header('Content-Type: text/csv'); + header('Content-Transfer-Encoding: binary'); + header('Content-Description: File Transfer'); + header('Content-Disposition: '.$disposition); + } + + /** + * Sets the field delimiter. + * + * @throws Exception If the Csv control character is not one character only. + * + * @return static + */ + public function setDelimiter(string $delimiter): self + { + if ($delimiter === $this->delimiter) { + return $this; + } + + if (1 === strlen($delimiter)) { + $this->delimiter = $delimiter; + $this->resetProperties(); + + return $this; + } + + throw new InvalidArgument(sprintf('%s() expects delimiter to be a single character %s given', __METHOD__, $delimiter)); + } + + /** + * Sets the field enclosure. + * + * @throws Exception If the Csv control character is not one character only. + * + * @return static + */ + public function setEnclosure(string $enclosure): self + { + if ($enclosure === $this->enclosure) { + return $this; + } + + if (1 === strlen($enclosure)) { + $this->enclosure = $enclosure; + $this->resetProperties(); + + return $this; + } + + throw new InvalidArgument(sprintf('%s() expects enclosure to be a single character %s given', __METHOD__, $enclosure)); + } + + /** + * Sets the field escape character. + * + * @throws Exception If the Csv control character is not one character only. + * + * @return static + */ + public function setEscape(string $escape): self + { + if ($escape === $this->escape) { + return $this; + } + + if ('' === $escape || 1 === strlen($escape)) { + $this->escape = $escape; + $this->resetProperties(); + + return $this; + } + + throw new InvalidArgument(sprintf('%s() expects escape to be a single character or the empty string %s given', __METHOD__, $escape)); + } + + /** + * Enables BOM Stripping. + * + * @return static + */ + public function skipInputBOM(): self + { + $this->is_input_bom_included = false; + + return $this; + } + + /** + * Disables skipping Input BOM. + * + * @return static + */ + public function includeInputBOM(): self + { + $this->is_input_bom_included = true; + + return $this; + } + + /** + * Sets the BOM sequence to prepend the CSV on output. + * + * @return static + */ + public function setOutputBOM(string $str): self + { + $this->output_bom = $str; + + return $this; + } + + /** + * append a stream filter. + * + * @param null|mixed $params + * + * @throws Exception If the stream filter API can not be used + * + * @return static + */ + public function addStreamFilter(string $filtername, $params = null): self + { + if (!$this->document instanceof Stream) { + throw new UnavailableFeature('The stream filter API can not be used with a '.get_class($this->document).' instance.'); + } + + $this->document->appendFilter($filtername, $this->stream_filter_mode, $params); + $this->stream_filters[$filtername] = true; + $this->resetProperties(); + $this->input_bom = null; + + return $this; + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/ByteSequence.php b/assets/google-sheets/vendor/league/csv/src/ByteSequence.php new file mode 100644 index 0000000..deb0186 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/ByteSequence.php @@ -0,0 +1,43 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace League\Csv; + +/** + * Defines constants for common BOM sequences. + */ +interface ByteSequence +{ + /** + * UTF-8 BOM sequence. + */ + const BOM_UTF8 = "\xEF\xBB\xBF"; + + /** + * UTF-16 BE BOM sequence. + */ + const BOM_UTF16_BE = "\xFE\xFF"; + + /** + * UTF-16 LE BOM sequence. + */ + const BOM_UTF16_LE = "\xFF\xFE"; + + /** + * UTF-32 BE BOM sequence. + */ + const BOM_UTF32_BE = "\x00\x00\xFE\xFF"; + + /** + * UTF-32 LE BOM sequence. + */ + const BOM_UTF32_LE = "\xFF\xFE\x00\x00"; +} diff --git a/assets/google-sheets/vendor/league/csv/src/CannotInsertRecord.php b/assets/google-sheets/vendor/league/csv/src/CannotInsertRecord.php new file mode 100644 index 0000000..da26e5f --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/CannotInsertRecord.php @@ -0,0 +1,75 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +/** + * Thrown when a data is not added to the Csv Document. + */ +class CannotInsertRecord extends Exception +{ + /** + * The record submitted for insertion. + * + * @var array + */ + protected $record; + + /** + * Validator which did not validated the data. + * + * @var string + */ + protected $name = ''; + + /** + * Create an Exception from a record insertion into a stream. + */ + public static function triggerOnInsertion(array $record): self + { + $exception = new static('Unable to write record to the CSV document'); + $exception->record = $record; + + return $exception; + } + + /** + * Create an Exception from a Record Validation. + */ + public static function triggerOnValidation(string $name, array $record): self + { + $exception = new static('Record validation failed'); + $exception->name = $name; + $exception->record = $record; + + return $exception; + } + + /** + * return the validator name. + * + */ + public function getName(): string + { + return $this->name; + } + + /** + * return the invalid data submitted. + * + */ + public function getRecord(): array + { + return $this->record; + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/CharsetConverter.php b/assets/google-sheets/vendor/league/csv/src/CharsetConverter.php new file mode 100644 index 0000000..e585c64 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/CharsetConverter.php @@ -0,0 +1,251 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use OutOfRangeException; +use php_user_filter; +use Traversable; +use TypeError; +use function array_combine; +use function array_map; +use function array_walk; +use function gettype; +use function in_array; +use function is_iterable; +use function is_numeric; +use function mb_convert_encoding; +use function mb_list_encodings; +use function preg_match; +use function sprintf; +use function stream_bucket_append; +use function stream_bucket_make_writeable; +use function stream_filter_register; +use function stream_get_filters; +use function strpos; +use function strtolower; +use function substr; + +/** + * Converts resource stream or tabular data content charset. + */ +class CharsetConverter extends php_user_filter +{ + const FILTERNAME = 'convert.league.csv'; + + /** + * the filter name used to instantiate the class with. + * + * @var string + */ + public $filtername; + + /** + * Contents of the params parameter passed to stream_filter_append + * or stream_filter_prepend functions. + * + * @var mixed + */ + public $params; + + /** + * The records input encoding charset. + * + * @var string + */ + protected $input_encoding = 'UTF-8'; + + /** + * The records output encoding charset. + * + * @var string + */ + protected $output_encoding = 'UTF-8'; + + /** + * Static method to add the stream filter to a {@link AbstractCsv} object. + */ + public static function addTo(AbstractCsv $csv, string $input_encoding, string $output_encoding): AbstractCsv + { + self::register(); + + return $csv->addStreamFilter(self::getFiltername($input_encoding, $output_encoding)); + } + + /** + * Static method to register the class as a stream filter. + */ + public static function register() + { + $filtername = self::FILTERNAME.'.*'; + if (!in_array($filtername, stream_get_filters(), true)) { + stream_filter_register($filtername, self::class); + } + } + + /** + * Static method to return the stream filter filtername. + */ + public static function getFiltername(string $input_encoding, string $output_encoding): string + { + return sprintf( + '%s.%s/%s', + self::FILTERNAME, + self::filterEncoding($input_encoding), + self::filterEncoding($output_encoding) + ); + } + + /** + * Filter encoding charset. + * + * @throws OutOfRangeException if the charset is malformed or unsupported + */ + protected static function filterEncoding(string $encoding): string + { + static $encoding_list; + if (null === $encoding_list) { + $list = mb_list_encodings(); + $encoding_list = array_combine(array_map('strtolower', $list), $list); + } + + $key = strtolower($encoding); + if (isset($encoding_list[$key])) { + return $encoding_list[$key]; + } + + throw new OutOfRangeException(sprintf('The submitted charset %s is not supported by the mbstring extension', $encoding)); + } + + /** + * {@inheritdoc} + */ + public function onCreate() + { + $prefix = self::FILTERNAME.'.'; + if (0 !== strpos($this->filtername, $prefix)) { + return false; + } + + $encodings = substr($this->filtername, strlen($prefix)); + if (1 !== preg_match(',^(?[-\w]+)\/(?[-\w]+)$,', $encodings, $matches)) { + return false; + } + + try { + $this->input_encoding = $this->filterEncoding($matches['input']); + $this->output_encoding = $this->filterEncoding($matches['output']); + } catch (OutOfRangeException $e) { + return false; + } + + return true; + } + + /** + * {@inheritdoc} + */ + public function filter($in, $out, &$consumed, $closing) + { + while ($res = stream_bucket_make_writeable($in)) { + $res->data = @mb_convert_encoding($res->data, $this->output_encoding, $this->input_encoding); + $consumed += $res->datalen; + stream_bucket_append($out, $res); + } + + return PSFS_PASS_ON; + } + + /** + * Convert Csv records collection into UTF-8. + * + * @param array|Traversable $records + * + * @return array|Traversable + */ + public function convert($records) + { + if (!is_iterable($records)) { + throw new TypeError(sprintf('%s() expects argument passed to be iterable, %s given', __METHOD__, gettype($records))); + } + + if ($this->output_encoding === $this->input_encoding) { + return $records; + } + + if (is_array($records)) { + return array_map($this, $records); + } + + return new MapIterator($records, $this); + } + + /** + * Enable using the class as a formatter for the {@link Writer}. + */ + public function __invoke(array $record): array + { + array_walk($record, [$this, 'encodeField']); + + return $record; + } + + /** + * Walker method to convert the offset and the value of a CSV record field. + * + * @param mixed $value + * @param mixed $offset + */ + protected function encodeField(&$value, &$offset) + { + if (null !== $value && !is_numeric($value)) { + $value = mb_convert_encoding((string) $value, $this->output_encoding, $this->input_encoding); + } + + if (!is_numeric($offset)) { + $offset = mb_convert_encoding((string) $offset, $this->output_encoding, $this->input_encoding); + } + } + + /** + * Sets the records input encoding charset. + */ + public function inputEncoding(string $encoding): self + { + $encoding = $this->filterEncoding($encoding); + if ($encoding === $this->input_encoding) { + return $this; + } + + $clone = clone $this; + $clone->input_encoding = $encoding; + + return $clone; + } + + /** + * Sets the records output encoding charset. + */ + public function outputEncoding(string $encoding): self + { + $encoding = $this->filterEncoding($encoding); + if ($encoding === $this->output_encoding) { + return $this; + } + + $clone = clone $this; + $clone->output_encoding = $encoding; + + return $clone; + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/ColumnConsistency.php b/assets/google-sheets/vendor/league/csv/src/ColumnConsistency.php new file mode 100644 index 0000000..7b2cd68 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/ColumnConsistency.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use function count; +use function sprintf; + +/** + * Validates column consistency when inserting records into a CSV document. + */ +class ColumnConsistency +{ + /** + * The number of column per record. + * + * @var int + */ + protected $columns_count; + + /** + * New Instance. + * + * @throws OutOfRangeException if the column count is lesser than -1 + */ + public function __construct(int $columns_count = -1) + { + if ($columns_count < -1) { + throw new Exception(sprintf('%s() expects the column count to be greater or equal to -1 %s given', __METHOD__, $columns_count)); + } + + $this->columns_count = $columns_count; + } + + /** + * Returns the column count. + */ + public function getColumnCount(): int + { + return $this->columns_count; + } + + /** + * Tell whether the submitted record is valid. + */ + public function __invoke(array $record): bool + { + $count = count($record); + if (-1 === $this->columns_count) { + $this->columns_count = $count; + + return true; + } + + return $count === $this->columns_count; + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/EncloseField.php b/assets/google-sheets/vendor/league/csv/src/EncloseField.php new file mode 100644 index 0000000..e0cb65b --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/EncloseField.php @@ -0,0 +1,143 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use InvalidArgumentException; +use php_user_filter; +use function in_array; +use function str_replace; +use function strcspn; +use function stream_bucket_append; +use function stream_bucket_make_writeable; +use function stream_filter_register; +use function stream_get_filters; +use function strlen; + +/** + * A stream filter to improve enclosure character usage. + * + * @see https://tools.ietf.org/html/rfc4180#section-2 + * @see https://bugs.php.net/bug.php?id=38301 + */ +class EncloseField extends php_user_filter +{ + const FILTERNAME = 'convert.league.csv.enclosure'; + + /** + * the filter name used to instantiate the class with. + * + * @var string + */ + public $filtername; + + /** + * Contents of the params parameter passed to stream_filter_append + * or stream_filter_prepend functions. + * + * @var mixed + */ + public $params; + + /** + * Default sequence. + * + * @var string + */ + protected $sequence; + + /** + * Characters that triggers enclosure in PHP. + * + * @var string + */ + protected static $force_enclosure = "\n\r\t "; + + /** + * Static method to return the stream filter filtername. + */ + public static function getFiltername(): string + { + return self::FILTERNAME; + } + + /** + * Static method to register the class as a stream filter. + */ + public static function register() + { + if (!in_array(self::FILTERNAME, stream_get_filters(), true)) { + stream_filter_register(self::FILTERNAME, self::class); + } + } + + /** + * Static method to add the stream filter to a {@link Writer} object. + * + * @throws InvalidArgumentException if the sequence is malformed + */ + public static function addTo(Writer $csv, string $sequence): Writer + { + self::register(); + + if (!self::isValidSequence($sequence)) { + throw new InvalidArgumentException('The sequence must contain at least one character to force enclosure'); + } + + $formatter = static function (array $record) use ($sequence) { + foreach ($record as &$value) { + $value = $sequence.$value; + } + unset($value); + + return $record; + }; + + return $csv + ->addFormatter($formatter) + ->addStreamFilter(self::FILTERNAME, ['sequence' => $sequence]); + } + + /** + * Filter type and sequence parameters. + * + * The sequence to force enclosure MUST contains one of the following character ("\n\r\t ") + */ + protected static function isValidSequence(string $sequence): bool + { + return strlen($sequence) != strcspn($sequence, self::$force_enclosure); + } + + /** + * {@inheritdoc} + */ + public function onCreate() + { + return isset($this->params['sequence']) + && $this->isValidSequence($this->params['sequence']); + } + + /** + * {@inheritdoc} + */ + public function filter($in, $out, &$consumed, $closing) + { + while ($res = stream_bucket_make_writeable($in)) { + $res->data = str_replace($this->params['sequence'], '', $res->data); + $consumed += $res->datalen; + stream_bucket_append($out, $res); + } + + return PSFS_PASS_ON; + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/EscapeFormula.php b/assets/google-sheets/vendor/league/csv/src/EscapeFormula.php new file mode 100644 index 0000000..5b80651 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/EscapeFormula.php @@ -0,0 +1,152 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use InvalidArgumentException; +use function array_fill_keys; +use function array_keys; +use function array_map; +use function array_merge; +use function array_unique; +use function is_object; +use function is_string; +use function method_exists; +use function sprintf; + +/** + * A Formatter to tackle CSV Formula Injection. + * + * @see http://georgemauer.net/2017/10/07/csv-injection.html + */ +class EscapeFormula +{ + /** + * Spreadsheet formula starting character. + */ + const FORMULA_STARTING_CHARS = ['=', '-', '+', '@']; + + /** + * Effective Spreadsheet formula starting characters. + * + * @var array + */ + protected $special_chars = []; + + /** + * Escape character to escape each CSV formula field. + * + * @var string + */ + protected $escape; + + /** + * New instance. + * + * @param string $escape escape character to escape each CSV formula field + * @param string[] $special_chars additional spreadsheet formula starting characters + * + */ + public function __construct(string $escape = "\t", array $special_chars = []) + { + $this->escape = $escape; + if ([] !== $special_chars) { + $special_chars = $this->filterSpecialCharacters(...$special_chars); + } + + $chars = array_merge(self::FORMULA_STARTING_CHARS, $special_chars); + $chars = array_unique($chars); + $this->special_chars = array_fill_keys($chars, 1); + } + + /** + * Filter submitted special characters. + * + * @param string ...$characters + * + * @throws InvalidArgumentException if the string is not a single character + * + * @return string[] + */ + protected function filterSpecialCharacters(string ...$characters): array + { + foreach ($characters as $str) { + if (1 != strlen($str)) { + throw new InvalidArgumentException(sprintf('The submitted string %s must be a single character', $str)); + } + } + + return $characters; + } + + /** + * Returns the list of character the instance will escape. + * + * @return string[] + */ + public function getSpecialCharacters(): array + { + return array_keys($this->special_chars); + } + + /** + * Returns the escape character. + */ + public function getEscape(): string + { + return $this->escape; + } + + /** + * League CSV formatter hook. + * + * @see escapeRecord + */ + public function __invoke(array $record): array + { + return $this->escapeRecord($record); + } + + /** + * Escape a CSV record. + */ + public function escapeRecord(array $record): array + { + return array_map([$this, 'escapeField'], $record); + } + + /** + * Escape a CSV cell. + */ + protected function escapeField($cell) + { + if (!$this->isStringable($cell)) { + return $cell; + } + + $str_cell = (string) $cell; + if (isset($str_cell[0], $this->special_chars[$str_cell[0]])) { + return $this->escape.$str_cell; + } + + return $cell; + } + + /** + * Tell whether the submitted value is stringable. + */ + protected function isStringable($value): bool + { + return is_string($value) || (is_object($value) && method_exists($value, '__toString')); + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/Exception.php b/assets/google-sheets/vendor/league/csv/src/Exception.php new file mode 100644 index 0000000..90facb0 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/Exception.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +/** + * League Csv Base Exception. + */ +class Exception extends \Exception +{ +} diff --git a/assets/google-sheets/vendor/league/csv/src/HTMLConverter.php b/assets/google-sheets/vendor/league/csv/src/HTMLConverter.php new file mode 100644 index 0000000..8d84180 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/HTMLConverter.php @@ -0,0 +1,157 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use DOMDocument; +use DOMElement; +use DOMException; +use Traversable; +use function preg_match; + +/** + * Converts tabular data into an HTML Table string. + */ +class HTMLConverter +{ + /** + * table class attribute value. + * + * @var string + */ + protected $class_name = 'table-csv-data'; + + /** + * table id attribute value. + * + * @var string + */ + protected $id_value = ''; + + /** + * @var XMLConverter + */ + protected $xml_converter; + + /** + * New Instance. + */ + public function __construct() + { + $this->xml_converter = (new XMLConverter()) + ->rootElement('table') + ->recordElement('tr') + ->fieldElement('td') + ; + } + + /** + * Converts a tabular data collection into a HTML table string. + * + * @param array|Traversable $records The tabular data collection + * @param string[] $header_record An optional array of headers outputted using the`` section + * @param string[] $footer_record An optional array of footers to output to the table using `` and `` elements + */ + public function convert($records, array $header_record = [], array $footer_record = []): string + { + $doc = new DOMDocument('1.0'); + if ([] === $header_record && [] === $footer_record) { + $table = $this->xml_converter->import($records, $doc); + $this->addHTMLAttributes($table); + $doc->appendChild($table); + + return $doc->saveHTML(); + } + + $table = $doc->createElement('table'); + $this->addHTMLAttributes($table); + $this->appendHeaderSection('thead', $header_record, $table); + $this->appendHeaderSection('tfoot', $footer_record, $table); + $table->appendChild($this->xml_converter->rootElement('tbody')->import($records, $doc)); + $doc->appendChild($table); + + return $doc->saveHTML(); + } + + /** + * Creates a DOMElement representing a HTML table heading section. + */ + protected function appendHeaderSection(string $node_name, array $record, DOMElement $table) + { + if ([] === $record) { + return; + } + + $node = $this->xml_converter + ->rootElement($node_name) + ->recordElement('tr') + ->fieldElement('th') + ->import([$record], $table->ownerDocument) + ; + + /** @var DOMElement $element */ + foreach ($node->getElementsByTagName('th') as $element) { + $element->setAttribute('scope', 'col'); + } + + $table->appendChild($node); + } + + /** + * Adds class and id attributes to an HTML tag. + */ + protected function addHTMLAttributes(DOMElement $node) + { + $node->setAttribute('class', $this->class_name); + $node->setAttribute('id', $this->id_value); + } + + /** + * HTML table class name setter. + * + * @throws DOMException if the id_value contains any type of whitespace + */ + public function table(string $class_name, string $id_value = ''): self + { + if (1 === preg_match(",\s,", $id_value)) { + throw new DOMException("the id attribute's value must not contain whitespace (spaces, tabs etc.)"); + } + $clone = clone $this; + $clone->class_name = $class_name; + $clone->id_value = $id_value; + + return $clone; + } + + /** + * HTML tr record offset attribute setter. + */ + public function tr(string $record_offset_attribute_name): self + { + $clone = clone $this; + $clone->xml_converter = $this->xml_converter->recordElement('tr', $record_offset_attribute_name); + + return $clone; + } + + /** + * HTML td field name attribute setter. + */ + public function td(string $fieldname_attribute_name): self + { + $clone = clone $this; + $clone->xml_converter = $this->xml_converter->fieldElement('td', $fieldname_attribute_name); + + return $clone; + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/InvalidArgument.php b/assets/google-sheets/vendor/league/csv/src/InvalidArgument.php new file mode 100644 index 0000000..7cc9493 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/InvalidArgument.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +/** + * InvalidArgument Exception. + */ +class InvalidArgument extends Exception +{ +} diff --git a/assets/google-sheets/vendor/league/csv/src/MapIterator.php b/assets/google-sheets/vendor/league/csv/src/MapIterator.php new file mode 100644 index 0000000..3c96733 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/MapIterator.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use IteratorIterator; +use Traversable; + +/** + * Map value from an iterator before yielding. + * + * @internal used internally to modify CSV content + */ +class MapIterator extends IteratorIterator +{ + /** + * The callback to apply on all InnerIterator current value. + * + * @var callable + */ + protected $callable; + + /** + * New instance. + */ + public function __construct(Traversable $iterator, callable $callable) + { + parent::__construct($iterator); + $this->callable = $callable; + } + + /** + * {@inheritdoc} + */ + public function current() + { + return ($this->callable)(parent::current(), $this->key()); + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/Polyfill/EmptyEscapeParser.php b/assets/google-sheets/vendor/league/csv/src/Polyfill/EmptyEscapeParser.php new file mode 100644 index 0000000..c479aba --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/Polyfill/EmptyEscapeParser.php @@ -0,0 +1,254 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv\Polyfill; + +use Generator; +use League\Csv\Stream; +use SplFileObject; +use TypeError; +use function explode; +use function get_class; +use function gettype; +use function in_array; +use function is_object; +use function ltrim; +use function rtrim; +use function sprintf; +use function str_replace; +use function substr; + +/** + * A Polyfill to PHP's SplFileObject to enable parsing the CSV document + * without taking into account the escape character. + * + * @see https://php.net/manual/en/function.fgetcsv.php + * @see https://php.net/manual/en/function.fgets.php + * @see https://tools.ietf.org/html/rfc4180 + * @see http://edoceo.com/utilitas/csv-file-format + * + * @internal used internally to parse a CSV document without using the escape character + */ +final class EmptyEscapeParser +{ + /** + * @internal + */ + const FIELD_BREAKS = [false, '', "\r\n", "\n", "\r"]; + + /** + * @var SplFileObject|Stream + */ + private static $document; + + /** + * @var string + */ + private static $delimiter; + + /** + * @var string + */ + private static $enclosure; + + /** + * @var string + */ + private static $trim_mask; + + /** + * @var string|false + */ + private static $line; + + /** + * @codeCoverageIgnore + */ + private function __construct() + { + } + + /** + * Converts the document into a CSV record iterator. + * + * In PHP7.4+ you'll be able to do + * + * + * $file = new SplFileObject('/path/to/file.csv', 'r'); + * $file->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY); + * $file->setCsvControl($delimiter, $enclosure, ''); + * foreach ($file as $record) { + * //$record escape mechanism is blocked by the empty string + * } + * + * + * In PHP7.3- you can do + * + * + * $file = new SplFileObject('/path/to/file.csv', 'r'); + * $it = EmptyEscapeParser::parse($file); //parsing will be done while ignoring the escape character value. + * foreach ($it as $record) { + * //fgetcsv is not directly use hence the escape char is not taken into account + * } + * + * + * Each record array contains strings elements. + * + * @param SplFileObject|Stream $document + * + * @return Generator|array[] + */ + public static function parse($document): Generator + { + self::$document = self::filterDocument($document); + list(self::$delimiter, self::$enclosure, ) = self::$document->getCsvControl(); + self::$trim_mask = str_replace([self::$delimiter, self::$enclosure], '', " \t\0\x0B"); + self::$document->setFlags(0); + self::$document->rewind(); + while (self::$document->valid()) { + $record = self::extractRecord(); + if ([null] === $record || !in_array(null, $record, true)) { + yield $record; + } + } + } + + /** + * Filters the submitted document. + * + * @param SplFileObject|Stream $document + * + * @return SplFileObject|Stream + */ + private static function filterDocument($document) + { + if ($document instanceof Stream || $document instanceof SplFileObject) { + return $document; + } + + throw new TypeError(sprintf( + '%s::parse expects parameter 1 to be a %s or a SplFileObject object, %s given', + self::class, + Stream::class, + is_object($document) ? get_class($document) : gettype($document) + )); + } + + /** + * Extracts a record form the CSV document. + */ + private static function extractRecord(): array + { + $record = []; + self::$line = self::$document->fgets(); + do { + $method = 'extractFieldContent'; + $buffer = ''; + if (false !== self::$line) { + $buffer = ltrim(self::$line, self::$trim_mask); + } + if (($buffer[0] ?? '') === self::$enclosure) { + $method = 'extractEnclosedFieldContent'; + self::$line = $buffer; + } + + $record[] = self::$method(); + } while (false !== self::$line); + + return $record; + } + + /** + * Extracts the content from a field without enclosure. + * + * - Field content can not spread on multiple document lines. + * - Content must be preserved. + * - Trailing line-breaks must be removed. + * + * @return string|null + */ + private static function extractFieldContent() + { + if (in_array(self::$line, self::FIELD_BREAKS, true)) { + self::$line = false; + + return null; + } + + list($content, self::$line) = explode(self::$delimiter, self::$line, 2) + [1 => false]; + if (false === self::$line) { + return rtrim($content, "\r\n"); + } + + return $content; + } + + /** + * Extracts the content from a field with enclosure. + * + * - Field content can spread on multiple document lines. + * - Content between consecutive enclosure characters must be preserved. + * - Double enclosure sequence must be replaced by single enclosure character. + * - Trailing line break must be removed if they are not part of the field content. + * - Invalid field content is treated as per fgetcsv behavior. + * + * @return string|null + */ + private static function extractEnclosedFieldContent() + { + if ((self::$line[0] ?? '') === self::$enclosure) { + self::$line = substr(self::$line, 1); + } + + $content = ''; + while (false !== self::$line) { + list($buffer, $remainder) = explode(self::$enclosure, self::$line, 2) + [1 => false]; + $content .= $buffer; + self::$line = $remainder; + if (false !== self::$line) { + break; + } + + if (self::$document->valid()) { + self::$line = self::$document->fgets(); + continue; + } + + if ($buffer === rtrim($content, "\r\n")) { + return null; + } + } + + if (in_array(self::$line, self::FIELD_BREAKS, true)) { + self::$line = false; + if (!self::$document->valid()) { + return $content; + } + + return rtrim($content, "\r\n"); + } + + $char = self::$line[0] ?? ''; + if ($char === self::$delimiter) { + self::$line = substr(self::$line, 1); + + return $content; + } + + if ($char === self::$enclosure) { + return $content.self::$enclosure.self::extractEnclosedFieldContent(); + } + + return $content.self::extractFieldContent(); + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/RFC4180Field.php b/assets/google-sheets/vendor/league/csv/src/RFC4180Field.php new file mode 100644 index 0000000..e054868 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/RFC4180Field.php @@ -0,0 +1,206 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use InvalidArgumentException; +use php_user_filter; +use function array_map; +use function in_array; +use function is_string; +use function str_replace; +use function strcspn; +use function stream_bucket_append; +use function stream_bucket_make_writeable; +use function stream_filter_register; +use function stream_get_filters; +use function strlen; +use const STREAM_FILTER_READ; +use const STREAM_FILTER_WRITE; + +/** + * A stream filter to conform the CSV field to RFC4180. + * + * DEPRECATION WARNING! This class will be removed in the next major point release + * + * @deprecated deprecated since version 9.2.0 + * @see AbstractCsv::setEscape + * + * @see https://tools.ietf.org/html/rfc4180#section-2 + */ +class RFC4180Field extends php_user_filter +{ + const FILTERNAME = 'convert.league.csv.rfc4180'; + + /** + * the filter name used to instantiate the class with. + * + * @var string + */ + public $filtername; + + /** + * Contents of the params parameter passed to stream_filter_append + * or stream_filter_prepend functions. + * + * @var mixed + */ + public $params; + + /** + * The value being search for. + * + * @var string[] + */ + protected $search; + + /** + * The replacement value that replace found $search values. + * + * @var string[] + */ + protected $replace; + + /** + * Characters that triggers enclosure with PHP fputcsv. + * + * @var string + */ + protected static $force_enclosure = "\n\r\t "; + + /** + * Static method to add the stream filter to a {@link AbstractCsv} object. + */ + public static function addTo(AbstractCsv $csv, string $whitespace_replace = ''): AbstractCsv + { + self::register(); + + $params = [ + 'enclosure' => $csv->getEnclosure(), + 'escape' => $csv->getEscape(), + 'mode' => $csv->getStreamFilterMode(), + ]; + + if ($csv instanceof Writer && '' != $whitespace_replace) { + self::addFormatterTo($csv, $whitespace_replace); + $params['whitespace_replace'] = $whitespace_replace; + } + + return $csv->addStreamFilter(self::FILTERNAME, $params); + } + + /** + * Add a formatter to the {@link Writer} object to format the record + * field to avoid enclosure around a field with an empty space. + */ + public static function addFormatterTo(Writer $csv, string $whitespace_replace): Writer + { + if ('' == $whitespace_replace || strlen($whitespace_replace) != strcspn($whitespace_replace, self::$force_enclosure)) { + throw new InvalidArgumentException('The sequence contains a character that enforces enclosure or is a CSV control character or is the empty string.'); + } + + $mapper = static function ($value) use ($whitespace_replace) { + if (is_string($value)) { + return str_replace(' ', $whitespace_replace, $value); + } + + return $value; + }; + + $formatter = static function (array $record) use ($mapper): array { + return array_map($mapper, $record); + }; + + return $csv->addFormatter($formatter); + } + + /** + * Static method to register the class as a stream filter. + */ + public static function register() + { + if (!in_array(self::FILTERNAME, stream_get_filters(), true)) { + stream_filter_register(self::FILTERNAME, self::class); + } + } + + /** + * Static method to return the stream filter filtername. + */ + public static function getFiltername(): string + { + return self::FILTERNAME; + } + + /** + * {@inheritdoc} + */ + public function filter($in, $out, &$consumed, $closing) + { + while ($bucket = stream_bucket_make_writeable($in)) { + $bucket->data = str_replace($this->search, $this->replace, $bucket->data); + $consumed += $bucket->datalen; + stream_bucket_append($out, $bucket); + } + + return PSFS_PASS_ON; + } + + /** + * {@inheritdoc} + */ + public function onCreate() + { + if (!$this->isValidParams($this->params)) { + return false; + } + + $this->search = [$this->params['escape'].$this->params['enclosure']]; + $this->replace = [$this->params['enclosure'].$this->params['enclosure']]; + if (STREAM_FILTER_WRITE != $this->params['mode']) { + return true; + } + + $this->search = [$this->params['escape'].$this->params['enclosure']]; + $this->replace = [$this->params['escape'].$this->params['enclosure'].$this->params['enclosure']]; + if ($this->isValidSequence($this->params)) { + $this->search[] = $this->params['whitespace_replace']; + $this->replace[] = ' '; + } + + return true; + } + + /** + * Validate params property. + */ + protected function isValidParams(array $params): bool + { + static $mode_list = [STREAM_FILTER_READ => 1, STREAM_FILTER_WRITE => 1]; + + return isset($params['enclosure'], $params['escape'], $params['mode'], $mode_list[$params['mode']]) + && 1 == strlen($params['enclosure']) + && 1 == strlen($params['escape']); + } + + /** + * Is Valid White space replaced sequence. + * + * @return bool + */ + protected function isValidSequence(array $params) + { + return isset($params['whitespace_replace']) + && strlen($params['whitespace_replace']) == strcspn($params['whitespace_replace'], self::$force_enclosure); + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/Reader.php b/assets/google-sheets/vendor/league/csv/src/Reader.php new file mode 100644 index 0000000..10abdf8 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/Reader.php @@ -0,0 +1,435 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use BadMethodCallException; +use CallbackFilterIterator; +use Countable; +use Generator; +use Iterator; +use IteratorAggregate; +use JsonSerializable; +use League\Csv\Polyfill\EmptyEscapeParser; +use SplFileObject; +use TypeError; +use function array_combine; +use function array_filter; +use function array_pad; +use function array_slice; +use function array_unique; +use function count; +use function gettype; +use function is_array; +use function iterator_count; +use function iterator_to_array; +use function mb_strlen; +use function mb_substr; +use function sprintf; +use function strlen; +use function substr; +use const PHP_VERSION_ID; +use const STREAM_FILTER_READ; + +/** + * A class to parse and read records from a CSV document. + * + * @method array fetchOne(int $nth_record = 0) Returns a single record from the CSV + * @method Generator fetchColumn(string|int $column_index) Returns the next value from a single CSV record field + * @method Generator fetchPairs(string|int $offset_index = 0, string|int $value_index = 1) Fetches the next key-value pairs from the CSV document + */ +class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSerializable +{ + /** + * header offset. + * + * @var int|null + */ + protected $header_offset; + + /** + * header record. + * + * @var string[] + */ + protected $header = []; + + /** + * records count. + * + * @var int + */ + protected $nb_records = -1; + + /** + * {@inheritdoc} + */ + protected $stream_filter_mode = STREAM_FILTER_READ; + + /** + * @var bool + */ + protected $is_empty_records_included = false; + + /** + * {@inheritdoc} + */ + public static function createFromPath(string $path, string $open_mode = 'r', $context = null) + { + return parent::createFromPath($path, $open_mode, $context); + } + + /** + * {@inheritdoc} + */ + protected function resetProperties() + { + parent::resetProperties(); + $this->nb_records = -1; + $this->header = []; + } + + /** + * Returns the header offset. + * + * If no CSV header offset is set this method MUST return null + * + * @return int|null + */ + public function getHeaderOffset() + { + return $this->header_offset; + } + + /** + * Returns the CSV record used as header. + * + * The returned header is represented as an array of string values + * + * @return string[] + */ + public function getHeader(): array + { + if (null === $this->header_offset) { + return $this->header; + } + + if ([] !== $this->header) { + return $this->header; + } + + $this->header = $this->setHeader($this->header_offset); + + return $this->header; + } + + /** + * Determine the CSV record header. + * + * @throws Exception If the header offset is set and no record is found or is the empty array + * + * @return string[] + */ + protected function setHeader(int $offset): array + { + $header = $this->seekRow($offset); + if (false === $header || [] === $header || [null] === $header) { + throw new SyntaxError(sprintf('The header record does not exist or is empty at offset: `%s`', $offset)); + } + + if (0 === $offset) { + return $this->removeBOM($header, mb_strlen($this->getInputBOM()), $this->enclosure); + } + + return $header; + } + + /** + * Returns the row at a given offset. + * + * @return array|false + */ + protected function seekRow(int $offset) + { + foreach ($this->getDocument() as $index => $record) { + if ($offset === $index) { + return $record; + } + } + + return false; + } + + /** + * Returns the document as an Iterator. + */ + protected function getDocument(): Iterator + { + if (70400 > PHP_VERSION_ID && '' === $this->escape) { + $this->document->setCsvControl($this->delimiter, $this->enclosure); + + return EmptyEscapeParser::parse($this->document); + } + + $this->document->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD); + $this->document->setCsvControl($this->delimiter, $this->enclosure, $this->escape); + $this->document->rewind(); + + return $this->document; + } + + /** + * Strip the BOM sequence from a record. + * + * @param string[] $record + * + * @return string[] + */ + protected function removeBOM(array $record, int $bom_length, string $enclosure): array + { + if (0 === $bom_length) { + return $record; + } + + $record[0] = mb_substr($record[0], $bom_length); + if ($enclosure.$enclosure != substr($record[0].$record[0], strlen($record[0]) - 1, 2)) { + return $record; + } + + $record[0] = substr($record[0], 1, -1); + + return $record; + } + + /** + * {@inheritdoc} + */ + public function __call($method, array $arguments) + { + static $whitelisted = ['fetchColumn' => 1, 'fetchOne' => 1, 'fetchPairs' => 1]; + if (isset($whitelisted[$method])) { + return (new ResultSet($this->getRecords(), $this->getHeader()))->$method(...$arguments); + } + + throw new BadMethodCallException(sprintf('%s::%s() method does not exist', static::class, $method)); + } + + /** + * {@inheritdoc} + */ + public function count(): int + { + if (-1 === $this->nb_records) { + $this->nb_records = iterator_count($this->getRecords()); + } + + return $this->nb_records; + } + + /** + * {@inheritdoc} + */ + public function getIterator(): Iterator + { + return $this->getRecords(); + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize(): array + { + return iterator_to_array($this->getRecords(), false); + } + + /** + * Returns the CSV records as an iterator object. + * + * Each CSV record is represented as a simple array containing strings or null values. + * + * If the CSV document has a header record then each record is combined + * to the header record and the header record is removed from the iterator. + * + * If the CSV document is inconsistent. Missing record fields are + * filled with null values while extra record fields are strip from + * the returned object. + * + * @param string[] $header an optional header to use instead of the CSV document header + */ + public function getRecords(array $header = []): Iterator + { + $header = $this->computeHeader($header); + $normalized = function ($record): bool { + return is_array($record) && ($this->is_empty_records_included || $record != [null]); + }; + + $bom = ''; + if (!$this->is_input_bom_included) { + $bom = $this->getInputBOM(); + } + + $document = $this->getDocument(); + $records = $this->stripBOM(new CallbackFilterIterator($document, $normalized), $bom); + if (null !== $this->header_offset) { + $records = new CallbackFilterIterator($records, function (array $record, int $offset): bool { + return $offset !== $this->header_offset; + }); + } + + if ($this->is_empty_records_included) { + $normalized_empty_records = static function (array $record): array { + if ([null] === $record) { + return []; + } + + return $record; + }; + + return $this->combineHeader(new MapIterator($records, $normalized_empty_records), $header); + } + + return $this->combineHeader($records, $header); + } + + /** + * Returns the header to be used for iteration. + * + * @param string[] $header + * + * @throws Exception If the header contains non unique column name + * + * @return string[] + */ + protected function computeHeader(array $header) + { + if ([] === $header) { + $header = $this->getHeader(); + } + + if ($header === array_unique(array_filter($header, 'is_string'))) { + return $header; + } + + throw new SyntaxError('The header record must be empty or a flat array with unique string values'); + } + + /** + * Combine the CSV header to each record if present. + * + * @param string[] $header + */ + protected function combineHeader(Iterator $iterator, array $header): Iterator + { + if ([] === $header) { + return $iterator; + } + + $field_count = count($header); + $mapper = static function (array $record) use ($header, $field_count): array { + if (count($record) != $field_count) { + $record = array_slice(array_pad($record, $field_count, null), 0, $field_count); + } + + return array_combine($header, $record); + }; + + return new MapIterator($iterator, $mapper); + } + + /** + * Strip the BOM sequence from the returned records if necessary. + */ + protected function stripBOM(Iterator $iterator, string $bom): Iterator + { + if ('' === $bom) { + return $iterator; + } + + $bom_length = mb_strlen($bom); + $mapper = function (array $record, int $index) use ($bom_length): array { + if (0 !== $index) { + return $record; + } + + return $this->removeBOM($record, $bom_length, $this->enclosure); + }; + + return new MapIterator($iterator, $mapper); + } + + /** + * Selects the record to be used as the CSV header. + * + * Because the header is represented as an array, to be valid + * a header MUST contain only unique string value. + * + * @param int|null $offset the header record offset + * + * @throws Exception if the offset is a negative integer + * + * @return static + */ + public function setHeaderOffset($offset): self + { + if ($offset === $this->header_offset) { + return $this; + } + + if (!is_nullable_int($offset)) { + throw new TypeError(sprintf(__METHOD__.'() expects 1 Argument to be null or an integer %s given', gettype($offset))); + } + + if (null !== $offset && 0 > $offset) { + throw new InvalidArgument(__METHOD__.'() expects 1 Argument to be greater or equal to 0'); + } + + $this->header_offset = $offset; + $this->resetProperties(); + + return $this; + } + + /** + * Enable skipping empty records. + */ + public function skipEmptyRecords(): self + { + if ($this->is_empty_records_included) { + $this->is_empty_records_included = false; + $this->nb_records = -1; + } + + return $this; + } + + /** + * Disable skipping empty records. + */ + public function includeEmptyRecords(): self + { + if (!$this->is_empty_records_included) { + $this->is_empty_records_included = true; + $this->nb_records = -1; + } + + return $this; + } + + /** + * Tells whether empty records are skipped by the instance. + */ + public function isEmptyRecordsIncluded(): bool + { + return $this->is_empty_records_included; + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/ResultSet.php b/assets/google-sheets/vendor/league/csv/src/ResultSet.php new file mode 100644 index 0000000..d27e90f --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/ResultSet.php @@ -0,0 +1,241 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use CallbackFilterIterator; +use Countable; +use Generator; +use Iterator; +use IteratorAggregate; +use JsonSerializable; +use LimitIterator; +use function array_flip; +use function array_search; +use function is_string; +use function iterator_count; +use function iterator_to_array; +use function sprintf; + +/** + * Represents the result set of a {@link Reader} processed by a {@link Statement}. + */ +class ResultSet implements Countable, IteratorAggregate, JsonSerializable +{ + /** + * The CSV records collection. + * + * @var Iterator + */ + protected $records; + + /** + * The CSV records collection header. + * + * @var array + */ + protected $header = []; + + /** + * New instance. + * + * @param Iterator $records a CSV records collection iterator + * @param array $header the associated collection column names + */ + public function __construct(Iterator $records, array $header) + { + $this->records = $records; + $this->header = $header; + } + + /** + * {@inheritdoc} + */ + public function __destruct() + { + unset($this->records); + } + + /** + * Returns the header associated with the result set. + * + * @return string[] + */ + public function getHeader(): array + { + return $this->header; + } + + /** + * {@inheritdoc} + */ + public function getRecords(): Generator + { + foreach ($this->records as $offset => $value) { + yield $offset => $value; + } + } + + /** + * {@inheritdoc} + */ + public function getIterator(): Generator + { + return $this->getRecords(); + } + + /** + * {@inheritdoc} + */ + public function count(): int + { + return iterator_count($this->records); + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize(): array + { + return iterator_to_array($this->records, false); + } + + /** + * Returns the nth record from the result set. + * + * By default if no index is provided the first record of the resultet is returned + * + * @param int $nth_record the CSV record offset + * + * @throws Exception if argument is lesser than 0 + */ + public function fetchOne(int $nth_record = 0): array + { + if ($nth_record < 0) { + throw new InvalidArgument(sprintf('%s() expects the submitted offset to be a positive integer or 0, %s given', __METHOD__, $nth_record)); + } + + $iterator = new LimitIterator($this->records, $nth_record, 1); + $iterator->rewind(); + + return (array) $iterator->current(); + } + + /** + * Returns a single column from the next record of the result set. + * + * By default if no value is supplied the first column is fetch + * + * @param string|int $index CSV column index + */ + public function fetchColumn($index = 0): Generator + { + $offset = $this->getColumnIndex($index, __METHOD__.'() expects the column index to be a valid string or integer, `%s` given'); + $filter = static function (array $record) use ($offset): bool { + return isset($record[$offset]); + }; + + $select = static function (array $record) use ($offset): string { + return $record[$offset]; + }; + + $iterator = new MapIterator(new CallbackFilterIterator($this->records, $filter), $select); + foreach ($iterator as $offset => $value) { + yield $offset => $value; + } + } + + /** + * Filter a column name against the header if any. + * + * @param string|int $field the field name or the field index + * @param string $error_message the associated error message + * + * @return string|int + */ + protected function getColumnIndex($field, string $error_message) + { + $method = is_string($field) ? 'getColumnIndexByValue' : 'getColumnIndexByKey'; + + return $this->$method($field, $error_message); + } + + /** + * Returns the selected column name. + * + * @throws Exception if the column is not found + */ + protected function getColumnIndexByValue(string $value, string $error_message): string + { + if (false !== array_search($value, $this->header, true)) { + return $value; + } + + throw new InvalidArgument(sprintf($error_message, $value)); + } + + /** + * Returns the selected column name according to its offset. + * + * @throws Exception if the field is invalid or not found + * + * @return int|string + */ + protected function getColumnIndexByKey(int $index, string $error_message) + { + if ($index < 0) { + throw new InvalidArgument($error_message); + } + + if ([] === $this->header) { + return $index; + } + + $value = array_search($index, array_flip($this->header), true); + if (false !== $value) { + return $value; + } + + throw new InvalidArgument(sprintf($error_message, $index)); + } + + /** + * Returns the next key-value pairs from a result set (first + * column is the key, second column is the value). + * + * By default if no column index is provided: + * - the first column is used to provide the keys + * - the second column is used to provide the value + * + * @param string|int $offset_index The column index to serve as offset + * @param string|int $value_index The column index to serve as value + */ + public function fetchPairs($offset_index = 0, $value_index = 1): Generator + { + $offset = $this->getColumnIndex($offset_index, __METHOD__.'() expects the offset index value to be a valid string or integer, `%s` given'); + $value = $this->getColumnIndex($value_index, __METHOD__.'() expects the value index value to be a valid string or integer, `%s` given'); + + $filter = static function (array $record) use ($offset): bool { + return isset($record[$offset]); + }; + + $select = static function (array $record) use ($offset, $value): array { + return [$record[$offset], $record[$value] ?? null]; + }; + + $iterator = new MapIterator(new CallbackFilterIterator($this->records, $filter), $select); + foreach ($iterator as $pair) { + yield $pair[0] => $pair[1]; + } + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/Statement.php b/assets/google-sheets/vendor/league/csv/src/Statement.php new file mode 100644 index 0000000..b45fbde --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/Statement.php @@ -0,0 +1,169 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use ArrayIterator; +use CallbackFilterIterator; +use Iterator; +use LimitIterator; +use function array_reduce; +use function iterator_to_array; + +/** + * Criteria to filter a {@link Reader} object. + */ +class Statement +{ + /** + * Callables to filter the iterator. + * + * @var callable[] + */ + protected $where = []; + + /** + * Callables to sort the iterator. + * + * @var callable[] + */ + protected $order_by = []; + + /** + * iterator Offset. + * + * @var int + */ + protected $offset = 0; + + /** + * iterator maximum length. + * + * @var int + */ + protected $limit = -1; + + /** + * Set the Iterator filter method. + */ + public function where(callable $callable): self + { + $clone = clone $this; + $clone->where[] = $callable; + + return $clone; + } + + /** + * Set an Iterator sorting callable function. + */ + public function orderBy(callable $callable): self + { + $clone = clone $this; + $clone->order_by[] = $callable; + + return $clone; + } + + /** + * Set LimitIterator Offset. + * + * @throws Exception if the offset is lesser than 0 + */ + public function offset(int $offset): self + { + if (0 > $offset) { + throw new InvalidArgument(sprintf('%s() expects the offset to be a positive integer or 0, %s given', __METHOD__, $offset)); + } + + if ($offset === $this->offset) { + return $this; + } + + $clone = clone $this; + $clone->offset = $offset; + + return $clone; + } + + /** + * Set LimitIterator Count. + * + * @throws Exception if the limit is lesser than -1 + */ + public function limit(int $limit): self + { + if (-1 > $limit) { + throw new InvalidArgument(sprintf('%s() expects the limit to be greater or equal to -1, %s given', __METHOD__, $limit)); + } + + if ($limit === $this->limit) { + return $this; + } + + $clone = clone $this; + $clone->limit = $limit; + + return $clone; + } + + /** + * Execute the prepared Statement on the {@link Reader} object. + * + * @param string[] $header an optional header to use instead of the CSV document header + */ + public function process(Reader $csv, array $header = []): ResultSet + { + if ([] === $header) { + $header = $csv->getHeader(); + } + + $iterator = array_reduce($this->where, [$this, 'filter'], $csv->getRecords($header)); + $iterator = $this->buildOrderBy($iterator); + + return new ResultSet(new LimitIterator($iterator, $this->offset, $this->limit), $header); + } + + /** + * Filters elements of an Iterator using a callback function. + */ + protected function filter(Iterator $iterator, callable $callable): CallbackFilterIterator + { + return new CallbackFilterIterator($iterator, $callable); + } + + /** + * Sort the Iterator. + */ + protected function buildOrderBy(Iterator $iterator): Iterator + { + if ([] === $this->order_by) { + return $iterator; + } + + $compare = function (array $record_a, array $record_b): int { + foreach ($this->order_by as $callable) { + if (0 !== ($cmp = $callable($record_a, $record_b))) { + return $cmp; + } + } + + return $cmp ?? 0; + }; + + $iterator = new ArrayIterator(iterator_to_array($iterator)); + $iterator->uasort($compare); + + return $iterator; + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/Stream.php b/assets/google-sheets/vendor/league/csv/src/Stream.php new file mode 100644 index 0000000..33ba55c --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/Stream.php @@ -0,0 +1,518 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use SeekableIterator; +use SplFileObject; +use TypeError; +use function array_keys; +use function array_walk_recursive; +use function fclose; +use function feof; +use function fflush; +use function fgetcsv; +use function fgets; +use function fopen; +use function fpassthru; +use function fputcsv; +use function fread; +use function fseek; +use function fwrite; +use function get_resource_type; +use function gettype; +use function is_resource; +use function rewind; +use function sprintf; +use function stream_filter_append; +use function stream_filter_remove; +use function stream_get_meta_data; +use function strlen; +use const PHP_VERSION_ID; +use const SEEK_SET; + +/** + * An object oriented API to handle a PHP stream resource. + * + * @internal used internally to iterate over a stream resource + */ +class Stream implements SeekableIterator +{ + /** + * Attached filters. + * + * @var resource[] + */ + protected $filters = []; + + /** + * stream resource. + * + * @var resource + */ + protected $stream; + + /** + * Tell whether the stream should be closed on object destruction. + * + * @var bool + */ + protected $should_close_stream = false; + + /** + * Current iterator value. + * + * @var mixed + */ + protected $value; + + /** + * Current iterator key. + * + * @var int + */ + protected $offset; + + /** + * Flags for the Document. + * + * @var int + */ + protected $flags = 0; + + /** + * the field delimiter (one character only). + * + * @var string + */ + protected $delimiter = ','; + + /** + * the field enclosure character (one character only). + * + * @var string + */ + protected $enclosure = '"'; + + /** + * the field escape character (one character only). + * + * @var string + */ + protected $escape = '\\'; + + /** + * Tell whether the current stream is seekable;. + * + * @var bool + */ + protected $is_seekable = false; + + /** + * New instance. + * + * @param resource $stream stream type resource + */ + public function __construct($stream) + { + if (!is_resource($stream)) { + throw new TypeError(sprintf('Argument passed must be a stream resource, %s given', gettype($stream))); + } + + if ('stream' !== ($type = get_resource_type($stream))) { + throw new TypeError(sprintf('Argument passed must be a stream resource, %s resource given', $type)); + } + + $this->is_seekable = stream_get_meta_data($stream)['seekable']; + $this->stream = $stream; + } + + /** + * {@inheritdoc} + */ + public function __destruct() + { + $walker = static function ($filter): bool { + return @stream_filter_remove($filter); + }; + + array_walk_recursive($this->filters, $walker); + + if ($this->should_close_stream && is_resource($this->stream)) { + fclose($this->stream); + } + + unset($this->stream); + } + + /** + * {@inheritdoc} + */ + public function __clone() + { + throw new Exception(sprintf('An object of class %s cannot be cloned', static::class)); + } + + /** + * {@inheritdoc} + */ + public function __debugInfo() + { + return stream_get_meta_data($this->stream) + [ + 'delimiter' => $this->delimiter, + 'enclosure' => $this->enclosure, + 'escape' => $this->escape, + 'stream_filters' => array_keys($this->filters), + ]; + } + + /** + * Return a new instance from a file path. + * + * @param resource|null $context + * + * @throws Exception if the stream resource can not be created + * + * @return static + */ + public static function createFromPath(string $path, string $open_mode = 'r', $context = null) + { + $args = [$path, $open_mode]; + if (null !== $context) { + $args[] = false; + $args[] = $context; + } + + if (!$resource = @fopen(...$args)) { + throw new Exception(sprintf('`%s`: failed to open stream: No such file or directory', $path)); + } + + $instance = new static($resource); + $instance->should_close_stream = true; + + return $instance; + } + + /** + * Return a new instance from a string. + * + * @return static + */ + public static function createFromString(string $content = '') + { + $resource = fopen('php://temp', 'r+'); + fwrite($resource, $content); + + $instance = new static($resource); + $instance->should_close_stream = true; + + return $instance; + } + + /** + * Return the URI of the underlying stream. + */ + public function getPathname(): string + { + return stream_get_meta_data($this->stream)['uri']; + } + + /** + * append a filter. + * + * @see http://php.net/manual/en/function.stream-filter-append.php + * + * @param null|mixed $params + * @throws Exception if the filter can not be appended + */ + public function appendFilter(string $filtername, int $read_write, $params = null) + { + $res = @stream_filter_append($this->stream, $filtername, $read_write, $params); + if (is_resource($res)) { + $this->filters[$filtername][] = $res; + return; + } + + throw new InvalidArgument(sprintf('unable to locate filter `%s`', $filtername)); + } + + /** + * Set CSV control. + * + * @see http://php.net/manual/en/splfileobject.setcsvcontrol.php + */ + public function setCsvControl(string $delimiter = ',', string $enclosure = '"', string $escape = '\\') + { + list($this->delimiter, $this->enclosure, $this->escape) = $this->filterControl($delimiter, $enclosure, $escape, __METHOD__); + } + + /** + * Filter Csv control characters. + * + * @throws Exception If the Csv control character is not one character only. + */ + protected function filterControl(string $delimiter, string $enclosure, string $escape, string $caller): array + { + if (1 !== strlen($delimiter)) { + throw new InvalidArgument(sprintf('%s() expects delimiter to be a single character', $caller)); + } + + if (1 !== strlen($enclosure)) { + throw new InvalidArgument(sprintf('%s() expects enclosure to be a single character', $caller)); + } + + if (1 === strlen($escape) || ('' === $escape && 70400 <= PHP_VERSION_ID)) { + return [$delimiter, $enclosure, $escape]; + } + + throw new InvalidArgument(sprintf('%s() expects escape to be a single character', $caller)); + } + + /** + * Set CSV control. + * + * @see http://php.net/manual/en/splfileobject.getcsvcontrol.php + * + * @return string[] + */ + public function getCsvControl() + { + return [$this->delimiter, $this->enclosure, $this->escape]; + } + + /** + * Set CSV stream flags. + * + * @see http://php.net/manual/en/splfileobject.setflags.php + */ + public function setFlags(int $flags) + { + $this->flags = $flags; + } + + /** + * Write a field array as a CSV line. + * + * @see http://php.net/manual/en/splfileobject.fputcsv.php + * + * @return int|false + */ + public function fputcsv(array $fields, string $delimiter = ',', string $enclosure = '"', string $escape = '\\') + { + $controls = $this->filterControl($delimiter, $enclosure, $escape, __METHOD__); + + return fputcsv($this->stream, $fields, ...$controls); + } + + /** + * Get line number. + * + * @see http://php.net/manual/en/splfileobject.key.php + * + * @return int + */ + public function key() + { + return $this->offset; + } + + /** + * Read next line. + * + * @see http://php.net/manual/en/splfileobject.next.php + */ + public function next() + { + $this->value = false; + $this->offset++; + } + + /** + * Rewind the file to the first line. + * + * @see http://php.net/manual/en/splfileobject.rewind.php + * + * @throws Exception if the stream resource is not seekable + */ + public function rewind() + { + if (!$this->is_seekable) { + throw new Exception('stream does not support seeking'); + } + + rewind($this->stream); + $this->offset = 0; + $this->value = false; + if ($this->flags & SplFileObject::READ_AHEAD) { + $this->current(); + } + } + + /** + * Not at EOF. + * + * @see http://php.net/manual/en/splfileobject.valid.php + * + * @return bool + */ + public function valid() + { + if ($this->flags & SplFileObject::READ_AHEAD) { + return $this->current() !== false; + } + + return !feof($this->stream); + } + + /** + * Retrieves the current line of the file. + * + * @see http://php.net/manual/en/splfileobject.current.php + */ + public function current() + { + if (false !== $this->value) { + return $this->value; + } + + $this->value = $this->getCurrentRecord(); + + return $this->value; + } + + /** + * Retrieves the current line as a CSV Record. + * + * @return array|false + */ + protected function getCurrentRecord() + { + do { + $ret = fgetcsv($this->stream, 0, $this->delimiter, $this->enclosure, $this->escape); + } while ($this->flags & SplFileObject::SKIP_EMPTY && $ret !== false && $ret[0] === null); + + return $ret; + } + + /** + * Seek to specified line. + * + * @see http://php.net/manual/en/splfileobject.seek.php + * + * @param int $position + * @throws Exception if the position is negative + */ + public function seek($position) + { + if ($position < 0) { + throw new Exception(sprintf('%s() can\'t seek stream to negative line %d', __METHOD__, $position)); + } + + $this->rewind(); + while ($this->key() !== $position && $this->valid()) { + $this->current(); + $this->next(); + } + + if (0 !== $position) { + $this->offset--; + } + + $this->current(); + } + + /** + * Output all remaining data on a file pointer. + * + * @see http://php.net/manual/en/splfileobject.fpatssthru.php + * + * @return int + */ + public function fpassthru() + { + return fpassthru($this->stream); + } + + /** + * Read from file. + * + * @see http://php.net/manual/en/splfileobject.fread.php + * + * @param int $length The number of bytes to read + * + * @return string|false + */ + public function fread($length) + { + return fread($this->stream, $length); + } + + /** + * Gets a line from file. + * + * @see http://php.net/manual/en/splfileobject.fgets.php + * + * @return string|false + */ + public function fgets() + { + return fgets($this->stream); + } + + /** + * Seek to a position. + * + * @see http://php.net/manual/en/splfileobject.fseek.php + * + * @throws Exception if the stream resource is not seekable + * + * @return int + */ + public function fseek(int $offset, int $whence = SEEK_SET) + { + if (!$this->is_seekable) { + throw new Exception('stream does not support seeking'); + } + + return fseek($this->stream, $offset, $whence); + } + + /** + * Write to stream. + * + * @see http://php.net/manual/en/splfileobject.fwrite.php + * + * @return int|false + */ + public function fwrite(string $str, int $length = null) + { + $args = [$this->stream, $str]; + if (null !== $length) { + $args[] = $length; + } + + return fwrite(...$args); + } + + /** + * Flushes the output to a file. + * + * @see http://php.net/manual/en/splfileobject.fwrite.php + * + * @return bool + */ + public function fflush() + { + return fflush($this->stream); + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/SyntaxError.php b/assets/google-sheets/vendor/league/csv/src/SyntaxError.php new file mode 100644 index 0000000..4794d9a --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/SyntaxError.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +/** + * SyntaxError Exception. + */ +class SyntaxError extends Exception +{ +} diff --git a/assets/google-sheets/vendor/league/csv/src/UnavailableFeature.php b/assets/google-sheets/vendor/league/csv/src/UnavailableFeature.php new file mode 100644 index 0000000..67edd7f --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/UnavailableFeature.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +/** + * StreamFilterSupportMissing Exception. + */ +class UnavailableFeature extends Exception +{ +} diff --git a/assets/google-sheets/vendor/league/csv/src/Writer.php b/assets/google-sheets/vendor/league/csv/src/Writer.php new file mode 100644 index 0000000..b2c0099 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/Writer.php @@ -0,0 +1,330 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use Traversable; +use TypeError; +use function array_reduce; +use function gettype; +use function implode; +use function is_iterable; +use function preg_match; +use function preg_quote; +use function sprintf; +use function str_replace; +use function strlen; +use const PHP_VERSION_ID; +use const SEEK_CUR; +use const STREAM_FILTER_WRITE; + +/** + * A class to insert records into a CSV Document. + */ +class Writer extends AbstractCsv +{ + /** + * callable collection to format the record before insertion. + * + * @var callable[] + */ + protected $formatters = []; + + /** + * callable collection to validate the record before insertion. + * + * @var callable[] + */ + protected $validators = []; + + /** + * newline character. + * + * @var string + */ + protected $newline = "\n"; + + /** + * Insert records count for flushing. + * + * @var int + */ + protected $flush_counter = 0; + + /** + * Buffer flush threshold. + * + * @var int|null + */ + protected $flush_threshold; + + /** + * {@inheritdoc} + */ + protected $stream_filter_mode = STREAM_FILTER_WRITE; + + /** + * Regular expression used to detect if RFC4180 formatting is necessary. + * + * @var string + */ + protected $rfc4180_regexp; + + /** + * double enclosure for RFC4180 compliance. + * + * @var string + */ + protected $rfc4180_enclosure; + + /** + * {@inheritdoc} + */ + protected function resetProperties() + { + parent::resetProperties(); + $characters = preg_quote($this->delimiter, '/').'|'.preg_quote($this->enclosure, '/'); + $this->rfc4180_regexp = '/[\s|'.$characters.']/x'; + $this->rfc4180_enclosure = $this->enclosure.$this->enclosure; + } + + /** + * Returns the current newline sequence characters. + */ + public function getNewline(): string + { + return $this->newline; + } + + /** + * Get the flush threshold. + * + * @return int|null + */ + public function getFlushThreshold() + { + return $this->flush_threshold; + } + + /** + * Adds multiple records to the CSV document. + * + * @see Writer::insertOne + * + * @param Traversable|array $records + */ + public function insertAll($records): int + { + if (!is_iterable($records)) { + throw new TypeError(sprintf('%s() expects argument passed to be iterable, %s given', __METHOD__, gettype($records))); + } + + $bytes = 0; + foreach ($records as $record) { + $bytes += $this->insertOne($record); + } + + $this->flush_counter = 0; + $this->document->fflush(); + + return $bytes; + } + + /** + * Adds a single record to a CSV document. + * + * A record is an array that can contains scalar types values, NULL values + * or objects implementing the __toString method. + * + * @throws CannotInsertRecord If the record can not be inserted + */ + public function insertOne(array $record): int + { + $method = 'addRecord'; + if (70400 > PHP_VERSION_ID && '' === $this->escape) { + $method = 'addRFC4180CompliantRecord'; + } + + $record = array_reduce($this->formatters, [$this, 'formatRecord'], $record); + $this->validateRecord($record); + $bytes = $this->$method($record); + if (false !== $bytes && 0 !== $bytes) { + return $bytes + $this->consolidate(); + } + + throw CannotInsertRecord::triggerOnInsertion($record); + } + + /** + * Adds a single record to a CSV Document using PHP algorithm. + * + * @see https://php.net/manual/en/function.fputcsv.php + * + * @return int|false + */ + protected function addRecord(array $record) + { + return $this->document->fputcsv($record, $this->delimiter, $this->enclosure, $this->escape); + } + + /** + * Adds a single record to a CSV Document using RFC4180 algorithm. + * + * @see https://php.net/manual/en/function.fputcsv.php + * @see https://php.net/manual/en/function.fwrite.php + * @see https://tools.ietf.org/html/rfc4180 + * @see http://edoceo.com/utilitas/csv-file-format + * + * String conversion is done without any check like fputcsv. + * + * - Emits E_NOTICE on Array conversion (returns the 'Array' string) + * - Throws catchable fatal error on objects that can not be converted + * - Returns resource id without notice or error (returns 'Resource id #2') + * - Converts boolean true to '1', boolean false to the empty string + * - Converts null value to the empty string + * + * Fields must be delimited with enclosures if they contains : + * + * - Embedded whitespaces + * - Embedded delimiters + * - Embedded line-breaks + * - Embedded enclosures. + * + * Embedded enclosures must be doubled. + * + * The LF character is added at the end of each record to mimic fputcsv behavior + * + * @return int|false + */ + protected function addRFC4180CompliantRecord(array $record) + { + foreach ($record as &$field) { + $field = (string) $field; + if (1 === preg_match($this->rfc4180_regexp, $field)) { + $field = $this->enclosure.str_replace($this->enclosure, $this->rfc4180_enclosure, $field).$this->enclosure; + } + } + unset($field); + + return $this->document->fwrite(implode($this->delimiter, $record)."\n"); + } + + /** + * Format a record. + * + * The returned array must contain + * - scalar types values, + * - NULL values, + * - or objects implementing the __toString() method. + */ + protected function formatRecord(array $record, callable $formatter): array + { + return $formatter($record); + } + + /** + * Validate a record. + * + * @throws CannotInsertRecord If the validation failed + */ + protected function validateRecord(array $record) + { + foreach ($this->validators as $name => $validator) { + if (true !== $validator($record)) { + throw CannotInsertRecord::triggerOnValidation($name, $record); + } + } + } + + /** + * Apply post insertion actions. + */ + protected function consolidate(): int + { + $bytes = 0; + if ("\n" !== $this->newline) { + $this->document->fseek(-1, SEEK_CUR); + $bytes = $this->document->fwrite($this->newline, strlen($this->newline)) - 1; + } + + if (null === $this->flush_threshold) { + return $bytes; + } + + ++$this->flush_counter; + if (0 === $this->flush_counter % $this->flush_threshold) { + $this->flush_counter = 0; + $this->document->fflush(); + } + + return $bytes; + } + + /** + * Adds a record formatter. + */ + public function addFormatter(callable $formatter): self + { + $this->formatters[] = $formatter; + + return $this; + } + + /** + * Adds a record validator. + */ + public function addValidator(callable $validator, string $validator_name): self + { + $this->validators[$validator_name] = $validator; + + return $this; + } + + /** + * Sets the newline sequence. + */ + public function setNewline(string $newline): self + { + $this->newline = $newline; + + return $this; + } + + /** + * Set the flush threshold. + * + * @param int|null $threshold + * + * @throws Exception if the threshold is a integer lesser than 1 + */ + public function setFlushThreshold($threshold): self + { + if ($threshold === $this->flush_threshold) { + return $this; + } + + if (!is_nullable_int($threshold)) { + throw new TypeError(sprintf(__METHOD__.'() expects 1 Argument to be null or an integer %s given', gettype($threshold))); + } + + if (null !== $threshold && 1 > $threshold) { + throw new InvalidArgument(__METHOD__.'() expects 1 Argument to be null or a valid integer greater or equal to 1'); + } + + $this->flush_threshold = $threshold; + $this->flush_counter = 0; + $this->document->fflush(); + + return $this; + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/XMLConverter.php b/assets/google-sheets/vendor/league/csv/src/XMLConverter.php new file mode 100644 index 0000000..24a0911 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/XMLConverter.php @@ -0,0 +1,243 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use DOMAttr; +use DOMDocument; +use DOMElement; +use DOMException; +use Traversable; +use TypeError; +use function gettype; +use function is_iterable; +use function sprintf; + +/** + * Converts tabular data into a DOMDOcument object. + */ +class XMLConverter +{ + /** + * XML Root name. + * + * @var string + */ + protected $root_name = 'csv'; + + /** + * XML Node name. + * + * @var string + */ + protected $record_name = 'row'; + + /** + * XML Item name. + * + * @var string + */ + protected $field_name = 'cell'; + + /** + * XML column attribute name. + * + * @var string + */ + protected $column_attr = ''; + + /** + * XML offset attribute name. + * + * @var string + */ + protected $offset_attr = ''; + + /** + * Conversion method list. + * + * @var array + */ + protected $encoder = [ + 'field' => [ + true => 'fieldToElementWithAttribute', + false => 'fieldToElement', + ], + 'record' => [ + true => 'recordToElementWithAttribute', + false => 'recordToElement', + ], + ]; + + /** + * Convert a Record collection into a DOMDocument. + * + * @param array|Traversable $records the CSV records collection + */ + public function convert($records): DOMDocument + { + if (!is_iterable($records)) { + throw new TypeError(sprintf('%s() expects argument passed to be iterable, %s given', __METHOD__, gettype($records))); + } + + $doc = new DOMDocument('1.0'); + $node = $this->import($records, $doc); + $doc->appendChild($node); + + return $doc; + } + + /** + * Create a new DOMElement related to the given DOMDocument. + * + * **DOES NOT** attach to the DOMDocument + * + * @param array|Traversable $records + */ + public function import($records, DOMDocument $doc): DOMElement + { + if (!is_iterable($records)) { + throw new TypeError(sprintf('%s() expects argument passed to be iterable, %s given', __METHOD__, gettype($records))); + } + + $field_encoder = $this->encoder['field']['' !== $this->column_attr]; + $record_encoder = $this->encoder['record']['' !== $this->offset_attr]; + $root = $doc->createElement($this->root_name); + foreach ($records as $offset => $record) { + $node = $this->$record_encoder($doc, $record, $field_encoder, $offset); + $root->appendChild($node); + } + + return $root; + } + + /** + * Convert a CSV record into a DOMElement and + * adds its offset as DOMElement attribute. + */ + protected function recordToElementWithAttribute( + DOMDocument $doc, + array $record, + string $field_encoder, + int $offset + ): DOMElement { + $node = $this->recordToElement($doc, $record, $field_encoder); + $node->setAttribute($this->offset_attr, (string) $offset); + + return $node; + } + + /** + * Convert a CSV record into a DOMElement. + */ + protected function recordToElement(DOMDocument $doc, array $record, string $field_encoder): DOMElement + { + $node = $doc->createElement($this->record_name); + foreach ($record as $node_name => $value) { + $item = $this->$field_encoder($doc, (string) $value, $node_name); + $node->appendChild($item); + } + + return $node; + } + + /** + * Convert Cell to Item. + * + * Convert the CSV item into a DOMElement and adds the item offset + * as attribute to the returned DOMElement + * + * @param int|string $node_name + */ + protected function fieldToElementWithAttribute(DOMDocument $doc, string $value, $node_name): DOMElement + { + $item = $this->fieldToElement($doc, $value); + $item->setAttribute($this->column_attr, (string) $node_name); + + return $item; + } + + /** + * Convert Cell to Item. + * + * @param string $value Record item value + */ + protected function fieldToElement(DOMDocument $doc, string $value): DOMElement + { + $item = $doc->createElement($this->field_name); + $item->appendChild($doc->createTextNode($value)); + + return $item; + } + + /** + * XML root element setter. + */ + public function rootElement(string $node_name): self + { + $clone = clone $this; + $clone->root_name = $this->filterElementName($node_name); + + return $clone; + } + + /** + * Filter XML element name. + * + * @throws DOMException If the Element name is invalid + */ + protected function filterElementName(string $value): string + { + return (new DOMElement($value))->tagName; + } + + /** + * XML Record element setter. + */ + public function recordElement(string $node_name, string $record_offset_attribute_name = ''): self + { + $clone = clone $this; + $clone->record_name = $this->filterElementName($node_name); + $clone->offset_attr = $this->filterAttributeName($record_offset_attribute_name); + + return $clone; + } + + /** + * Filter XML attribute name. + * + * @param string $value Element name + * + * @throws DOMException If the Element attribute name is invalid + */ + protected function filterAttributeName(string $value): string + { + if ('' === $value) { + return $value; + } + + return (new DOMAttr($value))->name; + } + + /** + * XML Field element setter. + */ + public function fieldElement(string $node_name, string $fieldname_attribute_name = ''): self + { + $clone = clone $this; + $clone->field_name = $this->filterElementName($node_name); + $clone->column_attr = $this->filterAttributeName($fieldname_attribute_name); + + return $clone; + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/functions.php b/assets/google-sheets/vendor/league/csv/src/functions.php new file mode 100644 index 0000000..e999d30 --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/functions.php @@ -0,0 +1,138 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv { + + use ReflectionClass; + use Traversable; + use function array_fill_keys; + use function array_filter; + use function array_reduce; + use function array_unique; + use function count; + use function is_array; + use function iterator_to_array; + use function rsort; + use function strlen; + use function strpos; + use const COUNT_RECURSIVE; + + /** + * Returns the BOM sequence found at the start of the string. + * + * If no valid BOM sequence is found an empty string is returned + */ + function bom_match(string $str): string + { + static $list; + if (null === $list) { + $list = (new ReflectionClass(ByteSequence::class))->getConstants(); + + rsort($list); + } + + foreach ($list as $sequence) { + if (0 === strpos($str, $sequence)) { + return $sequence; + } + } + + return ''; + } + + /** + * Detect Delimiters usage in a {@link Reader} object. + * + * Returns a associative array where each key represents + * a submitted delimiter and each value the number CSV fields found + * when processing at most $limit CSV records with the given delimiter + * + * @param string[] $delimiters + * + * @return int[] + */ + function delimiter_detect(Reader $csv, array $delimiters, int $limit = 1): array + { + $delimiter_filter = static function (string $value): bool { + return 1 === strlen($value); + }; + + $record_filter = static function (array $record): bool { + return count($record) > 1; + }; + + $stmt = (new Statement())->limit($limit); + + $delimiter_stats = static function (array $stats, string $delimiter) use ($csv, $stmt, $record_filter): array { + $csv->setDelimiter($delimiter); + $found_records = array_filter( + iterator_to_array($stmt->process($csv), false), + $record_filter + ); + + $stats[$delimiter] = count($found_records, COUNT_RECURSIVE); + + return $stats; + }; + + $current_delimiter = $csv->getDelimiter(); + $current_header_offset = $csv->getHeaderOffset(); + $csv->setHeaderOffset(null); + + $stats = array_reduce( + array_unique(array_filter($delimiters, $delimiter_filter)), + $delimiter_stats, + array_fill_keys($delimiters, 0) + ); + + $csv->setHeaderOffset($current_header_offset); + $csv->setDelimiter($current_delimiter); + + return $stats; + } + + /** + * Tell whether the content of the variable is iterable. + * + * @see http://php.net/manual/en/function.is-iterable.php + */ + function is_iterable($iterable): bool + { + return is_array($iterable) || $iterable instanceof Traversable; + } + + /** + * Tell whether the content of the variable is an int or null. + * + * @see https://wiki.php.net/rfc/nullable_types + */ + function is_nullable_int($value): bool + { + return null === $value || is_int($value); + } +} + +namespace { + + use League\Csv; + + if (PHP_VERSION_ID < 70100 && !function_exists('\is_iterable')) { + /** + * @codeCoverageIgnore + */ + function is_iterable($iterable) + { + return Csv\is_iterable($iterable); + } + } +} diff --git a/assets/google-sheets/vendor/league/csv/src/functions_include.php b/assets/google-sheets/vendor/league/csv/src/functions_include.php new file mode 100644 index 0000000..9ac9deb --- /dev/null +++ b/assets/google-sheets/vendor/league/csv/src/functions_include.php @@ -0,0 +1,14 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (!function_exists('League\Csv\bom_match')) { + require __DIR__.'/functions.php'; +} diff --git a/assets/js/ShMapperDrive.admin.js b/assets/js/ShMapperDrive.admin.js new file mode 100644 index 0000000..4bd8381 --- /dev/null +++ b/assets/js/ShMapperDrive.admin.js @@ -0,0 +1,136 @@ +var google_matrix = [], google_data = [], + generate_matrix_table = function(){}; +function getGoogleIdenters() +{ + return [ "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ"]; +} + +function getSingleGoogleIdenter($order) +{ + var $a = getGoogleIdenters(); + return $a[ parseInt($order) ]; +} +function getSingleGoogleOrder($identer) +{ + var $a = getGoogleIdenters(); + +} + +jQuery(document).ready(function($) +{ + generate_matrix_table = function() + { + $("#google_row").empty(); + var n = 0; + for(var i in google_matrix) + { + if(!google_matrix[0][i]) + { + //console.log( google_matrix[0][i] ); + continue; + } + if(!google_data[i]) + google_data[i] = {}; + var clone = $("#google_null").clone(); + console.log( google_data[i] ); + google_data[i].include = typeof google_data[i].include != "undefined" ? parseInt(google_data[i].include) : 1; + google_data[i].title = typeof google_data[i].title != "undefined" ? google_data[i].title : google_matrix[0][i].toString(); + google_data[i].meta = typeof google_data[i].meta != "undefined" ? google_data[i].meta : getSingleGoogleIdenter( i ); + google_data[i].order = typeof google_data[i].order != "undefined" ? google_data[i].order : i; + + clone.css("opacity", google_data[i].include ? 1 : 0.5); + clone.attr("id", "google_matrix" + i); + clone.attr("shmd_google_row", i); + clone.find("[nid='google-include']>input[type='checkbox']").prop("checked", google_data[i].include ); + clone.find("[nid='google-id']").text( getSingleGoogleIdenter( i ) ); + clone.find("[nid='google-meta'] input" ).val( google_data[i].meta ); + clone.find("[nid='google-title'] input").val( google_data[i].title ); + clone.find("[nid='google-order'] input").val( google_data[i].order ); + $("#google_row").append( clone ); + n++; + } + console.log(google_data); + } + var querry = { + "google-include" : "include", + "google-meta" : "meta", + "google-title" : "title", + "google-order" : "order" + }; + $(".shmd_row_check").on( 'change', function(evt) + { + var value = $(this).is(":checked") ? 1 : 0; + var name = querry[$(this).parents("[nid]").attr("nid")]; + var shmd_google_row = $(this).parents("[shmd_google_row]").attr("shmd_google_row"); + $(this).parents("[shmd_google_row]").css("opacity", value ? 1 : 0.5); + shm_send([ 'google_matrix_data', name, value, shmd_google_row ]); + }) + $(".shmd_row_input").on( 'change', function(evt) + { + var value = $(this).val(); + var name = querry[$(this).parents("[nid]").attr("nid")]; + var shmd_google_row = $(this).parents("[shmd_google_row]").attr("shmd_google_row"); + shm_send([ 'google_matrix_data', name, value, shmd_google_row ]); + }) + $("[name='google_table_id']").change(function(evt) + { + var val = $(evt.currentTarget).val(); + if(val != "") + { + $("#shmd_settings_wizzard").fadeIn(); + } + else + { + $("#shmd_settings_wizzard").fadeOut(); + $("#shm_google_params").slideUp(); + } + }); + $(" #shm-google-reload, [name='google_table_id']").click(function(evt) + { + shm_send([ 'load_google_table', $("[name='google_table_id']").val() ]); + }); + $("#shmd_settings_open").click(function(evt) + { + shm_send([ 'load_google_table', $("[name='google_table_id']").val() ]); + $("#shm_google_params").slideToggle(); + }); + $("#shmd_google_preview").click(function(evt) + { + shm_send([ 'shmd_google_preview' ]); + }); + $("#shmd_google_update").click(function(evt) + { + shm_send([ 'shmd_google_update' ]); + }); + + $(".shm_options").change(function(evt) + { + var name = $(this).attr("name"); + var val = $(this).val(); + shm_send([ 'shm_options', name, val ]); + }); + + //ajax + document.addEventListener("_shm_send_", function( event ) + { + console.log( event.detail ); + switch(event.detail[0]) + { + case "load_google_table": + google_matrix = event.detail[1].matrix; + google_data = event.detail[1].data; + console.log( google_matrix ); + console.log( google_data ); + generate_matrix_table(); + break; + case "shmd_google_preview": + shm_add_modal( { title:"Preview", content: event.detail[1].matrix } ); + break; + } + }); + document.addEventListener("shm_point_click", function( event ) + { + console.log( event.detail ); + + }); +}); \ No newline at end of file diff --git a/assets/js/ShMapperDrive.front.js b/assets/js/ShMapperDrive.front.js new file mode 100644 index 0000000..c0ffb53 --- /dev/null +++ b/assets/js/ShMapperDrive.front.js @@ -0,0 +1,11 @@ + +jQuery(document).ready(function($) +{ + document.addEventListener("shm_point_click", function( event ) + { + //console.log( event.detail.point ); + var pid = event.detail.point.post_id; + jQuery("[pid]").removeClass("active"); + jQuery("[pid=" + pid + "]").addClass("active"); + }); +}); \ No newline at end of file diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index e5c4137..b650d7a 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -212,7 +212,7 @@ static function add_admin_js_script() $ymap_key = ShMapper::$options['shm_yandex_maps_api_key']; } wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=" . esc_attr( $ymap_key ) . "&load=package.full&lang=ru_RU", array()); - wp_enqueue_script("api-maps"); + wp_enqueue_script("api-maps"); wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); wp_enqueue_script("ShMapper.yandex"); } @@ -303,11 +303,13 @@ static function add_frons_js_script() if( static::$options['map_api'] == 1 ) { wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=" . esc_attr( $ymap_key ) . "&load=package.full&lang=ru_RU", array()); - wp_enqueue_script("api-maps"); + wp_enqueue_script("api-maps"); + wp_register_script( 'region', plugins_url( '../assets/js/region-selector.min.js', __FILE__ ), array()); + wp_enqueue_script( 'region' ); wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); wp_enqueue_script("ShMapper.yandex"); } - else if( static::$options['map_api'] == 2 ) + else if( static::$options['map_api'] == 2 ) { //css wp_register_style("easyGeocoder", SHM_URLPATH . 'assets/css/easyGeocoder.css', array()); @@ -700,7 +702,7 @@ static function setting_pages() {

    - + " . apply_filters( 'shmapper_admin', '' ) . "
  • ". diff --git a/class/ShMapperDrive.class.php b/class/ShMapperDrive.class.php new file mode 100644 index 0000000..24ef415 --- /dev/null +++ b/class/ShMapperDrive.class.php @@ -0,0 +1,523 @@ + 'post']; + $point[SHM_POINT] = [ + 'type' => 'post', + "object" => SHM_POINT, + "class" => "ShmPoint", + "color"=> "#5880a2", + "name" => __("Point", SHMAPPER) + ]; + $point['google_table_id'] = ['type'=>'string', "name" => __("Google Table ID source", SHMAPPER )]; + $init_object[SHMAPPER_POINT_MESSAGE] = $point; + + $init_object[SHM_POINT]['google_table_id'] = [ + 'type'=>'string', + "name" => __("Google Table ID source", SHMAPPER ) + ]; + return $init_object; + } + + static function shmapper_admin($text) + { + //google-sheets.php + return $text . " +
  • +
    +
    ". + __("Parsing from Google table", SHMAPPER ) . + "". + __("Columns of table parse to meta-fields", SHMAPPER ) . + " +
    +
    +
    +
    ". + __("Attantion", SHMAPPER). + "
    +
    ". + __("Rules for Google snapshot structure.", SHMAPPER). + "
      +
    1. " . __("Google-table must have access rights 'For everyone on the Internet' or 'For everyone who has a link'", SHMAPPER). " +
    2. " . __("In file must be only one screen.", SHMAPPER). " +
    3. " . __("First row must have only legends of columns.", SHMAPPER). " +
    4. " . __("If Points are have different Point types you must reserve one column for Point type and fill it ID of this types.", SHMAPPER). " +
    5. " . __("If you want to have geo position you must reserve one column for adress or 2 columns for longitude and latitude.", SHMAPPER). " +
    +
    +
    +
    + ". + __("Google table document ID. For example: 1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U in https://docs.google.com/spreadsheets/d/1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U/edit#gid=7101094", SHMAPPER) . + " +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + ". + __("Skip first rows count", SHMAPPER) . + " +
    + + +
    + ". + __("Execute next rows count. Empty for all.", SHMAPPER) . + " +
    + + +
    + ". + __("Map", SHMAPPER) . + " +
    " . + ShmMap::wp_dropdown([ + "class" => "shm-form shm_options", + "name" => "map_id", + "selected" => static::$options['map_id'], + "posts" => ShmMap::get_all( ) + ]) . + " +
    + ". + __("Point title column", SHMAPPER) . + " +
    " . + googleColumnIdent_dropdown( [ + 'name' => 'shmd_post_title', + "class" => "shm_options", + "selected" => static::$options['shmd_post_title'] + ]). + " + +
    + ". + __("Post date column", SHMAPPER) . + " +
    +
    + + +
    " . + googleColumnIdent_dropdown( [ + 'name' => 'post_date', + "class" => "shm_options", + "selected" => static::$options['post_date'] + ]). + " + +
    + ". + __("Map marker type", SHMAPPER). + " + ". + __("add Map marker type", SHMAPPER). + "". + ShMapPointType::get_ganre_swicher([ + 'selected' => static::$options['point_type'], + 'prefix' => "point_type", + "class" => "shm_options", + 'col_width' => 6, + "default_none" => false, + ], 'radio' ). + "". + "
    + +
    +
    + ". + __("Select method and columns for generate Points's geo position.", SHMAPPER) . + " +
    +
    + + +
    +
    ". + googleColumnIdent_dropdown( [ + 'name' => 'google_geo_lat', + "class" => "shm_options", + "selected" => static::$options['google_geo_lat'] + ]). + "
    +
    ". + googleColumnIdent_dropdown( [ + 'name'=>'google_geo_lon', + "class" => "shm_options", + "selected" => static::$options['google_geo_lon'] + ]). + "
    +
    +
    +
    + + +
    +
    ". + googleColumnIdent_dropdown([ + 'name'=>'google_geo_adress', + "class" => "shm_options", + "selected" => static::$options['google_geo_adress'] + ]). + "
    +
    +
    + +
    + +
    +
    + ". + __("Select columns for choose Points's different types.", SHMAPPER) . + " +
    +
    + + +
    +
    +
    +
    ". + googleColumnIdent_dropdown([ + 'name'=>'google_point_type', + "class" => "shm_options", + "selected" => static::$options['google_point_type'] + ]). + "
    +
    +
    + +
    + +
    + ". + __("List of columns in google table that need to parse to Point's description", SHMAPPER) . + " +
    +
    +
    +
    ". + __("Column", SHMAPPER) . + "
    +
    ". + __("Include?", SHMAPPER) . + "
    + * +
    " . + "
    +
    ". + __("Field name by latin", SHMAPPER) . + "
    + * +
    ". + "
    +
    ". + __("Sub title for decription section", SHMAPPER) . + "
    +
    ". + __("Order", SHMAPPER) . + "
    +
    + +
    + +
    + +
    +
    ". + __("Use column as unique for update Point or add Messages for included Points", SHMAPPER). + "
    + ". + __("Column for unique", SHMAPPER) . + "". + + googleColumnIdent_dropdown( [ + 'name' => "google_unique", + "class" => "shm_options", + "selected" => static::$options['google_unique'] + ] ) . + "
    + ". + __("If your Google spreadsheet has one text in the specified column", SHMAPPER) . + " + +
    + + +
    + +
    + + +
    +
    +
    + +
    +
    + +
    +
    +
  • + "; + } +} +function getGoogleRow($params) +{ + if ( ! isset( $params['title'] ) ) { + $params['title'] = ''; + } + return " +
    +
    ". + getSingleGoogleIdenter($params['n']). + //googleColumnIdent_dropdown( ['name'=> 'ident', "selected" => getSingleGoogleIdenter($params['n']) ] ) . + "
    +
    + + +
    +
    + +
    +
    + +
    +
    + +
    + +
    + "; +} +function getGoogleIdenters() +{ + return [ "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ"]; +} +function getSingleGoogleIdenter($order) +{ + $a = getGoogleIdenters(); + return $a[ (int)$order ]; +} +function getSingleGoogleOrder($identer) +{ + $a = getGoogleIdenters(); + $i = 0; + foreach($a as $b) + { + if($b == $identer) + return $i; + $i++; + } + return 0; + +} +function googleColumnIdent_dropdown( $params ) +{ + $a = getGoogleIdenters(); + $html = ""; + return $html; +} \ No newline at end of file diff --git a/class/ShMapperDrive_ajax.class.php b/class/ShMapperDrive_ajax.class.php new file mode 100644 index 0000000..6ad422a --- /dev/null +++ b/class/ShMapperDrive_ajax.class.php @@ -0,0 +1,210 @@ +"; + foreach($data as $d) + { + $html .= ""; + foreach($d as $dd) + { + $html .= "$dd"; + } + $html .= ""; + } + $html .= ""; + $d = [ + $action, + [ + "text" => $html, + ] + ]; + break; + case "shmd_google_preview": + require_once( SHM_REAL_PATH . "class/ShMapperDriverPreview.class.php" ); + $matrix = ShMapperDriverPreview::get_preview(); + $d = [ + $action, + [ + "matrix" => $matrix + ] + ]; + break; + case "google_matrix_data": + $name = $params[1]; + $value = $params[2]; + $stroke = $params[3]; + $google_matrix_data = ShMapperDrive::$options['google_matrix_data']; + $google_matrix_data[$stroke]->$name = $value; + ShMapperDrive::update_options(); + $d = [ + $action, + [ + "name" => $name, + "stroke" => $stroke, + "value" => $value + ] + ]; + break; + case "shmd_google_update": + require_once( SHM_REAL_PATH . "class/ShMapperDriverPreview.class.php" ); + $matrix = ShMapperDriverPreview::update(); + $d = [ + $action, + [ + "msg" => __("Update successful!", SHMAPPER), + "matrix" => $matrix + ] + ]; + break; + case "shm_options": + $name = $params[1]; + $value = $params[2]; + ShMapperDrive::$options[$name] = $value; + ShMapperDrive::update_options(); + $d = [ + $action, + [ + "name" => $name, + "value" => $value, + "data" => ShMapperDrive::$options + ] + ]; + break; + case "load_google_table": + $id = $params[1]; + ShMapperDrive::$options["google_table_id"] = $id; + ShMapperDrive::update_options(); + require_once(SHM_REAL_PATH . "assets/google-sheets/google-sheets.php"); + $matrix = get_sheet($id); + $data = static::get_matrix( $matrix ); + if(!is_array($data)) $data = []; + if( $matrix && $matrix[0] && $matrix[0][0] ) + { + $d = [ + $action, + [ + "msg" => __("Success load Google Table.", SHMAPPER), + "matrix" => $matrix, + "data" => $data + ] + ]; + } + else + { + $d = [ + $action, + [ + "msg" => __("Error load Google Table.", SHMAPPER) + ] + ]; + } + } + $d_obj = json_encode( apply_filters( "shm_ajax_data", $d, $params ) ); + print $d_obj; + wp_die(); + } + static function get_matrix( $matrix ) + { + if( + is_array(ShMapperDrive::$options['google_matrix_data']) + && count($matrix[0]) == count(ShMapperDrive::$options['google_matrix_data']) + ) + { + $data = ShMapperDrive::$options['google_matrix_data']; + $i = 0; + foreach($matrix[0] as $column) + { + if($column != $data[$i]->title) + { + $data[$i]->title = $column; + } + $i++; + } + return $data; + } + else + { + $data = []; + $order = 0; + foreach($matrix[0] as $column) + { + $d = new StdClass; + $d->include = 1; + $d->order = $order; + $d->title = $column; + $d->meta = str2url( $column ); + $data[] = $d; + $order++; + } + ShMapperDrive::$options['google_matrix_data'] = $data; + ShMapperDrive::update_options(); + return $data; + } + } +} + +function rus2translit($string) +{ + $converter = array( + 'а' => 'a', 'б' => 'b', 'в' => 'v', + 'г' => 'g', 'д' => 'd', 'е' => 'e', + 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', + 'и' => 'i', 'й' => 'y', 'к' => 'k', + 'л' => 'l', 'м' => 'm', 'н' => 'n', + 'о' => 'o', 'п' => 'p', 'р' => 'r', + 'с' => 's', 'т' => 't', 'у' => 'u', + 'ф' => 'f', 'х' => 'h', 'ц' => 'c', + 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', + 'ь' => '\'', 'ы' => 'y', 'ъ' => '\'', + 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', + + 'А' => 'A', 'Б' => 'B', 'В' => 'V', + 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', + 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', + 'И' => 'I', 'Й' => 'Y', 'К' => 'K', + 'Л' => 'L', 'М' => 'M', 'Н' => 'N', + 'О' => 'O', 'П' => 'P', 'Р' => 'R', + 'С' => 'S', 'Т' => 'T', 'У' => 'U', + 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', + 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', + 'Ь' => '\'', 'Ы' => 'Y', 'Ъ' => '\'', + 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', + ); + return strtr($string, $converter); +} +function str2url($str) +{ + // переводим в транслит + $str = rus2translit($str); + // в нижний регистр + $str = strtolower($str); + // заменям все ненужное нам на "" + $str = preg_replace('~[^-a-z0-9_]+~u', '_', $str); + $str = preg_replace('/\s+/', '_', $str); + // удаляем начальные и конечные '_' + $str = trim($str, "_"); + return $str; +} \ No newline at end of file diff --git a/class/ShMapperDriverPreview.class.php b/class/ShMapperDriverPreview.class.php new file mode 100644 index 0000000..08514e5 --- /dev/null +++ b/class/ShMapperDriverPreview.class.php @@ -0,0 +1,284 @@ + 0) + { + if( ShMapperDrive::$options['is_google_point_type'] ) + { + $nType = getSingleGoogleOrder(ShMapperDrive::$options['google_point_type']); + $type = get_term($m[$nType], SHM_POINT_TYPE); + } + if(!$type || is_wp_error($type)) + { + $nType = ShMapperDrive::$options[ 'point_type' ]; + $type = get_term( $nType, SHM_POINT_TYPE ); + } + $icon = ShMapPointType::get_icon($type, false, false); + $geocode = implode(" - " , static::getGeoPosition( $m )); + + if(ShMapperDrive::$options['is_google_post_date']) + $post_date = strtotime( $m[ getSingleGoogleOrder(ShMapperDrive::$options['post_date']) ]); + else + $post_date = time(); + $ii = 0; + foreach(ShMapperDrive::$options['google_matrix_data'] as $n) + { + if( $n->include ) + { + if($m[$ii]) + { + $cont .= + " +
    " . + $matrix[0][$ii]. + "
    +
    " . + $m[$ii] . + "
    "; + } + } + $ii++; + } + $html .= "
    +
    " . + $icon . " " . $m[ getSingleGoogleOrder(ShMapperDrive::$options['shmd_post_title']) ] . + "
    +
    + $cont +
    +
    + $geocode +
    +
    ". + static::$google_table_id . + "
    +
    "; + } + $i++; + } + return $html; + } + static function update() + { + static::delete(); + $matrix = static::get_source(); + $map_id = (int)ShMapperDrive::$options['map_id']; + $i = 0; + foreach($matrix as $m) + { + $cont = ""; + if($i > 0) + { + $geocode = static::getGeoPosition( $m ); + $copies = get_posts([ + "post_type" => ShmPoint::get_type(), + "numberposts" => -1, + "post_status" => "publish", + "fields" => "ids", + 'meta_query' => [ + 'relation' => 'AND', + [ + "key" => "latitude", + "value" => $geocode[1] + ], + [ + "key" => "longitude", + "value" => $geocode[0] + ] + ] + ]); + if( count( $copies ) > 0 ) + { + if( ShMapperDrive::$options["shm_doubled"] == 0 ) continue; + // point type + if( ShMapperDrive::$options['is_google_point_type'] ) + { + $nType = getSingleGoogleOrder(ShMapperDrive::$options['google_point_type']); + $type = get_term($m[$nType], SHM_POINT_TYPE); + } + if(!$type || is_wp_error($type)) + { + $nType = ShMapperDrive::$options[ 'point_type' ]; + $type = get_term( $nType, SHM_POINT_TYPE ); + } + $icon = ShMapPointType::get_icon($type, false, false); + + // post_date - 4 + if(ShMapperDrive::$options['is_google_post_date']) + $post_date = strtotime( $m[ getSingleGoogleOrder(ShMapperDrive::$options['post_date']) ]); + else + $post_date = time(); + + $ii = 0; + foreach(ShMapperDrive::$options['google_matrix_data'] as $n) + { + if( $n->include ) + { + if($m[$ii]) + { + $cont .= " +
    " . + $matrix[0][$ii]. + "
    +
    " . + $m[$ii] . + "
    "; + } + } + $ii++; + } + $post_title = $m[ getSingleGoogleOrder(ShMapperDrive::$options['shmd_post_title']) ]; + $post_content = $cont ; + $point = ShMapperPointMessage::insert([ + 'post_name' => $post_title, + 'post_title' => $post_title, + 'post_content' => $post_content, + 'latitude' => $geocode[1], + 'longitude' => $geocode[0], + SHM_POINT => $copies[0], + "google_table_id"=> static::$google_table_id + ]); + wp_set_object_terms( $point->id, [ $type->term_id ], SHM_POINT_TYPE ); + wp_update_post([ + "ID" => $point->id, + "post_date" => date_i18n("Y-m-d H:i:s", $post_date) + ]); + } + else + { + if( ShMapperDrive::$options['is_google_point_type'] ) + { + $nType = getSingleGoogleOrder( ShMapperDrive::$options['google_point_type'] ); + $type = get_term($m[$nType], SHM_POINT_TYPE); + } + if(!$type || is_wp_error($type)) + { + $nType = ShMapperDrive::$options[ 'point_type' ]; + $type = get_term( $nType, SHM_POINT_TYPE ); + } + $icon = ShMapPointType::get_icon($type, false, false); + + // post_date - 4 + if(ShMapperDrive::$options['is_google_post_date']) + $post_date = strtotime( $m[ getSingleGoogleOrder(ShMapperDrive::$options['post_date']) ]); + else + $post_date = time(); + + $ii = 0; + foreach(ShMapperDrive::$options['google_matrix_data'] as $n) + { + if( $n->include ) + { + if($m[$ii]) + { + $cont .= " +
    " . + $matrix[0][$ii]. + "
    +
    " . + $m[$ii] . + "
    "; + } + } + $ii++; + } + $post_title = $m[ getSingleGoogleOrder(ShMapperDrive::$options['shmd_post_title']) ]; + $post_content = $cont; + $point = ShmPoint::insert([ + 'post_name' => $post_title, + 'post_title' => $post_title, + 'post_content' => $post_content, + 'latitude' => $geocode[1], + 'longitude' => $geocode[0], + "google_table_id"=> static::$google_table_id + ]); + wp_set_object_terms( $point->id, [ $type->term_id ], SHM_POINT_TYPE ); + $point->add_to_map($map_id); + wp_update_post([ + "ID" => $point->id, + "post_date" => date_i18n("Y-m-d H:i:s", $post_date) + ]); + } + } + $i++; + } + + //var_dump($copies ); + //wp_die(); + + } + static function delete() + { + static::$google_table_id = ShMapperDrive::$options["google_table_id"]; + $posts = get_posts([ + "numberposts" => -1, + "post_type" => [ ShmPoint::get_type(), ShMapperPointMessage::get_type() ], + "post_status" => "publish", + "fields" => "ids", + 'meta_query' => [ + 'relation' => 'OR', + [ + "key" => "google_table_id", + "value" => static::$google_table_id, + "compare" => "LIKE" + ] + ] + ]); + //var_dump( $posts ); + //wp_die(); + if( count($posts) > 0 ) + { + foreach($posts as $postid) + { + wp_delete_post( $postid, true ); + } + } + } + + static function getGeoPosition( $m ) + { + switch( ShMapperDrive::$options['google_geo_position']) + { + case 0: + return [ + $m[ getSingleGoogleOrder( static::$options['google_geo_lon'] ) ], + $m[ getSingleGoogleOrder( static::$options['google_geo_lat'] ) ] + ]; + case 1: + $adress_identer = ShMapperDrive::$options['google_geo_adress']; + $adress = $m[ getSingleGoogleOrder( $adress_identer )]; + return static::geocode( $adress ); + default: + return []; + } + } + static function geocode($address) + { + //$address = "Москва, Тверская, 12"; + $key = "921be5a4-36cd-4485-8f57-2c24f94dab32"; + $yandex_key = "8202b217-b7c5-4c31-8abb-6030094cc780"; + $address = urlencode($address); + $location = json_decode(file_get_contents("https://geocode-maps.yandex.ru/1.x/?apikey={$key}&geocode={$address}&format=json"), true); + $address = $location["response"]["GeoObjectCollection"]["featureMember"][0]["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["text"]; + $location = $location["response"]["GeoObjectCollection"]["featureMember"][0]["GeoObject"]["Point"]["pos"]; + $location = explode(" ", $location); + return $location; + } +} \ No newline at end of file diff --git a/class/ShMapperPointMessage.class.php b/class/ShMapperPointMessage.class.php new file mode 100644 index 0000000..3973444 --- /dev/null +++ b/class/ShMapperPointMessage.class.php @@ -0,0 +1,135 @@ + __('Map marker message', SHMAPPER), + 'singular_name' => __("Map marker message", SHMAPPER), + 'add_new' => __("Add Map marker message", SHMAPPER), + 'add_new_item' => __("Add Map marker message", SHMAPPER), + 'edit_item' => __("Edit Map marker message", SHMAPPER), + 'new_item' => __("Add Map marker message", SHMAPPER), + 'all_items' => __("All Map marker messages", SHMAPPER), + 'view_item' => __("view Map marker message", SHMAPPER), + 'search_items' => __("Search Map marker message", SHMAPPER), + 'not_found' => __("Map marker message not found", SHMAPPER), + 'not_found_in_trash' => __("No found Map marker message in trash", SHMAPPER), + 'menu_name' => __("Map marker messages", SHMAPPER) + ); + $args = array( + 'labels' => $labels + ,'public' => true + ,'show_ui' => true + ,'has_archive' => true + ,'exclude_from_search' => false + ,'menu_position' => 19 + ,'menu_icon' => "dashicons-location" + ,'show_in_menu' => "shm_page" + ,'show_in_rest' => true + ,'supports' => array( 'title', "editor", "thumbnail") + ,'capability_type' => 'post' + ); + register_post_type(SHMAPPER_POINT_MESSAGE, $args); + } + + static function view_admin_edit($obj) + { + require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + $SMC_Object_type = SMC_Object_Type::get_instance(); + $bb = $SMC_Object_type->object [static::get_type()]; + $html = ""; + foreach($bb as $key=>$value) + { + if($key == 't' || $key == 'class' ) continue; + $meta = get_post_meta( $obj->id, $key, true); + switch( $value['type'] ) + { + case "number": + $h = ""; + break; + case "boolean": + $h = ""; + break; + case "post": + $class = $value['class']; + $h = $class::wp_dropdown([ + "class" => "form-control", + "name" => $key, + "selected" => $meta, + 'args' => -1 + ]); + break; + default: + $h = ""; + } + + $html .="
    +
    ".$value['name'] . "
    +
    + $h +
    +
    +
    "; + } + + echo $html; + } + static function save_admin_edit($obj) + { + return [ + SHM_POINT => $_POST[SHM_POINT] + ]; + } + + static function shmapper_driver_feed_after($text, $point_post) + { + $messages = get_posts([ + "post_type" => static::get_type(), + "post_status" => "publish", + "numberposts" => -1, + "meta_query" => [ + "relation" => "AND", + [ + "key" => SHM_POINT, + "value" => $point_post->ID, + "compare"=> "=" + ] + ] + ]); + foreach($messages as $p) + { + /**/ + $terms = wp_get_object_terms( $p->ID, SHM_POINT_TYPE ); + $icons = ""; + foreach( $terms as $type ) + { + $icons .= ShMapPointType::get_icon($type, false, false); + } + + $text .= "
    +
    " . + $icons . " " . + $p->post_title . + "
    +
    " . + $p->post_content . + "
    +
    "; + } + /**/ + return $text ; + } +} diff --git a/shortcode/shmMapFeed.shortcode.php b/shortcode/shmMapFeed.shortcode.php new file mode 100644 index 0000000..e8b88f9 --- /dev/null +++ b/shortcode/shmMapFeed.shortcode.php @@ -0,0 +1,26 @@ + 450, + "id" => -1, + "map" => false, + "form" => false, + "uniq" => false + ), $args, 'shmMapFeed' ); + $id = $args['id']; + $args['uniq'] = $args['uniq'] ? $args['uniq'] : substr( MD5(rand(0, 100000000)), 0, 8 ); + $uniq = $args['uniq']; + $map = ShmMap::get_instance($args['id']); + if(!$map->is_enabled() || $map->get("post_type") !== SHM_MAP) + { + return __("No map on ID ", SHMAPPER) . $args['id']; + } + $points = $map->get_map_points([ "order" => "ASC", "orderby" => "date" ]); + foreach($points as $p) + { + $point = ShmPoint::get_instance($p); + $html .= $point->feed_draw(); + } + return $html; +} \ No newline at end of file From 18954318b17cd6188af272f4fb6f0c21133d76a4 Mon Sep 17 00:00:00 2001 From: BootWP Date: Wed, 27 Jan 2021 19:51:15 +0200 Subject: [PATCH 083/220] Update Changelog --- README.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.txt b/README.txt index 390de26..c014d62 100644 --- a/README.txt +++ b/README.txt @@ -58,6 +58,9 @@ No questions yet. == Changelog == += 1.3.7 = +* Added support for importing data from Google Sheets. + = 1.3.6 = * WordPress 5.5 compatibility. From 56c744b343b0f99ccafe4b9165dc08c6fece2de3 Mon Sep 17 00:00:00 2001 From: BootWP Date: Wed, 27 Jan 2021 19:51:39 +0200 Subject: [PATCH 084/220] Update translate. --- languages/shmapper-by-teplitsa-ru_RU.mo | Bin 25680 -> 33351 bytes languages/shmapper-by-teplitsa-ru_RU.po | 330 +++++++++++++++++++++--- languages/shmapper-by-teplitsa.pot | 289 ++++++++++++++++++--- 3 files changed, 546 insertions(+), 73 deletions(-) diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo index 95c635c837adb7b69cfd73a652c668907b812e94..153fe7c8030bfd3e7d56182e36ce0e331cdee3d5 100644 GIT binary patch delta 13585 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 uB?KII0DUsBlH+X)bnzyh9 delta 6275 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 CvSAGX diff --git a/languages/shmapper-by-teplitsa-ru_RU.po b/languages/shmapper-by-teplitsa-ru_RU.po index d0998fb..4322e03 100644 --- a/languages/shmapper-by-teplitsa-ru_RU.po +++ b/languages/shmapper-by-teplitsa-ru_RU.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" -"POT-Creation-Date: 2020-12-07 21:25+0200\n" -"PO-Revision-Date: 2020-12-07 21:35+0200\n" +"POT-Creation-Date: 2021-01-26 06:57+0200\n" +"PO-Revision-Date: 2021-01-26 09:09+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: ru\n" @@ -47,7 +47,8 @@ msgid "Parameters" msgstr "Параметры" #: class/ShMapPointType.class.php:37 class/ShMapPointType.class.php:38 -#: class/ShMapPointType.class.php:48 class/ShmPoint.class.php:126 +#: class/ShMapPointType.class.php:48 class/ShMapperDrive.class.php:227 +#: class/ShmPoint.class.php:126 msgid "Map marker type" msgstr "Тип маркера" @@ -56,36 +57,36 @@ msgid "Search Map marker type" msgstr "Искать Тип маркера" #: class/ShMapPointType.class.php:40 -msgid "all Map marker types" -msgstr "все Типы маркеров" +msgid "All Map marker types" +msgstr "Все Типы маркеров" #: class/ShMapPointType.class.php:41 -msgid "view Map marker type" -msgstr "смотреть Тип маркера" +msgid "View Map marker type" +msgstr "Смотреть Тип маркера" #: class/ShMapPointType.class.php:42 -msgid "parent Map marker type" -msgstr "родительский Тип маркера" +msgid "Parent Map marker type" +msgstr "Родительский Тип маркера" #: class/ShMapPointType.class.php:43 -msgid "parent Map marker type:" -msgstr "тип маркера родительской карты:" +msgid "Parent Map marker type:" +msgstr "Тип маркера родительской карты:" #: class/ShMapPointType.class.php:44 -msgid "edit Map marker type" -msgstr "редактировать Тип маркера" +msgid "Edit Map marker type" +msgstr "Редактировать Тип маркера" #: class/ShMapPointType.class.php:45 -msgid "update Map marker type" -msgstr "обновить Тип маркера" +msgid "Update Map marker type" +msgstr "Обновить Тип маркера" #: class/ShMapPointType.class.php:46 -msgid "add Map marker type" +msgid "Add Map marker type" msgstr "Добавить новый" #: class/ShMapPointType.class.php:47 -msgid "new Map marker type name" -msgstr "название нового Типа маркеров" +msgid "New Map marker type name" +msgstr "Название нового Типа маркеров" #: class/ShMapPointType.class.php:54 msgid "Unique type of every Map markers" @@ -289,8 +290,9 @@ msgstr "Телефон" msgid "Required Personal phone" msgstr "Требуется личный телефон" -#: class/ShMapper.class.php:173 class/ShmMap.class.php:76 -#: class/ShmMap.class.php:77 widget/ShMap.widget.php:72 +#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:178 +#: class/ShmMap.class.php:76 class/ShmMap.class.php:77 +#: widget/ShMap.widget.php:72 msgid "Map" msgstr "Карта" @@ -331,6 +333,7 @@ msgid "Accessed User" msgstr "Доступ пользователя" #: class/ShMapper.class.php:280 class/ShMapper.class.php:372 +#: class/ShMapperDrive.class.php:125 msgid "Attantion" msgstr "Внимание" @@ -359,7 +362,7 @@ msgid "Are you shure?" msgstr "Вы уверены?" #: class/ShMapper.class.php:406 class/ShMapper.class.php:407 -#: class/ShMapper.class.php:435 +#: class/ShMapper.class.php:435 class/ShMapperDrive.class.php:435 msgid "Settings" msgstr "Настройки" @@ -461,6 +464,7 @@ msgid "Error send map request" msgstr "Сообщение об ошибки регистрации запроса на Маркер" #: class/ShMapper.class.php:588 class/ShMapper.class.php:611 +#: class/ShMapper.class.php:651 msgid "Coordinates" msgstr "Координаты" @@ -468,35 +472,35 @@ msgstr "Координаты" msgid "Set default coordinates" msgstr "Установить координаты по умолчанию" -#: class/ShMapper.class.php:695 +#: class/ShMapper.class.php:707 msgid "Wizzard" msgstr "Мастер" -#: class/ShMapper.class.php:698 +#: class/ShMapper.class.php:710 msgid "Restart wizzard" msgstr "Перезапустить Мастер" -#: class/ShMapper.class.php:745 class/ShMapper.class.php:753 +#: class/ShMapper.class.php:757 class/ShMapper.class.php:765 msgid "Close wizzard" msgstr "Закрыть навсегда" -#: class/ShMapper.class.php:746 class/ShMapper.class.php:752 +#: class/ShMapper.class.php:758 class/ShMapper.class.php:764 msgid "Go to current page" msgstr "На текущую страницу" -#: class/ShMapper.class.php:749 class/ShMapper_ajax.class.php:172 +#: class/ShMapper.class.php:761 class/ShMapper_ajax.class.php:172 msgid "Next step" msgstr "Следующий шаг" -#: class/ShMapper.class.php:751 +#: class/ShMapper.class.php:763 msgid "Prevous step" msgstr "Предыдущий шаг" -#: class/ShMapper.class.php:803 +#: class/ShMapper.class.php:815 msgid "Welcome to the Shmapper Configuration Wizard" msgstr "Приветствуем Вас в Мастере конфигурации Shmapper" -#: class/ShMapper.class.php:804 +#: class/ShMapper.class.php:816 msgid "" "First, you need to specify the general settings. Click on the button to go to the desired " @@ -506,11 +510,11 @@ msgstr "" "class='dashicons dashicons-controls-play'> чтобы перейти в нужный " "раздел" -#: class/ShMapper.class.php:810 +#: class/ShMapper.class.php:822 msgid "Configure Shmapper" msgstr "Настройте Shmapper" -#: class/ShMapper.class.php:811 +#: class/ShMapper.class.php:823 msgid "" "Change the settings that do not suit you. To connect reCAPTCHA, you need to " "create an account on Google.com" @@ -518,19 +522,19 @@ msgstr "" "Измените настройки, которые Вас не устраивают. Для подключения reCAPTCHA " "необходимо создать учётную запись на Google.com" -#: class/ShMapper.class.php:817 +#: class/ShMapper.class.php:829 msgid "Create your first map" msgstr "Создайте вашу первую карту" -#: class/ShMapper.class.php:818 +#: class/ShMapper.class.php:830 msgid "Click the \"Add Map\" button at the very top of the page" msgstr "Нажмите кнопку \"Добавить карту\" в самом верху страницы" -#: class/ShMapper.class.php:824 class/ShMapper.class.php:832 +#: class/ShMapper.class.php:836 class/ShMapper.class.php:844 msgid "New map" msgstr "Новая карта" -#: class/ShMapper.class.php:825 +#: class/ShMapper.class.php:837 msgid "" "Select a visible area on the map.

    Create the first Marker by pointing to " "the desired location on the map with the right mouse button.

    Fill in the " @@ -540,7 +544,7 @@ msgstr "" "нужное место карты правой кнопкой мыши.

    Заполните поля и нажмите " "\"Создать\"." -#: class/ShMapper.class.php:833 +#: class/ShMapper.class.php:845 msgid "" "Fill in the provided fields in sequence. In the \"Request Form\" section, " "create a simple feedback form by which Visitors will be able to inform you " @@ -552,6 +556,246 @@ msgstr "" "информировать Вас о предлагаемых Вам новых Маркерах. По окончании нажмите " "кнопку \"Опубликовать\"." +#: class/ShMapperDrive.class.php:98 +msgid "Point" +msgstr "Точка" + +#: class/ShMapperDrive.class.php:100 class/ShMapperDrive.class.php:105 +msgid "Google Table ID source" +msgstr "Источник идентификатора таблицы Google" + +#: class/ShMapperDrive.class.php:117 +msgid "Parsing from Google table" +msgstr "Разбор из таблицы Google" + +#: class/ShMapperDrive.class.php:119 +msgid "Columns of table parse to meta-fields" +msgstr "Столбцы таблицы разбора на мета-поля" + +#: class/ShMapperDrive.class.php:128 +msgid "Rules for Google snapshot structure." +msgstr "Правила для структуры снимков Google." + +#: class/ShMapperDrive.class.php:130 +msgid "" +"Google-table must have access rights 'For everyone on the Internet' or 'For " +"everyone who has a link'" +msgstr "" +"Гугл-таблица должна иметь права доступа 'Для всех в интернете' или 'Для всех " +"у кого есть ссылка" + +#: class/ShMapperDrive.class.php:131 +msgid "In file must be only one screen." +msgstr "В файле должна быть только одна вкладка." + +#: class/ShMapperDrive.class.php:132 +msgid "First row must have only legends of columns." +msgstr "Первая строка таблицы должна включать только легенды колонок." + +#: class/ShMapperDrive.class.php:133 +msgid "" +"If Points are have different Point types you must reserve one column for " +"Point type and fill it ID of this types." +msgstr "" +"Если Маркеры, которые Вы хотите создать должны иметь разные типы, необходимо " +"зарезервировать одну из колонок под тип Маркера и заполнять ячейки ID " +"необходимого типа." + +#: class/ShMapperDrive.class.php:134 +msgid "" +"If you want to have geo position you must reserve one column for adress or 2 " +"columns for longitude and latitude." +msgstr "" +"Если Вы хотите получить точную геопозицию Маркеров, необходимо " +"зарезервировать одну колонку под адрес или 2 колонки - для широты и долготы" + +#: class/ShMapperDrive.class.php:140 +msgid "" +"Google table document ID. For example: 1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U in https://docs.google.com/" +"spreadsheets/d/1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U/edit#gid=7101094" +msgstr "" +"ID Табоицы Google. Например: 1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U у документа по url-адресу " +"https://docs.google.com/spreadsheets/d/1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U/edit#gid=7101094" + +#: class/ShMapperDrive.class.php:159 +msgid "Skip first rows count" +msgstr "Пропустить первые строки? Сколько?" + +#: class/ShMapperDrive.class.php:171 +msgid "Execute next rows count. Empty for all." +msgstr "" +"Работать со следующими строками? Укажите число строк или оставьте поле пустым" + +#: class/ShMapperDrive.class.php:190 +msgid "Point title column" +msgstr "Заголовок колонки" + +#: class/ShMapperDrive.class.php:202 +msgid "Post date column" +msgstr "Столбец даты публикации" + +#: class/ShMapperDrive.class.php:215 +msgid "Is fix post date?" +msgstr "Исправить дату публикации?" + +#: class/ShMapperDrive.class.php:230 +msgid "add Map marker type" +msgstr "Добавить новый" + +#: class/ShMapperDrive.class.php:245 +msgid "Select method and columns for generate Points's geo position." +msgstr "Выберите метод и колонку для генерации геопозиции Маркеров." + +#: class/ShMapperDrive.class.php:258 +msgid "Latitude and Longitude" +msgstr "Широты и долгота" + +#: class/ShMapperDrive.class.php:287 +msgid "Adress" +msgstr "Адрес" + +#: class/ShMapperDrive.class.php:305 +msgid "Select columns for choose Points's different types." +msgstr "Выберите столбцы для выбора разных типов точек." + +#: class/ShMapperDrive.class.php:318 +msgid "Use different Point Types for Points?" +msgstr "Использовать различные типы маркеров для точек?" + +#: class/ShMapperDrive.class.php:337 +msgid "" +"List of columns in google table that need to parse to Point's description" +msgstr "" +"Список столбцов в таблице Google, которые необходимо разобрать для описанием " +"точек." + +#: class/ShMapperDrive.class.php:343 +msgid "Column" +msgstr "Колонка" + +#: class/ShMapperDrive.class.php:346 +msgid "Include?" +msgstr "Включить?" + +#: class/ShMapperDrive.class.php:347 class/ShMapperDrive.class.php:353 +msgid "necessarily" +msgstr "обязательное поле" + +#: class/ShMapperDrive.class.php:352 +msgid "Field name by latin" +msgstr "Название поля по латыни" + +#: class/ShMapperDrive.class.php:358 +msgid "Sub title for decription section" +msgstr "Подзаголовок для секции в описании Маркера" + +#: class/ShMapperDrive.class.php:361 +msgid "Order" +msgstr "Порядковый номер" + +#: class/ShMapperDrive.class.php:373 +msgid "" +"Use column as unique for update Point or add Messages for included Points" +msgstr "" +"Использовать одну из колонок как уникальный идентификатор при создании или " +"обновлении Маркера или Сообщения к Маркеру" + +#: class/ShMapperDrive.class.php:376 +msgid "Column for unique" +msgstr "Колонка для идентификации" + +#: class/ShMapperDrive.class.php:386 +msgid "If your Google spreadsheet has one text in the specified column" +msgstr "Если в нескольких полях в данной колонке будет одинаковое содержимое" + +#: class/ShMapperDrive.class.php:399 +msgid "" +"Use only first row for creation new Point or updating included Point and " +"ignore over." +msgstr "" +"Использовать только первую строку для создания нового Маркера или " +"редактирования уже существующего и игнорировать остальные строки." + +#: class/ShMapperDrive.class.php:412 +msgid "" +"Use only last row for creation new Point or updating included Point and " +"ignore over." +msgstr "" +"Использовать только последнюю строку для создания нового Маркера или " +"редактирования уже существующего и игнорировать остальные строки." + +#: class/ShMapperDrive.class.php:425 +msgid "" +"Use only first row for creation new Point or updating included Point. Over " +"some rows use for creation new Message or updating included Messages for " +"Point" +msgstr "" +"Использовать только первую строку для создания нового Маркера или " +"редактирования уже существующего. Остальные строки использовать для создания " +"или редактирования Сообщений для этого Маркера" + +#: class/ShMapperDrive.class.php:438 +msgid "Preview results" +msgstr "Предпросмотр результата импора" + +#: class/ShMapperDrive.class.php:441 +msgid "Create or update Poins and Messages" +msgstr "Создать или обновить Маркеры и Сообшения" + +#: class/ShMapperDrive_ajax.class.php:77 +msgid "Update successful!" +msgstr "Обновление успешно завершено!" + +#: class/ShMapperDrive_ajax.class.php:109 +msgid "Success load Google Table." +msgstr "Успешная загрузка Google Table." + +#: class/ShMapperDrive_ajax.class.php:120 +msgid "Error load Google Table." +msgstr "Ошибка загрузки Google Table." + +#: class/ShMapperPointMessage.class.php:19 +#: class/ShMapperPointMessage.class.php:20 +msgid "Map marker message" +msgstr "Сообщение к Маркеру" + +#: class/ShMapperPointMessage.class.php:21 +#: class/ShMapperPointMessage.class.php:22 +#: class/ShMapperPointMessage.class.php:24 +msgid "Add Map marker message" +msgstr "Добавить новое Сообщение к Маркер" + +#: class/ShMapperPointMessage.class.php:23 +msgid "Edit Map marker message" +msgstr "Редактировать новое Сообщение к Маркеру" + +#: class/ShMapperPointMessage.class.php:25 +msgid "All Map marker messages" +msgstr "Все сообщения к Маркерам" + +#: class/ShMapperPointMessage.class.php:26 +msgid "view Map marker message" +msgstr "смотреть Сообщение к Маркер" + +#: class/ShMapperPointMessage.class.php:27 +msgid "Search Map marker message" +msgstr "искать Сообщение к Маркеру" + +#: class/ShMapperPointMessage.class.php:28 +msgid "Map marker message not found" +msgstr "Сообщение к Маркеру не найдено" + +#: class/ShMapperPointMessage.class.php:29 +msgid "No found Map marker message in trash" +msgstr "Сообщение к Маркеру в корзине не найдено" + +#: class/ShMapperPointMessage.class.php:30 +msgid "Map marker messages" +msgstr "Сообщения к Маркерам" + #: class/ShMapperRequest.class.php:24 class/ShMapperRequest.class.php:25 msgid "Map Request" msgstr "Карт-запрос" @@ -607,11 +851,15 @@ msgstr "<%s> Новый карт-запрос от [%s] [%s]" msgid "You may see this %s" msgstr "Вы можете посмотреть его здесь %s" -#: class/ShMapperRequest.class.php:363 +#: class/ShMapperRequest.class.php:361 +msgid "Visitor" +msgstr "Посетитель" + +#: class/ShMapperRequest.class.php:374 msgid "Approve" msgstr "Одобрить" -#: class/ShMapperRequest.class.php:365 +#: class/ShMapperRequest.class.php:376 msgid "Trash" msgstr "Корзина" @@ -709,8 +957,8 @@ msgid "Put a title" msgstr "Укажите название" #: class/ShmForm.class.php:49 -msgid "Whrite description" -msgstr "Напишите комментарий" +msgid "Write description" +msgstr "Напишите описание" #: class/ShmForm.class.php:62 msgid "input title" @@ -1080,7 +1328,7 @@ msgstr "(карта без названия)" msgid "Address" msgstr "Адрес" -#: shortcode/shmMap.shortcode.php:25 +#: shortcode/shmMap.shortcode.php:25 shortcode/shmMapFeed.shortcode.php:17 msgid "No map on ID " msgstr "Не указан ID карты" diff --git a/languages/shmapper-by-teplitsa.pot b/languages/shmapper-by-teplitsa.pot index fea8828..e4862cb 100644 --- a/languages/shmapper-by-teplitsa.pot +++ b/languages/shmapper-by-teplitsa.pot @@ -3,7 +3,7 @@ msgid "" msgstr "" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "Project-Id-Version: ShMapper by Teplitsa\n" -"POT-Creation-Date: 2020-12-07 21:25+0200\n" +"POT-Creation-Date: 2021-01-26 06:57+0200\n" "PO-Revision-Date: 2020-06-18 05:16+0300\n" "Last-Translator: \n" "Language-Team: \n" @@ -52,7 +52,8 @@ msgid "Parameters" msgstr "" #: class/ShMapPointType.class.php:37 class/ShMapPointType.class.php:38 -#: class/ShMapPointType.class.php:48 class/ShmPoint.class.php:126 +#: class/ShMapPointType.class.php:48 class/ShMapperDrive.class.php:227 +#: class/ShmPoint.class.php:126 msgid "Map marker type" msgstr "" @@ -61,35 +62,35 @@ msgid "Search Map marker type" msgstr "" #: class/ShMapPointType.class.php:40 -msgid "all Map marker types" +msgid "All Map marker types" msgstr "" #: class/ShMapPointType.class.php:41 -msgid "view Map marker type" +msgid "View Map marker type" msgstr "" #: class/ShMapPointType.class.php:42 -msgid "parent Map marker type" +msgid "Parent Map marker type" msgstr "" #: class/ShMapPointType.class.php:43 -msgid "parent Map marker type:" +msgid "Parent Map marker type:" msgstr "" #: class/ShMapPointType.class.php:44 -msgid "edit Map marker type" +msgid "Edit Map marker type" msgstr "" #: class/ShMapPointType.class.php:45 -msgid "update Map marker type" +msgid "Update Map marker type" msgstr "" #: class/ShMapPointType.class.php:46 -msgid "add Map marker type" +msgid "Add Map marker type" msgstr "" #: class/ShMapPointType.class.php:47 -msgid "new Map marker type name" +msgid "New Map marker type name" msgstr "" #: class/ShMapPointType.class.php:54 @@ -290,8 +291,9 @@ msgstr "" msgid "Required Personal phone" msgstr "" -#: class/ShMapper.class.php:173 class/ShmMap.class.php:76 -#: class/ShmMap.class.php:77 widget/ShMap.widget.php:72 +#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:178 +#: class/ShmMap.class.php:76 class/ShmMap.class.php:77 +#: widget/ShMap.widget.php:72 msgid "Map" msgstr "" @@ -332,6 +334,7 @@ msgid "Accessed User" msgstr "" #: class/ShMapper.class.php:280 class/ShMapper.class.php:372 +#: class/ShMapperDrive.class.php:125 msgid "Attantion" msgstr "" @@ -356,7 +359,7 @@ msgid "Are you shure?" msgstr "" #: class/ShMapper.class.php:406 class/ShMapper.class.php:407 -#: class/ShMapper.class.php:435 +#: class/ShMapper.class.php:435 class/ShMapperDrive.class.php:435 msgid "Settings" msgstr "" @@ -450,6 +453,7 @@ msgid "Error send map request" msgstr "" #: class/ShMapper.class.php:588 class/ShMapper.class.php:611 +#: class/ShMapper.class.php:651 msgid "Coordinates" msgstr "" @@ -457,71 +461,71 @@ msgstr "" msgid "Set default coordinates" msgstr "" -#: class/ShMapper.class.php:695 +#: class/ShMapper.class.php:707 msgid "Wizzard" msgstr "" -#: class/ShMapper.class.php:698 +#: class/ShMapper.class.php:710 msgid "Restart wizzard" msgstr "" -#: class/ShMapper.class.php:745 class/ShMapper.class.php:753 +#: class/ShMapper.class.php:757 class/ShMapper.class.php:765 msgid "Close wizzard" msgstr "" -#: class/ShMapper.class.php:746 class/ShMapper.class.php:752 +#: class/ShMapper.class.php:758 class/ShMapper.class.php:764 msgid "Go to current page" msgstr "" -#: class/ShMapper.class.php:749 class/ShMapper_ajax.class.php:172 +#: class/ShMapper.class.php:761 class/ShMapper_ajax.class.php:172 msgid "Next step" msgstr "" -#: class/ShMapper.class.php:751 +#: class/ShMapper.class.php:763 msgid "Prevous step" msgstr "" -#: class/ShMapper.class.php:803 +#: class/ShMapper.class.php:815 msgid "Welcome to the Shmapper Configuration Wizard" msgstr "" -#: class/ShMapper.class.php:804 +#: class/ShMapper.class.php:816 msgid "" "First, you need to specify the general settings. Click on the button to go to the desired " "section" msgstr "" -#: class/ShMapper.class.php:810 +#: class/ShMapper.class.php:822 msgid "Configure Shmapper" msgstr "" -#: class/ShMapper.class.php:811 +#: class/ShMapper.class.php:823 msgid "" "Change the settings that do not suit you. To connect reCAPTCHA, you need to " "create an account on Google.com" msgstr "" -#: class/ShMapper.class.php:817 +#: class/ShMapper.class.php:829 msgid "Create your first map" msgstr "" -#: class/ShMapper.class.php:818 +#: class/ShMapper.class.php:830 msgid "Click the \"Add Map\" button at the very top of the page" msgstr "" -#: class/ShMapper.class.php:824 class/ShMapper.class.php:832 +#: class/ShMapper.class.php:836 class/ShMapper.class.php:844 msgid "New map" msgstr "" -#: class/ShMapper.class.php:825 +#: class/ShMapper.class.php:837 msgid "" "Select a visible area on the map.

    Create the first Marker by pointing to " "the desired location on the map with the right mouse button.

    Fill in the " "fields and click \"Create\"." msgstr "" -#: class/ShMapper.class.php:833 +#: class/ShMapper.class.php:845 msgid "" "Fill in the provided fields in sequence. In the \"Request Form\" section, " "create a simple feedback form by which Visitors will be able to inform you " @@ -529,6 +533,223 @@ msgid "" "button." msgstr "" +#: class/ShMapperDrive.class.php:98 +msgid "Point" +msgstr "" + +#: class/ShMapperDrive.class.php:100 class/ShMapperDrive.class.php:105 +msgid "Google Table ID source" +msgstr "" + +#: class/ShMapperDrive.class.php:117 +msgid "Parsing from Google table" +msgstr "" + +#: class/ShMapperDrive.class.php:119 +msgid "Columns of table parse to meta-fields" +msgstr "" + +#: class/ShMapperDrive.class.php:128 +msgid "Rules for Google snapshot structure." +msgstr "" + +#: class/ShMapperDrive.class.php:130 +msgid "" +"Google-table must have access rights 'For everyone on the Internet' or 'For " +"everyone who has a link'" +msgstr "" + +#: class/ShMapperDrive.class.php:131 +msgid "In file must be only one screen." +msgstr "" + +#: class/ShMapperDrive.class.php:132 +msgid "First row must have only legends of columns." +msgstr "" + +#: class/ShMapperDrive.class.php:133 +msgid "" +"If Points are have different Point types you must reserve one column for " +"Point type and fill it ID of this types." +msgstr "" + +#: class/ShMapperDrive.class.php:134 +msgid "" +"If you want to have geo position you must reserve one column for adress or 2 " +"columns for longitude and latitude." +msgstr "" + +#: class/ShMapperDrive.class.php:140 +msgid "" +"Google table document ID. For example: 1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U in https://docs.google.com/" +"spreadsheets/d/1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U/edit#gid=7101094" +msgstr "" + +#: class/ShMapperDrive.class.php:159 +msgid "Skip first rows count" +msgstr "" + +#: class/ShMapperDrive.class.php:171 +msgid "Execute next rows count. Empty for all." +msgstr "" + +#: class/ShMapperDrive.class.php:190 +msgid "Point title column" +msgstr "" + +#: class/ShMapperDrive.class.php:202 +msgid "Post date column" +msgstr "" + +#: class/ShMapperDrive.class.php:215 +msgid "Is fix post date?" +msgstr "" + +#: class/ShMapperDrive.class.php:230 +msgid "add Map marker type" +msgstr "" + +#: class/ShMapperDrive.class.php:245 +msgid "Select method and columns for generate Points's geo position." +msgstr "" + +#: class/ShMapperDrive.class.php:258 +msgid "Latitude and Longitude" +msgstr "" + +#: class/ShMapperDrive.class.php:287 +msgid "Adress" +msgstr "" + +#: class/ShMapperDrive.class.php:305 +msgid "Select columns for choose Points's different types." +msgstr "" + +#: class/ShMapperDrive.class.php:318 +msgid "Use different Point Types for Points?" +msgstr "" + +#: class/ShMapperDrive.class.php:337 +msgid "" +"List of columns in google table that need to parse to Point's description" +msgstr "" + +#: class/ShMapperDrive.class.php:343 +msgid "Column" +msgstr "" + +#: class/ShMapperDrive.class.php:346 +msgid "Include?" +msgstr "" + +#: class/ShMapperDrive.class.php:347 class/ShMapperDrive.class.php:353 +msgid "necessarily" +msgstr "" + +#: class/ShMapperDrive.class.php:352 +msgid "Field name by latin" +msgstr "" + +#: class/ShMapperDrive.class.php:358 +msgid "Sub title for decription section" +msgstr "" + +#: class/ShMapperDrive.class.php:361 +msgid "Order" +msgstr "" + +#: class/ShMapperDrive.class.php:373 +msgid "" +"Use column as unique for update Point or add Messages for included Points" +msgstr "" + +#: class/ShMapperDrive.class.php:376 +msgid "Column for unique" +msgstr "" + +#: class/ShMapperDrive.class.php:386 +msgid "If your Google spreadsheet has one text in the specified column" +msgstr "" + +#: class/ShMapperDrive.class.php:399 +msgid "" +"Use only first row for creation new Point or updating included Point and " +"ignore over." +msgstr "" + +#: class/ShMapperDrive.class.php:412 +msgid "" +"Use only last row for creation new Point or updating included Point and " +"ignore over." +msgstr "" + +#: class/ShMapperDrive.class.php:425 +msgid "" +"Use only first row for creation new Point or updating included Point. Over " +"some rows use for creation new Message or updating included Messages for " +"Point" +msgstr "" + +#: class/ShMapperDrive.class.php:438 +msgid "Preview results" +msgstr "" + +#: class/ShMapperDrive.class.php:441 +msgid "Create or update Poins and Messages" +msgstr "" + +#: class/ShMapperDrive_ajax.class.php:77 +msgid "Update successful!" +msgstr "" + +#: class/ShMapperDrive_ajax.class.php:109 +msgid "Success load Google Table." +msgstr "" + +#: class/ShMapperDrive_ajax.class.php:120 +msgid "Error load Google Table." +msgstr "" + +#: class/ShMapperPointMessage.class.php:19 +#: class/ShMapperPointMessage.class.php:20 +msgid "Map marker message" +msgstr "" + +#: class/ShMapperPointMessage.class.php:21 +#: class/ShMapperPointMessage.class.php:22 +#: class/ShMapperPointMessage.class.php:24 +msgid "Add Map marker message" +msgstr "" + +#: class/ShMapperPointMessage.class.php:23 +msgid "Edit Map marker message" +msgstr "" + +#: class/ShMapperPointMessage.class.php:25 +msgid "All Map marker messages" +msgstr "" + +#: class/ShMapperPointMessage.class.php:26 +msgid "view Map marker message" +msgstr "" + +#: class/ShMapperPointMessage.class.php:27 +msgid "Search Map marker message" +msgstr "" + +#: class/ShMapperPointMessage.class.php:28 +msgid "Map marker message not found" +msgstr "" + +#: class/ShMapperPointMessage.class.php:29 +msgid "No found Map marker message in trash" +msgstr "" + +#: class/ShMapperPointMessage.class.php:30 +msgid "Map marker messages" +msgstr "" + #: class/ShMapperRequest.class.php:24 class/ShMapperRequest.class.php:25 msgid "Map Request" msgstr "" @@ -584,11 +805,15 @@ msgstr "" msgid "You may see this %s" msgstr "" -#: class/ShMapperRequest.class.php:363 +#: class/ShMapperRequest.class.php:361 +msgid "Visitor" +msgstr "" + +#: class/ShMapperRequest.class.php:374 msgid "Approve" msgstr "" -#: class/ShMapperRequest.class.php:365 +#: class/ShMapperRequest.class.php:376 msgid "Trash" msgstr "" @@ -686,7 +911,7 @@ msgid "Put a title" msgstr "" #: class/ShmForm.class.php:49 -msgid "Whrite description" +msgid "Write description" msgstr "" #: class/ShmForm.class.php:62 @@ -1048,7 +1273,7 @@ msgstr "" msgid "Address" msgstr "" -#: shortcode/shmMap.shortcode.php:25 +#: shortcode/shmMap.shortcode.php:25 shortcode/shmMapFeed.shortcode.php:17 msgid "No map on ID " msgstr "" From 3035d05dc39ea5b1c52abd7d8c4d6815f85f2f76 Mon Sep 17 00:00:00 2001 From: BootWP Date: Wed, 27 Jan 2021 19:52:03 +0200 Subject: [PATCH 085/220] Improve Text. --- class/ShMapPointType.class.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index b68e170..60a63c0 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -37,14 +37,14 @@ static function register_all() 'name' => __("Map marker type", SHMAPPER), 'singular_name' => __("Map marker type", SHMAPPER), 'search_items' => __("Search Map marker type", SHMAPPER), - 'all_items' => __("all Map marker types", SHMAPPER), - 'view_item ' => __("view Map marker type", SHMAPPER), - 'parent_item' => __("parent Map marker type", SHMAPPER), - 'parent_item_colon' => __("parent Map marker type:", SHMAPPER), - 'edit_item' => __("edit Map marker type", SHMAPPER), - 'update_item' => __("update Map marker type", SHMAPPER), - 'add_new_item' => __("add Map marker type", SHMAPPER), - 'new_item_name' => __("new Map marker type name", SHMAPPER), + 'all_items' => __("All Map marker types", SHMAPPER), + 'view_item ' => __("View Map marker type", SHMAPPER), + 'parent_item' => __("Parent Map marker type", SHMAPPER), + 'parent_item_colon' => __("Parent Map marker type:", SHMAPPER), + 'edit_item' => __("Edit Map marker type", SHMAPPER), + 'update_item' => __("Update Map marker type", SHMAPPER), + 'add_new_item' => __("Add Map marker type", SHMAPPER), + 'new_item_name' => __("New Map marker type name", SHMAPPER), 'menu_name' => __("Map marker type", SHMAPPER), ); register_taxonomy(SHM_POINT_TYPE, [ ], From 92fad60286c098a8a81b413c9bd5a0ca336e5afa Mon Sep 17 00:00:00 2001 From: BootWP Date: Wed, 27 Jan 2021 19:53:48 +0200 Subject: [PATCH 086/220] Update version 1.3.7 --- shmapper.php | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/shmapper.php b/shmapper.php index 33fdc3f..3653128 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.4.0 + * Version: 1.3.7 * Requires at least: 5.0 * Requires PHP: 5.6 * Author: Teplitsa. Technologies for Social Good @@ -47,15 +47,17 @@ function init_textdomain_shmapper() { load_plugin_textdomain( 'shmapper-by-teplitsa', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); } } -add_action('plugins_loaded', 'init_textdomain_shmapper'); +add_action( 'plugins_loaded', 'init_textdomain_shmapper' ); // Paths. define( 'SHM_URLPATH', WP_PLUGIN_URL . '/' . plugin_basename( dirname(__FILE__) ) . '/' ); define( 'SHM_REAL_PATH', WP_PLUGIN_DIR . '/' . plugin_basename(dirname(__FILE__) ) . '/' ); define( 'SHMAPPER', 'shmapper-by-teplitsa' ); +define('SHMAPPERD', 'shmapper-drive' ); define( 'SHM_MAP', 'shm_map' ); define( 'SHM_POINT', 'shm_point' ); define( 'SHM_POINT_TYPE', 'shm_point_type' ); +define( 'SHMAPPER_POINT_MESSAGE', 'shm_point_msg' ); define( 'SHM_REQUEST', 'shm_request' ); define( 'SHMAPPER_PLAIN_TEXT_TYPE_ID', 1 ); define( 'SHMAPPER_NAME_TYPE_ID', 2 ); @@ -69,7 +71,7 @@ function init_textdomain_shmapper() { define( 'SHM_CSV_STROKE_SEPARATOR', ';' ); define( 'SHM_CSV_ROW_SEPARATOR', ' '); -define('SHMAPPER_VERSION', '1.3.3' ); +define( 'SHMAPPER_VERSION', '1.3.7' ); require_once SHM_REAL_PATH . 'class/ShMapper.class.php'; require_once SHM_REAL_PATH . 'class/ShMapper_ajax.class.php'; @@ -89,10 +91,14 @@ function init_textdomain_shmapper() { require_once SHM_REAL_PATH . 'shortcode/shm_shortcodes.php'; require_once SHM_REAL_PATH . 'widget/ShMap.widget.php'; +require_once SHM_REAL_PATH . 'class/ShMapperDrive.class.php'; + register_activation_hook( __FILE__, array( 'ShMapper', 'activate' ) ); +register_activation_hook( __FILE__, array( 'ShMapperDrive', 'activate' ) ); if ( function_exists( 'register_deactivation_hook' ) ) { register_deactivation_hook(__FILE__, array( 'ShMapper', 'deactivate' ) ); + register_deactivation_hook(__FILE__, array( 'ShMapperDrive', 'deactivate' ) ); } /** Shamapper init */ @@ -108,6 +114,16 @@ function init_shmapper() { } add_action( 'init', 'init_shmapper', 1 ); +/** Shamapper Drive init */ +function init_shmapper_drive() { + require_once SHM_REAL_PATH . 'class/ShMapperDrive_ajax.class.php'; + require_once SHM_REAL_PATH . 'class/ShMapperPointMessage.class.php'; + ShMapperDrive::get_instance(); + ShMapperDrive_ajax::get_instance(); + ShMapperPointMessage::init(); +} +add_action( 'init', 'init_shmapper_drive', 2 ); + /** Is session */ function shm_is_session() { require_once ABSPATH . 'wp-admin/includes/plugin.php'; From 224868ebc383c14ad9d437ce158824c3eb007733 Mon Sep 17 00:00:00 2001 From: BootWP Date: Wed, 27 Jan 2021 19:56:23 +0200 Subject: [PATCH 087/220] Update version to 1.4.0 --- README.txt | 2 +- shmapper.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.txt b/README.txt index c014d62..29c0b4b 100644 --- a/README.txt +++ b/README.txt @@ -58,7 +58,7 @@ No questions yet. == Changelog == -= 1.3.7 = += 1.4.0 = * Added support for importing data from Google Sheets. = 1.3.6 = diff --git a/shmapper.php b/shmapper.php index 3653128..4bddcd3 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.3.7 + * Version: 1.4.0 * Requires at least: 5.0 * Requires PHP: 5.6 * Author: Teplitsa. Technologies for Social Good @@ -71,7 +71,7 @@ function init_textdomain_shmapper() { define( 'SHM_CSV_STROKE_SEPARATOR', ';' ); define( 'SHM_CSV_ROW_SEPARATOR', ' '); -define( 'SHMAPPER_VERSION', '1.3.7' ); +define( 'SHMAPPER_VERSION', '1.4.0' ); require_once SHM_REAL_PATH . 'class/ShMapper.class.php'; require_once SHM_REAL_PATH . 'class/ShMapper_ajax.class.php'; From dee4bdbdcb091979e89061246679e1f66bd72c1a Mon Sep 17 00:00:00 2001 From: BootWP Date: Thu, 28 Jan 2021 19:14:53 +0200 Subject: [PATCH 088/220] Add region selector. --- assets/js/ShMapper.yandex.js | 95 +++++++++ assets/js/region-selector.min.js | 349 +++++++++++++++++++++++++++++++ shmapper.php | 4 +- 3 files changed, 446 insertions(+), 2 deletions(-) create mode 100644 assets/js/region-selector.min.js diff --git a/assets/js/ShMapper.yandex.js b/assets/js/ShMapper.yandex.js index d549ba7..f161fec 100644 --- a/assets/js/ShMapper.yandex.js +++ b/assets/js/ShMapper.yandex.js @@ -171,7 +171,102 @@ jQuery(document).ready(function($) zoom: mData.zoom, type: 'yandex#' + mData.mapType }); + + + + + //, {restrictMapArea: [[0, 0], [179, 179]]}); + + /*var map = myMap; + + // Загрузим регионы. + ymaps.borders.load('001', { + lang: 'ro', + quality: 0, + disputedBorders: '' + }).then(function (result) { + + // Создадим многоугольник, который будет скрывать весь мир, кроме заданной страны. + var background = new ymaps.Polygon([ + [ + [85, -179.99], + [85, 179.99], + [-85, 179.99], + [-85, -179.99], + [85, -179.99] + ] + ], {}, { + fillColor: 'rgba(0,0,0,0.3)', + strokeWidth: 0, + //interactivityModel: 'default#transparent', + // Для того чтобы полигон отобразился на весь мир, нам нужно поменять + // алгоритм пересчета координат геометрии в пиксельные координаты. + //coordRendering: 'straightPath' + }); + + // Найдём страну по её iso коду. + var region = result.features.filter(function (feature) { + //console.log(feature.properties); + return feature.properties.iso3166 == 'MD'; })[0]; + console.log(region); + // Добавим координаты этой страны в полигон, который накрывает весь мир. + // В полигоне образуется полость, через которую будет видно заданную страну. + var masks = region.geometry.coordinates; + masks.forEach(function(mask){ + background.geometry.insert(1, mask); + }); + + + + // Добавим многоугольник на карту. + map.geoObjects.add(background); + }) ; + + ymaps.regions.load('MD', { + lang: 'ru', + quality: 1 + }).then(function (result) { + var background2 = new ymaps.Polygon([ + [ + [85, -179.99], + [85, 179.99], + [-85, 179.99], + [-85, -179.99], + [85, -179.99] + ] + ], {}, { + fillColor: '#cccccc', + strokeWidth: 0, + // Для того чтобы полигон отобразился на весь мир, нам нужно поменять + // алгоритм пересчета координат геометрии в пиксельные координаты. + coordRendering: 'straightPath' + }); var regions = result.geoObjects; + // Включим возможность перетаскивания регионов. + //regions.options.set('draggable', true); + // Проходим по коллекции регионов и ищем Иркутскую область (osmId = 145454). + regions.each(function (reg) { + console.log(reg.geometry._coordPath._coordinates[0]) + var masks = reg.geometry._coordPath._coordinates; + //background2.geometry.insert(1, masks); + if (reg.properties.get('name') != "Чукотский автономный округ") { + masks.forEach(function(mask){ + background2.geometry.insert(1, mask); + }); + // Меняем цвет на красный + //reg.options.set('fillColor', '#ff001a') + } + }); + // Добавляем регионы на карту + myMap.geoObjects.add(background2); + myMap.geoObjects.add(regions); + }); + */ + + /*ymaps.modules.require('RS.RegionSelector', function (RegionSelector) { + new RegionSelector(myMap); + });*/ + //search if(mData.isSearch) { diff --git a/assets/js/region-selector.min.js b/assets/js/region-selector.min.js new file mode 100644 index 0000000..2b1d78a --- /dev/null +++ b/assets/js/region-selector.min.js @@ -0,0 +1,349 @@ +(function (global){ +var ym = { modules: global.ymaps.modules }; + +(function (modules){ +var project = { DEBUG: false }; +if (typeof modules == 'undefined' && typeof require == 'function') { + var modules = require('ym'); +} + +modules.define('util.providePackage', ['system.mergeImports'], function (provide, mergeImports) { + provide(function (srcPackage, packageArgs) { + var packageProvide = packageArgs[0], + packageModules = Array.prototype.slice.call(packageArgs, 1), + ns = mergeImports.joinImports(srcPackage.name, {}, srcPackage.deps, packageModules); + + packageProvide(ns); + }); +}); +})(ym.modules); + +ym.modules.define('RS.MaskOverlay', [ + 'util.defineClass', + 'overlay.Polygon', + 'geometry.pixel.Polygon' +], function (provide, defineClass, OverlayPolygon, GeometryPixelPolygon) { + +/** + * Класс оверлея маски. + * @class + * @name MaskOverlay + * @param {ymaps.geometry.pixel.Polygon} geometry Пиксельная геометкрия полигона. + * @param {Object} data Данные. + * @param {Object} options Опции. + */ +var MaskOverlay = defineClass(function (geometry, data, options) { + MaskOverlay.superclass.constructor.call(this, geometry, data, options); +}, OverlayPolygon, /** @lends MaskOverlay.prototype */{ + /** + * Перекрываем публичный метод. + * @function + * @name MaskOverlay.setGeometry + * @param {ymaps.geometry.pixel.Polygon} geometry Пиксельная геометрия полигона. + */ + setGeometry: function (geometry) { + MaskOverlay.superclass.setGeometry.call( + this, + this.getMap() ? this._createGeometry(geometry) : geometry + ); + }, + /** + * Создание пиксельной геометрии. + * @function + * @private + * @name MaskOverlay._createGeometry + * @returns {ymaps.geometry.pixel.Polygon} Пиксельная геометрия полигона. + */ + _createGeometry: function (geometry) { + var lineCoordinates = geometry.getCoordinates().slice(0), + map = this.getMap(), + center = map.getGlobalPixelCenter(), + size = map.container.getSize(), + d = 512; + + lineCoordinates.push([ + [center[0] - size[0] - d, center[1] - size[1] - d], + [center[0] + size[0] + d, center[1] - size[1] - d], + [center[0] + size[0] + d, center[1] + size[1] + d], + [center[0] - size[0] - d, center[1] + size[1] + d], + [center[0] - size[0] - d, center[1] - size[1] - d] + ]); + + return new GeometryPixelPolygon(lineCoordinates, 'evenOdd'); + } +}); + +provide(MaskOverlay); + +}); + +ym.modules.define('RS.MapMaskView', [ + 'util.defineClass', + 'geometry.Polygon', + 'RS.MaskOverlay' +], function (provide, defineClass, GeometryPolygon, MaskOverlay) { + +/** + * Класс-отображение данных на карте ввиде маски. + * @class + * @name RegionSelector.MapMaskView + * @param {ymaps.Map} map Карта. + */ +var MapMaskView = defineClass(function (map) { + this._map = map; + this._overlay = null; + this._geometry = null; +}, /** @lends RegionSelector.MapMaskView.prototype */{ + /** + * Отображение данных на карте. + * @function + * @name RegionSelector.MapMaskView.render + * @param {ymaps.data.Manager} data Менеджер данных. + * @returns {RegionSelector.MapMaskView} Возвращает ссылку на себя. + */ + render: function (data) { + var coordinates = []; + + data.get('regions') + .each(function (geoObject) { + coordinates.push.apply(coordinates, geoObject.geometry.getCoordinates()); + }); + + this._createGeometry(coordinates); + this._createOverlay(this._geometry.getPixelGeometry()); + this._attachHandlers(); + + return this; + }, + /** + * Удаление данных с карты. + * @function + * @name RegionSelector.MapMaskView.clear + * @returns {RegionSelector.MapMaskView} Возвращает ссылку на себя. + */ + clear: function () { + if(this._geometry) { + this._detachHandlers(); + this._geometry.setMap(null); + this._overlay.setMap(null); + } + this._geometry = this._overlay = null; + + return this; + }, + /** + * Добавление обработчиков событий. + * @function + * @private + * @name RegionSelector.MapMaskView._attachHandlers + */ + _attachHandlers: function () { + this._geometry.events + .add('pixelgeometrychange', this._onPixelGeometryChange, this); + this._map.events + .add('boundschange', this._onBoundsChange, this); + }, + /** + * Удаление обработчиков событий. + * @function + * @private + * @name RegionSelector.MapMaskView._detachHandlers + */ + _detachHandlers: function () { + this._map.events + .remove('boundschange', this._onBoundsChange, this); + this._geometry.events + .remove('pixelgeometrychange', this._onPixelGeometryChange, this); + }, + /** + * Обработчик события изменения пискельной геометрии. + * @function + * @private + * @name RegionSelector.MapMaskView._onPixelGeometryChange + * @param {ymaps.data.Manager} e Менеджер данных. + */ + _onPixelGeometryChange: function (e) { + this._createOverlay(e.get('pixelGeometry')); + }, + /** + * Обработчик события смены центра/масштаба карты. + * @function + * @private + * @name RegionSelector.MapMaskView._onBoundsChange + */ + _onBoundsChange: function (e) { + if(e.get('oldZoom') !== e.get('newZoom')) { + this._createOverlay(this._geometry.getPixelGeometry()); + } + }, + /** + * Создание геометрии типа "Polygon". + * @function + * @private + * @name RegionSelector.MapMaskView._createGeometry + * @param {Number[][]} coordinates Координаты вершин ломаных, определяющих внешнюю и внутренние границы многоугольника. + */ + _createGeometry: function (coordinates) { + this._geometry = new GeometryPolygon(coordinates, 'evenOdd',{ + projection: this._map.options.get('projection') + }); + this._geometry.setMap(this._map); + }, + /** + * Создание оверлея. + * @function + * @private + * @name RegionSelector.MapMaskView._createOverlay + * @param {ymaps.geometry.pixel.Polygon} geometry Пиксельная геометрия полигона. + */ + _createOverlay: function (geometry) { + if(!this._overlay) { + this._overlay = new MaskOverlay(geometry, null, this.getDefaults()); + } + this._overlay.setMap(this._map); + this._overlay.setGeometry(geometry); + }, + /** + * Опции по-умолчанию. + * @function + * @name RegionSelector.MapMaskView.getDefaults + * @returns {Object} Опции. + */ + getDefaults: function () { + return { + zIndex: 1, + stroke: false, + strokeColor: false, + fillColor: 'CCC', + interactivityModel: 'default#transparent', + cursor: 'grab' + }; + } +}); + +provide(MapMaskView); + +}); + +ym.modules.define('RS.Model', [ + 'util.defineClass', + 'util.bind', + 'Monitor', + 'option.Manager', + 'event.Manager', + 'regions' +], function (provide, defineClass, bind, Monitor, OptionManager, EventManager, Regions) { + +/** + * Класс-модель + * @class + * @name RegionSelector.Model + */ +var Model = defineClass(function () { + this.events = new EventManager(); + this.options = new OptionManager({ + preset: this.getDefaults() + }); +}, /** @lends RegionSelector.Model.prototype */{ + /** + * Загружаем данные. + * @function + * @name RegionSelector.Model.load + */ + load: function () { + Regions.load( + this.options.get('country'), { + lang: this.options.get('lang'), + quality: this.options.get('quality') + } + ).then( + bind(this._onDataLoaded, this) + ); + }, + /** + * Обработчик загрузки данных. + * @function + * @private + * @name RegionSelector.Model._onDataLoaded + * @param {Object} data Данные региона. + */ + _onDataLoaded: function (data) { + this.events.fire('load', { + regions: data.geoObjects, + target: this + }); + }, + /** + * Опции модели по-умолчанию. + * @function + * @name RegionSelector.Model.getDefaults + * @returns {Object} Опции модели. + */ + getDefaults: function () { + return { + country: 'MD', + lang: 'ru', + quality: 0 + }; + } +}); + +provide(Model); + +}); + +ym.modules.define('RS.RegionSelector', [ + 'util.defineClass', + 'RS.Model', + 'RS.MapMaskView', +], function (provide, defineClass, Model, MapMaskView) { + +/** + * Класс-контрол выбора региона + * @class + * @name RegionSelector + * @param {ymaps.Map} map Карта. + * @param {jQuery} listContainer Контейнер списка областей. + * @param {jQuery} optContainer Контейнер для настроек. + * @param {jQuery} titleContainer Контейнер заголовка. + */ +var RegionSelector = defineClass(function (map, listContainer, optContainer, titleContainer) { + this._model = new Model(); + this._views = [ + this._mapMaskView = new MapMaskView(map) + ]; + + this._attachHandlers(); + this._model.load(); +}, /** @lends RegionSelector.prototype */{ + /** + * Добавление обработчиков событий. + * @function + * @private + * @name RegionSelector._attachHandlers + */ + _attachHandlers: function () { + this._model.events.add('load', this._onRegionsLoaded, this); + }, + + /** + * Обработчик события загрузки данных о регионах. + * @function + * @private + * @name RegionSelector._onRegionsLoaded + * @param {ymaps.data.Manager} data Менеджер данных. + */ + _onRegionsLoaded: function (data) { + for(var i = 0, len = this._views.length; i < len; i++) { + this._views[i] + .clear() + .render(data); + } + } +}); + +provide(RegionSelector); + +}); + +})(this); \ No newline at end of file diff --git a/shmapper.php b/shmapper.php index 4bddcd3..71582be 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.4.0 + * Version: 1.4.1 * Requires at least: 5.0 * Requires PHP: 5.6 * Author: Teplitsa. Technologies for Social Good @@ -71,7 +71,7 @@ function init_textdomain_shmapper() { define( 'SHM_CSV_STROKE_SEPARATOR', ';' ); define( 'SHM_CSV_ROW_SEPARATOR', ' '); -define( 'SHMAPPER_VERSION', '1.4.0' ); +define( 'SHMAPPER_VERSION', '1.4.1' ); require_once SHM_REAL_PATH . 'class/ShMapper.class.php'; require_once SHM_REAL_PATH . 'class/ShMapper_ajax.class.php'; From c63e34aec955ab23aa9d2f700b3bb97818b7398e Mon Sep 17 00:00:00 2001 From: BootWP Date: Thu, 28 Jan 2021 19:24:06 +0200 Subject: [PATCH 089/220] Return default Region --- assets/js/region-selector.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/region-selector.min.js b/assets/js/region-selector.min.js index 2b1d78a..fa6153c 100644 --- a/assets/js/region-selector.min.js +++ b/assets/js/region-selector.min.js @@ -281,7 +281,7 @@ var Model = defineClass(function () { */ getDefaults: function () { return { - country: 'MD', + country: 'RU', lang: 'ru', quality: 0 }; From 0a1c566df7a163ee3a509ef1edd4d67e3eb117a3 Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 21 Feb 2021 18:18:11 +0200 Subject: [PATCH 090/220] Update ru translate. --- languages/shmapper-by-teplitsa-ru_RU.mo | Bin 33351 -> 33885 bytes languages/shmapper-by-teplitsa-ru_RU.po | 244 +++++++++++++----------- languages/shmapper-by-teplitsa.pot | 236 +++++++++++++---------- 3 files changed, 264 insertions(+), 216 deletions(-) diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo index 153fe7c8030bfd3e7d56182e36ce0e331cdee3d5..71c60b62be860a874cded278481cf9ba2a7e57dc 100644 GIT binary patch delta 7346 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 R+h-1s30ddcciZyt{{j@!`d$D4 delta 6861 zcmZYD3w+P@9>?+T>|&c4Ha25dwz1h}7q;ATHzfD6-0!)El}j#vN{SQ`s)N)>rR4Z? zXh`amBX>$DcZqXwaFkN&yx#xsSC1a&d>?)G{C>Z`-|u_>{kEKZuFS4kWjv=M0u~!m zzMnC%xHrU@67o|cRclOeHDh8h1jDf=>b_j8jh!$GCt(WC#~Qc^)A1NqMgQu?)WulL z!VZ{fjK@rI7v8iL<}lXchM#dbCed3VK9A+`2&%)gs4@P8jM;?6854?8SQe8o2-7ec zv#~O^b=Uh~CjFZsWYoYSEQib84ey|4{8v;1AEWL&hHChn^D=56*Ks5U#M^<6#eB-s zF%UPo`mL_K8-wWI93WE(kD`|F5(Z;B-y#%1^;=HjAc+ra0j znH)mhe-gD)S1=5NSx&8B71V%g<7e0u2V-EW$1dTBRAbgqF%HXM48sh-SR98*I2IRS zQw-qf2VyHs#P(PgM`B|v#$a5J+L8}ZD}4Yp;G?K5Ip-l$k<2X&#=tZ?(r{FL3hLD7 zV>@hxy6;6~EM_TchC46>52HVRiyF`wREL*P1G$CTs?c=%oTnNY?M0@mxDR=w%mb*c z8HPFoQ&A5tL=Ef>RKpuk1N;a>a4&}9QPllsQE$%;)QX1Gv4$hx1@@neMwWpZaSK#K z?NM9N9obIP1J%(~R6}!71DucQsKj0OqRzlh)E1pY4d^`T3|vDED3F5{qxV0Kj2b9F z9il>1M-RL5VAKGMu^i4p-M`pfUybT$BWf#3Q7g0$wa2HBPlLIRdM-TE9?p0SrGHb0 zj2g~I{xdCHc`Rz?Q&ETK4b)b=jXDF{QJ>b&Q8PP@n%R%&>nO`UACFp*mZ(p8Kh*t` z(X)}v0y25nx~?%zbOE)*n=uTxp|)l>s)IwWd>J*68>oTZapelxb|tE!R;~_epv^G{ zdtxHa%VzyGv-hdc05+oD?@P!lYN~U$I&O~q9x?4uGZ~BtI0JcO%}T6~yHIE1E@}dm zXiQrZ<%~tu*T4!`E0^`x>rz04wxAJehJ~n+_d_k!6PSqeFdW}^_1iFl@)6WTE}~ZK zDyoA!*bYOPohH;BAHpZ`RXpe+)1AzSdUlC+AXVlVR>m-j*o#Hg)9GQAp8wX%F zoQs<2Db)QJPy@Y!mGBp5`Fz_>0!C8rNhhO2aX)G$if|M5##R_nU~lY!TA`7s*K;Cj zKr?X!&O?roxsBSY)cfpGH%ASq4VK4_sFmrB4A5gnkevpe3lK{s8Cr@twdl%7wh!$v6%l#3ktIOy&Za(OCa}dzea) zDsvmhslKT(tg=~y58)Xs!u)2|`S>{HOV|hdH0OZgR(uPu<5*nU!oCH;Eje$Lvs$wL z)ya&eLe6onMlIP+=U&XD{52+GASY8>mWp+-0JXG(FbOB1PX8;Yw`dKf<2KZD-=o_9 zsTJ$53jfyjgHjpyQLcx)F{Vr#8pZoi4KBk3T#MSOJ+A&s%%*%E8KbFOXa`h;n%GE8 z#b;6dtwRlLhlh+B{t_R+^O%Em+uHBI0Mzxxn2f7Xr*}81p_3Se*YF(-qh>w_ zwY2N-7rcpU@mhELJ$Q|i*_V#jp#E+M>S60cFpK&qyi0v+X3MUdmXB!V$bCwNRWc_~ zOPbu%j<`NnqWm_dVJYhR1=LFYfH@f2%MQFT>cdoo@i@de3u{p>!IyClhGKt~w~d53gEJ5+<+Q7bV3)$l}2!6m4@-G;jFDr%+fpkCL6zV^@+p`P=g+F5}y zxDh?-a6g$?Jc-(hJ6H|l``Odp0Fx*`f*RNq)Jn|80$hr@cmUNwnf|tesu)B$7dd98 z0Vd!qRKKhGv;Le1ZLp?AEBk*a=!X?-cKSM388ED^%+L%GHF{>X6!-r^QtSaALy|+d_jd~b{v!N0;-{)L3ZSM$O~bnqdNWqt7G6`yYxw@fo36} z0Mik5W)|Z_+<_WM!4P|9+Mv$RBo7&V7+%11+=!atY1GWZhuZ()$VUxe0_xCxf;I3K zmiOcL!K3_Mpqw(ym@zmF)!`LXJHMdLNX_B=HHFz2ho13dw6qIQBPzjQ+=9`#6Px03 z)M1Mm!8Txf0|AeGH4usVpHyigIM~9#~br2< zNa$qy?Vpe3Deu7wcpN=y;4+yN81|(7^sdD$%GXe5B5sO3?YXE!)6tbjIiGW`!W6E5 zjGF0148M|l&$ zi(-N)6ks5cMxHJ9Z4sD6${R5PXXDSRBt2{~HL1@g)=~b3=tB7Re>s`zg!U?4!A%En zFL9Olp3s4Lg&0hnAvpZLzv14)e-RnPM?@IU>U$7E=(SdQlW0p^RKX=}FUjNkGix_F zKOR*2fQTaB%U9x`-%zJ^ArVB3Al4Jdh_{L7iN6q^5lTN=eEVC8{3_y~L>1c9m+}z# zFNvANTYCSMez%xP-0&&+%BU2MU)!wj=LLQ?aOKOmfcVyx#UNt7E64Ke4wu(i;AQfq zQfCg=&$<46|4eqA3;!Wj5;ur#L;#UV+)H(N=yM8%#9^W}v5WX~;(PQ*Dk2xhGk35( zanfCBhs_Aj7=HM3!&$6LbSGL8`WWW0JtGmY=F4GCC5io6{onKj6&0wz z<}PI6EFy!tFg#8CvHsI2Bonm>r39iHH@<@dRN+#6>i(Q+QC{jQhT`9ecL{#|`_co> z6ij#dT%H+1{zLVj?iy@GMPFhx@d)t{p|sdy7GaLdKZD`KbfO{=N0cL!np@0w_z6*y zs7EvL~+z>##N`4A)iBO89Zokc%zhM>Ph$}yZ{~&%K8WKMd zjR~bh-%tKn!A3+`B89e+h}X$C^z!3rB8pJ@)#CeKs6OP|xU#54jCJLy#yh53l%MzA z>b?AfMh%!eWPGu=Swdtv?}+qnWxV?`miv1rXRing&B@HoPt0!6FuQ>_smT_9Z+P>x zphcq#v;CGYn%p(kd$Vv>WxoyHiM?n0dE@&g2YSa0>hG7h^x*n~-h&?<+)8X9N)r#3 ay5e?nTfBD%&k6Ld8j%;tv&W`A6ZBu5d>X0% diff --git a/languages/shmapper-by-teplitsa-ru_RU.po b/languages/shmapper-by-teplitsa-ru_RU.po index 4322e03..9ad0486 100644 --- a/languages/shmapper-by-teplitsa-ru_RU.po +++ b/languages/shmapper-by-teplitsa-ru_RU.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" -"POT-Creation-Date: 2021-01-26 06:57+0200\n" -"PO-Revision-Date: 2021-01-26 09:09+0200\n" +"POT-Creation-Date: 2021-02-05 07:14+0200\n" +"PO-Revision-Date: 2021-02-21 18:16+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: ru\n" @@ -16,12 +16,12 @@ msgstr "" "X-Generator: Poedit 2.4.2\n" #: class/SMC_Post.php:372 class/ShMapper.class.php:174 -#: class/ShmMap.class.php:109 class/ShmMap.class.php:601 +#: class/ShmMap.class.php:109 class/ShmMap.class.php:655 #: class/ShmPoint.class.php:319 msgid "Title" msgstr "Название" -#: class/SMC_Post.php:498 class/ShmMap.class.php:527 +#: class/SMC_Post.php:498 class/ShmMap.class.php:581 msgid "Double" msgstr "Дублировать" @@ -110,17 +110,17 @@ msgid "Color" msgstr "Цвет" #: class/ShMapPointType.class.php:133 class/ShMapPointType.class.php:185 -#: class/ShMapper.class.php:145 class/ShmMap.class.php:258 +#: class/ShMapper.class.php:145 class/ShmMap.class.php:264 #: widget/ShMap.widget.php:84 msgid "Height" msgstr "Высота" #: class/ShMapPointType.class.php:139 class/ShMapPointType.class.php:195 -#: class/ShMapper.class.php:144 class/ShmMap.class.php:263 +#: class/ShMapper.class.php:144 class/ShmMap.class.php:269 msgid "Width" msgstr "Ширина" -#: class/ShMapPointType.class.php:375 +#: class/ShMapPointType.class.php:374 msgid "None" msgstr "Никакой" @@ -142,8 +142,8 @@ msgstr "Ваш запрос успешно зарегистрирован." msgid "Unknown error." msgstr "Неизвестная ошибка." -#: class/ShMapper.class.php:82 class/ShMapper.class.php:393 -#: class/ShMapper.class.php:394 +#: class/ShMapper.class.php:82 class/ShMapper.class.php:431 +#: class/ShMapper.class.php:432 msgid "Shmapper" msgstr "shMapper" @@ -163,52 +163,52 @@ msgstr "редактировать Карты на странице" #: class/ShMapper.class.php:119 class/ShMapperRequest.class.php:30 #: class/ShMapperRequest.class.php:35 msgid "all Map Requests" -msgstr "все запросы на карту" +msgstr "Все запросы на карту" #: class/ShMapper.class.php:130 class/ShMapper.class.php:178 -#: class/ShMapperRequest.class.php:93 class/ShmMap.class.php:601 +#: class/ShMapperRequest.class.php:93 class/ShmMap.class.php:655 #: class/ShmPoint.class.php:265 msgid "Location" msgstr "Адрес" #: class/ShMapper.class.php:131 class/ShMapper.class.php:138 -#: class/ShMapper.class.php:176 class/ShMapper.class.php:599 -#: class/ShMapperRequest.class.php:89 class/ShmMap.class.php:601 +#: class/ShMapper.class.php:176 class/ShMapper.class.php:637 +#: class/ShMapperRequest.class.php:89 class/ShmMap.class.php:655 #: class/ShmPoint.class.php:261 msgid "Latitude" msgstr "Широта" #: class/ShMapper.class.php:132 class/ShMapper.class.php:139 -#: class/ShMapper.class.php:177 class/ShMapper.class.php:597 -#: class/ShMapperRequest.class.php:91 class/ShmMap.class.php:601 +#: class/ShMapper.class.php:177 class/ShMapper.class.php:635 +#: class/ShMapperRequest.class.php:91 class/ShmMap.class.php:655 #: class/ShmPoint.class.php:263 msgid "Longitude" msgstr "Долгота" #: class/ShMapper.class.php:133 class/ShMapper.class.php:140 -#: class/ShMapper.class.php:601 +#: class/ShMapper.class.php:639 msgid "Zoom" msgstr "Увеличение" #: class/ShMapper.class.php:141 class/ShmMap.class.php:118 -#: class/ShmMap.class.php:333 +#: class/ShmMap.class.php:339 msgid "Legend exists" msgstr "Легенда присутствует" -#: class/ShMapper.class.php:142 class/ShmMap.class.php:344 +#: class/ShMapper.class.php:142 class/ShmMap.class.php:350 msgid "Filters exists" msgstr "Панель фильтров присутствует" #: class/ShMapper.class.php:143 class/ShmMap.class.php:113 -#: class/ShmMap.class.php:322 +#: class/ShmMap.class.php:328 msgid "Export csv" msgstr "Загрузка сводки в формате csv" -#: class/ShMapper.class.php:146 class/ShmMap.class.php:279 +#: class/ShMapper.class.php:146 class/ShmMap.class.php:285 msgid "Map search" msgstr "Поиск по карте" -#: class/ShMapper.class.php:147 class/ShmMap.class.php:293 +#: class/ShMapper.class.php:147 class/ShmMap.class.php:299 msgid "Map full screen" msgstr "Полноэкранный режим" @@ -216,16 +216,16 @@ msgstr "Полноэкранный режим" msgid "Map zoom slider" msgstr "Слайдер масштаба" -#: class/ShMapper.class.php:149 class/ShmMap.class.php:287 +#: class/ShMapper.class.php:149 class/ShmMap.class.php:293 msgid "Map layer switcher" msgstr "Переключатель слоев карты" -#: class/ShMapper.class.php:150 class/ShmMap.class.php:301 +#: class/ShMapper.class.php:150 class/ShmMap.class.php:307 msgid "Lock zoom and drag" msgstr "" "Заблокировать перетаскивание карты и изменение размера средним колёсиком мышы" -#: class/ShMapper.class.php:151 class/ShmMap.class.php:297 +#: class/ShMapper.class.php:151 class/ShmMap.class.php:303 msgid "Formating Marker to cluster" msgstr "Укладывать маркеры карты в кластеры" @@ -238,7 +238,7 @@ msgid "Form exists" msgstr "Форма присутствует" #: class/ShMapper.class.php:155 class/ShmMap.class.php:128 -#: class/ShmMap.class.php:407 +#: class/ShmMap.class.php:456 msgid "Notify owner of Map" msgstr "Присылать уведомления о новых картах автору" @@ -250,7 +250,7 @@ msgstr "Заголовок Формы" msgid "Form generator" msgstr "Генератор форм" -#: class/ShMapper.class.php:158 class/ShmMap.class.php:427 +#: class/ShMapper.class.php:158 class/ShmMap.class.php:476 msgid "Users can leave their contact details for feedback." msgstr "Пользователи могут оставлять свои контактные данные для обратной связи" @@ -258,7 +258,7 @@ msgstr "Пользователи могут оставлять свои конт msgid "Unclude Personal name" msgstr "Включить личное имя" -#: class/ShMapper.class.php:160 class/ShmMap.class.php:440 +#: class/ShMapper.class.php:160 class/ShmMap.class.php:489 msgid "Personal name" msgstr "Имя" @@ -282,7 +282,7 @@ msgstr "Требуется личный e-mail" msgid "Unclude Personal phone" msgstr "Включить личный телефон" -#: class/ShMapper.class.php:166 class/ShmMap.class.php:472 +#: class/ShMapper.class.php:166 class/ShmMap.class.php:521 msgid "Personal phone" msgstr "Телефон" @@ -298,7 +298,7 @@ msgstr "Карта" #: class/ShMapper.class.php:175 class/ShmForm.class.php:229 #: class/ShmForm.class.php:301 class/ShmForm.class.php:374 -#: class/ShmMap.class.php:601 class/ShmPoint.class.php:323 +#: class/ShmMap.class.php:655 class/ShmPoint.class.php:323 msgid "Description" msgstr "Описание" @@ -332,20 +332,20 @@ msgstr "Утвержденная дата" msgid "Accessed User" msgstr "Доступ пользователя" -#: class/ShMapper.class.php:280 class/ShMapper.class.php:372 +#: class/ShMapper.class.php:284 class/ShMapper.class.php:393 #: class/ShMapperDrive.class.php:125 msgid "Attantion" msgstr "Внимание" -#: class/ShMapper.class.php:281 class/ShMapper.class.php:373 +#: class/ShMapper.class.php:285 class/ShMapper.class.php:394 msgid "Send" msgstr "Послать" -#: class/ShMapper.class.php:282 class/ShMapper.class.php:374 +#: class/ShMapper.class.php:286 class/ShMapper.class.php:395 msgid "Close" msgstr "Закрыть" -#: class/ShMapper.class.php:283 class/ShMapper.class.php:375 +#: class/ShMapper.class.php:287 class/ShMapper.class.php:396 msgid "" "Error: the form is not associated with the card. To link a map and a form, " "there should be 2 shortcodes on one page (map - [shmMap id = '6' map = " @@ -357,44 +357,44 @@ msgstr "" "uniq='например, 777'] и форма - [shmMap id='94' form='true' uniq='например, " "777']), у которых параметр uniq будет совпадать" -#: class/ShMapper.class.php:284 +#: class/ShMapper.class.php:288 msgid "Are you shure?" msgstr "Вы уверены?" -#: class/ShMapper.class.php:406 class/ShMapper.class.php:407 -#: class/ShMapper.class.php:435 class/ShMapperDrive.class.php:435 +#: class/ShMapper.class.php:444 class/ShMapper.class.php:445 +#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:435 msgid "Settings" msgstr "Настройки" -#: class/ShMapper.class.php:444 +#: class/ShMapper.class.php:482 msgid "Map API" msgstr "API карт" -#: class/ShMapper.class.php:457 +#: class/ShMapper.class.php:495 msgid "OpenStreetMap" msgstr "Open Street Карта" -#: class/ShMapper.class.php:465 +#: class/ShMapper.class.php:503 msgid "Yandex.Maps API Key" msgstr "Ключ API Яндекс.Карт" -#: class/ShMapper.class.php:467 +#: class/ShMapper.class.php:505 msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." msgstr "ВНИМАНИЕ: необходимо указать ключ для работы с API Яндекс.Карт." -#: class/ShMapper.class.php:467 +#: class/ShMapper.class.php:505 msgid "Learn more here:" msgstr "Подробнее здесь:" -#: class/ShMapper.class.php:478 +#: class/ShMapper.class.php:516 msgid "Interactive" msgstr "Интерактив" -#: class/ShMapper.class.php:486 +#: class/ShMapper.class.php:524 msgid "Enable global mode for non-interactive maps" msgstr "Включить глобальный режим неинтерактивных карт" -#: class/ShMapper.class.php:490 +#: class/ShMapper.class.php:528 msgid "" "users will not be able to add posts to any map. If the checkbox is enabled, " "the interactivity block does not even appear on the maps." @@ -402,15 +402,15 @@ msgstr "" "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " "включена у карт даже не появляется блок интерактивности." -#: class/ShMapper.class.php:498 +#: class/ShMapper.class.php:536 msgid "Pre-modertion from Map owner." msgstr "Премодерация со стороны владельца Карты." -#: class/ShMapper.class.php:502 +#: class/ShMapper.class.php:540 msgid "all messages will be added in the Draft status" msgstr "все сообщения будут добавляться в статусе Черновик" -#: class/ShMapper.class.php:506 +#: class/ShMapper.class.php:544 msgid "" "ATTENTION: disable this option only at your own peril and risk, because " "there is a threat of spam attacks" @@ -418,19 +418,19 @@ msgstr "" "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует " "угроза спам-атаки" -#: class/ShMapper.class.php:514 +#: class/ShMapper.class.php:552 msgid "Reload page after User send request." msgstr "Перегрузить страницу после того, как юзер отправил форму запроса" -#: class/ShMapper.class.php:526 +#: class/ShMapper.class.php:564 msgid "Protection" msgstr "Защита" -#: class/ShMapper.class.php:533 +#: class/ShMapper.class.php:571 msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" msgstr "Включать капчу в форме (плагин использует только ключи reCAPTCHA v2)" -#: class/ShMapper.class.php:542 +#: class/ShMapper.class.php:580 #, php-format msgid "" "What is Google reCAPTCHA? How recived keys for your site? See %sthis " @@ -439,7 +439,7 @@ msgstr "" "Что такое Google reCAPTCHA? Как получить ключи для сайта? Смотрите %sэту " "инстукцию%s." -#: class/ShMapper.class.php:546 +#: class/ShMapper.class.php:584 msgid "" "Your reCAPTCHA doesn't work yet. In order to make it work, please get the " "API keys at google.com/recaptcha" @@ -447,60 +447,60 @@ msgstr "" "Ваша Капча пока не работает. Для включения этой функции получите ключи API " "на google.com/recaptch" -#: class/ShMapper.class.php:558 +#: class/ShMapper.class.php:596 msgid "Vocabulary" msgstr "Словарь" -#: class/ShMapper.class.php:562 +#: class/ShMapper.class.php:600 msgid "Save personal data garantee" msgstr "Гарантия сохранения персональных данных" -#: class/ShMapper.class.php:568 +#: class/ShMapper.class.php:606 msgid "Successful send map request" msgstr "Сообщение об успешной регистрации запроса на Маркер" -#: class/ShMapper.class.php:574 +#: class/ShMapper.class.php:612 msgid "Error send map request" msgstr "Сообщение об ошибки регистрации запроса на Маркер" -#: class/ShMapper.class.php:588 class/ShMapper.class.php:611 -#: class/ShMapper.class.php:651 +#: class/ShMapper.class.php:626 class/ShMapper.class.php:649 +#: class/ShMapper.class.php:689 msgid "Coordinates" msgstr "Координаты" -#: class/ShMapper.class.php:595 +#: class/ShMapper.class.php:633 msgid "Set default coordinates" msgstr "Установить координаты по умолчанию" -#: class/ShMapper.class.php:707 +#: class/ShMapper.class.php:745 msgid "Wizzard" msgstr "Мастер" -#: class/ShMapper.class.php:710 +#: class/ShMapper.class.php:748 msgid "Restart wizzard" msgstr "Перезапустить Мастер" -#: class/ShMapper.class.php:757 class/ShMapper.class.php:765 +#: class/ShMapper.class.php:795 class/ShMapper.class.php:803 msgid "Close wizzard" msgstr "Закрыть навсегда" -#: class/ShMapper.class.php:758 class/ShMapper.class.php:764 +#: class/ShMapper.class.php:796 class/ShMapper.class.php:802 msgid "Go to current page" msgstr "На текущую страницу" -#: class/ShMapper.class.php:761 class/ShMapper_ajax.class.php:172 +#: class/ShMapper.class.php:799 class/ShMapper_ajax.class.php:172 msgid "Next step" msgstr "Следующий шаг" -#: class/ShMapper.class.php:763 +#: class/ShMapper.class.php:801 msgid "Prevous step" msgstr "Предыдущий шаг" -#: class/ShMapper.class.php:815 +#: class/ShMapper.class.php:853 msgid "Welcome to the Shmapper Configuration Wizard" msgstr "Приветствуем Вас в Мастере конфигурации Shmapper" -#: class/ShMapper.class.php:816 +#: class/ShMapper.class.php:854 msgid "" "First, you need to specify the general settings. Click on the button to go to the desired " @@ -510,11 +510,11 @@ msgstr "" "class='dashicons dashicons-controls-play'> чтобы перейти в нужный " "раздел" -#: class/ShMapper.class.php:822 +#: class/ShMapper.class.php:860 msgid "Configure Shmapper" msgstr "Настройте Shmapper" -#: class/ShMapper.class.php:823 +#: class/ShMapper.class.php:861 msgid "" "Change the settings that do not suit you. To connect reCAPTCHA, you need to " "create an account on Google.com" @@ -522,19 +522,19 @@ msgstr "" "Измените настройки, которые Вас не устраивают. Для подключения reCAPTCHA " "необходимо создать учётную запись на Google.com" -#: class/ShMapper.class.php:829 +#: class/ShMapper.class.php:867 msgid "Create your first map" msgstr "Создайте вашу первую карту" -#: class/ShMapper.class.php:830 +#: class/ShMapper.class.php:868 msgid "Click the \"Add Map\" button at the very top of the page" msgstr "Нажмите кнопку \"Добавить карту\" в самом верху страницы" -#: class/ShMapper.class.php:836 class/ShMapper.class.php:844 +#: class/ShMapper.class.php:874 class/ShMapper.class.php:882 msgid "New map" msgstr "Новая карта" -#: class/ShMapper.class.php:837 +#: class/ShMapper.class.php:875 msgid "" "Select a visible area on the map.

    Create the first Marker by pointing to " "the desired location on the map with the right mouse button.

    Fill in the " @@ -544,7 +544,7 @@ msgstr "" "нужное место карты правой кнопкой мыши.

    Заполните поля и нажмите " "\"Создать\"." -#: class/ShMapper.class.php:845 +#: class/ShMapper.class.php:883 msgid "" "Fill in the provided fields in sequence. In the \"Request Form\" section, " "create a simple feedback form by which Visitors will be able to inform you " @@ -631,7 +631,7 @@ msgstr "" #: class/ShMapperDrive.class.php:190 msgid "Point title column" -msgstr "Заголовок колонки" +msgstr "Столбец заголовка маркера" #: class/ShMapperDrive.class.php:202 msgid "Post date column" @@ -1130,7 +1130,7 @@ msgstr "только Форма запроса" #: class/ShmMap.class.php:192 msgid "Including Map to post" -msgstr "Вставка карты в звпись" +msgstr "Вставка карты в запись" #: class/ShmMap.class.php:204 msgid "You can insert a card into a post or page by copying this shortcode." @@ -1142,73 +1142,97 @@ msgid "Step 2. May anover Users add information for Map." msgstr "" "Шаг 2. Смогут ли другие пользователи добавлять информацию на Вашу карту?" -#: class/ShmMap.class.php:243 +#: class/ShmMap.class.php:249 msgid "1.1. Pan map and choose zoom" msgstr "1.1. Отцентрируйте карту и выберите масштаб" -#: class/ShmMap.class.php:255 +#: class/ShmMap.class.php:261 msgid "1.2. Set size for map's div (per pixels)" msgstr "1.2. Установите размер окна карты (в пикселях)" -#: class/ShmMap.class.php:260 class/ShmMap.class.php:265 +#: class/ShmMap.class.php:266 class/ShmMap.class.php:271 msgid "Empty for " msgstr "Оставьте пустым, чтобы было " -#: class/ShmMap.class.php:275 +#: class/ShmMap.class.php:281 msgid "1.3. Include interface" msgstr "1.3. Какие элементы управления картой должны присутствовать?" -#: class/ShmMap.class.php:283 +#: class/ShmMap.class.php:289 msgid "Map zoom slider enabled" msgstr "Ползунок масштаба" -#: class/ShmMap.class.php:305 +#: class/ShmMap.class.php:311 msgid "Choose layers" msgstr "Выбор типа визуализации слоя" -#: class/ShmMap.class.php:319 +#: class/ShmMap.class.php:325 msgid "1.4. May User download data in *.csv?" msgstr "1.4. Можно ли скачать данные карты в формате .csv?" -#: class/ShmMap.class.php:330 +#: class/ShmMap.class.php:336 msgid "1.5. Will the legend be displayed?" msgstr "1.5. Будет ли отображаться легенда?" -#: class/ShmMap.class.php:341 +#: class/ShmMap.class.php:347 msgid "1.6. Will Marker type filter be displayed?" msgstr "1.6. Будет ли отображаться панель фильтрации по типам Маркеров?" -#: class/ShmMap.class.php:352 +#: class/ShmMap.class.php:357 msgid "1.7. Default Marker icon" msgstr "1.7. Иконка маркера по умолчанию" -#: class/ShmMap.class.php:357 +#: class/ShmMap.class.php:362 msgid "Recommended size is 64х64 px, format is .png" msgstr "Рекомендуемый размер: 64х64 pxб формат .png" +#: class/ShmMap.class.php:373 +msgid "1.8. Highlight the country on the map" +msgstr "1.8. Выделение страны на карте" + +#: class/ShmMap.class.php:377 +msgid "Loading countries ... " +msgstr "Загрузка стран ... " + +#: class/ShmMap.class.php:380 +msgid "Select country" +msgstr "Выберите страну" + #: class/ShmMap.class.php:389 +msgid "Choose map overlay color" +msgstr "Выберите цвет наложения карты" + +#: class/ShmMap.class.php:395 +msgid "Choose country border color" +msgstr "Выберите цвет границы страны" + +#: class/ShmMap.class.php:401 +msgid "Overlay opacity" +msgstr "Прозрачность наложения" + +#: class/ShmMap.class.php:438 msgid "Enable crowdsourcing function (free add Users new Markers)" msgstr "" "Включить функцию краудсорсинга (свободного добавления Пользователями новых " "Маркеров) " -#: class/ShmMap.class.php:394 +#: class/ShmMap.class.php:443 msgid "2.1. What is the name of your information form?" msgstr "2.1. Как называется Ваша форма сбора информации?" -#: class/ShmMap.class.php:398 +#: class/ShmMap.class.php:447 msgid "For example «All beaches by the river»" msgstr "Например «Все пляжи у реки»" -#: class/ShmMap.class.php:404 +#: class/ShmMap.class.php:453 msgid "2.2. Will I notify the author about new posts?" msgstr "2.2. Оповещать ли автора Карты о новых сообщениях?" -#: class/ShmMap.class.php:412 +#: class/ShmMap.class.php:461 msgid "2.3. What information can users enter?" msgstr "2.3. Какую информацию могут вводить пользователи?" -#: class/ShmMap.class.php:415 +#: class/ShmMap.class.php:464 msgid "" "You can create your own forms using form elements: & laquo; Text line & " "raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & " @@ -1218,68 +1242,68 @@ msgstr "" "Строка текста», «Поле текста», «Загрузка " "файлов», «Категории Маркеров»" -#: class/ShmMap.class.php:424 +#: class/ShmMap.class.php:473 msgid "2.4. Can users leave their contact information?" msgstr "2.4. Могут ли пользователи оставлять свою контактную информацию?" -#: class/ShmMap.class.php:432 +#: class/ShmMap.class.php:481 msgid "2.5. What data users will have to put?" msgstr "2.5. Какие данные пользователи должны будут ставить?" -#: class/ShmMap.class.php:435 class/ShmMap.class.php:451 -#: class/ShmMap.class.php:467 +#: class/ShmMap.class.php:484 class/ShmMap.class.php:500 +#: class/ShmMap.class.php:516 msgid "Include" msgstr "Включать" -#: class/ShmMap.class.php:445 class/ShmMap.class.php:461 -#: class/ShmMap.class.php:477 +#: class/ShmMap.class.php:494 class/ShmMap.class.php:510 +#: class/ShmMap.class.php:526 msgid "Required" msgstr "Обязателен" -#: class/ShmMap.class.php:456 +#: class/ShmMap.class.php:505 msgid "Personal email" msgstr "Адрес электронной почты" -#: class/ShmMap.class.php:670 +#: class/ShmMap.class.php:724 msgid "What do with placemarks of deleting Map?" msgstr "Что делать с Маркерами удаляемой Карты?" -#: class/ShmMap.class.php:675 +#: class/ShmMap.class.php:729 msgid "Delete all Points" msgstr "Удалить все Маркеры" -#: class/ShmMap.class.php:681 +#: class/ShmMap.class.php:735 msgid "Escape all Points without Owner Map" msgstr "Оставить все Маркеры без родительской Карты" -#: class/ShmMap.class.php:687 +#: class/ShmMap.class.php:741 msgid "Switch all Points to anover Map" msgstr "Перенести все Маркеры на другую Карту" -#: class/ShmMap.class.php:703 +#: class/ShmMap.class.php:757 msgid "delete" msgstr "удалить" -#: class/ShmMap.class.php:782 +#: class/ShmMap.class.php:836 #, php-format msgid "Succesfuly delete map width %s points" msgstr "Карта успешно удалена с %s точками" -#: class/ShmMap.class.php:787 +#: class/ShmMap.class.php:841 #, php-format msgid "Succesfuly delete map and %s points are orphans now" msgstr "Карта успешно удалена и %s точек сейчас не привязаны ни к какой карте" -#: class/ShmMap.class.php:794 +#: class/ShmMap.class.php:848 #, php-format msgid "Succesfuly delete map and %s points migrates to %s" msgstr "Карта успешно удалена и %s точек перенесено в %s" -#: class/ShmMap.class.php:826 +#: class/ShmMap.class.php:880 msgid "Yandex Map" msgstr "Яндекс карты" -#: class/ShmMap.class.php:848 +#: class/ShmMap.class.php:902 msgid "Open Street Map" msgstr "Open Street Карта" @@ -1376,7 +1400,7 @@ msgstr "Вставить" msgid "Submit" msgstr "Отправить" -#: tpl/shmMap.php:88 +#: tpl/shmMap.php:92 #, php-format msgid "download %s.csv" msgstr "скачать %s.csv" diff --git a/languages/shmapper-by-teplitsa.pot b/languages/shmapper-by-teplitsa.pot index e4862cb..590af00 100644 --- a/languages/shmapper-by-teplitsa.pot +++ b/languages/shmapper-by-teplitsa.pot @@ -3,7 +3,7 @@ msgid "" msgstr "" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "Project-Id-Version: ShMapper by Teplitsa\n" -"POT-Creation-Date: 2021-01-26 06:57+0200\n" +"POT-Creation-Date: 2021-02-05 07:14+0200\n" "PO-Revision-Date: 2020-06-18 05:16+0300\n" "Last-Translator: \n" "Language-Team: \n" @@ -21,12 +21,12 @@ msgstr "" "X-Poedit-SearchPathExcluded-0: *.js\n" #: class/SMC_Post.php:372 class/ShMapper.class.php:174 -#: class/ShmMap.class.php:109 class/ShmMap.class.php:601 +#: class/ShmMap.class.php:109 class/ShmMap.class.php:655 #: class/ShmPoint.class.php:319 msgid "Title" msgstr "" -#: class/SMC_Post.php:498 class/ShmMap.class.php:527 +#: class/SMC_Post.php:498 class/ShmMap.class.php:581 msgid "Double" msgstr "" @@ -115,17 +115,17 @@ msgid "Color" msgstr "" #: class/ShMapPointType.class.php:133 class/ShMapPointType.class.php:185 -#: class/ShMapper.class.php:145 class/ShmMap.class.php:258 +#: class/ShMapper.class.php:145 class/ShmMap.class.php:264 #: widget/ShMap.widget.php:84 msgid "Height" msgstr "" #: class/ShMapPointType.class.php:139 class/ShMapPointType.class.php:195 -#: class/ShMapper.class.php:144 class/ShmMap.class.php:263 +#: class/ShMapper.class.php:144 class/ShmMap.class.php:269 msgid "Width" msgstr "" -#: class/ShMapPointType.class.php:375 +#: class/ShMapPointType.class.php:374 msgid "None" msgstr "" @@ -144,8 +144,8 @@ msgstr "" msgid "Unknown error." msgstr "" -#: class/ShMapper.class.php:82 class/ShMapper.class.php:393 -#: class/ShMapper.class.php:394 +#: class/ShMapper.class.php:82 class/ShMapper.class.php:431 +#: class/ShMapper.class.php:432 msgid "Shmapper" msgstr "" @@ -168,49 +168,49 @@ msgid "all Map Requests" msgstr "" #: class/ShMapper.class.php:130 class/ShMapper.class.php:178 -#: class/ShMapperRequest.class.php:93 class/ShmMap.class.php:601 +#: class/ShMapperRequest.class.php:93 class/ShmMap.class.php:655 #: class/ShmPoint.class.php:265 msgid "Location" msgstr "" #: class/ShMapper.class.php:131 class/ShMapper.class.php:138 -#: class/ShMapper.class.php:176 class/ShMapper.class.php:599 -#: class/ShMapperRequest.class.php:89 class/ShmMap.class.php:601 +#: class/ShMapper.class.php:176 class/ShMapper.class.php:637 +#: class/ShMapperRequest.class.php:89 class/ShmMap.class.php:655 #: class/ShmPoint.class.php:261 msgid "Latitude" msgstr "" #: class/ShMapper.class.php:132 class/ShMapper.class.php:139 -#: class/ShMapper.class.php:177 class/ShMapper.class.php:597 -#: class/ShMapperRequest.class.php:91 class/ShmMap.class.php:601 +#: class/ShMapper.class.php:177 class/ShMapper.class.php:635 +#: class/ShMapperRequest.class.php:91 class/ShmMap.class.php:655 #: class/ShmPoint.class.php:263 msgid "Longitude" msgstr "" #: class/ShMapper.class.php:133 class/ShMapper.class.php:140 -#: class/ShMapper.class.php:601 +#: class/ShMapper.class.php:639 msgid "Zoom" msgstr "" #: class/ShMapper.class.php:141 class/ShmMap.class.php:118 -#: class/ShmMap.class.php:333 +#: class/ShmMap.class.php:339 msgid "Legend exists" msgstr "" -#: class/ShMapper.class.php:142 class/ShmMap.class.php:344 +#: class/ShMapper.class.php:142 class/ShmMap.class.php:350 msgid "Filters exists" msgstr "" #: class/ShMapper.class.php:143 class/ShmMap.class.php:113 -#: class/ShmMap.class.php:322 +#: class/ShmMap.class.php:328 msgid "Export csv" msgstr "" -#: class/ShMapper.class.php:146 class/ShmMap.class.php:279 +#: class/ShMapper.class.php:146 class/ShmMap.class.php:285 msgid "Map search" msgstr "" -#: class/ShMapper.class.php:147 class/ShmMap.class.php:293 +#: class/ShMapper.class.php:147 class/ShmMap.class.php:299 msgid "Map full screen" msgstr "" @@ -218,15 +218,15 @@ msgstr "" msgid "Map zoom slider" msgstr "" -#: class/ShMapper.class.php:149 class/ShmMap.class.php:287 +#: class/ShMapper.class.php:149 class/ShmMap.class.php:293 msgid "Map layer switcher" msgstr "" -#: class/ShMapper.class.php:150 class/ShmMap.class.php:301 +#: class/ShMapper.class.php:150 class/ShmMap.class.php:307 msgid "Lock zoom and drag" msgstr "" -#: class/ShMapper.class.php:151 class/ShmMap.class.php:297 +#: class/ShMapper.class.php:151 class/ShmMap.class.php:303 msgid "Formating Marker to cluster" msgstr "" @@ -239,7 +239,7 @@ msgid "Form exists" msgstr "" #: class/ShMapper.class.php:155 class/ShmMap.class.php:128 -#: class/ShmMap.class.php:407 +#: class/ShmMap.class.php:456 msgid "Notify owner of Map" msgstr "" @@ -251,7 +251,7 @@ msgstr "" msgid "Form generator" msgstr "" -#: class/ShMapper.class.php:158 class/ShmMap.class.php:427 +#: class/ShMapper.class.php:158 class/ShmMap.class.php:476 msgid "Users can leave their contact details for feedback." msgstr "" @@ -259,7 +259,7 @@ msgstr "" msgid "Unclude Personal name" msgstr "" -#: class/ShMapper.class.php:160 class/ShmMap.class.php:440 +#: class/ShMapper.class.php:160 class/ShmMap.class.php:489 msgid "Personal name" msgstr "" @@ -283,7 +283,7 @@ msgstr "" msgid "Unclude Personal phone" msgstr "" -#: class/ShMapper.class.php:166 class/ShmMap.class.php:472 +#: class/ShMapper.class.php:166 class/ShmMap.class.php:521 msgid "Personal phone" msgstr "" @@ -299,7 +299,7 @@ msgstr "" #: class/ShMapper.class.php:175 class/ShmForm.class.php:229 #: class/ShmForm.class.php:301 class/ShmForm.class.php:374 -#: class/ShmMap.class.php:601 class/ShmPoint.class.php:323 +#: class/ShmMap.class.php:655 class/ShmPoint.class.php:323 msgid "Description" msgstr "" @@ -333,20 +333,20 @@ msgstr "" msgid "Accessed User" msgstr "" -#: class/ShMapper.class.php:280 class/ShMapper.class.php:372 +#: class/ShMapper.class.php:284 class/ShMapper.class.php:393 #: class/ShMapperDrive.class.php:125 msgid "Attantion" msgstr "" -#: class/ShMapper.class.php:281 class/ShMapper.class.php:373 +#: class/ShMapper.class.php:285 class/ShMapper.class.php:394 msgid "Send" msgstr "" -#: class/ShMapper.class.php:282 class/ShMapper.class.php:374 +#: class/ShMapper.class.php:286 class/ShMapper.class.php:395 msgid "Close" msgstr "" -#: class/ShMapper.class.php:283 class/ShMapper.class.php:375 +#: class/ShMapper.class.php:287 class/ShMapper.class.php:396 msgid "" "Error: the form is not associated with the card. To link a map and a form, " "there should be 2 shortcodes on one page (map - [shmMap id = '6' map = " @@ -354,178 +354,178 @@ msgid "" "uniq = 'for example, 777']), in which the uniq parameter will match" msgstr "" -#: class/ShMapper.class.php:284 +#: class/ShMapper.class.php:288 msgid "Are you shure?" msgstr "" -#: class/ShMapper.class.php:406 class/ShMapper.class.php:407 -#: class/ShMapper.class.php:435 class/ShMapperDrive.class.php:435 +#: class/ShMapper.class.php:444 class/ShMapper.class.php:445 +#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:435 msgid "Settings" msgstr "" -#: class/ShMapper.class.php:444 +#: class/ShMapper.class.php:482 msgid "Map API" msgstr "" -#: class/ShMapper.class.php:457 +#: class/ShMapper.class.php:495 msgid "OpenStreetMap" msgstr "" -#: class/ShMapper.class.php:465 +#: class/ShMapper.class.php:503 msgid "Yandex.Maps API Key" msgstr "" -#: class/ShMapper.class.php:467 +#: class/ShMapper.class.php:505 msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." msgstr "" -#: class/ShMapper.class.php:467 +#: class/ShMapper.class.php:505 msgid "Learn more here:" msgstr "" -#: class/ShMapper.class.php:478 +#: class/ShMapper.class.php:516 msgid "Interactive" msgstr "" -#: class/ShMapper.class.php:486 +#: class/ShMapper.class.php:524 msgid "Enable global mode for non-interactive maps" msgstr "" -#: class/ShMapper.class.php:490 +#: class/ShMapper.class.php:528 msgid "" "users will not be able to add posts to any map. If the checkbox is enabled, " "the interactivity block does not even appear on the maps." msgstr "" -#: class/ShMapper.class.php:498 +#: class/ShMapper.class.php:536 msgid "Pre-modertion from Map owner." msgstr "" -#: class/ShMapper.class.php:502 +#: class/ShMapper.class.php:540 msgid "all messages will be added in the Draft status" msgstr "" -#: class/ShMapper.class.php:506 +#: class/ShMapper.class.php:544 msgid "" "ATTENTION: disable this option only at your own peril and risk, because " "there is a threat of spam attacks" msgstr "" -#: class/ShMapper.class.php:514 +#: class/ShMapper.class.php:552 msgid "Reload page after User send request." msgstr "" -#: class/ShMapper.class.php:526 +#: class/ShMapper.class.php:564 msgid "Protection" msgstr "" -#: class/ShMapper.class.php:533 +#: class/ShMapper.class.php:571 msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" msgstr "" -#: class/ShMapper.class.php:542 +#: class/ShMapper.class.php:580 #, php-format msgid "" "What is Google reCAPTCHA? How recived keys for your site? See %sthis " "instruction%s." msgstr "" -#: class/ShMapper.class.php:546 +#: class/ShMapper.class.php:584 msgid "" "Your reCAPTCHA doesn't work yet. In order to make it work, please get the " "API keys at google.com/recaptcha" msgstr "" -#: class/ShMapper.class.php:558 +#: class/ShMapper.class.php:596 msgid "Vocabulary" msgstr "" -#: class/ShMapper.class.php:562 +#: class/ShMapper.class.php:600 msgid "Save personal data garantee" msgstr "" -#: class/ShMapper.class.php:568 +#: class/ShMapper.class.php:606 msgid "Successful send map request" msgstr "" -#: class/ShMapper.class.php:574 +#: class/ShMapper.class.php:612 msgid "Error send map request" msgstr "" -#: class/ShMapper.class.php:588 class/ShMapper.class.php:611 -#: class/ShMapper.class.php:651 +#: class/ShMapper.class.php:626 class/ShMapper.class.php:649 +#: class/ShMapper.class.php:689 msgid "Coordinates" msgstr "" -#: class/ShMapper.class.php:595 +#: class/ShMapper.class.php:633 msgid "Set default coordinates" msgstr "" -#: class/ShMapper.class.php:707 +#: class/ShMapper.class.php:745 msgid "Wizzard" msgstr "" -#: class/ShMapper.class.php:710 +#: class/ShMapper.class.php:748 msgid "Restart wizzard" msgstr "" -#: class/ShMapper.class.php:757 class/ShMapper.class.php:765 +#: class/ShMapper.class.php:795 class/ShMapper.class.php:803 msgid "Close wizzard" msgstr "" -#: class/ShMapper.class.php:758 class/ShMapper.class.php:764 +#: class/ShMapper.class.php:796 class/ShMapper.class.php:802 msgid "Go to current page" msgstr "" -#: class/ShMapper.class.php:761 class/ShMapper_ajax.class.php:172 +#: class/ShMapper.class.php:799 class/ShMapper_ajax.class.php:172 msgid "Next step" msgstr "" -#: class/ShMapper.class.php:763 +#: class/ShMapper.class.php:801 msgid "Prevous step" msgstr "" -#: class/ShMapper.class.php:815 +#: class/ShMapper.class.php:853 msgid "Welcome to the Shmapper Configuration Wizard" msgstr "" -#: class/ShMapper.class.php:816 +#: class/ShMapper.class.php:854 msgid "" "First, you need to specify the general settings. Click on the button to go to the desired " "section" msgstr "" -#: class/ShMapper.class.php:822 +#: class/ShMapper.class.php:860 msgid "Configure Shmapper" msgstr "" -#: class/ShMapper.class.php:823 +#: class/ShMapper.class.php:861 msgid "" "Change the settings that do not suit you. To connect reCAPTCHA, you need to " "create an account on Google.com" msgstr "" -#: class/ShMapper.class.php:829 +#: class/ShMapper.class.php:867 msgid "Create your first map" msgstr "" -#: class/ShMapper.class.php:830 +#: class/ShMapper.class.php:868 msgid "Click the \"Add Map\" button at the very top of the page" msgstr "" -#: class/ShMapper.class.php:836 class/ShMapper.class.php:844 +#: class/ShMapper.class.php:874 class/ShMapper.class.php:882 msgid "New map" msgstr "" -#: class/ShMapper.class.php:837 +#: class/ShMapper.class.php:875 msgid "" "Select a visible area on the map.

    Create the first Marker by pointing to " "the desired location on the map with the right mouse button.

    Fill in the " "fields and click \"Create\"." msgstr "" -#: class/ShMapper.class.php:845 +#: class/ShMapper.class.php:883 msgid "" "Fill in the provided fields in sequence. In the \"Request Form\" section, " "create a simple feedback form by which Visitors will be able to inform you " @@ -1092,139 +1092,163 @@ msgstr "" msgid "Step 2. May anover Users add information for Map." msgstr "" -#: class/ShmMap.class.php:243 +#: class/ShmMap.class.php:249 msgid "1.1. Pan map and choose zoom" msgstr "" -#: class/ShmMap.class.php:255 +#: class/ShmMap.class.php:261 msgid "1.2. Set size for map's div (per pixels)" msgstr "" -#: class/ShmMap.class.php:260 class/ShmMap.class.php:265 +#: class/ShmMap.class.php:266 class/ShmMap.class.php:271 msgid "Empty for " msgstr "" -#: class/ShmMap.class.php:275 +#: class/ShmMap.class.php:281 msgid "1.3. Include interface" msgstr "" -#: class/ShmMap.class.php:283 +#: class/ShmMap.class.php:289 msgid "Map zoom slider enabled" msgstr "" -#: class/ShmMap.class.php:305 +#: class/ShmMap.class.php:311 msgid "Choose layers" msgstr "" -#: class/ShmMap.class.php:319 +#: class/ShmMap.class.php:325 msgid "1.4. May User download data in *.csv?" msgstr "" -#: class/ShmMap.class.php:330 +#: class/ShmMap.class.php:336 msgid "1.5. Will the legend be displayed?" msgstr "" -#: class/ShmMap.class.php:341 +#: class/ShmMap.class.php:347 msgid "1.6. Will Marker type filter be displayed?" msgstr "" -#: class/ShmMap.class.php:352 +#: class/ShmMap.class.php:357 msgid "1.7. Default Marker icon" msgstr "" -#: class/ShmMap.class.php:357 +#: class/ShmMap.class.php:362 msgid "Recommended size is 64х64 px, format is .png" msgstr "" +#: class/ShmMap.class.php:373 +msgid "1.8. Highlight the country on the map" +msgstr "" + +#: class/ShmMap.class.php:377 +msgid "Loading countries ... " +msgstr "" + +#: class/ShmMap.class.php:380 +msgid "Select country" +msgstr "" + #: class/ShmMap.class.php:389 +msgid "Choose map overlay color" +msgstr "" + +#: class/ShmMap.class.php:395 +msgid "Choose country border color" +msgstr "" + +#: class/ShmMap.class.php:401 +msgid "Overlay opacity" +msgstr "" + +#: class/ShmMap.class.php:438 msgid "Enable crowdsourcing function (free add Users new Markers)" msgstr "" -#: class/ShmMap.class.php:394 +#: class/ShmMap.class.php:443 msgid "2.1. What is the name of your information form?" msgstr "" -#: class/ShmMap.class.php:398 +#: class/ShmMap.class.php:447 msgid "For example «All beaches by the river»" msgstr "" -#: class/ShmMap.class.php:404 +#: class/ShmMap.class.php:453 msgid "2.2. Will I notify the author about new posts?" msgstr "" -#: class/ShmMap.class.php:412 +#: class/ShmMap.class.php:461 msgid "2.3. What information can users enter?" msgstr "" -#: class/ShmMap.class.php:415 +#: class/ShmMap.class.php:464 msgid "" "You can create your own forms using form elements: & laquo; Text line & " "raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & " "laquo; Categories of Markers & raquo;" msgstr "" -#: class/ShmMap.class.php:424 +#: class/ShmMap.class.php:473 msgid "2.4. Can users leave their contact information?" msgstr "" -#: class/ShmMap.class.php:432 +#: class/ShmMap.class.php:481 msgid "2.5. What data users will have to put?" msgstr "" -#: class/ShmMap.class.php:435 class/ShmMap.class.php:451 -#: class/ShmMap.class.php:467 +#: class/ShmMap.class.php:484 class/ShmMap.class.php:500 +#: class/ShmMap.class.php:516 msgid "Include" msgstr "" -#: class/ShmMap.class.php:445 class/ShmMap.class.php:461 -#: class/ShmMap.class.php:477 +#: class/ShmMap.class.php:494 class/ShmMap.class.php:510 +#: class/ShmMap.class.php:526 msgid "Required" msgstr "" -#: class/ShmMap.class.php:456 +#: class/ShmMap.class.php:505 msgid "Personal email" msgstr "" -#: class/ShmMap.class.php:670 +#: class/ShmMap.class.php:724 msgid "What do with placemarks of deleting Map?" msgstr "" -#: class/ShmMap.class.php:675 +#: class/ShmMap.class.php:729 msgid "Delete all Points" msgstr "" -#: class/ShmMap.class.php:681 +#: class/ShmMap.class.php:735 msgid "Escape all Points without Owner Map" msgstr "" -#: class/ShmMap.class.php:687 +#: class/ShmMap.class.php:741 msgid "Switch all Points to anover Map" msgstr "" -#: class/ShmMap.class.php:703 +#: class/ShmMap.class.php:757 msgid "delete" msgstr "" -#: class/ShmMap.class.php:782 +#: class/ShmMap.class.php:836 #, php-format msgid "Succesfuly delete map width %s points" msgstr "" -#: class/ShmMap.class.php:787 +#: class/ShmMap.class.php:841 #, php-format msgid "Succesfuly delete map and %s points are orphans now" msgstr "" -#: class/ShmMap.class.php:794 +#: class/ShmMap.class.php:848 #, php-format msgid "Succesfuly delete map and %s points migrates to %s" msgstr "" -#: class/ShmMap.class.php:826 +#: class/ShmMap.class.php:880 msgid "Yandex Map" msgstr "" -#: class/ShmMap.class.php:848 +#: class/ShmMap.class.php:902 msgid "Open Street Map" msgstr "" @@ -1321,7 +1345,7 @@ msgstr "" msgid "Submit" msgstr "" -#: tpl/shmMap.php:88 +#: tpl/shmMap.php:92 #, php-format msgid "download %s.csv" msgstr "" From 930eba3f0ffe33dd5b94493254a3bde118162c91 Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 21 Feb 2021 18:19:21 +0200 Subject: [PATCH 091/220] Update select country and import google sheet. --- assets/css/ShMapper.css | 699 ++++++++++++++++--------------- assets/js/ShMapper.admin.js | 9 + assets/js/ShMapper.yandex.js | 219 +++++----- assets/js/region-selector.min.js | 349 --------------- class/ShMapPointType.class.php | 11 +- class/ShMapper.class.php | 48 ++- class/ShMapperDrive.class.php | 22 +- class/ShmMap.class.php | 90 +++- class/ShmPoint.class.php | 2 +- tpl/input_file_form.php | 29 +- tpl/shmMap.php | 79 +++- 11 files changed, 697 insertions(+), 860 deletions(-) delete mode 100644 assets/js/region-selector.min.js diff --git a/assets/css/ShMapper.css b/assets/css/ShMapper.css index 7d74078..120dd40 100644 --- a/assets/css/ShMapper.css +++ b/assets/css/ShMapper.css @@ -43,8 +43,8 @@ .shm_nowrap { text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; + overflow: hidden; + white-space: nowrap; } .shmw-100 { @@ -76,15 +76,15 @@ } .leaflet-osm-point:after { - content: ""; - width: 35px; - height: 35px; - background-image: url(../img/marker-shadow.png); - background-size: cover; - position: absolute; - top: -5px; - left: 5px; - z-index: -100; + content: ""; + width: 35px; + height: 35px; + background-image: url(../img/marker-shadow.png); + background-size: cover; + position: absolute; + top: -5px; + left: 5px; + z-index: -100; } @keyframes wobblehor { @@ -134,91 +134,91 @@ } .shm_wizzard_closed { - position: absolute; - z-index: 20000; - left: 160px; - width: 25px; - height: 25px; - cursor: pointer; - background: rgba(0,0,0,0); + position: absolute; + z-index: 20000; + left: 160px; + width: 25px; + height: 25px; + cursor: pointer; + background: rgba(0,0,0,0); display:none; } .shm_wizzard_closed:before { - left: -12px; - border: 12px solid transparent; - content: " "; - position: absolute; - pointer-events: none; - border-right-color: #0073aa; - top: 8px; - margin-top: -8px; - width: 0; - height: 1px; + left: -12px; + border: 12px solid transparent; + content: " "; + position: absolute; + pointer-events: none; + border-right-color: #0073aa; + top: 8px; + margin-top: -8px; + width: 0; + height: 1px; } .shm_wizzard_closed:after { - left: 12px; - border: 12px solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - border-left-color: #0073aa; - top: 8px; - margin-top: -8px; - width: 0; - height: 1px; + left: 12px; + border: 12px solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-left-color: #0073aa; + top: 8px; + margin-top: -8px; + width: 0; + height: 1px; } .shm_wizzard { - position: absolute; - z-index: 20000; - top: 17px; - right: -297px; - padding: 20px 20px 35px 20px; - --border-right: 6px solid #0073aa; - background: #0073aa; - color: #ddf1fb; - font-family: Open Sans, Arial, sans serif; - -webkit-box-shadow: 0 3px 5px 1px rgba(0,0,0,0.5); - box-shadow: 0 3px 5px 1px rgba(0,0,0,0.5); - width: 250px; - margin-top: -25px; - -webkit-border-radius: 6px; - border-radius: 6px; + position: absolute; + z-index: 20000; + top: 17px; + right: -297px; + padding: 20px 20px 35px 20px; + --border-right: 6px solid #0073aa; + background: #0073aa; + color: #ddf1fb; + font-family: Open Sans, Arial, sans serif; + -webkit-box-shadow: 0 3px 5px 1px rgba(0,0,0,0.5); + box-shadow: 0 3px 5px 1px rgba(0,0,0,0.5); + width: 250px; + margin-top: -25px; + -webkit-border-radius: 6px; + border-radius: 6px; animation-name: wobblehor; - animation-duration: 1s; + animation-duration: 1s; } .shm_wizzard:before { - left: -16px; - border: 8px solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - border-right-color: #0073aa; - top: 25px; - margin-top: -8px; + left: -16px; + border: 8px solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-right-color: #0073aa; + top: 25px; + margin-top: -8px; } .shm_wizzard:after { z-index: -1; - left: 50%; - bottom: -20px; - content: " "; - height: 60px; - width: 60px; - background: #0073aa; - position: absolute; - pointer-events: none; - margin-left: -30px; - border-radius: 100%; - -webkit-border-radius: 100%; + left: 50%; + bottom: -20px; + content: " "; + height: 60px; + width: 60px; + background: #0073aa; + position: absolute; + pointer-events: none; + margin-left: -30px; + border-radius: 100%; + -webkit-border-radius: 100%; } .shm_wizzard_close { @@ -226,8 +226,8 @@ top:2px; right:2px; padding:3px; - -webkit-border-radius: 4px; - border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; background:transparent; } .shm_wizzard_close:hover @@ -251,7 +251,7 @@ padding-top:15px; font-size:0.6rem; font-weight:500; - text-align: right; + text-align: right; } .shm_wizzard_footer a { @@ -261,30 +261,30 @@ .shm_wizzard_footer a[name='shm_wclose'] { position: absolute; - text-align: right; - right: 25px; + text-align: right; + right: 25px; } .shm_wizzard_footer a[name='shm_wcurrent'] { position: absolute; - text-align: right; - left: 25px; + text-align: right; + left: 25px; } .shm_wizzard_footer a.dashicons-controls-play { - font-size: 2rem; - position: absolute; - left: 50%; - margin-left: -15px; - margin-top: 15px; + font-size: 2rem; + position: absolute; + left: 50%; + margin-left: -15px; + margin-top: 15px; } .shm_wizzard_line { display: flex; - position: relative; - padding: 15px 2px; - justify-content: space-between; + position: relative; + padding: 15px 2px; + justify-content: space-between; } .shm_wizzard_line:before { @@ -298,15 +298,15 @@ } .shm_wizzard_line>div { - display: inline-flex; - position: relative; - width: 30px; - height: 30px; - background-color: #0073aa; - border: 1px solid #aad9fb; - text-align: center; - border-radius: 100%; - -webkit-border-radius: 100%; + display: inline-flex; + position: relative; + width: 30px; + height: 30px; + background-color: #0073aa; + border: 1px solid #aad9fb; + text-align: center; + border-radius: 100%; + -webkit-border-radius: 100%; } .shm_wizzard_line>div>div { @@ -314,9 +314,9 @@ top:50%; left:0%; margin-top:-10px; - color: #0073aa; + color: #0073aa; font-weight:900; - color: #ddf1fb; + color: #ddf1fb; width:100%; text-align:center; } @@ -326,32 +326,32 @@ } .shm_wizzard_line>div.active>div { - color: #0073aa; + color: #0073aa; } .shm_warrow, .shm_warrow2 { - overflow: visible; - display: inline-block; - width: 30px; - height: 30px; - font-size: 30px; - line-height: 1; - font-family: dashicons; - text-decoration: inherit; - font-weight: 400; - font-style: normal; - vertical-align: top; - text-align: center; - transition: color .1s ease-in; - -webkit-font-smoothing: antialiased; - position: absolute; - background-color: #EEE; - padding: 5px; - color: #0073aa; - border-radius: 40px; - -webkit-border-radius: 40px; + overflow: visible; + display: inline-block; + width: 30px; + height: 30px; + font-size: 30px; + line-height: 1; + font-family: dashicons; + text-decoration: inherit; + font-weight: 400; + font-style: normal; + vertical-align: top; + text-align: center; + transition: color .1s ease-in; + -webkit-font-smoothing: antialiased; + position: absolute; + background-color: #EEE; + padding: 5px; + color: #0073aa; + border-radius: 40px; + -webkit-border-radius: 40px; animation-name: roll; - animation-duration: 1s; + animation-duration: 1s; animation-iteration-count:infinite; text-shadow: 0px 2px 3px #4A4A4A; animation-timing-function: ease-out; @@ -376,53 +376,53 @@ } .shm-clr { - width: 20px; - height: 20px; - position: relative; - background: #777; - position: absolute; - top: 15px; - left: 15px; + width: 20px; + height: 20px; + position: relative; + background: #777; + position: absolute; + top: 15px; + left: 15px; -webkit-border-radius: 20px; border-radius: 20px; } .shm-clr-little { - width: 19px; - height: 19px; - position: relative; - background: #777; - position: absolute; - top: 3px; - left: 3px; + width: 19px; + height: 19px; + position: relative; + background: #777; + position: absolute; + top: 3px; + left: 3px; -webkit-border-radius: 19px; border-radius: 19px; } .shm-color-crcl { width: 20px; - height: 20px; - background: #777; - --position: absolute; - --top: 6px; - --left: 6px; + height: 20px; + background: #777; + --position: absolute; + --top: 6px; + --left: 6px; margin: 6px; - -webkit-border-radius: 20px; - border-radius: 20px; + -webkit-border-radius: 20px; + border-radius: 20px; } .shm-csv-icon { - width: 30px; - height: 30px; - background-image: url(../img/csv_icon.png); - background-size: cover; - background-position: center; - background-repeat: no-repeat; - position: relative; - display: block; - float: right; - border: 0!important; - z-index: 2; + width: 30px; + height: 30px; + background-image: url(../img/csv_icon.png); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + position: relative; + display: block; + float: right; + border: 0!important; + z-index: 2; opacity:0.9; } .shm-csv-icon:hover @@ -431,8 +431,8 @@ } .shm-map-panel { - z-index: 3; - height: 30px; + z-index: 3; + height: 30px; text-align:right; } .shm-bubble @@ -547,12 +547,12 @@ .IDs { padding:0 10px 0 0!important; - margin: 0px; - background: #333; - color: #FFF; - font-size: 10px; - display: inline-block; - position: relative; + margin: 0px; + background: #333; + color: #FFF; + font-size: 10px; + display: inline-block; + position: relative; text-shadow: 1px 1px 1px #000000; } @@ -654,92 +654,92 @@ .shm-row { display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -15px; - margin-left: -15px; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; } .sh, .shm-1, .shm-10, .shm-11, .shm-12, .shm-2, .shm-3, .shm-4, .shm-5, .shm-6, .shm-7, .shm-8, .shm-9, .shm-auto, .shm-lg, .shm-lg-1, .shm-lg-10, .shm-lg-11, .shm-lg-12, .shm-lg-2, .shm-lg-3, .shm-lg-4, .shm-lg-5, .shm-lg-6, .shm-lg-7, .shm-lg-8, .shm-lg-9, .shm-lg-auto, .shm-md, .shm-md-1, .shm-md-10, .shm-md-11, .shm-md-12, .shm-md-2, .shm-md-3, .shm-md-4, .shm-md-5, .shm-md-6, .shm-md-7, .shm-md-8, .shm-md-9, .shm-md-auto, .shm-sm, .shm-sm-1, .shm-sm-10, .shm-sm-11, .shm-sm-12, .shm-sm-2, .shm-sm-3, .shm-sm-4, .shm-sm-5, .shm-sm-6, .shm-sm-7, .shm-sm-8, .shm-sm-9, .shm-sm-auto, .shm-xl, .shm-xl-1, .shm-xl-10, .shm-xl-11, .shm-xl-12, .shm-xl-2, .shm-xl-3, .shm-xl-4, .shm-xl-5, .shm-xl-6, .shm-xl-7, .shm-xl-8, .shm-xl-9, .shm-xl-auto { - position: relative; - width: 100%; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; box-sizing: border-box; } .shm-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; - max-width: 100%; + max-width: 100%; } .shm-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; } .shm-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; } .shm-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } .shm-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; } .shm-7 { - -ms-flex: 0 0 58.3333333%; - flex: 0 0 58.3333333%; - max-width: 58.3333333%; + -ms-flex: 0 0 58.3333333%; + flex: 0 0 58.3333333%; + max-width: 58.3333333%; } .shm-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; - max-width: 50%; + max-width: 50%; } .shm-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; } .shm-4 { -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; } .shm-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } .shm-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; } .shm-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; } .shm-color-grey @@ -782,19 +782,19 @@ .shm-form, .sh-form { - width: 100%; - margin-bottom: 3px; - flex-direction: column; - display: flex; - justify-content: center; - background-color: rgba(0,0,0,0.05); - border: 1px solid rgba(0,0,0,0.025); - padding: 7px; + width: 100%; + margin-bottom: 3px; + flex-direction: column; + display: flex; + justify-content: center; + background-color: rgba(0,0,0,0.05); + border: 1px solid rgba(0,0,0,0.025); + padding: 7px; } .sh-form:disabled { color:#555; - background: rgba(0, 0, 0, 0.05); + background: rgba(0, 0, 0, 0.05); } select.sh-form { @@ -807,15 +807,15 @@ div.sh-form } .shm-form-file { - padding: 5px 5px; - position: relative; - border: 1px solid rgba(162, 159, 159, 0.25); - background-color: rgba(0, 0, 0, 0.125); - margin: 0 0 5px 0; - font-size: 1rem; - color: #a5a2a2; - height: 63px; - display: flex; + padding: 5px 5px; + position: relative; + border: 1px solid rgba(162, 159, 159, 0.25); + background-color: rgba(0, 0, 0, 0.125); + margin: 0 0 5px 0; + font-size: 1rem; + color: #a5a2a2; + height: 63px; + display: flex; overflow:hidden; width:100%; } @@ -831,11 +831,11 @@ div.sh-form .shm-form-file > input[type="file"] { opacity: 0; - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; } .shm-form-element { @@ -853,10 +853,10 @@ div.sh-form .shm-description { opacity: 0.7; - font-size: 0.75rem; - margin-bottom: 15px; - vertical-align: top; - margin-top: -5px; + font-size: 0.75rem; + margin-bottom: 15px; + vertical-align: top; + margin-top: -5px; } ul.shm-card { @@ -865,17 +865,17 @@ ul.shm-card ul.shm-card li { padding: 15px; - border-bottom: 1px solid rgba(0, 0, 0, 0.14); - flex-direction: column; - background-color: rgba(0, 0, 0, 0.1); - display: flex; - justify-content: center; - margin: 0; + border-bottom: 1px solid rgba(0, 0, 0, 0.14); + flex-direction: column; + background-color: rgba(0, 0, 0, 0.1); + display: flex; + justify-content: center; + margin: 0; } .my_image_delete { padding: 3px!important; - margin: 3px!important; + margin: 3px!important; } ul.shm-card li:nth-of-type(even) { @@ -896,15 +896,15 @@ ul.shm-card li:nth-of-type(even) .sh-align-middle { flex-direction: column; - display: flex; - justify-content: center; + display: flex; + justify-content: center; } .shm_container { display:block; position:relative; height:400px; - border:1px solid #111; + border:1px solid #ccc; } .column-type, .column-thumb @@ -936,14 +936,14 @@ ul.shm-card li:nth-of-type(even) .shm-notify2:after { content: attr(title); - position: absolute; - top: -66px; - left: 50%; - margin-left: -20px; - width: 100px; - text-align: left; - font-size: 12px; - font-family: sans-serif; + position: absolute; + top: -66px; + left: 50%; + margin-left: -20px; + width: 100px; + text-align: left; + font-size: 12px; + font-family: sans-serif; color: #6c757d; pointer-events: none; -moz-transform: rotate(-33deg); @@ -994,8 +994,8 @@ tfoot .shm-notify2:after .shm-form-placemarks { display: inline-block; - padding: 5px 0 0 0 ; - position: relative; + padding: 5px 0 0 0 ; + position: relative; } .shm-type-icon { @@ -1095,7 +1095,7 @@ tfoot .shm-notify2:after background-color:#222; display:block; z-index:1; - --width: 100%; + --width: 100%; } .shm-inline { @@ -1105,7 +1105,7 @@ tfoot .shm-notify2:after { display:inline-block; padding:2px; - line-height: 1; + line-height: 1; min-width:23px; } .shm-icon img @@ -1156,7 +1156,7 @@ tfoot .shm-notify2:after color:#FFF; pointer-events:none; animation-name: wobble; - animation-duration: 1s; + animation-duration: 1s; } .shm-alert { @@ -1236,18 +1236,18 @@ input[type=radio].radio:not(checked) + label:before } input[type=radio].radio:not(checked) + label:after { - content: ''; - position: absolute; - top: 10px; - left: 5px; - width: 14px; - height: 14px; - -webkit-border-radius: 14px; - border-radius: 14px; - background: #8ca0ce; - box-shadow: inset 0 1px 1px rgba(0,0,0,.5); - opacity: 0; - transition: all .2s; + content: ''; + position: absolute; + top: 10px; + left: 5px; + width: 14px; + height: 14px; + -webkit-border-radius: 14px; + border-radius: 14px; + background: #8ca0ce; + box-shadow: inset 0 1px 1px rgba(0,0,0,.5); + opacity: 0; + transition: all .2s; } input[type=radio].radio:checked + label:after { @@ -1294,18 +1294,18 @@ input[type=checkbox].checkbox:not(checked) + label:before } input[type=checkbox].checkbox:not(checked) + label:after { - content: ''; - position: absolute; - top: 10px; - left: 5px; - width: 14px; - height: 14px; - -webkit-border-radius: 14px; - border-radius: 14px; - background: #8ca0ce; - box-shadow: inset 0 1px 1px rgba(0,0,0,.5); - opacity: 0; - transition: all .2s; + content: ''; + position: absolute; + top: 10px; + left: 5px; + width: 14px; + height: 14px; + -webkit-border-radius: 14px; + border-radius: 14px; + background: #8ca0ce; + box-shadow: inset 0 1px 1px rgba(0,0,0,.5); + opacity: 0; + transition: all .2s; } input[type=checkbox].checkbox:checked + label:after { @@ -1319,11 +1319,11 @@ input[type=checkbox].ganre_checkbox2, input[type=radio].ganre_checkbox2 { position: absolute; - opacity: 0; - width: 0; - min-width: 0px; - height: 0; - pointer-events: none; + opacity: 0; + width: 0; + min-width: 0px; + height: 0; + pointer-events: none; } input[type=checkbox].ganre_checkbox:not(.checked) + label , input[type=checkbox].ganre_checkbox.checked + label, @@ -1335,12 +1335,12 @@ input[type=checkbox].ganre_checkbox2:not(checked) + label, input[type=checkbox].ganre_checkbox2:checked + label, input[type=radio].ganre_checkbox2:not(checked) + label { - position: relative; - padding: 0 0 0 56px; - height: 55px; - vertical-align: middle; - display: table-cell; - margin-bottom: 2px; + position: relative; + padding: 0 0 0 56px; + height: 55px; + vertical-align: middle; + display: table-cell; + margin-bottom: 2px; } /* Оформление первой части чекбокса в выключенном состоянии (фон). */ input[type=checkbox].ganre_checkbox:not(.checked) + label:before , @@ -1391,7 +1391,7 @@ input[type=radio].ganre_checkbox2:not(checked) + label img top:14px; left:15px; -webkit-filter: grayscale(100%); /* Safari 6.0 - 9.0 */ - filter: grayscale(100%); + filter: grayscale(100%); opacity:0.5; -webkit-transition: all 300ms ease-out; -moz-transition: all 300ms ease-out; @@ -1407,7 +1407,7 @@ input[type=checkbox].ganre_checkbox2:checked + label img, input[type=radio].ganre_checkbox2:checked + label img { -webkit-filter: grayscale(0%); /* Safari 6.0 - 9.0 */ - filter: grayscale(0%); + filter: grayscale(0%); opacity:1; } @@ -1415,8 +1415,8 @@ input[type=checkbox].ganre_checkbox2:not(checked) + label, input[type=checkbox].ganre_checkbox2:checked + label, input[type=radio].ganre_checkbox2:not(checked) + label { - padding: 0 0 0 28px; - height: 33px; + padding: 0 0 0 28px; + height: 33px; -webkit-border-radius: 0px; border-radius: 0px; } @@ -1441,7 +1441,7 @@ input[type=radio].ganre_checkbox2:not(checked) + label img .shm-muffle { -webkit-filter: grayscale(90%); /* Safari 6.0 - 9.0 */ - filter: grayscale(90%); + filter: grayscale(90%); opacity:0.6; } .shm-no-uline, @@ -1449,9 +1449,9 @@ input[type=radio].ganre_checkbox2:not(checked) + label img { text-decoration:none!important; border-bottom: none!important; - position: absolute; - bottom: 4px; - left: 4px; + position: absolute; + bottom: 4px; + left: 4px; } .ballon_header { @@ -1468,7 +1468,7 @@ input[type=radio].ganre_checkbox2:not(checked) + label img /**/ .leaflet-pane { - z-index: 1!important; + z-index: 1!important; } #tagsdiv-shm_point_type { @@ -1476,13 +1476,13 @@ input[type=radio].ganre_checkbox2:not(checked) + label img } .leaflet-top, .leaflet-bottom { - z-index: 3!important; + z-index: 3!important; } .the-content p, .the-content iframe, .the-content blockquote { - margin-bottom: 0.5rem!important; + margin-bottom: 0.5rem!important; } .ymaps-2-1-68-balloon__close+.ymaps-2-1-68-balloon__content { @@ -1502,14 +1502,14 @@ input[type=radio].ganre_checkbox2:not(checked) + label img background-size:26px 52px; } .leaflet-touch .leaflet-control-fullscreen a { - background-position: 2px 2px; - } + background-position: 2px 2px; + } .leaflet-fullscreen-on .leaflet-control-fullscreen a { - background-position:0 -26px; - } + background-position:0 -26px; + } .leaflet-touch.leaflet-fullscreen-on .leaflet-control-fullscreen a { - background-position: 2px -24px; - } + background-position: 2px -24px; + } /* Do not combine these two rules; IE will break. */ .leaflet-container:-webkit-full-screen @@ -1537,10 +1537,10 @@ input[type=radio].ganre_checkbox2:not(checked) + label img (-webkit-min-device-pixel-ratio:2), (min-resolution:192dpi) { - .leaflet-control-fullscreen a + .leaflet-control-fullscreen a { - background-image:url(../img/fullscreen@2x.png); - } + background-image:url(../img/fullscreen@2x.png); + } } /* END FULLSCREEN @@ -1600,7 +1600,7 @@ input[type=radio].ganre_checkbox2:not(checked) + label img } .shm-type-icon.shmapperMarkerSelected { - border: 1px solid #111111; + border: 1px solid #111111; } /* OSM cloud */ @@ -1611,44 +1611,87 @@ input[type=radio].ganre_checkbox2:not(checked) + label img } .shm_container .leaflet-popup .leaflet-popup-content-wrapper .leaflet-popup-content { - overflow: hidden; + overflow: hidden; } .shm_container .leaflet-popup .leaflet-popup-content-wrapper .leaflet-popup-content .shml-body { - overflow: auto; - padding-right: 5px; + overflow: auto; + padding-right: 5px; } .leaflet-popup-content .shml-popup-scroll::-webkit-scrollbar-track { - -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); - border-radius: 6px; - background-color: #F5F5F5; + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); + border-radius: 6px; + background-color: #F5F5F5; } .leaflet-popup-content .shml-popup-scroll::-webkit-scrollbar { - width: 8px; - background-color: #F5F5F5; + width: 8px; + background-color: #F5F5F5; } .leaflet-popup-content .shml-popup-scroll::-webkit-scrollbar-thumb { - border-radius: 6px; - -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); - background-color: #888888; + border-radius: 6px; + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); + background-color: #888888; } /* admin footer */ .shmapper-admin-footer { - display: block; - margin-top: 16px; - margin-bottom: 8px; + display: block; + margin-top: 16px; + margin-bottom: 8px; } .post-type-shm_map #footer-upgrade, .post-type-shm_point #footer-upgrade, .post-type-shm_request #footer-upgrade, .shmapper_page_shm_settings_page #footer-upgrade { - margin-top: 40px; -} \ No newline at end of file + margin-top: 40px; +} + +/** Range Control */ +.shm-range[type=range] { + display: block; + -webkit-appearance: none; + background-color: #bdc3c7; + width: calc( 100% - 30px ); + height: 5px; + border-radius: 5px; + margin: 0; + outline: 0; +} +.shm-range[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: #007cba; + width: 17px; + height: 17px; + border-radius: 50%; + border: 1px solid #005a87; + cursor: pointer; + transition: 0.3s ease-in-out; +} +​.shm-range[type=range]::-webkit-slider-thumb:hover { + background-color: #006799; + border: 2px solid #0085ba; +} +.shm-range[type=range]::-webkit-slider-thumb:active { + transform: scale(1.2); +} +.shm-admin-block .shm-range { + margin-top: 12px; + position: relative; +} +.shm-admin-block .shm-range + .description { + margin-top: 20px; +} +.shm-admin-block .shm-range:after { + content: attr(value); + position: absolute; + display: block; + top: -8px; + left: calc( 100% + 10px ); +} diff --git a/assets/js/ShMapper.admin.js b/assets/js/ShMapper.admin.js index 345265d..5b48d2d 100644 --- a/assets/js/ShMapper.admin.js +++ b/assets/js/ShMapper.admin.js @@ -155,6 +155,15 @@ jQuery(document).ready(function($) }, 1200); } }); + + $('[name="overlay_color"], [name="border_color"]').wpColorPicker({ + 'defaultColor': '#d1d1d1' + }); + + $('.shm-range').on('input', function(){ + $(this).attr('value', this.value); + }); + }); jQuery(function($){ diff --git a/assets/js/ShMapper.yandex.js b/assets/js/ShMapper.yandex.js index f161fec..dd13788 100644 --- a/assets/js/ShMapper.yandex.js +++ b/assets/js/ShMapper.yandex.js @@ -122,9 +122,9 @@ jQuery(document).ready(function($) function shm_place_marker_by_addr($this) { var addr = $this.val(); console.log(addr); - + var $selectedMarker = $this.closest('.shm-form-request').find('.shm-form-placemarks .shm-type-icon.shmapperMarkerSelected'); - + if(!$selectedMarker.length) { $selectedMarker = $this.closest('.shm-form-request').find('.shm-form-placemarks .shm-type-icon').first(); $selectedMarker.addClass('shmapperMarkerSelected'); @@ -132,11 +132,9 @@ jQuery(document).ready(function($) ymaps.geocode(addr).then(function (res) { var firstGeoObject = res.geoObjects.get(0); -// console.log("decoded"); - + new_mark_coords = firstGeoObject.geometry.getCoordinates(); -// console.log(new_mark_coords); - + var $map_id = $selectedMarker.parents("form.shm-form-request").attr("form_id"); map = shm_maps[$map_id]; @@ -144,8 +142,7 @@ jQuery(document).ready(function($) shmapperPlaceMarkerOnMapByCoords(map, new_mark_coords, $selectedMarker); }, function (err) { -// console.log("error"); - console.log(err); + console.log(err); }); } @@ -154,118 +151,120 @@ jQuery(document).ready(function($) shm_place_marker_by_addr($(this)); }); $addrInput.keydown(function(e){ - if(e.keyCode == 13){ - e.preventDefault(); + if(e.keyCode == 13){ + e.preventDefault(); shm_place_marker_by_addr($(this)); - } + } }); + var isDraggable = false; + if ( shmYa.isAdmin == 'true' ) { + isDraggable = true; + } + + console.log(isDraggable); + console.log(shmYa.isAdmin); + // init_map = function(mData, points) { + + var restrinctArea = [[-85, -179], [85, 179]]; + if ( shmYa.isAdmin == 'true' ) { + restrinctArea = false; + } + var i=0, paramet; - var myMap = new ymaps.Map(mData.uniq, + var myMap = new ymaps.Map( mData.uniq, { - center: [ mData.latitude, mData.longitude], - controls: [ ], - zoom: mData.zoom, - type: 'yandex#' + mData.mapType + center: [ mData.latitude, mData.longitude], + controls: [ ], + zoom: mData.zoom, + type: 'yandex#' + mData.mapType + }, { + restrictMapArea: restrinctArea }); - + if ( mData.country && mData.overlay ) { + + var map = myMap; + if ( mData.country === 'RU' ) { + + ymaps.regions.load( 'RU', { + lang: shmYa.langIso, + quality: 3, + disputedBorders: '' + }).then(function (result) { + var background = new ymaps.Polygon([ + [ + [85, -179.99], + [85, 179.99], + [-85, 179.99], + [-85, -179.99], + [85, -179.99] + ] + ], {}, { + fillColor: mData.overlay, + strokeWidth: 1, + strokeColor: mData.border, + opacity: mData.overlayOpacity, + coordRendering: 'straightPath' + }); - //, {restrictMapArea: [[0, 0], [179, 179]]}); + var regions = result.geoObjects; - /*var map = myMap; - - // Загрузим регионы. - ymaps.borders.load('001', { - lang: 'ro', - quality: 0, - disputedBorders: '' - }).then(function (result) { - - // Создадим многоугольник, который будет скрывать весь мир, кроме заданной страны. - var background = new ymaps.Polygon([ - [ - [85, -179.99], - [85, 179.99], - [-85, 179.99], - [-85, -179.99], - [85, -179.99] - ] - ], {}, { - fillColor: 'rgba(0,0,0,0.3)', - strokeWidth: 0, - //interactivityModel: 'default#transparent', - // Для того чтобы полигон отобразился на весь мир, нам нужно поменять - // алгоритм пересчета координат геометрии в пиксельные координаты. - //coordRendering: 'straightPath' - }); - - // Найдём страну по её iso коду. - var region = result.features.filter(function (feature) { - //console.log(feature.properties); - return feature.properties.iso3166 == 'MD'; })[0]; - console.log(region); - // Добавим координаты этой страны в полигон, который накрывает весь мир. - // В полигоне образуется полость, через которую будет видно заданную страну. - var masks = region.geometry.coordinates; - masks.forEach(function(mask){ - background.geometry.insert(1, mask); - }); + regions.each(function (reg) { + var masks = reg.geometry._coordPath._coordinates; + if ( reg.properties.get('osmId') != '151231' ) { + masks.forEach(function(mask){ + background.geometry.insert(1, mask); + }); + } + }); - - - // Добавим многоугольник на карту. - map.geoObjects.add(background); - }) ; - - ymaps.regions.load('MD', { - lang: 'ru', - quality: 1 - }).then(function (result) { - var background2 = new ymaps.Polygon([ - [ - [85, -179.99], - [85, 179.99], - [-85, 179.99], - [-85, -179.99], - [85, -179.99] - ] - ], {}, { - fillColor: '#cccccc', - strokeWidth: 0, - // Для того чтобы полигон отобразился на весь мир, нам нужно поменять - // алгоритм пересчета координат геометрии в пиксельные координаты. - coordRendering: 'straightPath' - }); var regions = result.geoObjects; - // Включим возможность перетаскивания регионов. - //regions.options.set('draggable', true); - // Проходим по коллекции регионов и ищем Иркутскую область (osmId = 145454). - regions.each(function (reg) { - console.log(reg.geometry._coordPath._coordinates[0]) - var masks = reg.geometry._coordPath._coordinates; - //background2.geometry.insert(1, masks); - if (reg.properties.get('name') != "Чукотский автономный округ") { - masks.forEach(function(mask){ - background2.geometry.insert(1, mask); + map.geoObjects.add( background ); + }); + + } else { + + // Load Countries. + ymaps.borders.load( '001' , { + lang: shmYa.langIso, + quality: 3, + } ).then( function( result ) { + + var background = new ymaps.Polygon([ + [ + [85, -179.99], + [85, 179.99], + [-85, 179.99], + [-85, -179.99], + [85, -179.99] + ] + ], {}, { + fillColor: mData.overlay, + strokeWidth: 1, + strokeColor: mData.border, + opacity: mData.overlayOpacity, + coordRendering: 'straightPath' }); - // Меняем цвет на красный - //reg.options.set('fillColor', '#ff001a') - } - }); - - // Добавляем регионы на карту - myMap.geoObjects.add(background2); - myMap.geoObjects.add(regions); - }); - */ - /*ymaps.modules.require('RS.RegionSelector', function (RegionSelector) { - new RegionSelector(myMap); - });*/ + // Find country by iso. + var region = result.features.filter(function (feature) { + return feature.properties.iso3166 == mData.country; })[0]; + + // Add world overlay. + var masks = region.geometry.coordinates; + masks.forEach( function( mask ){ + background.geometry.insert(1, mask); + }); + map.geoObjects.add( background ); + + }); + + } + } //search if(mData.isSearch) @@ -309,7 +308,8 @@ jQuery(document).ready(function($) { myMap.behaviors.disable('scrollZoom'); myMap.behaviors.disable('drag'); - } + } + // add to global array shm_maps[mData.uniq] = myMap; @@ -365,7 +365,7 @@ jQuery(document).ready(function($) iconImageOffset: [-w/2, -h/2], term_id:elem.term_id, type:'point', - draggable: true + draggable: isDraggable }; } else if( mData.default_icon && !elem.color) @@ -380,14 +380,13 @@ jQuery(document).ready(function($) iconImageOffset: [-20, -20], term_id:-1, type:'point', - draggable: true + draggable: isDraggable }; } else { paramet = { - draggable: true, balloonMaxWidth: 250, balloonItemContentLayout: customItemContentLayout, hideIconOnBalloonOpen: false, @@ -395,7 +394,7 @@ jQuery(document).ready(function($) preset: 'islands#dotIcon', term_id:elem.term_id, type:'point', - draggable: true + draggable: isDraggable } } @@ -407,7 +406,7 @@ jQuery(document).ready(function($) type: 'Point', // тип геометрии - точка coordinates: [elem.latitude, elem.longitude] // координаты точки }, - draggable: true, + draggable: false, balloonContentHeader: elem.post_title, balloonContentBody: elem.post_content, balloonContentFooter: '', diff --git a/assets/js/region-selector.min.js b/assets/js/region-selector.min.js deleted file mode 100644 index fa6153c..0000000 --- a/assets/js/region-selector.min.js +++ /dev/null @@ -1,349 +0,0 @@ -(function (global){ -var ym = { modules: global.ymaps.modules }; - -(function (modules){ -var project = { DEBUG: false }; -if (typeof modules == 'undefined' && typeof require == 'function') { - var modules = require('ym'); -} - -modules.define('util.providePackage', ['system.mergeImports'], function (provide, mergeImports) { - provide(function (srcPackage, packageArgs) { - var packageProvide = packageArgs[0], - packageModules = Array.prototype.slice.call(packageArgs, 1), - ns = mergeImports.joinImports(srcPackage.name, {}, srcPackage.deps, packageModules); - - packageProvide(ns); - }); -}); -})(ym.modules); - -ym.modules.define('RS.MaskOverlay', [ - 'util.defineClass', - 'overlay.Polygon', - 'geometry.pixel.Polygon' -], function (provide, defineClass, OverlayPolygon, GeometryPixelPolygon) { - -/** - * Класс оверлея маски. - * @class - * @name MaskOverlay - * @param {ymaps.geometry.pixel.Polygon} geometry Пиксельная геометкрия полигона. - * @param {Object} data Данные. - * @param {Object} options Опции. - */ -var MaskOverlay = defineClass(function (geometry, data, options) { - MaskOverlay.superclass.constructor.call(this, geometry, data, options); -}, OverlayPolygon, /** @lends MaskOverlay.prototype */{ - /** - * Перекрываем публичный метод. - * @function - * @name MaskOverlay.setGeometry - * @param {ymaps.geometry.pixel.Polygon} geometry Пиксельная геометрия полигона. - */ - setGeometry: function (geometry) { - MaskOverlay.superclass.setGeometry.call( - this, - this.getMap() ? this._createGeometry(geometry) : geometry - ); - }, - /** - * Создание пиксельной геометрии. - * @function - * @private - * @name MaskOverlay._createGeometry - * @returns {ymaps.geometry.pixel.Polygon} Пиксельная геометрия полигона. - */ - _createGeometry: function (geometry) { - var lineCoordinates = geometry.getCoordinates().slice(0), - map = this.getMap(), - center = map.getGlobalPixelCenter(), - size = map.container.getSize(), - d = 512; - - lineCoordinates.push([ - [center[0] - size[0] - d, center[1] - size[1] - d], - [center[0] + size[0] + d, center[1] - size[1] - d], - [center[0] + size[0] + d, center[1] + size[1] + d], - [center[0] - size[0] - d, center[1] + size[1] + d], - [center[0] - size[0] - d, center[1] - size[1] - d] - ]); - - return new GeometryPixelPolygon(lineCoordinates, 'evenOdd'); - } -}); - -provide(MaskOverlay); - -}); - -ym.modules.define('RS.MapMaskView', [ - 'util.defineClass', - 'geometry.Polygon', - 'RS.MaskOverlay' -], function (provide, defineClass, GeometryPolygon, MaskOverlay) { - -/** - * Класс-отображение данных на карте ввиде маски. - * @class - * @name RegionSelector.MapMaskView - * @param {ymaps.Map} map Карта. - */ -var MapMaskView = defineClass(function (map) { - this._map = map; - this._overlay = null; - this._geometry = null; -}, /** @lends RegionSelector.MapMaskView.prototype */{ - /** - * Отображение данных на карте. - * @function - * @name RegionSelector.MapMaskView.render - * @param {ymaps.data.Manager} data Менеджер данных. - * @returns {RegionSelector.MapMaskView} Возвращает ссылку на себя. - */ - render: function (data) { - var coordinates = []; - - data.get('regions') - .each(function (geoObject) { - coordinates.push.apply(coordinates, geoObject.geometry.getCoordinates()); - }); - - this._createGeometry(coordinates); - this._createOverlay(this._geometry.getPixelGeometry()); - this._attachHandlers(); - - return this; - }, - /** - * Удаление данных с карты. - * @function - * @name RegionSelector.MapMaskView.clear - * @returns {RegionSelector.MapMaskView} Возвращает ссылку на себя. - */ - clear: function () { - if(this._geometry) { - this._detachHandlers(); - this._geometry.setMap(null); - this._overlay.setMap(null); - } - this._geometry = this._overlay = null; - - return this; - }, - /** - * Добавление обработчиков событий. - * @function - * @private - * @name RegionSelector.MapMaskView._attachHandlers - */ - _attachHandlers: function () { - this._geometry.events - .add('pixelgeometrychange', this._onPixelGeometryChange, this); - this._map.events - .add('boundschange', this._onBoundsChange, this); - }, - /** - * Удаление обработчиков событий. - * @function - * @private - * @name RegionSelector.MapMaskView._detachHandlers - */ - _detachHandlers: function () { - this._map.events - .remove('boundschange', this._onBoundsChange, this); - this._geometry.events - .remove('pixelgeometrychange', this._onPixelGeometryChange, this); - }, - /** - * Обработчик события изменения пискельной геометрии. - * @function - * @private - * @name RegionSelector.MapMaskView._onPixelGeometryChange - * @param {ymaps.data.Manager} e Менеджер данных. - */ - _onPixelGeometryChange: function (e) { - this._createOverlay(e.get('pixelGeometry')); - }, - /** - * Обработчик события смены центра/масштаба карты. - * @function - * @private - * @name RegionSelector.MapMaskView._onBoundsChange - */ - _onBoundsChange: function (e) { - if(e.get('oldZoom') !== e.get('newZoom')) { - this._createOverlay(this._geometry.getPixelGeometry()); - } - }, - /** - * Создание геометрии типа "Polygon". - * @function - * @private - * @name RegionSelector.MapMaskView._createGeometry - * @param {Number[][]} coordinates Координаты вершин ломаных, определяющих внешнюю и внутренние границы многоугольника. - */ - _createGeometry: function (coordinates) { - this._geometry = new GeometryPolygon(coordinates, 'evenOdd',{ - projection: this._map.options.get('projection') - }); - this._geometry.setMap(this._map); - }, - /** - * Создание оверлея. - * @function - * @private - * @name RegionSelector.MapMaskView._createOverlay - * @param {ymaps.geometry.pixel.Polygon} geometry Пиксельная геометрия полигона. - */ - _createOverlay: function (geometry) { - if(!this._overlay) { - this._overlay = new MaskOverlay(geometry, null, this.getDefaults()); - } - this._overlay.setMap(this._map); - this._overlay.setGeometry(geometry); - }, - /** - * Опции по-умолчанию. - * @function - * @name RegionSelector.MapMaskView.getDefaults - * @returns {Object} Опции. - */ - getDefaults: function () { - return { - zIndex: 1, - stroke: false, - strokeColor: false, - fillColor: 'CCC', - interactivityModel: 'default#transparent', - cursor: 'grab' - }; - } -}); - -provide(MapMaskView); - -}); - -ym.modules.define('RS.Model', [ - 'util.defineClass', - 'util.bind', - 'Monitor', - 'option.Manager', - 'event.Manager', - 'regions' -], function (provide, defineClass, bind, Monitor, OptionManager, EventManager, Regions) { - -/** - * Класс-модель - * @class - * @name RegionSelector.Model - */ -var Model = defineClass(function () { - this.events = new EventManager(); - this.options = new OptionManager({ - preset: this.getDefaults() - }); -}, /** @lends RegionSelector.Model.prototype */{ - /** - * Загружаем данные. - * @function - * @name RegionSelector.Model.load - */ - load: function () { - Regions.load( - this.options.get('country'), { - lang: this.options.get('lang'), - quality: this.options.get('quality') - } - ).then( - bind(this._onDataLoaded, this) - ); - }, - /** - * Обработчик загрузки данных. - * @function - * @private - * @name RegionSelector.Model._onDataLoaded - * @param {Object} data Данные региона. - */ - _onDataLoaded: function (data) { - this.events.fire('load', { - regions: data.geoObjects, - target: this - }); - }, - /** - * Опции модели по-умолчанию. - * @function - * @name RegionSelector.Model.getDefaults - * @returns {Object} Опции модели. - */ - getDefaults: function () { - return { - country: 'RU', - lang: 'ru', - quality: 0 - }; - } -}); - -provide(Model); - -}); - -ym.modules.define('RS.RegionSelector', [ - 'util.defineClass', - 'RS.Model', - 'RS.MapMaskView', -], function (provide, defineClass, Model, MapMaskView) { - -/** - * Класс-контрол выбора региона - * @class - * @name RegionSelector - * @param {ymaps.Map} map Карта. - * @param {jQuery} listContainer Контейнер списка областей. - * @param {jQuery} optContainer Контейнер для настроек. - * @param {jQuery} titleContainer Контейнер заголовка. - */ -var RegionSelector = defineClass(function (map, listContainer, optContainer, titleContainer) { - this._model = new Model(); - this._views = [ - this._mapMaskView = new MapMaskView(map) - ]; - - this._attachHandlers(); - this._model.load(); -}, /** @lends RegionSelector.prototype */{ - /** - * Добавление обработчиков событий. - * @function - * @private - * @name RegionSelector._attachHandlers - */ - _attachHandlers: function () { - this._model.events.add('load', this._onRegionsLoaded, this); - }, - - /** - * Обработчик события загрузки данных о регионах. - * @function - * @private - * @name RegionSelector._onRegionsLoaded - * @param {ymaps.data.Manager} data Менеджер данных. - */ - _onRegionsLoaded: function (data) { - for(var i = 0, len = this._views.length; i < len; i++) { - this._views[i] - .clear() - .render(data); - } - } -}); - -provide(RegionSelector); - -}); - -})(this); \ No newline at end of file diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index 60a63c0..5fc92ac 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -354,11 +354,10 @@ class='$class' "/> $after"; } - - if( isset($params['default_none']) ) - { + + if ( isset( $params['default_none'] ) ) { if ( ! isset( $class ) ) { - $class = ''; + $class = 'ganre_checkbox'; } $html .= "

    @@ -376,8 +375,8 @@ class='$class' "
    " . "
    "; - } - + } + $html .= " "; diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index b650d7a..1a922fa 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -197,12 +197,16 @@ static function add_shortcodes() static function add_admin_js_script() { + $locale = get_locale(); //css wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array(), SHMAPPER_VERSION); wp_enqueue_style( "ShMapper"); //js wp_register_script("ShMapper", plugins_url( '../assets/js/ShMapper.js', __FILE__ ), array('inline-edit-post')); wp_enqueue_script("ShMapper"); + wp_enqueue_media(); + wp_enqueue_style( 'wp-color-picker'); + wp_enqueue_script( 'wp-color-picker' ); wp_register_script("ShMapper.admin", plugins_url( '../assets/js/ShMapper.admin.js', __FILE__ ), array()); wp_enqueue_script("ShMapper.admin"); if( static::$options['map_api'] == 1 ) @@ -211,7 +215,7 @@ static function add_admin_js_script() if ( isset( ShMapper::$options['shm_yandex_maps_api_key'] ) ) { $ymap_key = ShMapper::$options['shm_yandex_maps_api_key']; } - wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=" . esc_attr( $ymap_key ) . "&load=package.full&lang=ru_RU", array()); + wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=" . esc_attr( $ymap_key ) . "&load=package.full&lang=" . $locale, array()); wp_enqueue_script("api-maps"); wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); wp_enqueue_script("ShMapper.yandex"); @@ -283,10 +287,27 @@ static function add_admin_js_script() 'Error: no map' => __( "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match", SHMAPPER ), 'Are you shure?' => __( "Are you shure?", SHMAPPER ), ) - ); + ); + + $is_admin = 'false'; + if ( is_admin() ) { + $is_admin = 'true'; + } + + wp_localize_script( + 'ShMapper.yandex', + 'shmYa', + array( + 'locale' => get_locale(), + 'language' => get_bloginfo( 'language' ), + 'langIso' => substr( get_bloginfo ( 'language' ), 0, 2 ), + 'isAdmin' => $is_admin, + ) + ); } static function add_frons_js_script() { + $locale = get_locale(); $ymap_key = ''; if ( isset( ShMapper::$options['shm_yandex_maps_api_key'] ) ) { $ymap_key = ShMapper::$options['shm_yandex_maps_api_key']; @@ -302,10 +323,8 @@ static function add_frons_js_script() wp_enqueue_script("ShMapper.front"); if( static::$options['map_api'] == 1 ) { - wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=" . esc_attr( $ymap_key ) . "&load=package.full&lang=ru_RU", array()); + wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=" . esc_attr( $ymap_key ) . "&load=package.full&lang=" . $locale, array()); wp_enqueue_script("api-maps"); - wp_register_script( 'region', plugins_url( '../assets/js/region-selector.min.js', __FILE__ ), array()); - wp_enqueue_script( 'region' ); wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); wp_enqueue_script("ShMapper.yandex"); } @@ -376,7 +395,24 @@ static function add_frons_js_script() 'Close' => __( "Close" ), 'Error: no map' => __( "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match", SHMAPPER ), ) - ); + ); + + $is_admin = 'false'; + if ( is_admin() ) { + $is_admin = 'true'; + } + + wp_localize_script( + 'ShMapper.yandex', + 'shmYa', + array( + 'locale' => get_locale(), + 'language' => get_bloginfo( 'language' ), + 'langIso' => substr( get_bloginfo ( 'language' ), 0, 2 ), + 'isAdmin' => $is_admin, + ) + ); + } static function set_styles() { diff --git a/class/ShMapperDrive.class.php b/class/ShMapperDrive.class.php index 24ef415..3b72732 100644 --- a/class/ShMapperDrive.class.php +++ b/class/ShMapperDrive.class.php @@ -107,9 +107,11 @@ static function init_obj($init_object) return $init_object; } - static function shmapper_admin($text) - { - //google-sheets.php + static function shmapper_admin( $text ) { + $google_geo_adress = static::$options['google_geo_adress'] ? static::$options['google_geo_adress'] : 'D'; + $shmd_post_title = static::$options['shmd_post_title'] ? static::$options['shmd_post_title'] : 'B'; + $shmd_post_date = static::$options['post_date'] ? static::$options['post_date'] : 'E'; + return $text . "
  • @@ -193,7 +195,7 @@ class='shm-form shm_options' googleColumnIdent_dropdown( [ 'name' => 'shmd_post_title', "class" => "shm_options", - "selected" => static::$options['shmd_post_title'] + "selected" => $shmd_post_title ]). " @@ -216,9 +218,9 @@ class='shm_options' "
    " . googleColumnIdent_dropdown( [ - 'name' => 'post_date', - "class" => "shm_options", - "selected" => static::$options['post_date'] + 'name' => 'post_date', + "class" => "shm_options", + "selected" => $shmd_post_date ]). " @@ -289,9 +291,9 @@ class='shm_options'
    ". googleColumnIdent_dropdown([ - 'name'=>'google_geo_adress', - "class" => "shm_options", - "selected" => static::$options['google_geo_adress'] + 'name' =>'google_geo_adress', + "class" => "shm_options", + "selected" => $google_geo_adress ]). "
    diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 89161b3..3be6d9d 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -222,22 +222,28 @@ static function my_form_fields() static function view_admin_edit($obj) { require_once( SHM_REAL_PATH . "tpl/input_file_form.php" ); - $height = $obj->get_meta("height") ? $obj->get_meta("height") : 400; - $latitude = $obj->get_meta("latitude"); - $longitude = $obj->get_meta("longitude"); - $zoom = $obj->get_meta("zoom"); - $width = $obj->get_meta("width"); - $is_search = $obj->get_meta("is_search"); - $is_zoomer = $obj->get_meta("is_zoomer"); - $is_layer_switcher = $obj->get_meta("is_layer_switcher"); - $is_fullscreen = $obj->get_meta("is_fullscreen"); - $is_csv = $obj->get_meta("is_csv"); - $is_legend = $obj->get_meta("is_legend"); - $is_filtered = $obj->get_meta("is_filtered"); - $default_icon_id = $obj->get_meta("default_icon_id"); - $is_clustered = $obj->get_meta("is_clustered"); - $is_lock = $obj->get_meta("is_lock"); - $form_title = $obj->get_meta("form_title"); + $map_source = ShmMap::get_map_types()[ ShMapper::$options['map_api'] ][0]; + $height = $obj->get_meta( 'height' ) ? $obj->get_meta( 'height' ) : 400; + $latitude = $obj->get_meta( 'latitude' ); + $longitude = $obj->get_meta( 'longitude' ); + $zoom = $obj->get_meta( 'zoom' ); + $width = $obj->get_meta( 'width' ); + $is_search = $obj->get_meta( 'is_search' ); + $is_zoomer = $obj->get_meta( 'is_zoomer' ); + $is_layer_switcher = $obj->get_meta( 'is_layer_switcher' ); + $is_fullscreen = $obj->get_meta( 'is_fullscreen' ); + $is_csv = $obj->get_meta( 'is_csv' ); + $is_legend = $obj->get_meta( 'is_legend' ); + $is_filtered = $obj->get_meta( 'is_filtered' ); + $default_icon_id = $obj->get_meta( 'default_icon_id' ); + $is_clustered = $obj->get_meta( 'is_clustered' ); + $is_lock = $obj->get_meta( 'is_lock' ); + $form_title = $obj->get_meta( 'form_title' ); + $highlight_country = $obj->get_meta( 'highlight_country' ); + $overlay_color = $obj->get_meta( 'overlay_color' ) ? $obj->get_meta( 'overlay_color' ) : '#d1d1d1'; + $border_color = $obj->get_meta( 'border_color' ) ? $obj->get_meta( 'border_color' ) : '#d1d1d1'; + $overlay_opacity = $obj->get_meta( 'overlay_opacity' ) ? $obj->get_meta( 'overlay_opacity' ) : '0.8'; + $html = "

    ". __("1.1. Pan map and choose zoom", SHMAPPER). "

    @@ -342,7 +348,6 @@ static function view_admin_edit($obj)
    @@ -357,7 +362,51 @@ static function view_admin_edit($obj) __("Recommended size is 64х64 px, format is .png", SHMAPPER) . "

    "; - + + if ( $map_source === 'map' ) { + $html .= " +
    +
    +
    +
    + +

    ". __( "1.8. Highlight the country on the map", SHMAPPER ) . "

    + +
    + +

    ". + __("Select country", SHMAPPER) . + "

    +
    +
    +
    +
    +
    + +

    ". + __("Choose map overlay color", SHMAPPER) . + "

    +
    +
    + +

    ". + __("Choose country border color", SHMAPPER) . + "

    +
    +
    + +

    ". + __("Overlay opacity", SHMAPPER) . + "

    +
    +
    + +
    + "; + } + return $html; } static function form_fields_box_func( $post ) @@ -504,6 +553,11 @@ static function save_admin_edit($obj) "width" => sanitize_text_field($_POST['width']), "height" => sanitize_text_field($_POST['height']), + 'highlight_country' => sanitize_text_field( $_POST['highlight_country'] ), + 'overlay_color' => sanitize_hex_color( $_POST['overlay_color'] ), + 'border_color' => sanitize_hex_color( $_POST['border_color'] ), + 'overlay_opacity' => sanitize_text_field( $_POST['overlay_opacity'] ), + "is_form" => empty($_POST['is_form']) ? 0 : 1, "form_title" => sanitize_text_field($_POST['form_title']), "form_contents" => sanitize_textarea_field(empty($_POST['form_contents']) ? '' : $_POST['form_contents']), diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index d6756db..1ca6a9e 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -445,7 +445,7 @@ function draw() { p = {}; p.post_id = '" . esc_attr( $point->ID ) . "'; p.post_title = '" . esc_html( $post_title ) . "'; - p.post_content = '" . wp_kses_post( $post_content ) . " ID) . "\" class=\"shm-no-uline\">
    " . esc_html( $location ) . "
    '; + p.post_content = '" . wp_kses_post( wp_slash( $post_content ) ) . " ID) . "\" class=\"shm-no-uline\">
    " . esc_html( $location ) . "
    '; p.latitude = '" . esc_attr( $latitude ) . "'; p.longitude = '" . esc_attr( $longitude ) . "'; p.location = '" . esc_js($location) . "'; diff --git a/tpl/input_file_form.php b/tpl/input_file_form.php index 13e1bcb..dc470ea 100644 --- a/tpl/input_file_form.php +++ b/tpl/input_file_form.php @@ -116,19 +116,18 @@ function _get_default() return SHM_URLPATH."assets/img/empty.png"; } -function recurse_copy($src, $dst) -{ - $dir = opendir($src); - @mkdir($dst); - while(false !== ( $file = readdir($dir)) ) { - if (( $file != '.' ) && ( $file != '..' )) { - if ( is_dir($src . '/' . $file) ) { - recurse_copy($src . '/' . $file, $dst . '/' . $file); - } - else { - copy($src . '/' . $file, $dst . '/' . $file); - } - } - } - closedir($dir); +function recurse_copy( $src, $dst ) { + $dir = opendir($src); + @mkdir($dst); + while(false !== ( $file = readdir($dir)) ) { + if (( $file != '.' ) && ( $file != '..' )) { + if ( is_dir($src . '/' . $file) ) { + recurse_copy($src . '/' . $file, $dst . '/' . $file); + } + else { + copy($src . '/' . $file, $dst . '/' . $file); + } + } + } + closedir($dir); } diff --git a/tpl/shmMap.php b/tpl/shmMap.php index bb4ddae..6f4debb 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -41,6 +41,11 @@ function draw_shMap($map, $args ) $longitude = $longitude ? $longitude : 55; $zoom = $zoom ? $zoom : 4; $leg = ""; + $highlight_country = $map->get_meta( 'highlight_country' ); + $overlay_color = $map->get_meta( 'overlay_color' ); + $border_color = $map->get_meta( 'border_color' ); + $overlay_opacity = $map->get_meta( 'overlay_opacity' ); + if( $is_legend ) { $include = $map->get_include_types(); @@ -53,7 +58,7 @@ function draw_shMap($map, $args ) } $term = get_term($term_id); - if( !is_wp_error($term) ) { // echo '
    HERE: '.print_r($include, 1).'
    '; + if( !is_wp_error($term) ) { $color = get_term_meta($term_id, "color", true); $leg .= "
    " . $term->name . ""; @@ -161,24 +166,64 @@ function draw_shMap($map, $args ) isZoomer : ". ($is_zoomer ? 1 : 0). ", isAdmin : ". (is_admin() ? 1 : 0). ", isMap : true, - default_icon : '$icon' + default_icon : '$icon', + country : '$highlight_country', + overlay : '$overlay_color', + border : '$border_color', + overlayOpacity : '$overlay_opacity', }; - /* - var clear_form = new CustomEvent( - 'init_map', - { - bubbles : true, - cancelable : true, - detail : {mData:mData, points:points} - } - ); - document.documentElement.dispatchEvent(clear_form); - */ - if(map_type == 1) - ymaps.ready( function(){ init_map( mData, points ) } ); - else if (map_type == 2) + if ( map_type == 1 ) { + + ymaps.ready( function(){ + + init_map( mData, points ); + + ymaps.borders.load( '001' , { + lang: shmYa.langIso, + quality: 1 + }).then(function (result) { + + let selectOption = ''; + let optionValue = ''; + let optionLabel = ''; + let optionSelected = ''; + let optionCurrent = mData.country; + let allCountries = []; + let allOptions = []; + + for (var i = 0; i < result.features.length; i++) { + optionValue = result.features[i].properties.iso3166; + optionLabel = result.features[i].properties.name; + allOptions[ optionLabel ] = optionValue; + allCountries.push( optionLabel ); + } + + // Sort countries alphabetically + allCountries.sort(); + + // Create html options + allCountries.forEach( function( value, index ){ + optionValue = allOptions[ value ]; + optionSelected = ''; + if ( optionCurrent == optionValue ) { + optionSelected = 'selected'; + } + selectOption += ''; + }); + + // Add options to admin select + if ( $( '[name=highlight_country]' ).length ) { + $( '[name=highlight_country]' ).html( selectOption ); + } + + }); + + } ); + + } else if (map_type == 2) { init_map( mData, points ); + } // Disable submit post form on this page. $('form#post').on('keyup keypress', function(e) { @@ -190,7 +235,7 @@ function draw_shMap($map, $args ) }); }); - jQuery(\"\").appendTo('head'); + jQuery(\"\").appendTo('head'); "; return $html; From 11de9f525744c321212d499a926aa88e28de8112 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 23 Feb 2021 17:31:04 +0200 Subject: [PATCH 092/220] Improve import google drive --- assets/css/ShMapperDrive.css | 23 ++++++ assets/js/ShMapperDrive.admin.js | 8 +- class/ShMapperDrive.class.php | 62 +++++++------- class/ShMapperDriverPreview.class.php | 11 ++- languages/shmapper-by-teplitsa-ru_RU.mo | Bin 33885 -> 33691 bytes languages/shmapper-by-teplitsa-ru_RU.po | 105 ++++++++++++------------ languages/shmapper-by-teplitsa.pot | 95 +++++++++++---------- 7 files changed, 172 insertions(+), 132 deletions(-) diff --git a/assets/css/ShMapperDrive.css b/assets/css/ShMapperDrive.css index b0a7140..d0acde2 100644 --- a/assets/css/ShMapperDrive.css +++ b/assets/css/ShMapperDrive.css @@ -70,4 +70,27 @@ { padding:5px!important; margin:auto!important; +} +.shm_modal_body .content { + margin-top: 10px; + margin-bottom: 10px; +} +.shmapper-drive-modal-geocode { + margin-top: 10px; + margin-bottom: 10px; +} +.shmd-loader { + margin: 5px; + animation: spin 1s linear infinite; +} +@-webkit-keyframes spin { + 100% { + -webkit-transform: rotate(360deg); + } +} +@keyframes spin { + 100% { + -webkit-transform: rotate(360deg); + transform:rotate(360deg); + } } \ No newline at end of file diff --git a/assets/js/ShMapperDrive.admin.js b/assets/js/ShMapperDrive.admin.js index 4bd8381..b8fb485 100644 --- a/assets/js/ShMapperDrive.admin.js +++ b/assets/js/ShMapperDrive.admin.js @@ -77,7 +77,7 @@ jQuery(document).ready(function($) var val = $(evt.currentTarget).val(); if(val != "") { - $("#shmd_settings_wizzard").fadeIn(); + $("#shmd_settings_wizzard").fadeIn().removeClass('hidden'); } else { @@ -96,10 +96,12 @@ jQuery(document).ready(function($) }); $("#shmd_google_preview").click(function(evt) { + $('.shmd-loader').removeClass('hidden'); shm_send([ 'shmd_google_preview' ]); }); $("#shmd_google_update").click(function(evt) { + $('.shmd-loader').removeClass('hidden'); shm_send([ 'shmd_google_update' ]); }); @@ -125,6 +127,10 @@ jQuery(document).ready(function($) break; case "shmd_google_preview": shm_add_modal( { title:"Preview", content: event.detail[1].matrix } ); + $('.shmd-loader').addClass('hidden'); + break; + case "shmd_google_update": + $('.shmd-loader').addClass('hidden'); break; } }); diff --git a/class/ShMapperDrive.class.php b/class/ShMapperDrive.class.php index 3b72732..5acc99a 100644 --- a/class/ShMapperDrive.class.php +++ b/class/ShMapperDrive.class.php @@ -110,7 +110,8 @@ static function init_obj($init_object) static function shmapper_admin( $text ) { $google_geo_adress = static::$options['google_geo_adress'] ? static::$options['google_geo_adress'] : 'D'; $shmd_post_title = static::$options['shmd_post_title'] ? static::$options['shmd_post_title'] : 'B'; - $shmd_post_date = static::$options['post_date'] ? static::$options['post_date'] : 'E'; + $shmd_post_date = static::$options['post_date'] ? static::$options['post_date'] : 'E'; + $shmd_post_desc = static::$options['shmd_post_desc'] ? static::$options['shmd_post_desc'] : 'F'; return $text . "
  • @@ -187,6 +188,19 @@ class='shm-form shm_options' "posts" => ShmMap::get_all( ) ]) . " + +
    + ". + __("Column for unique id", SHMAPPER) . + " +
    " . + googleColumnIdent_dropdown( [ + 'name' => "google_unique", + "class" => "shm_options", + "selected" => static::$options['google_unique'] + ] ) . + " +
    ". __("Point title column", SHMAPPER) . @@ -197,8 +211,18 @@ class='shm-form shm_options' "class" => "shm_options", "selected" => $shmd_post_title ]). - " - + " +
    + ". + __("Point description column", SHMAPPER) . + " +
    " . + googleColumnIdent_dropdown( [ + 'name' => 'shmd_post_desc', + "class" => "shm_options", + "selected" => $shmd_post_desc + ]) . + "
    ". __("Post date column", SHMAPPER) . @@ -299,8 +323,6 @@ class='shm_options'
    -
    -
    ". @@ -331,16 +353,12 @@ class='shm_options' "
    - -
    - -
    + -
    -
    + +
    +
    diff --git a/class/ShMapperDriverPreview.class.php b/class/ShMapperDriverPreview.class.php index 08514e5..8f85b68 100644 --- a/class/ShMapperDriverPreview.class.php +++ b/class/ShMapperDriverPreview.class.php @@ -30,7 +30,7 @@ static function get_preview() $nType = ShMapperDrive::$options[ 'point_type' ]; $type = get_term( $nType, SHM_POINT_TYPE ); } - $icon = ShMapPointType::get_icon($type, false, false); + $icon = ShMapPointType::get_icon($type, false, false); $geocode = implode(" - " , static::getGeoPosition( $m )); if(ShMapperDrive::$options['is_google_post_date']) @@ -56,6 +56,7 @@ static function get_preview() } $ii++; } + $cont = $m[ getSingleGoogleOrder(ShMapperDrive::$options['shmd_post_desc']) ]; $html .= "
    " . $icon . " " . $m[ getSingleGoogleOrder(ShMapperDrive::$options['shmd_post_title']) ] . @@ -63,7 +64,7 @@ static function get_preview()
    $cont
    -
    +
    $geocode
    ". @@ -145,7 +146,8 @@ static function update() $ii++; } $post_title = $m[ getSingleGoogleOrder(ShMapperDrive::$options['shmd_post_title']) ]; - $post_content = $cont ; + $post_content = $m[ getSingleGoogleOrder(ShMapperDrive::$options['shmd_post_desc']) ]; + //$post_content = $cont ; $point = ShMapperPointMessage::insert([ 'post_name' => $post_title, 'post_title' => $post_title, @@ -200,7 +202,8 @@ static function update() $ii++; } $post_title = $m[ getSingleGoogleOrder(ShMapperDrive::$options['shmd_post_title']) ]; - $post_content = $cont; + $post_content = $m[ getSingleGoogleOrder(ShMapperDrive::$options['shmd_post_desc']) ]; + //$post_content = $cont; $point = ShmPoint::insert([ 'post_name' => $post_title, 'post_title' => $post_title, diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo index 71c60b62be860a874cded278481cf9ba2a7e57dc..3fcd62e6fd3a95884ec3815feb848d2fadb087b5 100644 GIT binary patch delta 5492 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 J;L&C={{uyt*WCaB delta 5618 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 diff --git a/languages/shmapper-by-teplitsa-ru_RU.po b/languages/shmapper-by-teplitsa-ru_RU.po index 9ad0486..a86dc5c 100644 --- a/languages/shmapper-by-teplitsa-ru_RU.po +++ b/languages/shmapper-by-teplitsa-ru_RU.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" -"POT-Creation-Date: 2021-02-05 07:14+0200\n" -"PO-Revision-Date: 2021-02-21 18:16+0200\n" +"POT-Creation-Date: 2021-02-23 17:27+0200\n" +"PO-Revision-Date: 2021-02-23 17:28+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: ru\n" @@ -47,7 +47,7 @@ msgid "Parameters" msgstr "Параметры" #: class/ShMapPointType.class.php:37 class/ShMapPointType.class.php:38 -#: class/ShMapPointType.class.php:48 class/ShMapperDrive.class.php:227 +#: class/ShMapPointType.class.php:48 class/ShMapperDrive.class.php:253 #: class/ShmPoint.class.php:126 msgid "Map marker type" msgstr "Тип маркера" @@ -290,7 +290,7 @@ msgstr "Телефон" msgid "Required Personal phone" msgstr "Требуется личный телефон" -#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:178 +#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:181 #: class/ShmMap.class.php:76 class/ShmMap.class.php:77 #: widget/ShMap.widget.php:72 msgid "Map" @@ -333,7 +333,7 @@ msgid "Accessed User" msgstr "Доступ пользователя" #: class/ShMapper.class.php:284 class/ShMapper.class.php:393 -#: class/ShMapperDrive.class.php:125 +#: class/ShMapperDrive.class.php:128 msgid "Attantion" msgstr "Внимание" @@ -362,7 +362,7 @@ msgid "Are you shure?" msgstr "Вы уверены?" #: class/ShMapper.class.php:444 class/ShMapper.class.php:445 -#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:435 +#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:442 msgid "Settings" msgstr "Настройки" @@ -564,19 +564,19 @@ msgstr "Точка" msgid "Google Table ID source" msgstr "Источник идентификатора таблицы Google" -#: class/ShMapperDrive.class.php:117 +#: class/ShMapperDrive.class.php:120 msgid "Parsing from Google table" msgstr "Разбор из таблицы Google" -#: class/ShMapperDrive.class.php:119 +#: class/ShMapperDrive.class.php:122 msgid "Columns of table parse to meta-fields" msgstr "Столбцы таблицы разбора на мета-поля" -#: class/ShMapperDrive.class.php:128 +#: class/ShMapperDrive.class.php:131 msgid "Rules for Google snapshot structure." msgstr "Правила для структуры снимков Google." -#: class/ShMapperDrive.class.php:130 +#: class/ShMapperDrive.class.php:133 msgid "" "Google-table must have access rights 'For everyone on the Internet' or 'For " "everyone who has a link'" @@ -584,15 +584,15 @@ msgstr "" "Гугл-таблица должна иметь права доступа 'Для всех в интернете' или 'Для всех " "у кого есть ссылка" -#: class/ShMapperDrive.class.php:131 +#: class/ShMapperDrive.class.php:134 msgid "In file must be only one screen." msgstr "В файле должна быть только одна вкладка." -#: class/ShMapperDrive.class.php:132 +#: class/ShMapperDrive.class.php:135 msgid "First row must have only legends of columns." msgstr "Первая строка таблицы должна включать только легенды колонок." -#: class/ShMapperDrive.class.php:133 +#: class/ShMapperDrive.class.php:136 msgid "" "If Points are have different Point types you must reserve one column for " "Point type and fill it ID of this types." @@ -601,7 +601,7 @@ msgstr "" "зарезервировать одну из колонок под тип Маркера и заполнять ячейки ID " "необходимого типа." -#: class/ShMapperDrive.class.php:134 +#: class/ShMapperDrive.class.php:137 msgid "" "If you want to have geo position you must reserve one column for adress or 2 " "columns for longitude and latitude." @@ -609,7 +609,7 @@ msgstr "" "Если Вы хотите получить точную геопозицию Маркеров, необходимо " "зарезервировать одну колонку под адрес или 2 колонки - для широты и долготы" -#: class/ShMapperDrive.class.php:140 +#: class/ShMapperDrive.class.php:143 msgid "" "Google table document ID. For example: 1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U in https://docs.google.com/" @@ -620,98 +620,95 @@ msgstr "" "https://docs.google.com/spreadsheets/d/1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U/edit#gid=7101094" -#: class/ShMapperDrive.class.php:159 +#: class/ShMapperDrive.class.php:162 msgid "Skip first rows count" msgstr "Пропустить первые строки? Сколько?" -#: class/ShMapperDrive.class.php:171 +#: class/ShMapperDrive.class.php:174 msgid "Execute next rows count. Empty for all." msgstr "" "Работать со следующими строками? Укажите число строк или оставьте поле пустым" -#: class/ShMapperDrive.class.php:190 +#: class/ShMapperDrive.class.php:194 +msgid "Column for unique id" +msgstr "Колонка для уникального идентификатора" + +#: class/ShMapperDrive.class.php:206 msgid "Point title column" msgstr "Столбец заголовка маркера" -#: class/ShMapperDrive.class.php:202 +#: class/ShMapperDrive.class.php:217 +msgid "Point description column" +msgstr "Столбец описание маркера" + +#: class/ShMapperDrive.class.php:228 msgid "Post date column" msgstr "Столбец даты публикации" -#: class/ShMapperDrive.class.php:215 +#: class/ShMapperDrive.class.php:241 msgid "Is fix post date?" msgstr "Исправить дату публикации?" -#: class/ShMapperDrive.class.php:230 +#: class/ShMapperDrive.class.php:256 msgid "add Map marker type" msgstr "Добавить новый" -#: class/ShMapperDrive.class.php:245 +#: class/ShMapperDrive.class.php:271 msgid "Select method and columns for generate Points's geo position." msgstr "Выберите метод и колонку для генерации геопозиции Маркеров." -#: class/ShMapperDrive.class.php:258 +#: class/ShMapperDrive.class.php:284 msgid "Latitude and Longitude" msgstr "Широты и долгота" -#: class/ShMapperDrive.class.php:287 +#: class/ShMapperDrive.class.php:313 msgid "Adress" msgstr "Адрес" -#: class/ShMapperDrive.class.php:305 +#: class/ShMapperDrive.class.php:329 msgid "Select columns for choose Points's different types." msgstr "Выберите столбцы для выбора разных типов точек." -#: class/ShMapperDrive.class.php:318 +#: class/ShMapperDrive.class.php:342 msgid "Use different Point Types for Points?" msgstr "Использовать различные типы маркеров для точек?" -#: class/ShMapperDrive.class.php:337 +#: class/ShMapperDrive.class.php:358 msgid "" "List of columns in google table that need to parse to Point's description" msgstr "" "Список столбцов в таблице Google, которые необходимо разобрать для описанием " "точек." -#: class/ShMapperDrive.class.php:343 +#: class/ShMapperDrive.class.php:363 msgid "Column" msgstr "Колонка" -#: class/ShMapperDrive.class.php:346 +#: class/ShMapperDrive.class.php:366 msgid "Include?" msgstr "Включить?" -#: class/ShMapperDrive.class.php:347 class/ShMapperDrive.class.php:353 +#: class/ShMapperDrive.class.php:367 class/ShMapperDrive.class.php:373 msgid "necessarily" msgstr "обязательное поле" -#: class/ShMapperDrive.class.php:352 +#: class/ShMapperDrive.class.php:372 msgid "Field name by latin" msgstr "Название поля по латыни" -#: class/ShMapperDrive.class.php:358 +#: class/ShMapperDrive.class.php:378 msgid "Sub title for decription section" msgstr "Подзаголовок для секции в описании Маркера" -#: class/ShMapperDrive.class.php:361 +#: class/ShMapperDrive.class.php:381 msgid "Order" msgstr "Порядковый номер" -#: class/ShMapperDrive.class.php:373 -msgid "" -"Use column as unique for update Point or add Messages for included Points" -msgstr "" -"Использовать одну из колонок как уникальный идентификатор при создании или " -"обновлении Маркера или Сообщения к Маркеру" - -#: class/ShMapperDrive.class.php:376 -msgid "Column for unique" -msgstr "Колонка для идентификации" - -#: class/ShMapperDrive.class.php:386 +#: class/ShMapperDrive.class.php:393 msgid "If your Google spreadsheet has one text in the specified column" msgstr "Если в нескольких полях в данной колонке будет одинаковое содержимое" -#: class/ShMapperDrive.class.php:399 +#: class/ShMapperDrive.class.php:406 msgid "" "Use only first row for creation new Point or updating included Point and " "ignore over." @@ -719,7 +716,7 @@ msgstr "" "Использовать только первую строку для создания нового Маркера или " "редактирования уже существующего и игнорировать остальные строки." -#: class/ShMapperDrive.class.php:412 +#: class/ShMapperDrive.class.php:419 msgid "" "Use only last row for creation new Point or updating included Point and " "ignore over." @@ -727,7 +724,7 @@ msgstr "" "Использовать только последнюю строку для создания нового Маркера или " "редактирования уже существующего и игнорировать остальные строки." -#: class/ShMapperDrive.class.php:425 +#: class/ShMapperDrive.class.php:432 msgid "" "Use only first row for creation new Point or updating included Point. Over " "some rows use for creation new Message or updating included Messages for " @@ -737,11 +734,11 @@ msgstr "" "редактирования уже существующего. Остальные строки использовать для создания " "или редактирования Сообщений для этого Маркера" -#: class/ShMapperDrive.class.php:438 +#: class/ShMapperDrive.class.php:445 msgid "Preview results" msgstr "Предпросмотр результата импора" -#: class/ShMapperDrive.class.php:441 +#: class/ShMapperDrive.class.php:448 msgid "Create or update Poins and Messages" msgstr "Создать или обновить Маркеры и Сообшения" @@ -1400,7 +1397,7 @@ msgstr "Вставить" msgid "Submit" msgstr "Отправить" -#: tpl/shmMap.php:92 +#: tpl/shmMap.php:93 #, php-format msgid "download %s.csv" msgstr "скачать %s.csv" @@ -1441,6 +1438,12 @@ msgstr "Теплица социальных технологий" msgid "https://te-st.ru" msgstr "https://te-st.ru" +#~ msgid "" +#~ "Use column as unique for update Point or add Messages for included Points" +#~ msgstr "" +#~ "Использовать одну из колонок как уникальный идентификатор при создании " +#~ "или обновлении Маркера или Сообщения к Маркеру" + #~ msgid "" #~ "Я даю свое согласие администратору сайта на обработку, в том числе " #~ "автоматизированную, своих персональных данных в соответствии с " diff --git a/languages/shmapper-by-teplitsa.pot b/languages/shmapper-by-teplitsa.pot index 590af00..094c9d0 100644 --- a/languages/shmapper-by-teplitsa.pot +++ b/languages/shmapper-by-teplitsa.pot @@ -3,7 +3,7 @@ msgid "" msgstr "" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "Project-Id-Version: ShMapper by Teplitsa\n" -"POT-Creation-Date: 2021-02-05 07:14+0200\n" +"POT-Creation-Date: 2021-02-23 17:27+0200\n" "PO-Revision-Date: 2020-06-18 05:16+0300\n" "Last-Translator: \n" "Language-Team: \n" @@ -52,7 +52,7 @@ msgid "Parameters" msgstr "" #: class/ShMapPointType.class.php:37 class/ShMapPointType.class.php:38 -#: class/ShMapPointType.class.php:48 class/ShMapperDrive.class.php:227 +#: class/ShMapPointType.class.php:48 class/ShMapperDrive.class.php:253 #: class/ShmPoint.class.php:126 msgid "Map marker type" msgstr "" @@ -291,7 +291,7 @@ msgstr "" msgid "Required Personal phone" msgstr "" -#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:178 +#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:181 #: class/ShmMap.class.php:76 class/ShmMap.class.php:77 #: widget/ShMap.widget.php:72 msgid "Map" @@ -334,7 +334,7 @@ msgid "Accessed User" msgstr "" #: class/ShMapper.class.php:284 class/ShMapper.class.php:393 -#: class/ShMapperDrive.class.php:125 +#: class/ShMapperDrive.class.php:128 msgid "Attantion" msgstr "" @@ -359,7 +359,7 @@ msgid "Are you shure?" msgstr "" #: class/ShMapper.class.php:444 class/ShMapper.class.php:445 -#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:435 +#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:442 msgid "Settings" msgstr "" @@ -541,161 +541,160 @@ msgstr "" msgid "Google Table ID source" msgstr "" -#: class/ShMapperDrive.class.php:117 +#: class/ShMapperDrive.class.php:120 msgid "Parsing from Google table" msgstr "" -#: class/ShMapperDrive.class.php:119 +#: class/ShMapperDrive.class.php:122 msgid "Columns of table parse to meta-fields" msgstr "" -#: class/ShMapperDrive.class.php:128 +#: class/ShMapperDrive.class.php:131 msgid "Rules for Google snapshot structure." msgstr "" -#: class/ShMapperDrive.class.php:130 +#: class/ShMapperDrive.class.php:133 msgid "" "Google-table must have access rights 'For everyone on the Internet' or 'For " "everyone who has a link'" msgstr "" -#: class/ShMapperDrive.class.php:131 +#: class/ShMapperDrive.class.php:134 msgid "In file must be only one screen." msgstr "" -#: class/ShMapperDrive.class.php:132 +#: class/ShMapperDrive.class.php:135 msgid "First row must have only legends of columns." msgstr "" -#: class/ShMapperDrive.class.php:133 +#: class/ShMapperDrive.class.php:136 msgid "" "If Points are have different Point types you must reserve one column for " "Point type and fill it ID of this types." msgstr "" -#: class/ShMapperDrive.class.php:134 +#: class/ShMapperDrive.class.php:137 msgid "" "If you want to have geo position you must reserve one column for adress or 2 " "columns for longitude and latitude." msgstr "" -#: class/ShMapperDrive.class.php:140 +#: class/ShMapperDrive.class.php:143 msgid "" "Google table document ID. For example: 1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U in https://docs.google.com/" "spreadsheets/d/1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U/edit#gid=7101094" msgstr "" -#: class/ShMapperDrive.class.php:159 +#: class/ShMapperDrive.class.php:162 msgid "Skip first rows count" msgstr "" -#: class/ShMapperDrive.class.php:171 +#: class/ShMapperDrive.class.php:174 msgid "Execute next rows count. Empty for all." msgstr "" -#: class/ShMapperDrive.class.php:190 +#: class/ShMapperDrive.class.php:194 +msgid "Column for unique id" +msgstr "" + +#: class/ShMapperDrive.class.php:206 msgid "Point title column" msgstr "" -#: class/ShMapperDrive.class.php:202 +#: class/ShMapperDrive.class.php:217 +msgid "Point description column" +msgstr "" + +#: class/ShMapperDrive.class.php:228 msgid "Post date column" msgstr "" -#: class/ShMapperDrive.class.php:215 +#: class/ShMapperDrive.class.php:241 msgid "Is fix post date?" msgstr "" -#: class/ShMapperDrive.class.php:230 +#: class/ShMapperDrive.class.php:256 msgid "add Map marker type" msgstr "" -#: class/ShMapperDrive.class.php:245 +#: class/ShMapperDrive.class.php:271 msgid "Select method and columns for generate Points's geo position." msgstr "" -#: class/ShMapperDrive.class.php:258 +#: class/ShMapperDrive.class.php:284 msgid "Latitude and Longitude" msgstr "" -#: class/ShMapperDrive.class.php:287 +#: class/ShMapperDrive.class.php:313 msgid "Adress" msgstr "" -#: class/ShMapperDrive.class.php:305 +#: class/ShMapperDrive.class.php:329 msgid "Select columns for choose Points's different types." msgstr "" -#: class/ShMapperDrive.class.php:318 +#: class/ShMapperDrive.class.php:342 msgid "Use different Point Types for Points?" msgstr "" -#: class/ShMapperDrive.class.php:337 +#: class/ShMapperDrive.class.php:358 msgid "" "List of columns in google table that need to parse to Point's description" msgstr "" -#: class/ShMapperDrive.class.php:343 +#: class/ShMapperDrive.class.php:363 msgid "Column" msgstr "" -#: class/ShMapperDrive.class.php:346 +#: class/ShMapperDrive.class.php:366 msgid "Include?" msgstr "" -#: class/ShMapperDrive.class.php:347 class/ShMapperDrive.class.php:353 +#: class/ShMapperDrive.class.php:367 class/ShMapperDrive.class.php:373 msgid "necessarily" msgstr "" -#: class/ShMapperDrive.class.php:352 +#: class/ShMapperDrive.class.php:372 msgid "Field name by latin" msgstr "" -#: class/ShMapperDrive.class.php:358 +#: class/ShMapperDrive.class.php:378 msgid "Sub title for decription section" msgstr "" -#: class/ShMapperDrive.class.php:361 +#: class/ShMapperDrive.class.php:381 msgid "Order" msgstr "" -#: class/ShMapperDrive.class.php:373 -msgid "" -"Use column as unique for update Point or add Messages for included Points" -msgstr "" - -#: class/ShMapperDrive.class.php:376 -msgid "Column for unique" -msgstr "" - -#: class/ShMapperDrive.class.php:386 +#: class/ShMapperDrive.class.php:393 msgid "If your Google spreadsheet has one text in the specified column" msgstr "" -#: class/ShMapperDrive.class.php:399 +#: class/ShMapperDrive.class.php:406 msgid "" "Use only first row for creation new Point or updating included Point and " "ignore over." msgstr "" -#: class/ShMapperDrive.class.php:412 +#: class/ShMapperDrive.class.php:419 msgid "" "Use only last row for creation new Point or updating included Point and " "ignore over." msgstr "" -#: class/ShMapperDrive.class.php:425 +#: class/ShMapperDrive.class.php:432 msgid "" "Use only first row for creation new Point or updating included Point. Over " "some rows use for creation new Message or updating included Messages for " "Point" msgstr "" -#: class/ShMapperDrive.class.php:438 +#: class/ShMapperDrive.class.php:445 msgid "Preview results" msgstr "" -#: class/ShMapperDrive.class.php:441 +#: class/ShMapperDrive.class.php:448 msgid "Create or update Poins and Messages" msgstr "" @@ -1345,7 +1344,7 @@ msgstr "" msgid "Submit" msgstr "" -#: tpl/shmMap.php:92 +#: tpl/shmMap.php:93 #, php-format msgid "download %s.csv" msgstr "" From 8cf81ada47ff20e4ad4d40955d97519dee313ce0 Mon Sep 17 00:00:00 2001 From: BootWP Date: Fri, 26 Feb 2021 06:11:31 +0200 Subject: [PATCH 093/220] Update translate. --- class/ShMapperDrive.class.php | 29 +++--- languages/shmapper-by-teplitsa-ru_RU.mo | Bin 33691 -> 33617 bytes languages/shmapper-by-teplitsa-ru_RU.po | 119 +++++++++++++----------- languages/shmapper-by-teplitsa.pot | 91 +++++++++--------- 4 files changed, 123 insertions(+), 116 deletions(-) diff --git a/class/ShMapperDrive.class.php b/class/ShMapperDrive.class.php index 5acc99a..3b4020d 100644 --- a/class/ShMapperDrive.class.php +++ b/class/ShMapperDrive.class.php @@ -116,12 +116,9 @@ static function shmapper_admin( $text ) { return $text . "
  • -
    ". - __("Parsing from Google table", SHMAPPER ) . - "". - __("Columns of table parse to meta-fields", SHMAPPER ) . - " -
    +
    " . + __("Export from Google Sheet", SHMAPPER ) . + "
    ". @@ -247,14 +244,14 @@ class='shm_options' "selected" => $shmd_post_date ]). " - +
    ". - __("Map marker type", SHMAPPER). - " - ". - __("add Map marker type", SHMAPPER). - "". + __("Select marker type", SHMAPPER). + " ". + __("Add new marker", SHMAPPER). + " + ". ShMapPointType::get_ganre_swicher([ 'selected' => static::$options['point_type'], 'prefix' => "point_type", @@ -339,7 +336,7 @@ class='shm_options' checked("1", static::$options['is_google_point_type'], 0). "/>
    @@ -385,9 +382,9 @@ class='shm_options' getGoogleRow(["n" => 0, 'include'=> 0, "id" => "google_null" ]) . "
    - -
    - + +
    +
    ". __("If your Google spreadsheet has one text in the specified column", SHMAPPER) . diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo index 3fcd62e6fd3a95884ec3815feb848d2fadb087b5..7c481fd7743b8d016a4b7fc02693e5783aacf430 100644 GIT binary patch delta 6768 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 QhIlJxwhr~iJh&wIzd$TvSO5S3 delta 6868 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 diff --git a/languages/shmapper-by-teplitsa-ru_RU.po b/languages/shmapper-by-teplitsa-ru_RU.po index a86dc5c..e781133 100644 --- a/languages/shmapper-by-teplitsa-ru_RU.po +++ b/languages/shmapper-by-teplitsa-ru_RU.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" -"POT-Creation-Date: 2021-02-23 17:27+0200\n" -"PO-Revision-Date: 2021-02-23 17:28+0200\n" +"POT-Creation-Date: 2021-02-26 06:06+0200\n" +"PO-Revision-Date: 2021-02-26 06:07+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: ru\n" @@ -47,8 +47,7 @@ msgid "Parameters" msgstr "Параметры" #: class/ShMapPointType.class.php:37 class/ShMapPointType.class.php:38 -#: class/ShMapPointType.class.php:48 class/ShMapperDrive.class.php:253 -#: class/ShmPoint.class.php:126 +#: class/ShMapPointType.class.php:48 class/ShmPoint.class.php:126 msgid "Map marker type" msgstr "Тип маркера" @@ -290,7 +289,7 @@ msgstr "Телефон" msgid "Required Personal phone" msgstr "Требуется личный телефон" -#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:181 +#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:178 #: class/ShmMap.class.php:76 class/ShmMap.class.php:77 #: widget/ShMap.widget.php:72 msgid "Map" @@ -333,7 +332,7 @@ msgid "Accessed User" msgstr "Доступ пользователя" #: class/ShMapper.class.php:284 class/ShMapper.class.php:393 -#: class/ShMapperDrive.class.php:128 +#: class/ShMapperDrive.class.php:125 msgid "Attantion" msgstr "Внимание" @@ -362,7 +361,7 @@ msgid "Are you shure?" msgstr "Вы уверены?" #: class/ShMapper.class.php:444 class/ShMapper.class.php:445 -#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:442 +#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:439 msgid "Settings" msgstr "Настройки" @@ -565,18 +564,14 @@ msgid "Google Table ID source" msgstr "Источник идентификатора таблицы Google" #: class/ShMapperDrive.class.php:120 -msgid "Parsing from Google table" -msgstr "Разбор из таблицы Google" - -#: class/ShMapperDrive.class.php:122 -msgid "Columns of table parse to meta-fields" -msgstr "Столбцы таблицы разбора на мета-поля" +msgid "Export from Google Sheet" +msgstr "Экспорт из таблицы Google" -#: class/ShMapperDrive.class.php:131 +#: class/ShMapperDrive.class.php:128 msgid "Rules for Google snapshot structure." msgstr "Правила для структуры снимков Google." -#: class/ShMapperDrive.class.php:133 +#: class/ShMapperDrive.class.php:130 msgid "" "Google-table must have access rights 'For everyone on the Internet' or 'For " "everyone who has a link'" @@ -584,15 +579,15 @@ msgstr "" "Гугл-таблица должна иметь права доступа 'Для всех в интернете' или 'Для всех " "у кого есть ссылка" -#: class/ShMapperDrive.class.php:134 +#: class/ShMapperDrive.class.php:131 msgid "In file must be only one screen." msgstr "В файле должна быть только одна вкладка." -#: class/ShMapperDrive.class.php:135 +#: class/ShMapperDrive.class.php:132 msgid "First row must have only legends of columns." msgstr "Первая строка таблицы должна включать только легенды колонок." -#: class/ShMapperDrive.class.php:136 +#: class/ShMapperDrive.class.php:133 msgid "" "If Points are have different Point types you must reserve one column for " "Point type and fill it ID of this types." @@ -601,7 +596,7 @@ msgstr "" "зарезервировать одну из колонок под тип Маркера и заполнять ячейки ID " "необходимого типа." -#: class/ShMapperDrive.class.php:137 +#: class/ShMapperDrive.class.php:134 msgid "" "If you want to have geo position you must reserve one column for adress or 2 " "columns for longitude and latitude." @@ -609,7 +604,7 @@ msgstr "" "Если Вы хотите получить точную геопозицию Маркеров, необходимо " "зарезервировать одну колонку под адрес или 2 колонки - для широты и долготы" -#: class/ShMapperDrive.class.php:143 +#: class/ShMapperDrive.class.php:140 msgid "" "Google table document ID. For example: 1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U in https://docs.google.com/" @@ -620,95 +615,99 @@ msgstr "" "https://docs.google.com/spreadsheets/d/1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U/edit#gid=7101094" -#: class/ShMapperDrive.class.php:162 +#: class/ShMapperDrive.class.php:159 msgid "Skip first rows count" msgstr "Пропустить первые строки? Сколько?" -#: class/ShMapperDrive.class.php:174 +#: class/ShMapperDrive.class.php:171 msgid "Execute next rows count. Empty for all." msgstr "" "Работать со следующими строками? Укажите число строк или оставьте поле пустым" -#: class/ShMapperDrive.class.php:194 +#: class/ShMapperDrive.class.php:191 msgid "Column for unique id" -msgstr "Колонка для уникального идентификатора" +msgstr "Столбец для уникального идентификатора" -#: class/ShMapperDrive.class.php:206 +#: class/ShMapperDrive.class.php:203 msgid "Point title column" msgstr "Столбец заголовка маркера" -#: class/ShMapperDrive.class.php:217 +#: class/ShMapperDrive.class.php:214 msgid "Point description column" -msgstr "Столбец описание маркера" +msgstr "Столбец описания маркера" -#: class/ShMapperDrive.class.php:228 +#: class/ShMapperDrive.class.php:225 msgid "Post date column" msgstr "Столбец даты публикации" -#: class/ShMapperDrive.class.php:241 +#: class/ShMapperDrive.class.php:238 msgid "Is fix post date?" msgstr "Исправить дату публикации?" -#: class/ShMapperDrive.class.php:256 -msgid "add Map marker type" -msgstr "Добавить новый" +#: class/ShMapperDrive.class.php:250 +msgid "Select marker type" +msgstr "Выберите тип маркера" + +#: class/ShMapperDrive.class.php:252 +msgid "Add new marker" +msgstr "Добавить новый маркер" -#: class/ShMapperDrive.class.php:271 +#: class/ShMapperDrive.class.php:268 msgid "Select method and columns for generate Points's geo position." msgstr "Выберите метод и колонку для генерации геопозиции Маркеров." -#: class/ShMapperDrive.class.php:284 +#: class/ShMapperDrive.class.php:281 msgid "Latitude and Longitude" -msgstr "Широты и долгота" +msgstr "Широта и долгота" -#: class/ShMapperDrive.class.php:313 +#: class/ShMapperDrive.class.php:310 msgid "Adress" msgstr "Адрес" -#: class/ShMapperDrive.class.php:329 +#: class/ShMapperDrive.class.php:326 msgid "Select columns for choose Points's different types." msgstr "Выберите столбцы для выбора разных типов точек." -#: class/ShMapperDrive.class.php:342 -msgid "Use different Point Types for Points?" -msgstr "Использовать различные типы маркеров для точек?" +#: class/ShMapperDrive.class.php:339 +msgid "Select column with marker type" +msgstr "Выберите столбец с типом маркера" -#: class/ShMapperDrive.class.php:358 +#: class/ShMapperDrive.class.php:355 msgid "" "List of columns in google table that need to parse to Point's description" msgstr "" "Список столбцов в таблице Google, которые необходимо разобрать для описанием " "точек." -#: class/ShMapperDrive.class.php:363 +#: class/ShMapperDrive.class.php:360 msgid "Column" msgstr "Колонка" -#: class/ShMapperDrive.class.php:366 +#: class/ShMapperDrive.class.php:363 msgid "Include?" msgstr "Включить?" -#: class/ShMapperDrive.class.php:367 class/ShMapperDrive.class.php:373 +#: class/ShMapperDrive.class.php:364 class/ShMapperDrive.class.php:370 msgid "necessarily" msgstr "обязательное поле" -#: class/ShMapperDrive.class.php:372 +#: class/ShMapperDrive.class.php:369 msgid "Field name by latin" msgstr "Название поля по латыни" -#: class/ShMapperDrive.class.php:378 +#: class/ShMapperDrive.class.php:375 msgid "Sub title for decription section" msgstr "Подзаголовок для секции в описании Маркера" -#: class/ShMapperDrive.class.php:381 +#: class/ShMapperDrive.class.php:378 msgid "Order" msgstr "Порядковый номер" -#: class/ShMapperDrive.class.php:393 +#: class/ShMapperDrive.class.php:390 msgid "If your Google spreadsheet has one text in the specified column" msgstr "Если в нескольких полях в данной колонке будет одинаковое содержимое" -#: class/ShMapperDrive.class.php:406 +#: class/ShMapperDrive.class.php:403 msgid "" "Use only first row for creation new Point or updating included Point and " "ignore over." @@ -716,7 +715,7 @@ msgstr "" "Использовать только первую строку для создания нового Маркера или " "редактирования уже существующего и игнорировать остальные строки." -#: class/ShMapperDrive.class.php:419 +#: class/ShMapperDrive.class.php:416 msgid "" "Use only last row for creation new Point or updating included Point and " "ignore over." @@ -724,7 +723,7 @@ msgstr "" "Использовать только последнюю строку для создания нового Маркера или " "редактирования уже существующего и игнорировать остальные строки." -#: class/ShMapperDrive.class.php:432 +#: class/ShMapperDrive.class.php:429 msgid "" "Use only first row for creation new Point or updating included Point. Over " "some rows use for creation new Message or updating included Messages for " @@ -734,13 +733,13 @@ msgstr "" "редактирования уже существующего. Остальные строки использовать для создания " "или редактирования Сообщений для этого Маркера" -#: class/ShMapperDrive.class.php:445 +#: class/ShMapperDrive.class.php:442 msgid "Preview results" msgstr "Предпросмотр результата импора" -#: class/ShMapperDrive.class.php:448 +#: class/ShMapperDrive.class.php:445 msgid "Create or update Poins and Messages" -msgstr "Создать или обновить Маркеры и Сообшения" +msgstr "Создать или обновить Маркеры и Сообщения" #: class/ShMapperDrive_ajax.class.php:77 msgid "Update successful!" @@ -1438,6 +1437,18 @@ msgstr "Теплица социальных технологий" msgid "https://te-st.ru" msgstr "https://te-st.ru" +#~ msgid "Add marker type" +#~ msgstr "Добавить тип маркера" + +#~ msgid "Use different Point Types for Points?" +#~ msgstr "Использовать различные типы маркеров для точек?" + +#~ msgid "add Map marker type" +#~ msgstr "Добавить новый" + +#~ msgid "Columns of table parse to meta-fields" +#~ msgstr "Столбцы таблицы разбора на мета-поля" + #~ msgid "" #~ "Use column as unique for update Point or add Messages for included Points" #~ msgstr "" diff --git a/languages/shmapper-by-teplitsa.pot b/languages/shmapper-by-teplitsa.pot index 094c9d0..d462f75 100644 --- a/languages/shmapper-by-teplitsa.pot +++ b/languages/shmapper-by-teplitsa.pot @@ -3,7 +3,7 @@ msgid "" msgstr "" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "Project-Id-Version: ShMapper by Teplitsa\n" -"POT-Creation-Date: 2021-02-23 17:27+0200\n" +"POT-Creation-Date: 2021-02-26 06:06+0200\n" "PO-Revision-Date: 2020-06-18 05:16+0300\n" "Last-Translator: \n" "Language-Team: \n" @@ -52,8 +52,7 @@ msgid "Parameters" msgstr "" #: class/ShMapPointType.class.php:37 class/ShMapPointType.class.php:38 -#: class/ShMapPointType.class.php:48 class/ShMapperDrive.class.php:253 -#: class/ShmPoint.class.php:126 +#: class/ShMapPointType.class.php:48 class/ShmPoint.class.php:126 msgid "Map marker type" msgstr "" @@ -291,7 +290,7 @@ msgstr "" msgid "Required Personal phone" msgstr "" -#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:181 +#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:178 #: class/ShmMap.class.php:76 class/ShmMap.class.php:77 #: widget/ShMap.widget.php:72 msgid "Map" @@ -334,7 +333,7 @@ msgid "Accessed User" msgstr "" #: class/ShMapper.class.php:284 class/ShMapper.class.php:393 -#: class/ShMapperDrive.class.php:128 +#: class/ShMapperDrive.class.php:125 msgid "Attantion" msgstr "" @@ -359,7 +358,7 @@ msgid "Are you shure?" msgstr "" #: class/ShMapper.class.php:444 class/ShMapper.class.php:445 -#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:442 +#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:439 msgid "Settings" msgstr "" @@ -542,159 +541,159 @@ msgid "Google Table ID source" msgstr "" #: class/ShMapperDrive.class.php:120 -msgid "Parsing from Google table" -msgstr "" - -#: class/ShMapperDrive.class.php:122 -msgid "Columns of table parse to meta-fields" +msgid "Export from Google Sheet" msgstr "" -#: class/ShMapperDrive.class.php:131 +#: class/ShMapperDrive.class.php:128 msgid "Rules for Google snapshot structure." msgstr "" -#: class/ShMapperDrive.class.php:133 +#: class/ShMapperDrive.class.php:130 msgid "" "Google-table must have access rights 'For everyone on the Internet' or 'For " "everyone who has a link'" msgstr "" -#: class/ShMapperDrive.class.php:134 +#: class/ShMapperDrive.class.php:131 msgid "In file must be only one screen." msgstr "" -#: class/ShMapperDrive.class.php:135 +#: class/ShMapperDrive.class.php:132 msgid "First row must have only legends of columns." msgstr "" -#: class/ShMapperDrive.class.php:136 +#: class/ShMapperDrive.class.php:133 msgid "" "If Points are have different Point types you must reserve one column for " "Point type and fill it ID of this types." msgstr "" -#: class/ShMapperDrive.class.php:137 +#: class/ShMapperDrive.class.php:134 msgid "" "If you want to have geo position you must reserve one column for adress or 2 " "columns for longitude and latitude." msgstr "" -#: class/ShMapperDrive.class.php:143 +#: class/ShMapperDrive.class.php:140 msgid "" "Google table document ID. For example: 1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U in https://docs.google.com/" "spreadsheets/d/1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U/edit#gid=7101094" msgstr "" -#: class/ShMapperDrive.class.php:162 +#: class/ShMapperDrive.class.php:159 msgid "Skip first rows count" msgstr "" -#: class/ShMapperDrive.class.php:174 +#: class/ShMapperDrive.class.php:171 msgid "Execute next rows count. Empty for all." msgstr "" -#: class/ShMapperDrive.class.php:194 +#: class/ShMapperDrive.class.php:191 msgid "Column for unique id" msgstr "" -#: class/ShMapperDrive.class.php:206 +#: class/ShMapperDrive.class.php:203 msgid "Point title column" msgstr "" -#: class/ShMapperDrive.class.php:217 +#: class/ShMapperDrive.class.php:214 msgid "Point description column" msgstr "" -#: class/ShMapperDrive.class.php:228 +#: class/ShMapperDrive.class.php:225 msgid "Post date column" msgstr "" -#: class/ShMapperDrive.class.php:241 +#: class/ShMapperDrive.class.php:238 msgid "Is fix post date?" msgstr "" -#: class/ShMapperDrive.class.php:256 -msgid "add Map marker type" +#: class/ShMapperDrive.class.php:250 +msgid "Select marker type" +msgstr "" + +#: class/ShMapperDrive.class.php:252 +msgid "Add new marker" msgstr "" -#: class/ShMapperDrive.class.php:271 +#: class/ShMapperDrive.class.php:268 msgid "Select method and columns for generate Points's geo position." msgstr "" -#: class/ShMapperDrive.class.php:284 +#: class/ShMapperDrive.class.php:281 msgid "Latitude and Longitude" msgstr "" -#: class/ShMapperDrive.class.php:313 +#: class/ShMapperDrive.class.php:310 msgid "Adress" msgstr "" -#: class/ShMapperDrive.class.php:329 +#: class/ShMapperDrive.class.php:326 msgid "Select columns for choose Points's different types." msgstr "" -#: class/ShMapperDrive.class.php:342 -msgid "Use different Point Types for Points?" +#: class/ShMapperDrive.class.php:339 +msgid "Select column with marker type" msgstr "" -#: class/ShMapperDrive.class.php:358 +#: class/ShMapperDrive.class.php:355 msgid "" "List of columns in google table that need to parse to Point's description" msgstr "" -#: class/ShMapperDrive.class.php:363 +#: class/ShMapperDrive.class.php:360 msgid "Column" msgstr "" -#: class/ShMapperDrive.class.php:366 +#: class/ShMapperDrive.class.php:363 msgid "Include?" msgstr "" -#: class/ShMapperDrive.class.php:367 class/ShMapperDrive.class.php:373 +#: class/ShMapperDrive.class.php:364 class/ShMapperDrive.class.php:370 msgid "necessarily" msgstr "" -#: class/ShMapperDrive.class.php:372 +#: class/ShMapperDrive.class.php:369 msgid "Field name by latin" msgstr "" -#: class/ShMapperDrive.class.php:378 +#: class/ShMapperDrive.class.php:375 msgid "Sub title for decription section" msgstr "" -#: class/ShMapperDrive.class.php:381 +#: class/ShMapperDrive.class.php:378 msgid "Order" msgstr "" -#: class/ShMapperDrive.class.php:393 +#: class/ShMapperDrive.class.php:390 msgid "If your Google spreadsheet has one text in the specified column" msgstr "" -#: class/ShMapperDrive.class.php:406 +#: class/ShMapperDrive.class.php:403 msgid "" "Use only first row for creation new Point or updating included Point and " "ignore over." msgstr "" -#: class/ShMapperDrive.class.php:419 +#: class/ShMapperDrive.class.php:416 msgid "" "Use only last row for creation new Point or updating included Point and " "ignore over." msgstr "" -#: class/ShMapperDrive.class.php:432 +#: class/ShMapperDrive.class.php:429 msgid "" "Use only first row for creation new Point or updating included Point. Over " "some rows use for creation new Message or updating included Messages for " "Point" msgstr "" -#: class/ShMapperDrive.class.php:445 +#: class/ShMapperDrive.class.php:442 msgid "Preview results" msgstr "" -#: class/ShMapperDrive.class.php:448 +#: class/ShMapperDrive.class.php:445 msgid "Create or update Poins and Messages" msgstr "" From 37ff6914d8c43e5da1ad37d3f53677a6168dcfe2 Mon Sep 17 00:00:00 2001 From: BootWP Date: Fri, 26 Feb 2021 06:26:23 +0200 Subject: [PATCH 094/220] Update readme.txt --- README.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.txt b/README.txt index 29c0b4b..c0f3b6c 100644 --- a/README.txt +++ b/README.txt @@ -58,8 +58,11 @@ No questions yet. == Changelog == -= 1.4.0 = -* Added support for importing data from Google Sheets. + += 1.4.1 = +* Added: Support for importing data from Google Sheets. +* Added: Highlighting the country on the map. +* Fix: Unauthorized users could drag and drop markers on the map. = 1.3.6 = * WordPress 5.5 compatibility. From c8b57021f75b2dc2e5e893f7feaeab424adbc5b3 Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 4 Apr 2021 16:36:56 +0300 Subject: [PATCH 095/220] Fix import markers by coordinates. --- README.txt | 4 +-- class/ShMapperDrive.class.php | 2 +- class/ShMapperDriverPreview.class.php | 47 +++++++++++---------------- shmapper.php | 4 +-- 4 files changed, 24 insertions(+), 33 deletions(-) diff --git a/README.txt b/README.txt index c0f3b6c..0e0ff5d 100644 --- a/README.txt +++ b/README.txt @@ -3,8 +3,8 @@ Contributors: Genagl, Ahaenor, denis.cherniatev, burdianov, teplosup Author URI: https://te-st.ru/ Plugin URI: http://genagl.ru/?p=652 Tags: map, OpenStreetMap, OSM, yandex.map, crowdsourcing, карта, Яндекс.карты, картирование, mapping, crowdsourced mapping, user mapping -Requires at least: 3.6.1 -Tested up to: 5.5.1 +Requires at least: 5.0 +Tested up to: 5.7 Requires PHP: 5.6 Stable tag: trunk License: GPLv2 or later diff --git a/class/ShMapperDrive.class.php b/class/ShMapperDrive.class.php index 3b4020d..06b84cd 100644 --- a/class/ShMapperDrive.class.php +++ b/class/ShMapperDrive.class.php @@ -525,4 +525,4 @@ function googleColumnIdent_dropdown( $params ) } $html .= ""; return $html; -} \ No newline at end of file +} diff --git a/class/ShMapperDriverPreview.class.php b/class/ShMapperDriverPreview.class.php index 8f85b68..9e0c98c 100644 --- a/class/ShMapperDriverPreview.class.php +++ b/class/ShMapperDriverPreview.class.php @@ -1,4 +1,4 @@ - $post_title, 'post_title' => $post_title, @@ -176,13 +176,12 @@ static function update() $type = get_term( $nType, SHM_POINT_TYPE ); } $icon = ShMapPointType::get_icon($type, false, false); - - // post_date - 4 + + // post_date - 4 if(ShMapperDrive::$options['is_google_post_date']) $post_date = strtotime( $m[ getSingleGoogleOrder(ShMapperDrive::$options['post_date']) ]); else $post_date = time(); - $ii = 0; foreach(ShMapperDrive::$options['google_matrix_data'] as $n) { @@ -203,7 +202,7 @@ static function update() } $post_title = $m[ getSingleGoogleOrder(ShMapperDrive::$options['shmd_post_title']) ]; $post_content = $m[ getSingleGoogleOrder(ShMapperDrive::$options['shmd_post_desc']) ]; - //$post_content = $cont; + $point = ShmPoint::insert([ 'post_name' => $post_title, 'post_title' => $post_title, @@ -222,14 +221,10 @@ static function update() } $i++; } - - //var_dump($copies ); - //wp_die(); - + } - static function delete() - { - static::$google_table_id = ShMapperDrive::$options["google_table_id"]; + static function delete() { + static::$google_table_id = ShMapperDrive::$options["google_table_id"]; $posts = get_posts([ "numberposts" => -1, "post_type" => [ ShmPoint::get_type(), ShMapperPointMessage::get_type() ], @@ -243,9 +238,8 @@ static function delete() "compare" => "LIKE" ] ] - ]); - //var_dump( $posts ); - //wp_die(); + ] ); + if( count($posts) > 0 ) { foreach($posts as $postid) @@ -254,15 +248,13 @@ static function delete() } } } - - static function getGeoPosition( $m ) - { - switch( ShMapperDrive::$options['google_geo_position']) - { + + static function getGeoPosition( $m ) { + switch( ShMapperDrive::$options['google_geo_position'] ) { case 0: return [ - $m[ getSingleGoogleOrder( static::$options['google_geo_lon'] ) ], - $m[ getSingleGoogleOrder( static::$options['google_geo_lat'] ) ] + $m[ getSingleGoogleOrder( ShMapperDrive::$options['google_geo_lon'] ) ], + $m[ getSingleGoogleOrder( ShMapperDrive::$options['google_geo_lat'] ) ] ]; case 1: $adress_identer = ShMapperDrive::$options['google_geo_adress']; @@ -272,8 +264,7 @@ static function getGeoPosition( $m ) return []; } } - static function geocode($address) - { + static function geocode($address) { //$address = "Москва, Тверская, 12"; $key = "921be5a4-36cd-4485-8f57-2c24f94dab32"; $yandex_key = "8202b217-b7c5-4c31-8abb-6030094cc780"; @@ -284,4 +275,4 @@ static function geocode($address) $location = explode(" ", $location); return $location; } -} \ No newline at end of file +} diff --git a/shmapper.php b/shmapper.php index 71582be..feb8afa 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.4.1 + * Version: 1.4.1.1 * Requires at least: 5.0 * Requires PHP: 5.6 * Author: Teplitsa. Technologies for Social Good @@ -35,7 +35,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ +*/ /** Load textdomain */ function init_textdomain_shmapper() { From 04f87b6572b8b46d07cda6fa1d154a676551f1b4 Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 4 Apr 2021 16:38:40 +0300 Subject: [PATCH 096/220] Update version. --- shmapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shmapper.php b/shmapper.php index feb8afa..8ac9101 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.4.1.1 + * Version: 1.4.2 * Requires at least: 5.0 * Requires PHP: 5.6 * Author: Teplitsa. Technologies for Social Good From 9a677b1fa98aebc18a0a197a4ad332a579e68f2a Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 9 May 2021 16:32:14 +0300 Subject: [PATCH 097/220] Improve wizzard style. --- assets/css/ShMapper.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/css/ShMapper.css b/assets/css/ShMapper.css index 120dd40..4e32f12 100644 --- a/assets/css/ShMapper.css +++ b/assets/css/ShMapper.css @@ -278,6 +278,11 @@ margin-left: -15px; margin-top: 15px; } +#adminmenu .shm_wizzard_footer a:hover { + cursor: pointer; + box-shadow: none; + color: #fff; +} .shm_wizzard_line { From b58e5c8e30c5e75ecbaac7c93d1371b0053347fc Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 9 May 2021 17:01:43 +0300 Subject: [PATCH 098/220] Fix undefined default options. --- class/ShMapperDrive.class.php | 9 +++++++++ class/ShmMap.class.php | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/class/ShMapperDrive.class.php b/class/ShMapperDrive.class.php index 06b84cd..2853c26 100644 --- a/class/ShMapperDrive.class.php +++ b/class/ShMapperDrive.class.php @@ -42,6 +42,15 @@ function __construct() 'google_geo_lon', 'is_google_point_type', 'google_unique', + 'google_geo_adress', + 'post_date', + 'shmd_post_title', + 'shmd_post_desc', + 'google_table_id', + 'map_id', + 'google_geo_position', + 'google_point_type', + 'shm_doubled', ); foreach ( $defaults as $default ) { diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 3be6d9d..6ff3f45 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -553,10 +553,10 @@ static function save_admin_edit($obj) "width" => sanitize_text_field($_POST['width']), "height" => sanitize_text_field($_POST['height']), - 'highlight_country' => sanitize_text_field( $_POST['highlight_country'] ), - 'overlay_color' => sanitize_hex_color( $_POST['overlay_color'] ), - 'border_color' => sanitize_hex_color( $_POST['border_color'] ), - 'overlay_opacity' => sanitize_text_field( $_POST['overlay_opacity'] ), + 'highlight_country' => sanitize_text_field( isset( $_POST['highlight_country'] ) ? $_POST['highlight_country'] : '' ), + 'overlay_color' => sanitize_hex_color( isset( $_POST['overlay_color'] ) ? $_POST['overlay_color'] : '' ), + 'border_color' => sanitize_hex_color( isset( $_POST['border_color'] ) ? $_POST['border_color'] : '' ), + 'overlay_opacity' => sanitize_text_field( isset( $_POST['overlay_opacity'] ) ? $_POST['overlay_opacity'] : '' ), "is_form" => empty($_POST['is_form']) ? 0 : 1, "form_title" => sanitize_text_field($_POST['form_title']), From d60bf83f191193888628882f9f3e7677db58df00 Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 9 May 2021 18:57:04 +0300 Subject: [PATCH 099/220] Fix console infinite error. --- assets/js/ShMapper.js | 24 +++++++++++++++--------- assets/js/ShMapperDrive.admin.js | 14 +++++++------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/assets/js/ShMapper.js b/assets/js/ShMapper.js index 8c618d9..ef3bc7c 100644 --- a/assets/js/ShMapper.js +++ b/assets/js/ShMapper.js @@ -66,8 +66,8 @@ jQuery(document).ready(function($) var shmDefaultLongitude = $('[name=shm_default_longitude]').val(); var shmDefaultLatitude = $('[name=shm_default_latitude]').val(); shm_send([ 'shm_default_coordinates', [ shmDefaultLongitude, shmDefaultLatitude ] ]); - console.log(shmDefaultLongitude); - console.log(shmDefaultLatitude) ; + //console.log(shmDefaultLongitude); + //console.log(shmDefaultLatitude) ; }); $("[name=shm_default_zoom]").on( 'change', function(evt) { setTimeout(function(){ @@ -394,7 +394,7 @@ jQuery(document).ready(function($) function shm_send( params, type ) { var $ = jQuery; - console.log(params, type); + //console.log(params, type); jQuery.post ( myajax.url, @@ -406,7 +406,7 @@ function shm_send( params, type ) function( response ) { var $ = jQuery; - console.log(response); + //console.log(response); try { var dat = JSON.parse(response); @@ -418,7 +418,7 @@ function shm_send( params, type ) //alert(dat); var command = dat[0]; var datas = dat[1]; - //console.log(command); + console.log(command); switch(command) { case "test": @@ -555,12 +555,18 @@ function shm_send( params, type ) } if(datas.msg) { - jQuery(".msg").detach(); - clearTimeout(setmsg); - jQuery("
    " + datas.msg + "
    ").appendTo("body").hide().fadeIn("slow"); + + clearTimeout( setmsg ); + + if ( $( 'body > .msg' ).length ) { + $( 'body > .msg' ).remove(); + } + $('
    ' + datas.msg + '
    ').appendTo('body'); + setmsg = setTimeout( function() { - jQuery(".msg").fadeOut(700, jQuery(".msg").detach()); + $( 'body > .msg' ).fadeOut( 700 ); }, 6000); + } } ); diff --git a/assets/js/ShMapperDrive.admin.js b/assets/js/ShMapperDrive.admin.js index b8fb485..1770a53 100644 --- a/assets/js/ShMapperDrive.admin.js +++ b/assets/js/ShMapperDrive.admin.js @@ -32,7 +32,7 @@ jQuery(document).ready(function($) if(!google_data[i]) google_data[i] = {}; var clone = $("#google_null").clone(); - console.log( google_data[i] ); + //console.log( google_data[i] ); google_data[i].include = typeof google_data[i].include != "undefined" ? parseInt(google_data[i].include) : 1; google_data[i].title = typeof google_data[i].title != "undefined" ? google_data[i].title : google_matrix[0][i].toString(); google_data[i].meta = typeof google_data[i].meta != "undefined" ? google_data[i].meta : getSingleGoogleIdenter( i ); @@ -49,7 +49,7 @@ jQuery(document).ready(function($) $("#google_row").append( clone ); n++; } - console.log(google_data); + //console.log(google_data); } var querry = { "google-include" : "include", @@ -87,7 +87,7 @@ jQuery(document).ready(function($) }); $(" #shm-google-reload, [name='google_table_id']").click(function(evt) { - shm_send([ 'load_google_table', $("[name='google_table_id']").val() ]); + shm_send([ 'load_google_table', $("[name='google_table_id']").val() ]); }); $("#shmd_settings_open").click(function(evt) { @@ -115,14 +115,14 @@ jQuery(document).ready(function($) //ajax document.addEventListener("_shm_send_", function( event ) { - console.log( event.detail ); + //console.log( event.detail ); switch(event.detail[0]) { case "load_google_table": google_matrix = event.detail[1].matrix; google_data = event.detail[1].data; - console.log( google_matrix ); - console.log( google_data ); + //console.log( google_matrix ); + //console.log( google_data ); generate_matrix_table(); break; case "shmd_google_preview": @@ -136,7 +136,7 @@ jQuery(document).ready(function($) }); document.addEventListener("shm_point_click", function( event ) { - console.log( event.detail ); + //console.log( event.detail ); }); }); \ No newline at end of file From 653d1b65c74ae18eb957c84c8b90fba904c846b8 Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 9 May 2021 18:57:34 +0300 Subject: [PATCH 100/220] Fix undefined file and post. --- class/ShmPoint.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index 1ca6a9e..1347d94 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -153,8 +153,8 @@ static function update_map_owners($obj) $q[] = " (NULL, '".$obj->id."', '$owner', '".time()."', '0', '1', '0')"; } $query .= implode(",", $q); - $current = file_get_contents( ABSPATH. "alert.log" ); - file_put_contents( ABSPATH. "alert.log", $current. $query."\n" ); + //$current = file_get_contents( ABSPATH. "alert.log" ); + //file_put_contents( ABSPATH. "alert.log", $current. $query."\n" ); $wpdb->query( $query ); return $query; } @@ -169,7 +169,7 @@ static function save_admin_edit( $obj ) { 'longitude' => sanitize_text_field( $_POST['longitude'] ), 'location' => sanitize_textarea_field( $_POST['location'] ), 'zoom' => sanitize_text_field( $_POST['zoom'] ), - 'approved' => sanitize_text_field( $_POST['approved'] ), + 'approved' => sanitize_text_field( isset( $_POST['approved'] ) ? $_POST['approved'] : '' ), ); } From 69cae159f62230f96a190adaae4f6cbaf554dd95 Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 9 May 2021 19:39:09 +0300 Subject: [PATCH 101/220] Replace commas with dots in imported coordinates. --- assets/js/ShMapper_osm.js | 2 +- class/ShMapperDriverPreview.class.php | 8 ++++---- class/ShmPoint.class.php | 24 +++++++++++++----------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/assets/js/ShMapper_osm.js b/assets/js/ShMapper_osm.js index 6d61379..b6a0e4e 100644 --- a/assets/js/ShMapper_osm.js +++ b/assets/js/ShMapper_osm.js @@ -224,7 +224,7 @@ jQuery(document).ready(function($) //boxZoom:true, }); shm_maps[mData.uniq] = myMap; - all_markers[mData.uniq] = []; + all_markers[mData.uniq] = []; //layer switcher if(mData.isLayerSwitcher) diff --git a/class/ShMapperDriverPreview.class.php b/class/ShMapperDriverPreview.class.php index 9e0c98c..4978c63 100644 --- a/class/ShMapperDriverPreview.class.php +++ b/class/ShMapperDriverPreview.class.php @@ -152,8 +152,8 @@ static function update() 'post_name' => $post_title, 'post_title' => $post_title, 'post_content' => $post_content, - 'latitude' => $geocode[1], - 'longitude' => $geocode[0], + 'latitude' => str_replace( ',', '.', $geocode[1] ), + 'longitude' => str_replace( ',', '.', $geocode[0] ), SHM_POINT => $copies[0], "google_table_id"=> static::$google_table_id ]); @@ -207,8 +207,8 @@ static function update() 'post_name' => $post_title, 'post_title' => $post_title, 'post_content' => $post_content, - 'latitude' => $geocode[1], - 'longitude' => $geocode[0], + 'latitude' => str_replace( ',', '.', $geocode[1] ), + 'longitude' => str_replace( ',', '.', $geocode[0] ), "google_table_id"=> static::$google_table_id ]); wp_set_object_terms( $point->id, [ $type->term_id ], SHM_POINT_TYPE ); diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index 1347d94..556bddf 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -82,15 +82,15 @@ static function view_admin_edit($obj) { case "latitude": $meta = $meta ? $meta : $default_latitude; - $opacity = " style='display:none;' " ; + $opacity = '';//" style='display:none;' " ; break; case "longitude": $meta = $meta ? $meta : $default_longitude; - $opacity = " style='display:none;' " ; + $opacity = '';//" style='display:none;' " ; break; case "zoom": $meta = $meta ? $meta : $default_zoom; - $opacity = " style='display:none;' " ; + $opacity = '';//" style='display:none;' " ; break; default: $opacity = " "; @@ -148,14 +148,16 @@ static function update_map_owners($obj) $query = "INSERT INTO ".$wpdb->prefix."point_map (`ID`, `point_id`, `map_id`, `date`, `session_id`, `approved_date`, `approve_user_id`) VALUES"; $q = []; - foreach($_POST['owner_id'] as $owner) - { - $q[] = " (NULL, '".$obj->id."', '$owner', '".time()."', '0', '1', '0')"; + if ( isset( $_POST['owner_id'] ) ) { + foreach($_POST['owner_id'] as $owner) + { + $q[] = " (NULL, '".$obj->id."', '$owner', '".time()."', '0', '1', '0')"; + } + $query .= implode(",", $q); + //$current = file_get_contents( ABSPATH. "alert.log" ); + //file_put_contents( ABSPATH. "alert.log", $current. $query."\n" ); + $wpdb->query( $query ); } - $query .= implode(",", $q); - //$current = file_get_contents( ABSPATH. "alert.log" ); - //file_put_contents( ABSPATH. "alert.log", $current. $query."\n" ); - $wpdb->query( $query ); return $query; } @@ -204,7 +206,7 @@ static function owner_fields_edit($obj = false, $type = 'checkbox')
  • "; From cc0f9410246462de6dc991b58e6e46e1c037f3d5 Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 9 May 2021 19:48:28 +0300 Subject: [PATCH 102/220] Hide google map id on edit marker page. --- class/ShmPoint.class.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/class/ShmPoint.class.php b/class/ShmPoint.class.php index 556bddf..c5b4478 100644 --- a/class/ShmPoint.class.php +++ b/class/ShmPoint.class.php @@ -82,15 +82,18 @@ static function view_admin_edit($obj) { case "latitude": $meta = $meta ? $meta : $default_latitude; - $opacity = '';//" style='display:none;' " ; + $opacity = " style='display:none;' " ; break; case "longitude": $meta = $meta ? $meta : $default_longitude; - $opacity = '';//" style='display:none;' " ; + $opacity = " style='display:none;' " ; break; case "zoom": $meta = $meta ? $meta : $default_zoom; - $opacity = '';//" style='display:none;' " ; + $opacity = " style='display:none;' " ; + break; + case "google_table_id": + $opacity = " style='display:none;' " ; break; default: $opacity = " "; From 04513c0e6fa220527f3ab24b9d2aaeabac851e1d Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 9 May 2021 20:07:26 +0300 Subject: [PATCH 103/220] Fix not defined captcha --- class/ShMapper_Assistants.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/class/ShMapper_Assistants.class.php b/class/ShMapper_Assistants.class.php index 0a73c71..1ddd624 100644 --- a/class/ShMapper_Assistants.class.php +++ b/class/ShMapper_Assistants.class.php @@ -66,9 +66,9 @@ static function shm_after_request_form( $text ) //require_once( SHM_REAL_PATH .'assets/recaptcha-php-1.11/recaptchalib.php'); // Register API keys at https://www.google.com/recaptcha/admin - $siteKey = ShMapper::$options['shm_captcha_siteKey']; - $secret = ShMapper::$options['shm_captcha_secretKey']; - + $siteKey = isset( ShMapper::$options['shm_captcha_siteKey'] ) ? ShMapper::$options['shm_captcha_siteKey'] : ''; + $secret = isset( ShMapper::$options['shm_captcha_secretKey'] ) ? ShMapper::$options['shm_captcha_secretKey'] : ''; + // reCAPTCHA supported 40+ languages listed here: https://developers.google.com/recaptcha/docs/language $html = '
    From 62831095ad58f43a61b88084096d829913eb8f31 Mon Sep 17 00:00:00 2001 From: BootWP Date: Sun, 9 May 2021 20:11:07 +0300 Subject: [PATCH 104/220] Update version. --- shmapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shmapper.php b/shmapper.php index 8ac9101..9d89ac4 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.4.2 + * Version: 1.4.3 * Requires at least: 5.0 * Requires PHP: 5.6 * Author: Teplitsa. Technologies for Social Good From 6e8cdf468c02ed653874323efecb7a4d455495d6 Mon Sep 17 00:00:00 2001 From: BootWP Date: Wed, 19 May 2021 05:43:29 +0300 Subject: [PATCH 105/220] Improve front form submit. --- assets/js/ShMapper.front.js | 8 ++++++-- assets/js/ShMapper.yandex.js | 3 --- shmapper.php | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/assets/js/ShMapper.front.js b/assets/js/ShMapper.front.js index 159c47d..a2155a6 100644 --- a/assets/js/ShMapper.front.js +++ b/assets/js/ShMapper.front.js @@ -82,8 +82,12 @@ jQuery(document).ready(function($) var clear_form = new CustomEvent("clear_form", {bubbles : true, cancelable : true, detail : dat}); document.documentElement.dispatchEvent(clear_form); - if(response.reload) - window.location.reload(window.location.href); + if( response.reload ) { + setTimeout( function(){ + window.location.reload(window.location.href); + }, 3000 ); + } + }, data: d, error: function( jqXHR, status, errorThrown ) diff --git a/assets/js/ShMapper.yandex.js b/assets/js/ShMapper.yandex.js index dd13788..999a774 100644 --- a/assets/js/ShMapper.yandex.js +++ b/assets/js/ShMapper.yandex.js @@ -162,9 +162,6 @@ jQuery(document).ready(function($) isDraggable = true; } - console.log(isDraggable); - console.log(shmYa.isAdmin); - // init_map = function(mData, points) { diff --git a/shmapper.php b/shmapper.php index 9d89ac4..7fb48c6 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.4.3 + * Version: 1.4.3.1 * Requires at least: 5.0 * Requires PHP: 5.6 * Author: Teplitsa. Technologies for Social Good From 97669699aae6333963a8f793113b1c15570c8273 Mon Sep 17 00:00:00 2001 From: BootWP Date: Sat, 10 Jul 2021 11:06:34 +0300 Subject: [PATCH 106/220] Add new module, Yandex Tracks. --- assets/css/ShMapper.css | 188 +++- assets/css/ShMapperDrive.css | 3 + assets/css/ShmapperTracks.css | 333 ++++++ assets/css/ion.rangeSlider.css | 126 +++ assets/css/ion.rangeSlider.min.css | 1 + assets/css/ion.rangeSlider.skinFlat.css | 89 ++ assets/css/ion.rangeSlider.skinNice.css | 85 ++ assets/css/ion.rangeSlider.skinSimple.css | 85 ++ assets/img/edge.svg | 18 + assets/js/ShMapper.admin.js | 28 +- assets/js/ShMapper.front.js | 7 +- assets/js/ShMapper.js | 12 +- assets/js/ShMapper.yandex.js | 7 +- assets/js/ShmapperTracks.js | 1162 +++++++++++++++++++++ assets/js/admin.js | 393 +++++++ assets/js/ion.rangeSlider.min.js | 2 + assets/recaptcha-php/example-mailhide.php | 4 +- class/SMC_Object_type.php | 8 + class/SMC_Post.php | 108 +- class/ShMapPointType.class.php | 28 + class/ShMapTrackType.class.php | 333 ++++++ class/ShMaperTrack.class.php | 807 ++++++++++++++ class/ShMapper.class.php | 91 +- class/ShMapperDrive.class.php | 12 +- class/ShMapperPointMessage.class.php | 4 + class/ShMapperRequest.class.php | 55 +- class/ShMapperTracks.class.php | 210 ++++ class/ShMapperTracksAjax.class.php | 234 +++++ class/ShMapperTracksPoint.class.php | 57 + class/ShMapper_ajax.class.php | 3 +- class/ShmForm.class.php | 359 ++++--- class/ShmMap.class.php | 160 +-- languages/shmapper-by-teplitsa-ru_RU.mo | Bin 33617 -> 39000 bytes languages/shmapper-by-teplitsa-ru_RU.po | 843 ++++++++++----- languages/shmapper-by-teplitsa.pot | 809 +++++++++----- shmapper.php | 7 +- shmapperTracks.plugin.php | 42 + shortcode/shmMap.shortcode.php | 2 +- shortcode/shmMapTrack.shortcode.php | 35 + 39 files changed, 5882 insertions(+), 868 deletions(-) create mode 100644 assets/css/ShmapperTracks.css create mode 100644 assets/css/ion.rangeSlider.css create mode 100644 assets/css/ion.rangeSlider.min.css create mode 100644 assets/css/ion.rangeSlider.skinFlat.css create mode 100644 assets/css/ion.rangeSlider.skinNice.css create mode 100644 assets/css/ion.rangeSlider.skinSimple.css create mode 100644 assets/img/edge.svg create mode 100644 assets/js/ShmapperTracks.js create mode 100644 assets/js/admin.js create mode 100644 assets/js/ion.rangeSlider.min.js create mode 100644 class/ShMapTrackType.class.php create mode 100644 class/ShMaperTrack.class.php create mode 100644 class/ShMapperTracks.class.php create mode 100644 class/ShMapperTracksAjax.class.php create mode 100644 class/ShMapperTracksPoint.class.php create mode 100644 shmapperTracks.plugin.php create mode 100644 shortcode/shmMapTrack.shortcode.php diff --git a/assets/css/ShMapper.css b/assets/css/ShMapper.css index 4e32f12..c882bc1 100644 --- a/assets/css/ShMapper.css +++ b/assets/css/ShMapper.css @@ -23,10 +23,32 @@ background-repeat:no-repeat; background-position: center; } +.shm-justify-between +{ + display:flex; + justify-content: space-between; +} +.shm-h-100 +{ + height:100%; +} +.shm-w-100 +{ + width:100%; +} .shm-flex { display:flex; } +.shm-flex-columns +{ + display:flex; + flex-direction:column; +} +.shm-align-items-center +{ + align-items:center; +} .shm-admin-block { min-width:270px; @@ -50,6 +72,10 @@ { width:100%; } +.shmw-50 +{ + width:50%; +} .osm-point { position:absolute; @@ -60,6 +86,26 @@ background: -webkit-canvas(circles); background-color:#FF0000; } +.shm-mr-15 +{ + margin-right:15px!important; +} +.shm-ml-15 +{ + margin-left : 15px!important; +} +.shm-m-2 +{ + margin : 2px!important; +} +.shm-mr-2 +{ + margin-right : 2px!important; +} +.shm-ml-2 +{ + margin-left : 2px!important; +} .shm-size-40 { font-size:40px; @@ -86,6 +132,60 @@ left: 5px; z-index: -100; } +.shm-button +{ + display: inline-block; + text-decoration: none; + font-size: 13px; + line-height: 2.15384615; + min-height: 30px; + margin: 0; + padding: 0 10px; + cursor: pointer; + border-width: 1px; + border-style: solid; + -webkit-appearance: none; + border-radius: 3px; + white-space: nowrap; + box-sizing: border-box; + color: #0071a1; + border-color: #0071a1; + background: #f3f5f6; + vertical-align: top; + text-align:center; + -webkit-transition: all 100ms ease-out; + -moz-transition: all 100ms ease-out; + -ms-transition: all 100ms ease-out; + -o-transition: all 100ms ease-out; + transition: all 100ms ease-out; +} +.shm-button:hover +{ + color: #000; + border-color: #000; +} +.shm-button:active +{ + background: #FFF; +} +textarea::-webkit-input-placeholder +{ + color:#00000040; +} +textarea::-moz-placeholder +{ + color:#00000040; +} +/* Firefox 19+ */ +textarea:-moz-placeholder +{ + color:#00000040; +} +/* Firefox 18- */ +textarea:-ms-input-placeholder +{ + color:#00000040; +} @keyframes wobblehor { 0% @@ -568,9 +668,13 @@ margin:0 5px 0 0; color:#FFF!important; } +.shm-padding-0 +{ + padding:0px!important; +} .shm-padding-20 { - padding:20px; + padding:20px!important; } .shm-title, .shm-title-1, @@ -652,7 +756,7 @@ display:block; height:30px; } -.hidden +.hidden, ._hidden { display:none!important; } @@ -997,12 +1101,13 @@ tfoot .shm-notify2:after background-color: rgba(255,255,255,0.125); } .shm-form-placemarks -{ +{ display: inline-block; padding: 5px 0 0 0 ; position: relative; } -.shm-type-icon +.shm-type-icon, +.shm-type-icon-1 { float:left; width:32px; @@ -1016,7 +1121,8 @@ tfoot .shm-notify2:after opacity:0.85; z-index: 1000; } -.shm-type-icon:hover +.shm-type-icon:hover, +.shm-type-icon-1:hover { opacity:1; } @@ -1026,6 +1132,12 @@ tfoot .shm-notify2:after background-size:24px; opacity:1; } +.shm-type-icon-1 +{ + background-size: 22px; + width: 26px; + height: 26px; +} .shm_modal_container { position:fixed; @@ -1053,6 +1165,8 @@ tfoot .shm-notify2:after min-height:100px; margin:100px auto; z-index:1; + display: flex; + flex-direction: column; } .shm_modal_header { @@ -1061,6 +1175,7 @@ tfoot .shm-notify2:after font-weight:100; font-family:sans-serif; border-bottom:1px solid rgba(0,0,0,0.125); + flex-grow: 1; } .shm_modal_body, .shm_modal_footer @@ -1069,8 +1184,34 @@ tfoot .shm-notify2:after font-size:1rem; font-weight:100; font-family:sans-serif; - max-height: 380px; overflow-y: auto; + flex-grow: 1; +} +.shm_modal_body +{ + flex-grow: 1000; + max-height: 380px; +} +.shm_modal_footer +{ + display: flex; + justify-content: flex-end; +} +.shm-max +{ + max-width: 100%; + height: 100%; + margin: 0; +} +.shm-max .shm_modal_screen +{ + max-width: 100%; + height: calc(100% - 100px); + margin: 50px; +} +.shm-max .shm_modal_body +{ + max-height: 100%; } .shm_modal_close { @@ -1538,6 +1679,32 @@ input[type=radio].ganre_checkbox2:not(checked) + label img z-index:99999; } +.shm_icon_bck +{ + position:relative; + display:flex; + flex-direction:column; + justify-content:center; + align-items: center; + padding:1px; +} +.shm_icon_placemark +{ + width:60px; + height:60px; + margin:5px; + background-size:cover; + background-repeat:no-repeat; + background-position:center; + font-size:11px; + +} +.shm_icon_placemark_title +{ + font-size:10px; + background-color:#FFFFFF ; +} + @media (-webkit-min-device-pixel-ratio:2), (min-resolution:192dpi) @@ -1604,7 +1771,8 @@ input[type=radio].ganre_checkbox2:not(checked) + label img } } -.shm-type-icon.shmapperMarkerSelected { +.shm-type-icon.shmapperMarkerSelected, +.shm-type-icon-1.shmapperMarkerSelected { border: 1px solid #111111; } @@ -1660,7 +1828,9 @@ input[type=radio].ganre_checkbox2:not(checked) + label img /** Range Control */ .shm-range[type=range] { - display: block; + display: inline-flex; + padding: 0; + border: none; -webkit-appearance: none; background-color: #bdc3c7; width: calc( 100% - 30px ); @@ -1679,7 +1849,7 @@ input[type=radio].ganre_checkbox2:not(checked) + label img cursor: pointer; transition: 0.3s ease-in-out; } -​.shm-range[type=range]::-webkit-slider-thumb:hover { +.shm-range[type=range]::-webkit-slider-thumb:hover { background-color: #006799; border: 2px solid #0085ba; } diff --git a/assets/css/ShMapperDrive.css b/assets/css/ShMapperDrive.css index d0acde2..8700965 100644 --- a/assets/css/ShMapperDrive.css +++ b/assets/css/ShMapperDrive.css @@ -79,6 +79,9 @@ margin-top: 10px; margin-bottom: 10px; } +.shm-m-0 { + margin:0!important; +} .shmd-loader { margin: 5px; animation: spin 1s linear infinite; diff --git a/assets/css/ShmapperTracks.css b/assets/css/ShmapperTracks.css new file mode 100644 index 0000000..6a6f2a8 --- /dev/null +++ b/assets/css/ShmapperTracks.css @@ -0,0 +1,333 @@ +#toplevel_page_shm_tracks_page .wp-menu-image img +{ + padding-top: 3px; + width: 28px; + height: 28px; +} +.shmapper-track-map +{ + width:100%; + height:150px; +} +.shm-track-dnld-gpx-btn +{ + font-size:.7rem; + border:1px solid #00000040; + opacity:0; + padding:2px 10px; + margin: 1px; + cursor:pointer; + -webkit-transition: all 400ms ease-out; + -moz-transition: all 400ms ease-out; + -ms-transition: all 400ms ease-out; + -o-transition: all 400ms ease-out; + transition: all 400ms ease-out; +} +.shm-track-dnld-gpx-btn:hover +{ + background-color:#00000020; + opacity:1; +} +.shm-track-li +{ + opacity:0.8; + -webkit-transition: all 200ms ease-out; + -moz-transition: all 200ms ease-out; + -ms-transition: all 200ms ease-out; + -o-transition: all 200ms ease-out; + transition: all 200ms ease-out; +} +.shm-track-li:hover +{ + opacity:1; + background-color:#00000005; +} +.shm-track-li:hover .shm-track-dnld-gpx-btn +{ + opacity:0.75; +} +.shmapper-track-input-form +{ + +} +.shm-track-marker-icon-img +{ + z-index:-1; + position:absolute; + top:-4px; + left:-4px; +} +.shm-track-marker-icon-descr +{ + position:relative; + margin-top:0; + margin-left:-4px; + background-color:#FFFFFFAA; + font-size:10px; + font-weight:bold; + padding:3px; +} +.shm-track-marker-icon:hover .shm-track-marker-icon-descr +{ + background-color:#FF0000; +} +.shm-form-file.shm-form-track +{ + padding: 0; + position: relative; + border: 1px solid #BBB; + background-color: #EEE; + margin: 0 0 5px 0; + font-size: 1rem; + color: #a5a2a2; + height: auto; + text-align: center; + display: flex; + overflow: hidden; + width: 100%; + display:flex; + align-items:center; + align-self: flex-start; + transition: all 700ms ease-out; +} +.shm-form-file.shm-form-track .button { + width: 100%; +} +.shm-form-file.shm-form-track > img:first-child { + display: none; +} +.shm-track-pult, +.shm-track-error +{ + display:none; + width:50%; + overflow:hidden; + margin: 0 0 5px 2px; + -webkit-transition: all 300ms ease-out; + -moz-transition: all 300ms ease-out; + -ms-transition: all 300ms ease-out; + -o-transition: all 300ms ease-out; + transition: all 300ms ease-out; + +} +.shm-track-error +{ + + background-color:#FF0000; + display:none; + width:75%; + margin: 0 0 5px 2px; + color:#FFF; + text-align:center; + padding-top:7px; + +} +.shm-form-track:hover +{ + background-color:#DDD; + color: #111; +} +.shm-form-track > input[type=file] +{ + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + opacity: 0; +} +.shmapper_tracks_edit, +.shmapper_tracks_upld +{ + font-size: 1rem; + padding: 0; + background-color: #EEE; + border: 1px solid #BBB; + color: #a5a2a2; + border-radius: 2px; + cursor: pointer; + margin-left: 3px; + margin-bottom: 4px; + display: flex; + align-items: center; + text-align: center; + justify-content: center; + width: 100%; + flex-grow:100; + -webkit-transition: all 500ms ease-out; + -moz-transition: all 500ms ease-out; + -ms-transition: all 500ms ease-out; + -o-transition: all 500ms ease-out; + transition: all 500ms ease-out; +} +.shmapper_tracks_edit { + align-self: flex-start; +} +.shmapper_tracks_edit:hover, +.shmapper_tracks_upld:hover +{ + background-color: #DDD; + color: #111; +} +.shmapper_tracks_edit.active +{ + opacity:0.25; +} +.shmapper_tracks_edit > .button, +label.shm_nowrap.button +{ + width:100%; + min-height: 100%; + height: auto; + margin:0; +} +.shm-track-upload-cont +{ + width: 100%; + flex-grow: 100; + display: flex; + -webkit-transition: all 500ms ease-out; + -moz-transition: all 500ms ease-out; + -ms-transition: all 500ms ease-out; + -o-transition: all 500ms ease-out; + transition: all 500ms ease-out; +} +.shm-w-50 +{ + width:50%!important; +} +.shm-w-100 +{ + width:100%!important; +} +.min-width-420 +{ + min-width:420px; +} +.shm-padding-x-20 +{ + padding-left:20px!important; + padding-right:20px!important; +} +.shm-margin-x-20 +{ + margin-left:20px!important; + margin-right:20px!important; +} +.shm-track-list-btn +{ + font-size:0.75rem; + flex-grow: 1000; +} +.shm-track-list-btn:focus, +.shm-track-list-btn:active +{ + -webkit-box-shadow: none; + box-shadow:none; + outline: none; +} +.shm-modal-map +{ + +} +.shm-descr-pult +{ + margin-top: 8px; + margin-bottom: 4px; + margin-left: 20px!important; + margin-right: 20px!important; + flex-direction: column; + display: flex; + justify-content: center; + opacity: 0.7; + font-size: 0.75rem; + vertical-align: top; + width: 100%; +} +.subdialog +{ + z-index:2000010; + position:relative; + position:fixed; + top:0; + left:0; + width:100vw; + height:100vh; + display:flex; + flex-direction:column; + justify-content:center; + align-items:center; +} +.subdialog-matter +{ + background-color:#00000080; + position:relative; + position:fixed; + top:0; + left:0; + width:100vw; + height:100vh; +} +.subdialog-body +{ + position: relative; + background-color:#EEE; + width:100%; + max-width:620px; + max-height:420px; + height:100%; + border:1px solid #999; + z-index:1; + -webkit-box-shadow: 0 5px 7px 0 rgba(0,0,0,.25); + box-shadow: 0 5px 7px 0 rgba(0,0,0,.25); + font-size: 1.3rem; + font-weight: 100; + font-family: sans-serif; + padding:20px; + display:flex; + flex-direction:column; +} +.subdialog-close +{ + width: 25px; + height: 25px; + cursor: pointer; + background-image: url(../img/close.svg); + background-size: 21px 21px; + background-position: center center; + float: right; + text-align: center; + position: absolute; + top: 0; + right: 0; +} +.subdialog-title +{ + width:100%; + margin-bottom:1.5px; + font-size:2rem; + flex-grow:1; +} +.subdialog-content +{ + flex-grow:1000; + overflow-y: auto; +} +.subdialog-footer +{ + width:100%; + margin-bottom:1.5px; + font-size:2rem; + flex-grow:1; +} + +/* Admin Columns */ +.taxonomy-shmapper_track_type .column-id { + width: 2rem; +} +.taxonomy-shmapper_track_type .column-color { + vertical-align: middle; +} +.manage-column.column-shm_map * { + display: none !important; +} \ No newline at end of file diff --git a/assets/css/ion.rangeSlider.css b/assets/css/ion.rangeSlider.css new file mode 100644 index 0000000..459da41 --- /dev/null +++ b/assets/css/ion.rangeSlider.css @@ -0,0 +1,126 @@ +/* Ion.RangeSlider +// css version 1.9.2 +// © 2013-2014 Denis Ineshin | IonDen.com +// ===================================================================================================================*/ + +/* ===================================================================================================================== +// RangeSlider */ + +.irs { + position: relative; display: block; +} + .irs-line { + position: relative; display: block; + overflow: hidden; + } + .irs-line-left, .irs-line-mid, .irs-line-right { + position: absolute; display: block; + top: 0; + } + .irs-line-left { + left: 0; width: 10%; + } + .irs-line-mid { + left: 9%; width: 82%; + } + .irs-line-right { + right: 0; width: 10%; + } + + .irs-diapason { + position: absolute; display: block; + left: 0; width: 100%; + } + .irs-slider { + position: absolute; display: block; + cursor: default; + z-index: 1; + } + .irs-slider.single { + left: 10px; + } + .irs-slider.single:before { + position: absolute; display: block; content: ""; + top: -30%; left: -30%; + width: 160%; height: 160%; + background: rgba(0,0,0,0.0); + } + .irs-slider.from { + left: 100px; + } + .irs-slider.from:before { + position: absolute; display: block; content: ""; + top: -30%; left: -30%; + width: 130%; height: 160%; + background: rgba(0,0,0,0.0); + } + .irs-slider.to { + left: 300px; + } + .irs-slider.to:before { + position: absolute; display: block; content: ""; + top: -30%; left: 0; + width: 130%; height: 160%; + background: rgba(0,0,0,0.0); + } + .irs-slider.last { + z-index: 2; + } + + .irs-min { + position: absolute; display: block; + left: 0; + cursor: default; + } + .irs-max { + position: absolute; display: block; + right: 0; + cursor: default; + } + + .irs-from, .irs-to, .irs-single { + position: absolute; display: block; + top: 0; left: 0; + cursor: default; + white-space: nowrap; + } + + +.irs-grid { + position: absolute; display: none; + bottom: 0; left: 0; + width: 100%; height: 20px; +} +.irs-with-grid .irs-grid { + display: block; +} + .irs-grid-pol { + position: absolute; + top: 0; left: 0; + width: 1px; height: 8px; + background: #000; + } + .irs-grid-pol.small { + height: 4px; + } + .irs-grid-text { + position: absolute; + bottom: 0; left: 0; + width: 100px; + white-space: nowrap; + text-align: center; + font-size: 9px; line-height: 9px; + color: #000; + } + +.irs-disable-mask { + position: absolute; display: block; + top: 0; left: 0; + width: 100%; height: 100%; + cursor: default; + background: rgba(0,0,0,0.0); + z-index: 2; +} +.irs-disabled { + opacity: 0.4; +} diff --git a/assets/css/ion.rangeSlider.min.css b/assets/css/ion.rangeSlider.min.css new file mode 100644 index 0000000..8b34de1 --- /dev/null +++ b/assets/css/ion.rangeSlider.min.css @@ -0,0 +1 @@ +/*!Ion.RangeSlider, 2.3.1, © Denis Ineshin, 2010 - 2019, IonDen.com, Build date: 2019-12-19 16:51:02*/.irs{position:relative;display:block;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:12px;font-family:Arial,sans-serif}.irs-line{position:relative;display:block;overflow:hidden;outline:none !important}.irs-bar{position:absolute;display:block;left:0;width:0}.irs-shadow{position:absolute;display:none;left:0;width:0}.irs-handle{position:absolute;display:block;box-sizing:border-box;cursor:default;z-index:1}.irs-handle.type_last{z-index:2}.irs-min,.irs-max{position:absolute;display:block;cursor:default}.irs-min{left:0}.irs-max{right:0}.irs-from,.irs-to,.irs-single{position:absolute;display:block;top:0;left:0;cursor:default;white-space:nowrap}.irs-grid{position:absolute;display:none;bottom:0;left:0;width:100%;height:20px}.irs-with-grid .irs-grid{display:block}.irs-grid-pol{position:absolute;top:0;left:0;width:1px;height:8px;background:#000}.irs-grid-pol.small{height:4px}.irs-grid-text{position:absolute;bottom:0;left:0;white-space:nowrap;text-align:center;font-size:9px;line-height:9px;padding:0 3px;color:#000}.irs-disable-mask{position:absolute;display:block;top:0;left:-1%;width:102%;height:100%;cursor:default;background:rgba(0,0,0,0);z-index:2}.lt-ie9 .irs-disable-mask{background:#000;filter:alpha(opacity=0);cursor:not-allowed}.irs-disabled{opacity:.4}.irs-hidden-input{position:absolute !important;display:block !important;top:0 !important;left:0 !important;width:0 !important;height:0 !important;font-size:0 !important;line-height:0 !important;padding:0 !important;margin:0 !important;overflow:hidden;outline:none !important;z-index:-9999 !important;background:none !important;border-style:solid !important;border-color:transparent !important}.irs--flat{height:40px}.irs--flat.irs-with-grid{height:60px}.irs--flat .irs-line{top:25px;height:12px;background-color:#e1e4e9;border-radius:4px}.irs--flat .irs-bar{top:25px;height:12px;background-color:#ed5565}.irs--flat .irs-bar--single{border-radius:4px 0 0 4px}.irs--flat .irs-shadow{height:1px;bottom:16px;background-color:#e1e4e9}.irs--flat .irs-handle{top:22px;width:16px;height:18px;background-color:transparent}.irs--flat .irs-handle>i:first-child{position:absolute;display:block;top:0;left:50%;width:2px;height:100%;margin-left:-1px;background-color:#da4453}.irs--flat .irs-handle.state_hover>i:first-child,.irs--flat .irs-handle:hover>i:first-child{background-color:#a43540}.irs--flat .irs-min,.irs--flat .irs-max{top:0;padding:1px 3px;color:#999;font-size:10px;line-height:1.333;text-shadow:none;background-color:#e1e4e9;border-radius:4px}.irs--flat .irs-from,.irs--flat .irs-to,.irs--flat .irs-single{color:white;font-size:10px;line-height:1.333;text-shadow:none;padding:1px 5px;background-color:#ed5565;border-radius:4px}.irs--flat .irs-from:before,.irs--flat .irs-to:before,.irs--flat .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#ed5565}.irs--flat .irs-grid-pol{background-color:#e1e4e9}.irs--flat .irs-grid-text{color:#999}.irs--big{height:55px}.irs--big.irs-with-grid{height:70px}.irs--big .irs-line{top:33px;height:12px;background-color:white;background:linear-gradient(to bottom, #ddd -50%, white 150%);border:1px solid #ccc;border-radius:12px}.irs--big .irs-bar{top:33px;height:12px;background-color:#92bce0;border:1px solid #428bca;background:linear-gradient(to bottom, #ffffff 0%, #428bca 30%, #b9d4ec 100%);box-shadow:inset 0 0 1px 1px rgba(255,255,255,0.5)}.irs--big .irs-bar--single{border-radius:12px 0 0 12px}.irs--big .irs-shadow{height:1px;bottom:16px;background-color:rgba(66,139,202,0.5)}.irs--big .irs-handle{top:25px;width:30px;height:30px;border:1px solid rgba(0,0,0,0.3);background-color:#cbcfd5;background:linear-gradient(to bottom, white 0%, #B4B9BE 30%, white 100%);box-shadow:1px 1px 2px rgba(0,0,0,0.2),inset 0 0 3px 1px white;border-radius:30px}.irs--big .irs-handle.state_hover,.irs--big .irs-handle:hover{border-color:rgba(0,0,0,0.45);background-color:#939ba7;background:linear-gradient(to bottom, white 0%, #919BA5 30%, white 100%)}.irs--big .irs-min,.irs--big .irs-max{top:0;padding:1px 5px;color:white;text-shadow:none;background-color:#9f9f9f;border-radius:3px}.irs--big .irs-from,.irs--big .irs-to,.irs--big .irs-single{color:white;text-shadow:none;padding:1px 5px;background-color:#428bca;background:linear-gradient(to bottom, #428bca 0%, #3071a9 100%);border-radius:3px}.irs--big .irs-grid-pol{background-color:#428bca}.irs--big .irs-grid-text{color:#428bca}.irs--modern{height:55px}.irs--modern.irs-with-grid{height:55px}.irs--modern .irs-line{top:25px;height:5px;background-color:#d1d6e0;background:linear-gradient(to bottom, #e0e4ea 0%, #d1d6e0 100%);border:1px solid #a3adc1;border-bottom-width:0;border-radius:5px}.irs--modern .irs-bar{top:25px;height:5px;background:#20b426;background:linear-gradient(to bottom, #20b426 0%, #18891d 100%)}.irs--modern .irs-bar--single{border-radius:5px 0 0 5px}.irs--modern .irs-shadow{height:1px;bottom:21px;background-color:rgba(209,214,224,0.5)}.irs--modern .irs-handle{top:37px;width:12px;height:13px;border:1px solid #a3adc1;border-top-width:0;box-shadow:1px 1px 1px rgba(0,0,0,0.1);border-radius:0 0 3px 3px}.irs--modern .irs-handle>i:nth-child(1){position:absolute;display:block;top:-4px;left:1px;width:6px;height:6px;border:1px solid #a3adc1;background:white;transform:rotate(45deg)}.irs--modern .irs-handle>i:nth-child(2){position:absolute;display:block;box-sizing:border-box;top:0;left:0;width:10px;height:12px;background:#e9e6e6;background:linear-gradient(to bottom, white 0%, #e9e6e6 100%);border-radius:0 0 3px 3px}.irs--modern .irs-handle>i:nth-child(3){position:absolute;display:block;box-sizing:border-box;top:3px;left:3px;width:4px;height:5px;border-left:1px solid #a3adc1;border-right:1px solid #a3adc1}.irs--modern .irs-handle.state_hover,.irs--modern .irs-handle:hover{border-color:#7685a2;background:#c3c7cd;background:linear-gradient(to bottom, #ffffff 0%, #919ba5 30%, #ffffff 100%)}.irs--modern .irs-handle.state_hover>i:nth-child(1),.irs--modern .irs-handle:hover>i:nth-child(1){border-color:#7685a2}.irs--modern .irs-handle.state_hover>i:nth-child(3),.irs--modern .irs-handle:hover>i:nth-child(3){border-color:#48536a}.irs--modern .irs-min,.irs--modern .irs-max{top:0;font-size:10px;line-height:1.333;text-shadow:none;padding:1px 5px;color:white;background-color:#d1d6e0;border-radius:5px}.irs--modern .irs-from,.irs--modern .irs-to,.irs--modern .irs-single{font-size:10px;line-height:1.333;text-shadow:none;padding:1px 5px;background-color:#20b426;color:white;border-radius:5px}.irs--modern .irs-from:before,.irs--modern .irs-to:before,.irs--modern .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#20b426}.irs--modern .irs-grid{height:25px}.irs--modern .irs-grid-pol{background-color:#dedede}.irs--modern .irs-grid-text{color:silver;font-size:13px}.irs--sharp{height:50px;font-size:12px;line-height:1}.irs--sharp.irs-with-grid{height:57px}.irs--sharp .irs-line{top:30px;height:2px;background-color:black;border-radius:2px}.irs--sharp .irs-bar{top:30px;height:2px;background-color:#ee22fa}.irs--sharp .irs-bar--single{border-radius:2px 0 0 2px}.irs--sharp .irs-shadow{height:1px;bottom:21px;background-color:rgba(0,0,0,0.5)}.irs--sharp .irs-handle{top:25px;width:10px;height:10px;background-color:#a804b2}.irs--sharp .irs-handle>i:first-child{position:absolute;display:block;top:100%;left:0;width:0;height:0;border:5px solid transparent;border-top-color:#a804b2}.irs--sharp .irs-handle.state_hover,.irs--sharp .irs-handle:hover{background-color:black}.irs--sharp .irs-handle.state_hover>i:first-child,.irs--sharp .irs-handle:hover>i:first-child{border-top-color:black}.irs--sharp .irs-min,.irs--sharp .irs-max{color:white;font-size:14px;line-height:1;top:0;padding:3px 4px;opacity:.4;background-color:#a804b2;border-radius:2px}.irs--sharp .irs-from,.irs--sharp .irs-to,.irs--sharp .irs-single{font-size:14px;line-height:1;text-shadow:none;padding:3px 4px;background-color:#a804b2;color:white;border-radius:2px}.irs--sharp .irs-from:before,.irs--sharp .irs-to:before,.irs--sharp .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#a804b2}.irs--sharp .irs-grid{height:25px}.irs--sharp .irs-grid-pol{background-color:#dedede}.irs--sharp .irs-grid-text{color:silver;font-size:13px}.irs--round{height:50px}.irs--round.irs-with-grid{height:65px}.irs--round .irs-line{top:36px;height:4px;background-color:#dee4ec;border-radius:4px}.irs--round .irs-bar{top:36px;height:4px;background-color:#006cfa}.irs--round .irs-bar--single{border-radius:4px 0 0 4px}.irs--round .irs-shadow{height:4px;bottom:21px;background-color:rgba(222,228,236,0.5)}.irs--round .irs-handle{top:26px;width:24px;height:24px;border:4px solid #006cfa;background-color:white;border-radius:24px;box-shadow:0 1px 3px rgba(0,0,255,0.3)}.irs--round .irs-handle.state_hover,.irs--round .irs-handle:hover{background-color:#f0f6ff}.irs--round .irs-min,.irs--round .irs-max{color:#333;font-size:14px;line-height:1;top:0;padding:3px 5px;background-color:rgba(0,0,0,0.1);border-radius:4px}.irs--round .irs-from,.irs--round .irs-to,.irs--round .irs-single{font-size:14px;line-height:1;text-shadow:none;padding:3px 5px;background-color:#006cfa;color:white;border-radius:4px}.irs--round .irs-from:before,.irs--round .irs-to:before,.irs--round .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#006cfa}.irs--round .irs-grid{height:25px}.irs--round .irs-grid-pol{background-color:#dedede}.irs--round .irs-grid-text{color:silver;font-size:13px}.irs--square{height:50px}.irs--square.irs-with-grid{height:60px}.irs--square .irs-line{top:31px;height:4px;background-color:#dedede}.irs--square .irs-bar{top:31px;height:4px;background-color:black}.irs--square .irs-shadow{height:2px;bottom:21px;background-color:#dedede}.irs--square .irs-handle{top:25px;width:16px;height:16px;border:3px solid black;background-color:white;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.irs--square .irs-handle.state_hover,.irs--square .irs-handle:hover{background-color:#f0f6ff}.irs--square .irs-min,.irs--square .irs-max{color:#333;font-size:14px;line-height:1;top:0;padding:3px 5px;background-color:rgba(0,0,0,0.1)}.irs--square .irs-from,.irs--square .irs-to,.irs--square .irs-single{font-size:14px;line-height:1;text-shadow:none;padding:3px 5px;background-color:black;color:white}.irs--square .irs-grid{height:25px}.irs--square .irs-grid-pol{background-color:#dedede}.irs--square .irs-grid-text{color:silver;font-size:11px} \ No newline at end of file diff --git a/assets/css/ion.rangeSlider.skinFlat.css b/assets/css/ion.rangeSlider.skinFlat.css new file mode 100644 index 0000000..0963c87 --- /dev/null +++ b/assets/css/ion.rangeSlider.skinFlat.css @@ -0,0 +1,89 @@ +/* Ion.RangeSlider, Flat UI Skin +// css version 1.9.2 +// © 2013-2014 Denis Ineshin | IonDen.com +// ===================================================================================================================*/ + +/* ===================================================================================================================== +// Skin details */ + +.irs-line-mid, +.irs-line-left, +.irs-line-right, +.irs-diapason, +.irs-slider { + background: url(../img/sprite-skin-flat.png) repeat-x; +} + +.irs { + height: 40px; +} +.irs-with-grid { + height: 60px; +} +.irs-line { + height: 12px; top: 25px; +} + .irs-line-left { + height: 12px; + background-position: 0 -30px; + } + .irs-line-mid { + height: 12px; + background-position: 0 0; + } + .irs-line-right { + height: 12px; + background-position: 100% -30px; + } + +.irs-diapason { + height: 12px; top: 25px; + background-position: 0 -60px; +} + +.irs-slider { + width: 16px; height: 18px; + top: 22px; + background-position: 0 -90px; +} +#irs-active-slider, .irs-slider:hover { + background-position: 0 -120px; +} + +.irs-min, .irs-max { + color: #999; + font-size: 10px; line-height: 1.333; + text-shadow: none; + top: 0; padding: 1px 3px; + background: #e1e4e9; + border-radius: 4px; +} + +.irs-from, .irs-to, .irs-single { + color: #fff; + font-size: 10px; line-height: 1.333; + text-shadow: none; + padding: 1px 5px; + background: #ed5565; + border-radius: 4px; +} +.irs-from:after, .irs-to:after, .irs-single:after { + position: absolute; display: block; content: ""; + bottom: -6px; left: 50%; + width: 0; height: 0; + margin-left: -3px; + overflow: hidden; + border: 3px solid transparent; + border-top-color: #ed5565; +} + + +.irs-grid-pol { + background: #e1e4e9; +} +.irs-grid-text { + color: #999; +} + +.irs-disabled { +} diff --git a/assets/css/ion.rangeSlider.skinNice.css b/assets/css/ion.rangeSlider.skinNice.css new file mode 100644 index 0000000..d74bc11 --- /dev/null +++ b/assets/css/ion.rangeSlider.skinNice.css @@ -0,0 +1,85 @@ +/* Ion.RangeSlider, Nice Skin +// css version 1.9.2 +// © 2013-2014 Denis Ineshin | IonDen.com +// ===================================================================================================================*/ + +/* ===================================================================================================================== +// Skin details */ + +.irs-line-mid, +.irs-line-left, +.irs-line-right, +.irs-diapason, +.irs-slider { + background: url(../img/sprite-skin-nice.png) repeat-x; +} + +.irs { + height: 40px; +} +.irs-with-grid { + height: 60px; +} +.irs-line { + height: 8px; top: 25px; +} + .irs-line-left { + height: 8px; + background-position: 0 -30px; + } + .irs-line-mid { + height: 8px; + background-position: 0 0; + } + .irs-line-right { + height: 8px; + background-position: 100% -30px; + } + +.irs-diapason { + height: 8px; top: 25px; + background-position: 0 -60px; +} + +.irs-slider { + width: 22px; height: 22px; + top: 17px; + background-position: 0 -90px; +} +#irs-active-slider, .irs-slider:hover { + background-position: 0 -120px; +} + +.irs-min, .irs-max { + color: #999; + font-size: 10px; line-height: 1.333; + text-shadow: none; + top: 0; padding: 1px 3px; + background: rgba(0,0,0,0.1); + border-radius: 3px; +} +.lt-ie9 .irs-min, .lt-ie9 .irs-max { + background: #ccc; +} + +.irs-from, .irs-to, .irs-single { + color: #fff; + font-size: 10px; line-height: 1.333; + text-shadow: none; + padding: 1px 5px; + background: rgba(0,0,0,0.3); + border-radius: 3px; +} +.lt-ie9 .irs-from, .lt-ie9 .irs-to, .lt-ie9 .irs-single { + background: #999; +} + +.irs-grid-pol { + background: #99a4ac; +} +.irs-grid-text { + color: #99a4ac; +} + +.irs-disabled { +} diff --git a/assets/css/ion.rangeSlider.skinSimple.css b/assets/css/ion.rangeSlider.skinSimple.css new file mode 100644 index 0000000..38d1dfb --- /dev/null +++ b/assets/css/ion.rangeSlider.skinSimple.css @@ -0,0 +1,85 @@ +/* Ion.RangeSlider, Simple Skin +// css version 1.9.2 +// © 2013-2014 Denis Ineshin | IonDen.com +// ===================================================================================================================*/ + +/* ===================================================================================================================== +// Skin details */ + +.irs-line-mid, +.irs-line-left, +.irs-line-right, +.irs-diapason, +.irs-slider { + background: url(../img/sprite-skin-simple.png) repeat-x; +} + +.irs { + height: 40px; +} +.irs-with-grid { + height: 60px; +} +.irs-line { + height: 6px; top: 25px; +} + .irs-line-left { + height: 6px; + background-position: 0 -30px; + } + .irs-line-mid { + height: 6px; + background-position: 0 0; + } + .irs-line-right { + height: 6px; + background-position: 100% -30px; + } + +.irs-diapason { + height: 6px; top: 25px; + background-position: 0 -60px; +} + +.irs-slider { + width: 8px; height: 15px; + top: 21px; + background-position: 0 -90px; +} +#irs-active-slider, .irs-slider:hover { + background-position: 0 -120px; +} + +.irs-min, .irs-max { + color: #c0c0c0; + font-size: 10px; line-height: 1.333; + text-shadow: none; + top: 0; padding: 1px 3px; + background: rgba(0,0,0,0.1); + border-radius: 3px; +} +.lt-ie9 .irs-min, .lt-ie9 .irs-max { + background: #3654b0; +} + +.irs-from, .irs-to, .irs-single { + color: #000; + font-size: 10px; line-height: 1.333; + text-shadow: none; + padding: 1px 5px; + background: rgba(255,255,255,0.8); + border-radius: 3px; +} +.lt-ie9 .irs-from, .lt-ie9 .irs-to, .lt-ie9 .irs-single { + background: #d8dff3; +} + +.irs-grid-pol { + background: #777; +} +.irs-grid-text { + color: #e0e0e0; +} + +.irs-disabled { +} diff --git a/assets/img/edge.svg b/assets/img/edge.svg new file mode 100644 index 0000000..2c7cd4a --- /dev/null +++ b/assets/img/edge.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + diff --git a/assets/js/ShMapper.admin.js b/assets/js/ShMapper.admin.js index 5b48d2d..a3852fb 100644 --- a/assets/js/ShMapper.admin.js +++ b/assets/js/ShMapper.admin.js @@ -1,6 +1,26 @@ jQuery(document).ready(function($) { + + //hide|show Form in Map admin + if(!$("#is_form").is(":checked")) + { + $(".shm-map-form-admin").hide(); + } + $("#is_form").on("click", evt => + { + $(".shm-map-form-admin").toggle(); + }) + //hide|show personal in Form in Map admin + if(!$("#is_personal_data").is(":checked")) + { + $(".shm-map-resonals").hide(); + } + $("#is_personal_data").on("click", evt => + { + $(".shm-map-resonals").toggle(); + }) + //ajax $("[shm_notify_req]").on( 'click', function(evt) { var postid = $(evt.currentTarget).attr("shm_notify_req"); @@ -156,9 +176,11 @@ jQuery(document).ready(function($) } }); - $('[name="overlay_color"], [name="border_color"]').wpColorPicker({ - 'defaultColor': '#d1d1d1' - }); + if( $('[name="overlay_color"], [name="border_color"]').length > 0 ) { + $('[name="overlay_color"], [name="border_color"]').wpColorPicker({ + 'defaultColor': '#d1d1d1' + }); + } $('.shm-range').on('input', function(){ $(this).attr('value', this.value); diff --git a/assets/js/ShMapper.front.js b/assets/js/ShMapper.front.js index a2155a6..68343f3 100644 --- a/assets/js/ShMapper.front.js +++ b/assets/js/ShMapper.front.js @@ -11,9 +11,8 @@ jQuery(document).ready(function($) //send new request $('form.shm-form-request').on( 'submit', function(evt) { - evt.preventDefault(); - + var $this = $(evt.currentTarget); $this.find("[required]").each(function(num, elem) { @@ -106,7 +105,7 @@ function add_message(msg) clearTimeout(setmsg); jQuery("
    " + msg + "
    ").appendTo("body").hide().fadeIn("slow"); setmsg = setTimeout( function() { - jQuery(".msg").fadeOut(700, jQuery(".msg").detach()); + jQuery(".msg").fadeOut( 700 ); }, 6000); } -} \ No newline at end of file +} diff --git a/assets/js/ShMapper.js b/assets/js/ShMapper.js index ef3bc7c..d2a4d44 100644 --- a/assets/js/ShMapper.js +++ b/assets/js/ShMapper.js @@ -369,15 +369,19 @@ jQuery(document).ready(function($) data={content: data}; } if(!data.title) data.title = __("Attantion"); - $("html").append("
    "); + $("html").append("
    "); $(".shm_modal_container").append("
    "); $(".shm_modal_container").append("
    "); $(".shm_modal_screen").append("
    " + data.title + "
    "); $(".shm_modal_header").append("
    x
    "); $(".shm_modal_screen").append("
    " + data.content + "
    "); $(".shm_modal_screen").append(""); - if(data.send) - $(".shm_modal_footer").append(""); + if (data.send) { + $(".shm_modal_footer").append( + "" + ); + } + $(".shm_modal_footer").append(data.footer); $(".shm_modal_footer").append(""); $(".shm_modal").on( 'click', function(evt) { $(evt.currentTarget).parents(".shm_modal_container").detach(); @@ -582,7 +586,7 @@ jQuery(document).ready(function($) { $shmapperIcons.click(function(e) { e.preventDefault(); $(this).closest('.shm-form-placemarks').find('.shm-type-icon').removeClass('shmapperMarkerSelected'); - $(this).parents("form.shm-form-request").find('input[name="shm_point_loc"]').removeClass("hidden"); + $(this).parents("form.shm-form-request").find('input[name="shm_point_loc"]').removeClass("_hidden"); if(!$(this).hasClass('shmapperDragged')) { $(this).addClass('shmapperMarkerSelected'); diff --git a/assets/js/ShMapper.yandex.js b/assets/js/ShMapper.yandex.js index 999a774..426b50a 100644 --- a/assets/js/ShMapper.yandex.js +++ b/assets/js/ShMapper.yandex.js @@ -93,7 +93,7 @@ jQuery(document).ready(function($) lat.val(new_mark_coords[0]); lon.val(new_mark_coords[1]); if(!$this.data("straight_geocoding")) { - loc.val(shm_address).removeClass("hidden").hide().fadeIn("slow"); + loc.val(shm_address).removeClass("_hidden").hide().fadeIn("slow"); } type.val($this.attr("shm_type_id")); }) @@ -456,7 +456,10 @@ jQuery(document).ready(function($) if($selectedMarker.size()) { shmapperPlaceMarkerOnMap({"clientX": evt.get('domEvent').get('pageX'), "clientY": evt.get('domEvent').get('pageY') - window.scrollY}, {"helper": $selectedMarker}); } - }); + }); + + var finish_draw_map = new CustomEvent("finish_draw_map", {bubbles : true, cancelable : true, detail : {data:mData, points:points} }); + document.documentElement.dispatchEvent(finish_draw_map); } is_admin = function(myMap, mData) diff --git a/assets/js/ShmapperTracks.js b/assets/js/ShmapperTracks.js new file mode 100644 index 0000000..4b3d32f --- /dev/null +++ b/assets/js/ShmapperTracks.js @@ -0,0 +1,1162 @@ +var shm_track_map, + myPolyline, + trackData, + trkpt, + trackPoliline=[], + updatePolyline = function(myMap){}, + editPolyline = function(){}, + isTrackEdit=false, + shm_track_place, + start_draw_track=function(){}, + finish_draw_trak = function(){}, + update_track_placmarks_json = function( map ){}, + $_this, + map_id, + map__id, + newTrackVertexes = [], + vertex_data; +jQuery(document).ready(function($) +{ + $("[shm-track-dnld-gpx]").on( "click", evt => + { + shm_send( [ "shm-trac-dnld-gpx", $(evt.currentTarget).attr("shm-track-dnld-gpx") ] ); + }); + /* + * set *.gpx file to input + */ + $(".shm-form-track input[type='file']").on( + "change", + function(evt) + { + var file = evt.target.files[0]; + + //console.log( file.name, $(evt.currentTarget).parent().find( "label.shm_nowrap" ) ); + //console.log( file.name ); + if( !file ) return; + // + var form_forms = $(evt.currentTarget).parents("#form_forms"); + var reader = new FileReader(); + reader.onload = (function(event) + { + $( ".shm-form-request[form_id='" + map_id + "'] .shmapper_tracks_edit").fadeOut(); + $(evt.currentTarget).parents(".shm-track-upload-cont").find(".shm-track-pult").fadeOut(); + $(evt.currentTarget).parents(".shm-track-upload-cont").find(".shm-track-error").fadeOut(); + try + { + trackData = parseXml(event.target.result).gpx; + if(!trackData) + { + throw new Error(__("Not correct gpx format")) + } + if(!trackData.trk) + { + throw new Error(__("Not exists track data")) + } + if(!trackData.trk.trkseg) + { + throw new Error(__("Not exists correct track's segment data")) + } + if(!trackData.trk.trkseg.trkpt) + { + throw new Error(__("Not exists correct track segment's data")) + } + + var name = trackData.trk.name ? trackData.trk.name['#text'] : null; + if( name ) + { + form_forms.find(".form-field-9 input.sh-form").val( name ); + } + desc = trackData.trk.desc ? trackData.trk.desc['#text'] : null; + if( desc ) + { + var val = form_forms.find(".form-field-6 textarea.sh-form").val(); + form_forms.find(".form-field-6 textarea.sh-form").val( val + "

    " + desc + "

    " ); + } + form_forms.find(".shm-form-track").css("width", "50%"); + form_forms.find(".shm-range").on({ + change: function(evt2) + { + var val = evt2.currentTarget.value ; + $('.shm-form-slider').find('.shm-range-label').text( val ); + trackPoliline = trkpt.filter(function(elem, index) + { + return index % val == 0; + }).map(function(elem) + { + return [ parseFloat(elem.lat,5), parseFloat(elem.lon, 5)]; + }); + var myMap = shm_maps[ $(evt.target).parents("[form_id]").attr("form_id") ]; + updatePolyline( myMap ); + } + }); + + setInterval(function() + { + form_forms.find(".shm-track-pult").fadeIn("slow") + }, 500); + trkpt = trackData.trk.trkseg.trkpt; + + var val = form_forms.find(".shm-range").val() ; + $('.shm-form-slider').find('.shm-range-label').text( val ); + trackPoliline = trkpt.filter(function(elem, index) + { + return index % val == 0; + }).map(function(elem) + { + return [ parseFloat(elem.lat,5), parseFloat(elem.lon, 5)]; + }); + //console.log(val, trackPoliline, trkpt); + map_id = $(evt.target).parents("[form_id]").attr("map_id"); + var myMap = shm_maps[ $(evt.target).parents("[form_id]").attr("form_id") ]; + $_this = $(evt.target); + updatePolyline( myMap ); + addPolylineClick(); + isTrackEdit ? editPolyline() : stopEditPolyline(); + } + catch(e) + { + console.log(e); + var message = __("Uncorrect gpx-file: ") + e.message; + form_forms.find(".shm-form-track").css("width", "25%"); + setTimeout(function(message) + { + //console.log(message); + $(evt.currentTarget).parents(".shm-track-upload-cont").find(".shm-track-error") + .fadeIn("slow") + .text( message ); + }, 500, message); + evt.target.files = null; + } + }); + reader.readAsText(file); + // + var lbl = $(evt.currentTarget).parent('.shm-form-file').find( "label.button" ); + + setTimeout( function(){ + lbl.html( file.name ); + },50); + lbl.addClass("shm-color-alert"); + + } + ); + + /* + * Hide places's engine in request form + */ + if( $("[switched_enabled_markers='1']").length > 0 ) + { + $("[switched_enabled_markers='1']").each(function(index) + { + var map_id = $( this ).parents( ".shm-form-request" ).attr("map_id"); + $( this ).parents( ".shm-form-request" ).find(".form-field-8").hide(); + $( this ).parents( ".shm-form-request" ).find(".shm-form-placemarks").removeAttr("required"); + }); + + } + /* + * Button choose track in Map + */ + $(".shm-track-list-btn").on({click: function(evt) + { + var targ = evt.currentTarget + var track_id = parseInt(targ.getAttribute("track_id")); + var uniq = $(targ).parents("[form_id]").attr("form_id"); + var map_id = $(targ).parents("[map_id]" ).attr("map_id" ); + var sel = targ.getAttribute("sel"); + if( sel == "1" ) + { + if(shm_maps[ uniq ]) + { + shm_maps[ uniq ].geoObjects.each(function(gO) + { + gO.options.set({ opacity: 1 }); + }); + } + $(targ).attr("sel", "0"); + let defCoords = shm_maps[ uniq ].container.getParentElement().getAttribute("coords").split(",").map( e => parseFloat(e) ); + console.log( defCoords) + shm_maps[ uniq ].setCenter( + defCoords, + defCoords[2], + { + flying: true, + duration: 1000 + } + ); + } + else + { + if(shm_maps[ uniq ]) + { + shm_maps[ uniq ].geoObjects.each(function(gO) + { + // console.log(gO.options._options.track_id, track_id); + if(gO.options._options.track_id == track_id) + { + shm_maps[ uniq ].setBounds( gO.geometry.getBounds(), { duration : 1000 } ); + shm_maps[ uniq ].geoObjects.each(function(g) + { + g.options.set({ opacity: .25 }); + }); + gO.options.set({ opacity: 1 }); + } + }); + } + $(targ).attr("sel", "1"); + } + + evt.preventDefault(); + } + }) + /* + * Button "start draw track" to Map + */ + $(".shmapper_tracks_edit").each(function(index) + { + map_id = $( this ).parents("[form_id]").attr("form_id"); + map__id = $( this ).parents("[form_id]").attr("map_id"); + $_this = $( this ); + $_this.on("click", evt => + { + var boo = !myPolyline && !isTrackEdit; + boo = myPolyline ? confirm(__("Delete prevous track?")) : true; + if( boo ) + { + start_draw_track(); + isTrackEdit = false; + var destination = $(".shm_container[id='" + map_id + "']").offset().top - 140; + $('body, html').animate({ scrollTop: destination }, 1100) + var myMap = shm_maps[ $_this.parents("[form_id]").attr("form_id") ]; + myMap.geoObjects.remove(myPolyline); + myPolyline = new ymaps.Polyline( + [ ], + { }, + { + editorDrawingCursor: "crosshair", + strokeWidth: 4, + // Adding a new item to the context menu that allows deleting the polyline. + /* + editorMenuManager: function (items, vertex) + { + var vd = getVertexData(vertex); + console.log( vd ); + let icon = vd[2] && vd[2].type ? vd[2].type : ""; + let ttl = icon + ( vd[2] && vd[2].title ? vd[2].title : __("Add marker") ); + + items.push({ + title: ttl, + onClick: function () + { + start_update_vertex(vertex); + } + }); + return items; + }, + */ + mapId: map_id + } + ); + + myMap.geoObjects.add(myPolyline); + myPolyline.geometry.events.add("change", function(evt) + { + var points = myPolyline.geometry + .getCoordinates(); + updateNewTrackData( map__id, points ); + + }); + + myPolyline.editor.events.add("drawingstart", function(evt) + { + + }); + + myPolyline.editor.events.add("drawingstop", function(evt) + { + finish_draw_trak( ); + + var points = myPolyline.geometry + .getCoordinates(); + updateNewTrackData( map__id, points ); + }); + myPolyline.editor.startDrawing(); + !isTrackEdit ? editPolyline() : stopEditPolyline(); + addPolylineClick(); + } + }); + }); + start_draw_track = function( ) + { + //$( ".shm-form-request[form_id='" + map_id + "'] .shmapper_tracks_upld").fadeOut("slow"); + $( ".shm-form-request[form_id='" + map_id + "'] .shmapper_tracks_edit").addClass("active"); + newTrackVertexes = []; + isTrackEdit = true; + } + finish_draw_trak = function( ) + { + isTrackEdit = false; + $( ".shm-form-request[form_id='" + map_id + "'] .shmapper_tracks_edit").removeClass("active") + } + $(".shm-track-edit").on("click", function() + { + !isTrackEdit ? editPolyline() : stopEditPolyline(); + }) + + $(".shm-track-update").on("click", function(evt) + { + var myMap = shm_maps[ $(evt.target).parents("[form_id]").attr("form_id") ]; + updatePolyline(myMap) + }) + + editPolyline = function() + { + start_draw_track() + myPolyline.editor.startEditing(); + } + + stopEditPolyline = function() + { + finish_draw_trak(); + myPolyline.editor.stopEditing(); + } + updatePolyline = function(myMap) + { + map_id = myMap.container.getParentElement().getAttribute("shm_map_id"); + myMap.geoObjects.remove(myPolyline); + myPolyline = new ymaps.Polyline( + trackPoliline, + { }, + { + editorDrawingCursor: "crosshair", + strokeWidth: 4, + // Adding a new item to the context menu that allows deleting the polyline. + editorMenuManager: function (items, vertex) + { + // console.log(vertex); + // console.log(myMap.container.getParentElement()); + items.push({ + title: "Delete line", + onClick: function () { + myMap.geoObjects.remove(myPolyline); + } + }); + return items; + } + } + ); + myMap.geoObjects.add(myPolyline); + // + myPolyline.geometry.events.add("change", function(evt) + { + var points = myPolyline.geometry + .getCoordinates(); + updateNewTrackData( map_id, points ); + }); + myPolyline.editor.events.add("drawingstart", function(evt) + { + var input = $( "[map_id='" + map_id + "'].shm-form-request .form-field-shmapper_track_draw input" ) + //$("[shm_map_id='" + map_id + "'] .shmapper_tracks_edit").hide(); + }); + myPolyline.editor.events.add("drawingstop", function(evt) + { + //$("[shm_map_id='" + map_id + "'] .shmapper_tracks_edit").fadeIn("slow"); + }); + myMap.setBounds(myPolyline.geometry.getBounds()); + isTrackEdit ? editPolyline() : stopEditPolyline(); + updateNewTrackData( map_id, trackPoliline ) + } + + + + var addPolylineClick = function() + { + myPolyline.events.add("click", function(event) + { + var newTitle = $(".form-field-9").length > 0 ? $(".form-field-9").find(".sh-form").val() : __("New track"); + var newDescr = $(".form-field-6").length > 0 ? $(".form-field-6").find(".sh-form").val() : __("New descr"); + shm_add_modal({ + class: "shm-max", + title: newTitle, + content:"
    " + newDescr + "
    ", + footer:"" + }); + $("[shm-trac-dnld-gpx]").on( "click", evt => + { + shm_send( [ "shm-trac-dnld-gpx", $(evt.currentTarget).attr("shm-trac-dnld-gpx") ] ); + }); + var customEvent = new CustomEvent("_shm_track_map_", {bubbles : true, cancelable : true, detail : {track: elem, isNew:false}}) + document.documentElement.dispatchEvent(customEvent); + }); + + shm_maps[datas.uniq].geoObjects.add(line); + }); + break; + case "shm_track_new": + $("#shm-track-modal-map-description") + .empty() + .prepend( datas.form ); + var customEvent = new CustomEvent( + "_shm_track_after_add_markers_panel_", + { + bubbles : true, + cancelable : true, + detail : { } + } + ); + document.documentElement.dispatchEvent(customEvent); + break; + case "shm_track_vertex": + $("#shm-track-modal-map-description") + .empty() + .prepend( datas.form ); + $("[name='vertex_type']").on("change", evt => + { + vertex_data.type = evt.currentTarget.value; + jQuery("[name='vertex_data']").val( JSON.stringify( vertex_data ) ); + }) + $("[name='vertex_title']").on("change", evt => + { + vertex_data.title = evt.currentTarget.value; + jQuery("[name='vertex_data']").val( JSON.stringify( vertex_data ) ); + }) + $("[name='vertex_content']").on("change", evt => + { + vertex_data.content = evt.currentTarget.value; + jQuery("[name='vertex_data']").val( JSON.stringify( vertex_data ) ); + }) + break; + case "shm-trac-dnld-gpx": + var text = datas.text; + var name = datas.name; + var encodedUri = 'data:application/xml;charset=utf-8,' + encodeURIComponent( text ); + var file = new Blob([text], {type: 'data:application/xml;charset=utf-8'} ); + url = URL.createObjectURL( file ); + var link = document.createElement( "a" ); + link.setAttribute( "href", url ); + link.setAttribute( "download", name + ".gpx"); + link.innerHTML= "Download"; + document.body.appendChild( link ); + link.click(); + setInterval(() => + { + link.parentNode.removeChild( link ); + window.URL.revokeObjectURL(url); + }) + // shm_close_modal(); + break; + } + }) +}) + +var getVertexData = function(vertex) +{ + //console.log("vertex: ", vertex); + let coords = vertex.geometry.getCoordinates(); + var vertexData = newTrackVertexes.filter(e => + { + return e[0] == coords[0] && e[1] == coords[1] + })[0]; + //console.log( vertexData ); + return vertexData ? vertexData : []; +} +var start_update_vertex = function(vertex) +{ + var vertexData = getVertexData(vertex); + let coords = vertex.geometry.getCoordinates(); + let markerData = vertexData[2] ? vertexData[2] : { }; + var content = jQuery("
    "); + content.children("div").append("
    "+ __("Title") + "
    "); + content.children("div").append("
    "); + content.children("div").append("
    "+ __("Content") + "
    "); + content.children("div").append("
    "); + content.children("div").append("
    "+ __("Type") + "
    "); + content.children("div").append("
    "); + content.children("div").append("
    "); + + shm_add_modal({ + class: "", + title: __("Edit vertex"), + content: content.html(), + footer:"" + }); + jQuery("[name=shm_track_marker_post_title]").on( "change", e => + { + shm_placemark.properties.set({ + post_title : e.currentTarget.value + }); + }) + jQuery("[name=shm_track_marker_post_content]").on( "change", e => + { + shm_placemark.properties.set({ + post_content : e.currentTarget.value + }) + //update_track_placmarks_json( map ); + }) + jQuery(".update_placemark").on( "click", e => + { + update_track_placmarks_json( map ); + removeSubDialog(); + }) + jQuery(".remove_placemark").on( "click", e => + { + if( confirm( __( "Remove placemark?" ) ) ) + { + shm_placemark.setParent(); + update_track_placmarks_json( map ); + removeSubDialog(); + } + }) + } + else + { + addSubDialog({ + title:"
    " + post_title + "
    ", + content:"
    " + post_content + "
    ", + footer : "", + isLock:true + }); + jQuery("button.close_placemark").on("click", e => + { + removeSubDialog(); + }); + } + }) + return shm_placemark; +} + +/* +* +*/ +var addSubDialog = function(params) +{ + jQuery("html").append("
    "); + jQuery(".subdialog").append("
    "); + jQuery(".subdialog").append("
    "); + jQuery(".subdialog-body").append("
    x
    "); + jQuery(".subdialog-matter, .subdialog-body .subdialog-close").click(() => removeSubDialog() ); + jQuery(".subdialog-body").append("
    " + params.title + "
    "); + jQuery(".subdialog-body").append("
    " + params.content + "
    "); + jQuery(".subdialog-body").append(""); + jQuery(".subdialog-footer").append(params.footer); +} +var removeSubDialog = function() +{ + jQuery(".subdialog").detach(); +} + + +/* +* +*/ +var parseXml = function(xml, arrayTags) +{ + var dom = null; + if (window.DOMParser) + { + dom = (new DOMParser()).parseFromString(xml, "text/xml"); + } + else if (window.ActiveXObject) + { + dom = new ActiveXObject('Microsoft.XMLDOM'); + dom.async = false; + if (!dom.loadXML(xml)) + { + throw dom.parseError.reason + " " + dom.parseError.srcText; + } + } + else + { + throw "cannot parse xml string!"; + } + + function isArray(o) + { + return Object.prototype.toString.apply(o) === '[object Array]'; + } + + function parseNode(xmlNode, result) + { + if (xmlNode.nodeName == "#text") { + var v = xmlNode.nodeValue; + if (v.trim()) { + result['#text'] = v; + } + return; + } + + var jsonNode = {}; + var existing = result[xmlNode.nodeName]; + if(existing) + { + if(!isArray(existing)) + { + result[xmlNode.nodeName] = [existing, jsonNode]; + } + else + { + result[xmlNode.nodeName].push(jsonNode); + } + } + else + { + if(arrayTags && arrayTags.indexOf(xmlNode.nodeName) != -1) + { + result[xmlNode.nodeName] = [jsonNode]; + } + else + { + result[xmlNode.nodeName] = jsonNode; + } + } + + if(xmlNode.attributes) + { + var length = xmlNode.attributes.length; + for(var i = 0; i < length; i++) + { + var attribute = xmlNode.attributes[i]; + jsonNode[attribute.nodeName] = attribute.nodeValue; + } + } + + var length = xmlNode.childNodes.length; + for(var i = 0; i < length; i++) + { + parseNode(xmlNode.childNodes[i], jsonNode); + } + } + + var result = {}; + for (let i = 0; i < dom.childNodes.length; i++) + { + parseNode(dom.childNodes[i], result); + } + return result; +} \ No newline at end of file diff --git a/assets/js/admin.js b/assets/js/admin.js new file mode 100644 index 0000000..8baeefd --- /dev/null +++ b/assets/js/admin.js @@ -0,0 +1,393 @@ +var myMap, track_id, shm_placemark, new_mark_coords, track_points = [], tPoints=[], tMarkers=[], MyIconContentLayout; +jQuery(document).ready(function($) +{ + $(".shm_notice_close").on("click", e => + { + $(e.currentTarget).parents(".shm_notice").fadeOut("slow"); + }) + /* + * open modal to see GPX source + */ + jQuery('[gpx-src-id]').on('click', function(evt) + { + shm_add_modal({ + title: __("GPX data"), + content: '' + + }); + }); + jQuery('[gpx-dnld-file]').on('click', function(evt) + { + var text = jQuery(evt.currentTarget).parent( ).find('[gpx-src-id] pre').html(); + var encodedUri = 'data:application/xml;charset=utf-8,' + encodeURIComponent( text ); + var file = new Blob([text], {type: 'data:application/xml;charset=utf-8'} ); + url = URL.createObjectURL( file ); + var link = document.createElement( "a" ); + link.setAttribute( "href", url ); + link.setAttribute( "download", jQuery(this).attr("gpx-data-title") + ".gpx" ); + link.innerHTML= "Download"; + document.body.appendChild( link ); + link.click(); + setInterval(() => + { + link.parentNode.removeChild( link ); + window.URL.revokeObjectURL(url); + }) + }) + /* + * form field + */ + var showHideGPXParams = function() + { + if( $("[type_id='shmapper_track_draw'] #gpx3").is(":checked") ) + { + $("[type_id='shmapper_track_draw'] #gpx3").parents(".shm-row").find("[type_id='shmapper_track_draw'] .shm-title-label").slideDown("slow" ); + $("[type_id='shmapper_track_draw'] #gpx3").parents(".shm-row").find("[type_id='shmapper_track_draw'] .shm-placeholder-label").slideDown("slow" ); + $("[type_id='shmapper_track_draw'] #gpx3").parents(".shm-row").find("[type_id='shmapper_track_draw'] .shm-description-label").slideDown("slow" ); + $("[type_id='shmapper_track_draw'] #gpx3").parents(".shm-row").find("[type_id='shmapper_track_draw'] .shm-file_require-label").slideDown("slow" ); + } + else + { + $("[type_id='shmapper_track_draw'] #gpx3").parents(".shm-row").find("[type_id='shmapper_track_draw'] .shm-title-label").slideUp("slow" ); + $("[type_id='shmapper_track_draw'] #gpx3").parents(".shm-row").find("[type_id='shmapper_track_draw'] .shm-placeholder-label").slideUp("slow" ); + $("[type_id='shmapper_track_draw'] #gpx3").parents(".shm-row").find("[type_id='shmapper_track_draw'] .shm-description-label").slideUp("slow" ); + $("[type_id='shmapper_track_draw'] #gpx3").parents(".shm-row").find("[type_id='shmapper_track_draw'] .shm-file_require-label").slideUp("slow" ); + } + } + $("[type_id='shmapper_track_draw'] #gpx3").on("change", evt => + { + showHideGPXParams(); + }); + showHideGPXParams(); + + + /* + * Edit track + */ + ymaps.ready( function() + { + if($("#shm_map").length == 0) return; + myMap = new ymaps.Map('shm_map', { + center: [55.73, 37.75], + zoom: 8 + }, { + searchControlProvider: 'yandex#search' + }); + + //console.log(tMarkers); + var myPolyline = new ymaps.Polyline( + tPoints, + { }, + { + editorDrawingCursor: 'crosshair', + strokeWidth: shmTrackWidth, + strokeColor: shmTrackColor, + editorMenuManager: function (items) + { + + return items; + } + } + ); + myMap.geoObjects.add(myPolyline); + myPolyline.editor.startEditing(); + myPolyline.geometry.events.add('change', function(evt) { + var points = myPolyline.geometry.getCoordinates().map( function( e ) { + return e.filter( function( el ) { //return e.join(',') + return el != null; + }); + }); + var pointsVal = '[[' + points.join( '],[' ) + ']]'; + jQuery( '[name=track]' ).val( pointsVal ); + }); + var markers = tMarkers.map(function(elem) + { + var pointt = "
    "; + $("body").append(pointt); + return shmapperPlaceMarkerOnMapByCoords( + myMap, + elem.coords, + $(pointt) + ); + $(pointt); + }); + myMap.setBounds(myPolyline.geometry.getBounds()); + + if(jQuery('.shm-type-icon-1').length) + { + jQuery('.shm-type-icon-1').draggable( + { + revert: false, + start: (evt, ui) => + { + + }, + stop: (evt, ui) => + { + var _this = $(ui.helper); + _this.addClass('shmapperDragged'); + shmapperPlaceMarkerOnMap(evt, ui, true ); + $('.shm-type-icon-1.shmapperMarkerSelected').removeClass('shmapperMarkerSelected'); + } + }); + + } + function shmapperPlaceMarkerOnMap(evt, ui, isNew ) + { + var globalPixelPoint = myMap.converter.pageToGlobal( [evt.clientX, evt.clientY + window.scrollY] ); + new_mark_coords = myMap.options.get('projection').fromGlobalPixels(globalPixelPoint, myMap.getZoom()); + shmapperPlaceMarkerOnMapByCoords(myMap, new_mark_coords, $(ui.helper), isNew); + } + function shmapperPlaceMarkerOnMapByCoords(map, new_mark_coords, _markerIcon, isNew=false) + { + MyIconContentLayout = ymaps.templateLayoutFactory.createClass( + '
    $[properties.iconContent]
    ' + ); + var bg = _markerIcon.css('background-image'); + if( bg !== 'none') + { + bg = bg.replace('url(','').replace(')','').replace(/\"/gi, ''); + shm_paramet = { + balloonMaxWidth: 425, + hideIconOnBalloonOpen: false, + iconLayout: 'default#imageWithContent', + iconShadow:true, + iconImageHref: bg, + iconImageSize:[22,22], + iconImageOffset: [-11, -22], + draggable:true, + term_id:_markerIcon.attr('shm_type_id'), + type:'point', + fill:true, + fillColor: _markerIcon.attr('shm_clr') ? _markerIcon.attr('shm_clr'):'#FF0000', + iconContentLayout: MyIconContentLayout, + opacity:0.22, + marker_id: _markerIcon.attr("marker_id"), + hasBalloon:false + + }; + } + else + { + shm_paramet = { + balloonMaxWidth: 425, + hideIconOnBalloonOpen: true, + iconColor: _markerIcon.attr('shm_clr') ? _markerIcon.attr('shm_clr'):'#FF0000', + preset: 'islands#dotIcon', + draggable:true, + term_id:_markerIcon.attr('shm_type_id'), + type:'point', + fill:true, + fillColor: '#FF0000', + iconShadow:true, + opacity:0.22, + marker_id: _markerIcon.attr("marker_id"), + hasBalloon:false + } + } + + shm_placemark = new ymaps.GeoObject( + { + options: + { + hideIconOnBalloonOpen: true, + draggable: true + + }, + properties: + { + hideIconOnBalloonOpen: true, + // Temporarily disable marker background color + //iconContent:"
    ", + iconContent:"
    ", + balloonContentHeader: '', + balloonContentBody: '
    Delete Marker
    ', + marker_id: _markerIcon.attr("marker_id"), + shm_type_id: _markerIcon.attr("shm_type_id"), + post_title: _markerIcon.attr("post_title"), + post_content: _markerIcon.attr("post_content") + }, + geometry: + { + type: 'Point', + coordinates: new_mark_coords + }, + } , + shm_paramet + ); + if(isNew) + { + addAdress( _markerIcon, new_mark_coords ); + _markerIcon.css({left:0, top:0}).hide().fadeIn('slow'); + _markerIcon.parents('.shm-form-placemarks').removeAttr('required').removeClass('shm-alert'); + _markerIcon.data('straight_geocoding', ''); + addTrack(shm_placemark, _markerIcon.attr('shm_type_id')); + } + shm_placemark.events.add('dragend', evt => + { + var pos = evt.get('position'); + var targ = evt.get("target"); + var globalPixelPoint = map.converter.pageToGlobal( [pos[0], pos[1]] ); + new_mark_coords = map.options.get('projection').fromGlobalPixels(globalPixelPoint, map.getZoom()); + addAdress( _markerIcon, new_mark_coords ); + shm_send([ + "shm_chande_track_point", + { + marker_id : targ.properties._data.marker_id, + post_title: targ.properties._data.post_title, + post_content: targ.properties._data.post_content, + shm_type_id : targ.properties._data.shm_type_id, + point_type : "point_type", + coordinates : new_mark_coords//targ.geometry._coordinates + + } + ]) + }); + map.geoObjects.add(shm_placemark); + + shm_placemark.events.add( "click", e => + { + var tg = e.get("target"); + console.log( tg ); + var post_title = tg.properties._data.post_title; + var post_content = tg.properties._data.post_content; + shm_track_place = shm_placemark; + addSubDialog({ + title:"", + content:"", + footer : "" + }); + jQuery("[name=shm_track_marker_post_title]").on( "change", e => + { + tg.properties.set({ + post_title : e.currentTarget.value + }); + //update_track_placmarks_json( tg ); + }) + jQuery("[name=shm_track_marker_post_content]").on( "change", e => + { + tg.properties.set({ + post_content : e.currentTarget.value + }) + //update_track_placmarks_json( tg ); + }) + jQuery(".update_placemark").on( "click", e => + { + update_track_placmarks_json( tg ); + removeSubDialog(); + }) + jQuery(".remove_placemark").on( "click", e => + { + if( confirm( __( "Remove placemark?" ) ) ) + { + tg.setParent(); + shm_send([ + "shm_remove_track_point", + tg.properties._data.marker_id + ]) + removeSubDialog(); + } + }) + + }); + + } + function addAdress( _markerIcon, new_mark_coords ) + { + + } + function addTrack( shm_placemark, shm_type_id ) + { + track_points.push( shm_placemark ); + shm_send([ + "shm_add_track_point", + { + track_id : track_id, + shm_type_id : shm_type_id, + point_type : "point_type", + geometry : shm_placemark.geometry._coordinates + } + ]) + } + function removeTrack(shm_placemark) + { + + } + $('.place-del-btn').on('click', function(evt) + { + + }); + var update_placemark = function( mark_id ) + { + + } + } ); + var setUpdateTrackPoints = function( ) + { + jQuery("[name='shm_marker_post_title']").off("change", e => + { + updTrackPoint(e); + }); + jQuery("[name='shm_marker_post_title']").on("change", e => + { + updTrackPoint(e); + }); + } + var updTrackPoint = function( evt ) + { + console.log( jQuery( evt.currentTarget ).val() ); + + } + + document.documentElement.addEventListener("_shm_send_", function(evt) + { + var dat = evt.detail; + var command = dat[0]; + var datas = dat[1]; + + switch(command) + { + case "shm_add_track_point": + console.log( dat ); + break; + case "shm_chande_track_point": + console.log( dat ); + break; + case "shm_remove_track_point": + + break; + + } + }) +}) +var update_track_placmarks_json = function( target ) +{ + console.log(target); + shm_send([ + "shm_chande_track_point", + { + marker_id : target.properties._data.marker_id, + shm_type_id : target.properties._data.shm_type_id, + coordinates : target.geometry._coordinates, + post_title: target.properties._data.post_title, + post_content: target.properties._data.post_content + } + ]) +} +var addSubDialog = function(params) +{ + jQuery("html").append("
    "); + jQuery(".subdialog").append("
    "); + jQuery(".subdialog").append("
    "); + jQuery(".subdialog-body").append("
    x
    "); + jQuery(".subdialog-matter, .subdialog-body .subdialog-close").click(() => removeSubDialog() ); + jQuery(".subdialog-body").append("
    " + params.title + "
    "); + jQuery(".subdialog-body").append("
    " + params.content + "
    "); + jQuery(".subdialog-body").append(""); + jQuery(".subdialog-footer").append(params.footer); +} +var removeSubDialog = function() +{ + jQuery(".subdialog").detach(); +} + diff --git a/assets/js/ion.rangeSlider.min.js b/assets/js/ion.rangeSlider.min.js new file mode 100644 index 0000000..ebc66b5 --- /dev/null +++ b/assets/js/ion.rangeSlider.min.js @@ -0,0 +1,2 @@ +// Ion.RangeSlider, 2.3.1, © Denis Ineshin, 2010 - 2019, IonDen.com, Build date: 2019-12-19 16:56:44 +!function(i){"undefined"!=typeof jQuery&&jQuery||"function"!=typeof define||!define.amd?"undefined"!=typeof jQuery&&jQuery||"object"!=typeof exports?i(jQuery,document,window,navigator):i(require("jquery"),document,window,navigator):define(["jquery"],function(t){return i(t,document,window,navigator)})}(function(a,c,l,t,_){"use strict";var i,s,o=0,e=(i=t.userAgent,s=/msie\s\d+/i,0>>0;if(0==e)return-1;var h=+i||0;if(Math.abs(h)===1/0&&(h=0),e<=h)return-1;for(s=Math.max(0<=h?h:e-Math.abs(h),0);s!",r[0]),(e={skin:r.data("skin"),type:r.data("type"),min:r.data("min"),max:r.data("max"),from:r.data("from"),to:r.data("to"),step:r.data("step"),min_interval:r.data("minInterval"),max_interval:r.data("maxInterval"),drag_interval:r.data("dragInterval"),values:r.data("values"),from_fixed:r.data("fromFixed"),from_min:r.data("fromMin"),from_max:r.data("fromMax"),from_shadow:r.data("fromShadow"),to_fixed:r.data("toFixed"),to_min:r.data("toMin"),to_max:r.data("toMax"),to_shadow:r.data("toShadow"),prettify_enabled:r.data("prettifyEnabled"),prettify_separator:r.data("prettifySeparator"),force_edges:r.data("forceEdges"),keyboard:r.data("keyboard"),grid:r.data("grid"),grid_margin:r.data("gridMargin"),grid_num:r.data("gridNum"),grid_snap:r.data("gridSnap"),hide_min_max:r.data("hideMinMax"),hide_from_to:r.data("hideFromTo"),prefix:r.data("prefix"),postfix:r.data("postfix"),max_postfix:r.data("maxPostfix"),decorate_both:r.data("decorateBoth"),values_separator:r.data("valuesSeparator"),input_values_separator:r.data("inputValuesSeparator"),disable:r.data("disable"),block:r.data("block"),extra_classes:r.data("extraClasses")}).values=e.values&&e.values.split(","),e)e.hasOwnProperty(h)&&(e[h]!==_&&""!==e[h]||delete e[h]);n!==_&&""!==n&&((n=n.split(e.input_values_separator||i.input_values_separator||";"))[0]&&n[0]==+n[0]&&(n[0]=+n[0]),n[1]&&n[1]==+n[1]&&(n[1]=+n[1]),i&&i.values&&i.values.length?(o.from=n[0]&&i.values.indexOf(n[0]),o.to=n[1]&&i.values.indexOf(n[1])):(o.from=n[0]&&+n[0],o.to=n[1]&&+n[1])),a.extend(o,i),a.extend(o,e),this.options=o,this.update_check={},this.validate(),this.result={input:this.$cache.input,slider:null,min:this.options.min,max:this.options.max,from:this.options.from,from_percent:0,from_value:null,to:this.options.to,to_percent:0,to_value:null},this.init()}h.prototype={init:function(t){this.no_diapason=!1,this.coords.p_step=this.convertToPercent(this.options.step,!0),this.target="base",this.toggleInput(),this.append(),this.setMinMax(),t?(this.force_redraw=!0,this.calc(!0),this.callOnUpdate()):(this.force_redraw=!0,this.calc(!0),this.callOnStart()),this.updateScene()},append:function(){var t='';this.$cache.input.before(t),this.$cache.input.prop("readonly",!0),this.$cache.cont=this.$cache.input.prev(),this.result.slider=this.$cache.cont,this.$cache.cont.html('01000'),this.$cache.rs=this.$cache.cont.find(".irs"),this.$cache.min=this.$cache.cont.find(".irs-min"),this.$cache.max=this.$cache.cont.find(".irs-max"),this.$cache.from=this.$cache.cont.find(".irs-from"),this.$cache.to=this.$cache.cont.find(".irs-to"),this.$cache.single=this.$cache.cont.find(".irs-single"),this.$cache.line=this.$cache.cont.find(".irs-line"),this.$cache.grid=this.$cache.cont.find(".irs-grid"),"single"===this.options.type?(this.$cache.cont.append(''),this.$cache.bar=this.$cache.cont.find(".irs-bar"),this.$cache.edge=this.$cache.cont.find(".irs-bar-edge"),this.$cache.s_single=this.$cache.cont.find(".single"),this.$cache.from[0].style.visibility="hidden",this.$cache.to[0].style.visibility="hidden",this.$cache.shad_single=this.$cache.cont.find(".shadow-single")):(this.$cache.cont.append(''),this.$cache.bar=this.$cache.cont.find(".irs-bar"),this.$cache.s_from=this.$cache.cont.find(".from"),this.$cache.s_to=this.$cache.cont.find(".to"),this.$cache.shad_from=this.$cache.cont.find(".shadow-from"),this.$cache.shad_to=this.$cache.cont.find(".shadow-to"),this.setTopHandler()),this.options.hide_from_to&&(this.$cache.from[0].style.display="none",this.$cache.to[0].style.display="none",this.$cache.single[0].style.display="none"),this.appendGrid(),this.options.disable?(this.appendDisableMask(),this.$cache.input[0].disabled=!0):(this.$cache.input[0].disabled=!1,this.removeDisableMask(),this.bindEvents()),this.options.disable||(this.options.block?this.appendDisableMask():this.removeDisableMask()),this.options.drag_interval&&(this.$cache.bar[0].style.cursor="ew-resize")},setTopHandler:function(){var t=this.options.min,i=this.options.max,s=this.options.from,o=this.options.to;t'),this.$cache.cont.addClass("irs-disabled")},removeDisableMask:function(){this.$cache.cont.remove(".irs-disable-mask"),this.$cache.cont.removeClass("irs-disabled")},remove:function(){this.$cache.cont.remove(),this.$cache.cont=null,this.$cache.line.off("keydown.irs_"+this.plugin_count),this.$cache.body.off("touchmove.irs_"+this.plugin_count),this.$cache.body.off("mousemove.irs_"+this.plugin_count),this.$cache.win.off("touchend.irs_"+this.plugin_count),this.$cache.win.off("mouseup.irs_"+this.plugin_count),e&&(this.$cache.body.off("mouseup.irs_"+this.plugin_count),this.$cache.body.off("mouseleave.irs_"+this.plugin_count)),this.$cache.grid_labels=[],this.coords.big=[],this.coords.big_w=[],this.coords.big_p=[],this.coords.big_x=[],cancelAnimationFrame(this.raf_id)},bindEvents:function(){this.no_diapason||(this.$cache.body.on("touchmove.irs_"+this.plugin_count,this.pointerMove.bind(this)),this.$cache.body.on("mousemove.irs_"+this.plugin_count,this.pointerMove.bind(this)),this.$cache.win.on("touchend.irs_"+this.plugin_count,this.pointerUp.bind(this)),this.$cache.win.on("mouseup.irs_"+this.plugin_count,this.pointerUp.bind(this)),this.$cache.line.on("touchstart.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.line.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.line.on("focus.irs_"+this.plugin_count,this.pointerFocus.bind(this)),this.options.drag_interval&&"double"===this.options.type?(this.$cache.bar.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"both")),this.$cache.bar.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"both"))):(this.$cache.bar.on("touchstart.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.bar.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click"))),"single"===this.options.type?(this.$cache.single.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"single")),this.$cache.s_single.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"single")),this.$cache.shad_single.on("touchstart.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.single.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"single")),this.$cache.s_single.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"single")),this.$cache.edge.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.shad_single.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click"))):(this.$cache.single.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,null)),this.$cache.single.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,null)),this.$cache.from.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"from")),this.$cache.s_from.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"from")),this.$cache.to.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"to")),this.$cache.s_to.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"to")),this.$cache.shad_from.on("touchstart.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.shad_to.on("touchstart.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.from.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"from")),this.$cache.s_from.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"from")),this.$cache.to.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"to")),this.$cache.s_to.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"to")),this.$cache.shad_from.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.shad_to.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click"))),this.options.keyboard&&this.$cache.line.on("keydown.irs_"+this.plugin_count,this.key.bind(this,"keyboard")),e&&(this.$cache.body.on("mouseup.irs_"+this.plugin_count,this.pointerUp.bind(this)),this.$cache.body.on("mouseleave.irs_"+this.plugin_count,this.pointerUp.bind(this))))},pointerFocus:function(t){var i,s;this.target||(i=(s="single"===this.options.type?this.$cache.single:this.$cache.from).offset().left,i+=s.width()/2-1,this.pointerClick("single",{preventDefault:function(){},pageX:i}))},pointerMove:function(t){if(this.dragging){var i=t.pageX||t.originalEvent.touches&&t.originalEvent.touches[0].pageX;this.coords.x_pointer=i-this.coords.x_gap,this.calc()}},pointerUp:function(t){this.current_plugin===this.plugin_count&&this.is_active&&(this.is_active=!1,this.$cache.cont.find(".state_hover").removeClass("state_hover"),this.force_redraw=!0,e&&a("*").prop("unselectable",!1),this.updateScene(),this.restoreOriginalMinInterval(),(a.contains(this.$cache.cont[0],t.target)||this.dragging)&&this.callOnFinish(),this.dragging=!1)},pointerDown:function(t,i){i.preventDefault();var s=i.pageX||i.originalEvent.touches&&i.originalEvent.touches[0].pageX;2!==i.button&&("both"===t&&this.setTempMinInterval(),t=t||(this.target||"from"),this.current_plugin=this.plugin_count,this.target=t,this.is_active=!0,this.dragging=!0,this.coords.x_gap=this.$cache.rs.offset().left,this.coords.x_pointer=s-this.coords.x_gap,this.calcPointerPercent(),this.changeLevel(t),e&&a("*").prop("unselectable",!0),this.$cache.line.trigger("focus"),this.updateScene())},pointerClick:function(t,i){i.preventDefault();var s=i.pageX||i.originalEvent.touches&&i.originalEvent.touches[0].pageX;2!==i.button&&(this.current_plugin=this.plugin_count,this.target=t,this.is_click=!0,this.coords.x_gap=this.$cache.rs.offset().left,this.coords.x_pointer=+(s-this.coords.x_gap).toFixed(),this.force_redraw=!0,this.calc(),this.$cache.line.trigger("focus"))},key:function(t,i){if(!(this.current_plugin!==this.plugin_count||i.altKey||i.ctrlKey||i.shiftKey||i.metaKey)){switch(i.which){case 83:case 65:case 40:case 37:i.preventDefault(),this.moveByKey(!1);break;case 87:case 68:case 38:case 39:i.preventDefault(),this.moveByKey(!0)}return!0}},moveByKey:function(t){var i=this.coords.p_pointer,s=(this.options.max-this.options.min)/100;s=this.options.step/s,t?i+=s:i-=s,this.coords.x_pointer=this.toFixed(this.coords.w_rs/100*i),this.is_key=!0,this.calc()},setMinMax:function(){if(this.options){if(this.options.hide_min_max)return this.$cache.min[0].style.display="none",void(this.$cache.max[0].style.display="none");if(this.options.values.length)this.$cache.min.html(this.decorate(this.options.p_values[this.options.min])),this.$cache.max.html(this.decorate(this.options.p_values[this.options.max]));else{var t=this._prettify(this.options.min),i=this._prettify(this.options.max);this.result.min_pretty=t,this.result.max_pretty=i,this.$cache.min.html(this.decorate(t,this.options.min)),this.$cache.max.html(this.decorate(i,this.options.max))}this.labels.w_min=this.$cache.min.outerWidth(!1),this.labels.w_max=this.$cache.max.outerWidth(!1)}},setTempMinInterval:function(){var t=this.result.to-this.result.from;null===this.old_min_interval&&(this.old_min_interval=this.options.min_interval),this.options.min_interval=t},restoreOriginalMinInterval:function(){null!==this.old_min_interval&&(this.options.min_interval=this.old_min_interval,this.old_min_interval=null)},calc:function(t){if(this.options&&(this.calc_count++,10!==this.calc_count&&!t||(this.calc_count=0,this.coords.w_rs=this.$cache.rs.outerWidth(!1),this.calcHandlePercent()),this.coords.w_rs)){this.calcPointerPercent();var i=this.getHandleX();switch("both"===this.target&&(this.coords.p_gap=0,i=this.getHandleX()),"click"===this.target&&(this.coords.p_gap=this.coords.p_handle/2,i=this.getHandleX(),this.options.drag_interval?this.target="both_one":this.target=this.chooseHandle(i)),this.target){case"base":var s=(this.options.max-this.options.min)/100,o=(this.result.from-this.options.min)/s,e=(this.result.to-this.options.min)/s;this.coords.p_single_real=this.toFixed(o),this.coords.p_from_real=this.toFixed(o),this.coords.p_to_real=this.toFixed(e),this.coords.p_single_real=this.checkDiapason(this.coords.p_single_real,this.options.from_min,this.options.from_max),this.coords.p_from_real=this.checkDiapason(this.coords.p_from_real,this.options.from_min,this.options.from_max),this.coords.p_to_real=this.checkDiapason(this.coords.p_to_real,this.options.to_min,this.options.to_max),this.coords.p_single_fake=this.convertToFakePercent(this.coords.p_single_real),this.coords.p_from_fake=this.convertToFakePercent(this.coords.p_from_real),this.coords.p_to_fake=this.convertToFakePercent(this.coords.p_to_real),this.target=null;break;case"single":if(this.options.from_fixed)break;this.coords.p_single_real=this.convertToRealPercent(i),this.coords.p_single_real=this.calcWithStep(this.coords.p_single_real),this.coords.p_single_real=this.checkDiapason(this.coords.p_single_real,this.options.from_min,this.options.from_max),this.coords.p_single_fake=this.convertToFakePercent(this.coords.p_single_real);break;case"from":if(this.options.from_fixed)break;this.coords.p_from_real=this.convertToRealPercent(i),this.coords.p_from_real=this.calcWithStep(this.coords.p_from_real),this.coords.p_from_real>this.coords.p_to_real&&(this.coords.p_from_real=this.coords.p_to_real),this.coords.p_from_real=this.checkDiapason(this.coords.p_from_real,this.options.from_min,this.options.from_max),this.coords.p_from_real=this.checkMinInterval(this.coords.p_from_real,this.coords.p_to_real,"from"),this.coords.p_from_real=this.checkMaxInterval(this.coords.p_from_real,this.coords.p_to_real,"from"),this.coords.p_from_fake=this.convertToFakePercent(this.coords.p_from_real);break;case"to":if(this.options.to_fixed)break;this.coords.p_to_real=this.convertToRealPercent(i),this.coords.p_to_real=this.calcWithStep(this.coords.p_to_real),this.coords.p_to_realthis.coords.w_rs&&(this.coords.x_pointer=this.coords.w_rs),this.coords.p_pointer=this.toFixed(this.coords.x_pointer/this.coords.w_rs*100)):this.coords.p_pointer=0},convertToRealPercent:function(t){return t/(100-this.coords.p_handle)*100},convertToFakePercent:function(t){return t/100*(100-this.coords.p_handle)},getHandleX:function(){var t=100-this.coords.p_handle,i=this.toFixed(this.coords.p_pointer-this.coords.p_gap);return i<0?i=0:t100-this.labels.p_max-1?this.$cache.max[0].style.visibility="hidden":this.$cache.max[0].style.visibility="visible";else{s=h?(this.options.decorate_both?(t=this.decorate(r[this.result.from]),t+=this.options.values_separator,t+=this.decorate(r[this.result.to])):t=this.decorate(r[this.result.from]+this.options.values_separator+r[this.result.to]),i=this.decorate(r[this.result.from]),this.decorate(r[this.result.to])):(o=this._prettify(this.result.from),e=this._prettify(this.result.to),this.options.decorate_both?(t=this.decorate(o,this.result.from),t+=this.options.values_separator,t+=this.decorate(e,this.result.to)):t=this.decorate(o+this.options.values_separator+e,this.result.to),i=this.decorate(o,this.result.from),this.decorate(e,this.result.to)),this.$cache.single.html(t),this.$cache.from.html(i),this.$cache.to.html(s),this.calcLabels();var n=Math.min(this.labels.p_single_left,this.labels.p_from_left),a=this.labels.p_single_left+this.labels.p_single_fake,c=this.labels.p_to_left+this.labels.p_to_fake,l=Math.max(a,c);this.labels.p_from_left+this.labels.p_from_fake>=this.labels.p_to_left?(this.$cache.from[0].style.visibility="hidden",this.$cache.to[0].style.visibility="hidden",this.$cache.single[0].style.visibility="visible",l=this.result.from===this.result.to?("from"===this.target?this.$cache.from[0].style.visibility="visible":"to"===this.target?this.$cache.to[0].style.visibility="visible":this.target||(this.$cache.from[0].style.visibility="visible"),this.$cache.single[0].style.visibility="hidden",c):(this.$cache.from[0].style.visibility="hidden",this.$cache.to[0].style.visibility="hidden",this.$cache.single[0].style.visibility="visible",Math.max(a,c))):(this.$cache.from[0].style.visibility="visible",this.$cache.to[0].style.visibility="visible",this.$cache.single[0].style.visibility="hidden"),n100-this.labels.p_max-1?this.$cache.max[0].style.visibility="hidden":this.$cache.max[0].style.visibility="visible"}}},drawShadow:function(){var t,i,s,o,e=this.options,h=this.$cache,r="number"==typeof e.from_min&&!isNaN(e.from_min),n="number"==typeof e.from_max&&!isNaN(e.from_max),a="number"==typeof e.to_min&&!isNaN(e.to_min),c="number"==typeof e.to_max&&!isNaN(e.to_max);"single"===e.type?e.from_shadow&&(r||n)?(t=this.convertToPercent(r?e.from_min:e.min),i=this.convertToPercent(n?e.from_max:e.max)-t,t=this.toFixed(t-this.coords.p_handle/100*t),i=this.toFixed(i-this.coords.p_handle/100*i),t+=this.coords.p_handle/2,h.shad_single[0].style.display="block",h.shad_single[0].style.left=t+"%",h.shad_single[0].style.width=i+"%"):h.shad_single[0].style.display="none":(e.from_shadow&&(r||n)?(t=this.convertToPercent(r?e.from_min:e.min),i=this.convertToPercent(n?e.from_max:e.max)-t,t=this.toFixed(t-this.coords.p_handle/100*t),i=this.toFixed(i-this.coords.p_handle/100*i),t+=this.coords.p_handle/2,h.shad_from[0].style.display="block",h.shad_from[0].style.left=t+"%",h.shad_from[0].style.width=i+"%"):h.shad_from[0].style.display="none",e.to_shadow&&(a||c)?(s=this.convertToPercent(a?e.to_min:e.min),o=this.convertToPercent(c?e.to_max:e.max)-s,s=this.toFixed(s-this.coords.p_handle/100*s),o=this.toFixed(o-this.coords.p_handle/100*o),s+=this.coords.p_handle/2,h.shad_to[0].style.display="block",h.shad_to[0].style.left=s+"%",h.shad_to[0].style.width=o+"%"):h.shad_to[0].style.display="none")},writeToInput:function(){"single"===this.options.type?(this.options.values.length?this.$cache.input.prop("value",this.result.from_value):this.$cache.input.prop("value",this.result.from),this.$cache.input.data("from",this.result.from)):(this.options.values.length?this.$cache.input.prop("value",this.result.from_value+this.options.input_values_separator+this.result.to_value):this.$cache.input.prop("value",this.result.from+this.options.input_values_separator+this.result.to),this.$cache.input.data("from",this.result.from),this.$cache.input.data("to",this.result.to))},callOnStart:function(){this.writeToInput(),this.options.onStart&&"function"==typeof this.options.onStart&&(this.options.scope?this.options.onStart.call(this.options.scope,this.result):this.options.onStart(this.result))},callOnChange:function(){this.writeToInput(),this.options.onChange&&"function"==typeof this.options.onChange&&(this.options.scope?this.options.onChange.call(this.options.scope,this.result):this.options.onChange(this.result))},callOnFinish:function(){this.writeToInput(),this.options.onFinish&&"function"==typeof this.options.onFinish&&(this.options.scope?this.options.onFinish.call(this.options.scope,this.result):this.options.onFinish(this.result))},callOnUpdate:function(){this.writeToInput(),this.options.onUpdate&&"function"==typeof this.options.onUpdate&&(this.options.scope?this.options.onUpdate.call(this.options.scope,this.result):this.options.onUpdate(this.result))},toggleInput:function(){this.$cache.input.toggleClass("irs-hidden-input"),this.has_tab_index?this.$cache.input.prop("tabindex",-1):this.$cache.input.removeProp("tabindex"),this.has_tab_index=!this.has_tab_index},convertToPercent:function(t,i){var s,o=this.options.max-this.options.min,e=o/100;return o?(s=(i?t:t-this.options.min)/e,this.toFixed(s)):(this.no_diapason=!0,0)},convertToValue:function(t){var i,s,o=this.options.min,e=this.options.max,h=o.toString().split(".")[1],r=e.toString().split(".")[1],n=0,a=0;if(0===t)return this.options.min;if(100===t)return this.options.max;h&&(n=i=h.length),r&&(n=s=r.length),i&&s&&(n=s<=i?i:s),o<0&&(o=+(o+(a=Math.abs(o))).toFixed(n),e=+(e+a).toFixed(n));var c,l=(e-o)/100*t+o,_=this.options.step.toString().split(".")[1];return l=_?+l.toFixed(_.length):(l/=this.options.step,+(l*=this.options.step).toFixed(0)),a&&(l-=a),(c=_?+l.toFixed(_.length):this.toFixed(l))this.options.max&&(c=this.options.max),c},calcWithStep:function(t){var i=Math.round(t/this.coords.p_step)*this.coords.p_step;return 100h.max_interval&&(o=e-h.max_interval):o-e>h.max_interval&&(o=e+h.max_interval),this.convertToPercent(o)):t},checkDiapason:function(t,i,s){var o=this.convertToValue(t),e=this.options;return"number"!=typeof i&&(i=e.min),"number"!=typeof s&&(s=e.max),os.max&&(s.from=s.max)):(s.froms.max&&(s.from=s.max),s.tos.max&&(s.to=s.max),this.update_check.from&&(this.update_check.from!==s.from&&s.from>s.to&&(s.from=s.to),this.update_check.to!==s.to&&s.tos.to&&(s.from=s.to),s.tos.from_max&&(s.from=s.from_max),"number"==typeof s.to_min&&s.tos.to_max&&(s.to=s.to_max),o&&(o.min!==s.min&&(o.min=s.min),o.max!==s.max&&(o.max=s.max),(o.fromo.max)&&(o.from=s.from),(o.too.max)&&(o.to=s.to)),("number"!=typeof s.min_interval||isNaN(s.min_interval)||!s.min_interval||s.min_interval<0)&&(s.min_interval=0),("number"!=typeof s.max_interval||isNaN(s.max_interval)||!s.max_interval||s.max_interval<0)&&(s.max_interval=0),s.min_interval&&s.min_interval>s.max-s.min&&(s.min_interval=s.max-s.min),s.max_interval&&s.max_interval>s.max-s.min&&(s.max_interval=s.max-s.min)},decorate:function(t,i){var s="",o=this.options;return o.prefix&&(s+=o.prefix),s+=t,o.max_postfix&&(o.values.length&&t===o.p_values[o.max]?(s+=o.max_postfix,o.postfix&&(s+=" ")):i===o.max&&(s+=o.max_postfix,o.postfix&&(s+=" "))),o.postfix&&(s+=o.postfix),s},updateFrom:function(){this.result.from=this.options.from,this.result.from_percent=this.convertToPercent(this.result.from),this.result.from_pretty=this._prettify(this.result.from),this.options.values&&(this.result.from_value=this.options.values[this.result.from])},updateTo:function(){this.result.to=this.options.to,this.result.to_percent=this.convertToPercent(this.result.to),this.result.to_pretty=this._prettify(this.result.to),this.options.values&&(this.result.to_value=this.options.values[this.result.to])},updateResult:function(){this.result.min=this.options.min,this.result.max=this.options.max,this.updateFrom(),this.updateTo()},appendGrid:function(){if(this.options.grid){var t,i,s,o,e,h,r=this.options,n=r.max-r.min,a=r.grid_num,c=0,l=4,_="";for(this.calcGridMargin(),r.grid_snap&&(a=n/r.step),50';_+='',h=this.convertToValue(c),_+=''+(h=r.values.length?r.p_values[h]:this._prettify(h))+""}this.coords.big_num=Math.ceil(a+1),this.$cache.cont.addClass("irs-with-grid"),this.$cache.grid.html(_),this.cacheGridLabels()}},cacheGridLabels:function(){var t,i,s=this.coords.big_num;for(i=0;i100+this.coords.grid_gap&&(o[e-1]=100+this.coords.grid_gap,s[e-1]=this.toFixed(o[e-1]-this.coords.big_p[e-1]),this.coords.big_x[e-1]=this.toFixed(this.coords.big_p[e-1]-this.coords.grid_gap))),this.calcGridCollision(2,s,o),this.calcGridCollision(4,s,o),t=0;t The Mailhide version of example@example.com is -.
    +.
    The url for the email is: -
    +
    diff --git a/class/SMC_Object_type.php b/class/SMC_Object_type.php index e508446..944b1a9 100644 --- a/class/SMC_Object_type.php +++ b/class/SMC_Object_type.php @@ -21,12 +21,20 @@ static function get_instance() static::$_instance = new static; return static::$_instance; } + function get_class_by_name( $name ) + { + return $this->object[$name]['class']['type']; + } + function init_options($array) { } function get($string) { + if ( ! isset( $this->object[$string] ) ) { + return; + } return $this->object[$string]; } function get_meta($string) diff --git a/class/SMC_Post.php b/class/SMC_Post.php index 7a89240..715efb6 100644 --- a/class/SMC_Post.php +++ b/class/SMC_Post.php @@ -33,7 +33,13 @@ function is_enabled() } public static function get_instance($id) { - $obj = is_numeric($id) ? $id : $id->ID; + $id_ID = ''; + if ( is_numeric($id) ) { + $id_ID = $id; + } elseif ( isset( $id->ID ) ) { + $id_ID = $id->ID; + } + $obj = $id_ID; if(!static::$instances) static::$instances = array(); if(!isset(static::$instances[$obj])) static::$instances[$obj] = new static($obj); @@ -47,7 +53,7 @@ static function insert($data) 'post_name' => $data['post_name'], 'post_title' => $data['post_title'], 'post_content' => $data['post_content'], - 'post_status' => 'publish', + 'post_status' => isset($data['post_status']) ? $data['post_status'] : 'publish', "post_author" => $data['post_author'] ? $data['post_author'] : get_current_user_id() ) ); @@ -83,7 +89,20 @@ static function delete($id) return wp_delete_post($id->ID); } } - + static function update($data, $id) + { + $cd = []; + foreach($data as $key => $val) + { + if(in_array($key, ["post_type", 'post_name', 'post_title', 'post_content', 'post_status', "post_author", "thumbnail"])) + $cd[$key] = $val; + } + $cd['ID'] = $id; + $id = wp_update_post( $cd ); + $post = static::get_instance($id); + $post->update_metas($data); + return $post; + } function update_metas($meta_array) { $data = array(); @@ -117,7 +136,7 @@ public function update_meta($name, $value) } public function get($field) { - return is_object($this->body) ? $this->body->$field : NULL; + return is_object($this->body) ? $this->body->$field : NULL; } function set($field) { @@ -267,17 +286,17 @@ static function amount_meta($meta_key, $post_ids=-1) */ static function wp_dropdown($params="-1") { - if( !is_array($params) ) { + if( !is_array($params) ) { $params = array(); - } + } - if(isset($params["exclude_post_id"]) && !is_array($params["exclude_post_id"])) { - $params["exclude_post_id"] = array($params["exclude_post_id"]); - } + if(isset($params["exclude_post_id"]) && !is_array($params["exclude_post_id"])) { + $params["exclude_post_id"] = array($params["exclude_post_id"]); + } $hubs = empty($params['posts']) ? - (empty($params['args']) ? array() : self::get_all($params['args'])) : - $params['posts']; + (empty($params['args']) ? array() : self::get_all($params['args'])) : + $params['posts']; $html = ""; break; - default: - $h = ""; + default: + $h = apply_filters( + "smc-post-admin-edit", + "", + $meta, + $obj, + $key, + $value + ); } $html .="
    ".$value['name'] . "
    diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index 5fc92ac..d209480 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -231,6 +231,9 @@ static function get_icon($term, $is_locked=false) $cur_bgnd = $d[0]; } $class = $is_locked ? " shm-muffle " : ""; + if ( $cur_bgnd ) { + $color = 'transparent'; + } return "
    SHM_POINT_TYPE, + "hide_empty" => false + ]); + $ret = []; + foreach($types as $type) + { + $ret[] = [ + "id" => $type->term_id, + "title" => $type->name, + "content" => $type->description, + "icon" => static::get_icon_src( $type->term_id ) + ]; + } + return $ret; + } static function get_icon_src($term_id, $size=-1) { $size = $size == -1 ? get_term_meta( $term_id, "height", true ) : $size; @@ -337,6 +358,13 @@ static function get_ganre_swicher($params = -1, $type="checkbox", $form_factor=" ($cur_bgnd ? "" : "
    "). ""; break; + case "stroke-large": + $class = "ganre_checkbox"; + $after = " + "; + break; default: $class = "ganre_checkbox"; break; diff --git a/class/ShMapTrackType.class.php b/class/ShMapTrackType.class.php new file mode 100644 index 0000000..a1cd3fb --- /dev/null +++ b/class/ShMapTrackType.class.php @@ -0,0 +1,333 @@ + __("Map track type", SHMAPPER_TRACKS), + 'singular_name' => __("Map track type", SHMAPPER_TRACKS), + 'search_items' => __("Search Map track type", SHMAPPER_TRACKS), + 'all_items' => __("All Map track types", SHMAPPER_TRACKS), + 'view_item ' => __("View Map track type", SHMAPPER_TRACKS), + 'parent_item' => __("Parent Map track type", SHMAPPER_TRACKS), + 'parent_item_colon' => __("Parent Map track type:", SHMAPPER_TRACKS), + 'edit_item' => __("Edit Map track type", SHMAPPER_TRACKS), + 'update_item' => __("Update Map track type", SHMAPPER_TRACKS), + 'add_new_item' => __("Add Map track type", SHMAPPER_TRACKS), + 'new_item_name' => __("New Map track type name", SHMAPPER_TRACKS), + 'menu_name' => __("Map track type", SHMAPPER_TRACKS), + ); + register_taxonomy(SHM_TRACK_TYPE, [ ], + [ + 'label' => '', + 'labels' => $labels, + 'description' => __('Unique type of every Map tracks', SHMAPPER_TRACKS), + 'public' => true, + 'hierarchical' => false, + 'update_count_callback' => '', + 'show_in_nav_menus' => true, + 'rewrite' => true, + 'capabilities' => array(), + 'meta_box_cb' => "post_categories_meta_box", + 'show_admin_column' => true, + '_builtin' => false, + 'show_in_quick_edit' => true, + ] ); + } + static function tax_menu_correction($parent_file) + { + global $current_screen; + $taxonomy = $current_screen->taxonomy; + if ( $taxonomy == SHM_TRACK_TYPE ) + $parent_file = 'shm_page'; + return $parent_file; + } + static function tax_add_admin_menus() + { + add_submenu_page( + 'shm_page', + __("Map track types", SHMAPPER_TRACKS), + __("Map track types", SHMAPPER_TRACKS), + 'manage_options', + 'edit-tags.php?taxonomy=' . SHM_TRACK_TYPE + ); + } + static function ctg_columns($theme_columns) + { + $new_columns = array + ( + 'cb' => ' ', + 'id' => __('ID'), + 'name' => __('Name'), + 'color' => __('Color', SHMAPPER) + ); + return $new_columns; + } + static function manage_ctg_columns($out, $column_name, $term_id) + { + switch ($column_name) { + case 'id': + $out .= $term_id; + break; + case 'color': + $color = get_term_meta( $term_id, 'color', true ); + echo '
    '; + break; + default: + break; + } + return $out; + } + static function new_ctg( $tax_name ) + { + require_once(SHM_REAL_PATH."tpl/input_file_form.php"); + if ( ! isset( $color ) ) { + $color = '#0066ff'; + } + ?> +
    + +
    +
    + +
    +
    + + +
    + + term_id; + $color = get_term_meta($term_id, "color", true); + $height = get_term_meta($term_id, "height", true); + $width = get_term_meta($term_id, "width", true); + $width = !$width ? 4 : $width; + } + ?> + + + + + +
    +
    + + + + + + + + + + + + term_id, "color", true); + $icon = (int)get_term_meta($term->term_id, "icon", true); + $d = wp_get_attachment_image_src($icon, array(100, 100)); + $cur_bgnd = ''; + if ( $d ) { + $cur_bgnd = $d[0]; + } + $class = $is_locked ? " shm-muffle " : ""; + return " +
    +
    +
    +
    " . $term->name . "
    +
    "; + } + static function get_all_ids() + { + return get_terms([ + "taxonomy" => SHM_TRACK_TYPE, + "hide_empty" => false, + "fields" => "ids" + + ]); + } + static function wp_dropdown($params=-1) + { + if(!is_array($params)) + $params=[ "id" => "ganres", "name" => "ganres", "class"=> "form-control", "taxonomy"=> SHM_TRACK_TYPE]; + $all = get_terms(['taxonomy' => SHM_TRACK_TYPE, 'hide_empty' => false ]); + $multiple = isset( $params['multiple'] ) ? " multiple " : "" ; + $selector = isset( $params['selector'] ) ? " selector='" . $params['selector'] . "' " : " s='ee' "; + $attr_id = isset( $params['id'] ) ? $params['id'] : ''; + $attr_class = isset( $params['class'] ) ? $params['class'] : ''; + $html = ""; + return $html; + } + static function get_icon_src($term_id, $size=-1) + { + $size = $size == -1 ? get_term_meta( $term_id, "height", true ) : $size; + $icon = get_term_meta( $term_id, "icon", true ); + $d = wp_get_attachment_image_src( $icon, array($size, $size) ); + return $d; + } + static function get_ganre_swicher($params = -1, $type="checkbox", $form_factor="large") + { + if( !is_array($params) || empty($params['prefix']) ) { + $params = array('prefix' => 'ganre'); + } + + $selected = is_array($params['selected']) ? $params['selected'] : explode(",", $params['selected']); + $includes = empty($params['includes']) ? '' : $params['includes']; + $row_class = isset($params['row_class']) ? $params['row_class'] : "" ; + $row_style = isset($params['row_style']) ? $params['row_style'] : ""; ; + $ganres = get_terms(["taxonomy" => SHM_TRACK_TYPE, 'hide_empty' => false ]); + $html = "
    "; + switch($params['col_width']) + { + case 12: + $col_width = "shm-1"; + break; + case 6: + $col_width = "shm-2"; + break; + case 4: + $col_width = "shm-3"; + break; + case 3: + $col_width = "shm-4"; + break; + default: + case 2: + $col_width = "shm-6"; + break; + + } + foreach($ganres as $ganre) + { + if( is_array($includes) && !in_array( $ganre->term_id, $includes ) ) continue; + + $icon = get_term_meta($ganre->term_id, "icon", true); + $color = get_term_meta($ganre->term_id, "color", true); + $d = wp_get_attachment_image_src($icon, array(100, 100)); + $cur_bgnd = ''; + if ( $d ) { + $cur_bgnd = $d[0]; + } + $before = ""; + $after = ""; + switch( $form_factor ) + { + case "large": + $class = "ganre_checkbox"; + $before = "
    "; + $after = " + +
    "; + break; + case "stroke": + $class = "ganre_checkbox2"; + $after = " + "; + break; + default: + $class = "ganre_checkbox"; + break; + } + $html .= " + $before + term_id . "' + term_id='" . $ganre->term_id . "' + class='$class' + value='" . $ganre->term_id . "' ". + checked(1, in_array( $ganre->term_id, $selected) ? 1 : 0, false). + "/> + $after"; + } + + if ( isset( $params['default_none'] ) ) { + if ( ! isset( $class ) ) { + $class = 'ganre_checkbox'; + } + $html .= " +
    + + +
    "; + } + + $html .= " + +
    "; + + return $html; + + } +} diff --git a/class/ShMaperTrack.class.php b/class/ShMaperTrack.class.php new file mode 100644 index 0000000..f5581a7 --- /dev/null +++ b/class/ShMaperTrack.class.php @@ -0,0 +1,807 @@ + + " . esc_html__( 'Shmapper Track exists only in Yandex map API', SHMAPPER ) . " + "; + + }; + return $html; + } + static function delete_post( $postid, $post ) + { + $points = ShMapperTracksPoint::get_all([ static::get_type() => $postid ]); + foreach($points as $point) + { + wp_delete_post( $point->ID ); + } + } + static function the_content($content) + { + $post_id = get_the_ID(); + $post_type = get_post_type(); + if ( $post_id ) { + if($post_type == static::get_type() && (is_single() || is_archive() )) + { + + $track = static::get_instance($post_id); + remove_filter( 'the_content', [__CLASS__, "the_content"], SHM_TRACKS_CONTENT_PRIORITY); + return $track->draw() . $track->get_owner_list( __("Usage in Maps: ", SHMAPPER), ", ", " " ) . "
    ".$content; + + } + return $content; + } + return $content; + } + function draw( $params=["height"=>400, "show_markers" => true] ) + { + if( ShMapper::$options['map_api'] != 1 ) + return esc_html__( 'Shmapper Track exists only in Yandex map API', SHMAPPER ); + $map = ShmMap::get_instance($this->get_meta(SHM_MAP)); + $meta = $this->get_meta("track"); + + // Tracker type width. + $tracker_width = 4; + $tracker_type_id = get_post_meta( $this->id, 'shmapper_track_type', true); + $tracker_type_width = get_term_meta( $tracker_type_id, 'width', true ); + if ( $tracker_type_width ) { + $tracker_width = $tracker_type_width; + } + + // Tracker type color. + $tracker_color = '#0066ff'; + $tracker_type_color = get_term_meta( $tracker_type_id, 'color', true ); + if ( $tracker_type_color ) { + $tracker_color = $tracker_type_color; + } + + $mm = []; + try + { + $meta = json_decode($meta); + } + catch (Exception $e) + { + $meta = []; + } + foreach($meta as $m) + { + if( is_array($m) ) + { + $mm[] = "[" . implode(",", $m) . "]"; + } + } + $points = ShMapperTracksPoint::get_all([ static::get_type() => $this->id]); + $markers = []; + foreach($points as $point) + { + $shtp = ShMapperTracksPoint::get_instance($point); + $term_id = $shtp->get_meta(SHM_TRACK_TYPE); + if ( ! $term_id ) { + $term_id = '""'; + } + $icon = ''; + if ( isset( ShMapPointType::get_icon_src($term_id)[0] ) ) { + $icon = ShMapPointType::get_icon_src($term_id)[0]; + } + $markers[] = " + { + coords:[" . $shtp->get_meta("latitude") . "," . $shtp->get_meta("longitude") . "], + track_id:\"".$point->ID."\", + post_title:\"". $shtp->get("post_title") ."\", + post_content:\"" . str_replace([ "\r\n", "\r", "\n", '"' ], '', ($shtp->get("post_content"))) ."\", + " . SHMAPPER_TRACKS_TRACK . ":" . $shtp->get_meta(SHMAPPER_TRACKS_TRACK) . ", + " . SHM_TRACK_TYPE . ":$term_id, + shm_clr: \"" . get_term_meta( $term_id, "color", true)."\", + icon:\"" . $icon . "\" + }"; + } + return "
    + +
    + "; + } + function get_owner_list( $before = "", $separator = "
    ", $after = "" ) + { + $map = ShmMap::get_instance($this->get_meta(SHM_MAP)); + $link = is_admin() ? "/wp-admin/post.php?post=" . $map->id . "&action=edit" : get_permalink( $map->id ); + return $before . "" . $map->get("post_title") . ""; + } + + static function smc_post_fill_views_column( $html, $column_name, $post_id, $obj, $meta ) + { + switch($obj[$column_name]['type']) + { + case "track": + if( ShMapper::$options['map_api'] != 1 ) + return "
    " . esc_html__( 'Shmapper Track exists only in Yandex map API', SHMAPPER ) . "
    "; + $mm = []; + + // return htmlspecialchars( urldecode( $meta ) ); + + try + { + $_meta = json_decode($meta); + } + catch (Exception $e) + { + $_meta = []; + } + + if ( null === $_meta ) { + $_meta = []; + } + + // Tracker type width. + $tracker_width = 4; + $tracker_type_id = get_post_meta( $post_id, 'shmapper_track_type', true); + $tracker_type_width = get_term_meta( $tracker_type_id, 'width', true ); + if ( $tracker_type_width ) { + $tracker_width = $tracker_type_width; + } + + // Tracker type color. + $tracker_color = '#0066ff'; + $tracker_type_color = get_term_meta( $tracker_type_id, 'color', true ); + if ( $tracker_type_color ) { + $tracker_color = $tracker_type_color; + } + + foreach($_meta as $m) + { + if( is_array($m) ) + { + $m2 = ''; + if ( isset( $m[2] ) ) { + $m2 = $m[2]; + } + $mm[] = "[" . $m[0] . "," . $m[1] . "," . json_encode( $m2 ) ."]"; + } + } + + $points = ShMapperTracksPoint::get_all([ static::get_type() => $post_id ]); + $markers = []; + foreach($points as $point) + { + $shtp = ShMapperTracksPoint::get_instance($point); + $term_id = $shtp->get_meta(SHM_POINT_TYPE); + if ( ! $term_id ) { + $term_id = '""'; + } + $icon = ''; + if ( isset( ShMapPointType::get_icon_src($term_id)[0] ) ) { + $icon = ShMapPointType::get_icon_src($term_id)[0]; + } + $markers[] = " + { + coords:[" . $shtp->get_meta("latitude") . "," . $shtp->get_meta("longitude") . "], + track_id:\"".$point->ID."\", + post_title:\"". $shtp->get("post_title") ."\", + post_content:\"" . str_replace([ "\r\n", "\r", "\n", '"' ], '', ($shtp->get("post_content"))) ."\", + " . SHMAPPER_TRACKS_TRACK . ":" . $shtp->get_meta(SHMAPPER_TRACKS_TRACK) . ", + " . SHM_POINT_TYPE . ":$term_id, + shm_clr: \"" . get_term_meta( $term_id, "color", true)."\", + icon: \"" . $icon . "\" + }"; + } + + return "
    + +
    + "; + } + return $html; + } + + /* + input forms edit post's meta ( card "Parameters" ) + */ + static function smc_post_admin_edit( $html, $meta, $obj, $key, $value ) + { + if( $value['type'] == "gpx") + { + $html = "
    +
    ". + __("See source", SHMAPPER_TRACKS). + "
    ".$obj->track_to_xml()."
    +
    +
    ". + __("Download *.gpx file", SHMAPPER_TRACKS). + "
    +
    "; + } + if( $value['type'] == "id") + { + require_once(SHM_REAL_PATH."class/SMC_Object_type.php"); + $SMC_Object_type = SMC_Object_Type::get_instance(); + $class = $SMC_Object_type->get_class_by_name($key); + switch($value['object']) + { + case "post": + + $html = $class::wp_dropdown([ + "style" => "width:100%;", + "name" => $key, + "selected" => $meta, + "posts" => $class::get_all() + ]); + break; + case "taxonomy": + $html = $class::wp_dropdown([ + "style" => "width:100%;", + "name" => $key, + "selected" => [$meta] + ]); + break; + } + } + + if( $value['type'] == "track") + { + $mm = []; + + try { + $_meta = json_decode($meta); + } catch (Exception $e) { + $_meta = []; + } + + + + // Tracker type width. + $tracker_width = 4; + $tracker_type_id = get_post_meta( $obj->id, 'shmapper_track_type', true); + $tracker_type_width = get_term_meta( $tracker_type_id, 'width', true ); + if ( $tracker_type_width ) { + $tracker_width = $tracker_type_width; + } + + // Tracker type color. + $tracker_color = '#0066ff'; + $tracker_type_color = get_term_meta( $tracker_type_id, 'color', true ); + if ( $tracker_type_color ) { + $tracker_color = $tracker_type_color; + } + + if ( ! $_meta ) { + $_meta = []; + } + + foreach($_meta as $m) + { + if( is_array($m) ) + { + $m2 = null; + if ( isset( $m[2] ) ) { + $m2 = $m[2]; + } + $mm[] = "[" . $m[0] . "," . $m[1] . "," . json_encode( $m2 ) . "]"; + } + } + $points = ShMapperTracksPoint::get_all([ static::get_type() => $obj->id]); + $markers = []; + foreach($points as $point) + { + $shtp = ShMapperTracksPoint::get_instance($point); + $term_id = $shtp->get_meta(SHM_POINT_TYPE); + if ( ! $term_id ) { + $term_id = '""'; + } + $icon = ''; + if ( isset( ShMapPointType::get_icon_src($term_id)[0] ) ) { + $icon = ShMapPointType::get_icon_src($term_id)[0]; + } + $markers[] = " + { + marker_id: " . $shtp->id . ", + coords:[" . $shtp->get_meta("latitude") . "," . $shtp->get_meta("longitude") . "], + track_id:\"".$obj->id."\", + post_title:\"". $shtp->get("post_title") ."\", + post_content:\"" . str_replace([ "\r\n", "\r", "\n", '"' ], '', ($shtp->get("post_content"))) ."\", + " . SHMAPPER_TRACKS_TRACK . ":" . $shtp->get_meta(SHMAPPER_TRACKS_TRACK) . ", + " . SHM_POINT_TYPE . ":$term_id, + shm_clr: \"" . get_term_meta( $term_id, "color", true)."\", + icon:\"" . $icon . "\" + }"; + } + + $map = ShmMap::get_instance(get_post_meta($obj->id, SHM_MAP, true)); + + if( ShMapper::$options['map_api'] != 1 ) + return "
    + " . esc_html__( 'Shmapper Track exists only in Yandex map API', SHMAPPER ) . " +
    +
    + +
    "; + + $html = " +
    +
    + +
    +
    + +
    +
    ". + ShmForm::getTypeSwitcher( + [ "placemarks" => implode( ",", get_terms( [ 'taxonomy' => SHM_POINT_TYPE, 'hide_empty' => false, "fields" => "ids" ] ) ) ], + $map, + "", + ["icon_class" => "shm-type-icon-1"] + ) . + " +
    " . + __("Add track's markers", SHMAPPER_TRACKS). + "
    +
    +
    +
    + "; + } + return $html; + } + + static function save_admin_edit($obj) + { + $arr = []; + $gpx = ''; + if ( isset( $_POST['gpx'] ) ) { + $gpx = $_POST['gpx']; + } + $arr['gpx'] = $gpx; + $arr['track'] = $_POST['track']; + $arr['shm_author'] = $_POST['shm_author']; + $arr['shm_author_email']= $_POST['shm_author_email']; + $arr[SHM_MAP] = $_POST[SHM_MAP]; + $arr[SHM_TRACK_TYPE] = $_POST[SHM_TRACK_TYPE]; + return $arr; + } + static function get_dump($data) + { + ob_start(); + var_dump($data); + $html = ob_get_contents(); + ob_end_clean(); + return $html; + } + + + static function shm_before_insert_request( $arr, $data ) + { + //var_dump( $arr ); + //var_dump( $data ); + //wp_die( ); + $map = ShmMap::get_instance((int)$data['id']); + $form = $map->get_meta('form_forms'); + if( $data['shm_form_name'] ) + { + $shm_author = $data['shm_form_name']; + if ( 'undefined' === $shm_author ) { + $shm_author = esc_html__( 'Anonymous author', 'shmapper-by-teplitsa' ); + } + } + if( $data['shm_form_email'] ) + { + $shm_author_email = $data['shm_form_email']; + if ( 'undefined' === $shm_author_email ) { + $shm_author_email = ''; + } + } + foreach($form as $key => $val) + { + if( $val['type'] == SHMAPPER_TRACKS_DRAW ) + { + if( ShMapper::$options['map_api'] != 1 ) + { + return $arr; + } + $full_track = urldecode( stripslashes($data["elem"][$key]) ); + $track_data = json_decode( $full_track ); + $track = json_encode( $track_data->coords, true ); + $markers = $track_data->markers; + + $imgg = false; + $content = $arr['description']; + $gpx = ""; + if (isset( $_FILES[0] ) ) + { + $fileTmpPath = $_FILES[0]['tmp_name']; + $fileName = $_FILES[0]['name']; + $fileSize = $_FILES[0]['size']; + $fileType = $_FILES[0]['type']; + $fileNameCmps = explode(".", $fileName); + $fileExtension = strtolower(end($fileNameCmps)); + $newFileName = md5(time() . $fileName) . '.' . $fileExtension; + $allowedfileExtensions = array('gpx', 'xml'); + if (in_array($fileExtension, $allowedfileExtensions)) + { + $uploadFileDir = SHMTRACKS_REAL_PATH . 'temp/'; + $dest_path = $uploadFileDir . $newFileName; + if(move_uploaded_file($fileTmpPath, $dest_path)) + { + $gpx .= file_get_contents($dest_path); + unlink($dest_path); + } + else + { + $gpx .= "No upload GPX file"; + } + } + } + else + { + $gpx_errors = "Errors: ". static::get_dump( $_FILES['error'] ); + } + } + } + + if( isset( $track_data->coords ) && count( $track_data->coords ) ) + { + $tracker = static::insert([ + "post_name" => $arr["post_title"], + "post_title" => $arr["post_title"] , + "post_content" => "" . $content . json_decode( $data ), + 'post_status' => ShMapper::$options['shm_map_marker_premoderation'] ? "draft" : "publish", + "shm_author" => $shm_author, + "shm_author_email" => $shm_author_email, + "gpx" => $gpx, + "gpx_errors" => $gpx_errors, + "track" => $track, + "full_track" => $full_track, + "form" => json_decode( $data ), + SHM_MAP => $map->id + ]); + + if( isset( $markers ) && count( $markers ) ) + { + foreach($markers as $marker) + { + $m = ShMapperTracksPoint::insert([ + "post_name" => $marker->post_title , + "post_title" => $marker->post_title , + "post_content" => $marker->post_content , + static::get_type() => $tracker->id, + SHM_POINT_TYPE => $marker->shm_type_id , + "track" => $track, + "latitude" => $marker->coordinates[0], + "longitude" => $marker->coordinates[1] + ]); + } + } + + $arr['forbiddance'] = true; + } + return $arr; + } + static function get_type() + { + return SHMAPPER_TRACKS_TRACK; + } + static function add_class() + { + $labels = array( + 'name' => __('Map track', SHMAPPER_TRACKS), + 'singular_name' => __("Map track", SHMAPPER_TRACKS), + 'add_new' => __("add Map track", SHMAPPER_TRACKS), + 'add_new_item' => __("add Map track", SHMAPPER_TRACKS), + 'edit_item' => __("edit Map track", SHMAPPER_TRACKS), + 'new_item' => __("add Map track", SHMAPPER_TRACKS), + 'all_items' => __("all Map tracks", 'shmapper-by-teplitsa'), + 'view_item' => __("view Map track", SHMAPPER_TRACKS), + 'search_items' => __("search Map track", SHMAPPER_TRACKS), + 'not_found' => __("Map track not found", SHMAPPER_TRACKS), + 'not_found_in_trash' => __("no found Map track in trash", SHMAPPER_TRACKS), + 'menu_name' => __("Map tracks", SHMAPPER_TRACKS) + ); + $args = array( + 'labels' => $labels + ,'public' => true + ,'show_ui' => true + ,'has_archive' => true + ,'exclude_from_search' => false + ,'menu_position' => 25 + ,'show_in_menu' => "shm_page" + ,'supports' => [ 'title', 'editor' ] + ,'capability_type' => 'post' + ,'taxonomies' => [], + ); + register_post_type(SHMAPPER_TRACKS_TRACK, $args); + } + static function shmapper_get_form_fild_types ($arr) + { + $arr[] = [ + "id" => SHMAPPER_TRACKS_DRAW, + "name" => SHMAPPER_TRACKS_DRAW, + "title" => __("Track drawer", SHMAPPER_TRACKS), + 'fields' => [ 'title', 'description' ] + ]; + return $arr; + } + + /* + Front form's element DRAW|UPLOAD TRACK + */ + static function shmapper_front_form_element( $html1, $element ) + { + if( $element['type'] == SHMAPPER_TRACKS_DRAW ) + { + if( ShMapper::$options['map_api'] != 1 ) + { + return esc_html__( 'Shmapper Track exists only in Yandex map API', SHMAPPER ); + } + + $switched_enabled_markers = ''; + if ( isset( $element['switched_enabled_markers'] ) && $element['switched_enabled_markers'] ) { + $switched_enabled_markers = $element['switched_enabled_markers']; + } + + $el_gpx = ''; + if ( isset( $element['gpx'] ) ) { + $el_gpx = $element['gpx']; + } + $require = isset($element['require']) && $element['require'] == 1 ? " required " : ""; + $file_require = isset($element['file_require']) && $element['file_require'] == 1 ? " required " : ""; + $type = ShmForm::get_type_by("id", $element['type']); + $data_types = " data-types='" . implode( ",", $type['fields'] ) . "' "; + $shmW = $el_gpx ? " shm-w-50 " : " shm-w-100 "; + $btnText = $element['draw_button_label'] ? $element['draw_button_label'] : __( 'Start draw new Track', SHMAPPER_TRACKS); + $editBtn = "
    +
    " . $btnText . "
    +
    + "; + if( isset( $element['gpx']) && $element['gpx'] ) + { + $flop = $element['placeholder'] ? $element['placeholder'] : __("Сhoose local GPX-file", SHMAPPER_TRACKS); + $file_map = " " . $flop; + $uploader = "
    + + +
    "; + $pult = " +
    +
    +
    +
    ". + __("Set range fliping of route's dots", SHMAPPER_TRACKS) . + "
    +
    + 100 +
    +
    +
    + +
    ". + __("edit", SHMAPPER_TRACKS) . + "
    +
    + +
    +
    +
    + +
    "; + $html1 = "
    +
    ". + __("Upload GPX-file", SHMAPPER_TRACKS) . + "
    +
    +
    + $uploader + $pult +
    + "; + } + else + { + $html1 = ""; + } + $value_data = ''; + if ( isset( $data['shmtrack_edit'] ) ) { + $value_data = $data['shmtrack_edit']; + } + $html1 = "
    " . $html1. $editBtn . "
    "; + } + return $html1; + } + static function shmapper_form_after_fields( $html, $id, $data, $type ) + { + if( $data['type'] == SHMAPPER_TRACKS_TRACK || $data['type'] == SHMAPPER_TRACKS_DRAW ) + { + if( ShMapper::$options['map_api'] != 1 ) + { + return esc_html__( 'Shmapper Track exists only in Yandex map API', SHMAPPER ); + } + $html .= " +
    +
    + " . + __( "Draw button label", SHMAPPER_TRACKS ). + " + +
    +
    +
    +
    + " . + __( "Input label", SHMAPPER_TRACKS ). + " + +
    +
    +
    +
    + + +
    +
    +
    + + +
    "; + } + return $html; + } + + function track_to_xml() + { + if($gpx = $this->get_meta( "gpx" ) ) + { + return $gpx; + } + + $shm_author = $this->get_meta( "shm_author" ); + $shm_author_email = $this->get_meta( "shm_author_email" ); + $track = json_decode( $this->get_meta( "track" ) ); + $string = " + +"; + $node = new SimpleXMLElement( $string ); + $gpx = $node; + $gpx->addAttribute( "version", "1.0" ); + $gpx->addAttribute( "creator", get_bloginfo("url") . " by ShmapperTrack for Wordpress" ); + $time = $gpx->addChild( "time", date( "Y-m-d H:i:s" ) ); + + $metadata = $gpx->addChild( "metadata" ); + $name = $metadata->addChild( "name", $this->get("post_title") ); + $desc = $metadata->addChild( "desc", $this->get("post_content") ); + $author = $metadata->addChild( "author" ); + $aname = $author->addChild( "name", $shm_author ? $shm_author : get_bloginfo("name") ); + if($shm_author_email) + { + $aemail = $author->addChild( "email", $shm_author_email ); + } + $trk = $gpx->addChild( "trk" ); + $trk_name = $trk->addChild( "name", $this->get("post_title") ); + $trkseg = $trk->addChild( "trkseg" ); + if($track && is_array($track)) + { + foreach( $track as $trkpt ) + { + $t = $trkseg->addChild("trkpt"); + $t->addAttribute( "lat", $trkpt[0] ); + $t->addAttribute( "lon", $trkpt[1] ); + } + } + return $gpx->asXML(); + + } +} diff --git a/class/ShMapper.class.php b/class/ShMapper.class.php index 1a922fa..d3c87bb 100644 --- a/class/ShMapper.class.php +++ b/class/ShMapper.class.php @@ -127,6 +127,7 @@ static function init_obj($init_object) if(!is_array($init_object)) $init_object = []; $point = []; $point['t'] = ['type'=>'post']; + $point['class'] = ['type' => 'ShmPoint']; $point['location'] = ['type' => 'string', "name" => __("Location", SHMAPPER)]; $point['latitude'] = ['type'=>'string', "name" => __("Latitude", SHMAPPER)]; $point['longitude'] = ['type'=>'string', "name" => __("Longitude", SHMAPPER)]; @@ -135,6 +136,7 @@ static function init_obj($init_object) $map = []; $map['t'] = ['type'=>'post']; + $map['class'] = ['type' => 'ShmMap']; $map['latitude'] = ['type'=>'string', "distination" => "map", "name" => __("Latitude", SHMAPPER)]; $map['longitude'] = ['type'=>'string', "distination" => "map", "name" => __("Longitude", SHMAPPER)]; $map['zoom'] = ['type'=>'number', "distination" => "map", "name" => __("Zoom", SHMAPPER)]; @@ -170,6 +172,7 @@ static function init_obj($init_object) $req = []; $req['t'] = ['type' => 'post']; + $req['class'] = ['type' => 'ShMapperRequest']; $req['map'] = ['type' => 'post', "object" => SHM_REQUEST, "color"=> "#5880a2", "name" => __("Map", SHMAPPER)]; $req['title'] = ['type' => 'string', "name" => __("Title")]; $req['description'] = ['type' => 'string', "name" => __("Description", SHMAPPER)]; @@ -184,6 +187,13 @@ static function init_obj($init_object) $req['notify_date'] = ['type' => 'number', "name" => __("Aprove date", SHMAPPER)]; $req['notify_user'] = ['type' => 'id', "object" => "user", "name" => __("Accessed User", SHMAPPER)]; $init_object[SHM_REQUEST] = $req; + + + $point = []; + $point['t'] = ['type' => 'taxonomy']; + $point['class'] = ['type' => 'ShMapPointType']; + $point['color'] = ['type' => 'color', "name" => __("Color", SHMAPPER)]; + $init_object[ SHM_POINT_TYPE ] = $point; return $init_object; @@ -202,12 +212,12 @@ static function add_admin_js_script() wp_register_style("ShMapper", SHM_URLPATH . 'assets/css/ShMapper.css', array(), SHMAPPER_VERSION); wp_enqueue_style( "ShMapper"); //js - wp_register_script("ShMapper", plugins_url( '../assets/js/ShMapper.js', __FILE__ ), array('inline-edit-post')); + wp_register_script("ShMapper", plugins_url( '../assets/js/ShMapper.js', __FILE__ ), array('inline-edit-post'), SHMAPPER_VERSION); wp_enqueue_script("ShMapper"); wp_enqueue_media(); wp_enqueue_style( 'wp-color-picker'); wp_enqueue_script( 'wp-color-picker' ); - wp_register_script("ShMapper.admin", plugins_url( '../assets/js/ShMapper.admin.js', __FILE__ ), array()); + wp_register_script("ShMapper.admin", plugins_url( '../assets/js/ShMapper.admin.js', __FILE__ ), array(), SHMAPPER_VERSION); wp_enqueue_script("ShMapper.admin"); if( static::$options['map_api'] == 1 ) { @@ -217,7 +227,7 @@ static function add_admin_js_script() } wp_register_script("api-maps", "https://api-maps.yandex.ru/2.1/?apikey=" . esc_attr( $ymap_key ) . "&load=package.full&lang=" . $locale, array()); wp_enqueue_script("api-maps"); - wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array()); + wp_register_script("ShMapper.yandex", plugins_url( '../assets/js/ShMapper.yandex.js', __FILE__ ), array(), SHMAPPER_VERSION); wp_enqueue_script("ShMapper.yandex"); } else if( static::$options['map_api'] == 2 ) @@ -280,13 +290,16 @@ static function add_admin_js_script() wp_localize_script( 'ShMapper', 'voc', - array( - 'Attantion' => __( "Attantion", SHMAPPER ), - 'Send' => __( "Send" ), - 'Close' => __( "Close" ), - 'Error: no map' => __( "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match", SHMAPPER ), - 'Are you shure?' => __( "Are you shure?", SHMAPPER ), - ) + apply_filters( + "shm_voc", + [ + 'Attantion' => __( "Attantion", SHMAPPER ), + 'Send' => __( "Send" ), + 'Close' => __( "Close" ), + 'Error: no map' => __( "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match", SHMAPPER ), + 'Are you shure?' => __( "Are you shure?", SHMAPPER ), + ] + ) ); $is_admin = 'false'; @@ -385,15 +398,26 @@ static function add_frons_js_script() 'url' => admin_url('admin-ajax.php') ) ); + wp_localize_script( + 'ShMapper', + 'shmapper', + array( + 'url' => SHM_URLPATH, + SHM_POINT_TYPE => ShMapPointType::get_all_data() + ) + ); wp_localize_script( 'ShMapper', 'shm_maps', array() ); wp_localize_script( 'ShMapper', 'voc', - array( - 'Attantion' => __( "Attantion", SHMAPPER ), - 'Send' => __( "Send" ), - 'Close' => __( "Close" ), - 'Error: no map' => __( "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match", SHMAPPER ), + apply_filters( + "shm_voc", + [ + 'Attantion' => __( "Attantion", SHMAPPER ), + 'Send' => __( "Send" ), + 'Close' => __( "Close" ), + 'Error: no map' => __( "Error: the form is not associated with the card. To link a map and a form, there should be 2 shortcodes on one page (map - [shmMap id = '6' map = 'true' uniq = 'for example, 777'] and form - [shmMap id = '94' form = 'true' uniq = 'for example, 777']), in which the uniq parameter will match", SHMAPPER ), + ] ) ); @@ -464,6 +488,24 @@ static function setting_pages() { } $map_type = ShmMap::get_map_types()[ self::$options['map_api'] ][0]; + $vocab = apply_filters( + "", [ + "shm_personal_text" => __("Save personal data garantee", SHMAPPER), + "shm_succ_request_text" => __("Successful send map request", SHMAPPER), + "shm_error_request_text" => __("Error send map request", SHMAPPER) + ] + ); + $vocabulary = ''; + foreach($vocab as $key => $value) + { + $vocabulary .= " +

    +

    ". + $value . + "
    + + "; + } echo "
    @@ -579,7 +621,7 @@ static function setting_pages() { ". sprintf(__("What is Google reCAPTCHA? How recived keys for your site? See %sthis instruction%s.", SHMAPPER), "", "") . " -
    +
    ". __("Your reCAPTCHA doesn't work yet. In order to make it work, please get the API keys at google.com/recaptcha", SHMAPPER). " @@ -596,22 +638,7 @@ static function setting_pages() { __("Vocabulary", SHMAPPER) . "
    -
    ". - __("Save personal data garantee", SHMAPPER) . - "
    - - -

    -

    ". - __("Successful send map request", SHMAPPER) . - "
    - - -

    -

    ". - __("Error send map request", SHMAPPER) . - "
    - + $vocabulary
    diff --git a/class/ShMapperDrive.class.php b/class/ShMapperDrive.class.php index 2853c26..ebca0a8 100644 --- a/class/ShMapperDrive.class.php +++ b/class/ShMapperDrive.class.php @@ -359,12 +359,12 @@ class='shm_options' "
    -
    diff --git a/class/ShMapperPointMessage.class.php b/class/ShMapperPointMessage.class.php index 3973444..011e5b0 100644 --- a/class/ShMapperPointMessage.class.php +++ b/class/ShMapperPointMessage.class.php @@ -75,6 +75,10 @@ static function view_admin_edit($obj) default: $h = ""; } + + if ( ! isset( $opacity ) ) { + $opacity = ''; + } $html .="
    ".$value['name'] . "
    diff --git a/class/ShMapperRequest.class.php b/class/ShMapperRequest.class.php index 26e1963..615b535 100644 --- a/class/ShMapperRequest.class.php +++ b/class/ShMapperRequest.class.php @@ -266,22 +266,47 @@ static function insert($data) } $contents[] = "
    " . sanitize_text_field($data['shm_point_loc']) . "
    "; $h['contents'] = implode("
    ", $contents); - $arr = [ - "post_type" => static::get_type(), - "post_name" => $title ? $title : $map->get("post_name"), - "post_title" => $title ? $title : $map->get("post_title"), - "post_content" => sanitize_text_field( $h['contents'] ), - "map" => (int)$data['id'], - "location" => sanitize_text_field($data['shm_point_loc']), - "latitude" => ( (int) ($data['shm_point_lat'] * 10000)) / 10000, - "longitude" => ( (int) ($data['shm_point_lon'] * 10000)) / 10000, - "type" => sanitize_text_field($data['shm_point_type']), - "contacts" => $contacts, - "description" => $description, - "author" => $author - ]; - $new_req = parent::insert($arr); + $arr = apply_filters( + "shm_before_insert_request", + [ + "post_type" => static::get_type(), + "post_name" => $title ? $title : $map->get("post_name"), + "post_title" => $title ? $title : $map->get("post_title"), + "post_content" => sanitize_text_field( $h['contents'] ), + "map" => (int)$data['id'], + "location" => sanitize_text_field($data['shm_point_loc']), + "latitude" => ( (int) ($data['shm_point_lat'] * 10000)) / 10000, + "longitude" => ( (int) ($data['shm_point_lon'] * 10000)) / 10000, + "type" => sanitize_text_field($data['shm_point_type']), + "contacts" => $contacts, + "description" => $description, + "author" => $author + ], + $data + ); + if(!$arr['forbiddance']) + $new_req = parent::insert($arr); + + $arr = apply_filters( + "shm_after_insert_request", + [ + "post_type" => static::get_type(), + "post_name" => $title ? $title : $map->get("post_name"), + "post_title" => $title ? $title : $map->get("post_title"), + "post_content" => sanitize_text_field( $h['contents'] ), + "map" => (int)$data['id'], + "location" => sanitize_text_field($data['shm_point_loc']), + "latitude" => ( (int) ($data['shm_point_lat'] * 10000)) / 10000, + "longitude" => ( (int) ($data['shm_point_lon'] * 10000)) / 10000, + "type" => sanitize_text_field($data['shm_point_type']), + "contacts" => $contacts, + "description" => $description, + "author" => $author + ], + $new_req, + $data + ); //attach require_once( ABSPATH . 'wp-admin/includes/image.php' ); require_once( ABSPATH . 'wp-admin/includes/file.php' ); diff --git a/class/ShMapperTracks.class.php b/class/ShMapperTracks.class.php new file mode 100644 index 0000000..1c694e1 --- /dev/null +++ b/class/ShMapperTracks.class.php @@ -0,0 +1,210 @@ + $id]); + $uniq = $args['uniq'] ? $args['uniq'] : substr( MD5(rand(0, 100000000)), 0, 8 ); + $tackList = "
    "; + foreach($tracks as $track) + { + $tackList .= "
    + ". + $track->post_title . + " +
    ". + __("download gpx", SHMAPPER_TRACKS) . + "
    +
    "; + } + $tackList .= "
    "; + $html .= "
    +
    ". + ShMapper::$options[ "list_of_tracks" ]. + "
    + $tackList +
    "; + } + return $html; + } + static function shm_voc($arr) + { + $arr = array_merge( + $arr, + [ + 'Start draw new Track' => __( "Start draw new Track", SHMAPPER_TRACKS ), + 'Uncorrect gpx-file: ' => __( "Uncorrect gpx-file: ", SHMAPPER_TRACKS ), + 'Not correct gpx format' => __( "Not correct gpx format", SHMAPPER_TRACKS ), + 'Not exists track data' => __( "Not exists track data", SHMAPPER_TRACKS ), + "Not exists correct track's segment data" => __( "Not exists correct track's segment data", SHMAPPER_TRACKS ), + "Not exists correct track segment's data" => __( "Not exists correct track segment's data", SHMAPPER_TRACKS ), + "Set range fliping of route's dots" => __( "Set range fliping of route's dots", SHMAPPER_TRACKS ), + "edit" => __( "edit", SHMAPPER_TRACKS ), + "update" => __( "update", SHMAPPER_TRACKS ), + "List of Tracks" => __( "List of Tracks", SHMAPPER_TRACKS ), + "Add marker" => __( "Add marker", SHMAPPER_TRACKS ), + "Empty vertex" => __( "Empty vertex", SHMAPPER_TRACKS ), + "Edit vertex" => __( "Edit vertex", SHMAPPER_TRACKS ), + "Update vertex" => __( "Update vertex", SHMAPPER_TRACKS ), + "Title" => __( "Title" ), + "Content" => __( "Content" ), + "Type" => __( "Type" ), + "Update new track" => __( "Update new track", SHMAPPER_TRACKS ), + ] + ); + return $arr; + } + static function shm_vocabulary($arr) + { + $arr = array_merge( + $arr, + [ + "list_of_tracks" => __( "List of Tracks", SHMAPPER_TRACKS ), + ] + ); + return $arr; + } + static function init_obj($init_object) + { + if(!is_array($init_object)) $init_object = []; + $point = []; + $point['t'] = ['type' => 'post']; + $point['class'] = ['type' => 'ShMaperTrack']; + $point['gpx'] = ['type' => 'gpx', "name" => __("GPX source", SHMAPPER_TRACKS), "thread" => false ]; + $point['track'] = ['type' => 'track', "name" => __("Track", SHMAPPER_TRACKS), "thread" => true ]; + $point['shm_author'] = ['type' => 'string', "name" => __("Track author name", SHMAPPER_TRACKS), "thread" => true ]; + $point['shm_author_email'] = ['type' => 'string', "name" => __("Track author e-mail", SHMAPPER_TRACKS), "thread" => false ]; + $point[SHM_MAP] = ['type' => 'id', "name" => __("Map", SHMAPPER), "object" => "post"]; + $point[SHM_TRACK_TYPE] = ['type' => 'id', "name" => __("Type", SHMAPPER), "object" => "taxonomy"]; + $init_object[SHMAPPER_TRACKS_TRACK] = $point; + + $marker = []; + $marker['t'] = ['type' => 'post']; + $marker['class'] = ['type' => 'ShMapperTracksPoint']; + $marker[SHMAPPER_TRACKS_TRACK] = ['type' => 'id', "name" => __("Track", SHMAPPER_TRACKS), "object" => "post"]; + $marker[SHM_POINT_TYPE] = ['type' => 'id', "name" => __("Type", SHMAPPER), "object" => "taxonomy"]; + $marker['location'] = ['type' => 'string', "name" => __("Location", SHMAPPER)]; + $marker['latitude'] = ['type'=>'string', "name" => __("Latitude", SHMAPPER)]; + $marker['longitude'] = ['type'=>'string', "name" => __("Longitude", SHMAPPER)]; + $init_object[SHMAPPER_TRACKS_POINT] = $marker; + + + $point = []; + $point['t'] = ['type' => 'taxonomy']; + $point['class'] = ['type' => 'ShMapTrackType']; + $point['color'] = ['type' => 'color', "name" => __("Color", SHMAPPER)]; + $init_object[ SHM_TRACK_TYPE ] = $point; + + return $init_object; + + } + + static function add_frons_js_script() + { + //css + wp_register_style(SHMAPPER_TRACKS, SHMTRACKS_URLPATH . 'assets/css/ShmapperTracks.css', array( 'dashicons' ), SHMAPPER_VERSION ); + wp_enqueue_style( SHMAPPER_TRACKS); + wp_register_style("rangeSlider", SHMTRACKS_URLPATH . 'assets/css/ion.rangeSlider.min.css', array( 'dashicons' ) ); + wp_enqueue_style( "rangeSlider"); + wp_register_script(SHMAPPER_TRACKS, plugins_url( '../assets/js/ShmapperTracks.js', __FILE__ ), array( 'jquery-ui-draggable', 'jquery-touch-punch'), SHMAPPER_VERSION); + wp_enqueue_script(SHMAPPER_TRACKS); + wp_register_script("rangeSlider", plugins_url( '../assets/js/ion.rangeSlider.min.js', __FILE__ ), array( )); + wp_enqueue_script("rangeSlider"); + wp_localize_script( + SHMAPPER_TRACKS, + 'shmapper_track', + array( + 'url' => SHMTRACKS_URLPATH, + 'downloadGpx' => __( 'Download GPX', 'shmapper-by-teplitsa' ) + ) + ); + } + static function add_admin_js_script() + { + //css + wp_register_style(SHMAPPER_TRACKS, SHMTRACKS_URLPATH . 'assets/css/ShmapperTracks.css', array( 'dashicons' ), SHMAPPER_VERSION ); + wp_enqueue_style( SHMAPPER_TRACKS); + wp_register_style("rangeSlider", SHMTRACKS_URLPATH . 'assets/css/ion.rangeSlider.min.css', array( 'dashicons' ) ); + wp_enqueue_style( "rangeSlider"); + wp_register_style("rangeSlider.skinNice", SHMTRACKS_URLPATH . 'assets/css/ion.rangeSlider.skinNice.css', array( 'dashicons' ) ); + wp_enqueue_style( "rangeSlider.skinNice"); + wp_register_script("ShMapperTracks.admin", plugins_url( '../assets/js/admin.js', __FILE__ ), array(), SHMAPPER_VERSION); + wp_enqueue_script("ShMapperTracks.admin"); + wp_register_script("rangeSlider", plugins_url( '../assets/js/ion.rangeSlider.min.js', __FILE__ ), array()); + wp_enqueue_script("rangeSlider"); + wp_localize_script( + 'ShMapperTracks.admin', + 'shmapper_track', + array( + 'url' => SHMTRACKS_URLPATH, + 'updatePlacemark' => __( 'Update Placemark', 'shmapper-by-teplitsa' ), + 'removePlacemark' => __( 'Remove Placemark', 'shmapper-by-teplitsa' ) + ) + ); + } +} diff --git a/class/ShMapperTracksAjax.class.php b/class/ShMapperTracksAjax.class.php new file mode 100644 index 0000000..4568672 --- /dev/null +++ b/class/ShMapperTracksAjax.class.php @@ -0,0 +1,234 @@ + $map_id ]); + $tr = []; + foreach($tracks as $track) + { + $type = get_post_meta( $track->ID, SHM_TRACK_TYPE, true); + $color = get_term_meta( $type, 'color', true); + + // Tracker type width. + $tracker_width = 4; + $width = get_term_meta( $type, 'width', true ); + if ( $width ) { + $tracker_width = $width; + } + + $typeTrack = get_term($type, SHM_TRACK_TYPE); + + $points = ShMapperTracksPoint::get_all([ SHMAPPER_TRACKS_TRACK => $track->ID ]); + $markers = []; + foreach($points as $point) + { + $shtp = ShMapperTracksPoint::get_instance($point); + $term_id = $shtp->get_meta(SHM_POINT_TYPE); + $typeT = get_term($term_id, SHM_POINT_TYPE); + $markers[] = [ + 'latitude' => $shtp->get_meta("latitude"), + 'longitude' => $shtp->get_meta("longitude"), + 'post_title' => $shtp->get("post_title"), + 'post_content' => apply_filters("the_content", $shtp->get("post_content")), + "id" => $shtp->id, + SHM_POINT_TYPE => $term_id, + "shm_point_type_name" => $typeT->name ? $typeT->name: "", + "color" => get_term_meta( $term_id, "color", true), + "icon" => ShMapPointType::get_icon_src( $term_id )[0], + "width" => get_term_meta( $term_id, "width", true ), + "height" => get_term_meta( $term_id, "height", true ) + ]; + } + + $tr[] = [ + "post_title" => $track->post_title, + "post_content" => apply_filters("the_content", $track->post_content), + "color" => $color ? $color : "#0066ff", + "width" => $tracker_width, + SHM_TRACK_TYPE => $typeTrack->term_id, + "track_id" => $track->ID, + "shm_track_type_name" => $typeTrack->name ? $typeTrack->name : "", + "term_id" => $type, + "track" => json_decode(get_post_meta($track->ID, "track", true)), + "markers" => $markers + ]; + } + $d = [ + $action, + [ + "tracks" => $tr, + "map_id" => $map_id, + "uniq" => $params[1]['uniq'] + ] + ]; + break; + case "shm_add_track_point": + + $track_id = $params[1]['track_id']; + $type_id = $params[1]['shm_type_id']; + $geometry = $params[1]['geometry']; + $track_point = ShMapperTracksPoint::insert([ + "post_title" => __("Point", SHMAPPER_TRACKS), + "post_content" => "", + "latitude" => ( float )( (int)( $geometry[0] * 100000 ) ) / 100000, + "longitude" => ( float )( (int)( $geometry[1] * 100000 ) ) / 100000, + SHMAPPER_TRACKS_TRACK => $track_id, + SHM_POINT_TYPE => $type_id + ]); + $d = [ + $action, + [ + "track_id" => $track_id, + "type_id" => $type_id, + "geometry" => $geometry, + "track_point"=> [ + "id" => $track_point->id, + "latitude" => $track_point->get_meta("latitude"), + "longitude" => $track_point->get_meta("longitude"), + "post_title" => $track_point->get("post_title"), + "post_content" => $track_point->get("post_content"), + "shm_clr" => get_term_meta($type_id, "color", true) + ] + ] + ]; + break; + case "shm_track_new": + $map_id = (int)$params[1]; + $map = ShmMap::get_instance( $map_id ); + if($map->get_meta("is_form")) + { + $form_forms = $map->get_meta("form_forms"); + foreach($form_forms as $form) + { + if($form['type'] == SHMAPPER_MARK_TYPE_ID) + { + $fo = ShMapPointType::get_ganre_swicher( + $form, + $map, + false, + ["icon_class" => "shm-type-icon-1", "container_class" => 'shm-form-placemarks shm-padding-0' ] + ); + break; + } + } + } + else + { + $fo = ShmForm::getTypeSwitcher([ "placemarks" => "" ], $map, false, [ "icon_class" => "shm-type-icon1" ] ); + } + $d = [ + $action, + [ + "map_id" => $map_id, + "form" => $fo + ] + ]; + break; + case "shm_track_vertex": + /* + $params[1] - map data + $params[2] - vertex array data + 0 - lat + 1 - lon + 2 - { title, content, type } + */ + $map_id = (int)$params[1]["map_id"]; + $map = ShmMap::get_instance( $map_id ); + if($map->get_meta("is_form")) + { + $form_forms = $map->get_meta("form_forms"); + foreach($form_forms as $form) + { + if($form['type'] == SHMAPPER_MARK_TYPE_ID) + { + $fo = ShMapPointType::get_ganre_swicher( + [ + "row_class" => "shm-m-0", + 'prefix' => 'vertex_type' , + "selected" => $params[2][2]['type'] + ], + 'radio', + 'stroke-large' + ); + break; + } + } + } + else + { + $fo = ShmForm::getTypeSwitcher([ "placemarks" => "" ], $map, false, [ "icon_class" => "shm-type-icon1" ] ); + } + $d = [ + $action, + [ + "map_id" => $map_id, + "vertex" => $params[2], + "selected" => $params[2][2]['type'], + "form" => $fo + ] + ]; + break; + case "shm_chande_track_point": + $point = ShMapperTracksPoint::get_instance( $params[1]["marker_id"] ); + ShMapperTracksPoint::update( + [ + "post_title" => $params[1]['post_title'], + "post_content" => $params[1]['post_content'], + "coordinates" => [ + ( float )( (int)( $params[1]['coordinates'][0] * 1000000000 ) ) / 1000000000, + ( float )( (int)( $params[1]['coordinates'][1] * 1000000000 ) ) / 1000000000 + ], + "latitude" => ( float )( (int)( $params[1]['coordinates'][0] * 1000000000 ) ) / 1000000000, + "longitude" => ( float )( (int)( $params[1]['coordinates'][1] * 1000000000 ) ) / 1000000000, + //SHM_TRACK_TYPE => $params[1]['shm_type_id'] + ], + $params[1]["marker_id"] + ); + $d = [ + $action, + [ + "params" => $params[1], + "coordinates" => $point->get_meta("coordinates"), + "latitude" => $point->get_meta("latitude"), + "longitude" => $point->get_meta("longitude") + + ] + ]; + break; + case "shm_remove_track_point": + ShMapperTracksPoint::delete( $params[1] ); + $d = [ + $action, + [ + "msg" => __( "Success removed tracks Marker", SHMAPPER_TRACKS ) + + ] + ]; + case "shm-trac-dnld-gpx": + $track = ShMaperTrack::get_instance($params[1]); + + $d = [ + $action, + [ + "text" => $track->track_to_xml(), + "name" => $track->get("post_title") + ] + ]; + break; + } + return $d; + } +} \ No newline at end of file diff --git a/class/ShMapperTracksPoint.class.php b/class/ShMapperTracksPoint.class.php new file mode 100644 index 0000000..f9e8736 --- /dev/null +++ b/class/ShMapperTracksPoint.class.php @@ -0,0 +1,57 @@ + __('Track marker', SHMAPPER_TRACKS), + 'singular_name' => __("Track marker", SHMAPPER_TRACKS), + 'add_new' => __("add Track marker", SHMAPPER_TRACKS), + 'add_new_item' => __("add Track marker", SHMAPPER_TRACKS), + 'edit_item' => __("edit Track marker", SHMAPPER_TRACKS), + 'new_item' => __("add Track marker", SHMAPPER_TRACKS), + 'all_items' => __("all Track markers", SHMAPPER_TRACKS), + 'view_item' => __("view Track marker", SHMAPPER_TRACKS), + 'search_items' => __("search Track marker", SHMAPPER_TRACKS), + 'not_found' => __("Track marker not found", SHMAPPER_TRACKS), + 'not_found_in_trash' => __("no found Track marker in trash", SHMAPPER_TRACKS), + 'menu_name' => __("Track markers", SHMAPPER_TRACKS) + ); + $args = array( + 'labels' => $labels + ,'public' => true + ,'show_ui' => true + ,'has_archive' => true + ,'exclude_from_search' => false + ,'menu_position' => 19 + ,'menu_icon' => "dashicons-location" + ,'show_in_menu' => false + ,'show_in_rest' => true + ,'supports' => array( 'title', "editor", "thumbnail") + ,'capability_type' => 'post' + ); + register_post_type(SHMAPPER_TRACKS_POINT, $args); + } +} \ No newline at end of file diff --git a/class/ShMapper_ajax.class.php b/class/ShMapper_ajax.class.php index 3179361..1e30088 100644 --- a/class/ShMapper_ajax.class.php +++ b/class/ShMapper_ajax.class.php @@ -48,7 +48,8 @@ static function insert_marker($data) { "map_id" => (int)$res->get_meta("map"), ]); - if($attach_id = get_post_thumbnail_id($res->id)) { + if($attach_id = get_post_thumbnail_id($res->id)) + { set_post_thumbnail($point->id, (int)$attach_id); } diff --git a/class/ShmForm.class.php b/class/ShmForm.class.php index 37cd477..bd1717f 100644 --- a/class/ShmForm.class.php +++ b/class/ShmForm.class.php @@ -55,17 +55,17 @@ static function get_default() } static function getTypes() { - return [ + return apply_filters("shmapper_get_form_fild_types", [ [ "id" => SHMAPPER_TITLE_TYPE_ID, //9 "name" => "title", - "title" => __("input title", SHMAPPER), + "title" => __("Heading", SHMAPPER), 'fields' => ['title', 'placeholder', 'description'] ],/**/ [ "id" => SHMAPPER_PLAIN_TEXT_TYPE_ID, //1 "name" => "text", - "title" => __("input text", SHMAPPER), + "title" => __("Text field", SHMAPPER), 'fields' => ['title', 'placeholder', 'description'] ], /*[ @@ -95,22 +95,22 @@ static function getTypes() [ "id" => SHMAPPER_TEXTAREA_TYPE_ID, //6 "name" => "textarea", - "title" => __("textarea", SHMAPPER), + "title" => __("Textarea", SHMAPPER), 'fields' => ['title', 'placeholder', 'description' ] ], [ "id" => SHMAPPER_IMAGE_TYPE_ID, //7 "name" => "file", - "title" => __("input file", SHMAPPER), + "title" => __("Upload file", SHMAPPER), 'fields' => ['title', 'placeholder', 'description'] ], [ "id" => SHMAPPER_MARK_TYPE_ID, //8 "name" => "placemark", - "title" => __("enabled Map markers", SHMAPPER), + "title" => __("Markers", SHMAPPER), 'fields' => ['title', 'placemarks', 'description'] ] - ]; + ]); } static function get_type_by ($field="id", $id = 1) { @@ -180,73 +180,91 @@ static function wp_params_radio( $params=-1, $id, $post_id=1 ) static function get_admin_element( $id, $data=-1 ) { - $data = !is_array($data) ? [ "require"=>1, "selected" => 0 ] : $data; + $data = !is_array($data) ? [ "require"=>1, "selected" => 0 ] : $data; + if ( !isset( $data['require'] ) ) { + $data['require'] = ''; + } + if ( !isset( $data['switched_enabled_markers'] ) ) { + $data['switched_enabled_markers'] = ''; + } + if ( !isset( $data['gpx'] ) ) { + $data['gpx'] = ''; + } + $type = static::get_type_by("id", $data['type']); $fields = $type['fields']; $mark_emable = false; - return " -
  • - -
    -
    - " . __("Type of element", SHMAPPER) . " -
    " . - static::wp_params_dropdown( static::getTypes(), $id, $type['id'] ) . - "
    -
    -
    - -
    - -
    - -
    -
    - ". - __("Placeholder", SHMAPPER) . - " - -
    -
    - ". - __("Placemark types", SHMAPPER) . - "". - ShMapPointType::get_ganre_swicher([ - "prefix" => "ganre$id". MD5(rand(0,100000000)), - "id" => $id, - "name" => "form_forms[$id][placemarks]", - "selected" => empty($data['placemarks']) ? '' : $data['placemarks'], - "col_width" => 6 - ]). - "
    -
    - ". - __("Description", SHMAPPER) . - " - + return apply_filters( + "shm_admin_element", + "
  • + +
    +
    + " . __("Type of element", SHMAPPER) . " +
    " . + static::wp_params_dropdown( static::getTypes(), $id, $type['id'] ) . + "
    +
    +
    + +
    +
    -
    -
    -
    - - -
    - - " . __("Add after", SHMAPPER) . " - " . __("Delete me", SHMAPPER) . " + +
    +
    + ". + __("Placeholder", SHMAPPER) . + " + +
    +
    + ". + __("Placemark types", SHMAPPER) . + "". + ShMapPointType::get_ganre_swicher([ + "prefix" => "ganre$id". MD5(rand(0,100000000)), + "id" => $id, + "name" => "form_forms[$id][placemarks]", + "selected" => empty($data['placemarks']) ? '' : $data['placemarks'], + "col_width" => 6 + ]). + "
    +
    +
    + ". + __("Description", SHMAPPER) . + " + +
    +
    " . + apply_filters("shmapper_form_after_fields", "", $id, $data, $type) . + "
    +
    + + + +
    -
    - -
    -
  • "; + +
    + ", + $id, + $data + ); } static function get_admin_element1( $id, $data=-1 ) { @@ -397,10 +415,26 @@ static function form($data, $map ) $is_email_required = $map->get_meta("is_email_required"); $is_phone_iclude = $map->get_meta("is_phone_iclude"); $personal_phone = $map->get_meta("personal_phone"); - $is_phone_required = $map->get_meta("is_phone_required"); + $is_phone_required = $map->get_meta("is_phone_required"); $def_mark = ""; - - + + $mark_emable = false; + + $hide_markers = ''; + + $track_draw_index = 0; + foreach ( $data as $key => $field ) { + if ( 'shmapper_track_draw' === $field['type'] ) { + if ( isset( $field['switched_enabled_markers'] ) && $field['switched_enabled_markers'] ) { + $hide_markers = ' hidden'; + } + if ( $track_draw_index > 0 ) { + unset( $data[ $key ] ); + } + $track_draw_index++; + } + } + $html = apply_filters("shm_before_request_form", ""); $html .= ""; $html1 = apply_filters("shm_start_request_form", ""); @@ -409,7 +443,7 @@ static function form($data, $map ) { if(!is_array($element)) continue; $require = isset($element['require']) && $element['require'] == 1 ? " required " : ""; - $html1 .= "
    "; + $html1 .= "
    "; $html1 .= $element['title'] ? "
    " . $element['title'] . "
    " : ""; $type = static::get_type_by("id", $element['type']); $data_types = " data-types='".implode( ",", $type['fields'] )."' "; @@ -442,68 +476,17 @@ static function form($data, $map )
    "; break; - case SHMAPPER_MARK_TYPE_ID: - $mark_emable = true; - $terms = explode(",", $element["placemarks"]); - $icons = ""; - if(count($terms)) - { - foreach($terms as $term_id) - { - $clr = get_term_meta($term_id, "color", true); - $icon = ''; - if ( ShMapPointType::get_icon_src($term_id) ) { - $icon = ShMapPointType::get_icon_src($term_id)[0]; - } - - if($icon) - { - $icon_width = get_term_meta( $term_id, "width", true ); - $icon_height = get_term_meta( $term_id, "height", true ); - $icons .= " -
    -
    "; - } - else - { - $diid = $map->get_meta("default_icon_id"); - $icon = wp_get_attachment_image_url($diid, [60, 60]); - if(!$icon) { - if(ShMapper::$options['map_api'] == 2) { - $icon = "https://unpkg.com/leaflet@1.3.4/dist/images/marker-icon.png"; // 25 x 41 - $icon_width = 25; - $icon_height = 41; - } - else { - $icon = SHM_URLPATH . 'assets/img/ym_default.png'; // 34 x 41 - $icon_width = 34; - $icon_height = 41; - } - } - else { - $icon_width = ""; - $icon_height = ""; - } - - $icons .= !$icon ? " -
    -
    -
    " : - "
    "; - } - } - $html1 .= " -
    $icons
    - - - - - "; - $element['description'] .= __("Drag choosed icon and place it to map or click it and enter exact address.", SHMAPPER); - } + case SHMAPPER_MARK_TYPE_ID: + $mark_emable = true; + $html1 .= static::getTypeSwitcher( $element, $map, $require ); break; default: - $html1 .= "";break; + $html1 .= apply_filters( + "shmapper_front_form_element", + "", + $element + ); + break; } $req = $require ? "".__("This required field", SHMAPPER)."" : "$require"; $html1 .= $element['description'] ? "
    " . $req . $element['description'] ."
    " : "
    $req
    "; @@ -528,27 +511,26 @@ static function form($data, $map ) ".__("This required field", SHMAPPER)."
    "; - $def_mark = true ? " -
    $desc -
    -
    -
    -
    " - : - "
    $desc -
    -
    -
    -
    -
    -
    - "; - - $def_mark .= " - - - - "; + $def_mark = true ? " +
    $desc +
    +
    +
    " + : + "
    $desc +
    +
    +
    +
    +
    "; + if ( ! isset( $terms ) ) { + $terms = array(); + } + $def_mark .= " + + + +
    "; } if( $is_personal_data ) { @@ -595,4 +577,79 @@ static function form($data, $map ) $html = $def_mark . $html . $html1 . (empty($att) ? '' : $att) . apply_filters("shm_after_request_form", ""); return $html ; } + static function getTypeSwitcher( + $element, + $map, + $require, + $params=[ + "icon_class" => "shm-type-icon", + "container_class" => 'shm-form-placemarks' + ] + ) + { + $mark_emable = true; + $terms = explode(",", $element["placemarks"]); + $icons = ""; + + $container_class = ''; + if ( isset( $params['container_class'] ) ) { + $container_class = $params['container_class']; + } + if(count($terms)) + { + foreach($terms as $term_id) + { + $clr = get_term_meta($term_id, "color", true); + $icon = ''; + if ( ShMapPointType::get_icon_src($term_id) ) { + $icon = ShMapPointType::get_icon_src($term_id)[0]; + } + + if($icon) + { + $icon_width = get_term_meta( $term_id, "width", true ); + $icon_height = get_term_meta( $term_id, "height", true ); + $icons .= " +
    +
    "; + } + else + { + $diid = $map->get_meta("default_icon_id"); + $icon = wp_get_attachment_image_url($diid, [60, 60]); + if(!$icon) { + if(ShMapper::$options['map_api'] == 2) { + $icon = "https://unpkg.com/leaflet@1.3.4/dist/images/marker-icon.png"; // 25 x 41 + $icon_width = 25; + $icon_height = 41; + } + else { + $icon = SHM_URLPATH . 'assets/img/ym_default.png'; // 34 x 41 + $icon_width = 34; + $icon_height = 41; + } + } + else { + $icon_width = ""; + $icon_height = ""; + } + + $icons .= !$icon + ? + "
    +
    +
    " + : + "
    "; + } + } + return "
    $icons
    + + + + + "; + $element['description'] .= __("Drag choosed icon and place it to map or click it and enter exact address.", SHMAPPER); + } + } } diff --git a/class/ShmMap.class.php b/class/ShmMap.class.php index 6ff3f45..bce8cad 100644 --- a/class/ShmMap.class.php +++ b/class/ShmMap.class.php @@ -438,93 +438,95 @@ static function view_form_fields_edit($obj)
    -
    -
    -

    ". __("2.1. What is the name of your information form?", SHMAPPER). "

    -
    - -

    " . - __("For example «All beaches by the river»", SHMAPPER) . - "

    -
    -
    -
    -
    -

    ". __("2.2. Will I notify the author about new posts?", SHMAPPER). "

    -
    - - -
    -
    -
    -
    -

    ". __("2.3. What information can users enter?", SHMAPPER). "

    -
    -

    " . - __("You can create your own forms using form elements: & laquo; Text line & raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & laquo; Categories of Markers & raquo;", SHMAPPER) . - "

    -
    -
    ". - static::formEditor( $form_forms ? $form_forms : ShmForm::get_default() ). - "
    -
    -
    -
    -

    ". __("2.4. Can users leave their contact information?", SHMAPPER). "

    -
    - - -
    -
    -
    -
    -

    ". __("2.5. What data users will have to put?", SHMAPPER). "

    -
    -
    -
    - -
    - -
    -
    - -
    - -
    -
    - +
    +
    +
    +

    ". __("2.1. What is the name of your information form?", SHMAPPER). "

    +
    + +

    " . + __("For example «All beaches by the river»", SHMAPPER) . + "

    -
    -
    -
    - +
    +
    +

    ". __("2.2. Will I notify the author about new posts?", SHMAPPER). "

    +
    + +
    - -
    -
    - +
    +
    +
    +

    ". __("2.3. What information can users enter?", SHMAPPER). "

    +
    +

    " . + __("You can create your own forms using form elements: Heading, Text field, Textarea, Upload file, Markers, Track drawer.", SHMAPPER) . + "

    - -
    -
    - +
    ". + static::formEditor( $form_forms ? $form_forms : ShmForm::get_default() ). + "
    +
    +
    +
    +

    ". __("2.4. Can users leave their contact information?", SHMAPPER). "

    +
    + +
    -
    -
    -
    - +
    +
    +

    ". __("2.5. What data users will have to put?", SHMAPPER). "

    +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    - -
    -
    - +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    - -
    -
    - +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    "; diff --git a/languages/shmapper-by-teplitsa-ru_RU.mo b/languages/shmapper-by-teplitsa-ru_RU.mo index 7c481fd7743b8d016a4b7fc02693e5783aacf430..40894509e8f94d61e555c9eff824c928f865c900 100644 GIT binary patch delta 12813 zcmb7}2YglK`NvO!VXuTe0w*#9NeBrTS;`(^Dv01fF3HUxTr z)}oOM3IT%F(OTDy)`5RpSFsgaw6#)4)&KW*-jkR_te>8b&;7p7JD>M?p7%W`SaWUc zTa~flKP8-Xv&FMM#1>$UHITJScg`5uDm_Y~ARFNmyfy-GnA9fw8m@3044h`+Sc z3MdzDgy+CJU>tl6s{Od9{{^}mfE}s-7ia=P2nQQ z<}E+$1h0cK@NU=?MqoUwg4)rGP~+c#^3VscDf}F2+}Dt_vf2({E!YG0f_Ve*zb3kd z3b|+(l;w{?4SWV_;T-4U?|kW+3+m52!052pkg_NRZ`%5cn91FGoVdnOE?#{f{UQ~FNJdX zD%cv{4At*msF3UpQ*e(De3ptgVJ^Ir%xVT>(~K)y!UxggVJtiZW#AFG3_bpSQS9$sds1R*|?cr{yfsa8MUgg!- zKqcb`ur2%yPJ`b=^_w=-j9Uzeo>d6(K-k(&K}oa+Hi3^oS-KC(peiT>pM&k-J5a9s z8P|4dW(}biC)CLB6dOB1x4u|SD3u;4ou$j*PY6>#oYN*(5fm{LBb|{xV z4i)QXpj`PplndYU*nF6oFdcTFelnDymq3kQ3YCN_p>krU*M1ueYbU>=potGaS@wK-7z15lm|LoK`o$`dQV|bp zU?ThwYJ!+^%(01wGPD=e0?9BH4)^pND31l8l6NQ6ytl)S@YhgD`xKM`zlWXShv(pb z?f7ddv|vJ(ndodNmra3s`{h6lSOYu3ozV3h+>d?$>PB07E=Lev2etE~P&<7Qj)Ct& zg)(u3+1S}(3QCqCunWxc^x2RXqIEHp<*T4}vcc1LK~20Ha%ET%D8t@^>USD;g{`0g=sF0*Vd1MCc4GSRGy0sa~6OTd} zS_O%o^)ys6eg(DTHrzVOfdr3TA?;zS7X`&W1Ga_}JzfCi@kdE_~$dESBY%;(UC&51{Eo&RJCiq$lzjtig$2B4DY8jrU?x%@#W zgQ}oh`8y~>UV+-cyHJMw&8zvSz=5#ISY9|V1S@bT{0;fF64Vo|kDyh0b4IB#3hU1|;CZex_%Awm~Pxu(@0bho?Cr&~c z(jq*`ESLc0s=iRJO@T_bEU!HqYT?VEVpjrnzSl$bzYWU3`=Jaz3a^3BKrNI#*^HkH z<(XWl{^1Y>?fgclo!{5@4umx_+x>6}TPrDWD_SSvFxY3hIW7y}0`x~bHk(00qA!M*!`GquXR_J@ zumG09cC*YywhnT_tOuZ6e*zAKF|&<6$R+WgOhGYQ0@Yz1OotD_LGW$Z62`F|u{}(M zJ)jMzLFK|ysCjOJ?cu|4FgyYk%D=)S_zi3e6EEPnv%Zx=K?{w8?O`$0LTfyIGwhB2 z3-}T|1c$>-7aAUgS?Hg`95@(1Yk{p$;>$a)HX1LKyESTKe_ zD|CCIZoVhsq8Rc6#-gYAP5ls}X7jE65n z?fgBM23r=Iej}g^&4$W>E1-6?9m=4+P&Zwb$K!AS`j@abw3qS~C0oW)u&H<*D(g?f zQ81>+vUb2RP)QYqYJV4Mfs;@k`#01=ZHi4Uq(J4!g;4!ALV0oTQ?}wO}sn34^c?+y?bUwBKug1={F;f*SWdln1(%8V?PJ+UaDN1oNOauo~ciQ0vWDZpK}@9RClcVg(f);X_c#Q4QtF6Ho@VXSA~Se0V<0 zhce_rsPUgey#xBKH1Ck9upjy|*d~U5*np$a?_b3yJ^TPB!ja)C&4LSHDHYOX;VGyE zzlE(~zpHpZzznE?A*iI<0TbYUs15uUHiz%PF7O1L4ZnpleCBH7(VL(=9Im3Uk-{fX z9Rq93gvTIN)~j$HoW0h(xA#C9_yJVT`~%8UNqBNGoB=1nz3^Q4IqVHn))|-2fD6$J zV1~~BZz!~<;tP*W*P8{pz+Tk%_c#ga80JEGU^A2f4?r#O29#l^p-xHM2IGO&P+7 z!H;1N3_Jy8P|KUlRlOCqL4N_ZgU6x9e+=(}t+yCYJ`B^)PeB=;xE24)RT*22D`!FJ z#U3|9xo!{Cz-OS2)#tD+?6%DqJP@`-9}CrgI*f-!a1mSs6{>fj#(fPt!4})`zm8Au z?dERJfLdTCOou_JW4H$9`59rQI}sx?10X^4w{tkS5%0I0m*yFMwHa zm8U-jKSK}yhJpr0ZZQkJ0_CdHFcWs%Wn4NH%Hjg3o$P}0%puqZz7J(c+^xnly&>vgYMG+MM9D=_< z)>FO@>QPwsAwWdboK{klN=Z)gzmczac|tyA~$G8{r?2UnA2HJ*VXBZz;qg z-#axOJA?;Q8tzS51`CjZ)LjXCBEyjP(eFWCLFOP=A={8gkaK9?1lu7KDQ|$QVC|DZ z;apGA;Y;`0o~3+S?RnH+a(YG^xWCz6`AYbWS1zXC9?ES!U06-s?_g782yzMf1Moa} zE}|#X!2O-X?@;RJLtFRZyA(Piya22<$k{YjAVH)RGK;!DA|nw!$B>iA7%4mfgu4`V}E>B0ls&_&UZC7mmiWqxyxLO#3cH@_jvf&7s)8Em&$Xw_S&&*-T2>LV znWDrwns{EH;$pkuYV<7)l&&fXR0M5bMW`T99{DP!EEVRngBiTti&uTGefgKD~l;`*(@AO*`6X(kxb=@2IPo}(%gD=uET%mA~pC!bI>_9IIZbS z*X_$xLkS=i1Al$ZN+LbkhqJnRcuvslBwvM?A5*0q|*2L1UZc$66B`a-^+ z>_@xT^GE&6Jhh_>^PFJHZT)=ZOxoC)a~jn~;!>TMwk3h(etS-_FUPM)Iya|%lISbX zDQG-+uHSDw9a%l(!I)llxvw+bkY|?%DnfqkBM=HYy@!sTUr^#JEAyAz zuIp=eA1EzeWfzv(3w@=z{*@$8nLTdKG;3~AVHvqn9t<(h3OT8wG-S;U`N~6fu98KG z?M@U43>_TP*)I3X?p$*|f*7kK;OxloC-_$q&O(22t~HM$TlP6$WGu|jDYA?qCYx=4 zYKgC~xM5wXuf*@wXi?6T8DdhrfnxuVHTC-ho$SnDLcIh?)d3i3J5`x|ouipu;zG(p z=k3fP>2*0{PWMG+gs@&9EU!WvH-ln^bsp*VG3S8}I%gi-L+u_mQ*BQx@#Xt#8)=9P z7n%l?87?Gaj1+4vvlG=iEETMq~~(V_jYI2bDWz z+L?NIc6j0Om+C@t9$q`h89OpL&YbbO}->B#9<%RV6)g7FxCZ5~Mt&dhk57exquBUTkVmrrK9Y3vJea#I&8g51RM5}AoX;wS>M6@y* z(ZrOhq6b~uYObd8Q1mb>JwGx3{2evxqX%qb%a5n4j_$Lf+oDIK)yP36Jz8@^^pMRA z`xwGHk+ex4G-+`Z^O+E ztb-Re)ZA!Ach$4`psKt#P_5lo^d9D@WNLSS_GCrxmX{FxS96_nMfQn|JDKJQ&FUJ? z>Q(M8j=_UAeGjs4cU865Y_+1ho$aBH&cf;WF>a~1yEGG?DMnuJcC~$~v8JkKqf6|ReZacTZw}&%!LKo+&OWP#w)3=5l zeUzTc)~cHI3bLZUq2>lBvv~Yq&Q09~QU9>l+h46SBf;Xr*yMVt+1QVjHW!tmakyrC z^r*A#icZd_r7y+Y>x>Nd<~MnL59dhW(MAVslKWXw@1i8bjZb8$6}>fjq-N_+H}96y z+^eAO{&Fp>HCj_NG0ZBVL7qvsGiNUwyvsezZ>%6pVWcS8%v1sk3J)}IPSEH8>cY^-7s(s}+bm`uxi%x>~CXFmC51y5L zPouOy^R_TC^84k7Vmq7n946P@_$hW&Ih7bz!KAgUtlg7dm7Ee9>sx}C>+FbD(%2x3 z=s%xHX;yRx5jW?SkVVeB@}^kl(be&78oH71lAdl2p(O`?bWEJ*S7(hgpA+T=sZCbB z2X1pC!trd7m}g3~7Hb|)Ft<(Z8(trhj<2F~oKCM>a=u>E#(96uWwGY1-SG^^`iFjt z*LF9r^vrtQeqs-n5>~Hoj{GsMmufyki~q;B@Y;1y@3D6KO?{IZ4aAMlN4p5;L=L{x>%9%m)4Z063I-w<#ao&$;-$>n=+4Yb zmXnobsrhP}q&b;2R@O_Mnx@o4WivLOPIj4UH1&Lc>}97p&pc;8{rRl5_TKBhHrU4p zf~r;p`7T7%-fXyfdyI+2UqXy|iuAcADmA90g)z;s6dU3i)N|XgJs!a*tj2cu6Sl#Y zF~%fgKWv7xQ1@40XM7G*jPaRINF-1YLan-yipo#LM0^1AaX${h<}HnBfH|m!i&1@D zh4kHQ!}_=z)#3eE7f)avd;_ELEH@Dt6*VP%F2hR178G3su2jRD~l^72J(# za2~2+pLG?gL+fxB?n1_B8nkvho`jl_9@w4s%_tJV_yB5T>ui2Is^VSP6!%~~JdP3g z2CCw}*z$j%I(!55UVX1I@z@w6u^Xym*{J*Xpsz8BJQ5noLR1A6s0Y^LaNLXx!c?P1 zeiPN9=s35+j;JZ`hrKWxJK!p8ga=V0ehsx`pJE%2G2g{8|LS2RKN2wmRZ$M=g+f%1 zS7L44ieKPP)KXNmHKrqO#2t77({M67P4%ot4QMOs`KM4bb_l~T(9Y*h<#`I!vnzNS z>n0d81J9ynB8}cXgBcivpJ8phh^6=ymf&QLL|=RdgE1`07%xU(T};Q`n2B1-g+3Bm zn`NkmwxD{v6SXwYVK}~mdf_apqaWGwuTgvE1`flpWcU6!)bq2EzM1)`J+l)-@I|bJ zzDg46*{i6A-$Zrj1Jv4mg?jOySRcb!SmmRU6KRrBOEd(vCnlrbD?xR<97Ayr>D2Cz`RD%Wf z{(Y!+R-*>A0V8PN>>;74szj~%JIJ@lTtHRu3x;7>ircZ~s0P|1w@j+dPeIK<0ctO8 zKrP85sJ*Zk)$k$Iz|NviBfChVrXf@XVV&J$(gpSHAAx#dCLY42sP92~DuH)kLtKU0 z8=El;_n?;Guc!fBMlIdXsCG>k=3fQPy0|^`qI#TU^LkpIkTet5AG zHR5xq4t;@X7|oA%I2_eZ3G(~NEJS?=oHXXYHHrNcB;b444Sz&!nvT?_5%fc?-5_hW zEgy}IC?AJ9PI;)MDL{>IKC0vEQ8Tz3y;zBwv2#9q<1$825Y*KjNhE5@Vo?nw;hmU) zTX6%9RXM%Yj4VZ}Fk7%GzKt4jHEJ_oLiVru9^0e0yD?+XH;jZv_897gCs94yi;eM^ z^&M127qAI_h1wg}Q6rD;Va#ES!P~G3^;}d>cSe#?$F)1Eo_<)M^Pf$EeP>=mt<9IH zDK{Bzhk~&I*#@YYh(UF*1BPQSTb_;D<&&*5Q1#A6&EyW$9(fj3&jGBb^M8_rDmr6t ze1aPJ-%&68f*MIJezj>$qfyUyM*XGJ4>h9c)*{p%SY%y^I?fw068EFNoTss#&j05m z)Zk^*5?n`B7@XFPS z-xAMa7IM-|=n&Wb$bm2ma60Zs)!)Q7)P1oHYApw#Ze-&yoP_GwZq$g6U;=)C>c~}8 z2Sa&S?|CsBJ7X7IjOqA-z5f}uC4U9AseO^d-HMVhih^GFERIGxX|5svnSs=ritCYm zWnM*9d<~z#&cAclG=S<*5*wxi_QAWb038p1U*Kr+lW%7q>HNPyLKS6=ayMNm>c#C? z58uS2ycj^fHD>i4#>~N!_!*{;aliGEW8Gsm6yqt+L(SMj$Tl)hqmJKKs2RA419kq} zvNf+!a4+t~8ROg!M)-JshtqIN45EAqTUQ?vAEr>g7O#`9oTyw!%-XS22-%bB@fz*dM+45!T0_ zFcX8O7_$lcp!P-;>V7q<-plCIl>AJh6*j!bJ!YLSmHZgggDX%|wh?>cOQ=ow4eGt9 zsqWNv!{+3(Q4Qu|ES8~`WFxk~!`K=FQ<=Cp5?3ft&mwZ%DQk&3E-9FXd8m$VMK!P= z>);vG<_w@JjG5*(oQc|G!!ZhXSpC?U{9CB!uTJy1o2>kTziJwP$;THEl>@0wfSs&KNmHyGE}`j)XeTf)%Tw&&18P}mYaugHM_cs!KNi@3G?ZEA* zO}HJ~;8|?oVTrIe`5XDha3D-(fqUE>R0A(!5q^y7$dFlX1LIHwSc?5|4YtIy$c+2U zWfJP?4XlSv3fkPlidF?Jn6OTta>=j>Qmqk%d!G9od0e^Sw9~ zKgB`VyI7l<^{*ho5jK^m%@$eWZo;9~iKvPSunsQ5Xe_t+M{WLbOsD(^w#CcX5yMN} zzlgF>_?68eXNaj z7BM0^7K-Xf>V58q=P))P|1CDco2d62E#@Dfn1%zeYBBSlLZT@PsGbi*?fMC*O;Tp_ zo2>h=9p!JKMtBA5<4tUg_3vlhF&6dyV$^e6QQwa}sP|7`Dqg&w`PVUsTNAZ4Z@;xygC!pS2f?2o|HNbP&6+_G2`ud^vzyu$OC=yZ) zJ%XC5eW)d=LM_Q6aM@jYj zdXVstU`A?wS%B$4!9SI-m;T=%r>kbu)YZdWzYt#HO+wdIf^A{GQ^sDw)_2e$4iegc z2Z-Mh6LtPuQsGNvbZIU35*&z{o&P;*Kj`xC+y`#5X2z7_BSq!U`PUBqGH*7Y%oKM*Wv%@x9PH*7kJ^dZt4 z2pu?mExHi8Lb<2w8quDZKx`(4sH$jg=8?IB=tJoGJ<*8xGoh7kMuhR)ZJ2;Fv8%0A zA876WX~Z0&1EK38kyex94>p`a+(Y!YWl6mEgN71kD+=dE262~tAj0|u4kTiDZjmh$ zy~v-$dkOs?y}76>o_LD5ljufy3!**|M_$+4E;V0`dOmK1*n$A=wCO+MN}C>IeFGQR zbQ9kDob+y+{}g)@I(SEHnP|pyx=M)lHocZ~U*Z_y3$}%%%~Ac}3Ux7Sa2_#+V^I~Q#JBTOZ)PfjM$j&u;AD+2eq$(o-HZTX8@|G!Z5yuEoJzDwu} zemAj)i09$?_#v^5(AAT&=dd%rf<1`SM0fJvpsrjZx+cXR-Z+T(Z{lyZ?0tNM_J6&W z+SG_&OZdQ2p{|=mWKD`coUF5~|G;Wu3z1LUx(1V|#rw@M8H+KA$RP@eO2YR7KW<%9 zNt_|RC9;Xfh>k=H;y9sey-UrX9gmV8Z}Z|4B8`UX;wa*;L^7d&G1MkfNk2^J`kIK< z`ky6no=7BqdliuBMbxr||Ah|_kyP|LHpQ{n3ESdNgqO6gKM_5NhRSdi5$$SH?vIzD zHqlD!KZ8Ug`{Dr7T8GrePT z7nXSo^NVu53Enw1MIA}~_GVswZsCl7ch_yeo0nghJNMt+ADB~?JF|FBK6i`ryd!Gn z#XeYzru}pK&+<6e2P8U!22ODf4@_%2*PCDDEyX^aQ7+bWKU~KREQEI!@;88P3uTAx^6mb?XF<1rAr0JGDp6 z^glnUx|Vc{ld?S4 z30|J$lrA6VWUNSWmaoWg&aH^?H(6O)+rNMHksx1!yOx1n^ijP%7C7Lost6no9IIM} z2NHf=b^GAsJX9Gt{Qp0+C2%0%uPSFAj<_|hpx|ZRV>GU0&l9{Qe~;ePeScd{cd=bmL?vZDR}4@m&s4 z86%(zuLh0>PME;I6jZHY2!U7rw-styys0q$$p7iMdas7))p62CO;v@HQr_D6d`nv= k$~om^Km5GYXLDu{#UsmO{HHdr@_3Frlh(vJ$F}7D4_8UH^8f$< diff --git a/languages/shmapper-by-teplitsa-ru_RU.po b/languages/shmapper-by-teplitsa-ru_RU.po index e781133..a3b8fa9 100644 --- a/languages/shmapper-by-teplitsa-ru_RU.po +++ b/languages/shmapper-by-teplitsa-ru_RU.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: Plugins - shMapper by Teplitsa - Development (trunk)\n" -"POT-Creation-Date: 2021-02-26 06:06+0200\n" -"PO-Revision-Date: 2021-02-26 06:07+0200\n" +"POT-Creation-Date: 2021-07-09 22:16+0300\n" +"PO-Revision-Date: 2021-07-09 22:17+0300\n" "Last-Translator: \n" "Language-Team: \n" "Language: ru\n" @@ -13,41 +13,42 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 3.0\n" -#: class/SMC_Post.php:372 class/ShMapper.class.php:174 -#: class/ShmMap.class.php:109 class/ShmMap.class.php:655 -#: class/ShmPoint.class.php:319 +#: class/SMC_Post.php:385 class/ShMapper.class.php:177 +#: class/ShMapperTracks.class.php:114 class/ShmMap.class.php:109 +#: class/ShmMap.class.php:657 class/ShmPoint.class.php:324 msgid "Title" msgstr "Название" -#: class/SMC_Post.php:498 class/ShmMap.class.php:581 +#: class/SMC_Post.php:542 class/ShmMap.class.php:583 msgid "Double" msgstr "Дублировать" -#: class/SMC_Post.php:543 class/ShmPoint.class.php:249 -#: class/ShmPoint.class.php:506 class/ShmPoint.class.php:523 +#: class/SMC_Post.php:587 class/ShMaperTrack.class.php:54 +#: class/ShmPoint.class.php:254 class/ShmPoint.class.php:511 +#: class/ShmPoint.class.php:528 msgid "Usage in Maps: " msgstr "Используется в Картах: " -#: class/SMC_Post.php:561 +#: class/SMC_Post.php:605 msgid "— No Change —" msgstr "— Без изменений —" -#: class/SMC_Post.php:564 +#: class/SMC_Post.php:608 msgid "No" msgstr "Нет" -#: class/SMC_Post.php:567 +#: class/SMC_Post.php:611 msgid "Yes" msgstr "Да" -#: class/SMC_Post.php:632 class/SMC_Post.php:637 +#: class/SMC_Post.php:676 class/SMC_Post.php:681 msgid "Parameters" msgstr "Параметры" #: class/ShMapPointType.class.php:37 class/ShMapPointType.class.php:38 -#: class/ShMapPointType.class.php:48 class/ShmPoint.class.php:126 +#: class/ShMapPointType.class.php:48 class/ShmPoint.class.php:129 msgid "Map marker type" msgstr "Тип маркера" @@ -95,7 +96,7 @@ msgstr "Уникальный тип каждого маркера карты" msgid "Map marker types" msgstr "Типы маркеров" -#: class/ShMapPointType.class.php:91 +#: class/ShMapPointType.class.php:91 class/ShMapTrackType.class.php:81 msgid "Name" msgstr "Название" @@ -105,24 +106,189 @@ msgid "Icon" msgstr "Иконка" #: class/ShMapPointType.class.php:125 class/ShMapPointType.class.php:173 +#: class/ShMapTrackType.class.php:82 class/ShMapTrackType.class.php:110 +#: class/ShMapTrackType.class.php:140 class/ShMapper.class.php:195 +#: class/ShMapperTracks.class.php:160 msgid "Color" msgstr "Цвет" #: class/ShMapPointType.class.php:133 class/ShMapPointType.class.php:185 -#: class/ShMapper.class.php:145 class/ShmMap.class.php:264 +#: class/ShMapper.class.php:147 class/ShmMap.class.php:264 #: widget/ShMap.widget.php:84 msgid "Height" msgstr "Высота" #: class/ShMapPointType.class.php:139 class/ShMapPointType.class.php:195 -#: class/ShMapper.class.php:144 class/ShmMap.class.php:269 +#: class/ShMapTrackType.class.php:118 class/ShMapTrackType.class.php:152 +#: class/ShMapper.class.php:146 class/ShmMap.class.php:269 msgid "Width" msgstr "Ширина" -#: class/ShMapPointType.class.php:374 +#: class/ShMapPointType.class.php:402 class/ShMapTrackType.class.php:320 msgid "None" msgstr "Никакой" +#: class/ShMapTrackType.class.php:27 class/ShMapTrackType.class.php:28 +#: class/ShMapTrackType.class.php:38 +msgid "Map track type" +msgstr "Тип маршрутов" + +#: class/ShMapTrackType.class.php:29 +msgid "Search Map track type" +msgstr "Искать типа маршрутов" + +#: class/ShMapTrackType.class.php:30 +msgid "All Map track types" +msgstr "Все типы маршрутов" + +#: class/ShMapTrackType.class.php:31 +msgid "View Map track type" +msgstr "Смотреть тип маршрутов" + +#: class/ShMapTrackType.class.php:32 +msgid "Parent Map track type" +msgstr "Родительский тип маршрутов" + +#: class/ShMapTrackType.class.php:33 +msgid "Parent Map track type:" +msgstr "Родительский тип маршрутов:" + +#: class/ShMapTrackType.class.php:34 +msgid "Edit Map track type" +msgstr "Редактировать тип маршрута" + +#: class/ShMapTrackType.class.php:35 +msgid "Update Map track type" +msgstr "Обновить тип маршрута" + +#: class/ShMapTrackType.class.php:36 +msgid "Add Map track type" +msgstr "Добавить тип маршрута" + +#: class/ShMapTrackType.class.php:37 +msgid "New Map track type name" +msgstr "Название нового типа маршрута" + +#: class/ShMapTrackType.class.php:44 +msgid "Unique type of every Map tracks" +msgstr "Уникальный тип для каждого Маршрута" + +#: class/ShMapTrackType.class.php:69 class/ShMapTrackType.class.php:70 +msgid "Map track types" +msgstr "Типы маршрутов" + +#: class/ShMapTrackType.class.php:80 class/ShmMap.class.php:108 +#: class/ShmPoint.class.php:251 +msgid "ID" +msgstr "ID" + +#: class/ShMaperTrack.class.php:30 class/ShMaperTrack.class.php:64 +#: class/ShMaperTrack.class.php:185 class/ShMaperTrack.class.php:403 +#: class/ShMaperTrack.class.php:631 class/ShMaperTrack.class.php:709 +msgid "Shmapper Track exists only in Yandex map API" +msgstr "Shmapper Track существует только в API Яндекс карты" + +#: class/ShMaperTrack.class.php:300 +msgid "See source" +msgstr "Посмотреть исходник" + +#: class/ShMaperTrack.class.php:304 +msgid "Download *.gpx file" +msgstr "Загрузить *.gpx файл" + +#: class/ShMaperTrack.class.php:431 +msgid "Add track's markers" +msgstr "Добавить маркеры маршрута" + +#: class/ShMaperTrack.class.php:481 +msgid "Anonymous author" +msgstr "Анонимный автор" + +#: class/ShMaperTrack.class.php:584 class/ShMaperTrack.class.php:585 +msgid "Map track" +msgstr "Маршрут" + +#: class/ShMaperTrack.class.php:586 class/ShMaperTrack.class.php:587 +#: class/ShMaperTrack.class.php:589 +msgid "add Map track" +msgstr "Добавить маршрут" + +#: class/ShMaperTrack.class.php:588 +msgid "edit Map track" +msgstr "Редактировать маршрут" + +#: class/ShMaperTrack.class.php:590 +msgid "all Map tracks" +msgstr "Все маршруты" + +#: class/ShMaperTrack.class.php:591 +msgid "view Map track" +msgstr "Смотреть маршрут" + +#: class/ShMaperTrack.class.php:592 +msgid "search Map track" +msgstr "Искать маршрут" + +#: class/ShMaperTrack.class.php:593 +msgid "Map track not found" +msgstr "Маршрут не найден" + +#: class/ShMaperTrack.class.php:594 +msgid "no found Map track in trash" +msgstr "Маршрутов в корзине нет" + +#: class/ShMaperTrack.class.php:595 +msgid "Map tracks" +msgstr "Маршруты" + +#: class/ShMaperTrack.class.php:616 +msgid "Track drawer" +msgstr "Рисование Маршрута" + +#: class/ShMaperTrack.class.php:644 class/ShMapperTracks.class.php:100 +msgid "Start draw new Track" +msgstr "Начать рисовать маршрут" + +#: class/ShMaperTrack.class.php:651 +msgid "Сhoose local GPX-file" +msgstr "Выберите GPX-файл на своём диске" + +#: class/ShMaperTrack.class.php:662 class/ShMapperTracks.class.php:106 +msgid "Set range fliping of route's dots" +msgstr "Маштаб сокращения" + +#: class/ShMaperTrack.class.php:671 class/ShMapperTracks.class.php:107 +msgid "edit" +msgstr "редактировать" + +#: class/ShMaperTrack.class.php:682 +msgid "Upload GPX-file" +msgstr "Загрузите GPX-файл" + +#: class/ShMaperTrack.class.php:715 +msgid "Draw button label" +msgstr "Название кнопки рисования" + +#: class/ShMaperTrack.class.php:719 +msgid "start draw button label" +msgstr "метка кнопки начала рисования" + +#: class/ShMaperTrack.class.php:728 +msgid "Input label" +msgstr "Название кнопки загрузки" + +#: class/ShMaperTrack.class.php:732 +msgid "input label" +msgstr "Название кнопки загрузки" + +#: class/ShMaperTrack.class.php:741 +msgid "Added GPX-input form" +msgstr "Форма загрузки GPX-файла" + +#: class/ShMaperTrack.class.php:746 +msgid "Disabled markers" +msgstr "Отключенные маркеры" + #: class/ShMapper.class.php:30 msgid "" "I give my consent to the site administrator to process, including automated, " @@ -141,8 +307,8 @@ msgstr "Ваш запрос успешно зарегистрирован." msgid "Unknown error." msgstr "Неизвестная ошибка." -#: class/ShMapper.class.php:82 class/ShMapper.class.php:431 -#: class/ShMapper.class.php:432 +#: class/ShMapper.class.php:82 class/ShMapper.class.php:455 +#: class/ShMapper.class.php:456 msgid "Shmapper" msgstr "shMapper" @@ -164,187 +330,188 @@ msgstr "редактировать Карты на странице" msgid "all Map Requests" msgstr "Все запросы на карту" -#: class/ShMapper.class.php:130 class/ShMapper.class.php:178 -#: class/ShMapperRequest.class.php:93 class/ShmMap.class.php:655 -#: class/ShmPoint.class.php:265 +#: class/ShMapper.class.php:131 class/ShMapper.class.php:181 +#: class/ShMapperRequest.class.php:93 class/ShMapperTracks.class.php:151 +#: class/ShmMap.class.php:657 class/ShmPoint.class.php:270 msgid "Location" msgstr "Адрес" -#: class/ShMapper.class.php:131 class/ShMapper.class.php:138 -#: class/ShMapper.class.php:176 class/ShMapper.class.php:637 -#: class/ShMapperRequest.class.php:89 class/ShmMap.class.php:655 -#: class/ShmPoint.class.php:261 +#: class/ShMapper.class.php:132 class/ShMapper.class.php:140 +#: class/ShMapper.class.php:179 class/ShMapper.class.php:664 +#: class/ShMapperRequest.class.php:89 class/ShMapperTracks.class.php:152 +#: class/ShmMap.class.php:657 class/ShmPoint.class.php:266 msgid "Latitude" msgstr "Широта" -#: class/ShMapper.class.php:132 class/ShMapper.class.php:139 -#: class/ShMapper.class.php:177 class/ShMapper.class.php:635 -#: class/ShMapperRequest.class.php:91 class/ShmMap.class.php:655 -#: class/ShmPoint.class.php:263 +#: class/ShMapper.class.php:133 class/ShMapper.class.php:141 +#: class/ShMapper.class.php:180 class/ShMapper.class.php:662 +#: class/ShMapperRequest.class.php:91 class/ShMapperTracks.class.php:153 +#: class/ShmMap.class.php:657 class/ShmPoint.class.php:268 msgid "Longitude" msgstr "Долгота" -#: class/ShMapper.class.php:133 class/ShMapper.class.php:140 -#: class/ShMapper.class.php:639 +#: class/ShMapper.class.php:134 class/ShMapper.class.php:142 +#: class/ShMapper.class.php:666 msgid "Zoom" msgstr "Увеличение" -#: class/ShMapper.class.php:141 class/ShmMap.class.php:118 +#: class/ShMapper.class.php:143 class/ShmMap.class.php:118 #: class/ShmMap.class.php:339 msgid "Legend exists" msgstr "Легенда присутствует" -#: class/ShMapper.class.php:142 class/ShmMap.class.php:350 +#: class/ShMapper.class.php:144 class/ShmMap.class.php:350 msgid "Filters exists" msgstr "Панель фильтров присутствует" -#: class/ShMapper.class.php:143 class/ShmMap.class.php:113 +#: class/ShMapper.class.php:145 class/ShmMap.class.php:113 #: class/ShmMap.class.php:328 msgid "Export csv" msgstr "Загрузка сводки в формате csv" -#: class/ShMapper.class.php:146 class/ShmMap.class.php:285 +#: class/ShMapper.class.php:148 class/ShmMap.class.php:285 msgid "Map search" msgstr "Поиск по карте" -#: class/ShMapper.class.php:147 class/ShmMap.class.php:299 +#: class/ShMapper.class.php:149 class/ShmMap.class.php:299 msgid "Map full screen" msgstr "Полноэкранный режим" -#: class/ShMapper.class.php:148 +#: class/ShMapper.class.php:150 msgid "Map zoom slider" msgstr "Слайдер масштаба" -#: class/ShMapper.class.php:149 class/ShmMap.class.php:293 +#: class/ShMapper.class.php:151 class/ShmMap.class.php:293 msgid "Map layer switcher" msgstr "Переключатель слоев карты" -#: class/ShMapper.class.php:150 class/ShmMap.class.php:307 +#: class/ShMapper.class.php:152 class/ShmMap.class.php:307 msgid "Lock zoom and drag" msgstr "" "Заблокировать перетаскивание карты и изменение размера средним колёсиком мышы" -#: class/ShMapper.class.php:151 class/ShmMap.class.php:303 +#: class/ShMapper.class.php:153 class/ShmMap.class.php:303 msgid "Formating Marker to cluster" msgstr "Укладывать маркеры карты в кластеры" -#: class/ShMapper.class.php:152 +#: class/ShMapper.class.php:154 msgid "Default Marker icon" msgstr "Иконка маркера по умолчанию" -#: class/ShMapper.class.php:154 class/ShmMap.class.php:123 +#: class/ShMapper.class.php:156 class/ShmMap.class.php:123 msgid "Form exists" msgstr "Форма присутствует" -#: class/ShMapper.class.php:155 class/ShmMap.class.php:128 -#: class/ShmMap.class.php:456 +#: class/ShMapper.class.php:157 class/ShmMap.class.php:128 +#: class/ShmMap.class.php:457 msgid "Notify owner of Map" msgstr "Присылать уведомления о новых картах автору" -#: class/ShMapper.class.php:156 +#: class/ShMapper.class.php:158 msgid "Form Title" msgstr "Заголовок Формы" -#: class/ShMapper.class.php:157 +#: class/ShMapper.class.php:159 msgid "Form generator" msgstr "Генератор форм" -#: class/ShMapper.class.php:158 class/ShmMap.class.php:476 +#: class/ShMapper.class.php:160 class/ShmMap.class.php:477 msgid "Users can leave their contact details for feedback." msgstr "Пользователи могут оставлять свои контактные данные для обратной связи" -#: class/ShMapper.class.php:159 +#: class/ShMapper.class.php:161 msgid "Unclude Personal name" msgstr "Включить личное имя" -#: class/ShMapper.class.php:160 class/ShmMap.class.php:489 +#: class/ShMapper.class.php:162 class/ShmMap.class.php:490 msgid "Personal name" msgstr "Имя" -#: class/ShMapper.class.php:161 +#: class/ShMapper.class.php:163 msgid "Required Personal name" msgstr "Обязательно личное имя" -#: class/ShMapper.class.php:162 +#: class/ShMapper.class.php:164 msgid "Unclude Personal e-mail" msgstr "Включить личный телефон e-mail" -#: class/ShMapper.class.php:163 +#: class/ShMapper.class.php:165 msgid "Personal e-mail" msgstr "Личный e-mail" -#: class/ShMapper.class.php:164 +#: class/ShMapper.class.php:166 msgid "Required Personal e-mail" msgstr "Требуется личный e-mail" -#: class/ShMapper.class.php:165 +#: class/ShMapper.class.php:167 msgid "Unclude Personal phone" msgstr "Включить личный телефон" -#: class/ShMapper.class.php:166 class/ShmMap.class.php:521 +#: class/ShMapper.class.php:168 class/ShmMap.class.php:522 msgid "Personal phone" msgstr "Телефон" -#: class/ShMapper.class.php:167 +#: class/ShMapper.class.php:169 msgid "Required Personal phone" msgstr "Требуется личный телефон" -#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:178 -#: class/ShmMap.class.php:76 class/ShmMap.class.php:77 -#: widget/ShMap.widget.php:72 +#: class/ShMapper.class.php:176 class/ShMapperDrive.class.php:187 +#: class/ShMapperTracks.class.php:142 class/ShmMap.class.php:76 +#: class/ShmMap.class.php:77 widget/ShMap.widget.php:72 msgid "Map" msgstr "Карта" -#: class/ShMapper.class.php:175 class/ShmForm.class.php:229 -#: class/ShmForm.class.php:301 class/ShmForm.class.php:374 -#: class/ShmMap.class.php:655 class/ShmPoint.class.php:323 +#: class/ShMapper.class.php:178 class/ShmForm.class.php:233 +#: class/ShmForm.class.php:309 class/ShmForm.class.php:382 +#: class/ShmMap.class.php:657 class/ShmPoint.class.php:328 msgid "Description" msgstr "Описание" -#: class/ShMapper.class.php:179 class/ShmPoint.class.php:246 -#: class/ShmPoint.class.php:327 +#: class/ShMapper.class.php:182 class/ShMapperTracks.class.php:116 +#: class/ShMapperTracks.class.php:143 class/ShMapperTracks.class.php:150 +#: class/ShmPoint.class.php:251 class/ShmPoint.class.php:332 msgid "Type" msgstr "Тип" -#: class/ShMapper.class.php:180 +#: class/ShMapper.class.php:183 msgid "Session" msgstr "Сессия" -#: class/ShMapper.class.php:181 class/ShMapperRequest.class.php:72 +#: class/ShMapper.class.php:184 class/ShMapperRequest.class.php:72 #: class/ShmMap.class.php:132 msgid "Author" msgstr "Автор" -#: class/ShMapper.class.php:182 +#: class/ShMapper.class.php:185 msgid "Contacts" msgstr "Контакты" -#: class/ShMapper.class.php:183 +#: class/ShMapper.class.php:186 msgid "Aproved" msgstr "Одобрен" -#: class/ShMapper.class.php:184 +#: class/ShMapper.class.php:187 msgid "Aprove date" msgstr "Утвержденная дата" -#: class/ShMapper.class.php:185 +#: class/ShMapper.class.php:188 msgid "Accessed User" msgstr "Доступ пользователя" -#: class/ShMapper.class.php:284 class/ShMapper.class.php:393 -#: class/ShMapperDrive.class.php:125 +#: class/ShMapper.class.php:296 class/ShMapper.class.php:416 +#: class/ShMapperDrive.class.php:134 msgid "Attantion" msgstr "Внимание" -#: class/ShMapper.class.php:285 class/ShMapper.class.php:394 +#: class/ShMapper.class.php:297 class/ShMapper.class.php:417 msgid "Send" msgstr "Послать" -#: class/ShMapper.class.php:286 class/ShMapper.class.php:395 +#: class/ShMapper.class.php:298 class/ShMapper.class.php:418 msgid "Close" msgstr "Закрыть" -#: class/ShMapper.class.php:287 class/ShMapper.class.php:396 +#: class/ShMapper.class.php:299 class/ShMapper.class.php:419 msgid "" "Error: the form is not associated with the card. To link a map and a form, " "there should be 2 shortcodes on one page (map - [shmMap id = '6' map = " @@ -356,44 +523,56 @@ msgstr "" "uniq='например, 777'] и форма - [shmMap id='94' form='true' uniq='например, " "777']), у которых параметр uniq будет совпадать" -#: class/ShMapper.class.php:288 +#: class/ShMapper.class.php:300 msgid "Are you shure?" msgstr "Вы уверены?" -#: class/ShMapper.class.php:444 class/ShMapper.class.php:445 -#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:439 +#: class/ShMapper.class.php:468 class/ShMapper.class.php:469 +#: class/ShMapper.class.php:515 class/ShMapperDrive.class.php:448 msgid "Settings" msgstr "Настройки" -#: class/ShMapper.class.php:482 +#: class/ShMapper.class.php:493 +msgid "Save personal data garantee" +msgstr "Гарантия сохранения персональных данных" + +#: class/ShMapper.class.php:494 +msgid "Successful send map request" +msgstr "Сообщение об успешной регистрации запроса на Маркер" + +#: class/ShMapper.class.php:495 +msgid "Error send map request" +msgstr "Сообщение об ошибки регистрации запроса на Маркер" + +#: class/ShMapper.class.php:524 msgid "Map API" msgstr "API карт" -#: class/ShMapper.class.php:495 +#: class/ShMapper.class.php:537 msgid "OpenStreetMap" msgstr "Open Street Карта" -#: class/ShMapper.class.php:503 +#: class/ShMapper.class.php:545 msgid "Yandex.Maps API Key" msgstr "Ключ API Яндекс.Карт" -#: class/ShMapper.class.php:505 +#: class/ShMapper.class.php:547 msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." msgstr "ВНИМАНИЕ: необходимо указать ключ для работы с API Яндекс.Карт." -#: class/ShMapper.class.php:505 +#: class/ShMapper.class.php:547 msgid "Learn more here:" msgstr "Подробнее здесь:" -#: class/ShMapper.class.php:516 +#: class/ShMapper.class.php:558 msgid "Interactive" msgstr "Интерактив" -#: class/ShMapper.class.php:524 +#: class/ShMapper.class.php:566 msgid "Enable global mode for non-interactive maps" msgstr "Включить глобальный режим неинтерактивных карт" -#: class/ShMapper.class.php:528 +#: class/ShMapper.class.php:570 msgid "" "users will not be able to add posts to any map. If the checkbox is enabled, " "the interactivity block does not even appear on the maps." @@ -401,15 +580,15 @@ msgstr "" "пользователи не смогут добавлять сообщения ни к одной карте. Если галочка " "включена у карт даже не появляется блок интерактивности." -#: class/ShMapper.class.php:536 +#: class/ShMapper.class.php:578 msgid "Pre-modertion from Map owner." msgstr "Премодерация со стороны владельца Карты." -#: class/ShMapper.class.php:540 +#: class/ShMapper.class.php:582 msgid "all messages will be added in the Draft status" msgstr "все сообщения будут добавляться в статусе Черновик" -#: class/ShMapper.class.php:544 +#: class/ShMapper.class.php:586 msgid "" "ATTENTION: disable this option only at your own peril and risk, because " "there is a threat of spam attacks" @@ -417,19 +596,19 @@ msgstr "" "ВНИМАНИЕ: отключайте эту опцию только на ваш страх и риск, т.к. существует " "угроза спам-атаки" -#: class/ShMapper.class.php:552 +#: class/ShMapper.class.php:594 msgid "Reload page after User send request." msgstr "Перегрузить страницу после того, как юзер отправил форму запроса" -#: class/ShMapper.class.php:564 +#: class/ShMapper.class.php:606 msgid "Protection" msgstr "Защита" -#: class/ShMapper.class.php:571 +#: class/ShMapper.class.php:613 msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" msgstr "Включать капчу в форме (плагин использует только ключи reCAPTCHA v2)" -#: class/ShMapper.class.php:580 +#: class/ShMapper.class.php:622 #, php-format msgid "" "What is Google reCAPTCHA? How recived keys for your site? See %sthis " @@ -438,7 +617,7 @@ msgstr "" "Что такое Google reCAPTCHA? Как получить ключи для сайта? Смотрите %sэту " "инстукцию%s." -#: class/ShMapper.class.php:584 +#: class/ShMapper.class.php:626 msgid "" "Your reCAPTCHA doesn't work yet. In order to make it work, please get the " "API keys at google.com/recaptcha" @@ -446,60 +625,48 @@ msgstr "" "Ваша Капча пока не работает. Для включения этой функции получите ключи API " "на google.com/recaptch" -#: class/ShMapper.class.php:596 +#: class/ShMapper.class.php:638 msgid "Vocabulary" msgstr "Словарь" -#: class/ShMapper.class.php:600 -msgid "Save personal data garantee" -msgstr "Гарантия сохранения персональных данных" - -#: class/ShMapper.class.php:606 -msgid "Successful send map request" -msgstr "Сообщение об успешной регистрации запроса на Маркер" - -#: class/ShMapper.class.php:612 -msgid "Error send map request" -msgstr "Сообщение об ошибки регистрации запроса на Маркер" - -#: class/ShMapper.class.php:626 class/ShMapper.class.php:649 -#: class/ShMapper.class.php:689 +#: class/ShMapper.class.php:653 class/ShMapper.class.php:676 +#: class/ShMapper.class.php:716 msgid "Coordinates" msgstr "Координаты" -#: class/ShMapper.class.php:633 +#: class/ShMapper.class.php:660 msgid "Set default coordinates" msgstr "Установить координаты по умолчанию" -#: class/ShMapper.class.php:745 +#: class/ShMapper.class.php:772 msgid "Wizzard" msgstr "Мастер" -#: class/ShMapper.class.php:748 +#: class/ShMapper.class.php:775 msgid "Restart wizzard" msgstr "Перезапустить Мастер" -#: class/ShMapper.class.php:795 class/ShMapper.class.php:803 +#: class/ShMapper.class.php:822 class/ShMapper.class.php:830 msgid "Close wizzard" msgstr "Закрыть навсегда" -#: class/ShMapper.class.php:796 class/ShMapper.class.php:802 +#: class/ShMapper.class.php:823 class/ShMapper.class.php:829 msgid "Go to current page" msgstr "На текущую страницу" -#: class/ShMapper.class.php:799 class/ShMapper_ajax.class.php:172 +#: class/ShMapper.class.php:826 class/ShMapper_ajax.class.php:173 msgid "Next step" msgstr "Следующий шаг" -#: class/ShMapper.class.php:801 +#: class/ShMapper.class.php:828 msgid "Prevous step" msgstr "Предыдущий шаг" -#: class/ShMapper.class.php:853 +#: class/ShMapper.class.php:880 msgid "Welcome to the Shmapper Configuration Wizard" msgstr "Приветствуем Вас в Мастере конфигурации Shmapper" -#: class/ShMapper.class.php:854 +#: class/ShMapper.class.php:881 msgid "" "First, you need to specify the general settings. Click on the button to go to the desired " @@ -509,11 +676,11 @@ msgstr "" "class='dashicons dashicons-controls-play'> чтобы перейти в нужный " "раздел" -#: class/ShMapper.class.php:860 +#: class/ShMapper.class.php:887 msgid "Configure Shmapper" msgstr "Настройте Shmapper" -#: class/ShMapper.class.php:861 +#: class/ShMapper.class.php:888 msgid "" "Change the settings that do not suit you. To connect reCAPTCHA, you need to " "create an account on Google.com" @@ -521,19 +688,19 @@ msgstr "" "Измените настройки, которые Вас не устраивают. Для подключения reCAPTCHA " "необходимо создать учётную запись на Google.com" -#: class/ShMapper.class.php:867 +#: class/ShMapper.class.php:894 msgid "Create your first map" msgstr "Создайте вашу первую карту" -#: class/ShMapper.class.php:868 +#: class/ShMapper.class.php:895 msgid "Click the \"Add Map\" button at the very top of the page" msgstr "Нажмите кнопку \"Добавить карту\" в самом верху страницы" -#: class/ShMapper.class.php:874 class/ShMapper.class.php:882 +#: class/ShMapper.class.php:901 class/ShMapper.class.php:909 msgid "New map" msgstr "Новая карта" -#: class/ShMapper.class.php:875 +#: class/ShMapper.class.php:902 msgid "" "Select a visible area on the map.

    Create the first Marker by pointing to " "the desired location on the map with the right mouse button.

    Fill in the " @@ -543,7 +710,7 @@ msgstr "" "нужное место карты правой кнопкой мыши.

    Заполните поля и нажмите " "\"Создать\"." -#: class/ShMapper.class.php:883 +#: class/ShMapper.class.php:910 msgid "" "Fill in the provided fields in sequence. In the \"Request Form\" section, " "create a simple feedback form by which Visitors will be able to inform you " @@ -555,23 +722,23 @@ msgstr "" "информировать Вас о предлагаемых Вам новых Маркерах. По окончании нажмите " "кнопку \"Опубликовать\"." -#: class/ShMapperDrive.class.php:98 +#: class/ShMapperDrive.class.php:107 class/ShMapperTracksAjax.class.php:84 msgid "Point" msgstr "Точка" -#: class/ShMapperDrive.class.php:100 class/ShMapperDrive.class.php:105 +#: class/ShMapperDrive.class.php:109 class/ShMapperDrive.class.php:114 msgid "Google Table ID source" msgstr "Источник идентификатора таблицы Google" -#: class/ShMapperDrive.class.php:120 +#: class/ShMapperDrive.class.php:129 msgid "Export from Google Sheet" msgstr "Экспорт из таблицы Google" -#: class/ShMapperDrive.class.php:128 +#: class/ShMapperDrive.class.php:137 msgid "Rules for Google snapshot structure." msgstr "Правила для структуры снимков Google." -#: class/ShMapperDrive.class.php:130 +#: class/ShMapperDrive.class.php:139 msgid "" "Google-table must have access rights 'For everyone on the Internet' or 'For " "everyone who has a link'" @@ -579,15 +746,15 @@ msgstr "" "Гугл-таблица должна иметь права доступа 'Для всех в интернете' или 'Для всех " "у кого есть ссылка" -#: class/ShMapperDrive.class.php:131 +#: class/ShMapperDrive.class.php:140 msgid "In file must be only one screen." msgstr "В файле должна быть только одна вкладка." -#: class/ShMapperDrive.class.php:132 +#: class/ShMapperDrive.class.php:141 msgid "First row must have only legends of columns." msgstr "Первая строка таблицы должна включать только легенды колонок." -#: class/ShMapperDrive.class.php:133 +#: class/ShMapperDrive.class.php:142 msgid "" "If Points are have different Point types you must reserve one column for " "Point type and fill it ID of this types." @@ -596,7 +763,7 @@ msgstr "" "зарезервировать одну из колонок под тип Маркера и заполнять ячейки ID " "необходимого типа." -#: class/ShMapperDrive.class.php:134 +#: class/ShMapperDrive.class.php:143 msgid "" "If you want to have geo position you must reserve one column for adress or 2 " "columns for longitude and latitude." @@ -604,7 +771,7 @@ msgstr "" "Если Вы хотите получить точную геопозицию Маркеров, необходимо " "зарезервировать одну колонку под адрес или 2 колонки - для широты и долготы" -#: class/ShMapperDrive.class.php:140 +#: class/ShMapperDrive.class.php:149 msgid "" "Google table document ID. For example: 1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U in https://docs.google.com/" @@ -615,99 +782,99 @@ msgstr "" "https://docs.google.com/spreadsheets/d/1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U/edit#gid=7101094" -#: class/ShMapperDrive.class.php:159 +#: class/ShMapperDrive.class.php:168 msgid "Skip first rows count" msgstr "Пропустить первые строки? Сколько?" -#: class/ShMapperDrive.class.php:171 +#: class/ShMapperDrive.class.php:180 msgid "Execute next rows count. Empty for all." msgstr "" "Работать со следующими строками? Укажите число строк или оставьте поле пустым" -#: class/ShMapperDrive.class.php:191 +#: class/ShMapperDrive.class.php:200 msgid "Column for unique id" msgstr "Столбец для уникального идентификатора" -#: class/ShMapperDrive.class.php:203 +#: class/ShMapperDrive.class.php:212 msgid "Point title column" msgstr "Столбец заголовка маркера" -#: class/ShMapperDrive.class.php:214 +#: class/ShMapperDrive.class.php:223 msgid "Point description column" msgstr "Столбец описания маркера" -#: class/ShMapperDrive.class.php:225 +#: class/ShMapperDrive.class.php:234 msgid "Post date column" msgstr "Столбец даты публикации" -#: class/ShMapperDrive.class.php:238 +#: class/ShMapperDrive.class.php:247 msgid "Is fix post date?" msgstr "Исправить дату публикации?" -#: class/ShMapperDrive.class.php:250 +#: class/ShMapperDrive.class.php:259 msgid "Select marker type" msgstr "Выберите тип маркера" -#: class/ShMapperDrive.class.php:252 +#: class/ShMapperDrive.class.php:261 msgid "Add new marker" msgstr "Добавить новый маркер" -#: class/ShMapperDrive.class.php:268 +#: class/ShMapperDrive.class.php:277 msgid "Select method and columns for generate Points's geo position." msgstr "Выберите метод и колонку для генерации геопозиции Маркеров." -#: class/ShMapperDrive.class.php:281 +#: class/ShMapperDrive.class.php:290 msgid "Latitude and Longitude" msgstr "Широта и долгота" -#: class/ShMapperDrive.class.php:310 +#: class/ShMapperDrive.class.php:319 msgid "Adress" msgstr "Адрес" -#: class/ShMapperDrive.class.php:326 +#: class/ShMapperDrive.class.php:335 msgid "Select columns for choose Points's different types." msgstr "Выберите столбцы для выбора разных типов точек." -#: class/ShMapperDrive.class.php:339 +#: class/ShMapperDrive.class.php:348 msgid "Select column with marker type" msgstr "Выберите столбец с типом маркера" -#: class/ShMapperDrive.class.php:355 +#: class/ShMapperDrive.class.php:364 msgid "" "List of columns in google table that need to parse to Point's description" msgstr "" "Список столбцов в таблице Google, которые необходимо разобрать для описанием " "точек." -#: class/ShMapperDrive.class.php:360 +#: class/ShMapperDrive.class.php:369 msgid "Column" msgstr "Колонка" -#: class/ShMapperDrive.class.php:363 +#: class/ShMapperDrive.class.php:372 msgid "Include?" msgstr "Включить?" -#: class/ShMapperDrive.class.php:364 class/ShMapperDrive.class.php:370 +#: class/ShMapperDrive.class.php:373 class/ShMapperDrive.class.php:379 msgid "necessarily" msgstr "обязательное поле" -#: class/ShMapperDrive.class.php:369 +#: class/ShMapperDrive.class.php:378 msgid "Field name by latin" msgstr "Название поля по латыни" -#: class/ShMapperDrive.class.php:375 +#: class/ShMapperDrive.class.php:384 msgid "Sub title for decription section" msgstr "Подзаголовок для секции в описании Маркера" -#: class/ShMapperDrive.class.php:378 +#: class/ShMapperDrive.class.php:387 msgid "Order" msgstr "Порядковый номер" -#: class/ShMapperDrive.class.php:390 +#: class/ShMapperDrive.class.php:399 msgid "If your Google spreadsheet has one text in the specified column" msgstr "Если в нескольких полях в данной колонке будет одинаковое содержимое" -#: class/ShMapperDrive.class.php:403 +#: class/ShMapperDrive.class.php:412 msgid "" "Use only first row for creation new Point or updating included Point and " "ignore over." @@ -715,7 +882,7 @@ msgstr "" "Использовать только первую строку для создания нового Маркера или " "редактирования уже существующего и игнорировать остальные строки." -#: class/ShMapperDrive.class.php:416 +#: class/ShMapperDrive.class.php:425 msgid "" "Use only last row for creation new Point or updating included Point and " "ignore over." @@ -723,7 +890,7 @@ msgstr "" "Использовать только последнюю строку для создания нового Маркера или " "редактирования уже существующего и игнорировать остальные строки." -#: class/ShMapperDrive.class.php:429 +#: class/ShMapperDrive.class.php:438 msgid "" "Use only first row for creation new Point or updating included Point. Over " "some rows use for creation new Message or updating included Messages for " @@ -733,11 +900,11 @@ msgstr "" "редактирования уже существующего. Остальные строки использовать для создания " "или редактирования Сообщений для этого Маркера" -#: class/ShMapperDrive.class.php:442 +#: class/ShMapperDrive.class.php:451 msgid "Preview results" msgstr "Предпросмотр результата импора" -#: class/ShMapperDrive.class.php:445 +#: class/ShMapperDrive.class.php:454 msgid "Create or update Poins and Messages" msgstr "Создать или обновить Маркеры и Сообщения" @@ -821,7 +988,7 @@ msgstr "Запрос не найден" msgid "no found Map Request in trash" msgstr "Карт-запросы в корзине не найдены" -#: class/ShMapperRequest.class.php:62 class/ShmPoint.class.php:248 +#: class/ShMapperRequest.class.php:62 class/ShmPoint.class.php:253 msgid "Image" msgstr "Изображение" @@ -829,36 +996,163 @@ msgstr "Изображение" msgid "Approving" msgstr "Одобрение" -#: class/ShMapperRequest.class.php:75 class/ShmPoint.class.php:247 +#: class/ShMapperRequest.class.php:75 class/ShmPoint.class.php:252 msgid "GEO location" msgstr "гео-позиция" -#: class/ShMapperRequest.class.php:332 +#: class/ShMapperRequest.class.php:357 msgid "Uknown User" msgstr "некто Имярек" -#: class/ShMapperRequest.class.php:340 +#: class/ShMapperRequest.class.php:365 #, php-format msgid "<%s> Request to your Map from [%s] [%s]" msgstr "<%s> Новый карт-запрос от [%s] [%s]" -#: class/ShMapperRequest.class.php:342 +#: class/ShMapperRequest.class.php:367 #, php-format msgid "You may see this %s" msgstr "Вы можете посмотреть его здесь %s" -#: class/ShMapperRequest.class.php:361 +#: class/ShMapperRequest.class.php:386 msgid "Visitor" msgstr "Посетитель" -#: class/ShMapperRequest.class.php:374 +#: class/ShMapperRequest.class.php:399 msgid "Approve" msgstr "Одобрить" -#: class/ShMapperRequest.class.php:376 +#: class/ShMapperRequest.class.php:401 msgid "Trash" msgstr "Корзина" +#: class/ShMapperTracks.class.php:81 +msgid "download gpx" +msgstr "скачать gpx" + +#: class/ShMapperTracks.class.php:101 +msgid "Uncorrect gpx-file: " +msgstr "Неверный gpx-файл:" + +#: class/ShMapperTracks.class.php:102 +msgid "Not correct gpx format" +msgstr "Не корректный gpx-формат" + +#: class/ShMapperTracks.class.php:103 +msgid "Not exists track data" +msgstr "Не обнаружены данные маршрута" + +#: class/ShMapperTracks.class.php:104 +msgid "Not exists correct track's segment data" +msgstr "Не обнаружены корректные сегменты маршрутов" + +#: class/ShMapperTracks.class.php:105 +msgid "Not exists correct track segment's data" +msgstr "Не обнаружены корректные данные сегментов маршрутов" + +#: class/ShMapperTracks.class.php:108 +msgid "update" +msgstr "обновить" + +#: class/ShMapperTracks.class.php:109 class/ShMapperTracks.class.php:127 +msgid "List of Tracks" +msgstr "Список маршрутов" + +#: class/ShMapperTracks.class.php:110 +msgid "Add marker" +msgstr "Добавить маркер" + +#: class/ShMapperTracks.class.php:111 +msgid "Empty vertex" +msgstr "Чистая точка" + +#: class/ShMapperTracks.class.php:112 +msgid "Edit vertex" +msgstr "Редактировать точку" + +#: class/ShMapperTracks.class.php:113 +msgid "Update vertex" +msgstr "Обновить точку" + +#: class/ShMapperTracks.class.php:115 +msgid "Content" +msgstr "Контент" + +#: class/ShMapperTracks.class.php:117 +msgid "Update new track" +msgstr "Обновить новый маршрут" + +#: class/ShMapperTracks.class.php:138 +msgid "GPX source" +msgstr "GPX оригинал" + +#: class/ShMapperTracks.class.php:139 class/ShMapperTracks.class.php:149 +msgid "Track" +msgstr "Маршрут" + +#: class/ShMapperTracks.class.php:140 +msgid "Track author name" +msgstr "Имя автора трека" + +#: class/ShMapperTracks.class.php:141 +msgid "Track author e-mail" +msgstr "E-mail автора трека" + +#: class/ShMapperTracks.class.php:183 +msgid "Download GPX" +msgstr "Скачать GPX" + +#: class/ShMapperTracks.class.php:205 +msgid "Update Placemark" +msgstr "Обновить маркер" + +#: class/ShMapperTracks.class.php:206 +msgid "Remove Placemark" +msgstr "Удалить маркер" + +#: class/ShMapperTracksAjax.class.php:216 +msgid "Success removed tracks Marker" +msgstr "Маркер маршрута удалён" + +#: class/ShMapperTracksPoint.class.php:29 +#: class/ShMapperTracksPoint.class.php:30 +msgid "Track marker" +msgstr "Маркер маршрута" + +#: class/ShMapperTracksPoint.class.php:31 +#: class/ShMapperTracksPoint.class.php:32 +#: class/ShMapperTracksPoint.class.php:34 +msgid "add Track marker" +msgstr "Добавить маркер маршрута" + +#: class/ShMapperTracksPoint.class.php:33 +msgid "edit Track marker" +msgstr "Редактировать маркер маршрута" + +#: class/ShMapperTracksPoint.class.php:35 +msgid "all Track markers" +msgstr "Маркеры маршрута" + +#: class/ShMapperTracksPoint.class.php:36 +msgid "view Track marker" +msgstr "Смотреть маркер маршрута" + +#: class/ShMapperTracksPoint.class.php:37 +msgid "search Track marker" +msgstr "Искать маркер маршрута" + +#: class/ShMapperTracksPoint.class.php:38 +msgid "Track marker not found" +msgstr "Маркер маршрута не найден" + +#: class/ShMapperTracksPoint.class.php:39 +msgid "no found Track marker in trash" +msgstr "Маркеры маршрута в корзине не найдены" + +#: class/ShMapperTracksPoint.class.php:40 +msgid "Track markers" +msgstr "Маркеры маршрута" + #: class/ShMapper_Assistants.class.php:50 msgid "all maps" msgstr "все карты" @@ -867,76 +1161,76 @@ msgstr "все карты" msgid "Your requests to this Map " msgstr "Ваши запросы к этой карте" -#: class/ShMapper_ajax.class.php:179 +#: class/ShMapper_ajax.class.php:180 msgid "Congratulation! That's all!" msgstr "Поздравляем! Это всё." -#: class/ShMapper_ajax.class.php:197 +#: class/ShMapper_ajax.class.php:198 msgid "Wizzard closed" msgstr "Мастер закрыт" -#: class/ShMapper_ajax.class.php:208 +#: class/ShMapper_ajax.class.php:209 msgid "Wizzard restarted" msgstr "Мастер запущен сызнова" -#: class/ShMapper_ajax.class.php:222 +#: class/ShMapper_ajax.class.php:223 msgid "Approve succesfully and insert new Map marker" msgstr "Одобрено. Маркер создан" -#: class/ShMapper_ajax.class.php:234 +#: class/ShMapper_ajax.class.php:235 msgid "Request put to Trash" msgstr "Запрос отправлен в корзину" -#: class/ShMapper_ajax.class.php:339 +#: class/ShMapper_ajax.class.php:340 #, php-format msgid "Are you want delete %s?" msgstr "Хотите удалить карту %s?" -#: class/ShMapper_ajax.class.php:341 +#: class/ShMapper_ajax.class.php:342 msgid "Delete" msgstr "Удалить" -#: class/ShMapper_ajax.class.php:357 +#: class/ShMapper_ajax.class.php:358 msgid "add Map Point" msgstr "Маркер добавлен" -#: class/ShMapper_ajax.class.php:359 +#: class/ShMapper_ajax.class.php:360 msgid "Create" msgstr "Создать" -#: class/ShMapper_ajax.class.php:387 +#: class/ShMapper_ajax.class.php:388 msgid "Success" msgstr "Успешно" -#: class/ShMapper_ajax.class.php:398 +#: class/ShMapper_ajax.class.php:399 msgid "Change Vocabulaty: " msgstr "Изменён словарь: " -#: class/ShMapper_ajax.class.php:419 +#: class/ShMapper_ajax.class.php:420 msgid "Yandex.Maps API key Saved" msgstr "Ключ API Яндекс.Карт сохранен" -#: class/ShMapper_ajax.class.php:431 class/ShMapper_ajax.class.php:442 +#: class/ShMapper_ajax.class.php:432 class/ShMapper_ajax.class.php:443 msgid "New coordinates saved" msgstr "Новые координаты сохранены" -#: class/ShMapper_ajax.class.php:452 +#: class/ShMapper_ajax.class.php:453 msgid "Users can add Placemarks" msgstr "Пользователи могут добавлять placemarks" -#: class/ShMapper_ajax.class.php:462 +#: class/ShMapper_ajax.class.php:463 msgid "Pre-moderation on" msgstr "Премодерация со стороны владельца Карты" -#: class/ShMapper_ajax.class.php:472 +#: class/ShMapper_ajax.class.php:473 msgid "Reload mode" msgstr "Загрузить изображение" -#: class/ShMapper_ajax.class.php:482 +#: class/ShMapper_ajax.class.php:483 msgid "captha added" msgstr "капча добавлена" -#: class/ShMapper_ajax.class.php:492 class/ShMapper_ajax.class.php:503 +#: class/ShMapper_ajax.class.php:493 class/ShMapper_ajax.class.php:504 msgid "Set key" msgstr "Ключ установлен" @@ -957,121 +1251,121 @@ msgid "Write description" msgstr "Напишите описание" #: class/ShmForm.class.php:62 -msgid "input title" -msgstr "напишите заголовок" +msgid "Heading" +msgstr "Заголовок" #: class/ShmForm.class.php:68 -msgid "input text" -msgstr "текстовая строка" +msgid "Text field" +msgstr "Текстовая строка" #: class/ShmForm.class.php:98 -msgid "textarea" -msgstr "текстовый блок" +msgid "Textarea" +msgstr "Текстовый блок" #: class/ShmForm.class.php:104 -msgid "input file" -msgstr "загрузка картинки" +msgid "Upload file" +msgstr "Загрузить файл" #: class/ShmForm.class.php:110 -msgid "enabled Map markers" -msgstr "доступные маркеры" +msgid "Markers" +msgstr "Маркеры" -#: class/ShmForm.class.php:192 class/ShmForm.class.php:260 -#: class/ShmForm.class.php:342 +#: class/ShmForm.class.php:193 class/ShmForm.class.php:268 +#: class/ShmForm.class.php:350 msgid "Type of element" msgstr "Тип элемента" -#: class/ShmForm.class.php:202 class/ShmForm.class.php:273 -#: class/ShmForm.class.php:336 +#: class/ShmForm.class.php:203 class/ShmForm.class.php:281 +#: class/ShmForm.class.php:344 msgid "Label of element" msgstr "Лейбл элемента" -#: class/ShmForm.class.php:204 class/ShmForm.class.php:275 -#: class/ShmForm.class.php:338 +#: class/ShmForm.class.php:205 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:346 msgid "write title" msgstr "напишите заголовок" -#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 -#: class/ShmForm.class.php:357 +#: class/ShmForm.class.php:212 class/ShmForm.class.php:291 +#: class/ShmForm.class.php:365 msgid "Placeholder" msgstr "Заполнитель" -#: class/ShmForm.class.php:213 class/ShmForm.class.php:285 -#: class/ShmForm.class.php:359 +#: class/ShmForm.class.php:214 class/ShmForm.class.php:293 +#: class/ShmForm.class.php:367 msgid "write placeholder" msgstr "напишите плейсхолдер" -#: class/ShmForm.class.php:217 class/ShmForm.class.php:289 -#: class/ShmForm.class.php:363 +#: class/ShmForm.class.php:218 class/ShmForm.class.php:297 +#: class/ShmForm.class.php:371 msgid "Placemark types" msgstr "Типы маркеров" -#: class/ShmForm.class.php:231 class/ShmForm.class.php:303 -#: class/ShmForm.class.php:376 +#: class/ShmForm.class.php:235 class/ShmForm.class.php:311 +#: class/ShmForm.class.php:384 msgid "write description" msgstr "напишите описание" -#: class/ShmForm.class.php:237 +#: class/ShmForm.class.php:242 msgid "Element is required" msgstr "Элемент обязателен к заполнению" -#: class/ShmForm.class.php:239 class/ShmForm.class.php:308 +#: class/ShmForm.class.php:244 class/ShmForm.class.php:316 msgid "Add before" msgstr "Добавить перед" -#: class/ShmForm.class.php:240 class/ShmForm.class.php:309 +#: class/ShmForm.class.php:245 class/ShmForm.class.php:317 msgid "Add after" msgstr "Добавить после" -#: class/ShmForm.class.php:241 class/ShmForm.class.php:310 +#: class/ShmForm.class.php:246 class/ShmForm.class.php:318 msgid "Delete me" msgstr "Удали меня" -#: class/ShmForm.class.php:267 class/ShmForm.class.php:331 +#: class/ShmForm.class.php:275 class/ShmForm.class.php:339 msgid "require" msgstr "обязательно" -#: class/ShmForm.class.php:328 +#: class/ShmForm.class.php:336 msgid "enable" msgstr "доступно" -#: class/ShmForm.class.php:380 +#: class/ShmForm.class.php:388 msgid "The name of the parameter that refers to this element" msgstr "Имя параметра, который ссылается на этот элемент" -#: class/ShmForm.class.php:438 +#: class/ShmForm.class.php:446 msgid "Сhoose files" msgstr "Выберите файл" -#: class/ShmForm.class.php:502 -msgid "" -"Drag choosed icon and place it to map or click it and enter exact address." -msgstr "" -"Перетащите выбранную иконку в нужное место Карты или кликните по ней и " -"введите точный адрес." - -#: class/ShmForm.class.php:508 class/ShmForm.class.php:528 -#: class/ShmForm.class.php:562 class/ShmForm.class.php:573 -#: class/ShmForm.class.php:583 +#: class/ShmForm.class.php:465 class/ShmForm.class.php:485 +#: class/ShmForm.class.php:518 class/ShmForm.class.php:529 +#: class/ShmForm.class.php:539 msgid "This required field" msgstr "Обязательно для заполнения" -#: class/ShmForm.class.php:525 +#: class/ShmForm.class.php:482 msgid "Drag icon and place it to map." msgstr "Перетащите иконку в нужное место Карты" -#: class/ShmForm.class.php:558 +#: class/ShmForm.class.php:514 msgid "Your name" msgstr "Ваше имя" -#: class/ShmForm.class.php:569 +#: class/ShmForm.class.php:525 msgid "Your e-mail" msgstr "Ваш e-mail" -#: class/ShmForm.class.php:579 +#: class/ShmForm.class.php:535 msgid "Your phone" msgstr "Ваш номер телефона" +#: class/ShmForm.class.php:626 +msgid "" +"Drag choosed icon and place it to map or click it and enter exact address." +msgstr "" +"Перетащите выбранную иконку в нужное место Карты или кликните по ней и " +"введите точный адрес." + #: class/ShmMap.class.php:71 msgid "Step 1. Set up your map." msgstr "Шаг 1. Настройте Вашу карту" @@ -1100,10 +1394,6 @@ msgstr "Карт не найдено" msgid "no found Map in trash" msgstr "Карт в корзине не найдено" -#: class/ShmMap.class.php:108 class/ShmPoint.class.php:246 -msgid "ID" -msgstr "ID" - #: class/ShmMap.class.php:130 msgid "shortcodes" msgstr "шорткоды" @@ -1212,94 +1502,93 @@ msgstr "" "Включить функцию краудсорсинга (свободного добавления Пользователями новых " "Маркеров) " -#: class/ShmMap.class.php:443 +#: class/ShmMap.class.php:444 msgid "2.1. What is the name of your information form?" msgstr "2.1. Как называется Ваша форма сбора информации?" -#: class/ShmMap.class.php:447 +#: class/ShmMap.class.php:448 msgid "For example «All beaches by the river»" msgstr "Например «Все пляжи у реки»" -#: class/ShmMap.class.php:453 +#: class/ShmMap.class.php:454 msgid "2.2. Will I notify the author about new posts?" msgstr "2.2. Оповещать ли автора Карты о новых сообщениях?" -#: class/ShmMap.class.php:461 +#: class/ShmMap.class.php:462 msgid "2.3. What information can users enter?" msgstr "2.3. Какую информацию могут вводить пользователи?" -#: class/ShmMap.class.php:464 +#: class/ShmMap.class.php:465 msgid "" -"You can create your own forms using form elements: & laquo; Text line & " -"raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & " -"laquo; Categories of Markers & raquo;" +"You can create your own forms using form elements: Heading, Text field, " +"Textarea, Upload file, Markers, Track drawer." msgstr "" -"Вы можете создавать собственные формы, используя элементы формы: «" -"Строка текста», «Поле текста», «Загрузка " -"файлов», «Категории Маркеров»" +"Вы можете создавать собственные формы, используя элементы формы: Заголовок, " +"Текстовая строка, Текстовый блок, Загрузка файла, Маркеры, Рисование " +"Маршрута." -#: class/ShmMap.class.php:473 +#: class/ShmMap.class.php:474 msgid "2.4. Can users leave their contact information?" msgstr "2.4. Могут ли пользователи оставлять свою контактную информацию?" -#: class/ShmMap.class.php:481 +#: class/ShmMap.class.php:482 msgid "2.5. What data users will have to put?" msgstr "2.5. Какие данные пользователи должны будут ставить?" -#: class/ShmMap.class.php:484 class/ShmMap.class.php:500 -#: class/ShmMap.class.php:516 +#: class/ShmMap.class.php:485 class/ShmMap.class.php:501 +#: class/ShmMap.class.php:517 msgid "Include" msgstr "Включать" -#: class/ShmMap.class.php:494 class/ShmMap.class.php:510 -#: class/ShmMap.class.php:526 +#: class/ShmMap.class.php:495 class/ShmMap.class.php:511 +#: class/ShmMap.class.php:527 msgid "Required" msgstr "Обязателен" -#: class/ShmMap.class.php:505 +#: class/ShmMap.class.php:506 msgid "Personal email" msgstr "Адрес электронной почты" -#: class/ShmMap.class.php:724 +#: class/ShmMap.class.php:726 msgid "What do with placemarks of deleting Map?" msgstr "Что делать с Маркерами удаляемой Карты?" -#: class/ShmMap.class.php:729 +#: class/ShmMap.class.php:731 msgid "Delete all Points" msgstr "Удалить все Маркеры" -#: class/ShmMap.class.php:735 +#: class/ShmMap.class.php:737 msgid "Escape all Points without Owner Map" msgstr "Оставить все Маркеры без родительской Карты" -#: class/ShmMap.class.php:741 +#: class/ShmMap.class.php:743 msgid "Switch all Points to anover Map" msgstr "Перенести все Маркеры на другую Карту" -#: class/ShmMap.class.php:757 +#: class/ShmMap.class.php:759 msgid "delete" msgstr "удалить" -#: class/ShmMap.class.php:836 +#: class/ShmMap.class.php:838 #, php-format msgid "Succesfuly delete map width %s points" msgstr "Карта успешно удалена с %s точками" -#: class/ShmMap.class.php:841 +#: class/ShmMap.class.php:843 #, php-format msgid "Succesfuly delete map and %s points are orphans now" msgstr "Карта успешно удалена и %s точек сейчас не привязаны ни к какой карте" -#: class/ShmMap.class.php:848 +#: class/ShmMap.class.php:850 #, php-format msgid "Succesfuly delete map and %s points migrates to %s" msgstr "Карта успешно удалена и %s точек перенесено в %s" -#: class/ShmMap.class.php:880 +#: class/ShmMap.class.php:882 msgid "Yandex Map" msgstr "Яндекс карты" -#: class/ShmMap.class.php:902 +#: class/ShmMap.class.php:904 msgid "Open Street Map" msgstr "Open Street Карта" @@ -1336,15 +1625,15 @@ msgstr "Маркер не найден" msgid "no found Map marker in trash" msgstr "Маркеры в корзине не найдены" -#: class/ShmPoint.class.php:178 +#: class/ShmPoint.class.php:183 msgid "Map owner" msgstr "Родительская карта" -#: class/ShmPoint.class.php:229 +#: class/ShmPoint.class.php:234 msgid "(untitled map)" msgstr "(карта без названия)" -#: class/ShmPoint.class.php:331 +#: class/ShmPoint.class.php:336 msgid "Address" msgstr "Адрес" @@ -1437,6 +1726,18 @@ msgstr "Теплица социальных технологий" msgid "https://te-st.ru" msgstr "https://te-st.ru" +#~ msgid "input title" +#~ msgstr "напишите заголовок" + +#~ msgid "input text" +#~ msgstr "текстовая строка" + +#~ msgid "input file" +#~ msgstr "загрузка картинки" + +#~ msgid "enabled Map markers" +#~ msgstr "доступные маркеры" + #~ msgid "Add marker type" #~ msgstr "Добавить тип маркера" diff --git a/languages/shmapper-by-teplitsa.pot b/languages/shmapper-by-teplitsa.pot index d462f75..16c9173 100644 --- a/languages/shmapper-by-teplitsa.pot +++ b/languages/shmapper-by-teplitsa.pot @@ -3,14 +3,14 @@ msgid "" msgstr "" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "Project-Id-Version: ShMapper by Teplitsa\n" -"POT-Creation-Date: 2021-02-26 06:06+0200\n" +"POT-Creation-Date: 2021-07-09 22:16+0300\n" "PO-Revision-Date: 2020-06-18 05:16+0300\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 3.0\n" "X-Poedit-Basepath: ..\n" "X-Poedit-WPHeader: shmapper.php\n" "X-Poedit-SourceCharset: UTF-8\n" @@ -20,39 +20,40 @@ msgstr "" "X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPathExcluded-0: *.js\n" -#: class/SMC_Post.php:372 class/ShMapper.class.php:174 -#: class/ShmMap.class.php:109 class/ShmMap.class.php:655 -#: class/ShmPoint.class.php:319 +#: class/SMC_Post.php:385 class/ShMapper.class.php:177 +#: class/ShMapperTracks.class.php:114 class/ShmMap.class.php:109 +#: class/ShmMap.class.php:657 class/ShmPoint.class.php:324 msgid "Title" msgstr "" -#: class/SMC_Post.php:498 class/ShmMap.class.php:581 +#: class/SMC_Post.php:542 class/ShmMap.class.php:583 msgid "Double" msgstr "" -#: class/SMC_Post.php:543 class/ShmPoint.class.php:249 -#: class/ShmPoint.class.php:506 class/ShmPoint.class.php:523 +#: class/SMC_Post.php:587 class/ShMaperTrack.class.php:54 +#: class/ShmPoint.class.php:254 class/ShmPoint.class.php:511 +#: class/ShmPoint.class.php:528 msgid "Usage in Maps: " msgstr "" -#: class/SMC_Post.php:561 +#: class/SMC_Post.php:605 msgid "— No Change —" msgstr "" -#: class/SMC_Post.php:564 +#: class/SMC_Post.php:608 msgid "No" msgstr "" -#: class/SMC_Post.php:567 +#: class/SMC_Post.php:611 msgid "Yes" msgstr "" -#: class/SMC_Post.php:632 class/SMC_Post.php:637 +#: class/SMC_Post.php:676 class/SMC_Post.php:681 msgid "Parameters" msgstr "" #: class/ShMapPointType.class.php:37 class/ShMapPointType.class.php:38 -#: class/ShMapPointType.class.php:48 class/ShmPoint.class.php:126 +#: class/ShMapPointType.class.php:48 class/ShmPoint.class.php:129 msgid "Map marker type" msgstr "" @@ -100,7 +101,7 @@ msgstr "" msgid "Map marker types" msgstr "" -#: class/ShMapPointType.class.php:91 +#: class/ShMapPointType.class.php:91 class/ShMapTrackType.class.php:81 msgid "Name" msgstr "" @@ -110,24 +111,189 @@ msgid "Icon" msgstr "" #: class/ShMapPointType.class.php:125 class/ShMapPointType.class.php:173 +#: class/ShMapTrackType.class.php:82 class/ShMapTrackType.class.php:110 +#: class/ShMapTrackType.class.php:140 class/ShMapper.class.php:195 +#: class/ShMapperTracks.class.php:160 msgid "Color" msgstr "" #: class/ShMapPointType.class.php:133 class/ShMapPointType.class.php:185 -#: class/ShMapper.class.php:145 class/ShmMap.class.php:264 +#: class/ShMapper.class.php:147 class/ShmMap.class.php:264 #: widget/ShMap.widget.php:84 msgid "Height" msgstr "" #: class/ShMapPointType.class.php:139 class/ShMapPointType.class.php:195 -#: class/ShMapper.class.php:144 class/ShmMap.class.php:269 +#: class/ShMapTrackType.class.php:118 class/ShMapTrackType.class.php:152 +#: class/ShMapper.class.php:146 class/ShmMap.class.php:269 msgid "Width" msgstr "" -#: class/ShMapPointType.class.php:374 +#: class/ShMapPointType.class.php:402 class/ShMapTrackType.class.php:320 msgid "None" msgstr "" +#: class/ShMapTrackType.class.php:27 class/ShMapTrackType.class.php:28 +#: class/ShMapTrackType.class.php:38 +msgid "Map track type" +msgstr "" + +#: class/ShMapTrackType.class.php:29 +msgid "Search Map track type" +msgstr "" + +#: class/ShMapTrackType.class.php:30 +msgid "All Map track types" +msgstr "" + +#: class/ShMapTrackType.class.php:31 +msgid "View Map track type" +msgstr "" + +#: class/ShMapTrackType.class.php:32 +msgid "Parent Map track type" +msgstr "" + +#: class/ShMapTrackType.class.php:33 +msgid "Parent Map track type:" +msgstr "" + +#: class/ShMapTrackType.class.php:34 +msgid "Edit Map track type" +msgstr "" + +#: class/ShMapTrackType.class.php:35 +msgid "Update Map track type" +msgstr "" + +#: class/ShMapTrackType.class.php:36 +msgid "Add Map track type" +msgstr "" + +#: class/ShMapTrackType.class.php:37 +msgid "New Map track type name" +msgstr "" + +#: class/ShMapTrackType.class.php:44 +msgid "Unique type of every Map tracks" +msgstr "" + +#: class/ShMapTrackType.class.php:69 class/ShMapTrackType.class.php:70 +msgid "Map track types" +msgstr "" + +#: class/ShMapTrackType.class.php:80 class/ShmMap.class.php:108 +#: class/ShmPoint.class.php:251 +msgid "ID" +msgstr "" + +#: class/ShMaperTrack.class.php:30 class/ShMaperTrack.class.php:64 +#: class/ShMaperTrack.class.php:185 class/ShMaperTrack.class.php:403 +#: class/ShMaperTrack.class.php:631 class/ShMaperTrack.class.php:709 +msgid "Shmapper Track exists only in Yandex map API" +msgstr "" + +#: class/ShMaperTrack.class.php:300 +msgid "See source" +msgstr "" + +#: class/ShMaperTrack.class.php:304 +msgid "Download *.gpx file" +msgstr "" + +#: class/ShMaperTrack.class.php:431 +msgid "Add track's markers" +msgstr "" + +#: class/ShMaperTrack.class.php:481 +msgid "Anonymous author" +msgstr "" + +#: class/ShMaperTrack.class.php:584 class/ShMaperTrack.class.php:585 +msgid "Map track" +msgstr "" + +#: class/ShMaperTrack.class.php:586 class/ShMaperTrack.class.php:587 +#: class/ShMaperTrack.class.php:589 +msgid "add Map track" +msgstr "" + +#: class/ShMaperTrack.class.php:588 +msgid "edit Map track" +msgstr "" + +#: class/ShMaperTrack.class.php:590 +msgid "all Map tracks" +msgstr "" + +#: class/ShMaperTrack.class.php:591 +msgid "view Map track" +msgstr "" + +#: class/ShMaperTrack.class.php:592 +msgid "search Map track" +msgstr "" + +#: class/ShMaperTrack.class.php:593 +msgid "Map track not found" +msgstr "" + +#: class/ShMaperTrack.class.php:594 +msgid "no found Map track in trash" +msgstr "" + +#: class/ShMaperTrack.class.php:595 +msgid "Map tracks" +msgstr "" + +#: class/ShMaperTrack.class.php:616 +msgid "Track drawer" +msgstr "" + +#: class/ShMaperTrack.class.php:644 class/ShMapperTracks.class.php:100 +msgid "Start draw new Track" +msgstr "" + +#: class/ShMaperTrack.class.php:651 +msgid "Сhoose local GPX-file" +msgstr "" + +#: class/ShMaperTrack.class.php:662 class/ShMapperTracks.class.php:106 +msgid "Set range fliping of route's dots" +msgstr "" + +#: class/ShMaperTrack.class.php:671 class/ShMapperTracks.class.php:107 +msgid "edit" +msgstr "" + +#: class/ShMaperTrack.class.php:682 +msgid "Upload GPX-file" +msgstr "" + +#: class/ShMaperTrack.class.php:715 +msgid "Draw button label" +msgstr "" + +#: class/ShMaperTrack.class.php:719 +msgid "start draw button label" +msgstr "" + +#: class/ShMaperTrack.class.php:728 +msgid "Input label" +msgstr "" + +#: class/ShMaperTrack.class.php:732 +msgid "input label" +msgstr "" + +#: class/ShMaperTrack.class.php:741 +msgid "Added GPX-input form" +msgstr "" + +#: class/ShMaperTrack.class.php:746 +msgid "Disabled markers" +msgstr "" + #: class/ShMapper.class.php:30 msgid "" "I give my consent to the site administrator to process, including automated, " @@ -143,8 +309,8 @@ msgstr "" msgid "Unknown error." msgstr "" -#: class/ShMapper.class.php:82 class/ShMapper.class.php:431 -#: class/ShMapper.class.php:432 +#: class/ShMapper.class.php:82 class/ShMapper.class.php:455 +#: class/ShMapper.class.php:456 msgid "Shmapper" msgstr "" @@ -166,186 +332,187 @@ msgstr "" msgid "all Map Requests" msgstr "" -#: class/ShMapper.class.php:130 class/ShMapper.class.php:178 -#: class/ShMapperRequest.class.php:93 class/ShmMap.class.php:655 -#: class/ShmPoint.class.php:265 +#: class/ShMapper.class.php:131 class/ShMapper.class.php:181 +#: class/ShMapperRequest.class.php:93 class/ShMapperTracks.class.php:151 +#: class/ShmMap.class.php:657 class/ShmPoint.class.php:270 msgid "Location" msgstr "" -#: class/ShMapper.class.php:131 class/ShMapper.class.php:138 -#: class/ShMapper.class.php:176 class/ShMapper.class.php:637 -#: class/ShMapperRequest.class.php:89 class/ShmMap.class.php:655 -#: class/ShmPoint.class.php:261 +#: class/ShMapper.class.php:132 class/ShMapper.class.php:140 +#: class/ShMapper.class.php:179 class/ShMapper.class.php:664 +#: class/ShMapperRequest.class.php:89 class/ShMapperTracks.class.php:152 +#: class/ShmMap.class.php:657 class/ShmPoint.class.php:266 msgid "Latitude" msgstr "" -#: class/ShMapper.class.php:132 class/ShMapper.class.php:139 -#: class/ShMapper.class.php:177 class/ShMapper.class.php:635 -#: class/ShMapperRequest.class.php:91 class/ShmMap.class.php:655 -#: class/ShmPoint.class.php:263 +#: class/ShMapper.class.php:133 class/ShMapper.class.php:141 +#: class/ShMapper.class.php:180 class/ShMapper.class.php:662 +#: class/ShMapperRequest.class.php:91 class/ShMapperTracks.class.php:153 +#: class/ShmMap.class.php:657 class/ShmPoint.class.php:268 msgid "Longitude" msgstr "" -#: class/ShMapper.class.php:133 class/ShMapper.class.php:140 -#: class/ShMapper.class.php:639 +#: class/ShMapper.class.php:134 class/ShMapper.class.php:142 +#: class/ShMapper.class.php:666 msgid "Zoom" msgstr "" -#: class/ShMapper.class.php:141 class/ShmMap.class.php:118 +#: class/ShMapper.class.php:143 class/ShmMap.class.php:118 #: class/ShmMap.class.php:339 msgid "Legend exists" msgstr "" -#: class/ShMapper.class.php:142 class/ShmMap.class.php:350 +#: class/ShMapper.class.php:144 class/ShmMap.class.php:350 msgid "Filters exists" msgstr "" -#: class/ShMapper.class.php:143 class/ShmMap.class.php:113 +#: class/ShMapper.class.php:145 class/ShmMap.class.php:113 #: class/ShmMap.class.php:328 msgid "Export csv" msgstr "" -#: class/ShMapper.class.php:146 class/ShmMap.class.php:285 +#: class/ShMapper.class.php:148 class/ShmMap.class.php:285 msgid "Map search" msgstr "" -#: class/ShMapper.class.php:147 class/ShmMap.class.php:299 +#: class/ShMapper.class.php:149 class/ShmMap.class.php:299 msgid "Map full screen" msgstr "" -#: class/ShMapper.class.php:148 +#: class/ShMapper.class.php:150 msgid "Map zoom slider" msgstr "" -#: class/ShMapper.class.php:149 class/ShmMap.class.php:293 +#: class/ShMapper.class.php:151 class/ShmMap.class.php:293 msgid "Map layer switcher" msgstr "" -#: class/ShMapper.class.php:150 class/ShmMap.class.php:307 +#: class/ShMapper.class.php:152 class/ShmMap.class.php:307 msgid "Lock zoom and drag" msgstr "" -#: class/ShMapper.class.php:151 class/ShmMap.class.php:303 +#: class/ShMapper.class.php:153 class/ShmMap.class.php:303 msgid "Formating Marker to cluster" msgstr "" -#: class/ShMapper.class.php:152 +#: class/ShMapper.class.php:154 msgid "Default Marker icon" msgstr "" -#: class/ShMapper.class.php:154 class/ShmMap.class.php:123 +#: class/ShMapper.class.php:156 class/ShmMap.class.php:123 msgid "Form exists" msgstr "" -#: class/ShMapper.class.php:155 class/ShmMap.class.php:128 -#: class/ShmMap.class.php:456 +#: class/ShMapper.class.php:157 class/ShmMap.class.php:128 +#: class/ShmMap.class.php:457 msgid "Notify owner of Map" msgstr "" -#: class/ShMapper.class.php:156 +#: class/ShMapper.class.php:158 msgid "Form Title" msgstr "" -#: class/ShMapper.class.php:157 +#: class/ShMapper.class.php:159 msgid "Form generator" msgstr "" -#: class/ShMapper.class.php:158 class/ShmMap.class.php:476 +#: class/ShMapper.class.php:160 class/ShmMap.class.php:477 msgid "Users can leave their contact details for feedback." msgstr "" -#: class/ShMapper.class.php:159 +#: class/ShMapper.class.php:161 msgid "Unclude Personal name" msgstr "" -#: class/ShMapper.class.php:160 class/ShmMap.class.php:489 +#: class/ShMapper.class.php:162 class/ShmMap.class.php:490 msgid "Personal name" msgstr "" -#: class/ShMapper.class.php:161 +#: class/ShMapper.class.php:163 msgid "Required Personal name" msgstr "" -#: class/ShMapper.class.php:162 +#: class/ShMapper.class.php:164 msgid "Unclude Personal e-mail" msgstr "" -#: class/ShMapper.class.php:163 +#: class/ShMapper.class.php:165 msgid "Personal e-mail" msgstr "" -#: class/ShMapper.class.php:164 +#: class/ShMapper.class.php:166 msgid "Required Personal e-mail" msgstr "" -#: class/ShMapper.class.php:165 +#: class/ShMapper.class.php:167 msgid "Unclude Personal phone" msgstr "" -#: class/ShMapper.class.php:166 class/ShmMap.class.php:521 +#: class/ShMapper.class.php:168 class/ShmMap.class.php:522 msgid "Personal phone" msgstr "" -#: class/ShMapper.class.php:167 +#: class/ShMapper.class.php:169 msgid "Required Personal phone" msgstr "" -#: class/ShMapper.class.php:173 class/ShMapperDrive.class.php:178 -#: class/ShmMap.class.php:76 class/ShmMap.class.php:77 -#: widget/ShMap.widget.php:72 +#: class/ShMapper.class.php:176 class/ShMapperDrive.class.php:187 +#: class/ShMapperTracks.class.php:142 class/ShmMap.class.php:76 +#: class/ShmMap.class.php:77 widget/ShMap.widget.php:72 msgid "Map" msgstr "" -#: class/ShMapper.class.php:175 class/ShmForm.class.php:229 -#: class/ShmForm.class.php:301 class/ShmForm.class.php:374 -#: class/ShmMap.class.php:655 class/ShmPoint.class.php:323 +#: class/ShMapper.class.php:178 class/ShmForm.class.php:233 +#: class/ShmForm.class.php:309 class/ShmForm.class.php:382 +#: class/ShmMap.class.php:657 class/ShmPoint.class.php:328 msgid "Description" msgstr "" -#: class/ShMapper.class.php:179 class/ShmPoint.class.php:246 -#: class/ShmPoint.class.php:327 +#: class/ShMapper.class.php:182 class/ShMapperTracks.class.php:116 +#: class/ShMapperTracks.class.php:143 class/ShMapperTracks.class.php:150 +#: class/ShmPoint.class.php:251 class/ShmPoint.class.php:332 msgid "Type" msgstr "" -#: class/ShMapper.class.php:180 +#: class/ShMapper.class.php:183 msgid "Session" msgstr "" -#: class/ShMapper.class.php:181 class/ShMapperRequest.class.php:72 +#: class/ShMapper.class.php:184 class/ShMapperRequest.class.php:72 #: class/ShmMap.class.php:132 msgid "Author" msgstr "" -#: class/ShMapper.class.php:182 +#: class/ShMapper.class.php:185 msgid "Contacts" msgstr "" -#: class/ShMapper.class.php:183 +#: class/ShMapper.class.php:186 msgid "Aproved" msgstr "" -#: class/ShMapper.class.php:184 +#: class/ShMapper.class.php:187 msgid "Aprove date" msgstr "" -#: class/ShMapper.class.php:185 +#: class/ShMapper.class.php:188 msgid "Accessed User" msgstr "" -#: class/ShMapper.class.php:284 class/ShMapper.class.php:393 -#: class/ShMapperDrive.class.php:125 +#: class/ShMapper.class.php:296 class/ShMapper.class.php:416 +#: class/ShMapperDrive.class.php:134 msgid "Attantion" msgstr "" -#: class/ShMapper.class.php:285 class/ShMapper.class.php:394 +#: class/ShMapper.class.php:297 class/ShMapper.class.php:417 msgid "Send" msgstr "" -#: class/ShMapper.class.php:286 class/ShMapper.class.php:395 +#: class/ShMapper.class.php:298 class/ShMapper.class.php:418 msgid "Close" msgstr "" -#: class/ShMapper.class.php:287 class/ShMapper.class.php:396 +#: class/ShMapper.class.php:299 class/ShMapper.class.php:419 msgid "" "Error: the form is not associated with the card. To link a map and a form, " "there should be 2 shortcodes on one page (map - [shmMap id = '6' map = " @@ -353,178 +520,178 @@ msgid "" "uniq = 'for example, 777']), in which the uniq parameter will match" msgstr "" -#: class/ShMapper.class.php:288 +#: class/ShMapper.class.php:300 msgid "Are you shure?" msgstr "" -#: class/ShMapper.class.php:444 class/ShMapper.class.php:445 -#: class/ShMapper.class.php:473 class/ShMapperDrive.class.php:439 +#: class/ShMapper.class.php:468 class/ShMapper.class.php:469 +#: class/ShMapper.class.php:515 class/ShMapperDrive.class.php:448 msgid "Settings" msgstr "" -#: class/ShMapper.class.php:482 -msgid "Map API" +#: class/ShMapper.class.php:493 +msgid "Save personal data garantee" +msgstr "" + +#: class/ShMapper.class.php:494 +msgid "Successful send map request" msgstr "" #: class/ShMapper.class.php:495 +msgid "Error send map request" +msgstr "" + +#: class/ShMapper.class.php:524 +msgid "Map API" +msgstr "" + +#: class/ShMapper.class.php:537 msgid "OpenStreetMap" msgstr "" -#: class/ShMapper.class.php:503 +#: class/ShMapper.class.php:545 msgid "Yandex.Maps API Key" msgstr "" -#: class/ShMapper.class.php:505 +#: class/ShMapper.class.php:547 msgid "ATTENTION: you must specify a key for working with the Yandex.Maps API." msgstr "" -#: class/ShMapper.class.php:505 +#: class/ShMapper.class.php:547 msgid "Learn more here:" msgstr "" -#: class/ShMapper.class.php:516 +#: class/ShMapper.class.php:558 msgid "Interactive" msgstr "" -#: class/ShMapper.class.php:524 +#: class/ShMapper.class.php:566 msgid "Enable global mode for non-interactive maps" msgstr "" -#: class/ShMapper.class.php:528 +#: class/ShMapper.class.php:570 msgid "" "users will not be able to add posts to any map. If the checkbox is enabled, " "the interactivity block does not even appear on the maps." msgstr "" -#: class/ShMapper.class.php:536 +#: class/ShMapper.class.php:578 msgid "Pre-modertion from Map owner." msgstr "" -#: class/ShMapper.class.php:540 +#: class/ShMapper.class.php:582 msgid "all messages will be added in the Draft status" msgstr "" -#: class/ShMapper.class.php:544 +#: class/ShMapper.class.php:586 msgid "" "ATTENTION: disable this option only at your own peril and risk, because " "there is a threat of spam attacks" msgstr "" -#: class/ShMapper.class.php:552 +#: class/ShMapper.class.php:594 msgid "Reload page after User send request." msgstr "" -#: class/ShMapper.class.php:564 +#: class/ShMapper.class.php:606 msgid "Protection" msgstr "" -#: class/ShMapper.class.php:571 +#: class/ShMapper.class.php:613 msgid "Include captcha in form (plugin uses only reCAPTCHA v2 keys)" msgstr "" -#: class/ShMapper.class.php:580 +#: class/ShMapper.class.php:622 #, php-format msgid "" "What is Google reCAPTCHA? How recived keys for your site? See %sthis " "instruction%s." msgstr "" -#: class/ShMapper.class.php:584 +#: class/ShMapper.class.php:626 msgid "" "Your reCAPTCHA doesn't work yet. In order to make it work, please get the " "API keys at google.com/recaptcha" msgstr "" -#: class/ShMapper.class.php:596 +#: class/ShMapper.class.php:638 msgid "Vocabulary" msgstr "" -#: class/ShMapper.class.php:600 -msgid "Save personal data garantee" -msgstr "" - -#: class/ShMapper.class.php:606 -msgid "Successful send map request" -msgstr "" - -#: class/ShMapper.class.php:612 -msgid "Error send map request" -msgstr "" - -#: class/ShMapper.class.php:626 class/ShMapper.class.php:649 -#: class/ShMapper.class.php:689 +#: class/ShMapper.class.php:653 class/ShMapper.class.php:676 +#: class/ShMapper.class.php:716 msgid "Coordinates" msgstr "" -#: class/ShMapper.class.php:633 +#: class/ShMapper.class.php:660 msgid "Set default coordinates" msgstr "" -#: class/ShMapper.class.php:745 +#: class/ShMapper.class.php:772 msgid "Wizzard" msgstr "" -#: class/ShMapper.class.php:748 +#: class/ShMapper.class.php:775 msgid "Restart wizzard" msgstr "" -#: class/ShMapper.class.php:795 class/ShMapper.class.php:803 +#: class/ShMapper.class.php:822 class/ShMapper.class.php:830 msgid "Close wizzard" msgstr "" -#: class/ShMapper.class.php:796 class/ShMapper.class.php:802 +#: class/ShMapper.class.php:823 class/ShMapper.class.php:829 msgid "Go to current page" msgstr "" -#: class/ShMapper.class.php:799 class/ShMapper_ajax.class.php:172 +#: class/ShMapper.class.php:826 class/ShMapper_ajax.class.php:173 msgid "Next step" msgstr "" -#: class/ShMapper.class.php:801 +#: class/ShMapper.class.php:828 msgid "Prevous step" msgstr "" -#: class/ShMapper.class.php:853 +#: class/ShMapper.class.php:880 msgid "Welcome to the Shmapper Configuration Wizard" msgstr "" -#: class/ShMapper.class.php:854 +#: class/ShMapper.class.php:881 msgid "" "First, you need to specify the general settings. Click on the button to go to the desired " "section" msgstr "" -#: class/ShMapper.class.php:860 +#: class/ShMapper.class.php:887 msgid "Configure Shmapper" msgstr "" -#: class/ShMapper.class.php:861 +#: class/ShMapper.class.php:888 msgid "" "Change the settings that do not suit you. To connect reCAPTCHA, you need to " "create an account on Google.com" msgstr "" -#: class/ShMapper.class.php:867 +#: class/ShMapper.class.php:894 msgid "Create your first map" msgstr "" -#: class/ShMapper.class.php:868 +#: class/ShMapper.class.php:895 msgid "Click the \"Add Map\" button at the very top of the page" msgstr "" -#: class/ShMapper.class.php:874 class/ShMapper.class.php:882 +#: class/ShMapper.class.php:901 class/ShMapper.class.php:909 msgid "New map" msgstr "" -#: class/ShMapper.class.php:875 +#: class/ShMapper.class.php:902 msgid "" "Select a visible area on the map.

    Create the first Marker by pointing to " "the desired location on the map with the right mouse button.

    Fill in the " "fields and click \"Create\"." msgstr "" -#: class/ShMapper.class.php:883 +#: class/ShMapper.class.php:910 msgid "" "Fill in the provided fields in sequence. In the \"Request Form\" section, " "create a simple feedback form by which Visitors will be able to inform you " @@ -532,168 +699,168 @@ msgid "" "button." msgstr "" -#: class/ShMapperDrive.class.php:98 +#: class/ShMapperDrive.class.php:107 class/ShMapperTracksAjax.class.php:84 msgid "Point" msgstr "" -#: class/ShMapperDrive.class.php:100 class/ShMapperDrive.class.php:105 +#: class/ShMapperDrive.class.php:109 class/ShMapperDrive.class.php:114 msgid "Google Table ID source" msgstr "" -#: class/ShMapperDrive.class.php:120 +#: class/ShMapperDrive.class.php:129 msgid "Export from Google Sheet" msgstr "" -#: class/ShMapperDrive.class.php:128 +#: class/ShMapperDrive.class.php:137 msgid "Rules for Google snapshot structure." msgstr "" -#: class/ShMapperDrive.class.php:130 +#: class/ShMapperDrive.class.php:139 msgid "" "Google-table must have access rights 'For everyone on the Internet' or 'For " "everyone who has a link'" msgstr "" -#: class/ShMapperDrive.class.php:131 +#: class/ShMapperDrive.class.php:140 msgid "In file must be only one screen." msgstr "" -#: class/ShMapperDrive.class.php:132 +#: class/ShMapperDrive.class.php:141 msgid "First row must have only legends of columns." msgstr "" -#: class/ShMapperDrive.class.php:133 +#: class/ShMapperDrive.class.php:142 msgid "" "If Points are have different Point types you must reserve one column for " "Point type and fill it ID of this types." msgstr "" -#: class/ShMapperDrive.class.php:134 +#: class/ShMapperDrive.class.php:143 msgid "" "If you want to have geo position you must reserve one column for adress or 2 " "columns for longitude and latitude." msgstr "" -#: class/ShMapperDrive.class.php:140 +#: class/ShMapperDrive.class.php:149 msgid "" "Google table document ID. For example: 1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U in https://docs.google.com/" "spreadsheets/d/1dQupQpiGjPqIbVHCTRvpybr-cmk5zs8U/edit#gid=7101094" msgstr "" -#: class/ShMapperDrive.class.php:159 +#: class/ShMapperDrive.class.php:168 msgid "Skip first rows count" msgstr "" -#: class/ShMapperDrive.class.php:171 +#: class/ShMapperDrive.class.php:180 msgid "Execute next rows count. Empty for all." msgstr "" -#: class/ShMapperDrive.class.php:191 +#: class/ShMapperDrive.class.php:200 msgid "Column for unique id" msgstr "" -#: class/ShMapperDrive.class.php:203 +#: class/ShMapperDrive.class.php:212 msgid "Point title column" msgstr "" -#: class/ShMapperDrive.class.php:214 +#: class/ShMapperDrive.class.php:223 msgid "Point description column" msgstr "" -#: class/ShMapperDrive.class.php:225 +#: class/ShMapperDrive.class.php:234 msgid "Post date column" msgstr "" -#: class/ShMapperDrive.class.php:238 +#: class/ShMapperDrive.class.php:247 msgid "Is fix post date?" msgstr "" -#: class/ShMapperDrive.class.php:250 +#: class/ShMapperDrive.class.php:259 msgid "Select marker type" msgstr "" -#: class/ShMapperDrive.class.php:252 +#: class/ShMapperDrive.class.php:261 msgid "Add new marker" msgstr "" -#: class/ShMapperDrive.class.php:268 +#: class/ShMapperDrive.class.php:277 msgid "Select method and columns for generate Points's geo position." msgstr "" -#: class/ShMapperDrive.class.php:281 +#: class/ShMapperDrive.class.php:290 msgid "Latitude and Longitude" msgstr "" -#: class/ShMapperDrive.class.php:310 +#: class/ShMapperDrive.class.php:319 msgid "Adress" msgstr "" -#: class/ShMapperDrive.class.php:326 +#: class/ShMapperDrive.class.php:335 msgid "Select columns for choose Points's different types." msgstr "" -#: class/ShMapperDrive.class.php:339 +#: class/ShMapperDrive.class.php:348 msgid "Select column with marker type" msgstr "" -#: class/ShMapperDrive.class.php:355 +#: class/ShMapperDrive.class.php:364 msgid "" "List of columns in google table that need to parse to Point's description" msgstr "" -#: class/ShMapperDrive.class.php:360 +#: class/ShMapperDrive.class.php:369 msgid "Column" msgstr "" -#: class/ShMapperDrive.class.php:363 +#: class/ShMapperDrive.class.php:372 msgid "Include?" msgstr "" -#: class/ShMapperDrive.class.php:364 class/ShMapperDrive.class.php:370 +#: class/ShMapperDrive.class.php:373 class/ShMapperDrive.class.php:379 msgid "necessarily" msgstr "" -#: class/ShMapperDrive.class.php:369 +#: class/ShMapperDrive.class.php:378 msgid "Field name by latin" msgstr "" -#: class/ShMapperDrive.class.php:375 +#: class/ShMapperDrive.class.php:384 msgid "Sub title for decription section" msgstr "" -#: class/ShMapperDrive.class.php:378 +#: class/ShMapperDrive.class.php:387 msgid "Order" msgstr "" -#: class/ShMapperDrive.class.php:390 +#: class/ShMapperDrive.class.php:399 msgid "If your Google spreadsheet has one text in the specified column" msgstr "" -#: class/ShMapperDrive.class.php:403 +#: class/ShMapperDrive.class.php:412 msgid "" "Use only first row for creation new Point or updating included Point and " "ignore over." msgstr "" -#: class/ShMapperDrive.class.php:416 +#: class/ShMapperDrive.class.php:425 msgid "" "Use only last row for creation new Point or updating included Point and " "ignore over." msgstr "" -#: class/ShMapperDrive.class.php:429 +#: class/ShMapperDrive.class.php:438 msgid "" "Use only first row for creation new Point or updating included Point. Over " "some rows use for creation new Message or updating included Messages for " "Point" msgstr "" -#: class/ShMapperDrive.class.php:442 +#: class/ShMapperDrive.class.php:451 msgid "Preview results" msgstr "" -#: class/ShMapperDrive.class.php:445 +#: class/ShMapperDrive.class.php:454 msgid "Create or update Poins and Messages" msgstr "" @@ -777,7 +944,7 @@ msgstr "" msgid "no found Map Request in trash" msgstr "" -#: class/ShMapperRequest.class.php:62 class/ShmPoint.class.php:248 +#: class/ShMapperRequest.class.php:62 class/ShmPoint.class.php:253 msgid "Image" msgstr "" @@ -785,36 +952,163 @@ msgstr "" msgid "Approving" msgstr "" -#: class/ShMapperRequest.class.php:75 class/ShmPoint.class.php:247 +#: class/ShMapperRequest.class.php:75 class/ShmPoint.class.php:252 msgid "GEO location" msgstr "" -#: class/ShMapperRequest.class.php:332 +#: class/ShMapperRequest.class.php:357 msgid "Uknown User" msgstr "" -#: class/ShMapperRequest.class.php:340 +#: class/ShMapperRequest.class.php:365 #, php-format msgid "<%s> Request to your Map from [%s] [%s]" msgstr "" -#: class/ShMapperRequest.class.php:342 +#: class/ShMapperRequest.class.php:367 #, php-format msgid "You may see this %s" msgstr "" -#: class/ShMapperRequest.class.php:361 +#: class/ShMapperRequest.class.php:386 msgid "Visitor" msgstr "" -#: class/ShMapperRequest.class.php:374 +#: class/ShMapperRequest.class.php:399 msgid "Approve" msgstr "" -#: class/ShMapperRequest.class.php:376 +#: class/ShMapperRequest.class.php:401 msgid "Trash" msgstr "" +#: class/ShMapperTracks.class.php:81 +msgid "download gpx" +msgstr "" + +#: class/ShMapperTracks.class.php:101 +msgid "Uncorrect gpx-file: " +msgstr "" + +#: class/ShMapperTracks.class.php:102 +msgid "Not correct gpx format" +msgstr "" + +#: class/ShMapperTracks.class.php:103 +msgid "Not exists track data" +msgstr "" + +#: class/ShMapperTracks.class.php:104 +msgid "Not exists correct track's segment data" +msgstr "" + +#: class/ShMapperTracks.class.php:105 +msgid "Not exists correct track segment's data" +msgstr "" + +#: class/ShMapperTracks.class.php:108 +msgid "update" +msgstr "" + +#: class/ShMapperTracks.class.php:109 class/ShMapperTracks.class.php:127 +msgid "List of Tracks" +msgstr "" + +#: class/ShMapperTracks.class.php:110 +msgid "Add marker" +msgstr "" + +#: class/ShMapperTracks.class.php:111 +msgid "Empty vertex" +msgstr "" + +#: class/ShMapperTracks.class.php:112 +msgid "Edit vertex" +msgstr "" + +#: class/ShMapperTracks.class.php:113 +msgid "Update vertex" +msgstr "" + +#: class/ShMapperTracks.class.php:115 +msgid "Content" +msgstr "" + +#: class/ShMapperTracks.class.php:117 +msgid "Update new track" +msgstr "" + +#: class/ShMapperTracks.class.php:138 +msgid "GPX source" +msgstr "" + +#: class/ShMapperTracks.class.php:139 class/ShMapperTracks.class.php:149 +msgid "Track" +msgstr "" + +#: class/ShMapperTracks.class.php:140 +msgid "Track author name" +msgstr "" + +#: class/ShMapperTracks.class.php:141 +msgid "Track author e-mail" +msgstr "" + +#: class/ShMapperTracks.class.php:183 +msgid "Download GPX" +msgstr "" + +#: class/ShMapperTracks.class.php:205 +msgid "Update Placemark" +msgstr "" + +#: class/ShMapperTracks.class.php:206 +msgid "Remove Placemark" +msgstr "" + +#: class/ShMapperTracksAjax.class.php:216 +msgid "Success removed tracks Marker" +msgstr "" + +#: class/ShMapperTracksPoint.class.php:29 +#: class/ShMapperTracksPoint.class.php:30 +msgid "Track marker" +msgstr "" + +#: class/ShMapperTracksPoint.class.php:31 +#: class/ShMapperTracksPoint.class.php:32 +#: class/ShMapperTracksPoint.class.php:34 +msgid "add Track marker" +msgstr "" + +#: class/ShMapperTracksPoint.class.php:33 +msgid "edit Track marker" +msgstr "" + +#: class/ShMapperTracksPoint.class.php:35 +msgid "all Track markers" +msgstr "" + +#: class/ShMapperTracksPoint.class.php:36 +msgid "view Track marker" +msgstr "" + +#: class/ShMapperTracksPoint.class.php:37 +msgid "search Track marker" +msgstr "" + +#: class/ShMapperTracksPoint.class.php:38 +msgid "Track marker not found" +msgstr "" + +#: class/ShMapperTracksPoint.class.php:39 +msgid "no found Track marker in trash" +msgstr "" + +#: class/ShMapperTracksPoint.class.php:40 +msgid "Track markers" +msgstr "" + #: class/ShMapper_Assistants.class.php:50 msgid "all maps" msgstr "" @@ -823,76 +1117,76 @@ msgstr "" msgid "Your requests to this Map " msgstr "" -#: class/ShMapper_ajax.class.php:179 +#: class/ShMapper_ajax.class.php:180 msgid "Congratulation! That's all!" msgstr "" -#: class/ShMapper_ajax.class.php:197 +#: class/ShMapper_ajax.class.php:198 msgid "Wizzard closed" msgstr "" -#: class/ShMapper_ajax.class.php:208 +#: class/ShMapper_ajax.class.php:209 msgid "Wizzard restarted" msgstr "" -#: class/ShMapper_ajax.class.php:222 +#: class/ShMapper_ajax.class.php:223 msgid "Approve succesfully and insert new Map marker" msgstr "" -#: class/ShMapper_ajax.class.php:234 +#: class/ShMapper_ajax.class.php:235 msgid "Request put to Trash" msgstr "" -#: class/ShMapper_ajax.class.php:339 +#: class/ShMapper_ajax.class.php:340 #, php-format msgid "Are you want delete %s?" msgstr "" -#: class/ShMapper_ajax.class.php:341 +#: class/ShMapper_ajax.class.php:342 msgid "Delete" msgstr "" -#: class/ShMapper_ajax.class.php:357 +#: class/ShMapper_ajax.class.php:358 msgid "add Map Point" msgstr "" -#: class/ShMapper_ajax.class.php:359 +#: class/ShMapper_ajax.class.php:360 msgid "Create" msgstr "" -#: class/ShMapper_ajax.class.php:387 +#: class/ShMapper_ajax.class.php:388 msgid "Success" msgstr "" -#: class/ShMapper_ajax.class.php:398 +#: class/ShMapper_ajax.class.php:399 msgid "Change Vocabulaty: " msgstr "" -#: class/ShMapper_ajax.class.php:419 +#: class/ShMapper_ajax.class.php:420 msgid "Yandex.Maps API key Saved" msgstr "" -#: class/ShMapper_ajax.class.php:431 class/ShMapper_ajax.class.php:442 +#: class/ShMapper_ajax.class.php:432 class/ShMapper_ajax.class.php:443 msgid "New coordinates saved" msgstr "" -#: class/ShMapper_ajax.class.php:452 +#: class/ShMapper_ajax.class.php:453 msgid "Users can add Placemarks" msgstr "" -#: class/ShMapper_ajax.class.php:462 +#: class/ShMapper_ajax.class.php:463 msgid "Pre-moderation on" msgstr "" -#: class/ShMapper_ajax.class.php:472 +#: class/ShMapper_ajax.class.php:473 msgid "Reload mode" msgstr "" -#: class/ShMapper_ajax.class.php:482 +#: class/ShMapper_ajax.class.php:483 msgid "captha added" msgstr "" -#: class/ShMapper_ajax.class.php:492 class/ShMapper_ajax.class.php:503 +#: class/ShMapper_ajax.class.php:493 class/ShMapper_ajax.class.php:504 msgid "Set key" msgstr "" @@ -913,119 +1207,119 @@ msgid "Write description" msgstr "" #: class/ShmForm.class.php:62 -msgid "input title" +msgid "Heading" msgstr "" #: class/ShmForm.class.php:68 -msgid "input text" +msgid "Text field" msgstr "" #: class/ShmForm.class.php:98 -msgid "textarea" +msgid "Textarea" msgstr "" #: class/ShmForm.class.php:104 -msgid "input file" +msgid "Upload file" msgstr "" #: class/ShmForm.class.php:110 -msgid "enabled Map markers" +msgid "Markers" msgstr "" -#: class/ShmForm.class.php:192 class/ShmForm.class.php:260 -#: class/ShmForm.class.php:342 +#: class/ShmForm.class.php:193 class/ShmForm.class.php:268 +#: class/ShmForm.class.php:350 msgid "Type of element" msgstr "" -#: class/ShmForm.class.php:202 class/ShmForm.class.php:273 -#: class/ShmForm.class.php:336 +#: class/ShmForm.class.php:203 class/ShmForm.class.php:281 +#: class/ShmForm.class.php:344 msgid "Label of element" msgstr "" -#: class/ShmForm.class.php:204 class/ShmForm.class.php:275 -#: class/ShmForm.class.php:338 +#: class/ShmForm.class.php:205 class/ShmForm.class.php:283 +#: class/ShmForm.class.php:346 msgid "write title" msgstr "" -#: class/ShmForm.class.php:211 class/ShmForm.class.php:283 -#: class/ShmForm.class.php:357 +#: class/ShmForm.class.php:212 class/ShmForm.class.php:291 +#: class/ShmForm.class.php:365 msgid "Placeholder" msgstr "" -#: class/ShmForm.class.php:213 class/ShmForm.class.php:285 -#: class/ShmForm.class.php:359 +#: class/ShmForm.class.php:214 class/ShmForm.class.php:293 +#: class/ShmForm.class.php:367 msgid "write placeholder" msgstr "" -#: class/ShmForm.class.php:217 class/ShmForm.class.php:289 -#: class/ShmForm.class.php:363 +#: class/ShmForm.class.php:218 class/ShmForm.class.php:297 +#: class/ShmForm.class.php:371 msgid "Placemark types" msgstr "" -#: class/ShmForm.class.php:231 class/ShmForm.class.php:303 -#: class/ShmForm.class.php:376 +#: class/ShmForm.class.php:235 class/ShmForm.class.php:311 +#: class/ShmForm.class.php:384 msgid "write description" msgstr "" -#: class/ShmForm.class.php:237 +#: class/ShmForm.class.php:242 msgid "Element is required" msgstr "" -#: class/ShmForm.class.php:239 class/ShmForm.class.php:308 +#: class/ShmForm.class.php:244 class/ShmForm.class.php:316 msgid "Add before" msgstr "" -#: class/ShmForm.class.php:240 class/ShmForm.class.php:309 +#: class/ShmForm.class.php:245 class/ShmForm.class.php:317 msgid "Add after" msgstr "" -#: class/ShmForm.class.php:241 class/ShmForm.class.php:310 +#: class/ShmForm.class.php:246 class/ShmForm.class.php:318 msgid "Delete me" msgstr "" -#: class/ShmForm.class.php:267 class/ShmForm.class.php:331 +#: class/ShmForm.class.php:275 class/ShmForm.class.php:339 msgid "require" msgstr "" -#: class/ShmForm.class.php:328 +#: class/ShmForm.class.php:336 msgid "enable" msgstr "" -#: class/ShmForm.class.php:380 +#: class/ShmForm.class.php:388 msgid "The name of the parameter that refers to this element" msgstr "" -#: class/ShmForm.class.php:438 +#: class/ShmForm.class.php:446 msgid "Сhoose files" msgstr "" -#: class/ShmForm.class.php:502 -msgid "" -"Drag choosed icon and place it to map or click it and enter exact address." -msgstr "" - -#: class/ShmForm.class.php:508 class/ShmForm.class.php:528 -#: class/ShmForm.class.php:562 class/ShmForm.class.php:573 -#: class/ShmForm.class.php:583 +#: class/ShmForm.class.php:465 class/ShmForm.class.php:485 +#: class/ShmForm.class.php:518 class/ShmForm.class.php:529 +#: class/ShmForm.class.php:539 msgid "This required field" msgstr "" -#: class/ShmForm.class.php:525 +#: class/ShmForm.class.php:482 msgid "Drag icon and place it to map." msgstr "" -#: class/ShmForm.class.php:558 +#: class/ShmForm.class.php:514 msgid "Your name" msgstr "" -#: class/ShmForm.class.php:569 +#: class/ShmForm.class.php:525 msgid "Your e-mail" msgstr "" -#: class/ShmForm.class.php:579 +#: class/ShmForm.class.php:535 msgid "Your phone" msgstr "" +#: class/ShmForm.class.php:626 +msgid "" +"Drag choosed icon and place it to map or click it and enter exact address." +msgstr "" + #: class/ShmMap.class.php:71 msgid "Step 1. Set up your map." msgstr "" @@ -1054,10 +1348,6 @@ msgstr "" msgid "no found Map in trash" msgstr "" -#: class/ShmMap.class.php:108 class/ShmPoint.class.php:246 -msgid "ID" -msgstr "" - #: class/ShmMap.class.php:130 msgid "shortcodes" msgstr "" @@ -1162,91 +1452,90 @@ msgstr "" msgid "Enable crowdsourcing function (free add Users new Markers)" msgstr "" -#: class/ShmMap.class.php:443 +#: class/ShmMap.class.php:444 msgid "2.1. What is the name of your information form?" msgstr "" -#: class/ShmMap.class.php:447 +#: class/ShmMap.class.php:448 msgid "For example «All beaches by the river»" msgstr "" -#: class/ShmMap.class.php:453 +#: class/ShmMap.class.php:454 msgid "2.2. Will I notify the author about new posts?" msgstr "" -#: class/ShmMap.class.php:461 +#: class/ShmMap.class.php:462 msgid "2.3. What information can users enter?" msgstr "" -#: class/ShmMap.class.php:464 +#: class/ShmMap.class.php:465 msgid "" -"You can create your own forms using form elements: & laquo; Text line & " -"raquo;, & laquo; Text field & raquo;, & laquo; Upload files & raquo;, & " -"laquo; Categories of Markers & raquo;" +"You can create your own forms using form elements: Heading, Text field, " +"Textarea, Upload file, Markers, Track drawer." msgstr "" -#: class/ShmMap.class.php:473 +#: class/ShmMap.class.php:474 msgid "2.4. Can users leave their contact information?" msgstr "" -#: class/ShmMap.class.php:481 +#: class/ShmMap.class.php:482 msgid "2.5. What data users will have to put?" msgstr "" -#: class/ShmMap.class.php:484 class/ShmMap.class.php:500 -#: class/ShmMap.class.php:516 +#: class/ShmMap.class.php:485 class/ShmMap.class.php:501 +#: class/ShmMap.class.php:517 msgid "Include" msgstr "" -#: class/ShmMap.class.php:494 class/ShmMap.class.php:510 -#: class/ShmMap.class.php:526 +#: class/ShmMap.class.php:495 class/ShmMap.class.php:511 +#: class/ShmMap.class.php:527 msgid "Required" msgstr "" -#: class/ShmMap.class.php:505 +#: class/ShmMap.class.php:506 msgid "Personal email" msgstr "" -#: class/ShmMap.class.php:724 +#: class/ShmMap.class.php:726 msgid "What do with placemarks of deleting Map?" msgstr "" -#: class/ShmMap.class.php:729 +#: class/ShmMap.class.php:731 msgid "Delete all Points" msgstr "" -#: class/ShmMap.class.php:735 +#: class/ShmMap.class.php:737 msgid "Escape all Points without Owner Map" msgstr "" -#: class/ShmMap.class.php:741 +#: class/ShmMap.class.php:743 msgid "Switch all Points to anover Map" msgstr "" -#: class/ShmMap.class.php:757 +#: class/ShmMap.class.php:759 msgid "delete" msgstr "" -#: class/ShmMap.class.php:836 +#: class/ShmMap.class.php:838 #, php-format msgid "Succesfuly delete map width %s points" msgstr "" -#: class/ShmMap.class.php:841 +#: class/ShmMap.class.php:843 #, php-format msgid "Succesfuly delete map and %s points are orphans now" msgstr "" -#: class/ShmMap.class.php:848 +#: class/ShmMap.class.php:850 #, php-format msgid "Succesfuly delete map and %s points migrates to %s" msgstr "" -#: class/ShmMap.class.php:880 +#: class/ShmMap.class.php:882 msgid "Yandex Map" msgstr "" -#: class/ShmMap.class.php:902 +#: class/ShmMap.class.php:904 msgid "Open Street Map" msgstr "" @@ -1283,15 +1572,15 @@ msgstr "" msgid "no found Map marker in trash" msgstr "" -#: class/ShmPoint.class.php:178 +#: class/ShmPoint.class.php:183 msgid "Map owner" msgstr "" -#: class/ShmPoint.class.php:229 +#: class/ShmPoint.class.php:234 msgid "(untitled map)" msgstr "" -#: class/ShmPoint.class.php:331 +#: class/ShmPoint.class.php:336 msgid "Address" msgstr "" diff --git a/shmapper.php b/shmapper.php index 7fb48c6..d8983e8 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.4.3.1 + * Version: 1.4.4 * Requires at least: 5.0 * Requires PHP: 5.6 * Author: Teplitsa. Technologies for Social Good @@ -71,7 +71,7 @@ function init_textdomain_shmapper() { define( 'SHM_CSV_STROKE_SEPARATOR', ';' ); define( 'SHM_CSV_ROW_SEPARATOR', ' '); -define( 'SHMAPPER_VERSION', '1.4.1' ); +define( 'SHMAPPER_VERSION', '1.4.4' ); require_once SHM_REAL_PATH . 'class/ShMapper.class.php'; require_once SHM_REAL_PATH . 'class/ShMapper_ajax.class.php'; @@ -90,8 +90,9 @@ function init_textdomain_shmapper() { require_once SHM_REAL_PATH . 'class/ShmAdminPage.class.php'; require_once SHM_REAL_PATH . 'shortcode/shm_shortcodes.php'; require_once SHM_REAL_PATH . 'widget/ShMap.widget.php'; - require_once SHM_REAL_PATH . 'class/ShMapperDrive.class.php'; +require_once SHM_REAL_PATH . 'shmapperTracks.plugin.php'; + register_activation_hook( __FILE__, array( 'ShMapper', 'activate' ) ); register_activation_hook( __FILE__, array( 'ShMapperDrive', 'activate' ) ); diff --git a/shmapperTracks.plugin.php b/shmapperTracks.plugin.php new file mode 100644 index 0000000..ffe050b --- /dev/null +++ b/shmapperTracks.plugin.php @@ -0,0 +1,42 @@ +

    "; } - + $html = apply_filters("shm_final_after_front_map", $html, $args); return $html; } diff --git a/shortcode/shmMapTrack.shortcode.php b/shortcode/shmMapTrack.shortcode.php new file mode 100644 index 0000000..e174d89 --- /dev/null +++ b/shortcode/shmMapTrack.shortcode.php @@ -0,0 +1,35 @@ + -1, + "height" => 420, + "show_markers" => true, + "no_title" => 0, + "no_description" => 0, + "no_map" => 0, + ], + $args, + 'shmMapTrack' + ), + $args + ); + $id = $args['id']; + $track = ShMaperTrack::get_instance( $args[ 'id' ] ); + $html = $args["no_title"] ? "" : "
    " . $track->get("post_title") . "
    "; + if (!$args["no_map"]) { + $html .= $track->draw($args); + $html = apply_filters( "shm_after_map_front_track", $html, $args ); + } + if (!$args["no_description"]) { + $html .= "
    ". + $track->get("post_content") . + "
    "; + $html = apply_filters( "shm_final_front_track", $html, $args ); + } + return $html; +} \ No newline at end of file From 7ec993ca6544629c76cf0d23e5afa7a7c1b0ea77 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 27 Jul 2021 07:07:55 +0300 Subject: [PATCH 107/220] Check if ymaps defined --- assets/js/admin.js | 489 +++++++++++++++++++++++---------------------- 1 file changed, 247 insertions(+), 242 deletions(-) diff --git a/assets/js/admin.js b/assets/js/admin.js index 8baeefd..2d34727 100644 --- a/assets/js/admin.js +++ b/assets/js/admin.js @@ -64,273 +64,278 @@ jQuery(document).ready(function($) /* * Edit track */ - ymaps.ready( function() - { - if($("#shm_map").length == 0) return; - myMap = new ymaps.Map('shm_map', { - center: [55.73, 37.75], - zoom: 8 - }, { - searchControlProvider: 'yandex#search' - }); - - //console.log(tMarkers); - var myPolyline = new ymaps.Polyline( - tPoints, - { }, - { - editorDrawingCursor: 'crosshair', - strokeWidth: shmTrackWidth, - strokeColor: shmTrackColor, - editorMenuManager: function (items) - { - - return items; + if ( typeof ymaps !== 'undefined' ){ + + ymaps.ready( function() + { + if($("#shm_map").length == 0) return; + myMap = new ymaps.Map('shm_map', { + center: [55.73, 37.75], + zoom: 8 + }, { + searchControlProvider: 'yandex#search' + }); + + //console.log(tMarkers); + var myPolyline = new ymaps.Polyline( + tPoints, + { }, + { + editorDrawingCursor: 'crosshair', + strokeWidth: shmTrackWidth, + strokeColor: shmTrackColor, + editorMenuManager: function (items) + { + + return items; + } } - } - ); - myMap.geoObjects.add(myPolyline); - myPolyline.editor.startEditing(); - myPolyline.geometry.events.add('change', function(evt) { - var points = myPolyline.geometry.getCoordinates().map( function( e ) { - return e.filter( function( el ) { //return e.join(',') - return el != null; + ); + myMap.geoObjects.add(myPolyline); + myPolyline.editor.startEditing(); + myPolyline.geometry.events.add('change', function(evt) { + var points = myPolyline.geometry.getCoordinates().map( function( e ) { + return e.filter( function( el ) { //return e.join(',') + return el != null; + }); }); + var pointsVal = '[[' + points.join( '],[' ) + ']]'; + jQuery( '[name=track]' ).val( pointsVal ); }); - var pointsVal = '[[' + points.join( '],[' ) + ']]'; - jQuery( '[name=track]' ).val( pointsVal ); - }); - var markers = tMarkers.map(function(elem) - { - var pointt = "
    "; - $("body").append(pointt); - return shmapperPlaceMarkerOnMapByCoords( - myMap, - elem.coords, - $(pointt) - ); - $(pointt); - }); - myMap.setBounds(myPolyline.geometry.getBounds()); - - if(jQuery('.shm-type-icon-1').length) - { - jQuery('.shm-type-icon-1').draggable( - { - revert: false, - start: (evt, ui) => - { - - }, - stop: (evt, ui) => + var markers = tMarkers.map(function(elem) + { + var pointt = "
    "; + $("body").append(pointt); + return shmapperPlaceMarkerOnMapByCoords( + myMap, + elem.coords, + $(pointt) + ); + $(pointt); + }); + myMap.setBounds(myPolyline.geometry.getBounds()); + + if(jQuery('.shm-type-icon-1').length) + { + jQuery('.shm-type-icon-1').draggable( { - var _this = $(ui.helper); - _this.addClass('shmapperDragged'); - shmapperPlaceMarkerOnMap(evt, ui, true ); - $('.shm-type-icon-1.shmapperMarkerSelected').removeClass('shmapperMarkerSelected'); - } - }); - - } - function shmapperPlaceMarkerOnMap(evt, ui, isNew ) - { - var globalPixelPoint = myMap.converter.pageToGlobal( [evt.clientX, evt.clientY + window.scrollY] ); - new_mark_coords = myMap.options.get('projection').fromGlobalPixels(globalPixelPoint, myMap.getZoom()); - shmapperPlaceMarkerOnMapByCoords(myMap, new_mark_coords, $(ui.helper), isNew); - } - function shmapperPlaceMarkerOnMapByCoords(map, new_mark_coords, _markerIcon, isNew=false) - { - MyIconContentLayout = ymaps.templateLayoutFactory.createClass( - '
    $[properties.iconContent]
    ' - ); - var bg = _markerIcon.css('background-image'); - if( bg !== 'none') - { - bg = bg.replace('url(','').replace(')','').replace(/\"/gi, ''); - shm_paramet = { - balloonMaxWidth: 425, - hideIconOnBalloonOpen: false, - iconLayout: 'default#imageWithContent', - iconShadow:true, - iconImageHref: bg, - iconImageSize:[22,22], - iconImageOffset: [-11, -22], - draggable:true, - term_id:_markerIcon.attr('shm_type_id'), - type:'point', - fill:true, - fillColor: _markerIcon.attr('shm_clr') ? _markerIcon.attr('shm_clr'):'#FF0000', - iconContentLayout: MyIconContentLayout, - opacity:0.22, - marker_id: _markerIcon.attr("marker_id"), - hasBalloon:false - - }; - } - else - { - shm_paramet = { - balloonMaxWidth: 425, - hideIconOnBalloonOpen: true, - iconColor: _markerIcon.attr('shm_clr') ? _markerIcon.attr('shm_clr'):'#FF0000', - preset: 'islands#dotIcon', - draggable:true, - term_id:_markerIcon.attr('shm_type_id'), - type:'point', - fill:true, - fillColor: '#FF0000', - iconShadow:true, - opacity:0.22, - marker_id: _markerIcon.attr("marker_id"), - hasBalloon:false - } - } - - shm_placemark = new ymaps.GeoObject( - { - options: + revert: false, + start: (evt, ui) => { - hideIconOnBalloonOpen: true, - draggable: true }, - properties: + stop: (evt, ui) => { + var _this = $(ui.helper); + _this.addClass('shmapperDragged'); + shmapperPlaceMarkerOnMap(evt, ui, true ); + $('.shm-type-icon-1.shmapperMarkerSelected').removeClass('shmapperMarkerSelected'); + } + }); + + } + function shmapperPlaceMarkerOnMap(evt, ui, isNew ) + { + var globalPixelPoint = myMap.converter.pageToGlobal( [evt.clientX, evt.clientY + window.scrollY] ); + new_mark_coords = myMap.options.get('projection').fromGlobalPixels(globalPixelPoint, myMap.getZoom()); + shmapperPlaceMarkerOnMapByCoords(myMap, new_mark_coords, $(ui.helper), isNew); + } + function shmapperPlaceMarkerOnMapByCoords(map, new_mark_coords, _markerIcon, isNew=false) + { + MyIconContentLayout = ymaps.templateLayoutFactory.createClass( + '
    $[properties.iconContent]
    ' + ); + var bg = _markerIcon.css('background-image'); + if( bg !== 'none') + { + bg = bg.replace('url(','').replace(')','').replace(/\"/gi, ''); + shm_paramet = { + balloonMaxWidth: 425, + hideIconOnBalloonOpen: false, + iconLayout: 'default#imageWithContent', + iconShadow:true, + iconImageHref: bg, + iconImageSize:[22,22], + iconImageOffset: [-11, -22], + draggable:true, + term_id:_markerIcon.attr('shm_type_id'), + type:'point', + fill:true, + fillColor: _markerIcon.attr('shm_clr') ? _markerIcon.attr('shm_clr'):'#FF0000', + iconContentLayout: MyIconContentLayout, + opacity:0.22, + marker_id: _markerIcon.attr("marker_id"), + hasBalloon:false + + }; + } + else + { + shm_paramet = { + balloonMaxWidth: 425, hideIconOnBalloonOpen: true, - // Temporarily disable marker background color - //iconContent:"
    ", - iconContent:"
    ", - balloonContentHeader: '', - balloonContentBody: '
    Delete Marker
    ', - marker_id: _markerIcon.attr("marker_id"), - shm_type_id: _markerIcon.attr("shm_type_id"), - post_title: _markerIcon.attr("post_title"), - post_content: _markerIcon.attr("post_content") - }, - geometry: - { - type: 'Point', - coordinates: new_mark_coords - }, - } , - shm_paramet - ); - if(isNew) - { - addAdress( _markerIcon, new_mark_coords ); - _markerIcon.css({left:0, top:0}).hide().fadeIn('slow'); - _markerIcon.parents('.shm-form-placemarks').removeAttr('required').removeClass('shm-alert'); - _markerIcon.data('straight_geocoding', ''); - addTrack(shm_placemark, _markerIcon.attr('shm_type_id')); + iconColor: _markerIcon.attr('shm_clr') ? _markerIcon.attr('shm_clr'):'#FF0000', + preset: 'islands#dotIcon', + draggable:true, + term_id:_markerIcon.attr('shm_type_id'), + type:'point', + fill:true, + fillColor: '#FF0000', + iconShadow:true, + opacity:0.22, + marker_id: _markerIcon.attr("marker_id"), + hasBalloon:false + } + } + + shm_placemark = new ymaps.GeoObject( + { + options: + { + hideIconOnBalloonOpen: true, + draggable: true + + }, + properties: + { + hideIconOnBalloonOpen: true, + // Temporarily disable marker background color + //iconContent:"
    ", + iconContent:"
    ", + balloonContentHeader: '', + balloonContentBody: '
    Delete Marker
    ', + marker_id: _markerIcon.attr("marker_id"), + shm_type_id: _markerIcon.attr("shm_type_id"), + post_title: _markerIcon.attr("post_title"), + post_content: _markerIcon.attr("post_content") + }, + geometry: + { + type: 'Point', + coordinates: new_mark_coords + }, + } , + shm_paramet + ); + if(isNew) + { + addAdress( _markerIcon, new_mark_coords ); + _markerIcon.css({left:0, top:0}).hide().fadeIn('slow'); + _markerIcon.parents('.shm-form-placemarks').removeAttr('required').removeClass('shm-alert'); + _markerIcon.data('straight_geocoding', ''); + addTrack(shm_placemark, _markerIcon.attr('shm_type_id')); + } + shm_placemark.events.add('dragend', evt => + { + var pos = evt.get('position'); + var targ = evt.get("target"); + var globalPixelPoint = map.converter.pageToGlobal( [pos[0], pos[1]] ); + new_mark_coords = map.options.get('projection').fromGlobalPixels(globalPixelPoint, map.getZoom()); + addAdress( _markerIcon, new_mark_coords ); + shm_send([ + "shm_chande_track_point", + { + marker_id : targ.properties._data.marker_id, + post_title: targ.properties._data.post_title, + post_content: targ.properties._data.post_content, + shm_type_id : targ.properties._data.shm_type_id, + point_type : "point_type", + coordinates : new_mark_coords//targ.geometry._coordinates + + } + ]) + }); + map.geoObjects.add(shm_placemark); + + shm_placemark.events.add( "click", e => + { + var tg = e.get("target"); + console.log( tg ); + var post_title = tg.properties._data.post_title; + var post_content = tg.properties._data.post_content; + shm_track_place = shm_placemark; + addSubDialog({ + title:"", + content:"", + footer : "" + }); + jQuery("[name=shm_track_marker_post_title]").on( "change", e => + { + tg.properties.set({ + post_title : e.currentTarget.value + }); + //update_track_placmarks_json( tg ); + }) + jQuery("[name=shm_track_marker_post_content]").on( "change", e => + { + tg.properties.set({ + post_content : e.currentTarget.value + }) + //update_track_placmarks_json( tg ); + }) + jQuery(".update_placemark").on( "click", e => + { + update_track_placmarks_json( tg ); + removeSubDialog(); + }) + jQuery(".remove_placemark").on( "click", e => + { + if( confirm( __( "Remove placemark?" ) ) ) + { + tg.setParent(); + shm_send([ + "shm_remove_track_point", + tg.properties._data.marker_id + ]) + removeSubDialog(); + } + }) + + }); + + } + function addAdress( _markerIcon, new_mark_coords ) + { + } - shm_placemark.events.add('dragend', evt => + function addTrack( shm_placemark, shm_type_id ) { - var pos = evt.get('position'); - var targ = evt.get("target"); - var globalPixelPoint = map.converter.pageToGlobal( [pos[0], pos[1]] ); - new_mark_coords = map.options.get('projection').fromGlobalPixels(globalPixelPoint, map.getZoom()); - addAdress( _markerIcon, new_mark_coords ); + track_points.push( shm_placemark ); shm_send([ - "shm_chande_track_point", + "shm_add_track_point", { - marker_id : targ.properties._data.marker_id, - post_title: targ.properties._data.post_title, - post_content: targ.properties._data.post_content, - shm_type_id : targ.properties._data.shm_type_id, + track_id : track_id, + shm_type_id : shm_type_id, point_type : "point_type", - coordinates : new_mark_coords//targ.geometry._coordinates - + geometry : shm_placemark.geometry._coordinates } ]) - }); - map.geoObjects.add(shm_placemark); - - shm_placemark.events.add( "click", e => + } + function removeTrack(shm_placemark) { - var tg = e.get("target"); - console.log( tg ); - var post_title = tg.properties._data.post_title; - var post_content = tg.properties._data.post_content; - shm_track_place = shm_placemark; - addSubDialog({ - title:"", - content:"", - footer : "" - }); - jQuery("[name=shm_track_marker_post_title]").on( "change", e => - { - tg.properties.set({ - post_title : e.currentTarget.value - }); - //update_track_placmarks_json( tg ); - }) - jQuery("[name=shm_track_marker_post_content]").on( "change", e => - { - tg.properties.set({ - post_content : e.currentTarget.value - }) - //update_track_placmarks_json( tg ); - }) - jQuery(".update_placemark").on( "click", e => - { - update_track_placmarks_json( tg ); - removeSubDialog(); - }) - jQuery(".remove_placemark").on( "click", e => - { - if( confirm( __( "Remove placemark?" ) ) ) - { - tg.setParent(); - shm_send([ - "shm_remove_track_point", - tg.properties._data.marker_id - ]) - removeSubDialog(); - } - }) - + + } + $('.place-del-btn').on('click', function(evt) + { + }); - - } - function addAdress( _markerIcon, new_mark_coords ) - { - - } - function addTrack( shm_placemark, shm_type_id ) - { - track_points.push( shm_placemark ); - shm_send([ - "shm_add_track_point", - { - track_id : track_id, - shm_type_id : shm_type_id, - point_type : "point_type", - geometry : shm_placemark.geometry._coordinates - } - ]) - } - function removeTrack(shm_placemark) - { - - } - $('.place-del-btn').on('click', function(evt) - { - - }); - var update_placemark = function( mark_id ) - { - - } - } ); + var update_placemark = function( mark_id ) + { + + } + } ); + + } + var setUpdateTrackPoints = function( ) { jQuery("[name='shm_marker_post_title']").off("change", e => { - updTrackPoint(e); + updTrackPoint(e); }); jQuery("[name='shm_marker_post_title']").on("change", e => { - updTrackPoint(e); + updTrackPoint(e); }); } var updTrackPoint = function( evt ) From b24b628f970a93d05326735f893bfd269bff6d0c Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 27 Jul 2021 07:08:24 +0300 Subject: [PATCH 108/220] Remove source map from leaflet js --- assets/js/leaflet.markercluster-src.js | 1 - 1 file changed, 1 deletion(-) diff --git a/assets/js/leaflet.markercluster-src.js b/assets/js/leaflet.markercluster-src.js index 6b1e3b8..909f3f1 100644 --- a/assets/js/leaflet.markercluster-src.js +++ b/assets/js/leaflet.markercluster-src.js @@ -2687,4 +2687,3 @@ exports.MarkerClusterGroup = MarkerClusterGroup; exports.MarkerCluster = MarkerCluster; }))); -//# sourceMappingURL=leaflet.markercluster-src.js.map From 5af9e5ab8c44615e71f6873174a67ed10a8af764 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 27 Jul 2021 07:08:42 +0300 Subject: [PATCH 109/220] Fix undefined variable type. --- class/ShMaperTrack.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class/ShMaperTrack.class.php b/class/ShMaperTrack.class.php index f5581a7..99b469f 100644 --- a/class/ShMaperTrack.class.php +++ b/class/ShMaperTrack.class.php @@ -26,7 +26,7 @@ static function shm_admin_element($html, $id, $data) if( $data['type'] == SHMAPPER_TRACKS_DRAW) { if( ShMapper::$options['map_api'] != 1 ) - return "
  • + return "
  • " . esc_html__( 'Shmapper Track exists only in Yandex map API', SHMAPPER ) . "
  • "; From 8596e34e4384ab8908b13951b11023355a79cdb2 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 27 Jul 2021 07:20:58 +0300 Subject: [PATCH 110/220] Add compatibility jQeuery 3 --- assets/js/ShMapper.admin.js | 4 ++-- assets/js/ShMapper.front.js | 2 +- assets/js/ShMapper.yandex.js | 6 +++--- assets/js/ShMapper_osm.js | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/assets/js/ShMapper.admin.js b/assets/js/ShMapper.admin.js index a3852fb..9e14c34 100644 --- a/assets/js/ShMapper.admin.js +++ b/assets/js/ShMapper.admin.js @@ -135,8 +135,8 @@ jQuery(document).ready(function($) var post_id = $this.parents("section[post_id]").attr("post_id"); var command = $this.attr("c"); var pos = $this.offset(); - console.log( $this.parents("ul.shm-card").find("li:visible").size() ); - console.log( $this.parents("ul.shm-card > li:visible") ); + // console.log( $this.parents("ul.shm-card").find("li:visible").length ); + // console.log( $this.parents("ul.shm-card > li:visible") ); console.log( num ); $(".shm-types-radio") .attr("row_id", num) diff --git a/assets/js/ShMapper.front.js b/assets/js/ShMapper.front.js index 68343f3..71919b3 100644 --- a/assets/js/ShMapper.front.js +++ b/assets/js/ShMapper.front.js @@ -5,7 +5,7 @@ jQuery(document).ready(function($) //destroy all orphan map forms $("form[form_id]").each(function(num, elem) { - if($("#"+ $(elem).attr("form_id")).size() < 1) + if($("#"+ $(elem).attr("form_id")).length < 1) $(elem).empty().append( __("Error: no map") ); }) diff --git a/assets/js/ShMapper.yandex.js b/assets/js/ShMapper.yandex.js index 426b50a..1542946 100644 --- a/assets/js/ShMapper.yandex.js +++ b/assets/js/ShMapper.yandex.js @@ -98,8 +98,8 @@ jQuery(document).ready(function($) type.val($this.attr("shm_type_id")); }) } - if($(".shm-type-icon").size()) - { + + if( $('.shm-type-icon').length ) { $(".shm-type-icon").draggable( { revert: false, @@ -453,7 +453,7 @@ jQuery(document).ready(function($) myMap.events.add('click', evt => { var $selectedMarker = $('.shm-type-icon.shmapperMarkerSelected'); - if($selectedMarker.size()) { + if( $selectedMarker.length ) { shmapperPlaceMarkerOnMap({"clientX": evt.get('domEvent').get('pageX'), "clientY": evt.get('domEvent').get('pageY') - window.scrollY}, {"helper": $selectedMarker}); } }); diff --git a/assets/js/ShMapper_osm.js b/assets/js/ShMapper_osm.js index b6a0e4e..29f0a06 100644 --- a/assets/js/ShMapper_osm.js +++ b/assets/js/ShMapper_osm.js @@ -37,7 +37,7 @@ jQuery(document).ready(function($) } }); - if($(".shm-type-icon").size()) + if ( $( '.shm-type-icon' ).length ) { L.DomEvent.on(document, 'pushing', function(ev) { @@ -174,7 +174,7 @@ jQuery(document).ready(function($) $("[name='zoom']").val( myMap.getZoom() ); var $selectedMarker = $('.shm-type-icon.shmapperMarkerSelected'); - if($selectedMarker.size()) { + if ( $selectedMarker.length ) { shmapperPlaceMarkerOnMap(evt, {"helper": $selectedMarker}); } From 9b46623bd689869abd98713d249476d8655dda8d Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 27 Jul 2021 07:24:19 +0300 Subject: [PATCH 111/220] Clean js --- assets/js/ShMapper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/ShMapper.js b/assets/js/ShMapper.js index d2a4d44..d306ffd 100644 --- a/assets/js/ShMapper.js +++ b/assets/js/ShMapper.js @@ -422,7 +422,7 @@ function shm_send( params, type ) //alert(dat); var command = dat[0]; var datas = dat[1]; - console.log(command); + switch(command) { case "test": From 3adaa2b213a963014d265169de2dee38681853ec Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 27 Jul 2021 08:05:30 +0300 Subject: [PATCH 112/220] Fix no display filter and legend. --- class/ShMapPointType.class.php | 6 +++-- tpl/shmMap.php | 43 ++++++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index d209480..56de6f1 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -301,10 +301,13 @@ static function get_ganre_swicher($params = -1, $type="checkbox", $form_factor=" } $selected = is_array($params['selected']) ? $params['selected'] : explode(",", $params['selected']); + $includes = empty($params['includes']) ? '' : $params['includes']; + $row_class = isset($params['row_class']) ? $params['row_class'] : "" ; $row_style = isset($params['row_style']) ? $params['row_style'] : ""; ; $ganres = get_terms(["taxonomy" => SHM_POINT_TYPE, 'hide_empty' => false ]); + $html = "
    +
    -
    +
    +
    -

    ". __("1.5. Will the legend be displayed?", SHMAPPER). "

    +

    ". __("1.6. Will the legend be displayed?", SHMAPPER). "

    "; switch($params['col_width']) { @@ -326,8 +329,7 @@ static function get_ganre_swicher($params = -1, $type="checkbox", $form_factor=" break; } - foreach($ganres as $ganre) - { + foreach($ganres as $ganre) { if( is_array($includes) && !in_array( $ganre->term_id, $includes ) ) continue; $icon = get_term_meta($ganre->term_id, "icon", true); diff --git a/tpl/shmMap.php b/tpl/shmMap.php index 6f4debb..33e13a0 100644 --- a/tpl/shmMap.php +++ b/tpl/shmMap.php @@ -46,9 +46,17 @@ function draw_shMap($map, $args ) $border_color = $map->get_meta( 'border_color' ); $overlay_opacity = $map->get_meta( 'overlay_opacity' ); - if( $is_legend ) - { - $include = $map->get_include_types(); + if( $is_legend ) { + + $points = $map->get_map_points(); + $include = array(); + + foreach ( $points as $point ) { + $include[] = $point->term_id; + } + + $include = array_unique( $include ); + if(is_array($include) && count($include)) { foreach($include as $term_id) @@ -74,7 +82,16 @@ function draw_shMap($map, $args ) } if( $is_filtered ) { - $includes = $map->get_include_types(); + + $points = $map->get_map_points(); + $includes = array(); + + foreach ( $points as $point ) { + $includes[] = $point->term_id; + } + + $includes = array_unique( $includes ); + $filters = ShMapPointType::get_ganre_swicher([ 'prefix' => 'filtered'.$uniq, 'row_style' => "float:right;margin-left: 5px;margin-right: 0px;", @@ -83,15 +100,15 @@ function draw_shMap($map, $args ) "col_width" => 2 ], "checkbox", "stroke" ); } else { - $filters = ''; - } - - $is_csv = $map->get_meta("is_csv"); - $csv = ""; - - if($is_csv) { - $csv = ""; - } + $filters = ''; + } + + $is_csv = $map->get_meta("is_csv"); + $csv = ""; + + if($is_csv) { + $csv = ""; + } $points = $map->get_map_points(); if($is_filtered || $is_csv) From 6915e35670daeed8710219153326d8c6e24f4386 Mon Sep 17 00:00:00 2001 From: BootWP Date: Tue, 27 Jul 2021 08:05:54 +0300 Subject: [PATCH 113/220] Update version 1.4.5 --- shmapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shmapper.php b/shmapper.php index d8983e8..cfbb54a 100644 --- a/shmapper.php +++ b/shmapper.php @@ -3,7 +3,7 @@ * Plugin Name: ShMapper by Teplitsa * Plugin URI: http://genagl.ru/?p=652 * Description: Location and logistics services for NKO - * Version: 1.4.4 + * Version: 1.4.5 * Requires at least: 5.0 * Requires PHP: 5.6 * Author: Teplitsa. Technologies for Social Good From e9b5e0d2f1a8ea8f7ec2045e3d9602a7bced6193 Mon Sep 17 00:00:00 2001 From: BootWP Date: Mon, 2 Aug 2021 10:48:23 +0300 Subject: [PATCH 114/220] Improve markers style. --- assets/css/ShMapper.css | 20 ++++++++++++++++++++ class/ShMapPointType.class.php | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/assets/css/ShMapper.css b/assets/css/ShMapper.css index c882bc1..661c730 100644 --- a/assets/css/ShMapper.css +++ b/assets/css/ShMapper.css @@ -1319,6 +1319,17 @@ tfoot .shm-notify2:after background-repeat: no-repeat; background-position:center; } + +.type-shm_point .shm_type_icon { + background-size: contain; + width: 30px; + height: 30px; + margin-right: 5px; +} +.type-shm_point .column-type { + vertical-align: middle; +} + .shm_type_icon2 { width:75px; @@ -1584,6 +1595,15 @@ input[type=radio].ganre_checkbox2:not(checked) + label img top:2px; left:2px; } + +input[type=radio].shm-marker-checkbox + label img { + object-fit: contain; + width: 30px !important; + height: 30px !important; + top: 10px !important; + left: 10px !important; +} + .shm-muffle { -webkit-filter: grayscale(90%); /* Safari 6.0 - 9.0 */ diff --git a/class/ShMapPointType.class.php b/class/ShMapPointType.class.php index 56de6f1..893721b 100644 --- a/class/ShMapPointType.class.php +++ b/class/ShMapPointType.class.php @@ -344,7 +344,7 @@ static function get_ganre_swicher($params = -1, $type="checkbox", $form_factor=" switch( $form_factor ) { case "large": - $class = "ganre_checkbox"; + $class = "ganre_checkbox shm-marker-checkbox"; $before = "
    "; $after = "
    -
    +
    +
    + +
    +

    ". __("1.4. Map title", SHMAPPER). "

    +
    +
    +
    + +
    +
    +
    -

    ". __("1.4. May User download data in *.csv?", SHMAPPER). "

    +

    ". __("1.5. May User download data in *.csv?", SHMAPPER). "

    -
    +