@@ -40,70 +40,48 @@ public static function layers_js($all = FALSE)

// Get OpenLayers type
$openlayers_type = $layers[$default_map]->openlayers;

// To store options for the bing maps
$bing_options = "{}";
foreach ($layers as $layer)
{
if ($layer->active)
{
if ($all == TRUE)
// Get the bing options
if ($layer->openlayers == "Bing")
{
$js .= "var ".$layer->name." = new OpenLayers.Layer.".$layer->openlayers."(\"".$layer->title."\", ";
// Options for the Bing layer constructor
$bing_options = "{\n"
. "\t name: \"".$layer->data['name']."\",\n"
. "\t type: \"".$layer->data['type']."\",\n"
. "\t key: \"".$layer->data['key']."\"\n"
. "}";
}

if($layer->openlayers == 'XYZ')
if ($all == TRUE)
{
//++ Bing doesn't have the first argument
if ($layer->openlayers == "Bing")
{
if(isset($layer->data['url']))
{
$js .= '"'.$layer->data['url'].'", ';
}
}

$js .= "{ \n";
foreach ($layer->data AS $key => $value)
{
if ( ! empty($value)
AND $key != 'baselayer'
AND ($key == 'attribution' AND $layer->openlayers == 'XYZ')
AND $key != 'url')
{
if ($key == "type")
{
$js .= " ".$key.": ".urlencode($value).",\n";
}
else
{
$js .= " ".$key.": '".urlencode($value)."',\n";
}
}
$js .= "var ".$layer->name." = new OpenLayers.Layer.".$layer->openlayers."($bing_options);\n\n";
}

$js .= " sphericalMercator: true,\n";
$js .= " maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34)});\n\n";
}
else
{
if ($layer->openlayers == $openlayers_type)
else
{
$js .= "var ".$layer->name." = new OpenLayers.Layer.".$layer->openlayers."(\"".$layer->title."\", ";

if($layer->openlayers == 'XYZ')
{
if(isset($layer->data['url']))
{
$js .= '"'.$layer->data['url'].'", ';
}
}

$js .= "{ \n";
$js .= "var ".$layer->name." = new OpenLayers.Layer.".$layer->openlayers."(\"".$layer->title."\", { \n";

foreach ($layer->data AS $key => $value)
{
if ( ! empty($value)
if
( ! empty($value)
AND $key != 'baselayer'
AND ($key == 'attribution' AND $layer->openlayers == 'XYZ')
AND $key != 'url')
AND $key != 'url'
)
{
if ($key == "type")
{
$js .= " ".$key.": ".urlencode($value).",\n";
$js .= " ".$key.": ".$value.",\n";
}
else
{
@@ -115,6 +93,46 @@ public static function layers_js($all = FALSE)
$js .= " sphericalMercator: true,\n";
$js .= " maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34)});\n\n";
}

}
else
{
if ($layer->openlayers == $openlayers_type)
{
//++ Bing doesn't have the first argument
if ($layer->openlayers == "Bing")
{
$js .= "var ".$layer->name." = new OpenLayers.Layer.".$layer->openlayers."($bing_options);\n\n";
}
else
{
$js .= "var ".$layer->name." = new OpenLayers.Layer.".$layer->openlayers."(\"".$layer->title."\", { \n";

foreach ($layer->data AS $key => $value)
{
if
(
! empty($value)
AND $key != 'baselayer'
AND ($key == 'attribution' AND $layer->openlayers == 'XYZ')
AND $key != 'url'
)
{
if ($key == "type")
{
$js .= " ".$key.": ".$value.",\n";
}
else
{
$js .= " ".$key.": '".urlencode($value)."',\n";
}
}
}

$js .= " sphericalMercator: true,\n";
$js .= " maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34)});\n\n";
}
}
}
}
}
@@ -257,7 +275,7 @@ public static function base($layer_name = NULL)
);
$layers[$layer->name] = $layer;

// Google Satellite
// GOOGLE Satellite
$layer = new stdClass();
$layer->active = TRUE;
$layer->name = 'google_satellite';
@@ -272,7 +290,7 @@ public static function base($layer_name = NULL)
);
$layers[$layer->name] = $layer;

// Google Hybrid
// GOOGLE Hybrid
$layer = new stdClass();
$layer->active = TRUE;
$layer->name = 'google_hybrid';
@@ -287,7 +305,7 @@ public static function base($layer_name = NULL)
);
$layers[$layer->name] = $layer;

