diff --git a/app/Config/version.php b/app/Config/version.php
index 36337a2fb..53e04613a 100644
--- a/app/Config/version.php
+++ b/app/Config/version.php
@@ -1,2 +1,2 @@
'entries/view/',
'atBaseUrl' => 'users/name/',
- 'server' => Router::baseURL(),
+ 'server' => Router::fullBaseUrl(),
'webroot' => $this->webroot
]
);
diff --git a/app/Controller/Component/CacheSupportComponent.php b/app/Controller/Component/CacheSupportComponent.php
index 4abb173d9..49f94b8a9 100644
--- a/app/Controller/Component/CacheSupportComponent.php
+++ b/app/Controller/Component/CacheSupportComponent.php
@@ -1,66 +1,37 @@
_CacheSupport = new CacheSupport();
+ $this->CacheTree = CacheTree::getInstance();
$this->CacheTree->initialize($Controller);
}
- public function beforeRedirect(Controller $Controller, $url, $status = null, $exit = true) {
- $this->CacheTree->beforeRedirect($Controller, $url, $status, $exit);
- }
-
- public function shutdown(Controller $Controller) {
- $this->CacheTree->shutdown($Controller);
- }
-
- public function clearAll() {
- $this->clearSaito();
- $this->clearApc();
- $this->clearCake();
- }
-
- public function clearSaito() {
- Cache::clear(false, 'default');
- Cache::clear(false, 'short');
- $this->clearTrees();
- }
-
- public function clearCake() {
- Cache::clearGroup('persistent');
- Cache::clearGroup('models');
- Cache::clearGroup('views');
- }
-
- public function clearTree($id) {
- $this->_clearEntries();
- $this->CacheTree->delete($id);
+ public function beforeRender(Controller $Controller) {
+ $Controller->set('CacheTree', $this->CacheTree);
}
- public function clearTrees() {
- $this->_clearEntries();
- $this->CacheTree->reset();
+ public function beforeRedirect(Controller $Controller, $url, $status = null, $exit = true) {
+ $this->CacheTree->saveCache();
}
- protected function _clearEntries() {
- Cache::clear(false, 'entries');
+ public function shutdown(Controller $Controller) {
+ $this->CacheTree->saveCache();
}
- /**
- * Clears out the APC if available
- */
- public function clearApc() {
- if (function_exists('apc_store')) {
- apc_clear_cache();
- apc_clear_cache('user');
- apc_clear_cache('opcode');
+ public function __call($method, $params) {
+ $proxy = [$this->_CacheSupport, $method];
+ if (is_callable($proxy)) {
+ return call_user_func_array($proxy, $params);
}
}
-
}
diff --git a/app/Controller/Component/CurrentUserComponent.php b/app/Controller/Component/CurrentUserComponent.php
index 158200150..b6e526fb0 100755
--- a/app/Controller/Component/CurrentUserComponent.php
+++ b/app/Controller/Component/CurrentUserComponent.php
@@ -140,7 +140,7 @@ protected function _markOnline() {
Stopwatch::start('CurrentUser->_markOnline()');
$id = $this->getId();
- if ($this->isLoggedIn() == false):
+ if ($this->isLoggedIn() === false):
// don't count search bots as guests
if ($this->_isBot()) {
return;
@@ -166,8 +166,8 @@ protected function _isBot() {
protected function _cookieRelogin() {
$cookie = $this->PersistentCookie->get();
- // is_array -> if cookie could no be correctly deciphered it's just an random string
if ($cookie) {
+ // is_array -> if cookie could no be correctly deciphered it's just an random string
if (!is_null($cookie) && is_array($cookie)):
if ($this->_Controller->Auth->login($cookie)):
return;
@@ -203,7 +203,7 @@ public function login() {
public function refresh($user = null) {
parent::set($this->_Controller->Auth->user());
- // all session should must use current user data (locked, user_type, …)
+ // all session have to use current user data (locked, user_type, …)
if ($this->isLoggedIn()) {
$this->_User->id = $this->getId();
parent::set($this->_User->getProfile($this->getId()));
@@ -368,12 +368,18 @@ public function __construct(SaitoUser $currentUser, User $user) {
$this->user = $user;
}
- public function forceSet() {
- $this->_set(date("Y-m-d H:i:s"));
- }
-
- public function set() {
- $this->_set($this->currentUser['last_refresh_tmp']);
+ /**
+ * @param mixed $timestamp
+ *
+ * null|'now'|<`Y-m-d H:i:s` timestamp>
+ */
+ public function set($timestamp = null) {
+ if ($timestamp === 'now') {
+ $timestamp = date('Y-m-d H:i:s');
+ } elseif ($timestamp === null) {
+ $timestamp = $this->currentUser['last_refresh_tmp'];
+ }
+ $this->_set($timestamp);
}
public function setMarker() {
diff --git a/app/Controller/Component/EmailNotificationComponent.php b/app/Controller/Component/EmailNotificationComponent.php
index 2f552cf13..dab187a31 100644
--- a/app/Controller/Component/EmailNotificationComponent.php
+++ b/app/Controller/Component/EmailNotificationComponent.php
@@ -39,65 +39,66 @@ public function dispatchEvent($event) {
}
protected function _modelEntryReplyToThread($event, array $recipients) {
- // get parent entry
- foreach ( $recipients as $recipient ):
- // don't send answer if new entry belongs to the user itself
- if ( Configure::read('debug') === 0 && (int)$recipient['id'] === (int)$event->data['data']['Entry']['user_id'] ) {
- continue;
- }
- $event->subject()->contain();
- $rootEntry = $event->subject()->findById($event->data['data']['Entry']['tid']);
- try {
- $this->_Controller->SaitoEmail->email(array(
- 'recipient' => array('User' => $recipient),
- 'subject' => __('New reply to "%s"', $rootEntry['Entry']['subject']),
- 'sender' => array(
- 'User' => array(
- 'user_email' => Configure::read('Saito.Settings.forum_email'),
- 'username' => Configure::read('Saito.Settings.forum_name')),
- ),
- 'template' => Configure::read('Config.language') . DS . 'notification-model-entry-afterReply',
- 'viewVars' => array(
- 'recipient' => $recipient,
- 'parentEntry' => $rootEntry,
- 'newEntry' => $event->data['data'],
- 'notification' => $recipient['Esnotification'],
- ),
- ));
- } catch ( Exception $exc ) {
+ $event->subject()->contain();
+ $rootEntry = $event->subject()->findById($event->data['data']['Entry']['tid']);
+ $config = [
+ 'subject' => __(
+ 'New reply to "%s"',
+ $rootEntry['Entry']['subject']
+ ),
+ 'sender' => array(
+ 'User' => array(
+ 'user_email' => Configure::read('Saito.Settings.forum_email'),
+ 'username' => Configure::read('Saito.Settings.forum_name')
+ ),
+ ),
+ 'template' => Configure::read(
+ 'Config.language'
+ ) . DS . 'notification-model-entry-afterReply',
+ 'viewVars' => array(
+ 'parentEntry' => $rootEntry,
+ 'newEntry' => $event->data['data'],
+ ),
+ ];
+ foreach ( $recipients as $recipient ):
+ if ($this->_shouldRecipientReceiveReplyMessage($recipient, $event->data['data']['Entry'])) {
+ $config['recipient'] = ['User' => $recipient];
+ $config['viewVars']['recipient'] = $recipient;
+ $config['viewVars']['notification'] = $recipient['Esnotification'];
+ $this->_email($config);
}
endforeach;
}
protected function _modelEntryReplyToEntry($event, array $recipients) {
- // get parent entry
+ $event->subject()->contain();
+ $parentEntry = $event->subject()->findById($event->data['data']['Entry']['pid']);
+ $config = [
+ 'subject' => __(
+ 'New reply to "%s"',
+ $parentEntry['Entry']['subject']
+ ),
+ 'sender' => array(
+ 'User' => array(
+ 'user_email' => Configure::read('Saito.Settings.forum_email'),
+ 'username' => Configure::read('Saito.Settings.forum_name')
+ ),
+ ),
+ 'template' => Configure::read(
+ 'Config.language'
+ ) . DS . 'notification-model-entry-afterReply',
+ 'viewVars' => array(
+ 'parentEntry' => $parentEntry,
+ 'newEntry' => $event->data['data']
+ )
+ ];
foreach ( $recipients as $recipient ):
- // don't send answer if new entry belongs to the user itself
- if ( Configure::read('debug') === 0 && (int)$recipient['id'] === (int)$event->data['data']['Entry']['user_id'] ) {
- continue;
- }
- $event->subject()->contain();
- $parentEntry = $event->subject()->findById($event->data['data']['Entry']['pid']);
- try {
- $this->_Controller->SaitoEmail->email(array(
- 'recipient' => array('User' => $recipient),
- 'subject' => __('New reply to "%s"', $parentEntry['Entry']['subject']),
- 'sender' => array(
- 'User' => array(
- 'user_email' => Configure::read('Saito.Settings.forum_email'),
- 'username' => Configure::read('Saito.Settings.forum_name')),
- ),
- 'template' => Configure::read('Config.language') . DS . 'notification-model-entry-afterReply',
- 'viewVars' => array(
- 'recipient' => $recipient,
- 'parentEntry' => $parentEntry,
- 'newEntry' => $event->data['data'],
- 'notification' => $recipient['Esnotification'],
- ),
- ));
- } catch ( Exception $exc ) {
-
+ if ($this->_shouldRecipientReceiveReplyMessage($recipient, $event->data['data']['Entry'])) {
+ $config['recipient'] = ['User' => $recipient];
+ $config['viewVars']['recipient'] = $recipient;
+ $config['viewVars']['notification'] = $recipient['Esnotification'];
+ $this->_email($config);
}
endforeach;
}
@@ -107,25 +108,52 @@ public function userActivatedAdminNotice($event) {
if ( !is_array($recipients) )
return;
$new_user = $event->data['User'];
+ $config = [
+ 'subject' => __('Successfull registration'),
+ 'sender' => array(
+ 'User' => array(
+ 'user_email' => Configure::read('Saito.Settings.forum_email'),
+ 'username' => Configure::read('Saito.Settings.forum_name')
+ ),
+ ),
+ 'template' => Configure::read(
+ 'Config.language'
+ ) . DS . 'notification-admin-user_activated',
+ 'viewVars' => array('user' => $new_user, 'ip' => env('REMOTE_ADDR')),
+
+ ];
foreach ( $recipients as $recipient ) :
- try {
- $this->_Controller->SaitoEmail->email(array(
- 'recipient' => $recipient,
- 'subject' => __('Successfull registration'),
- 'sender' => array(
- 'User' => array(
- 'user_email' => Configure::read('Saito.Settings.forum_email'),
- 'username' => Configure::read('Saito.Settings.forum_name')),
- ),
- 'template' => Configure::read('Config.language') . DS . 'notification-admin-user_activated',
- 'viewVars' => array('user' => $new_user, 'ip' => env('REMOTE_ADDR')),
- ));
- } catch ( Exception $exc ) {
-
- }
+ $config['recipient'] = $recipient;
+ $this->_email($config);
endforeach;
}
+ protected function _shouldRecipientReceiveReplyMessage($entry, $recipient) {
+ if (Configure::read('debug') === 0 &&
+ // don't send answer if new entry belongs to the user itself
+ (int)$recipient['id'] === (int)$entry['user_id']
+ ) {
+ return false;
+ } else {
+ return true;
+ }
+
+ }
+
+ protected function _email($config) {
+ try {
+ $this->_Controller->SaitoEmail->email($config);
+ } catch (Exception $exc) {
+ $this->log(
+ sprintf(
+ "Error %s in EmailNotificationComponent::_email() with %s",
+ $exc,
+ print_r($config, true)
+ )
+ );
+ }
+ }
+
protected function _debug($event, array $receivers) {
debug($event);
foreach ( $receivers as $receiver ) {
@@ -134,5 +162,3 @@ protected function _debug($event, array $receivers) {
}
}
-
-?>
\ No newline at end of file
diff --git a/app/Controller/Component/SaitoEmailComponent.php b/app/Controller/Component/SaitoEmailComponent.php
index 64c24cc6f..01556a1dd 100644
--- a/app/Controller/Component/SaitoEmailComponent.php
+++ b/app/Controller/Component/SaitoEmailComponent.php
@@ -64,7 +64,7 @@ protected function _resetConfig() {
protected function _config($options = array()) {
$defaults = array(
'viewVars'=> array(
- 'webroot' => Router::baseURL() . $this->_webroot,
+ 'webroot' => Router::fullBaseUrl() . $this->_webroot,
),
);
extract(array_merge_recursive($defaults, $options));
diff --git a/app/Controller/EntriesController.php b/app/Controller/EntriesController.php
index 1b9a950c1..7cb8ac193 100644
--- a/app/Controller/EntriesController.php
+++ b/app/Controller/EntriesController.php
@@ -12,8 +12,6 @@ class EntriesController extends AppController {
'Text',
);
public $components = [
- 'CacheTree',
- 'CacheSupport',
'Flattr',
'Search.Prg',
'Shouts'
@@ -52,7 +50,7 @@ public function index() {
$cachedThreads = [];
$uncachedThreads = [];
foreach($initialThreads as $thread) {
- if ($this->CacheTree->isCacheValid($thread)) {
+ if ($this->CacheSupport->CacheTree->isCacheValid($thread)) {
$cachedThreads[$thread['id']] = $thread;
} else {
$uncachedThreads[$thread['id']] = $thread;
@@ -158,7 +156,7 @@ public function mix($tid) {
*/
public function update() {
$this->autoRender = false;
- $this->CurrentUser->LastRefresh->forceSet();
+ $this->CurrentUser->LastRefresh->set('now');
$this->redirect('/entries/index');
}
@@ -190,8 +188,8 @@ public function view($id=null) {
return $this->redirect(array( 'action' => 'index' ));
}
- $this->Entry->id = $id;
- $this->request->data = $this->Entry->find('entry', array('conditions' => array('Entry.id' => $id)));
+ $this->Entry->id = $id;
+ $this->request->data = $this->Entry->get($id);
//* redirect if posting doesn't exists
if ( $this->request->data == false ):
@@ -245,7 +243,7 @@ public function add($id = null) {
// inserting new posting was successful
if ($new_posting !== false) :
- $this->_afterNewEntry($new_posting);
+ $this->_setNotifications($new_posting);
if ($this->request->is('ajax')) :
// Ajax request came from front answer on front page /entries/index
if ($this->localReferer('action') === 'index') {
@@ -310,7 +308,7 @@ public function add($id = null) {
$this->request->data = null;
if ($id !== null) {
- $this->request->data = $this->Entry->getUnsanitized($id);
+ $this->request->data = $this->Entry->get($id, true);
}
if (!empty($this->request->data)): // answer to existing posting
@@ -372,29 +370,28 @@ public function threadLine($id = null) {
public function edit($id = null) {
- if (!$id && empty($this->request->data)) {
- throw new NotFoundException();
+ if (empty($id)) {
+ throw new BadRequestException();
}
- $old_entry = $this->Entry->getUnsanitized($id);
-
- if (!$old_entry) {
+ $oldEntry = $this->Entry->get($id, true);
+ if (!$oldEntry) {
throw new NotFoundException();
}
- $forbidden = $this->Entry->isEditingForbidden($old_entry, $this->CurrentUser);
-
- switch ($forbidden) {
+ switch ($oldEntry['rights']['isEditingForbidden']) {
case 'time':
$this->Session->setFlash(
'Stand by your word bro\', it\'s too late. @lo',
'flash/error'
);
- return $this->redirect(array('action' => 'view', $id));
+ $this->redirect(['action' => 'view', $id]);
+ return;
break;
case 'user':
$this->Session->setFlash('Not your horse, Hoss! @lo', 'flash/error');
- return $this->redirect(array('action' => 'view', $id));
+ $this->redirect(['action' => 'view', $id]);
+ return;
break;
case true :
$this->Session->setFlash(
@@ -404,42 +401,45 @@ public function edit($id = null) {
return;
}
+ // try to save edit
if (!empty($this->request->data)) {
- $this->Entry->id = $id;
- $new_entry = $this->Entry->update($this->request->data);
+ $data = $this->request->data;
+ $data['Entry']['id'] = $id;
+ $new_entry = $this->Entry->update($data);
if ($new_entry) {
- $this->_afterNewEntry(am($this->request['data'], $old_entry));
- return $this->redirect(array('action' => 'view', $id));
+ $this->_setNotifications(am($this->request['data'], $oldEntry));
+ $this->redirect(['action' => 'view', $id]);
+ return;
} else {
$this->Session->setFlash(__('Something clogged the tubes. Could not save entry. Try again.'));
}
}
- $forbiddenAsNormalUser = $this->Entry->isEditingForbidden($old_entry, $this->CurrentUser->mockUserType('user'));
- if($forbiddenAsNormalUser) {
+ // show editing form
+ if($oldEntry['rights']['isEditingAsUserForbidden']) {
$this->Session->setFlash(__('notice_you_are_editing_as_mod'), 'flash/warning');
}
- $this->request->data = am($old_entry, $this->request->data);
+ $this->request->data = am($oldEntry, $this->request->data);
// get text of parent entry for citation
- $parent_entry_id = $old_entry['Entry']['pid'];
+ $parent_entry_id = $oldEntry['Entry']['pid'];
if ($parent_entry_id > 0) {
- $parent_entry = $this->Entry->getUnsanitized($parent_entry_id);
+ $parent_entry = $this->Entry->get($parent_entry_id, true);
$this->set('citeText', $parent_entry['Entry']['text']);
}
// get notifications
$notis = $this->Entry->Esevent->checkEventsForUser(
- $old_entry['Entry']['user_id'],
+ $oldEntry['Entry']['user_id'],
array(
array(
- 'subject' => $old_entry['Entry']['id'],
+ 'subject' => $oldEntry['Entry']['id'],
'event' => 'Model.Entry.replyToEntry',
'receiver' => 'EmailNotification',
),
array(
- 'subject' => $old_entry['Entry']['tid'],
+ 'subject' => $oldEntry['Entry']['tid'],
'event' => 'Model.Entry.replyToThread',
'receiver' => 'EmailNotification',
),
@@ -481,12 +481,11 @@ public function delete($id = null) {
// Redirect
if ($success) {
- $this->CacheSupport->clearTree($entry['Entry']['tid']);
if ($this->Entry->isRoot($entry)) {
- $this->Session->setFlash(__('delete_tree_success'), 'flash/notice');
+ $this->Session->setFlash(__('delete_tree_success'), 'flash/success');
$this->redirect('/');
} else {
- $this->Session->setFlash(__('delete_subtree_success'), 'flash/notice');
+ $this->Session->setFlash(__('delete_subtree_success'), 'flash/success');
$this->redirect('/entries/view/' . $entry['Entry']['pid']);
}
} else {
@@ -702,11 +701,8 @@ public function merge($id = null) {
$targetId = $this->request->data['Entry']['targetId'];
$this->Entry->id = $id;
if ($this->Entry->threadMerge($targetId)) {
- // success
- $this->Entry->contain();
- $targetEntry = $this->Entry->findById($targetId);
- $this->CacheSupport->clearTree($targetEntry['Entry']['id']);
- return $this->redirect('/entries/view/' . $id);
+ $this->redirect('/entries/view/' . $id);
+ return;
} else {
$this->Session->setFlash(__("Error"), 'flash/error');
}
@@ -740,8 +736,6 @@ public function ajax_toggle($id = null, $toggle = null) {
else {
$this->Entry->id = $id;
$this->request->data = $this->Entry->toggle($toggle);
- $tid = $this->Entry->field('tid');
- $this->CacheSupport->clearTree($tid);
return ($this->request->data == 0) ? __d('nondynamic', $toggle . '_set_entry_link') : __d('nondynamic', $toggle . '_unset_entry_link');
}
@@ -837,9 +831,7 @@ protected function _prepareSlidetabData() {
}
}
- protected function _afterNewEntry($newEntry) {
- $this->CacheSupport->clearTree($newEntry['Entry']['tid']);
- // set notifications
+ protected function _setNotifications($newEntry) {
if (isset($newEntry['Event'])) {
$notis = [
[
@@ -871,57 +863,8 @@ protected function _afterNewEntry($newEntry) {
*/
protected function _getInitialThreads(CurrentUserComponent $User, $order) {
Stopwatch::start('Entries->_getInitialThreads() Paginate');
- // default for logged-in and logged-out users
- $cats = $this->Entry->Category->getCategoriesForAccession($User->getMaxAccession());
-
- // get data for category chooser
- $categoryChooser = $this->Entry->Category->getCategoriesSelectForAccession(
- $User->getMaxAccession());
- $this->set('categoryChooser', $categoryChooser);
-
- $catCT = __('All Categories');
- $catC_isUsed = false;
-
- // category chooser
- if ($User->isLoggedIn()) {
- if (Configure::read('Saito.Settings.category_chooser_global')
- || (Configure::read('Saito.Settings.category_chooser_user_override') && $User['user_category_override'])
- ) {
- $catC_isUsed = true;
- /* merge the user-cats with all-cats to include categories which are
- * new since the user updated his custum-cats the last time
- * array (4 => '4', 7 => '7', 13 => '13') + array (4 => true, 7 => '0')
- * becomes
- * array (4 => true, 7 => '0', 13 => '13')
- * with 13 => '13' trueish */
- $user_cats = $User['user_category_custom'] + $cats;
- /* then filter for zeros to get only the user categories
- * array (4 => true, 13 => '13') */
- $user_cats = array_filter($user_cats);
- $user_cats = array_intersect_key($user_cats, $cats);
- $this->set('categoryChooserChecked', $user_cats);
-
- if ($User->isLoggedIn() === false) {
- // non logged in user sees his accessions i.e. the default set
- } elseif ((int)$User['user_category_active'] === -1) {
- // user has choosen to see all available categories i.e. the default set
- } elseif ((int)$User['user_category_active'] > 0) {
- // logged in users sees his active group if he has access rights
- $cats = array_intersect_key($cats,
- array($User['user_category_active'] => 1));
- $catCT = $User['user_category_active'];
- } elseif (empty($User['user_category_custom'])) {
- // for whatever reason we should see a custom category, but there are no set yet
- } elseif (empty($User['user_category_custom']) === false) {
- // but if he has no active group and a custom groups set he sees his custom group
- $cats = array_keys($user_cats);
- $catCT = __('Custom');
- }
- $this->set('categoryChooserTitleId', $catCT);
- }
- }
- $this->set('categoryChooserIsUsed', $catC_isUsed);
+ $categories = $this->_setupCategoryChooser($User);
$this->paginate = array(
/* Whenever you change the conditions here check if you have to adjust
@@ -930,7 +873,7 @@ protected function _getInitialThreads(CurrentUserComponent $User, $order) {
*/
'conditions' => array(
'pid' => 0,
- 'Entry.category' => $cats,
+ 'Entry.category' => $categories,
),
'contain' => false,
'fields' => 'id, pid, tid, time, last_answer',
@@ -950,6 +893,50 @@ protected function _getInitialThreads(CurrentUserComponent $User, $order) {
return $initial_threads_new;
}
+ protected function _setupCategoryChooser(SaitoUser $User) {
+ $categories = $this->Entry->Category->getCategoriesForAccession(
+ $User->getMaxAccession()
+ );
+
+ $is_used = $User->isLoggedIn() &&
+ (
+ Configure::read('Saito.Settings.category_chooser_global') ||
+ (
+ Configure::read(
+ 'Saito.Settings.category_chooser_user_override'
+ ) && $User['user_category_override']
+ )
+ );
+
+ if ($is_used) {
+ // @todo find right place for this; also: User::getCategories();
+ App::uses('UserCategories', 'Lib');
+ $UserCategories = new UserCategories($User->getSettings(), $categories);
+ list($categories, $type, $custom) = $UserCategories->get();
+
+ $this->set('categoryChooserChecked', $custom);
+
+ switch ($type) {
+ case 'single':
+ $title = $User['user_category_active'];
+ break;
+ case 'custom':
+ $title = __('Custom');
+ break;
+ default:
+ $title = __('All Categories');
+ }
+ $this->set('categoryChooserTitleId', $title);
+ $this->set(
+ 'categoryChooser',
+ $this->Entry->Category->getCategoriesSelectForAccession(
+ $User->getMaxAccession()
+ )
+ );
+ }
+ return $categories;
+ }
+
protected function _teardownAdd() {
//* find categories for dropdown
$categories = $this->Entry->Category->getCategoriesSelectForAccession($this->CurrentUser->getMaxAccession());
diff --git a/app/Controller/SettingsController.php b/app/Controller/SettingsController.php
index cce715776..15d1635e9 100755
--- a/app/Controller/SettingsController.php
+++ b/app/Controller/SettingsController.php
@@ -5,9 +5,10 @@
class SettingsController extends AppController {
public $name = 'Settings';
- public $helpers = array(
- 'TimeH',
- );
+ public $helpers = [
+ 'Setting',
+ 'TimeH'
+ ];
/**
* Subset of MLF settings currently used by Saito
@@ -61,6 +62,7 @@ class SettingsController extends AppController {
public function admin_index() {
$settings = $this->request->data = $this->Setting->getSettings();
$settings = array_intersect_key($settings, $this->_currentlyUsedSettings);
+ $settings['userranks_ranks'] = $this->Setting->pipeMerger($settings['userranks_ranks']);
$this->set('Settings', $settings);
}
@@ -86,7 +88,8 @@ public function admin_edit($id = NULL) {
$this->Setting->id = $id;
if ( $this->Setting->save($this->request->data) ) {
$this->Session->setFlash('Saved. @lo', 'flash/notice');
- $this->redirect(array( 'action' => 'index', $id ));
+ $this->redirect(['action' => 'index', '#' => $id]);
+ return;
} else {
$this->Session->setFlash('Something went wrong @lo', 'flash/error');
}
diff --git a/app/Controller/ToolsController.php b/app/Controller/ToolsController.php
index 1f1952d70..16b60d25c 100644
--- a/app/Controller/ToolsController.php
+++ b/app/Controller/ToolsController.php
@@ -9,10 +9,6 @@
*/
class ToolsController extends AppController {
- public $components = [
- 'CacheSupport'
- ];
-
public $helpers = array(
'JasmineJs.JasmineJs'
);
@@ -21,7 +17,7 @@ class ToolsController extends AppController {
* Emtpy out all caches
*/
public function admin_emptyCaches() {
- $this->CacheSupport->clearAll();
+ $this->CacheSupport->clear();
$this->Session->setFlash(__('Caches have been emptied.'), 'flash/notice');
return $this->redirect($this->referer());
}
@@ -42,7 +38,7 @@ public function testJs() {
*/
public function clearCache() {
if (in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1'))) {
- $this->CacheSupport->clearApc();
+ $this->CacheSupport->clear('Apc');
echo json_encode(array('APC Clear Cache' => true));
}
exit;
diff --git a/app/Controller/UploadsController.php b/app/Controller/UploadsController.php
index ee352dd7b..7eda3887c 100755
--- a/app/Controller/UploadsController.php
+++ b/app/Controller/UploadsController.php
@@ -104,7 +104,7 @@ public function delete($id = null) {
$this->Upload->id = (int)$id;
$file = $this->Upload->read();
if ( $file
- && $file['Upload']['user_id'] === $this->CurrentUser->getId()
+ && (int)$file['Upload']['user_id'] === $this->CurrentUser->getId()
) {
if (!$this->Upload->delete(null, false)) {
$this->JsData->addAppJsMessage(
diff --git a/app/Controller/UsersController.php b/app/Controller/UsersController.php
index c13da9380..82813095a 100644
--- a/app/Controller/UsersController.php
+++ b/app/Controller/UsersController.php
@@ -5,9 +5,6 @@
class UsersController extends AppController {
public $name = 'Users';
- public $components = [
- 'CacheSupport'
- ];
public $helpers = [
'Farbtastic',
@@ -359,8 +356,7 @@ public function admin_delete($id = null) {
elseif ($id == 1):
$this->Session->setFlash(__("You can't delete the installation account."), 'flash/error');
elseif ($this->User->deleteAllExceptEntries($id)):
- $this->CacheSupport->clearTrees();
- $this->Session->setFlash(__('User %s deleted.', $readUser['User']['username']), 'flash/notice');
+ $this->Session->setFlash(__('User %s deleted.', $readUser['User']['username']), 'flash/success');
$this->redirect('/');
return;
else:
diff --git a/app/Lib/CacheSupport.php b/app/Lib/CacheSupport.php
new file mode 100644
index 000000000..d82db9a14
--- /dev/null
+++ b/app/Lib/CacheSupport.php
@@ -0,0 +1,119 @@
+addCache(
+ [
+ 'Apc' => 'ApcCacheSupportCachelet',
+ 'Cake' => 'CakeCacheSupportCachelet',
+ 'Saito' => 'SaitoCacheSupportCachelet',
+ 'Thread' => 'ThreadCacheSupportCachelet'
+ ]
+ );
+ }
+
+ public function clear($cache = null, $id = null) {
+ if ($cache === null) {
+ foreach ($this->_Caches as $Cachelet) {
+ $Cachelet->clear();
+ }
+ } else {
+ $this->_Caches[$cache]->clear($id);
+ }
+ }
+
+ public function addCache($cache) {
+ foreach ($cache as $key => $class_name) {
+ $this->_addCachelet($key, new $class_name);
+ }
+ }
+
+ protected function _addCachelet($key, CacheSupportCacheletInterface $cachelet) {
+ if (!isset($this->_Caches[$key])) {
+ $this->_Caches[$key] = $cachelet;
+ }
+ }
+ }
+
+ interface CacheSupportCacheletInterface {
+ public function clear($id = null);
+ }
+
+ App::uses('CakeEvent', 'Event');
+ App::uses('CakeEventListener', 'Event');
+ App::uses('CacheTree', 'Lib/CacheTree');
+ class ThreadCacheSupportCachelet implements CacheSupportCacheletInterface,
+ CakeEventListener {
+
+ protected $_CacheTree;
+
+ public function __construct() {
+ $this->_CacheTree = CacheTree::getInstance();
+ CakeEventManager::instance()->attach($this);
+ }
+
+ public function implementedEvents() {
+ return [
+ 'Model.Thread.reset' => 'onThreadsReset',
+ 'Model.Thread.change' => 'onThreadChanged',
+ 'Model.Entry.replyToEntry' => 'onEntryChanged',
+ 'Model.Entry.update' => 'onEntryChanged',
+ 'Model.Category.update' => 'onThreadsReset',
+ 'Model.Category.delete' => 'onThreadsReset'
+ ];
+ }
+
+ public function onThreadsReset($event) {
+ $this->clear();
+ }
+
+ public function onThreadChanged($event) {
+ $this->clear($event->data['subject']);
+ }
+
+ public function onEntryChanged($event) {
+ $model_alias = $event->subject()->alias;
+ if (!isset($event->data['data'][$model_alias]['tid'])) {
+ throw new InvalidArgumentException('No thread-id in event data.');
+ }
+ $thread_id = $event->data['data'][$model_alias]['tid'];
+ $this->clear($thread_id);
+ }
+
+ public function clear($id = null) {
+ Cache::clear(false, 'entries');
+ if ($id === null) {
+ $this->_CacheTree->reset();
+ } else {
+ $this->_CacheTree->delete($id);
+ }
+ }
+ }
+
+ class SaitoCacheSupportCachelet implements CacheSupportCacheletInterface {
+ public function clear($id = null) {
+ Cache::clear(false, 'default');
+ Cache::clear(false, 'short');
+ }
+ }
+
+ class ApcCacheSupportCachelet implements CacheSupportCacheletInterface {
+ public function clear($id = null) {
+ if (function_exists('apc_store')) {
+ apc_clear_cache();
+ apc_clear_cache('user');
+ apc_clear_cache('opcode');
+ }
+ }
+ }
+
+ class CakeCacheSupportCachelet implements CacheSupportCacheletInterface {
+ public function clear($id = null) {
+ Cache::clearGroup('persistent');
+ Cache::clearGroup('models');
+ Cache::clearGroup('views');
+ }
+ }
\ No newline at end of file
diff --git a/app/Controller/Component/CacheTreeComponent.php b/app/Lib/CacheTree/CacheTree.php
old mode 100755
new mode 100644
similarity index 76%
rename from app/Controller/Component/CacheTreeComponent.php
rename to app/Lib/CacheTree/CacheTree.php
index 5f49d7b47..3df8f4fc0
--- a/app/Controller/Component/CacheTreeComponent.php
+++ b/app/Lib/CacheTree/CacheTree.php
@@ -1,14 +1,11 @@
_CurrentUser = $Controller->CurrentUser;
$cache_config = Cache::settings();
- if ($cache_config['engine'] === 'File') {
- $this->_CacheEngine = new CacheTreeDbCacheEngine;
- } else {
+ if ($cache_config['engine'] === 'Apc') {
$this->_CacheEngine = new CacheTreeAppCacheEngine;
+ } else {
+ $this->_CacheEngine = new CacheTreeDbCacheEngine;
}
if (
@@ -57,21 +65,6 @@ public function initialize(Controller $Controller) {
$this->readCache();
}
- public function beforeRedirect(Controller $Controller, $url, $status = null, $exit = true) {
- parent::beforeRedirect($Controller, $url);
- $this->saveCache();
- }
-
- public function beforeRender(Controller $Controller) {
- parent::beforeRender($Controller);
- $Controller->set('CacheTree', $this);
- }
-
- public function shutdown(Controller $Controller) {
- parent::shutdown($Controller);
- $this->saveCache();
- }
-
public function isCacheUpdatable(array $entry) {
if ( !$this->_allowUpdate ) {
return false;
@@ -90,7 +83,8 @@ public function isCacheValid(array $entry) {
return $this->_validEntries[$entry['id']];
endif;
- if ( isset($this->_cachedEntries[$entry['id']]) && strtotime($entry['last_answer']) <= $this->_cachedEntries[$entry['id']]['metadata']['content_last_updated']) {
+ if (isset($this->_cachedEntries[(int)$entry['id']]) &&
+ strtotime($entry['last_answer']) <= $this->_cachedEntries[(int)$entry['id']]['metadata']['content_last_updated']) {
if ($this->_isEntryOldForUser($entry)) {
$isCacheValid = true;
}
@@ -110,7 +104,7 @@ protected function _isEntryOldForUser(array $entry) {
public function delete($id) {
$this->_isUpdated = TRUE;
$this->readCache();
- unset($this->_cachedEntries[$id]);
+ unset($this->_cachedEntries[(int)$id]);
}
public function reset() {
@@ -125,8 +119,8 @@ public function read($id = null) {
return $this->_cachedEntries;
}
- if ( isset($this->_cachedEntries[$id]) ) {
- return $this->_cachedEntries[$id]['content'];
+ if ( isset($this->_cachedEntries[(int)$id]) ) {
+ return $this->_cachedEntries[(int)$id]['content'];
}
return FALSE;
@@ -148,11 +142,11 @@ public function update($id, $content, $timestamp = null) {
$this->_isUpdated = TRUE;
$this->readCache();
$metadata = array(
- 'created' => $now,
- 'content_last_updated' => $timestamp,
+ 'created' => $now,
+ 'content_last_updated' => $timestamp,
);
$data = array( 'metadata' => $metadata, 'content' => $content );
- $this->_cachedEntries[$id] = $data;
+ $this->_cachedEntries[(int)$id] = $data;
}
public function readCache() {
@@ -180,7 +174,7 @@ public function saveCache() {
$this->_gc();
$this->_CacheEngine->write((array)$this->_cachedEntries);
- }
+ }
/**
* Garbage collection
@@ -195,13 +189,14 @@ protected function _gc() {
if ( $number_of_cached_entries > $this->_maxNumberOfEntries ) {
// descending time sort
uasort($this->_cachedEntries, function($a, $b) {
- if ($a['metadata']['content_last_updated'] == $b['metadata']['content_last_updated']) {
- return 0;
- }
- return ($a['metadata']['content_last_updated'] < $b['metadata']['content_last_updated']) ? 1 : -1;
+ if ($a['metadata']['content_last_updated'] == $b['metadata']['content_last_updated']) {
+ return 0;
+ }
+ return ($a['metadata']['content_last_updated'] < $b['metadata']['content_last_updated']) ? 1 : -1;
});
$this->_cachedEntries = array_slice($this->_cachedEntries, 0, $this->_maxNumberOfEntries, true);
}
}
+
}
\ No newline at end of file
diff --git a/app/Lib/CacheTree/CacheTreeAppCacheEngine.php b/app/Lib/CacheTree/CacheTreeAppCacheEngine.php
index 7ccd2a7fe..49db7355b 100644
--- a/app/Lib/CacheTree/CacheTreeAppCacheEngine.php
+++ b/app/Lib/CacheTree/CacheTreeAppCacheEngine.php
@@ -1,8 +1,8 @@
assertEqual(
- Router::baseURL() . $this->controller->request->webroot . $url,
+ Router::fullBaseUrl() . $this->controller->request->webroot . $url,
$this->headers['Location']
);
}
diff --git a/app/Lib/SaitoUser.php b/app/Lib/SaitoUser.php
index 88413f6c2..5dc126b84 100755
--- a/app/Lib/SaitoUser.php
+++ b/app/Lib/SaitoUser.php
@@ -69,7 +69,7 @@ public function set($user) {
if ( !empty($user) && is_array($user) ) :
if (empty($user['id']) === false) {
- $this->_id = $user['id'];
+ $this->_id = (int)$user['id'];
$this->_isLoggedIn = true;
}
$this->_settings = $user;
diff --git a/app/Lib/UserCategories.php b/app/Lib/UserCategories.php
new file mode 100644
index 000000000..6ca4e441e
--- /dev/null
+++ b/app/Lib/UserCategories.php
@@ -0,0 +1,77 @@
+_user = $user;
+ $this->_categories = $categories;
+ }
+
+ protected function _isAll() {
+ return (int)$this->_user['user_category_active'] === -1;
+ }
+
+ protected function _isSingle() {
+ return (int)$this->_user['user_category_active'] > 0;
+ }
+
+ protected function _isCustom() {
+ return (int)$this->_user['user_category_active'] == 0 &&
+ empty($this->_user['user_category_custom']) === false;
+ }
+
+ protected function _filterOutNonExisting($categories) {
+ return array_intersect_key($categories, $this->_categories);
+ }
+
+ protected function _getCustom() {
+ // add new categories to custom set
+ //
+ // [4 => true, 7 => '0'] + [4 => '4', 7 => '7', 13 => '13']
+ // becomes
+ // [4 => true, 7 => '0', 13 => '13']
+ // with 13 => '13' trueish
+ $custom = $this->_user['user_category_custom'] + $this->_categories;
+
+ // then filter for zeros to get only the user categories
+ // [4 => true, 13 => '13']
+ $custom = array_filter($custom);
+
+ $custom = $this->_filterOutNonExisting($custom);
+
+ $keys = array_keys($custom);
+ return array_combine($keys, $keys);
+ }
+
+ /**
+ * @return array
+ *
+ * $categories: array with categories for the active type [cat_id1, cat_id2, …]
+ * $type: active type: 'all', 'single' or 'custom'
+ * $custom: categories for 'custom' [cat_id1, cat_id2, …]
+ */
+ public function get() {
+ $custom = $this->_getCustom();
+ if ($this->_isSingle()) {
+ $type = 'single';
+ $categories = $this->_filterOutNonExisting(
+ [$this->_user['user_category_active'] => $this->_user['user_category_active']]
+ );
+ } elseif ($this->_isCustom()) {
+ $type = 'custom';
+ $categories = $custom;
+ } else {
+ $type = 'all';
+ $categories = $this->_categories;
+ }
+ return [$categories, $type, $custom];
+ }
+ }
+
diff --git a/app/Locale/deu/LC_MESSAGES/default.po b/app/Locale/deu/LC_MESSAGES/default.po
index 7efef771f..acb263f76 100644
--- a/app/Locale/deu/LC_MESSAGES/default.po
+++ b/app/Locale/deu/LC_MESSAGES/default.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Macnemo_2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-05-30 12:55+0100\n"
-"PO-Revision-Date: 2013-06-06 19:45+0100\n"
+"POT-Creation-Date: 2013-08-12 09:09+0100\n"
+"PO-Revision-Date: 2013-08-12 09:09+0100\n"
"Last-Translator: Schlaefer $saito"
-"code>-Konfiguration in
app/config/email.php
möglich. Als "
-"Vorlage sollte app/config/email.php.default
verwendet werden. "
-"Siehe auch."
-
-#: View/Settings/admin_index.ctp:125
+#: View/Settings/admin_index.ctp:25
msgid "Moderation"
msgstr "Moderation"
-#
-#: View/Settings/admin_index.ctp:130
-msgid "block_user_ui"
-msgstr "Nutzer sperren"
-
-#
-#: View/Settings/admin_index.ctp:136
-msgid "block_user_ui_exp"
-msgstr "Moderatoren dürfen Benutzer sperren."
-
-#: View/Settings/admin_index.ctp:149
-msgid "store_ip"
-msgstr "IP speichern"
-
-#: View/Settings/admin_index.ctp:155
-msgid "store_ip_exp"
-msgstr ""
-"Beim Einträgen ins Forum werden die IP-Adresse des Eintragenden gespeichert. "
-"Moderatoren wird die Adresse im Eintrag angezeigt."
-
-#: View/Settings/admin_index.ctp:168
-msgid "store_ip_anonymized"
-msgstr "IP anonymisieren"
-
-#: View/Settings/admin_index.ctp:174
-msgid "store_ip_anonymized_exp"
-msgstr "Anonymisieren der gespeicherten IP-Adresse."
-
-#: View/Settings/admin_index.ctp:187
+#: View/Settings/admin_index.ctp:31
#, fuzzy
msgid "Registration"
msgstr "Registrierung"
-#: View/Settings/admin_index.ctp:192
-#, fuzzy
-msgid "tos_enabled"
-msgstr "Nutzungsbedingungen aktivieren"
-
-#: View/Settings/admin_index.ctp:198
-#, fuzzy
-msgid "tos_enabled_exp"
-msgstr ""
-"Setzt einen Verweis und eine zu bestätigende Checkbox für die "
-"Nutzungsbedingungen auf die Registrierungsseite."
-
-#: View/Settings/admin_index.ctp:211
-msgid "tos_url"
-msgstr "Nutzungsbedingungen-URL"
-
-#: View/Settings/admin_index.ctp:217
-#, fuzzy
-msgid "tos_url_exp"
-msgstr ""
-"URL zu den Nutzungsbedingen. Falls leer, werden die eingebauten "
-"Standardseiten verwendet."
-
-#
-#: View/Settings/admin_index.ctp:235
-msgid "edit_period"
-msgstr "Nachbearbeitungszeit"
-
-#
-#: View/Settings/admin_index.ctp:241
-msgid "edit_period_exp"
-msgstr ""
-"Minuten, die ein neuer Eintrag nach dem Anlegen nachbearbeitet werden kann."
-
-#
-#: View/Settings/admin_index.ctp:259
-msgid "edit_delay"
-msgstr "Nachbearbeiten anzeigen"
-
-#
-#: View/Settings/admin_index.ctp:265
-msgid "edit_delay_exp"
-msgstr ""
-"Minuten, die ein Eintrag nach dem Anlegen ohne Bearbeitungshinweis "
-"nachbearbeitet werden kann."
-
-#: View/Settings/admin_index.ctp:278
-msgid "topics_per_page"
-msgstr "Threads pro Seite"
-
-#: View/Settings/admin_index.ctp:284
-msgid "topics_per_page_exp"
-msgstr "Anzahl der Threads, die auf der Startseite angezeigt werden."
-
-#: View/Settings/admin_index.ctp:297
-msgid "thread_depth_indent"
-msgstr "Einrücktiefe Threads"
-
-#: View/Settings/admin_index.ctp:303
-msgid "thread_depth_indent_exp"
-msgstr ""
-"Ab dieser Tiefe werden werden Einträge in der Thread-Ansicht nicht weiter "
-"nach rechts eingerückt dargestellt."
-
-#: View/Settings/admin_index.ctp:316
-msgid "autolink"
-msgstr "Autolink"
-
-#: View/Settings/admin_index.ctp:322
-msgid "autolink_exp"
-msgstr "Verweise im Text automatisch erkennen und verlinken."
-
-#: View/Settings/admin_index.ctp:335
-msgid "bbcode_img"
-msgstr "Bilder"
-
-#: View/Settings/admin_index.ctp:341
-msgid "bbcode_img_exp"
-msgstr "Einbinden von Bildern erlauben."
-
-#: View/Settings/admin_index.ctp:354
-msgid "quote_symbol"
-msgstr "Zitatzeichen"
-
-#: View/Settings/admin_index.ctp:360
-msgid "quote_symbol_exp"
-msgstr "Zitatzeichen"
-
-#: View/Settings/admin_index.ctp:373
-msgid "signature_separator"
-msgstr "Signaturtrenner"
-
-#: View/Settings/admin_index.ctp:379
-msgid "signature_separator_exp"
-msgstr "Signaturtrenner"
-
-#: View/Settings/admin_index.ctp:392
-msgid "subject_maxlength"
-msgstr "Betrefflänge"
-
-#: View/Settings/admin_index.ctp:398
-msgid "subject_maxlength_exp"
-msgstr "Maximale Zeichenanzahl in Betreff."
-
-#: View/Settings/admin_index.ctp:411
-msgid "text_word_maxlength"
-msgstr "Wordlänge"
-
-#: View/Settings/admin_index.ctp:417
-msgid "text_word_maxlength_exp"
-msgstr "Maximale Zeichenanzahl pro Wort."
-
-#: View/Settings/admin_index.ctp:430
-msgid "userranks_show"
-msgstr "Ränge anzeigen"
-
-#: View/Settings/admin_index.ctp:436
-msgid "userranks_show_exp"
-msgstr "Benutzerränge anzeigen."
-
-#: View/Settings/admin_index.ctp:449
-msgid "userranks_ranks"
-msgstr "Ränge"
-
-#: View/Settings/admin_index.ctp:455
-msgid "userranks_ranks_exp"
-msgstr "Benutzerrang basierend auf Anzahl der gemachten Beiträge."
-
-#
-#: View/Settings/admin_index.ctp:468
-msgid "video_domains_allowed"
-msgstr "Einbettbare (Video-) Quellen"
-
-#
-#: View/Settings/admin_index.ctp:474
-msgid "video_domains_allowed_exp"
-msgstr ""
-"Domainnamen einbindbar für Video und iFrame. Ein Asterisk * bedeuted freies "
-"Einbinden (Vorsicht, dies kann ebenfalls zum Einbinden von Schadsoftware "
-"genutzt werden!)."
-
-#: View/Settings/admin_index.ctp:487
+#: View/Settings/admin_index.ctp:61
#, fuzzy
msgid "Category Chooser"
msgstr "Kategorienfilter"
-#: View/Settings/admin_index.ctp:492
-msgid "category_chooser_global"
-msgstr "Standard"
-
-#: View/Settings/admin_index.ctp:498
-msgid "category_chooser_global_exp"
-msgstr "Kategorienfilter auf der Frontseite immer anzeigen."
-
-#: View/Settings/admin_index.ctp:511
-msgid "category_chooser_user_override"
-msgstr "Benutzereinstellung"
-
-#: View/Settings/admin_index.ctp:517
-msgid "category_chooser_user_override_exp"
-msgstr ""
-"Erlaubt einem Benutzern den Kategorienfilter in seinen Einstellungen zu "
-"aktivieren, selbst wenn der Filter standardmässig deaktiviert ist."
-
-#: View/Settings/admin_index.ctp:535
-msgid "shoutbox_enabled"
-msgstr "Aktivieren"
-
-#: View/Settings/admin_index.ctp:541
-msgid "shoutbox_enabled_exp"
-msgstr "Shoutbox aktivieren"
-
-#: View/Settings/admin_index.ctp:554
-msgid "shoutbox_max_shouts"
-msgstr "Anzahl"
-
-#: View/Settings/admin_index.ctp:560
-msgid "shoutbox_max_shouts_exp"
-msgstr "Anzahl der angezeigten Shoutboxeinträge"
-
-#: View/Settings/admin_index.ctp:578
-msgid "upload_max_img_size"
-msgstr "Uploadgröße maximal"
-
-#: View/Settings/admin_index.ctp:584
-msgid "upload_max_img_size_exp"
-msgstr "Maximale Größe, die ein Upload besitzen darf in kB."
-
-#: View/Settings/admin_index.ctp:597
-msgid "upload_max_number_of_uploads"
-msgstr "Anzahl an Uploads pro Benutzer"
-
-#: View/Settings/admin_index.ctp:603
-msgid "upload_max_number_of_uploads_exp"
-msgstr ""
-"Maximale Anzahl von Dateien, die ein einzelner Benutzer gleichzeitig auf dem "
-"Server hochgeladen haben kann."
-
-#: View/Settings/admin_index.ctp:620
-msgid "flattr_enabled"
-msgstr "Flattr aktivieren"
-
-#: View/Settings/admin_index.ctp:626
-msgid "flattr_enabled_exp"
-msgstr "Ermöglicht es Benutzern flattr zu verwenden."
-
-#: View/Settings/admin_index.ctp:639
-msgid "flattr_language"
-msgstr "Flattr-Sprache"
-
-#: View/Settings/admin_index.ctp:645
-msgid "flattr_language_exp"
-msgstr ""
-"Sprache, die flattr den hereinzeigenden Verweisen zuordnet. Siehe Doku auf "
-"flattr.com für Kürzel."
-
-#: View/Settings/admin_index.ctp:658
-msgid "flattr_category"
-msgstr "Flattr-Kategorie"
-
-#: View/Settings/admin_index.ctp:664
-msgid "flattr_category_exp"
+#: View/Settings/admin_index.ctp:67
+msgid "Shoutbox"
msgstr ""
-"Kategorie, die Flattr den hereinzeigenden Verweisen zuordnet. Siehe flattr."
-"com für verfügbare Kategorien."
-#: View/Settings/admin_index.ctp:683
-msgid "embedly_enabled"
-msgstr "Embed.ly aktivieren"
-
-#: View/Settings/admin_index.ctp:685
-msgid "embedly_enabled_exp"
-msgstr ""
-"Aktiviert den [embed]-BBcode, welcher seinen Inhalt durch Embed.ly darstellt."
-
-#: View/Settings/admin_index.ctp:693
-msgid "embedly_key"
-msgstr "Embed.ly Key"
-
-#
-#: View/Settings/admin_index.ctp:695
-msgid "embedly_key_exp"
-msgstr "API-Key, den man nach der Registrierung bei Embed.ly erhält."
+#: View/Settings/admin_index.ctp:73
+#, fuzzy
+msgid "Uploads"
+msgstr "Hochladen"
-#: View/Settings/admin_index.ctp:706
+#: View/Settings/admin_index.ctp:93
msgid "Debug"
msgstr ""
-#: View/Settings/admin_index.ctp:712
-msgid "stopwatch_get"
-msgstr "Stopuhr"
-
-#: View/Settings/admin_index.ctp:714
-#, fuzzy
-msgid "stopwatch_get_exp"
+#: View/Settings/admin_timezone.ctp:24
+msgid "_exp"
msgstr ""
-"Ausgabe der Stopuhrzeiten durch Anfügen von /stopwatch:true/
an "
-"URL."
#: View/SmileyCodes/admin_add.ctp:4
#, fuzzy
@@ -1574,7 +1221,7 @@ msgid "register_success_content"
msgstr ""
"Ihre Registrierung war erfolgreich. Sie können sich nun einloggen. Viel Spaß!"
-#: View/Users/register.ctp:23 Controller/EntriesController.php:328
+#: View/Users/register.ctp:23 Controller/EntriesController.php:305
msgid "js-required"
msgstr "Zum Nutzen des Forums bitte JavaScript aktivieren."
@@ -1698,55 +1345,51 @@ msgstr "Flattr-Kategorie"
msgid "Category deleted."
msgstr "Kategorie"
-#: Controller/EntriesController.php:103
+#: Controller/EntriesController.php:88
msgid "page"
msgstr "Seite"
-#: Controller/EntriesController.php:204 Controller/EntriesController.php:213
+#: Controller/EntriesController.php:187 Controller/EntriesController.php:196
msgid "Invalid post"
msgstr "Posting konnte nicht gefunden werden."
-#: Controller/EntriesController.php:255
+#: Controller/EntriesController.php:238
msgid "new_entry_linktitle"
msgstr "Neuen Eintrag verfassen"
-#: Controller/EntriesController.php:260
-msgid "logged_in_users_only"
-msgstr "Nur für eingeloggte Benutzer."
-
-#: Controller/EntriesController.php:318 Controller/EntriesController.php:436
+#: Controller/EntriesController.php:293 Controller/EntriesController.php:414
msgid "Something clogged the tubes. Could not save entry. Try again."
msgstr ""
-#: Controller/EntriesController.php:364 Controller/EntriesController.php:476
+#: Controller/EntriesController.php:344 Controller/EntriesController.php:454
msgid "back_to_posting_from_linkname"
msgstr "zurück zum Posting von %s"
-#: Controller/EntriesController.php:375
+#: Controller/EntriesController.php:355
msgid "answer_marking"
msgstr "Antwort verfassen"
-#: Controller/EntriesController.php:442
+#: Controller/EntriesController.php:420
msgid "notice_you_are_editing_as_mod"
msgstr "Achtung: Die folgende Aktion wird als Moderator vorgenommen!"
-#: Controller/EntriesController.php:508
+#: Controller/EntriesController.php:485
msgid "delete_tree_success"
msgstr "Thread erfolgreich entfernt."
-#: Controller/EntriesController.php:511
+#: Controller/EntriesController.php:488
msgid "delete_subtree_success"
msgstr "Subthread erfolgreich entfernt."
-#: Controller/EntriesController.php:515
+#: Controller/EntriesController.php:492
msgid "delete_tree_error"
msgstr "Thread konnte nicht gelöscht werden."
-#: Controller/EntriesController.php:732
+#: Controller/EntriesController.php:707
msgid "Error"
msgstr ""
-#: Controller/EntriesController.php:925
+#: Controller/EntriesController.php:924
msgid "Custom"
msgstr "Angepasst"
@@ -1817,7 +1460,7 @@ msgstr ""
msgid "Smily was not deleted"
msgstr ""
-#: Controller/ToolsController.php:30
+#: Controller/ToolsController.php:21
msgid "Caches have been emptied."
msgstr "Caches wurden geleert."
@@ -1825,98 +1468,98 @@ msgstr "Caches wurden geleert."
msgid "upload_max_number_of_uploads_failed"
msgstr "Maximale Anzahl an Uploads erreicht (%s)."
-#: Controller/UsersController.php:56 Controller/UsersController.php:343
+#: Controller/UsersController.php:37 Controller/UsersController.php:329
#, php-format
msgid "User %s is locked."
msgstr "Benutzer %s wurde gesperrt."
-#: Controller/UsersController.php:62
+#: Controller/UsersController.php:43
msgid "auth_loginerror"
msgstr "Fehler beim Login!"
-#: Controller/UsersController.php:112
+#: Controller/UsersController.php:92
msgid "register_email_subject"
msgstr "Willkommen zu %s!"
-#: Controller/UsersController.php:190 Controller/UsersController.php:212
-#: Controller/UsersController.php:248
+#: Controller/UsersController.php:172 Controller/UsersController.php:195
+#: Controller/UsersController.php:233
msgid "Invalid user"
msgstr "Ungültiger Benutzer"
-#: Controller/UsersController.php:239
+#: Controller/UsersController.php:224
msgid "User :name"
msgstr "Benutzer :name"
-#: Controller/UsersController.php:293
+#: Controller/UsersController.php:278
msgid "The user could not be saved. Please, try again."
msgstr "Der Benutzer konnte nicht gespeichert werden."
-#: Controller/UsersController.php:325 Controller/UsersController.php:362
+#: Controller/UsersController.php:311 Controller/UsersController.php:348
msgid "User not found."
msgstr "Benutzer nicht gefunden."
-#: Controller/UsersController.php:333
+#: Controller/UsersController.php:320
msgid "You can't lock yourself."
msgstr "Man kann sich nicht selbst sperren."
-#: Controller/UsersController.php:335
+#: Controller/UsersController.php:322
msgid "You can't lock administrators."
msgstr "Administratoren können nicht gesperrt werden."
-#: Controller/UsersController.php:345
+#: Controller/UsersController.php:331
#, php-format
msgid "User %s is unlocked."
msgstr "Benutzer %s wurde freigegeben."
-#: Controller/UsersController.php:349
+#: Controller/UsersController.php:335
msgid "Error while un/locking."
msgstr ""
-#: Controller/UsersController.php:368
+#: Controller/UsersController.php:355
msgid "You can't delete yourself."
msgstr "Man kann sich nicht selbst löschen."
-#: Controller/UsersController.php:370
+#: Controller/UsersController.php:357
msgid "You can't delete the installation account."
msgstr "Der Installationsbenutzer kann nicht gelöscht werden."
-#: Controller/UsersController.php:372
+#: Controller/UsersController.php:359
#, php-format
msgid "User %s deleted."
msgstr "Nutzer %s gelöscht."
-#: Controller/UsersController.php:375
+#: Controller/UsersController.php:363
msgid "Couldn't delete user."
msgstr ""
-#: Controller/UsersController.php:400
+#: Controller/UsersController.php:387
msgid "change_password_success"
msgstr "Passwort erfolgreich geändert."
-#: Controller/UsersController.php:463
+#: Controller/UsersController.php:455
msgid "error_email_not-valid"
msgstr "Keine gültige Email-Adresse."
-#: Controller/UsersController.php:510
+#: Controller/UsersController.php:502
msgid "Message was send."
msgstr "Nachricht wurde versandt."
-#: Controller/UsersController.php:513
+#: Controller/UsersController.php:507
#, fuzzy
msgid "Message couldn't be send! "
msgstr "Fehler, Nachricht konnte nicht versandt werden."
-#: Controller/Component/CurrentUserComponent.php:258
+#: Controller/Component/CurrentUserComponent.php:308
msgid "auth_autherror"
msgstr "Der Zugriff auf diese Funktion ist eingeschränkt!"
-#: Controller/Component/EmailNotificationComponent.php:53
-#: Controller/Component/EmailNotificationComponent.php:85
+#: Controller/Component/EmailNotificationComponent.php:47
+#: Controller/Component/EmailNotificationComponent.php:79
#, php-format
msgid "New reply to \"%s\""
msgstr "Neu Antwort zu \"%s\""
-#: Controller/Component/EmailNotificationComponent.php:114
+#: Controller/Component/EmailNotificationComponent.php:112
msgid "Successfull registration"
msgstr ""
@@ -1997,7 +1640,7 @@ msgstr ""
msgid "Abend"
msgstr ""
-#: View/Helper/BbcodeHelper.php:566
+#: View/Helper/BbcodeHelper.php:580
#, fuzzy
msgid ""
"Your browser does not support HTML5 video. Please updgrade to a "
@@ -2007,7 +1650,7 @@ msgstr ""
"Ihr Browser unterstützt kein HTML5-Video. Bitte verwenden Sie einen modernen "
"Browser."
-#: View/Helper/BbcodeHelper.php:584
+#: View/Helper/BbcodeHelper.php:601
#, fuzzy
msgid ""
"Your browser does not support HTML5 audio. Please updgrade to a "
@@ -2017,17 +1660,17 @@ msgstr ""
"Ihr Browser unterstützt kein HTML5-Video. Bitte verwenden Sie einen modernen "
"Browser."
-#: View/Helper/BbcodeHelper.php:881
+#: View/Helper/BbcodeHelper.php:926
#, fuzzy
msgid "[embed] tag not enabled."
msgstr "Embed.ly aktivieren"
-#: View/Helper/BbcodeHelper.php:971
+#: View/Helper/BbcodeHelper.php:1012
#, php-format
msgid "Domain %s not allowed for embedding video."
msgstr "Domain %s bei Videos nicht erlaubt."
-#: View/Helper/BbcodeHelper.php:979
+#: View/Helper/BbcodeHelper.php:1020
msgid "Video domain is not allowed."
msgstr ""
@@ -2127,6 +1770,25 @@ msgstr "Hochladen"
msgid "Media"
msgstr "Einbinden"
+#: View/Helper/SettingHelper.php:53
+msgid "edit"
+msgstr "Bearbeiten"
+
+# View/Settings/admin_index.ctp:
+#: View/Helper/SettingHelper.php:64
+msgid "Key"
+msgstr "Schlüssel"
+
+# View/Settings/admin_index.ctp:
+#: View/Helper/SettingHelper.php:65
+msgid "Value"
+msgstr "Wert"
+
+# View/Settings/admin_index.ctp:
+#: View/Helper/SettingHelper.php:66
+msgid "Explanation"
+msgstr "Beschreibung"
+
#: View/Helper/TimeHHelper.php:100 View/Helper/TimeHHelper.php:119
msgid "yesterday"
msgstr "Gestern"
@@ -2215,6 +1877,267 @@ msgstr ""
msgid "token test"
msgstr ""
+#~ msgid "forum_disabled"
+#~ msgstr "Forum deaktivieren"
+
+#~ msgid "forum_disabled_exp"
+#~ msgstr "Forum deaktivieren."
+
+#~ msgid "forum_disabled_text"
+#~ msgstr "Forum deaktivieren Infotext"
+
+#~ msgid "forum_disabled_text_exp"
+#~ msgstr "Infotext, welcher auf der Hinweisseite mit ausgegeben wird."
+
+#~ msgid "forum_name"
+#~ msgstr "Forumtitel"
+
+#~ msgid "forum_name_exp"
+#~ msgstr "Der Name dieses Forums."
+
+#~ msgid "timezone"
+#~ msgstr "Zeitzone"
+
+#~ msgid "timezone_exp"
+#~ msgstr "Zeitzone, indem sich das Forum befindet."
+
+#, fuzzy
+#~ msgid "forum_email"
+#~ msgstr "Email"
+
+#, fuzzy
+#~ msgid "forum_email_exp"
+#~ msgstr ""
+#~ "Emailadresse, welche als Absenderadresse für vom Forum versendet Emails "
+#~ "(bspw. bei der Registrierung) verwendet wird. "
+
+#~ msgid "email_admin_config_exp"
+#~ msgstr ""
+#~ "Erweiterte Email-Einstellungen sind durch das Anlegen einer $saito"
+#~ "code>-Konfiguration in
app/config/email.php
möglich. Als "
+#~ "Vorlage sollte app/config/email.php.default
verwendet "
+#~ "werden. Siehe auch."
+
+#
+#~ msgid "block_user_ui"
+#~ msgstr "Nutzer sperren"
+
+#
+#~ msgid "block_user_ui_exp"
+#~ msgstr "Moderatoren dürfen Benutzer sperren."
+
+#~ msgid "store_ip"
+#~ msgstr "IP speichern"
+
+#~ msgid "store_ip_exp"
+#~ msgstr ""
+#~ "Beim Einträgen ins Forum werden die IP-Adresse des Eintragenden "
+#~ "gespeichert. Moderatoren wird die Adresse im Eintrag angezeigt."
+
+#~ msgid "store_ip_anonymized"
+#~ msgstr "IP anonymisieren"
+
+#~ msgid "store_ip_anonymized_exp"
+#~ msgstr "Anonymisieren der gespeicherten IP-Adresse."
+
+#, fuzzy
+#~ msgid "tos_enabled"
+#~ msgstr "Nutzungsbedingungen aktivieren"
+
+#, fuzzy
+#~ msgid "tos_enabled_exp"
+#~ msgstr ""
+#~ "Setzt einen Verweis und eine zu bestätigende Checkbox für die "
+#~ "Nutzungsbedingungen auf die Registrierungsseite."
+
+#~ msgid "tos_url"
+#~ msgstr "Nutzungsbedingungen-URL"
+
+#, fuzzy
+#~ msgid "tos_url_exp"
+#~ msgstr ""
+#~ "URL zu den Nutzungsbedingen. Falls leer, werden die eingebauten "
+#~ "Standardseiten verwendet."
+
+#
+#~ msgid "edit_period"
+#~ msgstr "Nachbearbeitungszeit"
+
+#
+#~ msgid "edit_period_exp"
+#~ msgstr ""
+#~ "Minuten, die ein neuer Eintrag nach dem Anlegen nachbearbeitet werden "
+#~ "kann."
+
+#
+#~ msgid "edit_delay"
+#~ msgstr "Nachbearbeiten anzeigen"
+
+#
+#~ msgid "edit_delay_exp"
+#~ msgstr ""
+#~ "Minuten, die ein Eintrag nach dem Anlegen ohne Bearbeitungshinweis "
+#~ "nachbearbeitet werden kann."
+
+#~ msgid "topics_per_page"
+#~ msgstr "Threads pro Seite"
+
+#~ msgid "topics_per_page_exp"
+#~ msgstr "Anzahl der Threads, die auf der Startseite angezeigt werden."
+
+#~ msgid "thread_depth_indent"
+#~ msgstr "Einrücktiefe Threads"
+
+#~ msgid "thread_depth_indent_exp"
+#~ msgstr ""
+#~ "Ab dieser Tiefe werden werden Einträge in der Thread-Ansicht nicht weiter "
+#~ "nach rechts eingerückt dargestellt."
+
+#~ msgid "autolink"
+#~ msgstr "Autolink"
+
+#~ msgid "autolink_exp"
+#~ msgstr "Verweise im Text automatisch erkennen und verlinken."
+
+#~ msgid "bbcode_img"
+#~ msgstr "Bilder"
+
+#~ msgid "bbcode_img_exp"
+#~ msgstr "Einbinden von Bildern erlauben."
+
+#~ msgid "quote_symbol"
+#~ msgstr "Zitatzeichen"
+
+#~ msgid "quote_symbol_exp"
+#~ msgstr "Zitatzeichen"
+
+#~ msgid "signature_separator"
+#~ msgstr "Signaturtrenner"
+
+#~ msgid "signature_separator_exp"
+#~ msgstr "Signaturtrenner"
+
+#~ msgid "subject_maxlength_exp"
+#~ msgstr "Maximale Zeichenanzahl in Betreff."
+
+#~ msgid "text_word_maxlength"
+#~ msgstr "Wordlänge"
+
+#~ msgid "text_word_maxlength_exp"
+#~ msgstr "Maximale Zeichenanzahl pro Wort."
+
+#~ msgid "userranks_show"
+#~ msgstr "Ränge anzeigen"
+
+#~ msgid "userranks_show_exp"
+#~ msgstr "Benutzerränge anzeigen."
+
+#~ msgid "userranks_ranks"
+#~ msgstr "Ränge"
+
+#~ msgid "userranks_ranks_exp"
+#~ msgstr "Benutzerrang basierend auf Anzahl der gemachten Beiträge."
+
+#
+#~ msgid "video_domains_allowed"
+#~ msgstr "Einbettbare (Video-) Quellen"
+
+#
+#~ msgid "video_domains_allowed_exp"
+#~ msgstr ""
+#~ "Domainnamen einbindbar für Video und iFrame. Ein Asterisk * bedeuted "
+#~ "freies Einbinden (Vorsicht, dies kann ebenfalls zum Einbinden von "
+#~ "Schadsoftware genutzt werden!)."
+
+#~ msgid "category_chooser_global"
+#~ msgstr "Standard"
+
+#~ msgid "category_chooser_global_exp"
+#~ msgstr "Kategorienfilter auf der Frontseite immer anzeigen."
+
+#~ msgid "category_chooser_user_override"
+#~ msgstr "Benutzereinstellung"
+
+#~ msgid "category_chooser_user_override_exp"
+#~ msgstr ""
+#~ "Erlaubt einem Benutzern den Kategorienfilter in seinen Einstellungen zu "
+#~ "aktivieren, selbst wenn der Filter standardmässig deaktiviert ist."
+
+#~ msgid "shoutbox_enabled"
+#~ msgstr "Aktivieren"
+
+#~ msgid "shoutbox_enabled_exp"
+#~ msgstr "Shoutbox aktivieren"
+
+#~ msgid "shoutbox_max_shouts"
+#~ msgstr "Anzahl"
+
+#~ msgid "shoutbox_max_shouts_exp"
+#~ msgstr "Anzahl der angezeigten Shoutboxeinträge"
+
+#~ msgid "upload_max_img_size"
+#~ msgstr "Uploadgröße maximal"
+
+#~ msgid "upload_max_img_size_exp"
+#~ msgstr "Maximale Größe, die ein Upload besitzen darf in kB."
+
+#~ msgid "upload_max_number_of_uploads"
+#~ msgstr "Anzahl an Uploads pro Benutzer"
+
+#~ msgid "upload_max_number_of_uploads_exp"
+#~ msgstr ""
+#~ "Maximale Anzahl von Dateien, die ein einzelner Benutzer gleichzeitig auf "
+#~ "dem Server hochgeladen haben kann."
+
+#~ msgid "flattr_enabled"
+#~ msgstr "Flattr aktivieren"
+
+#~ msgid "flattr_enabled_exp"
+#~ msgstr "Ermöglicht es Benutzern flattr zu verwenden."
+
+#~ msgid "flattr_language"
+#~ msgstr "Flattr-Sprache"
+
+#~ msgid "flattr_language_exp"
+#~ msgstr ""
+#~ "Sprache, die flattr den hereinzeigenden Verweisen zuordnet. Siehe Doku "
+#~ "auf flattr.com für Kürzel."
+
+#~ msgid "flattr_category"
+#~ msgstr "Flattr-Kategorie"
+
+#~ msgid "flattr_category_exp"
+#~ msgstr ""
+#~ "Kategorie, die Flattr den hereinzeigenden Verweisen zuordnet. Siehe "
+#~ "flattr.com für verfügbare Kategorien."
+
+#~ msgid "embedly_enabled"
+#~ msgstr "Embed.ly aktivieren"
+
+#~ msgid "embedly_enabled_exp"
+#~ msgstr ""
+#~ "Aktiviert den [embed]-BBcode, welcher seinen Inhalt durch Embed.ly "
+#~ "darstellt."
+
+#~ msgid "embedly_key"
+#~ msgstr "Embed.ly Key"
+
+#
+#~ msgid "embedly_key_exp"
+#~ msgstr "API-Key, den man nach der Registrierung bei Embed.ly erhält."
+
+#~ msgid "stopwatch_get"
+#~ msgstr "Stopuhr"
+
+#~ msgid "stopwatch_get_exp"
+#~ msgstr ""
+#~ "Ausgabe der Stopuhrzeiten durch Anfügen von /stopwatch:true/
"
+#~ "an URL in Production-Modus für eingeloggte Nutzer."
+
+#~ msgid "logged_in_users_only"
+#~ msgstr "Nur für eingeloggte Benutzer."
+
#~ msgid "user_edit_success"
#~ msgstr "Die Daten wurden gespeichert."
diff --git a/app/Locale/deu/LC_MESSAGES/nondynamic.po b/app/Locale/deu/LC_MESSAGES/nondynamic.po
index f97ac07cb..eb3049a5f 100644
--- a/app/Locale/deu/LC_MESSAGES/nondynamic.po
+++ b/app/Locale/deu/LC_MESSAGES/nondynamic.po
@@ -91,3 +91,287 @@ msgstr "Hinweis"
#
msgid "success"
msgstr "Erfolg"
+
+#*******************************************************************************
+#* App Settings Start
+#******************************************************************************/
+
+#
+msgid "forum_disabled"
+msgstr "Forum deaktivieren"
+
+#
+msgid "forum_disabled_exp"
+msgstr "Forum deaktivieren."
+
+#
+msgid "forum_disabled_text"
+msgstr "Forum deaktivieren Infotext"
+
+#
+msgid "forum_disabled_text_exp"
+msgstr "Infotext, welcher auf der Hinweisseite mit ausgegeben wird."
+
+#
+msgid "forum_name"
+msgstr "Forumtitel"
+
+#
+msgid "forum_name_exp"
+msgstr "Der Name dieses Forums."
+
+#
+msgid "timezone"
+msgstr "Zeitzone"
+
+#
+msgid "timezone_exp"
+msgstr "Zeitzone, indem sich das Forum befindet."
+
+#
+msgid "forum_email"
+msgstr "Email"
+
+#
+msgid "forum_email_exp"
+msgstr "Emailadresse, welche als Absenderadresse für vom Forum versendet Emails (bspw. bei der Registrierung) verwendet wird. "
+
+#
+msgid "block_user_ui"
+msgstr "Nutzer sperren"
+
+#
+msgid "block_user_ui_exp"
+msgstr "Moderatoren dürfen Benutzer sperren."
+
+#
+msgid "store_ip"
+msgstr "IP speichern"
+
+#
+msgid "store_ip_exp"
+msgstr "Beim Einträgen ins Forum werden die IP-Adresse des Eintragenden gespeichert. Moderatoren wird die Adresse im Eintrag angezeigt."
+
+#
+msgid "store_ip_anonymized"
+msgstr "IP anonymisieren"
+
+#
+msgid "store_ip_anonymized_exp"
+msgstr "Anonymisieren der gespeicherten IP-Adresse."
+
+#
+msgid "tos_enabled"
+msgstr "Nutzungsbedingungen aktivieren"
+
+#
+msgid "tos_enabled_exp"
+msgstr "Setzt einen Verweis und eine zu bestätigende Checkbox für die Nutzungsbedingungen auf die Registrierungsseite."
+
+#
+msgid "tos_url"
+msgstr "Nutzungsbedingungen-URL"
+
+#
+msgid "tos_url_exp"
+msgstr "URL zu den Nutzungsbedingen. Falls leer, werden die eingebauten Standardseiten verwendet."
+
+#
+msgid "edit_period"
+msgstr "Nachbearbeitungszeit"
+
+#
+msgid "edit_period_exp"
+msgstr "Minuten, die ein neuer Eintrag nach dem Anlegen nachbearbeitet werden kann."
+
+#
+msgid "edit_delay"
+msgstr "Nachbearbeiten anzeigen"
+
+#
+msgid "edit_delay_exp"
+msgstr "Minuten, die ein Eintrag nach dem Anlegen ohne Bearbeitungshinweis nachbearbeitet werden kann."
+
+#
+msgid "topics_per_page"
+msgstr "Threads pro Seite"
+
+#
+msgid "topics_per_page_exp"
+msgstr "Anzahl der Threads, die auf der Startseite angezeigt werden."
+
+#
+msgid "thread_depth_indent"
+msgstr "Einrücktiefe Threads"
+
+#
+msgid "thread_depth_indent_exp"
+msgstr "Ab dieser Tiefe werden werden Einträge in der Thread-Ansicht nicht weiter nach rechts eingerückt dargestellt."
+
+#
+msgid "autolink"
+msgstr "Autolink"
+
+#
+msgid "autolink_exp"
+msgstr "Verweise im Text automatisch erkennen und verlinken."
+
+#
+msgid "bbcode_img"
+msgstr "Bilder"
+
+#
+msgid "bbcode_img_exp"
+msgstr "Einbinden von Bildern erlauben."
+
+#
+msgid "quote_symbol"
+msgstr "Zitatzeichen"
+
+#
+msgid "quote_symbol_exp"
+msgstr "Zitatzeichen"
+
+#
+msgid "signature_separator"
+msgstr "Signaturtrenner"
+
+#
+msgid "signature_separator_exp"
+msgstr "Signaturtrenner"
+
+#
+msgid "subject_maxlength"
+msgstr "Betrefflänge"
+
+#
+msgid "subject_maxlength_exp"
+msgstr "Maximale Zeichenanzahl in Betreff."
+
+#
+msgid "text_word_maxlength"
+msgstr "Wordlänge"
+
+#
+msgid "text_word_maxlength_exp"
+msgstr "Maximale Zeichenanzahl pro Wort."
+
+#
+msgid "userranks_show"
+msgstr "Ränge anzeigen"
+
+#
+msgid "userranks_show_exp"
+msgstr "Benutzerränge anzeigen."
+
+#
+msgid "userranks_ranks"
+msgstr "Ränge"
+
+#
+msgid "userranks_ranks_exp"
+msgstr "Benutzerrang basierend auf Anzahl der gemachten Beiträge."
+
+#
+msgid "video_domains_allowed"
+msgstr "Einbettbare (Video-) Quellen"
+
+#
+msgid "video_domains_allowed_exp"
+msgstr "Domainnamen einbindbar für Video und iFrame. Ein Asterisk * bedeuted freies Einbinden (Vorsicht, dies kann ebenfalls zum Einbinden von Schadsoftware genutzt werden!)."
+
+#
+msgid "category_chooser_global"
+msgstr "Standard"
+
+#
+msgid "category_chooser_global_exp"
+msgstr "Kategorienfilter auf der Frontseite immer anzeigen."
+
+#
+msgid "category_chooser_user_override"
+msgstr "Benutzereinstellung"
+
+#
+msgid "category_chooser_user_override_exp"
+msgstr "Erlaubt einem Benutzern den Kategorienfilter in seinen Einstellungen zu aktivieren, selbst wenn der Filter standardmässig deaktiviert ist."
+
+#
+msgid "shoutbox_enabled"
+msgstr "Aktivieren"
+
+#
+msgid "shoutbox_enabled_exp"
+msgstr "Shoutbox aktivieren"
+
+#
+msgid "shoutbox_max_shouts"
+msgstr "Anzahl"
+
+#
+msgid "shoutbox_max_shouts_exp"
+msgstr "Anzahl der angezeigten Shoutboxeinträge"
+
+#
+msgid "upload_max_img_size"
+msgstr "Uploadgröße maximal"
+
+#
+msgid "upload_max_img_size_exp"
+msgstr "Maximale Größe, die ein Upload besitzen darf in kB."
+
+#
+msgid "upload_max_number_of_uploads"
+msgstr "Anzahl an Uploads pro Benutzer"
+
+#
+msgid "upload_max_number_of_uploads_exp"
+msgstr "Maximale Anzahl von Dateien, die ein einzelner Benutzer gleichzeitig auf dem Server hochgeladen haben kann."
+
+#
+msgid "flattr_enabled"
+msgstr "Flattr aktivieren"
+
+#
+msgid "flattr_enabled_exp"
+msgstr "Ermöglicht es Benutzern flattr zu verwenden."
+
+#
+msgid "flattr_language"
+msgstr "Flattr-Sprache"
+
+#
+msgid "flattr_language_exp"
+msgstr "Sprache, die flattr den hereinzeigenden Verweisen zuordnet. Siehe Doku auf flattr.com für Kürzel."
+
+#
+msgid "flattr_category"
+msgstr "Flattr-Kategorie"
+
+#
+msgid "flattr_category_exp"
+msgstr "Kategorie, die Flattr den hereinzeigenden Verweisen zuordnet. Siehe flattr.com für verfügbare Kategorien."
+
+#
+msgid "embedly_enabled"
+msgstr "Embed.ly aktivieren"
+
+#
+msgid "embedly_enabled_exp"
+msgstr "Aktiviert den [embed]-BBcode, welcher seinen Inhalt durch Embed.ly darstellt."
+
+#
+msgid "embedly_key"
+msgstr "Embed.ly Key"
+
+#
+msgid "embedly_key_exp"
+msgstr "API-Key, den man nach der Registrierung bei Embed.ly erhält."
+
+#
+msgid "stopwatch_get"
+msgstr "Stopuhr"
+
+#
+msgid "stopwatch_get_exp"
+msgstr "Ausgabe der Stopuhrzeiten durch Anfügen von /stopwatch:true/
an URL in Production-Modus für eingeloggte Nutzer."
diff --git a/app/Locale/eng/LC_MESSAGES/default.po b/app/Locale/eng/LC_MESSAGES/default.po
index 577ace188..50fdd1315 100644
--- a/app/Locale/eng/LC_MESSAGES/default.po
+++ b/app/Locale/eng/LC_MESSAGES/default.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Macnemo_2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-03-05 13:35+0100\n"
-"PO-Revision-Date: 2013-03-08 12:16+0100\n"
+"POT-Creation-Date: 2013-08-12 09:10+0100\n"
+"PO-Revision-Date: 2013-08-12 09:10+0100\n"
"Last-Translator: Schlaefer
Click on a name to quickly show this "
"category without changing your preferences."
-#: View/Elements/entry/category-chooser.ctp:36 View/Entries/search.ctp:82
-#: Controller/EntriesController.php:881
+#: View/Elements/entry/category-chooser.ctp:42 View/Entries/search.ctp:82
+#: Controller/EntriesController.php:927
msgid "All Categories"
msgstr ""
-#: View/Elements/entry/category-chooser.ctp:83
+#: View/Elements/entry/category-chooser.ctp:89
msgid "Apply"
msgstr ""
-#: View/Elements/entry/thread_cached_init.ctp:8 View/Entries/view.ctp:31
+#: View/Elements/entry/thread_cached_init.ctp:8
msgid "btn-showThreadInMixView"
msgstr "mix"
@@ -414,36 +415,36 @@ msgstr ""
msgid "views_headline"
msgstr "views"
-#: View/Elements/entry/view_posting.ctp:59
+#: View/Elements/entry/view_posting.ctp:57
#: View/Elements/layout/header_login.ctp:38
-#: View/Elements/layout/header_login.ctp:43 View/Entries/index.ctp:19
-#: View/Entries/search.ctp:22 View/Users/view.ctp:155
+#: View/Elements/layout/header_login.ctp:43 View/Entries/index.ctp:21
+#: View/Entries/search.ctp:22 View/Users/view.ctp:163
msgid "Help"
msgstr ""
-#: View/Elements/entry/view_posting.ctp:60
+#: View/Elements/entry/view_posting.ctp:58
msgid "answering_forbidden_locked_shp"
msgstr "Answering forbidden by moderator."
-#: View/Elements/entry/view_posting.ctp:65
+#: View/Elements/entry/view_posting.ctp:63
msgid "forum_answer_linkname"
msgstr "Answer"
-#: View/Elements/entry/view_posting.ctp:79
-#: View/Elements/entry/view_posting.ctp:107
-#: Controller/EntriesController.php:481
+#: View/Elements/entry/view_posting.ctp:76
+#: View/Elements/entry/view_posting.ctp:104
+#: Controller/EntriesController.php:457
msgid "edit_linkname"
msgstr "Edit"
-#: View/Elements/entry/view_posting.ctp:147
+#: View/Elements/entry/view_posting.ctp:144
msgid "merge_tree_link"
msgstr "Merge"
-#: View/Elements/entry/view_posting.ctp:158
+#: View/Elements/entry/view_posting.ctp:155
msgid "delete_tree_link"
msgstr "Delete"
-#: View/Elements/entry/view_posting.ctp:161
+#: View/Elements/entry/view_posting.ctp:158
msgid "delete_tree_link_confirm_message"
msgstr ""
"Deleting a (sub)thread can't be undone! Are you sure you want to delete the "
@@ -456,7 +457,7 @@ msgstr ""
#: View/Elements/layout/disclaimer.ctp:7
#: View/Themed/Macnemo/Elements/layout/disclaimer.ctp:10
-#: View/Users/view.ctp:46
+#: View/Users/view.ctp:45
msgid "Contact"
msgstr ""
@@ -508,7 +509,7 @@ msgid "Forum Settings"
msgstr ""
#: View/Elements/layout/header_login.ctp:22 View/Users/edit.ctp:133
-#: View/Users/view.ctp:88 View/Users/view.ctp:124
+#: View/Users/view.ctp:93 View/Users/view.ctp:132
msgid "user_profile"
msgstr "User Profile"
@@ -520,34 +521,34 @@ msgstr "Logout"
msgid "No help for this page available."
msgstr ""
-#: View/Elements/layout/header_search.ctp:16 View/Entries/search.ctp:26
+#: View/Elements/layout/header_search.ctp:28 View/Entries/search.ctp:26
#: View/Entries/search.ctp:105
msgid "search_submit"
msgstr "Search"
-#: View/Elements/layout/slidetab_recententries.ctp:11
+#: View/Elements/layout/slidetab_recententries.ctp:9
msgid "Recent entries"
msgstr ""
-#: View/Elements/layout/slidetab_recentposts.ctp:13 View/Users/view.ctp:219
+#: View/Elements/layout/slidetab_recentposts.ctp:13 View/Users/view.ctp:229
msgid "user_recentposts"
msgstr "recent posts"
-#: View/Elements/layout/slidetab_userlist.ctp:18
+#: View/Elements/layout/slidetab_userlist.ctp:17
msgid "user_area_linkname"
msgstr "User"
-#: View/Elements/layout/slidetab_userlist.ctp:16
+#: View/Elements/layout/slidetab_userlist.ctp:15
#, php-format
msgid "%s online (%s)"
msgstr ""
-#: View/Elements/layout/slidetab_userlist.ctp:32
+#: View/Elements/layout/slidetab_userlist.ctp:31
#: View/Helper/UserHHelper.php:116
msgid "ud_admin"
msgstr "Administrator"
-#: View/Elements/layout/slidetab_userlist.ctp:33
+#: View/Elements/layout/slidetab_userlist.ctp:32
#: View/Helper/UserHHelper.php:114
msgid "ud_mod"
msgstr "Moderator"
@@ -611,43 +612,47 @@ msgstr ""
"To activate your account please click the following link: %s within the next "
"24 hours."
-#: View/Entries/add.ctp:31 View/Entries/add.ctp:220
+#: View/Entries/add.ctp:34 View/Entries/add.ctp:190
msgid "preview"
msgstr "Preview"
-#: View/Entries/add.ctp:79 Controller/UsersController.php:444
+#: View/Entries/add.ctp:88 Controller/UsersController.php:477
msgid "error_subject_empty"
msgstr "Subject must not be empty."
-#: View/Entries/add.ctp:116
+#: View/Entries/add.ctp:89
+msgid "error_subject_max_length"
+msgstr "Subject is to long."
+
+#: View/Entries/add.ctp:133
msgid "Cite"
msgstr ""
-#: View/Entries/add.ctp:138
+#: View/Entries/add.ctp:158 View/Entries/add.ctp:178 View/Entries/add.ctp:292
+msgid "submit_button"
+msgstr "Submit"
+
+#: View/Entries/add.ctp:205
msgid "Notify on reply"
msgstr ""
-#: View/Entries/add.ctp:146
+#: View/Entries/add.ctp:219
msgid "Notify on thread replies"
msgstr ""
-#: View/Entries/add.ctp:153 View/Helper/EntryHHelper.php:196
+#: View/Entries/add.ctp:228 View/Helper/EntryHHelper.php:159
msgid "entry_nsfw_title"
msgstr "NSFW"
-#: View/Entries/add.ctp:161
+#: View/Entries/add.ctp:241
msgid "entry_flattr_this_posting"
msgstr "flattr-Button"
-#: View/Entries/add.ctp:200 View/Entries/add.ctp:209 View/Entries/add.ctp:239
-msgid "submit_button"
-msgstr "Submit"
-
-#: View/Entries/index.ctp:5
+#: View/Entries/index.ctp:6
msgid "new_entry_linkname"
msgstr "New Entry"
-#: View/Entries/index.ctp:20
+#: View/Entries/index.ctp:22
msgid "btn_manualy_mark_as_read_shp"
msgstr "Marks all new entries as read."
@@ -701,33 +706,33 @@ msgstr "Since"
msgid "search_simple"
msgstr "Simple Search"
-#: View/Entries/search.ctp:163
+#: View/Entries/search.ctp:167
msgid "search_nothing_found"
msgstr "Nothing found."
-#: View/Layouts/admin.ctp:41
+#: View/Layouts/admin.ctp:36
msgid "Overview"
msgstr ""
-#: View/Layouts/admin.ctp:46 View/Settings/admin_edit.ctp:2
-#: View/Settings/admin_index.ctp:2 View/Settings/admin_index.ctp:11
-#: View/Users/edit.ctp:164
+#: View/Layouts/admin.ctp:41 View/Settings/admin_edit.ctp:2
+#: View/Settings/admin_index.ctp:2 View/Settings/admin_index.ctp:113
+#: View/Users/edit.ctp:163
msgid "Settings"
msgstr ""
-#: View/Layouts/admin.ctp:49 View/Users/admin_add.ctp:2
+#: View/Layouts/admin.ctp:44 View/Users/admin_add.ctp:2
#: View/Users/admin_index.ctp:1 View/Users/admin_index.ctp:3
msgid "Users"
msgstr ""
-#: View/Layouts/admin.ctp:55 View/SmileyCodes/admin_edit.ctp:1
+#: View/Layouts/admin.ctp:50 View/SmileyCodes/admin_edit.ctp:1
#: View/SmileyCodes/admin_index.ctp:1 View/Smilies/admin_add.ctp:2
#: View/Smilies/admin_edit.ctp:1 View/Smilies/admin_index.ctp:1
#: View/Smilies/admin_index.ctp:3
msgid "Smilies"
msgstr ""
-#: View/Layouts/admin.ctp:65
+#: View/Layouts/admin.ctp:60
msgid "Forum"
msgstr ""
@@ -739,389 +744,54 @@ msgstr ""
msgid "RSS Feed"
msgstr ""
-#: View/Pages/rss_feeds.ctp:4 Controller/EntriesController.php:111
+#: View/Pages/rss_feeds.ctp:4 Controller/EntriesController.php:110
msgid "Last entries"
msgstr ""
-#: View/Pages/rss_feeds.ctp:7 Controller/EntriesController.php:107
+#: View/Pages/rss_feeds.ctp:7 Controller/EntriesController.php:106
msgid "Last started threads"
msgstr ""
-#: View/Settings/admin_edit.ctp:27 View/Settings/admin_timezone.ctp:24
-msgid "_exp"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:4
-msgid "Key"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:5
-msgid "Value"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:6
-msgid "Explanation"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:12
+#: View/Settings/admin_index.ctp:7
msgid "Deactivate Forum"
msgstr ""
-#: View/Settings/admin_index.ctp:17
-msgid "forum_disabled"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:23
-msgid "forum_disabled_exp"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:27 View/Settings/admin_index.ctp:46
-#: View/Settings/admin_index.ctp:70 View/Settings/admin_index.ctp:89
-#: View/Settings/admin_index.ctp:113 View/Settings/admin_index.ctp:140
-#: View/Settings/admin_index.ctp:159 View/Settings/admin_index.ctp:178
-#: View/Settings/admin_index.ctp:202 View/Settings/admin_index.ctp:221
-#: View/Settings/admin_index.ctp:245 View/Settings/admin_index.ctp:269
-#: View/Settings/admin_index.ctp:288 View/Settings/admin_index.ctp:307
-#: View/Settings/admin_index.ctp:326 View/Settings/admin_index.ctp:345
-#: View/Settings/admin_index.ctp:364 View/Settings/admin_index.ctp:383
-#: View/Settings/admin_index.ctp:402 View/Settings/admin_index.ctp:421
-#: View/Settings/admin_index.ctp:440 View/Settings/admin_index.ctp:459
-#: View/Settings/admin_index.ctp:478 View/Settings/admin_index.ctp:502
-#: View/Settings/admin_index.ctp:521 View/Settings/admin_index.ctp:545
-#: View/Settings/admin_index.ctp:564 View/Settings/admin_index.ctp:588
-#: View/Settings/admin_index.ctp:607 View/Settings/admin_index.ctp:630
-#: View/Settings/admin_index.ctp:649 View/Settings/admin_index.ctp:668
-#: View/Settings/admin_index.ctp:687 View/Settings/admin_index.ctp:697
-#: View/Settings/admin_index.ctp:716
-msgid "edit"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:36
-msgid "forum_disabled_text"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:42
-msgid "forum_disabled_text_exp"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:55
+#: View/Settings/admin_index.ctp:13
msgid "Base Preferences"
msgstr ""
-#: View/Settings/admin_index.ctp:60
-msgid "forum_name"
-msgstr "Forum Title"
-
-#: View/Settings/admin_index.ctp:66
-msgid "forum_name_exp"
-msgstr "The name of this forum."
-
-#: View/Settings/admin_index.ctp:79
-msgid "timezone"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:85
-msgid "timezone_exp"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:98
+#: View/Settings/admin_index.ctp:19
msgid "Email"
msgstr ""
-#: View/Settings/admin_index.ctp:103
-msgid "forum_email"
-msgstr "Email"
-
-#: View/Settings/admin_index.ctp:109
-msgid "forum_email_exp"
-msgstr ""
-"Email address used as sender address for emails send by the forum (e.g. when "
-"registering)."
-
-#: View/Settings/admin_index.ctp:122
-msgid "email_admin_config_exp"
-msgstr ""
-"Additional settings are possible by providing a $saito
config "
-"in app/config/email.php
. You should use app/config/email."
-"php.default
as template. See also."
-
-#: View/Settings/admin_index.ctp:125
+#: View/Settings/admin_index.ctp:25
msgid "Moderation"
msgstr "Moderation"
-#: View/Settings/admin_index.ctp:130
-msgid "block_user_ui"
-msgstr "Lock Users"
-
-#
-#: View/Settings/admin_index.ctp:136
-msgid "block_user_ui_exp"
-msgstr "Moderators are allowed to block users."
-
-#: View/Settings/admin_index.ctp:149
-msgid "store_ip"
-msgstr "Store IP"
-
-#: View/Settings/admin_index.ctp:155
-msgid "store_ip_exp"
-msgstr "Stores the IP-address for new entries. The IP is shown do moderators."
-
-#: View/Settings/admin_index.ctp:168
-msgid "store_ip_anonymized"
-msgstr "IP Anonymized"
-
-#: View/Settings/admin_index.ctp:174
-msgid "store_ip_anonymized_exp"
-msgstr "Strore IP anonymized."
-
-#: View/Settings/admin_index.ctp:187
+#: View/Settings/admin_index.ctp:31
msgid "Registration"
msgstr "Registration"
-#: View/Settings/admin_index.ctp:192
-msgid "tos_enabled"
-msgstr "ToS Enabled"
-
-#: View/Settings/admin_index.ctp:198
-msgid "tos_enabled_exp"
-msgstr ""
-"Puts a Term of Service checkbox and link on the user registration page."
-
-#: View/Settings/admin_index.ctp:211
-msgid "tos_url"
-msgstr "ToS Url"
-
-#: View/Settings/admin_index.ctp:217
-msgid "tos_url_exp"
-msgstr ""
-"Sets the url for the ToS link. If empty, use the build-in default pages."
-
-#
-#: View/Settings/admin_index.ctp:235
-msgid "edit_period"
-msgstr "Edit Period"
-
-#
-#: View/Settings/admin_index.ctp:241
-msgid "edit_period_exp"
-msgstr "Minutes a user can edit a new entry."
-
-#
-#: View/Settings/admin_index.ctp:259
-msgid "edit_delay"
-msgstr "Show Edit"
-
-#
-#: View/Settings/admin_index.ctp:265
-msgid "edit_delay_exp"
-msgstr "Minutes a new entry can be edited without being marked as edited."
-
-#: View/Settings/admin_index.ctp:278
-msgid "topics_per_page"
-msgstr "Topics per Page"
-
-#: View/Settings/admin_index.ctp:284
-msgid "topics_per_page_exp"
-msgstr "Number of topics shown on the frontpage."
-
-#: View/Settings/admin_index.ctp:297
-msgid "thread_depth_indent"
-msgstr "Thread Indent Depth"
-
-#: View/Settings/admin_index.ctp:303
-msgid "thread_depth_indent_exp"
-msgstr ""
-"Max. indent to the the right for threads in thread-view. After that threads "
-"appear on the same level."
-
-#: View/Settings/admin_index.ctp:316
-msgid "autolink"
-msgstr "Autolink"
-
-#: View/Settings/admin_index.ctp:322
-msgid "autolink_exp"
-msgstr "Detect and automatically generate links."
-
-#: View/Settings/admin_index.ctp:335
-msgid "bbcode_img"
-msgstr "Images"
-
-#: View/Settings/admin_index.ctp:341
-msgid "bbcode_img_exp"
-msgstr "Allow embedding of images."
-
-#: View/Settings/admin_index.ctp:354
-msgid "quote_symbol"
-msgstr "Quote Symbol"
-
-#: View/Settings/admin_index.ctp:360
-msgid "quote_symbol_exp"
-msgstr "Quote symbol."
-
-#: View/Settings/admin_index.ctp:373
-msgid "signature_separator"
-msgstr "Signature Separator"
-
-#: View/Settings/admin_index.ctp:379
-msgid "signature_separator_exp"
-msgstr "Signature separator."
-
-#: View/Settings/admin_index.ctp:392
-msgid "subject_maxlength"
-msgstr "Subject Length"
-
-#: View/Settings/admin_index.ctp:398
-msgid "subject_maxlength_exp"
-msgstr "Number of chars allowed in subject."
-
-#: View/Settings/admin_index.ctp:411
-msgid "text_word_maxlength"
-msgstr "Word Length"
-
-#: View/Settings/admin_index.ctp:417
-msgid "text_word_maxlength_exp"
-msgstr "Max numbers of chars allowed in one word."
-
-#: View/Settings/admin_index.ctp:430
-msgid "userranks_show"
-msgstr "Enable Ranks"
-
-#: View/Settings/admin_index.ctp:436
-msgid "userranks_show_exp"
-msgstr "Show user ranks."
-
-#: View/Settings/admin_index.ctp:449
-msgid "userranks_ranks"
-msgstr "Ranks"
-
-#: View/Settings/admin_index.ctp:455
-msgid "userranks_ranks_exp"
-msgstr "User ranks based on number of postings."
-
-#
-#: View/Settings/admin_index.ctp:468
-msgid "video_domains_allowed"
-msgstr "Embeddable Video Sources"
-
-#
-#: View/Settings/admin_index.ctp:474
-msgid "video_domains_allowed_exp"
-msgstr ""
-"Domain names embeddable for video/iframe. Asterisk * means all sources "
-"allowed (This could pose a security risk if malicious code is embedded!)."
-
-#: View/Settings/admin_index.ctp:487
+#: View/Settings/admin_index.ctp:61
msgid "Category Chooser"
msgstr ""
-#: View/Settings/admin_index.ctp:492
-msgid "category_chooser_global"
-msgstr "Default"
-
-#: View/Settings/admin_index.ctp:498
-msgid "category_chooser_global_exp"
-msgstr "Always show the category chooser on the front-page."
-
-#: View/Settings/admin_index.ctp:511
-msgid "category_chooser_user_override"
-msgstr "User Override"
-
-#: View/Settings/admin_index.ctp:517
-msgid "category_chooser_user_override_exp"
-msgstr ""
-"If the category chooser is off be default this allows users to enable it in "
-"their user preferences."
-
-#: View/Settings/admin_index.ctp:535
-msgid "shoutbox_enabled"
-msgstr "Enable"
-
-#: View/Settings/admin_index.ctp:541
-msgid "shoutbox_enabled_exp"
-msgstr "Shoutbox is enabled."
-
-#: View/Settings/admin_index.ctp:554
-msgid "shoutbox_max_shouts"
-msgstr "Number"
-
-#: View/Settings/admin_index.ctp:560
-msgid "shoutbox_max_shouts_exp"
-msgstr "Number of entries shown in the Shoutbox."
-
-#: View/Settings/admin_index.ctp:578
-msgid "upload_max_img_size"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:584
-msgid "upload_max_img_size_exp"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:597
-msgid "upload_max_number_of_uploads"
-msgstr ""
-
-#: View/Settings/admin_index.ctp:603
-msgid "upload_max_number_of_uploads_exp"
+#: View/Settings/admin_index.ctp:67
+msgid "Shoutbox"
msgstr ""
-#: View/Settings/admin_index.ctp:620
-msgid "flattr_enabled"
-msgstr "Flattr Enabled"
-
-#: View/Settings/admin_index.ctp:626
-msgid "flattr_enabled_exp"
-msgstr ""
-"Allows users to add a flattr button to their profil and their postings."
-
-#: View/Settings/admin_index.ctp:639
-msgid "flattr_language"
-msgstr "Flattr Language"
-
-#: View/Settings/admin_index.ctp:645
-msgid "flattr_language_exp"
-msgstr ""
-"Flattr expects an language key for the content send. See flattr "
-"documentation for available language keys."
-
-#: View/Settings/admin_index.ctp:658
-msgid "flattr_category"
-msgstr "Flattr Category"
-
-#: View/Settings/admin_index.ctp:664
-msgid "flattr_category_exp"
-msgstr "See flattr documentation for available categories."
-
-#: View/Settings/admin_index.ctp:683
-msgid "embedly_enabled"
-msgstr "Enable Embedly"
-
-#: View/Settings/admin_index.ctp:685
-msgid "embedly_enabled_exp"
-msgstr "Enables the [embed] BBcode which parses content through Embed.ly"
-
-#: View/Settings/admin_index.ctp:693
-msgid "embedly_key"
-msgstr "Embedly Key"
-
-#: View/Settings/admin_index.ctp:695
-msgid "embedly_key_exp"
-msgstr ""
-"You have to register at Embed.ly to receive an API-key, which you enter here."
+#: View/Settings/admin_index.ctp:73
+#, fuzzy
+msgid "Uploads"
+msgstr "Upload"
-#: View/Settings/admin_index.ctp:706
+#: View/Settings/admin_index.ctp:93
msgid "Debug"
msgstr ""
-#: View/Settings/admin_index.ctp:712
-msgid "stopwatch_get"
-msgstr "Stopwatch"
-
-#: View/Settings/admin_index.ctp:714
-#, fuzzy
-msgid "stopwatch_get_exp"
+#: View/Settings/admin_timezone.ctp:24
+msgid "_exp"
msgstr ""
-"Outputs stopwatch times by appending /stopwatch:true/
to url."
#: View/SmileyCodes/admin_add.ctp:4
msgid "Add Smiley Code"
@@ -1171,7 +841,7 @@ msgid ""
"geheuert, :loggedin an Deck, :anon Blinde Passagiere"
msgstr ""
-#: View/Uploads/add.ctp:10 webroot/js/templates/uploadNew.html:23
+#: View/Uploads/add.ctp:10 webroot/js/templates/uploadNew.html:22
msgid "upload_btn"
msgstr "Upload"
@@ -1202,7 +872,7 @@ msgid "New User"
msgstr ""
#: View/Users/admin_index.ctp:10 View/Users/edit.ctp:32 View/Users/edit.ctp:80
-#: View/Users/index.ctp:14 View/Users/view.ctp:26
+#: View/Users/index.ctp:14 View/Users/view.ctp:25
msgid "username_marking"
msgstr "Name"
@@ -1257,15 +927,15 @@ msgstr "Contact %s"
msgid "user_contact_sender-contact"
msgstr "Your Contact Address"
-#: View/Users/contact.ctp:18
+#: View/Users/contact.ctp:21
msgid "user_contact_subject"
msgstr "Subject"
-#: View/Users/contact.ctp:23
+#: View/Users/contact.ctp:29
msgid "user_contact_message"
msgstr "Message"
-#: View/Users/contact.ctp:37
+#: View/Users/contact.ctp:43
msgid "user_contact_send_carbon_copy"
msgstr "Send copy to yourself."
@@ -1278,7 +948,7 @@ msgstr ""
msgid "Profil"
msgstr ""
-#: View/Users/edit.ctp:37 View/Users/edit.ctp:85 View/Users/view.ctp:53
+#: View/Users/edit.ctp:37 View/Users/edit.ctp:85 View/Users/view.ctp:52
msgid "userlist_email"
msgstr "Email"
@@ -1303,7 +973,7 @@ msgstr ""
msgid "user_show_email_exp"
msgstr ""
-#: View/Users/edit.ctp:114 View/Users/view.ctp:39
+#: View/Users/edit.ctp:114 View/Users/view.ctp:38
msgid "user_real_name"
msgstr "Real Name"
@@ -1311,7 +981,7 @@ msgstr "Real Name"
msgid "user_real_name_exp"
msgstr ""
-#: View/Users/edit.ctp:121 View/Users/view.ctp:60
+#: View/Users/edit.ctp:121 View/Users/view.ctp:59
msgid "user_hp"
msgstr "Homepage"
@@ -1319,7 +989,7 @@ msgstr "Homepage"
msgid "user_hp_exp"
msgstr ""
-#: View/Users/edit.ctp:128 View/Users/view.ctp:67
+#: View/Users/edit.ctp:128 View/Users/view.ctp:66
msgid "user_place"
msgstr "Place"
@@ -1331,7 +1001,7 @@ msgstr ""
msgid "user_profile_exp"
msgstr ""
-#: View/Users/edit.ctp:144 View/Users/view.ctp:96
+#: View/Users/edit.ctp:144 View/Users/view.ctp:101
msgid "user_signature"
msgstr "Signature"
@@ -1339,162 +1009,162 @@ msgstr "Signature"
msgid "user_signature_exp"
msgstr ""
-#: View/Users/edit.ctp:174
+#: View/Users/edit.ctp:173
msgid "user_sort_last_answer"
msgstr ""
-#: View/Users/edit.ctp:180
+#: View/Users/edit.ctp:179
msgid "user_sort_last_answer_time"
msgstr ""
-#: View/Users/edit.ctp:181
+#: View/Users/edit.ctp:180
msgid "user_sort_last_answer_last_answer"
msgstr ""
-#: View/Users/edit.ctp:189
+#: View/Users/edit.ctp:188
msgid "user_sort_last_answer_exp"
msgstr ""
-#: View/Users/edit.ctp:194
+#: View/Users/edit.ctp:193
msgid "user_automaticaly_mark_as_read"
msgstr ""
-#: View/Users/edit.ctp:195
+#: View/Users/edit.ctp:194
msgid "user_automaticaly_mark_as_read_exp"
msgstr ""
-#: View/Users/edit.ctp:199
+#: View/Users/edit.ctp:198
msgid "user_signatures_hide"
msgstr ""
-#: View/Users/edit.ctp:201
+#: View/Users/edit.ctp:200
msgid "user_signatures_hide_exp"
msgstr ""
-#: View/Users/edit.ctp:203
+#: View/Users/edit.ctp:202
msgid "user_signatures_images_hide_exp"
msgstr ""
-#: View/Users/edit.ctp:208
+#: View/Users/edit.ctp:207
msgid "user_forum_refresh_time"
msgstr ""
-#: View/Users/edit.ctp:221
+#: View/Users/edit.ctp:220
msgid "user_forum_refresh_time_exp"
msgstr ""
-#: View/Users/edit.ctp:227
+#: View/Users/edit.ctp:226
msgid "user_colors"
msgstr ""
-#: View/Users/edit.ctp:229
+#: View/Users/edit.ctp:228
msgid "user_color_new_postings_exp"
msgstr ""
-#: View/Users/edit.ctp:231
+#: View/Users/edit.ctp:230
msgid "user_color_old_postinings_exp"
msgstr ""
-#: View/Users/edit.ctp:233
+#: View/Users/edit.ctp:232
msgid "user_color_actual_posting_exp"
msgstr ""
-#: View/Users/edit.ctp:255
+#: View/Users/edit.ctp:254
msgid "inline_view_on_click"
msgstr ""
-#: View/Users/edit.ctp:258
+#: View/Users/edit.ctp:257
msgid "inline_view_on_click_exp"
msgstr ""
-#: View/Users/edit.ctp:262
+#: View/Users/edit.ctp:261
#, fuzzy
msgid "user_show_thread_collapsed"
msgstr "Show User's Entries"
-#: View/Users/edit.ctp:265
+#: View/Users/edit.ctp:264
msgid "user_show_thread_collapsed_exp"
msgstr ""
-#: View/Users/edit.ctp:270
+#: View/Users/edit.ctp:269
msgid "user_pers_msg"
msgstr ""
-#: View/Users/edit.ctp:271
+#: View/Users/edit.ctp:270
msgid "user_pers_msg_exp"
msgstr ""
-#: View/Users/edit.ctp:278
+#: View/Users/edit.ctp:277
#, fuzzy
msgid "user_category_override"
msgstr "Category-Chooser"
-#: View/Users/edit.ctp:283
+#: View/Users/edit.ctp:282
#, fuzzy
msgid "user_category_override_exp"
msgstr "Activates the category-chooser on the front-page."
-#: View/Users/edit.ctp:291
+#: View/Users/edit.ctp:290
msgid "user_time_diff"
msgstr ""
-#: View/Users/edit.ctp:292
+#: View/Users/edit.ctp:291
msgid "user_time_diff_exp"
msgstr ""
-#: View/Users/edit.ctp:297
+#: View/Users/edit.ctp:296
msgid "admin_mod_notif"
msgstr ""
-#: View/Users/edit.ctp:299
+#: View/Users/edit.ctp:298
msgid "admin_mod_notif_exp"
msgstr ""
-#: View/Users/edit.ctp:300
+#: View/Users/edit.ctp:299
msgid "new_posting_notify_exp"
msgstr ""
-#: View/Users/edit.ctp:302
+#: View/Users/edit.ctp:301
msgid "new_user_notify_exp"
msgstr ""
-#: View/Users/edit.ctp:309
+#: View/Users/edit.ctp:308
msgid "user_font_size"
msgstr ""
-#: View/Users/edit.ctp:326
+#: View/Users/edit.ctp:325
msgid "user_font_size_exp"
msgstr ""
-#: View/Users/edit.ctp:341 View/Users/view.ctp:104
+#: View/Users/edit.ctp:339 View/Users/view.ctp:112
msgid "flattr"
msgstr ""
-#: View/Users/edit.ctp:350
+#: View/Users/edit.ctp:348
msgid "flattr_uid"
msgstr ""
-#: View/Users/edit.ctp:354
+#: View/Users/edit.ctp:352
msgid "flattr_allow_user"
msgstr ""
-#: View/Users/edit.ctp:355
+#: View/Users/edit.ctp:353
msgid "flattr_allow_user_exp"
msgstr ""
-#: View/Users/edit.ctp:358
+#: View/Users/edit.ctp:356
msgid "flattr_allow_posting"
msgstr ""
-#: View/Users/edit.ctp:359
+#: View/Users/edit.ctp:357
msgid "flattr_allow_posting_exp"
msgstr ""
-#: View/Users/edit.ctp:365
+#: View/Users/edit.ctp:363
msgid "button_save"
msgstr ""
-#: View/Users/index.ctp:1
+#: View/Users/index.ctp:5
msgid "reg_users_hl"
msgstr "Registered Users"
@@ -1511,7 +1181,7 @@ msgid "register_success_content"
msgstr ""
"Your registration is now finished. You are able to loggin now. Have fun!"
-#: View/Users/register.ctp:23 Controller/EntriesController.php:330
+#: View/Users/register.ctp:23 Controller/EntriesController.php:305
msgid "js-required"
msgstr "To use this forum please enable JavaScript."
@@ -1523,47 +1193,51 @@ msgstr "Terms of Service"
msgid "register_tos_label"
msgstr "I agree to the %s"
-#: View/Users/view.ctp:12
-msgid "user_show_entries"
-msgstr "Show User's Entries"
-
-#: View/Users/view.ctp:33
+#: View/Users/view.ctp:32
#, fuzzy
msgid "user_block"
msgstr "Place"
-#: View/Users/view.ctp:74
+#: View/Users/view.ctp:73
msgid "user_since"
msgstr "Registered"
-#: View/Users/view.ctp:75
+#: View/Users/view.ctp:74
msgid "date_short"
msgstr "%b. %d, %Y"
-#: View/Users/view.ctp:78
+#: View/Users/view.ctp:77
msgid "user_postings"
msgstr "Number of Postings"
-#: View/Users/view.ctp:146
+#: View/Users/view.ctp:82
+msgid "user_show_entries"
+msgstr "Show User's Entries"
+
+#: View/Users/view.ctp:154
msgid "edit_userdata"
msgstr "Edit"
-#: View/Users/view.ctp:156
+#: View/Users/view.ctp:164
msgid "button_mod_panel_shp"
msgstr "Moderator Menu"
-#: View/Users/view.ctp:170
+#: View/Users/view.ctp:178
msgid "Unlock"
msgstr ""
-#: View/Users/view.ctp:170
+#: View/Users/view.ctp:178
msgid "Lock"
msgstr ""
-#: View/Users/view.ctp:236
+#: View/Users/view.ctp:241
msgid "No entries created yet."
msgstr ""
+#: View/Users/view.ctp:253
+msgid "Show all"
+msgstr ""
+
#: Controller/AdminsController.php:45
msgid "New"
msgstr ""
@@ -1622,55 +1296,51 @@ msgstr ""
msgid "Category deleted."
msgstr ""
-#: Controller/EntriesController.php:93
+#: Controller/EntriesController.php:88
msgid "page"
msgstr ""
-#: Controller/EntriesController.php:218 Controller/EntriesController.php:227
+#: Controller/EntriesController.php:187 Controller/EntriesController.php:196
msgid "Invalid post"
msgstr ""
-#: Controller/EntriesController.php:268
+#: Controller/EntriesController.php:238
msgid "new_entry_linktitle"
msgstr "New Entry"
-#: Controller/EntriesController.php:271
-msgid "logged_in_users_only"
-msgstr ""
-
-#: Controller/EntriesController.php:321 Controller/EntriesController.php:443
+#: Controller/EntriesController.php:293 Controller/EntriesController.php:414
msgid "Something clogged the tubes. Could not save entry. Try again."
msgstr ""
-#: Controller/EntriesController.php:368 Controller/EntriesController.php:477
+#: Controller/EntriesController.php:344 Controller/EntriesController.php:454
msgid "back_to_posting_from_linkname"
msgstr "Zurück zum Eintrag von %s"
-#: Controller/EntriesController.php:379
+#: Controller/EntriesController.php:355
msgid "answer_marking"
msgstr "Answer"
-#: Controller/EntriesController.php:429
+#: Controller/EntriesController.php:420
msgid "notice_you_are_editing_as_mod"
msgstr "You're now editing as moderator!"
-#: Controller/EntriesController.php:512
+#: Controller/EntriesController.php:485
msgid "delete_tree_success"
msgstr "Thread successfully removed."
-#: Controller/EntriesController.php:515
+#: Controller/EntriesController.php:488
msgid "delete_subtree_success"
msgstr "Subthread successfully removed."
-#: Controller/EntriesController.php:519
+#: Controller/EntriesController.php:492
msgid "delete_tree_error"
msgstr ""
-#: Controller/EntriesController.php:721
+#: Controller/EntriesController.php:707
msgid "Error"
msgstr ""
-#: Controller/EntriesController.php:917
+#: Controller/EntriesController.php:924
msgid "Custom"
msgstr ""
@@ -1736,105 +1406,107 @@ msgstr ""
msgid "Smily was not deleted"
msgstr ""
-#: Controller/ToolsController.php:30
+#: Controller/ToolsController.php:21
msgid "Caches have been emptied."
msgstr ""
-#: Controller/UploadsController.php:35 Controller/UploadsController.php:89
+#: Controller/UploadsController.php:35
msgid "upload_max_number_of_uploads_failed"
msgstr "No more uploads possible (max: %s)."
-#: Controller/UsersController.php:54 Controller/UsersController.php:310
+#: Controller/UsersController.php:37 Controller/UsersController.php:329
#, php-format
msgid "User %s is locked."
msgstr ""
-#: Controller/UsersController.php:60
+#: Controller/UsersController.php:43
msgid "auth_loginerror"
msgstr "Username or Password wrong."
-#: Controller/UsersController.php:110
+#: Controller/UsersController.php:92
msgid "register_email_subject"
msgstr "Welcome to %s!"
-#: Controller/UsersController.php:196 Controller/UsersController.php:217
+#: Controller/UsersController.php:172 Controller/UsersController.php:195
+#: Controller/UsersController.php:233
msgid "Invalid user"
msgstr ""
-#: Controller/UsersController.php:251
-msgid "user_edit_success"
-msgstr "Preferences were saved."
+#: Controller/UsersController.php:224
+#, fuzzy
+msgid "User :name"
+msgstr "Username"
-#: Controller/UsersController.php:264
+#: Controller/UsersController.php:278
msgid "The user could not be saved. Please, try again."
msgstr ""
-#: Controller/UsersController.php:292 Controller/UsersController.php:329
+#: Controller/UsersController.php:311 Controller/UsersController.php:348
#, fuzzy
msgid "User not found."
msgstr "Nothing found."
-#: Controller/UsersController.php:300
+#: Controller/UsersController.php:320
msgid "You can't lock yourself."
msgstr ""
-#: Controller/UsersController.php:302
+#: Controller/UsersController.php:322
msgid "You can't lock administrators."
msgstr ""
-#: Controller/UsersController.php:312
+#: Controller/UsersController.php:331
#, php-format
msgid "User %s is unlocked."
msgstr ""
-#: Controller/UsersController.php:316
+#: Controller/UsersController.php:335
msgid "Error while un/locking."
msgstr ""
-#: Controller/UsersController.php:335
+#: Controller/UsersController.php:355
msgid "You can't delete yourself."
msgstr ""
-#: Controller/UsersController.php:337
+#: Controller/UsersController.php:357
msgid "You can't delete the installation account."
msgstr ""
-#: Controller/UsersController.php:339
+#: Controller/UsersController.php:359
#, php-format
msgid "User %s deleted."
msgstr ""
-#: Controller/UsersController.php:342
+#: Controller/UsersController.php:363
msgid "Couldn't delete user."
msgstr ""
-#: Controller/UsersController.php:367
+#: Controller/UsersController.php:387
msgid "change_password_success"
msgstr "Password was changed."
-#: Controller/UsersController.php:429
+#: Controller/UsersController.php:455
msgid "error_email_not-valid"
msgstr "No valid email address."
-#: Controller/UsersController.php:463
+#: Controller/UsersController.php:502
msgid "Message was send."
msgstr ""
-#: Controller/UsersController.php:466
-msgid "Error, message couldn't be send! "
+#: Controller/UsersController.php:507
+msgid "Message couldn't be send! "
msgstr ""
-#: Controller/Component/CurrentUserComponent.php:258
+#: Controller/Component/CurrentUserComponent.php:308
msgid "auth_autherror"
msgstr "Access to this function is restricted!"
-#: Controller/Component/EmailNotificationComponent.php:53
-#: Controller/Component/EmailNotificationComponent.php:85
+#: Controller/Component/EmailNotificationComponent.php:47
+#: Controller/Component/EmailNotificationComponent.php:79
#, php-format
msgid "New reply to \"%s\""
msgstr ""
-#: Controller/Component/EmailNotificationComponent.php:114
+#: Controller/Component/EmailNotificationComponent.php:112
msgid "Successfull registration"
msgstr ""
@@ -1914,31 +1586,31 @@ msgstr ""
msgid "Abend"
msgstr ""
-#: View/Helper/BbcodeHelper.php:486
+#: View/Helper/BbcodeHelper.php:580
msgid ""
"Your browser does not support HTML5 video. Please updgrade to a "
"modernbrowser. In order to watch this stream you need an HTML5 capable "
"browser."
msgstr ""
-#: View/Helper/BbcodeHelper.php:504
+#: View/Helper/BbcodeHelper.php:601
msgid ""
"Your browser does not support HTML5 audio. Please updgrade to a "
"modernbrowser. In order to watch this stream you need an HTML5 capable "
"browser."
msgstr ""
-#: View/Helper/BbcodeHelper.php:741
+#: View/Helper/BbcodeHelper.php:926
#, fuzzy
msgid "[embed] tag not enabled."
msgstr "Enable Embedly"
-#: View/Helper/BbcodeHelper.php:849
+#: View/Helper/BbcodeHelper.php:1012
#, php-format
msgid "Domain %s not allowed for embedding video."
msgstr ""
-#: View/Helper/BbcodeHelper.php:857
+#: View/Helper/BbcodeHelper.php:1020
msgid "Video domain is not allowed."
msgstr ""
@@ -1950,15 +1622,15 @@ msgstr ""
msgid "Bookmark this entry"
msgstr ""
-#: View/Helper/EntryHHelper.php:193
+#: View/Helper/EntryHHelper.php:156
msgid "fixed"
msgstr ""
-#: View/Helper/EntryHHelper.php:208
+#: View/Helper/EntryHHelper.php:171
msgid "cateogry"
msgstr "Category"
-#: View/Helper/EntryHHelper.php:211
+#: View/Helper/EntryHHelper.php:174
msgid "error_category_empty"
msgstr "Category must not be empty."
@@ -2026,8 +1698,8 @@ msgstr ""
msgid "geshi_picture_popup"
msgstr ""
-#: View/Helper/MarkitupEditorHelper.php:80 webroot/js/main-prod.js:79
-#: webroot/js/views/uploads.js:71
+#: View/Helper/MarkitupEditorHelper.php:80 webroot/js/main-prod.js:100
+#: webroot/js/views/uploadNew.js:99 webroot/js/views/uploads.js:71
#, fuzzy
msgid "Upload"
msgstr "Upload"
@@ -2036,6 +1708,22 @@ msgstr "Upload"
msgid "Media"
msgstr ""
+#: View/Helper/SettingHelper.php:53
+msgid "edit"
+msgstr ""
+
+#: View/Helper/SettingHelper.php:64
+msgid "Key"
+msgstr ""
+
+#: View/Helper/SettingHelper.php:65
+msgid "Value"
+msgstr ""
+
+#: View/Helper/SettingHelper.php:66
+msgid "Explanation"
+msgstr ""
+
#: View/Helper/TimeHHelper.php:100 View/Helper/TimeHHelper.php:119
msgid "yesterday"
msgstr ""
@@ -2060,19 +1748,31 @@ msgstr ""
msgid "Nothing recognized."
msgstr ""
-#: webroot/js/templates/uploadNew.html:9
+#: webroot/js/templates/uploadNew.html:8
msgid "upload_new_title"
msgstr "Drop Image Here"
-#: webroot/js/templates/uploadNew.html:11
+#: webroot/js/templates/uploadNew.html:10
msgid "upload_info"
msgstr "Max. size: :size; type: jpg, jpeg, png, gif"
-#: webroot/js/main-prod.js:79 webroot/js/views/uploadNew.js:66
+#: webroot/js/main-prod.js:100 webroot/js/views/uploadNew.js:69
msgid "upload_fileTypeNotAllowed"
msgstr "File type not allowed."
-#: webroot/js/main-prod.js:79
+#: webroot/js/main-prod.js:100 webroot/js/views/uploadNew.js:73
+msgid "upload_fileToLarge"
+msgstr "File :name to large."
+
+#: webroot/js/main-prod.js:100 webroot/js/views/uploadNew.js:78
+msgid "upload_browserNotSupported"
+msgstr "Browser not supported."
+
+#: webroot/js/main-prod.js:100 webroot/js/views/uploadNew.js:81
+msgid "upload_toManyFiles"
+msgstr "To many files."
+
+#: webroot/js/main-prod.js:100
msgid ""
"Enter link or embedding code:') %>\n"
" \n"
@@ -2095,7 +1795,7 @@ msgid ""
"\n"
msgstr ""
-#: webroot/js/main-prod.js:79 webroot/js/views/mediaInsert.js:68
+#: webroot/js/main-prod.js:100 webroot/js/views/mediaInsert.js:68
msgid "Multimedia"
msgstr ""
@@ -2107,48 +1807,49 @@ msgstr ""
msgid "tr"
msgstr ""
-#: webroot/js/tests/lib/jquery.i18n.extendSpec.js:28
+#: webroot/js/tests/lib/jquery.i18n.extendSpec.js:30
msgid "token test"
msgstr ""
-#: webroot/js/views/uploadNew.js:69
-msgid "upload_fileToLarge"
-msgstr "File :name to large."
-
-#: webroot/js/views/uploadNew.js:72
-msgid "upload_browserNotSupported"
-msgstr "Browser not supported."
+#~ msgid "forum_disabled"
+#~ msgstr "Disable Forum"
-#: webroot/js/views/uploadNew.js:75
-msgid "upload_toManyFiles"
-msgstr "To many files."
+#~ msgid "forum_disabled_exp"
+#~ msgstr "Shows the maintenance page except for logged in admins."
-#~ msgid "whole_thread_marking"
-#~ msgstr "Whole Thread"
+#~ msgid "forum_disabled_text"
+#~ msgstr "Maintenance Notice"
-#~ msgid "register_email_send_content"
-#~ msgstr ""
-#~ "Thanks for registering. A email with a link was send to you. Please click "
-#~ "that link to finish the registration. Prior to that you're not able to "
-#~ "login!"
+#~ msgid "forum_disabled_text_exp"
+#~ msgstr "Text notice shown on the forum disabled page."
-#~ msgid "fixed_set_entry_link"
-#~ msgstr "Pin"
+#~ msgid "forum_name"
+#~ msgstr "Forum Title"
-#~ msgid "fixed_unset_entry_link"
-#~ msgstr "Unpin"
+#~ msgid "forum_name_exp"
+#~ msgstr "The name of this forum."
-#~ msgid "locked_set_entry_link"
-#~ msgstr "Lock"
+#~ msgid "timezone"
+#~ msgstr "Timezone"
-#~ msgid "locked_unset_entry_link"
-#~ msgstr "Unlock"
+#~ msgid "timezone_exp"
+#~ msgstr "All time values displayed are offset to match this timezone."
-#~ msgid "board_edited_marking"
-#~ msgstr "edited by"
+#~ msgid "forum_email"
+#~ msgstr "Email"
-#~ msgid "register_ip"
-#~ msgstr "Register IP"
+#~ msgid "forum_email_exp"
+#~ msgstr ""
+#~ "Email address used as sender address for emails send by the forum (e.g. "
+#~ "when registering)."
-#~ msgid "back_to_posting_linkname"
-#~ msgstr "Back to Posting"
+#~ msgid "email_admin_config_exp"
+#~ msgstr ""
+#~ "Additional settings are possible by providing a $saito
"
+#~ "config in app/config/email.php
. You should use app/"
+#~ "config/email.php.default
as template. See "
+#~ "also."
+
+#~ msgid "block_user_ui"
+#~ msgstr "Lock Users"
diff --git a/app/Locale/eng/LC_MESSAGES/nondynamic.po b/app/Locale/eng/LC_MESSAGES/nondynamic.po
index 16722064b..1723b2c8a 100644
--- a/app/Locale/eng/LC_MESSAGES/nondynamic.po
+++ b/app/Locale/eng/LC_MESSAGES/nondynamic.po
@@ -82,3 +82,288 @@ msgstr "notice"
#
msgid "success"
msgstr "Success"
+
+#*******************************************************************************
+#* App Settings Start
+#******************************************************************************/
+
+#
+msgid "forum_disabled"
+msgstr "Disable Forum"
+
+#
+msgid "forum_disabled_exp"
+msgstr "Shows the maintenance page except for logged in admins."
+
+#
+msgid "forum_disabled_text"
+msgstr "Maintenance Notice"
+
+#
+msgid "forum_disabled_text_exp"
+msgstr "Text notice shown on the forum disabled page."
+
+#
+msgid "forum_name"
+msgstr "Forum Title"
+
+#
+msgid "forum_name_exp"
+msgstr "The name of this forum."
+
+#
+msgid "timezone"
+msgstr "Timezone"
+
+#
+msgid "timezone_exp"
+msgstr "All time values displayed are offset to match this timezone."
+
+#
+msgid "forum_email"
+msgstr "Email"
+
+#
+msgid "forum_email_exp"
+msgstr "Email address used as sender address for emails send by the forum (e.g. when registering)."
+
+#
+msgid "block_user_ui"
+msgstr "Lock Users"
+
+#
+msgid "block_user_ui_exp"
+msgstr "Moderators are allowed to block users."
+
+#
+msgid "store_ip"
+msgstr "Store IP"
+
+#
+msgid "store_ip_exp"
+msgstr "Stores the IP-address for new entries. The IP is shown do moderators."
+
+#
+msgid "store_ip_anonymized"
+msgstr "IP Anonymized"
+
+#
+msgid "store_ip_anonymized_exp"
+msgstr "Strore IP anonymized."
+
+#
+msgid "tos_enabled"
+msgstr "ToS Enabled"
+
+#
+msgid "tos_enabled_exp"
+msgstr "Puts a Term of Service checkbox and link on the user registration page."
+
+#
+msgid "tos_url"
+msgstr "ToS Url"
+
+#
+msgid "tos_url_exp"
+msgstr "Sets the url for the ToS link. If empty, use the build-in default pages."
+
+#
+msgid "edit_period"
+msgstr "Edit Period"
+
+#
+msgid "edit_period_exp"
+msgstr "Minutes a user can edit a new entry."
+
+#
+msgid "edit_delay"
+msgstr "Show Edit"
+
+#
+msgid "edit_delay_exp"
+msgstr "Minutes a new entry can be edited without being marked as edited."
+
+#
+msgid "topics_per_page"
+msgstr "Topics per Page"
+
+#
+msgid "topics_per_page_exp"
+msgstr "Number of topics shown on the frontpage."
+
+#
+msgid "thread_depth_indent"
+msgstr "Thread Indent Depth"
+
+#
+msgid "thread_depth_indent_exp"
+msgstr "Max. indent to the the right for threads in thread-view. After that threads appear on the same level."
+
+#
+msgid "autolink"
+msgstr "Autolink"
+
+#
+msgid "autolink_exp"
+msgstr "Detect and automatically generate links."
+
+#
+msgid "bbcode_img"
+msgstr "Images"
+
+#
+msgid "bbcode_img_exp"
+msgstr "Allow embedding of images."
+
+#
+msgid "quote_symbol"
+msgstr "Quote Symbol"
+
+#
+msgid "quote_symbol_exp"
+msgstr "Quote symbol."
+
+#
+msgid "signature_separator"
+msgstr "Signature Separator"
+
+#
+msgid "signature_separator_exp"
+msgstr "Signature separator."
+
+#
+msgid "subject_maxlength"
+msgstr "Subject Length"
+
+#
+msgid "subject_maxlength_exp"
+msgstr "Number of chars allowed in subject."
+
+#
+msgid "text_word_maxlength"
+msgstr "Word Length"
+
+#
+msgid "text_word_maxlength_exp"
+msgstr "Max numbers of chars allowed in one word."
+
+#
+msgid "userranks_show"
+msgstr "Enable Ranks"
+
+#
+msgid "userranks_show_exp"
+msgstr "Show user ranks."
+
+#
+msgid "userranks_ranks"
+msgstr "Ranks"
+
+#
+msgid "userranks_ranks_exp"
+msgstr "User ranks based on number of postings."
+
+#
+msgid "video_domains_allowed"
+msgstr "Embeddable Video Sources"
+
+#
+msgid "video_domains_allowed_exp"
+msgstr "Domain names embeddable for video/iframe. Asterisk * means all sources allowed (This could pose a security risk if malicious code is embedded!)."
+
+#
+msgid "category_chooser_global"
+msgstr "Default"
+
+#
+msgid "category_chooser_global_exp"
+msgstr "Always show the category chooser on the front-page."
+
+#
+msgid "category_chooser_user_override"
+msgstr "User Override"
+
+#
+msgid "category_chooser_user_override_exp"
+msgstr "If the category chooser is off be default this allows users to enable it in their user preferences."
+
+#
+msgid "shoutbox_enabled"
+msgstr "Enable"
+
+#
+msgid "shoutbox_enabled_exp"
+msgstr "Shoutbox is enabled."
+
+#
+msgid "shoutbox_max_shouts"
+msgstr "Number"
+
+#
+msgid "shoutbox_max_shouts_exp"
+msgstr "Number of entries shown in the Shoutbox."
+
+#
+msgid "upload_max_img_size"
+msgstr "Upload Max Image Size "
+
+#
+msgid "upload_max_img_size_exp"
+msgstr "Max image size in kB for uploaded content."
+
+#
+msgid "upload_max_number_of_uploads"
+msgstr "Max Number of Uploads"
+
+#
+msgid "upload_max_number_of_uploads_exp"
+msgstr "Max number of uploaded files for a single user."
+
+#
+msgid "flattr_enabled"
+msgstr "Flattr Enabled"
+
+#
+msgid "flattr_enabled_exp"
+msgstr "Allows users to add a flattr button to their profil and their postings."
+
+#
+msgid "flattr_language"
+msgstr "Flattr Language"
+
+#
+msgid "flattr_language_exp"
+msgstr "Flattr expects an language key for the content send. See flattr documentation for available language keys."
+
+#
+msgid "flattr_category"
+msgstr "Flattr Category"
+
+#
+msgid "flattr_category_exp"
+msgstr "See flattr documentation for available categories."
+
+#
+msgid "embedly_enabled"
+msgstr "Enable Embedly"
+
+#
+msgid "embedly_enabled_exp"
+msgstr "Enables the [embed] BBcode which parses content through Embed.ly"
+
+#
+msgid "embedly_key"
+msgstr "Embedly Key"
+
+#
+msgid "embedly_key_exp"
+msgstr "You have to register at Embed.ly to receive an API-key, which you enter here."
+
+#
+msgid "stopwatch_get"
+msgstr "Stopwatch"
+
+#
+msgid "stopwatch_get_exp"
+msgstr "Outputs stopwatch times in production mode for logged in users by appending /stopwatch:true/
to url."
+
diff --git a/app/Model/AppModel.php b/app/Model/AppModel.php
index a7769b52c..46b952cc0 100644
--- a/app/Model/AppModel.php
+++ b/app/Model/AppModel.php
@@ -3,6 +3,7 @@
App::uses('Model', 'Model');
App::uses('Sanitize', 'Utility');
App::uses('SaitoUser', 'Lib');
+ App::uses('CakeEvent', 'Event');
// import here so that `cake schema ...` cli works
App::import('Lib', 'Stopwatch.Stopwatch');
@@ -12,6 +13,11 @@ class AppModel extends Model {
# Entry->User->UserOnline
public $recursive = 1;
+ /*
+ * Lock to disable sanitation permanently
+ */
+ static $sanitizeEnabled = true;
+
static $sanitize = true;
/**
@@ -43,11 +49,13 @@ protected function _sanitizeFields($results) {
public function afterFind($results, $primary = false) {
parent::afterFind($results, $primary);
- if (self::$sanitize) {
- $results = $this->_sanitizeFields($results);
- } elseif (self::$_lock_no_sanitize === $this->alias) {
- // sanitizing can only be disabled for one find
- $this->sanitize(true);
+ if (self::$sanitizeEnabled) {
+ if (self::$sanitize) {
+ $results = $this->_sanitizeFields($results);
+ } elseif (self::$_lock_no_sanitize === $this->alias) {
+ // sanitizing can only be disabled for one find
+ $this->sanitize(true);
+ }
}
return $results;
}
@@ -70,6 +78,14 @@ public function toggle($key) {
return $value;
}
+ public function pipeMerger(array $data) {
+ $out = [];
+ foreach ($data as $key => $value) {
+ $out[] = "$key=$value";
+ }
+ return implode(' | ', $out);
+ }
+
/**
* Splits String 'a=b|c=d|e=f' into an array('a'=>'b', 'c'=>'d', 'e'=>'f')
*
@@ -78,10 +94,10 @@ public function toggle($key) {
*/
protected function _pipeSplitter($pipeString) {
$unpipedArray = array();
- $ranks = explode("|", $pipeString);
+ $ranks = explode('|', $pipeString);
foreach ( $ranks as $rank ) :
$matches = array();
- $matched = preg_match('/(\d+)\s*=\s*(.*)/', trim($rank), $matches);
+ $matched = preg_match('/(\w+)\s*=\s*(.*)/', trim($rank), $matches);
if ($matched) {
$unpipedArray[$matches[1]] = $matches[2];
}
@@ -100,6 +116,20 @@ protected static function _getIp() {
return $ip;
}
+ /**
+ * Dispatches an event
+ *
+ * - Always passes the issuing model class as subject
+ * - Wrapper for CakeEvent boilerplate code
+ * - Easier to test
+ *
+ * @param string $event event identifier `Model.
- Saito is convinced it's running on the server: = Router::baseURL(); ?>. + Saito is convinced it's running on the server: = Router::fullBaseUrl(); ?>.
Saito believes its base-URL is: request->webroot ?>.
diff --git a/app/View/Elements/entry/view_content.ctp b/app/View/Elements/entry/view_content.ctp
index fd72b7d4d..8c6b3bd6a 100644
--- a/app/View/Elements/entry/view_content.ctp
+++ b/app/View/Elements/entry/view_content.ctp
@@ -24,7 +24,7 @@
echo $subject;
}
?>
- –
+ –
isLoggedIn()) : ?>
Html->link(
@@ -48,7 +48,7 @@
TimeH->formatTime($entry['Entry']['time']); ?>">TimeH->formatTime($entry['Entry']['time'], 'glasen'); ?>, */ ?>
- TimeH->formatTime($entry['Entry']['time']);
if (isset($entry['Entry']['edited_by']) && !is_null($entry['Entry']['edited_by'])
&& strtotime($entry['Entry']['edited']) > strtotime($entry['Entry']['time']) + ( Configure::read('Saito.Settings.edit_delay') * 60 )
@@ -72,7 +72,7 @@
}
if ( Configure::read('Saito.Settings.store_ip') && $CurrentUser->isMod() ):
?>, IP:
-
diff --git a/app/View/Entries/add.ctp b/app/View/Entries/add.ctp
index 5c9f1062d..5d6aaa3ef 100644
--- a/app/View/Entries/add.ctp
+++ b/app/View/Entries/add.ctp
@@ -84,7 +84,10 @@
),
'label' => false,
'tabindex' => 2,
- 'error' => ['notEmpty' => __('error_subject_empty')],
+ 'error' => [
+ 'notEmpty' => __('error_subject_empty'),
+ 'maxLength' => __('error_subject_max_length')
+ ],
'div' => ['class' => 'required'],
'placeholder' => (!empty($citeSubject)) ? $citeSubject : __('Subject'),
'required' => ($posting_type === 'reply') ? false : "required"
diff --git a/app/View/Entries/index.ctp b/app/View/Entries/index.ctp
index fdc59f0f0..53bee6f7f 100644
--- a/app/View/Entries/index.ctp
+++ b/app/View/Entries/index.ctp
@@ -26,7 +26,7 @@
$this->end();
$this->start('headerSubnavRightTop');
- if (isset($categoryChooserIsUsed) && $categoryChooserIsUsed):
+ if (isset($categoryChooser)):
// category-chooser link
echo $this->Html->link(
' '
diff --git a/app/View/Helper/AppHelper.php b/app/View/Helper/AppHelper.php
index b8b02d0cf..d1734ad75 100755
--- a/app/View/Helper/AppHelper.php
+++ b/app/View/Helper/AppHelper.php
@@ -33,13 +33,11 @@
class AppHelper extends Helper {
public function getAssetTimestamp($path) {
- $filepath = preg_replace(
- '/^' . preg_quote($this->request->webroot, '/') . '/',
- '',
- $path
- );
- $webrootPath = WWW_ROOT . str_replace('/', DS, $filepath);
- return @filemtime($webrootPath);
+ $pathWithTimestamp = $this->assetTimestamp($path);
+ // extracts integer unixtimestamp from `path/asset.ext? " . __d('nondynamic', $name . '_exp') . " request->data['Setting']['name'] . '_exp'); ?> request->data['Setting']['name'] . '_exp'); ?>
-
- \n <%- $.i18n.__(\'upload_info\', {size: upload_size}) %>\n "),e=e.replace(/\n/g," "+e+"'
+ . $out
+ . '
';
+ $out = ''
+ . $anchors
+ . '' . $table_name . '
'
+ . $out;
+ return $out;
+ }
+
+ public function addHeader($header) {
+ $id = count($this->_headers) + 1;
+ $this->_headers[$id] = $header;
+ return $id;
+ }
+
+ public function getHeaders() {
+ return $this->_headers;
+ }
+
+ public function tableRow($name, $Settings) {
+ return $this->Html->tableCells(
+ [
+ __d('nondynamic', $name),
+ $Settings[$name],
+ "request->data['Setting']['name']); ?>
+request->data['Setting']['name']); ?>
-
-
+ $tableHeadersHtml = $this->Setting->tableHeaders();
+
+ $this->start('settings');
+ echo $this->Setting->table(
+ __('Deactivate Forum'),
+ ['forum_disabled', 'forum_disabled_text'],
+ $Settings
+ );
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'forum_disabled' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'forum_disabled_text'),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
+ echo $this->Setting->table(
+ __('Base Preferences'),
+ ['forum_name', 'timezone'],
+ $Settings
+ );
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'forum_name' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'timezone'),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'forum_email' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
+ echo $this->Setting->table(
+ __('Moderation'),
+ ['block_user_ui', 'store_ip', 'store_ip_anonymized'],
+ $Settings
+ );
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'block_user_ui' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'store_ip' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'store_ip_anonymized' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
+ echo $this->Setting->table(
+ __('Registration'),
+ ['tos_enabled', 'tos_url'],
+ $Settings
+ );
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'tos_enabled' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'tos_url' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
+ echo $this->Setting->table(
+ __('Edit'),
+ ['edit_period', 'edit_delay'],
+ $Settings
+ );
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'edit_period' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
+ echo $this->Setting->table(
+ __('View'),
+ [
+ 'topics_per_page',
+ 'thread_depth_indent',
+ 'autolink',
+ 'bbcode_img',
+ 'quote_symbol',
+ 'signature_separator',
+ 'subject_maxlength',
+ 'text_word_maxlength',
+ 'userranks_show',
+ 'userranks_ranks',
+ 'video_domains_allowed'
+ ],
+ $Settings
+ );
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'edit_delay' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'topics_per_page' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'thread_depth_indent' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'autolink' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'bbcode_img' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'quote_symbol' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'signature_separator' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'subject_maxlength' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'text_word_maxlength' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'userranks_show' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'userranks_ranks' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'video_domains_allowed' ),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
+ echo $this->Setting->table(
+ __('Category Chooser'),
+ ['category_chooser_global', 'category_chooser_user_override'],
+ $Settings
+ );
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'category_chooser_global'),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'category_chooser_user_override'),
- array( 'class' => 'btn' )
- );
- ?>
-
- Shoutbox
-
-
-
+ echo $this->Setting->table(
+ __('Shoutbox'),
+ ['shoutbox_enabled', 'shoutbox_max_shouts'],
+ $Settings
+ );
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'shoutbox_enabled'),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'shoutbox_max_shouts'),
- array( 'class' => 'btn' )
- );
- ?>
-
- Uploads
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'upload_max_img_size'),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'upload_max_number_of_uploads'),
- array( 'class' => 'btn' )
- );
- ?>
-
- Html->link('Flattr', 'http://flattr.com/'); ?>
-
-
-
+ echo $this->Setting->table(
+ __('Uploads'),
+ ['upload_max_img_size', 'upload_max_number_of_uploads'],
+ $Settings
+ );
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'flattr_enabled'),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'flattr_language'),
- array( 'class' => 'btn' )
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'flattr_category'),
- array( 'class' => 'btn' )
- );
- ?>
-
- Html->link('Embed.ly', 'http://embed.ly/'); ?>
-
-
- Html->tableCells(array(
- array(
- __('embedly_enabled'),
- $Settings['embedly_enabled'],
- __('embedly_enabled_exp'),
- $this->Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'embedly_enabled' ),
- array( 'class' => 'btn' )
- )
- ),
- array(
- __('embedly_key'),
- $Settings['embedly_key'],
- __('embedly_key_exp'),
- $this->Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'embedly_key' ),
- array( 'class' => 'btn' )
- )
- )
- ));
- ?>
-
+ echo $this->Setting->table(
+ $this->Html->link('Flattr', 'http://flattr.com/'),
+ ['flattr_enabled', 'flattr_language', 'flattr_category'],
+ $Settings,
+ ['nav-title' => 'Flattr']
+ );
-
-
-
- Html->tableCells(array(
- array(
- __('stopwatch_get'),
- $Settings['stopwatch_get'],
- __('stopwatch_get_exp'),
- $this->Html->link(
- __('edit'),
- array( 'controller' => 'settings', 'action' => 'edit', 'stopwatch_get' ),
- array( 'class' => 'btn' )
- )
- ),
- ));
- ?>
-
+ echo $this->Setting->table(
+ $this->Html->link('Embed.ly', 'http://embed.ly/'),
+ ['embedly_enabled', 'embedly_key'],
+ $Settings,
+ ['nav-title' => 'Embedly']
+ );
+
+ echo $this->Setting->table(
+ __('Debug'),
+ ['stopwatch_get'],
+ $Settings
+ );
+ $this->end('settings');
+?>
+0&&d.length>=a.queuefiles)return E(a.queuewait);e=l[0],l.splice(0,1),d.push(e);try{if(g(o[e])!==!1){if(e===s)return;var t=new FileReader,r=1048576*a.maxfilesize;t.index=e;if(o[e].size>r)return a.error(n[2],o[e],e),d.forEach(function(t,n){t===e&&d.splice(n,1)}),u++,!0;t.onerror=function(e){switch(e.target.error.code){case e.target.error.NOT_FOUND_ERR:return a.error(n[4]),!1;case e.target.error.NOT_READABLE_ERR:return a.error(n[5]),!1;case e.target.error.ABORT_ERR:return a.error(n[6]),!1;default:return a.error(n[7]),!1}},t.onloadend=a.beforeSend?function(t){a.beforeSend(o[e],e,function(){x(t)})}:x,t.readAsBinaryString(o[e])}else u++}catch(f){return d.forEach(function(t,n){t===e&&d.splice(n,1)}),a.error(n[0]),!1}l.length>0&&S()},x=function(t){var n=(typeof t.srcElement=="undefined"?t.target:t.srcElement).index;t.target.index===undefined&&(t.target.index=v(t.total));var l=new XMLHttpRequest,g=l.upload,w=o[t.target.index],E=t.target.index,S=(new Date).getTime(),x="------multipartformboundary"+(new Date).getTime(),T=f.length,N,C=m(w.name),k=w.type;a.withCredentials&&(l.withCredentials=a.withCredentials),typeof C=="string"?N=c(C,t.target.result,k,x):N=c(w.name,t.target.result,k,x),g.index=E,g.file=w,g.downloadStartTime=S,g.currentStart=S,g.currentProgress=0,g.global_progress_index=T,g.startData=0,g.addEventListener("progress",h,!1),jQuery.isFunction(a.url)?l.open("POST",a.url(),!0):l.open("POST",a.url,!0),l.setRequestHeader("content-type","multipart/form-data; boundary="+x),e.each(a.headers,function(e,t){l.setRequestHeader(e,t)}),l.sendAsBinary(N),f[T]=0,p(),a.uploadStarted(E,w,s),l.onload=function(){var e=null;if(l.responseText)try{e=jQuery.parseJSON(l.responseText)}catch(t){e=l.responseText}var o=(new Date).getTime(),c=o-S,h=a.uploadFinished(E,w,e,c,l);r++,d.forEach(function(e,t){e===n&&d.splice(t,1)}),b.push(n),f[T]=100,p(),r===s-u&&y(),h===!1&&(i=!0),(l.status<200||l.status>299)&&a.error(l.statusText,w,n,l.status)}};S()}function v(e){for(var t=0;t\n <%- $.i18n.__(\'upload_new_title\') %>
\n =s-r?"yesterday":e>=s&&e=s+r&&e-2)return(r>=0?"just ":"")+"now";if(r<60&&r>-60)return r>=0?Math.floor(r)+" seconds ago":"in "+Math.floor(-r)+" seconds";if(r<120&&r>-120)return r>=0?"about a minute ago":"in about a minute";if(r<3600&&r>-3600)return r>=0?Math.floor(r/60)+" minutes ago":"in "+Math.floor(-r/60)+" minutes";if(r<7200&&r>-7200)return r>=0?"about an hour ago":"in about an hour";if(r<86400&&r>-86400)return r>=0?Math.floor(r/3600)+" hours ago":"in "+Math.floor(-r/3600)+" hours";var i=172800;if(r-i)return r>=0?"1 day ago":"in 1 day";var s=2505600;if(r-s)return r>=0?Math.floor(r/86400)+" days ago":"in "+Math.floor(-r/86400)+" days";var o=5184e3;if(r
"),"
")},n.truncatechars=function(e,t){return e.length<=t?e:e.substr(0,t)+"…"},n.truncatewords=function(e,t){var n=e.split(" ");return n.length