From 46f0cf150fc501fb63390f3f9069c4db0947f89f Mon Sep 17 00:00:00 2001 From: Sweil Date: Sat, 21 Jun 2014 11:28:10 +0200 Subject: [PATCH 01/92] create alix7 branch Signed-off-by: Sweil --- README | 7 +++---- www/config/version | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/README b/README index a60b652..4f74d09 100644 --- a/README +++ b/README @@ -1,9 +1,8 @@ Development branches: - - alix6-bugfixes: This is the branch with bug-fixes for alix6. Use this a base of your development for alix6. - - alix6_neu: This is the base branch of alix6. bugfixes will be merged into it, if occur. - - master: This will always be the branch of the latest release. After a new release the - specific branch will be merged into this one. + - alix7: This is the most recent branch for the next release alix7. Use this a base of your active development. + - master: This will always be the branch of the latest release. After a new release the + specific branch will be merged into this one. Test branches: diff --git a/www/config/version b/www/config/version index 80df0fc..c6a24af 100644 --- a/www/config/version +++ b/www/config/version @@ -1 +1 @@ -2.alix6 +2.alix7 From eb0c06fd442f04fea8041b4834f96689174e9c2b Mon Sep 17 00:00:00 2001 From: Thoronador Date: Sat, 12 Jul 2014 00:57:53 +0200 Subject: [PATCH 02/92] implement style selection, visitor side The changes allow a visitor to select one of the installed style of the Frogsystem 2, instead of seeing the "active style" set in the admin CP. This is implemented by setting a cookie on the user's end, so the user's browser has to accept cookies for this feature. Still missing (but coming soon in one of the next commits): - possibility to undo selection (i.e. change back to standard) - template administration scripts for style selection --- www/data/style_selection.php | 68 +++++++++++++++++++++++++ www/imageviewer.php | 3 ++ www/index.php | 3 ++ www/lang/de_DE/frontend.txt | 6 +++ www/lang/en_US/frontend.txt | 6 +++ www/styles/lightfrog/0_style_select.tpl | 19 +++++++ www/styles/lightfrog/left.nav | 1 + 7 files changed, 106 insertions(+) create mode 100644 www/data/style_selection.php create mode 100644 www/styles/lightfrog/0_style_select.tpl diff --git a/www/data/style_selection.php b/www/data/style_selection.php new file mode 100644 index 0000000..cc2ac2a --- /dev/null +++ b/www/data/style_selection.php @@ -0,0 +1,68 @@ +sql()->conn()->prepare('SELECT * FROM `'.$FD->config('pref').'styles` WHERE `style_allow_use` = 1 AND `style_tag` != \'default\' AND `style_tag` = ?'); + $stmt->execute(array($_GET['new_style'])); + if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) === false) + { + $template = sys_message($FD->text('frontend', 'sysmessage'), $FD->text('frontend', 'style_not_exist')); + } + else + { + //set style via cookie, expires 14 days from now + setcookie('style', $_GET['new_style'], time()+14*86400); + $template = forward_message($FD->text('frontend', 'new_style_selected'), $FD->text('frontend', 'style_select_reload'), + url('style_selection', array())); + } + } //if new_style is set + else + { + //show list + $index = $FD->sql()->conn()->query('SELECT * FROM `'.$FD->config('pref').'styles` WHERE `style_allow_use` = 1 AND `style_tag` != \'default\''); + $styles = ''; + while (($row = $index->fetch(PDO::FETCH_ASSOC)) !== false) + { + $ini = FS2_ROOT_PATH . 'styles/' . $row['style_tag'] . '/style.ini'; + $data = array(); + if (is_readable($ini)) + { + $fa = new fileaccess(); + $ini_lines = $fa->getFileArray($ini); + unset($fa); + $ini_lines = array_map('trim', $ini_lines); + $ini_lines = array_map('htmlentities', $ini_lines); + $data['name'] = $ini_lines[0]; + $data['version'] = ( !empty($ini_lines[1]) ) ? $ini_lines[1] : ''; + $data['copy'] = ( !empty($ini_lines[2]) ) ? $ini_lines[2] : ''; + } + else + { + $data['name'] = $row['style_tag']; + $data['version'] = ''; + $data['copy'] = ''; + } + + $template = new template(); + $template->setFile('0_style_select.tpl'); + $template->load('ENTRY'); + + $template->tag('tag', $row['style_tag']); + $template->tag('name', $data['name']); + $template->tag('version', $data['version']); + $template->tag('copy', $data['copy']); + $template->tag('url', url('style_selection', array('new_style' => $row['style_tag']))); + + $styles .= $template->display(); + }//while + + $template = new template(); + $template->setFile('0_style_select.tpl'); + $template->load('BODY'); + + $template->tag('styles', $styles ); + $template->tag('cookie_hint', $FD->text('frontend', 'style_select_cookie_hint') ); + + $template = $template->display (); + } //else +?> diff --git a/www/imageviewer.php b/www/imageviewer.php index 6bd49ff..3e2a946 100644 --- a/www/imageviewer.php +++ b/www/imageviewer.php @@ -21,6 +21,9 @@ userlogin(); setTimezone($FD->cfg('timezone')); run_cronjobs(); +if (isset($_COOKIE['style']) && !isset($_GET['style'])) { + $_GET['style'] = $_COOKIE['style']; +} set_style(); // Security Functions diff --git a/www/index.php b/www/index.php index fad085c..3ad5bb3 100644 --- a/www/index.php +++ b/www/index.php @@ -28,6 +28,9 @@ if (!$FD->configExists('main', 'count_referers') || $FD->cfg('main', 'count_referers')==1) { save_referer(); } +if (isset($_COOKIE['style']) && !isset($_GET['style'])) { + $_GET['style'] = $_COOKIE['style']; +} set_style(); copyright(); diff --git a/www/lang/de_DE/frontend.txt b/www/lang/de_DE/frontend.txt index 3725bd4..65dbfcd 100644 --- a/www/lang/de_DE/frontend.txt +++ b/www/lang/de_DE/frontend.txt @@ -134,3 +134,9 @@ video: Video # poll multiple_choice: Mehrfachauswahl single_choice: Einzelauswahl + +# style selection +style_not_exist: Der angegebene Style existiert nicht. +new_style_selected: Neuer Style ausgewählt +style_select_reload: Die Styleauswahl wird erst nach dem Neuladen der Seite aktiv. +style_select_cookie_hint: Hinweis: Damit diese Styleauswahl korrekt funktioniert, muss der Browser so eingestellt sein, dass er Cookies von dieser Seite akzeptiert. diff --git a/www/lang/en_US/frontend.txt b/www/lang/en_US/frontend.txt index 78f5c73..e7ce249 100644 --- a/www/lang/en_US/frontend.txt +++ b/www/lang/en_US/frontend.txt @@ -134,3 +134,9 @@ video: Video # poll multiple_choice: Multiple choice single_choice: Single choice + +# style selection +style_not_exist: The requested style does not exist. +new_style_selected: New style selected +style_select_reload: The style selection will take effect after the site has been reloaded. +style_select_cookie_hint: Hint: Your browser must configured to accept cookies from this site. Otherwise the style selection will not work properly. diff --git a/www/styles/lightfrog/0_style_select.tpl b/www/styles/lightfrog/0_style_select.tpl new file mode 100644 index 0000000..06bca0f --- /dev/null +++ b/www/styles/lightfrog/0_style_select.tpl @@ -0,0 +1,19 @@ +Verfügbare Styles +

+ + + {..styles..} +
+ +

+{..cookie_hint..} + + + + + {..tag..}
+ {..name..} {..version..}
+
{..copy..}
+ + +   diff --git a/www/styles/lightfrog/left.nav b/www/styles/lightfrog/left.nav index 9d6ef7e..3a71a6e 100644 --- a/www/styles/lightfrog/left.nav +++ b/www/styles/lightfrog/left.nav @@ -4,6 +4,7 @@ - Mitgliederliste
- Umfragen
- Suche
+- Styleauswahl

Inhalt & Media
From 7f5a28ef60a8a06d4ce44288b21a4ef4f5e0e6e5 Mon Sep 17 00:00:00 2001 From: Thoronador Date: Sun, 13 Jul 2014 19:48:37 +0200 Subject: [PATCH 03/92] possibility to clear style selection --- www/data/style_selection.php | 26 ++++++++++++++++++++++++ www/lang/de_DE/frontend.txt | 2 ++ www/lang/en_US/frontend.txt | 2 ++ www/styles/default/0_style_select.tpl | 27 +++++++++++++++++++++++++ www/styles/lightfrog/0_style_select.tpl | 8 ++++++++ 5 files changed, 65 insertions(+) create mode 100644 www/styles/default/0_style_select.tpl diff --git a/www/data/style_selection.php b/www/data/style_selection.php index cc2ac2a..1392c1e 100644 --- a/www/data/style_selection.php +++ b/www/data/style_selection.php @@ -1,4 +1,8 @@ loadConfig('main'); + $main_config = $FD->configObject('main')->getConfigArray(); + $current_tag = $main_config['style_tag']; + //change selected style if (isset($_GET['new_style'])) { @@ -16,6 +20,13 @@ url('style_selection', array())); } } //if new_style is set + else if (isset($_GET['clear'])) + { + //delete style cookie, "expires" 100 days ago + setcookie('style', '', time()-100*86400); + $template = forward_message($FD->text('frontend', 'style_select_clear'), $FD->text('frontend', 'style_select_reload'), + url('style_selection', array())); + } //if clear / delete cookie else { //show list @@ -56,11 +67,26 @@ $styles .= $template->display(); }//while + $clear = ''; + if (isset($_COOKIE['style'])) + { + $template = new template(); + $template->setFile('0_style_select.tpl'); + $template->load('CLEAR'); + + $template->tag('clear_url', url('style_selection', array('clear' => 1)) ); + + $clear = $template->display(); + } + $template = new template(); $template->setFile('0_style_select.tpl'); $template->load('BODY'); + $current = isset($_COOKIE['style']) ? htmlentities($_COOKIE['style']) : $FD->text('frontend', 'none').' ('.htmlentities($current_tag).')'; $template->tag('styles', $styles ); + $template->tag('current', $current ); + $template->tag('clear_selection', $clear ); $template->tag('cookie_hint', $FD->text('frontend', 'style_select_cookie_hint') ); $template = $template->display (); diff --git a/www/lang/de_DE/frontend.txt b/www/lang/de_DE/frontend.txt index 65dbfcd..a2ef44a 100644 --- a/www/lang/de_DE/frontend.txt +++ b/www/lang/de_DE/frontend.txt @@ -140,3 +140,5 @@ style_not_exist: Der angegebene Style existiert nicht. new_style_selected: Neuer Style ausgewählt style_select_reload: Die Styleauswahl wird erst nach dem Neuladen der Seite aktiv. style_select_cookie_hint: Hinweis: Damit diese Styleauswahl korrekt funktioniert, muss der Browser so eingestellt sein, dass er Cookies von dieser Seite akzeptiert. +style_select_clear: Styleauswahl gelöscht +none: keine diff --git a/www/lang/en_US/frontend.txt b/www/lang/en_US/frontend.txt index e7ce249..9db9e8f 100644 --- a/www/lang/en_US/frontend.txt +++ b/www/lang/en_US/frontend.txt @@ -140,3 +140,5 @@ style_not_exist: The requested style does not exist. new_style_selected: New style selected style_select_reload: The style selection will take effect after the site has been reloaded. style_select_cookie_hint: Hint: Your browser must configured to accept cookies from this site. Otherwise the style selection will not work properly. +style_select_clear: Style selection cleared +none: none diff --git a/www/styles/default/0_style_select.tpl b/www/styles/default/0_style_select.tpl new file mode 100644 index 0000000..ac8c759 --- /dev/null +++ b/www/styles/default/0_style_select.tpl @@ -0,0 +1,27 @@ +Verfügbare Styles +

+ + + {..styles..} +
+ +

+ +Aktuelle Auswahl: {..current..} +{..clear_selection..} +

+{..cookie_hint..} + + + + + {..tag..}
+ {..name..} {..version..}
+
{..copy..}
+ + +   + +
+⇒ Auswahl löschen + diff --git a/www/styles/lightfrog/0_style_select.tpl b/www/styles/lightfrog/0_style_select.tpl index 06bca0f..ac8c759 100644 --- a/www/styles/lightfrog/0_style_select.tpl +++ b/www/styles/lightfrog/0_style_select.tpl @@ -5,6 +5,10 @@ {..styles..} +

+ +Aktuelle Auswahl: {..current..} +{..clear_selection..}

{..cookie_hint..} @@ -17,3 +21,7 @@   + +
+⇒ Auswahl löschen + From d1b3658eafed697e78d82ebe5f9370de8f708971 Mon Sep 17 00:00:00 2001 From: Thoronador Date: Mon, 14 Jul 2014 00:37:19 +0200 Subject: [PATCH 04/92] template administration for style selection --- db.sql | 1 + www/admin/admin_template_styleselect.php | 48 ++++++++++++++++++++++++ www/lang/de_DE/menu.txt | 2 + www/lang/de_DE/template.txt | 18 +++++++++ www/lang/en_US/menu.txt | 2 + www/lang/en_US/template.txt | 18 +++++++++ www/styles/default/left.nav | 1 + www/styles/lightfrog/left.nav | 2 +- 8 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 www/admin/admin_template_styleselect.php diff --git a/db.sql b/db.sql index b42f831..26b9703 100644 --- a/db.sql +++ b/db.sql @@ -150,6 +150,7 @@ INSERT INTO `fs2_admin_cp` (`page_id`, `group_id`, `page_file`, `page_pos`, `pag ('tpl_fscodes', 'templates', 'admin_editor_fscode.php', 14, 0), ('tpl_player', 'templates', 'admin_template_player.php', 20, 0), ('tpl_topdownloads', 'templates', 'admin_template_topdownloads.php', 25, 0), +('tpl_styleselect', 'templates', 'admin_template_styleselect.php', 26, 0), ('user_config', 'users', 'admin_user_config.php', 1, 0), ('user_add', 'users', 'admin_user_add.php', 2, 0), ('user_edit', 'users', 'admin_user_edit.php', 3, 0), diff --git a/www/admin/admin_template_styleselect.php b/www/admin/admin_template_styleselect.php new file mode 100644 index 0000000..d06cc7b --- /dev/null +++ b/www/admin/admin_template_styleselect.php @@ -0,0 +1,48 @@ + 'BODY', + 'title' => $FD->text('template', 'style_select_body_title'), + 'description' => $FD->text('template', 'style_select_body_desc'), + 'rows' => 15, + 'cols' => 66, + 'help' => array ( + array ( 'tag' => 'styles', 'text' => $FD->text('template', 'style_select_body_styles') ), + array ( 'tag' => 'current', 'text' => $FD->text('template', 'style_select_body_current') ), + array ( 'tag' => 'clear_selection', 'text' => $FD->text('template', 'style_select_body_clear') ), + array ( 'tag' => 'cookie_hint', 'text' => $FD->text('template', 'style_select_body_cookie_hint') ), + ) +); + +$TEMPLATE_EDIT[] = array ( + 'name' => 'ENTRY', + 'title' => $FD->text('template', 'style_select_entry_title'), + 'description' => $FD->text('template', 'style_select_entry_desc'), + 'rows' => 10, + 'cols' => 66, + 'help' => array ( + array ( 'tag' => 'tag', 'text' => $FD->text('template', 'style_select_entry_tag') ), + array ( 'tag' => 'name', 'text' => $FD->text('template', 'style_select_entry_name') ), + array ( 'tag' => 'version', 'text' => $FD->text('template', 'style_select_entry_version') ), + array ( 'tag' => 'copy', 'text' => $FD->text('template', 'style_select_entry_copy') ), + array ( 'tag' => 'url', 'text' => $FD->text('template', 'style_select_entry_url') ) + ) +); + +$TEMPLATE_EDIT[] = array ( + 'name' => 'CLEAR', + 'title' => $FD->text('template', 'style_select_clear_title'), + 'description' => $FD->text('template', 'style_select_clear_desc'), + 'rows' => 5, + 'cols' => 66, + 'help' => array ( + array ( 'tag' => 'clear_url', 'text' => $FD->text('template', 'style_select_clear_url') ) + ) +); + +echo templatepage_init ($TEMPLATE_EDIT, $TEMPLATE_GO, $TEMPLATE_FILE); +?> diff --git a/www/lang/de_DE/menu.txt b/www/lang/de_DE/menu.txt index ba7fd69..45ecd57 100644 --- a/www/lang/de_DE/menu.txt +++ b/www/lang/de_DE/menu.txt @@ -312,6 +312,8 @@ page_title_tpl_player: page_link_tpl_player: Flash-Player page_title_tpl_topdownloads: „Top Downloads“ bearbeiten page_link_tpl_topdownloads: Top Downloads +page_title_tpl_styleselect: „Styleauswahl“ bearbeiten +page_link_tpl_styleselect: Styleauswahl # Applets page_title_applets_add: hinzufügen diff --git a/www/lang/de_DE/template.txt b/www/lang/de_DE/template.txt index 548c722..e4fe6b9 100644 --- a/www/lang/de_DE/template.txt +++ b/www/lang/de_DE/template.txt @@ -628,3 +628,21 @@ partner_navi_body_description: Aussehen der Partnerliste im Men partner_navi_body_help_1: Einzelne Ausgabe aller Partner. partner_navi_body_help_2: Einzelne Ausgabe der Partner, die permanent angezeigt werden sollen. partner_navi_body_help_3: Einzelne Ausgabe der Partner, die nicht permanent angezeigt werden sollen. + + +style_select_body_title: Styleauswahl Body +style_select_body_desc: Das Erscheinungsbild der Styleauswahl +style_select_body_styles: Liste aller auswählbaren Styles +style_select_body_current: Aktuelle Styleauswahl +style_select_body_clear: Option zum Löschen der Styleeinstellung +style_select_body_cookie_hint: Hinweis zur Cookienutzung +style_select_entry_title: Eintrag +style_select_entry_desc: Erscheinungsbild eines einzelnen Eintrags in der Liste +style_select_entry_tag: Style-Tag (z.B. lightfrog) +style_select_entry_name: Name des Styles +style_select_entry_version: Version des Styles +style_select_entry_copy: Copyrighthinweis des Styles +style_select_entry_url: URL zum Auswählen des Styles +style_select_clear_title: Styleauswahl zurücksetzen +style_select_clear_desc: Erscheinungsbild der Löschmöglichkeit +style_select_clear_url: URL zum Löschen der Styleeinstellung diff --git a/www/lang/en_US/menu.txt b/www/lang/en_US/menu.txt index 9b910cc..878328b 100644 --- a/www/lang/en_US/menu.txt +++ b/www/lang/en_US/menu.txt @@ -312,6 +312,8 @@ page_title_tpl_player: Edit page_link_tpl_player: Flash-Player page_title_tpl_topdownloads: Edit „Top Downloads“ page_link_tpl_topdownloads: Top Downloads +page_title_tpl_styleselect: Edit „Style Selection“ +page_link_tpl_styleselect: Style Selection # Applets page_title_applets_add: add diff --git a/www/lang/en_US/template.txt b/www/lang/en_US/template.txt index c340a1a..ce6492e 100644 --- a/www/lang/en_US/template.txt +++ b/www/lang/en_US/template.txt @@ -628,3 +628,21 @@ partner_navi_body_description: Design of affiliate list in the menu. partner_navi_body_help_1: Einzelne Ausgabe aller Partner. partner_navi_body_help_2: Einzelne Ausgabe der Partner, die permanent angezeigt werden sollen. partner_navi_body_help_3: Einzelne Ausgabe der Partner, die nicht permanent angezeigt werden sollen. + + +style_select_body_title: Style Selection Body +style_select_body_desc: Design of the style selection +style_select_body_styles: List of all selectable styles +style_select_body_current: Current style selection +style_select_body_clear: Option to clear the (current) style setting +style_select_body_cookie_hint: Hint about cookie usage +style_select_entry_title: Entry +style_select_entry_desc: Design of one single entry within the style list +style_select_entry_tag: style tag (e.g. lightfrog) +style_select_entry_name: Name of the styles +style_select_entry_version: Version of the styles +style_select_entry_copy: Copyright note of the styles +style_select_entry_url: URL to select the style +style_select_clear_title: Reset Style Selection +style_select_clear_desc: Design of option to reset the style setting +style_select_clear_url: URL for resetting the style setting diff --git a/www/styles/default/left.nav b/www/styles/default/left.nav index 9d6ef7e..1736c06 100644 --- a/www/styles/default/left.nav +++ b/www/styles/default/left.nav @@ -4,6 +4,7 @@ - Mitgliederliste
- Umfragen
- Suche
+- Stylewahl

Inhalt & Media
diff --git a/www/styles/lightfrog/left.nav b/www/styles/lightfrog/left.nav index 3a71a6e..1736c06 100644 --- a/www/styles/lightfrog/left.nav +++ b/www/styles/lightfrog/left.nav @@ -4,7 +4,7 @@ - Mitgliederliste
- Umfragen
- Suche
-- Styleauswahl
+- Stylewahl

Inhalt & Media
From 8e95cd9dbf3c2071239c334ae148bfad5f8dbe2b Mon Sep 17 00:00:00 2001 From: Thoronador Date: Sat, 12 Jul 2014 00:57:53 +0200 Subject: [PATCH 05/92] implement style selection, visitor side The changes allow a visitor to select one of the installed style of the Frogsystem 2, instead of seeing the "active style" set in the admin CP. This is implemented by setting a cookie on the user's end, so the user's browser has to accept cookies for this feature. Still missing (but coming soon in one of the next commits): - possibility to undo selection (i.e. change back to standard) - template administration scripts for style selection --- www/data/style_selection.php | 68 +++++++++++++++++++++++++ www/imageviewer.php | 3 ++ www/index.php | 3 ++ www/lang/de_DE/frontend.txt | 6 +++ www/lang/en_US/frontend.txt | 6 +++ www/styles/lightfrog/0_style_select.tpl | 19 +++++++ www/styles/lightfrog/left.nav | 1 + 7 files changed, 106 insertions(+) create mode 100644 www/data/style_selection.php create mode 100644 www/styles/lightfrog/0_style_select.tpl diff --git a/www/data/style_selection.php b/www/data/style_selection.php new file mode 100644 index 0000000..cc2ac2a --- /dev/null +++ b/www/data/style_selection.php @@ -0,0 +1,68 @@ +sql()->conn()->prepare('SELECT * FROM `'.$FD->config('pref').'styles` WHERE `style_allow_use` = 1 AND `style_tag` != \'default\' AND `style_tag` = ?'); + $stmt->execute(array($_GET['new_style'])); + if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) === false) + { + $template = sys_message($FD->text('frontend', 'sysmessage'), $FD->text('frontend', 'style_not_exist')); + } + else + { + //set style via cookie, expires 14 days from now + setcookie('style', $_GET['new_style'], time()+14*86400); + $template = forward_message($FD->text('frontend', 'new_style_selected'), $FD->text('frontend', 'style_select_reload'), + url('style_selection', array())); + } + } //if new_style is set + else + { + //show list + $index = $FD->sql()->conn()->query('SELECT * FROM `'.$FD->config('pref').'styles` WHERE `style_allow_use` = 1 AND `style_tag` != \'default\''); + $styles = ''; + while (($row = $index->fetch(PDO::FETCH_ASSOC)) !== false) + { + $ini = FS2_ROOT_PATH . 'styles/' . $row['style_tag'] . '/style.ini'; + $data = array(); + if (is_readable($ini)) + { + $fa = new fileaccess(); + $ini_lines = $fa->getFileArray($ini); + unset($fa); + $ini_lines = array_map('trim', $ini_lines); + $ini_lines = array_map('htmlentities', $ini_lines); + $data['name'] = $ini_lines[0]; + $data['version'] = ( !empty($ini_lines[1]) ) ? $ini_lines[1] : ''; + $data['copy'] = ( !empty($ini_lines[2]) ) ? $ini_lines[2] : ''; + } + else + { + $data['name'] = $row['style_tag']; + $data['version'] = ''; + $data['copy'] = ''; + } + + $template = new template(); + $template->setFile('0_style_select.tpl'); + $template->load('ENTRY'); + + $template->tag('tag', $row['style_tag']); + $template->tag('name', $data['name']); + $template->tag('version', $data['version']); + $template->tag('copy', $data['copy']); + $template->tag('url', url('style_selection', array('new_style' => $row['style_tag']))); + + $styles .= $template->display(); + }//while + + $template = new template(); + $template->setFile('0_style_select.tpl'); + $template->load('BODY'); + + $template->tag('styles', $styles ); + $template->tag('cookie_hint', $FD->text('frontend', 'style_select_cookie_hint') ); + + $template = $template->display (); + } //else +?> diff --git a/www/imageviewer.php b/www/imageviewer.php index b0a1762..1023051 100644 --- a/www/imageviewer.php +++ b/www/imageviewer.php @@ -21,6 +21,9 @@ userlogin(); setTimezone($FD->cfg('timezone')); run_cronjobs(); +if (isset($_COOKIE['style']) && !isset($_GET['style'])) { + $_GET['style'] = $_COOKIE['style']; +} set_style(); // Security Functions diff --git a/www/index.php b/www/index.php index 655bad0..2e98dfb 100644 --- a/www/index.php +++ b/www/index.php @@ -28,6 +28,9 @@ if (!$FD->configExists('main', 'count_referers') || $FD->cfg('main', 'count_referers')==1) { save_referer(); } +if (isset($_COOKIE['style']) && !isset($_GET['style'])) { + $_GET['style'] = $_COOKIE['style']; +} set_style(); copyright(); $APP = load_applets(); diff --git a/www/lang/de_DE/frontend.txt b/www/lang/de_DE/frontend.txt index 33a79ec..299827d 100644 --- a/www/lang/de_DE/frontend.txt +++ b/www/lang/de_DE/frontend.txt @@ -134,3 +134,9 @@ video: Video # poll multiple_choice: Mehrfachauswahl single_choice: Einzelauswahl + +# style selection +style_not_exist: Der angegebene Style existiert nicht. +new_style_selected: Neuer Style ausgewählt +style_select_reload: Die Styleauswahl wird erst nach dem Neuladen der Seite aktiv. +style_select_cookie_hint: Hinweis: Damit diese Styleauswahl korrekt funktioniert, muss der Browser so eingestellt sein, dass er Cookies von dieser Seite akzeptiert. diff --git a/www/lang/en_US/frontend.txt b/www/lang/en_US/frontend.txt index 8f066f3..76bff02 100644 --- a/www/lang/en_US/frontend.txt +++ b/www/lang/en_US/frontend.txt @@ -134,3 +134,9 @@ video: Video # poll multiple_choice: Multiple choice single_choice: Single choice + +# style selection +style_not_exist: The requested style does not exist. +new_style_selected: New style selected +style_select_reload: The style selection will take effect after the site has been reloaded. +style_select_cookie_hint: Hint: Your browser must configured to accept cookies from this site. Otherwise the style selection will not work properly. diff --git a/www/styles/lightfrog/0_style_select.tpl b/www/styles/lightfrog/0_style_select.tpl new file mode 100644 index 0000000..06bca0f --- /dev/null +++ b/www/styles/lightfrog/0_style_select.tpl @@ -0,0 +1,19 @@ +Verfügbare Styles +

+ + + {..styles..} +
+ +

+{..cookie_hint..} + + + + + {..tag..}
+ {..name..} {..version..}
+
{..copy..}
+ + +   diff --git a/www/styles/lightfrog/left.nav b/www/styles/lightfrog/left.nav index 9d6ef7e..3a71a6e 100644 --- a/www/styles/lightfrog/left.nav +++ b/www/styles/lightfrog/left.nav @@ -4,6 +4,7 @@ - Mitgliederliste
- Umfragen
- Suche
+- Styleauswahl

Inhalt & Media
From afd995cecd88acb7d92dc6361831eb9e8e9d500f Mon Sep 17 00:00:00 2001 From: Thoronador Date: Sun, 13 Jul 2014 19:48:37 +0200 Subject: [PATCH 06/92] possibility to clear style selection --- www/data/style_selection.php | 26 ++++++++++++++++++++++++ www/lang/de_DE/frontend.txt | 2 ++ www/lang/en_US/frontend.txt | 2 ++ www/styles/default/0_style_select.tpl | 27 +++++++++++++++++++++++++ www/styles/lightfrog/0_style_select.tpl | 8 ++++++++ 5 files changed, 65 insertions(+) create mode 100644 www/styles/default/0_style_select.tpl diff --git a/www/data/style_selection.php b/www/data/style_selection.php index cc2ac2a..1392c1e 100644 --- a/www/data/style_selection.php +++ b/www/data/style_selection.php @@ -1,4 +1,8 @@ loadConfig('main'); + $main_config = $FD->configObject('main')->getConfigArray(); + $current_tag = $main_config['style_tag']; + //change selected style if (isset($_GET['new_style'])) { @@ -16,6 +20,13 @@ url('style_selection', array())); } } //if new_style is set + else if (isset($_GET['clear'])) + { + //delete style cookie, "expires" 100 days ago + setcookie('style', '', time()-100*86400); + $template = forward_message($FD->text('frontend', 'style_select_clear'), $FD->text('frontend', 'style_select_reload'), + url('style_selection', array())); + } //if clear / delete cookie else { //show list @@ -56,11 +67,26 @@ $styles .= $template->display(); }//while + $clear = ''; + if (isset($_COOKIE['style'])) + { + $template = new template(); + $template->setFile('0_style_select.tpl'); + $template->load('CLEAR'); + + $template->tag('clear_url', url('style_selection', array('clear' => 1)) ); + + $clear = $template->display(); + } + $template = new template(); $template->setFile('0_style_select.tpl'); $template->load('BODY'); + $current = isset($_COOKIE['style']) ? htmlentities($_COOKIE['style']) : $FD->text('frontend', 'none').' ('.htmlentities($current_tag).')'; $template->tag('styles', $styles ); + $template->tag('current', $current ); + $template->tag('clear_selection', $clear ); $template->tag('cookie_hint', $FD->text('frontend', 'style_select_cookie_hint') ); $template = $template->display (); diff --git a/www/lang/de_DE/frontend.txt b/www/lang/de_DE/frontend.txt index 299827d..e1849fd 100644 --- a/www/lang/de_DE/frontend.txt +++ b/www/lang/de_DE/frontend.txt @@ -140,3 +140,5 @@ style_not_exist: Der angegebene Style existiert nicht. new_style_selected: Neuer Style ausgewählt style_select_reload: Die Styleauswahl wird erst nach dem Neuladen der Seite aktiv. style_select_cookie_hint: Hinweis: Damit diese Styleauswahl korrekt funktioniert, muss der Browser so eingestellt sein, dass er Cookies von dieser Seite akzeptiert. +style_select_clear: Styleauswahl gelöscht +none: keine diff --git a/www/lang/en_US/frontend.txt b/www/lang/en_US/frontend.txt index 76bff02..9bd7267 100644 --- a/www/lang/en_US/frontend.txt +++ b/www/lang/en_US/frontend.txt @@ -140,3 +140,5 @@ style_not_exist: The requested style does not exist. new_style_selected: New style selected style_select_reload: The style selection will take effect after the site has been reloaded. style_select_cookie_hint: Hint: Your browser must configured to accept cookies from this site. Otherwise the style selection will not work properly. +style_select_clear: Style selection cleared +none: none diff --git a/www/styles/default/0_style_select.tpl b/www/styles/default/0_style_select.tpl new file mode 100644 index 0000000..ac8c759 --- /dev/null +++ b/www/styles/default/0_style_select.tpl @@ -0,0 +1,27 @@ +Verfügbare Styles +

+ + + {..styles..} +
+ +

+ +Aktuelle Auswahl: {..current..} +{..clear_selection..} +

+{..cookie_hint..} + + + + + {..tag..}
+ {..name..} {..version..}
+
{..copy..}
+ + +   + +
+⇒ Auswahl löschen + diff --git a/www/styles/lightfrog/0_style_select.tpl b/www/styles/lightfrog/0_style_select.tpl index 06bca0f..ac8c759 100644 --- a/www/styles/lightfrog/0_style_select.tpl +++ b/www/styles/lightfrog/0_style_select.tpl @@ -5,6 +5,10 @@ {..styles..} +

+ +Aktuelle Auswahl: {..current..} +{..clear_selection..}

{..cookie_hint..} @@ -17,3 +21,7 @@   + +
+⇒ Auswahl löschen + From 187971245feabcbd396606888d8e5372c6275e39 Mon Sep 17 00:00:00 2001 From: Thoronador Date: Mon, 14 Jul 2014 00:37:19 +0200 Subject: [PATCH 07/92] template administration for style selection --- db.sql | 1 + www/admin/admin_template_styleselect.php | 48 ++++++++++++++++++++++++ www/lang/de_DE/menu.txt | 2 + www/lang/de_DE/template.txt | 18 +++++++++ www/lang/en_US/menu.txt | 2 + www/lang/en_US/template.txt | 18 +++++++++ www/styles/default/left.nav | 1 + www/styles/lightfrog/left.nav | 2 +- 8 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 www/admin/admin_template_styleselect.php diff --git a/db.sql b/db.sql index b42f831..26b9703 100644 --- a/db.sql +++ b/db.sql @@ -150,6 +150,7 @@ INSERT INTO `fs2_admin_cp` (`page_id`, `group_id`, `page_file`, `page_pos`, `pag ('tpl_fscodes', 'templates', 'admin_editor_fscode.php', 14, 0), ('tpl_player', 'templates', 'admin_template_player.php', 20, 0), ('tpl_topdownloads', 'templates', 'admin_template_topdownloads.php', 25, 0), +('tpl_styleselect', 'templates', 'admin_template_styleselect.php', 26, 0), ('user_config', 'users', 'admin_user_config.php', 1, 0), ('user_add', 'users', 'admin_user_add.php', 2, 0), ('user_edit', 'users', 'admin_user_edit.php', 3, 0), diff --git a/www/admin/admin_template_styleselect.php b/www/admin/admin_template_styleselect.php new file mode 100644 index 0000000..d06cc7b --- /dev/null +++ b/www/admin/admin_template_styleselect.php @@ -0,0 +1,48 @@ + 'BODY', + 'title' => $FD->text('template', 'style_select_body_title'), + 'description' => $FD->text('template', 'style_select_body_desc'), + 'rows' => 15, + 'cols' => 66, + 'help' => array ( + array ( 'tag' => 'styles', 'text' => $FD->text('template', 'style_select_body_styles') ), + array ( 'tag' => 'current', 'text' => $FD->text('template', 'style_select_body_current') ), + array ( 'tag' => 'clear_selection', 'text' => $FD->text('template', 'style_select_body_clear') ), + array ( 'tag' => 'cookie_hint', 'text' => $FD->text('template', 'style_select_body_cookie_hint') ), + ) +); + +$TEMPLATE_EDIT[] = array ( + 'name' => 'ENTRY', + 'title' => $FD->text('template', 'style_select_entry_title'), + 'description' => $FD->text('template', 'style_select_entry_desc'), + 'rows' => 10, + 'cols' => 66, + 'help' => array ( + array ( 'tag' => 'tag', 'text' => $FD->text('template', 'style_select_entry_tag') ), + array ( 'tag' => 'name', 'text' => $FD->text('template', 'style_select_entry_name') ), + array ( 'tag' => 'version', 'text' => $FD->text('template', 'style_select_entry_version') ), + array ( 'tag' => 'copy', 'text' => $FD->text('template', 'style_select_entry_copy') ), + array ( 'tag' => 'url', 'text' => $FD->text('template', 'style_select_entry_url') ) + ) +); + +$TEMPLATE_EDIT[] = array ( + 'name' => 'CLEAR', + 'title' => $FD->text('template', 'style_select_clear_title'), + 'description' => $FD->text('template', 'style_select_clear_desc'), + 'rows' => 5, + 'cols' => 66, + 'help' => array ( + array ( 'tag' => 'clear_url', 'text' => $FD->text('template', 'style_select_clear_url') ) + ) +); + +echo templatepage_init ($TEMPLATE_EDIT, $TEMPLATE_GO, $TEMPLATE_FILE); +?> diff --git a/www/lang/de_DE/menu.txt b/www/lang/de_DE/menu.txt index ba7fd69..45ecd57 100644 --- a/www/lang/de_DE/menu.txt +++ b/www/lang/de_DE/menu.txt @@ -312,6 +312,8 @@ page_title_tpl_player: page_link_tpl_player: Flash-Player page_title_tpl_topdownloads: „Top Downloads“ bearbeiten page_link_tpl_topdownloads: Top Downloads +page_title_tpl_styleselect: „Styleauswahl“ bearbeiten +page_link_tpl_styleselect: Styleauswahl # Applets page_title_applets_add: hinzufügen diff --git a/www/lang/de_DE/template.txt b/www/lang/de_DE/template.txt index 548c722..e4fe6b9 100644 --- a/www/lang/de_DE/template.txt +++ b/www/lang/de_DE/template.txt @@ -628,3 +628,21 @@ partner_navi_body_description: Aussehen der Partnerliste im Men partner_navi_body_help_1: Einzelne Ausgabe aller Partner. partner_navi_body_help_2: Einzelne Ausgabe der Partner, die permanent angezeigt werden sollen. partner_navi_body_help_3: Einzelne Ausgabe der Partner, die nicht permanent angezeigt werden sollen. + + +style_select_body_title: Styleauswahl Body +style_select_body_desc: Das Erscheinungsbild der Styleauswahl +style_select_body_styles: Liste aller auswählbaren Styles +style_select_body_current: Aktuelle Styleauswahl +style_select_body_clear: Option zum Löschen der Styleeinstellung +style_select_body_cookie_hint: Hinweis zur Cookienutzung +style_select_entry_title: Eintrag +style_select_entry_desc: Erscheinungsbild eines einzelnen Eintrags in der Liste +style_select_entry_tag: Style-Tag (z.B. lightfrog) +style_select_entry_name: Name des Styles +style_select_entry_version: Version des Styles +style_select_entry_copy: Copyrighthinweis des Styles +style_select_entry_url: URL zum Auswählen des Styles +style_select_clear_title: Styleauswahl zurücksetzen +style_select_clear_desc: Erscheinungsbild der Löschmöglichkeit +style_select_clear_url: URL zum Löschen der Styleeinstellung diff --git a/www/lang/en_US/menu.txt b/www/lang/en_US/menu.txt index 9b910cc..878328b 100644 --- a/www/lang/en_US/menu.txt +++ b/www/lang/en_US/menu.txt @@ -312,6 +312,8 @@ page_title_tpl_player: Edit page_link_tpl_player: Flash-Player page_title_tpl_topdownloads: Edit „Top Downloads“ page_link_tpl_topdownloads: Top Downloads +page_title_tpl_styleselect: Edit „Style Selection“ +page_link_tpl_styleselect: Style Selection # Applets page_title_applets_add: add diff --git a/www/lang/en_US/template.txt b/www/lang/en_US/template.txt index c340a1a..ce6492e 100644 --- a/www/lang/en_US/template.txt +++ b/www/lang/en_US/template.txt @@ -628,3 +628,21 @@ partner_navi_body_description: Design of affiliate list in the menu. partner_navi_body_help_1: Einzelne Ausgabe aller Partner. partner_navi_body_help_2: Einzelne Ausgabe der Partner, die permanent angezeigt werden sollen. partner_navi_body_help_3: Einzelne Ausgabe der Partner, die nicht permanent angezeigt werden sollen. + + +style_select_body_title: Style Selection Body +style_select_body_desc: Design of the style selection +style_select_body_styles: List of all selectable styles +style_select_body_current: Current style selection +style_select_body_clear: Option to clear the (current) style setting +style_select_body_cookie_hint: Hint about cookie usage +style_select_entry_title: Entry +style_select_entry_desc: Design of one single entry within the style list +style_select_entry_tag: style tag (e.g. lightfrog) +style_select_entry_name: Name of the styles +style_select_entry_version: Version of the styles +style_select_entry_copy: Copyright note of the styles +style_select_entry_url: URL to select the style +style_select_clear_title: Reset Style Selection +style_select_clear_desc: Design of option to reset the style setting +style_select_clear_url: URL for resetting the style setting diff --git a/www/styles/default/left.nav b/www/styles/default/left.nav index 9d6ef7e..1736c06 100644 --- a/www/styles/default/left.nav +++ b/www/styles/default/left.nav @@ -4,6 +4,7 @@ - Mitgliederliste
- Umfragen
- Suche
+- Stylewahl

Inhalt & Media
diff --git a/www/styles/lightfrog/left.nav b/www/styles/lightfrog/left.nav index 3a71a6e..1736c06 100644 --- a/www/styles/lightfrog/left.nav +++ b/www/styles/lightfrog/left.nav @@ -4,7 +4,7 @@ - Mitgliederliste
- Umfragen
- Suche
-- Styleauswahl
+- Stylewahl

Inhalt & Media
From 93b7c27b48cc4fd649b4708767d2c53601acce42 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Sat, 3 Jan 2015 11:02:56 +1300 Subject: [PATCH 08/92] fixed /e deprecation Signed-off-by: Moritz Kornher --- www/includes/indexfunctions.php | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/www/includes/indexfunctions.php b/www/includes/indexfunctions.php index 378a9e0..c4263c9 100644 --- a/www/includes/indexfunctions.php +++ b/www/includes/indexfunctions.php @@ -500,22 +500,20 @@ function tpl_functions ($TEMPLATE, $COUNT, $filter=array(), $loopend_escape = tr $functions = array_filter_keys($functions, $filter); $snippet_functions = array_filter_keys($snippet_functions, $filter); } - - +echo '
';
     // Set Pattern and Replacment Code
-    $PATTERN = $REPLACEMENT = array();
+    // Replace Functions with computed values
     if (!empty($functions)) {
-        array_push($PATTERN, '/\$('.implode('|', array_keys($functions)).')\((?|(?:"(.*?)")|(.*?))(?:\[(?|(?:"(.*?)")|(.*?))\]){0,1}\)/e');
-        array_push($REPLACEMENT, 'call_tpl_function($functions, $COUNT, array(\'$1\', \'$0\', \'$2\', \'$3\'), $loopend_escape);');
+        $PATTERN = '/\$('.implode('|', array_keys($functions)).')\((?|(?:"(.*?)")|(.*?))(?|\[(?|(?:"(.*?)")|(.*?))\]|()){0,1}\)/';
+        $REPLACEMENT = create_function('$data', 'return call_tpl_function('.var_export($functions, true).', '.var_export($COUNT, true).', array($data[1], $data[0], $data[2], $data[3]), '.var_export($loopend_escape, true).');');
+        $TEMPLATE = preg_replace_callback($PATTERN, $REPLACEMENT, $TEMPLATE);
     }
     if (!empty($snippet_functions)) {
-        array_push($PATTERN, '/\[%(.*?)%\]/e');
-        array_push($REPLACEMENT, 'call_tpl_function($snippet_functions, $COUNT, array("SNP", "$0", "$1", ""), $loopend_escape);');
+        $PATTERN = '/\[%(.*?)%\]/';
+        $REPLACEMENT = create_function('$data', 'return call_tpl_function('.var_export($snippet_functions, true).', '.var_export($COUNT, true).', array("SNP", $data[0], $data[1], ""), '.var_export($loopend_escape, true).');');
+        $TEMPLATE = preg_replace_callback($PATTERN, $REPLACEMENT, $TEMPLATE);
     }
-
-    // Replace Functions with computed values
-    $TEMPLATE = preg_replace($PATTERN, $REPLACEMENT, $TEMPLATE);
-
+echo '
'; return $TEMPLATE; } From 1320fe0330179f566e4244c77080101e0da7a5e0 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Sun, 4 Jan 2015 16:07:27 +1300 Subject: [PATCH 09/92] changed config structure added main-example.cfg.php added Frogsystem2 main class Signed-off-by: Moritz Kornher --- www/config/db_connection.php | 14 -- www/config/main-example.cfg.php | 22 +++ www/includes/fscode.php | 2 +- www/includes/functions.php | 3 - www/includes/newfunctions.php | 5 +- www/includes/phpinit.php | 40 ------ www/index.php | 61 ++------ www/libs/class_Frogsystem2.php | 246 ++++++++++++++++++++++++++++++++ www/libs/class_GlobalData.php | 6 +- www/libs/functions.php | 18 +++ www/login.inc.php | 90 ------------ 11 files changed, 302 insertions(+), 205 deletions(-) delete mode 100644 www/config/db_connection.php create mode 100644 www/config/main-example.cfg.php delete mode 100644 www/includes/phpinit.php create mode 100644 www/libs/class_Frogsystem2.php create mode 100644 www/libs/functions.php delete mode 100644 www/login.inc.php diff --git a/www/config/db_connection.php b/www/config/db_connection.php deleted file mode 100644 index a421ff9..0000000 --- a/www/config/db_connection.php +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/www/config/main-example.cfg.php b/www/config/main-example.cfg.php new file mode 100644 index 0000000..1f233fc --- /dev/null +++ b/www/config/main-example.cfg.php @@ -0,0 +1,22 @@ + diff --git a/www/includes/fscode.php b/www/includes/fscode.php index 1e75ebe..ce54195 100644 --- a/www/includes/fscode.php +++ b/www/includes/fscode.php @@ -1,5 +1,5 @@ '; $string .= print_r($text, true); @@ -496,5 +500,4 @@ function print_d ($text, $return = false) { } } - ?> diff --git a/www/includes/phpinit.php b/www/includes/phpinit.php deleted file mode 100644 index 8b8b2b6..0000000 --- a/www/includes/phpinit.php +++ /dev/null @@ -1,40 +0,0 @@ - diff --git a/www/index.php b/www/index.php index 2e98dfb..b6a026c 100644 --- a/www/index.php +++ b/www/index.php @@ -1,55 +1,10 @@ cfg('timezone')); -run_cronjobs(); -count_all($FD->cfg('goto')); -save_visitors(); -if (!$FD->configExists('main', 'count_referers') || $FD->cfg('main', 'count_referers')==1) { - save_referer(); -} -if (isset($_COOKIE['style']) && !isset($_GET['style'])) { - $_GET['style'] = $_COOKIE['style']; -} -set_style(); -copyright(); -$APP = load_applets(); - -// Get Body-Template -$theTemplate = new template(); -$theTemplate->setFile('0_main.tpl'); -$theTemplate->load('MAIN'); -$theTemplate->tag('content', get_content($FD->cfg('goto'))); -$theTemplate->tag('copyright', get_copyright()); - -$template_general = (string) $theTemplate; -// TODO: "Template Manipulation Hook" - -// Display Page -echo tpl_functions_init(get_maintemplate($template_general)); - - -// Shutdown System -// TODO: "Shutdown Hook" -unset($FD); +// Getting config +@include_once($_ENV['FS2CONFIG'] ?: __DIR__.'/config/main.cfg.php'); +@define('FS2SOURCE', __DIR__); + +// Deploy page +require_once(FS2SOURCE . '/libs/class_Frogsystem2.php'); +$FS2 = new Frogsystem2(__DIR__); +$FS2->deploy(); ?> diff --git a/www/libs/class_Frogsystem2.php b/www/libs/class_Frogsystem2.php new file mode 100644 index 0000000..f4a83d1 --- /dev/null +++ b/www/libs/class_Frogsystem2.php @@ -0,0 +1,246 @@ +root = $root; + + // include functions and Exceptions + require_once(FS2SOURCE . '/classes/exceptions.php'); + require_once(FS2SOURCE . '/libs/functions.php'); + + // Init the class + $this->init(); + } + + public function init() { + + // Set constants + define('FS2ROOT', $this->root); + define('FS2_ROOT_PATH', FS2ROOT.'/', true); // DEPRECATED + + // Content Constants + @define('FS2CONTENT', FS2ROOT); + @define('FS2APPLETS', FS2CONTENT.'/applets'); + @define('FS2CONFIG', FS2ROOT.'/config'); + @define('FS2LANG', FS2CONTENT.'/lang'); + @define('FS2MEDIA', FS2CONTENT.'/media'); + @define('FS2STYLES', FS2CONTENT.'/styles'); + @define('FS2UPLOAD', FS2CONTENT.'/upload'); + + // Defaults for other constants + @define('IS_SATELLITE', false); + @define('FS2_DEBUG', false); + @define('FS2_ENV', 'production'); + + // Disable error_reporting + if (!FS2_DEBUG) { + error_reporting(0); + } + + // Disable magic_quotes_runtime + if (get_magic_quotes_gpc() || get_magic_quotes_runtime()) { + ini_set('magic_quotes_gpc', 0); + ini_set('magic_quotes_runtime', 0); + } + + // Register autoloader: libloader + spl_autoload_register(array($this, 'libloader')); + + // Set default include path + set_include_path(FS2ROOT); + + return $this; + } + + public function header($content, $replace = false, $http_response_code = null) { + header($content, $replace, $http_response_code); + return $this; + } + + + private function libloader($classname) { + $class = explode("\\", $classname); + $filepath = FS2ROOT.'/libs/class_'.end($class).'.php'; + if (file_exists($filepath)) { + include_once($filepath); + } else { + return false; + } + } + + public function initSession() { + // Start Session + session_start(); + + // Init some Session values + $_SESSION['user_level'] = !isset($_SESSION['user_level']) ? 'unknown' : $_SESSION['user_level']; + + //TODO: Session Init Hook + + return $this; + } + + public function deploy() { + if (@constant('INDEX_NO_DEPLOYMENT')) { + return; + } + + global $FD, $APP; + $this->initSession(); + + + //Anti-Spam Encryption-Code + $spam = 'wKAztWWB2Z'; + + // TODO: Pre-Import Hook + require_once(FS2CONFIG . '/db.cfg.php'); + + // TODO: Pre-Connection Hook + global $sql; + + try { + + // Connect to DB-Server + $sql = new sql($dbc['host'], $dbc['data'], $dbc['user'], $dbc['pass'], $dbc['pref']); + + // Frogsystem Global Data Array + $FD = new GlobalData($sql); + + // Unset unused vars + unset($spam, $dbc); + + // DB Connection failed //// + } catch (Exception $e) { + $this->fail($e); + return; + } + + + + // Constructor Calls + // TODO: "Constructor Hook" + + get_goto(); + userlogin(); + setTimezone($FD->cfg('timezone')); + run_cronjobs(); + count_all($FD->cfg('goto')); + save_visitors(); + if (!$FD->configExists('main', 'count_referers') || $FD->cfg('main', 'count_referers')==1) { + save_referer(); + } + if (isset($_COOKIE['style']) && !isset($_GET['style'])) { + $_GET['style'] = $_COOKIE['style']; + } + set_style(); + copyright(); + $APP = load_applets(); + + // Get Body-Template + $theTemplate = new template(); + $theTemplate->setFile('0_main.tpl'); + $theTemplate->load('MAIN'); + $theTemplate->tag('content', get_content($FD->cfg('goto'))); + $theTemplate->tag('copyright', get_copyright()); + + $template_general = (string) $theTemplate; + // TODO: "Template Manipulation Hook" + + // Display Page + echo tpl_functions_init(get_maintemplate($template_general)); + + + // Shutdown System + // TODO: "Shutdown Hook" + $this->__destruct(); + } + + public function __destruct() { + global $FD; + unset($FD); + } + + private function fail($exception) { + // log connection error + error_log($exception->getMessage(), 0); + + // Set header + $this->header(http_response_text(503), true, 503); + $this->header('Retry-After: '.(string)(60*15)); // 15 Minutes + + // Include lang-class + require_once(FS2SOURCE . '/libs/class_lang.php'); + + // get language + $lang = $this->detectUserLanguage(); + $TEXT = new lang($lang, 'frontend'); + + // No-Connection-Page Template + $template = ' + + + + '.$TEXT->get("no_connection").' + + +

+ '.$TEXT->get("no_connection_to_the_server").' +

+ + + '; + + // Display No-Connection-Page + echo $template; + $this->__destruct(); + } + + private function detectUserLanguage($default = 'de_DE') { + $langs = array(); + unset($_SESSION['user_lang']); + if (!isset($_SESSION['user_lang']) && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { + // break up string into pieces (languages and q factors) + preg_match_all('/([a-z]{1,8}(?:-([a-z]{1,8}))?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse); + //~ var_dump($lang_parse); + if (count($lang_parse[1])) { + // create a list like "en" => 0.8 + $langs = array_combine($lang_parse[1], $lang_parse[4]); + + // set default to 1 for any without q factor + foreach ($langs as $lang => $val) { + if ($val === '') $langs[$lang] = 1; + } + + // sort list based on value + arsort($langs, SORT_NUMERIC); + } + } + + foreach ($langs as $lang => $p) { + switch ($lang) { + case 'en': + return 'en_US'; + case 'de': + return 'de_DE'; + } + } + + return $default; + } +} + +?> diff --git a/www/libs/class_GlobalData.php b/www/libs/class_GlobalData.php index 9735d87..dfe8e18 100644 --- a/www/libs/class_GlobalData.php +++ b/www/libs/class_GlobalData.php @@ -66,7 +66,7 @@ private function reloadConfig($name, $data = null, $json = false) { public function loadConfigsByHook($hook, $reload = false) { // include ConfigData - require_once(FS2_ROOT_PATH . 'libs/class_ConfigData.php'); + require_once(FS2SOURCE . '/libs/class_ConfigData.php'); // Load configs from DB $data = $this->sql->conn()->prepare( @@ -85,8 +85,8 @@ public function loadConfigsByHook($hook, $reload = false) { private function createConfigObject($name, $data, $json) { // Load corresponding class and get config array $class_name = "Config".ucfirst(strtolower($name)); - require_once(FS2_ROOT_PATH.'libs/class_ConfigData.php'); - @include_once(FS2_ROOT_PATH.'classes/config/'.$class_name.'.php'); + require_once(FS2SOURCE.'/libs/class_ConfigData.php'); + @include_once(FS2SOURCE.'/classes/config/'.$class_name.'.php'); if (!class_exists($class_name, false)) $class_name = 'ConfigData'; return new $class_name($data, $json); diff --git a/www/libs/functions.php b/www/libs/functions.php new file mode 100644 index 0000000..1ff692e --- /dev/null +++ b/www/libs/functions.php @@ -0,0 +1,18 @@ + diff --git a/www/login.inc.php b/www/login.inc.php deleted file mode 100644 index 1d8a39d..0000000 --- a/www/login.inc.php +++ /dev/null @@ -1,90 +0,0 @@ -getMessage(), 0); - - // Set header - header(http_response_text(503), true, 503); - header('Retry-After: '.(string)(60*15)); // 15 Minutes - - // Include lang-class - require_once(FS2_ROOT_PATH . 'libs/class_lang.php'); - - // get language - $de = strpos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'de'); - $en = strpos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'en'); - - if ($de !== false && $de < $en) - $TEXT = new lang ('de_DE', 'frontend'); - else - $TEXT = new lang ('en_US', 'frontend'); - - // No-Connection-Page Template - $template = ' - - - - '.$TEXT->get("no_connection").' - - -

- '.$TEXT->get("no_connection_to_the_server").' -

- - - '; - - // Display No-Connection-Page - echo $template; - exit(); -} - -//////////////////////// -//// Init Some Vars //// -//////////////////////// - -//TODO: First Init Hook - -$_SESSION['user_level'] = !isset($_SESSION['user_level']) ? 'unknown' : $_SESSION['user_level']; -?> From 52770d2c8cd50474220f4905612f10964e75b9a7 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Sun, 4 Jan 2015 18:16:54 +1300 Subject: [PATCH 10/92] replaced source path Signed-off-by: Moritz Kornher --- .gitignore | 1 + www/admin/admin_applets_add.php | 4 +-- www/admin/admin_articles_add.php | 2 +- www/admin/admin_articles_edit.php | 4 +-- www/admin/admin_captcha_config.php | 2 +- www/admin/admin_cimgdel.php | 2 +- www/admin/admin_cimgimport.php | 4 +-- www/admin/admin_dladd.php | 2 +- www/admin/admin_dledit.php | 4 +-- www/admin/admin_find_applet.php | 2 +- www/admin/admin_general_config.php | 4 +-- www/admin/admin_logout.php | 2 +- www/admin/admin_news_add.php | 2 +- www/admin/admin_news_comments_list.php | 10 +++---- www/admin/admin_news_edit.php | 4 +-- www/admin/admin_search_index.php | 2 +- www/admin/admin_style_add.php | 6 ++-- www/admin/admin_style_management.php | 16 +++++------ www/classes/downloads/dlcomments.php | 2 +- www/data/comments.php | 2 +- www/data/dlfile.php | 4 +-- www/data/register.php | 2 +- www/data/search.php | 4 +-- www/data/style_selection.php | 2 +- www/data/user_edit.php | 2 +- www/feeds/atom10.php | 19 +------------ www/feeds/news-sitemap.php | 22 +------------- www/feeds/rss091.php | 17 ----------- www/feeds/rss10.php | 18 ------------ www/feeds/rss20.php | 18 ------------ www/feeds/sitemap-index.php | 18 ------------ www/feeds/sitemap.php | 19 ------------- www/includes/fscode.php | 4 +-- www/includes/functions.php | 2 +- www/includes/indexfunctions.php | 30 ++++++++++---------- www/includes/newfunctions.php | 4 --- www/includes/searchfunctions.php | 2 +- www/includes/templatefunctions.php | 10 +++---- www/libs/class_Feed.php | 2 +- www/libs/class_Frogsystem2.php | 4 +-- www/libs/class_MailManager.php | 4 +-- www/libs/class_Search.php | 4 +-- www/libs/class_SearchQuery.php | 4 +-- www/libs/class_SearchTree.php | 2 +- www/libs/class_adminpage.php | 2 +- www/libs/class_lang.php | 6 ++-- www/libs/class_template.php | 6 ++-- www/resources/spamdetector/eval_spam.inc.php | 2 +- 48 files changed, 90 insertions(+), 220 deletions(-) diff --git a/.gitignore b/.gitignore index 2453cf1..e559d4c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ Thumbs.db /update-database.bat /dump-database.bat +/www/config/main.cfg.php diff --git a/www/admin/admin_applets_add.php b/www/admin/admin_applets_add.php index 0052617..90ca428 100644 --- a/www/admin/admin_applets_add.php +++ b/www/admin/admin_applets_add.php @@ -16,7 +16,7 @@ if ( isset ( $_POST['applet_file'] ) && $_POST['applet_file'] != '' - && file_exists ( FS2_ROOT_PATH . 'applets/' . $_POST['applet_file'] . '.php' ) + && file_exists ( FS2SOURCE . '/applets/' . $_POST['applet_file'] . '.php' ) ) { @@ -71,7 +71,7 @@ // Check for Errors if ( isset ( $_POST['sended'] ) ) { - if ( isset ( $_POST['applet_file'] ) && $_POST['applet_file'] != '' && !file_exists ( FS2_ROOT_PATH . 'applets/' . $_POST['applet_file'] . '.php' ) ) { + if ( isset ( $_POST['applet_file'] ) && $_POST['applet_file'] != '' && !file_exists ( FS2SOURCE . '/applets/' . $_POST['applet_file'] . '.php' ) ) { $error_message = $FD->text("admin", "applet_file_not_exists"); } else { $error_message = $FD->text("admin", "form_not_filled"); diff --git a/www/admin/admin_articles_add.php b/www/admin/admin_articles_add.php index b7825c9..4d7ebe9 100644 --- a/www/admin/admin_articles_add.php +++ b/www/admin/admin_articles_add.php @@ -64,7 +64,7 @@ // Update Search Index (or not) if ( $FD->config('cronjobs', 'search_index_update') === 1 ) { // Include searchfunctions.php - require ( FS2_ROOT_PATH . 'includes/searchfunctions.php' ); + require ( FS2SOURCE . '/includes/searchfunctions.php' ); update_search_index ( 'articles' ); } diff --git a/www/admin/admin_articles_edit.php b/www/admin/admin_articles_edit.php index f01033e..56889ca 100644 --- a/www/admin/admin_articles_edit.php +++ b/www/admin/admin_articles_edit.php @@ -722,7 +722,7 @@ function db_edit_article ( $DATA ) // Update Search Index (or not) if ( $FD->config('cronjobs', 'search_index_update') === 1 ) { // Include searchfunctions.php - require_once ( FS2_ROOT_PATH . 'includes/searchfunctions.php' ); + require_once ( FS2SOURCE . '/includes/searchfunctions.php' ); update_search_index ( 'articles' ); } @@ -745,7 +745,7 @@ function db_delete_article ( $DATA ) LIMIT 1"); // Delete from Search Index - require_once ( FS2_ROOT_PATH . 'includes/searchfunctions.php' ); + require_once ( FS2SOURCE . '/includes/searchfunctions.php' ); delete_search_index_for_one ( $DATA['article_id'], 'articles' ); // Update Counter diff --git a/www/admin/admin_captcha_config.php b/www/admin/admin_captcha_config.php index 0f04a78..8f0c525 100644 --- a/www/admin/admin_captcha_config.php +++ b/www/admin/admin_captcha_config.php @@ -275,7 +275,7 @@ '; - $php_fonts = scandir_ext ( FS2_ROOT_PATH . 'media/php-fonts', 'gdf'); + $php_fonts = scandir_ext ( FS2MEDIA . '/php-fonts', 'gdf'); foreach ( $php_fonts as $php_font ) { echo ' diff --git a/www/admin/admin_cimgdel.php b/www/admin/admin_cimgdel.php index 3bb2bdd..b6f85fb 100644 --- a/www/admin/admin_cimgdel.php +++ b/www/admin/admin_cimgdel.php @@ -1,6 +1,6 @@ config('cronjobs', 'search_index_update') === 1 ) { // Include searchfunctions.php - require ( FS2_ROOT_PATH . 'includes/searchfunctions.php' ); + require ( FS2SOURCE . 'includes/searchfunctions.php' ); update_search_index ( 'dl' ); } diff --git a/www/admin/admin_dledit.php b/www/admin/admin_dledit.php index e8554a0..8007e82 100644 --- a/www/admin/admin_dledit.php +++ b/www/admin/admin_dledit.php @@ -18,7 +18,7 @@ systext('Download wurde gelöscht'); // Delete from Search Index - require_once ( FS2_ROOT_PATH . 'includes/searchfunctions.php' ); + require_once ( FS2SOURCE . 'includes/searchfunctions.php' ); delete_search_index_for_one ( $_POST['editdlid'], 'dl' ); } else @@ -63,7 +63,7 @@ // Update Search Index (or not) if ( $FD->config('cronjobs', 'search_index_update') === 1 ) { // Include searchfunctions.php - require_once ( FS2_ROOT_PATH . 'includes/searchfunctions.php' ); + require_once ( FS2SOURCE . 'includes/searchfunctions.php' ); update_search_index ( 'dl' ); } diff --git a/www/admin/admin_find_applet.php b/www/admin/admin_find_applet.php index b414014..19373a2 100644 --- a/www/admin/admin_find_applet.php +++ b/www/admin/admin_find_applet.php @@ -7,7 +7,7 @@ // load files -$files = scandir_ext (FS2_ROOT_PATH . 'applets', 'php'); +$files = scandir_ext (FS2APPLETS, 'php'); if (count($files) < 1) { // display error $adminpage->clearConds(); diff --git a/www/admin/admin_general_config.php b/www/admin/admin_general_config.php index e46ba23..38b5c7a 100644 --- a/www/admin/admin_general_config.php +++ b/www/admin/admin_general_config.php @@ -138,9 +138,9 @@ // languages initstr($lang_options); - $lang_dirs = scandir_filter(FS2_ROOT_PATH.'lang'); + $lang_dirs = scandir_filter(FS2LANG); foreach($lang_dirs as $lang_dir) { - if (is_dir(FS2_ROOT_PATH.'lang/'.$lang_dir) && is_language_text($lang_dir)) { + if (is_dir(FS2LANG.'/'.$lang_dir) && is_language_text($lang_dir)) { $lang_options .= ''; @@ -543,7 +543,7 @@ function get_dropdowns ( $EDITOR_NAME ) $dropdowns['snippets'] = create_dropdown ( $FD->text('admin', 'snippets'), implode ( '', $snippets_array ) ); // Navigationen - $navs_arr = scandir_ext ( FS2_ROOT_PATH . 'styles/' . $_POST['style'], 'nav' ); + $navs_arr = scandir_ext ( FS2STYLES . '/' . $_POST['style'], 'nav' ); foreach ( $navs_arr as $nav ) { $the_nav = '$NAV('.$nav.')'; $navs_array[] = '$NAV('.$nav.')->'; @@ -604,7 +604,7 @@ function get_footer_line ( $EDITOR_NAME, $STYLE, $HIGHLIGHTER, $FILE, $MANYFILES ///////////////////////////// function get_original_array ( $EDITOR_NAME, $FILE, $ROWS, $COLS ) { - if ( file_exists ( FS2_ROOT_PATH . 'styles/default/' . $FILE ) ) { + if ( file_exists ( FS2SOURCE . '/styles/default/' . $FILE ) ) { $original['button'] = '
Original anzeigen diff --git a/www/libs/class_Feed.php b/www/libs/class_Feed.php index 2705376..94dce1b 100644 --- a/www/libs/class_Feed.php +++ b/www/libs/class_Feed.php @@ -257,7 +257,7 @@ protected function parseNews ($news) { global $FD; // Include functions & libs - require_once(FS2_ROOT_PATH . 'includes/fscode.php'); + require_once(FS2SOURCE . '/includes/fscode.php'); // check for latest news_date if ($news['news_date'] > $this->lastUpdate) diff --git a/www/libs/class_Frogsystem2.php b/www/libs/class_Frogsystem2.php index f4a83d1..f120064 100644 --- a/www/libs/class_Frogsystem2.php +++ b/www/libs/class_Frogsystem2.php @@ -15,8 +15,9 @@ class Frogsystem2 { private $root; public function __construct($root = '.') { - // Set internal root + // Set internal root and FS2SOURCE fallback $this->root = $root; + @define('FS2SOURCE', realpath(__DIR__.'/../')); // include functions and Exceptions require_once(FS2SOURCE . '/classes/exceptions.php'); @@ -27,7 +28,6 @@ public function __construct($root = '.') { } public function init() { - // Set constants define('FS2ROOT', $this->root); define('FS2_ROOT_PATH', FS2ROOT.'/', true); // DEPRECATED diff --git a/www/libs/class_MailManager.php b/www/libs/class_MailManager.php index 5b64414..7b4f698 100644 --- a/www/libs/class_MailManager.php +++ b/www/libs/class_MailManager.php @@ -46,11 +46,11 @@ public static function getDefaultSender() { public static function parseContent($content, $FSCODE = true, $TPL_FUNC = true) { if ($TPL_FUNC) { global $FD; - require_once(FS2_ROOT_PATH.'includes/indexfunctions.php'); + require_once(FS2SOURCE.'/includes/indexfunctions.php'); $content = tpl_functions($content, $FD->cfg('system', 'var_loop'), array('DATE', 'VAR', 'URL', 'SNP'), true); } if ($FSCODE && self::getHtmlConfig()) { - require_once(FS2_ROOT_PATH.'includes/fscode.php'); + require_once(FS2SOURCE.'/includes/fscode.php'); $content = parse_all_fscodes($content, array('html'=>true)); } diff --git a/www/libs/class_Search.php b/www/libs/class_Search.php index 667932a..a58899b 100644 --- a/www/libs/class_Search.php +++ b/www/libs/class_Search.php @@ -42,8 +42,8 @@ public function getQuery() { // constructor public function __construct ($type, $query, $phonetic = false) { // get searchtree classe if not loaded - require_once(FS2_ROOT_PATH . 'libs/class_SearchQuery.php'); - require_once(FS2_ROOT_PATH . 'includes/searchfunctions.php'); + require_once(FS2SOURCE . '/libs/class_SearchQuery.php'); + require_once(FS2SOURCE . '/includes/searchfunctions.php'); // assign global vars global $sql, $FD; diff --git a/www/libs/class_SearchQuery.php b/www/libs/class_SearchQuery.php index 6d99635..a5550da 100644 --- a/www/libs/class_SearchQuery.php +++ b/www/libs/class_SearchQuery.php @@ -32,7 +32,7 @@ class SearchQuery // constructor public function __construct ($operators = array(), $modifiers = array()) { // get searchtree classe if not loaded - require_once(FS2_ROOT_PATH . 'libs/class_SearchTree.php'); + require_once(FS2SOURCE . '/libs/class_SearchTree.php'); // assign global vars global $sql; @@ -72,7 +72,7 @@ public function getTree() { // tokenize querystring private function tokenize() { // get some search functions - require_once(FS2_ROOT_PATH . 'includes/searchfunctions.php'); + require_once(FS2SOURCE . '/includes/searchfunctions.php'); // reset tokens $this->tokens = array(); diff --git a/www/libs/class_SearchTree.php b/www/libs/class_SearchTree.php index 576906d..e85c059 100644 --- a/www/libs/class_SearchTree.php +++ b/www/libs/class_SearchTree.php @@ -32,7 +32,7 @@ class SearchOperator extends SearchTree // constructor public function __construct ($operation, $left, $right) { // get searchfunctions if not loaded - require_once(FS2_ROOT_PATH . 'includes/searchfunctions.php'); + require_once(FS2SOURCE . '/includes/searchfunctions.php'); $this->left = $left; $this->right = $right; diff --git a/www/libs/class_adminpage.php b/www/libs/class_adminpage.php index 0a9088c..f411094 100644 --- a/www/libs/class_adminpage.php +++ b/www/libs/class_adminpage.php @@ -25,7 +25,7 @@ function __construct ($pagefile) { $this->name = substr($pagefile, 0, -4); // load tpl file - $path = FS2_ROOT_PATH.'admin/templates/'.$this->name.'.tpl'; + $path = FS2SOURCE.'/admin/templates/'.$this->name.'.tpl'; if (is_readable($path)) { $this->loadTpl(file_get_contents($path)); diff --git a/www/libs/class_lang.php b/www/libs/class_lang.php index a37e34c..ea31c9e 100644 --- a/www/libs/class_lang.php +++ b/www/libs/class_lang.php @@ -22,7 +22,7 @@ class lang // constructor public function __construct ($local = false, $type = false) { global $FD; - require_once(FS2_ROOT_PATH.'includes/indexfunctions.php'); + require_once(FS2SOURCE.'/includes/indexfunctions.php'); if ($local == false) $this->local = $FD->cfg('language_text'); @@ -49,7 +49,7 @@ private function import(&$data) { $imports = array(); preg_match_all('/#@([-a-z0-9\/_]+)\\n/is', $data, $imports, PREG_SET_ORDER); foreach ($imports as $import) { - $importPath = FS2_ROOT_PATH . 'lang/' . $this->local . '/' . $import[1] . '.txt'; + $importPath = FS2LANG . '/' . $this->local . '/' . $import[1] . '.txt'; $importData = @file_get_contents($importPath); // getting file content ok @@ -70,7 +70,7 @@ private function load() { $this->phrases = array(); // set file path - $langDataPath = FS2_ROOT_PATH . 'lang/' . $this->local . '/' . $this->type . '.txt'; + $langDataPath = FS2LANG . '/' . $this->local . '/' . $this->type . '.txt'; // include language data file if (file_exists($langDataPath)) { diff --git a/www/libs/class_template.php b/www/libs/class_template.php index 81acd4c..a3d16ae 100644 --- a/www/libs/class_template.php +++ b/www/libs/class_template.php @@ -40,7 +40,7 @@ public function __construct() { // functions to set & get default values public function setStyle($style) { - if (file_exists(FS2_ROOT_PATH.'styles/'.$style)) { + if (file_exists(FS2STYLES.'/'.$style)) { $this->style = $style; } else { $this->style = 'default'; @@ -59,7 +59,7 @@ public function getCloser() { } public function setFile($file) { - if ( is_readable ( FS2_ROOT_PATH.'styles/'.$this->getStyle().'/'.$file ) ) { + if ( is_readable ( FS2STYLES.'/'.$this->getStyle().'/'.$file ) ) { $this->file = $file; $this->clearSectionCache (); } else { @@ -121,7 +121,7 @@ private function getTemplate() { public function load($section) { // If the section cache has not been filled yet => load all sections into cache if ( count ( $this->sections ) <= 0 ) { - $file_path = FS2_ROOT_PATH . 'styles/' . $this->getStyle() . '/' . $this->getFile (); // Path of Template file + $file_path = FS2STYLES . '/' . $this->getStyle() . '/' . $this->getFile (); // Path of Template file $ACCESS = new fileaccess (); // Create object for file access $search_expression = '/(.*)/Uis'; // Regular expression to select Sections $number_of_sections = preg_match_all ( $search_expression, $ACCESS->getFileData($file_path), $sections ); // apply regular expression, count into $number_of_sections, contents into $sections diff --git a/www/resources/spamdetector/eval_spam.inc.php b/www/resources/spamdetector/eval_spam.inc.php index d5fbb4d..9dc0c9d 100644 --- a/www/resources/spamdetector/eval_spam.inc.php +++ b/www/resources/spamdetector/eval_spam.inc.php @@ -96,7 +96,7 @@ function spamEvaluation($title, $poster_id, $poster_name, $comment_text, $use_b8 $comment_text = strtolower($comment_text); if ($use_b8) { - require_once FS2_ROOT_PATH.'/resources/spamdetector/b8/b8.php'; + require_once FS2SOURCE.'/resources/spamdetector/b8/b8.php'; if ($b8==NULL) { $success = 'No b8 instance passed to spamEvaluation() function!'; From 106ed59c7516663739da7005cb1c002160ad4414 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Sun, 4 Jan 2015 18:17:08 +1300 Subject: [PATCH 11/92] made feeds working again Signed-off-by: Moritz Kornher --- www/data/feed.php | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 www/data/feed.php diff --git a/www/data/feed.php b/www/data/feed.php new file mode 100644 index 0000000..9073953 --- /dev/null +++ b/www/data/feed.php @@ -0,0 +1,6 @@ + From 7834f1ce999c5fd8a9b4f2d997c40b15ee246e83 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Sun, 4 Jan 2015 22:35:24 +1300 Subject: [PATCH 12/92] made viewer working again Signed-off-by: Moritz Kornher --- www/applets/preview-image.php | 7 ++--- www/classes/downloads/dlfile.php | 4 +-- www/data/gallery.php | 2 +- www/data/shop.php | 5 +++- www/{imageviewer.php => data/viewer.php} | 36 ++--------------------- www/images/design/index.htm | 10 ------- www/images/design/null.gif | Bin 43 -> 0 bytes www/images/icons/index.htm | 10 ------- www/images/icons/logo.gif | Bin 1935 -> 0 bytes www/images/icons/nopic.gif | Bin 296 -> 0 bytes www/images/icons/nopic_small.gif | Bin 661 -> 0 bytes www/images/icons/pointer.gif | Bin 105 -> 0 bytes www/images/icons/pointer_down.gif | Bin 73 -> 0 bytes www/images/icons/pointer_up.gif | Bin 75 -> 0 bytes www/images/icons/separator.gif | Bin 59 -> 0 bytes 15 files changed, 13 insertions(+), 61 deletions(-) rename www/{imageviewer.php => data/viewer.php} (87%) delete mode 100644 www/images/design/index.htm delete mode 100644 www/images/design/null.gif delete mode 100644 www/images/icons/index.htm delete mode 100644 www/images/icons/logo.gif delete mode 100644 www/images/icons/nopic.gif delete mode 100644 www/images/icons/nopic_small.gif delete mode 100644 www/images/icons/pointer.gif delete mode 100644 www/images/icons/pointer_down.gif delete mode 100644 www/images/icons/pointer_up.gif delete mode 100644 www/images/icons/separator.gif diff --git a/www/applets/preview-image.php b/www/applets/preview-image.php index 3e25da1..23db8ca 100644 --- a/www/applets/preview-image.php +++ b/www/applets/preview-image.php @@ -27,12 +27,11 @@ } if ( $data != FALSE ) { - + $link_args = array('id' => $data['id']); if ( $data['type'] == 1 ) { - $link = 'imageviewer.php?id='.$data['id'].'&single'; - } else { - $link = 'imageviewer.php?id='.$data['id']; + $link_args['single'] = 1; } + $link = url('viewer', $link_args); if ( $config_arr['show_type'] == 1 ) { $half_x = floor ( $config_arr['show_size_x'] / 2 ); diff --git a/www/classes/downloads/dlfile.php b/www/classes/downloads/dlfile.php index 8443388..ea447cd 100644 --- a/www/classes/downloads/dlfile.php +++ b/www/classes/downloads/dlfile.php @@ -35,9 +35,9 @@ $dl_arr['dl_bild'] = image_url( 'images/downloads/', $dl_arr['dl_id'] ); if ( image_exists ( 'images/downloads/', $dl_arr['dl_id'] ) ) { - $dl_arr['viewer_link'] = 'imageviewer.php?file=images/downloads/'. basename ( $dl_arr['dl_bild'] ).'&single'; + $dl_arr['viewer_link'] = url('viewer', array('file' => 'images/downloads/'.basename($dl_arr['dl_bild']), 'single' => 1)); } else { - $dl_arr['viewer_link'] = 'imageviewer.php?file=styles/'.$FD->config('style').'/icons/image_error.gif&single'; + $dl_arr['viewer_link'] = url('viewer', array('file' => 'styles/'.$FD->config('style').'/icons/image_error.gif', 'single' => 1)); } if ( $screen_config_arr['show_type'] == 1 ) { diff --git a/www/data/gallery.php b/www/data/gallery.php index 57587d4..0ed0e97 100644 --- a/www/data/gallery.php +++ b/www/data/gallery.php @@ -139,7 +139,7 @@ { $screen_arr['screen_thumb'] = image_url('images/screenshots/', $screen_arr['screen_id'].'_s'); $screen_arr['screen_url'] = image_url('images/screenshots/', $screen_arr['screen_id'] ); - $screen_arr['img_link'] = 'imageviewer.php?id='.$screen_arr['screen_id']; + $screen_arr['img_link'] = url('viewer', array('id' => $screen_arr['screen_id'])); if ( $config_arr['show_type'] == 1 ) { $screen_arr['img_link'] = "javascript:popUp('".$screen_arr['img_link']."','popupviewer','".$config_arr['show_size_x']."','".$config_arr['show_size_y']."');"; } diff --git a/www/data/shop.php b/www/data/shop.php index fcf20dc..523d6f5 100644 --- a/www/data/shop.php +++ b/www/data/shop.php @@ -20,7 +20,10 @@ settype ( $shop_arr['artikel_id'], 'integer' ); $shop_arr['artikel_text'] = fscode ( $shop_arr['artikel_text'], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ); - $shop_arr['viewer_url'] = 'imageviewer.php?file=images/shop/'. basename ( image_url ( 'images/shop/', $shop_arr['artikel_id'] ) ).'&single'; + $shop_arr['viewer_url'] = url('viewer', array( + 'file' => 'images/shop/'.basename(image_url('images/shop/', $shop_arr['artikel_id'])), + 'single' => 1 + )); if ( $screen_config_arr['show_type'] == 1 ) { $shop_arr['viewer_url'] = "javascript:popUp('".$shop_arr['viewer_url']."','popupviewer','".$screen_config_arr['show_size_x']."','".$screen_config_arr['show_size_y']."');"; } diff --git a/www/imageviewer.php b/www/data/viewer.php similarity index 87% rename from www/imageviewer.php rename to www/data/viewer.php index 1023051..4e52486 100644 --- a/www/imageviewer.php +++ b/www/data/viewer.php @@ -1,31 +1,4 @@ cfg('timezone')); -run_cronjobs(); -if (isset($_COOKIE['style']) && !isset($_GET['style'])) { - $_GET['style'] = $_COOKIE['style']; -} -set_style(); - // Security Functions $_GET['id'] = ( isset ( $_GET['screenid'] ) ) ? $_GET['screenid'] : $_GET['id']; settype( $_GET['id'], 'integer' ); @@ -96,7 +69,7 @@ if ( $row !== false ) { $next_id = $row['screen_id']; - $data_array['next_url'] = 'imageviewer.php?id='.$next_id; + $data_array['next_url'] = url('viewer', array('id' => $next_id)); $data_array['next_link'] = ''.$FD->text('frontend', 'popupviewer_next_text').''; $data_array['next_image_link'] = ''.$FD->text('frontend', 'popupviewer_next_text').''; } @@ -113,7 +86,7 @@ if ( $row !== false ) { $prev_id = $row['screen_id']; - $data_array['prev_url'] = 'imageviewer.php?id='.$prev_id; + $data_array['prev_url'] = url('viewer', array('id' => $prev_id)); $data_array['prev_link'] = ''.$FD->text('frontend', 'popupviewer_prev_text').''; $data_array['prev_image_link'] = ''.$FD->text('frontend', 'popupviewer_prev_text').''; } @@ -165,8 +138,5 @@ // Display Page echo get_maintemplate($template_popupviewer); - -// Shutdown System -// TODO: "Shutdown Hook" -unset($FD); + exit; ?> diff --git a/www/images/design/index.htm b/www/images/design/index.htm deleted file mode 100644 index 90a3130..0000000 --- a/www/images/design/index.htm +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/www/images/design/null.gif b/www/images/design/null.gif deleted file mode 100644 index d36072c6a037aad35d757bbca9a40145a61d518c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 wcmZ?wbhEHbWMp7uXkcLY|NlP&1B2pE7RDFM3=BFzHc*_Afq{w1g^|G;0NVox - - - - - - - - - \ No newline at end of file diff --git a/www/images/icons/logo.gif b/www/images/icons/logo.gif deleted file mode 100644 index 3505a30b558152dcc26b8c46e59297214c5a9bac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1935 zcmb``iC2;d0swG6?o0W^qfb-g@G9|6Mw%=@)@#eK9IeR;D{FMDG3~HvTLDqbqrsX= zlPS?qG%PS>JfZ+EG)*+kG&Qkpx*vhnZfQx-}-Vt4AP|_}=$Mmu45yXrXet zRyCu3Y;AwJJTd!^8Sf@HKnV;k4U|sY02>jvU*0SkFWsOf|2%x@%4pH;nd*V}eHjB8 z37xwIy+@o>INuhZ>DAXbC9q$A1f_)k)ORMTgAK0*Iv2V;?|bHqNRmZ*naWSBsR-REdTzcr?2X zFFiMXFg%)ljJgZN>tiRErqC*sVygP$U|wifP+~`-bEDn4-dx{S-|9^7E<1$>gVr8Qqz|4}FWr3cMfChizuO62Gl&`?~#)Ojt=`rnpshd;8b?$UfI$WLnh4#SX+Ka2+58Q>%F1yr|WAwbS z4}*tH2kU3+Mi<8t_1~MV-DShl<2|XdoxJ+FhTq@mZoaGvX<@X@=}z{gGuyWv={rEz z(0ktY=s)Vu44gaEk))ceyFOm-`C!xK;meQTJc%(yKbma|(=qeMBxPe|O>>Q>`ZKDg zD!=djPV@GDvVQ;dDOuCJYGP&V_VjP^sVdn>>CmD@GIIIp8{ORMZ0}-sW?#CXC#A$v zQ8Qba(tQYQ!v8dw=}=Eh=@alY?1`n3ZMrb!e8V%FMZKVEo>odHiXfHat*P6k)8&01 z%;W|H^HC(N$(^ZVuCK4d{!gf1k-$fU?avH<`rio{b{#f?bC1>37z?nDTT;y$MYj~B z$ID~2wY{ZKSmumbTi5>!C8}f`OA!hI`o6the1ic%ZaKDNSB*e4RBh+F)i98&D8NJ( zxJf{cDp5o}UnI}|H4VT!`UkgW15riwxbUn9v!dGo^V~s1iWKbP0$Q}pFKq#dSL61< zA{vgON<{&w@=GEB%@>6voB6^tG>3plcG@ozp=TuFS@JF|9Ak7xnHMQgT0h$}a_-JQ zSLqm8E_ix-LM*LVMn$KnvqNgsX4$p(=9HYh*yCDb_ zxq?Cqpf(;UjpEgZ*ElB`AY?_NftBu+XYYDKa;7L7C*s50xXKEX1QV`60;t9caXO;e z*vC4xCN!3vemu$tSdh0TH&8<5aRA<&!s=|>^EI@=Ser^Q;@L~v^*NbLu@B0Sbxs%1Y?@%6uPyJ( z0INoFP3(s}P$6a?ZnrG5vf684ezpja2vH}0Tj(0e_rgN=b|u9F_43?7w(1@zWj8wI zJtsor(H0D(;#xeIYSW;Pzkmu-FSLfr2>!%(c=QSGT8Wd}o;4ggQVtL}kx;785x!(K z;7`ax_zcu5hKv?y&KYFn7n_z@g`ZcHY-lC~B>M9S4tDmIqYid$5t{B)xPuVbk_a&@ zh(@AF6afD;Zwf%@#XunDz1Zl4SmHOZzq9)SVyZvp+~9P{)`u;g@Kv$V9ifjmkxoJ5 zgnZ_g7H+N0eXkJ2gpU;jA;PV$vnWfaC1@v%KEW}nDZ8S4iF7{Rg*0ve<4HWC#D>&H zh1j5dh7g;9Y9aYk==@MUa)%@o!LrP=5EAWB)sXvmS=cSJ0)+dFi+NEaY9q%pFzZ_j zE%4sg1Av9MPq-D%3Y8FER8nOjfdY-uXYKbGiHb)1^$loj0C>xOr*3v%&_h+KVh@n4-p+c}c b25*H&eO{Fn@483ZFkp_}w$~2;VBh{1c}zS; diff --git a/www/images/icons/nopic.gif b/www/images/icons/nopic.gif deleted file mode 100644 index faad4b8861be043827359ce0bd74de5401fd71bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmV+@0oVRVNk%w1VR!&C0Du7i00030|NkNR1Oey+0RSuj0001Z05Sjo0{@JUsmtvT zqnxzbi?iOm`wxcVNS5Y_rs~SJ?hD8AOxN~}=lag~{tpZahs2`shyehSOJ%}&Q7)rX z3KRjoDzpsg)yd^b#MbIW3^p?jVKo`@9;+khrrFE3OSjXkJ->&A2dMWK;1@_(HRyFW zH<%Zh7AZ(M>Gx#WXNY;YsR`QY$)|-mIVzZV`H2NO+6l`Vi~98l+4v_)`I^gmaN9^L zJFJN(T8Ek}>ASlsocZKN{7l`p+ogBSt6jUT8_fL~I7|KOi<}&M+Q!HU$<}PV*dDJc uAOG`(B%{0U^6oF7z<~q{8a#+Fp~8g>8#;UlF`~qY6f0W1h%uwT0suR{%#ZT` diff --git a/www/images/icons/nopic_small.gif b/www/images/icons/nopic_small.gif deleted file mode 100644 index b55c41e8b7863dde9086d075880f8d42fdcfb6dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmZ?wbhEHbrN_;nGg>KC^S{`A) zCedP5?A%Lpd(KRDTc6r;vTy47nN!cts6E!P>Go>-wF#~pQd9O+glx;7dSS+rYl~Lj zT%NnXZquDLF*{4b4Ed!*arT_o`&wvdm{$ycf0BY3% jNrKE^U=b5o(AlyeF-D|ef};WtYl74r2cLtEt_;=yxxE$) diff --git a/www/images/icons/pointer_down.gif b/www/images/icons/pointer_down.gif deleted file mode 100644 index 5e2c53f1d8d7cfddc6b9d2563dbb4a843ffd44e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73 zcmZ?wbhEHbWM$xBSj5gyxZky4zf0kMmx6sRGBVOKKp-vs|Nno*pDc_onAsV07=Qqz YmVueCVi%7hV~^yC&Q!@`;Y-jf|->;2gC!ZWndPF W*mXw0+ath<;j!qU%HOU`4AuZ2GZdNt diff --git a/www/images/icons/separator.gif b/www/images/icons/separator.gif deleted file mode 100644 index 9f8c67c6ca70a53ac3f3fc90349c8303eea441c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59 zcmZ?wbhEHbWMvR%XkcX6zJ2@u|Nj+#vM|12W@OM|00NK<1CvlsKjV(;-$Z8jIccxn MXZ`uTDl3CE02`(g1poj5 From 92751e60c2fd2dd33c593f3d1e5b5096ef02afe0 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Sun, 4 Jan 2015 23:32:59 +1300 Subject: [PATCH 13/92] fixed problem with slahes in viewer URLs (see http://stackoverflow.com/a/3235361/3778831) Signed-off-by: Moritz Kornher --- www/applets/preview-image.php | 2 +- www/classes/downloads/dlfile.php | 6 +++--- www/data/gallery.php | 2 +- www/data/shop.php | 7 +++---- www/data/viewer.php | 3 ++- www/includes/functions.php | 6 +++--- www/includes/newfunctions.php | 8 ++++++-- 7 files changed, 19 insertions(+), 15 deletions(-) diff --git a/www/applets/preview-image.php b/www/applets/preview-image.php index 23db8ca..cf93c55 100644 --- a/www/applets/preview-image.php +++ b/www/applets/preview-image.php @@ -36,7 +36,7 @@ if ( $config_arr['show_type'] == 1 ) { $half_x = floor ( $config_arr['show_size_x'] / 2 ); $half_y = floor ( $config_arr['show_size_y'] / 2 ); - $link = "javascript:popUp('".$link."','popupviewer','".$config_arr['show_size_x']."','".$config_arr['show_size_y']."');"; + $link = "javascript:popUp('".urlencode($link)."','popupviewer','".$config_arr['show_size_x']."','".$config_arr['show_size_y']."');"; } // Get Template diff --git a/www/classes/downloads/dlfile.php b/www/classes/downloads/dlfile.php index ea447cd..f9ff069 100644 --- a/www/classes/downloads/dlfile.php +++ b/www/classes/downloads/dlfile.php @@ -35,13 +35,13 @@ $dl_arr['dl_bild'] = image_url( 'images/downloads/', $dl_arr['dl_id'] ); if ( image_exists ( 'images/downloads/', $dl_arr['dl_id'] ) ) { - $dl_arr['viewer_link'] = url('viewer', array('file' => 'images/downloads/'.basename($dl_arr['dl_bild']), 'single' => 1)); + $dl_arr['viewer_link'] = url('viewer', array('single' => 1), false, array('file' => 'images/downloads/'.basename($dl_arr['dl_bild']))); } else { - $dl_arr['viewer_link'] = url('viewer', array('file' => 'styles/'.$FD->config('style').'/icons/image_error.gif', 'single' => 1)); + $dl_arr['viewer_link'] = url('viewer', array('single' => 1), false, array('file' => 'styles/'.$FD->config('style').'/icons/image_error.gif')); } if ( $screen_config_arr['show_type'] == 1 ) { - $dl_arr['viewer_link'] = "javascript:popUp('".$dl_arr['viewer_link']."','popupviewer','".$screen_config_arr['show_size_x']."','".$screen_config_arr['show_size_y']."');"; + $dl_arr['viewer_link'] = "javascript:popUp('".urlencode($dl_arr['viewer_link'])."','popupviewer','".$screen_config_arr['show_size_x']."','".$screen_config_arr['show_size_y']."');"; } $dl_arr['dl_thumb'] = image_url('images/downloads/', $dl_arr['dl_id'].'_s'); diff --git a/www/data/gallery.php b/www/data/gallery.php index 0ed0e97..dab8296 100644 --- a/www/data/gallery.php +++ b/www/data/gallery.php @@ -141,7 +141,7 @@ $screen_arr['screen_url'] = image_url('images/screenshots/', $screen_arr['screen_id'] ); $screen_arr['img_link'] = url('viewer', array('id' => $screen_arr['screen_id'])); if ( $config_arr['show_type'] == 1 ) { - $screen_arr['img_link'] = "javascript:popUp('".$screen_arr['img_link']."','popupviewer','".$config_arr['show_size_x']."','".$config_arr['show_size_y']."');"; + $screen_arr['img_link'] = "javascript:popUp('".urlencode($screen_arr['img_link'])."','popupviewer','".$config_arr['show_size_x']."','".$config_arr['show_size_y']."');"; } // Get Template diff --git a/www/data/shop.php b/www/data/shop.php index 523d6f5..1b73dbe 100644 --- a/www/data/shop.php +++ b/www/data/shop.php @@ -20,12 +20,11 @@ settype ( $shop_arr['artikel_id'], 'integer' ); $shop_arr['artikel_text'] = fscode ( $shop_arr['artikel_text'], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ); - $shop_arr['viewer_url'] = url('viewer', array( - 'file' => 'images/shop/'.basename(image_url('images/shop/', $shop_arr['artikel_id'])), - 'single' => 1 + $shop_arr['viewer_url'] = url('viewer', array('single' => 1), array( + 'file' => 'images/shop/'.basename(image_url('images/shop/', $shop_arr['artikel_id'])) )); if ( $screen_config_arr['show_type'] == 1 ) { - $shop_arr['viewer_url'] = "javascript:popUp('".$shop_arr['viewer_url']."','popupviewer','".$screen_config_arr['show_size_x']."','".$screen_config_arr['show_size_y']."');"; + $shop_arr['viewer_url'] = "javascript:popUp('".urlencode($shop_arr['viewer_url'])."','popupviewer','".$screen_config_arr['show_size_x']."','".$screen_config_arr['show_size_y']."');"; } $template_item = new template(); diff --git a/www/data/viewer.php b/www/data/viewer.php index 4e52486..85e20e4 100644 --- a/www/data/viewer.php +++ b/www/data/viewer.php @@ -1,5 +1,6 @@ cfg('url_style')) { case 'seo': - $url = url_seo($go, $args); + $url = url_seo($go, $args, false, $safeargs); break; default: // check for empty go if (!empty($go)) - $args = array('go' => $go)+$args; + $args = array('go' => $go)+$args+$safeargs; $url = http_build_query($args, 'p', '&'); if (!empty($url)) diff --git a/www/includes/newfunctions.php b/www/includes/newfunctions.php index c613285..4008f11 100644 --- a/www/includes/newfunctions.php +++ b/www/includes/newfunctions.php @@ -212,11 +212,11 @@ function highlight ($word, $text, $class = 'red', $style = '') //////////////////////// //// create SEO URL //// //////////////////////// -function url_seo ($go, $args, $go_in_args = false) { +function url_seo ($go, $args, $go_in_args = false, $safeargs = array()) { $urlencodeext = create_function ('$url', ' // Folge von Bindestriche um zwei Striche erweitern - return urlencode(preg_replace(\'/-+/\', \'$0--\', $url));'); + return rawurlencode(preg_replace(\'/-+/\', \'$0--\', $url));'); if ($go_in_args) { unset($args['go']); @@ -243,6 +243,10 @@ function url_seo ($go, $args, $go_in_args = false) { if (!empty($seourl)) $seourl .= '.html'; + $safeargs = http_build_query($safeargs, 'p', '&'); + if (!empty($safeargs)) + $seourl .= '?'.$safeargs; + return $seourl; } From 32a603e7376423433221d653d13ba231ad7938d7 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Mon, 5 Jan 2015 00:01:14 +1300 Subject: [PATCH 14/92] shop img fix Signed-off-by: Moritz Kornher --- www/data/shop.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/www/data/shop.php b/www/data/shop.php index 1b73dbe..44f36d6 100644 --- a/www/data/shop.php +++ b/www/data/shop.php @@ -20,9 +20,13 @@ settype ( $shop_arr['artikel_id'], 'integer' ); $shop_arr['artikel_text'] = fscode ( $shop_arr['artikel_text'], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ); - $shop_arr['viewer_url'] = url('viewer', array('single' => 1), array( - 'file' => 'images/shop/'.basename(image_url('images/shop/', $shop_arr['artikel_id'])) - )); + if (image_exists('images/shop/', $shop_arr['artikel_id'])) { + $imgurl = 'images/shop/'.basename(image_url('images/shop/', $shop_arr['artikel_id'])); + } else { + $imgurl = 'styles/'.$FD->config('style').'/icons/image_error.gif'; + } + $shop_arr['viewer_url'] = url('viewer', array('single' => 1), false, array('file' => $imgurl)); + if ( $screen_config_arr['show_type'] == 1 ) { $shop_arr['viewer_url'] = "javascript:popUp('".urlencode($shop_arr['viewer_url'])."','popupviewer','".$screen_config_arr['show_size_x']."','".$screen_config_arr['show_size_y']."');"; } From 61d687bb51d09073ac6fabadf717421b07f94f14 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Mon, 5 Jan 2015 12:51:57 +1300 Subject: [PATCH 15/92] adjustments to config system new startup order for GlobalData Object $FD Deprecation message for old configs cleanup of unused files Signed-off-by: Moritz Kornher --- www/admin/.htaccess | 161 --- www/admin/admin.php | 324 +++++ www/admin/admin_aliases_add.php | 2 +- www/admin/admin_aliases_edit.php | 12 +- www/admin/admin_allannouncement.php | 4 +- www/admin/admin_allemail.php | 4 +- www/admin/admin_applets_add.php | 4 +- www/admin/admin_applets_edit.php | 2 +- www/admin/admin_articles_edit.php | 2 +- www/admin/admin_news_add.php | 2 +- www/admin/admin_news_edit.php | 42 +- www/admin/index.php | 350 +---- www/admin/start_general.php | 10 +- www/classes/config/ConfigEnv.php | 28 +- www/classes/config/ConfigMain.php | 18 +- www/config/env-example.cfg.php | 13 + www/feeds/news-sitemap.php | 2 +- .../admin_phrases_de.php | 1233 ----------------- .../aliasweiterleitung.txt | 18 - .../bu_from_phrases_tpl.txt | 632 --------- www/includes/adminfunctions.php | 13 +- www/includes/indexfunctions.php | 10 +- www/libs/class_ConfigData.php | 33 +- www/libs/class_Frogsystem2.php | 71 +- www/libs/class_GlobalData.php | 74 +- www/libs/class_Search.php | 4 +- www/libs/class_SearchQuery.php | 4 +- www/libs/class_fileaccess.php | 1 - www/libs/functions.php | 1 - www/resources/jsonwrapper/JSON/JSON.php | 806 ----------- www/resources/jsonwrapper/LICENSE | 21 - .../jsonwrapper/jsonwrapper_helper.php | 6 - .../jsonwrapper/jsonwrapper_inner.php | 23 - www/resources/player/player_flv_config.php | 2 - www/resources/player/player_flv_include.php | 2 +- 35 files changed, 548 insertions(+), 3386 deletions(-) delete mode 100644 www/admin/.htaccess create mode 100644 www/admin/admin.php create mode 100644 www/config/env-example.cfg.php delete mode 100644 www/filebackups-remove-for-release/admin_phrases_de.php delete mode 100644 www/filebackups-remove-for-release/aliasweiterleitung.txt delete mode 100644 www/filebackups-remove-for-release/bu_from_phrases_tpl.txt delete mode 100644 www/resources/jsonwrapper/JSON/JSON.php delete mode 100644 www/resources/jsonwrapper/LICENSE delete mode 100644 www/resources/jsonwrapper/jsonwrapper_helper.php delete mode 100644 www/resources/jsonwrapper/jsonwrapper_inner.php diff --git a/www/admin/.htaccess b/www/admin/.htaccess deleted file mode 100644 index 852a187..0000000 --- a/www/admin/.htaccess +++ /dev/null @@ -1,161 +0,0 @@ - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - - - - Order Allow,Deny - Allow from 127.0.0.1 - Deny from all - diff --git a/www/admin/admin.php b/www/admin/admin.php new file mode 100644 index 0000000..e1a8956 --- /dev/null +++ b/www/admin/admin.php @@ -0,0 +1,324 @@ +cfg('timezone')); +run_cronjobs(); + + +###################### +### START OF LOGIN ### +###################### + +if (isset($_POST['stayonline']) && $_POST['stayonline'] == 1) { + admin_set_cookie ( $_POST['username'], $_POST['userpassword'] ); +} + +if (isset($_COOKIE['login']) && $_COOKIE['login'] && !is_authorized()) { + $userpassword = substr ($_COOKIE['login'], 0, 32); + $username = substr($_COOKIE['login'], 32, strlen ($_COOKIE['login'])); + admin_login($username, $userpassword, TRUE); +} + +if (isset($_POST['login']) && $_POST['login'] == 1 && !is_authorized()) { + admin_login($_POST['username'], $_POST['userpassword'], false); +} + +#################### +### END OF LOGIN ### +#################### + + +################################## +### START OF DETECTING SUBPAGE ### +################################## + +// security functions +!isset($_REQUEST['go']) ? $_REQUEST['go'] = null : 1; +$go = $_REQUEST['go']; + +// get page-data from database +$acp_arr = $FD->db()->conn()->prepare( + 'SELECT page_id, page_file, P.group_id AS group_id, menu_id + FROM '.$FD->config('pref').'admin_cp P, '.$FD->config('pref').'admin_groups G + WHERE P.`group_id` = G.`group_id` AND P.`page_id` = ? AND P.`page_int_sub_perm` != 1'); +$acp_arr->execute(array($go)); +$acp_arr = $acp_arr->fetch(PDO::FETCH_ASSOC); + +// if page exisits +if (!empty($acp_arr)) { + + // if page is start page + if ($acp_arr['group_id'] == -1) { + $acp_arr['menu_id'] = $acp_arr['page_file']; + $acp_arr['page_file'] = $acp_arr['page_id'].'.php'; + } + + //if popup + if ($acp_arr['group_id'] == 'popup') { + define('POPUP', true); + $title = $FD->text("menu", 'page_title_'.$acp_arr['page_id']); + } else { + define('POPUP', false); + $title = $FD->text("menu", 'group_'.$acp_arr['group_id']).' » '.$FD->text("menu", 'page_title_'.$acp_arr['page_id']); + } + + // get the page-data + $PAGE_DATA_ARR = createpage($title, has_perm($acp_arr['page_id']), $acp_arr['page_file'], $acp_arr['menu_id']); + + // initialise templatesystem + $adminpage = new adminpage($acp_arr['page_file']); + + // Get Special Page Lang-Text-Files + $page_lang = new lang($FD->config('language_text'), 'admin/'.substr($acp_arr['page_file'], 0, -4)); + $FD->setPageText($page_lang); + unset ($page_lang); + +} else { + $PAGE_DATA_ARR['created'] = false; + define('POPUP', false); +} + +// logout +if ( $PAGE_DATA_ARR['created'] === false && $go == 'logout' ) { + setcookie ('login', '', time() - 3600, '/'); + $_SESSION = array(); + $PAGE_DATA_ARR = createpage($FD->text("menu", "admin_logout_text"), true, 'admin_logout.php', 'dash'); +} + +// login +elseif ( $PAGE_DATA_ARR['created'] === false && ($go == 'login' || empty($go)) ) { + $go = 'login'; + $PAGE_DATA_ARR = createpage($FD->text("menu", "admin_login_text"), true, 'admin_login.php', 'dash'); +} + +// error +elseif ( $PAGE_DATA_ARR['created'] === false ) { + $go = '404'; + $PAGE_DATA_ARR = createpage($FD->text("menu", "admin_error_page_title"), true, 'admin_404.php', 'error'); +} + + + +// Define Constant +define('ACP_GO', $go); + +################################ +### END OF DETECTING SUBPAGE ### +################################ + + +########################## +### START OF HTML HEAD ### +########################## +ob_start(); +echo' + + + + + Frogsystem 2 - '.$PAGE_DATA_ARR['title'].' + + + + + + + + + + + + + + + + + + + + + +'; +$head = ob_get_clean(); +######################## +### END OF HTML HEAD ### +######################## + +if (POPUP !== true) { +########################## +### START OF PAGE HEAD ### +########################## +echo $head; +echo' + + + + +'; +######################## +### END OF PAGE HEAD ### +######################## + + +############################## +### START OF NAVI CREATION ### +############################## + +// get navi from DB +$template_navi = get_leftmenu($PAGE_DATA_ARR['menu'], ACP_GO); + +############################ +### END OF NAVI CREATION ### +############################ + + +################################## +### START OF MENU/NAVI DISPLAY ### +################################## +echo' + + +
+
+ '.get_topmenu($PAGE_DATA_ARR['menu']); //creates the menu list +echo ' +
+ +
'; + +if (is_authorized()) { + $log_link = 'logout'; + $log_image = 'logout.gif'; + $log_text = $FD->text("menu", "admin_logout_text"); +} else { + $log_link = 'login'; + $log_image = 'login.gif'; + $log_text = $FD->text("menu", "admin_login_text"); +} + +echo' + + + + + +
+ + + + + + '.$log_text.' + +
+
+ + + +
+ + + + +'; +################################ +### END OF MENU/NAVI DISPLAY ### +################################ + + +################################ +### START OF CONTENT DISPLAY ### +################################ +// Include Content File + + +echo ' + +
'; + +ob_start(); +require(FS2_ROOT_PATH . 'admin/'.$PAGE_DATA_ARR['file']); +$content = ob_get_clean(); + +$top = '

('.$PAGE_DATA_ARR['title'].')

'; +echo get_content_container($top, $content); + +echo ' +
+ + +
+ + + + +'; + +############################## +### END OF CONTENT DISPLAY ### +############################## + +} else { +###################################### +### START OF DISPLAY POPUP CONTENT ### +###################################### +$JUST_CONTENT = false; + +ob_start(); +require(FS2_ROOT_PATH . 'admin/'.$PAGE_DATA_ARR['file']); +$popup = ob_get_clean(); + +if ($JUST_CONTENT !== true) { + +echo $head; +echo' + +
+  ->  + '.$PAGE_DATA_ARR['title'].' +
+
+'; + +echo $popup; + +echo' +
+ + +'; +} else { + echo $popup; +} + +#################################### +### END OF DISPLAY POPUP CONTENT ### +#################################### +} + +?> diff --git a/www/admin/admin_aliases_add.php b/www/admin/admin_aliases_add.php index 2327a43..b563e43 100644 --- a/www/admin/admin_aliases_add.php +++ b/www/admin/admin_aliases_add.php @@ -13,7 +13,7 @@ settype ( $_POST['alias_active'], 'integer' ); // SQL-Queries - $stmt = $sql->conn()->prepare ( ' INSERT INTO `'.$FD->config('pref')."aliases` ( + $stmt = $FD->db()->conn()->prepare ( ' INSERT INTO `'.$FD->config('pref')."aliases` ( `alias_go`, `alias_forward_to`, `alias_active` diff --git a/www/admin/admin_aliases_edit.php b/www/admin/admin_aliases_edit.php index 4ba95ef..810296e 100644 --- a/www/admin/admin_aliases_edit.php +++ b/www/admin/admin_aliases_edit.php @@ -17,7 +17,7 @@ settype ( $_POST['alias_id'], 'integer' ); // SQL-Queries - $stmt = $sql->conn()->prepare ( ' + $stmt = $FD->db()->conn()->prepare ( ' UPDATE `'.$FD->config('pref')."aliases` SET `alias_go` = ?, @@ -51,7 +51,7 @@ $_POST['alias_id'] = array_map ( 'intval', explode ( ',', $_POST['alias_id'] ) ); // SQL-Delete-Query - $sql->conn()->exec (' + $FD->db()->conn()->exec (' DELETE FROM `'.$FD->config('pref').'aliases` WHERE `alias_id` IN ('.implode ( ',', $_POST['alias_id'] ).')'); @@ -93,7 +93,7 @@ // Get Data from DB } else { - $index = $sql->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT * FROM `'.$FD->config('pref')."aliases` WHERE `alias_id` = '".$_POST['alias_id']."' @@ -188,7 +188,7 @@ '; // get aliases from db - $index = $sql->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT * FROM `'.$FD->config('pref').'aliases` WHERE `alias_id` IN ('.implode ( ',', $_POST['alias_id'] ).') @@ -240,7 +240,7 @@ '; // get Aliases from db - $index = $sql->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT COUNT(*) FROM `'.$FD->config('pref').'aliases`'); @@ -258,7 +258,7 @@ '; // display Aliases - $index = $sql->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT * FROM `'.$FD->config('pref').'aliases` ORDER BY `alias_go` ASC, `alias_forward_to` ASC'); diff --git a/www/admin/admin_allannouncement.php b/www/admin/admin_allannouncement.php index 28d204f..76c03f4 100644 --- a/www/admin/admin_allannouncement.php +++ b/www/admin/admin_allannouncement.php @@ -14,7 +14,7 @@ settype ( $_POST['ann_para'], 'integer' ); // SQL-Queries - $stmt = $sql->conn()->prepare ( ' + $stmt = $FD->db()->conn()->prepare ( ' UPDATE `'.$FD->config('pref')."announcement` SET `announcement_text` = ?, @@ -45,7 +45,7 @@ // Load Data from DB into Post } else { - $index = $sql->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT * FROM `'.$FD->config('pref')."announcement` WHERE `id` = '1'"); diff --git a/www/admin/admin_allemail.php b/www/admin/admin_allemail.php index 5035fc6..9fc9365 100644 --- a/www/admin/admin_allemail.php +++ b/www/admin/admin_allemail.php @@ -15,7 +15,7 @@ settype ( $_POST['html'], 'integer' ); // SQL-Queries - $stmt = $sql->conn()->prepare ( ' + $stmt = $FD->db()->conn()->prepare ( ' UPDATE `'.$FD->config('pref')."email` SET `signup` = ?, @@ -49,7 +49,7 @@ // Load Data from DB into Post } else { - $index = $sql->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT * FROM '.$FD->config('pref')."email WHERE `id` = '1'" ); diff --git a/www/admin/admin_applets_add.php b/www/admin/admin_applets_add.php index 90ca428..b810604 100644 --- a/www/admin/admin_applets_add.php +++ b/www/admin/admin_applets_add.php @@ -25,14 +25,14 @@ settype ( $_POST['applet_include'], 'integer' ); // Check if Applet exists - $index = $sql->conn()->prepare ( 'SELECT `applet_id` FROM `'.$FD->config('pref').'applets` WHERE `applet_file` = ?' ); + $index = $FD->db()->conn()->prepare ( 'SELECT `applet_id` FROM `'.$FD->config('pref').'applets` WHERE `applet_file` = ?' ); $index->execute(array($_POST['applet_file'])); $row = $index->fetch(PDO::FETCH_ASSOC); // New Applet if ( $row === false ) { // SQL-Queries - $stmt = $sql->conn()->prepare ( 'INSERT INTO `'.$FD->config('pref')."applets` ( + $stmt = $FD->db()->conn()->prepare ( 'INSERT INTO `'.$FD->config('pref')."applets` ( `applet_file`, `applet_active`, `applet_include`, diff --git a/www/admin/admin_applets_edit.php b/www/admin/admin_applets_edit.php index 1d559b6..8668a34 100644 --- a/www/admin/admin_applets_edit.php +++ b/www/admin/admin_applets_edit.php @@ -26,7 +26,7 @@ settype ( $_POST['applet_include'], 'integer' ); // SQL-Queries - $sql->conn()->exec ( ' + $FD->db()->conn()->exec ( ' UPDATE `'.$FD->config('pref')."applets` SET `applet_active` = '".$_POST['applet_active']."', diff --git a/www/admin/admin_articles_edit.php b/www/admin/admin_articles_edit.php index 56889ca..1a2548f 100644 --- a/www/admin/admin_articles_edit.php +++ b/www/admin/admin_articles_edit.php @@ -316,7 +316,7 @@ function default_display_page ( $entries, $pagenav_arr, $FORM ) function action_edit_get_data ( $ARTICLE_ID ) { - global $FD, $sql; + global $FD; //Load Article $index = $FD->sql()->conn()->query ( 'SELECT * FROM '.$FD->config('pref')."articles WHERE article_id = '".$ARTICLE_ID."' LIMIT 0, 1" ); diff --git a/www/admin/admin_news_add.php b/www/admin/admin_news_add.php index 89c4f80..1bfffe2 100644 --- a/www/admin/admin_news_add.php +++ b/www/admin/admin_news_add.php @@ -82,7 +82,7 @@ $data['user_id'] = intval($user_id); // Save News - $newsid = $sql->save('news', $data, 'news_id'); + $newsid = $FD->db()->save('news', $data, 'news_id'); // Update Search Index (or not) if ( $FD->config('cronjobs', 'search_index_update') === 1 ) { diff --git a/www/admin/admin_news_edit.php b/www/admin/admin_news_edit.php index ef86f17..cdc6e34 100644 --- a/www/admin/admin_news_edit.php +++ b/www/admin/admin_news_edit.php @@ -428,15 +428,15 @@ function action_comments_delete ( $DATA ) $data['user_id'] = $user_id; // Save News - $newsid = $sql->save('news', $data, 'news_id'); + $newsid = $FD->db()->save('news', $data, 'news_id'); // delete all related links - $sql->conn()->exec('DELETE FROM '.$FD->config('pref')."news_links WHERE `news_id` = '".$newsid."'"); + $FD->db()->conn()->exec('DELETE FROM '.$FD->config('pref')."news_links WHERE `news_id` = '".$newsid."'"); // Insert Links into database if (!is_array($_POST['link_name'])) $_POST['link_name'] = array(); - $stmt = $sql->conn()->prepare('INSERT INTO '.$FD->config('pref').'news_links SET news_id = '.$newsid.', link_name = ?, link_url = ?, link_target = ?'); + $stmt = $FD->db()->conn()->prepare('INSERT INTO '.$FD->config('pref').'news_links SET news_id = '.$newsid.', link_name = ?, link_url = ?, link_target = ?'); foreach ($_POST['link_name'] as $id => $val) { if (!empty($_POST['link_name'][$id]) && !empty($_POST['link_url'][$id]) && !in_array($_POST['link_url'][$id], array('http://', 'https://'))) { @@ -490,20 +490,20 @@ function action_comments_delete ( $DATA ) $_POST['news_id'] = array_map('intval', $_POST['news_id']); //delete news - $num = $sql->conn()->exec('DELETE FROM '.$FD->config('pref').'news WHERE `news_id` IN ('.implode(',',$_POST['news_id']).')'); + $num = $FD->db()->conn()->exec('DELETE FROM '.$FD->config('pref').'news WHERE `news_id` IN ('.implode(',',$_POST['news_id']).')'); // Delete from Search Index require_once ( FS2SOURCE . '/includes/searchfunctions.php' ); delete_search_index_for_one($_POST['news_id'], 'news'); // delete all links - $sql->conn()->exec('DELETE FROM '.$FD->config('pref').'news_links WHERE `news_id` IN ('.implode(',',$_POST['news_id']).')'); + $FD->db()->conn()->exec('DELETE FROM '.$FD->config('pref').'news_links WHERE `news_id` IN ('.implode(',',$_POST['news_id']).')'); // delete all comments - $comment_rows = $sql->conn()->exec('DELETE FROM '.$FD->config('pref').'comments WHERE `content_id` IN ('.implode(',',$_POST['news_id']).") AND content_type='news'"); + $comment_rows = $FD->db()->conn()->exec('DELETE FROM '.$FD->config('pref').'comments WHERE `content_id` IN ('.implode(',',$_POST['news_id']).") AND content_type='news'"); // update counter try { - $sql->conn()->exec('UPDATE `'.$FD->config('pref').'counter` SET `news` = `news` - '.$num.', `comments` - '.$comment_rows.' WHERE `id` = 1'); + $FD->db()->conn()->exec('UPDATE `'.$FD->config('pref').'counter` SET `news` = `news` - '.$num.', `comments` - '.$comment_rows.' WHERE `id` = 1'); } catch (Exception $e) {} @@ -672,7 +672,7 @@ function action_comments_delete ( $DATA ) // Get data from DB } else { - $data = $sql->conn()->query( + $data = $FD->db()->conn()->query( 'SELECT news_id, cat_id, user_id, news_date, news_title, news_text, news_active, news_comments_allowed, news_search_update FROM '.$FD->config('pref').'news WHERE news_id='.intval($_POST['news_id']).' LIMIT 1'); @@ -680,7 +680,7 @@ function action_comments_delete ( $DATA ) putintopost($data); // Get User name - $_POST['user_name'] = $sql->conn()->query('SELECT user_name FROM '.$FD->config('pref').'user WHERE user_id='.intval($_POST['user_id']).' LIMIT 1'); + $_POST['user_name'] = $FD->db()->conn()->query('SELECT user_name FROM '.$FD->config('pref').'user WHERE user_id='.intval($_POST['user_id']).' LIMIT 1'); $_POST['user_name'] = $_POST['user_name']->fetchColumn(); $_POST['d'] = date('d', $_POST['news_date']); @@ -692,7 +692,7 @@ function action_comments_delete ( $DATA ) $_POST['new_link_url'] = 'http://'; //grab links from database - $links = $sql->conn()->query('SELECT link_name, link_url, link_target FROM '.$FD->config('pref').'news_links + $links = $FD->db()->conn()->query('SELECT link_name, link_url, link_target FROM '.$FD->config('pref').'news_links WHERE `news_id` = '.intval($_POST['news_id']).' ORDER BY `link_id`'); $links = $links->fetchAll(PDO::FETCH_ASSOC); $i = 0; @@ -713,7 +713,7 @@ function action_comments_delete ( $DATA ) // cat options initstr($cat_options); - $cats = $sql->conn()->query('SELECT cat_id, cat_name FROM '.$FD->config('pref').'news_cat'); + $cats = $FD->db()->conn()->query('SELECT cat_id, cat_name FROM '.$FD->config('pref').'news_cat'); $cats = $cats->fetchAll(PDO::FETCH_ASSOC); foreach ($cats as $cat) { settype ($cat['cat_id'], 'integer'); @@ -841,7 +841,7 @@ function action_comments_delete ( $DATA ) //cat filter options initstr($cat_filter_options); - $cats = $sql->conn()->query('SELECT cat_id, cat_name FROM '.$FD->config('pref').'news_cat'); + $catsFD->db()sql->conn()->query('SELECT cat_id, cat_name FROM '.$FD->config('pref').'news_cat'); $cats = $cats->fetchAll(PDO::FETCH_ASSOC); foreach ($cats as $cat) { $cat = array_map('killhtml', $cat); @@ -904,14 +904,14 @@ function action_comments_delete ( $DATA ) { $where = ''; } - $news_data = $sql->conn()->query( + $news_data = $FD->db()->conn()->query( 'SELECT news_id AS id, CONCAT(1) AS rank FROM '.$FD->config('pref').'news '.$where.' ORDER BY `'.$_REQUEST['order'].'` '.$_REQUEST['sort'].', `news_id` '.$_REQUEST['sort'].' LIMIT '.($_REQUEST['page']-1)*$config_arr['acp_per_page'].",".$config_arr['acp_per_page']); $news_data = $news_data->fetchAll(PDO::FETCH_ASSOC); - $total_entries = $sql->conn()->query('SELECT COUNT(*) FROM '.$FD->config('pref').'news '.$where); + $total_entries = $FD->db()->conn()->query('SELECT COUNT(*) FROM '.$FD->config('pref').'news '.$where); $total_entries = $total_entries->fetchColumn(); } @@ -937,19 +937,19 @@ function action_comments_delete ( $DATA ) switch ($config_arr['acp_view']) { // full (with text preview) case 1: - $news = $sql->conn()->query('SELECT news_id, cat_id, user_id, news_title, news_date, news_text + $news = $FD->db()->conn()->query('SELECT news_id, cat_id, user_id, news_title, news_date, news_text FROM '.$FD->config('pref').'news WHERE news_id = '.intval($found['id']).' LIMIT 1'); $news = $news->fetch(PDO::FETCH_ASSOC); break; // extended (but no text preview) case 2: - $news = $sql->conn()->query('SELECT news_id, cat_id, user_id, news_title, news_date + $news = $FD->db()->conn()->query('SELECT news_id, cat_id, user_id, news_title, news_date FROM '.$FD->config('pref').'news WHERE news_id = '.intval($found['id']).' LIMIT 1'); $news = $news->fetch(PDO::FETCH_ASSOC); break; //simple default: - $news = $sql->conn()->query('SELECT news_id, news_title, news_date + $news = $FD->db()->conn()->query('SELECT news_id, news_title, news_date FROM '.$FD->config('pref').'news WHERE news_id = '.intval($found['id']).' LIMIT 1'); $news = $news->fetch(PDO::FETCH_ASSOC); break; @@ -964,14 +964,14 @@ function action_comments_delete ( $DATA ) // extended or full if (in_array($config_arr['acp_view'], array(1, 2))) { //get additional data - $user = $sql->conn()->query('SELECT user_name FROM '.$FD->config('pref').'user WHERE user_id='.intval($news['user_id']).' LIMIT 1'); + $user = $FD->db()->conn()->query('SELECT user_name FROM '.$FD->config('pref').'user WHERE user_id='.intval($news['user_id']).' LIMIT 1'); $user = $user->fetchColumn(); - $cat = $sql->conn()->query('SELECT cat_name FROM '.$FD->config('pref').'news_cat WHERE cat_id='.intval($news['cat_id']).' LIMIT 1'); + $cat = $FD->db()->conn()->query('SELECT cat_name FROM '.$FD->config('pref').'news_cat WHERE cat_id='.intval($news['cat_id']).' LIMIT 1'); $cat = $cat->fetchColumn(); - $num_comments = $sql->conn()->query('SELECT COUNT(comment_id) FROM '.$FD->config('pref').'comments + $num_comments = $FD->db()->conn()->query('SELECT COUNT(comment_id) FROM '.$FD->config('pref').'comments WHERE `content_id` = '.intval($news['news_id'])." AND `content_type` = 'news'"); $num_comments = $num_comments->fetchColumn(); - $num_links = $sql->conn()->query('SELECT COUNT(link_id) FROM '.$FD->config('pref').'news_links + $num_links = $FD->db()->conn()->query('SELECT COUNT(link_id) FROM '.$FD->config('pref').'news_links WHERE `news_id` = '.intval($news['news_id'])); $num_links = $num_links->fetchColumn(); diff --git a/www/admin/index.php b/www/admin/index.php index 27d4dbc..9a51361 100644 --- a/www/admin/index.php +++ b/www/admin/index.php @@ -1,348 +1,22 @@ cfg('timezone')); -run_cronjobs(); - -###################### -### START OF LOGIN ### -###################### - -if (isset($_POST['stayonline']) && $_POST['stayonline'] == 1) { - admin_set_cookie ( $_POST['username'], $_POST['userpassword'] ); -} - -if (isset($_COOKIE['login']) && $_COOKIE['login'] && !is_authorized()) { - $userpassword = substr ($_COOKIE['login'], 0, 32); - $username = substr($_COOKIE['login'], 32, strlen ($_COOKIE['login'])); - admin_login($username, $userpassword, TRUE); -} - -if (isset($_POST['login']) && $_POST['login'] == 1 && !is_authorized()) { - admin_login($_POST['username'], $_POST['userpassword'], false); -} - -#################### -### END OF LOGIN ### -#################### - - -################################## -### START OF DETECTING SUBPAGE ### -################################## - -// security functions -!isset($_REQUEST['go']) ? $_REQUEST['go'] = null : 1; -$go = $_REQUEST['go']; - -// get page-data from database -$acp_arr = $sql->conn()->prepare( - 'SELECT page_id, page_file, P.group_id AS group_id, menu_id - FROM '.$FD->config('pref').'admin_cp P, '.$FD->config('pref').'admin_groups G - WHERE P.`group_id` = G.`group_id` AND P.`page_id` = ? AND P.`page_int_sub_perm` != 1'); -$acp_arr->execute(array($go)); -$acp_arr = $acp_arr->fetch(PDO::FETCH_ASSOC); - -// if page exisits -if (!empty($acp_arr)) { - - // if page is start page - if ($acp_arr['group_id'] == -1) { - $acp_arr['menu_id'] = $acp_arr['page_file']; - $acp_arr['page_file'] = $acp_arr['page_id'].'.php'; - } - - //if popup - if ($acp_arr['group_id'] == 'popup') { - define('POPUP', true); - $title = $FD->text("menu", 'page_title_'.$acp_arr['page_id']); - } else { - define('POPUP', false); - $title = $FD->text("menu", 'group_'.$acp_arr['group_id']).' » '.$FD->text("menu", 'page_title_'.$acp_arr['page_id']); - } - - // get the page-data - $PAGE_DATA_ARR = createpage($title, has_perm($acp_arr['page_id']), $acp_arr['page_file'], $acp_arr['menu_id']); - - // initialise templatesystem - $adminpage = new adminpage($acp_arr['page_file']); - - // Get Special Page Lang-Text-Files - $page_lang = new lang($FD->config('language_text'), 'admin/'.substr($acp_arr['page_file'], 0, -4)); - $FD->setPageText($page_lang); - unset ($page_lang); - -} else { - $PAGE_DATA_ARR['created'] = false; - define('POPUP', false); -} - -// logout -if ( $PAGE_DATA_ARR['created'] === false && $go == 'logout' ) { - setcookie ('login', '', time() - 3600, '/'); - $_SESSION = array(); - $PAGE_DATA_ARR = createpage($FD->text("menu", "admin_logout_text"), true, 'admin_logout.php', 'dash'); -} - -// login -elseif ( $PAGE_DATA_ARR['created'] === false && ($go == 'login' || empty($go)) ) { - $go = 'login'; - $PAGE_DATA_ARR = createpage($FD->text("menu", "admin_login_text"), true, 'admin_login.php', 'dash'); -} - -// error -elseif ( $PAGE_DATA_ARR['created'] === false ) { - $go = '404'; - $PAGE_DATA_ARR = createpage($FD->text("menu", "admin_error_page_title"), true, 'admin_404.php', 'error'); -} - - - -// Define Constant -define('ACP_GO', $go); - -################################ -### END OF DETECTING SUBPAGE ### -################################ - - -########################## -### START OF HTML HEAD ### -########################## -ob_start(); -echo' - - - - - Frogsystem 2 - '.$PAGE_DATA_ARR['title'].' - - - - - - - - - - - - - - - - - - - - - -'; -$head = ob_get_clean(); -######################## -### END OF HTML HEAD ### -######################## - -if (POPUP !== true) { -########################## -### START OF PAGE HEAD ### -########################## -echo $head; -echo' - - - - -'; -######################## -### END OF PAGE HEAD ### -######################## - - -############################## -### START OF NAVI CREATION ### -############################## - -// get navi from DB -$template_navi = get_leftmenu($PAGE_DATA_ARR['menu'], ACP_GO); - -############################ -### END OF NAVI CREATION ### -############################ - - -################################## -### START OF MENU/NAVI DISPLAY ### -################################## -echo' - - -
-
- '.get_topmenu($PAGE_DATA_ARR['menu']); //creates the menu list -echo ' -
- -
'; - -if (is_authorized()) { - $log_link = 'logout'; - $log_image = 'logout.gif'; - $log_text = $FD->text("menu", "admin_logout_text"); -} else { - $log_link = 'login'; - $log_image = 'login.gif'; - $log_text = $FD->text("menu", "admin_login_text"); -} - -echo' - - - - - -
- - - - - - '.$log_text.' - -
-
- - - -
- - - - -'; -################################ -### END OF MENU/NAVI DISPLAY ### -################################ - - -################################ -### START OF CONTENT DISPLAY ### -################################ -// Include Content File - - -echo ' - -
'; - -ob_start(); -require(FS2_ROOT_PATH . 'admin/'.$PAGE_DATA_ARR['file']); -$content = ob_get_clean(); - -$top = '

('.$PAGE_DATA_ARR['title'].')

'; -echo get_content_container($top, $content); - -echo ' -
- - -
- - - - -'; - -############################## -### END OF CONTENT DISPLAY ### -############################## - -} else { -###################################### -### START OF DISPLAY POPUP CONTENT ### -###################################### -$JUST_CONTENT = false; - -ob_start(); -require(FS2_ROOT_PATH . 'admin/'.$PAGE_DATA_ARR['file']); -$popup = ob_get_clean(); - -if ($JUST_CONTENT !== true) { - -echo $head; -echo' - -
-  ->  - '.$PAGE_DATA_ARR['title'].' -
-
-'; - -echo $popup; - -echo' -
- - -'; -} else { - echo $popup; -} - -#################################### -### END OF DISPLAY POPUP CONTENT ### -#################################### -} - -unset($sql); +// Include the main content file +require_once(FS2SOURCE . '/admin/admin.php'); ?> diff --git a/www/admin/start_general.php b/www/admin/start_general.php index bfb7bc0..f8b9f6a 100644 --- a/www/admin/start_general.php +++ b/www/admin/start_general.php @@ -1,15 +1,15 @@ conn()->query('SELECT s_year, s_month, s_day FROM `'.$FD->config('pref').'counter_stat` ORDER BY `s_year`, `s_month`, `s_day` LIMIT 1'); +$online_since = $FD->db()->conn()->query('SELECT s_year, s_month, s_day FROM `'.$FD->config('pref').'counter_stat` ORDER BY `s_year`, `s_month`, `s_day` LIMIT 1'); $online_since = $online_since->fetch(PDO::FETCH_ASSOC); $online_since = date_loc($FD->config('date'), strtotime($online_since['s_year'].'-'.$online_since['s_month'].'-'.$online_since['s_day'])); // Total -$total = $sql->conn()->query('SELECT visits, hits FROM `'.$FD->config('pref').'counter` LIMIT 1'); +$total = $FD->db()->conn()->query('SELECT visits, hits FROM `'.$FD->config('pref').'counter` LIMIT 1'); $total = $total->fetch(PDO::FETCH_ASSOC); // Today -$today = $sql->conn()->query('SELECT s_hits, s_visits FROM `'.$FD->config('pref').'counter_stat` WHERE `s_year` = \''.(int) $FD->env('year')."' AND `s_month` = '".(int) $FD->env('month')."' AND `s_day` = '".(int) $FD->env('day')."' LIMIT 1"); +$today = $FD->db()->conn()->query('SELECT s_hits, s_visits FROM `'.$FD->config('pref').'counter_stat` WHERE `s_year` = \''.(int) $FD->env('year')."' AND `s_month` = '".(int) $FD->env('month')."' AND `s_day` = '".(int) $FD->env('day')."' LIMIT 1"); $today = $today->fetch(PDO::FETCH_ASSOC); @@ -17,12 +17,12 @@ $online = get_online_ips(); // Referrer Num -$index = $sql->conn()->query("SELECT COUNT(`ref_url`) AS 'ref_num' FROM ".$FD->config('pref')."counter_ref"); +$index = $FD->db()->conn()->query("SELECT COUNT(`ref_url`) AS 'ref_num' FROM ".$FD->config('pref')."counter_ref"); $ref['num'] = $index->fetchColumn(); if ($ref['num'] > 0) { // last Ref - $index = $sql->conn()->query('SELECT ref_url, ref_last FROM '.$FD->config('pref').'counter_ref ORDER BY ref_last DESC LIMIT 0,1'); + $index = $FD->db()->conn()->query('SELECT ref_url, ref_last FROM '.$FD->config('pref').'counter_ref ORDER BY ref_last DESC LIMIT 0,1'); $row = $index->fetch(PDO::FETCH_ASSOC); $ref['url'] = $row['ref_url']; $ref['shorturl'] = cut_in_string($ref['url'], 50, '...'); diff --git a/www/classes/config/ConfigEnv.php b/www/classes/config/ConfigEnv.php index 19059f4..01f60fc 100644 --- a/www/classes/config/ConfigEnv.php +++ b/www/classes/config/ConfigEnv.php @@ -2,7 +2,7 @@ /** * @file ConfigEnv.php * @folder /classes/config/ - * @version 0.2 + * @version 0.4 * @author Sweil * * this class provides the init of environment vars @@ -13,8 +13,9 @@ class ConfigEnv extends ConfigData { // startup protected function startup() { - global $sql, $spam, $path; - + // Load env config + $this->setConfigByFile('env'); + // set env data $this->setConfig('date', time()); $this->setConfig('time', $this->get('date')); @@ -22,11 +23,22 @@ protected function startup() { $this->setConfig('month', date('m', $this->get('date'))); $this->setConfig('day', date('d', $this->get('date'))); $this->setConfig('hour', date('H', $this->get('date'))); - $this->setConfig('min', date('i', $this->get('date'))); - $this->setConfig('pref', $sql->getPrefix()); - $this->setConfig('spam', $spam); - $this->setConfig('data', $sql->getDatabaseName()); - $this->setConfig('path', $path); + $this->setConfig('minute', date('i', $this->get('date'))); + + // DEPRECATED + $this->setConfig('min', $this->get('minute')); + $this->setConfig('pref', $this->get('DB_PREFIX')); + $this->setConfig('spam', $this->get('SPAM_KEY')); + $this->setConfig('data', $this->get('DB_NAME')); + $this->setConfig('path', FS2CONTENT); } + + // get config entry + public function get($name) { + if (oneof($name, 'pref', 'spam', 'data', 'path', 'min')) { + trigger_error("Usage of config value env/{$name} is deprecated.", E_USER_DEPRECATED); + } + return $this->config[$name]; + } } ?> diff --git a/www/classes/config/ConfigMain.php b/www/classes/config/ConfigMain.php index 0297b4a..0c4d571 100644 --- a/www/classes/config/ConfigMain.php +++ b/www/classes/config/ConfigMain.php @@ -13,13 +13,13 @@ class ConfigMain extends ConfigData { // startup protected function startup() { - global $sql, $spam, $path; + global $FD; // TODO: remove backwards compatibility, (soll in Zukunft nur in env) - $this->setConfig('pref', $sql->getPrefix()); - $this->setConfig('spam', $spam); - $this->setConfig('data', $sql->getDatabaseName()); - $this->setConfig('path', $path); + $this->setConfig('pref', $FD->env('DB_PREFIX')); + $this->setConfig('spam', $FD->env('SPAM_KEY')); + $this->setConfig('data', $FD->env('DB_NAME')); + $this->setConfig('path', FS2CONTENT); // rewrite to other protocol if allowd if ($this->get('other_protocol')) { @@ -58,5 +58,13 @@ private function getRealHome ($home, $home_text) { private function getLanguage ($language_text) { return (is_language_text($language_text)) ? substr($language_text, 0, 2) : $language_text; } + + // get config entry + public function get($name) { + if (oneof($name, 'pref', 'spam', 'data', 'path')) { + trigger_error("Usage of config value main/{$name} is deprecated.", E_USER_DEPRECATED); + } + return $this->config[$name]; + } } ?> diff --git a/www/config/env-example.cfg.php b/www/config/env-example.cfg.php new file mode 100644 index 0000000..a5b8725 --- /dev/null +++ b/www/config/env-example.cfg.php @@ -0,0 +1,13 @@ + 'mysql', + 'DB_NAME' => 'fs2', + 'DB_USER' => 'frogsystem', + 'DB_PASSWORD' => 'frogsystem', + 'DB_HOST' => 'localhost', + 'DB_CHARSET' => 'utf8', + 'DB_PREFIX' => 'fs2_', + + 'SPAM_KEY' => '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ', +); +?> diff --git a/www/feeds/news-sitemap.php b/www/feeds/news-sitemap.php index 7c27dc3..f103279 100644 --- a/www/feeds/news-sitemap.php +++ b/www/feeds/news-sitemap.php @@ -35,7 +35,7 @@ protected function loadData() { global $FD; // Include functions & libs - require_once(FS2_ROOT_PATH . 'includes/fscode.php'); + require_once(FS2SOURCE . '/includes/fscode.php'); // Load virtualhost if (is_empty($virtualhost = $FD->cfg('virtualhost'))) { diff --git a/www/filebackups-remove-for-release/admin_phrases_de.php b/www/filebackups-remove-for-release/admin_phrases_de.php deleted file mode 100644 index 042e00a..0000000 --- a/www/filebackups-remove-for-release/admin_phrases_de.php +++ /dev/null @@ -1,1233 +0,0 @@ -">'; -$admin_phrases['common']['save_long'] = "Änderungen speichern"; -$admin_phrases['common']['do_button'] = "Ausführen"; -$admin_phrases['common']['do_button_long'] = "Aktion ausführen"; -$admin_phrases['common']['search_button'] = "Suchen"; -$admin_phrases['common']['now_button'] = "Jetzt"; -$admin_phrases['common']['today'] = "Heute"; -$admin_phrases['common']['change_button'] = "Ändern"; -$admin_phrases['common']['add_button'] = "Hinzufügen"; -$admin_phrases['common']['delete_button'] = "Löschen"; -$admin_phrases['common']['show_button'] = "Anzeigen"; -$admin_phrases['common']['preview_button'] = "Vorschau anzeigen"; -$admin_phrases['common']['apply_button'] = "Anwenden"; - -$admin_phrases['common']['yes'] = "Ja"; -$admin_phrases['common']['no'] = "Nein"; -$admin_phrases['common']['on'] = "an"; -$admin_phrases['common']['off'] = "aus"; -$admin_phrases['common']['to'] = "bis"; -$admin_phrases['common']['by'] = "von"; -$admin_phrases['common']['by_posted'] = "geschrieben von"; -$admin_phrases['common']['in'] = "in"; - -$admin_phrases['common']['on_date'] = "am"; -$admin_phrases['common']['at_time'] = "um"; -$admin_phrases['common']['time_appendix'] = "Uhr"; - -$admin_phrases['common']['time_format'] = "H:i \U\h\\r"; -$admin_phrases['common']['date_format'] = "d.m.Y"; -$admin_phrases['common']['date_time_format'] = "\a\m d.m.Y \u\m H:i \U\h\\r"; - -$admin_phrases['common']['comment'] = "Kommentar"; -$admin_phrases['common']['comments'] = "Kommentare"; -$admin_phrases['common']['link'] = "Link"; -$admin_phrases['common']['links'] = "Links"; - -$admin_phrases['common']['no_image'] = "Es wurde kein Bild gefunden."; -$admin_phrases['common']['delete_image'] = "Bild löschen"; -$admin_phrases['common']['js_delete_image'] = "Soll das Bild wirklich gelöscht werden?"; -$admin_phrases['common']['replace_img'] = "Nur auswählen, wenn das bisherige Bild überschrieben werden soll!"; - - - -//////////// -// icons // -//////////// - -$admin_phrases['icons']['error'] = ''; -$admin_phrases['icons']['ok'] = ''; -$admin_phrases['icons']['arrow'] = '->'; -$admin_phrases['icons']['save_small'] = ''; -$admin_phrases['icons']['save_ok'] = ''; -$admin_phrases['icons']['save_add'] = ''; -$admin_phrases['icons']['save_error'] = ''; -$admin_phrases['icons']['trash_ok'] = ''; -$admin_phrases['icons']['trash_error'] = ''; - - -//////////// -// menu // -//////////// -$admin_phrases['menu']['general'] = "Allgemein"; -$admin_phrases['menu']['content'] = "Inhalt"; -$admin_phrases['menu']['interactive'] = "Interaktiv"; -$admin_phrases['menu']['media'] = "Media"; -$admin_phrases['menu']['promo'] = "Promotion"; -$admin_phrases['menu']['styles'] = "Styles"; -$admin_phrases['menu']['system'] = "System"; -$admin_phrases['menu']['user'] = "User"; -$admin_phrases['menu']['mods'] = "Add Ons"; - - - -//////////////// -// find user // -//////////////// -$admin_phrases['finduser']['pagetitle'] = "User-Suche"; -$admin_phrases['finduser']['searchforuser'] = "suche nach User ..."; -$admin_phrases['finduser']['selectuser'] = "User auswählen"; -$admin_phrases['finduser']['nousersfound'] = "Keine User gefunden!"; - - - -/////////////// -// Allgemein // -/////////////// -$admin_phrases['general']['pageinfo_title'] = "Seiteninformationen"; -$admin_phrases['general']['title'] = "Titel"; -$admin_phrases['general']['title_desc'] = "Der Titel der Seite."; -$admin_phrases['general']['virtualhost'] = "URL"; -$admin_phrases['general']['virtualhost_desc'] = "Die Haupt-URL der Seite."; -$admin_phrases['general']['admin_mail'] = "Email-Adresse"; -$admin_phrases['general']['admin_mail_desc'] = "Die Email-Adresse an die Probleme und Meldungen gesendet werden."; -$admin_phrases['general']['description'] = "Beschreibung"; -$admin_phrases['general']['description_desc'] = "Ein kurzer Text über die Seite."; -$admin_phrases['general']['author'] = "Autor"; -$admin_phrases['general']['author_desc'] = "Der oder die Webmaster der Seite."; -$admin_phrases['general']['keywords'] = "Keywords"; -$admin_phrases['general']['keywords_desc'] = "Stichwörter zur Seite, bitte mit Kommas trennen.
Wichtig für Suchmaschinen!"; - -$admin_phrases['general']['design_title'] = "Design"; -$admin_phrases['general']['design'] = "Design"; -$admin_phrases['general']['design_desc'] = "Design, in dem die Seite angezeigt wird."; -$admin_phrases['general']['allow_other_designs'] = "Andere Styles erlauben"; -$admin_phrases['general']['allow_other_designs_desc'] = "Ermöglicht das Anzeigen der Seite in anderen Styles.
(http://www.example.com/?style=xyz)"; -$admin_phrases['general']['show_favicon'] = "Favicon verwenden"; -$admin_phrases['general']['show_favicon_desc'] = "Bindet das Favicon ein.
(\$VAR(style_icons)/favicon.ico)"; - -$admin_phrases['general']['settings_title'] = "Seiteneinstellungen"; -$admin_phrases['general']['home_page'] = "Startseite"; -$admin_phrases['general']['home_page_desc'] = "Legt die Seite fest, die standardmäßig angezeigt wird."; -$admin_phrases['general']['home_page_default'] = "Standard (?go=news)"; -$admin_phrases['general']['show_announcement'] = "Ankündigung anzeigen"; -$admin_phrases['general']['show_announcement_desc'] = "Seiten auf denen die Ankündigung angezeigt wird."; -$admin_phrases['general']['show_ann_always'] = "überall"; -$admin_phrases['general']['show_ann_home'] = "Startseite"; -$admin_phrases['general']['show_ann_never'] = "nie"; -$admin_phrases['general']['language'] = "Sprache"; -$admin_phrases['general']['language_desc'] = "Die Standard Sprache des Admin-CPs."; -$admin_phrases['general']['language_de'] = "Deutsch"; -$admin_phrases['general']['language_en'] = "English"; -$admin_phrases['general']['feed'] = "Feed"; -$admin_phrases['general']['feed_desc'] = "Standard Feed der Seite, der im Html-Kopf eingebunden wird."; -$admin_phrases['general']['feed_rss091'] = "RSS 0.91"; -$admin_phrases['general']['feed_rss10'] = "RSS 1.0"; -$admin_phrases['general']['feed_rss20'] = "RSS 2.0"; -$admin_phrases['general']['feed_atom10'] = "Atom 1.0"; -$admin_phrases['general']['reg_antispam'] = "Anti-Spam bei Registrierung"; -$admin_phrases['general']['reg_antispam_desc'] = "Aktiviert die Anti-Spam Abfrage bei der Registrierung."; -$admin_phrases['general']['date'] = "Datum"; -$admin_phrases['general']['date_desc'] = "Datumsformat, das auf der Seite verwendet werden soll."; -$admin_phrases['general']['date_info'] = 'verwendet den Syntax der PHP-Funktion date()'; - -$admin_phrases['general']['pagenav_title'] = "Seitennavigation"; -$admin_phrases['general']['page'] = "Seitenanzeige"; -$admin_phrases['general']['page_desc'] = "Design der Seitenanzeige bei mehrseitigen Anzeigen."; -$admin_phrases['general']['page_info'] = "{page_number} = aktuelle Seite; {prev} = Seite zurück
{total_pages} = Seitenzahl; {next} = Seite weiter"; -$admin_phrases['general']['page_prev'] = "Seite zurück"; -$admin_phrases['general']['page_prev_desc'] = 'Design der "Seite zurück" Schaltfläche.'; -$admin_phrases['general']['page_prev_info'] = "{url} = URL zur vorherigen Seite"; -$admin_phrases['general']['page_next'] = "Seite weiter"; -$admin_phrases['general']['page_next_desc'] = 'Design der "Seite weiter" Schaltfläche. '; -$admin_phrases['general']['page_next_info'] = "{url} = URL zur nächsten Seite"; - - -$admin_phrases['general']['ann_settings_title'] = "Einstellungen"; -$admin_phrases['general']['activate_ann'] = 'Ankündigung freischalten'; -$admin_phrases['general']['activate_ann_desc'] = "Schaltet die Ankündigung zur Anzeige auf der Seite frei."; -$admin_phrases['general']['ann_title'] = "Ankündigung schreiben"; -$admin_phrases['general']['ann_write_desc'] = "Eine leere Ankündigung wird nicht angezeigt."; - - -$admin_phrases['general']['phpinfo_title'] = "PHP & Serverinformationen"; -$admin_phrases['general']['phpinfo_version'] = "PHP Version"; -$admin_phrases['general']['phpinfo_zendversion'] = "Zend-Engine Version"; -$admin_phrases['general']['phpinfo_phpuser'] = "PHP User"; -$admin_phrases['general']['phpinfo_servername'] = "Servername"; -$admin_phrases['general']['phpinfo_serverip'] = "IP-Adresse & Port"; -$admin_phrases['general']['phpinfo_serverprotocol'] = "Protokoll"; -$admin_phrases['general']['phpinfo_serversoftware'] = "Server Software"; -$admin_phrases['general']['phpinfo_show_link'] = "vollständige PHP Info anzeigen"; - - -$admin_phrases['general']['email_info'] = "Hinweise"; -$admin_phrases['general']['email_info_text'] = "Als Absender wird die unter Konfiguration angegebene Email-Adresse verwendet.
HTML und FSCode sind erlaubt, sollten aber vermieden werden."; -$admin_phrases['general']['email_templates_title'] = "Email-Vorlagen"; -$admin_phrases['general']['email_reg_title'] = "Registrierung"; -$admin_phrases['general']['email_reg_desc'] = "Email, die der Benutzer bei der Registrierung auf der Seite erhält."; -$admin_phrases['general']['email_newpwd_title'] = "Passwortänderung"; -$admin_phrases['general']['email_newpwd_desc'] = "Email, die der Benutzer bei einer Passwortänderung erhält."; -$admin_phrases['general']['email_delete_title'] = "Accountlöschung"; -$admin_phrases['general']['email_delete_desc'] = "Email, die der Benutzer im Falle einer Löschung seines Accounts erhält."; -$admin_phrases['general']['email_username'] = "Der Benutzername des Users."; -$admin_phrases['general']['email_password'] = "Das Passwort des Users."; -$admin_phrases['general']['email_virtualhost'] = "URL zur Seite."; - - -//////////// -// Editor // -//////////// -$admin_phrases['editor']['view_settings_title'] = "Anzeigeeinstellungen"; -$admin_phrases['editor']['textarea_size'] = "Textfeld Abmessungen"; -$admin_phrases['editor']['textarea_size_desc'] = "Die Abmessungen, des Textfeldes des öffentlichen Editors."; -$admin_phrases['editor']['smilies'] = "Smilies"; -$admin_phrases['editor']['smilies_desc'] = "Anzahl der Smilies, die im öffentlichen Editor angezeigt werden."; -$admin_phrases['editor']['smilies_rows'] = "Reihen à"; -$admin_phrases['editor']['smilies_smilies'] = "Smilies"; - -$admin_phrases['editor']['buttons_settings_title'] = "Buttoneinstellungen"; -$admin_phrases['editor']['buttons'] = "Öffentliche Buttons"; -$admin_phrases['editor']['buttons_desc'] = "Buttons, die im öffentlichen Editor angezeigt werden."; - -$admin_phrases['editor']['fscode_settings_title'] = "FSCode-Einstellungen"; -$admin_phrases['editor']['fscode'] = "Von Usern verwendbare FSCodes"; -$admin_phrases['editor']['fscode_desc'] = "FS-Codes, die von Usern verwendet werden können."; -$admin_phrases['editor']['fscode_info'] = "Nicht gewählte FSCodes werden in von Usern erstellten Beiträgen (z.B. Kommentaren) nicht umgewandelt!"; - - -$admin_phrases['editor']['smilie_add_title'] = "Neuen Smilie hinzufügen"; -$admin_phrases['editor']['smilie_add_select'] = "Smilie auswählen"; -$admin_phrases['editor']['smilie_add_text'] = "Ersetungstext"; -$admin_phrases['editor']['smilie_add_insert'] = "Einfügen nach"; -$admin_phrases['editor']['smilie_add_at_beginn'] = "am Anfang"; -$admin_phrases['editor']['smilie_add_at_end'] = "am Ende"; -$admin_phrases['editor']['smilie_add_button'] = "hochladen & hinzufügen"; - -$admin_phrases['editor']['smilie_management_title'] = "Smilieverwaltung"; -$admin_phrases['editor']['smilies_replacement'] = "Text"; -$admin_phrases['editor']['smilies_order'] = "Sortierung"; -$admin_phrases['editor']['smilies_delete'] = "Löschen"; -$admin_phrases['editor']['smilies_up'] = "nach oben"; -$admin_phrases['editor']['smilies_down'] = "nach unten"; -$admin_phrases['editor']['smilies_shown'] = "werden angezeigt"; -$admin_phrases['editor']['smilies_not_shown'] = "werden nicht angezeigt"; -$admin_phrases['editor']['smilies_delnotconfirm'] = "gewählte Smilies nicht löschen"; -$admin_phrases['editor']['smilies_delconfirm'] = "gewählte Smilies löschen"; - -$admin_phrases['editor']['smilies_no_smilies'] = "Keine Smilies gefunden"; - - - -/////////////// -// Statistik // -/////////////// -$admin_phrases['stats']['edit_day_title'] = "Tagesstatistik bearbeiten"; -$admin_phrases['stats']['edit_day'] = "Tag auswählen"; -$admin_phrases['stats']['edit_day_desc'] = "Datum, das bearbeitet werden soll."; -$admin_phrases['stats']['edit_day_info'] = "['TT'] . ['MM'] . ['JJJJ']"; -$admin_phrases['stats']['edit_day_button'] = "Auswahl bearbeiten"; -$admin_phrases['stats']['edit_day_no_data'] = "Für das angegebenen Datum wurden keine Daten gefunden"; -$admin_phrases['stats']['edit_day_visits'] = "Besucher"; -$admin_phrases['stats']['edit_day_visits_desc'] = "Anzahl der Besucher am"; -$admin_phrases['stats']['edit_day_hits'] = "Hits"; -$admin_phrases['stats']['edit_day_hits_desc'] = "Anzahl der Seitenaufrufe am"; - -$admin_phrases['stats']['sync_title'] = ""; -$admin_phrases['stats']['sync_now'] = "Statistik synchronisieren"; -$admin_phrases['stats']['sync_now_desc'] = "Synchronisiert die Statistik mit den Werten aus der Datenbank."; -$admin_phrases['stats']['sync_now_button'] = "Jetzt synchronisieren"; -$admin_phrases['stats']['synchronised'] = "Statistik wurde synchronisiert"; - -$admin_phrases['stats']['overall_title'] = "Gesamtstatistik"; -$admin_phrases['stats']['overall_visits'] = "Besucher gesamt"; -$admin_phrases['stats']['overall_visits_desc'] = "Anzahl der Besucher die bisher auf der Seite waren."; -$admin_phrases['stats']['overall_hits'] = "Hits gesamt"; -$admin_phrases['stats']['overall_hits_desc'] = "Anzahl der Seitenaufrufe."; -$admin_phrases['stats']['overall_user'] = "User gesamt"; -$admin_phrases['stats']['overall_user_desc'] = "Anzahl der registrierten User."; -$admin_phrases['stats']['overall_news'] = "News gesamt"; -$admin_phrases['stats']['overall_news_desc'] = "Anzahl der geschriebenen News."; -$admin_phrases['stats']['overall_articles'] = "Artikel gesamt"; -$admin_phrases['stats']['overall_articles_desc'] = "Anzahl der geschriebenen Artikel."; -$admin_phrases['stats']['overall_comments'] = "Kommentare gesamt"; -$admin_phrases['stats']['overall_comments_desc'] = "Anzahl der geschriebenen Kommentare."; - - -$admin_phrases['stats']['referrer_filter_title'] = "Filter definieren"; -$admin_phrases['stats']['referrer_list_title'] = "Referrer-Liste"; -$admin_phrases['stats']['referrer_delete_title'] = "Einträge entfernen"; -$admin_phrases['stats']['referrer_hits'] = "Hits"; -$admin_phrases['stats']['referrer_first'] = "Erster Kontakt"; -$admin_phrases['stats']['referrer_last'] = "Letzter Kontakt"; -$admin_phrases['stats']['referrer_url'] = "URL"; -$admin_phrases['stats']['referrer_show'] = "Zeige"; -$admin_phrases['stats']['referrer_orderby'] = "Einträge sortiert nach"; -$admin_phrases['stats']['referrer_filter'] = "Filter"; -$admin_phrases['stats']['referrer_filter_info1'] = "Setzten Sie ein Ausrufezeichen (!) an erster Stelle um den Suchbegriff auszuschließen."; -$admin_phrases['stats']['referrer_filter_info2'] = "Mehrere Suchbegriffe können mit Komma (,) voneinander getrennt werden."; -$admin_phrases['stats']['referrer_table_title'] = "Referrer von externen Seiten"; -$admin_phrases['stats']['referrer_table_url'] = "Referrer URL"; -$admin_phrases['stats']['referrer_table_hits'] = "Hits"; -$admin_phrases['stats']['referrer_table_first'] = "Erster Kontakt"; -$admin_phrases['stats']['referrer_table_last'] = "Letzter Kontakt"; -$admin_phrases['stats']['referrer_unknown'] = "Unbekannt"; -$admin_phrases['stats']['referrer_no_entries'] = "Keine passenden Einträge gefunden!"; -$admin_phrases['stats']['referrer_delete_entries'] = "Entferne alle Einträge"; -$admin_phrases['stats']['referrer_delete_with'] = "mit"; -$admin_phrases['stats']['referrer_delete_older'] = "älter als"; -$admin_phrases['stats']['referrer_delete_younger'] = "innerhalb der letzen"; -$admin_phrases['stats']['referrer_delete_days'] = "Tage"; -$admin_phrases['stats']['referrer_delete_and'] = "und"; -$admin_phrases['stats']['referrer_delete_less'] = "weniger als"; -$admin_phrases['stats']['referrer_delete_more'] = "mehr als"; -$admin_phrases['stats']['referrer_delete_hits'] = "Hits"; -$admin_phrases['stats']['referrer_delete_button'] = "definierte Einträge entfernen"; -$admin_phrases['stats']['referrer_not_enough_days'] = "Es muss mindestens 1 Tag angegeben werden"; -$admin_phrases['stats']['referrer_not_enough_hits'] = "Es muss mindestens 1 Hit angegeben werden"; -$admin_phrases['stats']['referrer_deleted_entries'] = "Einträge mit diesen Eigenschaften wurden gelöscht"; - - - -////////// -// News // -////////// -$admin_phrases['news']['settings_title'] = "Einstellungen"; -$admin_phrases['news']['news_per_page'] = "News pro Seite"; -$admin_phrases['news']['news_per_page_desc'] = "Anzahl der News, die pro Seite angezeigt werden."; -$admin_phrases['news']['num_headlines'] = "Headlines"; -$admin_phrases['news']['num_headlines_desc'] = "Anzahl der Headlines, die angezeigt werden."; - -$admin_phrases['news']['post_settings_title'] = "Beiträge"; -$admin_phrases['news']['allow_html'] = "HTML-Code"; -$admin_phrases['news']['allow_html_desc'] = "Erlaubt HTML-Code in ..."; -$admin_phrases['news']['allow_fs'] = "FSCode"; -$admin_phrases['news']['allow_fs_desc'] = "Erlaubt FSCode in ..."; -$admin_phrases['news']['allow_para'] = "Absatzbehandlung"; -$admin_phrases['news']['allow_para_desc'] = "Aktiviert die Absatzbehandlung in ..."; -$admin_phrases['news']['allow_code_no'] = "Aus"; -$admin_phrases['news']['allow_code_news'] = "News"; -$admin_phrases['news']['allow_code_comments'] = "Kommentaren"; -$admin_phrases['news']['allow_code_both'] = "News & Kommentaren"; - -$admin_phrases['news']['cat_settings_title'] = "Kategorien"; -$admin_phrases['news']['cat_img_max_width'] = "Kategorie Bild - max. Breite"; -$admin_phrases['news']['cat_img_max_width_desc'] = "Max. Breite eines Kategorie Bildes in Pixeln."; -$admin_phrases['news']['cat_img_max_height'] = "Kategorie Bild - max. Höhe"; -$admin_phrases['news']['cat_img_max_height_desc'] = "Max. Höhe eines Kategorie Bildes in Pixeln."; -$admin_phrases['news']['cat_img_max_size'] = "Kategorie Bild - max. Dateigröße"; -$admin_phrases['news']['cat_img_max_size_desc'] = "Max. Dateigröße eines Kategorie Bildes in KiB."; - -$admin_phrases['news']['comment_settings_title'] = "Kommentare"; -$admin_phrases['news']['allow_comments'] = "Kommentare erlauben für"; -$admin_phrases['news']['allow_comments_desc'] = "Kommentare schreiben erlauben für ..."; -$admin_phrases['news']['allow_comments_all'] = "alle User"; -$admin_phrases['news']['allow_comments_staff'] = "Mitarbeiter"; -$admin_phrases['news']['allow_comments_reg'] = "registrierte User"; -$admin_phrases['news']['allow_comments_nobody'] = "niemanden"; -$admin_phrases['news']['sort_comments'] = "Kommentare sortieren"; -$admin_phrases['news']['sort_comments_desc'] = "Die Anzeige-Reihenfolge der Kommentare."; -$admin_phrases['news']['sort_comments_old_first'] = "Alte zuerst"; -$admin_phrases['news']['sort_comments_new_first'] = "Neue zuerst"; -$admin_phrases['news']['anti_spam_comments'] = "Anti Spam bei Kommentaren für"; -$admin_phrases['news']['anti_spam_comments_desc'] = "Anti Spam Captcha bei Kommentaren aktivieren für ..."; -$admin_phrases['news']['anti_spam_comments_all'] = "alle User"; -$admin_phrases['news']['anti_spam_comments_staff'] = "alle außer Mitarbeiter"; -$admin_phrases['news']['anti_spam_comments_reg'] = "nicht registrierte User"; -$admin_phrases['news']['anti_spam_comments_nobody'] = "niemanden"; - - -$admin_phrases['news']['news_information_title'] = "Informationen"; -$admin_phrases['news']['news_cat'] = "Kategorie"; -$admin_phrases['news']['news_cat_desc'] = "Die Kategorie, der die News angehört."; -$admin_phrases['news']['news_date'] = "Datum & Uhrzeit"; -$admin_phrases['news']['news_date_desc'] = "Erscheinungszeitpunkt der News."; -$admin_phrases['news']['news_poster'] = "Poster"; -$admin_phrases['news']['news_poster_desc'] = "Der Verfasser der News."; - -$admin_phrases['news']['news_new_title'] = "News schreiben"; -$admin_phrases['news']['news_title'] = "Titel"; -$admin_phrases['news']['news_active'] = "News veröffentlichen"; -$admin_phrases['news']['news_comments_allowed'] = "Kommentare erlauben"; -$admin_phrases['news']['news_text'] = "Text"; -$admin_phrases['news']['news_add_button'] = "News hinzufügen"; -$admin_phrases['news']['news_added'] = "News wurde erfolgreich hinzugefügt"; -$admin_phrases['news']['news_not_added'] = "News wurde nicht hinzugefügt"; - -$admin_phrases['news']['news_link_add'] = "Link hinzufügen"; -$admin_phrases['news']['news_link_title'] = "Titel"; -$admin_phrases['news']['news_link_url'] = "URL"; -$admin_phrases['news']['news_link_open'] = "Link öffnen in"; -$admin_phrases['news']['news_link_blank'] = "neues Fenster"; -$admin_phrases['news']['news_link_self'] = "gleiches Fenster"; -$admin_phrases['news']['news_link_no'] = "keine Aktion"; -$admin_phrases['news']['news_link_delete'] = "Auswahl löschen"; -$admin_phrases['news']['news_link_up'] = "nach oben verschieben"; -$admin_phrases['news']['news_link_down'] = "nach unten verschieben"; -$admin_phrases['news']['news_link_edit'] = "zum Bearbeiten übernehmen"; - - -$admin_phrases['news']['new_cat_added'] = "Kategorie wurde erfolgreich hinzugefügt"; -$admin_phrases['news']['cat_deleted'] = "Kategorie wurde erfolgreich gelöscht"; -$admin_phrases['news']['cat_not_deleted'] = "Kategorie wurde nicht gelöscht"; - -$admin_phrases['news']['new_cat_title'] = "Kategorie hinzufügen"; -$admin_phrases['news']['new_cat_name'] = "Name"; -$admin_phrases['news']['new_cat_image'] = "Bild"; -$admin_phrases['news']['new_cat_add_button'] = "Hinzufügen & weitere Einstellungen vornehmen"; - -$admin_phrases['news']['list_cat_title'] = "Kategorieverwaltung"; -$admin_phrases['news']['list_cat_created_by'] = "erstellt von"; -$admin_phrases['news']['list_cat_created_on'] = "am"; - -$admin_phrases['news']['delete_cat_title'] = "Kategorie löschen"; -$admin_phrases['news']['delete_cat_question'] = "Soll diese Kategorie wirklich gelöscht werden"; -$admin_phrases['news']['delete_cat_move_to'] = "News der gelöschten Kategorie verschieben nach"; -$admin_phrases['news']['delete_cat_last'] = "Die letzte Kategorie kann nicht gelöscht werden.
Bitte legen Sie zuerst eine neue Kategorie an."; -$admin_phrases['news']['delete_back_link'] = "zurück zur Übersicht"; - -$admin_phrases['news']['edit_cat_title'] = "Haupteinstellungen"; -$admin_phrases['news']['edit_cat_name'] = "Name"; -$admin_phrases['news']['edit_cat_name_desc'] = "Der Name der Kategorie."; -$admin_phrases['news']['edit_cat_date'] = "Erstellungsdatum"; -$admin_phrases['news']['edit_cat_date_desc'] = "Die Kategorie wurde erstellt am ..."; -$admin_phrases['news']['edit_cat_created_by'] = "Ersteller"; -$admin_phrases['news']['edit_cat_created_by_desc'] = "Die Kategorie wurde erstellt von ..."; -$admin_phrases['news']['edit_cat_title_optional'] = "Zusätzliche Einstellungen"; -$admin_phrases['news']['edit_cat_image'] = "Bild"; -$admin_phrases['news']['edit_cat_description'] = "Beschreibung"; -$admin_phrases['news']['edit_cat_description_desc'] = "Ein kurzer Text über die Kategorie."; - - -$admin_phrases['news']['news_edit_filter_title'] = "Filter & Sortierung"; -$admin_phrases['news']['news_edit_filter_from'] = "News aus"; -$admin_phrases['news']['news_edit_filter_all_cat'] = "allen Kategorien"; -$admin_phrases['news']['news_edit_filter_sort'] = "und sortieren nach"; -$admin_phrases['news']['news_edit_filter_id'] = "News-ID"; -$admin_phrases['news']['news_edit_filter_date'] = "Datum"; -$admin_phrases['news']['news_edit_filter_newstitle'] = "Titel"; -$admin_phrases['news']['news_edit_next_news'] = "weitere News"; -$admin_phrases['news']['news_edit_prev_news'] = "vorherige News"; -$admin_phrases['news']['news_edit_show_news'] = "zeige News"; -$admin_phrases['news']['news_edit_no_news'] = "Keine News gefunden!"; -$admin_phrases['news']['news_edit_select_news'] = "News auswählen"; -$admin_phrases['news']['news_edit_entries_found'] = "Datensätze gefunden"; - -$admin_phrases['news']['news_delete_title'] = "News löschen"; -$admin_phrases['news']['news_delete_view_news'] = "anzeigen"; -$admin_phrases['news']['news_delete_question'] = "Soll(en) die folgende(n) News (inklusive Links und Kommentaren) wirklich unwiderruflich gelöscht werden?"; - -$admin_phrases['news']['news_deleted'] = "News wurde(n) erfolgreich gelöscht"; -$admin_phrases['news']['news_not_deleted'] = "News wurde(n) nicht gelöscht"; -$admin_phrases['news']['news_comment_deleted'] = "Kommentar wurde erfolgreich gelöscht"; - - - -///////////// -// Artikel // -///////////// -$admin_phrases['articles']['post_settings_title'] = "Beiträge"; -$admin_phrases['articles']['post_settings_info'] = "Hinweis: Hier wird nur die grundsätzliche Möglichkeit zur Verwendung eingstellt. Bei jedem Artikel kann die Verwendung von HTML, FSCode und der Absatzbehandlung auch noch seperat (de-)aktiviert werden."; -$admin_phrases['articles']['allow_html'] = "HTML-Code"; -$admin_phrases['articles']['allow_html_desc'] = "Erlaubt HTML-Code in ..."; -$admin_phrases['articles']['allow_fs'] = "FSCode"; -$admin_phrases['articles']['allow_fs_desc'] = "Erlaubt FSCode in ..."; -$admin_phrases['articles']['allow_para'] = "Absatzbehandlung"; -$admin_phrases['articles']['allow_para_desc'] = "Aktiviert die Absatzbehandlung in ..."; -$admin_phrases['articles']['allow_code_no'] = "Aus"; -$admin_phrases['articles']['allow_code_articles'] = "Artikeln"; -$admin_phrases['articles']['allow_code_comments'] = "Kommentaren"; -$admin_phrases['articles']['allow_code_both'] = "Artikeln & Kommentaren"; - -$admin_phrases['articles']['cat_settings_title'] = "Kategorien"; -$admin_phrases['articles']['cat_img_max_width'] = "Kategorie Bild - max. Breite"; -$admin_phrases['articles']['cat_img_max_width_desc'] = "Max. Breite eines Kategorie Bildes in Pixeln."; -$admin_phrases['articles']['cat_img_max_height'] = "Kategorie Bild - max. Höhe"; -$admin_phrases['articles']['cat_img_max_height_desc'] = "Max. Höhe eines Kategorie Bildes in Pixeln."; -$admin_phrases['articles']['cat_img_max_size'] = "Kategorie Bild - max. Dateigröße"; -$admin_phrases['articles']['cat_img_max_size_desc'] = "Max. Dateigröße eines Kategorie Bildes in KiB."; - -$admin_phrases['articles']['comment_settings_title'] = "Kommentare"; -$admin_phrases['articles']['allow_comments'] = "Kommentare erlauben für"; -$admin_phrases['articles']['allow_comments_desc'] = "Kommentare schreiben erlauben für ..."; -$admin_phrases['articles']['allow_comments_all'] = "alle User"; -$admin_phrases['articles']['allow_comments_staff'] = "Mitarbeiter"; -$admin_phrases['articles']['allow_comments_reg'] = "registrierte User"; -$admin_phrases['articles']['allow_comments_nobody'] = "niemanden"; -$admin_phrases['articles']['sort_comments'] = "Kommentare sortieren"; -$admin_phrases['articles']['sort_comments_desc'] = "Die Anzeige-Reihenfolge der Kommentare."; -$admin_phrases['articles']['sort_comments_old_first'] = "Alte zuerst"; -$admin_phrases['articles']['sort_comments_new_first'] = "Neue zuerst"; -$admin_phrases['articles']['spam_comments'] = "Anti Spam bei Kommentaren für"; -$admin_phrases['articles']['spam_comments_desc'] = "Anti Spam Captcha bei Kommentaren aktivieren für ..."; -$admin_phrases['articles']['spam_comments_all'] = "alle User"; -$admin_phrases['articles']['spam_comments_staff'] = "alle außer Mitarbeiter"; -$admin_phrases['articles']['spam_comments_reg'] = "nicht registrierte User"; -$admin_phrases['articles']['spam_comments_nobody'] = "niemanden"; - -$admin_phrases['articles']['new_cat_added'] = "Kategorie wurde erfolgreich hinzugefügt"; -$admin_phrases['articles']['cat_deleted'] = "Kategorie wurde erfolgreich gelöscht"; -$admin_phrases['articles']['cat_not_deleted'] = "Kategorie wurde nicht gelöscht"; - -$admin_phrases['articles']['new_cat_title'] = "Kategorie hinzufügen"; -$admin_phrases['articles']['new_cat_name'] = "Name"; -$admin_phrases['articles']['new_cat_image'] = "Bild"; -$admin_phrases['articles']['new_cat_add_button'] = "Hinzufügen & weitere Einstellungen vornehmen"; - -$admin_phrases['articles']['list_cat_title'] = "Kategorieverwaltung"; -$admin_phrases['articles']['list_cat_created_by'] = "erstellt von"; -$admin_phrases['articles']['list_cat_created_on'] = "am"; - -$admin_phrases['articles']['delete_cat_title'] = "Kategorie löschen"; -$admin_phrases['articles']['delete_cat_question'] = "Soll diese Kategorie wirklich gelöscht werden"; -$admin_phrases['articles']['delete_cat_move_to'] = "News der gelöschten Kategorie verschieben nach"; -$admin_phrases['articles']['delete_cat_last'] = "Die letzte Kategorie kann nicht gelöscht werden.
Bitte legen Sie zuerst eine neue Kategorie an."; -$admin_phrases['articles']['delete_back_link'] = "zurück zur Übersicht"; - -$admin_phrases['articles']['edit_cat_title'] = "Haupteinstellungen"; -$admin_phrases['articles']['edit_cat_name'] = "Name"; -$admin_phrases['articles']['edit_cat_name_desc'] = "Der Name der Kategorie."; -$admin_phrases['articles']['edit_cat_date'] = "Erstellungsdatum"; -$admin_phrases['articles']['edit_cat_date_desc'] = "Die Kategorie wurde erstellt am ..."; -$admin_phrases['articles']['edit_cat_by'] = "Ersteller"; -$admin_phrases['articles']['edit_cat_by_desc'] = "Die Kategorie wurde erstellt von ..."; -$admin_phrases['articles']['edit_cat_title_optional'] = "Zusätzliche Einstellungen"; -$admin_phrases['articles']['edit_cat_image'] = "Bild"; -$admin_phrases['articles']['edit_cat_desc'] = "Beschreibung"; -$admin_phrases['articles']['edit_cat_desc_desc'] = "Ein kurzer Text über die Kategorie."; - -$admin_phrases['articles']['articles_info_title'] = "Informationen"; -$admin_phrases['articles']['articles_url'] = "URL"; -$admin_phrases['articles']['articles_url_desc'] = "Teil der URL, der an ?go= angehängt wird."; -$admin_phrases['articles']['articles_cat'] = "Kategorie"; -$admin_phrases['articles']['articles_cat_desc'] = "Die Kategorie, der der Artikel angehört."; -$admin_phrases['articles']['articles_date'] = "Erstellungsdatum"; -$admin_phrases['articles']['articles_date_desc'] = "Erstellungsdatum des Artikels."; -$admin_phrases['articles']['articles_poster'] = "Autor"; -$admin_phrases['articles']['articles_poster_desc'] = "Der Autor des Artikels."; -$admin_phrases['articles']['articles_new_title'] = "Artikel schreiben"; -$admin_phrases['articles']['articles_title'] = "Titel"; -$admin_phrases['articles']['articles_text'] = "Text"; -$admin_phrases['articles']['articles_add_button'] = "Artikel hinzufügen"; -$admin_phrases['articles']['articles_use_html'] = "HTML verwenden"; -$admin_phrases['articles']['articles_use_fscode'] = "FSCode verwenden"; -$admin_phrases['articles']['articles_use_para'] = "Absatzbehandlung verwenden"; - -$admin_phrases['articles']['articles_added'] = "Artikel wurde erfolgreich hinzugefügt"; -$admin_phrases['articles']['existing_url'] = "Die angegebene URL existiert bereits. Bitte ändern Sie ihre Eingabe!"; - -$admin_phrases['articles']['edit_filter_title'] = "Filter & Sortierung"; -$admin_phrases['articles']['edit_filter_from'] = "Artikel aus"; -$admin_phrases['articles']['edit_filter_all_cat'] = "allen Kategorien"; -$admin_phrases['articles']['edit_filter_sort'] = "und sortieren nach"; -$admin_phrases['articles']['edit_filter_arttitle'] = "Titel"; -$admin_phrases['articles']['edit_filter_date'] = "Datum"; -$admin_phrases['articles']['edit_filter_url'] = "URL"; - -$admin_phrases['articles']['edit_next_article'] = "weitere Artikel"; -$admin_phrases['articles']['edit_prev_article'] = "vorherige Artikel"; -$admin_phrases['articles']['edit_show_articles'] = "zeige Artikel"; -$admin_phrases['articles']['edit_no_articles'] = "Keine Artikel gefunden!"; - -$admin_phrases['articles']['edit_select_article'] = "Artikel auswählen"; -$admin_phrases['articles']['edit_entries_found'] = "Datensätze gefunden"; - -$admin_phrases['articles']['delete_title'] = "Artikel löschen"; -$admin_phrases['articles']['delete_view_article'] = "Artikel komplett betrachten"; -$admin_phrases['articles']['delete_question'] = "Soll dieser Artikel wirklich gelöscht werden?"; - -$admin_phrases['articles']['article_deleted'] = "Artikel wurde erfolgreich gelöscht"; -$admin_phrases['articles']['article_not_deleted'] = "Artikel wurde nicht gelöscht"; - - - -//////////////////// -// Presseberichte // -//////////////////// -$admin_phrases['press']['delpage'] = "Eintrag löschen"; -$admin_phrases['press']['delpage_question'] = "Soll der Eintrag wirklich gelöscht werden?"; -$admin_phrases['press']['delconfirm'] = "Eintrag löschen"; -$admin_phrases['press']['delnotconfirm'] = "Eintrag nicht löschen"; - -$admin_phrases['press']['note_noreleases'] = "Es wurden keine Presseberichte gefunden!"; - - - -/////////////////// -// Zufallsbilder // -/////////////////// -$admin_phrases['random']['start_time'] = "Startzeit"; -$admin_phrases['random']['end_time'] = "Endzeit"; -$admin_phrases['random']['title'] = "Titel"; - -$admin_phrases['random']['delpic'] = "Zeitgesteuertes Zufallsbild löschen"; -$admin_phrases['random']['delpic_question'] = "Soll das zeitgesteuertes Zufallsbild wirklich gelöscht werden?"; -$admin_phrases['random']['delconfirm'] = "Zufallsbild löschen"; -$admin_phrases['random']['delnotconfirm'] = "Zufallsbild nicht löschen"; -$admin_phrases['random']['delnote'] = "(Hinweis: Es wird lediglich der Eintrag als zeitgesteuertes Zufallsbild gelöscht. Das Bild als solches bleibt erhalten.)"; - -$admin_phrases['random']['note_deleted'] = "Das zeitgesteuerte Zufallsbild wurde erfolgreich gelöscht!"; -$admin_phrases['random']['note_notdeleted'] = "Das zeitgesteuerte Zufallsbild wurde nicht gelöscht!"; - - - - -///////////// -// Partner // -///////////// -$admin_phrases['partner']['small_pic'] = "Partnerbild klein"; -$admin_phrases['partner']['small_pic_desc'] = "Kleines Partnerbild für die Navigation."; -$admin_phrases['partner']['big_pic'] = "Partnerbild groß"; -$admin_phrases['partner']['big_pic_desc'] = "Großes Partnerbild für die Übersichtsseite."; -$admin_phrases['partner']['name'] = "Partnername"; -$admin_phrases['partner']['name_desc'] = "Name der Partnerseite."; -$admin_phrases['partner']['link'] = "Link"; -$admin_phrases['partner']['link_desc'] = "URL der Partnerseite."; -$admin_phrases['partner']['desc'] = "Beschreibung"; -$admin_phrases['partner']['desc_desc'] = "Kurze Beschreibung der Partnerseite."; -$admin_phrases['partner']['perm'] = "Permanent angezeigen"; -$admin_phrases['partner']['perm_desc'] = "Kleines Partnerbild wird in der Navigation permanent angezeigt."; - -$admin_phrases['partner']['partnerpage'] = "Partnerseite"; -$admin_phrases['partner']['perm_desc'] = "Kleines Partnerbild wird in der Navigation permanent angezeigt."; - -$admin_phrases['partner']['delpage'] = "Partnerseite löschen"; -$admin_phrases['partner']['delpage_question'] = "Soll die Partnerseite wirklich gelöscht werden?"; -$admin_phrases['partner']['delconfirm'] = "Partnerseite löschen"; -$admin_phrases['partner']['delnotconfirm'] = "Partnerseite nicht löschen"; - -$admin_phrases['partner']['add'] = "Partnerseite hinzufügen"; -$admin_phrases['partner']['save'] = "Änderungen speichern"; -$admin_phrases['partner']['exact'] = "exakt"; -$admin_phrases['partner']['max'] = "max."; -$admin_phrases['partner']['px'] = "Pixel"; -$admin_phrases['partner']['kb'] = "KB"; - -$admin_phrases['partner']['note_notadded'] = "Partnerseite konnte nicht hinzugefügt werden!"; -$admin_phrases['partner']['note_addmore'] = "Weitere Partnerseite hinzufügen:"; -$admin_phrases['partner']['note_uploaded'] = "Bilder wurden hochgeladen!"; -$admin_phrases['partner']['note_added'] = "Partnerseite wurde hinzugefügt!"; -$admin_phrases['partner']['note_edited'] = "Änderungen wurden erfolgreich gespeichert!"; -$admin_phrases['partner']['note_deleted'] = "Die Partnerseite wurde erfolgreich gelöscht!"; -$admin_phrases['partner']['note_notdeleted'] = "Die Partnerseite wurde nicht gelöscht!"; -$admin_phrases['partner']['note_nopages'] = "Es wurden keine Partnerseiten gefunden!"; - - - -/////////////// -// Templates // -/////////////// - -//CSS -$admin_phrases['template']['style_css']['title'] = "CSS"; -$admin_phrases['template']['style_css']['description'] = 'Beinhaltet die CSS-Definitionen des Designs. Bitte beachten Sie die »speziellen CSS-Dateinamen.'; - -//Java Script -$admin_phrases['template']['js_userfunctions']['title'] = "Java Script"; -$admin_phrases['template']['js_userfunctions']['description']= "Beinhaltet von Benutzern definierten Java Script Code."; - - - -//Allgemein - -$admin_phrases['template']['announcement']['title'] = "Ankündigung"; -$admin_phrases['template']['announcement']['description'] = "Ankündigung auf der Seite."; -$admin_phrases['template']['announcement']['help_1'] = "Bindet die verfasste Ankündigung ein."; - -$admin_phrases['template']['statistik']['title'] = "Statistik"; -$admin_phrases['template']['statistik']['description'] = "Besucher und Seiten Statistik"; -$admin_phrases['template']['statistik']['help_1'] = "Anzahl aller Besucher der Seite."; -$admin_phrases['template']['statistik']['help_2'] = "Zahl aller Besucher am aktuellen Tag."; -$admin_phrases['template']['statistik']['help_3'] = "Anzahl aller Seitenaufrufe."; -$admin_phrases['template']['statistik']['help_4'] = "Zahl aller Seitenaufrufe am aktuellen Tag."; -$admin_phrases['template']['statistik']['help_5'] = "Zahl aller Besucher die sich zurzeit auf der Seite befinden."; -$admin_phrases['template']['statistik']['help_6'] = "Anzahl der geschriebenen News."; -$admin_phrases['template']['statistik']['help_7'] = "Anzahl der registrierten User."; -$admin_phrases['template']['statistik']['help_8'] = "Anzahl der geschriebenen Artikel."; -$admin_phrases['template']['statistik']['help_9'] = "Anzahl der abgegebenen Kommentare."; - -$admin_phrases['template']['community_map']['title'] = "Community Map"; -$admin_phrases['template']['community_map']['description'] = "Gerüst für die Community Map."; -$admin_phrases['template']['community_map']['help_1'] = "Bindet die Karte ein."; - - - -//Artikel -$admin_phrases['template']['artikel_autor']['title'] = "Autor"; -$admin_phrases['template']['artikel_autor']['description'] = "Das Erscheinungsbild der Autoren-Kennzeichnung."; -$admin_phrases['template']['artikel_autor']['help_1'] = "Der Username des Autors."; -$admin_phrases['template']['artikel_autor']['help_2'] = "Die User-ID des Autors."; -$admin_phrases['template']['artikel_autor']['help_3'] = "URL zum Profil des Autors."; - -$admin_phrases['template']['artikel_body']['title'] = "Body"; -$admin_phrases['template']['artikel_body']['description'] = "Das Erscheinungsbild eines Artikels."; -$admin_phrases['template']['artikel_body']['help_1'] = "Die Überschrift des Artikels."; -$admin_phrases['template']['artikel_body']['help_2'] = "Das Datum an dem der Artikel geschrieben wurde."; -$admin_phrases['template']['artikel_body']['help_3'] = "Der Artikel-Text an sich."; -$admin_phrases['template']['artikel_body']['help_4'] = "Bindet das Autoren-Template (s.o.) ein."; -$admin_phrases['template']['artikel_body']['help_5'] = "Der Username des Autors."; -$admin_phrases['template']['artikel_body']['help_6'] = "Die User-ID des Autors."; - - - -//Presseberichte -$admin_phrases['template']['press_navi_line']['title'] = "Navigation Zeile"; -$admin_phrases['template']['press_navi_line']['description'] = "Eine Zeile der Navigation."; -$admin_phrases['template']['press_navi_line']['help_1'] = "URL zum Öffnen/Anzeigen des Navigationsordners."; -$admin_phrases['template']['press_navi_line']['help_2'] = "Der Titel des Navigationsordners."; -$admin_phrases['template']['press_navi_line']['help_3'] = "URL zum Bild des Navigationsordners."; -$admin_phrases['template']['press_navi_line']['help_4'] = "URL zu einem entsprechenden Standard-Ordnersymbol."; - -$admin_phrases['template']['press_navi_main']['title'] = "Navigation"; -$admin_phrases['template']['press_navi_main']['description'] = "Das Erscheinungsbild der Navigation."; -$admin_phrases['template']['press_navi_main']['help_1'] = "Bindet nacheinander die Ordner/Zeilen der Navigation ein."; - -$admin_phrases['template']['press_intro']['title'] = "Einleitung"; -$admin_phrases['template']['press_intro']['description'] = "Das Erscheinungsbild des Einleitungstextes."; -$admin_phrases['template']['press_intro']['help_1'] = "Der unformatierte Einleitungstext."; - -$admin_phrases['template']['press_note']['title'] = "Anmerkungen"; -$admin_phrases['template']['press_note']['description'] = "Das Erscheinungsbild der Anmerkungen."; -$admin_phrases['template']['press_note']['help_1'] = "Die unformatierten Anmerkungen."; - -$admin_phrases['template']['press_body']['title'] = "Pressebericht"; -$admin_phrases['template']['press_body']['description'] = "Das Erscheinungsbild eines Presseberichtes."; -$admin_phrases['template']['press_body']['help_1'] = "Der Titel des Presseberichtes."; -$admin_phrases['template']['press_body']['help_2'] = "URL zum Pressebericht."; -$admin_phrases['template']['press_body']['help_3'] = "Datum an dem der Pressebericht veröffentlicht wurde."; -$admin_phrases['template']['press_body']['help_4'] = "Die (formatierte) Einleitung des Presseberichtes."; -$admin_phrases['template']['press_body']['help_5'] = "Der kurze Vorschautext des Presseberichtes."; -$admin_phrases['template']['press_body']['help_6'] = "Die (formatierten) Anmerkungen zum Presseberichtes."; -$admin_phrases['template']['press_body']['help_7'] = "Titel des Spiels, zu dem der Pressebericht veröffentlicht wurde."; -$admin_phrases['template']['press_body']['help_8'] = "URL zum Bild des Spiels, zu dem der Pressebericht veröffentlicht wurde."; -$admin_phrases['template']['press_body']['help_9'] = "Titel der Kategorie, zu der der Pressebericht zugeordnet wurde."; -$admin_phrases['template']['press_body']['help_10'] = "URL zum Bild der Kategorie, zu der der Pressebericht zugeordnet wurde."; -$admin_phrases['template']['press_body']['help_11'] = "Sprache, in der der Pressebericht verfasst wurde."; -$admin_phrases['template']['press_body']['help_12'] = "URL zum Bild der Sprache, in der der Pressebericht verfasst wurde."; - -$admin_phrases['template']['press_container']['title'] = "Presseberichte Container"; -$admin_phrases['template']['press_container']['description'] = "Container um die angezeigten Presseberichte."; -$admin_phrases['template']['press_container']['help_1'] = "Bindet nacheinander alle passenden Presseberichte ein."; - - -$admin_phrases['template']['press_main_body']['title'] = "Übersicht"; -$admin_phrases['template']['press_main_body']['description'] = "Das Erscheinungsbild der ganzen Seite."; -$admin_phrases['template']['press_main_body']['help_1'] = "Bindet die Navigation ein."; -$admin_phrases['template']['press_main_body']['help_2'] = "Bindet den Pressebericht Container mit allen passenden Presseberichte ein."; - - - - -//News -$admin_phrases['template']['news_link']['title'] = "Related Link Zeile"; -$admin_phrases['template']['news_link']['description'] = "Eine Zeile der Related Links."; -$admin_phrases['template']['news_link']['help_1'] = "Der Titel den der Link trägt."; -$admin_phrases['template']['news_link']['help_2'] = "Das Ziel-Fenster des Links."; -$admin_phrases['template']['news_link']['help_3'] = "Die URL auf die verlinkt wird."; - -$admin_phrases['template']['news_related_links']['title'] = "Related Links Body"; -$admin_phrases['template']['news_related_links']['description'] = "Die Related Links unter einer News."; -$admin_phrases['template']['news_related_links']['help_1'] = "Bindet nacheinander die angegebenen Links ein."; - -$admin_phrases['template']['news_headline']['title'] = "Headline"; -$admin_phrases['template']['news_headline']['description'] = "Zeile im Headline Body."; -$admin_phrases['template']['news_headline']['help_1'] = "Der Titel der News."; -$admin_phrases['template']['news_headline']['help_2'] = "Das Datum an dem die News veröffentlicht wurde."; -$admin_phrases['template']['news_headline']['help_3'] = "URL zur News."; - -$admin_phrases['template']['news_headline_body']['title'] = "Headline Body"; -$admin_phrases['template']['news_headline_body']['description'] = "Headline Kasten oben auf der Seite."; -$admin_phrases['template']['news_headline_body']['help_1'] = "Bindet die Headlines ein."; -$admin_phrases['template']['news_headline_body']['help_2'] = "Bindet die Downloads ein."; - -$admin_phrases['template']['news_body']['title'] = "News"; -$admin_phrases['template']['news_body']['description'] = "Das Erscheinungsbild einer News."; -$admin_phrases['template']['news_body']['help_1'] = "ID der News, für die eindeutige Ansteuerung auf der Startseite."; -$admin_phrases['template']['news_body']['help_2'] = "Der Titel der News."; -$admin_phrases['template']['news_body']['help_3'] = "Das Datum an dem die News veröffentlicht wurde."; -$admin_phrases['template']['news_body']['help_4'] = "Der Text der News."; -$admin_phrases['template']['news_body']['help_5'] = "Der Name des News-Schreibers."; -$admin_phrases['template']['news_body']['help_6'] = "URL zum Profil des Autors."; -$admin_phrases['template']['news_body']['help_7'] = "URL zum Kategorie-Bild."; -$admin_phrases['template']['news_body']['help_8'] = "Der Titel der Kategorie."; -$admin_phrases['template']['news_body']['help_9'] = "URL zur Kommentaransicht der News."; -$admin_phrases['template']['news_body']['help_10'] = "Anzahl der zur News abgegebenen Kommentare."; -$admin_phrases['template']['news_body']['help_11'] = "Bindet die Related Links in der News ein."; - -$admin_phrases['template']['news_container']['title'] = "News Container"; -$admin_phrases['template']['news_container']['description'] = "Das Erscheinungsbild der News-Seite."; -$admin_phrases['template']['news_container']['help_1'] = "Bindet nacheinander alle News ein."; -$admin_phrases['template']['news_container']['help_2'] = "Bindet den Headline-Kasten ein."; - -$admin_phrases['template']['news_comment_container']['title'] = "Kommentar Container"; -$admin_phrases['template']['news_comment_container']['description'] = "Das Erscheinungsbild der Kommentar-Seite."; -$admin_phrases['template']['news_comment_container']['help_1'] = "Bindet die News ein."; -$admin_phrases['template']['news_comment_container']['help_2'] = "Bindet nacheinander alle Kommentare ein."; -$admin_phrases['template']['news_comment_container']['help_3'] = "Bindet das Formular zum Schreiben von Kommentaren ein."; - -$admin_phrases['template']['news_comment_body']['title'] = "Kommentar Body"; -$admin_phrases['template']['news_comment_body']['description'] = "Das Erscheinungsbild eines Kommentars."; -$admin_phrases['template']['news_comment_body']['help_1'] = "Der Titel des Kommentars."; -$admin_phrases['template']['news_comment_body']['help_2'] = "Das Datum an dem der Kommentar geschrieben wurde."; -$admin_phrases['template']['news_comment_body']['help_3'] = "Der Text des Kommentars."; -$admin_phrases['template']['news_comment_body']['help_4'] = "Bindet den Namen eines nicht registrierten Autors oder das Template \"Kommentar Autor\" ein."; -$admin_phrases['template']['news_comment_body']['help_5'] = "Bindet einen evtl. Avatar des Autors ein."; - -$admin_phrases['template']['news_comment_autor']['title'] = "Kommentar Autor"; -$admin_phrases['template']['news_comment_autor']['description'] = "Link zum Kommentar Autor."; -$admin_phrases['template']['news_comment_autor']['help_1'] = "Der Name des Kommentar-Schreibers."; -$admin_phrases['template']['news_comment_autor']['help_2'] = "URL zum Profil des Autors."; - -$admin_phrases['template']['news_comment_form_spam']['title'] = "Anti Spam"; -$admin_phrases['template']['news_comment_form_spam']['description'] = "Captcha zum Schutz gegen Spam-Bots."; -$admin_phrases['template']['news_comment_form_spam']['help_1'] = "URL zum Anti Spam Captcha Bild."; - -$admin_phrases['template']['news_comment_form_spamtext']['title'] = "Anti Spam Text"; -$admin_phrases['template']['news_comment_form_spamtext']['description']= "Erklärungstext, warum Anti Spam verwendet wird."; - -$admin_phrases['template']['news_comment_form_name']['title'] = "Eingabefeld Name"; -$admin_phrases['template']['news_comment_form_name']['description'] = "Wird angezeigt, wenn der User nicht registriert ist."; - -$admin_phrases['template']['news_comment_form']['title'] = "Kommentar Formular"; -$admin_phrases['template']['news_comment_form']['description'] = "Formular zum Schreiben von Kommentaren."; -$admin_phrases['template']['news_comment_form']['help_1'] = "ID der News, um sie eindeutig zu identifizieren."; -$admin_phrases['template']['news_comment_form']['help_2'] = "Bindet den Namen des angemeldeten Users, bzw. das Template \"Eingabefeld Name\" ein."; -$admin_phrases['template']['news_comment_form']['help_3'] = "Bindet das Anti Spam Captcha ein."; -$admin_phrases['template']['news_comment_form']['help_4'] = "Bindet den Erklärungstext, warum Anti Spam verwendet wird ein."; - -$admin_phrases['template']['news_search_form']['title'] = "Newsarchiv Suche"; -$admin_phrases['template']['news_search_form']['description'] = "Formular für die Suche im Archiv."; -$admin_phrases['template']['news_search_form']['help_1'] = "Fügt alle Jahre ein, für die News verfügbar sind."; - - - -//Screenshots -$admin_phrases['template']['screenshot_cat']['title'] = "Kategorie"; -$admin_phrases['template']['screenshot_cat']['description'] = "Zeile einer Kategorie in der Kategorie-Übersicht"; -$admin_phrases['template']['screenshot_cat']['help_1'] = "URL zur Kategorie-Ansicht."; -$admin_phrases['template']['screenshot_cat']['help_2'] = "Name der Kategorie."; -$admin_phrases['template']['screenshot_cat']['help_3'] = "Datum an dem die Kategorie erstellt wurde."; -$admin_phrases['template']['screenshot_cat']['help_4'] = "Anzahl der Bilder in der Kategorie."; - -$admin_phrases['template']['screenshot_body']['title'] = "Kategorie-Übersicht Body"; -$admin_phrases['template']['screenshot_body']['description'] = "Aussehen der Kategorie-Übersicht."; -$admin_phrases['template']['screenshot_body']['help_1'] = "Ausgabe der einzelnen Kategorienen."; - -$admin_phrases['template']['screenshot_pic']['title'] = "Screenshot"; -$admin_phrases['template']['screenshot_pic']['description'] = "Aussehen eines einzelnen Screenshots."; -$admin_phrases['template']['screenshot_pic']['help_1'] = "URL zum Bild."; -$admin_phrases['template']['screenshot_pic']['help_2'] = "URL zum Thumbnail des Bildes."; -$admin_phrases['template']['screenshot_pic']['help_3'] = "Beschreibungstext des Bildes."; - -$admin_phrases['template']['screenshot_cat_body']['title'] = "Kategorie Body"; -$admin_phrases['template']['screenshot_cat_body']['description'] = "Aussehen der Screenshot-Kategorie."; -$admin_phrases['template']['screenshot_cat_body']['help_1'] = "Name der Kategorie."; -$admin_phrases['template']['screenshot_cat_body']['help_2'] = "Ausgabe der einzelnen Screenshots."; -$admin_phrases['template']['screenshot_cat_body']['help_3'] = "Ausgabe der Seiten-Navigation."; - - - -//Wallpaper -$admin_phrases['template']['wallpaper_pic']['title'] = "Wallpaper"; -$admin_phrases['template']['wallpaper_pic']['description'] = "Aussehen eines einzelnen Wallpapers."; -$admin_phrases['template']['wallpaper_pic']['help_1'] = "URL zum Thumbnail des Wallpapers."; -$admin_phrases['template']['wallpaper_pic']['help_2'] = "Beschreibungstext des Wallpapers."; -$admin_phrases['template']['wallpaper_pic']['help_3'] = "Bindet nacheinander die einzelnen Größen des Wallpapers ein."; - -$admin_phrases['template']['wallpaper_sizes']['title'] = "Wallpaper Größen"; -$admin_phrases['template']['wallpaper_sizes']['description'] = "Aussehen der Wallpaper Größen."; -$admin_phrases['template']['wallpaper_sizes']['help_1'] = "URL zum Wallpaper in dieser Größe."; -$admin_phrases['template']['wallpaper_sizes']['help_2'] = "Die Größe des Wallpapers als Text."; - - - -//Randompic -$admin_phrases['template']['randompic_body']['title'] = "Zufallsbild Body"; -$admin_phrases['template']['randompic_body']['description'] = "Aussehen des Zufallsbilds im Menü."; -$admin_phrases['template']['randompic_body']['help_1'] = "URL zum Zufallsbild."; -$admin_phrases['template']['randompic_body']['help_2'] = "URL zum Thumbnail des Zufallsbilds."; -$admin_phrases['template']['randompic_body']['help_3'] = "Beschreibungstext des Zufallsbilds."; - -$admin_phrases['template']['randompic_nobody']['title'] = "Kein Zufallsbild"; -$admin_phrases['template']['randompic_nobody']['description'] = "Ausgabe, wenn kein Zufallsbild gefunden wurde."; - - - -//Download -$admin_phrases['template']['dl_search_field']['title'] = "Suche"; -$admin_phrases['template']['dl_search_field']['description'] = "Kleines Suchfeld, dass auf jeder Seite angezeigt werden kann."; -$admin_phrases['template']['dl_search_field']['help_1'] = "Teilt dem Script die zu durchsuchende Kategorie mit."; -$admin_phrases['template']['dl_search_field']['help_2'] = "Stichwort, nach dem gesucht wird."; -$admin_phrases['template']['dl_search_field']['help_3'] = "URL zur Anzeige aller Downloads."; - -$admin_phrases['template']['dl_navigation']['title'] = "Navigation"; -$admin_phrases['template']['dl_navigation']['description'] = "Einzelne Zeile der Navigation."; -$admin_phrases['template']['dl_navigation']['help_1'] = "Dateiname des angezeigten Icons (geöffneter Ordner, geschlossener Ordner, etc.)."; -$admin_phrases['template']['dl_navigation']['help_2'] = "URL die auf die Kategorie verweist."; -$admin_phrases['template']['dl_navigation']['help_3'] = "Titel der Kategorie."; - -$admin_phrases['template']['dl_quick_links']['title'] = "Quick Links"; -$admin_phrases['template']['dl_quick_links']['description'] = "Download Quick Links auf der Newsseite."; -$admin_phrases['template']['dl_quick_links']['help_1'] = "Zeitpunkt, zu dem der Download veröffentlicht wurde."; -$admin_phrases['template']['dl_quick_links']['help_2'] = "URL zur Downloadseite."; -$admin_phrases['template']['dl_quick_links']['help_3'] = "Titel des Downloads."; - -$admin_phrases['template']['dl_datei_preview']['title'] = "Datei Vorschau"; -$admin_phrases['template']['dl_datei_preview']['description'] = "Vorschau einer Datei in der Übersicht."; -$admin_phrases['template']['dl_datei_preview']['help_1'] = "Titel des Downloads."; -$admin_phrases['template']['dl_datei_preview']['help_2'] = "URL zur Downloadseite."; -$admin_phrases['template']['dl_datei_preview']['help_3'] = "Titel der Kategorie des Downloads."; -$admin_phrases['template']['dl_datei_preview']['help_4'] = "Zeitpunkt, zu dem der Download veröffentlicht wurde."; -$admin_phrases['template']['dl_datei_preview']['help_5'] = "Beschreibungstext des Downloads."; - -$admin_phrases['template']['dl_body']['title'] = "Download Übersicht"; -$admin_phrases['template']['dl_body']['description'] = "Übersichtsseite für die Downloads. Wird auch für Suchergebnisse genutzt."; -$admin_phrases['template']['dl_body']['help_1'] = "Bindet die Kategorie-Navigation ein."; -$admin_phrases['template']['dl_body']['help_2'] = "Bindet das Downloads-Suchfeld ein."; -$admin_phrases['template']['dl_body']['help_3'] = "Bindet die einzelnen Datei-Vorschauen ein."; - -$admin_phrases['template']['dl_file']['title'] = "File"; -$admin_phrases['template']['dl_file']['description'] = "Zeile für ein File."; -$admin_phrases['template']['dl_file']['help_1'] = "Titel des Files."; -$admin_phrases['template']['dl_file']['help_2'] = "Link zum Download des Files."; -$admin_phrases['template']['dl_file']['help_3'] = "Größe des Files."; -$admin_phrases['template']['dl_file']['help_4'] = "Vom File verursachter Traffic (Größe*Downloads)."; -$admin_phrases['template']['dl_file']['help_5'] = "Anzahl der Downloads."; -$admin_phrases['template']['dl_file']['help_6'] = "Hinweis darauf, dass das File auf einen Mirror weiterleitet."; -$admin_phrases['template']['dl_file']['help_7'] = "Colspan (über 2 Zellen) der evtl. nötig ist, damit der Mirror-Hinweis korrekt angezeigt wird."; - -$admin_phrases['template']['dl_stats']['title'] = "Statistik"; -$admin_phrases['template']['dl_stats']['description'] = "Zeile für die Statistik unter den Files."; -$admin_phrases['template']['dl_stats']['help_1'] = "Gesamtzahl aller Files."; -$admin_phrases['template']['dl_stats']['help_2'] = "Größe aller Files zusammen."; -$admin_phrases['template']['dl_stats']['help_3'] = "Insgesamt verursachter Traffic."; -$admin_phrases['template']['dl_stats']['help_4'] = "Gesamtzahl der Downloads aller Files."; - -$admin_phrases['template']['dl_file_is_mirror']['title'] = "Mirror"; -$admin_phrases['template']['dl_file_is_mirror']['description'] = "Anzeige, falls das File ein Mirror ist."; - -$admin_phrases['template']['dl_file_body']['title'] = "Datei Body"; -$admin_phrases['template']['dl_file_body']['description'] = "Detailseite eines Downloads."; -$admin_phrases['template']['dl_file_body']['help_1'] = "Titel des Downloads."; -$admin_phrases['template']['dl_file_body']['help_2'] = "URL zum Vorschaubild des Downloads."; -$admin_phrases['template']['dl_file_body']['help_3'] = "URL zum Thumbnails des Downloads."; -$admin_phrases['template']['dl_file_body']['help_4'] = "Ordner-Baum der Download Navigation."; -$admin_phrases['template']['dl_file_body']['help_5'] = "Download Suchfeld."; -$admin_phrases['template']['dl_file_body']['help_6'] = "Name des Uploaders."; -$admin_phrases['template']['dl_file_body']['help_7'] = "URL zum Profil des Uploaders."; -$admin_phrases['template']['dl_file_body']['help_8'] = "Name des Autors."; -$admin_phrases['template']['dl_file_body']['help_9'] = "URL zur Homepage des Autors."; -$admin_phrases['template']['dl_file_body']['help_10'] = "Datum des Download."; -$admin_phrases['template']['dl_file_body']['help_11'] = "Kategorie des Downloads."; -$admin_phrases['template']['dl_file_body']['help_12'] = "Beschreibungstext des Downloads."; -$admin_phrases['template']['dl_file_body']['help_13'] = "Ausgabe der einzelnen Files des Downloads."; - -$admin_phrases['template']['email_register']['title'] = "Registrierung"; -$admin_phrases['template']['email_register']['description'] = "Email die bei der Registrierung eines Users verschickt wird."; -$admin_phrases['template']['email_register']['help_1'] = "Der gewählte Benutzername des Users."; -$admin_phrases['template']['email_register']['help_2'] = "Das gewählte Passworts des Users."; - -$admin_phrases['template']['email_passchange']['title'] = "Passwortänderung"; -$admin_phrases['template']['email_passchange']['description'] = "Email die bei einer Passwortänderung verschickt wird."; -$admin_phrases['template']['email_passchange']['help_1'] = "Der gewählte Benutzername des Users."; -$admin_phrases['template']['email_passchange']['help_2'] = "Das gewählte Passworts des Users."; - - - -//Partner -$admin_phrases['template']['partner_eintrag']['title'] = "Übersicht Eintrag"; -$admin_phrases['template']['partner_eintrag']['description'] = "Aussehen eines Eintrags in der Gesamtübersicht."; -$admin_phrases['template']['partner_eintrag']['help_1'] = "URL zur Partnerseite."; -$admin_phrases['template']['partner_eintrag']['help_2'] = "URL zum großen Banner der Partnerseite."; -$admin_phrases['template']['partner_eintrag']['help_3'] = "URL zum kleinen Button der Partnerseite"; -$admin_phrases['template']['partner_eintrag']['help_4'] = "Name der Partnerseite."; -$admin_phrases['template']['partner_eintrag']['help_5'] = "Beschreibungstext der Partnerseite."; - -$admin_phrases['template']['partner_main_body']['title'] = "Partner Übersicht Body"; -$admin_phrases['template']['partner_main_body']['description'] = "Aussehen der Liste aller eingetragenen Partner."; -$admin_phrases['template']['partner_main_body']['help_1'] = "Einzelne Ausgabe aller Partner."; -$admin_phrases['template']['partner_main_body']['help_2'] = "Einzelne Ausgabe der Partner, die permanent angezeigt werden sollen."; -$admin_phrases['template']['partner_main_body']['help_3'] = "Einzelne Ausgabe der Partner, die nicht permanent angezeigt werden sollen."; - -$admin_phrases['template']['partner_navi_eintrag']['title'] = "Menü Eintrag"; -$admin_phrases['template']['partner_navi_eintrag']['description'] = "Aussehen eines Eintrags im Menü."; -$admin_phrases['template']['partner_navi_eintrag']['help_1'] = "URL zur Partnerseite."; -$admin_phrases['template']['partner_navi_eintrag']['help_2'] = "URL zum großen Banner der Partnerseite."; -$admin_phrases['template']['partner_navi_eintrag']['help_3'] = "URL zum kleinen Button der Partnerseite"; -$admin_phrases['template']['partner_navi_eintrag']['help_4'] = "Name der Partnerseite."; -$admin_phrases['template']['partner_navi_eintrag']['help_5'] = "Beschreibungstext der Partnerseite."; - -$admin_phrases['template']['partner_navi_body']['title'] = "Menü Body"; -$admin_phrases['template']['partner_navi_body']['description'] = "Aussehen der Partnerliste im Menü."; -$admin_phrases['template']['partner_navi_body']['help_1'] = "Einzelne Ausgabe aller Partner."; -$admin_phrases['template']['partner_navi_body']['help_2'] = "Einzelne Ausgabe der Partner, die permanent angezeigt werden sollen."; -$admin_phrases['template']['partner_navi_body']['help_3'] = "Einzelne Ausgabe der Partner, die nicht permanent angezeigt werden sollen."; - - - -//Umfragen -$admin_phrases['template']['poll_line']['title'] = "Antwort Zeile"; -$admin_phrases['template']['poll_line']['description'] = "Antwortmöglichkeit der Umfrage."; -$admin_phrases['template']['poll_line']['help_1'] = "Der Antworttext."; -$admin_phrases['template']['poll_line']['help_2'] = "Die ID der Antwort, damit das Script auch weiß, für was abgestimmt wurde."; -$admin_phrases['template']['poll_line']['help_3'] = "Der Umfragentyp. Notwendig, da die beiden Typen verschiedene Auswahlmöglichkeiten erfordern."; -$admin_phrases['template']['poll_line']['help_4'] = "Erweiterung für Multiple-Choice Umfragen."; - -$admin_phrases['template']['poll_body']['title'] = "Umfrage Body"; -$admin_phrases['template']['poll_body']['description'] = "Aussehen der Umfrage im Menü."; -$admin_phrases['template']['poll_body']['help_1'] = "Die Frage, nach der in der Umfrage gefragt wird."; -$admin_phrases['template']['poll_body']['help_2'] = "Bindet hintereinander alle Antworten ein."; -$admin_phrases['template']['poll_body']['help_3'] = "ID zur eindeutigen Identifizierung der Umfrage."; -$admin_phrases['template']['poll_body']['help_4'] = "Der Typ der Umfrage. (Einzel- od. Mehrfachauswahl)"; - -$admin_phrases['template']['poll_no_poll']['title'] = "Keine Umfrage"; -$admin_phrases['template']['poll_no_poll']['description'] = "Meldung wenn keine Umfrage aktiv ist."; - -$admin_phrases['template']['poll_result_line']['title'] = "Ergebnis Zeile"; -$admin_phrases['template']['poll_result_line']['description'] = "Eine Zeile des Umfrage-Ergebnis."; -$admin_phrases['template']['poll_result_line']['help_1'] = "Der Antworttext."; -$admin_phrases['template']['poll_result_line']['help_2'] = "Die Anzahl der Stimmen die eine Antwort erhalten hat."; -$admin_phrases['template']['poll_result_line']['help_3'] = "Der Stimmenanteil einer Antwort in Prozent. (Mit Prozentzeichen!)"; -$admin_phrases['template']['poll_result_line']['help_4'] = "Die Breite des Balkens bei grafischer Stimmendarstellung."; - -$admin_phrases['template']['poll_result']['title'] = "Ergebnis Body"; -$admin_phrases['template']['poll_result']['description'] = "Aussehen des Umfrage-Ergebnis im Menü."; -$admin_phrases['template']['poll_result']['help_1'] = "Die Frage, nach der in der Umfrage gefragt wird."; -$admin_phrases['template']['poll_result']['help_2'] = "Bindet hintereinander alle Antworten mit dem jeweiligen Ergebnis ein."; -$admin_phrases['template']['poll_result']['help_3'] = "Die Anzahl aller abgegebenen Stimmen."; -$admin_phrases['template']['poll_result']['help_4'] = "Die Anzahl aller Umfrageteilnehmer."; -$admin_phrases['template']['poll_result']['help_5'] = "Der Typ der Umfrage. (Einzel- od. Mehrfachauswahl)"; - -$admin_phrases['template']['poll_list_line']['title'] = "Umfrage Übersicht Zeile"; -$admin_phrases['template']['poll_list_line']['description'] = "Zeile in der Übersichtsseite des Umfragenarchivs."; -$admin_phrases['template']['poll_list_line']['help_1'] = "Die Frage, nach der in der Umfrage gefragt wird."; -$admin_phrases['template']['poll_list_line']['help_2'] = "URL zur Detailansicht der archivierten Umfrage."; -$admin_phrases['template']['poll_list_line']['help_3'] = "Die Anzahl aller abgegebenen Stimmen."; -$admin_phrases['template']['poll_list_line']['help_4'] = "Die Anzahl aller Umfrageteilnehmer."; -$admin_phrases['template']['poll_list_line']['help_5'] = "Der Typ der Umfrage. (Einzel- od. Mehrfachauswahl)"; -$admin_phrases['template']['poll_list_line']['help_6'] = "Datum an dem die Umfrage startet."; -$admin_phrases['template']['poll_list_line']['help_7'] = "Datum an dem die Umfrage endet."; - -$admin_phrases['template']['poll_list']['title'] = "Umfragen Übersicht Body"; -$admin_phrases['template']['poll_list']['description'] = "Übersichtsseite des Umfragenarchivs."; -$admin_phrases['template']['poll_list']['help_1'] = "Bindet hintereinander alle Umfragen ein."; -$admin_phrases['template']['poll_list']['help_2'] = "Sortierparameter für alphabetische Sortierung nach der Frage."; -$admin_phrases['template']['poll_list']['help_3'] = "Bindet den der Sortierung entsprechenden Pfeil ein."; -$admin_phrases['template']['poll_list']['help_4'] = "Sortierparameter für die Anzahl aller abgegebenen Stimmen."; -$admin_phrases['template']['poll_list']['help_5'] = "Bindet den der Sortierung entsprechenden Pfeil ein."; -$admin_phrases['template']['poll_list']['help_6'] = "Sortierparameter für die Anzahl aller Teilnehmer."; -$admin_phrases['template']['poll_list']['help_7'] = "Bindet den der Sortierung entsprechenden Pfeil ein."; -$admin_phrases['template']['poll_list']['help_8'] = "Sortierparameter für den Umfragentyp."; -$admin_phrases['template']['poll_list']['help_9'] = "Bindet den der Sortierung entsprechenden Pfeil ein."; -$admin_phrases['template']['poll_list']['help_10'] = "Sortierparameter für das Startdatum der Umfrage."; -$admin_phrases['template']['poll_list']['help_11'] = "Bindet den der Sortierung entsprechenden Pfeil ein."; -$admin_phrases['template']['poll_list']['help_12'] = "Sortierparameter für das Enddatum der Umfrage."; -$admin_phrases['template']['poll_list']['help_13'] = "Bindet den der Sortierung entsprechenden Pfeil ein."; - -$admin_phrases['template']['poll_main_line']['title'] = "Archiv Antwort Zeile"; -$admin_phrases['template']['poll_main_line']['description'] = "Antwort Zeile einer archivierten Umfrage."; -$admin_phrases['template']['poll_main_line']['help_1'] = "Der Antworttext."; -$admin_phrases['template']['poll_main_line']['help_2'] = "Die Anzahl der Stimmen die eine Antwort erhalten hat."; -$admin_phrases['template']['poll_main_line']['help_3'] = "Der Stimmenanteil einer Antwort in Prozent. (Mit Prozentzeichen!)"; -$admin_phrases['template']['poll_main_line']['help_4'] = "Die Breite des Balkens bei grafischer Stimmendarstellung."; - -$admin_phrases['template']['poll_main_body']['title'] = "Archiv Umfrage Body"; -$admin_phrases['template']['poll_main_body']['description'] = "Ansicht einer archivierten Umfrage."; -$admin_phrases['template']['poll_main_body']['help_1'] = "Die Frage, nach der in der Umfrage gefragt wird."; -$admin_phrases['template']['poll_main_body']['help_2'] = "Bindet hintereinander alle Antworten mit dem jeweiligen Ergebnis ein."; -$admin_phrases['template']['poll_main_body']['help_3'] = "Die Anzahl aller abgegebenen Stimmen."; -$admin_phrases['template']['poll_main_body']['help_4'] = "Die Anzahl aller Umfrageteilnehmer."; -$admin_phrases['template']['poll_main_body']['help_5'] = "Der Typ der Umfrage. (Einzel- od. Mehrfachauswahl)"; -$admin_phrases['template']['poll_main_body']['help_6'] = "Datum an dem die Umfrage startet."; -$admin_phrases['template']['poll_main_body']['help_7'] = "Datum an dem die Umfrage endet."; - - - -//User -$admin_phrases['template']['user_mini_login']['title'] = "Mini Login Menü"; -$admin_phrases['template']['user_mini_login']['description'] = "Das kleine Login Menü in der Navigation der Seite."; - -$admin_phrases['template']['user_user_menu']['title'] = "User Menü"; -$admin_phrases['template']['user_user_menu']['description'] = "User Links in der Navigation der Seite."; -$admin_phrases['template']['user_user_menu']['help_1'] = "Nickname des Users."; -$admin_phrases['template']['user_user_menu']['help_2'] = "Linkzeile zum Admin-CP."; -$admin_phrases['template']['user_user_menu']['help_3'] = "URL um den User abzumelden."; - -$admin_phrases['template']['user_admin_link']['title'] = "Admin Link"; -$admin_phrases['template']['user_admin_link']['description'] = "Link zum Admin-CP der nur Admins gezeigt wird."; -$admin_phrases['template']['user_admin_link']['help_1'] = "URL zum Admin-CP"; - -$admin_phrases['template']['user_login']['title'] = "Login Formular"; -$admin_phrases['template']['user_login']['description'] = "Großes User-Login Forumlar."; - -$admin_phrases['template']['user_register']['title'] = "Registrieren"; -$admin_phrases['template']['user_register']['description'] = "Forumlar zur Registrierung auf der Seite."; -$admin_phrases['template']['user_register']['help_1'] = "Bindet das Anti Spam Captcha ein."; -$admin_phrases['template']['user_register']['help_2'] = "Bindet den Erklärungstext, warum Anti Spam verwendet wird ein."; - -$admin_phrases['template']['user_spam']['title'] = "Anti Spam"; -$admin_phrases['template']['user_spam']['description'] = "Captcha zum Schutz gegen Spam-Bots."; -$admin_phrases['template']['user_spam']['help_1'] = "URL zum Anti Spam Captcha Bild."; - -$admin_phrases['template']['user_spamtext']['title'] = "Anti Spam Text"; -$admin_phrases['template']['user_spamtext']['description'] = "Erklärungstext, warum Anti Spam verwendet wird."; - -$admin_phrases['template']['user_profil']['title'] = "Profil"; -$admin_phrases['template']['user_profil']['description'] = "Öffentliche Profilseite der User."; -$admin_phrases['template']['user_profil']['help_1'] = "Nickname des Users."; -$admin_phrases['template']['user_profil']['help_2'] = "URL zum Benutzerbild des Users."; -$admin_phrases['template']['user_profil']['help_3'] = "Email-Adresse des Users."; -$admin_phrases['template']['user_profil']['help_4'] = "Anmeldedatum des Users."; -$admin_phrases['template']['user_profil']['help_5'] = "Zahl der vom User verfassten News."; -$admin_phrases['template']['user_profil']['help_6'] = "Zahl der vom User verfassten Artikel."; -$admin_phrases['template']['user_profil']['help_7'] = "Zahl der vom User verfassten Kommentare."; - -$admin_phrases['template']['user_profiledit']['title'] = "Profil editieren"; -$admin_phrases['template']['user_profiledit']['description'] = "Formularseite um die Profildaten zu bearbeiten."; -$admin_phrases['template']['user_profiledit']['help_1'] = "Nickname des Users."; -$admin_phrases['template']['user_profiledit']['help_2'] = "URL zum Benutzerbild des Users."; -$admin_phrases['template']['user_profiledit']['help_3'] = "Email-Adresse des Users."; -$admin_phrases['template']['user_profiledit']['help_4'] = "Setzt den Status des Auswahlfelds \"Zeige die E-Mail im öffentlichen Profil\" entsprechend der gespeicherten Einstellung."; - -$admin_phrases['template']['user_memberlist_body']['title'] = "Mitgliederliste Body"; -$admin_phrases['template']['user_memberlist_body']['description'] = "Template der Mitgliederliste."; -$admin_phrases['template']['user_memberlist_body']['help_1'] = "Bindet nacheinander alle Mitglieder ein."; -$admin_phrases['template']['user_memberlist_body']['help_2'] = "Bindet die Seitenavigaion ein."; -$admin_phrases['template']['user_memberlist_body']['help_3'] = "Sortierparameter für den Username."; -$admin_phrases['template']['user_memberlist_body']['help_4'] = "Bindet den der Sortierung entsprechenden Pfeil ein."; -$admin_phrases['template']['user_memberlist_body']['help_5'] = "Sortierparameter für das Anmeldedatum."; -$admin_phrases['template']['user_memberlist_body']['help_6'] = "Bindet den der Sortierung entsprechenden Pfeil ein."; -$admin_phrases['template']['user_memberlist_body']['help_7'] = "Sortierparameter für die Zahl geschriebene News."; -$admin_phrases['template']['user_memberlist_body']['help_8'] = "Bindet den der Sortierung entsprechenden Pfeil ein."; -$admin_phrases['template']['user_memberlist_body']['help_9'] = "Sortierparameter für die Zahl geschriebene Artikel."; -$admin_phrases['template']['user_memberlist_body']['help_10'] = "Bindet den der Sortierung entsprechenden Pfeil ein."; -$admin_phrases['template']['user_memberlist_body']['help_11'] = "Sortierparameter für die Zahl geschriebene Kommentare."; -$admin_phrases['template']['user_memberlist_body']['help_12'] = "Bindet den der Sortierung entsprechenden Pfeil ein."; - -$admin_phrases['template']['user_memberlist_userline']['title'] = "Zeile User"; -$admin_phrases['template']['user_memberlist_userline']['description'] = "Zeile eines Users in der Mitgliederliste."; -$admin_phrases['template']['user_memberlist_userline']['help_1'] = "Nickname des Users."; -$admin_phrases['template']['user_memberlist_userline']['help_2'] = "URL zum Profil des Users."; -$admin_phrases['template']['user_memberlist_userline']['help_3'] = "URL zum Benutzerbild des Users."; -$admin_phrases['template']['user_memberlist_userline']['help_4'] = "Email-Adresse des Users."; -$admin_phrases['template']['user_memberlist_userline']['help_5'] = "Anmeldedatum des Users."; -$admin_phrases['template']['user_memberlist_userline']['help_6'] = "Zahl der vom User verfassten News."; -$admin_phrases['template']['user_memberlist_userline']['help_7'] = "Zahl der vom User verfassten Artikel."; -$admin_phrases['template']['user_memberlist_userline']['help_8'] = "Zahl der vom User verfassten Kommentare."; - -$admin_phrases['template']['user_memberlist_adminline']['title'] = "Zeile Admin"; -$admin_phrases['template']['user_memberlist_adminline']['description']= "Zeile eines Admins in der Mitgliederliste."; -$admin_phrases['template']['user_memberlist_adminline']['help_1'] = "Nickname des Users."; -$admin_phrases['template']['user_memberlist_adminline']['help_2'] = "URL zum Profil des Users."; -$admin_phrases['template']['user_memberlist_adminline']['help_3'] = "URL zum Benutzerbild des Users."; -$admin_phrases['template']['user_memberlist_adminline']['help_4'] = "Email-Adresse des Users."; -$admin_phrases['template']['user_memberlist_adminline']['help_5'] = "Anmeldedatum des Users."; -$admin_phrases['template']['user_memberlist_adminline']['help_6'] = "Zahl der vom User verfassten News."; -$admin_phrases['template']['user_memberlist_adminline']['help_7'] = "Zahl der vom User verfassten Artikel."; -$admin_phrases['template']['user_memberlist_adminline']['help_8'] = "Zahl der vom User verfassten Kommentare."; - - - -//Editor -$admin_phrases['template']['editor_design']['title'] = "Editor Darstellung"; -$admin_phrases['template']['editor_design']['description'] = "Anordnung des IWAC-Editors auf der Seite."; -$admin_phrases['template']['editor_design']['help_1'] = "CSS-Style des Textareas (siehe Konfiguration)."; -$admin_phrases['template']['editor_design']['help_2'] = "Evtl. vorgegebener Text."; -$admin_phrases['template']['editor_design']['help_3'] = "Bindet die ausgewählten Buttons ein."; -$admin_phrases['template']['editor_design']['help_3'] = "Bindet die Smilie-Liste ein."; - -$admin_phrases['template']['editor_css']['title'] = "Editor CSS"; -$admin_phrases['template']['editor_css']['description'] = "CSS Datei des IWAC-Editors."; - -$admin_phrases['template']['editor_button']['title'] = "Button Darstellung"; -$admin_phrases['template']['editor_button']['description'] = "Anordnung des IWAC-Editors auf der Seite."; -$admin_phrases['template']['editor_button']['help_1'] = "URL zum Button Bild."; -$admin_phrases['template']['editor_button']['help_2'] = "Alternativer Anzeige Text."; -$admin_phrases['template']['editor_button']['help_3'] = "Beschreibungstext der beim Drüberfahren erscheint."; -$admin_phrases['template']['editor_button']['help_3'] = "Javascript-Teil zur Funktion des Buttons."; - -$admin_phrases['template']['editor_seperator']['title'] = "Teiler Darstellung"; -$admin_phrases['template']['editor_seperator']['description'] = "Darstellung des Teilers zwischen Button-Gruppen."; - - - -//Editor - FS Codes -$admin_phrases['template']['quote_tag']['title'] = "Zitat"; -$admin_phrases['template']['quote_tag']['description'] = "Darstellung des \"Zitat\" - FSCodes ['quote']text['/quote'] "; -$admin_phrases['template']['quote_tag']['help_1'] = "Text der vom Zitat-Block umschlossen wird."; - -$admin_phrases['template']['quote_tag_name']['title'] = "Zitat von"; -$admin_phrases['template']['quote_tag_name']['description'] = "Darstellung des \"Zitat von\" - FSCodes ['quote=author']text['/quote'] "; -$admin_phrases['template']['quote_tag_name']['help_1'] = "Text der vom Zitat-Block umschlossen wird."; -$admin_phrases['template']['quote_tag_name']['help_2'] = "Name des Autors, des zitierten Textes."; - -$admin_phrases['template']['code_tag']['title'] = "Code"; -$admin_phrases['template']['code_tag']['description'] = "Darstellung des \"Code\" - FSCodes ['code']text['/code'] "; -$admin_phrases['template']['code_tag']['help_1'] = "Text der vom Code-Block umschlossen wird."; - -/* -$line = 50; -echo "
";
-foreach($admin_phrases['template'] as $cat => $entries) {
-    echo "\n#$cat";
-    foreach ($entries as $name => $val) {
-        echo "\n$name:".str_repeat(" ", $line-strlen($name)).htmlspecialchars($val)."";
-    }
-    echo "\n\n";
-}
-echo "
"; -* */ -?> diff --git a/www/filebackups-remove-for-release/aliasweiterleitung.txt b/www/filebackups-remove-for-release/aliasweiterleitung.txt deleted file mode 100644 index 891c4fb..0000000 --- a/www/filebackups-remove-for-release/aliasweiterleitung.txt +++ /dev/null @@ -1,18 +0,0 @@ -alias_add_title: Weiterleitung hinzufügen -alias_select_title: Weiterleitungen auswählen -alias_edit_title: Weiterleitung bearbeiten -aliases_delete_title: Weiterleitungen löschen -aliases_delete_question: Sollen diese Weiterleitungen wirklich gelöscht werden? -alias_go_title: Weiterleitung -alias_go_desc: Adresse, für die eine Weiterleitung angelegt werden soll. -alias_forward_to_title: Original -alias_forward_to_desc: Adresse, auf die weitergeleitet wird. -alias_active_title: Weiterleitung aktivieren -alias_active_desc: De-/Aktiviert die Weiterleitung. -alias_added: Weiterleitung wurde hinzugefügt -alias_not_added: Weiterleitung wurde nicht hinzugefügt -aliases_deleted: Weiterleitungen wurden gelöscht -aliases_not_deleted: Weiterleitungen wurden nicht gelöscht -aliases_not_found: Keine Weiterleitungen gefunden! -alias_active: aktiv -alias_not_active: nicht aktiv diff --git a/www/filebackups-remove-for-release/bu_from_phrases_tpl.txt b/www/filebackups-remove-for-release/bu_from_phrases_tpl.txt deleted file mode 100644 index f93e7e7..0000000 --- a/www/filebackups-remove-for-release/bu_from_phrases_tpl.txt +++ /dev/null @@ -1,632 +0,0 @@ -############################################################## -############################################################## -############################################################## -########################### DONE ############################# -############################################################## -############################################################## -############################################################## - - -#artikel_autor -title: Autor -description: Das Erscheinungsbild der Autoren-Kennzeichnung. -help_1: Der Username des Autors. -help_2: Die User-ID des Autors. -help_3: URL zum Profil des Autors. - -#artikel_body -title: Body -description: Das Erscheinungsbild eines Artikels. -help_1: Die Ãœberschrift des Artikels. -help_2: Das Datum an dem der Artikel geschrieben wurde. -help_3: Der Artikel-Text an sich. -help_4: Bindet das Autoren-Template (s.o.) ein. -help_5: Der Username des Autors. -help_6: Die User-ID des Autors. - - -#randompic_body -title: Zufallsbild Body -description: Aussehen des Zufallsbilds im Menü. -help_1: URL zum Zufallsbild. -help_2: URL zum Thumbnail des Zufallsbilds. -help_3: Beschreibungstext des Zufallsbilds. - -#randompic_nobody -title: Kein Zufallsbild -description: Ausgabe, wenn kein Zufallsbild gefunden wurde. - - -#user_mini_login -title: Mini Login Menü -description: Das kleine Login Menü in der Navigation der Seite. - -#user_user_menu -title: User Menü -description: User Links in der Navigation der Seite. -help_1: Nickname des Users. -help_2: Linkzeile zum Admin-CP. -help_3: URL um den User abzumelden. - -#user_admin_link -title: Admin Link -description: Link zum Admin-CP der nur Admins gezeigt wird. -help_1: URL zum Admin-CP - -#user_login -title: Login Formular -description: Großes User-Login Forumlar. - -#user_register -title: Registrieren -description: Forumlar zur Registrierung auf der Seite. -help_1: Bindet das Anti Spam Captcha ein. -help_2: Bindet den Erklärungstext, warum Anti Spam verwendet wird ein. - -#user_spam -title: Anti Spam -description: Captcha zum Schutz gegen Spam-Bots. -help_1: URL zum Anti Spam Captcha Bild. - -#user_spamtext -title: Anti Spam Text -description: Erklärungstext, warum Anti Spam verwendet wird. - -#user_profil -title: Profil -description: Öffentliche Profilseite der User. -help_1: Nickname des Users. -help_2: URL zum Benutzerbild des Users. -help_3: Email-Adresse des Users. -help_4: Anmeldedatum des Users. -help_5: Zahl der vom User verfassten News. -help_6: Zahl der vom User verfassten Artikel. -help_7: Zahl der vom User verfassten Kommentare. - -#user_profiledit -title: Profil editieren -description: Formularseite um die Profildaten zu bearbeiten. -help_1: Nickname des Users. -help_2: URL zum Benutzerbild des Users. -help_3: Email-Adresse des Users. -help_4: Setzt den Status des Auswahlfelds "Zeige die E-Mail im öffentlichen Profil" entsprechend der gespeicherten Einstellung. - -#user_memberlist_body -title: Mitgliederliste Body -description: Template der Mitgliederliste. -help_1: Bindet nacheinander alle Mitglieder ein. -help_2: Bindet die Seitenavigaion ein. -help_3: Sortierparameter für den Username. -help_4: Bindet den der Sortierung entsprechenden Pfeil ein. -help_5: Sortierparameter für das Anmeldedatum. -help_6: Bindet den der Sortierung entsprechenden Pfeil ein. -help_7: Sortierparameter für die Zahl geschriebene News. -help_8: Bindet den der Sortierung entsprechenden Pfeil ein. -help_9: Sortierparameter für die Zahl geschriebene Artikel. -help_10: Bindet den der Sortierung entsprechenden Pfeil ein. -help_11: Sortierparameter für die Zahl geschriebene Kommentare. -help_12: Bindet den der Sortierung entsprechenden Pfeil ein. - -#user_memberlist_userline -title: Zeile User -description: Zeile eines Users in der Mitgliederliste. -help_1: Nickname des Users. -help_2: URL zum Profil des Users. -help_3: URL zum Benutzerbild des Users. -help_4: Email-Adresse des Users. -help_5: Anmeldedatum des Users. -help_6: Zahl der vom User verfassten News. -help_7: Zahl der vom User verfassten Artikel. -help_8: Zahl der vom User verfassten Kommentare. - -#user_memberlist_adminline -title: Zeile Admin -description: Zeile eines Admins in der Mitgliederliste. -help_1: Nickname des Users. -help_2: URL zum Profil des Users. -help_3: URL zum Benutzerbild des Users. -help_4: Email-Adresse des Users. -help_5: Anmeldedatum des Users. -help_6: Zahl der vom User verfassten News. -help_7: Zahl der vom User verfassten Artikel. -help_8: Zahl der vom User verfassten Kommentare. - - -#editor_design -title: Editor Darstellung -description: Anordnung des IWAC-Editors auf der Seite. -help_1: CSS-Style des Textareas (siehe Konfiguration). -help_2: Evtl. vorgegebener Text. -help_3: Bindet die Smilie-Liste ein. - - -#editor_css -title: Editor CSS -description: CSS Datei des IWAC-Editors. - - -#editor_button -title: Button Darstellung -description: Anordnung des IWAC-Editors auf der Seite. -help_1: URL zum Button Bild. -help_2: Alternativer Anzeige Text. -help_3: Javascript-Teil zur Funktion des Buttons. - - -#editor_seperator -title: Teiler Darstellung -description: Darstellung des Teilers zwischen Button-Gruppen. - - -#quote_tag -title: Zitat -description: Darstellung des "Zitat" - FSCodes ['quote']text['/quote'] -help_1: Text der vom Zitat-Block umschlossen wird. - - -#quote_tag_name -title: Zitat von -description: Darstellung des "Zitat von" - FSCodes ['quote=author']text['/quote'] -help_1: Text der vom Zitat-Block umschlossen wird. -help_2: Name des Autors, des zitierten Textes. - - -#code_tag -title: Code -description: Darstellung des "Code" - FSCodes ['code']text['/code'] -help_1: Text der vom Code-Block umschlossen wird. - - -#screenshot_cat -title: Kategorie -description: Zeile einer Kategorie in der Kategorie-Ãœbersicht -help_1: URL zur Kategorie-Ansicht. -help_2: Name der Kategorie. -help_3: Datum an dem die Kategorie erstellt wurde. -help_4: Anzahl der Bilder in der Kategorie. - - -#screenshot_body -title: Kategorie-Ãœbersicht Body -description: Aussehen der Kategorie-Ãœbersicht. -help_1: Ausgabe der einzelnen Kategorienen. - - -#screenshot_pic -title: Screenshot -description: Aussehen eines einzelnen Screenshots. -help_1: URL zum Bild. -help_2: URL zum Thumbnail des Bildes. -help_3: Beschreibungstext des Bildes. - - -#screenshot_cat_body -title: Kategorie Body -description: Aussehen der Screenshot-Kategorie. -help_1: Name der Kategorie. -help_2: Ausgabe der einzelnen Screenshots. -help_3: Ausgabe der Seiten-Navigation. - - -#wallpaper_pic -title: Wallpaper -description: Aussehen eines einzelnen Wallpapers. -help_1: URL zum Thumbnail des Wallpapers. -help_2: Beschreibungstext des Wallpapers. -help_3: Bindet nacheinander die einzelnen Größen des Wallpapers ein. - - -#wallpaper_sizes -title: Wallpaper Größen -description: Aussehen der Wallpaper Größen. -help_1: URL zum Wallpaper in dieser Größe. -help_2: Die Größe des Wallpapers als Text. - -#press_navi_line -title: Navigation Zeile -description: Eine Zeile der Navigation. -help_1: URL zum Öffnen/Anzeigen des Navigationsordners. -help_2: Der Titel des Navigationsordners. -help_3: URL zum Bild des Navigationsordners. -help_4: URL zu einem entsprechenden Standard-Ordnersymbol. - - -#press_navi_main -title: Navigation -description: Das Erscheinungsbild der Navigation. -help_1: Bindet nacheinander die Ordner/Zeilen der Navigation ein. - - -#press_intro -title: Einleitung -description: Das Erscheinungsbild des Einleitungstextes. -help_1: Der unformatierte Einleitungstext. - - -#press_note -title: Anmerkungen -description: Das Erscheinungsbild der Anmerkungen. -help_1: Die unformatierten Anmerkungen. - - -#press_body -title: Pressebericht -description: Das Erscheinungsbild eines Presseberichtes. -help_1: Der Titel des Presseberichtes. -help_2: URL zum Pressebericht. -help_3: Datum an dem der Pressebericht veröffentlicht wurde. -help_4: Die (formatierte) Einleitung des Presseberichtes. -help_5: Der kurze Vorschautext des Presseberichtes. -help_6: Die (formatierten) Anmerkungen zum Presseberichtes. -help_7: Titel des Spiels, zu dem der Pressebericht veröffentlicht wurde. -help_8: URL zum Bild des Spiels, zu dem der Pressebericht veröffentlicht wurde. -help_9: Titel der Kategorie, zu der der Pressebericht zugeordnet wurde. -help_10: URL zum Bild der Kategorie, zu der der Pressebericht zugeordnet wurde. -help_11: Sprache, in der der Pressebericht verfasst wurde. -help_12: URL zum Bild der Sprache, in der der Pressebericht verfasst wurde. - - -#press_container -title: Presseberichte Container -description: Container um die angezeigten Presseberichte. -help_1: Bindet nacheinander alle passenden Presseberichte ein. - - -#press_main_body -title: Ãœbersicht -description: Das Erscheinungsbild der ganzen Seite. -help_1: Bindet die Navigation ein. -help_2: Bindet den Pressebericht Container mit allen passenden Presseberichte ein. - - -#poll_line -title: Antwort Zeile -description: Antwortmöglichkeit der Umfrage. -help_1: Der Antworttext. -help_2: Die ID der Antwort, damit das Script auch weiß, für was abgestimmt wurde. -help_3: Der Umfragentyp. Notwendig, da die beiden Typen verschiedene Auswahlmöglichkeiten erfordern. -help_4: Erweiterung für Multiple-Choice Umfragen. - - -#poll_body -title: Umfrage Body -description: Aussehen der Umfrage im Menü. -help_1: Die Frage, nach der in der Umfrage gefragt wird. -help_2: Bindet hintereinander alle Antworten ein. -help_3: ID zur eindeutigen Identifizierung der Umfrage. -help_4: Der Typ der Umfrage. (Einzel- od. Mehrfachauswahl) - - -#poll_no_poll -title: Keine Umfrage -description: Meldung wenn keine Umfrage aktiv ist. - - -#poll_result_line -title: Ergebnis Zeile -description: Eine Zeile des Umfrage-Ergebnis. -help_1: Der Antworttext. -help_2: Die Anzahl der Stimmen die eine Antwort erhalten hat. -help_3: Der Stimmenanteil einer Antwort in Prozent. (Mit Prozentzeichen!) -help_4: Die Breite des Balkens bei grafischer Stimmendarstellung. - - -#poll_result -title: Ergebnis Body -description: Aussehen des Umfrage-Ergebnis im Menü. -help_1: Die Frage, nach der in der Umfrage gefragt wird. -help_2: Bindet hintereinander alle Antworten mit dem jeweiligen Ergebnis ein. -help_3: Die Anzahl aller abgegebenen Stimmen. -help_4: Die Anzahl aller Umfrageteilnehmer. -help_5: Der Typ der Umfrage. (Einzel- od. Mehrfachauswahl) - - -#poll_list_line -title: Umfrage Ãœbersicht Zeile -description: Zeile in der Ãœbersichtsseite des Umfragenarchivs. -help_1: Die Frage, nach der in der Umfrage gefragt wird. -help_2: URL zur Detailansicht der archivierten Umfrage. -help_3: Die Anzahl aller abgegebenen Stimmen. -help_4: Die Anzahl aller Umfrageteilnehmer. -help_5: Der Typ der Umfrage. (Einzel- od. Mehrfachauswahl) -help_6: Datum an dem die Umfrage startet. -help_7: Datum an dem die Umfrage endet. - - -#poll_list -title: Umfragen Ãœbersicht Body -description: Ãœbersichtsseite des Umfragenarchivs. -help_1: Bindet hintereinander alle Umfragen ein. -help_2: Sortierparameter für alphabetische Sortierung nach der Frage. -help_3: Bindet den der Sortierung entsprechenden Pfeil ein. -help_4: Sortierparameter für die Anzahl aller abgegebenen Stimmen. -help_5: Bindet den der Sortierung entsprechenden Pfeil ein. -help_6: Sortierparameter für die Anzahl aller Teilnehmer. -help_7: Bindet den der Sortierung entsprechenden Pfeil ein. -help_8: Sortierparameter für den Umfragentyp. -help_9: Bindet den der Sortierung entsprechenden Pfeil ein. -help_10: Sortierparameter für das Startdatum der Umfrage. -help_11: Bindet den der Sortierung entsprechenden Pfeil ein. -help_12: Sortierparameter für das Enddatum der Umfrage. -help_13: Bindet den der Sortierung entsprechenden Pfeil ein. - - -#poll_main_line -title: Archiv Antwort Zeile -description: Antwort Zeile einer archivierten Umfrage. -help_1: Der Antworttext. -help_2: Die Anzahl der Stimmen die eine Antwort erhalten hat. -help_3: Der Stimmenanteil einer Antwort in Prozent. (Mit Prozentzeichen!) -help_4: Die Breite des Balkens bei grafischer Stimmendarstellung. - - -#poll_main_body -title: Archiv Umfrage Body -description: Ansicht einer archivierten Umfrage. -help_1: Die Frage, nach der in der Umfrage gefragt wird. -help_2: Bindet hintereinander alle Antworten mit dem jeweiligen Ergebnis ein. -help_3: Die Anzahl aller abgegebenen Stimmen. -help_4: Die Anzahl aller Umfrageteilnehmer. -help_5: Der Typ der Umfrage. (Einzel- od. Mehrfachauswahl) -help_6: Datum an dem die Umfrage startet. -help_7: Datum an dem die Umfrage endet. - -#style_css -title: CSS -description: Beinhaltet die CSS-Definitionen des Designs. Bitte beachten Sie die »speziellen CSS-Dateinamen. - - -#js_userfunctions -title: Java Script -description: Beinhaltet von Benutzern definierten Java Script Code. - - -#partner_eintrag -title: Ãœbersicht Eintrag -description: Aussehen eines Eintrags in der Gesamtübersicht. -help_1: URL zur Partnerseite. -help_2: URL zum großen Banner der Partnerseite. -help_3: URL zum kleinen Button der Partnerseite -help_4: Name der Partnerseite. -help_5: Beschreibungstext der Partnerseite. - - -#partner_main_body -title: Partner Ãœbersicht Body -description: Aussehen der Liste aller eingetragenen Partner. -help_1: Einzelne Ausgabe aller Partner. -help_2: Einzelne Ausgabe der Partner, die permanent angezeigt werden sollen. -help_3: Einzelne Ausgabe der Partner, die nicht permanent angezeigt werden sollen. - - -#partner_navi_eintrag -title: Menü Eintrag -description: Aussehen eines Eintrags im Menü. -help_1: URL zur Partnerseite. -help_2: URL zum großen Banner der Partnerseite. -help_3: URL zum kleinen Button der Partnerseite -help_4: Name der Partnerseite. -help_5: Beschreibungstext der Partnerseite. - - -#partner_navi_body -title: Menü Body -description: Aussehen der Partnerliste im Menü. -help_1: Einzelne Ausgabe aller Partner. -help_2: Einzelne Ausgabe der Partner, die permanent angezeigt werden sollen. -help_3: Einzelne Ausgabe der Partner, die nicht permanent angezeigt werden sollen. - - -#email_register -title: Registrierung -description: Email die bei der Registrierung eines Users verschickt wird. -help_1: Der gewählte Benutzername des Users. -help_2: Das gewählte Passworts des Users. - -#email_passchange -title: Passwortänderung -description: Email die bei einer Passwortänderung verschickt wird. -help_1: Der gewählte Benutzername des Users. -help_2: Das gewählte Passworts des Users. - - -#announcement -title: Ankündigung -description: Ankündigung auf der Seite. -help_1: Bindet die verfasste Ankündigung ein. - - - -#statistik -title: Statistik -description: Besucher und Seiten Statistik -help_1: Anzahl aller Besucher der Seite. -help_2: Zahl aller Besucher am aktuellen Tag. -help_3: Anzahl aller Seitenaufrufe. -help_4: Zahl aller Seitenaufrufe am aktuellen Tag. -help_5: Zahl aller Besucher die sich zurzeit auf der Seite befinden. -help_6: Anzahl der geschriebenen News. -help_7: Anzahl der registrierten User. -help_8: Anzahl der geschriebenen Artikel. -help_9: Anzahl der abgegebenen Kommentare. - - - - -#news_comment_autor -title: Kommentar Autor -description: Link zum Kommentar Autor. -help_1: Der Name des Kommentar-Schreibers. -help_2: URL zum Profil des Autors. - -#news_comment_form -title: Kommentar Formular -description: Formular zum Schreiben von Kommentaren. -help_1: ID der News, um sie eindeutig zu identifizieren. -help_2: Bindet den Namen des angemeldeten Users, bzw. das Template "Eingabefeld Name" ein. -help_3: Bindet das Anti Spam Captcha ein. -help_4: Bindet den Erklärungstext, warum Anti Spam verwendet wird ein. - -#news_search_form -title: Newsarchiv Suche -description: Formular für die Suche im Archiv. -help_1: Fügt alle Jahre ein, für die News verfügbar sind. - - - - -#news_headline -title: Headline -description: Zeile im Headline Body. -help_1: Der Titel der News. -help_2: Das Datum an dem die News veröffentlicht wurde. -help_3: URL zur News. - -#news_headline_body -title: Headline Body -description: Headline Kasten oben auf der Seite. -help_1: Bindet die Headlines ein. -help_2: Bindet die Downloads ein. - - -#news_link -title: Related Link Zeile -description: Eine Zeile der Related Links. -help_1: Der Titel den der Link trägt. -help_2: Das Ziel-Fenster des Links. -help_3: Die URL auf die verlinkt wird. - -#news_related_links -title: Related Links Body -description: Die Related Links unter einer News. -help_1: Bindet nacheinander die angegebenen Links ein. - - -#news_body -title: News -description: Das Erscheinungsbild einer News. -help_1: ID der News, für die eindeutige Ansteuerung auf der Startseite. -help_2: Der Titel der News. -help_3: Das Datum an dem die News veröffentlicht wurde. -help_4: Der Text der News. -help_5: Der Name des News-Schreibers. -help_6: URL zum Profil des Autors. -help_7: URL zum Kategorie-Bild. -help_8: Der Titel der Kategorie. -help_9: URL zur Kommentaransicht der News. -help_10: Anzahl der zur News abgegebenen Kommentare. -help_11: Bindet die Related Links in der News ein. - -#news_container -title: News Container -description: Das Erscheinungsbild der News-Seite. -help_1: Bindet nacheinander alle News ein. -help_2: Bindet den Headline-Kasten ein. - -#news_comment_body -title: Kommentar Body -description: Das Erscheinungsbild eines Kommentars. -help_1: Der Titel des Kommentars. -help_2: Das Datum an dem der Kommentar geschrieben wurde. -help_3: Der Text des Kommentars. -help_4: Bindet den Namen eines nicht registrierten Autors oder das Template "Kommentar Autor" ein. -help_5: Bindet einen evtl. Avatar des Autors ein. - -#news_comment_form_spam -title: Anti Spam -description: Captcha zum Schutz gegen Spam-Bots. -help_1: URL zum Anti Spam Captcha Bild. - -#news_comment_form_spamtext -title: Anti Spam Text -description: Erklärungstext, warum Anti Spam verwendet wird. - -#news_comment_form_name -title: Eingabefeld Name -description: Wird angezeigt, wenn der User nicht registriert ist. - -#news_comment_container -title: Kommentar Container -description: Das Erscheinungsbild der Kommentar-Seite. -help_1: Bindet die News ein. -help_2: Bindet nacheinander alle Kommentare ein. -help_3: Bindet das Formular zum Schreiben von Kommentaren ein. - - -#dl_search_field -title: Suche -description: Kleines Suchfeld, dass auf jeder Seite angezeigt werden kann. -help_1: Teilt dem Script die zu durchsuchende Kategorie mit. -help_2: Stichwort, nach dem gesucht wird. -help_3: URL zur Anzeige aller Downloads. -#dl_file -title: File -description: Zeile für ein File. -help_1: Titel des Files. -help_2: Link zum Download des Files. -help_3: Größe des Files. -help_4: Vom File verursachter Traffic (Größe*Downloads). -help_5: Anzahl der Downloads. -help_6: Hinweis darauf, dass das File auf einen Mirror weiterleitet. -help_7: Colspan (über 2 Zellen) der evtl. nötig ist, damit der Mirror-Hinweis korrekt angezeigt wird. - -#dl_file_is_mirror -title: Mirror -description: Anzeige, falls das File ein Mirror ist. - -#dl_stats -title: Statistik -description: Zeile für die Statistik unter den Files. -help_1: Gesamtzahl aller Files. -help_2: Größe aller Files zusammen. -help_3: Insgesamt verursachter Traffic. -help_4: Gesamtzahl der Downloads aller Files. - - - -#dl_navigation -title: Navigation -description: Einzelne Zeile der Navigation. -help_1: Dateiname des angezeigten Icons (geöffneter Ordner, geschlossener Ordner, etc.). -help_2: URL die auf die Kategorie verweist. -help_3: Titel der Kategorie. - -#dl_quick_links -title: Quick Links -description: Download Quick Links auf der Newsseite. -help_1: Zeitpunkt, zu dem der Download veröffentlicht wurde. -help_2: URL zur Downloadseite. -help_3: Titel des Downloads. - -#dl_datei_preview -title: Datei Vorschau -description: Vorschau einer Datei in der Ãœbersicht. -help_1: Titel des Downloads. -help_2: URL zur Downloadseite. -help_3: Titel der Kategorie des Downloads. -help_4: Zeitpunkt, zu dem der Download veröffentlicht wurde. -help_5: Beschreibungstext des Downloads. - -#dl_body -title: Download Ãœbersicht -description: Ãœbersichtsseite für die Downloads. Wird auch für Suchergebnisse genutzt. -help_1: Bindet die Kategorie-Navigation ein. -help_2: Bindet das Downloads-Suchfeld ein. -help_3: Bindet die einzelnen Datei-Vorschauen ein. - -#dl_file_body -title: Datei Body -description: Detailseite eines Downloads. -help_1: Titel des Downloads. -help_2: URL zum Vorschaubild des Downloads. -help_3: URL zum Thumbnails des Downloads. -help_4: Ordner-Baum der Download Navigation. -help_5: Download Suchfeld. -help_6: Name des Uploaders. -help_7: URL zum Profil des Uploaders. -help_8: Name des Autors. -help_9: URL zur Homepage des Autors. -help_10: Datum des Download. -help_11: Kategorie des Downloads. -help_12: Beschreibungstext des Downloads. -help_13: Ausgabe der einzelnen Files des Downloads. diff --git a/www/includes/adminfunctions.php b/www/includes/adminfunctions.php index ee2c114..0dee931 100644 --- a/www/includes/adminfunctions.php +++ b/www/includes/adminfunctions.php @@ -760,11 +760,11 @@ function get_topmenu ($ACTIVE_MENU) ///////////////////////////////////////////////////////// function check_topmenu_permissions ($MENU_ID) { - global $sql; + global $FD; - $page_arr = $sql->conn()->prepare( + $page_arr = $FD->db()->conn()->prepare( 'SELECT P.page_id AS page_id - FROM '.$sql->getPrefix().'admin_cp P, '.$sql->getPrefix().'admin_groups G + FROM '.$FD->db()->getPrefix().'admin_cp P, '.$FD->db()->getPrefix().'admin_groups G WHERE G.`menu_id` = ? AND P.`group_id` = G.`group_id` AND P.`page_int_sub_perm` = 0 ORDER BY P.`page_id`'); $page_arr->execute(array($MENU_ID)); @@ -784,11 +784,11 @@ function check_topmenu_permissions ($MENU_ID) ////////////////////////////////// function get_leftmenu ($ACTIVE_MENU, $GO) { - global $sql; + global $FD; // get data from db - $group_arr = $sql->conn()->prepare( - 'SELECT group_id FROM '.$sql->getPrefix()."admin_groups + $group_arr = $FD->db()->conn()->prepare( + 'SELECT group_id FROM '.$FD->db()->getPrefix()."admin_groups WHERE `menu_id` = ? AND `group_id` NOT IN ('0', '-1') ORDER BY `group_pos`"); $group_arr->execute(array($ACTIVE_MENU)); @@ -972,7 +972,6 @@ function admin_login($username, $password, $iscookie) function fillsession ($uid) { global $FD; - global $sql; $USER_ARR = $FD->sql()->conn()->query( 'SELECT user_id, user_name, user_is_staff, user_group, user_is_admin diff --git a/www/includes/indexfunctions.php b/www/includes/indexfunctions.php index b85d243..f9f60bf 100644 --- a/www/includes/indexfunctions.php +++ b/www/includes/indexfunctions.php @@ -661,13 +661,13 @@ function load_an_applet($file, $output, $args) ////////////////////////// function tpl_func_snippets($original, $main_argument, $other_arguments) { - global $SNP, $sql; + global $SNP, $FD; // Load Navigation on demand if (!isset($SNP[$main_argument])) { // Get Snippet and write into Array - $data = $sql->conn()->prepare( - 'SELECT snippet_tag, snippet_text FROM '.$sql->getPrefix().'snippets + $data = $FD->db()->conn()->prepare( + 'SELECT snippet_tag, snippet_text FROM '.$FD->db()->getPrefix().'snippets WHERE `snippet_tag` = ? AND `snippet_active` = 1 LIMIT 1'); $data->execute(array($original)); $data = $data->fetch(PDO::FETCH_ASSOC); @@ -925,10 +925,6 @@ function get_seo () { $_SERVER['QUERY_STRING'] .= urlencode($k) . '=' . urlencode($v) . '&'; $_SERVER['REQUEST_URI'] = '/index.php?' . $_SERVER['QUERY_STRING']; - // Falls noetig, Verhalten von register_globals nachahmen - if (in_array(ini_get('register_globals') == 'on', array('0', 'on', 'true'))) - extract($_REQUEST); - // Hotlinkingschutz vom FS2 zufrieden stellen if (isset($_SERVER['HTTP_REFERER'])) if (preg_match('/\/dlfile--.*\.html$/', $_SERVER['HTTP_REFERER'])) diff --git a/www/libs/class_ConfigData.php b/www/libs/class_ConfigData.php index 8fd3451..ff92842 100644 --- a/www/libs/class_ConfigData.php +++ b/www/libs/class_ConfigData.php @@ -2,7 +2,7 @@ /** * @file class_ConfigData.php * @folder /libs/ - * @version 0.3 + * @version 0.4 * @author Sweil * * this class provides data for Config Objects @@ -17,7 +17,7 @@ class ConfigData { // create config object // DO NOT OVERRIDE // use startup() for your code - final public function __construct($data, $json = false) { + final public function __construct($data = array(), $json = false) { // set start data if ($json) { $this->config = json_array_decode($data); @@ -40,8 +40,35 @@ protected function startup() { // set specific config entry to value in local copy // does not change any database data public function setConfig($name, $value) { - $this->config[$name] = $value; + $this->config[$name] = $value; + return $this; } + + // set multiple config entries to value in local copy + // does not change any database data + public function setConfigByArray($config) { + $this->config += $config; + return $this; + } + + // set multiple config entries from a confog file + // does not change any database data + public function setConfigByFile($name) { + + $file = "/{$name}.cfg.php"; + if ('production' !== FS2_ENV) { + $file_env = "/{$name}-{FS2_ENV}.cfg.php"; + if (file_exists(FS2CONFIG.$file_env)) { + $file = $file_env; + } + } + + $config = array(); + include(FS2CONFIG."/".$file); + return $this->setConfigByArray($config); + } + + // return config as array public function getConfigArray() { diff --git a/www/libs/class_Frogsystem2.php b/www/libs/class_Frogsystem2.php index f120064..1041499 100644 --- a/www/libs/class_Frogsystem2.php +++ b/www/libs/class_Frogsystem2.php @@ -62,25 +62,21 @@ public function init() { // Set default include path set_include_path(FS2ROOT); + + // init global data object + global $FD; + $FD = new GlobalData(); + try { + // TODO: Pre-Startup Hook + $FD->startup(); + } catch (Exception $e) { + // DB Connection failed + $this->fail($e); + } return $this; } - - public function header($content, $replace = false, $http_response_code = null) { - header($content, $replace, $http_response_code); - return $this; - } - - - private function libloader($classname) { - $class = explode("\\", $classname); - $filepath = FS2ROOT.'/libs/class_'.end($class).'.php'; - if (file_exists($filepath)) { - include_once($filepath); - } else { - return false; - } - } + public function initSession() { // Start Session @@ -102,34 +98,9 @@ public function deploy() { global $FD, $APP; $this->initSession(); - //Anti-Spam Encryption-Code $spam = 'wKAztWWB2Z'; - // TODO: Pre-Import Hook - require_once(FS2CONFIG . '/db.cfg.php'); - - // TODO: Pre-Connection Hook - global $sql; - - try { - - // Connect to DB-Server - $sql = new sql($dbc['host'], $dbc['data'], $dbc['user'], $dbc['pass'], $dbc['pref']); - - // Frogsystem Global Data Array - $FD = new GlobalData($sql); - - // Unset unused vars - unset($spam, $dbc); - - // DB Connection failed //// - } catch (Exception $e) { - $this->fail($e); - return; - } - - // Constructor Calls // TODO: "Constructor Hook" @@ -207,6 +178,24 @@ private function fail($exception) { // Display No-Connection-Page echo $template; $this->__destruct(); + exit; + } + + + public function header($content, $replace = false, $http_response_code = null) { + header($content, $replace, $http_response_code); + return $this; + } + + + private function libloader($classname) { + $class = explode("\\", $classname); + $filepath = FS2ROOT.'/libs/class_'.end($class).'.php'; + if (file_exists($filepath)) { + include_once($filepath); + } else { + return false; + } } private function detectUserLanguage($default = 'de_DE') { diff --git a/www/libs/class_GlobalData.php b/www/libs/class_GlobalData.php index dfe8e18..09a631b 100644 --- a/www/libs/class_GlobalData.php +++ b/www/libs/class_GlobalData.php @@ -2,7 +2,7 @@ /** * @file class_global_data.php * @folder /libs/ - * @version 0.3 + * @version 0.4 * @author Sweil * * this class provides access to the frogsystem 2 global data @@ -12,17 +12,53 @@ class GlobalData { // Properties - private $sql; // sql connection + private $db = null; // Database connection private $text = array(); // Text objects private $config = array(); // config data // Constructor // - public function __construct(&$sql) { + public function __construct() { + // get env cfg + require_once(FS2SOURCE.'/classes/config/ConfigEnv.php'); + $this->config['env'] = new ConfigEnv(); + } - // Set sql connection - $this->sql = $sql; + // Destructor closes DB-Connection + public function __destruct (){ + $this->closeConnection(); + } + + // connect to Database + public function connect() { + $this->db = new sql($this->env('DB_HOST'), $this->env('DB_NAME'), $this->env('DB_USER'), $this->env('DB_PASSWORD'), $this->env('DB_PREFIX')); + return $this->db; + } + // get db Database connection + public function db() { + return $this->db; + } + public function sql() { + trigger_error('Use of $FD->sql is deprecated. Please use $FD->db.', E_USER_DEPRECATED); + return $this->db(); + } + // Destruct Database Connection => Close Connection + private function closeConnection() { + $this->db->__destruct(); + return $this; + } + + + // startup the system + public function startup() { + // connect to db + try { + $this->connect(); + } catch (Excpetion $e) { + throw $e; + } + // set config data $this->loadConfigsByHook('startup'); @@ -34,11 +70,8 @@ public function __construct(&$sql) { 'menu' => new lang ($this->config('language_text'), 'menu'), 'fscode' => new lang ($this->config('language_text'), 'fscode'), ); - } - - // Destructor closes SQL-Connection - public function __destruct (){ - $this->closeSql(); + + return $this; } @@ -69,8 +102,8 @@ public function loadConfigsByHook($hook, $reload = false) { require_once(FS2SOURCE . '/libs/class_ConfigData.php'); // Load configs from DB - $data = $this->sql->conn()->prepare( - 'SELECT * FROM '.$this->sql->getPrefix().'config + $data = $this->db->conn()->prepare( + 'SELECT * FROM '.$this->db->getPrefix().'config WHERE `config_loadhook` = ?'); $data->execute(array($hook)); $data = $data->fetchAll(PDO::FETCH_ASSOC); @@ -95,8 +128,8 @@ private function createConfigObject($name, $data, $json) { // create config object from db private function getConfigObjectFromDatabase($name) { // Load config from DB - $config = $this->sql->conn()->prepare( - 'SELECT * FROM '.$this->sql->getPrefix().'config + $config = $this->db->conn()->prepare( + 'SELECT * FROM '.$this->db->getPrefix().'config WHERE `config_name` = ? LIMIT 1'); $config->execute(array($name)); $config = $config->fetch(PDO::FETCH_ASSOC); @@ -132,7 +165,7 @@ public function setConfig() { public function saveConfig($name, $newdata) { try { //get original data from db - $original_data = $this->sql->getField('config', 'config_data', array('W' => "`config_name` = '".$name."'")); + $original_data = $this->db->getField('config', 'config_data', array('W' => "`config_name` = '".$name."'")); if (!empty($original_data)) $original_data = json_array_decode($original_data); else { @@ -152,7 +185,7 @@ public function saveConfig($name, $newdata) { ); // save to db - $this->sql->save('config', $newdata, 'config_name', false); + $this->db->save('config', $newdata, 'config_name', false); // Reload Data $this->reloadConfig($name, $newdata['config_data'], true); @@ -207,15 +240,6 @@ public function configExists() { } - // get sql - public function sql() { - return $this->sql; - } - // Destruct SQL => Close Connection - private function closeSql() { - $this->sql->__destruct(); - } - // get lang phrase object public function text($type, $tag) { diff --git a/www/libs/class_Search.php b/www/libs/class_Search.php index a58899b..6d0980d 100644 --- a/www/libs/class_Search.php +++ b/www/libs/class_Search.php @@ -46,8 +46,8 @@ public function __construct ($type, $query, $phonetic = false) { require_once(FS2SOURCE . '/includes/searchfunctions.php'); // assign global vars - global $sql, $FD; - $this->sql = $sql; + global $FD; + $this->sql = $FD->db(); $config_cols = array('search_num_previews', 'search_and', 'search_or', 'search_xor', 'search_not', 'search_wildcard', 'search_min_word_length', 'search_allow_phonetic', 'search_use_stopwords'); $FD->loadConfig('search'); $this->config = $FD->configObject('search')->getConfigArray(); diff --git a/www/libs/class_SearchQuery.php b/www/libs/class_SearchQuery.php index a5550da..3dafaa2 100644 --- a/www/libs/class_SearchQuery.php +++ b/www/libs/class_SearchQuery.php @@ -35,8 +35,8 @@ public function __construct ($operators = array(), $modifiers = array()) { require_once(FS2SOURCE . '/libs/class_SearchTree.php'); // assign global vars - global $sql; - $this->sql = $sql; + global $FD; + $this->sql = $FD->db(); // set local vars if (!empty($operators)) diff --git a/www/libs/class_fileaccess.php b/www/libs/class_fileaccess.php index d5c940e..87165bf 100644 --- a/www/libs/class_fileaccess.php +++ b/www/libs/class_fileaccess.php @@ -12,7 +12,6 @@ class fileaccess { // constructor public function __construct() { - global $FD; //What is that line doing here? } // getFileData diff --git a/www/libs/functions.php b/www/libs/functions.php index 1ff692e..841c631 100644 --- a/www/libs/functions.php +++ b/www/libs/functions.php @@ -1,5 +1,4 @@ - * @author Matt Knapp - * @author Brett Stimmerman - * @copyright 2005 Michal Migurski - * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ - * @license http://www.opensource.org/licenses/bsd-license.php - * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 - */ - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_SLICE', 1); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_STR', 2); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_ARR', 3); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_OBJ', 4); - -/** - * Marker constant for Services_JSON::decode(), used to flag stack state - */ -define('SERVICES_JSON_IN_CMT', 5); - -/** - * Behavior switch for Services_JSON::decode() - */ -define('SERVICES_JSON_LOOSE_TYPE', 16); - -/** - * Behavior switch for Services_JSON::decode() - */ -define('SERVICES_JSON_SUPPRESS_ERRORS', 32); - -/** - * Converts to and from JSON format. - * - * Brief example of use: - * - * - * // create a new instance of Services_JSON - * $json = new Services_JSON(); - * - * // convert a complexe value to JSON notation, and send it to the browser - * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); - * $output = $json->encode($value); - * - * print($output); - * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] - * - * // accept incoming POST data, assumed to be in JSON notation - * $input = file_get_contents('php://input', 1000000); - * $value = $json->decode($input); - * - */ -class Services_JSON -{ - /** - * constructs a new JSON instance - * - * @param int $use object behavior flags; combine with boolean-OR - * - * possible values: - * - SERVICES_JSON_LOOSE_TYPE: loose typing. - * "{...}" syntax creates associative arrays - * instead of objects in decode(). - * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression. - * Values which can't be encoded (e.g. resources) - * appear as NULL instead of throwing errors. - * By default, a deeply-nested resource will - * bubble up with an error, so all return values - * from encode() should be checked with isError() - */ - function Services_JSON($use = 0) - { - $this->use = $use; - } - - /** - * convert a string from one UTF-16 char to one UTF-8 char - * - * Normally should be handled by mb_convert_encoding, but - * provides a slower PHP-only method for installations - * that lack the multibye string extension. - * - * @param string $utf16 UTF-16 character - * @return string UTF-8 character - * @access private - */ - function utf162utf8($utf16) - { - // oh please oh please oh please oh please oh please - if(function_exists('mb_convert_encoding')) { - return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); - } - - $bytes = (ord($utf16{0}) << 8) | ord($utf16{1}); - - switch(true) { - case ((0x7F & $bytes) == $bytes): - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0x7F & $bytes); - - case (0x07FF & $bytes) == $bytes: - // return a 2-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0xC0 | (($bytes >> 6) & 0x1F)) - . chr(0x80 | ($bytes & 0x3F)); - - case (0xFFFF & $bytes) == $bytes: - // return a 3-byte UTF-8 character - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0xE0 | (($bytes >> 12) & 0x0F)) - . chr(0x80 | (($bytes >> 6) & 0x3F)) - . chr(0x80 | ($bytes & 0x3F)); - } - - // ignoring UTF-32 for now, sorry - return ''; - } - - /** - * convert a string from one UTF-8 char to one UTF-16 char - * - * Normally should be handled by mb_convert_encoding, but - * provides a slower PHP-only method for installations - * that lack the multibye string extension. - * - * @param string $utf8 UTF-8 character - * @return string UTF-16 character - * @access private - */ - function utf82utf16($utf8) - { - // oh please oh please oh please oh please oh please - if(function_exists('mb_convert_encoding')) { - return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); - } - - switch(strlen($utf8)) { - case 1: - // this case should never be reached, because we are in ASCII range - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return $utf8; - - case 2: - // return a UTF-16 character from a 2-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr(0x07 & (ord($utf8{0}) >> 2)) - . chr((0xC0 & (ord($utf8{0}) << 6)) - | (0x3F & ord($utf8{1}))); - - case 3: - // return a UTF-16 character from a 3-byte UTF-8 char - // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - return chr((0xF0 & (ord($utf8{0}) << 4)) - | (0x0F & (ord($utf8{1}) >> 2))) - . chr((0xC0 & (ord($utf8{1}) << 6)) - | (0x7F & ord($utf8{2}))); - } - - // ignoring UTF-32 for now, sorry - return ''; - } - - /** - * encodes an arbitrary variable into JSON format - * - * @param mixed $var any number, boolean, string, array, or object to be encoded. - * see argument 1 to Services_JSON() above for array-parsing behavior. - * if var is a strng, note that encode() always expects it - * to be in ASCII or UTF-8 format! - * - * @return mixed JSON string representation of input var or an error if a problem occurs - * @access public - */ - function encode($var) - { - switch (gettype($var)) { - case 'boolean': - return $var ? 'true' : 'false'; - - case 'NULL': - return 'null'; - - case 'integer': - return (int) $var; - - case 'double': - case 'float': - return (float) $var; - - case 'string': - // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT - $ascii = ''; - $strlen_var = strlen($var); - - /* - * Iterate over every character in the string, - * escaping with a slash or encoding to UTF-8 where necessary - */ - for ($c = 0; $c < $strlen_var; ++$c) { - - $ord_var_c = ord($var{$c}); - - switch (true) { - case $ord_var_c == 0x08: - $ascii .= '\b'; - break; - case $ord_var_c == 0x09: - $ascii .= '\t'; - break; - case $ord_var_c == 0x0A: - $ascii .= '\n'; - break; - case $ord_var_c == 0x0C: - $ascii .= '\f'; - break; - case $ord_var_c == 0x0D: - $ascii .= '\r'; - break; - - case $ord_var_c == 0x22: - case $ord_var_c == 0x2F: - case $ord_var_c == 0x5C: - // double quote, slash, slosh - $ascii .= '\\'.$var{$c}; - break; - - case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): - // characters U-00000000 - U-0000007F (same as ASCII) - $ascii .= $var{$c}; - break; - - case (($ord_var_c & 0xE0) == 0xC0): - // characters U-00000080 - U-000007FF, mask 110XXXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, ord($var{$c + 1})); - $c += 1; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xF0) == 0xE0): - // characters U-00000800 - U-0000FFFF, mask 1110XXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2})); - $c += 2; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xF8) == 0xF0): - // characters U-00010000 - U-001FFFFF, mask 11110XXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3})); - $c += 3; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xFC) == 0xF8): - // characters U-00200000 - U-03FFFFFF, mask 111110XX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3}), - ord($var{$c + 4})); - $c += 4; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - - case (($ord_var_c & 0xFE) == 0xFC): - // characters U-04000000 - U-7FFFFFFF, mask 1111110X - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $char = pack('C*', $ord_var_c, - ord($var{$c + 1}), - ord($var{$c + 2}), - ord($var{$c + 3}), - ord($var{$c + 4}), - ord($var{$c + 5})); - $c += 5; - $utf16 = $this->utf82utf16($char); - $ascii .= sprintf('\u%04s', bin2hex($utf16)); - break; - } - } - - return '"'.$ascii.'"'; - - case 'array': - /* - * As per JSON spec if any array key is not an integer - * we must treat the the whole array as an object. We - * also try to catch a sparsely populated associative - * array with numeric keys here because some JS engines - * will create an array with empty indexes up to - * max_index which can cause memory issues and because - * the keys, which may be relevant, will be remapped - * otherwise. - * - * As per the ECMA and JSON specification an object may - * have any string as a property. Unfortunately due to - * a hole in the ECMA specification if the key is a - * ECMA reserved word or starts with a digit the - * parameter is only accessible using ECMAScript's - * bracket notation. - */ - - // treat as a JSON object - if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { - $properties = array_map(array($this, 'name_value'), - array_keys($var), - array_values($var)); - - foreach($properties as $property) { - if(Services_JSON::isError($property)) { - return $property; - } - } - - return '{' . join(',', $properties) . '}'; - } - - // treat it like a regular array - $elements = array_map(array($this, 'encode'), $var); - - foreach($elements as $element) { - if(Services_JSON::isError($element)) { - return $element; - } - } - - return '[' . join(',', $elements) . ']'; - - case 'object': - $vars = get_object_vars($var); - - $properties = array_map(array($this, 'name_value'), - array_keys($vars), - array_values($vars)); - - foreach($properties as $property) { - if(Services_JSON::isError($property)) { - return $property; - } - } - - return '{' . join(',', $properties) . '}'; - - default: - return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) - ? 'null' - : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string"); - } - } - - /** - * array-walking function for use in generating JSON-formatted name-value pairs - * - * @param string $name name of key to use - * @param mixed $value reference to an array element to be encoded - * - * @return string JSON-formatted name-value pair, like '"name":value' - * @access private - */ - function name_value($name, $value) - { - $encoded_value = $this->encode($value); - - if(Services_JSON::isError($encoded_value)) { - return $encoded_value; - } - - return $this->encode(strval($name)) . ':' . $encoded_value; - } - - /** - * reduce a string by removing leading and trailing comments and whitespace - * - * @param $str string string value to strip of comments and whitespace - * - * @return string string value stripped of comments and whitespace - * @access private - */ - function reduce_string($str) - { - $str = preg_replace(array( - - // eliminate single line comments in '// ...' form - '#^\s*//(.+)$#m', - - // eliminate multi-line comments in '/* ... */' form, at start of string - '#^\s*/\*(.+)\*/#Us', - - // eliminate multi-line comments in '/* ... */' form, at end of string - '#/\*(.+)\*/\s*$#Us' - - ), '', $str); - - // eliminate extraneous space - return trim($str); - } - - /** - * decodes a JSON string into appropriate variable - * - * @param string $str JSON-formatted string - * - * @return mixed number, boolean, string, array, or object - * corresponding to given JSON input string. - * See argument 1 to Services_JSON() above for object-output behavior. - * Note that decode() always returns strings - * in ASCII or UTF-8 format! - * @access public - */ - function decode($str) - { - $str = $this->reduce_string($str); - - switch (strtolower($str)) { - case 'true': - return true; - - case 'false': - return false; - - case 'null': - return null; - - default: - $m = array(); - - if (is_numeric($str)) { - // Lookie-loo, it's a number - - // This would work on its own, but I'm trying to be - // good about returning integers where appropriate: - // return (float)$str; - - // Return float or int, as appropriate - return ((float)$str == (integer)$str) - ? (integer)$str - : (float)$str; - - } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) { - // STRINGS RETURNED IN UTF-8 FORMAT - $delim = substr($str, 0, 1); - $chrs = substr($str, 1, -1); - $utf8 = ''; - $strlen_chrs = strlen($chrs); - - for ($c = 0; $c < $strlen_chrs; ++$c) { - - $substr_chrs_c_2 = substr($chrs, $c, 2); - $ord_chrs_c = ord($chrs{$c}); - - switch (true) { - case $substr_chrs_c_2 == '\b': - $utf8 .= chr(0x08); - ++$c; - break; - case $substr_chrs_c_2 == '\t': - $utf8 .= chr(0x09); - ++$c; - break; - case $substr_chrs_c_2 == '\n': - $utf8 .= chr(0x0A); - ++$c; - break; - case $substr_chrs_c_2 == '\f': - $utf8 .= chr(0x0C); - ++$c; - break; - case $substr_chrs_c_2 == '\r': - $utf8 .= chr(0x0D); - ++$c; - break; - - case $substr_chrs_c_2 == '\\"': - case $substr_chrs_c_2 == '\\\'': - case $substr_chrs_c_2 == '\\\\': - case $substr_chrs_c_2 == '\\/': - if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || - ($delim == "'" && $substr_chrs_c_2 != '\\"')) { - $utf8 .= $chrs{++$c}; - } - break; - - case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)): - // single, escaped unicode character - $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2))) - . chr(hexdec(substr($chrs, ($c + 4), 2))); - $utf8 .= $this->utf162utf8($utf16); - $c += 5; - break; - - case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F): - $utf8 .= $chrs{$c}; - break; - - case ($ord_chrs_c & 0xE0) == 0xC0: - // characters U-00000080 - U-000007FF, mask 110XXXXX - //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 2); - ++$c; - break; - - case ($ord_chrs_c & 0xF0) == 0xE0: - // characters U-00000800 - U-0000FFFF, mask 1110XXXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 3); - $c += 2; - break; - - case ($ord_chrs_c & 0xF8) == 0xF0: - // characters U-00010000 - U-001FFFFF, mask 11110XXX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 4); - $c += 3; - break; - - case ($ord_chrs_c & 0xFC) == 0xF8: - // characters U-00200000 - U-03FFFFFF, mask 111110XX - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 5); - $c += 4; - break; - - case ($ord_chrs_c & 0xFE) == 0xFC: - // characters U-04000000 - U-7FFFFFFF, mask 1111110X - // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - $utf8 .= substr($chrs, $c, 6); - $c += 5; - break; - - } - - } - - return $utf8; - - } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { - // array, or object notation - - if ($str{0} == '[') { - $stk = array(SERVICES_JSON_IN_ARR); - $arr = array(); - } else { - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $stk = array(SERVICES_JSON_IN_OBJ); - $obj = array(); - } else { - $stk = array(SERVICES_JSON_IN_OBJ); - $obj = new stdClass(); - } - } - - array_push($stk, array('what' => SERVICES_JSON_SLICE, - 'where' => 0, - 'delim' => false)); - - $chrs = substr($str, 1, -1); - $chrs = $this->reduce_string($chrs); - - if ($chrs == '') { - if (reset($stk) == SERVICES_JSON_IN_ARR) { - return $arr; - - } else { - return $obj; - - } - } - - //print("\nparsing {$chrs}\n"); - - $strlen_chrs = strlen($chrs); - - for ($c = 0; $c <= $strlen_chrs; ++$c) { - - $top = end($stk); - $substr_chrs_c_2 = substr($chrs, $c, 2); - - if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) { - // found a comma that is not inside a string, array, etc., - // OR we've reached the end of the character list - $slice = substr($chrs, $top['where'], ($c - $top['where'])); - array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); - //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - if (reset($stk) == SERVICES_JSON_IN_ARR) { - // we are in an array, so just push an element onto the stack - array_push($arr, $this->decode($slice)); - - } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { - // we are in an object, so figure - // out the property name and set an - // element in an associative array, - // for now - $parts = array(); - - if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { - // "name":value pair - $key = $this->decode($parts[1]); - $val = $this->decode($parts[2]); - - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $obj[$key] = $val; - } else { - $obj->$key = $val; - } - } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { - // name:value pair, where name is unquoted - $key = $parts[1]; - $val = $this->decode($parts[2]); - - if ($this->use & SERVICES_JSON_LOOSE_TYPE) { - $obj[$key] = $val; - } else { - $obj->$key = $val; - } - } - - } - - } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) { - // found a quote, and we are not inside a string - array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c})); - //print("Found start of string at {$c}\n"); - - } elseif (($chrs{$c} == $top['delim']) && - ($top['what'] == SERVICES_JSON_IN_STR) && - ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { - // found a quote, we're in a string, and it's not escaped - // we know that it's not escaped becase there is _not_ an - // odd number of backslashes at the end of the string so far - array_pop($stk); - //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); - - } elseif (($chrs{$c} == '[') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a left-bracket, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); - //print("Found start of array at {$c}\n"); - - } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) { - // found a right-bracket, and we're in an array - array_pop($stk); - //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } elseif (($chrs{$c} == '{') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a left-brace, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); - //print("Found start of object at {$c}\n"); - - } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) { - // found a right-brace, and we're in an object - array_pop($stk); - //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } elseif (($substr_chrs_c_2 == '/*') && - in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { - // found a comment start, and we are in an array, object, or slice - array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false)); - $c++; - //print("Found start of comment at {$c}\n"); - - } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) { - // found a comment end, and we're in one now - array_pop($stk); - $c++; - - for ($i = $top['where']; $i <= $c; ++$i) - $chrs = substr_replace($chrs, ' ', $i, 1); - - //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); - - } - - } - - if (reset($stk) == SERVICES_JSON_IN_ARR) { - return $arr; - - } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { - return $obj; - - } - - } - } - } - - /** - * @todo Ultimately, this should just call PEAR::isError() - */ - function isError($data, $code = null) - { - if (class_exists('pear')) { - return PEAR::isError($data, $code); - } elseif (is_object($data) && (get_class($data) == 'services_json_error' || - is_subclass_of($data, 'services_json_error'))) { - return true; - } - - return false; - } -} - -if (class_exists('PEAR_Error')) { - - class Services_JSON_Error extends PEAR_Error - { - function Services_JSON_Error($message = 'unknown error', $code = null, - $mode = null, $options = null, $userinfo = null) - { - parent::PEAR_Error($message, $code, $mode, $options, $userinfo); - } - } - -} else { - - /** - * @todo Ultimately, this class shall be descended from PEAR_Error - */ - class Services_JSON_Error - { - function Services_JSON_Error($message = 'unknown error', $code = null, - $mode = null, $options = null, $userinfo = null) - { - - } - } - -} - -?> diff --git a/www/resources/jsonwrapper/LICENSE b/www/resources/jsonwrapper/LICENSE deleted file mode 100644 index 4ae6bef..0000000 --- a/www/resources/jsonwrapper/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN -NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF -USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/www/resources/jsonwrapper/jsonwrapper_helper.php b/www/resources/jsonwrapper/jsonwrapper_helper.php deleted file mode 100644 index 29509de..0000000 --- a/www/resources/jsonwrapper/jsonwrapper_helper.php +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/www/resources/jsonwrapper/jsonwrapper_inner.php b/www/resources/jsonwrapper/jsonwrapper_inner.php deleted file mode 100644 index 36a3f28..0000000 --- a/www/resources/jsonwrapper/jsonwrapper_inner.php +++ /dev/null @@ -1,23 +0,0 @@ -encode($arg); -} - -function json_decode($arg) -{ - global $services_json; - if (!isset($services_json)) { - $services_json = new Services_JSON(); - } - return $services_json->decode($arg); -} - -?> diff --git a/www/resources/player/player_flv_config.php b/www/resources/player/player_flv_config.php index c187623..8633800 100644 --- a/www/resources/player/player_flv_config.php +++ b/www/resources/player/player_flv_config.php @@ -96,7 +96,5 @@ iconplaybgcolor='.$config_arr['cfg_iconplaybgcolor'].' iconplaybgalpha='.$config_arr['cfg_iconplaybgalpha'].' showtitleandstartimage='.$config_arr['cfg_showtitleandstartimage'].''; - - unset($sql); } ?> diff --git a/www/resources/player/player_flv_include.php b/www/resources/player/player_flv_include.php index 6bd966e..0f3f68c 100644 --- a/www/resources/player/player_flv_include.php +++ b/www/resources/player/player_flv_include.php @@ -2,7 +2,7 @@ function get_player ( $MULTI, $WIDTH = true, $HEIGHT = true, $MODIFIER = false ) { - global $FD, $sql; + global $FD; $FD->loadConfig('video_player'); $template_own = ' From b1511bb565f5a800ecd6d7e8429d4cbbca34e914 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Mon, 5 Jan 2015 12:59:54 +1300 Subject: [PATCH 16/92] replaced old use of $FD->sql() Signed-off-by: Moritz Kornher --- www/.htaccess | 4 +- www/admin/admin_applets_edit.php | 10 ++-- www/admin/admin_articles_add.php | 14 +++--- www/admin/admin_articles_cat.php | 26 +++++------ www/admin/admin_articles_edit.php | 40 ++++++++-------- www/admin/admin_cimg.php | 4 +- www/admin/admin_cimgcats.php | 12 ++--- www/admin/admin_cimgdel.php | 22 ++++----- www/admin/admin_cimgimport.php | 6 +-- www/admin/admin_dladd.php | 8 ++-- www/admin/admin_dlcat.php | 8 ++-- www/admin/admin_dlcommentedit.php | 10 ++-- www/admin/admin_dledit.php | 32 ++++++------- www/admin/admin_dlnewcat.php | 2 +- www/admin/admin_editor_config.php | 4 +- www/admin/admin_editor_smilies.php | 34 +++++++------- www/admin/admin_find_file.php | 2 +- www/admin/admin_findpicture.php | 6 +-- www/admin/admin_finduser.php | 2 +- www/admin/admin_general_config.php | 4 +- www/admin/admin_group_admin.php | 36 +++++++------- www/admin/admin_group_rights.php | 32 ++++++------- www/admin/admin_news_add.php | 10 ++-- www/admin/admin_news_cat.php | 26 +++++------ www/admin/admin_news_comments_list.php | 40 ++++++++-------- www/admin/admin_news_edit.php | 30 ++++++------ www/admin/admin_news_prev.php | 2 +- www/admin/admin_partneradd.php | 8 ++-- www/admin/admin_partneredit.php | 12 ++--- www/admin/admin_player_add.php | 4 +- www/admin/admin_player_edit.php | 14 +++--- www/admin/admin_polladd.php | 6 +-- www/admin/admin_polledit.php | 20 ++++---- www/admin/admin_press_add.php | 8 ++-- www/admin/admin_press_admin.php | 26 +++++------ www/admin/admin_press_edit.php | 38 +++++++-------- www/admin/admin_randompic_cat.php | 6 +-- www/admin/admin_randompic_time.php | 12 ++--- www/admin/admin_randompic_time_add.php | 2 +- www/admin/admin_screenadd.php | 8 ++-- www/admin/admin_screencat.php | 20 ++++---- www/admin/admin_screenedit.php | 14 +++--- www/admin/admin_screennewcat.php | 2 +- www/admin/admin_search_index.php | 4 +- www/admin/admin_shopadd.php | 4 +- www/admin/admin_shopedit.php | 8 ++-- www/admin/admin_snippets_add.php | 4 +- www/admin/admin_snippets_edit.php | 14 +++--- www/admin/admin_statedit.php | 20 ++++---- www/admin/admin_statgfx.php | 8 ++-- www/admin/admin_statref.php | 4 +- www/admin/admin_statview.php | 18 +++---- www/admin/admin_style_add.php | 6 +-- www/admin/admin_style_management.php | 28 +++++------ www/admin/admin_table_admin.php | 10 ++-- www/admin/admin_user_add.php | 12 ++--- www/admin/admin_user_edit.php | 42 ++++++++--------- www/admin/admin_user_rights.php | 30 ++++++------ www/admin/admin_wallpaperadd.php | 10 ++-- www/admin/admin_wallpaperedit.php | 52 ++++++++++----------- www/admin/start_content.php | 28 +++++------ www/admin/start_interactive.php | 12 ++--- www/admin/start_media.php | 26 +++++------ www/admin/start_promo.php | 8 ++-- www/admin/start_styles.php | 4 +- www/admin/start_system.php | 12 ++--- www/admin/start_user.php | 16 +++---- www/applets/affiliates.php | 2 +- www/applets/announcement.php | 2 +- www/applets/dl-forwarding.php | 4 +- www/applets/mini-statistics.php | 4 +- www/applets/poll-system.php | 30 ++++++------ www/applets/shop-system.php | 2 +- www/applets/social-meta-tags.php | 8 ++-- www/applets/topdownloads.php | 2 +- www/applets/user-menu.php | 2 +- www/classes/downloads/dlcomments.php | 16 +++---- www/classes/downloads/dlfile.php | 12 ++--- www/data/affiliates.php | 2 +- www/data/articles.php | 6 +-- www/data/comments.php | 20 ++++---- www/data/confirm.php | 4 +- www/data/download.php | 8 ++-- www/data/gallery.php | 20 ++++---- www/data/login.php | 2 +- www/data/news.php | 6 +-- www/data/news_search.php | 10 ++-- www/data/polls.php | 20 ++++---- www/data/press.php | 42 ++++++++--------- www/data/register.php | 10 ++-- www/data/search.php | 6 +-- www/data/shop.php | 2 +- www/data/style_selection.php | 4 +- www/data/user.php | 10 ++-- www/data/user_edit.php | 10 ++-- www/data/user_list.php | 4 +- www/data/viewer.php | 6 +-- www/feeds/news-sitemap.php | 2 +- www/feeds/sitemap.php | 6 +-- www/includes/adminfunctions.php | 24 +++++----- www/includes/cookielogin.php | 4 +- www/includes/fscode.php | 2 +- www/includes/functions.php | 50 ++++++++++---------- www/includes/indexfunctions.php | 42 ++++++++--------- www/includes/searchfunctions.php | 30 ++++++------ www/includes/templatefunctions.php | 12 ++--- www/libs/class_Feed.php | 4 +- www/libs/class_HashMapper.php | 4 +- www/libs/class_MailManager.php | 4 +- www/resources/player/player_flv_config.php | 2 +- www/resources/player/player_flv_include.php | 4 +- 111 files changed, 736 insertions(+), 736 deletions(-) diff --git a/www/.htaccess b/www/.htaccess index 66dedcf..d7d6041 100644 --- a/www/.htaccess +++ b/www/.htaccess @@ -1,6 +1,6 @@ # Eigene Fehlerseiten -ErrorDocument 403 http://localhost/fs2/www/403.html -ErrorDocument 404 http://localhost/fs2/www/404.html +#ErrorDocument 403 http://localhost/fs2/www/403.html +#ErrorDocument 404 http://localhost/fs2/www/404.html # Aktiviere RewriteEngine diff --git a/www/admin/admin_applets_edit.php b/www/admin/admin_applets_edit.php index 8668a34..f2c82b1 100644 --- a/www/admin/admin_applets_edit.php +++ b/www/admin/admin_applets_edit.php @@ -59,7 +59,7 @@ $_POST['applet_id'] = array_map ( 'intval', explode ( ',', $_POST['applet_id'] ) ); // SQL-Delete-Query - $FD->sql()->conn()->exec (' + $FD->db()->conn()->exec (' DELETE FROM '.$FD->config('pref').'applets WHERE `applet_id` IN ('.implode ( ',', $_POST['applet_id'] ).')' ); @@ -98,7 +98,7 @@ // Get Data from DB } else { - $index = $FD->sql()->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT * FROM `'.$FD->config('pref')."applets` WHERE `applet_id` = '".$_POST['applet_id']."' @@ -210,7 +210,7 @@ '; // get applets from db - $index = $FD->sql()->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT * FROM '.$FD->config('pref').'applets WHERE `applet_id` IN ('.implode ( ',', $_POST['applet_id'] ).') @@ -266,7 +266,7 @@ '; // get applets from db - $index = $FD->sql()->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT COUNT(*) FROM '.$FD->config('pref').'applets' ); @@ -285,7 +285,7 @@ '; // display applets - $index = $FD->sql()->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT * FROM '.$FD->config('pref').'applets ORDER BY `applet_file`' ); diff --git a/www/admin/admin_articles_add.php b/www/admin/admin_articles_add.php index 4d7ebe9..f034a43 100644 --- a/www/admin/admin_articles_add.php +++ b/www/admin/admin_articles_add.php @@ -43,7 +43,7 @@ } // SQL-Insert-Query - $stmt = $FD->sql()->conn()->prepare (' + $stmt = $FD->db()->conn()->prepare (' INSERT INTO '.$FD->config('pref')."articles (article_url, article_title, article_date, article_user, article_text, article_html, article_fscode, article_para, article_cat_id, article_search_update) @@ -68,7 +68,7 @@ update_search_index ( 'articles' ); } - $FD->sql()->conn()->exec ( 'UPDATE '.$FD->config('pref').'counter SET artikel = artikel + 1' ); + $FD->db()->conn()->exec ( 'UPDATE '.$FD->config('pref').'counter SET artikel = artikel + 1' ); systext( $FD->text('page', 'articles_added'), $FD->text('admin', 'info')); } @@ -121,7 +121,7 @@ // Get User if ( $_POST['article_user'] != 0 ) { - $index = $FD->sql()->conn()->query ( 'SELECT user_name, user_id FROM '.$FD->config('pref')."user WHERE user_id = '".$_POST['article_user']."'" ); + $index = $FD->db()->conn()->query ( 'SELECT user_name, user_id FROM '.$FD->config('pref')."user WHERE user_id = '".$_POST['article_user']."'" ); $ur = $index->fetch(PDO::FETCH_ASSOC); $_POST['article_user_name'] = killhtml ( $ur['user_name'] ); } else { @@ -164,7 +164,7 @@ '; - $index = $FD->sql()->conn()->query ( 'SELECT * FROM '.$FD->config('pref')."articles_cat WHERE cat_id != '".$cat_arr['cat_id']."' ORDER BY cat_name" ); + $index = $FD->db()->conn()->query ( 'SELECT * FROM '.$FD->config('pref')."articles_cat WHERE cat_id != '".$cat_arr['cat_id']."' ORDER BY cat_name" ); while ( $move_arr = $index->fetch(PDO::FETCH_ASSOC) ) { echo ''; } @@ -439,10 +439,10 @@ '; // Get Categories from DB - $index = $FD->sql()->conn()->query ( 'SELECT * FROM '.$FD->config('pref').'articles_cat ORDER BY cat_name' ); + $index = $FD->db()->conn()->query ( 'SELECT * FROM '.$FD->config('pref').'articles_cat ORDER BY cat_name' ); while ( $cat_arr = $index->fetch(PDO::FETCH_ASSOC) ) { - $index_username = $FD->sql()->conn()->query ( 'SELECT user_name FROM '.$FD->config('pref')."user WHERE user_id = '".$cat_arr['cat_user']."'" ); + $index_username = $FD->db()->conn()->query ( 'SELECT user_name FROM '.$FD->config('pref')."user WHERE user_id = '".$cat_arr['cat_user']."'" ); $cat_arr['cat_user'] = $index_username->fetchColumn(); // Display each Category diff --git a/www/admin/admin_articles_edit.php b/www/admin/admin_articles_edit.php index 1a2548f..3fbfbc8 100644 --- a/www/admin/admin_articles_edit.php +++ b/www/admin/admin_articles_edit.php @@ -42,7 +42,7 @@ function default_display_filter ( $FORM ) '; // List Categories - $index = $FD->sql()->conn()->query ( 'SELECT * FROM '.$FD->config('pref').'articles_cat' ); + $index = $FD->db()->conn()->query ( 'SELECT * FROM '.$FD->config('pref').'articles_cat' ); while ( $cat_arr = $index->fetch(PDO::FETCH_ASSOC) ) { settype ( $cat_arr['cat_id'], 'integer' ); @@ -90,9 +90,9 @@ function default_get_pagenav_data () } // Create Pagenavigation - $index = $FD->sql()->conn()->query ( " + $index = $FD->db()->conn()->query ( " SELECT COUNT(article_id) AS 'number' - FROM ".$FD->sql()->getPrefix().'articles + FROM ".$FD->db()->getPrefix().'articles '.$where_clause); $pagenav_arr = get_pagenav_start ( $index->fetchColumn(), $limit, ($_REQUEST['page']-1)*$limit ); @@ -119,7 +119,7 @@ function default_get_entry_data ( $articles_arr ) } - $index = $FD->sql()->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT '.$fields.' FROM '.$FD->config('pref')."articles WHERE `article_id` = '".$articles_arr['article_id']."' @@ -144,13 +144,13 @@ function default_get_entry_data ( $articles_arr ) } if ( $articles_arr['article_user'] != 0 ) { - $index2 = $FD->sql()->conn()->query('SELECT user_name FROM '.$FD->config('pref').'user WHERE user_id = '.$articles_arr['article_user']); + $index2 = $FD->db()->conn()->query('SELECT user_name FROM '.$FD->config('pref').'user WHERE user_id = '.$articles_arr['article_user']); $articles_arr['user_name'] = $FD->text('admin', 'by') .' ' . $index2->fetchColumn() . ','; } else { $articles_arr['user_name'] = ''; } - $index2 = $FD->sql()->conn()->query('SELECT cat_name FROM '.$FD->config('pref').'articles_cat WHERE cat_id = '.$articles_arr['article_cat_id']); + $index2 = $FD->db()->conn()->query('SELECT cat_name FROM '.$FD->config('pref').'articles_cat WHERE cat_id = '.$articles_arr['article_cat_id']); $articles_arr['cat_name'] = $index2->fetchColumn(); } @@ -233,7 +233,7 @@ function default_display_all_entries ( $pagenav_arr ) } // Load News From DB - $index = $FD->sql()->conn()->query ( ' + $index = $FD->db()->conn()->query ( ' SELECT `article_id` FROM '.$FD->config('pref').'articles '.$where_clause.' @@ -319,7 +319,7 @@ function action_edit_get_data ( $ARTICLE_ID ) global $FD; //Load Article - $index = $FD->sql()->conn()->query ( 'SELECT * FROM '.$FD->config('pref')."articles WHERE article_id = '".$ARTICLE_ID."' LIMIT 0, 1" ); + $index = $FD->db()->conn()->query ( 'SELECT * FROM '.$FD->config('pref')."articles WHERE article_id = '".$ARTICLE_ID."' LIMIT 0, 1" ); $articles_arr = $index->fetch(PDO::FETCH_ASSOC); $old_url = $articles_arr['article_url']; @@ -335,10 +335,10 @@ function action_edit_get_data ( $ARTICLE_ID ) trim($articles_arr['article_url']) != '' ) { - $stmt = $FD->sql()->conn()->prepare('SELECT COUNT(`article_id`) FROM `'.$FD->config('pref')."articles` WHERE `article_url` = ?"); + $stmt = $FD->db()->conn()->prepare('SELECT COUNT(`article_id`) FROM `'.$FD->config('pref')."articles` WHERE `article_url` = ?"); $stmt->execute(array($articles_arr['article_url'])); $num_rows = $stmt->fetchColumn(); - $stmt = $FD->sql()->conn()->prepare('SELECT `article_id` FROM `'.$FD->config('pref')."articles` WHERE `article_url` = ?"); + $stmt = $FD->db()->conn()->prepare('SELECT `article_id` FROM `'.$FD->config('pref')."articles` WHERE `article_url` = ?"); $stmt->execute(array($articles_arr['article_url'])); if ($num_rows != 0 && $stmt->fetchColumn() != $ARTICLE_ID) { @@ -375,7 +375,7 @@ function action_edit_get_data ( $ARTICLE_ID ) // Get User if ( $articles_arr['article_user'] != 0 ) { - $index = $FD->sql()->conn()->query ( 'SELECT user_name, user_id FROM '.$FD->config('pref')."user WHERE user_id = '".$articles_arr['article_user']."'" ); + $index = $FD->db()->conn()->query ( 'SELECT user_name, user_id FROM '.$FD->config('pref')."user WHERE user_id = '".$articles_arr['article_user']."'" ); $articles_arr['article_user_name'] = killhtml ( $index->fetchColumn() ); } else { $articles_arr['article_user_name'] = ''; @@ -439,7 +439,7 @@ function action_edit_display_page ( $data_arr ) @@ -365,37 +365,37 @@ @@ -455,34 +455,34 @@
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
diff --git a/www/admin/admin_editor_smilies.php b/www/admin/admin_editor_smilies.php index c7e22e6..085a74f 100644 --- a/www/admin/admin_editor_smilies.php +++ b/www/admin/admin_editor_smilies.php @@ -172,18 +172,18 @@ { $i++; $pointer_up = ' - - '.$FD->text('page', 'smilies_up').' + + '.$FD->text('page', 'smilies_up').' '; $pointer_down = ' - - '.$FD->text('page', 'smilies_down').' + + '.$FD->text('page', 'smilies_down').' '; if ($smilie_arr['order']==1) { - $pointer_up = ''; + $pointer_up = ''; } if ($smilie_arr['order']>=$smilie_last) { - $pointer_down = ''; + $pointer_down = ''; } echo' diff --git a/www/admin/admin_group_rights.php b/www/admin/admin_group_rights.php index 953a65d..2fbe85b 100644 --- a/www/admin/admin_group_rights.php +++ b/www/admin/admin_group_rights.php @@ -220,7 +220,7 @@ function get_group_rights_array ( $GROUP_ID ) } echo '

'.$GROUP_ARR['title'].' ('.$FD->text('page', 'all').'/'.$FD->text('page', 'none').')
'; foreach ( $GROUP_ARR['links'] as $PAGE_ID => $PAGE_ARR ) { - echo ( isset($PAGE_ARR['sub']) && ($PAGE_ARR['sub'] == TRUE) ) ? '->' : ''; + echo ( isset($PAGE_ARR['sub']) && ($PAGE_ARR['sub'] == TRUE) ) ? '->' : ''; echo 'db()sql->conn()->query('SELECT cat_id, cat_name FROM '.$FD->env('DB_PREFIX').'news_cat'); + $cats = $FD->db()->conn()->query('SELECT cat_id, cat_name FROM '.$FD->env('DB_PREFIX').'news_cat'); $cats = $cats->fetchAll(PDO::FETCH_ASSOC); foreach ($cats as $cat) { $cat = array_map('killhtml', $cat); diff --git a/www/admin/admin_randompic_time_add.php b/www/admin/admin_randompic_time_add.php index 33e5a32..ec868b0 100644 --- a/www/admin/admin_randompic_time_add.php +++ b/www/admin/admin_randompic_time_add.php @@ -66,7 +66,7 @@

diff --git a/www/admin/admin_statview.php b/www/admin/admin_statview.php index 4dc6e3a..6561d20 100644 --- a/www/admin/admin_statview.php +++ b/www/admin/admin_statview.php @@ -135,8 +135,8 @@ '.point_number($dbhits).' '; @@ -255,10 +255,10 @@ '; diff --git a/www/admin/admin_user_rights.php b/www/admin/admin_user_rights.php index 62d836f..d33d0a8 100644 --- a/www/admin/admin_user_rights.php +++ b/www/admin/admin_user_rights.php @@ -246,7 +246,7 @@ function get_group_rights_array ( $GROUP_ID, $IS_USER = FALSE ) } echo '

'.$GROUP_ARR['title'].' (alle/keine)
'; foreach ( $GROUP_ARR['links'] as $PAGE_ID => $PAGE_ARR ) { - echo ( isset($PAGE_ARR['sub']) && ($PAGE_ARR['sub'] == TRUE) ) ? '->' : ''; + echo ( isset($PAGE_ARR['sub']) && ($PAGE_ARR['sub'] == TRUE) ) ? '->' : ''; echo 'td:first-child:not(:only-child) { width:100%; height:25px; padding-top:1px; - background-image:url('../images/topmenu.jpg'); + background-image:url('?images=topmenu.jpg'); background-repeat:repeat-x; font-family:"Century Gothic", "Futura", Arial, Helvetica, sans-serif; font-size:10pt; @@ -253,13 +253,13 @@ table.config tr>td:first-child:not(:only-child) { } #find_container { - background-image:url('../images/content_loop_small.jpg'); + background-image:url('?images=content_loop_small.jpg'); background-repeat:repeat-y; width:308px; text-align:left; } #find_top { - background-image:url('../images/content_top_small.jpg'); + background-image:url('?images=content_top_small.jpg'); background-repeat:no-repeat; width:308px; height:25px; @@ -271,7 +271,7 @@ table.config tr>td:first-child:not(:only-child) { font-weight:bold; } #find_foot { - background-image:url('../images/content_foot_small.jpg'); + background-image:url('?images=content_foot_small.jpg'); background-repeat:no-repeat; width:308px; height:53px; @@ -378,7 +378,7 @@ table.content .button, a.link_button { height:27px; margin-top:15px; padding-right:10px; - background:#019934 url('../images/button.jpg'); + background:#019934 url('?images=button.jpg'); background-repeat:repeat-x; background-position:top left; border:1px solid #000000; diff --git a/www/admin/icons/editor/bold.gif b/www/admin/editor/bold.gif similarity index 100% rename from www/admin/icons/editor/bold.gif rename to www/admin/editor/bold.gif diff --git a/www/admin/icons/editor/center.gif b/www/admin/editor/center.gif similarity index 100% rename from www/admin/icons/editor/center.gif rename to www/admin/editor/center.gif diff --git a/www/admin/icons/editor/cimg.gif b/www/admin/editor/cimg.gif similarity index 100% rename from www/admin/icons/editor/cimg.gif rename to www/admin/editor/cimg.gif diff --git a/www/admin/icons/editor/code.gif b/www/admin/editor/code.gif similarity index 100% rename from www/admin/icons/editor/code.gif rename to www/admin/editor/code.gif diff --git a/www/admin/icons/editor/color.gif b/www/admin/editor/color.gif similarity index 100% rename from www/admin/icons/editor/color.gif rename to www/admin/editor/color.gif diff --git a/www/admin/icons/editor/email.gif b/www/admin/editor/email.gif similarity index 100% rename from www/admin/icons/editor/email.gif rename to www/admin/editor/email.gif diff --git a/www/admin/icons/editor/font.gif b/www/admin/editor/font.gif similarity index 100% rename from www/admin/icons/editor/font.gif rename to www/admin/editor/font.gif diff --git a/www/admin/icons/editor/home.gif b/www/admin/editor/home.gif similarity index 100% rename from www/admin/icons/editor/home.gif rename to www/admin/editor/home.gif diff --git a/www/admin/icons/editor/img.gif b/www/admin/editor/img.gif similarity index 100% rename from www/admin/icons/editor/img.gif rename to www/admin/editor/img.gif diff --git a/www/admin/icons/editor/italic.gif b/www/admin/editor/italic.gif similarity index 100% rename from www/admin/icons/editor/italic.gif rename to www/admin/editor/italic.gif diff --git a/www/admin/icons/editor/list.gif b/www/admin/editor/list.gif similarity index 100% rename from www/admin/icons/editor/list.gif rename to www/admin/editor/list.gif diff --git a/www/admin/icons/editor/nofscode.gif b/www/admin/editor/nofscode.gif similarity index 100% rename from www/admin/icons/editor/nofscode.gif rename to www/admin/editor/nofscode.gif diff --git a/www/admin/icons/editor/numlist.gif b/www/admin/editor/numlist.gif similarity index 100% rename from www/admin/icons/editor/numlist.gif rename to www/admin/editor/numlist.gif diff --git a/www/admin/icons/editor/quote.gif b/www/admin/editor/quote.gif similarity index 100% rename from www/admin/icons/editor/quote.gif rename to www/admin/editor/quote.gif diff --git a/www/admin/icons/editor/separator.gif b/www/admin/editor/separator.gif similarity index 100% rename from www/admin/icons/editor/separator.gif rename to www/admin/editor/separator.gif diff --git a/www/admin/icons/editor/size.gif b/www/admin/editor/size.gif similarity index 100% rename from www/admin/icons/editor/size.gif rename to www/admin/editor/size.gif diff --git a/www/admin/icons/editor/smilie.gif b/www/admin/editor/smilie.gif similarity index 100% rename from www/admin/icons/editor/smilie.gif rename to www/admin/editor/smilie.gif diff --git a/www/admin/icons/editor/strike.gif b/www/admin/editor/strike.gif similarity index 100% rename from www/admin/icons/editor/strike.gif rename to www/admin/editor/strike.gif diff --git a/www/admin/icons/editor/underline.gif b/www/admin/editor/underline.gif similarity index 100% rename from www/admin/icons/editor/underline.gif rename to www/admin/editor/underline.gif diff --git a/www/admin/icons/editor/url.gif b/www/admin/editor/url.gif similarity index 100% rename from www/admin/icons/editor/url.gif rename to www/admin/editor/url.gif diff --git a/www/admin/img/bigpointer_left.png b/www/admin/images/bigpointer_left.png similarity index 100% rename from www/admin/img/bigpointer_left.png rename to www/admin/images/bigpointer_left.png diff --git a/www/admin/img/bigpointer_right.png b/www/admin/images/bigpointer_right.png similarity index 100% rename from www/admin/img/bigpointer_right.png rename to www/admin/images/bigpointer_right.png diff --git a/www/admin/img/button_hover.jpg b/www/admin/images/button_hover.jpg similarity index 100% rename from www/admin/img/button_hover.jpg rename to www/admin/images/button_hover.jpg diff --git a/www/admin/img/cdiag.gif b/www/admin/images/cdiag.gif similarity index 100% rename from www/admin/img/cdiag.gif rename to www/admin/images/cdiag.gif diff --git a/www/admin/img/chits.gif b/www/admin/images/chits.gif similarity index 100% rename from www/admin/img/chits.gif rename to www/admin/images/chits.gif diff --git a/www/admin/img/cvisits.gif b/www/admin/images/cvisits.gif similarity index 100% rename from www/admin/img/cvisits.gif rename to www/admin/images/cvisits.gif diff --git a/www/admin/img/help.png b/www/admin/images/help.png similarity index 100% rename from www/admin/img/help.png rename to www/admin/images/help.png diff --git a/www/admin/img/no_pic_small.gif b/www/admin/images/no_pic_small.gif similarity index 100% rename from www/admin/img/no_pic_small.gif rename to www/admin/images/no_pic_small.gif diff --git a/www/admin/img/pointer.png b/www/admin/images/pointer.png similarity index 100% rename from www/admin/img/pointer.png rename to www/admin/images/pointer.png diff --git a/www/admin/img/statistik.gif b/www/admin/images/statistik.gif similarity index 100% rename from www/admin/img/statistik.gif rename to www/admin/images/statistik.gif diff --git a/www/admin/img/button.jpg b/www/admin/img/button.jpg deleted file mode 100644 index 883c34a84494f2569bbd3a91add5bb7fe7a0b253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1325 zcmbu7YfO`86vxlox21q1r66Upg;LbXTqfZr(+|8Ux2lODDmdppG{`0>%S=VbG{aZa zuIMJnbYtog1Z1EIPA*Q-Z3VelmTk4*5Mf)PDyu$WzH=7u*~Pl^W{1J z^UwL6bI=GHhtPG|YqNnM2v~zJpeYb$?kyWs{+Y}uN%>o(=)ZGL^r8(RzBdV70e(T<%Zd-lFp`u@KChmR;fR8<^3_Q}appMF;J z`ROzD4d)xbY-+x6v8}!1%GXz~bzZ;O)7#g7OEd8O;Lx3)hwqNu8=WxRfADb9XnJI} z*&WW=xp|k{n^PAPt*kjs-K1cXU9@beYnv5Dn@3)8FX zTDyZ5CvBXG*tT02ELxI0vDD^AdrbD1N-=`KMGQf@(nvHL03K@NT6y3V}i`VN+floOaXI)E3%dqsQgG=Cb4T zHT?+$QL7sDb_6k=9$e2y2soHLW2)HK&!}9wA6Fo#ar1}83?p|%;?l$ga%<`Xs=sna zDWle;T}EIuAm~ziH+_si`R({FPq09Pz?P!-ojh(4FlU*n^9U+R`ovByYnR$ex;hb@ zs25spP?|gR_5!u>7urs;2YCq6M{C@4ttpii8Os$2B)P_>W!_HX{GO+zlp$In z^DQtR5Hq-Z*PCfPJj^x(`d1P3>U^gwF$c~a!0i#@AIhNhL~5riCTxXWy@lS*@jslQ z+7t8+E9IteYsGjJU$IIDPQde4w)zSBJa}>bDQd?euOW#QY0D9qmUlc=k=)FWz*}>@ k2`?15(!SHM&CxzuU@lrs4w+~tA^j=wU@*kNIRU!&2Oiy1aR2}S diff --git a/www/admin/img/null.gif b/www/admin/img/null.gif deleted file mode 100644 index d36072c6a037aad35d757bbca9a40145a61d518c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 wcmZ?wbhEHbWMp7uXkcLY|NlP&1B2pE7RDFM3=BFzHc*_Afq{w1g^|G;0NVox

- + @@ -43,7 +43,7 @@ - + - + diff --git a/www/admin/templates/admin_table_admin.tpl b/www/admin/templates/admin_table_admin.tpl index 48fd6ac..d82bad1 100644 --- a/www/admin/templates/admin_table_admin.tpl +++ b/www/admin/templates/admin_table_admin.tpl @@ -42,7 +42,7 @@ diff --git a/www/includes/adminfunctions.php b/www/includes/adminfunctions.php index 7250672..85e90f2 100644 --- a/www/includes/adminfunctions.php +++ b/www/includes/adminfunctions.php @@ -1,5 +1,46 @@ //// @@ -639,7 +680,7 @@ function create_editor_button_new($img_url, $alt, $title, $insert) $button = ' '; $button = str_replace('{img_url}', $FD->config('virtualhost').$img_url, $button); diff --git a/www/includes/functions.php b/www/includes/functions.php index c2fdbcb..7cdf04d 100644 --- a/www/includes/functions.php +++ b/www/includes/functions.php @@ -284,10 +284,10 @@ function create_dl_cat ($CAT_ID, $GET_ID, $NAVI_TEMPLATE) { $open_url = ( ( $array['cat_id'] == $GET_ID || in_array ( $GET_ID, $ids ) ) ? $top_url : $cat_url ); $nbsp = str_repeat( ' ', $i-1); - $template = str_repeat( '', $i-1) . $template; + $template = str_repeat( '', $i-1) . $template; if ( $num_subcat <= 0 ) { - $template = str_replace( '{open_link}', $nbsp.'', $template ); + $template = str_replace( '{open_link}', $nbsp.'', $template ); } $template = str_replace( '{open_link}', $nbsp.'', $template ); $template = str_replace( '{folder_link}', ' ', $template ); diff --git a/www/includes/templatefunctions.php b/www/includes/templatefunctions.php index fd315d3..1b1e2e2 100644 --- a/www/includes/templatefunctions.php +++ b/www/includes/templatefunctions.php @@ -607,7 +607,7 @@ function get_original_array ( $EDITOR_NAME, $FILE, $ROWS, $COLS ) if ( file_exists ( FS2SOURCE . '/styles/default/' . $FILE ) ) { $original['button'] = '
- Original anzeigen + Original anzeigen
'; @@ -711,12 +711,12 @@ function create_templateeditor ( $editor_arr, $HIGHLIGHTER, $FILE, $MANYFILES ) '.$original['row'].'
- In Editor-Fenster öffnen + In Editor-Fenster öffnen
'.$original['button'].'
- Zeilen-Nummerierung + Zeilen-Nummerierung
'.$help_template.' '.$dropdowns['global_vars'].' diff --git a/www/lang/de_DE/admin.txt b/www/lang/de_DE/admin.txt index 0f577fd..f2369ae 100644 --- a/www/lang/de_DE/admin.txt +++ b/www/lang/de_DE/admin.txt @@ -121,7 +121,7 @@ selection_import: Auswahl importieren # Button Captions -button_arrow: -> +button_arrow: -> do_action_button: Ausführen do_action_button_long: Aktion ausführen save_changes_button: Änderungen speichern diff --git a/www/lang/de_DE/from_phrases.txt b/www/lang/de_DE/from_phrases.txt index d23e135..d36acee 100644 --- a/www/lang/de_DE/from_phrases.txt +++ b/www/lang/de_DE/from_phrases.txt @@ -37,7 +37,7 @@ fscode: FSCode ist para: Absatzbehandlung ist kib: KiB mib: MiB -arrow: -> +arrow: -> save_long: Änderungen speichern do_button: Ausführen do_button_long: Aktion ausführen diff --git a/www/lang/en_US/admin.txt b/www/lang/en_US/admin.txt index 8cdd372..fbb7a05 100644 --- a/www/lang/en_US/admin.txt +++ b/www/lang/en_US/admin.txt @@ -121,7 +121,7 @@ selection_import: import selection # Button Captions -button_arrow: -> +button_arrow: -> do_action_button: Execute do_action_button_long: Execute action save_changes_button: Save changes diff --git a/www/lang/en_US/from_phrases.txt b/www/lang/en_US/from_phrases.txt index 86166c8..b224e31 100644 --- a/www/lang/en_US/from_phrases.txt +++ b/www/lang/en_US/from_phrases.txt @@ -37,7 +37,7 @@ fscode: FS-Code is para: Paragraph handling is kib: KiB mib: MiB -arrow: -> +arrow: -> save_long: Save changes do_button: Ausführen do_button_long: Aktion ausführen diff --git a/www/libs/class_Frogsystem2.php b/www/libs/class_Frogsystem2.php index 1041499..a637698 100644 --- a/www/libs/class_Frogsystem2.php +++ b/www/libs/class_Frogsystem2.php @@ -29,6 +29,7 @@ public function __construct($root = '.') { public function init() { // Set constants + define('FS2ADMIN', FS2SOURCE.'/admin'); define('FS2ROOT', $this->root); define('FS2_ROOT_PATH', FS2ROOT.'/', true); // DEPRECATED From 8b735ae4d6cf5f6faacb1369c6e6cf56eeb19932 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 14 Jan 2015 13:07:05 +1300 Subject: [PATCH 22/92] fixed statgfx Signed-off-by: Moritz Kornher --- www/admin/admin_statgfx.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/admin/admin_statgfx.php b/www/admin/admin_statgfx.php index 4946693..5fcb959 100644 --- a/www/admin/admin_statgfx.php +++ b/www/admin/admin_statgfx.php @@ -64,7 +64,7 @@ WHERE s_year = $_GET[s_year] and s_month = $_GET[s_month] and s_day = $d" ); - $row = $index->fetchColumn(); + $row = $index->fetch(PDO::FETCH_ASSOC); if ($row !== false) { $dbhits = $row['s_hits']; @@ -189,7 +189,7 @@ { $dayname = date('w', mktime(0, 0, 0, $_GET['s_month'], $d, $_GET['s_year'])); $daynumber = date('d', mktime(0, 0, 0, $_GET['s_month'], $d, $_GET['s_year'])); - imagestringup($image,1,$startwert,280,$daynumber.' '.$day_arr[$dayname],$farbe_text2); + imagestringup($image,1,$startwert,280,$daynumber.' '.$dayname,$farbe_text2); $startwert = $startwert + $feldbreite; } From 0ed96653fc4cd40a43017e7c3505097bf96da1cd Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 14 Jan 2015 13:15:21 +1300 Subject: [PATCH 23/92] fixed more imagepaths Signed-off-by: Moritz Kornher --- www/includes/adminfunctions.php | 2 +- www/lang/de_DE/admin.txt | 6 +++--- www/lang/en_US/admin.txt | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/www/includes/adminfunctions.php b/www/includes/adminfunctions.php index 85e90f2..6522692 100644 --- a/www/includes/adminfunctions.php +++ b/www/includes/adminfunctions.php @@ -875,7 +875,7 @@ function get_leftmenu_group ($GROUP_ID, $IS_FIRST, $GO) if (!empty($template)) { $template = '
- -> '.$FD->text('menu', 'group_'.$GROUP_ID).' + -> '.$FD->text('menu', 'group_'.$GROUP_ID).'
    '.$template.'
'; diff --git a/www/lang/de_DE/admin.txt b/www/lang/de_DE/admin.txt index f2369ae..35d2974 100644 --- a/www/lang/de_DE/admin.txt +++ b/www/lang/de_DE/admin.txt @@ -104,9 +104,9 @@ time_appendix: Uhr at_date: am # Frequently used Images -sub_arrow: '-> -checkbox: [_] -radio: (_) +sub_arrow: '-> +checkbox: [_] +radio: (_) # Action Selection diff --git a/www/lang/en_US/admin.txt b/www/lang/en_US/admin.txt index fbb7a05..a8d5c16 100644 --- a/www/lang/en_US/admin.txt +++ b/www/lang/en_US/admin.txt @@ -104,9 +104,9 @@ time_appendix: o'clock at_date: on # Frequently used Images -sub_arrow: '-> -checkbox: [_] -radio: (_) +sub_arrow: '-> +checkbox: [_] +radio: (_) # Action Selection From b3fda6f21079f231950b4ba4c4d1a1facd2d8801 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 14 Jan 2015 13:47:57 +1300 Subject: [PATCH 24/92] moved folders Signed-off-by: Moritz Kornher --- www/images/wallpaper/index.htm | 10 ---------- www/{images => media}/cat/index.htm | 0 www/{images => media}/downloads/index.htm | 0 www/{images => media/partner}/index.htm | 0 www/{images => media}/press/1_4.gif | Bin www/{images => media}/press/2_3.gif | Bin www/{images => media}/press/2_5.gif | Bin www/{images => media}/press/2_6.gif | Bin www/{images => media}/press/3_1.gif | Bin www/{images => media}/press/3_2.gif | Bin www/{images/partner => media/press}/index.htm | 0 www/{images/press => media/screenshots}/index.htm | 0 www/{images/screenshots => media/shop}/index.htm | 0 www/{images => media}/smilies/1.gif | Bin www/{images => media}/smilies/10.gif | Bin www/{images => media}/smilies/2.gif | Bin www/{images => media}/smilies/3.gif | Bin www/{images => media}/smilies/4.gif | Bin www/{images => media}/smilies/5.gif | Bin www/{images => media}/smilies/6.gif | Bin www/{images => media}/smilies/7.gif | Bin www/{images => media}/smilies/8.gif | Bin www/{images => media}/smilies/9.gif | Bin www/{images/shop => media/smilies}/index.htm | 0 www/{images/smilies => media/wallpaper}/index.htm | 0 25 files changed, 10 deletions(-) delete mode 100644 www/images/wallpaper/index.htm rename www/{images => media}/cat/index.htm (100%) rename www/{images => media}/downloads/index.htm (100%) rename www/{images => media/partner}/index.htm (100%) rename www/{images => media}/press/1_4.gif (100%) rename www/{images => media}/press/2_3.gif (100%) rename www/{images => media}/press/2_5.gif (100%) rename www/{images => media}/press/2_6.gif (100%) rename www/{images => media}/press/3_1.gif (100%) rename www/{images => media}/press/3_2.gif (100%) rename www/{images/partner => media/press}/index.htm (100%) rename www/{images/press => media/screenshots}/index.htm (100%) rename www/{images/screenshots => media/shop}/index.htm (100%) rename www/{images => media}/smilies/1.gif (100%) rename www/{images => media}/smilies/10.gif (100%) rename www/{images => media}/smilies/2.gif (100%) rename www/{images => media}/smilies/3.gif (100%) rename www/{images => media}/smilies/4.gif (100%) rename www/{images => media}/smilies/5.gif (100%) rename www/{images => media}/smilies/6.gif (100%) rename www/{images => media}/smilies/7.gif (100%) rename www/{images => media}/smilies/8.gif (100%) rename www/{images => media}/smilies/9.gif (100%) rename www/{images/shop => media/smilies}/index.htm (100%) rename www/{images/smilies => media/wallpaper}/index.htm (100%) diff --git a/www/images/wallpaper/index.htm b/www/images/wallpaper/index.htm deleted file mode 100644 index 90a3130..0000000 --- a/www/images/wallpaper/index.htm +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/www/images/cat/index.htm b/www/media/cat/index.htm similarity index 100% rename from www/images/cat/index.htm rename to www/media/cat/index.htm diff --git a/www/images/downloads/index.htm b/www/media/downloads/index.htm similarity index 100% rename from www/images/downloads/index.htm rename to www/media/downloads/index.htm diff --git a/www/images/index.htm b/www/media/partner/index.htm similarity index 100% rename from www/images/index.htm rename to www/media/partner/index.htm diff --git a/www/images/press/1_4.gif b/www/media/press/1_4.gif similarity index 100% rename from www/images/press/1_4.gif rename to www/media/press/1_4.gif diff --git a/www/images/press/2_3.gif b/www/media/press/2_3.gif similarity index 100% rename from www/images/press/2_3.gif rename to www/media/press/2_3.gif diff --git a/www/images/press/2_5.gif b/www/media/press/2_5.gif similarity index 100% rename from www/images/press/2_5.gif rename to www/media/press/2_5.gif diff --git a/www/images/press/2_6.gif b/www/media/press/2_6.gif similarity index 100% rename from www/images/press/2_6.gif rename to www/media/press/2_6.gif diff --git a/www/images/press/3_1.gif b/www/media/press/3_1.gif similarity index 100% rename from www/images/press/3_1.gif rename to www/media/press/3_1.gif diff --git a/www/images/press/3_2.gif b/www/media/press/3_2.gif similarity index 100% rename from www/images/press/3_2.gif rename to www/media/press/3_2.gif diff --git a/www/images/partner/index.htm b/www/media/press/index.htm similarity index 100% rename from www/images/partner/index.htm rename to www/media/press/index.htm diff --git a/www/images/press/index.htm b/www/media/screenshots/index.htm similarity index 100% rename from www/images/press/index.htm rename to www/media/screenshots/index.htm diff --git a/www/images/screenshots/index.htm b/www/media/shop/index.htm similarity index 100% rename from www/images/screenshots/index.htm rename to www/media/shop/index.htm diff --git a/www/images/smilies/1.gif b/www/media/smilies/1.gif similarity index 100% rename from www/images/smilies/1.gif rename to www/media/smilies/1.gif diff --git a/www/images/smilies/10.gif b/www/media/smilies/10.gif similarity index 100% rename from www/images/smilies/10.gif rename to www/media/smilies/10.gif diff --git a/www/images/smilies/2.gif b/www/media/smilies/2.gif similarity index 100% rename from www/images/smilies/2.gif rename to www/media/smilies/2.gif diff --git a/www/images/smilies/3.gif b/www/media/smilies/3.gif similarity index 100% rename from www/images/smilies/3.gif rename to www/media/smilies/3.gif diff --git a/www/images/smilies/4.gif b/www/media/smilies/4.gif similarity index 100% rename from www/images/smilies/4.gif rename to www/media/smilies/4.gif diff --git a/www/images/smilies/5.gif b/www/media/smilies/5.gif similarity index 100% rename from www/images/smilies/5.gif rename to www/media/smilies/5.gif diff --git a/www/images/smilies/6.gif b/www/media/smilies/6.gif similarity index 100% rename from www/images/smilies/6.gif rename to www/media/smilies/6.gif diff --git a/www/images/smilies/7.gif b/www/media/smilies/7.gif similarity index 100% rename from www/images/smilies/7.gif rename to www/media/smilies/7.gif diff --git a/www/images/smilies/8.gif b/www/media/smilies/8.gif similarity index 100% rename from www/images/smilies/8.gif rename to www/media/smilies/8.gif diff --git a/www/images/smilies/9.gif b/www/media/smilies/9.gif similarity index 100% rename from www/images/smilies/9.gif rename to www/media/smilies/9.gif diff --git a/www/images/shop/index.htm b/www/media/smilies/index.htm similarity index 100% rename from www/images/shop/index.htm rename to www/media/smilies/index.htm diff --git a/www/images/smilies/index.htm b/www/media/wallpaper/index.htm similarity index 100% rename from www/images/smilies/index.htm rename to www/media/wallpaper/index.htm From a91ecc289026c28af06ff362ad6541732698d114 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 14 Jan 2015 15:05:14 +1300 Subject: [PATCH 25/92] fixed image paths Signed-off-by: Moritz Kornher --- www/admin/admin_articles_cat.php | 20 ++++---- www/admin/admin_cimg.php | 6 +-- www/admin/admin_cimgdel.php | 2 +- www/admin/admin_dladd.php | 4 +- www/admin/admin_dledit.php | 8 ++-- www/admin/admin_editor_smilies.php | 6 +-- www/admin/admin_findpicture.php | 2 +- www/admin/admin_group_admin.php | 24 +++++----- www/admin/admin_group_rights.php | 4 +- www/admin/admin_news_cat.php | 20 ++++---- www/admin/admin_news_prev.php | 2 +- www/admin/admin_partneradd.php | 12 ++--- www/admin/admin_partneredit.php | 16 +++---- www/admin/admin_press_admin.php | 22 ++++----- www/admin/admin_randompic_time.php | 6 +-- www/admin/admin_screenadd.php | 4 +- www/admin/admin_screenedit.php | 12 ++--- www/admin/admin_shopadd.php | 4 +- www/admin/admin_shopedit.php | 12 ++--- www/admin/admin_user_add.php | 2 +- www/admin/admin_user_edit.php | 12 ++--- www/admin/admin_wallpaperadd.php | 8 ++-- www/admin/admin_wallpaperedit.php | 28 +++++------ www/admin/js/admin.js | 8 ++-- www/applets/affiliates.php | 4 +- www/applets/preview-image.php | 6 +-- www/applets/shop-system.php | 8 ++-- www/applets/social-meta-tags.php | 6 +-- www/applets/user-menu.php | 4 +- www/classes/downloads/dlcomments.php | 4 +- www/classes/downloads/dlfile.php | 8 ++-- www/data/affiliates.php | 4 +- www/data/comments.php | 4 +- www/data/gallery.php | 8 ++-- www/data/press.php | 12 ++--- www/data/shop.php | 12 ++--- www/data/user.php | 4 +- www/data/user_edit.php | 14 +++--- www/data/user_list.php | 4 +- www/data/viewer.php | 6 +-- www/includes/adminfunctions.php | 2 +- www/includes/fscode.php | 2 +- www/includes/functions.php | 8 ++-- www/includes/imagefunctions.php | 72 ++++++++++++++-------------- 44 files changed, 219 insertions(+), 217 deletions(-) diff --git a/www/admin/admin_articles_cat.php b/www/admin/admin_articles_cat.php index 1033f01..737af0d 100644 --- a/www/admin/admin_articles_cat.php +++ b/www/admin/admin_articles_cat.php @@ -39,7 +39,7 @@ // Image-Operations if ( $_FILES['cat_pic']['name'] != '' ) { - $upload = upload_img ( $_FILES['cat_pic'], 'images/cat/', 'articles_'.$id, $articles_config_arr['cat_pic_size']*1024, $articles_config_arr['cat_pic_x'], $articles_config_arr['cat_pic_y'] ); + $upload = upload_img ( $_FILES['cat_pic'], '/cat', 'articles_'.$id, $articles_config_arr['cat_pic_size']*1024, $articles_config_arr['cat_pic_x'], $articles_config_arr['cat_pic_y'] ); $message .= '
' . upload_img_notice ( $upload ); } @@ -90,14 +90,14 @@ // Image-Operations if ( isset($_POST['cat_pic_delete']) && $_POST['cat_pic_delete'] == 1 ) { - if ( image_delete ( 'images/cat/', 'articles_'.$_POST['cat_id'] ) ) { + if ( image_delete ( '/cat', 'articles_'.$_POST['cat_id'] ) ) { $message .= '
' . $FD->text("admin", "image_deleted"); } else { $message .= '
' . $FD->text("admin", "image_not_deleted"); } } elseif ( $_FILES['cat_pic']['name'] != '' ) { - image_delete ( 'images/cat/', 'articles_'.$_POST['cat_id'] ); - $upload = upload_img ( $_FILES['cat_pic'], 'images/cat/', 'articles_'.$_POST['cat_id'], $articles_config_arr['cat_pic_size']*1024, $articles_config_arr['cat_pic_x'], $articles_config_arr['cat_pic_y'] ); + image_delete ( '/cat', 'articles_'.$_POST['cat_id'] ); + $upload = upload_img ( $_FILES['cat_pic'], '/cat', 'articles_'.$_POST['cat_id'], $articles_config_arr['cat_pic_size']*1024, $articles_config_arr['cat_pic_x'], $articles_config_arr['cat_pic_y'] ); $message .= '
' . upload_img_notice ( $upload ); } @@ -140,7 +140,7 @@ $message = $FD->text('page', 'cat_deleted'); // Delete Category Image - if ( image_delete ( 'images/cat/', 'articles_'.$_POST['cat_id'] ) ) { + if ( image_delete ( '/cat', 'articles_'.$_POST['cat_id'] ) ) { $message .= '
' . $FD->text('admin', 'image_deleted'); } @@ -246,9 +246,9 @@
+ + + + + diff --git a/www/applets/social-meta-tags.php b/www/applets/social-meta-tags.php index 444a207..ca7548b 100644 --- a/www/applets/social-meta-tags.php +++ b/www/applets/social-meta-tags.php @@ -1,31 +1,4 @@ true, - 'use_schema_org' => true, - 'use_twitter_card' => true, - 'use_open_graph' => true, - - // use for content types - 'for_news' => true, - 'for_articles' => true, - 'for_downloads' => true, - - // minimal info, this is a MUST - 'site_name' => '', - 'default_image' => '', // min. 200x200px, better 280x200px, no https! - - // extended settings, strongly RECOMMENDED - // set to false if you don't want use them - 'news_cat_prepend' => ': ', // false or delimiter string - 'google_plus_page' => '', // with + - 'twitter_site' => '', // with @ - 'fb_admins' => '', // CSV => http://findmyfacebookid.com/ - 'og_section' => '', // A high-level section name. E.g. Technology -); /** * IMPORTANT! @@ -33,25 +6,10 @@ * Update your html tag to include the itemscope and itemtype attributes: * */ - -/** - * Debuggers: - * - * Twitter: https://dev.twitter.com/docs/cards/validation/validator - * Facebook: https://developers.facebook.com/tools/debug - * Google: http://www.google.com/webmasters/tools/richsnippets - */ - -###################### -## SMT Settings End ## -###################### - - -/** - * DO NOT EDIT BELOW HERE - */ -$settings = (object) $settings; - +// load config +$FD->loadConfig('social_meta_tags'); +$FD->setConfig('social_meta_tags', 'default_image', $FD->config('social_meta_tags', 'default_image') ?: false); +$FD->setConfig('social_meta_tags', 'site_name', $FD->config('social_meta_tags', 'site_name') ?: $FD->config('title')); // Detect page type { @@ -86,25 +44,47 @@ function getImageFromContent($text) { preg_match_all('#\[(c?img).*\]([^\s]+)\[\/\1\]#', $text, $images, PREG_SET_ORDER); foreach ($images as $image) { + + // resolve tpl_functions + $image[2] = trim(tpl_functions($image[2], 1, array('VAR', 'URL'))); + + // content image => all goof if ($image[1] == 'cimg') { $url = FS2MEDIA.'/content/'.$image[2]; + + // analyze image url } else { - $url = $image[2]; - } - - // resolve tpl_functions - $url = tpl_functions($url, 1, array('VAR', 'URL')); - $size = getimagesize($url); - if ($size[0] >= 200 && $size[1] >= 200) { + // internal image, but external include + if (0 === strpos($image[2], $FD->config('virtualhost'))) { + $url = FS2CONTENT.'/'.str_replace($FD->config('virtualhost'), '', $image[2]); + + // externes Bild + } else if (0 === substr_compare($image[2], 'http', 0, 4, true) || 0 === substr_compare($image[2], '//', 0, 2, true)) { + if (!$FD->config('social_meta_tags', 'use_external_images')) { + continue; + } + $url = $image[2]; + } else { + $url = FS2CONTENT.'/'.$image[2]; + } + } + + $size = @getimagesize($url); + if ($size && $size[0] >= 200 && $size[1] >= 200) { return $url; } } return false; } - + + // Get content + $content = new stdClass(); + $content->user = (object) array('google_plus' => false, 'twitter' => false); + $content->tag = false; + // news - if ($settings->for_news && 'comments' == $FD->env('goto')) { + if ($FD->config('social_meta_tags', 'enable_news') && 'comments' == $FD->env('goto')) { // load data $news_arr = $FD->db()->conn()->query( 'SELECT N.*, C.cat_name @@ -119,8 +99,8 @@ function getImageFromContent($text) { // set data if (!empty($news_arr)) { $content->title = htmlspecialchars($news_arr['news_title']); - if (false !== $settings->news_cat_prepend) { - $content->title = htmlspecialchars($news_arr['cat_name']).$settings->news_cat_prepend.$content->title; + if ($FD->config('social_meta_tags', 'use_news_cat_prepend')) { + $content->title = htmlspecialchars($news_arr['cat_name']).$FD->config('social_meta_tags', 'news_cat_prepend').$content->title; } $content->summery = summeryFromContent($news_arr['news_text'], 207, ''); $content->url = get_canonical_url(); @@ -131,7 +111,7 @@ function getImageFromContent($text) { // article - } else if ($settings->for_articles && 'articles' == $FD->env('goto')) { + } else if ($FD->config('social_meta_tags', 'enable_articles') && 'articles' == $FD->env('goto')) { //load data if ($FD->cfg('goto') == 'articles') { $article_arr = $FD->db()->conn()->query('SELECT * FROM '.$FD->env('DB_PREFIX').'articles WHERE article_id = '.intval($_GET['id'])); @@ -152,7 +132,7 @@ function getImageFromContent($text) { // download - } else if ($settings->for_downloads && 'dlfile' == $FD->env('goto')) { + } else if ($FD->config('social_meta_tags', 'enable_downloads') && 'dlfile' == $FD->env('goto')) { // load data $downloads = $FD->db()->conn()->query( 'SELECT `dl_id`, `dl_name`, `dl_text`, `dl_date`, `dl_search_update` @@ -192,14 +172,15 @@ function getImageFromContent($text) { //Twitter Summary card images must be at least 200x200px //Twitter summary card with large image must be at least 280x150px $content->image_is_large = false; - if (!$content->image) { - $content->image = $settings->default_image; - } - $size = getimagesize($content->image); - if ($size[0] >= 280 && $size[1] >= 200) { - $content->image_is_large = true; - } else if ($size[0] < 200 || $size[1] < 200) { - $content->image = $settings->default_image; + $content->image = $content->image ?: $FD->config('social_meta_tags', 'default_image'); + + if (!empty($content->image)) { + $size = getimagesize($content->image); + if ($size[0] >= 280 && $size[1] >= 200) { + $content->image_is_large = true; + } else if ($size[0] < 200 || $size[1] < 200) { + $content->image = $FD->config('social_meta_tags', 'default_image'); + } } } @@ -207,22 +188,22 @@ function getImageFromContent($text) { // Display everything { // Google Authorship and Publisher Markup - if ($settings->use_google_plus) { + if ($FD->config('social_meta_tags', 'use_google_plus')) { print $content->user->google_plus ? ''.PHP_EOL : ''; - print $settings->google_plus_page ? ''.PHP_EOL : ''; + print $FD->config('social_meta_tags', 'google_plus_page') ? ''.PHP_EOL : ''; } // Schema.org markup for Google+ - if ($settings->use_schema_org) { + if ($FD->config('social_meta_tags', 'use_schema_org')) { print ''.PHP_EOL; print ''.PHP_EOL; print $content->image ? ''.PHP_EOL : ''; } // Twitter Card data - if ($settings->use_twitter_card) { + if ($FD->config('social_meta_tags', 'use_twitter_card')) { print ''.PHP_EOL; - print $settings->twitter_site ? ''.PHP_EOL : ''; + print $FD->config('social_meta_tags', 'twitter_site') ? ''.PHP_EOL : ''; print ''.PHP_EOL; print ''.PHP_EOL; print $content->user->twitter ? ''.PHP_EOL : ''; @@ -230,18 +211,18 @@ function getImageFromContent($text) { } // Open Graph data - if ($settings->use_open_graph) { + if ($FD->config('social_meta_tags', 'use_open_graph')) { print ''.PHP_EOL; print ''.PHP_EOL; print ''.PHP_EOL; print $content->image ? ''.PHP_EOL : ''; print ''.PHP_EOL; - print $settings->site_name ? ''.PHP_EOL : ''; + print $FD->config('social_meta_tags', 'site_name') ? ''.PHP_EOL : ''; print ''.PHP_EOL; print $content->last_update ? ''.PHP_EOL : ''; - print $settings->og_section ? ''.PHP_EOL : ''; + print $FD->config('social_meta_tags', 'og_section') ? ''.PHP_EOL : ''; print $content->tag ? ''.PHP_EOL : ''; - foreach (explode(',', $settings->fb_admins) as $admin) { + foreach (explode(',', $FD->config('social_meta_tags', 'fb_admins')) as $admin) { print $admin ? ''.PHP_EOL : ''; } } diff --git a/www/lang/de_DE/admin/admin_social_meta_tags.txt b/www/lang/de_DE/admin/admin_social_meta_tags.txt index 20c477c..2be3d75 100644 --- a/www/lang/de_DE/admin/admin_social_meta_tags.txt +++ b/www/lang/de_DE/admin/admin_social_meta_tags.txt @@ -4,6 +4,8 @@ site_name_desc: Frei lassen um Standardtitel zu verwenden. default_image: Standard Vorschaubild default_image_desc: URL zu einem Bild, das verwendet wird, falls kein passendes Bild im Inhalt gefunden wurde default_image_info: Kein https:// - min. 200x200 Pixel (besser 280x200 Pixel) +use_external_images: Externe Bilder nutzen +use_external_images_desc: Versucht externe Bilder einzubinden.
Achtung: Kann Ladezeiten stark verlangsamen. use_news_cat_prepend: Newstitel um Kategorie erweitern use_news_cat_prepend_desc: Erweitert den Newstitel um den Name der Kategorie news_cat_prepend: Erweiterung @@ -11,19 +13,19 @@ news_cat_prepend_desc: Kategorie + Erweiterung + Newstitel googleplus_title: Google+ use_google_plus: Google+ verwenden -use_google_plus_desc: Aktiviert Meta Tags für Nutzung in Google+ +use_google_plus_desc: Aktiviert Meta Tags für Nutzung in Google+
Debugger google_plus_page: Google+ Seite google_plus_page_desc: Name der zugehörigen Google+ Seite twitter_title: Twitter Card use_twitter_card: Twitter Card verwenden -use_twitter_card_desc: Aktiviert Meta Tags für Nutzung in Twitter +use_twitter_card_desc: Aktiviert Meta Tags für Nutzung in Twitter
Debugger twitter_site: Twitter-Account twitter_site_desc: Name des zugehörigen Twitter-Accounts facebook_title: Facebook Open Graph use_open_graph: Open Graph verwenden -use_open_graph_desc: Aktiviert Meta Tags für Nutzung in Facebook +use_open_graph_desc: Aktiviert Meta Tags für Nutzung in Facebook
Debugger fb_admins: Facebook Admins fb_admins_desc: IDs aller Admins der Facebook-Seite
Find your Facebook ID og_section: Open Graph Kategorie @@ -31,7 +33,8 @@ og_section_desc: Eine schemaorg_title: Schema.org Meta Tags use_schema_org: Schema.org verwenden -use_schema_org_desc: Aktiviert Meta Tags nach Schema.org +use_schema_org_desc: Aktiviert Meta Tags nach Schema.org +use_schema_org_info: Füge die Attribute 'itemscope' und 'itemtype' in den html-Tag ein: <html itemscope itemtype="http://schema.org/Article"> enable_for_title: Verwendung enable_news: News diff --git a/www/libs/includes/fscode.php b/www/libs/includes/fscode.php index 2c51bde..8b7c2bd 100644 --- a/www/libs/includes/fscode.php +++ b/www/libs/includes/fscode.php @@ -349,7 +349,7 @@ function parse_fscode($TEXT, $flags = array(), $to_html = array(), $to_text = ar $fscode->addCode ('html', 'usecontent?', 'simple_usecontent_replace', array ('usecontent_param' => 'fscode', 'start_tag' => '', 'end_tag' => ''), 'htmlblock', array ('list', 'listitem', 'block', 'inline', 'link'), array ()); } elseif (in_array('html', $to_text)) { - $fscode->addCode ('html', 'usecontent', 'strip_tags', array (), + $fscode->addCode ('html', 'usecontent', 'do_fscode_strip_tags', array (), 'htmlblock', array ('list', 'listitem', 'block', 'inline', 'link'), array ()); } @@ -482,7 +482,7 @@ function parse_fscode($TEXT, $flags = array(), $to_html = array(), $to_text = ar 'htmlblock', array ('listitem', 'block', 'inline', 'link'), array ()); } elseif (in_array('fscode', $to_text)) { - $fscode->addCode ('html', 'usecontent', 'strip_tags', array (), + $fscode->addCode ('html', 'usecontent', 'do_fscode_strip_tags', array (), 'htmlblock', array ('listitem', 'block', 'inline', 'link'), array ()); } } @@ -900,4 +900,8 @@ function do_fscode_video ($action, $attributes, $content, $params, $node_object) } } +// wrapper for strip tags +function do_fscode_strip_tags ($action, $attributes, $content, $params, &$node_object) { + return strip_tags($content); +} ?> diff --git a/www/styles/lightfrog/0_main.tpl b/www/styles/lightfrog/0_main.tpl index 0f9237f..45c1767 100644 --- a/www/styles/lightfrog/0_main.tpl +++ b/www/styles/lightfrog/0_main.tpl @@ -46,6 +46,7 @@ {..favicon_link..} {..feed_link..} {..javascript..} + $APP(social-meta-tags.php) {..body..} From 3e5c2a57789c09bcc5d7f5db845ab846c60d08b8 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Tue, 20 Jan 2015 15:38:44 +1300 Subject: [PATCH 58/92] added English translation Signed-off-by: Moritz Kornher --- www/applets/social-meta-tags.php | 6 --- .../en_US/admin/admin_social_meta_tags.txt | 45 +++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 www/lang/en_US/admin/admin_social_meta_tags.txt diff --git a/www/applets/social-meta-tags.php b/www/applets/social-meta-tags.php index ca7548b..75f72d6 100644 --- a/www/applets/social-meta-tags.php +++ b/www/applets/social-meta-tags.php @@ -1,11 +1,5 @@ - */ // load config $FD->loadConfig('social_meta_tags'); $FD->setConfig('social_meta_tags', 'default_image', $FD->config('social_meta_tags', 'default_image') ?: false); diff --git a/www/lang/en_US/admin/admin_social_meta_tags.txt b/www/lang/en_US/admin/admin_social_meta_tags.txt new file mode 100644 index 0000000..9e290ed --- /dev/null +++ b/www/lang/en_US/admin/admin_social_meta_tags.txt @@ -0,0 +1,45 @@ +settings_title: Settings +site_name: Name of the site +site_name_desc: Leave empty to use default page title. +default_image: Default Image +default_image_desc: Image-URL used as fallback if no other image is present in the content +default_image_info: No https:// - min. 200x200 pixel (better 280x200 pixel) +use_external_images: Use external images +use_external_images_desc: Try to load and include external images einzubinden.
Attention: May slow down page loading heavily. +use_news_cat_prepend: Prepend category to news +use_news_cat_prepend_desc: Prepends the category name to the news title +news_cat_prepend: Extension +news_cat_prepend_desc: Category + Extension + Newstitle + +googleplus_title: Google+ +use_google_plus: Use Google+ +use_google_plus_desc: Include meta tags for Google+
Debugger +google_plus_page: Google+ Seite +google_plus_page_desc: Name of your Google+ page + +twitter_title: Twitter Card +use_twitter_card: Use Twitter Card +use_twitter_card_desc: Include meta tags for Twitter
Debugger +twitter_site: Twitter-Account +twitter_site_desc: Name of your Twitter-Account + +facebook_title: Facebook Open Graph +use_open_graph: Use Open Graph +use_open_graph_desc: Include meta tags for Facebook
Debugger +fb_admins: Facebook Admins +fb_admins_desc: List of IDs of all Facebook-Page administrators
Find your Facebook ID +og_section: Open Graph Section +og_section_desc: A higher-level section, e.g. Technology + +schemaorg_title: Schema.org Meta Tags +use_schema_org: Use Schema.org +use_schema_org_desc: Include meta tags for Schema.org +use_schema_org_info: Update your html tag to include the itemscope and itemtype attributes: <html itemscope itemtype="http://schema.org/Article"> + +enable_for_title: Usage +enable_news: News +enable_news_desc: Use Social Meta Tags for news +enable_articles: Articles +enable_articles_desc: Use Social Meta Tags for articles +enable_downloads: Downloads +enable_downloads_desc: Use Social Meta Tags for downloads From 963f5dd6c0dc12e2bbabda952ea5ab84538f7798 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Tue, 20 Jan 2015 15:46:47 +1300 Subject: [PATCH 59/92] fixed notices in social-meta-tags.php Signed-off-by: Moritz Kornher --- www/applets/social-meta-tags.php | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/www/applets/social-meta-tags.php b/www/applets/social-meta-tags.php index 75f72d6..05ad076 100644 --- a/www/applets/social-meta-tags.php +++ b/www/applets/social-meta-tags.php @@ -71,12 +71,7 @@ function getImageFromContent($text) { } return false; } - - // Get content - $content = new stdClass(); - $content->user = (object) array('google_plus' => false, 'twitter' => false); - $content->tag = false; - + // news if ($FD->config('social_meta_tags', 'enable_news') && 'comments' == $FD->env('goto')) { // load data @@ -92,6 +87,7 @@ function getImageFromContent($text) { // set data if (!empty($news_arr)) { + $content = new stdClass(); $content->title = htmlspecialchars($news_arr['news_title']); if ($FD->config('social_meta_tags', 'use_news_cat_prepend')) { $content->title = htmlspecialchars($news_arr['cat_name']).$FD->config('social_meta_tags', 'news_cat_prepend').$content->title; @@ -116,6 +112,7 @@ function getImageFromContent($text) { // set data if (!empty($article_arr)) { + $content = new stdClass(); $content->title = htmlspecialchars($article_arr['article_title']); $content->summery = summeryFromContent($article_arr['article_text'], 207, ''); $content->url = get_canonical_url(); @@ -138,6 +135,7 @@ function getImageFromContent($text) { // set data if (!empty($downloads)) { + $content = new stdClass(); $content->title = htmlspecialchars($downloads['dl_name']); $content->summery = summeryFromContent($downloads['dl_text'], 207, ''); $content->url = get_canonical_url(); @@ -150,16 +148,19 @@ function getImageFromContent($text) { } } +// quit if no content found +if (!isset($content) || empty($content)) { + return; +} + //todo // better text filter //~ $content->tags; //~ $content->user->twitter; //~ $content->user->google_plus; +$content->user = (object) array('google_plus' => false, 'twitter' => false); +$content->tag = false; -// quit if no content found -if (!isset($content) || empty($content)) { - return; -} // image stuff { From f46fefaff4ae72389d7721de1309e8a8c0e5e2f8 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 21 Jan 2015 15:20:10 +1300 Subject: [PATCH 60/92] Error messsage in styleselector when style selection is not allowed. Signed-off-by: Moritz Kornher --- www/data/style_selection.php | 158 +++++++++--------- www/lang/de_DE/admin/admin_general_config.txt | 2 +- www/lang/de_DE/frontend.txt | 1 + www/lang/en_US/admin/admin_general_config.txt | 2 +- www/lang/en_US/frontend.txt | 1 + www/libs/class_Frogsystem2.php | 3 - www/libs/includes/stylefunctions.php | 4 + 7 files changed, 84 insertions(+), 87 deletions(-) diff --git a/www/data/style_selection.php b/www/data/style_selection.php index bf58c7f..6adaa0b 100644 --- a/www/data/style_selection.php +++ b/www/data/style_selection.php @@ -1,94 +1,88 @@ loadConfig('main'); - $main_config = $FD->configObject('main')->getConfigArray(); - $current_tag = $main_config['style_tag']; - //change selected style - if (isset($_GET['new_style'])) - { - $stmt = $FD->db()->conn()->prepare('SELECT * FROM `'.$FD->env('DB_PREFIX').'styles` WHERE `style_allow_use` = 1 AND `style_tag` != \'default\' AND `style_tag` = ?'); - $stmt->execute(array($_GET['new_style'])); - if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) === false) - { - $template = sys_message($FD->text('frontend', 'sysmessage'), $FD->text('frontend', 'style_not_exist')); + // clear cookie + if (isset($_GET['clear'])) { + //delete style cookie, "expires" 100 days ago + setcookie('style', '', time()-100*86400); + $template = forward_message($FD->text('frontend', 'style_select_clear'), $FD->text('frontend', 'style_select_reload'), + url('style_selection', array())); + return; } - else - { - //set style via cookie, expires 14 days from now - setcookie('style', $_GET['new_style'], time()+14*86400); - $template = forward_message($FD->text('frontend', 'new_style_selected'), $FD->text('frontend', 'style_select_reload'), - url('style_selection', array())); - } - } //if new_style is set - else if (isset($_GET['clear'])) - { - //delete style cookie, "expires" 100 days ago - setcookie('style', '', time()-100*86400); - $template = forward_message($FD->text('frontend', 'style_select_clear'), $FD->text('frontend', 'style_select_reload'), - url('style_selection', array())); - } //if clear / delete cookie - else - { - //show list - $index = $FD->db()->conn()->query('SELECT * FROM `'.$FD->env('DB_PREFIX').'styles` WHERE `style_allow_use` = 1 AND `style_tag` != \'default\''); - $styles = ''; - while (($row = $index->fetch(PDO::FETCH_ASSOC)) !== false) - { - $ini = FS2STYLES . '/' . $row['style_tag'] . '/style.ini'; - $data = array(); - if (is_readable($ini)) - { - $fa = new fileaccess(); - $ini_lines = $fa->getFileArray($ini); - unset($fa); - $ini_lines = array_map('trim', $ini_lines); - $ini_lines = array_map('htmlentities', $ini_lines); - $data['name'] = $ini_lines[0]; - $data['version'] = ( !empty($ini_lines[1]) ) ? $ini_lines[1] : ''; - $data['copy'] = ( !empty($ini_lines[2]) ) ? $ini_lines[2] : ''; - } - else - { - $data['name'] = $row['style_tag']; - $data['version'] = ''; - $data['copy'] = ''; - } - - $template = new template(); - $template->setFile('0_style_select.tpl'); - $template->load('ENTRY'); + + // other styles not allowed + if (!$FD->cfg('allow_other_designs')) { + $template = sys_message($FD->text('frontend', 'sysmessage'), $FD->text('frontend', 'style_selection_not_allowed')); - $template->tag('tag', $row['style_tag']); - $template->tag('name', $data['name']); - $template->tag('version', $data['version']); - $template->tag('copy', $data['copy']); - $template->tag('url', url('style_selection', array('new_style' => $row['style_tag']))); + //change selected style + } else if (isset($_GET['new_style'])) { + $stmt = $FD->db()->conn()->prepare('SELECT * FROM `'.$FD->env('DB_PREFIX').'styles` WHERE `style_allow_use` = 1 AND `style_tag` != \'default\' AND `style_tag` = ?'); + $stmt->execute(array($_GET['new_style'])); + if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) === false) { + $template = sys_message($FD->text('frontend', 'sysmessage'), $FD->text('frontend', 'style_not_exist')); + } else { + //set style via cookie, expires 14 days from now + setcookie('style', $_GET['new_style'], time()+14*86400); + $template = forward_message($FD->text('frontend', 'new_style_selected'), $FD->text('frontend', 'style_select_reload'), + url('style_selection', array())); + } - $styles .= $template->display(); - }//while + // show style selction form + } else { + //show list + $index = $FD->db()->conn()->query('SELECT * FROM `'.$FD->env('DB_PREFIX').'styles` WHERE `style_allow_use` = 1 AND `style_tag` != \'default\''); + $styles = ''; + while (($row = $index->fetch(PDO::FETCH_ASSOC)) !== false) { + $ini = FS2STYLES . '/' . $row['style_tag'] . '/style.ini'; + $data = array(); + if (is_readable($ini)) { + $fa = new fileaccess(); + $ini_lines = $fa->getFileArray($ini); + unset($fa); + $ini_lines = array_map('trim', $ini_lines); + $ini_lines = array_map('htmlentities', $ini_lines); + $data['name'] = $ini_lines[0]; + $data['version'] = ( !empty($ini_lines[1]) ) ? $ini_lines[1] : ''; + $data['copy'] = ( !empty($ini_lines[2]) ) ? $ini_lines[2] : ''; + } else { + $data['name'] = $row['style_tag']; + $data['version'] = ''; + $data['copy'] = ''; + } + + $template = new template(); + $template->setFile('0_style_select.tpl'); + $template->load('ENTRY'); + + $template->tag('tag', $row['style_tag']); + $template->tag('name', $data['name']); + $template->tag('version', $data['version']); + $template->tag('copy', $data['copy']); + $template->tag('url', url('style_selection', array('new_style' => $row['style_tag']))); + + $styles .= $template->display(); + }//while - $clear = ''; - if (isset($_COOKIE['style'])) - { - $template = new template(); - $template->setFile('0_style_select.tpl'); - $template->load('CLEAR'); + $clear = ''; + if (isset($_COOKIE['style'])) { + $template = new template(); + $template->setFile('0_style_select.tpl'); + $template->load('CLEAR'); - $template->tag('clear_url', url('style_selection', array('clear' => 1)) ); + $template->tag('clear_url', url('style_selection', array('clear' => 1)) ); - $clear = $template->display(); - } + $clear = $template->display(); + } - $template = new template(); - $template->setFile('0_style_select.tpl'); - $template->load('BODY'); + $template = new template(); + $template->setFile('0_style_select.tpl'); + $template->load('BODY'); - $current = isset($_COOKIE['style']) ? htmlentities($_COOKIE['style']) : $FD->text('frontend', 'none').' ('.htmlentities($current_tag).')'; - $template->tag('styles', $styles ); - $template->tag('current', $current ); - $template->tag('clear_selection', $clear ); - $template->tag('cookie_hint', $FD->text('frontend', 'style_select_cookie_hint') ); + $current = isset($_COOKIE['style']) ? htmlentities($_COOKIE['style']) : $FD->text('frontend', 'none').' ('.htmlentities($FD->cfg('style')).')'; + $template->tag('styles', $styles ); + $template->tag('current', $current ); + $template->tag('clear_selection', $clear ); + $template->tag('cookie_hint', $FD->text('frontend', 'style_select_cookie_hint') ); - $template = $template->display (); - } //else + $template = $template->display (); + } //else ?> diff --git a/www/lang/de_DE/admin/admin_general_config.txt b/www/lang/de_DE/admin/admin_general_config.txt index b08a909..afb81c6 100644 --- a/www/lang/de_DE/admin/admin_general_config.txt +++ b/www/lang/de_DE/admin/admin_general_config.txt @@ -41,7 +41,7 @@ style_title: Aktiver Style style_desc: Style, der als Design der Hauptseite verwendet wird. allow_other_styles: Andere Styles erlauben -allow_other_styles_desc: Ermöglicht das Anzeigen der Seite in anderen Styles.
($URL([style=xyz 1])) +allow_other_styles_desc: Erlaubt die Verwendung anderer Styles mittels URL ($URL(news[style=xyz 1])) oder der Styleauswahl. show_favicon: Favicon verwenden show_favicon_desc: Bindet das Favicon ein.
($VAR(style_icons)favicon.ico) diff --git a/www/lang/de_DE/frontend.txt b/www/lang/de_DE/frontend.txt index e1849fd..2d70284 100644 --- a/www/lang/de_DE/frontend.txt +++ b/www/lang/de_DE/frontend.txt @@ -141,4 +141,5 @@ new_style_selected: Neuer Style ausgewählt style_select_reload: Die Styleauswahl wird erst nach dem Neuladen der Seite aktiv. style_select_cookie_hint: Hinweis: Damit diese Styleauswahl korrekt funktioniert, muss der Browser so eingestellt sein, dass er Cookies von dieser Seite akzeptiert. style_select_clear: Styleauswahl gelöscht +style_selection_not_allowed: Die Auswahl eines Styles ist dir nicht erlaubt. none: keine diff --git a/www/lang/en_US/admin/admin_general_config.txt b/www/lang/en_US/admin/admin_general_config.txt index 7b2ad1c..b60b34a 100644 --- a/www/lang/en_US/admin/admin_general_config.txt +++ b/www/lang/en_US/admin/admin_general_config.txt @@ -41,7 +41,7 @@ style_title: Active Style style_desc: Style that is used for design of the main page. allow_other_styles: Allow other styles -allow_other_styles_desc: Allows to display the site with other styles.
($URL([style=xyz 1])) +allow_other_styles_desc: Allows other styles via URL ($URL(news[style=xyz 1])) and the style selector. show_favicon: Use favicon show_favicon_desc: Includes the favicon.
($VAR(style_icons)favicon.ico) diff --git a/www/lang/en_US/frontend.txt b/www/lang/en_US/frontend.txt index 9bd7267..4501175 100644 --- a/www/lang/en_US/frontend.txt +++ b/www/lang/en_US/frontend.txt @@ -141,4 +141,5 @@ new_style_selected: New style selected style_select_reload: The style selection will take effect after the site has been reloaded. style_select_cookie_hint: Hint: Your browser must configured to accept cookies from this site. Otherwise the style selection will not work properly. style_select_clear: Style selection cleared +style_selection_not_allowed: You are not allowed to select a style. none: none diff --git a/www/libs/class_Frogsystem2.php b/www/libs/class_Frogsystem2.php index 478821b..f528f8d 100644 --- a/www/libs/class_Frogsystem2.php +++ b/www/libs/class_Frogsystem2.php @@ -115,9 +115,6 @@ public function deploy() { if (!$FD->configExists('main', 'count_referers') || $FD->cfg('main', 'count_referers')==1) { save_referer(); } - if (isset($_COOKIE['style']) && !isset($_GET['style'])) { - $_GET['style'] = $_COOKIE['style']; - } set_style(); $APP = load_applets(); diff --git a/www/libs/includes/stylefunctions.php b/www/libs/includes/stylefunctions.php index c7345d5..6d33cb7 100644 --- a/www/libs/includes/stylefunctions.php +++ b/www/libs/includes/stylefunctions.php @@ -340,6 +340,10 @@ function set_style () { global $FD; + if (isset($_COOKIE['style']) && !isset($_GET['style'])) { + $_GET['style'] = $_COOKIE['style']; + } + if ( isset ( $_GET['style'] ) && $FD->cfg('allow_other_designs') == 1 ) { $index = $FD->db()->conn()->prepare ( ' SELECT `style_id`, `style_tag` From 1e3b1da69d24271dde801e677429dcdcee11a8ca Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 21 Jan 2015 15:20:28 +1300 Subject: [PATCH 61/92] Added exit to captcha image script. Signed-off-by: Moritz Kornher --- www/data/captcha.php | 1 + 1 file changed, 1 insertion(+) diff --git a/www/data/captcha.php b/www/data/captcha.php index 688c7c7..66e7e05 100644 --- a/www/data/captcha.php +++ b/www/data/captcha.php @@ -149,4 +149,5 @@ function encrypt ( $STRING, $KEY ) { header('Content-type: image/gif'); imagegif ( $img ); imagedestroy( $img ); +exit; ?> From 20d442bda6b1fc32668b0dd4b80520d98dc55d7a Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 21 Jan 2015 15:35:03 +1300 Subject: [PATCH 62/92] fixed usage of htmlspecialchar to killhtml (helpful because of changed default charset in php 5.4) Signed-off-by: Moritz Kornher --- www/admin/admin_allphpinfo.php | 4 +-- www/admin/admin_dlcommentedit.php | 6 ++-- www/admin/admin_group_admin.php | 2 +- www/admin/admin_news_comments_list.php | 8 +++--- www/admin/admin_user_edit.php | 6 ++-- www/admin/admin_wallpaperedit.php | 2 +- www/applets/social-meta-tags.php | 10 +++---- www/classes/feeds/news-sitemap.php | 2 +- www/libs/class_Feed.php | 24 ++++++++-------- www/libs/includes/fscode.php | 12 ++++---- www/libs/includes/indexfunctions.php | 32 ++++++++++----------- www/libs/includes/player.php | 4 +-- www/libs/includes/templatepagefunctions.php | 8 +++--- 13 files changed, 60 insertions(+), 60 deletions(-) diff --git a/www/admin/admin_allphpinfo.php b/www/admin/admin_allphpinfo.php index 364e80c..1d7f400 100644 --- a/www/admin/admin_allphpinfo.php +++ b/www/admin/admin_allphpinfo.php @@ -37,7 +37,7 @@ if (function_exists('posix_getuid') && function_exists('posix_getpwuid')) { $user_info = posix_getpwuid(posix_getuid()); - echo htmlspecialchars($user_info['name']); + echo killhtml($user_info['name']); } else { @@ -45,7 +45,7 @@ although that can (and often will) give incorrect result, but that's the best guess so far. If that bugs you, run your server on a POSIX- compatible system or enable PHP's POSIX extension. */ - echo htmlspecialchars(get_current_user()); + echo killhtml(get_current_user()); } echo ' diff --git a/www/admin/admin_dlcommentedit.php b/www/admin/admin_dlcommentedit.php index 5eff8c2..b70dc25 100644 --- a/www/admin/admin_dlcommentedit.php +++ b/www/admin/admin_dlcommentedit.php @@ -110,7 +110,7 @@ Diese Person hat den Kommentar geschrieben
@@ -119,7 +119,7 @@ Titel des Kommentars @@ -128,7 +128,7 @@ HTML ist '.$config_arr['html_code'].'. FS-Code ist '.$config_arr['fs_code'].'. diff --git a/www/admin/admin_group_admin.php b/www/admin/admin_group_admin.php index 90de736..bc6ba21 100644 --- a/www/admin/admin_group_admin.php +++ b/www/admin/admin_group_admin.php @@ -195,7 +195,7 @@ $group_arr['user_group_name'] = killhtml ( $group_arr['user_group_name'] ); $group_arr['user_group_description'] = killhtml ( $group_arr['user_group_description'] ); $group_arr['user_group_title'] = killhtml ( $group_arr['user_group_title'] ); - $group_arr['user_group_color'] = htmlspecialchars ( $group_arr['user_group_color'] ); + $group_arr['user_group_color'] = killhtml ( $group_arr['user_group_color'] ); settype ( $group_arr['user_group_highlight'], 'integer' ); //Create Color-Code diff --git a/www/admin/admin_news_comments_list.php b/www/admin/admin_news_comments_list.php index d6a114b..c0014a4 100644 --- a/www/admin/admin_news_comments_list.php +++ b/www/admin/admin_news_comments_list.php @@ -407,7 +407,7 @@ if ($i<$spam_count) { echo ' - + '; } else @@ -418,7 +418,7 @@ //Ham if ($i<$ham_count) { - echo ' + echo ''; } @@ -607,7 +607,7 @@ - + @@ -617,7 +617,7 @@ - + diff --git a/www/admin/admin_user_edit.php b/www/admin/admin_user_edit.php index ed00427..d90fefa 100644 --- a/www/admin/admin_user_edit.php +++ b/www/admin/admin_user_edit.php @@ -391,7 +391,7 @@ function user_name_free_or_itself ( $USERNAME, $USER_ID ) { - +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- Kein Bild gefunden + Kein Bild gefunden
-
- +
+
-
-
- + style="cursor:pointer; padding-left:2px; padding-right:2px;" border="0" src="?images=cdiag.gif"> +
+
+
[<!--COMMON::folder-->][<!--COMMON::folder-->]  []
[<!--COMMON::folder-->][<!--COMMON::folder-->]   @@ -58,7 +58,7 @@
[<!--COMMON::file-->][<!--COMMON::file-->]   diff --git a/www/admin/templates/admin_news.tpl b/www/admin/templates/admin_news.tpl index ada192e..c5bd56f 100644 --- a/www/admin/templates/admin_news.tpl +++ b/www/admin/templates/admin_news.tpl @@ -166,11 +166,11 @@
- <!--COMMON::up-->  - <!--COMMON::down--> + <!--COMMON::up-->  + <!--COMMON::down-->     - <!--COMMON::edit-->  - <!--COMMON::delete--> + <!--COMMON::edit-->  + <!--COMMON::delete-->
- {alt} + {alt} '.$FD->text("page", "edit_cat_image").': ('.$FD->text("admin", "optional").')

'; - if ( image_exists ( 'images/cat/', 'articles_'.$cat_arr['cat_id'] ) ) { + if ( image_exists ( '/cat', 'articles_'.$cat_arr['cat_id'] ) ) { echo ' - '.$cat_arr['cat_name'].' + '.$cat_arr['cat_name'].' diff --git a/www/admin/admin_cimg.php b/www/admin/admin_cimg.php index a9bd817..aa9953a 100644 --- a/www/admin/admin_cimg.php +++ b/www/admin/admin_cimg.php @@ -46,12 +46,12 @@ settype ($_POST['width'], 'integer'); settype ($_POST['height'], 'integer'); - if (!image_exists('media/content/',$_POST['newname']) AND !image_exists('media/content/',$_POST['newname'].'_s')) + if (!image_exists('/content',$_POST['newname']) AND !image_exists('/content',$_POST['newname'].'_s')) { - $upload = upload_img($_FILES['cimg'], 'media/content/', $_POST['newname'], 1024*1024*5, 9999, 9999); + $upload = upload_img($_FILES['cimg'], '/content', $_POST['newname'], 1024*1024*5, 9999, 9999); $message = upload_img_notice ( $upload ); if ($make_thumb) { - $thumb = create_thumb_from ( image_url ( 'media/content/', $_POST['newname'], FALSE, TRUE ) , $_POST['width'], $_POST['height'] ); + $thumb = create_thumb_from ( image_url ( '/content', $_POST['newname'], FALSE, TRUE ) , $_POST['width'], $_POST['height'] ); $message .= '
' . create_thumb_notice ( $thumb ); } $stmt = $FD->db()->conn()->prepare(' diff --git a/www/admin/admin_cimgdel.php b/www/admin/admin_cimgdel.php index edf66b6..3f47dff 100644 --- a/www/admin/admin_cimgdel.php +++ b/www/admin/admin_cimgdel.php @@ -189,7 +189,7 @@ function calcsite(){ } if(isset($_POST['thumb']) && !empty($_POST['width']) && !empty($_POST['height'])){ - $thumb = create_thumb_from(image_url('media/content/', $row['name'], FALSE, TRUE), $_POST['width'], $_POST['height']); + $thumb = create_thumb_from(image_url('/content', $row['name'], FALSE, TRUE), $_POST['width'], $_POST['height']); $text[] = create_thumb_notice($thumb); $FD->db()->conn()->exec('UPDATE `'.$FD->env('DB_PREFIX').'cimg` SET `hasthumb`=1 WHERE `id`='.$file); } elseif (isset($_POST['thumb'])) { diff --git a/www/admin/admin_dladd.php b/www/admin/admin_dladd.php index 2f4707f..82bfdb0 100644 --- a/www/admin/admin_dladd.php +++ b/www/admin/admin_dladd.php @@ -48,9 +48,9 @@ if ($_FILES['dlimg']['name'] != '') { - $upload = upload_img($_FILES['dlimg'], 'images/downloads/', $id, 2*1024*1024, $admin_dl_config_arr['screen_x'], $admin_dl_config_arr['screen_y']); + $upload = upload_img($_FILES['dlimg'], '/downloads', $id, 2*1024*1024, $admin_dl_config_arr['screen_x'], $admin_dl_config_arr['screen_y']); systext(upload_img_notice($upload)); - $thumb = create_thumb_from(image_url('images/downloads/',$id,FALSE, TRUE), $admin_dl_config_arr['thumb_x'], $admin_dl_config_arr['thumb_y']); + $thumb = create_thumb_from(image_url('/downloads',$id,FALSE, TRUE), $admin_dl_config_arr['thumb_x'], $admin_dl_config_arr['thumb_y']); systext(create_thumb_notice($thumb)); } diff --git a/www/admin/admin_dledit.php b/www/admin/admin_dledit.php index 3b6c715..cf2feef 100644 --- a/www/admin/admin_dledit.php +++ b/www/admin/admin_dledit.php @@ -13,8 +13,8 @@ { $FD->db()->conn()->exec('DELETE FROM '.$FD->env('DB_PREFIX')."dl WHERE dl_id = '$_POST[editdlid]'"); $FD->db()->conn()->exec('DELETE FROM '.$FD->env('DB_PREFIX')."dl_files WHERE dl_id = '$_POST[editdlid]'"); - image_delete('images/dl/', "$_POST[editdlid]_s"); - image_delete('images/dl/', $_POST['editdlid']); + image_delete('/downloads', "$_POST[editdlid]_s"); + image_delete('/downloads', $_POST['editdlid']); systext('Download wurde gelöscht'); // Delete from Search Index @@ -38,9 +38,9 @@ if ($_FILES['dlimg']['name'] != '') { - $upload = upload_img($_FILES['dlimg'], 'images/downloads/', $_POST['editdlid'], 2*1024*1024, $admin_dl_config_arr['screen_x'], $admin_dl_config_arr['screen_y']); + $upload = upload_img($_FILES['dlimg'], '/downloads', $_POST['editdlid'], 2*1024*1024, $admin_dl_config_arr['screen_x'], $admin_dl_config_arr['screen_y']); systext(upload_img_notice($upload)); - $thumb = create_thumb_from(image_url('images/downloads/',$_POST['editdlid'],FALSE, TRUE), $admin_dl_config_arr['thumb_x'], $admin_dl_config_arr['thumb_y']); + $thumb = create_thumb_from(image_url('/downloads',$_POST['editdlid'],FALSE, TRUE), $admin_dl_config_arr['thumb_x'], $admin_dl_config_arr['thumb_y']); systext(create_thumb_notice($thumb)); } diff --git a/www/admin/admin_editor_smilies.php b/www/admin/admin_editor_smilies.php index 085a74f..e80fc6f 100644 --- a/www/admin/admin_editor_smilies.php +++ b/www/admin/admin_editor_smilies.php @@ -18,7 +18,7 @@ $stmt->execute(array($_POST['replace_string'])); $id = $FD->db()->conn()->lastInsertId(); - $upload = upload_img($_FILES['newsmilie'], 'images/smilies/', $id, 1024*1024, 999, 999); + $upload = upload_img($_FILES['newsmilie'], '/smilies', $id, 1024*1024, 999, 999); systext(upload_img_notice($upload)); } @@ -37,7 +37,7 @@ $FD->db()->conn()->exec('DELETE FROM '.$FD->env('DB_PREFIX')."smilies WHERE `order`=$value"); - image_delete('images/smilies/', $id); + image_delete('/smilies', $id); } $_POST['delsmilie'] = array_reverse($_POST['delsmilie']); foreach($_POST['delsmilie'] as $value) @@ -199,7 +199,7 @@ > from table fragments + if ( !support.tbody ) { + + // String was a
@@ -268,7 +268,7 @@
'; - if ( image_exists ( 'images/cat/', 'articles_'.$cat_arr['cat_id'] ) ) { + if ( image_exists ( '/cat', 'articles_'.$cat_arr['cat_id'] ) ) { echo ''.$FD->text("admin", "replace_img").'
'; } echo' @@ -454,8 +454,8 @@ >
'; - if ( image_exists ( 'images/cat/', 'articles_'.$cat_arr['cat_id'] ) ) { - echo ''.$cat_arr['cat_name'].''; + if ( image_exists ( '/cat', 'articles_'.$cat_arr['cat_id'] ) ) { + echo ''.$cat_arr['cat_name'].''; } echo ' - + '.$smilie_arr['replace_string'].' diff --git a/www/admin/admin_findpicture.php b/www/admin/admin_findpicture.php index 6d980b6..a666d1c 100644 --- a/www/admin/admin_findpicture.php +++ b/www/admin/admin_findpicture.php @@ -65,7 +65,7 @@ onmouseover="this.style.backgroundColor=\'#EEEEEE\';" onmouseout="this.style.backgroundColor=\'transparent\';" >'; - $new_img_path = image_url('images/screenshots/', $screen_arr['screen_id'].'_s', true); + $new_img_path = image_url('/screenshots', $screen_arr['screen_id'].'_s', true); $lines .= ' '."Symbol".': '.$FD->text('admin', 'optional').'

'; - if ( image_exists ( 'media/group-images/', 'staff_'.$group_arr['user_group_id'] ) ) { + if ( image_exists ( '/group-images', 'staff_'.$group_arr['user_group_id'] ) ) { echo ' - '.$group_arr['user_group_name'].' + '.$group_arr['user_group_name'].' @@ -611,8 +611,8 @@ diff --git a/www/admin/admin_group_rights.php b/www/admin/admin_group_rights.php index 2fbe85b..5027b31 100644 --- a/www/admin/admin_group_rights.php +++ b/www/admin/admin_group_rights.php @@ -319,8 +319,8 @@ function get_group_rights_array ( $GROUP_ID ) diff --git a/www/admin/admin_news_cat.php b/www/admin/admin_news_cat.php index 8ff0d22..a07a206 100644 --- a/www/admin/admin_news_cat.php +++ b/www/admin/admin_news_cat.php @@ -39,7 +39,7 @@ // Image-Operations if ( $_FILES['cat_pic']['name'] != '' ) { - $upload = upload_img ( $_FILES['cat_pic'], 'images/cat/', 'news_'.$id, $FD->cfg('news', 'cat_pic_size')*1024, $FD->cfg('news', 'cat_pic_x'), $FD->cfg('news', 'cat_pic_y') ); + $upload = upload_img ( $_FILES['cat_pic'], '/cat', 'news_'.$id, $FD->cfg('news', 'cat_pic_size')*1024, $FD->cfg('news', 'cat_pic_x'), $FD->cfg('news', 'cat_pic_y') ); $message .= '
' . upload_img_notice ( $upload ); } @@ -89,14 +89,14 @@ // Image-Operations if ( isset($_POST['cat_pic_delete']) && $_POST['cat_pic_delete'] == 1 ) { - if ( image_delete ( 'images/cat/', 'news_'.$_POST['cat_id'] ) ) { + if ( image_delete ( '/cat', 'news_'.$_POST['cat_id'] ) ) { $message .= '
' . $FD->text('admin', 'image_deleted'); } else { $message .= '
' . $FD->text('admin', 'image_not_deleted'); } } elseif ( $_FILES['cat_pic']['name'] != '' ) { - image_delete ( 'images/cat/', 'news_'.$_POST['cat_id'] ); - $upload = upload_img ( $_FILES['cat_pic'], 'images/cat/', 'news_'.$_POST['cat_id'], $FD->cfg('news', 'cat_pic_size')*1024, $FD->cfg('news', 'cat_pic_x'), $FD->cfg('news', 'cat_pic_y') ); + image_delete ( '/cat', 'news_'.$_POST['cat_id'] ); + $upload = upload_img ( $_FILES['cat_pic'], '/cat', 'news_'.$_POST['cat_id'], $FD->cfg('news', 'cat_pic_size')*1024, $FD->cfg('news', 'cat_pic_x'), $FD->cfg('news', 'cat_pic_y') ); $message .= '
' . upload_img_notice ( $upload ); } @@ -139,7 +139,7 @@ $message = $FD->text('page', 'cat_deleted'); // Delete Category Image - if ( image_delete ( 'images/cat/', 'news_'.$_POST['cat_id'] ) ) { + if ( image_delete ( '/cat', 'news_'.$_POST['cat_id'] ) ) { $message .= '
' . $FD->text('admin', 'image_deleted'); } @@ -247,9 +247,9 @@ \s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "
@@ -287,7 +287,7 @@
'; - if ( image_exists ( 'media/group-images/', 'staff_'.$group_arr['user_group_id'] ) ) { + if ( image_exists ( '/group-images', 'staff_'.$group_arr['user_group_id'] ) ) { echo ''.$FD->text("admin", "replace_img").'
'; } echo' @@ -518,8 +518,8 @@
'.$group_arr['user_group_name'].' '; - if ( image_exists ( 'media/group-images/', 'staff_'.$group_arr['user_group_id'] ) ) { - echo '
'.$group_arr['user_group_name'].''; + if ( image_exists ( '/group-images', 'staff_'.$group_arr['user_group_id'] ) ) { + echo '
'.$group_arr['user_group_name'].''; } echo '
'.$group_arr['user_group_name'].' '; - if ( image_exists ( 'media/group-images/', 'staff_'.$group_arr['user_group_id'] ) ) { - echo '
'.$group_arr['user_group_name'].''; + if ( image_exists ( '/group-images', 'staff_'.$group_arr['user_group_id'] ) ) { + echo '
'.$group_arr['user_group_name'].''; } echo '
'.$group_arr['user_group_name'].' '; - if ( image_exists ( 'images/groups/', 'staff_'.$group_arr['user_group_id'] ) ) { - echo '
'.$group_arr['user_group_name'].''; + if ( image_exists ( '/group-images', 'staff_'.$group_arr['user_group_id'] ) ) { + echo '
'.$group_arr['user_group_name'].''; } echo '
'.$FD->text("page", "edit_cat_image").': ('.$FD->text("admin", "optional").')

'; - if ( image_exists ( 'images/cat/', 'news_'.$cat_arr['cat_id'] ) ) { + if ( image_exists ( '/cat', 'news_'.$cat_arr['cat_id'] ) ) { echo ' - '.$cat_arr['cat_name'].' + '.$cat_arr['cat_name'].' diff --git a/www/admin/admin_news_prev.php b/www/admin/admin_news_prev.php index d0f2f86..b797c92 100644 --- a/www/admin/admin_news_prev.php +++ b/www/admin/admin_news_prev.php @@ -123,7 +123,7 @@ function loaddata() { $cat_arr['cat_name'] = '?'; $cat_arr['cat_id'] = -1; } - $cat_arr['cat_pic'] = image_url('images/cat/', 'news_'.$cat_arr['cat_id']); + $cat_arr['cat_pic'] = image_url('/cat', 'news_'.$cat_arr['cat_id']); // Get Related Links diff --git a/www/admin/admin_partneradd.php b/www/admin/admin_partneradd.php index 07ac852..60572fd 100644 --- a/www/admin/admin_partneradd.php +++ b/www/admin/admin_partneradd.php @@ -46,12 +46,12 @@ $stmt->execute(array($_POST['name'], $_POST['link'], $_POST['description'])); $id = $FD->db()->conn()->lastInsertId(); - $upload1 = upload_img($_FILES['bild_small'], 'images/partner/', $id.'_small', $config_arr['file_size']*1024, $config_arr['small_x'], $config_arr['small_y'], 100, $config_arr['small_allow_bool']); + $upload1 = upload_img($_FILES['bild_small'], '/partner', $id.'_small', $config_arr['file_size']*1024, $config_arr['small_x'], $config_arr['small_y'], 100, $config_arr['small_allow_bool']); switch ($upload1) { case 0: - $upload2 = upload_img($_FILES['bild_big'], 'images/partner/', $id.'_big', $config_arr['file_size']*1024, $config_arr['big_x'], $config_arr['big_y'], 100, $config_arr['big_allow_bool']); + $upload2 = upload_img($_FILES['bild_big'], '/partner', $id.'_big', $config_arr['file_size']*1024, $config_arr['big_x'], $config_arr['big_y'], 100, $config_arr['big_allow_bool']); switch ($upload2) { @@ -72,8 +72,8 @@ systext ($FD->text('page', 'big_pic'). ': ' . upload_img_notice($upload2)); systext ($FD->text('page', 'note_notadded')); $FD->db()->conn()->exec('DELETE FROM '.$FD->env('DB_PREFIX')."partner WHERE partner_id = '$id'"); - image_delete('images/partner/', $id.'_small'); - image_delete('images/partner/', $id.'_big'); + image_delete('/partner', $id.'_small'); + image_delete('/partner', $id.'_big'); } break; @@ -81,8 +81,8 @@ systext ($FD->text('page', 'small_pic') . ': ' . upload_img_notice($upload1)); systext ($FD->text('page', 'note_notadded')); $FD->db()->conn()->exec('DELETE FROM '.$FD->config(pref)."partner WHERE partner_id = '$id'"); - image_delete('images/partner/', $id.'_small'); - image_delete('images/partner/', $id.'_big'); + image_delete('/partner', $id.'_small'); + image_delete('/partner', $id.'_big'); } } diff --git a/www/admin/admin_partneredit.php b/www/admin/admin_partneredit.php index 78ef1a9..f1122f5 100644 --- a/www/admin/admin_partneredit.php +++ b/www/admin/admin_partneredit.php @@ -48,13 +48,13 @@ if ($_FILES['bild_small']['name'] != '') { - $upload = upload_img($_FILES['bild_small'], 'images/partner/', $_POST['partner_id'].'_small', $config_arr['file_size']*1024, $config_arr['small_x'], $config_arr['small_y'], 100, $config_arr['small_allow_bool']); + $upload = upload_img($_FILES['bild_small'], '/partner', $_POST['partner_id'].'_small', $config_arr['file_size']*1024, $config_arr['small_x'], $config_arr['small_y'], 100, $config_arr['small_allow_bool']); $message .= $FD->text('page', 'small_pic') . ': ' . upload_img_notice($upload) . '
'; } if ($_FILES['bild_big']['name'] != '') { - $upload = upload_img($_FILES['bild_big'], 'images/partner/', $_POST['partner_id'].'_big', $config_arr['file_size']*1024, $config_arr['big_x'], $config_arr['big_y'], 100, $config_arr['big_allow_bool']); + $upload = upload_img($_FILES['bild_big'], '/partner', $_POST['partner_id'].'_big', $config_arr['file_size']*1024, $config_arr['big_x'], $config_arr['big_y'], 100, $config_arr['big_allow_bool']); $message .= $FD->text('page', 'big_pic') . ': ' . upload_img_notice($upload) . '
'; } @@ -83,8 +83,8 @@ if ($_POST['delete_partner']) // Delete affiliated site { $FD->db()->conn()->exec('DELETE FROM '.$FD->env('DB_PREFIX')."partner WHERE partner_id = '$_POST[partner_id]'"); - image_delete('images/partner/', $_POST['partner_id'].'_small'); - image_delete('images/partner/', $_POST['partner_id'].'_big'); + image_delete('/partner', $_POST['partner_id'].'_small'); + image_delete('/partner', $_POST['partner_id'].'_big'); systext($FD->text('page', 'note_deleted')); } else @@ -143,7 +143,7 @@ '.$FD->text("page", "small_pic_desc").' @@ -311,7 +311,7 @@ echo' @@ -497,8 +497,8 @@ diff --git a/www/admin/admin_randompic_time.php b/www/admin/admin_randompic_time.php index af8692d..1e23f0a 100644 --- a/www/admin/admin_randompic_time.php +++ b/www/admin/admin_randompic_time.php @@ -136,7 +136,7 @@ @@ -236,7 +236,7 @@ @@ -218,7 +218,7 @@ onmouseout="javascript:this.style.backgroundColor=\'transparent\'" onClick=\'document.getElementById("'.$screen_arr['screen_id'].'").checked="true";\'> @@ -188,7 +188,7 @@ echo' @@ -484,7 +484,7 @@ function user_name_free_or_itself ( $USERNAME, $USER_ID ) {
['.$FD->text("admin", "max").' '.$config_arr['avatar_x'].' '.$FD->text("admin", "resolution_x").' '.$config_arr['avatar_y'].' '.$FD->text("admin", "pixel").'] ['.$FD->text("admin", "max").' '.$config_arr['avatar_size'].' '.$FD->text("admin", "kib").'] '; - if ( image_exists ( 'images/avatare/', $_POST['user_id'] ) ) { + if ( image_exists ( '/user-images', $_POST['user_id'] ) ) { echo '
Nur auswählen, wenn das bisherige Bild überschrieben werden soll!

diff --git a/www/admin/admin_wallpaperadd.php b/www/admin/admin_wallpaperadd.php index 0453cfe..bf91364 100644 --- a/www/admin/admin_wallpaperadd.php +++ b/www/admin/admin_wallpaperadd.php @@ -43,7 +43,7 @@ if (isset($_FILES[$filesname]) AND $_POST['size'][$j] != '') { $j = $i - 1; - $upload = upload_img($_FILES[$filesname], 'images/wallpaper/', $_POST['wallpaper_name'].'_'.$_POST['size'][$j], $config_arr['wp_size']*1024, $config_arr['wp_x'], $config_arr['wp_y']); + $upload = upload_img($_FILES[$filesname], '/wallpaper', $_POST['wallpaper_name'].'_'.$_POST['size'][$j], $config_arr['wp_size']*1024, $config_arr['wp_x'], $config_arr['wp_y']); $message .= "WP Größe $i: ".upload_img_notice($upload).'
'; switch ($upload) { @@ -56,11 +56,11 @@ } } - if (image_exists('images/wallpaper/', $_POST['wallpaper_name'].'_'.$_POST['size'][0])) + if (image_exists('/wallpaper', $_POST['wallpaper_name'].'_'.$_POST['size'][0])) { - create_thumb_from(image_url('images/wallpaper/', $_POST['wallpaper_name'].'_'.$_POST['size'][0], FALSE, TRUE), $config_arr['wp_thumb_x'], $config_arr['wp_thumb_y']); + create_thumb_from(image_url('/wallpaper', $_POST['wallpaper_name'].'_'.$_POST['size'][0], FALSE, TRUE), $config_arr['wp_thumb_x'], $config_arr['wp_thumb_y']); $message .= create_thumb_notice($upload).'
'; - image_rename('images/wallpaper/', $_POST['wallpaper_name'].'_'.$_POST['size'][0].'_s', $_POST['wallpaper_name'].'_s'); + image_rename('/wallpaper', $_POST['wallpaper_name'].'_'.$_POST['size'][0].'_s', $_POST['wallpaper_name'].'_s'); } $message .= '
Weiteres Wallpaper hinzufügen:'; diff --git a/www/admin/admin_wallpaperedit.php b/www/admin/admin_wallpaperedit.php index 4999c7a..a329ce8 100644 --- a/www/admin/admin_wallpaperedit.php +++ b/www/admin/admin_wallpaperedit.php @@ -39,14 +39,14 @@ $index = $FD->db()->conn()->query('SELECT size FROM '.$FD->env('DB_PREFIX')."wallpaper_sizes WHERE size_id = '".$_POST['delwp'][$i]."'"); $size_name = $index->fetchColumn(); $FD->db()->conn()->exec('DELETE FROM '.$FD->env('DB_PREFIX')."wallpaper_sizes WHERE size_id = '".$_POST['delwp'][$i]."'"); - image_delete('images/wallpaper/', "$_POST[oldname]_$size_name"); + image_delete('/wallpaper', "$_POST[oldname]_$size_name"); } else { $filesname = "sizeimg_$i"; if (isset($_FILES[$filesname]) && $_POST['wpnew'][$i]==1 && $_POST['size'][$i]!='' && !emptystr($_FILES["sizeimg_".$i]['tmp_name'])) { - $upload = upload_img($_FILES[$filesname], 'images/wallpaper/', $_POST['oldname'].'_'.$_POST['size'][$i].'a', $config_arr['wp_size']*1024, $config_arr['wp_x'], $config_arr['wp_y']); + $upload = upload_img($_FILES[$filesname], '/wallpaper', $_POST['oldname'].'_'.$_POST['size'][$i].'a', $config_arr['wp_size']*1024, $config_arr['wp_x'], $config_arr['wp_y']); systext(upload_img_notice($upload)); switch ($upload) { @@ -63,7 +63,7 @@ $index = $FD->db()->conn()->query('SELECT size FROM '.$FD->env('DB_PREFIX')."wallpaper_sizes WHERE size_id = '".$_POST['size_id'][$i]."'" ); $size_name = $index->fetchColumn(); - image_rename('images/wallpaper/', $_POST['oldname'].'_'.$size_name, $_POST['oldname'].'_'.$_POST['size'][$i].'a'); + image_rename('/wallpaper', $_POST['oldname'].'_'.$size_name, $_POST['oldname'].'_'.$_POST['size'][$i].'a'); $update = $FD->db()->conn()->prepare('UPDATE '.$FD->env('DB_PREFIX')."wallpaper_sizes SET size = ? @@ -72,7 +72,7 @@ if (isset($_FILES[$filesname]) && !emptystr($_FILES["sizeimg_".$i]['tmp_name'])) { - $upload = upload_img($_FILES[$filesname], 'images/wallpaper/', $_POST['oldname'].'_'.$_POST['size'][$i].'a', $config_arr['wp_size']*1024, $config_arr['wp_x'], $config_arr['wp_y']); + $upload = upload_img($_FILES[$filesname], '/wallpaper', $_POST['oldname'].'_'.$_POST['size'][$i].'a', $config_arr['wp_size']*1024, $config_arr['wp_x'], $config_arr['wp_y']); systext(upload_img_notice($upload)); } } @@ -83,9 +83,9 @@ $index2 = $FD->db()->conn()->query('SELECT * FROM '.$FD->env('DB_PREFIX')."wallpaper_sizes WHERE wallpaper_id = '$_POST[wallpaper_id]'"); while ($sizes_arr = $index2->fetch(PDO::FETCH_ASSOC)) { - image_rename('images/wallpaper/', $_POST['oldname'].'_'.$sizes_arr['size'].'a', $_POST['wallpaper_name'].'_'.$sizes_arr['size']); + image_rename('/wallpaper', $_POST['oldname'].'_'.$sizes_arr['size'].'a', $_POST['wallpaper_name'].'_'.$sizes_arr['size']); } - image_rename('images/wallpaper/', $_POST['oldname'].'_s', $_POST['wallpaper_name'].'_s'); + image_rename('/wallpaper', $_POST['oldname'].'_s', $_POST['wallpaper_name'].'_s'); systext($FD->text('admin', 'changes_saved'), $FD->text('admin', 'info'), 'green', $FD->text('admin', 'icon_save_ok')); @@ -110,12 +110,12 @@ $index = $FD->db()->conn()->query('SELECT * FROM '.$FD->env('DB_PREFIX')."wallpaper WHERE wallpaper_id = '$_POST[wallpaper_id]'"); $wp_del_array = $index->fetch(PDO::FETCH_ASSOC); $FD->db()->conn()->exec('DELETE FROM '.$FD->env('DB_PREFIX')."wallpaper WHERE wallpaper_id = '$_POST[wallpaper_id]'"); - image_delete('images/wallpaper/', $wp_del_array['wallpaper_name'].'_s'); + image_delete('/wallpaper', $wp_del_array['wallpaper_name'].'_s'); $index = $FD->db()->conn()->query('SELECT * FROM '.$FD->env('DB_PREFIX')."wallpaper_sizes WHERE wallpaper_id = '$_POST[wallpaper_id]'"); while ($wp_sizes_del_array = $index->fetch(PDO::FETCH_ASSOC)) { - image_delete('images/wallpaper/', $wp_del_array['wallpaper_name'].'_'.$wp_sizes_del_array['size']); + image_delete('/wallpaper', $wp_del_array['wallpaper_name'].'_'.$wp_sizes_del_array['size']); } $FD->db()->conn()->exec('DELETE FROM '.$FD->env('DB_PREFIX')."wallpaper_sizes WHERE wallpaper_id = '$_POST[wallpaper_id]'"); @@ -148,11 +148,11 @@ $index = $FD->db()->conn()->query('SELECT size FROM '.$FD->env('DB_PREFIX')."wallpaper_sizes WHERE wallpaper_id = '$_POST[wallpaper_id]' LIMIT 1"); $wp_size = $index->fetchColumn(); - image_delete('images/wallpaper/', $wp_name.'_s'); + image_delete('/wallpaper', $wp_name.'_s'); - $newthumb = create_thumb_from(image_url('images/wallpaper/', $wp_name.'_'.$wp_size, FALSE, TRUE), $config_arr['wp_thumb_x'], $config_arr['wp_thumb_y']); + $newthumb = create_thumb_from(image_url('/wallpaper', $wp_name.'_'.$wp_size, FALSE, TRUE), $config_arr['wp_thumb_x'], $config_arr['wp_thumb_y']); - image_rename('images/wallpaper/', $wp_name.'_'.$wp_size.'_s', $wp_name.'_s'); + image_rename('/wallpaper', $wp_name.'_'.$wp_size.'_s', $wp_name.'_s'); systext(create_thumb_notice($newthumb).'
(Cache leeren nicht vergessen!)'); } @@ -221,7 +221,7 @@ Thumbnail des Wallpapers. @@ -405,7 +405,7 @@ '; diff --git a/www/includes/fscode.php b/www/includes/fscode.php index b39ae04..58f9a4a 100644 --- a/www/includes/fscode.php +++ b/www/includes/fscode.php @@ -476,7 +476,7 @@ function do_fscode_smilies ($text) { $smilies = $FD->db()->conn()->query('SELECT * FROM '.$FD->env('DB_PREFIX').'smilies'); $smilies = $smilies->fetchAll(PDO::FETCH_ASSOC); foreach ($smilies as $smiley) { - $url = image_url('images/smilies/', $smiley['id']); + $url = image_url('/smilies', $smiley['id']); $text = str_replace ($smiley['replace_string'], ''.$smiley['replace_string'].'', $text); } diff --git a/www/includes/functions.php b/www/includes/functions.php index 7cdf04d..19f5311 100644 --- a/www/includes/functions.php +++ b/www/includes/functions.php @@ -189,7 +189,7 @@ function get_user_rank ( $GROUP_ID, $IS_ADMIN = 0 ) $group_arr = $index->fetch(PDO::FETCH_ASSOC); settype ( $group_arr['user_group_id'], 'integer' ); - $group_arr['user_group_image'] = ( image_exists ( 'media/group-images/staff_', $group_arr['user_group_id'] ) ? ''.$FD->text('frontend', 'group_image_of').' '.$group_arr['user_group_name'].'' : '' ); + $group_arr['user_group_image'] = ( image_exists ( '/group-images', 'staff_'.$group_arr['user_group_id'] ) ? ''.$FD->text('frontend', 'group_image_of').' '.$group_arr['user_group_name'].'' : '' ); unset ( $title_style ); $title_style = ( $group_arr['user_group_color'] != -1 ? 'color:#'.$group_arr['user_group_color'].';' : '' ); @@ -215,7 +215,7 @@ function get_user_rank ( $GROUP_ID, $IS_ADMIN = 0 ) $rank_template->load ( 'USERRANK' ); $rank_template->tag ( 'group_name', $group_arr['user_group_name'] ); $rank_template->tag ( 'group_image', $group_arr['user_group_image'] ); - $rank_template->tag ( 'group_image_url', image_url ( 'media/group-images/staff_', $group_arr['user_group_id'] ) ); + $rank_template->tag ( 'group_image_url', image_url ( '/group-images', 'staff_'.$group_arr['user_group_id'] ) ); $rank_template->tag ( 'group_title', $group_arr['user_group_title_colored'] ); $rank_template->tag ( 'group_title_text_only', $group_arr['user_group_title'] ); $rank_template = $rank_template->display (); @@ -651,7 +651,7 @@ function create_textarea($name, $text='', $width='', $height='', $class='', $all LIMIT 0, '.$config_arr['num_smilies'].' ' ); while ( $smilie_arr = $index->fetch(PDO::FETCH_ASSOC) ) { - $smilie_arr['url'] = image_url ( 'images/smilies/', $smilie_arr['id'] ); + $smilie_arr['url'] = image_url ( '/smilies', $smilie_arr['id'] ); $smilie_template = ''; $zaehler += 1; @@ -959,7 +959,7 @@ function display_news ($news_arr, $html_code, $fs_code, $para_handling) $index2 = $FD->db()->conn()->query('SELECT cat_name FROM '.$FD->env('DB_PREFIX')."news_cat WHERE cat_id = '".$news_arr['cat_id']."'"); $row = $index2->fetch(PDO::FETCH_ASSOC); $news_arr['cat_name'] = $row['cat_name']; - $news_arr['cat_pic'] = image_url('images/cat/', 'news_'.$news_arr['cat_id']); + $news_arr['cat_pic'] = image_url('/cat', 'news_'.$news_arr['cat_id']); // Text formatieren switch ($html_code) diff --git a/www/includes/imagefunctions.php b/www/includes/imagefunctions.php index b596d0a..d74f45f 100644 --- a/www/includes/imagefunctions.php +++ b/www/includes/imagefunctions.php @@ -3,9 +3,9 @@ //// Get Image HTML //// //////////////////////// -function get_image_html ( $PATH, $TITLE, $SHOW_TITLE = TRUE, $OTHER = FALSE ) +function get_image_html ( $URL, $TITLE, $SHOW_TITLE = TRUE, $OTHER = FALSE ) { - $img_html = ''.$TITLE.'' : '>'; @@ -16,10 +16,10 @@ function get_image_html ( $PATH, $TITLE, $SHOW_TITLE = TRUE, $OTHER = FALSE ) //// Get Image Output //// ////////////////////////// -function get_image_output ( $PATH, $NAME, $TITLE, $NO_TEXT = '', $SHOW_TITLE = TRUE, $OTHER = FALSE ) +function get_image_output ( $SUBPATH, $NAME, $TITLE, $NO_TEXT = '', $SHOW_TITLE = TRUE, $OTHER = FALSE ) { - if ( image_exists ( $PATH, $NAME ) ) { - return get_image_html ( image_url ( $PATH, $NAME, FALSE ), $TITLE, $SHOW_TITLE, $OTHER ); + if ( image_exists ( $SUBPATH, $NAME ) ) { + return get_image_html ( image_url ( $SUBPATH, $NAME, FALSE ), $TITLE, $SHOW_TITLE, $OTHER ); } else { return $NO_TEXT; } @@ -30,11 +30,11 @@ function get_image_output ( $PATH, $NAME, $TITLE, $NO_TEXT = '', $SHOW_TITLE = T //// Image exists //// ////////////////////// -function image_exists ( $PATH, $NAME ) +function image_exists ( $SUBPATH, $NAME ) { global $FD; - $CHECK_PATH = $FD->env('path') . $PATH; + $CHECK_PATH = FS2MEDIA . $SUBPATH . '/'; if ( file_exists ( $CHECK_PATH . $NAME . '.jpg' ) || @@ -52,36 +52,38 @@ function image_exists ( $PATH, $NAME ) ////////////////////////// //// Create Image URL //// ////////////////////////// - -function image_url ( $PATH, $NAME, $ERROR = TRUE, $GETPATH = FALSE ) +// Returns the full URL or Filesystem path or an image +function image_url ( $SUBPATH, $NAME, $ERROR = TRUE, $GETPATH = FALSE ) { global $FD; - $CHECK_PATH = $FD->cfg('env', 'path') . $PATH; + $CHECK_PATH = FS2MEDIA . $SUBPATH . '/'; + $PATH = 'media' . $SUBPATH. '/'; if ( file_exists ( $CHECK_PATH . $NAME . '.jpg' ) ) { - $url = $PATH . $NAME . '.jpg'; + $file = $NAME . '.jpg'; } elseif ( file_exists ( $CHECK_PATH . $NAME . '.jpeg' ) ) { - $url = $PATH . $NAME . '.jpeg'; + $file = $NAME . '.jpeg'; } elseif ( file_exists ( $CHECK_PATH . $NAME . '.gif' ) ) { - $url = $PATH . $NAME . '.gif'; + $file = $NAME . '.gif'; } elseif ( file_exists ( $CHECK_PATH . $NAME . '.png' ) ) { - $url = $PATH . $NAME . '.png'; + $file = $NAME . '.png'; } elseif ( $ERROR == TRUE ) { - $url = 'styles/'.$FD->cfg('style').'/icons/image_error.gif'; + $file = '/'.$FD->cfg('style').'/icons/image_error.gif'; + return $GETPATH ? FS2STYLES.$file : $FD->cfg('virtualhost').'styles'.$file; } else { - return $CHECK_PATH . $NAME; + $file = $NAME; } if ( $GETPATH == TRUE ) { - $url = $FD->cfg('env', 'path') . $url; + $url = $CHECK_PATH . $file; } else { - $url = $FD->cfg('virtualhost') . $url; + $url = $FD->cfg('virtualhost') . $PATH . $file; } return $url; @@ -91,23 +93,23 @@ function image_url ( $PATH, $NAME, $ERROR = TRUE, $GETPATH = FALSE ) //// Delete Image //// //////////////////////////////// -function image_delete ( $PATH, $NAME ) +function image_delete ( $SUBPATH, $NAME ) { global $FD; - $CHECK_PATH = $FD->env('path') . $PATH; + $CHECK_PATH = FS2MEDIA . $SUBPATH . '/' . $NAME; - if ( file_exists ( $CHECK_PATH . $NAME . '.jpg' ) ) { - $file = $CHECK_PATH . $NAME . '.jpg'; + if ( file_exists ( $CHECK_PATH.'.jpg' ) ) { + $file = $CHECK_PATH.'.jpg'; } - elseif ( file_exists ( $CHECK_PATH . $NAME . '.jpeg' ) ) { - $file = $CHECK_PATH . $NAME . '.jpeg'; + elseif ( file_exists ( $CHECK_PATH.'.jpeg' ) ) { + $file = $CHECK_PATH.'.jpeg'; } - elseif ( file_exists ( $CHECK_PATH . $NAME . '.gif' ) ) { - $file = $CHECK_PATH . $NAME . '.gif'; + elseif ( file_exists ( $CHECK_PATH.'.gif' ) ) { + $file = $CHECK_PATH.'.gif'; } - elseif ( file_exists ( $CHECK_PATH . $NAME . '.png' ) ) { - $file = $CHECK_PATH . $NAME . '.png'; + elseif ( file_exists ( $CHECK_PATH.'.png' ) ) { + $file = $CHECK_PATH.'.png'; } else { return false; } @@ -120,14 +122,14 @@ function image_delete ( $PATH, $NAME ) //// Rename Image //// //////////////////////////////// -function image_rename ( $PATH, $NAME, $NEWNAME ) +function image_rename ( $SUBPATH, $NAME, $NEWNAME ) { global $FD; - if ( image_exists ( $PATH, $NAME ) && !image_exists ( $PATH, $NEWNAME ) ) { - $extension = pathinfo ( image_url ( $PATH, $NAME, FALSE, TRUE ) ); + if ( image_exists ( $SUBPATH, $NAME ) && !image_exists ( $SUBPATH, $NEWNAME ) ) { + $extension = pathinfo ( image_url ( $SUBPATH, $NAME, FALSE, TRUE ) ); $extension = $extension['extension']; - rename ( image_url ( $PATH, $NAME, FALSE, TRUE ), $FD->env('path') . $PATH . $NEWNAME . '.' . $extension ); + rename ( image_url ( $SUBPATH, $NAME, FALSE, TRUE ), FS2MEDIA . $SUBPATH . '/' . $NEWNAME . '.' . $extension ); return true; } else { return false; @@ -180,7 +182,7 @@ function upload_img_notice ( $UPLOAD, $ADMIN = TRUE ) ///// Pic Upload + Thumbnail /// //////////////////////////////// -function upload_img ( $IMAGE, $PATH, $NAME, $MAX_SIZE, $MAX_WIDTH, $MAX_HEIGHT, $QUALITY = 100, $THIS_SIZE = false ) +function upload_img ( $IMAGE, $SUBPATH, $NAME, $MAX_SIZE, $MAX_WIDTH, $MAX_HEIGHT, $QUALITY = 100, $THIS_SIZE = false ) { global $FD; @@ -221,12 +223,12 @@ function upload_img ( $IMAGE, $PATH, $NAME, $MAX_SIZE, $MAX_WIDTH, $MAX_HEIGHT, } // Create Image - $full_path = $FD->env('path') . $PATH . $NAME . '.' . $type; + $full_path = FS2MEDIA . $SUBPATH . '/' . $NAME . '.' . $type; move_uploaded_file ( $IMAGE['tmp_name'], $full_path ); chmod ( $full_path, 0644 ); clearstatcache(); - if ( image_exists ( $PATH, $NAME) ) { + if ( image_exists ( $SUBPATH, $NAME) ) { return 0; // Display 0: Das Bild wurde erfolgreich hochgeladen! } else { return 6; // Error 6: Fehler bei der Bild erstellung From 4e9e7820e80473e47aee3be471a532293cc85eac Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 14 Jan 2015 15:21:33 +1300 Subject: [PATCH 26/92] renamed screenshots to gallery Signed-off-by: Moritz Kornher --- www/admin/admin_findpicture.php | 2 +- www/admin/admin_randompic_time.php | 6 +++--- www/admin/admin_screenadd.php | 4 ++-- www/admin/admin_screenedit.php | 12 ++++++------ www/applets/preview-image.php | 6 +++--- www/data/gallery.php | 4 ++-- www/data/viewer.php | 6 +++--- www/media/{screenshots => gallery}/index.htm | 0 8 files changed, 20 insertions(+), 20 deletions(-) rename www/media/{screenshots => gallery}/index.htm (100%) diff --git a/www/admin/admin_findpicture.php b/www/admin/admin_findpicture.php index a666d1c..b3f4e0f 100644 --- a/www/admin/admin_findpicture.php +++ b/www/admin/admin_findpicture.php @@ -65,7 +65,7 @@ onmouseover="this.style.backgroundColor=\'#EEEEEE\';" onmouseout="this.style.backgroundColor=\'transparent\';" >'; - $new_img_path = image_url('/screenshots', $screen_arr['screen_id'].'_s', true); + $new_img_path = image_url('/gallery', $screen_arr['screen_id'].'_s', true); $lines .= ' @@ -236,7 +236,7 @@ @@ -218,7 +218,7 @@ onmouseout="javascript:this.style.backgroundColor=\'transparent\'" onClick=\'document.getElementById("'.$screen_arr['screen_id'].'").checked="true";\'> @@ -129,7 +129,7 @@ diff --git a/www/lang/de_DE/admin/admin_user_config.txt b/www/lang/de_DE/admin/admin_user_config.txt new file mode 100644 index 0000000..dd6434a --- /dev/null +++ b/www/lang/de_DE/admin/admin_user_config.txt @@ -0,0 +1,2 @@ +reg_antispam: Anti-Spam bei Registrierung +reg_antispam_desc: Aktiviert die Anti-Spam Abfrage bei der Registrierung. diff --git a/www/lang/de_DE/from_phrases.txt b/www/lang/de_DE/from_phrases.txt index d36acee..54638cd 100644 --- a/www/lang/de_DE/from_phrases.txt +++ b/www/lang/de_DE/from_phrases.txt @@ -145,8 +145,6 @@ feed_rss091: RSS 0.91 feed_rss10: RSS 1.0 feed_rss20: RSS 2.0 feed_atom10: Atom 1.0 -reg_antispam: Anti-Spam bei Registrierung -reg_antispam_desc: Aktiviert die Anti-Spam Abfrage bei der Registrierung. date: Datum date_desc: Datumsformat, das auf der Seite verwendet werden soll. date_info: verwendet den Syntax der PHP-Funktion date() diff --git a/www/lang/en_US/admin/admin_user_config.txt b/www/lang/en_US/admin/admin_user_config.txt new file mode 100644 index 0000000..9e62e81 --- /dev/null +++ b/www/lang/en_US/admin/admin_user_config.txt @@ -0,0 +1,2 @@ +reg_antispam: Anti-spam at registration +reg_antispam_desc: Activates the anti-spam question at registration. diff --git a/www/lang/en_US/from_phrases.txt b/www/lang/en_US/from_phrases.txt index b224e31..8918700 100644 --- a/www/lang/en_US/from_phrases.txt +++ b/www/lang/en_US/from_phrases.txt @@ -145,8 +145,6 @@ feed_rss091: RSS 0.91 feed_rss10: RSS 1.0 feed_rss20: RSS 2.0 feed_atom10: Atom 1.0 -reg_antispam: Anti-spam at registration -reg_antispam_desc: Activates the anti-spam question at registration. date: Date date_desc: Date format that is used on the site. date_info: uses the syntax of PHP function date() From 4bb14863a1a34112ba34b961e67b751ad1af26bb Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 14 Jan 2015 19:01:28 +1300 Subject: [PATCH 30/92] added bower, composer, npm and Gruntfile.js Signed-off-by: Moritz Kornher --- .bowerrc | 3 ++ .gitignore | 3 ++ Gruntfile.js | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++ bower.json | 21 +++++++++++++ composer.json | 15 ++++++++++ package.json | 33 +++++++++++++++++++++ 6 files changed, 157 insertions(+) create mode 100644 .bowerrc create mode 100644 Gruntfile.js create mode 100644 bower.json create mode 100644 composer.json create mode 100644 package.json diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..3c5e8c3 --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory" : "vendor" +} diff --git a/.gitignore b/.gitignore index 8a6c1d3..df58590 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ # OS-related/generic files Thumbs.db + +/vendor/ +/node_modules diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..b3869a2 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,82 @@ +/*global module:false*/ +module.exports = function(grunt) { + + // Project configuration. + grunt.initConfig({ + // Metadata. + pkg: grunt.file.readJSON('package.json'), + banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' + + '<%= grunt.template.today("yyyy-mm-dd") %>\n' + + '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' + + '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' + + ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */\n', + // Task configuration. + concat: { + options: { + banner: '<%= banner %>', + stripBanners: true + }, + dist: { + src: ['lib/<%= pkg.name %>.js'], + dest: 'dist/<%= pkg.name %>.js' + } + }, + uglify: { + options: { + banner: '<%= banner %>' + }, + dist: { + src: '<%= concat.dist.dest %>', + dest: 'dist/<%= pkg.name %>.min.js' + } + }, + jshint: { + options: { + curly: true, + eqeqeq: true, + immed: true, + latedef: true, + newcap: true, + noarg: true, + sub: true, + undef: true, + unused: true, + boss: true, + eqnull: true, + globals: { + jQuery: true + } + }, + gruntfile: { + src: 'Gruntfile.js' + }, + lib_test: { + src: ['lib/**/*.js', 'test/**/*.js'] + } + }, + nodeunit: { + files: ['test/**/*_test.js'] + }, + watch: { + gruntfile: { + files: '<%= jshint.gruntfile.src %>', + tasks: ['jshint:gruntfile'] + }, + lib_test: { + files: '<%= jshint.lib_test.src %>', + tasks: ['jshint:lib_test', 'nodeunit'] + } + } + }); + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-nodeunit'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-watch'); + + // Default task. + grunt.registerTask('default', ['jshint', 'nodeunit', 'concat', 'uglify']); + +}; diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..99f76b1 --- /dev/null +++ b/bower.json @@ -0,0 +1,21 @@ +{ + "name": "mrgrain/frogsystem2", + "version": "2.0.0-alix7", + "homepage": "https://github.com/mrgrain/Frogsystem-2", + "authors": [ + "Moritz Kornher " + ], + "main": "www/index.php", + "license": "CC BY-SA 3.0 DE", + "private": true, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "dependencies": { + "jquery": "~1.11.2" + } +} diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..09e6b3f --- /dev/null +++ b/composer.json @@ -0,0 +1,15 @@ +{ + "name": "mrgrain/frogsystem2", + "license": "CC BY-SA 3.0 DE", + "authors": [ + { + "name": "Moritz Kornher", + "email": "mail@moritzkornher.de" + } + ], + "minimum-stability": "stable", + "config": { + "vendor-dir": "www/vendor" + }, + "require": {} +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..16f74d6 --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "engines": { + "node": ">= 0.10.0" + }, + "devDependencies": { + "grunt": "~0.4.5", + "grunt-contrib-jshint": "~0.10.0", + "grunt-contrib-watch": "~0.6.1", + "grunt-contrib-nodeunit": "~0.4.1", + "grunt-contrib-concat": "~0.4.0", + "grunt-contrib-uglify": "~0.5.0" + }, + "name": "frogsystem2", + "description": "", + "version": "2.0.0-alix7", + "main": "Gruntfile.js", + "private": true, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git://github.com/mrgrain/Frogsystem-2.git" + }, + "author": [ + "Moritz Kornher " + ], + "license": "CC BY-SA 3.0 DE", + "bugs": { + "url": "https://github.com/mrgrain/Frogsystem-2/issues" + }, + "homepage": "https://github.com/mrgrain/Frogsystem-2" +} From fb3c3e261e439ab040b496c9bb42412430b186c8 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Thu, 15 Jan 2015 14:06:39 +1300 Subject: [PATCH 31/92] added sass Signed-off-by: Moritz Kornher --- .bowerrc | 2 +- .gitignore | 4 +- Gruntfile.js | 64 ++++- assets/sass/admin/_default.scss | 84 ++++++ assets/sass/admin/_editor.scss | 39 +++ assets/sass/admin/_functional.scss | 20 ++ assets/sass/admin/_html-editor.scss | 201 ++++++++++++++ assets/sass/admin/_main.scss | 73 +++++ assets/sass/admin/_menu.scss | 153 +++++++++++ assets/sass/admin/_old.scss | 186 +++++++++++++ assets/sass/admin/_pagination.scss | 23 ++ assets/sass/admin/_style.scss | 407 ++++++++++++++++++++++++++++ assets/sass/admin/admin.scss | 10 + assets/sass/admin/noscript.scss | 20 ++ package.json | 7 +- 15 files changed, 1277 insertions(+), 16 deletions(-) create mode 100644 assets/sass/admin/_default.scss create mode 100644 assets/sass/admin/_editor.scss create mode 100644 assets/sass/admin/_functional.scss create mode 100644 assets/sass/admin/_html-editor.scss create mode 100644 assets/sass/admin/_main.scss create mode 100644 assets/sass/admin/_menu.scss create mode 100644 assets/sass/admin/_old.scss create mode 100644 assets/sass/admin/_pagination.scss create mode 100644 assets/sass/admin/_style.scss create mode 100644 assets/sass/admin/admin.scss create mode 100644 assets/sass/admin/noscript.scss diff --git a/.bowerrc b/.bowerrc index 3c5e8c3..805b1b7 100644 --- a/.bowerrc +++ b/.bowerrc @@ -1,3 +1,3 @@ { - "directory" : "vendor" + "directory" : "assets/vendor" } diff --git a/.gitignore b/.gitignore index df58590..3f4d62f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,7 @@ # OS-related/generic files Thumbs.db -/vendor/ +/assets/vendor/ /node_modules +/assets/css +/.sass-cache diff --git a/Gruntfile.js b/Gruntfile.js index b3869a2..45561ef 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -10,7 +10,40 @@ module.exports = function(grunt) { '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' + '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' + ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */\n', + // Task configuration. + sass: { + options: { + unixNewlines: true + }, + + dev: { + files: [ + { + expand: true, + cwd: 'assets/sass', + src: '**/[!_]*.scss', + dest: 'assets/css', + ext: '.css' + } + ] + }, + dist: { + options: { + style: 'compressed', + }, + files: [ + { + expand: true, + cwd: 'assets/sass', + src: '**/[!_]*.scss', + dest: 'assets/css', + ext: '.css' + } + ] + } + }, + concat: { options: { banner: '<%= banner %>', @@ -49,27 +82,36 @@ module.exports = function(grunt) { }, gruntfile: { src: 'Gruntfile.js' - }, - lib_test: { - src: ['lib/**/*.js', 'test/**/*.js'] } + //~ , No tests at the moment + //~ lib_test: { + //~ src: ['lib/**/*.js', 'test/**/*.js'] + //~ } }, - nodeunit: { - files: ['test/**/*_test.js'] - }, + //~ No tests at the moment + //~ nodeunit: { + //~ files: ['test/**/*_test.js'] + //~ }, + watch: { + sass: { + files: ['assets/sass/**/*.scss'], + tasks: ['sass:dev'] + }, gruntfile: { files: '<%= jshint.gruntfile.src %>', tasks: ['jshint:gruntfile'] - }, - lib_test: { - files: '<%= jshint.lib_test.src %>', - tasks: ['jshint:lib_test', 'nodeunit'] } + //~ , No tests at the moment + //~ lib_test: { + //~ files: '<%= jshint.lib_test.src %>', + //~ tasks: ['jshint:lib_test', 'nodeunit'] + //~ } } }); // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-sass'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-nodeunit'); @@ -77,6 +119,6 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-watch'); // Default task. - grunt.registerTask('default', ['jshint', 'nodeunit', 'concat', 'uglify']); + grunt.registerTask('default', ['sass:dev', 'jshint', 'concat', 'uglify']); }; diff --git a/assets/sass/admin/_default.scss b/assets/sass/admin/_default.scss new file mode 100644 index 0000000..68c3dcb --- /dev/null +++ b/assets/sass/admin/_default.scss @@ -0,0 +1,84 @@ +/**************************************************/ +/* standard styles */ +/**************************************************/ +html,body { + height:100%; + margin:0px; + padding:0px; + font-size:10pt; + font-family:"Palatino Linotype", "Palatino", "Times New Roman", Times, serif; + color:#000000; + line-height:120%; +} + +body { + overflow-y: scroll; + margin: 0px auto; + width:991px; +} + +img { + margin:0px; + padding:0px; + border:none; +} + +form { + margin:0px; + padding:0px; +} + +h1, h2, h3, h4, h5, h6 { + margin:0px; + padding:0px; + font-weight:normal; + font-size:10pt; + font-family:"Century Gothic", "Futura", Arial, Helvetica, sans-serif; +} + +h1 { font-size:250%; } +h2 { font-size:200%; } +h3 { font-size:160%; } +h4 { font-size:135%; font-weight:bold; } +h5 { font-size:120%; font-weight:bold; } +h6 { font-size:110%; font-weight:bold; } + +p { + margin:0px; + padding:0px; +} + +h1+*, h2+*, h3+*, h4+*, h5+*, h6+*, p+* { + margin-top:12px; +} + +/**************************************************/ +/* standard links styles */ +/**************************************************/ +a, .link { + color:#2B4595; + text-decoration:none; + cursor:pointer; +} +a:hover, a:focus, a:active, .link:hover, .link:focus, .link:active { + text-decoration:underline; +} +a.s .link[class~=s]{ + font-weight:bold; +} + + +/**************************************************/ +/* standard form styles */ +/**************************************************/ +img.checkbox { + cursor:pointer; +} + +input[type="checkbox"], input[type="radio"], input[type="submit"], input[type="reset"], input[type="button"] { + cursor:pointer; +} + +select, option, label { + cursor:pointer; +} diff --git a/assets/sass/admin/_editor.scss b/assets/sass/admin/_editor.scss new file mode 100644 index 0000000..a4a42f8 --- /dev/null +++ b/assets/sass/admin/_editor.scss @@ -0,0 +1,39 @@ +div.ed_button { + font-size:8pt; + font-family:Verdana; + border:1px solid #000000; + background-color:#B7B7B7; + width:20px; + height:20px; + cursor:pointer; + text-align:center; +} +div.ed_button:hover { + background-color:#A5E5A5; +} +a.ed_button_new { + display:block; + width:22px; + height:22px; + cursor:pointer; + background-position: bottom right; +} +a.ed_button_new:hover, a.ed_button_new:focus { + background-position: top left; +} +td.editor_td { + width:24px; + height:23px; + vertical-align:bottom; + text-align:left; +} +td.editor_td_seperator { + width:5px; + height:23px; + background-image:url("?editor=separator.gif"); + background-repeat:no-repeat; + background-position:top left; +} +img.editor_smilies { + cursor:pointer; +} diff --git a/assets/sass/admin/_functional.scss b/assets/sass/admin/_functional.scss new file mode 100644 index 0000000..7af9fb3 --- /dev/null +++ b/assets/sass/admin/_functional.scss @@ -0,0 +1,20 @@ +/**************************************************/ +/* DON'T CHANGE OR USE THESE CLASSES! */ +/* SOMETHING RELIES ON THEM */ +/**************************************************/ +.default {} +.hidden { + display:none; +} + +.cb-red, .cb-green {} + +table.select_list {} +tr.select_entry, input.select_box {} +select.select_type, option.select_red, option.select_one {} + + +table.xdebug-error, table.xdebug-error * { + font-family:Arial; + font-size:110%; +} diff --git a/assets/sass/admin/_html-editor.scss b/assets/sass/admin/_html-editor.scss new file mode 100644 index 0000000..712c131 --- /dev/null +++ b/assets/sass/admin/_html-editor.scss @@ -0,0 +1,201 @@ +/**************************************************/ +/* non-js html-editor styles */ +/**************************************************/ +textarea.no-js-html-editor { + width:100%; + color:#000000; + background-color:#FFFFFF; + border:none; + text-align:left; + font-size:10pt; + font-family:monospace; + padding:0px; + margin:0px; +} + + +/**************************************************/ +/* Button styles */ +/**************************************************/ +.html-editor-button-big { + background-image:url(?html-editor=note-edit.gif); +} +.html-editor-button-textwrap { + background-image:url(?html-editor=text-wrapping.gif); +} +.html-editor-button-line-numbers { + background-image:url(?html-editor=line-numbers.gif); +} +.html-editor-button-original { + background-image:url(?html-editor=doc-search.gif); +} + + +/**************************************************/ +/* special codemirror styles */ +/**************************************************/ +.CodeMirror-line-numbers { + width:2.2em; + color:#AAAAAA; + background-color:#EEEEEE; + text-align:right; + padding-right:.3em; + font-size:10pt; + font-family:monospace; + padding-top:.4em; + font-weight:bold; + line-height:normal; +} + +.CodeMirror-iframe { + z-index:0; +} + +/**************************************************/ +/* html-editor styles */ +/**************************************************/ +.html-editor-bar { + background-color:#EEEEEE; + border: 1px solid #999999; + border-bottom:none; + width:100%; + padding:0px; + margin:0px; + font-weight:normal; +} +.html-editor-row { + height:24px; + padding:1px; + font-family:Verdana, Arial, Helvetica, sans-serif; +} +.html-editor-path { + background-color:#EEEEEE; + border: 1px solid #999999; + border-top:none; + width:100%; + padding:0px; + margin:0px; + font-family:Verdana, Arial, Helvetica, sans-serif; + line-height:110%; +} + +.html-editor-highlighter { + float:right; +} +.html-editor-row-header { + height:19px; + border-bottom:1px solid #999999; + padding:6px 5px 1px; + vertical-align:top; + font-weight:normal; +} +.html-editor-row-header span[id$=title] { + font-size:11pt; + font-family:"Century Gothic", "Futura", Arial, Helvetica, sans-serif; + font-weight:bold; + vertical-align:top; +} +.html-editor-row-header .small { + vertical-align:top; +} + +.html-editor-button, .html-editor-button-active, .html-editor-button-hover { + height:20px; + width:20px; + cursor:pointer; + background-color:transparent; + background-repeat:no-repeat; + background-position:center; + border:1px solid #EEEEEE; + padding:0px; + margin:1px; + display:block; + float:left; +} +.html-editor-button-active { + border:1px solid #777777; + background-color:#DDDDDD; +} +.html-editor-button-hover { + border:1px solid #555555; + background-color:#CCCCCC; +} + + +.html-editor-line { + height:20px; + width:5px; + background-image:url("?html-editor=line.gif"); + background-repeat:no-repeat; + background-position:center; + border:1px solid #EEEEEE; + padding:0px; + margin:1px; + display:block; + float:left; +} +.html-editor-container-list { + float:left; + position:relative; +} +.html-editor-list { + height:14px; + cursor:pointer; + background-color:#FFFFFF; + background-repeat:no-repeat; + border:1px solid #BBBBBB; + padding:2px 4px; + margin:2px 0px 1px 1px; + display:block; + float:left; + vertical-align:middle; + font-size:11px; + + font-weight:normal; + text-decoration:none; + line-height:120%; +} +.html-editor-list-arrow { + height:14px; + width:3px; + cursor:pointer; + padding:2px 4px; + margin:2px 1px 1px 0px; + background-color:#EEEEEE; + background-image:url("?html-editor=arrow.gif"); + background-repeat:no-repeat; + background-position:center; + border:1px solid #BBBBBB; + border-left:none; + display:block; + float:left; +} + +.html-editor-list-popup { + display:none; + cursor:default; + position:absolute; + top:0px; + left:0px; + margin-top:21px; + margin-left:1px; + padding:0px; + width:250px; + border:none; + z-index:100; +} + +.html-editor-list-table { + padding:0px; + margin:0px; + border:1px solid #555555; + background-color:#EEEEEE; + font-family:Verdana, Arial, Helvetica, sans-serif; +} + + +.html-editor-list-table td { + padding:4px; + border-top:1px solid #BBBBBB; + line-height:130%; +} diff --git a/assets/sass/admin/_main.scss b/assets/sass/admin/_main.scss new file mode 100644 index 0000000..e14951f --- /dev/null +++ b/assets/sass/admin/_main.scss @@ -0,0 +1,73 @@ +/**************************************************/ +/* addtional secondary styles (has to be at the end */ +/**************************************************/ +strong { + font-weight:bold !important; + font-size:100% !important; +} +em { + font-style:italic !important; + font-size:100% !important; +} + + +.mono { + font-family:"Courier New", Courier, monospace !important; +} + +.small { + font-size:9pt !important; +} +.smaller { + font-size:8pt !important; +} +.mini { + font-size:7pt !important; +} + +.top { + vertical-align:top !important; +} +.middle { + vertical-align:middle !important; +} +.bottom { + vertical-align:bottom !important; +} +.text-bottom { + vertical-align:text-bottom !important; +} + +.left { + text-align:left !important; +} +.center { + text-align:center !important; +} +.right { + text-align:right !important; +} +.justify { + text-align:justify !important; +} + +.atleft { + float:left !important; +} +.atright { + float:right !important; +} + +.pointer { + cursor:pointer !important; +} + +.red { + background-color:#C24949 !important; +} +.green { + background-color:#49C24f !important; +} +.red_text { + color:#FF0000 !important; +} diff --git a/assets/sass/admin/_menu.scss b/assets/sass/admin/_menu.scss new file mode 100644 index 0000000..a41672e --- /dev/null +++ b/assets/sass/admin/_menu.scss @@ -0,0 +1,153 @@ +/**************************************************/ +/* topmenu styles */ +/**************************************************/ +#topmenu_left { + position:absolute; + top:76px; + width:159px; + height:38px; + z-index:5; + background:#019934 url('?images=topmenu_left.jpg'); + background-repeat:no-repeat; + margin-left:170px; +} + +#topmenu_loop { + position:absolute; + top:76px; + width:630px; + height:35px; + z-index:5; + background:#019934 url('?images=topmenu.jpg'); + background-repeat:repeat-x; + margin-left:329px; + padding:0px; + padding-top:3px; + font-size:13px; + font-family:"Century Gothic", "Futura", Arial, Helvetica, sans-serif; +} + +ul.topmenu { + list-style: none; + padding:0px; + margin:0px; +} + +ul.topmenu li { + display:inline; + padding:0px; + margin:0px; + margin-right:5px; + text-align:center; +} + +ul.topmenu li a { + font-size:13px; + font-family:"Century Gothic", "Futura", Arial, Helvetica, sans-serif; + color:#FFFFFF; + padding:3px 8px 7px; + margin:0px; + text-decoration:none; + cursor:pointer; + height:10px; +} +ul.topmenu li a:hover, ul.topmenu li a:focus, ul.topmenu li a:active { + text-decoration:none; + background:url('?images=topmenu_hover.jpg') left top repeat-x; +} + +ul.topmenu li.selected a{ + font-weight:bold; + background:url('?images=topmenu_hover.jpg') left top repeat-x; +} + + +/**************************************************/ +/* topmenu login styles */ +/**************************************************/ +#topmenu_login { + position:absolute; + top:98px; + width:59px; + height:29px; + z-index:5; + background:#DDDDDD url('?images=login_bg.jpg'); + background-repeat:no-repeat; + margin-left:888px; + padding-left:12px; + padding-top:1px; + text-align:left; +} +#topmenu_login a { + color:#4C4C4C; + font-family:Arial, Helvetica, sans-serif; +} + +#topmenu_login_image { + padding-right:6px; + padding-top:3px; +} + + +/**************************************************/ +/* leftmenu styles */ +/**************************************************/ +#navi_container { + position:relative; + width:138px; + margin-top:76px; + margin-right:15px; + float:left; + padding-bottom:30px; +} + +.leftmenu { + position:relative; + min-height:45px; + padding:12px 0px 0px 7px; + background:#DDDDDD url('?images=leftmenu.jpg') no-repeat; + background-repeat:no-repeat; +} +.leftmenu * { + color:#434343; + font-size:11pt; + font-family:"Century Gothic", "Futura", Arial, Helvetica, sans-serif; +} + +.leftmenu[class~='top'] { + background-image:url('?images=leftmenu_top.jpg'); + min-height:43px; + padding-top:10px; +} + +.leftmenu ul { + list-style: none; + padding:0px; + margin:5px 0px 0px 9px; +} + +.leftmenu ul li { + font-size:12px; + color:#4C4C4C; + padding:0px; + margin:0px; + line-height:130%; +} + +.leftmenu ul li:before { + content: "- "; +} + +.leftmenu ul li a { + font-size:12px; + font-family:Arial, Helvetica, sans-serif; + color:#4C4C4C; + font-weight:normal; + text-decoration:none; +} +.leftmenu ul li a:hover, .leftmenu ul li a.navi:focus { + text-decoration:underline; +} +.leftmenu ul li.selected a { + font-weight:bold; +} diff --git a/assets/sass/admin/_old.scss b/assets/sass/admin/_old.scss new file mode 100644 index 0000000..b2c01bd --- /dev/null +++ b/assets/sass/admin/_old.scss @@ -0,0 +1,186 @@ +/**************************************************/ +/* tooltip */ +/**************************************************/ + +a.tooltip { + position: relative; + text-decoration: none; + font-style: normal; + font-weight: normal; + border: none; +} +a.tooltip:hover, a.tooltip:focus { + z-index: 1000; + background: transparent; +} +a.tooltip span { + display: none; + position: absolute; + border: none; + font-size:11px; + font-weight:normal; + font-style: normal; + text-decoration:none; + line-height:120%; + font-family: Verdana, Arial, Helvetica, sans-serif; +} +a.tooltip:hover span, a.tooltip:focus span { + display: block; + position: absolute; + top: 18px; + left: 0px; + width: 200px; + z-index: 100; + color: #000000; + border: 1px solid; + border-color: #000000 #000000 #000000 #000000; + padding: 3px; + background: #EEEEEE; + text-align: left; +} +a.tooltip:hover span:hover, a.tooltip:hover span:focus, a.tooltip:focus span:hover, a.tooltip:focus span:focus { + background: #CCCCCC; +} + + +/**************************************************/ +/* statistik table styles */ +/**************************************************/ +td.h, td.n, td.nw { + font-size:8pt; + font-family:Verdana; + font-weight:bold; + color:#000000; + background:#AAAAAA; +} +td.n { + background:#CCCCCC; +} +td.nw { + background:#BBBBBB; +} + + + +/**************************************************/ +/* old formular styles */ +/**************************************************/ +.input_width{ + width:275px; +} +.input_width_small{ + width:200px; +} +.input_width_mini{ + width:150px; +} +.input_highlight:focus, input_highlight:active{ + background-color:#64DC6A; +} +.nomonospace { + font-family: Arial, sans-serif; +} +.monospace { + font-family: "Courier New", Courier, monospace; +} + +.button_new +{ + display:block; + padding:3px; + padding-right:9px; + width:100%; + height: 27px; + background-image:url('?images=button.jpg'); + background-repeat:repeat; + font-weight:bold; + color:#FFFFFF; + font-size:9pt; + font-family:Arial; + border:1px solid #000000; + cursor:pointer; + text-align:right; + white-space:nowrap; +} +.button_new:hover, .button_new:focus +{ + text-decoration:none; + background-image:url('?images=button_hover.jpg'); +} + +a.image_hover { + display:block; + cursor:pointer; + background-position: bottom right; +} +a.image_hover:hover, a.image_hover:focus { + background-position: top left; +} + +/**************************************************/ +/* old standard formular styles */ +/**************************************************/ +table.configtable { + width:100%; + border:0px; +} + +table.configtable .config, table.configtable .configthin, table.configtable .configbig { + text-align:left; + vertical-align:top; + color:#000000; + font-size:11pt; + font-family:"Century Gothic", "Futura", Arial, Helvetica, sans-serif; + padding-left:0px; + font-weight:bold; +} +table.configtable .configthin { + font-weight:normal; +} +table.configtable .configbig { + font-size:13pt; +} + +table.configtable .config .small, table.configtable .configthin .small, table.configtable .configbig .small { + font-size:10pt; + font-weight:normal; + font-family:"Palatino Linotype", "Palatino", "Times New Roman", Times, serif; + +} + +td.line, td.line_red +{ + background-image:url('?images=line_green.jpg'); + background-repeat:repeat-x; + background-position:left 25px; + height:45px; + padding:0px 0px; + text-align:left; + vertical-align:top; + font-family:"Century Gothic", "Futura", Arial, Helvetica, sans-serif; + font-size:160%; +} +td.line_red +{ + background-image:url('?images=line_red.jpg'); +} +td.space +{ + height:15px; +} +td.right_space +{ + width:50%; +} +td.buttontd +{ + padding:0px; +} +td.combi_button +{ + background-image:url('?images=button.jpg'); + background-repeat:repeat; + border:1px solid #000000; + white-space:nowrap; + vertical-align:middle; +} diff --git a/assets/sass/admin/_pagination.scss b/assets/sass/admin/_pagination.scss new file mode 100644 index 0000000..7b71661 --- /dev/null +++ b/assets/sass/admin/_pagination.scss @@ -0,0 +1,23 @@ +/**************************************************/ +/* Pagination Styles */ +/**************************************************/ +.pagination-page, .pagination-page-selected { + border: 1px solid black; + background-color: #EEEEEE; + padding: 1px 6px; +} + +.pagination-page:hover, .pagination-page:focus, .pagination-page:active { + text-decoration: none; + background-color: #DDDDDD; +} + +.pagination-page-selected { + font-weight: bold; +} + +.pagination-first, .pagination-last, .pagination-prev, .pagination-next { +} + +.pagination-seperator { +} diff --git a/assets/sass/admin/_style.scss b/assets/sass/admin/_style.scss new file mode 100644 index 0000000..4bb5241 --- /dev/null +++ b/assets/sass/admin/_style.scss @@ -0,0 +1,407 @@ +/**************************************************/ +/* background design styles */ +/**************************************************/ +body { + background:#2A2A2A url('?images=bg.jpg'); +} + +#bg { + background:#485247 url('?images=bg_loop.jpg'); + background-repeat:repeat-y; + position:absolute; + width:991px; + min-height:100%; + height:auto !important; + height:100%; + z-index:1; +} + +#bg_padding { + position:relative; + width:927px; + left:32px; +} + +/**************************************************/ +/* head design styles */ +/**************************************************/ +#head { + position:absolute; + z-index:5; + margin-left:32px; + width:917px; + height:71px; + padding-top:5px; + padding-left:10px; + background:#DDDDDD url('?images=head.jpg') no-repeat; + color:#363636; + font-family:"Palatino Linotype", "Palatino", "Times New Roman", Times, serif; + font-size:20pt; + font-weight:normal; + line-height:120%; +} +#head h1 { + font-size:20pt; + font-family:"Palatino Linotype", "Palatino", "Times New Roman", Times, serif; + margin:0px; +} + +#head_version { + position:absolute; + left:860px; + top:36px; + width:90px; + font:normal 9px Arial; + color:#FFFFFF; + line-height:100%; +} +#head_link { + position:absolute; + left:12px; + top:36px; +} +#head_link a { + font-family:"Palatino Linotype", "Palatino", "Times New Roman", Times, serif; + font-size:9pt; + color:#363636; +} +#head_link a:hover, #head_link a:focus { + text-decoration:underline; +} + +/**************************************************/ +/* content box styles */ +/**************************************************/ +#content_container { + position:relative; + left:-15px; + margin-top:102px; + width:770px; + float:left; +} + +.cb { + padding:15px 25px 30px; + margin:30px 10px 30px 30px; + background:#D4D4D4 url('?images=cb_bg.jpg') repeat; + text-align:left; + border-radius:25px; + box-shadow: 3px 3px 5px #444; +} + +.cb-title h2 { + font-size:10pt; + margin:0px; + text-align:right; +} + +.cb-content { + margin-top:-5px; + text-align:left; +} + +/**************************************************/ +/* hr colors */ +/**************************************************/ +hr.green { + background-color:#008800; + background-image:url('?images=line_green.jpg'); +} +hr.red { + background-color:#FF0000; + background-image:url('?images=line_red.jpg'); +} + + + +/**************************************************/ +/* Systemmessage design */ +/**************************************************/ +div.systext+*{ + margin-top:24px; +} + +div.systext hr { + background-repeat:repeat-x; + background-position:left top; + height:9px; + border:none; + margin-top:5px; +} + +div.systext hr+div { + font-size:12pt; +} + +div.systext>div { + display:table-row; +} + +div.systext>div>span { + font-size:12pt; + display:table-cell; +} + +div.systext>div>img { + padding:3px 10px 3px 0px; + display:table-cell; +} + +/**************************************************/ +/* default page desgin */ +/**************************************************/ +table.content_width, table.content { + width:680px; +} + +table.content { +} + +table.content tr td { + padding-top:3px; + padding-bottom:3px; + text-align:left; + vertical-align:top; + font-size:11pt; + font-family:"Century Gothic", "Futura", Arial, Helvetica, sans-serif; + font-weight:bold; +} +table.content tr td.thin, table.content tr.thin td { + font-weight:normal; +} +table.content tr td.big, table.content tr.big td { + font-size:13pt; +} + +table.content.small tr td, table.content td .small, table.content tr .small { + font-size:10pt; + font-weight:normal; + font-family:"Palatino Linotype", "Palatino", "Times New Roman", Times, serif; +} + +table.content tr h3, tr.line h3 { + font-family:"Century Gothic", "Futura", Arial, Helvetica, sans-serif; + font-size:160%; + font-weight:normal; +} +table.content tr + tr td h3, tr.line + tr td h3 { + margin-top:15px; +} + +table.content tr h3+hr, tr.line h3+hr { + background-repeat:repeat-x; + background-position:left top; + height:9px; + border:none; + margin-top:7px; + background-color:#008800; + background-image:url('?images=line_green.jpg'); +} + +table.content .space { + margin-top:15px; + margin-bottom:15px; +} +table.content .spacetop { + margin-top:15px; +} +table.content .spacebottom{ + margin-bottom:15px; +} + +/**************************************************/ +/* special config page styles */ +/**************************************************/ +table.config { + width:680px; +} +table.config td { + width:50%; +} +table.config tr>td:first-child:not(:only-child) { + padding-right:50px; +} + + +/**************************************************/ +/* find page styles */ +/**************************************************/ +#find_body { + background-image:none; + background-color:#495144; + width:100%; + text-align:left; +} + +#find_body table.content { + width:100%; +} +#find_body .cb { + padding:15px 25px 30px; + margin:15px 10px 10px; +} + +#find_head { + width:100%; + height:25px; + padding-top:1px; + background-image:url('?images=topmenu.jpg'); + background-repeat:repeat-x; + font-family:"Century Gothic", "Futura", Arial, Helvetica, sans-serif; + font-size:10pt; + color:#FFFFFF; +} + +#find_container { + background-image:url('?images=content_loop_small.jpg'); + background-repeat:repeat-y; + width:308px; + text-align:left; +} +#find_top { + background-image:url('?images=content_top_small.jpg'); + background-repeat:no-repeat; + width:308px; + height:25px; + padding-left:15px; + padding-top:20px; + font-size:8pt; + font-variant:small-caps; + color:#000000; + font-weight:bold; +} +#find_foot { + background-image:url('?images=content_foot_small.jpg'); + background-repeat:no-repeat; + width:308px; + height:53px; +} + + +/**************************************************/ +/* default form styles */ +/**************************************************/ +select, option, textarea, input[type='password'], input[type='text'], input:not([type]) { + color:#000000; + font-size:10pt; + font-family:Verdana, sans-serif; + border:2px solid #999999; + background-color:#ffffff; + font-weight:normal; + padding:2px 3px; +} + +option { + border:none; + padding:1px 10px 1px 6px; + +} + +input[type='file'] { + color:#000000; + font-size:10pt; + font-family:Verdana, sans-serif; + background-color:#ffffff; + font-weight:normal; + padding:2px 3px; + cursor:pointer; +} +input[type='button'], input[type='reset'], input[type='submit'] { + padding-top:2px; + padding-bottom:2px; + cursor:pointer; +} +input[readonly], input[disabled] { + color:#444444; + background-color:#EEEEEE; +} + +textarea { + font-family: "Courier New", Courier, monospace; + line-height:140%; + font-size:11pt; +} +textarea.nomono { + font-family:Verdana, sans-serif; + font-size:10pt; +} + +input.full, textarea.full { + width:670px; +} +input.threequarter, textarea.threequarter { + width:500px; +} +input.twothird, textarea.twothird { + width:443px; +} +input.half, textarea.half { + width:330px; +} +input.third, textarea.third { + width:216px; +} +input.quarter, textarea.quarter { + width:160px; +} +input.eighth, textarea.eighth { + width:75px; +} + +.full { + width:680px; +} +.threequarter { + width:510px; +} +.twothird { + width:453px; +} +.half { + width:340px; +} +.third { + width:226px; +} +.quarter { + width:170px; +} +.eighth { + width:85px; +} + +/**************************************************/ +/* Button styles */ +/* TODO: New button style */ +/**************************************************/ +table.content .button, a.link_button { + height:27px; + margin-top:15px; + padding-right:10px; + background:#019934 url('?images=button.jpg'); + background-repeat:repeat-x; + background-position:top left; + border:1px solid #000000; + cursor:pointer; + font-size:9pt; + font-family:Arial, Helvetica, sans-serif; + font-weight:bold; + color:#FFFFFF; + text-align:right; +} +table.content .button { + width:100%; +} +table.content .button:hover, table.content .button:focus, a.link_button:hover, a.link_button:focus { + background-position:bottom left; +} + +a.link_button { + display:block; + height:15px; + padding:5px; + padding-right:13px; +} +a.link_button:hover,a.link_button:focus { + text-decoration:none; +} diff --git a/assets/sass/admin/admin.scss b/assets/sass/admin/admin.scss new file mode 100644 index 0000000..acc9823 --- /dev/null +++ b/assets/sass/admin/admin.scss @@ -0,0 +1,10 @@ +@import "old"; +@import "editor"; + +@import "default"; +@import "menu"; +@import "style"; +@import "functional"; +@import "html-editor"; +@import "pagination"; +@import "main"; diff --git a/assets/sass/admin/noscript.scss b/assets/sass/admin/noscript.scss new file mode 100644 index 0000000..31696c0 --- /dev/null +++ b/assets/sass/admin/noscript.scss @@ -0,0 +1,20 @@ +/**************************************************/ +/* noscript style */ +/**************************************************/ +.hidden { + display:block; +} +tr.hidden { + display:table-row; +} +td.hidden { + display:table-cell; +} + +img.checkbox { + display:none; +} + +.nshide { + display:none; +} diff --git a/package.json b/package.json index 16f74d6..6063ba9 100644 --- a/package.json +++ b/package.json @@ -4,11 +4,12 @@ }, "devDependencies": { "grunt": "~0.4.5", + "grunt-contrib-concat": "~0.4.0", "grunt-contrib-jshint": "~0.10.0", - "grunt-contrib-watch": "~0.6.1", "grunt-contrib-nodeunit": "~0.4.1", - "grunt-contrib-concat": "~0.4.0", - "grunt-contrib-uglify": "~0.5.0" + "grunt-contrib-sass": "^0.8.1", + "grunt-contrib-uglify": "~0.5.0", + "grunt-contrib-watch": "~0.6.1" }, "name": "frogsystem2", "description": "", From 2def70b45846a0e3d6f7c6fef33989ebdefb85fd Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Thu, 15 Jan 2015 15:22:45 +1300 Subject: [PATCH 32/92] added js, uglify, concat and bower Signed-off-by: Moritz Kornher --- Gruntfile.js | 73 +- assets/js/_frontend.js | 288 + assets/js/admin.js | 11369 ++++++++++++++++++++++++++++++ assets/js/admin.min.js | 30 + assets/js/admin.min.js.map | 1 + assets/js/admin/_admin.js | 119 + assets/js/admin/_colorpicker.js | 68 + assets/js/admin/_functions.js | 541 ++ package.json | 14 +- 9 files changed, 12480 insertions(+), 23 deletions(-) create mode 100644 assets/js/_frontend.js create mode 100644 assets/js/admin.js create mode 100644 assets/js/admin.min.js create mode 100644 assets/js/admin.min.js.map create mode 100644 assets/js/admin/_admin.js create mode 100644 assets/js/admin/_colorpicker.js create mode 100644 assets/js/admin/_functions.js diff --git a/Gruntfile.js b/Gruntfile.js index 45561ef..c172c05 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -12,6 +12,15 @@ module.exports = function(grunt) { ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */\n', // Task configuration. + bower: { + install: { + options: { + cops: false, + verbose: true + } + } + }, + sass: { options: { unixNewlines: true @@ -43,26 +52,42 @@ module.exports = function(grunt) { ] } }, - + concat: { options: { banner: '<%= banner %>', stripBanners: true }, - dist: { - src: ['lib/<%= pkg.name %>.js'], - dest: 'dist/<%= pkg.name %>.js' + dev: { + files: [ + { + 'assets/js/admin.js' : ['assets/vendor/jquery/dist/jquery.js', 'assets/js/_frontend.js', 'assets/js/admin/**/_*.js'] + } + ] } }, + uglify: { options: { - banner: '<%= banner %>' + banner: '<%= banner %>', + compress: true, + mangle: true, + sourceMap: true }, + dist: { - src: '<%= concat.dist.dest %>', - dest: 'dist/<%= pkg.name %>.min.js' + files: [ + { + expand: true, + cwd: 'assets/js', + src: '**/[!_]*.js', + dest: 'assets/js', + ext: '.min.js' + } + ] } }, + jshint: { options: { curly: true, @@ -82,31 +107,34 @@ module.exports = function(grunt) { }, gruntfile: { src: 'Gruntfile.js' + }, + lib_test: { + //~ JS won't pass at the moment + //~ src: ['assets/js/**/[!_]*.js', 'test/**/*.js'] } - //~ , No tests at the moment - //~ lib_test: { - //~ src: ['lib/**/*.js', 'test/**/*.js'] - //~ } }, - //~ No tests at the moment - //~ nodeunit: { + nodeunit: { + //~ No tests at the moment //~ files: ['test/**/*_test.js'] - //~ }, + }, watch: { sass: { files: ['assets/sass/**/*.scss'], tasks: ['sass:dev'] }, + js: { + files: ['assets/js/**/_*.js'], + tasks: ['concat'] + }, gruntfile: { files: '<%= jshint.gruntfile.src %>', tasks: ['jshint:gruntfile'] + }, + lib_test: { + files: '<%= jshint.lib_test.src %>', + tasks: ['jshint:lib_test', 'nodeunit'] } - //~ , No tests at the moment - //~ lib_test: { - //~ files: '<%= jshint.lib_test.src %>', - //~ tasks: ['jshint:lib_test', 'nodeunit'] - //~ } } }); @@ -117,8 +145,13 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-nodeunit'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-newer'); + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-bower-task'); // Default task. - grunt.registerTask('default', ['sass:dev', 'jshint', 'concat', 'uglify']); + grunt.registerTask('default', ['sass:dev', 'jshint', 'concat']); + grunt.registerTask('build', ['bower:install', 'sass:dist', 'jshint', 'concat', 'uglify:dist']); + //~ grunt.registerTask('serve', ['']); }; diff --git a/assets/js/_frontend.js b/assets/js/_frontend.js new file mode 100644 index 0000000..96a5b29 --- /dev/null +++ b/assets/js/_frontend.js @@ -0,0 +1,288 @@ +//-------------------------------- +// START - Document Ready Functions +//-------------------------------- +$().ready(function(){ + $("head > link#noscriptcss").remove(); +}); +//-------------------------------- +// END - Document Ready Functions +//-------------------------------- + + +function popUp(url, target, width, height, pos_x, pos_y) { + if (typeof pos_x =="undefined") { pos_x = "center"; } + if (typeof pos_y =="undefined") { pos_y = "middle"; } + + var x; + var y; + + // get x pos + switch (pos_x) { + case "left": + x = 0; + break; + case "right": + x = screen.width - width; + break; + default: //center + x = screen.width/2 - width/2; + break; + } + + // get y pos + switch (pos_y) { + case "top": + y = 0; + break; + case "bottom": + y = screen.height - height; + break; + default: //middle + y = screen.height/2 - height/2; + break; + } + + window.open(url, target, 'width='+width+',height='+height+',left='+x+',top='+y+',screenX='+x+',screenY='+y+',scrollbars=YES,location=YES,status=YES'); +} + +function popTab(url, target) { + window.open(url, target); +} + + + +/** +* From http://www.massless.org/mozedit/ +*/ +function mozWrap(txtarea, open, close) +{ + var selLength = txtarea.textLength; + var selStart = txtarea.selectionStart; + var selEnd = txtarea.selectionEnd; + var scrollTop = txtarea.scrollTop; + + if (selEnd == 1 || selEnd == 2) + { + selEnd = selLength; + } + + var s1 = (txtarea.value).substring(0,selStart); + var s2 = (txtarea.value).substring(selStart, selEnd) + var s3 = (txtarea.value).substring(selEnd, selLength); + + txtarea.value = s1 + open + s2 + close + s3; + txtarea.selectionStart = selEnd + open.length + close.length; + txtarea.selectionEnd = txtarea.selectionStart; + txtarea.focus(); + txtarea.scrollTop = scrollTop; + + return; +} + +/////////////////////////////////////////////// +//// Short string by cutting in the middle //// +/////////////////////////////////////////////// +function cut_in_string (string, maxlength, replacement) +{ + if (string.length > maxlength) { + var part_lenght = Math.ceil(maxlength/2)-Math.ceil(replacement.length/2); + var string_start = string.substr(0, part_lenght); + var string_end = string.substr(-1*part_lenght); + string = string_start+replacement+string_end; + } + return string; +} + +////////////////////////// +//// htmlspecialchars //// +////////////////////////// +function htmlspecialchars(str,typ) { + if(typeof str=="undefined") str=""; + if(typeof typ!="number") typ=2; + typ=Math.max(0,Math.min(3,parseInt(typ))); + var from=new Array(/&/g,//g); + var to=new Array("&","<",">"); + if(typ==1 || typ==3) {from.push(/'/g); to.push("'");} + if(typ==2 || typ==3) {from.push(/"/g); to.push(""");} + for(var i in from) str= str.replace(from[i],to[i]); + return str; +} + + +////////////////////////////////////////////////////////////////////////////////////// +//Einfachen Code einfügen (B,I,U, etc.) => Keine Abfrage +////////////////////////////////////////////////////////////////////////////////////// +function insert(eName, aTag, eTag) { + var input = document.getElementById(eName); + input.focus(); + /* für Internet Explorer */ + if(typeof document.selection != 'undefined') { + /* Einfügen des Formatierungscodes */ + var range = document.selection.createRange(); + var insText = range.text; + range.text = aTag + insText + eTag; + /* Anpassen der Cursorposition */ + range = document.selection.createRange(); + if (insText.length == 0) { + range.move('character', -eTag.length); + } else { + range.moveStart('character', aTag.length + insText.length + eTag.length); + } + range.select(); + } + /* für neuere auf Gecko basierende Browser */ + else if(typeof input.selectionStart != 'undefined') + { + /* Anpassen der Cursorposition nach dem einfügen */ + var selection_start = input.selectionStart; + var selection_end = input.selectionEnd; + var insText = input.value.substring(selection_start, selection_end); + var pos; + if (insText.length == 0) { + pos = selection_start + aTag.length; + } else { + pos = selection_start + aTag.length + insText.length + eTag.length; + } + mozWrap(input, aTag, eTag) + input.selectionStart = pos; + input.selectionEnd = pos; + } + /* für die übrigen Browser */ + else + { + /* Abfrage der Einfügeposition */ + var pos = input.value.length; + /* Einfügen des Formatierungscodes */ + var insText = prompt("Bitte gib den zu formatierenden Text ein:"); + input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos); + } +} +////////////////////////////////////////////////////////////////////////////////////// +//Mittel Komplexen Code einfügen (IMG, CIMG, etc.) => Abfrage bei nicht Markiertem Text +////////////////////////////////////////////////////////////////////////////////////// +function insert_mcom(eName, aTag, eTag, Frage, Vorgabe) { + var input = document.getElementById(eName); + input.focus(); + /* für Internet Explorer */ + if(typeof document.selection != 'undefined') { + /* Einfügen des Formatierungscodes */ + var range = document.selection.createRange(); + var insText = range.text; + if (insText.length == 0) { + /* Ermittlung des einzufügenden Textes*/ + insText = prompt(Frage, Vorgabe); + if (insText == null) { + insText = ""; + } + } + range.text = aTag + insText + eTag; + /* Anpassen der Cursorposition */ + range = document.selection.createRange(); + if (insText.length == 0) { + range.move('character', -eTag.length); + } else { + range.moveStart('character', aTag.length + insText.length + eTag.length); + } + range.select(); + } + /* für neuere auf Gecko basierende Browser */ + else if(typeof input.selectionStart != 'undefined') + { + /* Anpassen der Cursorposition nach dem einfügen */ + var selection_start = input.selectionStart; + var selection_end = input.selectionEnd; + var insText = input.value.substring(selection_start, selection_end); + var addText = ""; + + /* Ermittlung des einzufügenden Textes*/ + if (insText.length == 0) { + addText = prompt(Frage, Vorgabe); + if (addText == null) { + addText = ""; + } + insText = addText; + } + + var pos; + if (insText.length == 0) { + pos = selection_start + aTag.length; + } else { + pos = selection_start + aTag.length + insText.length + eTag.length; + } + + mozWrap(input, aTag+addText, eTag) + input.selectionStart = pos; + input.selectionEnd = pos; + } + /* für die übrigen Browser */ + else + { + /* Abfrage der Einfügeposition */ + var pos = input.value.length; + /* Einfügen des Formatierungscodes */ + var insText = prompt(Frage, Vorgabe); + if (insText == null) { + insText = ""; + } + input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos); + } +} +////////////////////////////////////////////////////////////////////////////////////// +//Komplexen Code einfügen (FONT, SIZE, COLOR, etc.) => Abfrage wird immer durchgeführt +////////////////////////////////////////////////////////////////////////////////////// +function insert_com(eName, Tag, Frage, Vorgabe) { + var input = document.getElementById(eName); + input.focus(); + /* Ermittlung des einzufügenden Textes*/ + var attText = prompt(Frage, Vorgabe); + if (attText == null) { + attText = ""; + } + /* für Internet Explorer */ + if(typeof document.selection != 'undefined') { + /* Einfügen des Formatierungscodes */ + var range = document.selection.createRange(); + var insText = range.text; + range.text = "["+Tag+"="+attText+"]"+ insText +"[/"+Tag+"]"; + /* Anpassen der Cursorposition */ + range = document.selection.createRange(); + if (insText.length == 0) { + range.move('character', -(Tag.length + 2)); + } else { + range.moveStart('character', Tag.length + 3 + attText.length + insText.length + Tag.length + 3); + } + range.select(); + } + /* für neuere auf Gecko basierende Browser */ + else if(typeof input.selectionStart != 'undefined') + { + /* Tags definieren */ + var aTag = "["+Tag+"="+attText+"]"; + var eTag = "[/"+Tag+"]"; + + /* Anpassen der Cursorposition nach dem einfügen */ + var selection_start = input.selectionStart; + var selection_end = input.selectionEnd; + var insText = input.value.substring(selection_start, selection_end); + + var pos; + if (insText.length == 0) { + pos = selection_start + aTag.length; + } else { + pos = selection_start + aTag.length + insText.length + eTag.length; + } + + mozWrap(input, aTag, eTag) + input.selectionStart = pos; + input.selectionEnd = pos; + } + /* für die übrigen Browser */ + else + { + /* Abfrage der Einfügeposition */ + var pos = input.value.length; + /* Einfügen des Formatierungscodes */ + var insText = prompt("Bitte gib den zu formatierenden Text ein:"); + input.value = input.value.substr(0, pos) +"["+Tag+"="+attText+"]"+ insText +"[/"+Tag+"]"+ input.value.substr(pos); + } +} diff --git a/assets/js/admin.js b/assets/js/admin.js new file mode 100644 index 0000000..c1dbbd5 --- /dev/null +++ b/assets/js/admin.js @@ -0,0 +1,11369 @@ +/*! Frogsystem2 - v2.0.0-alix7 - 2015-01-15 +* https://github.com/mrgrain/Frogsystem-2 +* Copyright (c) 2015 ; Licensed CC BY-SA 3.0 DE */ +/*! + * jQuery JavaScript Library v1.11.2 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-12-17T15:27Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper window is present, + // execute the factory and get jQuery + // For environments that do not inherently posses a window with a document + // (such as Node.js), expose a jQuery-making factory as module.exports + // This accentuates the need for the creation of a real window + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +// + +var deletedIds = []; + +var slice = deletedIds.slice; + +var concat = deletedIds.concat; + +var push = deletedIds.push; + +var indexOf = deletedIds.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "1.11.2", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1, IE<9 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( support.ownLast ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Support: Android<4.1, IE<9 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: function() { + return +( new Date() ); + }, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.0-pre + * http://sizzlejs.com/ + * + * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-12-16 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + nodeType = context.nodeType; + + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + if ( !seed && documentIsHTML ) { + + // Try to shortcut find operations when possible (e.g., not under DocumentFragment) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType !== 1 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + parent = doc.defaultView; + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Support tests + ---------------------------------------------------------------------- */ + documentIsHTML = !isXML( doc ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +}); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.extend({ + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.unique( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + + } else if ( !(--remaining) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend({ + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +}); + +/** + * Clean-up method for dom ready events + */ +function detach() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } +} + +/** + * The ready event handler and self cleanup method + */ +function completed() { + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + + +var strundefined = typeof undefined; + + + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownLast = i !== "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +jQuery(function() { + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); +}); + + + + +(function() { + var div = document.createElement( "div" ); + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( elem ) { + var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ], + nodeType = +elem.nodeType || 1; + + // Do not set data on non-element DOM nodes because it will not be cleared (#8335). + return nodeType !== 1 && nodeType !== 9 ? + false : + + // Nodes accept data unless otherwise specified; rejection can be conditional + !noData || noData !== true && elem.getAttribute("classid") === noData; +}; + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + +function internalData( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements (space-suffixed to avoid Object.prototype collisions) + // throw uncatchable exceptions if you attempt to set expando properties + noData: { + "applet ": true, + "embed ": true, + // ...but Flash objects (which have this classid) *can* handle expandos + "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[0], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; +}; +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + // Minified: var a,b,c + var input = document.createElement( "input" ), + div = document.createElement( "div" ), + fragment = document.createDocumentFragment(); + + // Setup + div.innerHTML = "
@@ -269,7 +269,7 @@
'; - if ( image_exists ( "images/cat/", "news_".$cat_arr['cat_id'] ) ) { + if ( image_exists ( "/cat", "news_".$cat_arr['cat_id'] ) ) { echo ''.$FD->text("admin", "replace_img").'
'; } echo' @@ -479,8 +479,8 @@ >
'; - if ( image_exists ( 'images/cat/', 'news_'.$cat_arr['cat_id'] ) ) { - echo ''.$cat_arr['cat_name'].''; + if ( image_exists ( '/cat', 'news_'.$cat_arr['cat_id'] ) ) { + echo ''.$cat_arr['cat_name'].''; } echo ' - '.get_image_output('images/partner/', $_POST['partner_id'].'_small', "", '['.$FD->text("admin", "error").': '.$FD->text("admin", "image_not_found").']', false).' + '.get_image_output('/partner', $_POST['partner_id'].'_small', "", '['.$FD->text("admin", "error").': '.$FD->text("admin", "image_not_found").']', false).'


@@ -160,7 +160,7 @@ '.$FD->text("page", "big_pic_desc").'
- '.get_image_output('images/partner/', $_POST['partner_id'].'_big', "", '['.$FD->text("admin", "error").': '.$FD->text("admin", "image_not_found").']', false).' + '.get_image_output('/partner', $_POST['partner_id'].'_big', "", '['.$FD->text("admin", "error").': '.$FD->text("admin", "image_not_found").']', false).'


@@ -251,7 +251,7 @@
- +

- + '.$partner_arr['partner_name'].' diff --git a/www/admin/admin_press_admin.php b/www/admin/admin_press_admin.php index 6fdf13d..57dffd5 100644 --- a/www/admin/admin_press_admin.php +++ b/www/admin/admin_press_admin.php @@ -21,7 +21,7 @@ if ($_FILES['entry_pic']['name'] != '') { $id = $FD->db()->conn()->lastInsertId(); - $upload = upload_img($_FILES['entry_pic'], 'images/press/', $_POST['entry_is'].'_'.$id, 1024*1024, 999, 999); + $upload = upload_img($_FILES['entry_pic'], '/press', $_POST['entry_is'].'_'.$id, 1024*1024, 999, 999); $msg[] = upload_img_notice($upload); } else { $msg[] = 'Es wurde kein Bild zum Upload ausgewählt.'; @@ -54,14 +54,14 @@ if (isset($_POST['entry_pic_delete']) && $_POST['entry_pic_delete'] == 1) { - if (image_delete('images/press/', $_POST['entry_is'].'_'.$_POST['entry_id'])) + if (image_delete('/press', $_POST['entry_is'].'_'.$_POST['entry_id'])) { systext('Das Bild wurde erfolgreich gelöscht!'); } } elseif ($_FILES['entry_pic']['name'] != '') { - $upload = upload_img($_FILES['entry_pic'], 'images/press/', $_POST['entry_is'].'_'.$_POST['entry_id'], 1024*1024, 999, 999); + $upload = upload_img($_FILES['entry_pic'], '/press', $_POST['entry_is'].'_'.$_POST['entry_id'], 1024*1024, 999, 999); systext(upload_img_notice($upload)); } @@ -113,7 +113,7 @@ $msg[] = 'Der Eintrag wurde gelöscht!'; - if (image_delete('images/press/', $entry_arr['type'].'_'.$_POST['entry_id'])) + if (image_delete('/press', $entry_arr['type'].'_'.$_POST['entry_id'])) { $msg[] = 'Das Bild wurde erfolgreich gelöscht!'; } @@ -202,14 +202,14 @@ '; - if (image_exists('images/press/', $entry_arr['type'].'_'.$entry_arr['id'])) + if (image_exists('/press', $entry_arr['type'].'_'.$entry_arr['id'])) { - echo'

'; + echo'

'; } echo'
'; - if (image_exists('images/press/', $entry_arr['type'].'_'.$entry_arr['id'])) + if (image_exists('/pres/', $entry_arr['type'].'_'.$entry_arr['id'])) { echo' @@ -290,8 +290,8 @@
'; - if (image_exists('images/press/', $entry_arr['type'].'_'.$entry_arr['id'])) { - echo''; + if (image_exists('/press', $entry_arr['type'].'_'.$entry_arr['id'])) { + echo''; } echo'
'; - if (image_exists('images/press/', $entry_arr['type'].'_'.$entry_arr['id'])) { - echo''; + if (image_exists('/press', $entry_arr['type'].'_'.$entry_arr['id'])) { + echo''; } echo' - +
- + '.$random_arr['title'].' aktiv vom '.$random_arr['start'].'
bis zum '.$random_arr['end'].'
@@ -297,7 +297,7 @@ echo'
- + '.$random_arr['screen_name'].' diff --git a/www/admin/admin_screenadd.php b/www/admin/admin_screenadd.php index 193ee54..e1cd7b0 100644 --- a/www/admin/admin_screenadd.php +++ b/www/admin/admin_screenadd.php @@ -22,7 +22,7 @@ $id = $FD->db()->conn()->lastInsertId(); // File Operations - $upload = upload_img($_FILES['img'.$i], 'images/screenshots/', $id, $config_arr['screen_size']*1024, $config_arr['screen_x'], $config_arr['screen_y']); + $upload = upload_img($_FILES['img'.$i], '/screenshots', $id, $config_arr['screen_size']*1024, $config_arr['screen_x'], $config_arr['screen_y']); $log[$i][] = upload_img_notice($upload); // Upload Failed => Delete from DB @@ -31,7 +31,7 @@ // Else create Thumb } else { - $thumb = create_thumb_from(image_url('images/screenshots/', $id, FALSE, TRUE), $config_arr['screen_thumb_x'], $config_arr['screen_thumb_y']); + $thumb = create_thumb_from(image_url('/screenshots', $id, FALSE, TRUE), $config_arr['screen_thumb_x'], $config_arr['screen_thumb_y']); $log[$i][] = create_thumb_notice($thumb); } diff --git a/www/admin/admin_screenedit.php b/www/admin/admin_screenedit.php index 0e24477..c0a1fc5 100644 --- a/www/admin/admin_screenedit.php +++ b/www/admin/admin_screenedit.php @@ -15,8 +15,8 @@ if ($_POST['delscreen']) // Delete Screenshot { $FD->db()->conn()->exec('DELETE FROM '.$FD->env('DB_PREFIX')."screen WHERE screen_id = $_POST[editscreenid]"); - image_delete('images/screenshots/', $_POST['editscreenid']); - image_delete('images/screenshots/', "$_POST[editscreenid]_s"); + image_delete('/screenshots', $_POST['editscreenid']); + image_delete('/screenshots', "$_POST[editscreenid]_s"); systext('Screenshot wurde gelöscht'); } else // Edit Screenshot @@ -49,9 +49,9 @@ if (isset($_POST['do']) && $_POST['do'] == 'newthumb') { - image_delete('images/screenshots/',$_POST['screenid'].'_s'); + image_delete('/screenshots',$_POST['screenid'].'_s'); - $newthumb = @create_thumb_from(image_url('images/screenshots/',$_POST['screenid'],FALSE, TRUE),$config_arr['screen_thumb_x'],$config_arr['screen_thumb_y']); + $newthumb = @create_thumb_from(image_url('/screenshots',$_POST['screenid'],FALSE, TRUE),$config_arr['screen_thumb_x'],$config_arr['screen_thumb_y']); systext(create_thumb_notice($newthumb)); } @@ -71,7 +71,7 @@ Thumbnail des Screenshots - +
- + '.killhtml($screen_arr['screen_name']).' diff --git a/www/admin/admin_shopadd.php b/www/admin/admin_shopadd.php index eed6fc4..4a9fa21 100644 --- a/www/admin/admin_shopadd.php +++ b/www/admin/admin_shopadd.php @@ -21,9 +21,9 @@ $messages = array(); if (!empty($_FILES['artikelimg']['name'])) { - $upload = upload_img($_FILES['artikelimg'], 'images/shop/', $id, 2*1024*1024, 400, 600); + $upload = upload_img($_FILES['artikelimg'], '/shop', $id, 2*1024*1024, 400, 600); $messages[] = upload_img_notice($upload); - $thumb = create_thumb_from(image_url('images/shop/',$id,FALSE, TRUE), 100, 100); + $thumb = create_thumb_from(image_url('/shop',$id,FALSE, TRUE), 100, 100); $messages[] = create_thumb_notice($thumb); } diff --git a/www/admin/admin_shopedit.php b/www/admin/admin_shopedit.php index b3c465f..e26ae30 100644 --- a/www/admin/admin_shopedit.php +++ b/www/admin/admin_shopedit.php @@ -12,8 +12,8 @@ if (isset($_POST['delartikel'])) { $FD->db()->conn()->exec('DELETE FROM '.$FD->env('DB_PREFIX')."shop WHERE artikel_id = $_POST[artikelid]"); - image_delete ('images/shop/', $_POST['artikelid'] ); - image_delete( 'images/shop/', $_POST['artikelid'] ); + image_delete ('/shop', $_POST['artikelid'] ); + image_delete( '/shop', $_POST['artikelid'] ); systext('Artikel wurde gelöscht'); } else @@ -24,9 +24,9 @@ if (!empty($_FILES['artikelimg']['name'])) { - $upload = upload_img($_FILES['artikelimg'], 'images/shop/', $_POST['artikelid'], 2*1024*1024, 400, 600); + $upload = upload_img($_FILES['artikelimg'], '/shop', $_POST['artikelid'], 2*1024*1024, 400, 600); $messages[] = upload_img_notice($upload); - $thumb = create_thumb_from(image_url('images/shop/',$_POST['artikelid'],FALSE, TRUE), 100, 100); + $thumb = create_thumb_from(image_url('/shop',$_POST['artikelid'],FALSE, TRUE), 100, 100); $messages[] = create_thumb_notice($thumb); } $stmt = $FD->db()->conn()->prepare( @@ -78,7 +78,7 @@ Aktuelles Artikelbild - '.get_image_output('images/shop/', $artikel_arr['artikel_id'].'_s', "", '['.$FD->text('admin', 'error').': '.$FD->text('admin', 'image_not_found').']', false).' + '.get_image_output('/shop', $artikel_arr['artikel_id'].'_s', "", '['.$FD->text('admin', 'error').': '.$FD->text('admin', 'image_not_found').']', false).'
- '. killhtml($artikel_arr['artikel_name']) .' + '. killhtml($artikel_arr['artikel_name']) .' '. $artikel_arr['artikel_name'] .' diff --git a/www/admin/admin_user_add.php b/www/admin/admin_user_add.php index 8c3ac56..20de1bc 100644 --- a/www/admin/admin_user_add.php +++ b/www/admin/admin_user_add.php @@ -114,7 +114,7 @@ function user_name_free ( $USERNAME ) { // upload image if ( $_FILES['user_pic']['name'] != '' ) { - $upload = upload_img ( $_FILES['user_pic'], 'images/avatare/', $user_id, $config_arr['avatar_size']*1024, $config_arr['avatar_x'], $config_arr['avatar_y'] ); + $upload = upload_img ( $_FILES['user_pic'], '/user-images', $user_id, $config_arr['avatar_size']*1024, $config_arr['avatar_x'], $config_arr['avatar_y'] ); $message .= '
' . upload_img_notice ( $upload ); } diff --git a/www/admin/admin_user_edit.php b/www/admin/admin_user_edit.php index 97a5c78..ed00427 100644 --- a/www/admin/admin_user_edit.php +++ b/www/admin/admin_user_edit.php @@ -138,13 +138,13 @@ function user_name_free_or_itself ( $USERNAME, $USER_ID ) { // image operations if ( $_POST['user_pic_delete'] == 1 ) { - if ( image_delete ( 'images/avatare/', $_POST['user_id'] ) ) { + if ( image_delete ( '/user-images', $_POST['user_id'] ) ) { $message .= '
' . $FD->text("admin", "image_deleted"); } else { $message .= '
' . $FD->text("admin", "image_not_deleted"); } } elseif ( $_FILES['user_pic']['name'] != '' ) { - $upload = upload_img ( $_FILES['user_pic'], 'images/avatare/', $_POST['user_id'], $config_arr['avatar_size']*1024, $config_arr['avatar_x'], $config_arr['avatar_y'] ); + $upload = upload_img ( $_FILES['user_pic'], '/user-images', $_POST['user_id'], $config_arr['avatar_size']*1024, $config_arr['avatar_x'], $config_arr['avatar_y'] ); $message .= '
' . upload_img_notice ( $upload ); } @@ -262,7 +262,7 @@ function user_name_free_or_itself ( $USERNAME, $USER_ID ) { $message = 'Benutzer wurde erfolgreich gelöscht'; // Delete Image - if ( image_delete ( 'images/avatare/', $_POST['user_id'] ) ) { + if ( image_delete ( '/user-images', $_POST['user_id'] ) ) { $message .= '
' . $FD->text("admin", "image_deleted"); } } else { @@ -475,8 +475,8 @@ function user_name_free_or_itself ( $USERNAME, $USER_ID ) {
Benutzer-Bild: (optional) '; - if ( image_exists ( 'images/avatare/', $_POST['user_id'] ) ) { - echo '



'; + if ( image_exists ( '/user-images', $_POST['user_id'] ) ) { + echo '



'; } echo '
- +
-
+
'.$wallpaper_arr['wallpaper_name'].''; @@ -504,7 +504,7 @@
-
+
'.killhtml($wallpaper_arr['wallpaper_name']); diff --git a/www/admin/js/admin.js b/www/admin/js/admin.js index 466360e..6b1d99c 100644 --- a/www/admin/js/admin.js +++ b/www/admin/js/admin.js @@ -65,9 +65,9 @@ $().ready(function(){ if (checkbox.is(":checked")) { if (hover) { - cb.attr("src", "images/"+type+"-"+color+"-active-hover.png"); + cb.attr("src", "?images="+type+"-"+color+"-active-hover.png"); } else { - cb.attr("src", "images/"+type+"-"+color+"-active.png"); + cb.attr("src", "?images="+type+"-"+color+"-active.png"); } if (type == "radio") { @@ -77,9 +77,9 @@ $().ready(function(){ } } else { if (hover) { - cb.attr("src", "images/"+type+"-"+color+"-hover.png"); + cb.attr("src", "?images="+type+"-"+color+"-hover.png"); } else { - cb.attr("src", "images/"+type+".png"); + cb.attr("src", "?images="+type+".png"); } if (type == "radio") { diff --git a/www/applets/affiliates.php b/www/applets/affiliates.php index d81420e..304000a 100644 --- a/www/applets/affiliates.php +++ b/www/applets/affiliates.php @@ -24,8 +24,8 @@ $template->load('APPLET_ENTRY'); $template->tag('url', $affiliates_arr['partner_link'] ); - $template->tag('img_url', image_url ( 'images/partner/', $affiliates_arr['partner_id'].'_big' ) ); - $template->tag('button_url', image_url ( 'images/partner/', $affiliates_arr['partner_id'].'_small' ) ); + $template->tag('img_url', image_url ( '/partner', $affiliates_arr['partner_id'].'_big' ) ); + $template->tag('button_url', image_url ( '/partner', $affiliates_arr['partner_id'].'_small' ) ); $template->tag('name', $affiliates_arr['partner_name'] ); $template->tag('text', $affiliates_arr['partner_beschreibung'] ); diff --git a/www/applets/preview-image.php b/www/applets/preview-image.php index cf93c55..13abfa1 100644 --- a/www/applets/preview-image.php +++ b/www/applets/preview-image.php @@ -44,9 +44,9 @@ $template->setFile('0_previewimg.tpl'); $template->load('BODY'); - $template->tag('previewimg', get_image_output ( 'images/screenshots/', $data['id'] . '_s', $data['caption'] ) ); - $template->tag('previewimg_url', image_url ( 'images/screenshots/', $data['id'] . '_s' ) ); - $template->tag('image_url', image_url ( 'images/screenshots/', $data['id'] ) ); + $template->tag('previewimg', get_image_output ( '/screenshots', $data['id'] . '_s', $data['caption'] ) ); + $template->tag('previewimg_url', image_url ( '/screenshots', $data['id'] . '_s' ) ); + $template->tag('image_url', image_url ( '/screenshots', $data['id'] ) ); $template->tag('viewer_url', $link); $template->tag('caption', $data['caption']); $template->tag('cat_title', $data['cat_title']); diff --git a/www/applets/shop-system.php b/www/applets/shop-system.php index 569a203..66a9243 100644 --- a/www/applets/shop-system.php +++ b/www/applets/shop-system.php @@ -20,10 +20,10 @@ $template_item->tag('item_titel', $shop_arr['artikel_name'] ); $template_item->tag('item_url', $shop_arr['artikel_url'] ); $template_item->tag('item_price', $shop_arr['artikel_preis'] ); - $template_item->tag('item_image', get_image_output ( 'images/shop/', $shop_arr['artikel_id'], $shop_arr['artikel_name'] ) ); - $template_item->tag('item_image_url', image_url ( 'images/shop/', $shop_arr['artikel_id'] ) ); - $template_item->tag('item_small_image', get_image_output ( 'images/shop/', $shop_arr['artikel_id'].'_s' , $shop_arr['artikel_name'] ) ); - $template_item->tag('item_small_image_url', image_url ( 'images/shop/', $shop_arr['artikel_id'].'_s' ) ); + $template_item->tag('item_image', get_image_output ( '/shop', $shop_arr['artikel_id'], $shop_arr['artikel_name'] ) ); + $template_item->tag('item_image_url', image_url ( '/shop', $shop_arr['artikel_id'] ) ); + $template_item->tag('item_small_image', get_image_output ( '/shop', $shop_arr['artikel_id'].'_s' , $shop_arr['artikel_name'] ) ); + $template_item->tag('item_small_image_url', image_url ( '/shop', $shop_arr['artikel_id'].'_s' ) ); $applet_items[] = $template_item->display(); } diff --git a/www/applets/social-meta-tags.php b/www/applets/social-meta-tags.php index d45db56..444a207 100644 --- a/www/applets/social-meta-tags.php +++ b/www/applets/social-meta-tags.php @@ -87,7 +87,7 @@ function getImageFromContent($text) { preg_match_all('#\[(c?img).*\]([^\s]+)\[\/\1\]#', $text, $images, PREG_SET_ORDER); foreach ($images as $image) { if ($image[1] == 'cimg') { - $url = $FD->cfg('virtualhost').'media/content/'.$image[2]; + $url = FS2MEDIA.'/content/'.$image[2]; } else { $url = $image[2]; } @@ -169,8 +169,8 @@ function getImageFromContent($text) { $content->url = get_canonical_url(); $content->date = date('c', $downloads['dl_date']?:$downloads['dl_search_update']); $content->last_update = date('c', $downloads['dl_date']?:$downloads['dl_search_update']); - if (image_exists('images/downloads/', $downloads['dl_id'])) { - $content->image = image_url('images/downloads/', $downloads['dl_id']); + if (image_exists('/downloads', $downloads['dl_id'])) { + $content->image = image_url('/downloads', $downloads['dl_id']); } } } diff --git a/www/applets/user-menu.php b/www/applets/user-menu.php index 3d90f45..f97358c 100644 --- a/www/applets/user-menu.php +++ b/www/applets/user-menu.php @@ -8,8 +8,8 @@ // Get some data $user_id = $_SESSION['user_id']; settype ( $user_id, 'integer' ); - $image_url = image_url ( 'media/user-images/', $user_id ) ; - if ( image_exists ( 'media/user-images/', $user_id ) ) { + $image_url = image_url ( '/user-images', $user_id ) ; + if ( image_exists ( '/user-images', $user_id ) ) { $image_link = ''.$FD->text('frontend', 'user_image_of').' '.kill_replacements ( $_SESSION['user_name'], TRUE ).''; } else { $image_link = ''; diff --git a/www/classes/downloads/dlcomments.php b/www/classes/downloads/dlcomments.php index 54088e6..7a2efd5 100644 --- a/www/classes/downloads/dlcomments.php +++ b/www/classes/downloads/dlcomments.php @@ -211,8 +211,8 @@ $comment_arr['user_is_staff'] = $user_arr['user_is_staff']; $comment_arr['user_group'] = $user_arr['user_group']; - if (image_exists('media/user-images/',$comment_arr['comment_poster_id'])) { - $comment_arr['comment_avatar'] = ''.$comment_arr['comment_poster'].''; + if (image_exists('/user-images',$comment_arr['comment_poster_id'])) { + $comment_arr['comment_avatar'] = ''.$comment_arr['comment_poster'].''; } else { $comment_arr['comment_avatar'] = ''; } diff --git a/www/classes/downloads/dlfile.php b/www/classes/downloads/dlfile.php index 5847de6..4186181 100644 --- a/www/classes/downloads/dlfile.php +++ b/www/classes/downloads/dlfile.php @@ -33,9 +33,9 @@ $dl_arr['dl_autor_link'] = ''.$dl_arr['dl_autor'].''; } - $dl_arr['dl_bild'] = image_url( 'images/downloads/', $dl_arr['dl_id'] ); - if ( image_exists ( 'images/downloads/', $dl_arr['dl_id'] ) ) { - $dl_arr['viewer_link'] = url('viewer', array('single' => 1), false, array('file' => 'images/downloads/'.basename($dl_arr['dl_bild']))); + $dl_arr['dl_bild'] = image_url( '/downloads', $dl_arr['dl_id'] ); + if ( image_exists ( '/downloads', $dl_arr['dl_id'] ) ) { + $dl_arr['viewer_link'] = url('viewer', array('single' => 1), false, array('file' => 'media/downloads/'.basename($dl_arr['dl_bild']))); } else { $dl_arr['viewer_link'] = url('viewer', array('single' => 1), false, array('file' => 'styles/'.$FD->config('style').'/icons/image_error.gif')); } @@ -43,7 +43,7 @@ if ( $screen_config_arr['show_type'] == 1 ) { $dl_arr['viewer_link'] = "javascript:popUp('".urlencode($dl_arr['viewer_link'])."','popupviewer','".$screen_config_arr['show_size_x']."','".$screen_config_arr['show_size_y']."');"; } - $dl_arr['dl_thumb'] = image_url('images/downloads/', $dl_arr['dl_id'].'_s'); + $dl_arr['dl_thumb'] = image_url('/downloads', $dl_arr['dl_id'].'_s'); // Sonstige Daten ermitteln $dl_arr['dl_date'] = date_loc ( $FD->config('date'), $dl_arr['dl_date'] ); diff --git a/www/data/affiliates.php b/www/data/affiliates.php index c4bda69..563ac9d 100644 --- a/www/data/affiliates.php +++ b/www/data/affiliates.php @@ -24,8 +24,8 @@ $template->load('ENTRY'); $template->tag('url', $affiliates_arr['partner_link'] ); - $template->tag('img_url', image_url ( 'images/partner/', $affiliates_arr['partner_id'].'_big' ) ); - $template->tag('button_url', image_url ( 'images/partner/', $affiliates_arr['partner_id'].'_small' ) ); + $template->tag('img_url', image_url ( '/partner', $affiliates_arr['partner_id'].'_big' ) ); + $template->tag('button_url', image_url ( '/partner', $affiliates_arr['partner_id'].'_small' ) ); $template->tag('name', $affiliates_arr['partner_name'] ); $template->tag('text', $affiliates_arr['partner_beschreibung'] ); diff --git a/www/data/comments.php b/www/data/comments.php index 978914a..74e8710 100644 --- a/www/data/comments.php +++ b/www/data/comments.php @@ -228,8 +228,8 @@ $comment_arr['user_is_staff'] = $row['user_is_staff']; $comment_arr['user_group'] = $row['user_group']; - if (image_exists('media/user-images/',$comment_arr['comment_poster_id'])) { - $comment_arr['comment_avatar'] = ''.$comment_arr['comment_poster'].''; + if (image_exists('/user-images',$comment_arr['comment_poster_id'])) { + $comment_arr['comment_avatar'] = ''.$comment_arr['comment_poster'].''; } else { $comment_arr['comment_avatar'] = ''; } diff --git a/www/data/gallery.php b/www/data/gallery.php index 7264518..84659ca 100644 --- a/www/data/gallery.php +++ b/www/data/gallery.php @@ -73,13 +73,13 @@ $index = $FD->db()->conn()->query('SELECT * FROM '.$FD->env('DB_PREFIX')."wallpaper WHERE cat_id = $cat_arr[cat_id] ORDER BY wallpaper_id $config_arr[wp_sort] LIMIT $config_arr[page_start],$config_arr[pics_per_page]"); while ($wp_arr = $index->fetch(PDO::FETCH_ASSOC)) { - $wp_arr['thumb_url'] = image_url('images/wallpaper/', $wp_arr['wallpaper_name'].'_s'); + $wp_arr['thumb_url'] = image_url('/wallpaper', $wp_arr['wallpaper_name'].'_s'); $index2 = $FD->db()->conn()->query('SELECT * FROM '.$FD->env('DB_PREFIX')."wallpaper_sizes WHERE wallpaper_id = $wp_arr[wallpaper_id] ORDER BY size_id ASC"); $sizes = ''; while ($sizes_arr = $index2->fetch(PDO::FETCH_ASSOC)) { - $sizes_arr['url'] = image_url('images/wallpaper/', $wp_arr['wallpaper_name'].'_'.$sizes_arr['size']); + $sizes_arr['url'] = image_url('/wallpaper', $wp_arr['wallpaper_name'].'_'.$sizes_arr['size']); // Get Template $template = new template(); @@ -137,8 +137,8 @@ $pics = ''; while ($screen_arr = $index->fetch(PDO::FETCH_ASSOC)) { - $screen_arr['screen_thumb'] = image_url('images/screenshots/', $screen_arr['screen_id'].'_s'); - $screen_arr['screen_url'] = image_url('images/screenshots/', $screen_arr['screen_id'] ); + $screen_arr['screen_thumb'] = image_url('/screenshots', $screen_arr['screen_id'].'_s'); + $screen_arr['screen_url'] = image_url('/screenshots', $screen_arr['screen_id'] ); $screen_arr['img_link'] = url('viewer', array('id' => $screen_arr['screen_id'])); if ( $config_arr['show_type'] == 1 ) { $screen_arr['img_link'] = "javascript:popUp('".urlencode($screen_arr['img_link'])."','popupviewer','".$config_arr['show_size_x']."','".$config_arr['show_size_y']."');"; diff --git a/www/data/press.php b/www/data/press.php index 9813621..5699c7a 100644 --- a/www/data/press.php +++ b/www/data/press.php @@ -175,7 +175,7 @@ function get_num_of_levels ( $GAME, $CAT, $LANG ) { $template->tag('navi_url', url($navi_url ,$navi_url3)); $template->tag('title', $entry_arr['title'] ); - $template->tag('img_url', image_url ( 'images/press/', $entry_arr['type'].'_'.$entry_arr['id'] ) ); + $template->tag('img_url', image_url ( '/press', $entry_arr['type'].'_'.$entry_arr['id'] ) ); $template->tag('icon_url', $entry_arr['icon_url'] ); $template = $template->display (); @@ -214,7 +214,7 @@ function get_num_of_levels ( $GAME, $CAT, $LANG ) { $template->tag('navi_url', url($navi_url ,$navi_url2)); $template->tag('title', $entry_arr['title'] ); - $template->tag('img_url', image_url ( 'images/press/', $entry_arr['type'].'_'.$entry_arr['id'] ) ); + $template->tag('img_url', image_url ( '/press', $entry_arr['type'].'_'.$entry_arr['id'] ) ); $template->tag('icon_url', $entry_arr['icon_url'] ); $template = $template->display (); @@ -257,7 +257,7 @@ function get_num_of_levels ( $GAME, $CAT, $LANG ) { $template->tag('navi_url', url($navi_url, $navi_url1)); $template->tag('title', $entry_arr['title'] ); - $template->tag('img_url', image_url ( 'images/press/', $entry_arr['type'].'_'.$entry_arr['id'] ) ); + $template->tag('img_url', image_url ( '/press', $entry_arr['type'].'_'.$entry_arr['id'] ) ); $template->tag('icon_url', $entry_arr['icon_url'] ); $template = $template->display (); @@ -399,11 +399,11 @@ function get_num_of_levels ( $GAME, $CAT, $LANG ) { $template->tag('intro', ( $press_arr['press_intro'] != '' ) ? $press_arr['press_intro_formated'] : '' ); $template->tag('note', ( $press_arr['press_note'] != '' ) ? $press_arr['press_note_formated'] : '' ); $template->tag('game_title', $press_arr['press_game_title'] ); - $template->tag('game_img_url', image_url ( 'images/press/', '1_' . $press_arr['press_game'] ) ); + $template->tag('game_img_url', image_url ( '/press', '1_' . $press_arr['press_game'] ) ); $template->tag('cat_title', $press_arr['press_cat_title'] ); - $template->tag('cat_img_url', image_url ( 'images/press/', '2_' . $press_arr['press_cat'] ) ); + $template->tag('cat_img_url', image_url ( '/press', '2_' . $press_arr['press_cat'] ) ); $template->tag('lang_title', $press_arr['press_lang_title'] ); - $template->tag('lang_img_url', image_url ( 'images/press/', '3_' . $press_arr['press_lang'] ) ); + $template->tag('lang_img_url', image_url ( '/press', '3_' . $press_arr['press_lang'] ) ); $press_releases .= $template->display (); } diff --git a/www/data/shop.php b/www/data/shop.php index fc75cc1..dd728ca 100644 --- a/www/data/shop.php +++ b/www/data/shop.php @@ -20,8 +20,8 @@ settype ( $shop_arr['artikel_id'], 'integer' ); $shop_arr['artikel_text'] = fscode ( $shop_arr['artikel_text'], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ); - if (image_exists('images/shop/', $shop_arr['artikel_id'])) { - $imgurl = 'images/shop/'.basename(image_url('images/shop/', $shop_arr['artikel_id'])); + if (image_exists('/shop', $shop_arr['artikel_id'])) { + $imgurl = 'media/shop/'.basename(image_url('/shop', $shop_arr['artikel_id'])); } else { $imgurl = 'styles/'.$FD->config('style').'/icons/image_error.gif'; } @@ -39,11 +39,11 @@ $template_item->tag('item_text', $shop_arr['artikel_text'] ); $template_item->tag('item_url', $shop_arr['artikel_url'] ); $template_item->tag('item_price', $shop_arr['artikel_preis'] ); - $template_item->tag('item_image', get_image_output ( 'images/shop/', $shop_arr['artikel_id'], $shop_arr['artikel_name'] ) ); - $template_item->tag('item_image_url', image_url ( 'images/shop/', $shop_arr['artikel_id'] ) ); + $template_item->tag('item_image', get_image_output ( '/shop', $shop_arr['artikel_id'], $shop_arr['artikel_name'] ) ); + $template_item->tag('item_image_url', image_url ( '/shop', $shop_arr['artikel_id'] ) ); $template_item->tag('item_image_viewer_url', $shop_arr['viewer_url'] ); - $template_item->tag('item_small_image', get_image_output ( 'images/shop/', $shop_arr['artikel_id'].'_s' , $shop_arr['artikel_name'] ) ); - $template_item->tag('item_small_image_url', image_url ( 'images/shop/', $shop_arr['artikel_id'].'_s' ) ); + $template_item->tag('item_small_image', get_image_output ( '/shop', $shop_arr['artikel_id'].'_s' , $shop_arr['artikel_name'] ) ); + $template_item->tag('item_small_image_url', image_url ( '/shop', $shop_arr['artikel_id'].'_s' ) ); $shop_items[] = $template_item->display(); } diff --git a/www/data/user.php b/www/data/user.php index 7f5013c..983f8a5 100644 --- a/www/data/user.php +++ b/www/data/user.php @@ -27,7 +27,7 @@ if ( $user_arr!==false ) { $user_arr['user_name'] = kill_replacements ( $user_arr['user_name'], TRUE ); - $user_arr['user_image'] = ( image_exists ( 'media/user-images/', $user_arr['user_id'] ) ? ''.$FD->text('frontend', 'user_image_of').' '.$user_arr['user_name'].'' : $FD->text('frontend', 'user_image_not_found') ); + $user_arr['user_image'] = ( image_exists ( '/user-images', $user_arr['user_id'] ) ? ''.$FD->text('frontend', 'user_image_of').' '.$user_arr['user_name'].'' : $FD->text('frontend', 'user_image_not_found') ); $user_arr['user_mail'] = ( $user_arr['user_show_mail'] == 1 ? kill_replacements ( $user_arr['user_mail'], TRUE ) : '-' ); $user_arr['user_is_staff_text'] = ( $user_arr['user_is_staff'] == 1 || $user_arr['user_is_admin'] == 1 ? $FD->text('frontend', "'yes'") : $FD->text('frontend', "'no'") ); $user_arr['user_is_admin_text'] = ( $user_arr['user_is_admin'] == 1 ? $FD->text('frontend', "'yes'") : $FD->text('frontend', "'no'") ); @@ -93,7 +93,7 @@ $template->tag ( 'user_id', $user_arr['user_id'] ); $template->tag ( 'user_name', $user_arr['user_name'] ); $template->tag ( 'user_image', $user_arr['user_image'] ); - $template->tag ( 'user_image_url', image_url ( 'media/user-images/', $user_arr['user_id'] ) ); + $template->tag ( 'user_image_url', image_url ( '/user-images', $user_arr['user_id'] ) ); $template->tag ( 'user_rank', $user_arr['user_rank'] ); $template->tag ( 'user_mail', $user_arr['user_mail'] ); diff --git a/www/data/user_edit.php b/www/data/user_edit.php index 513acd2..600c037 100644 --- a/www/data/user_edit.php +++ b/www/data/user_edit.php @@ -18,15 +18,15 @@ // Upload & Delete User Image if ( isset ( $_POST['user_delete_image'] ) ) { - image_delete ( 'media/user-images/', $_SESSION['user_id'] ); + image_delete ( '/user-images', $_SESSION['user_id'] ); } elseif ( $_FILES['user_image']['tmp_name'] ) { - image_rename ( 'media/user-images/', $_SESSION['user_id'], $_SESSION['user_id'].'_old'); - $upload = upload_img ( $_FILES['user_image'], 'media/user-images/', $_SESSION['user_id'], $config_arr['avatar_size']*1024, $config_arr['avatar_x'], $config_arr['avatar_y'] ); + image_rename ( '/user-images', $_SESSION['user_id'], $_SESSION['user_id'].'_old'); + $upload = upload_img ( $_FILES['user_image'], '/user-images', $_SESSION['user_id'], $config_arr['avatar_size']*1024, $config_arr['avatar_x'], $config_arr['avatar_y'] ); $message = upload_img_notice ( $upload, FALSE ).'
'; if ( $upload != 0 ) { - image_delete ( 'media/user-images/', $_SESSION['user_id'].'_old' ); + image_delete ( '/user-images', $_SESSION['user_id'].'_old' ); } else { - image_rename ( 'media/user-images/', $_SESSION['user_id'].'_old', $_SESSION['user_id'] ); + image_rename ( '/user-images', $_SESSION['user_id'].'_old', $_SESSION['user_id'] ); } } initstr($message); @@ -152,7 +152,7 @@ $user_arr = $index->fetch(PDO::FETCH_ASSOC); $user_arr['user_name'] = kill_replacements ( $user_arr['user_name'], TRUE ); - $user_arr['user_image'] = ( image_exists ( 'media/user-images/', $user_arr['user_id'] ) ? ''.$FD->text(' : $FD->text("frontend", "user_image_not_found") ); + $user_arr['user_image'] = ( image_exists ( '/user-images', $user_arr['user_id'] ) ? ''.$FD->text(' : $FD->text("frontend", "user_image_not_found") ); $user_arr['user_homepage'] = ( $user_arr['user_homepage'] && trim ( $user_arr['user_homepage'] ) != 'http://' ? kill_replacements ( $user_arr['user_homepage'], TRUE ) : 'http://' ); // Create Template @@ -164,7 +164,7 @@ $template->tag ( 'user_id', $user_arr['user_id'] ); $template->tag ( 'user_name', $user_arr['user_name'] ); $template->tag ( 'user_image', $user_arr['user_image'] ); - $template->tag ( 'user_image_url', image_url ( 'media/user-images/', $user_arr['user_id'] ) ); + $template->tag ( 'user_image_url', image_url ( '/user-images', $user_arr['user_id'] ) ); $template->tag ( 'image_max_width', $config_arr['avatar_x'] ); $template->tag ( 'image_max_height', $config_arr['avatar_y'] ); $template->tag ( 'image_max_size', $config_arr['avatar_size'] ); diff --git a/www/data/user_list.php b/www/data/user_list.php index e63ae71..e7c2d4b 100644 --- a/www/data/user_list.php +++ b/www/data/user_list.php @@ -161,8 +161,8 @@ function get_user_list_arrows ( $SORT, $GET_SORT, $GET_ORDER ) { $line_template->tag ( 'user_id', $row['user_id'] ); $line_template->tag ( 'user_name', kill_replacements ( $row['user_name'], TRUE ) ); $line_template->tag ( 'user_url', url('user', array('id' => $row['user_id']))); - $line_template->tag ( 'user_image', ( image_exists ( 'media/user-images/', $row['user_id'] ) ) ? ''.$FD->text(' : $FD->text("frontend", "user_image_not_found") ); - $line_template->tag ( 'user_image_url', image_url ( 'media/user-images/', $row['user_id'] ) ); + $line_template->tag ( 'user_image', ( image_exists ( '/user-images', $row['user_id'] ) ) ? ''.$FD->text(' : $FD->text("frontend", "user_image_not_found") ); + $line_template->tag ( 'user_image_url', image_url ( '/user-images', $row['user_id'] ) ); $line_template->tag ( 'user_mail', ( $row['user_show_mail'] == 1 ) ? kill_replacements ( $row['user_mail'], TRUE ) : '-' ); $line_template->tag ( 'user_rank', $temp_rank_data ); $line_template->tag ( 'user_reg_date', date_loc ( $config_arr['user_list_reg_date_format'], $row['user_reg_date'] ) ); diff --git a/www/data/viewer.php b/www/data/viewer.php index 3a696e9..edb355b 100644 --- a/www/data/viewer.php +++ b/www/data/viewer.php @@ -35,9 +35,9 @@ WHERE `screen_id` = '.$_GET['id'].' LIMIT 0,1' ); - $data_array['image'] = image_url ( 'images/screenshots/', $_GET['id'], FALSE ); - $data_array['image_url'] = image_url ( 'images/screenshots/', $_GET['id'] ); - $data_array['image_sizeinfo'] = image_url ( 'images/screenshots/', $_GET['id'], FALSE, TRUE ); + $data_array['image'] = image_url ( '/screenshots', $_GET['id'], FALSE ); + $data_array['image_url'] = image_url ( '/screenshots', $_GET['id'] ); + $data_array['image_sizeinfo'] = image_url ( '/screenshots', $_GET['id'], FALSE, TRUE ); $row = $index->fetch(PDO::FETCH_ASSOC); if ( $row !== false ) { diff --git a/www/includes/adminfunctions.php b/www/includes/adminfunctions.php index 6522692..5b4adc7 100644 --- a/www/includes/adminfunctions.php +++ b/www/includes/adminfunctions.php @@ -573,7 +573,7 @@ function create_editor($name, $text='', $width='', $height='', $class='', $do_sm $index = $FD->db()->conn()->query('SELECT * FROM '.$FD->env('DB_PREFIX').'smilies ORDER by `order` ASC LIMIT 0, 10'); while ($smilie_arr = $index->fetch(PDO::FETCH_ASSOC)) { - $smilie_arr['url'] = image_url('images/smilies/', $smilie_arr['id'], false); + $smilie_arr['url'] = image_url('/smilies', $smilie_arr['id'], false); $smilie_template = '
'.$smilie_arr['replace_string'].''.$smilie_arr['replace_string'].' - +
- + '.$random_arr['title'].' aktiv vom '.$random_arr['start'].'
bis zum '.$random_arr['end'].'
@@ -297,7 +297,7 @@ echo'
- + '.$random_arr['screen_name'].' diff --git a/www/admin/admin_screenadd.php b/www/admin/admin_screenadd.php index e1cd7b0..f71d186 100644 --- a/www/admin/admin_screenadd.php +++ b/www/admin/admin_screenadd.php @@ -22,7 +22,7 @@ $id = $FD->db()->conn()->lastInsertId(); // File Operations - $upload = upload_img($_FILES['img'.$i], '/screenshots', $id, $config_arr['screen_size']*1024, $config_arr['screen_x'], $config_arr['screen_y']); + $upload = upload_img($_FILES['img'.$i], '/gallery', $id, $config_arr['screen_size']*1024, $config_arr['screen_x'], $config_arr['screen_y']); $log[$i][] = upload_img_notice($upload); // Upload Failed => Delete from DB @@ -31,7 +31,7 @@ // Else create Thumb } else { - $thumb = create_thumb_from(image_url('/screenshots', $id, FALSE, TRUE), $config_arr['screen_thumb_x'], $config_arr['screen_thumb_y']); + $thumb = create_thumb_from(image_url('/gallery', $id, FALSE, TRUE), $config_arr['screen_thumb_x'], $config_arr['screen_thumb_y']); $log[$i][] = create_thumb_notice($thumb); } diff --git a/www/admin/admin_screenedit.php b/www/admin/admin_screenedit.php index c0a1fc5..c0677a7 100644 --- a/www/admin/admin_screenedit.php +++ b/www/admin/admin_screenedit.php @@ -15,8 +15,8 @@ if ($_POST['delscreen']) // Delete Screenshot { $FD->db()->conn()->exec('DELETE FROM '.$FD->env('DB_PREFIX')."screen WHERE screen_id = $_POST[editscreenid]"); - image_delete('/screenshots', $_POST['editscreenid']); - image_delete('/screenshots', "$_POST[editscreenid]_s"); + image_delete('/gallery', $_POST['editscreenid']); + image_delete('/gallery', "$_POST[editscreenid]_s"); systext('Screenshot wurde gelöscht'); } else // Edit Screenshot @@ -49,9 +49,9 @@ if (isset($_POST['do']) && $_POST['do'] == 'newthumb') { - image_delete('/screenshots',$_POST['screenid'].'_s'); + image_delete('/gallery',$_POST['screenid'].'_s'); - $newthumb = @create_thumb_from(image_url('/screenshots',$_POST['screenid'],FALSE, TRUE),$config_arr['screen_thumb_x'],$config_arr['screen_thumb_y']); + $newthumb = @create_thumb_from(image_url('/gallery',$_POST['screenid'],FALSE, TRUE),$config_arr['screen_thumb_x'],$config_arr['screen_thumb_y']); systext(create_thumb_notice($newthumb)); } @@ -71,7 +71,7 @@ Thumbnail des Screenshots - +
- + '.killhtml($screen_arr['screen_name']).' diff --git a/www/applets/preview-image.php b/www/applets/preview-image.php index 13abfa1..4f06424 100644 --- a/www/applets/preview-image.php +++ b/www/applets/preview-image.php @@ -44,9 +44,9 @@ $template->setFile('0_previewimg.tpl'); $template->load('BODY'); - $template->tag('previewimg', get_image_output ( '/screenshots', $data['id'] . '_s', $data['caption'] ) ); - $template->tag('previewimg_url', image_url ( '/screenshots', $data['id'] . '_s' ) ); - $template->tag('image_url', image_url ( '/screenshots', $data['id'] ) ); + $template->tag('previewimg', get_image_output ( '/gallery', $data['id'] . '_s', $data['caption'] ) ); + $template->tag('previewimg_url', image_url ( '/gallery', $data['id'] . '_s' ) ); + $template->tag('image_url', image_url ( '/gallery', $data['id'] ) ); $template->tag('viewer_url', $link); $template->tag('caption', $data['caption']); $template->tag('cat_title', $data['cat_title']); diff --git a/www/data/gallery.php b/www/data/gallery.php index 84659ca..bd1b634 100644 --- a/www/data/gallery.php +++ b/www/data/gallery.php @@ -137,8 +137,8 @@ $pics = ''; while ($screen_arr = $index->fetch(PDO::FETCH_ASSOC)) { - $screen_arr['screen_thumb'] = image_url('/screenshots', $screen_arr['screen_id'].'_s'); - $screen_arr['screen_url'] = image_url('/screenshots', $screen_arr['screen_id'] ); + $screen_arr['screen_thumb'] = image_url('/gallery', $screen_arr['screen_id'].'_s'); + $screen_arr['screen_url'] = image_url('/gallery', $screen_arr['screen_id'] ); $screen_arr['img_link'] = url('viewer', array('id' => $screen_arr['screen_id'])); if ( $config_arr['show_type'] == 1 ) { $screen_arr['img_link'] = "javascript:popUp('".urlencode($screen_arr['img_link'])."','popupviewer','".$config_arr['show_size_x']."','".$config_arr['show_size_y']."');"; diff --git a/www/data/viewer.php b/www/data/viewer.php index edb355b..213d422 100644 --- a/www/data/viewer.php +++ b/www/data/viewer.php @@ -35,9 +35,9 @@ WHERE `screen_id` = '.$_GET['id'].' LIMIT 0,1' ); - $data_array['image'] = image_url ( '/screenshots', $_GET['id'], FALSE ); - $data_array['image_url'] = image_url ( '/screenshots', $_GET['id'] ); - $data_array['image_sizeinfo'] = image_url ( '/screenshots', $_GET['id'], FALSE, TRUE ); + $data_array['image'] = image_url ( '/gallery', $_GET['id'], FALSE ); + $data_array['image_url'] = image_url ( '/gallery', $_GET['id'] ); + $data_array['image_sizeinfo'] = image_url ( '/gallery', $_GET['id'], FALSE, TRUE ); $row = $index->fetch(PDO::FETCH_ASSOC); if ( $row !== false ) { diff --git a/www/media/screenshots/index.htm b/www/media/gallery/index.htm similarity index 100% rename from www/media/screenshots/index.htm rename to www/media/gallery/index.htm From 7ffecbc9aae7565fc87e820decd684b9b03fd0fd Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 14 Jan 2015 15:25:17 +1300 Subject: [PATCH 27/92] fixed imageviewer file feature Signed-off-by: Moritz Kornher --- www/data/viewer.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/www/data/viewer.php b/www/data/viewer.php index 213d422..b5deda5 100644 --- a/www/data/viewer.php +++ b/www/data/viewer.php @@ -21,10 +21,9 @@ // Any Image? if ( isset ( $_GET['file'] ) && $_GET['file'] != '' ) { - $path_parts = pathinfo ( urldecode($_GET['file']) ); - $data_array['image'] = image_url ( $path_parts['dirname'].'/', $path_parts['filename'], FALSE ); - $data_array['image_url'] = image_url ( $path_parts['dirname'].'/', $path_parts['filename'] ); - $data_array['image_sizeinfo'] = image_url ( $path_parts['dirname'].'/', $path_parts['filename'], FALSE, TRUE ); + $data_array['image'] = $FD->cfg('virtualhost').urldecode($_GET['file']); + $data_array['image_url'] = $data_array['image']; + $data_array['image_sizeinfo'] = $data_array['image']; $image_found = TRUE; // Gallery Image From b18e9262a277aae190f8c8cb91c55637006dc489 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 14 Jan 2015 15:27:30 +1300 Subject: [PATCH 28/92] removed unused function Signed-off-by: Moritz Kornher --- www/includes/functions.php | 54 -------------------------------------- 1 file changed, 54 deletions(-) diff --git a/www/includes/functions.php b/www/includes/functions.php index 19f5311..826c8b9 100644 --- a/www/includes/functions.php +++ b/www/includes/functions.php @@ -251,60 +251,6 @@ function get_sub_cats ( $CAT_ID, $REC_SUB_CAT_ARRAY ) return $sub_cat_ids; } -///////////////////////////////// -//// Create DL-Folder-System //// -///////////////////////////////// -function create_dl_cat ($CAT_ID, $GET_ID, $NAVI_TEMPLATE) { - global $FD; - static $navi; - static $i = 0; - - $i++; - $data[$CAT_ID] = $FD->db()->conn()->query ( ' - SELECT * - FROM `'.$FD->env('DB_PREFIX')."dl_cat` - WHERE `subcat_id` = '".$CAT_ID."'" ); - - while ( $array = $data[$CAT_ID]->fetch(PDO::FETCH_ASSOC) ) { - $index = $FD->db()->conn()->query ( ' - SELECT `cat_id` - FROM `'.$FD->env('DB_PREFIX')."dl_cat` - WHERE `subcat_id` = '".$array['cat_id']."'"); - $all_subcats = $index->fetchAll(PDO::FETCH_ASSOC); - $num_subcat = is_array ( $all_subcats ) ? count($all_subcats) : 0; - - unset ( $ids ); - $ids = get_sub_cats ( $array['cat_id'], array() ); - - $template = $NAVI_TEMPLATE; - $cat_url = url('download', array('catid' => $array['cat_id'])); - $top_url = url('download', array('catid' => $array['subcat_id'])); - $folder = ( $array['cat_id'] == $GET_ID ? 'folder_open.gif' : 'folder.gif' ); - $open = ( ( $array['cat_id'] == $GET_ID || in_array ( $GET_ID, $ids ) ) ? 'minus.gif' : 'plus.gif' ); - $open_url = ( ( $array['cat_id'] == $GET_ID || in_array ( $GET_ID, $ids ) ) ? $top_url : $cat_url ); - $nbsp = str_repeat( ' ', $i-1); - - $template = str_repeat( '', $i-1) . $template; - - if ( $num_subcat <= 0 ) { - $template = str_replace( '{open_link}', $nbsp.'', $template ); - } - $template = str_replace( '{open_link}', $nbsp.'', $template ); - $template = str_replace( '{folder_link}', ' ', $template ); - - $template = str_replace( '{cat_url}', $cat_url, $template); - $template = str_replace( '{cat_name}', $array['cat_name'], $template ); - $template = str_replace( '{class}', ( $array['cat_id'] == $GET_ID ? ' active' : '' ), $template); - - $navi .= $template; - if ( $array['cat_id'] == $GET_ID || in_array ( $GET_ID, $ids ) ) { - create_dl_cat ( $array['cat_id'], $GET_ID, $NAVI_TEMPLATE ); - } - } - $i--; - return $navi; -} - //////////////////////////////////////// //// Get Preview Image by Timetable //// From fec25425304532fc38d83a4958b2fac50f583a56 Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Wed, 14 Jan 2015 15:40:13 +1300 Subject: [PATCH 29/92] added missing lang-texts Signed-off-by: Moritz Kornher --- www/admin/admin_user_config.php | 4 ++-- www/lang/de_DE/admin/admin_user_config.txt | 2 ++ www/lang/de_DE/from_phrases.txt | 2 -- www/lang/en_US/admin/admin_user_config.txt | 2 ++ www/lang/en_US/from_phrases.txt | 2 -- 5 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 www/lang/de_DE/admin/admin_user_config.txt create mode 100644 www/lang/en_US/admin/admin_user_config.txt diff --git a/www/admin/admin_user_config.php b/www/admin/admin_user_config.php index 8146956..51dd0e4 100644 --- a/www/admin/admin_user_config.php +++ b/www/admin/admin_user_config.php @@ -106,7 +106,7 @@
- '.$FD->text("page", "date_info").' + '.$FD->text("admin", "date_info").'

- '.$FD->text("page", "date_info").' + '.$FD->text("admin", "date_info").'
a"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName( "tbody" ).length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = + document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + input.type = "checkbox"; + input.checked = true; + fragment.appendChild( input ); + support.appendChecked = input.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE6-IE11+ + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // #11217 - WebKit loses check when the name is after the checked attribute + fragment.appendChild( div ); + div.innerHTML = ""; + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + support.noCloneEvent = true; + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } +})(); + + +(function() { + var i, eventName, + div = document.createElement( "div" ); + + // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event) + for ( i in { submit: true, change: true, focusin: true }) { + eventName = "on" + i; + + if ( !(support[ i + "Bubbles" ] = eventName in window) ) { + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + div.setAttribute( eventName, "t" ); + support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + // Support: IE < 9, Android < 4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + jQuery._removeData( doc, fix ); + } else { + jQuery._data( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /
", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!support.noCloneEvent || !support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted
, *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + deletedIds.push( id ); + } + } + } + } + } +}); + +jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[i], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optmization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( " @@ -202,4 +208,89 @@ function get_video_bbcode($url, $title, $type, $dl_id = 0) { } return '[url='.$url.']'.$content.'[/url]'; } + + +function get_player_flashvars(array $config = array()) { + $allowed_options = array( + 'autoplay', + 'autoload', + 'buffer', + 'buffermessage', + 'buffercolor', + 'bufferbgcolor', + 'buffershowbg', + 'titlesize', + 'titlecolor', + 'margin', + 'showstop', + 'showvolume', + 'showtime', + 'showplayer', + 'showloading', + 'showfullscreen', + 'showmouse', + 'loop', + 'playercolor', + 'loadingcolor', + 'bgcolor', + 'bgcolor1', + 'bgcolor2', + 'buttoncolor', + 'buttonovercolor', + 'slidercolor1', + 'slidercolor2', + 'sliderovercolor', + 'loadonstop', + 'onclick', + 'ondoubleclick', + 'playertimeout', + 'videobgcolor', + 'volume', + 'shortcut', + 'playeralpha', + 'top1', + 'showiconplay', + 'iconplaycolor', + 'iconplaybgcolor', + 'iconplaybgalpha', + 'showtitleandstartimage', + ); + + global $FD; + + $FD->loadConfig('video_player'); + $config_arr = $FD->configObject('video_player')->getConfigArray(); + + + if ( strlen ( $config_arr['cfg_top1_url'] ) > 0 ) { + $config_arr['cfg_top1'] = $config_arr['cfg_top1_url'].'|'.$config_arr['cfg_top1_x'].'|'.$config_arr['cfg_top1_y']; + } else { + $config_arr['cfg_top1'] = ''; + } + + // kill color hashes + $config_arr = array_map(create_function('$ele', ' + if (is_hexcolor($ele)) + $ele = substr($ele, 1); + return $ele; + '), $config_arr); + + // merge config array + $the_conf = array(); + foreach ($config_arr as $conf => $value) { + $conf = substr($conf, 4); + if (in_array($conf, $allowed_options)) { + $the_conf[$conf] = $value; + } + } + $the_conf = array_merge($the_conf, $config); + + // create output array + $the_output = array(); + foreach ($the_conf as $conf => $value) { + $the_output[] = $conf.'='.$value; + } + return implode('&', $the_output); + +} ?> diff --git a/www/resources/index.htm b/www/resources/index.htm deleted file mode 100644 index 90a3130..0000000 --- a/www/resources/index.htm +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/www/resources/player/index.htm b/www/resources/player/index.htm deleted file mode 100644 index 90a3130..0000000 --- a/www/resources/player/index.htm +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/www/resources/player/player_flv_config.php b/www/resources/player/player_flv_config.php deleted file mode 100644 index b9eb773..0000000 --- a/www/resources/player/player_flv_config.php +++ /dev/null @@ -1,100 +0,0 @@ -db()->conn() ) -{ - $FD->loadConfig('video_player'); - $config_arr = $FD->configObject('video_player')->getConfigArray(); - - // security functions - settype ( $config_arr['cfg_loop'], 'integer' ); - settype ( $config_arr['cfg_autoplay'], 'integer' ); - settype ( $config_arr['cfg_autoload'], 'integer' ); - settype ( $config_arr['cfg_volume'], 'integer' ); - settype ( $config_arr['cfg_margin'], 'integer' ); - settype ( $config_arr['cfg_showstop'], 'integer' ); - settype ( $config_arr['cfg_showvolume'], 'integer' ); - settype ( $config_arr['cfg_showtime'], 'integer' ); - settype ( $config_arr['cfg_playertimeout'], 'integer' ); - settype ( $config_arr['cfg_showfullscreen'], 'integer' ); - settype ( $config_arr['cfg_playeralpha'], 'integer' ); - settype ( $config_arr['cfg_buffer'], 'integer' ); - settype ( $config_arr['cfg_buffershowbg'], 'integer' ); - settype ( $config_arr['cfg_titlesize'], 'integer' ); - settype ( $config_arr['cfg_shortcut'], 'integer' ); - settype ( $config_arr['cfg_showiconplay'], 'integer' ); - settype ( $config_arr['cfg_showtitleandstartimage'], 'integer' ); - settype ( $config_arr['cfg_iconplaybgalpha'], 'integer' ); - settype ( $config_arr['cfg_top1_x'], 'integer' ); - settype ( $config_arr['cfg_top1_y'], 'integer' ); - settype ( $config_arr['cfg_loadonstop'], 'integer' ); - -if ( strlen ( $config_arr['cfg_top1_url'] ) > 0 ) { - $config_arr['cfg_top1'] = $config_arr['cfg_top1_url'].'|'.$config_arr['cfg_top1_x'].'|'.$config_arr['cfg_top1_y']; -} else { - $config_arr['cfg_top1'] = ''; -} - -// kill color hashes -$config_arr = array_map(create_function('$ele', ' - if (is_hexcolor($ele)) - $ele = substr($ele, 1); - return $ele; -'), $config_arr); - - echo 'autoplay='.$config_arr['cfg_autoplay'].' -autoload='.$config_arr['cfg_autoload'].' -buffer='.$config_arr['cfg_buffer'].' -buffermessage='.$config_arr['cfg_buffermessage'].' -buffercolor='.$config_arr['cfg_buffercolor'].' -bufferbgcolor='.$config_arr['cfg_bufferbgcolor'].' -buffershowbg='.$config_arr['cfg_buffershowbg'].' -titlesize='.$config_arr['cfg_titlesize'].' -titlecolor='.$config_arr['cfg_titlecolor'].' -margin='.$config_arr['cfg_margin'].' -showstop='.$config_arr['cfg_showstop'].' -showvolume='.$config_arr['cfg_showvolume'].' -showtime='.$config_arr['cfg_showtime'].' -showplayer='.$config_arr['cfg_showplayer'].' -showloading='.$config_arr['cfg_showloading'].' -showfullscreen='.$config_arr['cfg_showfullscreen'].' -showmouse='.$config_arr['cfg_showmouse'].' -loop='.$config_arr['cfg_loop'].' -playercolor='.$config_arr['cfg_playercolor'].' -loadingcolor='.$config_arr['cfg_loadingcolor'].' -bgcolor='.$config_arr['cfg_bgcolor'].' -bgcolor1='.$config_arr['cfg_bgcolor1'].' -bgcolor2='.$config_arr['cfg_bgcolor2'].' -buttoncolor='.$config_arr['cfg_buttoncolor'].' -buttonovercolor='.$config_arr['cfg_buttonovercolor'].' -slidercolor1='.$config_arr['cfg_slidercolor1'].' -slidercolor2='.$config_arr['cfg_slidercolor2'].' -sliderovercolor='.$config_arr['cfg_sliderovercolor'].' -loadonstop='.$config_arr['cfg_loadonstop'].' -onclick='.$config_arr['cfg_onclick'].' -ondoubleclick='.$config_arr['cfg_ondoubleclick'].' -playertimeout='.$config_arr['cfg_playertimeout'].' -videobgcolor='.$config_arr['cfg_videobgcolor'].' -volume='.$config_arr['cfg_volume'].' -shortcut='.$config_arr['cfg_shortcut'].' -playeralpha='.$config_arr['cfg_playeralpha'].' -top1='.$config_arr['cfg_top1'].' -showiconplay='.$config_arr['cfg_showiconplay'].' -iconplaycolor='.$config_arr['cfg_iconplaycolor'].' -iconplaybgcolor='.$config_arr['cfg_iconplaybgcolor'].' -iconplaybgalpha='.$config_arr['cfg_iconplaybgalpha'].' -showtitleandstartimage='.$config_arr['cfg_showtitleandstartimage'].''; -} -?> From c2a98d2d6342d1119839fb7998ba085349f0507d Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Mon, 19 Jan 2015 16:34:06 +1300 Subject: [PATCH 55/92] updated colpicker Signed-off-by: Moritz Kornher --- assets/js/admin/_colorpicker.js | 2 +- www/admin/js/admin.js | 51 +++++++++++++++++++++------------ 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/assets/js/admin/_colorpicker.js b/assets/js/admin/_colorpicker.js index 213f314..9e1953a 100644 --- a/assets/js/admin/_colorpicker.js +++ b/assets/js/admin/_colorpicker.js @@ -26,7 +26,7 @@ $(document).ready(function(){ var colorPreview = $(''); colorPreview.css('background-color', '#' + $(this).val()); colorPreview.click(function() { - $(this).prev('.colorpicker').colpickShow();; + $(this).prev('.colorpicker').colpickShow(); }); return colorPreview; }) diff --git a/www/admin/js/admin.js b/www/admin/js/admin.js index aa6ce40..a12c23a 100644 --- a/www/admin/js/admin.js +++ b/www/admin/js/admin.js @@ -1,4 +1,4 @@ -/*! Frogsystem2 - v2.0.0-alix7 - 2015-01-18 +/*! Frogsystem2 - v2.0.0-alix7 - 2015-01-19 * https://github.com/mrgrain/Frogsystem-2 * Copyright (c) 2015 ; Licensed CC BY-SA 3.0 DE */ /*! @@ -10348,7 +10348,18 @@ return jQuery; })); -(function ($) { +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS + factory(require('jquery')); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { var colpick = function () { var tpl = '
#
R
G
B
H
S
B
', @@ -10360,7 +10371,7 @@ return jQuery; onChange: function () {}, onSubmit: function () {}, colorScheme: 'light', - color: '3289c7', + color: 'auto', livePreview: true, flat: false, layout: 'full', @@ -10599,8 +10610,12 @@ return jQuery; cal.mousedown(function(ev){ev.stopPropagation();}) }, hide = function (ev) { - if (ev.data.cal.data('colpick').onHide.apply(this, [ev.data.cal.get(0)]) != false) { - ev.data.cal.hide(); + var cal = $('#' + $(this).data('colpickId')); + if (ev) { + cal = ev.data.cal; + } + if (cal.data('colpick').onHide.apply(this, [cal.get(0)]) != false) { + cal.hide(); } $('html').off('mousedown', hide); }, @@ -10653,7 +10668,8 @@ return jQuery; init: function (opt) { opt = $.extend({}, defaults, opt||{}); //Set color - if (typeof opt.color == 'string') { + if (opt.color === 'auto') { + } else if (typeof opt.color == 'string') { opt.color = hexToHsb(opt.color); } else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) { opt.color = rgbToHsb(opt.color); @@ -10668,18 +10684,17 @@ return jQuery; //If the element does not have an ID if (!$(this).data('colpickId')) { var options = $.extend({}, opt); - options.origColor = opt.color; - - // Set polyfill + //Color + if (opt.color === 'auto') { + options.color = $(this).val() ? hexToHsb($(this).val()) : {h:0,s:0,b:0}; + } + options.origColor = options.color; + + //Polyfill if (typeof opt.polyfill == 'function') { options.polyfill = opt.polyfill(this); } - - //Input field operations - options.input = $(this).is('input'); - - //Polyfill fixes - if (options.polyfill && options.input && this.type === "color") { + if (options.polyfill && $(this).is('input') && this.type === "color") { return; } @@ -10763,7 +10778,7 @@ return jQuery; hidePicker: function() { return this.each( function () { if ($(this).data('colpickId')) { - $('#' + $(this).data('colpickId')).hide(); + hide.apply(this); } }); }, @@ -10884,7 +10899,7 @@ return jQuery; hexToRgb: hexToRgb } }); -})(jQuery); +})); //-------------------------------- // START - Document Ready Functions @@ -11323,7 +11338,7 @@ $(document).ready(function(){ var colorPreview = $(''); colorPreview.css('background-color', '#' + $(this).val()); colorPreview.click(function() { - $(this).prev('.colorpicker').colpickShow();; + $(this).prev('.colorpicker').colpickShow(); }); return colorPreview; }) From 59632b6f70f503ca479e29bc3d7d49a915dcc36f Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Mon, 19 Jan 2015 17:55:47 +1300 Subject: [PATCH 56/92] Added Settings Page Signed-off-by: Moritz Kornher --- www/admin/admin_social_meta_tags.php | 125 ++++++++++++ .../templates/admin_social_meta_tags.tpl | 183 ++++++++++++++++++ .../de_DE/admin/admin_social_meta_tags.txt | 42 ++++ www/lang/de_DE/menu.txt | 5 + www/lang/en_US/menu.txt | 5 + 5 files changed, 360 insertions(+) create mode 100644 www/admin/admin_social_meta_tags.php create mode 100644 www/admin/templates/admin_social_meta_tags.tpl create mode 100644 www/lang/de_DE/admin/admin_social_meta_tags.txt diff --git a/www/admin/admin_social_meta_tags.php b/www/admin/admin_social_meta_tags.php new file mode 100644 index 0000000..106b3bf --- /dev/null +++ b/www/admin/admin_social_meta_tags.php @@ -0,0 +1,125 @@ + true, + //~ 'google_plus_page' => '', // with + + //~ + //~ 'use_twitter_card' => true, + //~ 'twitter_site' => '', // with @ + //~ + //~ 'use_open_graph' => true, + //~ 'fb_admins' => '', // CSV => http://findmyfacebookid.com/ + //~ 'og_section' => '', // A high-level section name. E.g. Technology + //~ + //~ 'use_schema_org' => true, +//~ +//~ +//~ + //~ // minimal info, this is a MUST + //~ 'site_name' => '', + //~ 'default_image' => '', // min. 200x200px, better 280x200px, no https! + //~ 'news_cat_prepend' => ': ', // false or delimiter string +//~ +//~ + //~ // enable use for content types + //~ 'enable_news' => true, + //~ 'enable_articles' => true, + //~ 'enable_downloads' => true, + +////////////////////////////// +//// update configuration //// +////////////////////////////// +if ( + isset($_POST['sended']) + && (!$_POST['use_google_plus'] || !empty($_POST['google_plus_page'])) + && (!$_POST['use_twitter_card'] || !empty($_POST['twitter_site'])) + && (!$_POST['use_open_graph'] || (!empty($_POST['fb_admins']) && !empty($_POST['og_section']))) + && (!$_POST['use_news_cat_prepend'] || !empty($_POST['news_cat_prepend'])) + ) +{ + // prepare data + $data = frompost($used_cols); + + // security functions + settype($data['use_google_plus'], 'boolean'); + settype($data['use_twitter_card'], 'boolean'); + settype($data['use_open_graph'], 'boolean'); + settype($data['use_schema_org'], 'boolean'); + settype($data['use_news_cat_prepend'], 'boolean'); + settype($data['enable_news'], 'boolean'); + settype($data['enable_articles'], 'boolean'); + settype($data['enable_downloads'], 'boolean'); + + settype($data['google_plus_page'], 'string'); + settype($data['twitter_site'], 'string'); + settype($data['fb_admins'], 'string'); + settype($data['og_section'], 'string'); + settype($data['site_name'], 'string'); + settype($data['default_image'], 'string'); + settype($data['news_cat_prepend'], 'string'); + + // save config + try { + $FD->saveConfig('social_meta_tags', $data); + systext($FD->text('admin', 'config_saved'), $FD->text('admin', 'info'), 'green', $FD->text('admin', 'icon_save_ok')); + } catch (Exception $e) { + systext( + $FD->text('admin', 'config_not_saved').'
'. + (DEBUG ? $e->getMessage() : $FD->text('admin', 'unknown_error')), + $FD->text('admin', 'error'), 'red', $FD->text('admin', 'icon_save_error') + ); + } + + // Unset Vars + unset($_POST); +} + +///////////////////////////////// +////// Konfiguration Form /////// +///////////////////////////////// + +if ( TRUE ) +{ + // Display Error Messages + if (isset($_POST['sended'])) { + systext($FD->text('admin', 'changes_not_saved').'
'.$FD->text('admin', 'form_not_filled'), $FD->text('admin', 'error'), 'red', $FD->text('admin', 'icon_save_error')); + + // Load Data from DB into Post + } else { + $FD->loadConfig('social_meta_tags'); + $data = $FD->configObject('social_meta_tags')->getConfigArray(); + putintopost($data); + } + + // security functions + $_POST = array_map('killhtml', $_POST); + + // Conditions + $adminpage->addCond('use_google_plus', $_POST['use_google_plus'] === 1); + $adminpage->addCond('use_twitter_card', $_POST['use_twitter_card'] === 1); + $adminpage->addCond('use_open_graph', $_POST['use_open_graph'] === 1); + $adminpage->addCond('use_schema_org', $_POST['use_schema_org'] === 1); + $adminpage->addCond('enable_news', $_POST['enable_news'] === 1); + $adminpage->addCond('enable_articles', $_POST['enable_articles'] === 1); + $adminpage->addCond('enable_downloads', $_POST['enable_downloads'] === 1); + $adminpage->addCond('use_news_cat_prepend', $_POST['use_news_cat_prepend'] === 1); + + // Values + foreach ($_POST as $key => $value) { + $adminpage->addText($key, $value); + } + + // Display page + echo $adminpage->get('main'); +} + +?> diff --git a/www/admin/templates/admin_social_meta_tags.tpl b/www/admin/templates/admin_social_meta_tags.tpl new file mode 100644 index 0000000..bad7c63 --- /dev/null +++ b/www/admin/templates/admin_social_meta_tags.tpl @@ -0,0 +1,183 @@ + +
+ + + +
+ + + + + + + + + + + + + + class="hidden" id="use_news_cat_prepend_tr"> + + + + + + + + + + + class="hidden" id="use_google_plus_tr"> + + + + + + + + + + + class="hidden" id="use_twitter_card_tr"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +


+ ()
+ +
+ +
+ ()
+ +
+
+ +
+
+ +
+ + checked + onChange="$('#use_news_cat_prepend_tr').toggle()" > +
+ ()
+ +
+ +


+
+ +
+ + checked + onChange="$('#use_google_plus_tr').toggle()" > +
+
+ +
+ +


+
+ +
+ + checked + onChange="$('#use_twitter_card_tr').toggle()" > +
+
+ +
+ +


+
+ +
+ + checked + onChange="$('.use_open_graph_tr').toggle()" > +
+
+ +
+
+ +
+
+ +
+ +


+
+ +
+ + checked> +


+
+ +
+ + checked> +
+
+ +
+ + checked> +
+
+ +
+ + checked> +
+ +
+ + diff --git a/www/lang/de_DE/admin/admin_social_meta_tags.txt b/www/lang/de_DE/admin/admin_social_meta_tags.txt new file mode 100644 index 0000000..20c477c --- /dev/null +++ b/www/lang/de_DE/admin/admin_social_meta_tags.txt @@ -0,0 +1,42 @@ +settings_title: Einstellungen +site_name: Name der Seite +site_name_desc: Frei lassen um Standardtitel zu verwenden. +default_image: Standard Vorschaubild +default_image_desc: URL zu einem Bild, das verwendet wird, falls kein passendes Bild im Inhalt gefunden wurde +default_image_info: Kein https:// - min. 200x200 Pixel (besser 280x200 Pixel) +use_news_cat_prepend: Newstitel um Kategorie erweitern +use_news_cat_prepend_desc: Erweitert den Newstitel um den Name der Kategorie +news_cat_prepend: Erweiterung +news_cat_prepend_desc: Kategorie + Erweiterung + Newstitel + +googleplus_title: Google+ +use_google_plus: Google+ verwenden +use_google_plus_desc: Aktiviert Meta Tags für Nutzung in Google+ +google_plus_page: Google+ Seite +google_plus_page_desc: Name der zugehörigen Google+ Seite + +twitter_title: Twitter Card +use_twitter_card: Twitter Card verwenden +use_twitter_card_desc: Aktiviert Meta Tags für Nutzung in Twitter +twitter_site: Twitter-Account +twitter_site_desc: Name des zugehörigen Twitter-Accounts + +facebook_title: Facebook Open Graph +use_open_graph: Open Graph verwenden +use_open_graph_desc: Aktiviert Meta Tags für Nutzung in Facebook +fb_admins: Facebook Admins +fb_admins_desc: IDs aller Admins der Facebook-Seite
Find your Facebook ID +og_section: Open Graph Kategorie +og_section_desc: Eine übergeordnete Kategorie, z.B. Technology + +schemaorg_title: Schema.org Meta Tags +use_schema_org: Schema.org verwenden +use_schema_org_desc: Aktiviert Meta Tags nach Schema.org + +enable_for_title: Verwendung +enable_news: News +enable_news_desc: Social Meta Tags bei News verwenden +enable_articles: Artikel +enable_articles_desc: Social Meta Tags bei Artikeln verwenden +enable_downloads: Downloads +enable_downloads_desc: Social Meta Tags bei Downloads verwenden diff --git a/www/lang/de_DE/menu.txt b/www/lang/de_DE/menu.txt index 45ecd57..fdfb300 100644 --- a/www/lang/de_DE/menu.txt +++ b/www/lang/de_DE/menu.txt @@ -45,6 +45,7 @@ group_aliases: Aliasse group_search: Suche group_fscodes: FS Codes group_db: Datenbank +group_socialmedia: Social Media # Startseiten page_title_start_general: Allgemein @@ -369,3 +370,7 @@ page_title_article_preview: Artikel-Vorschau # Datenbank page_title_table_admin: Tabellen page_link_table_admin: Tabellen + +# Social Media +page_title_social_meta_tags: Social Meta Tags +page_link_social_meta_tags: Meta Tags diff --git a/www/lang/en_US/menu.txt b/www/lang/en_US/menu.txt index 878328b..039eef9 100644 --- a/www/lang/en_US/menu.txt +++ b/www/lang/en_US/menu.txt @@ -45,6 +45,7 @@ group_aliases: Aliases group_search: Search group_fscodes: FSCodes group_db: Database +group_socialmedia: Social Media # Startseiten page_title_start_general: General @@ -369,3 +370,7 @@ page_title_article_preview: Article preview # Datenbank page_title_table_admin: Tables page_link_table_admin: Tables + +# Social Media +page_title_social_meta_tags: Social Meta Tags +page_link_social_meta_tags: Meta Tags From 68edd4950f47efee0868508a189cc04bb55d04cc Mon Sep 17 00:00:00 2001 From: Moritz Kornher Date: Tue, 20 Jan 2015 15:27:38 +1300 Subject: [PATCH 57/92] use config in output added check for external images fixed strip_tags bug in fscode.php Signed-off-by: Moritz Kornher --- db.sql | 963 +++++++++++++----- www/admin/admin_social_meta_tags.php | 41 +- .../templates/admin_social_meta_tags.tpl | 14 +- www/applets/social-meta-tags.php | 133 ++- .../de_DE/admin/admin_social_meta_tags.txt | 11 +- www/libs/includes/fscode.php | 8 +- www/styles/lightfrog/0_main.tpl | 1 + 7 files changed, 779 insertions(+), 392 deletions(-) diff --git a/db.sql b/db.sql index 26b9703..80ab26a 100644 --- a/db.sql +++ b/db.sql @@ -1,11 +1,11 @@ -- phpMyAdmin SQL Dump --- version 4.0.4 +-- version 4.2.0 -- http://www.phpmyadmin.net -- --- Host: localhost --- Erstellungszeit: 24. Mai 2014 um 11:41 --- Server Version: 5.6.12-log --- PHP-Version: 5.4.12 +-- Host: 127.0.0.1 +-- Generation Time: Jan 20, 2015 at 03:22 AM +-- Server version: 5.6.15-log +-- PHP Version: 5.4.36 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; @@ -17,15 +17,13 @@ SET time_zone = "+00:00"; /*!40101 SET NAMES utf8 */; -- --- Datenbank: `fs2` +-- Database: `fs2` -- -CREATE DATABASE IF NOT EXISTS `fs2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; -USE `fs2`; -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_admin_cp` +-- Table structure for table `fs2_admin_cp` -- DROP TABLE IF EXISTS `fs2_admin_cp`; @@ -34,12 +32,11 @@ CREATE TABLE IF NOT EXISTS `fs2_admin_cp` ( `group_id` varchar(20) NOT NULL, `page_file` varchar(255) NOT NULL, `page_pos` tinyint(3) NOT NULL DEFAULT '0', - `page_int_sub_perm` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`page_id`) + `page_int_sub_perm` tinyint(1) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_admin_cp` +-- Dumping data for table `fs2_admin_cp` -- INSERT INTO `fs2_admin_cp` (`page_id`, `group_id`, `page_file`, `page_pos`, `page_int_sub_perm`) VALUES @@ -163,12 +160,13 @@ INSERT INTO `fs2_admin_cp` (`page_id`, `group_id`, `page_file`, `page_pos`, `pag ('timedpic_add', 'gallery_preview', 'admin_randompic_time_add.php', 3, 0), ('timedpic_edit', 'gallery_preview', 'admin_randompic_time.php', 4, 0), ('statgfx', 'popup', 'admin_statgfx.php', 0, 0), -('table_admin', 'db', 'admin_table_admin.php', 1, 0); +('table_admin', 'db', 'admin_table_admin.php', 1, 0), +('social_meta_tags', 'socialmedia', 'admin_social_meta_tags.php', 1, 0); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_admin_groups` +-- Table structure for table `fs2_admin_groups` -- DROP TABLE IF EXISTS `fs2_admin_groups`; @@ -179,7 +177,7 @@ CREATE TABLE IF NOT EXISTS `fs2_admin_groups` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; -- --- Daten für Tabelle `fs2_admin_groups` +-- Dumping data for table `fs2_admin_groups` -- INSERT INTO `fs2_admin_groups` (`group_id`, `menu_id`, `group_pos`) VALUES @@ -210,12 +208,13 @@ INSERT INTO `fs2_admin_groups` (`group_id`, `menu_id`, `group_pos`) VALUES ('aliases', 'system', 3), ('db', 'system', 4), ('search', 'general', 4), -('popup', 'none', 0); +('popup', 'none', 0), +('socialmedia', 'promo', 3); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_admin_inherited` +-- Table structure for table `fs2_admin_inherited` -- DROP TABLE IF EXISTS `fs2_admin_inherited`; @@ -225,7 +224,7 @@ CREATE TABLE IF NOT EXISTS `fs2_admin_inherited` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_admin_inherited` +-- Dumping data for table `fs2_admin_inherited` -- INSERT INTO `fs2_admin_inherited` (`group_id`, `pass_to`) VALUES @@ -239,21 +238,19 @@ INSERT INTO `fs2_admin_inherited` (`group_id`, `pass_to`) VALUES -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_aliases` +-- Table structure for table `fs2_aliases` -- DROP TABLE IF EXISTS `fs2_aliases`; CREATE TABLE IF NOT EXISTS `fs2_aliases` ( - `alias_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`alias_id` mediumint(8) NOT NULL, `alias_go` varchar(100) NOT NULL, `alias_forward_to` varchar(100) NOT NULL, - `alias_active` tinyint(1) NOT NULL DEFAULT '1', - PRIMARY KEY (`alias_id`), - KEY `alias_go` (`alias_go`) + `alias_active` tinyint(1) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; -- --- Daten für Tabelle `fs2_aliases` +-- Dumping data for table `fs2_aliases` -- INSERT INTO `fs2_aliases` (`alias_id`, `alias_go`, `alias_forward_to`, `alias_active`) VALUES @@ -262,7 +259,7 @@ INSERT INTO `fs2_aliases` (`alias_id`, `alias_go`, `alias_forward_to`, `alias_ac -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_announcement` +-- Table structure for table `fs2_announcement` -- DROP TABLE IF EXISTS `fs2_announcement`; @@ -273,12 +270,11 @@ CREATE TABLE IF NOT EXISTS `fs2_announcement` ( `activate_announcement` tinyint(1) NOT NULL DEFAULT '0', `ann_html` tinyint(1) NOT NULL DEFAULT '1', `ann_fscode` tinyint(1) NOT NULL DEFAULT '1', - `ann_para` tinyint(1) NOT NULL DEFAULT '1', - PRIMARY KEY (`id`) + `ann_para` tinyint(1) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_announcement` +-- Dumping data for table `fs2_announcement` -- INSERT INTO `fs2_announcement` (`id`, `announcement_text`, `show_announcement`, `activate_announcement`, `ann_html`, `ann_fscode`, `ann_para`) VALUES @@ -287,22 +283,20 @@ INSERT INTO `fs2_announcement` (`id`, `announcement_text`, `show_announcement`, -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_applets` +-- Table structure for table `fs2_applets` -- DROP TABLE IF EXISTS `fs2_applets`; CREATE TABLE IF NOT EXISTS `fs2_applets` ( - `applet_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`applet_id` mediumint(8) NOT NULL, `applet_file` varchar(100) NOT NULL, `applet_active` tinyint(1) NOT NULL DEFAULT '1', `applet_include` tinyint(1) NOT NULL DEFAULT '1', - `applet_output` tinyint(1) NOT NULL DEFAULT '1', - PRIMARY KEY (`applet_id`), - UNIQUE KEY `applet_file` (`applet_file`) + `applet_output` tinyint(1) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ; -- --- Daten für Tabelle `fs2_applets` +-- Dumping data for table `fs2_applets` -- INSERT INTO `fs2_applets` (`applet_id`, `applet_file`, `applet_active`, `applet_include`, `applet_output`) VALUES @@ -316,17 +310,17 @@ INSERT INTO `fs2_applets` (`applet_id`, `applet_file`, `applet_active`, `applet_ (11, 'dl-forwarding', 1, 1, 0), (9, 'mini-search', 1, 1, 1), (10, 'affiliates', 1, 2, 1), -(12, 'test', 1, 2, 1); +(12, 'social-meta-tags', 1, 2, 1); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_articles` +-- Table structure for table `fs2_articles` -- DROP TABLE IF EXISTS `fs2_articles`; CREATE TABLE IF NOT EXISTS `fs2_articles` ( - `article_id` mediumint(8) NOT NULL AUTO_INCREMENT, + `article_id` mediumint(8) NOT NULL, `article_url` varchar(100) DEFAULT NULL, `article_title` varchar(255) NOT NULL, `article_date` int(11) DEFAULT NULL, @@ -336,43 +330,38 @@ CREATE TABLE IF NOT EXISTS `fs2_articles` ( `article_fscode` tinyint(1) NOT NULL DEFAULT '1', `article_para` tinyint(1) NOT NULL DEFAULT '1', `article_cat_id` mediumint(8) NOT NULL, - `article_search_update` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`article_id`), - KEY `article_url` (`article_url`), - FULLTEXT KEY `article_text` (`article_title`,`article_text`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; + `article_search_update` int(11) NOT NULL DEFAULT '0' +) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_articles` +-- Dumping data for table `fs2_articles` -- INSERT INTO `fs2_articles` (`article_id`, `article_url`, `article_title`, `article_date`, `article_user`, `article_text`, `article_html`, `article_fscode`, `article_para`, `article_cat_id`, `article_search_update`) VALUES -(1, 'fscode', 'FSCode Liste', 1302472800, 1, 'Das System dieser Webseite bietet dir die Möglichkeit einfache Codes zur besseren Darstellung deiner Beiträge zu verwenden. Diese sogenannten [b]FSCodes[/b] erlauben dir daher HTML-Formatierungen zu verwenden, ohne dass du dich mit HTML auskennen musst. Mit ihnen hast du die Möglichkeit verschiedene Elemente in deine Beiträge einzubauen bzw. ihren Text zu formatieren.\r\n\r\nHier findest du eine [b]Ãœbersicht über alle verfügbaren FSCodes[/b] und ihre Verwendung. Allerdings ist es möglich, dass nicht alle Codes zur Verwendung freigeschaltet sind.\r\n\r\n[html fscode]\r\n
\r\n[b][u][size=3]FS-Code:[/size][/u][/b]\r\n\r\n[b][u][size=3]Beispiel:[/size][/u][/b]\r\n
\r\n[nofscode][b]fetter Text[/b][/nofscode]\r\n\r\n[b]fetter Text[/b]\r\n
\r\n[nofscode][i]kursiver Text[/i][/nofscode]\r\n\r\n[i]kursiver Text[/i]\r\n
\r\n[nofscode][u]unterstrichener Text[u][/nofscode]\r\n\r\n[u]unterstrichener Text[/u]\r\n
\r\n[nofscode][s]durchgestrichener Text[/s][/nofscode]\r\n\r\n[s]durchgestrichener Text[/s]\r\n
\r\n[nofscode][center]zentrierter Text[/center][/nofscode]\r\n\r\n[center]zentrierter Text[/center]\r\n
\r\n[nofscode][font=Schriftart]Text in Schriftart[/font][/nofscode]\r\n\r\n[font=Arial]Text in Arial[/font]
\r\n[nofscode][color=Farbcode]Text in Farbe[/color][/nofscode]\r\n\r\n[color=#FF0000]Text in Rot (Farbcode: #FF0000)[/color]\r\n
\r\n[nofscode][size=Größe]Text in Größe 0[/size][/nofscode]\r\n\r\n[size=0]Text in Größe 0[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 1[/size][/nofscode]\r\n\r\n[size=1]Text in Größe 1[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 2[/size][/nofscode]\r\n\r\n[size=2]Text in Größe 2[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 3[/size][/nofscode]\r\n\r\n[size=3]Text in Größe 3[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 4[/size][/nofscode]\r\n\r\n[size=4]Text in Größe 4[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 5[/size][/nofscode]\r\n\r\n[size=5]Text in Größe 5[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 6[/size][/nofscode]\r\n\r\n[size=6]Text in Größe 6[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 7[/size][/nofscode]\r\n\r\n[size=7]Text in Größe 7[/size]\r\n
\r\n[nofscode][nofscode]Text mit [b]FS[/b]Code[/nofscode][/nofscode]\r\n\r\n[nofscode]kein [b]fetter[/b] Text[/nofscode]\r\n

\r\n[nofscode][url]Linkadresse[/url][/nofscode]\r\n\r\n[url]http://www.example.com[/url]\r\n
\r\n[nofscode][url=Linkadresse]Linktext[/url][/nofscode]\r\n\r\n[url=http://www.example.com]Linktext[/url]\r\n
\r\n[nofscode][home]Seitenlink[/home][/nofscode]\r\n\r\n[home]news[/home]\r\n
\r\n[nofscode][home=Seitenlink]Linktext[/home][/nofscode]\r\n\r\n[home=news]Linktext[/home]\r\n
\r\n[nofscode][email]Email-Adresse[/email][/nofscode]\r\n[email]max.mustermann@example.com[/email]\r\n
\r\n[nofscode][email=Email-Adresse]Beispieltext[/email][/nofscode]\r\n\r\n[email=max.mustermann@example.com]Beispieltext[/email]\r\n

\r\n[nofscode][list]\r\n[*]Listenelement\r\n[*]Listenelement\r\n[/list][/nofscode][list]\r\n[*]Listenelement\r\n[*]Listenelement\r\n[/list]\r\n
\r\n[nofscode][numlist]\r\n[*]Listenelement\r\n[*]Listenelement\r\n[/numlist][/nofscode]\r\n\r\n[numlist]\r\n[*]Listenelement\r\n[*]Listenelement\r\n[/numlist]\r\n
\r\n[nofscode][quote]Ein Zitat[/quote][/nofscode]\r\n\r\n[quote]Ein Zitat[/quote]\r\n
\r\n[nofscode][quote=Quelle]Ein Zitat[/quote][/nofscode]\r\n\r\n[quote=Quelle]Ein Zitat[/quote]\r\n
\r\n[nofscode][code]Schrift mit fester Breite[/code][/nofscode]\r\n\r\n[code]Schrift mit fester Breite[/code]\r\n

\r\n[nofscode][img]Bildadresse[/img][/nofscode]\r\n\r\n[img]$VAR(url)images/icons/logo.gif[/img]\r\n
\r\n[nofscode][img=right]Bildadresse[/img][/nofscode]\r\n\r\n[img=right]$VAR(url)images/icons/logo.gif[/img] Das hier ist ein Beispieltext. Die Grafik ist rechts platziert und der Text fließt links um sie herum.\r\n
\r\n[nofscode][img=left]Bildadresse[/img][/nofscode]\r\n\r\n[img=left]$VAR(url)images/icons/logo.gif[/img] Das hier ist ein Beispieltext. Die Grafik ist links platziert und der Text fließt rechts um sie herum.\r\n
\r\n[/html]', 0, 1, 1, 1, 1373302511), +(1, 'fscode', 'FSCode Liste', 1302472800, 1, 'Das System dieser Webseite bietet dir die Möglichkeit einfache Codes zur besseren Darstellung deiner Beiträge zu verwenden. Diese sogenannten [b]FSCodes[/b] erlauben dir daher HTML-Formatierungen zu verwenden, ohne dass du dich mit HTML auskennen musst. Mit ihnen hast du die Möglichkeit verschiedene Elemente in deine Beiträge einzubauen bzw. ihren Text zu formatieren.\r\n\r\nHier findest du eine [b]Übersicht über alle verfügbaren FSCodes[/b] und ihre Verwendung. Allerdings ist es möglich, dass nicht alle Codes zur Verwendung freigeschaltet sind.\r\n\r\n[html fscode]\r\n
\r\n[b][u][size=3]FS-Code:[/size][/u][/b]\r\n\r\n[b][u][size=3]Beispiel:[/size][/u][/b]\r\n
\r\n[nofscode][b]fetter Text[/b][/nofscode]\r\n\r\n[b]fetter Text[/b]\r\n
\r\n[nofscode][i]kursiver Text[/i][/nofscode]\r\n\r\n[i]kursiver Text[/i]\r\n
\r\n[nofscode][u]unterstrichener Text[u][/nofscode]\r\n\r\n[u]unterstrichener Text[/u]\r\n
\r\n[nofscode][s]durchgestrichener Text[/s][/nofscode]\r\n\r\n[s]durchgestrichener Text[/s]\r\n
\r\n[nofscode][center]zentrierter Text[/center][/nofscode]\r\n\r\n[center]zentrierter Text[/center]\r\n
\r\n[nofscode][font=Schriftart]Text in Schriftart[/font][/nofscode]\r\n\r\n[font=Arial]Text in Arial[/font]
\r\n[nofscode][color=Farbcode]Text in Farbe[/color][/nofscode]\r\n\r\n[color=#FF0000]Text in Rot (Farbcode: #FF0000)[/color]\r\n
\r\n[nofscode][size=Größe]Text in Größe 0[/size][/nofscode]\r\n\r\n[size=0]Text in Größe 0[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 1[/size][/nofscode]\r\n\r\n[size=1]Text in Größe 1[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 2[/size][/nofscode]\r\n\r\n[size=2]Text in Größe 2[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 3[/size][/nofscode]\r\n\r\n[size=3]Text in Größe 3[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 4[/size][/nofscode]\r\n\r\n[size=4]Text in Größe 4[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 5[/size][/nofscode]\r\n\r\n[size=5]Text in Größe 5[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 6[/size][/nofscode]\r\n\r\n[size=6]Text in Größe 6[/size]\r\n
\r\n[nofscode][size=Größe]Text in Größe 7[/size][/nofscode]\r\n\r\n[size=7]Text in Größe 7[/size]\r\n
\r\n[nofscode][nofscode]Text mit [b]FS[/b]Code[/nofscode][/nofscode]\r\n\r\n[nofscode]kein [b]fetter[/b] Text[/nofscode]\r\n

\r\n[nofscode][url]Linkadresse[/url][/nofscode]\r\n\r\n[url]http://www.example.com[/url]\r\n
\r\n[nofscode][url=Linkadresse]Linktext[/url][/nofscode]\r\n\r\n[url=http://www.example.com]Linktext[/url]\r\n
\r\n[nofscode][home]Seitenlink[/home][/nofscode]\r\n\r\n[home]news[/home]\r\n
\r\n[nofscode][home=Seitenlink]Linktext[/home][/nofscode]\r\n\r\n[home=news]Linktext[/home]\r\n
\r\n[nofscode][email]Email-Adresse[/email][/nofscode]\r\n[email]max.mustermann@example.com[/email]\r\n
\r\n[nofscode][email=Email-Adresse]Beispieltext[/email][/nofscode]\r\n\r\n[email=max.mustermann@example.com]Beispieltext[/email]\r\n

\r\n[nofscode][list]\r\n[*]Listenelement\r\n[*]Listenelement\r\n[/list][/nofscode][list]\r\n[*]Listenelement\r\n[*]Listenelement\r\n[/list]\r\n
\r\n[nofscode][numlist]\r\n[*]Listenelement\r\n[*]Listenelement\r\n[/numlist][/nofscode]\r\n\r\n[numlist]\r\n[*]Listenelement\r\n[*]Listenelement\r\n[/numlist]\r\n
\r\n[nofscode][quote]Ein Zitat[/quote][/nofscode]\r\n\r\n[quote]Ein Zitat[/quote]\r\n
\r\n[nofscode][quote=Quelle]Ein Zitat[/quote][/nofscode]\r\n\r\n[quote=Quelle]Ein Zitat[/quote]\r\n
\r\n[nofscode][code]Schrift mit fester Breite[/code][/nofscode]\r\n\r\n[code]Schrift mit fester Breite[/code]\r\n

\r\n[nofscode][img]Bildadresse[/img][/nofscode]\r\n\r\n[img]http://placehold.it/150x100[/img]\r\n
\r\n[nofscode][img=right]Bildadresse[/img][/nofscode]\r\n\r\n[img=right]http://placehold.it/150x100[/img] Das hier ist ein Beispieltext. Die Grafik ist rechts platziert und der Text fließt links um sie herum.\r\n
\r\n[nofscode][img=left]Bildadresse[/img][/nofscode]\r\n\r\n[img=left]http://placehold.it/150x100[/img] Das hier ist ein Beispieltext. Die Grafik ist links platziert und der Text fließt rechts um sie herum.\r\n
\r\n[/html]', 0, 1, 1, 1, 1421719445), (2, '', 'ie 8 test', 1302480000, 1, 'ie 8 test', 1, 1, 1, 1, 1302560322), (3, 'sds', 'fsdfsdf', 1302739200, 1, 'sdf', 1, 1, 1, 1, 1302797133), (4, 'sd', 'hallo', 1302739200, 1, 'sdfsdf', 1, 1, 1, 1, 1302797137), (5, 'sss', 'sdfdfdf', 1372888800, 1, 'sdfsdfdf', 1, 1, 1, 1, 1372971785), -(6, 'test', 'Test', 1394319600, 1, '

\r\nInnerhalb des Koprulu-Sektors gibt es viele Planeten und planetenähnliche Objekte, auf denen sich die Weltraumreisenden niedergelassen haben. Eine kurze Übersicht über die wichtigsten Planeten und deren Geschichte soll hier gegeben werden.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
Aiur
\r\nDieser Planet war die Geburtstätte der Protoss und ihr größter Stolz, bis der Overmind mit dem Schwarm dort einfiel und die Protoss nach Shakuras fliehen mussten. Mittlerweile ist Aiur eine riesige Brutstätte der Zerg.
Braxis
\r\nZwar soll Braxis aufgrund seiner eisigen Temperaturen einer der lebensfeindlichsten Planeten des gesamten Sektors sein, doch lange Zeit schon wird der Planet sowohl von Terranern als auch von den Protoss besiedelt.
Char
\r\nDiese vulkanische Welt ist der Hauptschwarmcluster des Schwarms im Sektor. Milliarden von Zerg warten hier darauf, gegen die Welten der Protoss und der Terraner entsandt zu werden, um Tod und Zerstörung zu bringen.
Kaldir
\r\nDurch seine isolierte Position innerhalb des Sektors und die lebensfeindlichen Temperaturen haben sich hier enorm widerstandsfähige Organismen entwickelt. Es wird gemunkelt, dass die Protoss sich hier niedergelassen haben, um Forschungen an besagten Wesen durchzuführen.
Korhal
\r\nDie terranische Liga hat ihren Hauptsitz auf Korhal und regiert von dort aus alle Vasallenplaneten innerhalb des Sektors. Der ganze Planet ist überzogen mit Siedlungen und gilt als Wiege der terranischen Zivilisation des Koprulu-Sektors.
Mar Sara
\r\nMar Saras Geschichte ist blutig, denn nach der Zerginvasion, welche Millionen das Leben kosteten, verwüsteten die Protoss im Sinne der ihrer Eindämmung der Zergbedrohung die Oberfläche erneut. Durch ein Terraformingprojekt der Liga wurde der Planet mittlerweile wieder bewohnbar und ist nun wieder schwach besiedelt.
Moria
\r\nAuf diesem Planeten wird ein Großteil der für den Bau der terranischen Kriegsmaschinerie benötigten Erze und Mineralien abgebaut. Durch den hohen Umsatz an weltvollen Stoffen gilt diese Welt als ein Krisenherd, der durch den Konflikt zwischen der Liga und dem Kel-Morianischen Kartell genährt wird.
Neu-Folsom
\r\nDieser instabile Planet wurde von der Liga als ein tödliches Gefängnis für all Jene konzipiert, die den ideologischen Grundsätzen der Liga wiedersprechen. Auch politische Feinde des Imperators sind hier eingesperrt. Es heißt, niemand könne diesem Ort entkommen, wenn er erst einmal eingesperrt sei.
Phaeton
\r\nDie Wüstenweld Phaetons bietet weitläufige Sanddünen und Geröllansammlungen. Durch die hohen Klippen und tiefen Tunneln gilt diese Welt oft auch als Versteck für Exilanten. Doch auch die Zerg haben die Abgelegenheit des Planeten für sich entdeckt.
Shiloh
\r\nDieser florierende Planet bietet gemäßigtes Klima und liefert vielen Planeten der Terraner Nahrungsmittel in riesigen Mengen. Davon abgesehen gilt dieser Planet außerdem als Geburtsort der Rebellion, ist er doch die Heimatwelt des Rebellen Jim Raynor.
Tarsonis
\r\nZur Zeit der Konföderation galt dieser Planet als Wiege der Menschheit des gesamten Sektors. Durch den von Arcturus Mengsk eingeleiteten Einfall der Zerg wurde der Planet und damit auch die Konföderation selbst vernichtet und musste der neu gegründeten Liga der Menschen weichen.
Umoja
\r\nJener Planet bietet Mengsks Imperium bereits seit dessen Gründung Widerstand und ist Sitz des umojanischen Protektorats. Diese Organisation ist ideologisch den Grundsätzen der Liga entgegengerichtet und arbeitet daran, die Liga zu stürzen.
', 1, 0, 1, 1, 1394403463), -(7, 'search_help', 'Suchregeln', 1400536800, 1, 'Mit der Suchfunktion können die verschiedenen Inhalte dieser Webseite schnell und einfach gefunden werden. Suchbegriffe können beliebig angeben werden, es sollten aber die folgenden Regeln bedacht werden:\r\n[list]\r\n[*][b]Ein Suchbegriff muss aus mindestens 3 Zeichen bestehen[/b]\r\n[*][b]Nach bestimmten, häufig vorkommenden Füllwörtern kann nicht gesucht werden:[/b] \r\nz.B. "und", "oder", "hallo", etc.\r\n[*][b]Zahlen & Sonderzeichen werden durch Leerzeichen ersetzt[/b]\r\n[*][b]Umlaute werden umgewandelt:[/b] ä => ae, ö=>oe, ü => ue\r\n[/list]\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]Ei[/font] => Findet nichts, da der Suchbegriff zu kurz ist\r\n[font=monospace]und oder oder[/font] => Findet nichts, da nur nach Füllwörtern gesucht wurde\r\n[font=monospace]Guten8geschichte[/font] => Sucht nach "guten" und "geschichte"\r\n[font=monospace]mäuse[/font] => Findet Inhalte mit "Mäuse", "mäuse" oder "Maeuse"\r\n\r\nDamit die Suchergebnisse immer nachvollziehbar bleiben, wird bei jeder Suche auch die berechnete Suchanfrage mit ausgegeben. So kann die eigene Anfrage leicht überprüft und evtl. korrigiert werden.\r\n\r\n\r\n[b][size=3]Suchfunktionen[/size][/b]\r\n\r\nLiefert die Suche nach einfachen Stichwörtern nicht das gewünschte Ergebnis, kann die Suchanfrage verfeinert werden. Dazu stehen einige Operatoren und Funktionen zur Verfügung.\r\n\r\n\r\n[b]Alle Suchbegriffe müssen enthalten sein: AND[/b]\r\nDie Verknüpfung mit AND ist der Standardoperator. Sie wird auch immer dann angewandt, wenn keine andere Verknüpfung angegeben wurde. Mit der AND-Verknüpfung werden nur Inhalte gefunden, die alle Suchbegriffe enthalten.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]frosch internet[/font] => Findet nur Inhalte mit "frosch" UND "internet"\r\n[font=monospace]hund AND katze[/font] => Findet nur Inhalte mit "hund" UND "katze"\r\n\r\n\r\n[b]Nur ein Suchbegriffe muss enthalten sein: OR[/b]\r\nEs kann aber auch nach Inhalten gesucht werden, die möglicherweise nur einen der Suchbegriffe enthalten. Hierzu wird der OR-Operator verwendet.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]papagei OR rabe[/font] => Findet Inhalte mit "papagei" ODER "rabe"\r\n\r\n\r\n[b]Entweder-oder-Suche: XOR[/b]\r\nEine Verknüpfung mit dem XOR-Operator entspricht im Grundsatz der Suche mir OR. Der Unterschied besteht darin, dass aber nur solche Inhalte gefunden werden die nur einen der beiden Suchbegriffe enthalten, nicht aber beide zusammen.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]frau XOR mann[/font] => Findet Inhalte mit "frau" aber NICHT "mann" und umgekehrt\r\n\r\n\r\n[b]Suche nach Teilwörtern: *[/b]\r\nWenn nach bestimmten Teilwörtern gesucht wird, kann das Sternchen als Platzhalter verwendet werden. Vorangestellt werden Wörter gefunden, die auf den Suchbegriff enden; an letzter Stelle stehend findet die Suche nur Wörter die damit beginnen. Das Sternchen kann aber auch gleichzeitig vorne und hinten verwendet werden.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]*haus[/font] => Findet "Haus", "Wohnhaus", "Waisenhaus", aber NICHT "Hausboot"\r\n[font=monospace]tür*[/font] => Findet "Türschloss", "türmen", aber NICHT "Hintertür"\r\n[font=monospace]*wunder*[/font] => Findet "Wunderheiler", "Wirtschaftswunder" und "Verwunderung"\r\n\r\n\r\n[b]Suchbegriffe ausschließen: ![/b]\r\nUm bestimmte Begriffe aus den Suchergebnissen auszuschließen, kann ihnen ein Ausrufezeichen vorangestellt werden. So können Inhalte gefunden werden, die bestimmte Begriff nicht enthalten. Die anderen Suchregeln gelten weiterhin, insbesondere können Verknüpfungen verwendet werden.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]kind !junge[/font] => Findet Inhalte mit "kind" aber OHNE "junge"\r\n[font=monospace]maus katze !hund[/font] => Findet Inhalte mit "maus" UND "katze", aber OHNE "hund"\r\n[font=monospace]frosch OR !storch[/font] => Findet Inhalte die "frosch" ODER NICHT "Storch" enthalten\r\n\r\n\r\n[b]Phonetische Suche[/b]\r\nOft ist die genaue Schreibweise eines Wortes nicht bekannt. Dann kann die Phonetische Suche weiterhelfen. Mit dieser Option werden auch ähnlich klingende Begriffe zu einem Suchwort gefunden.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]team[/font] => Findet Inhalte mit "Team", "Tim", "Teen", etc.', 1, 1, 1, 1, 1400931683); +(6, 'search_help', 'Suchregeln', 0, 0, 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo dolores.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]mäuse[/font] => Findet Inhalte mit "Mäuse", "mäuse" oder "Maeuse"\r\n\r\n\r\n[b]Phonetische Suche[/b]\r\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo dolores.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]team[/font] => Findet Inhalte mit "Team", "Tim", "Teen", etc,\r\n\r\n\r\n[b]Suche nach Teilwörtern: *[/b]\r\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo dolores.\r\n\r\n\r\n[b]Mehrere Suchbegriffe: AND [/b]\r\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo\r\n[i]Beispiele:[/i]\r\n[font=monospace]frosch internet[/font] => Findet Inhalte mit "frosch" UND "internet"\r\n[font=monospace]hund AND katze[/font] => Findet Inhalte mit "hund" UND "katze"\r\n\r\n\r\n[b]Suchbegriffe auschließen: ![/b]\r\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo dolores.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]maus katze !hund[/font] => Findet Inhalte mit "maus" UND "katze", aber OHNE "hund"\r\n\r\n\r\n[b]ODER-Vereinigung: OR[/b]\r\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo dolores.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]papagei OR rabe[/font] => Findet Inhalte mit "papagei" ODER "rabe"\r\n\r\n\r\n[b]Entweder-oder-Suche: XOR[/b]\r\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo dolores.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]frau XOR mann[/font] => Findet Inhalte mit "frau" aber NICHT "mann" und umgekehrt\r\n\r\n\r\n[b]Mehrere Operatoren mit Klammern[/b]\r\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo dolores.\r\n\r\n[i]Beispiele:[/i]\r\n[font=monospace]kind AND (hund XOR katze)[/font] => Findet Inhalte mit "kind" die entweder "hund" oder "katze" enthalten', 1, 1, 1, 1, 1397751822); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_articles_cat` +-- Table structure for table `fs2_articles_cat` -- DROP TABLE IF EXISTS `fs2_articles_cat`; CREATE TABLE IF NOT EXISTS `fs2_articles_cat` ( - `cat_id` smallint(6) NOT NULL AUTO_INCREMENT, +`cat_id` smallint(6) NOT NULL, `cat_name` varchar(100) DEFAULT NULL, `cat_description` text NOT NULL, `cat_date` int(11) NOT NULL, - `cat_user` mediumint(8) NOT NULL DEFAULT '1', - PRIMARY KEY (`cat_id`) + `cat_user` mediumint(8) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; -- --- Daten für Tabelle `fs2_articles_cat` +-- Dumping data for table `fs2_articles_cat` -- INSERT INTO `fs2_articles_cat` (`cat_id`, `cat_name`, `cat_description`, `cat_date`, `cat_user`) VALUES @@ -381,19 +370,18 @@ INSERT INTO `fs2_articles_cat` (`cat_id`, `cat_name`, `cat_description`, `cat_da -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_b8_wordlist` +-- Table structure for table `fs2_b8_wordlist` -- DROP TABLE IF EXISTS `fs2_b8_wordlist`; CREATE TABLE IF NOT EXISTS `fs2_b8_wordlist` ( `token` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `count_ham` int(10) unsigned DEFAULT NULL, - `count_spam` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`token`) + `count_spam` int(10) unsigned DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_b8_wordlist` +-- Dumping data for table `fs2_b8_wordlist` -- INSERT INTO `fs2_b8_wordlist` (`token`, `count_ham`, `count_spam`) VALUES @@ -403,35 +391,33 @@ INSERT INTO `fs2_b8_wordlist` (`token`, `count_ham`, `count_spam`) VALUES -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_cimg` +-- Table structure for table `fs2_cimg` -- DROP TABLE IF EXISTS `fs2_cimg`; CREATE TABLE IF NOT EXISTS `fs2_cimg` ( - `id` mediumint(8) NOT NULL AUTO_INCREMENT, +`id` mediumint(8) NOT NULL, `name` varchar(255) NOT NULL, `type` varchar(4) NOT NULL, `hasthumb` tinyint(1) NOT NULL, - `cat` mediumint(8) NOT NULL, - PRIMARY KEY (`id`) + `cat` mediumint(8) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_cimg_cats` +-- Table structure for table `fs2_cimg_cats` -- DROP TABLE IF EXISTS `fs2_cimg_cats`; CREATE TABLE IF NOT EXISTS `fs2_cimg_cats` ( - `id` mediumint(8) NOT NULL AUTO_INCREMENT, +`id` mediumint(8) NOT NULL, `name` varchar(25) NOT NULL, - `description` varchar(100) NOT NULL, - PRIMARY KEY (`id`) + `description` varchar(100) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; -- --- Daten für Tabelle `fs2_cimg_cats` +-- Dumping data for table `fs2_cimg_cats` -- INSERT INTO `fs2_cimg_cats` (`id`, `name`, `description`) VALUES @@ -441,12 +427,12 @@ INSERT INTO `fs2_cimg_cats` (`id`, `name`, `description`) VALUES -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_comments` +-- Table structure for table `fs2_comments` -- DROP TABLE IF EXISTS `fs2_comments`; CREATE TABLE IF NOT EXISTS `fs2_comments` ( - `comment_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`comment_id` mediumint(8) NOT NULL, `content_id` mediumint(8) NOT NULL, `content_type` varchar(32) NOT NULL, `comment_poster` varchar(32) DEFAULT NULL, @@ -457,46 +443,43 @@ CREATE TABLE IF NOT EXISTS `fs2_comments` ( `comment_text` text, `comment_classification` tinyint(4) NOT NULL DEFAULT '0', `spam_probability` float NOT NULL DEFAULT '0.5', - `needs_update` tinyint(4) NOT NULL DEFAULT '1', - PRIMARY KEY (`comment_id`), - FULLTEXT KEY `comment_title_text` (`comment_text`,`comment_title`) + `needs_update` tinyint(4) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; -- --- Daten für Tabelle `fs2_comments` +-- Dumping data for table `fs2_comments` -- INSERT INTO `fs2_comments` (`comment_id`, `content_id`, `content_type`, `comment_poster`, `comment_poster_id`, `comment_poster_ip`, `comment_date`, `comment_title`, `comment_text`, `comment_classification`, `spam_probability`, `needs_update`) VALUES -(3, 5, 'news', '1', 1, '127.0.0.1', 1306441173, 'hans', 'hans', 0, 0.5, 0), +(3, 5, 'news', '1', 1, '127.0.0.1', 1306441173, 'hans', 'hans', 1, 0.5, 0), (6, 11, 'dl', '1', 1, '::1', 1373196687, 'test', 'test', 0, 0.5, 0), -(7, 45, 'news', 'spam', 0, '::1', 1394920254, 'spam', 'ssdsd', 0, 0.5, 1); +(7, 45, 'news', '1', 1, '127.0.0.1', 1421365902, 'test', 'test', 1, 0.5, 0); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_config` +-- Table structure for table `fs2_config` -- DROP TABLE IF EXISTS `fs2_config`; CREATE TABLE IF NOT EXISTS `fs2_config` ( `config_name` varchar(30) NOT NULL, `config_data` text NOT NULL, - `config_loadhook` varchar(255) NOT NULL DEFAULT 'none', - UNIQUE KEY `config_name` (`config_name`) + `config_loadhook` varchar(255) NOT NULL DEFAULT 'none' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_config` +-- Dumping data for table `fs2_config` -- INSERT INTO `fs2_config` (`config_name`, `config_data`, `config_loadhook`) VALUES ('main', '{"title":"Hansen''s wunderbare Welt","dyn_title":"1","dyn_title_ext":"{..title..} \\u00bb {..ext..}","admin_mail":"mail@sweil.de","description":"","keywords":"","publisher":"","copyright":"","style_id":"2","allow_other_designs":"1","show_favicon":"1","home":"0","home_text":"","language_text":"de_DE","feed":"rss20","date":"d.m.Y","time":"H:i \\\\U\\\\h\\\\r","datetime":"d.m.Y, H:i \\\\U\\\\h\\\\r","timezone":"Europe\\/Berlin","auto_forward":"4","page":"
{..prev..} <\\/div>Seite {..page_number..}<\\/b> von {..total_pages..}<\\/b>
 {..next..}<\\/div><\\/div>","page_prev":"\\u00ab zur\\u00fcck<\\/a> |","page_next":"| weiter \\u00bb<\\/a>","style_tag":"lightfrog","version":"2.alix6","url_style":"seo","protocol":"http:\\/\\/","url":"localhost\\/fs2\\/www\\/","other_protocol":"1","count_referers":"1"}', 'startup'), ('system', '{"var_loop":20}', 'startup'), -('env', '{}', 'startup'), +('env', '{}', ''), ('info', '{}', 'startup'), -('articles', '{"acp_per_page":"20","html_code":"2","fs_code":"4","para_handling":"4","cat_pic_x":"150","cat_pic_y":"150","cat_pic_size":"1024","com_rights":"0","com_antispam":"0","com_sort":"0","acp_view":"2"}', 'none'), +('articles', '{"acp_per_page":"50","html_code":"2","fs_code":"4","para_handling":"4","cat_pic_x":"150","cat_pic_y":"150","cat_pic_size":"1024","com_rights":"0","com_antispam":"0","com_sort":"0","acp_view":"2"}', 'none'), ('search', '{"id":"0","search_num_previews":"10","search_and":"AND, and, &&","search_or":"OR, or, ||","search_xor":"XOR, xor","search_not":"!, -","search_wildcard":"*, %","search_min_word_length":"3","search_allow_phonetic":"1","search_use_stopwords":"1"}', 'none'), -('cronjobs', '{"last_cronjob_time":"1400931658","last_cronjob_time_daily":"1400931658","last_cronjob_time_hourly":"1400931658","search_index_update":"1","ref_cron":"1","ref_days":"5","ref_hits":"5","ref_contact":"first","ref_age":"older","ref_amount":"less"}', 'startup'), +('cronjobs', '{"last_cronjob_time":"1421719443","last_cronjob_time_daily":"1421638281","last_cronjob_time_hourly":"1421719201","search_index_update":"1","ref_cron":"1","ref_days":"5","ref_hits":"5","ref_contact":"first","ref_age":"older","ref_amount":"less"}', 'startup'), ('captcha', '{"captcha_bg_color":"FAFCF1","captcha_bg_transparent":"0","captcha_text_color":"AB30AB","captcha_first_lower":"1","captcha_first_upper":"5","captcha_second_lower":"1","captcha_second_upper":"5","captcha_use_addition":"1","captcha_use_subtraction":"1","captcha_use_multiplication":"0","captcha_create_easy_arithmetics":"1","captcha_x":"58","captcha_y":"18","captcha_show_questionmark":"0","captcha_use_spaces":"1","captcha_show_multiplication_as_x":"1","captcha_start_text_x":"0","captcha_start_text_y":"0","captcha_font_size":"5","captcha_font_file":""}', 'none'), ('downloads', '{"screen_x":"1024","screen_y":"768","thumb_x":"120","thumb_y":"90","quickinsert":"test''","dl_rights":"2","dl_show_sub_cats":"0","dl_comments":"1"}', 'none'), ('affiliates', '{"partner_anzahl":"5","small_x":"88","small_y":"31","big_x":"468","big_y":"60","big_allow":"1","file_size":"1024","small_allow":"0"}', 'none'), @@ -507,12 +490,13 @@ INSERT INTO `fs2_config` (`config_name`, `config_data`, `config_loadhook`) VALUE ('preview_images', '{"active":"1","type_priority":"1","use_priority_only":"0","timed_deltime":"604800"}', 'none'), ('groups', '{"group_pic_x":"250","group_pic_y":"25","group_pic_size":"100"}', 'none'), ('screens', '{"screen_x":"3500","screen_y":"3500","screen_thumb_x":"120","screen_thumb_y":"90","screen_size":"2048","screen_rows":"5","screen_cols":"3","screen_order":"id","screen_sort":"desc","show_type":"1","show_size_x":"950","show_size_y":"700","show_img_x":"800","show_img_y":"600","wp_x":"2000","wp_y":"2000","wp_thumb_x":"200","wp_thumb_y":"150","wp_size":"2048","wp_rows":"6","wp_cols":"2","wp_order":"id","wp_sort":"desc"}', 'none'), -('users', '{"user_per_page":"30","registration_antispam":"1","avatar_x":"110","avatar_y":"110","avatar_size":"20","reg_date_format":"l, j. F Y","user_list_reg_date_format":"j. F Y"}', 'none'); +('users', '{"user_per_page":"30","registration_antispam":"1","avatar_x":"110","avatar_y":"110","avatar_size":"20","reg_date_format":"l, j. F Y","user_list_reg_date_format":"j. F Y"}', 'none'), +('social_meta_tags', '{"use_google_plus":"1","google_plus_page":"+TheWitcherDE","use_schema_org":"1","use_twitter_card":"1","twitter_site":"@TheWitcherDE","use_open_graph":"1","fb_admins":"1234,5678","og_section":"Technology","site_name":"","default_image":"","news_cat_prepend":": ","enable_news":"1","enable_articles":"1","enable_downloads":"1","use_news_cat_prepend":"1","use_external_images":""}', 'none'); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_counter` +-- Table structure for table `fs2_counter` -- DROP TABLE IF EXISTS `fs2_counter`; @@ -523,21 +507,20 @@ CREATE TABLE IF NOT EXISTS `fs2_counter` ( `user` mediumint(8) unsigned NOT NULL DEFAULT '0', `artikel` smallint(6) unsigned NOT NULL DEFAULT '0', `news` smallint(6) unsigned NOT NULL DEFAULT '0', - `comments` mediumint(8) unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) + `comments` mediumint(8) unsigned NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_counter` +-- Dumping data for table `fs2_counter` -- INSERT INTO `fs2_counter` (`id`, `visits`, `hits`, `user`, `artikel`, `news`, `comments`) VALUES -(1, 109, 3338, 5, 7, 18, 3); +(1, 114, 3742, 5, 6, 18, 3); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_counter_ref` +-- Table structure for table `fs2_counter_ref` -- DROP TABLE IF EXISTS `fs2_counter_ref`; @@ -545,22 +528,21 @@ CREATE TABLE IF NOT EXISTS `fs2_counter_ref` ( `ref_url` varchar(255) DEFAULT NULL, `ref_count` int(11) DEFAULT NULL, `ref_first` int(11) DEFAULT NULL, - `ref_last` int(11) DEFAULT NULL, - KEY `ref_url` (`ref_url`) + `ref_last` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_counter_ref` +-- Dumping data for table `fs2_counter_ref` -- INSERT INTO `fs2_counter_ref` (`ref_url`, `ref_count`, `ref_first`, `ref_last`) VALUES ('http://localhost/', 55, 1302557491, 1307980522), -('http://localhost/fs2/', 27, 1316955935, 1400614351); +('http://localhost/fs2/', 46, 1316955935, 1421714721); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_counter_stat` +-- Table structure for table `fs2_counter_stat` -- DROP TABLE IF EXISTS `fs2_counter_stat`; @@ -569,12 +551,11 @@ CREATE TABLE IF NOT EXISTS `fs2_counter_stat` ( `s_month` int(2) NOT NULL DEFAULT '0', `s_day` int(2) NOT NULL DEFAULT '0', `s_visits` int(11) DEFAULT NULL, - `s_hits` int(11) DEFAULT NULL, - PRIMARY KEY (`s_year`,`s_month`,`s_day`) + `s_hits` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_counter_stat` +-- Dumping data for table `fs2_counter_stat` -- INSERT INTO `fs2_counter_stat` (`s_year`, `s_month`, `s_day`, `s_visits`, `s_hits`) VALUES @@ -660,25 +641,29 @@ INSERT INTO `fs2_counter_stat` (`s_year`, `s_month`, `s_day`, `s_visits`, `s_hit (2013, 7, 8, 1, 39), (2013, 7, 9, 1, 1), (2013, 7, 14, 1, 31), -(2014, 1, 12, 1, 3), -(2014, 3, 9, 1, 6), -(2014, 3, 15, 1, 14), -(2014, 3, 16, 1, 26), -(2014, 4, 6, 1, 5), -(2014, 4, 12, 1, 12), -(2014, 4, 13, 1, 3), -(2014, 5, 20, 1, 8), -(2014, 5, 24, 1, 5); +(2014, 4, 17, 1, 35), +(2014, 5, 20, 1, 2), +(2015, 1, 2, 1, 14), +(2015, 1, 3, 1, 1), +(2015, 1, 4, 2, 125), +(2015, 1, 5, 1, 42), +(2015, 1, 14, 1, 25), +(2015, 1, 15, 1, 1), +(2015, 1, 16, 1, 36), +(2015, 1, 17, 1, 101), +(2015, 1, 18, 1, 47), +(2015, 1, 19, 1, 1), +(2015, 1, 20, 1, 56); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_dl` +-- Table structure for table `fs2_dl` -- DROP TABLE IF EXISTS `fs2_dl`; CREATE TABLE IF NOT EXISTS `fs2_dl` ( - `dl_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`dl_id` mediumint(8) NOT NULL, `cat_id` mediumint(8) DEFAULT NULL, `user_id` mediumint(8) DEFAULT NULL, `dl_date` int(11) DEFAULT NULL, @@ -687,13 +672,11 @@ CREATE TABLE IF NOT EXISTS `fs2_dl` ( `dl_autor` varchar(100) DEFAULT NULL, `dl_autor_url` varchar(255) DEFAULT NULL, `dl_open` tinyint(4) DEFAULT NULL, - `dl_search_update` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`dl_id`), - FULLTEXT KEY `dl_name_text` (`dl_name`,`dl_text`) + `dl_search_update` int(11) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ; -- --- Daten für Tabelle `fs2_dl` +-- Dumping data for table `fs2_dl` -- INSERT INTO `fs2_dl` (`dl_id`, `cat_id`, `user_id`, `dl_date`, `dl_name`, `dl_text`, `dl_autor`, `dl_autor_url`, `dl_open`, `dl_search_update`) VALUES @@ -711,19 +694,18 @@ INSERT INTO `fs2_dl` (`dl_id`, `cat_id`, `user_id`, `dl_date`, `dl_name`, `dl_te -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_dl_cat` +-- Table structure for table `fs2_dl_cat` -- DROP TABLE IF EXISTS `fs2_dl_cat`; CREATE TABLE IF NOT EXISTS `fs2_dl_cat` ( - `cat_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`cat_id` mediumint(8) NOT NULL, `subcat_id` mediumint(8) NOT NULL DEFAULT '0', - `cat_name` varchar(100) DEFAULT NULL, - PRIMARY KEY (`cat_id`) + `cat_name` varchar(100) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; -- --- Daten für Tabelle `fs2_dl_cat` +-- Dumping data for table `fs2_dl_cat` -- INSERT INTO `fs2_dl_cat` (`cat_id`, `subcat_id`, `cat_name`) VALUES @@ -736,24 +718,22 @@ INSERT INTO `fs2_dl_cat` (`cat_id`, `subcat_id`, `cat_name`) VALUES -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_dl_files` +-- Table structure for table `fs2_dl_files` -- DROP TABLE IF EXISTS `fs2_dl_files`; CREATE TABLE IF NOT EXISTS `fs2_dl_files` ( `dl_id` mediumint(8) DEFAULT NULL, - `file_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`file_id` mediumint(8) NOT NULL, `file_count` mediumint(8) NOT NULL DEFAULT '0', `file_name` varchar(100) DEFAULT NULL, `file_url` varchar(255) DEFAULT NULL, `file_size` mediumint(8) NOT NULL DEFAULT '0', - `file_is_mirror` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`file_id`), - KEY `dl_id` (`dl_id`) + `file_is_mirror` tinyint(1) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ; -- --- Daten für Tabelle `fs2_dl_files` +-- Dumping data for table `fs2_dl_files` -- INSERT INTO `fs2_dl_files` (`dl_id`, `file_id`, `file_count`, `file_name`, `file_url`, `file_size`, `file_is_mirror`) VALUES @@ -769,7 +749,7 @@ INSERT INTO `fs2_dl_files` (`dl_id`, `file_id`, `file_count`, `file_name`, `file -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_editor_config` +-- Table structure for table `fs2_editor_config` -- DROP TABLE IF EXISTS `fs2_editor_config`; @@ -816,21 +796,20 @@ CREATE TABLE IF NOT EXISTS `fs2_editor_config` ( `do_code` tinyint(1) NOT NULL, `do_quote` tinyint(1) NOT NULL, `do_noparse` tinyint(1) NOT NULL, - `do_smilies` tinyint(1) NOT NULL, - PRIMARY KEY (`id`) + `do_smilies` tinyint(1) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_editor_config` +-- Dumping data for table `fs2_editor_config` -- INSERT INTO `fs2_editor_config` (`id`, `smilies_rows`, `smilies_cols`, `textarea_width`, `textarea_height`, `bold`, `italic`, `underline`, `strike`, `center`, `font`, `color`, `size`, `list`, `numlist`, `img`, `cimg`, `url`, `home`, `email`, `code`, `quote`, `noparse`, `smilies`, `do_bold`, `do_italic`, `do_underline`, `do_strike`, `do_center`, `do_font`, `do_color`, `do_size`, `do_list`, `do_numlist`, `do_img`, `do_cimg`, `do_url`, `do_home`, `do_email`, `do_code`, `do_quote`, `do_noparse`, `do_smilies`) VALUES -(1, 5, 2, 355, 120, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1); +(1, 5, 2, 355, 120, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_email` +-- Table structure for table `fs2_email` -- DROP TABLE IF EXISTS `fs2_email`; @@ -842,12 +821,11 @@ CREATE TABLE IF NOT EXISTS `fs2_email` ( `change_password_ack` text NOT NULL, `use_admin_mail` tinyint(1) NOT NULL DEFAULT '1', `email` varchar(100) NOT NULL, - `html` tinyint(1) NOT NULL DEFAULT '1', - PRIMARY KEY (`id`) + `html` tinyint(1) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_email` +-- Dumping data for table `fs2_email` -- INSERT INTO `fs2_email` (`id`, `signup`, `change_password`, `delete_account`, `change_password_ack`, `use_admin_mail`, `email`, `html`) VALUES @@ -856,24 +834,23 @@ INSERT INTO `fs2_email` (`id`, `signup`, `change_password`, `delete_account`, `c -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_ftp` +-- Table structure for table `fs2_ftp` -- DROP TABLE IF EXISTS `fs2_ftp`; CREATE TABLE IF NOT EXISTS `fs2_ftp` ( - `ftp_id` mediumint(9) NOT NULL AUTO_INCREMENT, +`ftp_id` mediumint(9) NOT NULL, `ftp_title` varchar(100) NOT NULL, `ftp_type` varchar(10) NOT NULL, `ftp_url` varchar(255) NOT NULL, `ftp_user` varchar(255) NOT NULL, `ftp_pw` varchar(255) NOT NULL, `ftp_ssl` tinyint(1) NOT NULL, - `ftp_http_url` varchar(255) NOT NULL, - PRIMARY KEY (`ftp_id`) + `ftp_http_url` varchar(255) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; -- --- Daten für Tabelle `fs2_ftp` +-- Dumping data for table `fs2_ftp` -- INSERT INTO `fs2_ftp` (`ftp_id`, `ftp_title`, `ftp_type`, `ftp_url`, `ftp_user`, `ftp_pw`, `ftp_ssl`, `ftp_http_url`) VALUES @@ -882,29 +859,27 @@ INSERT INTO `fs2_ftp` (`ftp_id`, `ftp_title`, `ftp_type`, `ftp_url`, `ftp_user`, -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_hashes` +-- Table structure for table `fs2_hashes` -- DROP TABLE IF EXISTS `fs2_hashes`; CREATE TABLE IF NOT EXISTS `fs2_hashes` ( - `id` mediumint(8) NOT NULL AUTO_INCREMENT, +`id` mediumint(8) NOT NULL, `hash` varchar(40) CHARACTER SET utf8 NOT NULL, `type` varchar(20) CHARACTER SET utf8 NOT NULL, `typeId` mediumint(8) NOT NULL, - `deleteTime` int(11) NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `hash` (`hash`) + `deleteTime` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_news` +-- Table structure for table `fs2_news` -- DROP TABLE IF EXISTS `fs2_news`; CREATE TABLE IF NOT EXISTS `fs2_news` ( - `news_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`news_id` mediumint(8) NOT NULL, `cat_id` smallint(6) DEFAULT NULL, `user_id` mediumint(8) DEFAULT NULL, `news_date` int(11) DEFAULT NULL, @@ -912,13 +887,11 @@ CREATE TABLE IF NOT EXISTS `fs2_news` ( `news_text` text, `news_active` tinyint(1) NOT NULL DEFAULT '1', `news_comments_allowed` tinyint(1) NOT NULL DEFAULT '1', - `news_search_update` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`news_id`), - FULLTEXT KEY `news_title_text` (`news_title`,`news_text`) + `news_search_update` int(11) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=47 ; -- --- Daten für Tabelle `fs2_news` +-- Dumping data for table `fs2_news` -- INSERT INTO `fs2_news` (`news_id`, `cat_id`, `user_id`, `news_date`, `news_title`, `news_text`, `news_active`, `news_comments_allowed`, `news_search_update`) VALUES @@ -939,26 +912,25 @@ INSERT INTO `fs2_news` (`news_id`, `cat_id`, `user_id`, `news_date`, `news_title (43, 1, 1, 1325104440, 'Tsdsdfsd', 'fsdfsdfsdfsdfsdf', 1, 1, 0), (44, 2, 1, 1340724960, 'test', 'test', 1, 1, 0), (45, 1, 1, 1373021880, 'test', 'test', 1, 1, 0), -(46, 2, 1, 1373021880, 'test', 'test', 1, 1, 0); +(46, 2, 1, 1373021880, 'test', '[player]2[/player]', 1, 1, 1421565505); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_news_cat` +-- Table structure for table `fs2_news_cat` -- DROP TABLE IF EXISTS `fs2_news_cat`; CREATE TABLE IF NOT EXISTS `fs2_news_cat` ( - `cat_id` smallint(6) NOT NULL AUTO_INCREMENT, +`cat_id` smallint(6) NOT NULL, `cat_name` varchar(100) DEFAULT NULL, `cat_description` text NOT NULL, `cat_date` int(11) NOT NULL, - `cat_user` mediumint(8) NOT NULL DEFAULT '1', - PRIMARY KEY (`cat_id`) + `cat_user` mediumint(8) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; -- --- Daten für Tabelle `fs2_news_cat` +-- Dumping data for table `fs2_news_cat` -- INSERT INTO `fs2_news_cat` (`cat_id`, `cat_name`, `cat_description`, `cat_date`, `cat_user`) VALUES @@ -968,21 +940,20 @@ INSERT INTO `fs2_news_cat` (`cat_id`, `cat_name`, `cat_description`, `cat_date`, -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_news_links` +-- Table structure for table `fs2_news_links` -- DROP TABLE IF EXISTS `fs2_news_links`; CREATE TABLE IF NOT EXISTS `fs2_news_links` ( `news_id` mediumint(8) DEFAULT NULL, - `link_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`link_id` mediumint(8) NOT NULL, `link_name` varchar(100) DEFAULT NULL, `link_url` varchar(255) DEFAULT NULL, - `link_target` tinyint(4) DEFAULT NULL, - PRIMARY KEY (`link_id`) + `link_target` tinyint(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=105 ; -- --- Daten für Tabelle `fs2_news_links` +-- Dumping data for table `fs2_news_links` -- INSERT INTO `fs2_news_links` (`news_id`, `link_id`, `link_name`, `link_url`, `link_target`) VALUES @@ -1020,21 +991,20 @@ INSERT INTO `fs2_news_links` (`news_id`, `link_id`, `link_name`, `link_url`, `li -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_partner` +-- Table structure for table `fs2_partner` -- DROP TABLE IF EXISTS `fs2_partner`; CREATE TABLE IF NOT EXISTS `fs2_partner` ( - `partner_id` smallint(3) unsigned NOT NULL AUTO_INCREMENT, +`partner_id` smallint(3) unsigned NOT NULL, `partner_name` varchar(150) NOT NULL, `partner_link` varchar(250) NOT NULL, `partner_beschreibung` text NOT NULL, - `partner_permanent` tinyint(1) unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`partner_id`) + `partner_permanent` tinyint(1) unsigned NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; -- --- Daten für Tabelle `fs2_partner` +-- Dumping data for table `fs2_partner` -- INSERT INTO `fs2_partner` (`partner_id`, `partner_name`, `partner_link`, `partner_beschreibung`, `partner_permanent`) VALUES @@ -1043,47 +1013,46 @@ INSERT INTO `fs2_partner` (`partner_id`, `partner_name`, `partner_link`, `partne -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_player` +-- Table structure for table `fs2_player` -- DROP TABLE IF EXISTS `fs2_player`; CREATE TABLE IF NOT EXISTS `fs2_player` ( - `video_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`video_id` mediumint(8) NOT NULL, `video_type` tinyint(1) NOT NULL DEFAULT '1', `video_x` text NOT NULL, `video_title` varchar(100) NOT NULL, `video_lenght` smallint(6) NOT NULL DEFAULT '0', `video_desc` text NOT NULL, - `dl_id` mediumint(8) NOT NULL, - PRIMARY KEY (`video_id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; + `dl_id` mediumint(8) NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; -- --- Daten für Tabelle `fs2_player` +-- Dumping data for table `fs2_player` -- INSERT INTO `fs2_player` (`video_id`, `video_type`, `video_x`, `video_title`, `video_lenght`, `video_desc`, `dl_id`) VALUES -(1, 1, 'http://dl.worldofplayers.de/wop/witcher/witcher2/sonstiges/ausgepackt.flv', 'Test', 80, 'Test', 0); +(1, 1, 'http://dl.worldofplayers.de/wop/witcher/witcher2/sonstiges/ausgepackt.flv', 'Test', 80, 'Test', 0), +(2, 1, 'http://localhost/cdpr-gc-video.flv', 'test', 0, 'test', 0); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_poll` +-- Table structure for table `fs2_poll` -- DROP TABLE IF EXISTS `fs2_poll`; CREATE TABLE IF NOT EXISTS `fs2_poll` ( - `poll_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`poll_id` mediumint(8) NOT NULL, `poll_quest` varchar(255) DEFAULT NULL, `poll_start` int(11) DEFAULT NULL, `poll_end` int(11) DEFAULT NULL, `poll_type` tinyint(4) DEFAULT NULL, - `poll_participants` mediumint(8) NOT NULL DEFAULT '0', - PRIMARY KEY (`poll_id`) + `poll_participants` mediumint(8) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ; -- --- Daten für Tabelle `fs2_poll` +-- Dumping data for table `fs2_poll` -- INSERT INTO `fs2_poll` (`poll_id`, `poll_quest`, `poll_start`, `poll_end`, `poll_type`, `poll_participants`) VALUES @@ -1099,20 +1068,19 @@ INSERT INTO `fs2_poll` (`poll_id`, `poll_quest`, `poll_start`, `poll_end`, `poll -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_poll_answers` +-- Table structure for table `fs2_poll_answers` -- DROP TABLE IF EXISTS `fs2_poll_answers`; CREATE TABLE IF NOT EXISTS `fs2_poll_answers` ( `poll_id` mediumint(8) DEFAULT NULL, - `answer_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`answer_id` mediumint(8) NOT NULL, `answer` varchar(255) DEFAULT NULL, - `answer_count` mediumint(8) NOT NULL DEFAULT '0', - PRIMARY KEY (`answer_id`) + `answer_count` mediumint(8) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=25 ; -- --- Daten für Tabelle `fs2_poll_answers` +-- Dumping data for table `fs2_poll_answers` -- INSERT INTO `fs2_poll_answers` (`poll_id`, `answer_id`, `answer`, `answer_count`) VALUES @@ -1144,27 +1112,26 @@ INSERT INTO `fs2_poll_answers` (`poll_id`, `answer_id`, `answer`, `answer_count` -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_poll_voters` +-- Table structure for table `fs2_poll_voters` -- DROP TABLE IF EXISTS `fs2_poll_voters`; CREATE TABLE IF NOT EXISTS `fs2_poll_voters` ( - `voter_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`voter_id` mediumint(8) NOT NULL, `poll_id` mediumint(8) NOT NULL DEFAULT '0', `ip_address` varchar(15) NOT NULL DEFAULT '0.0.0.0', - `time` int(32) NOT NULL DEFAULT '0', - PRIMARY KEY (`voter_id`) + `time` int(32) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_press` +-- Table structure for table `fs2_press` -- DROP TABLE IF EXISTS `fs2_press`; CREATE TABLE IF NOT EXISTS `fs2_press` ( - `press_id` smallint(6) NOT NULL AUTO_INCREMENT, +`press_id` smallint(6) NOT NULL, `press_title` varchar(255) NOT NULL, `press_url` varchar(255) NOT NULL, `press_date` int(12) NOT NULL, @@ -1173,12 +1140,11 @@ CREATE TABLE IF NOT EXISTS `fs2_press` ( `press_note` text NOT NULL, `press_lang` int(11) NOT NULL, `press_game` tinyint(2) NOT NULL, - `press_cat` tinyint(2) NOT NULL, - PRIMARY KEY (`press_id`) + `press_cat` tinyint(2) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; -- --- Daten für Tabelle `fs2_press` +-- Dumping data for table `fs2_press` -- INSERT INTO `fs2_press` (`press_id`, `press_title`, `press_url`, `press_date`, `press_intro`, `press_text`, `press_note`, `press_lang`, `press_game`, `press_cat`) VALUES @@ -1188,19 +1154,18 @@ INSERT INTO `fs2_press` (`press_id`, `press_title`, `press_url`, `press_date`, ` -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_press_admin` +-- Table structure for table `fs2_press_admin` -- DROP TABLE IF EXISTS `fs2_press_admin`; CREATE TABLE IF NOT EXISTS `fs2_press_admin` ( - `id` mediumint(8) NOT NULL AUTO_INCREMENT, +`id` mediumint(8) NOT NULL, `type` tinyint(1) NOT NULL DEFAULT '0', - `title` varchar(255) NOT NULL, - PRIMARY KEY (`id`,`type`) + `title` varchar(255) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; -- --- Daten für Tabelle `fs2_press_admin` +-- Dumping data for table `fs2_press_admin` -- INSERT INTO `fs2_press_admin` (`id`, `type`, `title`) VALUES @@ -1214,20 +1179,18 @@ INSERT INTO `fs2_press_admin` (`id`, `type`, `title`) VALUES -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_screen` +-- Table structure for table `fs2_screen` -- DROP TABLE IF EXISTS `fs2_screen`; CREATE TABLE IF NOT EXISTS `fs2_screen` ( - `screen_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`screen_id` mediumint(8) NOT NULL, `cat_id` smallint(6) unsigned DEFAULT NULL, - `screen_name` varchar(255) DEFAULT NULL, - PRIMARY KEY (`screen_id`), - KEY `cat_id` (`cat_id`) + `screen_name` varchar(255) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=30 ; -- --- Daten für Tabelle `fs2_screen` +-- Dumping data for table `fs2_screen` -- INSERT INTO `fs2_screen` (`screen_id`, `cat_id`, `screen_name`) VALUES @@ -1249,22 +1212,21 @@ INSERT INTO `fs2_screen` (`screen_id`, `cat_id`, `screen_name`) VALUES -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_screen_cat` +-- Table structure for table `fs2_screen_cat` -- DROP TABLE IF EXISTS `fs2_screen_cat`; CREATE TABLE IF NOT EXISTS `fs2_screen_cat` ( - `cat_id` smallint(6) NOT NULL AUTO_INCREMENT, +`cat_id` smallint(6) NOT NULL, `cat_name` varchar(255) DEFAULT NULL, `cat_type` tinyint(1) NOT NULL DEFAULT '0', `cat_visibility` tinyint(1) NOT NULL DEFAULT '1', `cat_date` int(11) NOT NULL DEFAULT '0', - `randompic` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`cat_id`) + `randompic` tinyint(1) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; -- --- Daten für Tabelle `fs2_screen_cat` +-- Dumping data for table `fs2_screen_cat` -- INSERT INTO `fs2_screen_cat` (`cat_id`, `cat_name`, `cat_type`, `cat_visibility`, `cat_date`, `randompic`) VALUES @@ -1275,37 +1237,34 @@ INSERT INTO `fs2_screen_cat` (`cat_id`, `cat_name`, `cat_type`, `cat_visibility` -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_screen_random` +-- Table structure for table `fs2_screen_random` -- DROP TABLE IF EXISTS `fs2_screen_random`; CREATE TABLE IF NOT EXISTS `fs2_screen_random` ( - `random_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`random_id` mediumint(8) NOT NULL, `screen_id` mediumint(8) NOT NULL, `start` int(11) NOT NULL, - `end` int(11) NOT NULL, - PRIMARY KEY (`random_id`) + `end` int(11) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_search_index` +-- Table structure for table `fs2_search_index` -- DROP TABLE IF EXISTS `fs2_search_index`; CREATE TABLE IF NOT EXISTS `fs2_search_index` ( - `search_index_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`search_index_id` mediumint(8) NOT NULL, `search_index_word_id` mediumint(8) NOT NULL DEFAULT '0', `search_index_type` enum('news','articles','dl') NOT NULL DEFAULT 'news', `search_index_document_id` mediumint(8) NOT NULL DEFAULT '0', - `search_index_count` smallint(5) NOT NULL DEFAULT '0', - PRIMARY KEY (`search_index_id`), - UNIQUE KEY `un_search_index_word_id` (`search_index_word_id`,`search_index_type`,`search_index_document_id`) + `search_index_count` smallint(5) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2857 ; -- --- Daten für Tabelle `fs2_search_index` +-- Dumping data for table `fs2_search_index` -- INSERT INTO `fs2_search_index` (`search_index_id`, `search_index_word_id`, `search_index_type`, `search_index_document_id`, `search_index_count`) VALUES @@ -1544,21 +1503,19 @@ INSERT INTO `fs2_search_index` (`search_index_id`, `search_index_word_id`, `sear -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_search_time` +-- Table structure for table `fs2_search_time` -- DROP TABLE IF EXISTS `fs2_search_time`; CREATE TABLE IF NOT EXISTS `fs2_search_time` ( - `search_time_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`search_time_id` mediumint(8) NOT NULL, `search_time_type` enum('news','articles','dl') NOT NULL DEFAULT 'news', `search_time_document_id` mediumint(8) NOT NULL, - `search_time_date` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`search_time_id`), - UNIQUE KEY `un_search_time_type` (`search_time_type`,`search_time_document_id`) + `search_time_date` int(11) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=319 ; -- --- Daten für Tabelle `fs2_search_time` +-- Dumping data for table `fs2_search_time` -- INSERT INTO `fs2_search_time` (`search_time_id`, `search_time_type`, `search_time_document_id`, `search_time_date`) VALUES @@ -1599,19 +1556,17 @@ INSERT INTO `fs2_search_time` (`search_time_id`, `search_time_type`, `search_tim -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_search_words` +-- Table structure for table `fs2_search_words` -- DROP TABLE IF EXISTS `fs2_search_words`; CREATE TABLE IF NOT EXISTS `fs2_search_words` ( - `search_word_id` mediumint(8) NOT NULL AUTO_INCREMENT, - `search_word` varchar(32) NOT NULL DEFAULT '', - PRIMARY KEY (`search_word_id`), - UNIQUE KEY `search_word` (`search_word`) +`search_word_id` mediumint(8) NOT NULL, + `search_word` varchar(32) NOT NULL DEFAULT '' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=166 ; -- --- Daten für Tabelle `fs2_search_words` +-- Dumping data for table `fs2_search_words` -- INSERT INTO `fs2_search_words` (`search_word_id`, `search_word`) VALUES @@ -1784,22 +1739,21 @@ INSERT INTO `fs2_search_words` (`search_word_id`, `search_word`) VALUES -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_shop` +-- Table structure for table `fs2_shop` -- DROP TABLE IF EXISTS `fs2_shop`; CREATE TABLE IF NOT EXISTS `fs2_shop` ( - `artikel_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`artikel_id` mediumint(8) NOT NULL, `artikel_name` varchar(100) DEFAULT NULL, `artikel_url` varchar(255) DEFAULT NULL, `artikel_text` text, `artikel_preis` varchar(10) DEFAULT NULL, - `artikel_hot` tinyint(4) DEFAULT NULL, - PRIMARY KEY (`artikel_id`) + `artikel_hot` tinyint(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; -- --- Daten für Tabelle `fs2_shop` +-- Dumping data for table `fs2_shop` -- INSERT INTO `fs2_shop` (`artikel_id`, `artikel_name`, `artikel_url`, `artikel_text`, `artikel_preis`, `artikel_hot`) VALUES @@ -1809,19 +1763,18 @@ INSERT INTO `fs2_shop` (`artikel_id`, `artikel_name`, `artikel_url`, `artikel_te -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_smilies` +-- Table structure for table `fs2_smilies` -- DROP TABLE IF EXISTS `fs2_smilies`; CREATE TABLE IF NOT EXISTS `fs2_smilies` ( - `id` mediumint(8) NOT NULL AUTO_INCREMENT, +`id` mediumint(8) NOT NULL, `replace_string` varchar(15) NOT NULL, - `order` mediumint(8) NOT NULL, - PRIMARY KEY (`id`) + `order` mediumint(8) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ; -- --- Daten für Tabelle `fs2_smilies` +-- Dumping data for table `fs2_smilies` -- INSERT INTO `fs2_smilies` (`id`, `replace_string`, `order`) VALUES @@ -1839,44 +1792,40 @@ INSERT INTO `fs2_smilies` (`id`, `replace_string`, `order`) VALUES -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_snippets` +-- Table structure for table `fs2_snippets` -- DROP TABLE IF EXISTS `fs2_snippets`; CREATE TABLE IF NOT EXISTS `fs2_snippets` ( - `snippet_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`snippet_id` mediumint(8) NOT NULL, `snippet_tag` varchar(100) NOT NULL, `snippet_text` text NOT NULL, - `snippet_active` tinyint(1) NOT NULL DEFAULT '1', - PRIMARY KEY (`snippet_id`), - UNIQUE KEY `snippet_tag` (`snippet_tag`) + `snippet_active` tinyint(1) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; -- --- Daten für Tabelle `fs2_snippets` +-- Dumping data for table `fs2_snippets` -- INSERT INTO `fs2_snippets` (`snippet_id`, `snippet_tag`, `snippet_text`, `snippet_active`) VALUES -(1, '[%feeds%]', '

\r\n News-Feeds:\r\n

\r\n

\r\n RSS 0.91
\r\n RSS 1.0
\r\n RSS 2.0
\r\n Atom 1.0\r\n

', 1); +(1, '[%feeds%]', '

\r\n News-Feeds:\r\n

\r\n

\r\n RSS 0.91
\r\n RSS 1.0
\r\n RSS 2.0
\r\n Atom 1.0\r\n

', 1); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_styles` +-- Table structure for table `fs2_styles` -- DROP TABLE IF EXISTS `fs2_styles`; CREATE TABLE IF NOT EXISTS `fs2_styles` ( - `style_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`style_id` mediumint(8) NOT NULL, `style_tag` varchar(30) NOT NULL, `style_allow_use` tinyint(1) NOT NULL DEFAULT '1', - `style_allow_edit` tinyint(1) NOT NULL DEFAULT '1', - PRIMARY KEY (`style_id`), - UNIQUE KEY `style_tag` (`style_tag`) + `style_allow_edit` tinyint(1) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; -- --- Daten für Tabelle `fs2_styles` +-- Dumping data for table `fs2_styles` -- INSERT INTO `fs2_styles` (`style_id`, `style_tag`, `style_allow_use`, `style_allow_edit`) VALUES @@ -1886,12 +1835,12 @@ INSERT INTO `fs2_styles` (`style_id`, `style_tag`, `style_allow_use`, `style_all -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_user` +-- Table structure for table `fs2_user` -- DROP TABLE IF EXISTS `fs2_user`; CREATE TABLE IF NOT EXISTS `fs2_user` ( - `user_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`user_id` mediumint(8) NOT NULL, `user_name` char(100) DEFAULT NULL, `user_password` char(32) DEFAULT NULL, `user_salt` varchar(10) NOT NULL, @@ -1906,12 +1855,11 @@ CREATE TABLE IF NOT EXISTS `fs2_user` ( `user_aim` varchar(50) DEFAULT NULL, `user_wlm` varchar(50) DEFAULT NULL, `user_yim` varchar(50) DEFAULT NULL, - `user_skype` varchar(50) DEFAULT NULL, - PRIMARY KEY (`user_id`) + `user_skype` varchar(50) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; -- --- Daten für Tabelle `fs2_user` +-- Dumping data for table `fs2_user` -- INSERT INTO `fs2_user` (`user_id`, `user_name`, `user_password`, `user_salt`, `user_mail`, `user_is_staff`, `user_group`, `user_is_admin`, `user_reg_date`, `user_show_mail`, `user_homepage`, `user_icq`, `user_aim`, `user_wlm`, `user_yim`, `user_skype`) VALUES @@ -1924,45 +1872,43 @@ INSERT INTO `fs2_user` (`user_id`, `user_name`, `user_password`, `user_salt`, `u -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_useronline` +-- Table structure for table `fs2_useronline` -- DROP TABLE IF EXISTS `fs2_useronline`; CREATE TABLE IF NOT EXISTS `fs2_useronline` ( `ip` varchar(30) NOT NULL, `user_id` mediumint(8) NOT NULL DEFAULT '0', - `date` int(30) DEFAULT NULL, - PRIMARY KEY (`ip`) + `date` int(30) DEFAULT NULL ) ENGINE=MEMORY DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_useronline` +-- Dumping data for table `fs2_useronline` -- INSERT INTO `fs2_useronline` (`ip`, `user_id`, `date`) VALUES -('::1', 1, 1400931685); +('127.0.0.1', 1, 1421719444); -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_user_groups` +-- Table structure for table `fs2_user_groups` -- DROP TABLE IF EXISTS `fs2_user_groups`; CREATE TABLE IF NOT EXISTS `fs2_user_groups` ( - `user_group_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`user_group_id` mediumint(8) NOT NULL, `user_group_name` varchar(50) NOT NULL, `user_group_description` text, `user_group_title` varchar(50) DEFAULT NULL, `user_group_color` varchar(6) NOT NULL DEFAULT '-1', `user_group_highlight` tinyint(1) NOT NULL DEFAULT '0', `user_group_date` int(11) NOT NULL, - `user_group_user` mediumint(8) NOT NULL DEFAULT '1', - PRIMARY KEY (`user_group_id`) + `user_group_user` mediumint(8) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; -- --- Daten für Tabelle `fs2_user_groups` +-- Dumping data for table `fs2_user_groups` -- INSERT INTO `fs2_user_groups` (`user_group_id`, `user_group_name`, `user_group_description`, `user_group_title`, `user_group_color`, `user_group_highlight`, `user_group_date`, `user_group_user`) VALUES @@ -1972,19 +1918,18 @@ INSERT INTO `fs2_user_groups` (`user_group_id`, `user_group_name`, `user_group_d -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_user_permissions` +-- Table structure for table `fs2_user_permissions` -- DROP TABLE IF EXISTS `fs2_user_permissions`; CREATE TABLE IF NOT EXISTS `fs2_user_permissions` ( `perm_id` varchar(255) NOT NULL, `x_id` mediumint(8) NOT NULL, - `perm_for_group` tinyint(1) NOT NULL DEFAULT '1', - PRIMARY KEY (`perm_id`,`x_id`,`perm_for_group`) + `perm_for_group` tinyint(1) NOT NULL DEFAULT '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- --- Daten für Tabelle `fs2_user_permissions` +-- Dumping data for table `fs2_user_permissions` -- INSERT INTO `fs2_user_permissions` (`perm_id`, `x_id`, `perm_for_group`) VALUES @@ -2005,32 +1950,500 @@ INSERT INTO `fs2_user_permissions` (`perm_id`, `x_id`, `perm_for_group`) VALUES -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_wallpaper` +-- Table structure for table `fs2_wallpaper` -- DROP TABLE IF EXISTS `fs2_wallpaper`; CREATE TABLE IF NOT EXISTS `fs2_wallpaper` ( - `wallpaper_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`wallpaper_id` mediumint(8) NOT NULL, `wallpaper_name` varchar(255) NOT NULL, `wallpaper_title` varchar(255) NOT NULL, - `cat_id` mediumint(8) NOT NULL DEFAULT '0', - PRIMARY KEY (`wallpaper_id`) + `cat_id` mediumint(8) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=1 AUTO_INCREMENT=2 ; -- -------------------------------------------------------- -- --- Tabellenstruktur für Tabelle `fs2_wallpaper_sizes` +-- Table structure for table `fs2_wallpaper_sizes` -- DROP TABLE IF EXISTS `fs2_wallpaper_sizes`; CREATE TABLE IF NOT EXISTS `fs2_wallpaper_sizes` ( - `size_id` mediumint(8) NOT NULL AUTO_INCREMENT, +`size_id` mediumint(8) NOT NULL, `wallpaper_id` mediumint(8) NOT NULL DEFAULT '0', - `size` varchar(255) NOT NULL, - PRIMARY KEY (`size_id`) + `size` varchar(255) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=1 AUTO_INCREMENT=4 ; +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `fs2_admin_cp` +-- +ALTER TABLE `fs2_admin_cp` + ADD PRIMARY KEY (`page_id`); + +-- +-- Indexes for table `fs2_aliases` +-- +ALTER TABLE `fs2_aliases` + ADD PRIMARY KEY (`alias_id`), ADD KEY `alias_go` (`alias_go`); + +-- +-- Indexes for table `fs2_announcement` +-- +ALTER TABLE `fs2_announcement` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `fs2_applets` +-- +ALTER TABLE `fs2_applets` + ADD PRIMARY KEY (`applet_id`), ADD UNIQUE KEY `applet_file` (`applet_file`); + +-- +-- Indexes for table `fs2_articles` +-- +ALTER TABLE `fs2_articles` + ADD PRIMARY KEY (`article_id`), ADD KEY `article_url` (`article_url`), ADD FULLTEXT KEY `article_text` (`article_title`,`article_text`); + +-- +-- Indexes for table `fs2_articles_cat` +-- +ALTER TABLE `fs2_articles_cat` + ADD PRIMARY KEY (`cat_id`); + +-- +-- Indexes for table `fs2_b8_wordlist` +-- +ALTER TABLE `fs2_b8_wordlist` + ADD PRIMARY KEY (`token`); + +-- +-- Indexes for table `fs2_cimg` +-- +ALTER TABLE `fs2_cimg` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `fs2_cimg_cats` +-- +ALTER TABLE `fs2_cimg_cats` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `fs2_comments` +-- +ALTER TABLE `fs2_comments` + ADD PRIMARY KEY (`comment_id`), ADD FULLTEXT KEY `comment_title_text` (`comment_text`,`comment_title`); + +-- +-- Indexes for table `fs2_config` +-- +ALTER TABLE `fs2_config` + ADD UNIQUE KEY `config_name` (`config_name`); + +-- +-- Indexes for table `fs2_counter` +-- +ALTER TABLE `fs2_counter` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `fs2_counter_ref` +-- +ALTER TABLE `fs2_counter_ref` + ADD KEY `ref_url` (`ref_url`); + +-- +-- Indexes for table `fs2_counter_stat` +-- +ALTER TABLE `fs2_counter_stat` + ADD PRIMARY KEY (`s_year`,`s_month`,`s_day`); + +-- +-- Indexes for table `fs2_dl` +-- +ALTER TABLE `fs2_dl` + ADD PRIMARY KEY (`dl_id`), ADD FULLTEXT KEY `dl_name_text` (`dl_name`,`dl_text`); + +-- +-- Indexes for table `fs2_dl_cat` +-- +ALTER TABLE `fs2_dl_cat` + ADD PRIMARY KEY (`cat_id`); + +-- +-- Indexes for table `fs2_dl_files` +-- +ALTER TABLE `fs2_dl_files` + ADD PRIMARY KEY (`file_id`), ADD KEY `dl_id` (`dl_id`); + +-- +-- Indexes for table `fs2_editor_config` +-- +ALTER TABLE `fs2_editor_config` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `fs2_email` +-- +ALTER TABLE `fs2_email` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `fs2_ftp` +-- +ALTER TABLE `fs2_ftp` + ADD PRIMARY KEY (`ftp_id`); + +-- +-- Indexes for table `fs2_hashes` +-- +ALTER TABLE `fs2_hashes` + ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `hash` (`hash`); + +-- +-- Indexes for table `fs2_news` +-- +ALTER TABLE `fs2_news` + ADD PRIMARY KEY (`news_id`), ADD FULLTEXT KEY `news_title_text` (`news_title`,`news_text`); + +-- +-- Indexes for table `fs2_news_cat` +-- +ALTER TABLE `fs2_news_cat` + ADD PRIMARY KEY (`cat_id`); + +-- +-- Indexes for table `fs2_news_links` +-- +ALTER TABLE `fs2_news_links` + ADD PRIMARY KEY (`link_id`); + +-- +-- Indexes for table `fs2_partner` +-- +ALTER TABLE `fs2_partner` + ADD PRIMARY KEY (`partner_id`); + +-- +-- Indexes for table `fs2_player` +-- +ALTER TABLE `fs2_player` + ADD PRIMARY KEY (`video_id`); + +-- +-- Indexes for table `fs2_poll` +-- +ALTER TABLE `fs2_poll` + ADD PRIMARY KEY (`poll_id`); + +-- +-- Indexes for table `fs2_poll_answers` +-- +ALTER TABLE `fs2_poll_answers` + ADD PRIMARY KEY (`answer_id`); + +-- +-- Indexes for table `fs2_poll_voters` +-- +ALTER TABLE `fs2_poll_voters` + ADD PRIMARY KEY (`voter_id`); + +-- +-- Indexes for table `fs2_press` +-- +ALTER TABLE `fs2_press` + ADD PRIMARY KEY (`press_id`); + +-- +-- Indexes for table `fs2_press_admin` +-- +ALTER TABLE `fs2_press_admin` + ADD PRIMARY KEY (`id`,`type`); + +-- +-- Indexes for table `fs2_screen` +-- +ALTER TABLE `fs2_screen` + ADD PRIMARY KEY (`screen_id`), ADD KEY `cat_id` (`cat_id`); + +-- +-- Indexes for table `fs2_screen_cat` +-- +ALTER TABLE `fs2_screen_cat` + ADD PRIMARY KEY (`cat_id`); + +-- +-- Indexes for table `fs2_screen_random` +-- +ALTER TABLE `fs2_screen_random` + ADD PRIMARY KEY (`random_id`); + +-- +-- Indexes for table `fs2_search_index` +-- +ALTER TABLE `fs2_search_index` + ADD PRIMARY KEY (`search_index_id`), ADD UNIQUE KEY `un_search_index_word_id` (`search_index_word_id`,`search_index_type`,`search_index_document_id`); + +-- +-- Indexes for table `fs2_search_time` +-- +ALTER TABLE `fs2_search_time` + ADD PRIMARY KEY (`search_time_id`), ADD UNIQUE KEY `un_search_time_type` (`search_time_type`,`search_time_document_id`); + +-- +-- Indexes for table `fs2_search_words` +-- +ALTER TABLE `fs2_search_words` + ADD PRIMARY KEY (`search_word_id`), ADD UNIQUE KEY `search_word` (`search_word`); + +-- +-- Indexes for table `fs2_shop` +-- +ALTER TABLE `fs2_shop` + ADD PRIMARY KEY (`artikel_id`); + +-- +-- Indexes for table `fs2_smilies` +-- +ALTER TABLE `fs2_smilies` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `fs2_snippets` +-- +ALTER TABLE `fs2_snippets` + ADD PRIMARY KEY (`snippet_id`), ADD UNIQUE KEY `snippet_tag` (`snippet_tag`); + +-- +-- Indexes for table `fs2_styles` +-- +ALTER TABLE `fs2_styles` + ADD PRIMARY KEY (`style_id`), ADD UNIQUE KEY `style_tag` (`style_tag`); + +-- +-- Indexes for table `fs2_user` +-- +ALTER TABLE `fs2_user` + ADD PRIMARY KEY (`user_id`); + +-- +-- Indexes for table `fs2_useronline` +-- +ALTER TABLE `fs2_useronline` + ADD PRIMARY KEY (`ip`); + +-- +-- Indexes for table `fs2_user_groups` +-- +ALTER TABLE `fs2_user_groups` + ADD PRIMARY KEY (`user_group_id`); + +-- +-- Indexes for table `fs2_user_permissions` +-- +ALTER TABLE `fs2_user_permissions` + ADD PRIMARY KEY (`perm_id`,`x_id`,`perm_for_group`); + +-- +-- Indexes for table `fs2_wallpaper` +-- +ALTER TABLE `fs2_wallpaper` + ADD PRIMARY KEY (`wallpaper_id`); + +-- +-- Indexes for table `fs2_wallpaper_sizes` +-- +ALTER TABLE `fs2_wallpaper_sizes` + ADD PRIMARY KEY (`size_id`); + +-- +-- AUTO_INCREMENT for dumped tables +-- + +-- +-- AUTO_INCREMENT for table `fs2_aliases` +-- +ALTER TABLE `fs2_aliases` +MODIFY `alias_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2; +-- +-- AUTO_INCREMENT for table `fs2_applets` +-- +ALTER TABLE `fs2_applets` +MODIFY `applet_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=13; +-- +-- AUTO_INCREMENT for table `fs2_articles` +-- +ALTER TABLE `fs2_articles` +AUTO_INCREMENT=7; +-- +-- AUTO_INCREMENT for table `fs2_articles_cat` +-- +ALTER TABLE `fs2_articles_cat` +MODIFY `cat_id` smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2; +-- +-- AUTO_INCREMENT for table `fs2_cimg` +-- +ALTER TABLE `fs2_cimg` +MODIFY `id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2; +-- +-- AUTO_INCREMENT for table `fs2_cimg_cats` +-- +ALTER TABLE `fs2_cimg_cats` +MODIFY `id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3; +-- +-- AUTO_INCREMENT for table `fs2_comments` +-- +ALTER TABLE `fs2_comments` +MODIFY `comment_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=8; +-- +-- AUTO_INCREMENT for table `fs2_dl` +-- +ALTER TABLE `fs2_dl` +MODIFY `dl_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=12; +-- +-- AUTO_INCREMENT for table `fs2_dl_cat` +-- +ALTER TABLE `fs2_dl_cat` +MODIFY `cat_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=7; +-- +-- AUTO_INCREMENT for table `fs2_dl_files` +-- +ALTER TABLE `fs2_dl_files` +MODIFY `file_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=11; +-- +-- AUTO_INCREMENT for table `fs2_ftp` +-- +ALTER TABLE `fs2_ftp` +MODIFY `ftp_id` mediumint(9) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2; +-- +-- AUTO_INCREMENT for table `fs2_hashes` +-- +ALTER TABLE `fs2_hashes` +MODIFY `id` mediumint(8) NOT NULL AUTO_INCREMENT; +-- +-- AUTO_INCREMENT for table `fs2_news` +-- +ALTER TABLE `fs2_news` +MODIFY `news_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=47; +-- +-- AUTO_INCREMENT for table `fs2_news_cat` +-- +ALTER TABLE `fs2_news_cat` +MODIFY `cat_id` smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3; +-- +-- AUTO_INCREMENT for table `fs2_news_links` +-- +ALTER TABLE `fs2_news_links` +MODIFY `link_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=105; +-- +-- AUTO_INCREMENT for table `fs2_partner` +-- +ALTER TABLE `fs2_partner` +MODIFY `partner_id` smallint(3) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2; +-- +-- AUTO_INCREMENT for table `fs2_player` +-- +ALTER TABLE `fs2_player` +MODIFY `video_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3; +-- +-- AUTO_INCREMENT for table `fs2_poll` +-- +ALTER TABLE `fs2_poll` +MODIFY `poll_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=9; +-- +-- AUTO_INCREMENT for table `fs2_poll_answers` +-- +ALTER TABLE `fs2_poll_answers` +MODIFY `answer_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=25; +-- +-- AUTO_INCREMENT for table `fs2_poll_voters` +-- +ALTER TABLE `fs2_poll_voters` +MODIFY `voter_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=7; +-- +-- AUTO_INCREMENT for table `fs2_press` +-- +ALTER TABLE `fs2_press` +MODIFY `press_id` smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4; +-- +-- AUTO_INCREMENT for table `fs2_press_admin` +-- +ALTER TABLE `fs2_press_admin` +MODIFY `id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=7; +-- +-- AUTO_INCREMENT for table `fs2_screen` +-- +ALTER TABLE `fs2_screen` +MODIFY `screen_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=30; +-- +-- AUTO_INCREMENT for table `fs2_screen_cat` +-- +ALTER TABLE `fs2_screen_cat` +MODIFY `cat_id` smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=6; +-- +-- AUTO_INCREMENT for table `fs2_screen_random` +-- +ALTER TABLE `fs2_screen_random` +MODIFY `random_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4; +-- +-- AUTO_INCREMENT for table `fs2_search_index` +-- +ALTER TABLE `fs2_search_index` +MODIFY `search_index_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2857; +-- +-- AUTO_INCREMENT for table `fs2_search_time` +-- +ALTER TABLE `fs2_search_time` +MODIFY `search_time_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=319; +-- +-- AUTO_INCREMENT for table `fs2_search_words` +-- +ALTER TABLE `fs2_search_words` +MODIFY `search_word_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=166; +-- +-- AUTO_INCREMENT for table `fs2_shop` +-- +ALTER TABLE `fs2_shop` +MODIFY `artikel_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3; +-- +-- AUTO_INCREMENT for table `fs2_smilies` +-- +ALTER TABLE `fs2_smilies` +MODIFY `id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=11; +-- +-- AUTO_INCREMENT for table `fs2_snippets` +-- +ALTER TABLE `fs2_snippets` +MODIFY `snippet_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2; +-- +-- AUTO_INCREMENT for table `fs2_styles` +-- +ALTER TABLE `fs2_styles` +MODIFY `style_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3; +-- +-- AUTO_INCREMENT for table `fs2_user` +-- +ALTER TABLE `fs2_user` +MODIFY `user_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=6; +-- +-- AUTO_INCREMENT for table `fs2_user_groups` +-- +ALTER TABLE `fs2_user_groups` +MODIFY `user_group_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3; +-- +-- AUTO_INCREMENT for table `fs2_wallpaper` +-- +ALTER TABLE `fs2_wallpaper` +MODIFY `wallpaper_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2; +-- +-- AUTO_INCREMENT for table `fs2_wallpaper_sizes` +-- +ALTER TABLE `fs2_wallpaper_sizes` +MODIFY `size_id` mediumint(8) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/www/admin/admin_social_meta_tags.php b/www/admin/admin_social_meta_tags.php index 106b3bf..8daf97e 100644 --- a/www/admin/admin_social_meta_tags.php +++ b/www/admin/admin_social_meta_tags.php @@ -1,49 +1,20 @@ true, - //~ 'google_plus_page' => '', // with + - //~ - //~ 'use_twitter_card' => true, - //~ 'twitter_site' => '', // with @ - //~ - //~ 'use_open_graph' => true, - //~ 'fb_admins' => '', // CSV => http://findmyfacebookid.com/ - //~ 'og_section' => '', // A high-level section name. E.g. Technology - //~ - //~ 'use_schema_org' => true, -//~ -//~ -//~ - //~ // minimal info, this is a MUST - //~ 'site_name' => '', - //~ 'default_image' => '', // min. 200x200px, better 280x200px, no https! - //~ 'news_cat_prepend' => ': ', // false or delimiter string -//~ -//~ - //~ // enable use for content types - //~ 'enable_news' => true, - //~ 'enable_articles' => true, - //~ 'enable_downloads' => true, ////////////////////////////// //// update configuration //// ////////////////////////////// if ( isset($_POST['sended']) - && (!$_POST['use_google_plus'] || !empty($_POST['google_plus_page'])) - && (!$_POST['use_twitter_card'] || !empty($_POST['twitter_site'])) - && (!$_POST['use_open_graph'] || (!empty($_POST['fb_admins']) && !empty($_POST['og_section']))) - && (!$_POST['use_news_cat_prepend'] || !empty($_POST['news_cat_prepend'])) + && (!isset($_POST['use_google_plus']) || !empty($_POST['google_plus_page'])) + && (!isset($_POST['use_twitter_card']) || !empty($_POST['twitter_site'])) + && (!isset($_POST['use_open_graph']) || (!empty($_POST['fb_admins']) && !empty($_POST['og_section']))) + && (!isset($_POST['use_news_cat_prepend']) || !empty($_POST['news_cat_prepend'])) ) { // prepare data @@ -55,6 +26,7 @@ settype($data['use_open_graph'], 'boolean'); settype($data['use_schema_org'], 'boolean'); settype($data['use_news_cat_prepend'], 'boolean'); + settype($data['use_external_images'], 'boolean'); settype($data['enable_news'], 'boolean'); settype($data['enable_articles'], 'boolean'); settype($data['enable_downloads'], 'boolean'); @@ -108,6 +80,7 @@ $adminpage->addCond('use_twitter_card', $_POST['use_twitter_card'] === 1); $adminpage->addCond('use_open_graph', $_POST['use_open_graph'] === 1); $adminpage->addCond('use_schema_org', $_POST['use_schema_org'] === 1); + $adminpage->addCond('use_external_images', $_POST['use_external_images'] === 1); $adminpage->addCond('enable_news', $_POST['enable_news'] === 1); $adminpage->addCond('enable_articles', $_POST['enable_articles'] === 1); $adminpage->addCond('enable_downloads', $_POST['enable_downloads'] === 1); diff --git a/www/admin/templates/admin_social_meta_tags.tpl b/www/admin/templates/admin_social_meta_tags.tpl index bad7c63..94b78b1 100644 --- a/www/admin/templates/admin_social_meta_tags.tpl +++ b/www/admin/templates/admin_social_meta_tags.tpl @@ -24,6 +24,17 @@
+
+ +
+ + checked> +

@@ -133,7 +144,8 @@
- checked> + checked>
+
- '.htmlspecialchars($comment_arr['comment_poster']).' + '.killhtml($comment_arr['comment_poster']).'
- +
- +
'.htmlspecialchars($spam_words[$i]['token']).''.killhtml($spam_words[$i]['token']).' '.$spam_words[$i]['spam'].''.htmlspecialchars($ham_words[$i]['token']).''.killhtml($ham_words[$i]['token']).' '.$ham_words[$i]['ham'].'
@@ -638,7 +638,7 @@ function user_name_free_or_itself ( $USERNAME, $USER_ID ) { - +
Hauptinformationen
@@ -706,7 +706,7 @@ function user_name_free_or_itself ( $USERNAME, $USER_ID ) { echo ' - +
Benutzer löschen
diff --git a/www/admin/admin_wallpaperedit.php b/www/admin/admin_wallpaperedit.php index a329ce8..3fc2819 100644 --- a/www/admin/admin_wallpaperedit.php +++ b/www/admin/admin_wallpaperedit.php @@ -416,7 +416,7 @@ } echo''; $index2 = $FD->db()->conn()->query('SELECT cat_name FROM '.$FD->env('DB_PREFIX')."screen_cat WHERE cat_id = $wallpaper_arr[cat_id]"); - $db_cat_name = htmlspecialchars($index2->fetchColumn()); + $db_cat_name = killhtml($index2->fetchColumn()); echo'
'.$db_cat_name.' diff --git a/www/applets/social-meta-tags.php b/www/applets/social-meta-tags.php index 05ad076..becf10b 100644 --- a/www/applets/social-meta-tags.php +++ b/www/applets/social-meta-tags.php @@ -29,7 +29,7 @@ function summeryFromContent($text, $length, $extension) { $text = preg_replace("/[\n\r]/", '', $text); - $text = StringCutter::truncate(htmlspecialchars($text), $length, $extension, array('word'=>true)); //less than 200 characters + $text = StringCutter::truncate(killhtml($text), $length, $extension, array('word'=>true)); //less than 200 characters return $text; } @@ -88,9 +88,9 @@ function getImageFromContent($text) { // set data if (!empty($news_arr)) { $content = new stdClass(); - $content->title = htmlspecialchars($news_arr['news_title']); + $content->title = killhtml($news_arr['news_title']); if ($FD->config('social_meta_tags', 'use_news_cat_prepend')) { - $content->title = htmlspecialchars($news_arr['cat_name']).$FD->config('social_meta_tags', 'news_cat_prepend').$content->title; + $content->title = killhtml($news_arr['cat_name']).$FD->config('social_meta_tags', 'news_cat_prepend').$content->title; } $content->summery = summeryFromContent($news_arr['news_text'], 207, ''); $content->url = get_canonical_url(); @@ -113,7 +113,7 @@ function getImageFromContent($text) { // set data if (!empty($article_arr)) { $content = new stdClass(); - $content->title = htmlspecialchars($article_arr['article_title']); + $content->title = killhtml($article_arr['article_title']); $content->summery = summeryFromContent($article_arr['article_text'], 207, ''); $content->url = get_canonical_url(); $content->date = date('c', $article_arr['article_date']?:$article_arr['article_search_update']); @@ -136,7 +136,7 @@ function getImageFromContent($text) { // set data if (!empty($downloads)) { $content = new stdClass(); - $content->title = htmlspecialchars($downloads['dl_name']); + $content->title = killhtml($downloads['dl_name']); $content->summery = summeryFromContent($downloads['dl_text'], 207, ''); $content->url = get_canonical_url(); $content->date = date('c', $downloads['dl_date']?:$downloads['dl_search_update']); diff --git a/www/classes/feeds/news-sitemap.php b/www/classes/feeds/news-sitemap.php index 936b5a1..9d76e9a 100644 --- a/www/classes/feeds/news-sitemap.php +++ b/www/classes/feeds/news-sitemap.php @@ -82,7 +82,7 @@ protected function getItemXml($item) { '.$this->language.' '.date("c", $item['news_date']).' - '.utf8_encode(htmlspecialchars($item['news_title'])).' + '.utf8_encode(killhtml($item['news_title'])).' Entertainment, Video Games '; diff --git a/www/libs/class_Feed.php b/www/libs/class_Feed.php index e14d343..4dcc22f 100644 --- a/www/libs/class_Feed.php +++ b/www/libs/class_Feed.php @@ -325,9 +325,9 @@ protected function getHeaderXml() { '.$this->getLanguage().' - '.utf8_encode(htmlspecialchars($this->getDescription())).' + '.utf8_encode(killhtml($this->getDescription())).' '.utf8_encode($this->getFsUrl()).' - '.utf8_encode(htmlspecialchars($this->getTitle())).' + '.utf8_encode(killhtml($this->getTitle())).' '; } @@ -336,7 +336,7 @@ protected function getHeaderXml() { protected function getItemXml($item) { return ' - '.utf8_encode(htmlspecialchars($item['news_title'])).' + '.utf8_encode(killhtml($item['news_title'])).' '.utf8_encode(url('comments', array('id' => $item['news_id']), true)).' '.utf8_encode(date('r', $item['news_date'])).' @@ -365,9 +365,9 @@ protected function getHeaderXml() { xmlns="http://purl.org/rss/1.0/" > - '.utf8_encode(htmlspecialchars($this->getTitle())).' + '.utf8_encode(killhtml($this->getTitle())).' '.utf8_encode($this->getFsUrl()).' - '.utf8_encode(htmlspecialchars($this->getDescription())).' + '.utf8_encode(killhtml($this->getDescription())).' '; @@ -390,7 +390,7 @@ protected function getHeaderXml() { protected function getItemXml($item) { return ' - '.utf8_encode(htmlspecialchars($item['news_title'])).' + '.utf8_encode(killhtml($item['news_title'])).' '.utf8_encode(url('comments', array('id' => $item['news_id']), true)).' '; @@ -414,16 +414,16 @@ protected function getHeaderXml() { '.$this->getLanguage().' - '.utf8_encode(htmlspecialchars($this->getDescription())).' + '.utf8_encode(killhtml($this->getDescription())).' '.utf8_encode($this->getFsUrl()).' - '.utf8_encode(htmlspecialchars($this->getTitle())).''; + '.utf8_encode(killhtml($this->getTitle())).''; } // Return XML Representation of an item protected function getItemXml($item) { return ' - '.utf8_encode(htmlspecialchars($item['news_title'])).' + '.utf8_encode(killhtml($item['news_title'])).' '.utf8_encode(url('comments', array('id' => $item['news_id']), true)).' '.utf8_encode(date('r', $item['news_date'])).' @@ -450,7 +450,7 @@ protected function getHeaderXml() { return ' '.utf8_encode($this->getFsUrl()).' - '.utf8_encode(htmlspecialchars($this->getTitle())).' + '.utf8_encode(killhtml($this->getTitle())).' '.utf8_encode($last_updated).' '; } @@ -468,10 +468,10 @@ protected function getItemXml($item) { return ' '.utf8_encode(url('comments', array('id' => $item['news_id']), true)).' - '.utf8_encode(htmlspecialchars($item['news_title'])).' + '.utf8_encode(killhtml($item['news_title'])).' '.utf8_encode($news_updated).' - '.utf8_encode(htmlspecialchars($item['user_name'])).' + '.utf8_encode(killhtml($item['user_name'])).' diff --git a/www/libs/includes/fscode.php b/www/libs/includes/fscode.php index 8b7c2bd..7a0c00f 100644 --- a/www/libs/includes/fscode.php +++ b/www/libs/includes/fscode.php @@ -545,9 +545,9 @@ function do_fscode_url ($action, $attributes, $content, $params, $node_object) { // create html/text if (!isset ($attributes['default'])) { - $url = $text = htmlspecialchars ($content); + $url = $text = killhtml ($content); } else { - $url = htmlspecialchars ($attributes['default']); + $url = killhtml ($attributes['default']); $text = $content; } @@ -645,9 +645,9 @@ function do_fscode_email ($action, $attributes, $content, $params, $node_object) // create html/text if (!isset ($attributes['default'])) { - $url = $text = htmlspecialchars ($content); + $url = $text = killhtml ($content); } else { - $url = htmlspecialchars ($attributes['default']); + $url = killhtml ($attributes['default']); $text = $content; } @@ -710,7 +710,7 @@ function do_fscode_img ($action, $attributes, $content, $params, $node_object) { } // Get alt and title text - $content_arr = array_map ( 'htmlspecialchars', explode ( '|', $content, 3 ) ); + $content_arr = killhtml(explode ( '|', $content, 3 ) ); // Always provide alt-text if (count($content_arr) == 1) { @@ -739,7 +739,7 @@ function do_fscode_img ($action, $attributes, $content, $params, $node_object) { if (!isset ($attributes['default'])) return ''.$content_arr[1].''; else - return ''.$content_arr[1].''; + return ''.$content_arr[1].''; } } diff --git a/www/libs/includes/indexfunctions.php b/www/libs/includes/indexfunctions.php index d51dc00..c01ee05 100644 --- a/www/libs/includes/indexfunctions.php +++ b/www/libs/includes/indexfunctions.php @@ -177,28 +177,28 @@ function get_meta () foreach ($keyword_arr as $key => $value) { $keyword_arr[$key] = trim($value); } - $keywords = htmlspecialchars(implode(', ', $keyword_arr)); + $keywords = killhtml(implode(', ', $keyword_arr)); $template = ' - + '.get_meta_author().' - - + + - + '.get_meta_abstract().' - + - + '.get_meta_author(TRUE).' - - - - + + + + - + '.get_canonical().' '; @@ -234,9 +234,9 @@ function get_meta_author ($DC = FALSE) $author = $FD->config('publisher'); if ($DC) - $output = ''; + $output = ''; else - $output = ''; + $output = ''; return $output; } @@ -249,9 +249,9 @@ function get_meta_abstract () global $FD; if ($FD->configExists('content_abstract') && $FD->config('content_abstract') != '') { - return ''; + return ''; } else { - return ''; + return ''; } } diff --git a/www/libs/includes/player.php b/www/libs/includes/player.php index 4f5f23e..672fe66 100644 --- a/www/libs/includes/player.php +++ b/www/libs/includes/player.php @@ -92,8 +92,8 @@ function get_player ( $MULTI, $WIDTH = true, $HEIGHT = true, $MODIFIER = false ) $video_arr['dl_id'] = 0; } - $video_arr['video_x'] = htmlspecialchars ( $video_arr['video_x'] ); - $video_arr['video_title'] = htmlspecialchars ( $video_arr['video_title'] ); + $video_arr['video_x'] = killhtml ( $video_arr['video_x'] ); + $video_arr['video_title'] = killhtml ( $video_arr['video_title'] ); // return text output? if ($MODIFIER == 'text') { diff --git a/www/libs/includes/templatepagefunctions.php b/www/libs/includes/templatepagefunctions.php index f8b6d99..dcb95e8 100644 --- a/www/libs/includes/templatepagefunctions.php +++ b/www/libs/includes/templatepagefunctions.php @@ -299,7 +299,7 @@ function create_templatepage ( $TEMPLATE_ARR, $GO, $TEMPLATE_FILE, $MANYFILES, $ // Get Data from Post or tpl-File if ( templatepage_postcheck ( $TEMPLATE_ARR ) && isset( $_POST['reload'] ) ) { foreach ($TEMPLATE_ARR as $template_key => $template_infos) { - $TEMPLATE_ARR[$template_key]['template'] = htmlspecialchars ( $_POST[$template_infos['name']] ); + $TEMPLATE_ARR[$template_key]['template'] = killhtml ( $_POST[$template_infos['name']] ); } } elseif ( $MANYFILES === TRUE ) { foreach ($TEMPLATE_ARR as $template_key => $template_infos) { @@ -308,7 +308,7 @@ function create_templatepage ( $TEMPLATE_ARR, $GO, $TEMPLATE_FILE, $MANYFILES, $ $TEMPLATE_ARR[$template_key]['template'] = ''; } else { $ACCESS = new fileaccess (); - $TEMPLATE_ARR[$template_key]['template'] = htmlspecialchars ( $ACCESS->getFileData ( $file_path ) ); + $TEMPLATE_ARR[$template_key]['template'] = killhtml ( $ACCESS->getFileData ( $file_path ) ); } } } @@ -320,7 +320,7 @@ function create_templatepage ( $TEMPLATE_ARR, $GO, $TEMPLATE_FILE, $MANYFILES, $ $template_data->setFile($TEMPLATE_FILE); $template_data->load($template_infos['name']); $template_data = $template_data->display(); - $TEMPLATE_ARR[$template_key]['template'] = htmlspecialchars ( $template_data ); + $TEMPLATE_ARR[$template_key]['template'] = killhtml ( $template_data ); } } } @@ -615,7 +615,7 @@ function get_original_array ( $EDITOR_NAME, $FILE, $ROWS, $COLS ) $original['template']->setStyle('default'); $original['template']->setFile($FILE); $original['template']->load($EDITOR_NAME); - $original['template'] = htmlspecialchars ( $original['template']->display() ); + $original['template'] = killhtml ( $original['template']->display() ); $original['template'] = '