// Google Normal
// GOOGLE Normal
$layer = new stdClass();
$layer->active = TRUE;
$layer->name = 'google_normal';
@@ -302,7 +320,7 @@ public static function base($layer_name = NULL)
);
$layers[$layer->name] = $layer;

// Google Physical
// GOOGLE Physical
$layer = new stdClass();
$layer->active = TRUE;
$layer->name = 'google_physical';
@@ -317,45 +335,51 @@ public static function base($layer_name = NULL)
);
$layers[$layer->name] = $layer;

// Bing Street
// BING Road
$layer = new stdClass();
$layer->active = FALSE;
$layer->name = 'virtualearth_street';
$layer->openlayers = "VirtualEarth";
$layer->title = 'Bing Street';
$layer->description = 'Bing Street Tiles.';
$layer->api_url = 'https://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6';
$layer->active = TRUE;
$layer->name = 'bing_road';
$layer->openlayers = "Bing";
$layer->title = 'Bing-Road';
$layer->description = 'Bing Road Maps';
$layer->api_signup = 'https://www.bingmapsportal.com/';
$layer->data = array(
'name' => 'Bing-Road',
'baselayer' => TRUE,
'type' => 'VEMapStyle.Road',
'key' => Kohana::config('settings.api_live'),
'type' => 'Road',
);
$layers[$layer->name] = $layer;

// Bing Satellite
// BING Hybrid
$layer = new stdClass();
$layer->active = TRUE;
$layer->name = 'virtualearth_satellite';
$layer->openlayers = "VirtualEarth";
$layer->title = 'Bing Satellite';
$layer->description = 'Bing Satellite Tiles.';
$layer->api_url = 'https://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6';
$layer->name = 'bing_hybrid';
$layer->openlayers = "Bing";
$layer->title = 'Bing-Hybrid';
$layer->description = 'Bing hybrid of streets and satellite tiles.';
$layer->api_signup = 'https://www.bingmapsportal.com/';
$layer->data = array(
'name' => 'Bing-Hybrid',
'baselayer' => TRUE,
'type' => 'VEMapStyle.Aerial',
'key' => Kohana::config('settings.api_live'),
'type' => 'AerialWithLabels',
);
$layers[$layer->name] = $layer;

// Bing Hybrid
// BING Aerial
$layer = new stdClass();
$layer->active = TRUE;
$layer->name = 'virtualearth_hybrid';
$layer->openlayers = "VirtualEarth";
$layer->title = 'Bing Hybrid';
$layer->description = 'Bing hybrid of streets and satellite tiles.';
$layer->api_url = 'https://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6';
$layer->name = 'bing_satellite';
$layer->openlayers = "Bing";
$layer->title = 'Bing-Satellite';
$layer->description = 'Bing Satellite Tiles';
$layer->api_signup = 'https://www.bingmapsportal.com/';
$layer->data = array(
'name' => 'Bing-Satellite',
'baselayer' => TRUE,
'type' => 'VEMapStyle.Hybrid',
'key' => Kohana::config('settings.api_live'),
'type' => 'Aerial',
);
$layers[$layer->name] = $layer;

@@ -376,28 +400,11 @@ public static function base($layer_name = NULL)
);
$layers[$layer->name] = $layer;

// OpenStreetMap Tiles @ Home
$layer = new stdClass();
$layer->active = TRUE;
$layer->name = 'osm_tah';
$layer->openlayers = "OSM.Mapnik";
$layer->title = 'OSM Tiles@Home';
$layer->description = 'Alternative, community-rendered OpenStreetMap';
$layer->api_url = 'https://www.openstreetmap.org/openlayers/OpenStreetMap.js';
$layer->data = array(
'baselayer' => TRUE,
'attribution' => '&copy;<a href="@ccbysa">CCBYSA</a> 2010
<a href="@openstreetmap">OpenStreetMap.org</a> contributors',
'url' => 'http://tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png',
'type' => ''
);
$layers[$layer->name] = $layer;

// OpenStreetMap Cycling Map
$layer = new stdClass();
$layer->active = TRUE;
$layer->name = 'osm_cycle';
$layer->openlayers = "OSM.Mapnik";
$layer->openlayers = "OSM.CycleMap";
$layer->title = 'OSM Cycling Map';
$layer->description = 'OpenStreetMap with highlighted bike lanes';
$layer->api_url = 'https://www.openstreetmap.org/openlayers/OpenStreetMap.js';
@@ -410,30 +417,6 @@ public static function base($layer_name = NULL)
);
$layers[$layer->name] = $layer;

// OpenStreetMap 426 hybrid overlay
$layer = new stdClass();
$layer->active = FALSE;
$layer->name = 'osm_4326_hybrid';
$layer->openlayers = "OSM.Mapnik";
$layer->title = 'OSM Overlay';
$layer->description = 'Semi-transparent hybrid overlay. Projected into
WSG84 for use on non spherical-mercator maps.';
$layer->api_url = 'https://www.openstreetmap.org/openlayers/OpenStreetMap.js';
$layer->data = array(
'baselayer' => FALSE,
'attribution' => '&copy;<a href="@ccbysa">CCBYSA</a> 2010
<a href="@openstreetmap">OpenStreetMap.org</a> contributors',
'url' => 'http://oam.hypercube.telascience.org/tiles',
'params' => array(
'layers' => 'osm-4326-hybrid',
),
'options' => array(
'isBaseLayer' => FALSE,
'buffer' => 1,
),
'type' => ''
);
$layers[$layer->name] = $layer;

// Add Custom Layers
// Filter::map_base_layers
@@ -110,7 +110,7 @@ public static function validate(array & $post, $admin_section = FALSE)
// Validate Personal Information
if ( ! empty($post->person_first))
{
$post->add_rules('person_first', 'length[3,100]');
$post->add_rules('person_first', 'length[2,100]');
}

if ( ! empty($post->person_last))
@@ -43,7 +43,7 @@
Kohana::config_set('settings.default_map_all', $settings->default_map_all);
Kohana::config_set('settings.default_map_all_icon_id', $settings->default_map_all_icon_id);
Kohana::config_set('settings.api_google', $settings->api_google);
Kohana::config_set('settings.api_yahoo', $settings->api_yahoo);
Kohana::config_set('settings.api_live', $settings->api_live);
Kohana::config_set('settings.api_akismet', $settings->api_akismet);
Kohana::config_set('settings.default_city', $settings->default_city);
Kohana::config_set('settings.default_country', $settings->default_country);
@@ -89,13 +89,18 @@
$map_layer = map::base($default_map);
if ($map_layer)
{
Kohana::config_set('settings.api_url', "<script type=\"text/javascript\" src=\"".$map_layer->api_url."\"></script>" );
Kohana::config_set('settings.api_url',
"<script type=\"text/javascript\" src=\"".$map_layer->api_url."\"></script>");
}

// And in case you want to display all maps on one page...
$api_google = $settings->api_google;
$api_yahoo = $settings->api_yahoo;
Kohana::config_set('settings.api_url_all', '<script src="https://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6"></script><script type="text/javascript" src="http://api.maps.yahoo.com/ajaxymap?v=3.0&appid=' . $api_yahoo . '"></script><script src="https://maps.google.com/maps/api/js?v=3.2&amp;sensor=false" type="text/javascript"></script>'.html::script('https://www.openstreetmap.org/openlayers/OpenStreetMap.js'));
$api_live = $settings->api_live;
Kohana::config_set('settings.api_url_all',
"<script type=\"text/javascript\" src=\"https://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6\"></script>\n"
."<script type=\"text/javascript\" src=\"https://maps.google.com/maps/api/js?v=3.2&amp;sensor=false\"></script>\n"
. html::script('https://www.openstreetmap.org/openlayers/OpenStreetMap.js')
);

// Additional Mime Types (KMZ/KML)
Kohana::config_set('mimes.kml', array('text/xml'));
@@ -3,6 +3,7 @@
'captcha' => array(
'default' => 'Please enter a valid security code',
'required' => 'Please enter the security code',
'valid' => 'You entered the wrong security code',
),
'comment_author' => array(
'length' => 'The name field must be at least 3 characters long.',
@@ -730,12 +730,12 @@ public function errors($file = NULL)
// this allows "custom" inputs to pass through, bypassing localization by design
$errors[$input] = $error;
}
}

// CSRF validation erros MUST always be returned
if ($this->csrf_validation_failed)
{
$errors['form_auth_token'] = $error;
}
// CSRF validation errors MUST always be returned
if ($this->csrf_validation_failed)
{
$errors['form_auth_token'] = $this->errors['form_auth_token'];
}

return $errors;
@@ -19,33 +19,27 @@
</h2>
<?php print form::open(NULL, array('enctype' => 'multipart/form-data')); ?>
<div class="report-form">
<?php
if ($form_error) {
?>
<!-- red-box -->
<div class="red-box">
<h3><?php echo Kohana::lang('ui_main.error');?></h3>
<ul>
<?php
foreach ($errors as $error_item => $error_description)
{
print (!$error_description) ? '' : "<li>" . $error_description . "</li>";
}
?>
</ul>
</div>
<?php
}
<?php if ($form_error): ?>
<!-- red-box -->
<div class="red-box">
<h3><?php echo Kohana::lang('ui_main.error');?></h3>
<ul>
<?php
foreach ($errors as $error_item => $error_description)
{
print (!$error_description) ? '' : "<li>" . $error_description . "</li>";
}
?>
</ul>
</div>
<?php endif; ?>

if ($form_saved) {
?>
<!-- green-box -->
<div class="green-box">
<h3><?php echo Kohana::lang('ui_main.configuration_saved');?></h3>
</div>
<?php
}
?>
<?php if ($form_saved): ?>
<!-- green-box -->
<div class="green-box">
<h3><?php echo Kohana::lang('ui_main.configuration_saved'); ?></h3>
</div>
<?php endif; ?>
<div class="head">
<h3><?php echo Kohana::lang('settings.map_settings');?></h3>
<input type="image" src="<?php echo url::file_loc('img'); ?>media/img/admin/btn-cancel.gif" class="cancel-btn" />
@@ -85,7 +79,8 @@
<div class="has_border">
<h4><a href="#" class="tooltip" title="<?php echo Kohana::lang("tooltips.settings_map_provider"); ?>"><?php echo Kohana::lang('settings.map_provider.name');?></a></h4>
<p class="bold_desc"><?php echo Kohana::lang('settings.map_provider.info');?></p>
<span class="blue_span"><?php echo Kohana::lang('ui_main.step');?> 1: </span><span class="dark_span"><?php echo Kohana::lang('settings.map_provider.choose');?></span><br />
<span class="blue_span"><?php echo Kohana::lang('ui_main.step');?> 1: </span>
<span class="dark_span"><?php echo Kohana::lang('settings.map_provider.choose');?></span><br />
<div class="c_push">
<span class="my-sel-holder">
<?php
@@ -94,13 +89,17 @@
</span>
</div>

<span class="blue_span"><?php echo Kohana::lang('ui_main.step');?> 2: </span><span class="dark_span"><?php echo Kohana::lang('settings.map_provider.get_api');?></span><br />
<span class="blue_span"><?php echo Kohana::lang('ui_main.step');?> 2: </span>
<span class="dark_span"><?php echo Kohana::lang('settings.map_provider.get_api');?></span><br />
<div class="c_push">
<a href="http://code.google.com/apis/maps/signup.html" id="api_link" title="Get API Key"><img src="<?php echo url::file_loc('img'); ?>media/img/admin/btn-get-api-key.gif" border="0" alt="Get API Key"></a>
<a href="http://code.google.com/apis/maps/signup.html" id="api_link" title="Get API Key">
<img src="<?php echo url::file_loc('img'); ?>media/img/admin/btn-get-api-key.gif" border="0" alt="Get API Key">
</a>
</div>

