diff --git a/bin/dbsv-update.php b/bin/dbsv-update.php index 5e44bd77..e33a62fc 100644 --- a/bin/dbsv-update.php +++ b/bin/dbsv-update.php @@ -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. + } + } + ?> \ No newline at end of file diff --git a/htdocs/adminreports.php b/htdocs/adminreports.php index 9ffcdf96..1eea2ae5 100644 --- a/htdocs/adminreports.php +++ b/htdocs/adminreports.php @@ -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']); diff --git a/htdocs/config2/settings-dist.inc.php b/htdocs/config2/settings-dist.inc.php index 77f8c66c..d44118ff 100644 --- a/htdocs/config2/settings-dist.inc.php +++ b/htdocs/config2/settings-dist.inc.php @@ -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 * diff --git a/htdocs/doc/sql/static-data/data.sql b/htdocs/doc/sql/static-data/data.sql index c1930bce..500f169c 100644 --- a/htdocs/doc/sql/static-data/data.sql +++ b/htdocs/doc/sql/static-data/data.sql @@ -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'); diff --git a/htdocs/doc/sql/stored-proc/maintain.php b/htdocs/doc/sql/stored-proc/maintain.php index 2419f17c..a780e5ca 100644 --- a/htdocs/doc/sql/stored-proc/maintain.php +++ b/htdocs/doc/sql/stored-proc/maintain.php @@ -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); diff --git a/htdocs/doc/sql/tables/cache_adoptions.sql b/htdocs/doc/sql/tables/cache_adoptions.sql new file mode 100644 index 00000000..5e907cd1 --- /dev/null +++ b/htdocs/doc/sql/tables/cache_adoptions.sql @@ -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 ; diff --git a/htdocs/editlog.php b/htdocs/editlog.php index 132aa661..ce0a5936 100644 --- a/htdocs/editlog.php +++ b/htdocs/editlog.php @@ -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 .= '' . "\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 diff --git a/htdocs/lang/de/ocstyle/editcache.inc.php b/htdocs/lang/de/ocstyle/editcache.inc.php index 1a992959..47c6f3fb 100644 --- a/htdocs/lang/de/ocstyle/editcache.inc.php +++ b/htdocs/lang/de/ocstyle/editcache.inc.php @@ -63,7 +63,7 @@ . .   - {activation_hours}  ' . t('#time_suffix_label#') . ' {activate_on_message}
  diff --git a/htdocs/lib/logtypes.inc.php b/htdocs/lib/logtypes.inc.php index 638cdf9e..2d16dcf0 100644 --- a/htdocs/lib/logtypes.inc.php +++ b/htdocs/lib/logtypes.inc.php @@ -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); diff --git a/htdocs/lib2/RSSParser.class.php b/htdocs/lib2/RSSParser.class.php index b0361c1f..b82b04b2 100644 --- a/htdocs/lib2/RSSParser.class.php +++ b/htdocs/lib2/RSSParser.class.php @@ -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++; } diff --git a/htdocs/lib2/db.inc.php b/htdocs/lib2/db.inc.php index 59576b6f..2af7d18a 100644 --- a/htdocs/lib2/db.inc.php +++ b/htdocs/lib2/db.inc.php @@ -542,6 +542,7 @@ return $result; } + // returns false if no more matching rows exist function sql_fetch_row($rs) { global $opt; diff --git a/htdocs/lib2/logic/cache.class.php b/htdocs/lib2/logic/cache.class.php index 3110e4d3..6d1752c3 100644 --- a/htdocs/lib2/logic/cache.class.php +++ b/htdocs/lib2/logic/cache.class.php @@ -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); } } diff --git a/htdocs/lib2/logic/user.class.php b/htdocs/lib2/logic/user.class.php index c719c59c..028276a6 100644 --- a/htdocs/lib2/logic/user.class.php +++ b/htdocs/lib2/logic/user.class.php @@ -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())); diff --git a/htdocs/lib2/login.class.php b/htdocs/lib2/login.class.php index c73ae644..784fb47f 100644 --- a/htdocs/lib2/login.class.php +++ b/htdocs/lib2/login.class.php @@ -341,5 +341,10 @@ class login return ($this->admin & $privilege) == $privilege; } + + function logged_in() + { + return $this->userid > 0; + } } ?> diff --git a/htdocs/log.php b/htdocs/log.php index d863f6bb..e9b15e6a 100644 --- a/htdocs/log.php +++ b/htdocs/log.php @@ -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) diff --git a/htdocs/map2.php b/htdocs/map2.php index cbd26f86..9d8c0c8c 100644 --- a/htdocs/map2.php +++ b/htdocs/map2.php @@ -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; diff --git a/htdocs/newlogs.php b/htdocs/newlogs.php index 0a9b1e0e..b40664c2 100644 --- a/htdocs/newlogs.php +++ b/htdocs/newlogs.php @@ -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(); diff --git a/htdocs/okapi/core.php b/htdocs/okapi/core.php index 58df0499..da8b6341 100644 --- a/htdocs/okapi/core.php +++ b/htdocs/okapi/core.php @@ -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. */ diff --git a/htdocs/okapi/services/caches/formatters/gpx.php b/htdocs/okapi/services/caches/formatters/gpx.php index 18b40cd7..42784c41 100644 --- a/htdocs/okapi/services/caches/formatters/gpx.php +++ b/htdocs/okapi/services/caches/formatters/gpx.php @@ -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') diff --git a/htdocs/okapi/services/caches/formatters/gpxfile.tpl.php b/htdocs/okapi/services/caches/formatters/gpxfile.tpl.php index 87bbd56e..b68543be 100644 --- a/htdocs/okapi/services/caches/formatters/gpxfile.tpl.php +++ b/htdocs/okapi/services/caches/formatters/gpxfile.tpl.php @@ -113,7 +113,7 @@ http://www.gsak.net/xmlv1/5 http://www.gsak.net/xmlv1/5/gsak.xsd </ul> - + diff --git a/htdocs/okapi/services/caches/geocache.xml b/htdocs/okapi/services/caches/geocache.xml index acfc3502..463a5163 100644 --- a/htdocs/okapi/services/caches/geocache.xml +++ b/htdocs/okapi/services/caches/geocache.xml @@ -177,12 +177,17 @@
  • req_passwd - boolean; states if this cache requires a password in order to submit a "Found it" log entry,
  • description - HTML string, description of the cache,
  • -
  • descriptions - a dictionary (language code => HTML string) of cache +
  • descriptions - a dictionary (language code => HTML string) of cache descriptions,
  • -
  • hint - plain-text string, cache hints/spoilers; in general, hints should not be displayed to the user - unless user specifically asks for them,
  • -
  • hints - a dictionary (language code => plain-text string) of cache - hints/spoilers,
  • +
  • hint - HTML-encoded string, cache hints/spoilers; + deprecated (Why?), + use hint2 instead,
  • +
  • hints - a dictionary (language code => + HTML-encoded string) of cache hints/spoilers; deprecated, use hints2 instead,
  • +
  • hint2 - plain-text string, cache hints/spoilers; in general, hints + should not be displayed to the user unless user specifically asks for them,
  • +
  • hints2 - a dictionary (language code => + plain-text string) of cache hints/spoilers,
  • images - list of dictionaries, each dictionary represents one image saved along the cache description; each dictionary has the diff --git a/htdocs/okapi/services/caches/geocaches.php b/htdocs/okapi/services/caches/geocaches.php index ac45edbc..503f9a32 100644 --- a/htdocs/okapi/services/caches/geocaches.php +++ b/htdocs/okapi/services/caches/geocaches.php @@ -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("
    ", "" , $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]); diff --git a/htdocs/resource2/ocstyle/css/style_screen.css b/htdocs/resource2/ocstyle/css/style_screen.css index ba2b5a7d..ce4ec598 100644 --- a/htdocs/resource2/ocstyle/css/style_screen.css +++ b/htdocs/resource2/ocstyle/css/style_screen.css @@ -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 { diff --git a/htdocs/resource2/ocstyle/images/head/pano970-f13-moerfelden.jpg b/htdocs/resource2/ocstyle/images/head/pano970-f13-moerfelden.jpg new file mode 100644 index 00000000..4abde71d Binary files /dev/null and b/htdocs/resource2/ocstyle/images/head/pano970-f13-moerfelden.jpg differ diff --git a/htdocs/resource2/ocstyle/images/viewcache/16x16-maintenance_shifted.png b/htdocs/resource2/ocstyle/images/viewcache/16x16-maintenance_shifted.png new file mode 100644 index 00000000..94171372 Binary files /dev/null and b/htdocs/resource2/ocstyle/images/viewcache/16x16-maintenance_shifted.png differ diff --git a/htdocs/search.php b/htdocs/search.php index b34de00f..5f339ad0 100644 --- a/htdocs/search.php +++ b/htdocs/search.php @@ -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); diff --git a/htdocs/templates2/ocstyle/adminhistory.tpl b/htdocs/templates2/ocstyle/adminhistory.tpl index 7249efbb..92089222 100644 --- a/htdocs/templates2/ocstyle/adminhistory.tpl +++ b/htdocs/templates2/ocstyle/adminhistory.tpl @@ -4,6 +4,7 @@ * Unicode Reminder メモ ***************************************************************************} {* OCSTYLE *} +{if !$reportdisplay}

    World {t}Cache history{/t} @@ -16,36 +17,127 @@

    +{/if} {if $showhistory} -

    - {$cache.name} - {t}by{/t} - {$ownername} -

    -
    - -
    -

    - - {t}Cache reports{/t} + {if !$reportdisplay} +

    + {$cache.name} + {t}by{/t} + {$ownername}

    -
    - {include file="adminreport_history.tpl"} -
    +
    + {/if} -
    -

    - - {t}Deleted logs{/t} {t}since February 2012{/t} -

    -
    -
    - {include file="res_logentry.tpl" header=false footer=false footbacklink=false cache=$cache logs=$deleted_logs} -
    -
    + {if !$reportdisplay || $reports|@count} +
    +

    + + {if $reportdisplay} {t}Other reports for this cache{/t}{else}{t}Cache reports{/t}{/if} +

    +
    - {include file="res_status_changes.tpl"} + + {if $reports|@count} + + + + + + + + + + + {foreach from=$reports item=report} + + + + + + + + + + {/foreach} + {else} + + {/if} +
    {t}ID{/t}{t}Report date{/t}{t}Reporter{/t}{t}Reason{/t}{t}Admin{/t}{t}Last modified{/t}{t}Status{/t}
    {$report.id}{$report.date_created|date_format:$opt.format.date}{$report.usernick}{$report.reason}{$report.adminnick}{$report.lastmodified|date_format:$opt.format.date}{$report.status}
    +
    + {/if} + + {if !$reportdisplay || $deleted_logs|@count} +
    +

    + + {t}Deleted logs{/t} {t}since deletion date February 2012{/t} +

    +
    +
    + {include file="res_logentry.tpl" header=false footer=false footbacklink=false cache=$cache logs=$deleted_logs} +
    +

     

    + {/if} + + {if !$reportdisplay || $status_changes|@count} +
    +

    + + {t}Status changes{/t} {t}since June 2013{/t} +

    +
    + + + {if $status_changes|@count} + + + + + + {foreach from=$status_changes item=change} + + + + + + {/foreach} + {else} + + {/if} +
    {t}Date{/t}{t}Status{/t}{t}Changed by{/t}
    {$change.date_modified|date_format:$opt.format.date}{$change.old_status} → {$change.new_status} {include file="res_cachestatus.tpl" status=$change.new_status_id}{$change.username}
    +

     

    + {/if} + + {if !$reportdisplay || $adoptions|@count} +
    +

    + + {t}Adoptions_{/t} {t}since September 2012{/t} +

    +
    + + + {if $adoptions|@count} + + + + + + + {foreach from=$adoptions item=adoption} + + + + + {/foreach} + {else} + + {/if} +
    {t}Date{/t}{t}From Owner{/t}{t}To Owner{/t}
    {$adoption.date|date_format:$opt.format.date}{$adoption.from_username} + {$adoption.to_username} +
    + {/if} {else}

    {$error}

    diff --git a/htdocs/templates2/ocstyle/adminreport_history.tpl b/htdocs/templates2/ocstyle/adminreport_history.tpl deleted file mode 100644 index c4b3249b..00000000 --- a/htdocs/templates2/ocstyle/adminreport_history.tpl +++ /dev/null @@ -1,36 +0,0 @@ -{*************************************************************************** -* You can find the license in the docs directory -* -* Unicode Reminder メモ -***************************************************************************} -{* OCSTYLE *} - - - {if $reports|@count} - - - - - - - - - - - {foreach from=$reports item=report} - - - - - - - - - - {/foreach} - - {else} - - {/if} -
    {t}ID{/t}{t}Report date{/t}{t}Reporter{/t}{t}Reason{/t}{t}Admin{/t}{t}Last modified{/t}{t}Status{/t}
    {$report.id}{$report.date_created|date_format:$opt.format.date}{$report.usernick}{$report.reason}{$report.adminnick}{$report.lastmodified|date_format:$opt.format.date}{$report.status}
    - diff --git a/htdocs/templates2/ocstyle/adminreports.tpl b/htdocs/templates2/ocstyle/adminreports.tpl index f28c7b7c..01e713cf 100644 --- a/htdocs/templates2/ocstyle/adminreports.tpl +++ b/htdocs/templates2/ocstyle/adminreports.tpl @@ -67,7 +67,7 @@ {/if}

    {t}State:{/t} {$status}  Admin: {if $adminnick==''}{t}not assigned{/t}{else}{if $otheradmin}{/if}{$adminnick|escape}{if $otheradmin}{/if}{/if}

    {t}Reason:{/t} {$reason|escape|nl2br}

    -

    {t}Comment:{/t} {$note|escape|nl2br}

    +

    {t}Comment:{/t} {$note|escape|nl2br}

    @@ -76,7 +76,7 @@

    -

    +

    {if !$ownreport} {else} @@ -107,32 +107,7 @@ {/if}
    - {if $reports|@count} -

    -

    - - {t}Other reports for this cache{/t} -

    -
    - {include file="adminreport_history.tpl"} - {/if} - - {if $deleted_logs|@count} -
    -

    - - {t}Deleted logs{/t} {t}since February 2012{/t} -

    -
    -
    - {include file="res_logentry.tpl" header=false footer=false footbacklink=false cache=$cache logs=$deleted_logs} -
    - {/if} - - {if $status_changes|@count} - {include file="res_status_changes.tpl"} - {/if} - + {include file=adminhistory.tpl reportdisplay=true showhistory=true} {/if} diff --git a/htdocs/templates2/ocstyle/articles/DE/changelog.tpl b/htdocs/templates2/ocstyle/articles/DE/changelog.tpl index a965a096..629b087c 100644 --- a/htdocs/templates2/ocstyle/articles/DE/changelog.tpl +++ b/htdocs/templates2/ocstyle/articles/DE/changelog.tpl @@ -13,7 +13,7 @@

    Im Folgenden sind alle Veränderungen ab OC Version 3.0 aufgelistet. Manche Kleinigkeiten wurden zur besseren Übersicht weggelassen und sind im Entwicklerforum nachlesbar.


    -

    OC 3.0 Version 8 – 1. Juni 2013

    +

    OC 3.0 Version 8 – 1. Juni 2013

    Neu:

    • Der Cachestatus kann (nur noch) per Log geändert werden. Dazu gibt es die neuen Logtypen momentan nicht verfügbar, archiviert, gesperrt und kann gesucht werden. 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.
    • @@ -76,7 +76,7 @@

    -

    OC 3.0 Version 7 – 19. April 2013

    +

    OC 3.0 Version 7 – 19. April 2013

    • Neu: OKAPI
    • „Apple-Touch-Icons“ für Smartphones
    • @@ -84,7 +84,7 @@

    -

    OC 3.0 Version 6 – 12. April 2013

    +

    OC 3.0 Version 6 – 12. April 2013

    Neu:

    • Loggen mit Uhrzeit
    • @@ -125,7 +125,7 @@

    -

    OC 3.0 Version 5 – 16. März 2013

    +

    OC 3.0 Version 5 – 16. März 2013

    Karte komplett überarbeitet:

    • Markierung von eigenen, gefundenen, nicht gefundenen und OConly-Caches
    • @@ -175,7 +175,7 @@
    • dänische Flagge bei dänischen Cachebeschreibungen
    -

    OC 3.0 Version 4 – 17. Februar 2013

    +

    OC 3.0 Version 4 – 17. Februar 2013

    Neu:

    • neue Cachegröße „nano“
    • @@ -206,7 +206,7 @@

    -

    OC 3.0 Version 3 – 18. November 2012

    +

    OC 3.0 Version 3 – 18. November 2012

    Neu:

    • Attribut „nur zu bestimmten Jahreszeiten“
    • @@ -231,7 +231,7 @@

    -

    OC 3.0 Version 2 – 26. August 2012

    +

    OC 3.0 Version 2 – 26. August 2012

    Neu:

    • Schwierigkeitsgrade erklärt, inklusive Tooltip und Link in den Cachelistings
    • @@ -271,9 +271,9 @@
    • Logbearbeitungsberechtigungen für gesperrte Caches korrigiert
    • wirkungslose Spoileroption beim Hochladen von Logbildern entfernt [→ wieder eingebaut in Version 5]
    -
    +
    -

    OC 3.0 Version 1 – 8. August 2012

    +

    OC 3.0 Version 1 – 8. August 2012

    Neu:

    • Kurzadressen für Direktzugriff auf Cachelistings, z.B. http://opencaching.de/OCD93B
    • diff --git a/htdocs/templates2/ocstyle/articles/DE/impressum.tpl b/htdocs/templates2/ocstyle/articles/DE/impressum.tpl index 5a86eb16..dbbd352a 100644 --- a/htdocs/templates2/ocstyle/articles/DE/impressum.tpl +++ b/htdocs/templates2/ocstyle/articles/DE/impressum.tpl @@ -79,11 +79,11 @@ Vorstandes gemeinsam vertretungsberechtigt.

      - Der geschäftsführende Vorstand besteht aus (Stand 31.08.2012): + Der geschäftsführende Vorstand besteht aus (Stand 06.06.2013):

      • Michael Vaahsen, Vorsitzender
      • -
      • Gerald Halbig, stellv. Vorsitzender
      • +
      • unbesetzt, stellv. Vorsitzender
      • Maik Bischoff, Kassenwart
      diff --git a/htdocs/templates2/ocstyle/articles/DE/team.tpl b/htdocs/templates2/ocstyle/articles/DE/team.tpl index a23c84d1..d43fbd31 100644 --- a/htdocs/templates2/ocstyle/articles/DE/team.tpl +++ b/htdocs/templates2/ocstyle/articles/DE/team.tpl @@ -20,7 +20,6 @@ BildNicknameAufgabenbereiche 4_VsVorsitzender - dl8ndmstellvertretender Vorsitzender SchrottieKassenwart; Anwendersupport, Datenpflege DanlexPressesprecher; Anwendersupport, Datenpflege bohrstyLeiter Technik/Systemadministration @@ -31,8 +30,8 @@ Bundy609Anwendersupport, Datenpflege ClanFamilyDesign, Softwareentwicklung + cmanieSoftwareentwicklung dl6hboServerbetrieb, Dokumentation - doglobeProjekt „Cachewartung“ FloppSoftwareentwicklung, Anwendersupport, Datenpflege followingDatenpflege, Softwareentwicklung, Forenmoderation, Wiki FriedrichFröbelWiki, Forenmoderation diff --git a/htdocs/templates2/ocstyle/articles/DE/verein.tpl b/htdocs/templates2/ocstyle/articles/DE/verein.tpl index 10ac28d5..2d7303f5 100644 --- a/htdocs/templates2/ocstyle/articles/DE/verein.tpl +++ b/htdocs/templates2/ocstyle/articles/DE/verein.tpl @@ -10,22 +10,22 @@

      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.

      -Wo ist der Sitz des Vereins?
      +Wo ist der Sitz des Vereins?
      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.
      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 Forum.

      -Was kostet die Mitgliedschaft im Verein?
      +Was kostet die Mitgliedschaft im Verein?
      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.

      -Wo finde ich die aktuelle Satzung?
      +Wo finde ich die aktuelle Satzung?
      Die aktuelle Satzung kannst Du hier herunterladen.

      -Wo finde ich den Mitgliedsantrag?
      +Wo finde ich den Mitgliedsantrag?
      Den Mitgliedsantrag kannst Du hier herunterladen.

      -Ich möchte Opencaching unterstützen, habe aber kein Interesse an einem Vereinsbeitritt. Was kann ich noch tun?
      +Ich möchte Opencaching unterstützen, habe aber kein Interesse an einem Vereinsbeitritt. Was kann ich noch tun?
      Da der technische Betrieb der Website laufende Kosten verursacht, sind wir auf Spenden angewiesen. Über unsere Spendenseite kannst du uns jederzeit einen kleinen Obolus zukommen lassen, auch wenige Euro helfen uns weiter.

      -Ich habe Fragen oder Anregungen zum Verein, an wen kann ich mich wenden?
      +Ich habe Fragen oder Anregungen zum Verein, an wen kann ich mich wenden?
      Du kannst den Vereinsvorstand unter verein@opencaching.de gerne kontaktieren.

    diff --git a/htdocs/templates2/ocstyle/articles/EN/changelog.tpl b/htdocs/templates2/ocstyle/articles/EN/changelog.tpl index d80e6a74..5b7a72e6 100644 --- a/htdocs/templates2/ocstyle/articles/EN/changelog.tpl +++ b/htdocs/templates2/ocstyle/articles/EN/changelog.tpl @@ -13,7 +13,7 @@

    This page lists all changes since version 3.0. Some small items have been omitted here.


    -

    OC 3.0 Release 8 – June 1, 2013

    +

    OC 3.0 Release 8 – June 1, 2013

    New:


    -

    OC 3.0 Release 7 – April 19, 2013

    +

    OC 3.0 Release 7 – April 19, 2013


    -

    OC 3.0 Release 6 – April 12, 2013

    +

    OC 3.0 Release 6 – April 12, 2013

    New:


    -

    OC 3.0 Release 5 – March 16, 2013

    +

    OC 3.0 Release 5 – March 16, 2013

    Completely reworked map:

    -

    OC 3.0 Release 4 – February 17, 2013 +

    OC 3.0 Release 4 – February 17, 2013

    New:


    -

    OC 3.0 Release 3 – November 18, 2012

    +

    OC 3.0 Release 3 – November 18, 2012

    New:


    -

    OC 3.0 Release 2 – August 26, 2012

    +

    OC 3.0 Release 2 – August 26, 2012

    New:

    -
    +
    -

    OC 3.0 Release 1 – August 8, 2012

    +

    OC 3.0 Release 1 – August 8, 2012

    New: