Merge branch 'master' into next
This commit is contained in:
@@ -173,7 +173,7 @@
|
||||
sql("ALTER TABLE `cache_reports` ADD INDEX `userid` (`userid`)");
|
||||
}
|
||||
|
||||
function dbv_108() // automatic email-bounce processiong
|
||||
function dbv_108() // automatic email-bounce processing
|
||||
{
|
||||
if (!sql_field_exists('user','last_email_problem'))
|
||||
sql("ALTER TABLE `user` ADD COLUMN `last_email_problem` datetime default NULL AFTER `email_problems`");
|
||||
@@ -181,10 +181,46 @@
|
||||
sql("ALTER TABLE `user` ADD COLUMN `mailing_problems` int(10) unsigned NOT NULL default '0' AFTER `last_email_problem`");
|
||||
}
|
||||
|
||||
function dbv_109() // improved email-bounce processiong
|
||||
function dbv_109() // improved email-bounce processing
|
||||
{
|
||||
if (!sql_field_exists('user','first_email_problem'))
|
||||
sql("ALTER TABLE `user` ADD COLUMN `first_email_problem` date default NULL AFTER `email_problems`");
|
||||
}
|
||||
|
||||
function dbv_110() // move adoption history to separate table
|
||||
{
|
||||
if (!sql_table_exists('cache_adoptions'))
|
||||
{
|
||||
sql(
|
||||
"CREATE TABLE `cache_adoptions` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`cache_id` int(10) unsigned NOT NULL,
|
||||
`date` datetime NOT NULL,
|
||||
`from_user_id` int(10) unsigned NOT NULL,
|
||||
`to_user_id` int(10) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `cache_id` (`cache_id`,`date`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1");
|
||||
|
||||
$rs = sql("SELECT `id`, `date_created`, `objectid1`, `logtext`
|
||||
FROM `logentries`
|
||||
WHERE `eventid`=5
|
||||
ORDER BY `date_created`, `id`");
|
||||
while ($rLog = sql_fetch_assoc($rs))
|
||||
{
|
||||
preg_match('/Cache (\d+) has changed the owner from userid (\d+) to (\d+) by (\d+)/',
|
||||
$rLog['logtext'], $matches);
|
||||
if (count($matches) != 5)
|
||||
die("unknown adoption log entry format for ID " . $rLog['id'] . "\n");
|
||||
sql("INSERT INTO `cache_adoptions`
|
||||
(`cache_id`,`date`,`from_user_id`,`to_user_id`)
|
||||
VALUES ('&1','&2','&3','&4')",
|
||||
$rLog['objectid1'], $rLog['date_created'], $matches[2], $matches[3]);
|
||||
}
|
||||
sql_free_result($rs);
|
||||
|
||||
// We keep the old entries in 'logentries' for the case something went wrong here.
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -144,7 +144,7 @@
|
||||
$tpl->assign('adminid', $record['adminid']);
|
||||
$tpl->assign('adminnick', $record['adminnick']);
|
||||
$tpl->assign('reason', $record['reason']);
|
||||
$tpl->assign('note', $record['note']);
|
||||
$tpl->assign('note', trim($record['note']));
|
||||
$tpl->assign('status', $record['status']);
|
||||
$tpl->assign('created', $record['date_created']);
|
||||
$tpl->assign('lastmodified', $record['lastmodified']);
|
||||
|
||||
@@ -368,9 +368,10 @@
|
||||
// fill_gaps = false: continue with the last waypoint
|
||||
$opt['logic']['waypoint_pool']['fill_gaps'] = false;
|
||||
|
||||
/* Automatic system user actions
|
||||
/* Username for cronjobs or CLI tools
|
||||
* is used e.g. for cache auto-archiving and auto-publishing
|
||||
*/
|
||||
$opt['logic']['systemuser']['user'] = ''; // enter an active username to enable auto archiving
|
||||
$opt['logic']['systemuser']['user'] = '';
|
||||
|
||||
/* Purge log files - age in days (0 = keep infinite)
|
||||
*/
|
||||
@@ -405,6 +406,7 @@
|
||||
/* cronjob
|
||||
*/
|
||||
$opt['cron']['pidfile'] = $opt['rootpath'] . 'cache2/runcron.pid';
|
||||
$opt['cron']['username'] = 'apache'; // system username for cronjobs
|
||||
|
||||
/* phpbb news integration (index.php)
|
||||
*
|
||||
@@ -437,10 +439,11 @@
|
||||
$opt['cron']['sitemaps']['generate'] = true;
|
||||
$opt['cron']['sitemaps']['submit'] = false;
|
||||
|
||||
/* Geokret cronjob
|
||||
/* other cronjobs
|
||||
*/
|
||||
|
||||
$opt['cron']['geokrety']['run'] = true;
|
||||
$opt['cron']['autoarchive']['run'] = false;
|
||||
|
||||
/* E-Mail settings
|
||||
*
|
||||
|
||||
@@ -2487,11 +2487,16 @@ INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2065', 'Guest',
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2066', 'Open chat in a new tab/window', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2067', 'Status', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2068', 'since June 2013', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2069', 'since February 2012', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2069', 'since deletion date February 2012', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2070', 'One ore more emails to this user could not be delivered. It might be a good idea to additionally log comments on the user\'s geocaches, and/or trying to contact him/her through other channels like a message board account or another geocaching platform.', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2071', 'This cache has been \"temporarily unavailable\" for more than one year now; therefore it is being archived automatically. The owner may decide to maintain the cache and re-enable the listing.', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2072', 'This event took place more than five weeks ago; therefore it is being archived automatically. The owner may re-enable the listing if it should stay active for some exceptional reason.', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2073', 'This user account is disabled.', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2074', 'Adoptions_', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2075', 'since September 2012', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2076', 'From Owner', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2077', 'To Owner', '2013-05-28 16:51:40');
|
||||
INSERT INTO `sys_trans` (`id`, `text`, `last_modified`) VALUES ('2078', 'Maintenance', '2013-05-28 16:51:40');
|
||||
|
||||
-- Table sys_trans_ref
|
||||
SET NAMES 'utf8';
|
||||
@@ -4983,7 +4988,7 @@ INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUE
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('158', 'DE', 'Französisch', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('159', 'DE', 'Englisch', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('160', 'DE', 'Deutsch', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('161', 'DE', 'Vorsicht: Wenn Du diese Option verwenden, vergiss niemals auf Logout zu klicken, wenn Du dich von einem PC aus angemeldet hast der auch Fremden zugänglich ist. Ansonsten könnte ein Fremder Deine persönlichen Account-Daten auslesen und ändern.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('161', 'DE', 'Vorsicht: Wenn du diese Option verwenden, vergiss niemals auf Logout zu klicken, wenn du dich von einem PC aus angemeldet hast der auch Fremden zugänglich ist. Ansonsten könnte ein Fremder deine persönlichen Account-Daten auslesen und ändern.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('162', 'DE', 'Simbabwe', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('163', 'DE', 'Sambia', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('164', 'DE', 'Südafrika', '2010-08-28 11:48:06');
|
||||
@@ -5413,11 +5418,11 @@ INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUE
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('601', 'DE', 'Folgender Sicherheits-Code wurde generiert: %1', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('602', 'DE', 'Der Sicherheits-Code bleibt drei Tage gültig.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('603', 'DE', 'Dein neues Passwort kannst du unter %1newpw.php eingeben.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('604', 'DE', 'Um ein neues Passwort einzugeben, musst Du zunächst einen Sicherheits-Code anfordern. Dieser wird per E-Mail an Dich gesendet.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('604', 'DE', 'Um ein neues Passwort einzugeben, musst du zunächst einen Sicherheits-Code anfordern. Dieser wird per E-Mail an dich gesendet.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('605', 'DE', 'Die E-Mail-Adresse gehört zu keinem gültigen Benutzer.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('606', 'DE', 'Dir wurde eine E-Mail mit dem Sicherheits-Code zugesandt.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('607', 'DE', 'Der Sicherheitscode konnte wegen eines Fehlers nicht gesendet werden.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('608', 'DE', 'Gib bitten deine E-Mail-Adresse, den Sicherheitscode und das neue Passwort ein. Der Sicherheitscode bleibt drei Tage gültig; danach musst Du ihn ggf. erneut anfordern.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('608', 'DE', 'Gib bitte deine E-Mail-Adresse, den Sicherheitscode und das neue Passwort ein. Der Sicherheitscode bleibt drei Tage gültig; danach musst du ihn ggf. erneut anfordern.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('609', 'DE', 'Der angegebene Benutzer ist noch nicht aktiviert.', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('610', 'DE', 'Sicherheitscode:', '2010-08-28 11:48:06');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('611', 'DE', 'Der Sicherheitscode ist abgelaufen. Fordere bitte einen neuen an.', '2010-08-28 11:48:06');
|
||||
@@ -6431,11 +6436,16 @@ INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUE
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2066', 'DE', 'Chat in neuem Tab/Fenster öffnen', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2067', 'DE', 'Status', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2068', 'DE', 'seit Juni 2013', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2069', 'DE', 'seit Februar 2012', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2069', 'DE', 'seit Löschdatum Februar 2012', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2070', 'DE', 'Eine oder mehrere Emails an diesen Benutzer konnten nicht zugestellt werden. Es könnte ratsam sein, Hinweise zu seinen Caches zusätzlich zu loggen, und ihn ggf. über weitere Adressen wie z.B. Forenaccounts oder andere Geocaching-Plattformen zu kontaktieren.', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2071', 'DE', 'Dieser Cache ist seit mehr als einem Jahr „momentan nicht verfügbar“; daher wird er automatisch archiviert. Er kann vom Besitzer jederzeit instand gesetzt und reaktiviert werden.', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2072', 'DE', 'Dieses Event fand vor über fünf Wochen statt; daher wird es automatisch archiviert. Das Listing kann vom Owner selbst reaktiviert werden, falls es aus besonderen Gründen weiter aktiv bleiben soll.', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2073', 'DE', 'Dieser Benutzer ist deaktiviert.', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2074', 'DE', 'Adoptionen', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2075', 'DE', 'seit September 2012', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2076', 'DE', 'Alter Besitzer', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2077', 'DE', 'Neuer Besitzer', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2078', 'DE', 'Wartung', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('1', 'EN', 'Reorder IDs \r', '2010-09-02 00:15:30');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2', 'EN', 'The database could not be reconnected.', '2010-08-28 11:48:07');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('3', 'EN', 'Testing – please do not login', '2010-08-28 11:48:07');
|
||||
@@ -7995,11 +8005,16 @@ INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUE
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2066', 'EN', 'Open chat in a new tab/window', '2013-02-19 05:48:07');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2067', 'EN', 'Status', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2068', 'EN', 'since June 2013', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2069', 'EN', 'since February 2012', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2069', 'EN', 'since deletion date February 2012', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2070', 'EN', 'One ore more emails to this user could not be delivered. It might be a good idea to additionally log comments on the user\'s geocaches, and/or trying to contact him/her through other channels like a message board account or another geocaching platform.', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2071', 'EN', 'This cache has been \"temporarily unavailable\" for more than one year now; therefore it is being archived automatically. The owner may decide to maintain the cache and re-enable the listing.', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2072', 'EN', 'This event took place more than five weeks ago; therefore it is being archived automatically. The owner may re-enable the listing if it should stay active for some exceptional reason.', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2073', 'EN', 'This user account is disabled.', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2074', 'EN', 'Adoptions', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2075', 'EN', 'since September 2012', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2076', 'EN', 'From Owner', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2077', 'EN', 'To Owner', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2078', 'EN', 'Maintenance', '2013-04-25 23:00:00');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('1', 'ES', 'Reordenar ID', '2010-12-09 00:17:55');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('2', 'ES', 'La base de datos no se pudo conectar.', '2010-12-09 00:17:55');
|
||||
INSERT INTO `sys_trans_text` (`trans_id`, `lang`, `text`, `last_modified`) VALUES ('3', 'ES', 'En pruebas - por favor, no entre.', '2010-12-09 00:17:55');
|
||||
|
||||
@@ -710,6 +710,10 @@
|
||||
/* logpw needs not to be saved */
|
||||
/* for further explanation see restorecaches.php */
|
||||
END IF;
|
||||
IF NEW.`user_id`!=OLD.`user_id` THEN
|
||||
INSERT INTO `cache_adoptions` (`cache_id`,`date`,`from_user_id`,`to_user_id`)
|
||||
VALUES (NEW.`cache_id`, NEW.`last_modified`, OLD.`user_id`, NEW.`user_id`);
|
||||
END IF;
|
||||
IF NEW.`user_id`!=OLD.`user_id` OR NEW.`status`!=OLD.`status` THEN
|
||||
CALL sp_update_hiddenstat(OLD.`user_id`, OLD.`status`, TRUE);
|
||||
CALL sp_update_hiddenstat(NEW.`user_id`, NEW.`status`, FALSE);
|
||||
|
||||
11
htdocs/doc/sql/tables/cache_adoptions.sql
Normal file
11
htdocs/doc/sql/tables/cache_adoptions.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
SET NAMES 'utf8';
|
||||
DROP TABLE IF EXISTS `cache_adoptions`;
|
||||
CREATE TABLE IF NOT EXISTS `cache_adoptions` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`cache_id` int(10) unsigned NOT NULL,
|
||||
`date` datetime NOT NULL,
|
||||
`from_user_id` int(10) unsigned NOT NULL,
|
||||
`to_user_id` int(10) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `cache_id` (`cache_id`,`date`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
|
||||
@@ -104,7 +104,7 @@
|
||||
$log_time_minute = isset($_POST['logminute']) ? trim($_POST['logminute']) : (substr($log_record['date'],11) == "00:00:00" ? "" : date('i', strtotime($log_record['date'])));
|
||||
$top_option = isset($_POST['ratingoption']) ? $_POST['ratingoption']+0 : 0;
|
||||
$top_cache = isset($_POST['rating']) ? $_POST['rating']+0 : 0;
|
||||
$oc_team_comment = isset($_POST['teamcomment']) ? ($_POST['teamcomment'] != 0) : ($log_record['oc_team_comment'] == '1');
|
||||
$oc_team_comment = isset($_POST['submitform']) ? @$_POST['teamcomment']+0 : ($log_record['oc_team_comment'] == 1);
|
||||
|
||||
$log_pw = '';
|
||||
$use_log_pw = (($log_record['logpw'] == NULL) || ($log_record['logpw'] == '')) ? false : true;
|
||||
@@ -222,7 +222,7 @@
|
||||
}
|
||||
|
||||
// ignore unauthorized team comments
|
||||
if (!teamcomment_allowed($log_record['cache_id'], $log_type))
|
||||
if (!teamcomment_allowed($log_record['cache_id'], $log_type, $log_record['oc_team_comment']))
|
||||
$oc_team_comment = 0;
|
||||
|
||||
//store?
|
||||
@@ -289,8 +289,7 @@
|
||||
$selected = ($log_record['logtype'] == $logtype ? ' selected="selected"' : '');
|
||||
$logtypeoptions .= '<option value="' . $logtype . '"' . $selected . '>' . htmlspecialchars($logtype_names[$logtype], ENT_COMPAT, 'UTF-8') . '</option>' . "\n";
|
||||
}
|
||||
|
||||
if (teamcomment_allowed($log_record['cache_id'],3))
|
||||
if (teamcomment_allowed($log_record['cache_id'], 3, $log_record['oc_team_comment']))
|
||||
tpl_set_var('teamcommentoption',
|
||||
mb_ereg_replace('{chk_sel}', ($oc_team_comment ? 'checked' : ''), $teamcomment_field));
|
||||
else
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
<input class="input20" type="text" name="activate_day" maxlength="2" value="{activate_day}"/>.
|
||||
<input class="input20" type="text" name="activate_month" maxlength="2" value="{activate_month}"/>.
|
||||
<input class="input40" type="text" name="activate_year" maxlength="4" value="{activate_year}"/>
|
||||
<select name="activate_hour" class="input40">
|
||||
<select name="activate_hour" class="input60">
|
||||
{activation_hours}
|
||||
</select> ' . t('#time_suffix_label#') . ' {activate_on_message}<br />
|
||||
<input type="radio" class="radio" name="publish" id="publish_notnow" value="notnow" {publish_notnow_checked}> <label for="publish_notnow">' . t('Do not publish now.') . '</label>
|
||||
|
||||
@@ -109,6 +109,11 @@
|
||||
$allowed_logtypes[] = 3; // note
|
||||
}
|
||||
|
||||
// always allow to keep the existing logtype when the log is edited by an admin
|
||||
if ($login->hasAdminPriv(ADMIN_USER) &&
|
||||
$old_logtype > 0 && !in_array($old_logtype+0,$allowed_logtypes))
|
||||
$allowed_logtypes[] = $old_logtype;
|
||||
|
||||
return $allowed_logtypes;
|
||||
}
|
||||
|
||||
@@ -119,7 +124,7 @@
|
||||
}
|
||||
|
||||
|
||||
function teamcomment_allowed($cache_id, $logtype_id)
|
||||
function teamcomment_allowed($cache_id, $logtype_id, $old_teamcomment=false)
|
||||
{
|
||||
global $login, $opt;
|
||||
|
||||
@@ -127,6 +132,8 @@
|
||||
return false;
|
||||
elseif ($logtype_id != 3 && ($logtype_id < 9 || $logtype_id > 14))
|
||||
return false;
|
||||
elseif ($old_teamcomment)
|
||||
return true;
|
||||
else
|
||||
{
|
||||
$rs = sql("SELECT `user_id`,`status` FROM `caches` WHERE `cache_id`='&1'", $cache_id);
|
||||
|
||||
@@ -60,7 +60,9 @@ class RSSParser {
|
||||
// increment counter
|
||||
$i++;
|
||||
}
|
||||
else if (!in_array($item->title,$headlines) &&
|
||||
// htmlspecialchars_decode() works around inconsistent HTML encoding
|
||||
// e.g. in SMF Forum Threads
|
||||
else if (!in_array(htmlspecialchars_decode($item->title),$headlines) &&
|
||||
strpos($item->title,'VERSCHOBEN') === FALSE) // hack to exclude forum thread-move messages
|
||||
{
|
||||
// fill array
|
||||
@@ -69,7 +71,7 @@ class RSSParser {
|
||||
'title' => $item->title,
|
||||
'link' => $item->link
|
||||
);
|
||||
$headlines[] = "" . $item->title;
|
||||
$headlines[] = "" . htmlspecialchars_decode($item->title);
|
||||
// increment counter
|
||||
$i++;
|
||||
}
|
||||
|
||||
@@ -542,6 +542,7 @@
|
||||
return $result;
|
||||
}
|
||||
|
||||
// returns false if no more matching rows exist
|
||||
function sql_fetch_row($rs)
|
||||
{
|
||||
global $opt;
|
||||
|
||||
@@ -413,6 +413,9 @@ class cache
|
||||
VALUES ('cache', 5, '&1', '&2', '&3', '&4')",
|
||||
$login->userid, $this->nCacheId, 0,
|
||||
'Cache ' . sql_escape($this->nCacheId) . ' has changed the owner from userid ' . sql_escape($this->getUserId()) . ' to ' . sql_escape($userid) . ' by ' . sql_escape($login->userid));
|
||||
// Adoptions now are recorded by trigger in cache_adoptions table.
|
||||
// Recording adoptions in 'logentries' may be discarded after ensuring that the
|
||||
// log entries are not used anywhere.
|
||||
sql("UPDATE `caches` SET `user_id`='&1' WHERE `cache_id`='&2'", $userid, $this->nCacheId);
|
||||
sql("DELETE FROM `cache_adoption` WHERE `cache_id`='&1'", $this->nCacheId);
|
||||
|
||||
@@ -516,6 +519,7 @@ class cache
|
||||
`csm`.`old_state` AS `old_status_id`,
|
||||
`csm`.`new_state` AS `new_status_id`,
|
||||
`user`.`username`,
|
||||
`user`.`user_id`,
|
||||
IFNULL(`stt_old`.`text`,`cs_old`.`name`) AS `old_status`,
|
||||
IFNULL(`stt_new`.`text`,`cs_new`.`name`) AS `new_status`
|
||||
FROM `cache_status_modified` `csm`
|
||||
@@ -528,6 +532,21 @@ class cache
|
||||
ORDER BY `date_modified` DESC", $this->getCacheId(), $opt['template']['locale']);
|
||||
$tpl->assign_rs('status_changes',$rs);
|
||||
sql_free_result($rs);
|
||||
|
||||
// Adoptions
|
||||
$rs = sql("SELECT `cache_adoptions`.`date`,
|
||||
`cache_adoptions`.`from_user_id`,
|
||||
`cache_adoptions`.`to_user_id`,
|
||||
`from_user`.`username` AS `from_username`,
|
||||
`to_user`.`username` AS `to_username`
|
||||
FROM `cache_adoptions`
|
||||
LEFT JOIN `user` `from_user` ON `from_user`.`user_id`=`from_user_id`
|
||||
LEFT JOIN `user` `to_user` ON `to_user`.`user_id`=`to_user_id`
|
||||
WHERE `cache_id`='&1'
|
||||
ORDER BY `cache_adoptions`.`date`, `cache_adoptions`.`id`",
|
||||
$this->getCacheId());
|
||||
$tpl->assign_rs('adoptions',$rs);
|
||||
sql_free_result($rs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -722,10 +722,12 @@ class user
|
||||
`last_name`='', `first_name`='', `country`=NULL, `pmr_flag`=0,
|
||||
`new_pw_code`=NULL, `new_pw_date`=NULL,
|
||||
`new_email`=NULL, `new_email_code`=NULL, `new_email_date`=NULL,
|
||||
`email_problems`=0,
|
||||
`email_problems`=0, `first_email_problem`=NULL, `last_email_problem`=NULL,
|
||||
`permanent_login_flag`=0, `activation_code`='',
|
||||
`notify_radius`=0, `statpic_text`='', `description`=''
|
||||
`notify_radius`=0
|
||||
WHERE `user_id`='&1'", $this->nUserId);
|
||||
// Statpic and profile description texts are published under the data license
|
||||
// terms and therefore need not to be deleted.
|
||||
sql("DELETE FROM `user_options` WHERE `user_id`='&1'", $this->nUserId);
|
||||
$this->reload();
|
||||
|
||||
@@ -741,7 +743,7 @@ class user
|
||||
$log = cachelog::createNew($rCache['cache_id'],$login->userid,true);
|
||||
if ($log !== false)
|
||||
{
|
||||
$log->setType(cachelog::LOGTYPE_LOCKED);
|
||||
$log->setType(cachelog::LOGTYPE_LOCKED,true);
|
||||
$log->setOcTeamComment(true);
|
||||
$log->setDate(date('Y-m-d'));
|
||||
$log->setText($translate->t('The user account has been disabled.', '','',0,'',1, $cache->getDefaultDescLanguage()));
|
||||
|
||||
@@ -341,5 +341,10 @@ class login
|
||||
|
||||
return ($this->admin & $privilege) == $privilege;
|
||||
}
|
||||
|
||||
function logged_in()
|
||||
{
|
||||
return $this->userid > 0;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -231,7 +231,7 @@
|
||||
$rs = sql("SELECT `id` FROM `cache_logs`
|
||||
WHERE `cache_id`='&1' AND `user_id`='&2' AND `type`='&3' AND `date`='&4' AND `text`='&5'",
|
||||
$cache_id, $usr['userid'], $log_type, $log_date, $log_text);
|
||||
$already_exists = sql_fetch_row($rs) != null;
|
||||
$already_exists = (sql_fetch_row($rs) !== false);
|
||||
sql_free_result($rs);
|
||||
|
||||
if (!$already_exists)
|
||||
|
||||
@@ -454,7 +454,8 @@ function output_searchresult($nResultId, $compact, $nLon1, $nLon2, $nLat1, $nLat
|
||||
LEFT JOIN `cache_logs` `notfound_logs` ON `notfound_logs`.`cache_id`=`caches`.`cache_id` AND `notfound_logs`.`user_id`='&6' AND `notfound_logs`.`type`=2
|
||||
LEFT JOIN `caches_attributes` ON `caches_attributes`.`cache_id`=`caches`.`cache_id` AND `caches_attributes`.`attrib_id`=6
|
||||
WHERE `map2_data`.`result_id`='&1' AND `caches`.`longitude`>'&2' AND `caches`.`longitude`<'&3' AND `caches`.`latitude`>'&4' AND `caches`.`latitude`<'&5'
|
||||
AND `caches`.`status`<>6 /* hide vandalized listings, locked duplicates etc. */
|
||||
AND `caches`.`status`<>6 /* hide vandalized listings, locked duplicates etc. */
|
||||
AND `caches`.`status`<>7 /* ... and locked/invisible caches */
|
||||
ORDER BY `caches`.`status` DESC, `oconly` AND NOT (`found` OR `notfound`), NOT (`found` OR `notfound`), `caches`.`type`<>4, MD5(`caches`.`name`)
|
||||
LIMIT &7",
|
||||
// sort in reverse order, because last are on top of map;
|
||||
|
||||
@@ -31,7 +31,20 @@
|
||||
if (!$tpl->is_cached())
|
||||
{
|
||||
sql_temp_table_slave('loglist');
|
||||
sql_slave("CREATE TEMPORARY TABLE &loglist (`id` INT(11) PRIMARY KEY) SELECT `cache_logs`.`id` FROM `cache_logs` INNER JOIN `caches` ON `cache_logs`.`cache_id`=`caches`.`cache_id` INNER JOIN `cache_status` ON `caches`.`status`=`cache_status`.`id` WHERE `cache_status`.`allow_user_view`=1 AND `caches`.`country`<>'&1' ORDER BY `cache_logs`.`date_created` DESC LIMIT &2", $exclude_country, $logcount);
|
||||
sql_slave("CREATE TEMPORARY TABLE &loglist (`id` INT(11) PRIMARY KEY)
|
||||
SELECT `cache_logs`.`id`
|
||||
FROM `cache_logs`
|
||||
INNER JOIN `caches` ON `cache_logs`.`cache_id`=`caches`.`cache_id`
|
||||
INNER JOIN `cache_status` ON `caches`.`status`=`cache_status`.`id`
|
||||
INNER JOIN `user` ON `cache_logs`.`user_id`=`user`.`user_id`
|
||||
WHERE `cache_status`.`allow_user_view`=1
|
||||
AND `caches`.`country`<>'&1'
|
||||
AND `username`<>'&2'
|
||||
ORDER BY `cache_logs`.`date_created` DESC
|
||||
LIMIT &3",
|
||||
$exclude_country,
|
||||
isset($_GET['showsyslogs']) ? '' : $opt['logic']['systemuser']['user'],
|
||||
$logcount);
|
||||
|
||||
if ($opt['logic']['new_logs_per_country'])
|
||||
$sqlOrderBy = '`countries`.`de` ASC, ';
|
||||
@@ -59,10 +72,9 @@
|
||||
INNER JOIN `countries` ON `caches`.`country`=`countries`.`short`
|
||||
LEFT JOIN `sys_trans_text` ON `countries`.`trans_id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1'
|
||||
LEFT JOIN `cache_logs_restored` ON `cache_logs_restored`.`id`=`cache_logs`.`id`
|
||||
WHERE `username`<>'&2' AND IFNULL(`cache_logs_restored`.`restored_by`,0)=0
|
||||
WHERE IFNULL(`cache_logs_restored`.`restored_by`,0)=0
|
||||
ORDER BY " . $sqlOrderBy . "`cache_logs`.`date_created` DESC",
|
||||
$opt['template']['locale'],
|
||||
isset($_GET['showsyslogs']) ? '' : $opt['logic']['systemuser']['user']);
|
||||
$opt['template']['locale']);
|
||||
|
||||
$newLogs = array();
|
||||
|
||||
|
||||
@@ -806,7 +806,7 @@ class Okapi
|
||||
{
|
||||
public static $data_store;
|
||||
public static $server;
|
||||
public static $revision = 810; # This gets replaced in automatically deployed packages
|
||||
public static $revision = 817; # This gets replaced in automatically deployed packages
|
||||
private static $okapi_vars = null;
|
||||
|
||||
/** Get a variable stored in okapi_vars. If variable not found, return $default. */
|
||||
|
||||
@@ -118,7 +118,7 @@ class WebService
|
||||
# We don't need to do any additional queries here.
|
||||
|
||||
$fields = 'code|name|location|date_created|url|type|status|size|size2|oxsize'.
|
||||
'|difficulty|terrain|description|hint|rating|owner|url|internal_id';
|
||||
'|difficulty|terrain|description|hint2|rating|owner|url|internal_id';
|
||||
if ($vars['images'] != 'none')
|
||||
$fields .= "|images";
|
||||
if ($vars['attrs'] != 'none')
|
||||
|
||||
@@ -113,7 +113,7 @@ http://www.gsak.net/xmlv1/5 http://www.gsak.net/xmlv1/5/gsak.xsd
|
||||
</ul>
|
||||
<? } ?>
|
||||
</groundspeak:long_description>
|
||||
<groundspeak:encoded_hints><?= Okapi::xmlescape($c['hint']) ?></groundspeak:encoded_hints>
|
||||
<groundspeak:encoded_hints><?= Okapi::xmlescape($c['hint2']) ?></groundspeak:encoded_hints>
|
||||
<? if ($vars['latest_logs']) { /* Does user want us to include latest log entries? */ ?>
|
||||
<groundspeak:logs>
|
||||
<? foreach ($c['latest_logs'] as $log) { ?>
|
||||
|
||||
@@ -177,12 +177,17 @@
|
||||
<li><b>req_passwd</b> - boolean; states if this cache requires a password
|
||||
in order to submit a "Found it" log entry,</li>
|
||||
<li><b>description</b> - HTML string, description of the cache,</li>
|
||||
<li><b>descriptions</b> - a dictionary (language code => HTML string) of cache
|
||||
<li><b>descriptions</b> - a dictionary (language code => HTML string) of cache
|
||||
descriptions,</li>
|
||||
<li><b>hint</b> - plain-text string, cache hints/spoilers; in general, hints should not be displayed to the user
|
||||
unless user specifically asks for them,</li>
|
||||
<li><b>hints</b> - a dictionary (language code => plain-text string) of cache
|
||||
hints/spoilers,</li>
|
||||
<li class="deprecated"><b>hint</b> - HTML-encoded string, cache hints/spoilers;
|
||||
deprecated (<a href="http://code.google.com/p/opencaching-api/issues/detail?id=261">Why?</a>),
|
||||
use <b>hint2</b> instead,</li>
|
||||
<li class="deprecated"><b>hints</b> - a dictionary (language code =>
|
||||
HTML-encoded string) of cache hints/spoilers; deprecated, use hints2 instead,</li>
|
||||
<li><b>hint2</b> - plain-text string, cache hints/spoilers; in general, hints
|
||||
should not be displayed to the user unless user specifically asks for them,</li>
|
||||
<li><b>hints2</b> - a dictionary (language code =>
|
||||
plain-text string) of cache hints/spoilers,</li>
|
||||
<li>
|
||||
<p><b>images</b> - list of dictionaries, each dictionary represents one
|
||||
image saved along the cache description; each dictionary has the
|
||||
|
||||
@@ -33,7 +33,7 @@ class WebService
|
||||
'my_notes', 'trackables_count', 'trackables', 'alt_wpts', 'last_found',
|
||||
'last_modified', 'date_created', 'date_hidden', 'internal_id', 'is_watched',
|
||||
'is_ignored', 'willattends', 'country', 'state', 'preview_image',
|
||||
'trip_time', 'trip_distance', 'attribution_note','gc_code');
|
||||
'trip_time', 'trip_distance', 'attribution_note','gc_code', 'hint2', 'hints2');
|
||||
|
||||
public static function call(OkapiRequest $request)
|
||||
{
|
||||
@@ -73,6 +73,7 @@ class WebService
|
||||
if (
|
||||
in_array('description', $fields) || in_array('descriptions', $fields)
|
||||
|| in_array('hint', $fields) || in_array('hints', $fields)
|
||||
|| in_array('hint2', $fields) || in_array('hints2', $fields)
|
||||
|| in_array('attribution_note', $fields)
|
||||
)
|
||||
{
|
||||
@@ -317,6 +318,8 @@ class WebService
|
||||
case 'descriptions': /* handled separately */ break;
|
||||
case 'hint': /* handled separately */ break;
|
||||
case 'hints': /* handled separately */ break;
|
||||
case 'hint2': /* handled separately */ break;
|
||||
case 'hints2': /* handled separately */ break;
|
||||
case 'images': /* handled separately */ break;
|
||||
case 'preview_image': /* handled separately */ break;
|
||||
case 'attrnames': /* handled separately */ break;
|
||||
@@ -461,15 +464,18 @@ class WebService
|
||||
# Descriptions and hints.
|
||||
|
||||
if (in_array('description', $fields) || in_array('descriptions', $fields)
|
||||
|| in_array('hint', $fields) || in_array('hints', $fields))
|
||||
|| in_array('hint', $fields) || in_array('hints', $fields)
|
||||
|| in_array('hint2', $fields) || in_array('hints2', $fields))
|
||||
{
|
||||
# At first, we will fill all those 4 fields, even if user requested just one
|
||||
# of them. We will chop off the remaining three at the end.
|
||||
|
||||
foreach ($results as &$result_ref)
|
||||
{
|
||||
$result_ref['descriptions'] = array();
|
||||
foreach ($results as &$result_ref)
|
||||
$result_ref['hints'] = array();
|
||||
$result_ref['hints2'] = array();
|
||||
}
|
||||
|
||||
# Get cache descriptions and hints.
|
||||
|
||||
@@ -500,17 +506,22 @@ class WebService
|
||||
$results[$cache_code]['descriptions'][strtolower($row['language'])] = $tmp;
|
||||
}
|
||||
if ($row['hint'])
|
||||
{
|
||||
$results[$cache_code]['hints'][strtolower($row['language'])] = $row['hint'];
|
||||
$results[$cache_code]['hints2'][strtolower($row['language'])]
|
||||
= htmlspecialchars_decode(mb_ereg_replace("<br />", "" , $row['hint']), ENT_COMPAT);
|
||||
}
|
||||
}
|
||||
foreach ($results as &$result_ref)
|
||||
{
|
||||
$result_ref['description'] = Okapi::pick_best_language($result_ref['descriptions'], $langpref);
|
||||
$result_ref['hint'] = Okapi::pick_best_language($result_ref['hints'], $langpref);
|
||||
$result_ref['hint2'] = Okapi::pick_best_language($result_ref['hints2'], $langpref);
|
||||
}
|
||||
|
||||
# Remove unwanted fields.
|
||||
|
||||
foreach (array('description', 'descriptions', 'hint', 'hints') as $field)
|
||||
foreach (array('description', 'descriptions', 'hint', 'hints', 'hint2', 'hints2') as $field)
|
||||
if (!in_array($field, $fields))
|
||||
foreach ($results as &$result_ref)
|
||||
unset($result_ref[$field]);
|
||||
|
||||
@@ -327,15 +327,15 @@ div.changelog ul li ul {font-size: 90%; margin:0}
|
||||
.table td {padding: 2px 7px 5px 7px; border: solid 0px rgb(150,150,150); text-align: left; font-size: 120%;}
|
||||
/* .table th {margin: 0px; background-color: #e6e6e6;color: #404040; padding: 2px 7px 2px 7px; border-top: solid 1px #404040; border-bottom: solid 1px #404040; empty-cells: show; text-align: left; font-size: 120%; } */
|
||||
/* .table th {margin: 0px; background-color: #7fa2ca;color: #f8f8f8; padding: 2px 7px 2px 7px; border: solid 0px rgb(150,150,150); empty-cells: show; text-align: left; font-size: 120%; } */
|
||||
.table th, .searchtable th {margin: 0px; background-color: #d8e5c9;color: #404040; padding: 2px 7px 2px 7px; border-top: solid 1px #404040; border-bottom: solid 1px #404040; empty-cells: show; text-align: left; font-size: 120%; }
|
||||
.searchtable th {margin: 0px; background-color: #d8e5c9;color: #404040; padding: 4px 0px 4px 0px; border-top: solid 1px #404040; border-bottom: solid 1px #404040; empty-cells: show; text-align: left; font-size: 12px; }
|
||||
.table th, .searchtable th {margin: 0px; background-color: #deebcd; color: #404040; padding: 2px 7px 2px 7px; border-top: solid 1px #404040; border-bottom: solid 1px #404040; empty-cells: show; text-align: left; font-size: 120%; }
|
||||
.searchtable th {margin: 0px; background-color: #deebcd; color: #404040; padding: 4px 0px 4px 0px; border-top: solid 1px #404040; border-bottom: solid 1px #404040; empty-cells: show; text-align: left; font-size: 12px; }
|
||||
.searchtable td { padding-top:2px; }
|
||||
.table-caption {margin: 0.5em 0px 1.0em 30px; padding: 0px; clear: both; text-align: left; font-size: 120%;}
|
||||
|
||||
.narrowtable {font-size: 10px; line-height: 2.0em; clear: left; padding: 0px; margin: 0.5em 0px 0.2em 0px; border: solid 0px rgb(150,150,150); empty-cells: show; border-collapse: collapse; background-color: rgb(255,255,255);}
|
||||
.narrowtable tr {margin: 0px; padding: 0px;}
|
||||
.narrowtable td {padding: 0 7px 0 7px; border: solid 0px rgb(150,150,150); text-align: left; font-size: 120%;}
|
||||
.narrowtable th {margin: 0px; background-color: #d8e5c9;color: #404040; padding: 2px 7px 2px 7px; border-top: solid 1px #404040; border-bottom: solid 1px #404040; empty-cells: show; text-align: left; font-size: 120%; }
|
||||
.narrowtable th {margin: 0px; background-color: #deebcd; color: #404040; padding: 2px 7px 2px 7px; border-top: solid 1px #404040; border-bottom: solid 1px #404040; empty-cells: show; text-align: left; font-size: 120%; }
|
||||
.narrowtable-caption {margin: 0.5em 0px 1.0em 30px; padding: 0px; clear: both; text-align: left; font-size: 120%;}
|
||||
|
||||
td.listicon {
|
||||
|
||||
BIN
htdocs/resource2/ocstyle/images/head/pano970-f13-moerfelden.jpg
Normal file
BIN
htdocs/resource2/ocstyle/images/head/pano970-f13-moerfelden.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 634 B |
@@ -1332,7 +1332,12 @@ function outputSearchForm($options)
|
||||
|
||||
// logtypen
|
||||
$logtype_options = '';
|
||||
$rs = sql("SELECT `log_types`.`id`, IFNULL(`sys_trans_text`.`text`, `log_types`.`name`) AS `name` FROM `log_types` LEFT JOIN `sys_trans` ON `log_types`.`trans_id`=`sys_trans`.`id` AND `sys_trans`.`text`=`log_types`.`name` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1' ORDER BY `id` ASC", $locale);
|
||||
$rs = sql("SELECT `log_types`.`id`,
|
||||
IFNULL(`sys_trans_text`.`text`, `log_types`.`name`) AS `name`
|
||||
FROM `log_types`
|
||||
LEFT JOIN `sys_trans_text` ON `sys_trans_text`.`trans_id`=`log_types`.`trans_id` AND `sys_trans_text`.`lang`='&1'
|
||||
ORDER BY `log_types`.`id` ASC", $locale);
|
||||
|
||||
for ($i = 0; $i < mysql_num_rows($rs); $i++)
|
||||
{
|
||||
$record = sql_fetch_array($rs);
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
* Unicode Reminder メモ
|
||||
***************************************************************************}
|
||||
{* OCSTYLE *}
|
||||
{if !$reportdisplay}
|
||||
<div class="content2-pagetitle">
|
||||
<img src="resource2/{$opt.template.style}/images/misc/32x32-tools.png" style="align: left; margin-right: 10px;" width="32" height="32" alt="World" />
|
||||
{t}Cache history{/t}
|
||||
@@ -16,36 +17,127 @@
|
||||
<input type="submit" name="submitform" value="{t}Show{/t}" class="formbutton" onclick="submitbutton('submitform')" />
|
||||
</p>
|
||||
</form>
|
||||
{/if}
|
||||
|
||||
{if $showhistory}
|
||||
<p>
|
||||
<a href="viewcache.php?cacheid={$cache.cache_id}">{$cache.name}</a>
|
||||
{t}by{/t}
|
||||
<a href="viewprofile.php?userid={$cache.user_id}">{$ownername}</a>
|
||||
</p>
|
||||
<br />
|
||||
|
||||
<div class="content2-container bg-blue02">
|
||||
<p class="content-title-noshade-size2">
|
||||
<img src="resource2/{$opt.template.style}/images/misc/32x32-tools.png" style="align: left; margin-right: 10px;" width="22" height="22" alt="" />
|
||||
{t}Cache reports{/t}
|
||||
{if !$reportdisplay}
|
||||
<p>
|
||||
<a href="viewcache.php?cacheid={$cache.cache_id}">{$cache.name}</a>
|
||||
{t}by{/t}
|
||||
<a href="viewprofile.php?userid={$cache.user_id}">{$ownername}</a>
|
||||
</p>
|
||||
</div>
|
||||
{include file="adminreport_history.tpl"}
|
||||
<br />
|
||||
<br />
|
||||
{/if}
|
||||
|
||||
<div class="content2-container bg-blue02">
|
||||
<p class="content-title-noshade-size2">
|
||||
<img src="resource2/{$opt.template.style}/images/description/22x22-logs.png" style="align: left; margin-right: 10px;" width="22" height="22" alt="" />
|
||||
{t}Deleted logs{/t} <small>{t}since February 2012{/t}</small>
|
||||
</p>
|
||||
</div>
|
||||
<div class="content2-container">
|
||||
{include file="res_logentry.tpl" header=false footer=false footbacklink=false cache=$cache logs=$deleted_logs}
|
||||
</div>
|
||||
<br />
|
||||
{if !$reportdisplay || $reports|@count}
|
||||
<div class="content2-container bg-blue02">
|
||||
<p class="content-title-noshade-size2">
|
||||
<img src="resource2/{$opt.template.style}/images/misc/32x32-tools.png" style="align: left; margin-right: 10px;" width="22" height="22" alt="" />
|
||||
{if $reportdisplay} {t}Other reports for this cache{/t}{else}{t}Cache reports{/t}{/if}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{include file="res_status_changes.tpl"}
|
||||
<table class="table" width="98%">
|
||||
{if $reports|@count}
|
||||
<tr>
|
||||
<th>{t}ID{/t}</th>
|
||||
<th>{t}Report date{/t}</th>
|
||||
<th>{t}Reporter{/t}</th>
|
||||
<th>{t}Reason{/t}</th>
|
||||
<th>{t}Admin{/t}</th>
|
||||
<th>{t}Last modified{/t}</th>
|
||||
<th>{t}Status{/t}</th>
|
||||
</tr>
|
||||
|
||||
{foreach from=$reports item=report}
|
||||
<tr>
|
||||
<td><a href="adminreports.php?id={$report.id}">{$report.id}</a></td>
|
||||
<td>{$report.date_created|date_format:$opt.format.date}</td>
|
||||
<td><a href="viewprofile.php?userid={$report.userid}">{$report.usernick}</a></td>
|
||||
<td>{$report.reason}</td>
|
||||
<td><a href="viewprofile.php?userid={$report.adminid}">{$report.adminnick}</a></td>
|
||||
<td>{$report.lastmodified|date_format:$opt.format.date}</td>
|
||||
<td>{$report.status}</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
{else}
|
||||
<tr><td></td></tr>
|
||||
{/if}
|
||||
</table>
|
||||
<br />
|
||||
{/if}
|
||||
|
||||
{if !$reportdisplay || $deleted_logs|@count}
|
||||
<div class="content2-container bg-blue02">
|
||||
<p class="content-title-noshade-size2">
|
||||
<img src="resource2/{$opt.template.style}/images/description/22x22-logs.png" style="align: left; margin-right: 10px;" width="22" height="22" alt="" />
|
||||
{t}Deleted logs{/t} <small>{t}since deletion date February 2012{/t}</small>
|
||||
</p>
|
||||
</div>
|
||||
<div class="content2-container">
|
||||
{include file="res_logentry.tpl" header=false footer=false footbacklink=false cache=$cache logs=$deleted_logs}
|
||||
</div>
|
||||
<p> </p>
|
||||
{/if}
|
||||
|
||||
{if !$reportdisplay || $status_changes|@count}
|
||||
<div class="content2-container bg-blue02">
|
||||
<p class="content-title-noshade-size2">
|
||||
<img src="resource2/{$opt.template.style}/images/description/22x22-logs.png" style="align: left; margin-right: 10px;" width="22" height="22" alt="" />
|
||||
{t}Status changes{/t} <small>{t}since June 2013{/t}</small>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<table class="table" width="90%">
|
||||
{if $status_changes|@count}
|
||||
<tr>
|
||||
<th>{t}Date{/t}</th>
|
||||
<th>{t}Status{/t}</th>
|
||||
<th>{t}Changed by{/t}</th>
|
||||
</tr>
|
||||
{foreach from=$status_changes item=change}
|
||||
<tr>
|
||||
<td>{$change.date_modified|date_format:$opt.format.date}</td>
|
||||
<td>{$change.old_status} → {$change.new_status} {include file="res_cachestatus.tpl" status=$change.new_status_id}</td>
|
||||
<td><a href="viewprofile.php?userid={$change.user_id}">{$change.username}</a></td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
{else}
|
||||
<tr><td></td></tr>
|
||||
{/if}
|
||||
</table>
|
||||
<p> </p>
|
||||
{/if}
|
||||
|
||||
{if !$reportdisplay || $adoptions|@count}
|
||||
<div class="content2-container bg-blue02">
|
||||
<p class="content-title-noshade-size2">
|
||||
<img src="resource2/{$opt.template.style}/images/description/22x22-logs.png" style="align: left; margin-right: 10px;" width="22" height="22" alt="" />
|
||||
{t}Adoptions_{/t} <small>{t}since September 2012{/t}</small>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<table class="table" width="90%">
|
||||
{if $adoptions|@count}
|
||||
<tr>
|
||||
<th>{t}Date{/t}</th>
|
||||
<th>{t}From Owner{/t}</th>
|
||||
<th></th>
|
||||
<th>{t}To Owner{/t}</th>
|
||||
</tr>
|
||||
{foreach from=$adoptions item=adoption}
|
||||
<tr>
|
||||
<td>{$adoption.date|date_format:$opt.format.date}</td>
|
||||
<td><a href="viewprofile.php?userid={$adoption.from_user_id}">{$adoption.from_username}</a></th>
|
||||
<td>→</td>
|
||||
<td><a href="viewprofile.php?userid={$adoption.to_user_id}">{$adoption.to_username}</a></th>
|
||||
</tr>
|
||||
{/foreach}
|
||||
{else}
|
||||
<tr><td></td></tr>
|
||||
{/if}
|
||||
</table>
|
||||
{/if}
|
||||
|
||||
{else}
|
||||
<p class="errormsg">{$error}</p>
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
{***************************************************************************
|
||||
* You can find the license in the docs directory
|
||||
*
|
||||
* Unicode Reminder メモ
|
||||
***************************************************************************}
|
||||
{* OCSTYLE *}
|
||||
|
||||
<table class="table" width="98%">
|
||||
{if $reports|@count}
|
||||
<tr>
|
||||
<th>{t}ID{/t}</th>
|
||||
<th>{t}Report date{/t}</th>
|
||||
<th>{t}Reporter{/t}</th>
|
||||
<th>{t}Reason{/t}</th>
|
||||
<th>{t}Admin{/t}</th>
|
||||
<th>{t}Last modified{/t}</th>
|
||||
<th>{t}Status{/t}</th>
|
||||
</tr>
|
||||
|
||||
{foreach from=$reports item=report}
|
||||
<tr>
|
||||
<td><a href="adminreports.php?id={$report.id}">{$report.id}</a></td>
|
||||
<td>{$report.date_created|date_format:$opt.format.date}</td>
|
||||
<td><a href="viewprofile.php?userid={$report.userid}">{$report.usernick}</a></td>
|
||||
<td>{$report.reason}</td>
|
||||
<td><a href="viewprofile.php?userid={$report.adminid}">{$report.adminnick}</a></td>
|
||||
<td>{$report.lastmodified|date_format:$opt.format.date}</td>
|
||||
<td>{$report.status}</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
|
||||
{else}
|
||||
<tr><td></td></tr>
|
||||
{/if}
|
||||
</table>
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
{/if}
|
||||
<p style="line-height: 1.6em;"><b>{t}State:{/t}</b> {$status} <b>Admin:</b> {if $adminnick==''}{t}not assigned{/t}{else}{if $otheradmin}<font color="red"><b>{/if}{$adminnick|escape}{if $otheradmin}</b></font>{/if}{/if}</p>
|
||||
<p style="line-height: 1.6em;"><b>{t}Reason:{/t}</b> {$reason|escape|nl2br}</p>
|
||||
<p style="line-height: 1.6em;"><b>{t}Comment:{/t}</b> {$note|escape|nl2br}</p>
|
||||
<p style="line-height: 1.6em; margin-bottom:16px"><b>{t}Comment:{/t}</b> {$note|escape|nl2br}</p>
|
||||
|
||||
<div class="content2-container bg-blue02">
|
||||
<p class="content-title-noshade-size2">
|
||||
@@ -76,7 +76,7 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p style="line-height: 1.6em; margin-bottom:16px">
|
||||
<p style="line-height: 1.6em; margin-bottom:24px">
|
||||
{if !$ownreport}
|
||||
<input type="submit" name="assign" value="{t}Assign to me{/t}" class="formbutton" onclick="submitbutton('assign')" />
|
||||
{else}
|
||||
@@ -107,32 +107,7 @@
|
||||
{/if}
|
||||
<br />
|
||||
|
||||
{if $reports|@count}
|
||||
<div class="content2-container bg-blue02">
|
||||
<p class="content-title-noshade-size2">
|
||||
<img src="resource2/{$opt.template.style}/images/misc/32x32-tools.png" style="align: left; margin-right: 10px;" width="22" height="22" alt="" />
|
||||
{t}Other reports for this cache{/t}
|
||||
</p>
|
||||
</div>
|
||||
{include file="adminreport_history.tpl"}
|
||||
{/if}
|
||||
|
||||
{if $deleted_logs|@count}
|
||||
<div class="content2-container bg-blue02">
|
||||
<p class="content-title-noshade-size2">
|
||||
<img src="resource2/{$opt.template.style}/images/description/22x22-logs.png" style="align: left; margin-right: 10px;" width="22" height="22" alt="" />
|
||||
{t}Deleted logs{/t} <small>{t}since February 2012{/t}</small>
|
||||
</p>
|
||||
</div>
|
||||
<div class="content2-container">
|
||||
{include file="res_logentry.tpl" header=false footer=false footbacklink=false cache=$cache logs=$deleted_logs}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $status_changes|@count}
|
||||
{include file="res_status_changes.tpl"}
|
||||
{/if}
|
||||
|
||||
{include file=adminhistory.tpl reportdisplay=true showhistory=true}
|
||||
{/if}
|
||||
|
||||
</form>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<p>Im Folgenden sind alle Veränderungen ab OC Version 3.0 aufgelistet. Manche Kleinigkeiten wurden zur besseren Übersicht weggelassen und sind im <a href="http://forum.opencaching-network.org/index.php?board=43.0">Entwicklerforum</a> nachlesbar.</p>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Version 8</strong> – 1. Juni 2013</p>
|
||||
<p id="v3.0.8"><strong>OC 3.0 Version 8</strong> – 1. Juni 2013</p>
|
||||
<p>Neu:</p>
|
||||
<ul>
|
||||
<li>Der Cachestatus kann (nur noch) per Log geändert werden. Dazu gibt es die neuen Logtypen <em>momentan nicht verfügbar</em>, <em>archiviert</em>, <em>gesperrt</em> und <em>kann gesucht werden</em>. Der gleiche Status kann auch mehrmals geloggt werden, z.B. um zu signalieren dass mit dem Cache alles ok ist. Der Typ alter Logs kann nachträglich geändert werden.</li>
|
||||
@@ -76,7 +76,7 @@
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Version 7</strong> – 19. April 2013</p>
|
||||
<p id="v3.0.7"><strong>OC 3.0 Version 7</strong> – 19. April 2013</p>
|
||||
<ul>
|
||||
<li>Neu: <a href="okapi">OKAPI</a></li>
|
||||
<li>„Apple-Touch-Icons“ für Smartphones</li>
|
||||
@@ -84,7 +84,7 @@
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Version 6</strong> – 12. April 2013</p>
|
||||
<p id="v3.0.6"><strong>OC 3.0 Version 6</strong> – 12. April 2013</p>
|
||||
<p>Neu:</p>
|
||||
<ul>
|
||||
<li>Loggen mit Uhrzeit</li>
|
||||
@@ -125,7 +125,7 @@
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Version 5</strong> – 16. März 2013</p>
|
||||
<p id="v3.0.5"><strong>OC 3.0 Version 5</strong> – 16. März 2013</p>
|
||||
<p>Karte komplett überarbeitet:</p>
|
||||
<ul>
|
||||
<li>Markierung von eigenen, gefundenen, nicht gefundenen und <a href="http://wiki.opencaching.de/index.php/OConly" target="_blank">OConly</a>-Caches</li>
|
||||
@@ -175,7 +175,7 @@
|
||||
<li>dänische Flagge bei dänischen Cachebeschreibungen</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>OC 3.0 Version 4</strong> – 17. Februar 2013</p>
|
||||
<p id="v3.0.4"><strong>OC 3.0 Version 4</strong> – 17. Februar 2013</p>
|
||||
<p>Neu:</p>
|
||||
<ul>
|
||||
<li>neue Cachegröße „nano“</li>
|
||||
@@ -206,7 +206,7 @@
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Version 3</strong> – 18. November 2012</p>
|
||||
<p id="v3.0.3"><strong>OC 3.0 Version 3</strong> – 18. November 2012</p>
|
||||
<p>Neu:</p>
|
||||
<ul>
|
||||
<li>Attribut „nur zu bestimmten Jahreszeiten“</li>
|
||||
@@ -231,7 +231,7 @@
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Version 2</strong> – 26. August 2012</p>
|
||||
<p id="v3.0.2"><strong>OC 3.0 Version 2</strong> – 26. August 2012</p>
|
||||
<p>Neu:</p>
|
||||
<ul>
|
||||
<li><a href="./articles.php?page=cacheinfo#difficulty">Schwierigkeitsgrade</a> erklärt, inklusive Tooltip und Link in den Cachelistings</li>
|
||||
@@ -271,9 +271,9 @@
|
||||
<li>Logbearbeitungsberechtigungen für gesperrte Caches korrigiert</li>
|
||||
<li>wirkungslose Spoileroption beim Hochladen von Logbildern entfernt [→ wieder eingebaut in Version 5]</li>
|
||||
</ul>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Version 1</strong> – 8. August 2012</p>
|
||||
<p id="v3.0.1"><strong>OC 3.0 Version 1</strong> – 8. August 2012</p>
|
||||
<p>Neu:</p>
|
||||
<ul>
|
||||
<li>Kurzadressen für Direktzugriff auf Cachelistings, z.B. <a href="http://www.opencaching.de/OCD93B">http://opencaching.de/OCD93B</a></li>
|
||||
|
||||
@@ -79,11 +79,11 @@
|
||||
Vorstandes gemeinsam vertretungsberechtigt.
|
||||
</p>
|
||||
<p>
|
||||
Der geschäftsführende Vorstand besteht aus (Stand 31.08.2012):
|
||||
Der geschäftsführende Vorstand besteht aus (Stand 06.06.2013):
|
||||
</p>
|
||||
<ul class="indent">
|
||||
<li>Michael Vaahsen, Vorsitzender</li>
|
||||
<li>Gerald Halbig, stellv. Vorsitzender</li>
|
||||
<li>unbesetzt, stellv. Vorsitzender</li>
|
||||
<li>Maik Bischoff, Kassenwart</li>
|
||||
</ul>
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
<tr><td class="header-small"><b>Bild</b></td><td class="header-small"><b>Nickname</b></td><td class="header-small"><b>Aufgabenbereiche</b></td></tr>
|
||||
<tr><td></td><td></td><td></td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/4_vs.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=162754">4_Vs</a></td><td>Vorsitzender</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/dl8ndm.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=102263">dl8ndm</a></td><td>stellvertretender Vorsitzender</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/schrottie.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=140946">Schrottie</a></td><td>Kassenwart; Anwendersupport, Datenpflege</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/danlex.png" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=222261">Danlex</a></td><td>Pressesprecher; Anwendersupport, Datenpflege</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/dummy.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=137473">bohrsty</a></td><td>Leiter Technik/Systemadministration</td></tr>
|
||||
@@ -31,8 +30,8 @@
|
||||
<tr><td></td><td></td><td></td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/bundy609.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=189552">Bundy609</a></td><td>Anwendersupport, Datenpflege</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/clanfamily.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=244244">ClanFamily</a></td><td>Design, Softwareentwicklung</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/cmanie.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=222664">cmanie</a></td><td>Softwareentwicklung</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/dl6hbo.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=148310">dl6hbo</a></td><td>Serverbetrieb, Dokumentation</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/doglobe.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=193414">doglobe</a></td><td>Projekt „Cachewartung“</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/flopp.png" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=126329">Flopp</a></td><td>Softwareentwicklung, Anwendersupport, Datenpflege</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/following.png" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=150360">following</a></td><td>Datenpflege, Softwareentwicklung, Forenmoderation, Wiki</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/friedrichfroebel.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=234947">FriedrichFröbel</a></td><td>Wiki, Forenmoderation</td></tr>
|
||||
|
||||
@@ -10,22 +10,22 @@
|
||||
|
||||
<p>Der Verein Opencaching Deutschland wurde am 9. Juni 2012 gegründet mit dem Zweck, den Betrieb von Opencaching.de (OC) zu übernehmen und die zukünftige Entwicklung von OC sicherzustellen. Ferner wird der Verein auch zukünftige Projekte zum Thema Opencaching begleiten.<br /><br />
|
||||
|
||||
<em>Wo ist der Sitz des Vereins?</em><br />
|
||||
<b><em>Wo ist der Sitz des Vereins?</em></b><br />
|
||||
Der Sitz des Vereins ist Bad Homburg vor der Höhe. Wir haben diesen Sitz gewählt, da er zentral gelegen ist. Letztenendes ist der Sitz von Opencaching Deutschland aber zweitrangig, denn es handelt sich um einen online agierenden Verein, der das Vereinsleben (fast) komplett online abbildet.<br />Mitgliederversammlungen, Vorstandssitzungen und Konferenzen zur weiteren Entwicklung von Opencaching werden per TeamSpeak abgehalten und dokumentiert. Wir arbeiten viel mit E-Mail und natürlich in unserem <a href="http://forum.opencaching-network.org" target="_blank">Forum</a>.<br /><br />
|
||||
|
||||
<em>Was kostet die Mitgliedschaft im Verein?</em><br />
|
||||
<b><em>Was kostet die Mitgliedschaft im Verein?</em></b><br />
|
||||
Für ordentliche Mitglieder, die Opencaching.de mitgestalten, ist die Mitgliedschaft kostenfrei. Wir sind immer auf der Suche nach Entwicklern, Grafikern, Fotografen, Lektoren, Supportlern, Dokumentatoren etc.! Wer nicht die Zeit hat, um sich bei Opencaching einzubringen, kann stattdessen Fördermitglied werden. Der Mindestbeitrag für Fördermitglieder beträgt derzeit 1 Euro / Monat.<br /><br />
|
||||
|
||||
<em>Wo finde ich die aktuelle Satzung?</em><br />
|
||||
<b><em>Wo finde ich die aktuelle Satzung?</em></b><br />
|
||||
Die <a href="http://wiki.opencaching.de/OCeV_Satzung_aktuell.pdf">aktuelle Satzung</a> kannst Du <a href="http://wiki.opencaching.de/OCeV_Satzung_aktuell.pdf">hier</a> herunterladen.<br /><br />
|
||||
|
||||
<em>Wo finde ich den Mitgliedsantrag?</em><br />
|
||||
<b><em>Wo finde ich den Mitgliedsantrag?</em></b><br />
|
||||
Den <a href="http://wiki.opencaching.de/Beitritt_OCeV_aktuell.pdf">Mitgliedsantrag</a> kannst Du <a href="http://wiki.opencaching.de/Beitritt_OCeV_aktuell.pdf">hier</a> herunterladen.<br /><br />
|
||||
|
||||
<em>Ich möchte Opencaching unterstützen, habe aber kein Interesse an einem Vereinsbeitritt. Was kann ich noch tun?</em><br />
|
||||
<b><em>Ich möchte Opencaching unterstützen, habe aber kein Interesse an einem Vereinsbeitritt. Was kann ich noch tun?</em></b><br />
|
||||
Da der technische Betrieb der Website laufende Kosten verursacht, sind wir auf Spenden angewiesen. Über unsere <a href="./articles.php?page=donations" target="_blank">Spendenseite</a> kannst du uns jederzeit einen kleinen Obolus zukommen lassen, auch wenige Euro helfen uns weiter.<br /><br />
|
||||
|
||||
<em>Ich habe Fragen oder Anregungen zum Verein, an wen kann ich mich wenden?</em><br />
|
||||
<b><em>Ich habe Fragen oder Anregungen zum Verein, an wen kann ich mich wenden?</em></b><br />
|
||||
Du kannst den Vereinsvorstand unter <a href="mailto:verein@opencaching.de">verein@opencaching.de</a> gerne kontaktieren.<br /><br />
|
||||
|
||||
</div>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<p>This page lists all changes since version 3.0. Some small items have been omitted here.</p>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Release 8</strong> – June 1, 2013</p>
|
||||
<p id="v3.0.8"><strong>OC 3.0 Release 8</strong> – June 1, 2013</p>
|
||||
<p>New:</p>
|
||||
<ul>
|
||||
<li>The geocache listing status can now (only) be changed by logging the new state. New log types <em>temporarily unavailable</em>, <em>archived</em>, <em>locked </em> und <em>ready for search</em> have been added. Unchanged states may be logged, too, e.g. to confirm that the cache is still searchable. The type of old logs can be changed afterwards.</li>
|
||||
@@ -74,7 +74,7 @@
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Release 7</strong> – April 19, 2013</p>
|
||||
<p id="v3.0.7"><strong>OC 3.0 Release 7</strong> – April 19, 2013</p>
|
||||
<ul>
|
||||
<li>New: <a href="okapi">OKAPI</a></li>
|
||||
<li>"Apple Touch Icons" for Smartphones</li>
|
||||
@@ -82,7 +82,7 @@
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Release 6</strong> – April 12, 2013</p>
|
||||
<p id="v3.0.6"><strong>OC 3.0 Release 6</strong> – April 12, 2013</p>
|
||||
<p>New:</p>
|
||||
<ul>
|
||||
<li>logging with time</li>
|
||||
@@ -123,7 +123,7 @@
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Release 5</strong> – March 16, 2013</p>
|
||||
<p id="v3.0.5"><strong>OC 3.0 Release 5</strong> – March 16, 2013</p>
|
||||
<p>Completely reworked map:</p>
|
||||
<ul>
|
||||
<li>Own, found, not found and <a href="http://wiki.opencaching.de/index.php/OConly" target="_blank">OConly</a> caches are marked</li>
|
||||
@@ -172,7 +172,7 @@
|
||||
<li>fixed nano size selection in search form</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>OC 3.0 Release 4</strong> – February 17, 2013
|
||||
<p id="v3.0.4"><strong>OC 3.0 Release 4</strong> – February 17, 2013
|
||||
<p>New:</p>
|
||||
<ul>
|
||||
<li>new cache size "nano"</li>
|
||||
@@ -202,7 +202,7 @@
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Release 3</strong> – November 18, 2012</p>
|
||||
<p id="v3.0.3"><strong>OC 3.0 Release 3</strong> – November 18, 2012</p>
|
||||
<p>New:</p>
|
||||
<ul>
|
||||
<li>attribute "only at certain seasons"</li>
|
||||
@@ -227,7 +227,7 @@
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Release 2</strong> – August 26, 2012</p>
|
||||
<p id="v3.0.2"><strong>OC 3.0 Release 2</strong> – August 26, 2012</p>
|
||||
<p>New:</p>
|
||||
<ul>
|
||||
<li><a href="./articles.php?page=cacheinfo#difficulty">Difficulty ratings</a> explained, including tooltips and links within the cache listings</li>
|
||||
@@ -264,9 +264,9 @@
|
||||
<li>fixed log edit permissions for locked caches</li>
|
||||
<li>removed dummy spoiler option when uploading log pictures</li>
|
||||
</ul>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<p><strong>OC 3.0 Release 1</strong> – August 8, 2012</p>
|
||||
<p id="v3.0.1"><strong>OC 3.0 Release 1</strong> – August 8, 2012</p>
|
||||
<p>New:</p>
|
||||
<ul>
|
||||
<li>URL shortener for direct cache listing access, e.g. <a href="http://www.opencaching.de/OCD93B">http://www.opencaching.de/OCD93B</a></li>
|
||||
|
||||
@@ -62,11 +62,11 @@
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The managing comittee are (as of August 31, 2012):
|
||||
The managing comittee are (as of July 06, 2013):
|
||||
</p>
|
||||
<ul class="indent">
|
||||
<li>Michael Vaahsen, chairman</li>
|
||||
<li>Gerald Halbig, vice chairman</li>
|
||||
<li>n.n., vice chairman</li>
|
||||
<li>Maik Bischoff, treasurer</li>
|
||||
</ul>
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
<tr><td class="header-small"></td><td class="header-small"><b>Nickname</b></td><td class="header-small"><b>Assignments</b></td></tr>
|
||||
<tr><td></td><td></td><td></td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/4_vs.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=162754">4_Vs</a></td><td>chairman</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/dl8ndm.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=102263">dl8ndm</a></td><td>vice chairman</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/schrottie.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=140946">Schrottie</a></td><td>treasurer; user support, data maintenance</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/danlex.png" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=222261">Danlex</a></td><td>press spokesman; user support, data maintenance</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/dummy.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=137473">bohrsty</a></td><td>head of system administration</td></tr>
|
||||
@@ -30,8 +29,8 @@
|
||||
<tr><td></td><td></td><td></td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/bundy609.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=189552">Bundy609</a></td><td>user support, data maintenance</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/clanfamily.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=244244">ClanFamily</a></td><td>design, software development</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/cmanie.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=222664">cmanie</a></td><td>software development</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/dl6hbo.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=148310">dl6hbo</a></td><td>server operation, documentation</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/doglobe.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=193414">doglobe</a></td><td>project „cache maintenance“</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/flopp.png" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=126329">Flopp</a></td><td>software development, user support, data maintenance</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/following.png" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=150360">following</a></td><td>data maintenance, software development, message board moderation, wiki</td></tr>
|
||||
<tr><td><img src="http://www.opencaching.de/images/team/friedrichfroebel.jpg" /></td><td><a href="http://www.opencaching.de/viewprofile.php?userid=234947">FriedrichFröbel</a></td><td>wiki, message board moderation</td></tr>
|
||||
|
||||
@@ -10,22 +10,22 @@
|
||||
|
||||
<p>The Opencaching Deutschland e.V. (e.V. = registered association) was founded on June 9, 2012 as new operator of the Opencaching.de website (OC), and to ensure future development of OC. The association may also support other upcoming Opencaching projects.<br /><br />
|
||||
|
||||
<em>Where is the association located?</em><br />
|
||||
<b><em>Where is the association located?</em></b><br />
|
||||
The association's registered address is at Bad Homburg vor der Höhe near Frankfurt/Main. We chose this place because it is a central location in Germany. Eventually, the location is not important as the association nearly solely acts online. General meetings, board sessions and conferences on further development of Opencaching.de take place via TeamSpeak. We use E-Mail and – of course – our <a href="http://forum.opencaching-network.org" target="_blank">Forum</a>.<br /><br />
|
||||
|
||||
<em>What do I pay as Opencaching Deutschland member?</em><br />
|
||||
<b><em>What do I pay as Opencaching Deutschland member?</em></b><br />
|
||||
Membership is free for active members (<em>ordentliche Mitglieder</em>) who directly contribute time and work to the Opencaching.de project. We are always looking for software developers and testes, graphic designers, photographers, lectors, support people, documenters etc.! If you don't have the time for this, you may become passive member (<em>Fördermitglied</em>). The minimum fee for passive members is 1 Euro per month.<br /><br />
|
||||
|
||||
<em>Where do I find the association's statutes?</em><br />
|
||||
<b><em>Where do I find the association's statutes?</em></b><br />
|
||||
You cand download the current statutes <a href="http://wiki.opencaching.de/OCeV_Satzung_aktuell.pdf">here</a> (in German).<br /><br />
|
||||
|
||||
<em>Where do I find the membership application form?</em><br />
|
||||
<b><em>Where do I find the membership application form?</em></b><br />
|
||||
You can download the application form <a href="http://wiki.opencaching.de/Beitritt_OCeV_aktuell.pdf">here</a> (in German).<br /><br />
|
||||
|
||||
<em>I would like to support Opencaching, but I don't want do join the association. What else can I do?</em><br />
|
||||
<b><em>I would like to support Opencaching, but I don't want do join the association. What else can I do?</em></b><br />
|
||||
We depend on your donations to finance the technical operation of the website. We will be glad to recieve you support via our <a href="./articles.php?page=donations" target="_blank">donations page</a>; a few Euros will already help us.<br /><br />
|
||||
|
||||
<em>Where can I ask further questions on the association?</em><br />
|
||||
<b><em>Where can I ask further questions on the association?</em></b><br />
|
||||
You are welcome to contact the chairman at <a href="mailto:verein@opencaching.de">verein@opencaching.de</a>.<br /><br />
|
||||
|
||||
</div>
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
{t 1=$smarty.capture.cachename}Logentries for %1{/t}
|
||||
<span style="font-weight: 400;">
|
||||
<img src="resource2/{$opt.template.style}/images/log/16x16-{if $cache.type==6}attended{else}found{/if}.png" width="16" height="16" align="middle" border="0" align="left" alt="{if $cache.type==6}{t}Attended{/t}{else}{t}Found{/t}{/if}" title="{if $cache.type==6}{t}Attended{/t}{else}{t}Found{/t}{/if}"> {$cache.found}x
|
||||
|
||||
<img src="resource2/{$opt.template.style}/images/log/16x16-{if $cache.type==6}will_attend{else}dnf{/if}.png" width="16" height="16" align="middle" border="0" align="left" alt="{if $cache.type==6}{t}Will attend{/t}{else}{t}Not Found{/t}{/if}" title="{if $cache.type==6}{t}Will attend{/t}{else}{t}Not Found{/t}{/if}"> {if $cache.type==6}{$cache.willattend}{else}{$cache.notfound}{/if}x
|
||||
|
||||
<img src="resource2/{$opt.template.style}/images/log/16x16-note.png" width="16" height="16" align="middle" border="0" align="left" align="{t}Note{/t}" title="{t}Note{/t}"> {$cache.note}x<br />
|
||||
<img src="resource2/{$opt.template.style}/images/log/16x16-{if $cache.type==6}will_attend{else}dnf{/if}.png" width="16" height="16" align="middle" border="0" align="left" alt="{if $cache.type==6}{t}Will attend{/t}{else}{t}Not found{/t}{/if}" title="{if $cache.type==6}{t}Will attend{/t}{else}{t}Not found{/t}{/if}"> {if $cache.type==6}{$cache.willattend}{else}{$cache.notfound}{/if}x
|
||||
<img src="resource2/{$opt.template.style}/images/log/16x16-note.png" width="16" height="16" align="middle" border="0" align="left" align="{t}Note{/t}" title="{t}Note{/t}"> {$cache.note}x
|
||||
{if $cache.maintenance}<img src="resource2/{$opt.template.style}/images/viewcache/16x16-maintenance_shifted.png" width="16" height="16" align="middle" border="0" align="left" align="{t}Maintenance{/t}" title="{t}Maintenance{/t}"> {$cache.maintenance}x{/if}
|
||||
<br />
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<td style="text-align:center; padding:0" align="center" valign="middle">
|
||||
<div style="max-width:{$itemwidth}px; overflow:hidden">
|
||||
<a id="pl{$picture.pic_uuid}" href="{$picture.pic_url}">
|
||||
<img src="thumbs.php?uuid={$picture.pic_uuid}" class="img-shadow-loggallery" onclick="enlarge(this);" longdesc="{$picture.pic_url}" onload="document.getElementById('pl{$picture.pic_uuid}').removeAttribute('href'); this.alt='{$picture.title|replace:"'":"´"}'" title="{$picture.title|replace:"'":"´"}"/> {* ' in title would cause enlargit and IE errors, even if escaped *}
|
||||
<img src="thumbs.php?uuid={$picture.pic_uuid}" class="img-shadow-loggallery" onclick="enlarge(this);" longdesc="{$picture.pic_url}" onload="document.getElementById('pl{$picture.pic_uuid}').removeAttribute('href'); this.alt='{$picture.title|replace:"'":"´"|replace:'"':'´´'}'" title="{$picture.title|replace:"'":"´"|replace:'"':'´´'}"/> {* ' in title would cause enlargit and IE errors, even if escaped *}
|
||||
</a>
|
||||
{if $logdate || $loguser}
|
||||
<div style="line-height:1.2em; max-height:2.4em; margin-top:5px">
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
{***************************************************************************
|
||||
* You can find the license in the docs directory
|
||||
*
|
||||
* Unicode Reminder メモ
|
||||
***************************************************************************}
|
||||
{* OCSTYLE *}
|
||||
|
||||
<div class="content2-container bg-blue02">
|
||||
<p class="content-title-noshade-size2">
|
||||
<img src="resource2/{$opt.template.style}/images/description/22x22-logs.png" style="align: left; margin-right: 10px;" width="22" height="22" alt="" />
|
||||
{t}Status changes{/t} <small>{t}since June 2013{/t}</small>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<table class="table" width="80%">
|
||||
{if $status_changes|@count}
|
||||
<tr>
|
||||
<th>{t}Date{/t}</th>
|
||||
<th>{t}Status{/t}</th>
|
||||
<th>{t}Changed by{/t}</th>
|
||||
</tr>
|
||||
{foreach from=$status_changes item=change}
|
||||
<tr>
|
||||
<td>{$change.date_modified|date_format:$opt.format.date}</td>
|
||||
<td>{$change.old_status} → {$change.new_status} {include file="res_cachestatus.tpl" status=$change.new_status_id}</td>
|
||||
<td>{$change.username}</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
{else}
|
||||
<tr><td></td></tr>
|
||||
{/if}
|
||||
</table>
|
||||
@@ -1,60 +0,0 @@
|
||||
#!/usr/local/bin/php -q
|
||||
<?php
|
||||
/***************************************************************************
|
||||
./util/publish_caches/run_publish.php
|
||||
-------------------
|
||||
begin : Sat September 2 2006
|
||||
|
||||
For license information see doc/license.txt
|
||||
****************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Unicode Reminder メモ
|
||||
|
||||
Ggf. muss die Location des php-Binaries angepasst werden.
|
||||
|
||||
Prueft auf wartende Caches, deren Veröffentlichungszeitpunkt
|
||||
gekommen ist und veröffentlicht sie.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
$rootpath = '../../';
|
||||
|
||||
// chdir to proper directory (needed for cronjobs)
|
||||
chdir(substr(realpath($_SERVER['PHP_SELF']), 0, strrpos(realpath($_SERVER['PHP_SELF']), '/')));
|
||||
|
||||
require_once($rootpath . 'lib/clicompatbase.inc.php');
|
||||
require_once('settings.inc.php');
|
||||
require_once($rootpath . 'lib/eventhandler.inc.php');
|
||||
|
||||
/* begin db connect */
|
||||
db_connect();
|
||||
if ($dblink === false)
|
||||
{
|
||||
echo 'Unable to connect to database';
|
||||
exit;
|
||||
}
|
||||
/* end db connect */
|
||||
|
||||
$rsPublish = sql(" SELECT `cache_id`, `user_id`
|
||||
FROM `caches`
|
||||
WHERE `status` = 5
|
||||
AND `date_activate` <= NOW()");
|
||||
|
||||
while($rPublish = sql_fetch_array($rsPublish))
|
||||
{
|
||||
$userid = $rPublish['user_id'];
|
||||
$cacheid = $rPublish['cache_id'];
|
||||
|
||||
// update cache status to active
|
||||
// will touch the last_modified date of all depending records
|
||||
sql("UPDATE `caches` SET `status`=1, `date_activate`=NULL WHERE `cache_id`='&1'", $cacheid);
|
||||
|
||||
// send events
|
||||
event_new_cache($userid);
|
||||
event_notify_new_cache($cacheid);
|
||||
}
|
||||
mysql_free_result($rsPublish);
|
||||
|
||||
?>
|
||||
@@ -1,4 +0,0 @@
|
||||
<?php
|
||||
$debug = false;
|
||||
$debug_mailto = 'abc@xyz.de';
|
||||
?>
|
||||
@@ -16,16 +16,18 @@ checkJob(new autoarchive());
|
||||
class autoarchive
|
||||
{
|
||||
var $name = 'autoarchive';
|
||||
var $interval = 120; // provisonal minimum interval for initial archiving
|
||||
var $interval = 3600; // once per hour
|
||||
|
||||
|
||||
function run()
|
||||
{
|
||||
global $opt, $login;
|
||||
|
||||
if ($login->system_login($opt['logic']['systemuser']['user']))
|
||||
if ($opt['cron']['autoarchive']['run'])
|
||||
{
|
||||
if ($login->hasAdminPriv(ADMIN_USER))
|
||||
if (!$login->logged_in())
|
||||
echo $this->name . ": not logged in / no system user configured\n";
|
||||
elseif ($login->hasAdminPriv(ADMIN_USER))
|
||||
{
|
||||
$this->archive_disabled_caches();
|
||||
$this->archive_events();
|
||||
@@ -43,10 +45,10 @@ class autoarchive
|
||||
$rs = sql("SELECT `caches`.`cache_id`
|
||||
FROM `caches`
|
||||
WHERE `caches`.`status`=2 AND `caches`.`type`<>6
|
||||
AND IFNULL((SELECT MAX(`date_modified`) FROM `cache_status_modified` `csm` WHERE `csm`.`cache_id`=`caches`.`cache_id`),`caches`.`listing_last_modified`) < NOW() - INTERVAL 365 DAY
|
||||
AND IFNULL((SELECT MAX(`date_modified`) FROM `cache_status_modified` `csm` WHERE `csm`.`cache_id`=`caches`.`cache_id`),`caches`.`listing_last_modified`) < NOW() - INTERVAL 366 DAY
|
||||
GROUP BY `caches`.`cache_id`
|
||||
ORDER BY `caches`.`listing_last_modified`
|
||||
LIMIT 1"); // provisional limit for initial archiving
|
||||
LIMIT 3"); // limit to avoid mass emails and spam-filter triggers
|
||||
while ($rCache = sql_fetch_assoc($rs))
|
||||
{
|
||||
$this->archive_cache(
|
||||
@@ -68,7 +70,7 @@ class autoarchive
|
||||
WHERE `caches`.`type`=6 AND `caches`.`status`=1
|
||||
AND GREATEST(`date_hidden`,`date_created`) < NOW() - INTERVAL 35 DAY
|
||||
ORDER BY `date_hidden`
|
||||
LIMIT 1"); // provisonal limit for initial archiving
|
||||
LIMIT 1");
|
||||
while ($rCache = sql_fetch_assoc($rs))
|
||||
{
|
||||
$this->archive_cache(
|
||||
@@ -97,7 +99,9 @@ class autoarchive
|
||||
// create log
|
||||
$log->setType(cachelog::LOGTYPE_ARCHIVED, true);
|
||||
$log->setOcTeamComment(true);
|
||||
$log->setDate(date('Y-m-d H:i'));
|
||||
$log->setDate(date('Y-m-d'));
|
||||
// Log without time, so that owner reactions will always appear AFTER
|
||||
// the system log, no matter if logged with or without date.
|
||||
|
||||
// create log text in appropriate language
|
||||
$translated_comment = $translate->t($comment, '','',0,'',1, $cache->getDefaultDescLanguage());
|
||||
@@ -3,10 +3,16 @@
|
||||
* For license information see doc/license.txt
|
||||
*
|
||||
* Unicode Reminder メモ
|
||||
*
|
||||
* Import new data from geokrety.org.
|
||||
*
|
||||
* See util2/geokrety for check and repair functions.
|
||||
* See discussion in http://redmine.opencaching.de/issues/18.
|
||||
***************************************************************************/
|
||||
|
||||
checkJob(new geokrety());
|
||||
|
||||
|
||||
class geokrety
|
||||
{
|
||||
var $name = 'geokrety';
|
||||
@@ -39,7 +45,9 @@ class geokrety
|
||||
|
||||
$this->removeXML($path);
|
||||
|
||||
$modifiedsince = strtotime(getSysConfig('geokrety_lastupdate', '2005-01-01 00:00:00'));
|
||||
// Changed default-value for getSysConfig() from '2005-01-01 00:00:00' to 'NOW - 9d 12h'
|
||||
// to safely stay in api-limit, even when client and server are in different time zones.
|
||||
$modifiedsince = strtotime(getSysConfig('geokrety_lastupdate', date($opt['db']['dateformat'], time() - 60*60*24*9.5)));
|
||||
if (!@copy('http://geokrety.org/export.php?modifiedsince=' . date('YmdHis', $modifiedsince - 1), $path))
|
||||
return false;
|
||||
|
||||
@@ -129,7 +137,7 @@ class geokrety
|
||||
$typeid = $this->GetNodeAttribute($element, 'type', 'id')+0;
|
||||
$typename = $this->GetNodeValue($element, 'type');
|
||||
$this->checkGeoKretType($typeid, $typename);
|
||||
|
||||
|
||||
$description = html_entity_decode($this->GetNodeValue($element, 'description'));
|
||||
$datecreated = strtotime($this->GetNodeValue($element, 'datecreated'));
|
||||
|
||||
@@ -139,34 +147,46 @@ class geokrety
|
||||
$longitude = $this->GetNodeAttribute($element, 'position', 'longitude')+0;
|
||||
$latitude = $this->GetNodeAttribute($element, 'position', 'latitude')+0;
|
||||
|
||||
sql("INSERT INTO `gk_item` (`id`, `name`, `description`, `userid`, `datecreated`, `distancetravelled`,
|
||||
`latitude`, `longitude`, `typeid`, `stateid`)
|
||||
VALUES ('&1', '&2', '&3', '&4', '&5', '&6',
|
||||
'&7', '&8', '&9', '&10')
|
||||
ON DUPLICATE KEY UPDATE `name`='&2', `description`='&3', `userid`='&4', `datecreated`='&5',
|
||||
`distancetravelled`='&6', `latitude`='&7', `longitude`='&8', `typeid`='&9', `stateid`='&10'",
|
||||
$id, $name, $description, $userid, date($opt['db']['dateformat'], $datecreated), $distancetravelled,
|
||||
$latitude, $longitude, $typeid, $state);
|
||||
sql("INSERT INTO `gk_item`
|
||||
(`id`, `name`, `description`, `userid`, `datecreated`, `distancetravelled`, `latitude`, `longitude`, `typeid`, `stateid`)
|
||||
VALUES
|
||||
('&1', '&2', '&3', '&4', '&5', '&6', '&7', '&8', '&9', '&10')
|
||||
ON DUPLICATE KEY UPDATE
|
||||
`name`='&2', `description`='&3', `userid`='&4', `datecreated`='&5', `distancetravelled`='&6', `latitude`='&7', `longitude`='&8', `typeid`='&9', `stateid`='&10'",
|
||||
$id, $name, $description, $userid, date($opt['db']['dateformat'], $datecreated), $distancetravelled, $latitude, $longitude, $typeid, $state);
|
||||
|
||||
/* we are using now the moves to update waypoints */
|
||||
/*
|
||||
sql("DELETE FROM `gk_item_waypoint` WHERE id='&1'", $id);
|
||||
// Deleting and inserting item-waypoints if they have not changed will
|
||||
// update caches.meta_last_modified -> caches.okapi_syncbase and thus trigger
|
||||
// OKAPI changelog actions. This probably can be ignored as OKAPI will verify
|
||||
// if data has really changed.
|
||||
|
||||
// update associated waypoints
|
||||
/**
|
||||
* This does not work properly, because geokret.waypoints does NOT contain the
|
||||
* current location of the Kret but something like the last cache where it was logged.
|
||||
* Evaluating the 'state' fielt might help, but for now, we import waypoint data
|
||||
* from the moves instead.
|
||||
|
||||
sql("DELETE FROM `gk_item_waypoint` WHERE id='&1'", $id);
|
||||
$waypoints = $element->getElementsByTagName('waypoints');
|
||||
if ($waypoints->length == 1)
|
||||
if ($waypoints->length > 0)
|
||||
{
|
||||
$wpItems = $waypoints->item(0)->getElementsByTagName('waypoint');
|
||||
for ($i = 0; $i < $wpItems->length; $i++)
|
||||
{
|
||||
$wp = $wpItems->item($i)->nodeValue;
|
||||
if ($wp != '')
|
||||
sql("INSERT INTO `gk_item_waypoint` (`id`, `wp`) VALUES ('&1', '&2')", $id, $wp);
|
||||
sql("INSERT INTO `gk_item_waypoint`
|
||||
(`id`, `wp`)
|
||||
VALUES
|
||||
('&1', '&2')",
|
||||
$id, $wp);
|
||||
}
|
||||
}
|
||||
*/
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
function importMove($element)
|
||||
{
|
||||
global $opt;
|
||||
@@ -190,19 +210,19 @@ class geokrety
|
||||
$logtypename = $this->GetNodeValue($element, 'logtype');
|
||||
$this->checkMoveType($logtypeid, $logtypename);
|
||||
|
||||
sql("INSERT INTO `gk_move` (`id`, `itemid`, `latitude`, `longitude`, `datemoved`, `datelogged`,
|
||||
`userid`, `comment`, `logtypeid`)
|
||||
VALUES ('&1', '&2', '&3', '&4', '&5', '&6',
|
||||
'&7', '&8', '&9')
|
||||
ON DUPLICATE KEY UPDATE `itemid`='&2', `latitude`='&3', `longitude`='&4', `datemoved`='&5',
|
||||
`datelogged`='&6', `userid`='&7', `comment`='&8', `logtypeid`='&9'",
|
||||
$id, $gkid, $latitude, $longitude, date($opt['db']['dateformat'], $datemoved), date($opt['db']['dateformat'], $datelogged),
|
||||
$userid, $comment, $logtypeid);
|
||||
sql("DELETE FROM `gk_move_waypoint` WHERE id='&1'", $id);
|
||||
sql("INSERT INTO `gk_move`
|
||||
(`id`, `itemid`, `latitude`, `longitude`, `datemoved`, `datelogged`, `userid`, `comment`, `logtypeid`)
|
||||
VALUES
|
||||
('&1', '&2', '&3', '&4', '&5', '&6', '&7', '&8', '&9')
|
||||
ON DUPLICATE KEY UPDATE
|
||||
`itemid`='&2', `latitude`='&3', `longitude`='&4', `datemoved`='&5', `datelogged`='&6', `userid`='&7', `comment`='&8', `logtypeid`='&9'",
|
||||
$id, $gkid, $latitude, $longitude, date($opt['db']['dateformat'], $datemoved), date($opt['db']['dateformat'], $datelogged), $userid, $comment, $logtypeid);
|
||||
|
||||
sql("DELETE FROM `gk_move_waypoint` WHERE id='&1'", $id);
|
||||
|
||||
// update associated waypoints
|
||||
$waypoints = $element->getElementsByTagName('waypoints');
|
||||
if ($waypoints->length == 1)
|
||||
if ($waypoints->length > 0)
|
||||
{
|
||||
$wpItems = $waypoints->item(0)->getElementsByTagName('waypoint');
|
||||
for ($i = 0; $i < $wpItems->length; $i++)
|
||||
@@ -213,16 +233,25 @@ class geokrety
|
||||
}
|
||||
}
|
||||
|
||||
// now update the current gk-waypoints based on the last move
|
||||
sql("DELETE FROM `gk_item_waypoint` WHERE `id`='&1'", $gkid);
|
||||
$rs = sql("SELECT * FROM `gk_move` WHERE `itemid`='&1' AND `logtypeid`!=2 ORDER BY `datemoved` DESC LIMIT 1", $gkid);
|
||||
// update the current gk-waypoints based on the last move
|
||||
sql("DELETE FROM `gk_item_waypoint` WHERE `id`='&1'", $gkid);
|
||||
$rs = sql("
|
||||
SELECT `id`,`logtypeid` FROM `gk_move`
|
||||
WHERE `itemid`='&1' AND `logtypeid`!=2
|
||||
ORDER BY `datemoved` DESC LIMIT 1",
|
||||
$gkid);
|
||||
$r = sql_fetch_assoc($rs);
|
||||
sql_free_result($rs);
|
||||
if ($r === false) return;
|
||||
|
||||
if ($r['logtypeid'] == 0 || $r['logtypeid'] == 3)
|
||||
if ($r['logtypeid'] == 0 /* dropped */ || $r['logtypeid'] == 3 /* seen in */)
|
||||
{
|
||||
sql("INSERT INTO `gk_item_waypoint` (`id`, `wp`) SELECT '&1' AS `id`, `wp` FROM `gk_move_waypoint` WHERE `id`='&2' AND `wp`!=''", $gkid, $id);
|
||||
sql("
|
||||
INSERT INTO `gk_item_waypoint` (`id`, `wp`)
|
||||
SELECT '&1' AS `id`, `wp`
|
||||
FROM `gk_move_waypoint`
|
||||
WHERE `id`='&2' AND `wp`!=''",
|
||||
$gkid, $r['id']); // "late log" bugfix: replaced $id paramter by $r['id']
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -230,11 +259,13 @@ class geokrety
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function checkGeoKretType($id, $name)
|
||||
{
|
||||
sql("INSERT INTO `gk_item_type` (`id`, `name`) VALUES ('&1', '&2') ON DUPLICATE KEY UPDATE `name`='&2'", $id, $name);
|
||||
}
|
||||
|
||||
|
||||
function checkUser($id, $name)
|
||||
{
|
||||
if ($id == 0) return;
|
||||
@@ -242,11 +273,13 @@ class geokrety
|
||||
sql("INSERT INTO `gk_user` (`id`, `name`) VALUES ('&1', '&2') ON DUPLICATE KEY UPDATE `name`='&2'", $id, $name);
|
||||
}
|
||||
|
||||
|
||||
function checkMoveType($id, $name)
|
||||
{
|
||||
sql("INSERT INTO `gk_move_type` (`id`, `name`) VALUES ('&1', '&2') ON DUPLICATE KEY UPDATE `name`='&2'", $id, $name);
|
||||
}
|
||||
|
||||
|
||||
function GetNodeValue(&$domnode, $element)
|
||||
{
|
||||
$subnode = $domnode->getElementsByTagName($element);
|
||||
@@ -256,6 +289,7 @@ class geokrety
|
||||
return $subnode->item(0)->nodeValue;
|
||||
}
|
||||
|
||||
|
||||
function GetNodeAttribute(&$domnode, $element, $attr)
|
||||
{
|
||||
$subnode = $domnode->getElementsByTagName($element);
|
||||
|
||||
@@ -16,6 +16,8 @@ class publish_caches
|
||||
|
||||
function run()
|
||||
{
|
||||
global $login;
|
||||
|
||||
$rsPublish = sql("SELECT `cache_id`, `user_id` FROM `caches` WHERE `status`=5 AND NOT ISNULL(`date_activate`) AND `date_activate`<=NOW()");
|
||||
while($rPublish = sql_fetch_array($rsPublish))
|
||||
{
|
||||
@@ -23,6 +25,7 @@ class publish_caches
|
||||
$cacheid = $rPublish['cache_id'];
|
||||
|
||||
// update cache status to active
|
||||
sql("SET @STATUS_CHANGE_USER_ID='&1'", $login->userid);
|
||||
sql("UPDATE `caches` SET `status`=1, `date_activate`=NULL WHERE `cache_id`='&1'", $cacheid);
|
||||
}
|
||||
sql_free_result($rsPublish);
|
||||
|
||||
@@ -29,6 +29,10 @@ class purge_logs
|
||||
if ($opt['logic']['logs']['purge_userdata'] > 0)
|
||||
sql("DELETE FROM `logentries` WHERE date_created < NOW() - INTERVAL &1 DAY AND eventid IN (6,7)",
|
||||
$opt['logic']['logs']['purge_userdata']);
|
||||
|
||||
// Type 5 events = adoptions are still recorded here and preliminary archived,
|
||||
// but may be discarded after verifying that they are not used anywhere.
|
||||
// Adoptions are now in cache_adoptions table.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,20 +11,28 @@
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
$opt['rootpath'] = '../../';
|
||||
|
||||
// chdir to proper directory (needed for cronjobs)
|
||||
chdir(substr(realpath($_SERVER['PHP_SELF']), 0, strrpos(realpath($_SERVER['PHP_SELF']), '/')));
|
||||
|
||||
$opt['rootpath'] = dirname(__FILE__) . '/../../';
|
||||
require($opt['rootpath'] . 'lib2/cli.inc.php');
|
||||
|
||||
// test for user who runs the cronjob
|
||||
$processUser = posix_getpwuid(posix_geteuid());
|
||||
if ($processUser['name'] != $opt['cron']['username'])
|
||||
die("ERROR: runcron must be run by '" . $opt['cron']['username'] . "' but was called by '" . $processUser['name'] . "'\n".
|
||||
"Try something like 'sudo -u ".$opt['cron']['username']." php runcron.php'.\n");
|
||||
|
||||
// use posix pid-files to lock process
|
||||
if (!CreatePidFile($opt['cron']['pidfile']))
|
||||
{
|
||||
CleanupAndExit($opt['cron']['pidfile'], "Another instance is running!");
|
||||
exit;
|
||||
CleanupAndExit($opt['cron']['pidfile'], "Another instance is running!");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Run as system user, if possible.
|
||||
// This is relevant e.g. for publishing and for auto-archiving caches.
|
||||
if ($opt['logic']['systemuser']['user'] != '')
|
||||
if (!$login->system_login($opt['logic']['systemuser']['user']))
|
||||
die("ERROR: runcron system user login failed");
|
||||
|
||||
$modules_dir = $opt['rootpath'] . 'util2/cron/modules/';
|
||||
|
||||
$hDir = opendir($modules_dir);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<FilesMatch "*">
|
||||
<FilesMatch ".*">
|
||||
Order Deny,Allow
|
||||
Deny from All
|
||||
</FilesMatch>
|
||||
63
htdocs/util2/geokrety/check-waypoints.php
Normal file
63
htdocs/util2/geokrety/check-waypoints.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
/***************************************************************************
|
||||
* For license information see doc/license.txt
|
||||
*
|
||||
* Unicode Reminder メモ
|
||||
*
|
||||
* Tests for consistency of gk_item_waypoint und gk_move_waypoint tables.
|
||||
* See http://redmine.opencaching.de/issues/18.
|
||||
*
|
||||
* Data import functions are in util2/cron/modules/geokrety.class.php.
|
||||
***************************************************************************/
|
||||
|
||||
$opt['rootpath'] = dirname(__FILE__) . '/../../';
|
||||
require_once($opt['rootpath'] . 'lib2/cli.inc.php');
|
||||
|
||||
$itemwps = array();
|
||||
|
||||
// Get item waypoints
|
||||
$rs = sql("SELECT `id` AS `itemid`, `wp` FROM `gk_item_waypoint`");
|
||||
while ($r = sql_fetch_assoc($rs))
|
||||
$itemwps[$r['itemid']][$r['wp']]['itemwp'] = true;
|
||||
sql_free_result($rs);
|
||||
|
||||
// Get move waypoints
|
||||
$rsItems = sql("SELECT DISTINCT `itemid` AS `id` FROM `gk_move`");
|
||||
while ($rItem = sql_fetch_assoc($rsItems))
|
||||
{
|
||||
$lastmove = sql_value("
|
||||
SELECT `id` FROM `gk_move`
|
||||
WHERE `itemid`='&1' AND `logtypeid`<>2
|
||||
ORDER BY `datemoved` DESC, `id` DESC
|
||||
LIMIT 1",
|
||||
0, $rItem['id']);
|
||||
|
||||
$rsWp = sql("
|
||||
SELECT `wp` FROM `gk_move_waypoint`
|
||||
LEFT JOIN `gk_move` ON `gk_move`.`id`=`gk_move_waypoint`.`id`
|
||||
WHERE `gk_move`.`id`='&1' AND `logtypeid` IN (0,3)",
|
||||
$lastmove);
|
||||
while ($rWp = sql_fetch_assoc($rsWp))
|
||||
$itemwps[$rItem['id']][$rWp['wp']]['movewp'] = true;
|
||||
sql_free_result($rsWp);
|
||||
}
|
||||
sql_free_result($rsItems);
|
||||
|
||||
// test for missing waypoints
|
||||
ksort($itemwps);
|
||||
foreach ($itemwps as $itemid => $wps)
|
||||
foreach ($wps as $wp => $flags)
|
||||
if (isset($flags['itemwp']) && !isset($flags['movewp']))
|
||||
if (sql_value("SELECT COUNT(*) FROM `gk_move`, `gk_move_waypoint`
|
||||
WHERE `gk_move`.`itemid`='&1'
|
||||
AND `gk_move`.`logtypeid`<>2
|
||||
AND `gk_move_waypoint`.`id`=`gk_move`.`id`
|
||||
AND `gk_move_waypoint`.`wp`='&2'",
|
||||
0, $itemid, $wp) == 0)
|
||||
echo "item ".$itemid.": ".$wp." is missing in gk_move_waypoint\n";
|
||||
else
|
||||
echo "item ".$itemid.": ".$wp." is not the current wp in gk_move_waypoint\n";
|
||||
else if (isset($flags['movewp']) && !isset($flags['itemwp']))
|
||||
echo "item ".$itemid.": ".$wp." is missing in gk_item_waypoint\n";
|
||||
|
||||
?>
|
||||
50
htdocs/util2/geokrety/fix-waypoints.php
Normal file
50
htdocs/util2/geokrety/fix-waypoints.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/***************************************************************************
|
||||
* For license information see doc/license.txt
|
||||
*
|
||||
* Unicode Reminder メモ
|
||||
*
|
||||
* Regenerates gk_item_waypoint from gk_move_waypoint.
|
||||
* See http://redmine.opencaching.de/issues/18.
|
||||
*
|
||||
* Data import functions are in util2/cron/modules/geokrety.class.php.
|
||||
***************************************************************************/
|
||||
|
||||
$opt['rootpath'] = dirname(__FILE__) . '/../../';
|
||||
require_once($opt['rootpath'] . 'lib2/cli.inc.php');
|
||||
|
||||
if (count($argv) != 2 || $argv[1] != 'run')
|
||||
die("\n".
|
||||
"Please verify that runcron.php is disabled in crontab;\n".
|
||||
"then run this script with\n".
|
||||
"\n".
|
||||
" php fix-waypoints.php run\n".
|
||||
"\n".
|
||||
"Don't forget to re-enable cronjobs afterwards!\n".
|
||||
"\n");
|
||||
|
||||
sql("DELETE FROM `gk_item_waypoint`");
|
||||
|
||||
$rsItems = sql("SELECT DISTINCT `itemid` AS `id` FROM `gk_move`");
|
||||
while ($rItem = sql_fetch_assoc($rsItems))
|
||||
{
|
||||
$lastmove = sql_value("
|
||||
SELECT `id` FROM `gk_move`
|
||||
WHERE `itemid`='&1' AND `logtypeid`<>2
|
||||
/* TODO: How does Geokrety.org order moves with same date? We assume by ID: */
|
||||
ORDER BY `datemoved` DESC, `id` DESC
|
||||
LIMIT 1",
|
||||
0, $rItem['id']);
|
||||
|
||||
$rsWp = sql("
|
||||
INSERT INTO `gk_item_waypoint`
|
||||
(SELECT `gk_move`.`itemid`, `gk_move_waypoint`.`wp`
|
||||
FROM `gk_move_waypoint`
|
||||
LEFT JOIN `gk_move` ON `gk_move`.`id`=`gk_move_waypoint`.`id`
|
||||
WHERE `gk_move`.`id`='&1' AND `logtypeid` IN (0,3) AND `wp`<>''
|
||||
)",
|
||||
$lastmove);
|
||||
}
|
||||
sql_free_result($rsItems);
|
||||
|
||||
?>
|
||||
@@ -12,7 +12,7 @@
|
||||
***************************************************************************/
|
||||
|
||||
$opt['rootpath'] = '../../';
|
||||
require_once($opt['rootpath'] . 'lib2/web.inc.php');
|
||||
require_once($opt['rootpath'] . 'lib2/cli.inc.php');
|
||||
require_once($opt['rootpath'] . 'lib2/logic/user.class.php');
|
||||
|
||||
$login->admin = ADMIN_USER;
|
||||
|
||||
Reference in New Issue
Block a user