mirror of
				https://github.com/Mibew/open-street-map-plugin.git
				synced 2025-10-31 18:41:12 +03:00 
			
		
		
		
	Initial commit
This commit is contained in:
		
						commit
						f51c88483e
					
				
							
								
								
									
										8
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | # Do not index node.js modules that are used for building | ||||||
|  | node_modules | ||||||
|  | 
 | ||||||
|  | # Do not index bower components | ||||||
|  | vendor | ||||||
|  | 
 | ||||||
|  | # Do not index releases | ||||||
|  | release | ||||||
							
								
								
									
										202
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,202 @@ | |||||||
|  | 
 | ||||||
|  |                                  Apache License | ||||||
|  |                            Version 2.0, January 2004 | ||||||
|  |                         http://www.apache.org/licenses/ | ||||||
|  | 
 | ||||||
|  |    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||||||
|  | 
 | ||||||
|  |    1. Definitions. | ||||||
|  | 
 | ||||||
|  |       "License" shall mean the terms and conditions for use, reproduction, | ||||||
|  |       and distribution as defined by Sections 1 through 9 of this document. | ||||||
|  | 
 | ||||||
|  |       "Licensor" shall mean the copyright owner or entity authorized by | ||||||
|  |       the copyright owner that is granting the License. | ||||||
|  | 
 | ||||||
|  |       "Legal Entity" shall mean the union of the acting entity and all | ||||||
|  |       other entities that control, are controlled by, or are under common | ||||||
|  |       control with that entity. For the purposes of this definition, | ||||||
|  |       "control" means (i) the power, direct or indirect, to cause the | ||||||
|  |       direction or management of such entity, whether by contract or | ||||||
|  |       otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||||||
|  |       outstanding shares, or (iii) beneficial ownership of such entity. | ||||||
|  | 
 | ||||||
|  |       "You" (or "Your") shall mean an individual or Legal Entity | ||||||
|  |       exercising permissions granted by this License. | ||||||
|  | 
 | ||||||
|  |       "Source" form shall mean the preferred form for making modifications, | ||||||
|  |       including but not limited to software source code, documentation | ||||||
|  |       source, and configuration files. | ||||||
|  | 
 | ||||||
|  |       "Object" form shall mean any form resulting from mechanical | ||||||
|  |       transformation or translation of a Source form, including but | ||||||
|  |       not limited to compiled object code, generated documentation, | ||||||
|  |       and conversions to other media types. | ||||||
|  | 
 | ||||||
|  |       "Work" shall mean the work of authorship, whether in Source or | ||||||
|  |       Object form, made available under the License, as indicated by a | ||||||
|  |       copyright notice that is included in or attached to the work | ||||||
|  |       (an example is provided in the Appendix below). | ||||||
|  | 
 | ||||||
|  |       "Derivative Works" shall mean any work, whether in Source or Object | ||||||
|  |       form, that is based on (or derived from) the Work and for which the | ||||||
|  |       editorial revisions, annotations, elaborations, or other modifications | ||||||
|  |       represent, as a whole, an original work of authorship. For the purposes | ||||||
|  |       of this License, Derivative Works shall not include works that remain | ||||||
|  |       separable from, or merely link (or bind by name) to the interfaces of, | ||||||
|  |       the Work and Derivative Works thereof. | ||||||
|  | 
 | ||||||
|  |       "Contribution" shall mean any work of authorship, including | ||||||
|  |       the original version of the Work and any modifications or additions | ||||||
|  |       to that Work or Derivative Works thereof, that is intentionally | ||||||
|  |       submitted to Licensor for inclusion in the Work by the copyright owner | ||||||
|  |       or by an individual or Legal Entity authorized to submit on behalf of | ||||||
|  |       the copyright owner. For the purposes of this definition, "submitted" | ||||||
|  |       means any form of electronic, verbal, or written communication sent | ||||||
|  |       to the Licensor or its representatives, including but not limited to | ||||||
|  |       communication on electronic mailing lists, source code control systems, | ||||||
|  |       and issue tracking systems that are managed by, or on behalf of, the | ||||||
|  |       Licensor for the purpose of discussing and improving the Work, but | ||||||
|  |       excluding communication that is conspicuously marked or otherwise | ||||||
|  |       designated in writing by the copyright owner as "Not a Contribution." | ||||||
|  | 
 | ||||||
|  |       "Contributor" shall mean Licensor and any individual or Legal Entity | ||||||
|  |       on behalf of whom a Contribution has been received by Licensor and | ||||||
|  |       subsequently incorporated within the Work. | ||||||
|  | 
 | ||||||
|  |    2. Grant of Copyright License. Subject to the terms and conditions of | ||||||
|  |       this License, each Contributor hereby grants to You a perpetual, | ||||||
|  |       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||||
|  |       copyright license to reproduce, prepare Derivative Works of, | ||||||
|  |       publicly display, publicly perform, sublicense, and distribute the | ||||||
|  |       Work and such Derivative Works in Source or Object form. | ||||||
|  | 
 | ||||||
|  |    3. Grant of Patent License. Subject to the terms and conditions of | ||||||
|  |       this License, each Contributor hereby grants to You a perpetual, | ||||||
|  |       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||||
|  |       (except as stated in this section) patent license to make, have made, | ||||||
|  |       use, offer to sell, sell, import, and otherwise transfer the Work, | ||||||
|  |       where such license applies only to those patent claims licensable | ||||||
|  |       by such Contributor that are necessarily infringed by their | ||||||
|  |       Contribution(s) alone or by combination of their Contribution(s) | ||||||
|  |       with the Work to which such Contribution(s) was submitted. If You | ||||||
|  |       institute patent litigation against any entity (including a | ||||||
|  |       cross-claim or counterclaim in a lawsuit) alleging that the Work | ||||||
|  |       or a Contribution incorporated within the Work constitutes direct | ||||||
|  |       or contributory patent infringement, then any patent licenses | ||||||
|  |       granted to You under this License for that Work shall terminate | ||||||
|  |       as of the date such litigation is filed. | ||||||
|  | 
 | ||||||
|  |    4. Redistribution. You may reproduce and distribute copies of the | ||||||
|  |       Work or Derivative Works thereof in any medium, with or without | ||||||
|  |       modifications, and in Source or Object form, provided that You | ||||||
|  |       meet the following conditions: | ||||||
|  | 
 | ||||||
|  |       (a) You must give any other recipients of the Work or | ||||||
|  |           Derivative Works a copy of this License; and | ||||||
|  | 
 | ||||||
|  |       (b) You must cause any modified files to carry prominent notices | ||||||
|  |           stating that You changed the files; and | ||||||
|  | 
 | ||||||
|  |       (c) You must retain, in the Source form of any Derivative Works | ||||||
|  |           that You distribute, all copyright, patent, trademark, and | ||||||
|  |           attribution notices from the Source form of the Work, | ||||||
|  |           excluding those notices that do not pertain to any part of | ||||||
|  |           the Derivative Works; and | ||||||
|  | 
 | ||||||
|  |       (d) If the Work includes a "NOTICE" text file as part of its | ||||||
|  |           distribution, then any Derivative Works that You distribute must | ||||||
|  |           include a readable copy of the attribution notices contained | ||||||
|  |           within such NOTICE file, excluding those notices that do not | ||||||
|  |           pertain to any part of the Derivative Works, in at least one | ||||||
|  |           of the following places: within a NOTICE text file distributed | ||||||
|  |           as part of the Derivative Works; within the Source form or | ||||||
|  |           documentation, if provided along with the Derivative Works; or, | ||||||
|  |           within a display generated by the Derivative Works, if and | ||||||
|  |           wherever such third-party notices normally appear. The contents | ||||||
|  |           of the NOTICE file are for informational purposes only and | ||||||
|  |           do not modify the License. You may add Your own attribution | ||||||
|  |           notices within Derivative Works that You distribute, alongside | ||||||
|  |           or as an addendum to the NOTICE text from the Work, provided | ||||||
|  |           that such additional attribution notices cannot be construed | ||||||
|  |           as modifying the License. | ||||||
|  | 
 | ||||||
|  |       You may add Your own copyright statement to Your modifications and | ||||||
|  |       may provide additional or different license terms and conditions | ||||||
|  |       for use, reproduction, or distribution of Your modifications, or | ||||||
|  |       for any such Derivative Works as a whole, provided Your use, | ||||||
|  |       reproduction, and distribution of the Work otherwise complies with | ||||||
|  |       the conditions stated in this License. | ||||||
|  | 
 | ||||||
|  |    5. Submission of Contributions. Unless You explicitly state otherwise, | ||||||
|  |       any Contribution intentionally submitted for inclusion in the Work | ||||||
|  |       by You to the Licensor shall be under the terms and conditions of | ||||||
|  |       this License, without any additional terms or conditions. | ||||||
|  |       Notwithstanding the above, nothing herein shall supersede or modify | ||||||
|  |       the terms of any separate license agreement you may have executed | ||||||
|  |       with Licensor regarding such Contributions. | ||||||
|  | 
 | ||||||
|  |    6. Trademarks. This License does not grant permission to use the trade | ||||||
|  |       names, trademarks, service marks, or product names of the Licensor, | ||||||
|  |       except as required for reasonable and customary use in describing the | ||||||
|  |       origin of the Work and reproducing the content of the NOTICE file. | ||||||
|  | 
 | ||||||
|  |    7. Disclaimer of Warranty. Unless required by applicable law or | ||||||
|  |       agreed to in writing, Licensor provides the Work (and each | ||||||
|  |       Contributor provides its Contributions) on an "AS IS" BASIS, | ||||||
|  |       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||||||
|  |       implied, including, without limitation, any warranties or conditions | ||||||
|  |       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||||||
|  |       PARTICULAR PURPOSE. You are solely responsible for determining the | ||||||
|  |       appropriateness of using or redistributing the Work and assume any | ||||||
|  |       risks associated with Your exercise of permissions under this License. | ||||||
|  | 
 | ||||||
|  |    8. Limitation of Liability. In no event and under no legal theory, | ||||||
|  |       whether in tort (including negligence), contract, or otherwise, | ||||||
|  |       unless required by applicable law (such as deliberate and grossly | ||||||
|  |       negligent acts) or agreed to in writing, shall any Contributor be | ||||||
|  |       liable to You for damages, including any direct, indirect, special, | ||||||
|  |       incidental, or consequential damages of any character arising as a | ||||||
|  |       result of this License or out of the use or inability to use the | ||||||
|  |       Work (including but not limited to damages for loss of goodwill, | ||||||
|  |       work stoppage, computer failure or malfunction, or any and all | ||||||
|  |       other commercial damages or losses), even if such Contributor | ||||||
|  |       has been advised of the possibility of such damages. | ||||||
|  | 
 | ||||||
|  |    9. Accepting Warranty or Additional Liability. While redistributing | ||||||
|  |       the Work or Derivative Works thereof, You may choose to offer, | ||||||
|  |       and charge a fee for, acceptance of support, warranty, indemnity, | ||||||
|  |       or other liability obligations and/or rights consistent with this | ||||||
|  |       License. However, in accepting such obligations, You may act only | ||||||
|  |       on Your own behalf and on Your sole responsibility, not on behalf | ||||||
|  |       of any other Contributor, and only if You agree to indemnify, | ||||||
|  |       defend, and hold each Contributor harmless for any liability | ||||||
|  |       incurred by, or claims asserted against, such Contributor by reason | ||||||
|  |       of your accepting any such warranty or additional liability. | ||||||
|  | 
 | ||||||
|  |    END OF TERMS AND CONDITIONS | ||||||
|  | 
 | ||||||
|  |    APPENDIX: How to apply the Apache License to your work. | ||||||
|  | 
 | ||||||
