v3.0.5 code review: lots of small fixes and cleanup

- fixed nano selection in search form
- removed unused, duplicate thumb replacement pics
- freed mysql result in lib1 helppage-link generation
- fixed logpic-is-on-first-page calculation
- fixed and improved user option set handling
- readded map dragzoom
- improved log pic pages layout
- user pics page counter fix
This commit is contained in:
following 2013-03-15 12:23:21 +01:00
parent a1ea6b6aff
commit 1c40b83bd2
31 changed files with 66 additions and 223 deletions

View File

@ -21,7 +21,6 @@
//prepare the templates and include all neccessary
require_once('./lib/common.inc.php');
require_once('./lib2/logic/const.inc.php');
function getWaypoints($cacheid)
{

View File

@ -343,8 +343,8 @@ function switchAttributeCat2()
<table class="table">
<tr>
<td>{t}Cachesize:{/t}</td>
<td><input type="checkbox" id="cachesize8" name="cachesize8" value="8" onclick="sync_options(this)" class="checkbox" {cachesize2checked} /> <label for="cachesize2">{t}nano{/t}</label>&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td><input type="checkbox" id="cachesize2" name="cachesize2" value="2" onclick="sync_options(this)" class="checkbox" {cachesize8checked} /> <label for="cachesize2">{t}micro{/t}</label></td>
<td><input type="checkbox" id="cachesize8" name="cachesize8" value="8" onclick="sync_options(this)" class="checkbox" {cachesize8checked} /> <label for="cachesize8">{t}nano{/t}</label>&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td><input type="checkbox" id="cachesize2" name="cachesize2" value="2" onclick="sync_options(this)" class="checkbox" {cachesize2checked} /> <label for="cachesize2">{t}micro{/t}</label></td>
<td><input type="checkbox" id="cachesize3" name="cachesize3" value="3" onclick="sync_options(this)" class="checkbox" {cachesize3checked} /> <label for="cachesize3">{t}small{/t}</label></td>
<td><input type="checkbox" id="cachesize4" name="cachesize4" value="4" onclick="sync_options(this)" class="checkbox" {cachesize4checked} /> <label for="cachesize4">{t}normal{/t}</label></td>
</tr>

View File

@ -1222,7 +1222,7 @@ function __autoload($class_name)
}
// wiki help embedding
// external help embedding
// pay attention to use only ' quotes in $text (escape other ')
//
// see corresponding function in lib2/common.inc.php
@ -1245,6 +1245,7 @@ function helppagelink($ocpage)
}
else
$helppage = "";
mysql_free_result($rs);
$imgtitle = $translate->t('Instructions', '', basename(__FILE__), __LINE__);
$imgtitle = "alt='" . $imgtitle . "' title='" . $imgtitle . "'";

View File

@ -317,7 +317,7 @@ function fix_magic_quotes_gpc()
}
}
// wiki help embedding
// external help embedding
// pay attention to use only ' quotes in $text (escape other ')
//
// see corresponding function in lib/common.inc.php

View File

@ -32,10 +32,4 @@
define('DB_MODE_BUSINESSLAYER', 1);
define('DB_MODE_USER', 2);
define('DB_DATE_FORMAT', '%Y-%m-%d %H:%M:%S');
// constants for user options (must match values in DB!)
define('USR_OPT_GMZOOM', 1);
define('USR_OPT_SHOWSTATS', 5);
define('USR_OPT_TRANSLANG', 6);
define('USR_OPT_PICSTAT', 11);
?>

View File

@ -53,4 +53,15 @@
// As of march 2013, there are a good deal of OC.de caches with 50-100 pics,
// but only one with more (~500 pics). If lots of caches have >100 pics,
// it may pay out to limit the gallery e.g. to 60 pics and implement browsing.
// constants for user options (must match values in DB!)
define('USR_OPT_GMZOOM', 1);
define('USR_OPT_SHOWSTATS', 5);
define('USR_OPT_MAP_MENU', 6);
define('USR_OPT_MAP_OVERVIEW', 7);
define('USR_OPT_MAP_MAXCACHES', 8);
define('USR_OPT_MAP_ICONSET', 9);
define('USR_OPT_MAP_PREVIEW', 10);
define('USR_OPT_PICSTAT', 11);
define('USR_OPT_TRANSLANG', 12);
?>

View File

@ -25,14 +25,6 @@ function get_logpics($purpose, $userid=0, $cacheid=0, $startat=0)
{
global $login;
// Variables to return for res_logpictures are
//
// from pictures: uuid, url and title
// from cache_logs: id, cache_id, date and type (type currently unused)
// from user: user_id and username, only if no $userid param is given
$rs = false;
$fields = "`pics`.`uuid` AS `pic_uuid`, `pics`.`url` AS `pic_url`,
`pics`.`title`, `pics`.`date_created`,
`logs`.`user_id`, `logs`.`cache_id`,
@ -44,6 +36,8 @@ function get_logpics($purpose, $userid=0, $cacheid=0, $startat=0)
"INNER JOIN `cache_status` ON `caches`.`status`=`cache_status`.`id` AND `allow_user_view`=1";
$join_user = "INNER JOIN `user` ON `user`.`user_id`=`logs`.`user_id`";
$rs = false;
switch ($purpose)
{
case LOGPICS_FOR_STARTPAGE_GALLERY:

View File

@ -239,9 +239,9 @@ class picture
return null;
else
$rs = sql("SELECT `id` FROM `cache_logs` WHERE `cache_id`='&1'
ORDER BY `date` DESC
ORDER BY `date`, `id` DESC
LIMIT &2",
$this->getCacheId(), MAX_LOGENTRIES_ON_CACHEPAGE);
$this->getCacheId(), MAX_LOGENTRIES_ON_CACHEPAGE);
$firstlogs = false;
while ($r = sql_fetch_assoc($rs))
if ($r['id'] == $this->getLogId())

View File

@ -1,6 +1,6 @@
<?php
/***************************************************************************
* You can find the license in the docs directory
* For license information see doc/license.txt
*
* Unicode Reminder メモ
*
@ -10,6 +10,7 @@
global $opt;
require_once($opt['rootpath'] . '../lib/htmlpurifier-4.2.0/library/HTMLPurifier.auto.php');
require_once($opt['rootpath'] . 'lib2/logic/const.inc.php');
class useroptions
{
@ -17,7 +18,7 @@ class useroptions
var $nUserId = 0;
var $nOptions;
function __construct($nUserId=ID_NEW, $optionset=1)
function __construct($nUserId=ID_NEW)
{
$this->nUserId = $nUserId+0;
@ -31,13 +32,12 @@ class useroptions
$rs = sqll("SELECT `p`.`id`, `p`.`name`, `p`.`default_value`, `p`.`check_regex`, `p`.`option_order`, IFNULL(`u`.`option_visible`, 0) AS `option_visible`, `p`.`internal_use`, IFNULL(`u`.`option_value`, `p`.`default_value`) AS `option_value`
FROM `profile_options` AS `p`
LEFT JOIN `user_options` AS `u` ON `p`.`id`=`u`.`option_id` AND (`u`.`user_id` IS NULL OR `u`.`user_id`='&1')
WHERE `optionset`='&2'
UNION
SELECT `u`.`option_id` AS `id`, `p`.`name`, `p`.`default_value`, `p`.`check_regex`, `p`.`option_order`, `u`.`option_visible`, `p`.`internal_use`, IFNULL(`u`.`option_value`, `p`.`default_value`) AS `option_value`
FROM `user_options` AS `u`
LEFT JOIN `profile_options` AS `p` ON `p`.`id`=`u`.`option_id`
WHERE `u`.`user_id`='&1'",
$this->nUserId, $optionset);
$this->nUserId);
}
while($record = sql_fetch_array($rs))
@ -52,7 +52,7 @@ class useroptions
{
return $this->nUserId;
}
function getOptSet()
function getOptSet($pId)
{
return $this->nOptions[$pId]['optionset'];
}

View File

@ -1,6 +1,6 @@
<?php
/***************************************************************************
* You can find the license in the docs directory
* For license information see doc/license.txt
*
* Unicode Reminder メモ
***************************************************************************/
@ -8,6 +8,7 @@
require('./lib2/web.inc.php');
require_once('./lib2/logic/cache.class.php');
require_once('./lib2/logic/user.class.php');
require_once('./lib2/logic/useroptions.class.php');
require_once('./lib2/logic/attribute.class.php');
/* because the map does access some private info like
@ -60,11 +61,10 @@
else if ($sMode == 'fullscreen' ||
($sMode == '' &&
sql_value("SELECT option_value FROM user_options
INNER JOIN user ON user_options.user_id=user.user_id
WHERE option_id=6 AND user.user_id='&1'", true, $login->userid)))
WHERE option_id=6 AND user_id='&1'", true, $login->userid)))
{
$fullscreen = true;
$tpl->popup = true; // disables page header and -framefrapage
$tpl->popup = true; // disables page header and -frame
$tpl->popupmargin = false;
}
else
@ -75,26 +75,15 @@
// save options
if (isset($_REQUEST['submit']) && $_REQUEST['submit'] && $login->userid > 0)
{
sql("INSERT INTO `user_options` (`user_id`, `option_id`, `option_visible`, `option_value`)
VALUES ('&1', '&2', '&3', '&4')
ON DUPLICATE KEY UPDATE `option_value`='&4'",
$login->userid, 6, 0, min(max($_REQUEST['opt_menumap']+0, 0), 1) );
sql("INSERT INTO `user_options` (`user_id`, `option_id`, `option_visible`, `option_value`)
VALUES ('&1', '&2', '&3', '&4')
ON DUPLICATE KEY UPDATE `option_value`='&4'",
$login->userid, 7, 0, isset($_REQUEST['opt_overview']) ? min(max(round($_REQUEST['opt_overview']+0), 0), 1) : 0);
sql("INSERT INTO `user_options` (`user_id`, `option_id`, `option_visible`, `option_value`)
VALUES ('&1', '&2', '&3', '&4')
ON DUPLICATE KEY UPDATE `option_value`='&4'",
$login->userid, 8, 0, $_REQUEST['opt_maxcaches'] == 0 ? 0 : min(max(round($_REQUEST['opt_maxcaches']+0), $opt['map']['min_maxrecords']), $opt['map']['max_maxrecords']) );
sql("INSERT INTO `user_options` (`user_id`, `option_id`, `option_visible`, `option_value`)
VALUES ('&1', '&2', '&3', '&4')
ON DUPLICATE KEY UPDATE `option_value`='&4'",
$login->userid, 9, 0, min(max($_REQUEST['opt_cacheicons']+0, 1), 2) );
sql("INSERT INTO `user_options` (`user_id`, `option_id`, `option_visible`, `option_value`)
VALUES ('&1', '&2', '&3', '&4')
ON DUPLICATE KEY UPDATE `option_value`='&4'",
$login->userid, 10, 0, min(max($_REQUEST['opt_pictures']+0, 0), 50) );
$useroptions = new useroptions($login->userid);
if (isset($_REQUEST['opt_menumap'])) $useroptions->setOptValue(USR_OPT_MAP_MENU, $_REQUEST['opt_menumap']+0);
if (isset($_REQUEST['opt_overview'])) $useroptions->setOptValue(USR_OPT_MAP_OVERVIEW, $_REQUEST['opt_overview']+0);
if (isset($_REQUEST['opt_maxcaches'])) $useroptions->setOptValue(USR_OPT_MAP_MAXCACHES, $_REQUEST['opt_maxcaches'] == 0 ? 0 : min(max(round($_REQUEST['opt_maxcaches']+0), $opt['map']['min_maxrecords']), $opt['map']['max_maxrecords']) );
if (isset($_REQUEST['opt_cacheicons'])) $useroptions->setOptValue(USR_OPT_MAP_ICONSET, $_REQUEST['opt_cacheicons']+0);
if (isset($_REQUEST['opt_pictures'])) $useroptions->setOptValue(USR_OPT_MAP_PREVIEW, min(max(round($_REQUEST['opt_pictures']+0), 0), 50) );
$useroptions->save();
}
$tpl->name = 'map2';
@ -111,6 +100,7 @@
$tpl->add_header_javascript('http://maps.googleapis.com/maps/api/js?sensor=false&key=' . urlencode($sGMKey));
// https is supported by google, but may make problems in some environments,
// e.g. does not work with MSIE 7 on WinXP
$tpl->add_header_javascript('resource2/misc/map/dragzoom_packed.js');
$tpl->add_body_load('mapLoad()');
$tpl->add_body_unload('mapUnload()');
@ -212,22 +202,12 @@
$tpl->assign('maxAttributeId', $maxaid);
// options
$rs = sql("SELECT `profile_options`.`id`,
IF(`option_value` IS NULL, `default_value`, `option_value`) AS `value`
FROM `profile_options`
LEFT JOIN `user_options` ON `profile_options`.`id`=`user_options`.`option_id` AND `user_id`='&1'
WHERE `optionset`=2",
$login->userid);
while ($r = sql_fetch_assoc($rs))
switch ($r['id'])
{
case 6: $tpl->assign('opt_menumap', $r['value']); break;
case 7: $tpl->assign('opt_overview', $r['value']); break;
case 8: $tpl->assign('opt_maxcaches', $r['value']); break;
case 9: $tpl->assign('opt_cacheicons', $r['value']); break;
case 10: $tpl->assign('opt_pictures', $r['value']); break;
}
sql_free_result($rs);
$useroptions = new useroptions($login->userid);
$tpl->assign('opt_menumap', $useroptions->getOptValue(USR_OPT_MAP_MENU));
$tpl->assign('opt_overview', $useroptions->getOptValue(USR_OPT_MAP_OVERVIEW));
$tpl->assign('opt_maxcaches', $useroptions->getOptValue(USR_OPT_MAP_MAXCACHES));
$tpl->assign('opt_cacheicons', $useroptions->getOptValue(USR_OPT_MAP_ICONSET));
$tpl->assign('opt_pictures', $useroptions->getOptValue(USR_OPT_MAP_PREVIEW));
$tpl->assign('maxrecords',$opt['map']['maxrecords'] + 0);
$tpl->assign('min_maxrecords', $opt['map']['min_maxrecords']);
@ -408,7 +388,7 @@ function output_namesearch($sName, $nLat, $nLon, $nResultId)
function output_searchresult($nResultId, $compact, $nLon1, $nLon2, $nLat1, $nLat2,
$cachenames, $smallmap)
{
global $login, $opt, $maxrecords, $msie;
global $login, $opt, $msie;
// check if data is available and connect the right slave server
$nSlaveId = sql_value("SELECT `slave_id` FROM `map2_result` WHERE `result_id`='&1' AND DATE_ADD(`date_created`, INTERVAL '&2' SECOND)>NOW()", -2, $nResultId, $opt['map']['maxcacheage']);

View File

@ -1,3 +1,7 @@
// Old CacheMarker implementation from the Google version 2 map.
// Currently not used, because it slows down marker handling;
// renders current Firefox unsusable.
function CacheMarker(latlng, wp, type, flags, map)
{
this.latlng = latlng;

View File

@ -1,117 +0,0 @@
/* LatLonDisplayControl
*/
function LatLonDisplayControl() {}
LatLonDisplayControl.prototype = new GControl();
LatLonDisplayControl.prototype.initialize = function(map)
{
var control = this;
var container = document.createElement("div");
var latDiv = document.createElement("div");
var latText = document.createTextNode(" ");
this.setLabelStyle_(map, latDiv);
container.appendChild(latDiv);
latDiv.appendChild(latText);
var lonDiv = document.createElement("div");
var lonText = document.createTextNode(" ");
this.setLabelStyle_(map, lonDiv);
container.appendChild(lonDiv);
lonDiv.appendChild(lonText);
GEvent.addListener(map, "maptypechanged", function(latLng)
{
if (map.getCurrentMapType().getName(false) == "Hybrid")
{
latDiv.style.color = "white";
lonDiv.style.color = "white";
}
else
{
latDiv.style.color = "black";
lonDiv.style.color = "black";
}
});
GEvent.addListener(map, "mouseout", function(latLng)
{
var newLonText = document.createTextNode(" ");
lonDiv.replaceChild(newLonText, lonText);
lonText = newLonText;
var newLatText = document.createTextNode(" ");
latDiv.replaceChild(newLatText, latText);
latText = newLatText;
});
GEvent.addListener(map, "mousemove", function(latLng)
{
var newLonText = document.createTextNode(control.formatLon_(latLng.lng()));
lonDiv.replaceChild(newLonText, lonText);
lonText = newLonText;
var newLatText = document.createTextNode(control.formatLat_(latLng.lat()));
latDiv.replaceChild(newLatText, latText);
latText = newLatText;
});
map.getContainer().appendChild(container);
return container;
}
LatLonDisplayControl.prototype.getDefaultPosition = function()
{
return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7, 32));
}
LatLonDisplayControl.prototype.setLabelStyle_ = function(map, button)
{
if (map.getCurrentMapType().getName(false) == "Hybrid")
button.style.color = "white";
else
button.style.color = "black";
button.style.font = "small Arial";
button.style.padding = "0px";
button.style.marginBottom = "1px";
button.style.textAlign = "right";
button.style.width = "10em";
}
LatLonDisplayControl.prototype.formatLat_ = function(lat)
{
var sPrefix = "";
if (lat<0)
sPrefix = "S ";
else
sPrefix = "N ";
return sPrefix + this.formatLatLon_(lat, 2);
}
LatLonDisplayControl.prototype.formatLon_ = function(lon)
{
var sPrefix = "";
if (lon<0)
sPrefix = "W ";
else
sPrefix = "E ";
return sPrefix + this.formatLatLon_(lon, 3);
}
LatLonDisplayControl.prototype.formatLatLon_ = function(value, nDegLength)
{
value = Math.abs(value);
var nDeg = Math.floor(value);
var nDecimal = Math.round((value - nDeg) * 60 * 1000) / 1000;
if (nDecimal>=60)
{
nDecimal = nDecimal - 60
nDeg = nDeg + 1;
}
var sDeg = nDeg.toString();
var sDecimal = nDecimal.toFixed(3);
while (sDeg.length<nDegLength) sDeg = "0" + sDeg;
while (sDecimal.length<6) sDecimal = "0" + sDecimal;
return sDeg + "° " + sDecimal + "'";
}

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 987 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 718 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -22,6 +22,7 @@
{else}
<form action="activation.php" method="post" enctype="application/x-www-form-urlencoded" style="display: inline;">
<input type="hidden" name="submit" value="1" />
<div class="content2-pagetitle">
<img src="resource2/{$opt.template.style}/images/profile/32x32-profile.png" style="align: left; margin-right: 10px;" width="32" height="32" alt="{t}Activation{/t}" />
{t}Activate account{/t}

View File

@ -61,6 +61,7 @@
<li>Javascript-Warnung beim Loggen auf der italenischen Seite beseitigt</li>
<li>dänische Flagge bei dänischen Cachebeschreibungen</li>
<li>Suchprobleme nach Logout behoben</li>
<li>Auswahl der Nano-Größe im Suchforumlar korrigiert</li>
</ul>
<p><strong>Version 3.0.4</strong> &ndash; 17. Februar 2013</p>

View File

@ -59,6 +59,7 @@
<li>removed JavaScript warning when logging on the Italien page</li>
<li>show Danish flag with Danish cache descriptions</li>
<li>fixed search problems after logging out</li>
<li>fixed nano size selection in search form</li>
</ul>
<p><strong>Release 3.0.4</strong> &ndash; February 17, 2013

View File

@ -356,6 +356,7 @@ function mapLoad()
};
moMap = new google.maps.Map(document.getElementById("googlemap"), myOptions);
moMap.enableKeyDragZoom();
setMapType("OSM", "OpenStreetMap", "http://tile.openstreetmap.org/", 18);
setMapType("MQ"," MapQuest", "http://otile1.mqcdn.com/tiles/1.0.0/osm/", 19);

View File

@ -5,7 +5,7 @@
***************************************************************************}
{* OCSTYLE *}
<div class="content2-pagetitle">
<img src="resource2/{$opt.template.style}/images/cacheicon/traditional.gif" style="align: left; margin-right: 10px;" width="32" height="32" alt="{t}Latest logs entries{/t}" />
<img src="resource2/{$opt.template.style}/images/cacheicon/webcam.gif" style="align: left; margin-right: 10px;" width="32" height="32" alt="" />
{t}New log pictures{/t}
</div>

View File

@ -5,7 +5,7 @@
***************************************************************************}
{* OCSTYLE *}
<div class="content2-pagetitle">
<img src="resource2/{$opt.template.style}/images/cacheicon/traditional.gif" style="align: left; margin-right: 10px;" width="32" height="32" alt="{t}Latest logs entries{/t}" />
<img src="resource2/{$opt.template.style}/images/cacheicon/traditional.gif" style="align: left; margin-right: 10px;" width="32" height="32" alt="" />
{t}Latest logs entries{/t}
</div>

View File

@ -64,7 +64,7 @@
<a onclick="enlarge(document.getElementById('pic{$pictureItem.id}'))" style="cursor:pointer">{$pictureItem.title|escape}</a>
{* the position of this image is the anchor for enlargit activity: *}
<img id="pic{$pictureItem.id}" src="resource2/ocstyle/images/misc/empty.png" longdesc="{$pictureItem.url}" alt="{$pictureItem.title|escape}" style="cursor:pointer" onclick="enlarge(this)"/>
<img id="pic{$pictureItem.id}" src="resource2/ocstyle/images/misc/empty.png" longdesc="{$pictureItem.url}" />
{if $logItem.userid==$login.userid}
[<a href="picture.php?action=edit&uuid={$pictureItem.uuid|escape}">{t}Edit{/t}</a>]
[<a href="picture.php?action=delete&uuid={$pictureItem.uuid|escape}">{t}Delete{/t}</a>]

View File

@ -179,7 +179,6 @@
<td class="header-small" >{t 1=$recommended 2=$maxrecommended}%1 of %2 possibles{/t} [<a href="usertops.php?userid={$userid}">{t}Show all{/t}</a>]
</td>
</tr>
<tr><td class="spacer" colspan="2"></td></tr>
{if $show_picstat}
<tr>

View File

@ -5,7 +5,7 @@
***************************************************************************}
{* OCSTYLE *}
<div class="content2-pagetitle">
<img src="resource2/{$opt.template.style}/images/cacheicon/traditional.gif" style="align: left; margin-right: 10px;" width="32" height="32" alt="{t}Log pictures{/t}" />
<img src="resource2/{$opt.template.style}/images/cacheicon/webcam.gif" style="align: left; margin-right: 10px;" width="32" height="32" alt="" />
{t 1=$username}Log pictures of %1{/t}
</div>

View File

@ -104,7 +104,9 @@
{
// user has allowed picture stat and gallery view
$tpl->assign('allpics',$allpics);
if ($allpics)
if (!$allpics)
$tpl->assign('logpics', get_logpics(LOGPICS_FOR_USER_STAT, $userid));
else
{
$pictures = get_logpics(LOGPICS_FOR_USER_GALLERY, $userid, 0, $startat);
$more = (count($pictures) > MAX_PICTURES_PER_GALLERY_PAGE);
@ -116,7 +118,7 @@
$tpl->assign('paging', $paging);
if ($paging)
{
$pages = floor(get_logpics(LOGPICS_FOR_USER_STAT, $userid)/MAX_PICTURES_PER_GALLERY_PAGE) + 1;
$pages = floor((get_logpics(LOGPICS_FOR_USER_STAT, $userid) + MAX_PICTURES_PER_GALLERY_PAGE - 1)/MAX_PICTURES_PER_GALLERY_PAGE);
$page = floor($startat/MAX_PICTURES_PER_GALLERY_PAGE) + 1;
$pl = "";
@ -136,8 +138,6 @@
$tpl->name = 'viewprofile_pics';
// actually we dont need all the other stuff here ..
}
else
$tpl->assign('logpics', get_logpics(LOGPICS_FOR_USER_STAT, $userid));
}
$tpl->assign('showcountry', (strlen(trim($record['country'])) > 0));

View File

@ -59,7 +59,8 @@ abstract class ChildWp_Presenter
{
$this->childWpHandler = $childWpHandler;
$this->cacheId = $cacheId;
$this->waypointTypes = $childWpHandler->getChildWpIdAndNames(); $this->typeImages = $childWpHandler->getChildNamesAndImages();
$this->waypointTypes = $childWpHandler->getChildWpIdAndNames();
$this->typeImages = $childWpHandler->getChildNamesAndImages();
}
public function initChildWp($childId, $childWp)