function _getlocations_get_icondata in Get Locations 7
Same name and namespace in other branches
- 6.2 getlocations.markerinfo.inc \_getlocations_get_icondata()
- 6 getlocations.markerinfo.inc \_getlocations_get_icondata()
- 7.2 getlocations.markerinfo.inc \_getlocations_get_icondata()
Get marker icon data for constructing json object.
1 call to _getlocations_get_icondata()
- getlocations_get_icondata in ./
getlocations.module - Get the JSON icon data for all the default markers. adapted from gmap
File
- ./
getlocations.markerinfo.inc, line 22 - getlocations.markerinfo.inc @author Bob Hutchinson http://drupal.org/user/52366 @copyright GNU GPL
Code
function _getlocations_get_icondata() {
$icons = array();
$imagetypes = array(
'shadow',
);
$inis = array();
$markerdirs = module_invoke_all('getlocations_markerdir');
if (count($markerdirs) < 1) {
return FALSE;
}
foreach ($markerdirs as $i => $markerdir) {
// The following routines are designed to be easy to comprehend, not fast.
// This whole process gets cached.
// Get the ini files.
$inifiles = file_scan_directory($markerdir, '/.*\\.ini$/');
// Parse the ini files and store by path
foreach ($inifiles as $file) {
$path = drupal_substr($file->uri, drupal_strlen($markerdir), -drupal_strlen($file->filename));
if (!isset($inis[$markerdir . $path])) {
$inis[$path] = array();
}
$inis[$markerdir . $path][] = parse_ini_file($file->uri, TRUE);
}
unset($inifiles);
}
if (count($inis) < 1) {
return FALSE;
}
// Per directory..
foreach ($inis as $path => $path_inis) {
$icons[$path] = array(
'tempf' => array(),
'f' => array(),
'w' => array(),
'h' => array(),
'i' => array(),
);
// Part 1: Collect image names
$filenames = array();
foreach ($path_inis as $ini) {
foreach ($ini as $k => $v) {
// Is this definition for an icon? (anything with a dot is a file)
if (strpos($k, '.') !== FALSE) {
// Add the icon name.
$filenames[$k] = TRUE;
}
else {
// Shadow / alternate search
foreach ($imagetypes as $check) {
if (isset($v[$check])) {
$filenames[$v[$check]] = TRUE;
}
}
// A sequence is a list of image names.
if (isset($v['sequence'])) {
foreach (explode(',', $v['sequence']) as $f) {
$filenames[trim($f)] = TRUE;
}
}
}
}
}
$icons[$path]['tempf'] = $filenames;
}
unset($filenames);
// Part 2: Assign ids, get width and height
foreach ($icons as $path => $v) {
$counter = 0;
foreach ($icons[$path]['tempf'] as $filename => $fv) {
// Skip empty filenames to avoid warnings.
if (empty($filename)) {
continue;
}
$size = getimagesize($path . $filename);
$icons[$path]['f'][$counter] = $filename;
$icons[$path]['w'][$counter] = $size[0];
$icons[$path]['h'][$counter] = $size[1];
// Store an index under tempf for the next part...
$icons[$path]['tempf'][$filename] = $counter;
$counter++;
}
_getlocations_compress_array($icons[$path]['w']);
_getlocations_compress_array($icons[$path]['h']);
}
// Part 3: Main ini parsing
// Per directory...
foreach ($inis as $path => $path_inis) {
// Per file...
foreach ($path_inis as $i => $ini) {
// Compression.
foreach ($ini as $k => $v) {
// Compress sequence filenames.
if (isset($ini[$k]['sequence'])) {
$temp = array();
foreach (explode(',', $ini[$k]['sequence']) as $file) {
$temp[] = $icons[$path]['tempf'][$file];
}
$ini[$k]['sequence'] = $temp;
}
// Compress other image field filenames.
foreach ($imagetypes as $t) {
if (isset($ini[$k][$t])) {
$ini[$k][$t] = $icons[$path]['tempf'][$ini[$k][$t]];
}
}
// Setup key for compression
$ini[$k]['key'] = $k;
}
$mv = array();
$iv = array();
if (isset($ini['defaults'])) {
$mv[0] = $ini['defaults'];
unset($ini['defaults']);
}
else {
$mv[0] = array();
}
foreach ($ini as $k => $v) {
if (strpos($k, '.') === FALSE) {
$mv[] = $ini[$k];
}
else {
$iv[] = $ini[$k];
}
}
$icons[$path]['i'][] = array(
_getlocations_compress_icon_def($mv),
_getlocations_compress_icon_def($iv),
);
}
}
foreach ($icons as $path => $v) {
unset($icons[$path]['tempf']);
}
return $icons;
}