|  |       To apply the Apache License to your work, attach the following | ||||||
|  |       boilerplate notice, with the fields enclosed by brackets "[]" | ||||||
|  |       replaced with your own identifying information. (Don't include | ||||||
|  |       the brackets!)  The text should be enclosed in the appropriate | ||||||
|  |       comment syntax for the file format. We also recommend that a | ||||||
|  |       file or class name and description of purpose be included on the | ||||||
|  |       same "printed page" as the copyright notice for easier | ||||||
|  |       identification within third-party archives. | ||||||
|  | 
 | ||||||
|  |    Copyright [yyyy] [name of copyright owner] | ||||||
|  | 
 | ||||||
|  |    Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |    you may not use this file except in compliance with the License. | ||||||
|  |    You may obtain a copy of the License at | ||||||
|  | 
 | ||||||
|  |        http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | 
 | ||||||
|  |    Unless required by applicable law or agreed to in writing, software | ||||||
|  |    distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |    See the License for the specific language governing permissions and | ||||||
|  |    limitations under the License. | ||||||
							
								
								
									
										171
									
								
								Plugin.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								Plugin.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,171 @@ | |||||||
|  | <?php | ||||||
|  | /* | ||||||
|  |  * This file is a part of Mibew Google Maps Plugin. | ||||||
|  |  * | ||||||
|  |  * Copyright 2014 Dmitriy Simushev <simushevds@gmail.com>. | ||||||
|  |  * | ||||||
|  |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * | ||||||
|  |  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  * | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @file The main file of Mibew:GoogleMaps plugin. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace Mibew\Mibew\Plugin\GoogleMaps; | ||||||
|  | 
 | ||||||
|  | use Mibew\Asset\AssetManagerInterface; | ||||||
|  | use Mibew\EventDispatcher\EventDispatcher; | ||||||
|  | use Mibew\EventDispatcher\Events; | ||||||
|  | use Mibew\Plugin\PluginManager; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Provides an ability to view visitors at Google Maps. | ||||||
|  |  */ | ||||||
|  | class Plugin extends \Mibew\Plugin\AbstractPlugin implements \Mibew\Plugin\PluginInterface | ||||||
|  | { | ||||||
|  |     /** | ||||||
|  |      * Class constructor. | ||||||
|  |      * | ||||||
|  |      * @param array $config List of the plugin config. The following options are | ||||||
|  |      * supported: | ||||||
|  |      *   - 'api_key': string, Google Maps API key that should be used to render | ||||||
|  |      *     maps. | ||||||
|  |      */ | ||||||
|  |     public function __construct($config) | ||||||
|  |     { | ||||||
|  |         if (empty($config['api_key'])) { | ||||||
|  |             trigger_error('Google API key cannot be empty', E_USER_WARNING); | ||||||
|  | 
 | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         parent::__construct($config); | ||||||
|  | 
 | ||||||
|  |         $this->initialized = true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Defines necessary event listeners. | ||||||
|  |      */ | ||||||
|  |     public function run() | ||||||
|  |     { | ||||||
|  |         $dispatcher = EventDispatcher::getInstance(); | ||||||
|  |         $dispatcher->attachListener(Events::USERS_FUNCTION_CALL, $this, 'usersFunctionCallHandler'); | ||||||
|  |         $dispatcher->attachListener(Events::PAGE_ADD_JS, $this, 'pageAddJsHandler'); | ||||||
|  |         $dispatcher->attachListener(Events::PAGE_ADD_CSS, $this, 'pageAddCssHandler'); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * A handler for {@link \Mibew\EventDispatcher\Events::USERS_FUNCTION_CALL}. | ||||||
|  |      * | ||||||
|  |      * Provides an ability to use "googleMapsGetInfo" function at the client | ||||||
|  |      * side. | ||||||
|  |      * | ||||||
|  |      * @see \Mibew\EventDispatcher\Events::USERS_FUNCTION_CALL | ||||||
|  |      */ | ||||||
|  |     public function usersFunctionCallHandler(&$function) | ||||||
|  |     { | ||||||
|  |         if ($function['function'] == 'googleMapsGetInfo') { | ||||||
|  |             // An IP string can contain more than one IP adress. For example it
 | ||||||
|  |             // can be something like this: "x.x.x.x (x.x.x.x)". Thus we need to
 | ||||||
|  |             // extract all IPS from the string and use the last one.
 | ||||||
|  |             $count = preg_match_all( | ||||||
|  |                 "/(?:(?:[0-9]{1,3}\.){3}[0-9]{1,3})/", | ||||||
|  |                 $function['arguments']['ip'], | ||||||
|  |                 $matches | ||||||
|  |             ); | ||||||
|  |             if (!$count) { | ||||||
|  |                 // There is no IP in the string. An error should be returned.
 | ||||||
|  |                 $function['results'] = array( | ||||||
|  |                     'errorCode' => 1, | ||||||
|  |                     'errorMessage' => 'The specified IP is invalid!', | ||||||
|  |                 ); | ||||||
|  | 
 | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             $ip = end($matches[0]); | ||||||
|  |             $info = PluginManager::getInstance() | ||||||
|  |                 ->getPlugin('Mibew:GeoIp') | ||||||
|  |                 ->getGeoInfo($ip, get_current_locale()); | ||||||
|  | 
 | ||||||
|  |             $function['results'] = array( | ||||||
|  |                 'country' => $info['country_name'] ?: '', | ||||||
|  |                 'city' => $info['city'] ?: '', | ||||||
|  |                 'latitude' => $info['latitude'], | ||||||
|  |                 'longitude' => $info['longitude'], | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Adds custom JS files to the page. | ||||||
|  |      * | ||||||
|  |      * @see \Mibew\EventDispatcher\Events::PAGE_ADD_JS | ||||||
|  |      */ | ||||||
|  |     public function pageAddJsHandler(&$args) | ||||||
|  |     { | ||||||
|  |         if ($args['request']->attributes->get('_route') == 'users') { | ||||||
|  |             $args['js'][] = $this->getFilesPath() . '/vendor/jquery-colorbox/jquery.colorbox-min.js'; | ||||||
|  |             $args['js'][] = array( | ||||||
|  |                 'content' => $this->getApiUrl(), | ||||||
|  |                 'type' => AssetManagerInterface::ABSOLUTE_URL, | ||||||
|  |             ); | ||||||
|  |             $args['js'][] = $this->getFilesPath() . '/js/plugin.js'; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Adds custom CSS files to the page. | ||||||
|  |      * | ||||||
|  |      * @see \Mibew\EventDispatcher\Events::PAGE_ADD_CSS | ||||||
|  |      */ | ||||||
|  |     public function pageAddCssHandler(&$args) | ||||||
|  |     { | ||||||
|  |         if ($args['request']->attributes->get('_route') == 'users') { | ||||||
|  |             $args['css'][] = $this->getFilesPath() . '/vendor/jquery-colorbox/example3/colorbox.css'; | ||||||
|  |             $args['css'][] = $this->getFilesPath() . '/css/styles.css'; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * {@inheritdoc} | ||||||
|  |      */ | ||||||
|  |     public static function getVersion() | ||||||
|  |     { | ||||||
|  |         return '1.0.0'; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * {@inheritdoc} | ||||||
|  |      */ | ||||||
|  |     public static function getDependencies() | ||||||
|  |     { | ||||||
|  |         return array('Mibew:GeoIp' => '1.*'); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Builds URL for Google Maps API. | ||||||
|  |      * | ||||||
|  |      * @return string API URL | ||||||
|  |      * @throws \RuntimeException if API key was not set correctly. | ||||||
|  |      */ | ||||||
|  |     protected function getApiUrl() | ||||||
|  |     { | ||||||
|  |         if (empty($this->config['api_key'])) { | ||||||
|  |             throw new \RuntimeException('Google API key cannot be empty'); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         return 'http://maps.googleapis.com/maps/api/js?key=' | ||||||
|  |             . $this->config['api_key'] | ||||||
|  |             . '&sensor=false'; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										50
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | # Google Maps plugin | ||||||
|  | 
 | ||||||
|  | It shows your clients' location at Google maps! | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Installation | ||||||
|  | 
 | ||||||
|  | 1. Get the archive with the plugin sources. At the moment the only option is to build the plugin from sources. | ||||||
|  | 
 | ||||||
|  | 2. Untar/unzip the plugin's archive. | ||||||
|  | 
 | ||||||
|  | 3. Put files of the plugins to the `<Mibew root>/plugins`  folder. | ||||||
|  | 
 | ||||||
|  | 4. Add plugins configs to "plugins" structure in "`<Mibew root>`/configs/config.yml". If the "plugins" stucture looks like `plugins: []` it will become: | ||||||
|  |     ```yaml | ||||||
|  |     plugins: | ||||||
|  |         "Mibew:GoogleMaps": # Plugin's configurations are described below | ||||||
|  |             api_key: "secret API key provided by Google" | ||||||
|  |     ``` | ||||||
|  | 
 | ||||||
|  | 5. Navigate to "`<Mibew Base URL>`/operator/plugin" page and enable the plugin. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Plugin's configurations | ||||||
|  | 
 | ||||||
|  | The plugin can be configured with values in "`<Mibew root>`/configs/config.yml" file. | ||||||
|  | 
 | ||||||
|  | ### config.api_key | ||||||
|  | 
 | ||||||
|  | Type: `String` | ||||||
|  | 
 | ||||||
|  | Google Maps API key that will be used to render maps. You can learn how to get the key [here](https://developers.google.com/maps/documentation/javascript/tutorial#api_key). | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Build from sources | ||||||
|  | 
 | ||||||
|  | There are several actions one should do before use the latest version of the plugin from the repository: | ||||||
|  | 
 | ||||||
|  | 1. Obtain a copy of the repository using `git clone`, download button, or another way. | ||||||
|  | 2. Install [node.js](http://nodejs.org/) and [npm](https://www.npmjs.org/). | ||||||
|  | 3. Install [Gulp](http://gulpjs.com/). | ||||||
|  | 4. Install npm dependencies using `npm install`. | ||||||
|  | 5. Run Gulp to build the sources using `gulp default`. | ||||||
|  | 
 | ||||||
|  | Finally `.tar.gz` and `.zip` archives of the ready-to-use Plugin will be available in `release` directory. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## License | ||||||
|  | 
 | ||||||
|  | [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.html) | ||||||
							
								
								
									
										7
									
								
								bower.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								bower.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | { | ||||||
|  |     "name": "google-maps-plugin", | ||||||
|  |     "private": true, | ||||||
|  |     "dependencies": { | ||||||
|  |         "jquery-colorbox": "~1.5.14" | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										28
									
								
								css/styles.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								css/styles.css
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | /* | ||||||
|  |  * This file is a part of Mibew Google Maps Plugin. | ||||||
|  |  * | ||||||
|  |  * Copyright 2014 Dmitriy Simushev <simushevds@gmail.com>. | ||||||
|  |  * | ||||||
|  |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * | ||||||
|  |  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  * | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /* Colorbox customization */ | ||||||
|  | #cboxLoadedContent { | ||||||
|  |     padding: 20px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Map's sizes must be set explicitly */ | ||||||
|  | #map-canvas { | ||||||
|  |     width: 640px; | ||||||
|  |     height: 480px; | ||||||
|  | } | ||||||
							
								
								
									
										61
									
								
								gulpfile.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								gulpfile.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | |||||||
|  | var bower = require('bower'), | ||||||
|  |     eventStream = require('event-stream'), | ||||||
|  |     gulp = require('gulp'), | ||||||
|  |     chmod = require('gulp-chmod'), | ||||||
|  |     zip = require('gulp-zip'), | ||||||
|  |     tar = require('gulp-tar'), | ||||||
|  |     gzip = require('gulp-gzip'), | ||||||
|  |     rename = require('gulp-rename'); | ||||||
|  | 
 | ||||||
|  | // Installs bower dependencies
 | ||||||
|  | gulp.task('bower', function(callback) { | ||||||
|  |     bower.commands.install([], {}, {}) | ||||||
|  |         .on('error', function(error) { | ||||||
|  |             callback(error); | ||||||
|  |         }) | ||||||
|  |         .on('end', function() { | ||||||
|  |             callback(); | ||||||
|  |         }); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | gulp.task('prepare-release', ['bower'], function() { | ||||||
|  |     var version = require('./package.json').version; | ||||||
|  | 
 | ||||||
|  |     return eventStream.merge( | ||||||
|  |         getSources() | ||||||
|  |             .pipe(zip('google-maps-plugin-' + version + '.zip')), | ||||||
|  |         getSources() | ||||||
|  |             .pipe(tar('google-maps-plugin-' + version + '.tar')) | ||||||
|  |             .pipe(gzip()) | ||||||
|  |     ) | ||||||
|  |     .pipe(chmod(0644)) | ||||||
|  |     .pipe(gulp.dest('release')); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | // Builds and packs plugins sources
 | ||||||
|  | gulp.task('default', ['prepare-release'], function() { | ||||||
|  |     // The "default" task is just an alias for "prepare-release" task.
 | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Returns files stream with the plugin sources. | ||||||
|  |  * | ||||||
|  |  * @returns {Object} Stream with VinylFS files. | ||||||
|  |  */ | ||||||
|  | var getSources = function() { | ||||||
|  |     return gulp.src([ | ||||||
|  |             'Plugin.php', | ||||||
|  |             'README.md', | ||||||
|  |             'LICENSE', | ||||||
|  |             'js/*', | ||||||
|  |             'css/*', | ||||||
|  |             'vendor/jquery-colorbox/README.md', | ||||||
|  |             'vendor/jquery-colorbox/jquery.colorbox-min.js', | ||||||
|  |             'vendor/jquery-colorbox/example3/**/*' | ||||||
|  |         ], | ||||||
|  |         {base: './'} | ||||||
|  |     ) | ||||||
|  |     .pipe(rename(function(path) { | ||||||
|  |         path.dirname = 'Mibew/Mibew/Plugin/GoogleMaps/' + path.dirname; | ||||||
|  |     })); | ||||||
|  | } | ||||||
							
								
								
									
										129
									
								
								js/plugin.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								js/plugin.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,129 @@ | |||||||
|  | /*! | ||||||
|  |  * This file is a part of Mibew Google Maps Plugin. | ||||||
|  |  * | ||||||
|  |  * Copyright 2014 Dmitriy Simushev <simushevds@gmail.com>. | ||||||
|  |  * | ||||||
|  |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * | ||||||
|  |  *     http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  |  * | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | (function (Mibew, $, google) { | ||||||
|  |     /** | ||||||
|  |      * Display popup with a map and a marker on it. | ||||||
|  |      * | ||||||
|  |      * @param {String} country Name of the country. It will be used in the | ||||||
|  |      * marker's title. | ||||||
|  |      * @param {String} city Name of the city. It will be used in the marker's | ||||||
|  |      * title. | ||||||
|  |      * @param {Number} latitude Latitude of the point the marker should be | ||||||
|  |      * placed. | ||||||
|  |      * @param {Number} longitude Longitude of the point the marker should be | ||||||
|  |      * placed. | ||||||
|  |      */ | ||||||
|  |     var showMap = function (country, city, latitude, longitude) { | ||||||
|  |         var $canvas = $('<div id="map-canvas"></div>'); | ||||||
|  | 
 | ||||||
|  |         $.colorbox({ | ||||||
|  |             html: $canvas, | ||||||
|  |             onComplete: function() { | ||||||
|  |                 var position = new google.maps.LatLng(latitude, longitude), | ||||||
|  |                     map = new google.maps.Map($canvas.get(0), { | ||||||
|  |                         center: position, | ||||||
|  |                         zoom: (city ? 8 : 6), | ||||||
|  |                         mapTypeId: google.maps.MapTypeId.ROADMAP | ||||||
|  |                     }), | ||||||
|  |                     marker = new google.maps.Marker({ | ||||||
|  |                         map: map, | ||||||
|  |                         position: position, | ||||||
|  |                         title: city ? (city + ' (' + country + ')') : country | ||||||
|  |                     }); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Makes all necessary actions to get Geo info and show it on the map. | ||||||
|  |      * | ||||||
|  |      * This is a replacement for Mibew.Views.QueuedThread.prototype.showGeoInfo | ||||||
|  |      * and Mibew.Views.Visitor.prototype.showGeoInfo methods. | ||||||
|  |      */ | ||||||
|  |     var showGeoInfo = function() { | ||||||
|  |         var ip = this.model.get('userIp'), | ||||||
|  |             agentId = Mibew.Objects.Models.agent.get('id'), | ||||||
|  |             server = Mibew.Objects.server; | ||||||
|  | 
 | ||||||
|  |         if (ip) { | ||||||
|  |             server.callFunctions( | ||||||
|  |                 [{ | ||||||
|  |                     'function': 'googleMapsGetInfo', | ||||||
|  |                     'arguments': { | ||||||
|  |                         'agentId': agentId, | ||||||
|  |                         'ip': ip, | ||||||
|  |                         'return': { | ||||||
|  |                             'country': 'country', | ||||||
|  |                             'city': 'city', | ||||||
|  |                             'latitude': 'latitude', | ||||||
|  |                             'longitude': 'longitude' | ||||||
|  |                         }, | ||||||
|  |                         'references': {} | ||||||
|  |                     } | ||||||
|  |                 }], | ||||||
|  |                 function (args) { | ||||||
|  |                     // Make sure there is enough data to display the map
 | ||||||
|  |                     if (!args.errorCode) { | ||||||
|  |                         showMap(args.country, args.city, args.latitude, args.longitude); | ||||||
|  |                     } | ||||||
|  |                 }, | ||||||
|  |                 true | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * This is a temporary copy of Mibew.Views.QueuedThread which will be used | ||||||
|  |      * for extending it. | ||||||
|  |      */ | ||||||
|  |     var baseThreadView = Mibew.Views.QueuedThread; | ||||||
|  | 
 | ||||||
|  |     Mibew.Views.QueuedThread = baseThreadView.extend( | ||||||
|  |         /** @lends Mibew.Views.QueuedThread.prototype */ | ||||||
|  |         { | ||||||
|  |             /** | ||||||
|  |              * Open window with geo information | ||||||
|  |              * | ||||||
|  |              * This method overrides | ||||||
|  |              * Mibew.Views.QueuedThread.prototype.showGeoInfo method. | ||||||
|  |              */ | ||||||
|  |             showGeoInfo: showGeoInfo | ||||||
|  |         } | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * This is a temporary copy of Mibew.Views.Visitor which will be used for | ||||||
|  |      * extending it. | ||||||
|  |      */ | ||||||
|  |     var baseVisitorView = Mibew.Views.Visitor; | ||||||
|  | 
 | ||||||
|  |     Mibew.Views.Visitor = baseVisitorView.extend( | ||||||
|  |         /** @lends Mibew.Views.Visitor.prototype */ | ||||||
|  |         { | ||||||
|  |             /** | ||||||
|  |              * Open window with geo information. | ||||||
|  |              * | ||||||
|  |              * This method overrides Mibew.Views.Visitor.prototype.showGeoInfo | ||||||
|  |              * method. | ||||||
|  |              */ | ||||||
|  |             showGeoInfo: showGeoInfo | ||||||
|  |         } | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  | })(Mibew, jQuery, google); | ||||||
							
								
								
									
										15
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | { | ||||||
|  |     "name": "google-maps-plugin", | ||||||
|  |     "version": "1.0.0", | ||||||
|  |     "private": true, | ||||||
|  |     "devDependencies": { | ||||||
|  |         "bower": "~1.3.12", | ||||||
|  |         "gulp": "~3.8.10", | ||||||
|  |         "event-stream": "~3.1.7", | ||||||
|  |         "gulp-zip": "~2.0.2", | ||||||
|  |         "gulp-tar": "~1.3.1", | ||||||
|  |         "gulp-gzip": "~0.0.8", | ||||||
|  |         "gulp-chmod": "~1.2.0", | ||||||
|  |         "gulp-rename": "~1.2.0" | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user