123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- <?php
- /* For licensing terms, see /license.txt */
- /**
- * @package chamilo.social
- *
- * @author Julio Montoya <gugli100@gmail.com>
- */
- $cidReset = true;
- require_once __DIR__.'/../inc/global.inc.php';
- api_block_anonymous_users();
- $fields = api_get_configuration_value('allow_social_map_fields');
- if (!$fields) {
- api_not_allowed(true);
- }
- $fields = isset($fields['fields']) ? $fields['fields'] : '';
- if (empty($fields)) {
- api_not_allowed(true);
- }
- $extraField = new ExtraField('user');
- $infoStage = $extraField->get_handler_field_info_by_field_variable($fields['0']);
- $infoVille = $extraField->get_handler_field_info_by_field_variable($fields['1']);
- if (empty($infoStage) || empty($infoVille)) {
- api_not_allowed(true);
- }
- $gMapsPlugin = GoogleMapsPlugin::create();
- $localization = $gMapsPlugin->get('enable_api') === 'true';
- if ($localization) {
- $apiKey = $gMapsPlugin->get('api_key');
- if (empty($apiKey)) {
- api_not_allowed(true);
- }
- } else {
- api_not_allowed(true);
- }
- $tableUser = Database::get_main_table(TABLE_MAIN_USER);
- $sql = "SELECT u.id, firstname, lastname, ev.value ville, ev2.value stage
- FROM $tableUser u
- INNER JOIN extra_field_values ev
- ON ev.item_id = u.id
- INNER JOIN extra_field_values ev2
- ON ev2.item_id = u.id
- WHERE
- ev.field_id = ".$infoStage['id']." AND
- ev2.field_id = ".$infoVille['id']." AND
- u.status = ".STUDENT." AND
- u.active = 1 AND
- (ev.value <> '' OR ev2.value <> '') AND
- (ev.value LIKE '%::%' OR ev2.value LIKE '%::%')
- ";
- $cacheDriver = new \Doctrine\Common\Cache\ApcuCache();
- $keyDate = 'map_cache_date';
- $keyData = 'map_cache_data';
- $now = time();
- // Refresh cache every day
- //$tomorrow = strtotime('+1 day', $now);
- $tomorrow = strtotime('+5 minute', $now);
- $loadFromDatabase = true;
- if ($cacheDriver->contains($keyData) && $cacheDriver->contains($keyDate)) {
- $savedDate = $cacheDriver->fetch($keyDate);
- $loadFromDatabase = false;
- if ($savedDate < $now) {
- $loadFromDatabase = true;
- }
- }
- $loadFromDatabase = true;
- if ($loadFromDatabase) {
- $result = Database::query($sql);
- $data = Database::store_result($result, 'ASSOC');
- $cacheDriver->save($keyData, $data);
- $cacheDriver->save($keyDate, $tomorrow);
- } else {
- $data = $cacheDriver->fetch($keyData);
- }
- foreach ($data as &$result) {
- // Clean process is made in twig with escape('js')
- $result['complete_name'] = $result['firstname'].' '.$result['lastname'];
- $result['lastname'] = '';
- $result['firstname'] = '';
- $parts = explode('::', $result['ville']);
- if (isset($parts[1]) && !empty($parts[1])) {
- $parts2 = explode(',', $parts[1]);
- $result['ville_lat'] = $parts2[0];
- $result['ville_long'] = $parts2[1];
- unset($result['ville']);
- }
- $parts = explode('::', $result['stage']);
- if (isset($parts[1]) && !empty($parts[1])) {
- $parts2 = explode(',', $parts[1]);
- $result['stage_lat'] = $parts2[0];
- $result['stage_long'] = $parts2[1];
- unset($result['stage']);
- }
- }
- $htmlHeadXtra[] = '<script type="text/javascript" src="'.api_get_path(WEB_LIBRARY_JS_PATH).'map/markerclusterer.js"></script>';
- $htmlHeadXtra[] = '<script type="text/javascript" src="'.api_get_path(WEB_LIBRARY_JS_PATH).'map/oms.min.js"></script>';
- $tpl = new Template(null);
- $tpl->assign('url', api_get_path(WEB_CODE_PATH).'social/profile.php');
- $tpl->assign(
- 'image_city',
- Display::return_icon(
- 'red-dot.png',
- '',
- [],
- ICON_SIZE_SMALL,
- false,
- true
- )
- );
- $tpl->assign(
- 'image_stage',
- Display::return_icon(
- 'blue-dot.png',
- '',
- [],
- ICON_SIZE_SMALL,
- false,
- true
- )
- );
- $tpl->assign('places', json_encode($data));
- $tpl->assign('api_key', $apiKey);
- $tpl->assign('field_1', $infoStage['display_text']);
- $tpl->assign('field_2', $infoVille['display_text']);
- $layout = $tpl->get_template('social/map.tpl');
- $tpl->display($layout);
|