<div id="api_div_google" <?php if ($form['default_map'] != 1 && $form['default_map'] != 4) echo "style=\"display:none\""; ?>>
<span class="blue_span"><?php echo Kohana::lang('ui_main.step');?> 3: </span><span class="dark_span"><?php echo Kohana::lang('settings.map_provider.enter_api');?></span><br />
<div id="api_div_google" <?php if ($form['default_map'] != 1 AND $form['default_map'] != 4) echo "style=\"display:none\""; ?>>
<span class="blue_span"><?php echo Kohana::lang('ui_main.step');?> 3: </span>
<span class="dark_span"><?php echo Kohana::lang('settings.map_provider.enter_api');?></span><br />
<div class="c_push">
<?php print form::input('api_google', $form['api_google'], ' class="text"'); ?>
</div>

Large diffs are not rendered by default.

@@ -0,0 +1,5 @@
ALTER TABLE `settings` DROP `api_yahoo`;

UPDATE `settings` SET `api_live` = 'Apumcka0uPOF2lKLorq8aeo4nuqfVVeNRqJjqOcLMJ9iMCTsnMsNd9_OvpA8gR0i' WHERE `id` = '1';

UPDATE `settings` SET `db_version` = 84;
@@ -1312,7 +1312,6 @@ CREATE TABLE IF NOT EXISTS `settings` (
`default_map_all` varchar(20) NOT NULL DEFAULT 'CC0000',
`default_map_all_icon_id` int(11) DEFAULT NULL,
`api_google` varchar(200) DEFAULT NULL,
`api_yahoo` varchar(200) DEFAULT NULL,
`api_live` varchar(200) DEFAULT NULL,
`api_akismet` varchar(200) DEFAULT NULL,
`default_country` int(11) DEFAULT NULL,
@@ -1357,8 +1356,8 @@ CREATE TABLE IF NOT EXISTS `settings` (
--
-- Dumping data for table `settings`
--
INSERT INTO `settings` (`id`, `site_name`, `api_google`, `api_yahoo`, `api_live`, `default_country`, `default_city`, `default_lat`, `default_lon`, `default_zoom`, `items_per_page`, `items_per_page_admin`, `blocks`, `date_modify`) VALUES
(1, 'Ushahidi', 'ABQIAAAAjsEM5UsvCPCIHp80spK1kBQKW7L4j6gYznY0oMkScAbKwifzxxRhJ3SP_ijydkmJpN3jX8kn5r5fEQ', '5CYeWbfV34E21JOW1a4.54Mf6e9jLNkD0HVzaKoQmJZi2qzmSZd5mD8X49x7', NULL, 115, 'nairobi', '-1.2873000707050097', '36.821451182008204', 13, 5, 20, 'reports_block|news_block', '2008-08-25 10:25:18');
INSERT INTO `settings` (`id`, `site_name`, `api_google`, `api_live`, `default_country`, `default_city`, `default_lat`, `default_lon`, `default_zoom`, `items_per_page`, `items_per_page_admin`, `blocks`, `date_modify`) VALUES
(1, 'Ushahidi', 'ABQIAAAAjsEM5UsvCPCIHp80spK1kBQKW7L4j6gYznY0oMkScAbKwifzxxRhJ3SP_ijydkmJpN3jX8kn5r5fEQ', 'Apumcka0uPOF2lKLorq8aeo4nuqfVVeNRqJjqOcLMJ9iMCTsnMsNd9_OvpA8gR0i', 115, 'nairobi', '-1.2873000707050097', '36.821451182008204', 13, 5, 20, 'reports_block|news_block', '2008-08-25 10:25:18');
-- --------------------------------------------------------

/**
@@ -1450,4 +1449,4 @@ CREATE TABLE IF NOT EXISTS `verified` (
*
*/
UPDATE `settings` SET `ushahidi_version` = '2.2.1' WHERE `id`=1 LIMIT 1;
UPDATE `settings` SET `db_version` = '83' WHERE `id` = 1 LIMIT 1;
UPDATE `settings` SET `db_version` = '84' WHERE `id` = 1 LIMIT 1;