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 "openStreetMapGetInfo" function at the client * side. * * @see \Mibew\EventDispatcher\Events::USERS_FUNCTION_CALL */ public function usersFunctionCallHandler(&$function) { if ($function['function'] == 'openStreetMapGetInfo') { // An IP string can contain more than one IP address. For example it // can be something like this: "x.x.x.x (x.x.x.x)". We need to // use only first one. $ips = explode(' ', $function['arguments']['ip'], 2); $ip = filter_var($ips[0], FILTER_VALIDATE_IP); if (!$ip) { // There is no valid IP in the string. An error should be returned. $function['results'] = array( 'errorCode' => 1, 'errorMessage' => 'The specified IP is invalid!', ); return; } $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') { $filepath = str_replace(DIRECTORY_SEPARATOR, '/', $this->getFilesPath()); $args['js'][] = $filepath . '/vendor/jquery-colorbox/jquery.colorbox-min.js'; $args['js'][] = $filepath . '/vendor/leaflet/dist/leaflet.js'; $args['js'][] = $filepath . '/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') { $filepath = str_replace(DIRECTORY_SEPARATOR, '/', $this->getFilesPath()); $args['css'][] = $filepath . '/vendor/jquery-colorbox/example3/colorbox.css'; $args['css'][] = $filepath . '/vendor/leaflet/dist/leaflet.css'; $args['css'][] = $filepath . '/css/styles.css'; } } /** * {@inheritdoc} */ public static function getVersion() { return '0.1.0'; } /** * {@inheritdoc} */ public static function getDependencies() { return array('Mibew:GeoIp' => '1.*'); } }