From 0f9c5546694db208efcb7f8674da319263c5e6ff Mon Sep 17 00:00:00 2001 From: YuCheng Hu Date: Sun, 13 Jun 2010 23:18:03 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=B0=20trunk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit +YUCHENG HU+ git-svn-id: https://svn.code.sf.net/p/hawebs/svn@325 a2543c7e-f6e9-4f8a-8bff-1ffc34733512 --- .../com_jdownloads/admin.jdownloads.html.php | 4383 +++++++++++++++++ .../com_jdownloads/admin.jdownloads.php | 4177 ++++++++++++++++ .../check.restore.jdownloads.php | 370 ++ .../components/com_jdownloads/htaccess.txt | 1 + .../com_jdownloads/images/active.png | Bin 0 -> 407 bytes .../com_jdownloads/images/addedit.png | Bin 0 -> 1810 bytes .../com_jdownloads/images/backup.png | Bin 0 -> 1558 bytes .../com_jdownloads/images/categories.png | Bin 0 -> 1918 bytes .../com_jdownloads/images/categories_2.png | Bin 0 -> 2111 bytes .../com_jdownloads/images/config.png | Bin 0 -> 1646 bytes .../com_jdownloads/images/config_2.png | Bin 0 -> 1802 bytes .../components/com_jdownloads/images/css.png | Bin 0 -> 1381 bytes .../com_jdownloads/images/dir_edit.png | Bin 0 -> 1347 bytes .../com_jdownloads/images/dir_edit_2.png | Bin 0 -> 1706 bytes .../com_jdownloads/images/downloads.png | Bin 0 -> 1868 bytes .../com_jdownloads/images/downloads_2.png | Bin 0 -> 1901 bytes .../com_jdownloads/images/downloads_cats.gif | Bin 0 -> 12603 bytes .../images/downloads_details.gif | Bin 0 -> 13431 bytes .../com_jdownloads/images/downloads_files.gif | Bin 0 -> 15951 bytes .../com_jdownloads/images/email.gif | Bin 0 -> 4118 bytes .../components/com_jdownloads/images/help.png | Bin 0 -> 1411 bytes .../components/com_jdownloads/images/home.png | Bin 0 -> 1230 bytes .../com_jdownloads/images/index.html | 4 + .../components/com_jdownloads/images/info.png | Bin 0 -> 1908 bytes .../com_jdownloads/images/jd_logo_48.png | Bin 0 -> 2882 bytes .../com_jdownloads/images/jd_logo_small.png | Bin 0 -> 8975 bytes .../com_jdownloads/images/jdownloads.jpg | Bin 0 -> 25225 bytes .../com_jdownloads/images/langmanager.png | Bin 0 -> 1852 bytes .../com_jdownloads/images/layouts.png | Bin 0 -> 1225 bytes .../com_jdownloads/images/licenses.png | Bin 0 -> 1705 bytes .../com_jdownloads/images/m_active.png | Bin 0 -> 1810 bytes .../com_jdownloads/images/m_backup.gif | Bin 0 -> 583 bytes .../com_jdownloads/images/m_categories.gif | Bin 0 -> 650 bytes .../com_jdownloads/images/m_config.gif | Bin 0 -> 353 bytes .../com_jdownloads/images/m_downloads.gif | Bin 0 -> 596 bytes .../com_jdownloads/images/m_home.gif | Bin 0 -> 581 bytes .../com_jdownloads/images/m_info.gif | Bin 0 -> 598 bytes .../com_jdownloads/images/m_jdownloads.gif | Bin 0 -> 582 bytes .../com_jdownloads/images/m_licenses.gif | Bin 0 -> 563 bytes .../com_jdownloads/images/m_restore.gif | Bin 0 -> 581 bytes .../com_jdownloads/images/m_templates.gif | Bin 0 -> 586 bytes .../com_jdownloads/images/restore.png | Bin 0 -> 1671 bytes .../com_jdownloads/images/summary.gif | Bin 0 -> 10073 bytes .../com_jdownloads/images/support.png | Bin 0 -> 1639 bytes .../com_jdownloads/images/template.png | Bin 0 -> 1609 bytes .../com_jdownloads/images/warning.png | Bin 0 -> 3006 bytes .../components/com_jdownloads/index.html | 4 + .../com_jdownloads/install.jdownloads.php | 1203 +++++ .../components/com_jdownloads/install.sql | 122 + .../components/com_jdownloads/jdownloads.xml | 337 ++ .../joomfish/jdownloads_cats.xml | 18 + .../joomfish/jdownloads_config.xml | 14 + .../joomfish/jdownloads_files.xml | 20 + .../joomfish/jdownloads_templates.xml | 16 + .../com_jdownloads/mod_jdownloads_top_1.5.zip | Bin 0 -> 4876 bytes .../components/com_jdownloads/pad/index.html | 4 + .../components/com_jdownloads/pad/padfile.php | 135 + .../components/com_jdownloads/pad/padspec.php | 118 + .../com_jdownloads/pad/padvalidator.php | 392 ++ .../components/com_jdownloads/pad/xmlfile.php | 417 ++ .../components/com_jdownloads/style.css | 33 + .../toolbar.jdownloads.html.php | 182 + .../com_jdownloads/toolbar.jdownloads.php | 132 + .../com_jdownloads/uninstall.jdownloads.php | 48 + .../com_languages/admin.languages.html.php | 157 + .../com_languages/admin.languages.php | 154 + .../components/com_languages/index.html | 1 + .../components/com_languages/languages.xml | 12 + .../com_languages/toolbar.languages.html.php | 30 + .../com_languages/toolbar.languages.php | 25 + .../components/com_login/admin.login.php | 85 + .../components/com_login/index.html | 1 + .../com_massmail/admin.massmail.html.php | 139 + .../com_massmail/admin.massmail.php | 154 + .../components/com_massmail/config.xml | 7 + .../components/com_massmail/index.html | 1 + .../components/com_massmail/massmail.xml | 12 + .../com_massmail/toolbar.massmail.html.php | 35 + .../com_massmail/toolbar.massmail.php | 25 + 79 files changed, 12968 insertions(+) create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/admin.jdownloads.html.php create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/admin.jdownloads.php create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/check.restore.jdownloads.php create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/htaccess.txt create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/active.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/addedit.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/backup.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/categories.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/categories_2.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/config.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/config_2.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/css.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/dir_edit.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/dir_edit_2.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/downloads.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/downloads_2.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/downloads_cats.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/downloads_details.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/downloads_files.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/email.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/help.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/home.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/index.html create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/info.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/jd_logo_48.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/jd_logo_small.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/jdownloads.jpg create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/langmanager.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/layouts.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/licenses.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/m_active.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/m_backup.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/m_categories.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/m_config.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/m_downloads.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/m_home.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/m_info.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/m_jdownloads.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/m_licenses.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/m_restore.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/m_templates.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/restore.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/summary.gif create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/support.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/template.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/images/warning.png create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/index.html create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/install.jdownloads.php create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/install.sql create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/jdownloads.xml create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_cats.xml create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_config.xml create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_files.xml create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_templates.xml create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/mod_jdownloads_top_1.5.zip create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/pad/index.html create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/pad/padfile.php create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/pad/padspec.php create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/pad/padvalidator.php create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/pad/xmlfile.php create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/style.css create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/toolbar.jdownloads.html.php create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/toolbar.jdownloads.php create mode 100644 oss/joomla/trunk/administrator/components/com_jdownloads/uninstall.jdownloads.php create mode 100644 oss/joomla/trunk/administrator/components/com_languages/admin.languages.html.php create mode 100644 oss/joomla/trunk/administrator/components/com_languages/admin.languages.php create mode 100644 oss/joomla/trunk/administrator/components/com_languages/index.html create mode 100644 oss/joomla/trunk/administrator/components/com_languages/languages.xml create mode 100644 oss/joomla/trunk/administrator/components/com_languages/toolbar.languages.html.php create mode 100644 oss/joomla/trunk/administrator/components/com_languages/toolbar.languages.php create mode 100644 oss/joomla/trunk/administrator/components/com_login/admin.login.php create mode 100644 oss/joomla/trunk/administrator/components/com_login/index.html create mode 100644 oss/joomla/trunk/administrator/components/com_massmail/admin.massmail.html.php create mode 100644 oss/joomla/trunk/administrator/components/com_massmail/admin.massmail.php create mode 100644 oss/joomla/trunk/administrator/components/com_massmail/config.xml create mode 100644 oss/joomla/trunk/administrator/components/com_massmail/index.html create mode 100644 oss/joomla/trunk/administrator/components/com_massmail/massmail.xml create mode 100644 oss/joomla/trunk/administrator/components/com_massmail/toolbar.massmail.html.php create mode 100644 oss/joomla/trunk/administrator/components/com_massmail/toolbar.massmail.php diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/admin.jdownloads.html.php b/oss/joomla/trunk/administrator/components/com_jdownloads/admin.jdownloads.html.php new file mode 100644 index 00000000..cbc54327 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/admin.jdownloads.html.php @@ -0,0 +1,4383 @@ +parent; + $list = @$children[$pt] ? $children[$pt] : array(); + array_push( $list, $v ); + $children[$pt] = $list; + } + // second pass - get an indent list of the items + $ilist = JHTML::_('menu.treerecurse', 0, '', array(), $children ); + + // assemble menu items to the array + $this_treename = ''; + foreach ($ilist as $item) { + if ($this_treename) { + if ($item->id != $src_id && strpos( $item->treename, $this_treename ) === false) { + $tgt_list[] = JHTML::_('select.option', $item->id, $item->treename ); + } + } else { + if ($item->id != $src_id) { + $tgt_list[] = JHTML::_('select.option', $item->id, $item->treename ); + } else { + $this_treename = "$item->treename/"; + } + } + } + // build the html select list + return JHTML::_('select.genericlist', $tgt_list, $tag_name, $tag_attribs, $key, $text, $selected ); + } + + + +$params = JComponentHelper::getParams('com_languages'); +$frontend_lang = $params->get('site', 'en-GB'); +$language = JLanguage::getInstance($frontend_lang); + +class jlist_HTML{ + +//////////////////// CATEGORIES /////////////////////// +function categoriesEdit($option, $row, $inputbox_pic, $access_box, $last_dir_entry, $path_dir_entry){ + global $jlistConfig, $mainframe; + $database = &JFactory::getDBO(); + $editor =& JFactory::getEditor(); + ?> + + + +
+ + published ); + ?> + + + + +
+ + + + + +
cat_id ? JText::_('JLIST_BACKEND_CATSEDIT_EDIT') : JText::_('JLIST_BACKEND_CATSEDIT_ADD');?>
+ + + + + + + + + + + + + + + cat_id){ ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ *"; ?>
+ + +
+
+
+ +
+
+
+ +
+
+ *'; ?>
+ +
'; + } ?> + +
+
+
+ +
+ cat_id) { + echo JText::_('JLIST_BACKEND_CATSEDIT_CAT_LISTBOX_TITLE')." "; + } else { + echo JText::_('JLIST_BACKEND_CATSEDIT_CAT_LISTBOX_TITLE_NEW')." "; + } + ?> +
+ setQuery( $query ); + $cats = $database->loadObjectList(); + $sum_cats = count($cats); + $preload = array(); + $preload[] = JHTML::_('select.option', '0', JText::_('JLIST_BACKEND_CATSEDIT_ROOT_CAT_LISTBOX')); + if ($sum_cats < 20){ + $catlist = treeSelectList( &$cats, 0, $preload, 'catid', 'class="inputbox" size="10"', 'value', 'text', $row->cat_id); + } elseif ($sum_cats < 40){ + $catlist = treeSelectList( &$cats, 0, $preload, 'catid', 'class="inputbox" size="20"', 'value', 'text', $row->cat_id); + } else { + $catlist = treeSelectList( &$cats, 0, $preload, 'catid', 'class="inputbox" size="25"', 'value', 'text', $row->cat_id); + } + echo $catlist; + ?> +
+ cat_id) { + echo JText::_('JLIST_BACKEND_CATSEDIT_CAT_LISTBOX_DESC')." "; + } else { + echo JText::_('JLIST_BACKEND_CATSEDIT_CAT_LISTBOX_DESC_NEW')." "; + } + ?> +
*"; ?>
+ +
+

+ +
+
+ +
+ + + +

+ display( 'cat_description', @$row->cat_description , '100%', '500', '80', '5' ) ; + } else {?> + + +
+ + + + + + + + + +

+ +
+
+
+ +
+
+
+
+ + + +

+ + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + limitstart, $pageNav->limit); + + for($i=0, $n=count( $tree ); $i < $n; $i++) { + $row = &$tree[$i]; + $row->id = $row->cat_id; + + $link = 'index2.php?option=com_jdownloads&task=categories.edit&hidemainmenu=1&cid='.$row->cat_id; + $checked = JHTML::_('grid.checkedout', $row, $i ); + ?> + "> + + + + + + + + + + + + + + + + + '.JText::_('JLIST_BACKEND_CATSLIST_ACCESS_ALL').''; + $access[] = ''.JText::_('JLIST_BACKEND_CATSLIST_ACCESS_REGGED').''; + $access[] = ''.JText::_('JLIST_BACKEND_CATSLIST_ACCESS_ADMINS').''; + ?> + + + + published ? 'categories.unpublish' : 'categories.publish'; + $img = $row->published ? 'publish_g.png' : 'publish_x.png'; + ?> + + + + + + + + + + + + + + + +
+ + + + + getLimitBox(); + ?> +
+ '.JText::_('JLIST_BACKEND_PANEL_STATUS_DOWNLOADS_OFF_DESC').''; + } + ?> +
Save Order
+ + cat_id; ?> + cat_title; ?> + + sum_files; ?> + + cat_pic != ''){ + ?> + + + getSiteURL().$jlistConfig['files.uploaddir'].'/'.$row->cat_dir, JText::_('JLIST_BACKEND_CATSLIST_PATH')); + ?> + + published) { + $url_cat_link = JRoute::_(''.JText::_('JLIST_BACKEND_CATSLIST_LINK_TEXT').''); + echo $url_cat_link; + } else { + echo ''; + } + ?> + + cat_access, 0, 1)]; ?> + + cat_access, 1, 1)]; ?> + + + 0) { ?> + + orderup + + + + + + orderdown + + + + +
getPagesLinks(); ?>
getPagesCounter(); ?>
+ + + + + + + +
+ + + + +
+ +
+ created_mail) { + echo '
'.JText::_('JLIST_BACKEND_FILESEDIT_SENT_IN_FROM').''.$row->created_by.' '.JText::_('JLIST_BACKEND_FILESEDIT_SENT_IN_FROM_EMAIL').''.$row->created_mail.'
'; + } else { + echo ' 
'; + } + + $publish = array(); + $publish[] = JHTML::_('select.option', '0', JText::_('JLIST_FE_NO')); + $publish[] = JHTML::_('select.option', '1', JText::_('JLIST_FE_YES')); + $publish = JHTML::_('select.genericlist', $publish, "publish", 'size="1" class="inputbox"', 'value', 'text', $row->published ); + echo '
'.JText::_('JLIST_BACKEND_EDIT_PUBLISHED').': '.$publish.' '; + + if ($row->file_id){ + $update = array(); + $update[] = JHTML::_('select.option', '0', JText::_('JLIST_FE_NO')); + $update[] = JHTML::_('select.option', '1', JText::_('JLIST_FE_YES')); + $update = JHTML::_('select.genericlist', $update, "update", 'size="1" class="inputbox"', 'value', 'text', $row->update_active ); + echo '  '.JText::_('JLIST_BACKEND_EDIT_FILES_SET_UPDATE_TITLE').': '.$update.' '.JHTML::_('tooltip',JText::_('JLIST_BACKEND_EDIT_FILES_SET_UPDATE_TEXT')).'
'; + } + +$pane =& JPane::getInstance('Tabs'); +echo $pane->startPane('editfile'); +echo $pane->startPanel(JText::_('JLIST_BACKEND_FILESEDIT_TABTITLE_1'),'daten1'); +?> + + + + +
+ + + + + +
file_id ? JText::_('JLIST_BACKEND_FILESEDIT_EDIT') : JText::_('JLIST_BACKEND_FILESEDIT_ADD');?>
+ + + + + + + + + + + + + + + + + + + + +


+

+ + + + + + + + + + + + + license; + $inputbox_lic = JHTML::_('select.genericlist', $licenses, 'license', 'size="1" class="inputbox"', 'value', 'text', $templic ); + echo $inputbox_lic; ?> +

+ +
+
+

+ setQuery( $query ); + $cats2 = $database->loadObjectList(); + $sum_cats = count($cats2); + $preload = array(); + if ($sum_cats < 20){ + $catlist= treeSelectList( &$cats2, 0, $preload, 'cat_id2', 'class="inputbox" size="10"', 'value', 'text', $row->cat_id); + } elseif ($sum_cats < 50){ + $catlist= treeSelectList( &$cats2, 0, $preload, 'cat_id2', 'class="inputbox" size="15"', 'value', 'text', $row->cat_id); + } else { + $catlist= treeSelectList( &$cats2, 0, $preload, 'cat_id2', 'class="inputbox" size="20"', 'value', 'text', $row->cat_id); + } + echo $catlist; ?> +

+ +

+ +
+ +
+ +
+ + + + +

+ display( 'description', @$row->description , '100%', '350', '75', '20' ) ; + } else {?> + + +
+ +
+ + + + +

+ display( 'description_long', @$row->description_long , '100%', '500', '80', '5' ) ; + } else {?> + + +
+ +
+
+ + + + +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_FILESEDIT_TABTITLE_2'),'daten2'); +?> + + + + +
+ + + + + + + +
file_id ? JText::_('JLIST_BACKEND_FILESEDIT_EDIT') : JText::_('JLIST_BACKEND_FILESEDIT_ADD');?>
+ + + + + + + + + + + + + + + + + + + + + + + file_id) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+

+ +

+ +
+ +

+ + +
+


+ +
+

+ +
+

+ +
+


+ +
+

+ +
+

+ +
+


+ +
+
+
+ +
+
+
+
+ +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_FILESEDIT_TABTITLE_3'),'daten3'); +?> + + + + + +
+ + + + + + + +
file_id ? JText::_('JLIST_BACKEND_FILESEDIT_EDIT') : JText::_('JLIST_BACKEND_FILESEDIT_ADD');?>
+ + + + + + + + + + + + + url_download != ''){ ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+

+
+
+


+ url_download; ?> +
+
+

+

+ +
+

+ +
+

+ extern_site) ? 1:0);?> +
+


+ +
+

+ extern_site_mirror_1) ? 1:0);?> +
+

+ +
+

+ extern_site_mirror_2) ? 1:0);?> +
+


+ +
+ +
+ +

+ +
+
+
+
+ +endPanel(); +if ($jlistConfig['pad.exists'] & $jlistConfig['pad.use']){ +echo $pane->startPanel(JText::_('JLIST_BACKEND_FILE_EDIT_PAD_TAB_TITLE'),'padfile'); +?> + + + + + +
+ + + + + + + +
+ + + + + + + + + + + + + + + + url_download != ''){ + $filename = substr($row->url_download, 0, strrpos($row->url_download, '.') ); + if (is_file(JPATH_SITE.DS.$jlistConfig['pad.folder'].DS.$filename.'.xml')){ ?> + + + + + + +

+ '.JText::_('JLIST_BACKEND_FILE_EDIT_PAD_FOLDER_NOT_EXISTS').''; + $dis = 'disabled="disabled"'; + ?> +
+
+

+ size="50" onchange="document.adminForm.file_title.value=basename(this.value,'.xml')" type="file"/> +
+

+ +
+
+
+
+ +endPanel(); +} +echo $pane->endPane('editfile');?> + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + id = $row->file_id; + $link = 'index2.php?option=com_jdownloads&task=files.edit&hidemainmenu=1&cid='.$row->file_id; + $checked = JHTML::_('grid.checkedout', $row, $i ); + ?> + "> + + + + + + + + + + + + + + + + + + + + published ? 'files.unpublish' : 'files.publish'; + $img = $row->published ? 'publish_g.png' : 'publish_x.png'; + ?> + + + + + + + + + + + + +
+ + + + + getLimitBox().' '; + + // build cat tree listbox + $src_list = array(); + $query = "SELECT cat_id AS id, parent_id AS parent, cat_title AS name FROM #__jdownloads_cats ORDER BY ordering"; + $database->setQuery( $query ); + $cats = $database->loadObjectList(); + $preload = array(); + $preload[] = JHTML::_('select.option', '-1', JText::_('JLIST_BACKEND_FILESLIST_CATS') ); + $preload[] = JHTML::_('select.option', '0', JText::_('JLIST_BACKEND_FILESLIST_NOCATS') ); + $preload[] = JHTML::_('select.option', '-2', JText::_('JLIST_BACKEND_FILESLIST_FILTER_PUBLISHED') ); + $preload[] = JHTML::_('select.option', '-3', JText::_('JLIST_BACKEND_FILESLIST_FILTER_UNPUBLISHED') ); + $html= treeSelectList( &$cats, 0, $preload, 'cat_id', + 'class="inputbox" size="1" onchange="document.adminForm.submit();"', 'value', 'text', $cat_id); + echo $html; + ?> +
+ '.JText::_('JLIST_BACKEND_PANEL_STATUS_DOWNLOADS_OFF_DESC').''; + } + ?> +
+ Save Order
+ file_id; ?> + file_title; ?>release; ?> + file_pic){ ?> + + + cat_title;?> + description) > 200 ) { + $description_short = str_replace("'", " ", substr($row->description, 0, 200).' ...'); + } else { + $description_short = str_replace(chr(39), " ", $row->description); + } + if ($description_short != '') { + echo JHTML::_('tooltip',strip_tags($description_short), JText::_('JLIST_BACKEND_FILESLIST_DESCRIPTION_SHORT')); + } + ?> + + url_download != '') { + echo JHTML::_('tooltip',$row->url_download); + } else { + if ($row->extern_file != '') { + echo JHTML::_('tooltip',$row->extern_file); + } + } + ?>date_added, $jlistConfig['global.datetime'] ,$offset = NULL),0,10); ?>downloads;?> + 0) { ?> + + orderup + + + + + + orderdown + + + + +
getPagesLinks(); ?>
getPagesCounter(); ?>
+ + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +


+ setQuery( $query ); + $cats2 = $database->loadObjectList(); + $preload = array(); + $catlist= treeSelectList( $cats2, 0, $preload, 'cat_id2', 'class="inputbox" size="10"', 'value', 'text', $row->cat_id); + echo $catlist.'
'; + echo '

'.JText::_('JLIST_BACKEND_FILES_COPY_TEXT_3').':
'.JHTML::_('select.booleanlist',"filespublish","",(0) ? 1:0).'
'; + echo '

'.JText::_('JLIST_BACKEND_FILES_COPY_TEXT_4').':
'.JHTML::_('select.booleanlist',"copyalsofiles","",(0) ? 1:0).'
'; + ?> +
+
+
    + '.$file->file_title.''; + } + ?>
+
+ +
+
+ + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ + + +
+
+

+ SetQuery("SELECT COUNT(*) FROM #__jdownloads_files"); + $sum = $database->loadResult(); + if (!is_dir(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT')) && !$sum){ ?> + + +
+ + startPane('paneltabs'); + echo $pane->startPanel(JText::_('JLIST_BACKEND_PANEL_TABTEXT_STATUS'),'status'); + ?> + + + + + + + + + + + + + + + +
+

+

+

+

+ +
+ '.JText::_('JLIST_BACKEND_PANEL_STATUS_DOWNLOADS_OFF_DESC').'
'; + } + ?> +
+
+
+
+ endPanel(); + + echo $pane->startPanel(JText::_('JLIST_BACKEND_PANEL_TABTEXT_3'),'log'); + ?> + + + + + + + + +
+
+ +
+ +
+ endPanel(); + + echo $pane->startPanel(JText::_('JLIST_BACKEND_PANEL_TABTEXT_4'),'restore log'); + ?> + + + + + + + + +
+
+ +
+ +
+ endPanel(); + + echo $pane->startPanel(JText::_('JLIST_BACKEND_PANEL_TABTEXT_5'),'server limits'); + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ endPanel(); + + echo $pane->startPanel(JText::_('JLIST_BACKEND_PANEL_TABTEXT_2'),'version'); + ?> + + + + + + + + +
+ jDownloads '.$jlistConfig['jd.version'].' '.$jlistConfig['jd.version.state'].' Build '.$jlistConfig['jd.version.svn'].''.JText::_('JLIST_VERSION');?> +

+ +
+ endPanel(); + + echo $pane->endPane('paneltabs');?> +
+
+
+ + +
+ + + + + + + + + + + id = $row->cat_id; + $link = 'index2.php?option=com_jdownloads&task=license.edit&hidemainmenu=1&cid='.$row->id; + $checked = JHTML::_('grid.checkedout', $row, $i ); + ?> + "> + + + + + + + + +
 
license_title; ?>license_url; ?> + license_text) > 200 ) { + echo substr($row->license_text, 0, 197).'...'; + } else { + echo $row->license_text; + } + ?> +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + + +
id ? JText::_('JLIST_BACKEND_LICEDIT_EDIT') : JText::_('JLIST_BACKEND_LICEDIT_ADD');?>
+ + + + + + + + + + +

+ +

+ +

+ display( 'license_text', @$row->license_text , '100%', '500', '80', '5' ) ; + + } else {?> + + + +
+
+
+

+ + + + + + +
+ + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+
+ + + + +
+
+
+
+ startPane('temppaneltabs'); + echo $pane->startPanel(JText::_('JLIST_BACKEND_TEMPPANEL_TABTEXT_INFO'),'Info'); + ?> + + + + +
+ + +
+ endPanel(); + echo $pane->endPane('temppaneltabs');?> +
+ + +
+
+ + + + +
+ + + + + + + + + + + + id; + $checked = JHTML::_('grid.checkedout', $row, $i ); + ?> + "> + + + + + + + + + + + +
template_name; ?> + template_typ -1]; ?> + + template_active > 0) { ?> + + + + locked > 0) { ?> + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + + +
id ? JText::_('JLIST_BACKEND_TEMPEDIT_EDIT') : JText::_('JLIST_BACKEND_TEMPEDIT_ADD');?>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ locked){ + $dis = 'disabled="disabled"'; + } else { + $dis = ''; + } ?> + size="70" maxlength="64"/> +
'.JText::_('JLIST_BACKEND_TEMPEDIT_TITLE_NOT_ALLOWED_TO_CHANGE_DESK'); }?> +

+ +
+

+ +
+

+ display( 'template_text', @$row->template_text , '100%', '500', '80', '5' ) ; + } else {?> + + +
+
'.JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_DESC2').'

'.JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_DESC3'); + ?> +
+
+
+
Templates Infos
+
+
+
+
+

+ + + + + + + + +
+ + +
+ + + + + + + + + + + + id; + $checked = JHTML::_('grid.checkedout', $row, $i ); + ?> + "> + + + + + + + + + + + +
template_name; ?> + template_typ -1]; ?> + + template_active > 0) { ?> + + + + + locked > 0) { ?> + + +
+ + + + +
+ + +
+ + + + + + + + + + + + id; + $checked = JHTML::_('grid.checkedout', $row, $i ); + ?> + "> + + + + + + + + + + + +
template_name; ?> + template_typ -1]; ?> + + template_active > 0) { ?> + + + + + locked > 0) { ?> + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + + +
id ? JText::_('JLIST_BACKEND_TEMPEDIT_EDIT') : JText::_('JLIST_BACKEND_TEMPEDIT_ADD');?>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ locked){ + $dis = 'disabled="disabled"'; + } else { + $dis = ''; + } ?> + size="70" maxlength="64"/> +
'.JText::_('JLIST_BACKEND_TEMPEDIT_TITLE_NOT_ALLOWED_TO_CHANGE_DESK'); }?> +

+ +
+

+ checkbox_off ); + ?> +
+

+ symbol_off ); + ?> +
+

+ display( 'template_text', @$row->template_text , '100%', '500', '80', '5' ) ; + } else {?> + + +
+
'.JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DESC2').'

'.JText::_('JLIST_BACKEND_TEMPEDIT_INFO_LIGHTBOX'); + ?> +
+
+
Templates Infos
+
+
+
+
+

+ + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + + + +
id ? JText::_('JLIST_BACKEND_TEMPEDIT_EDIT') : JText::_('JLIST_BACKEND_TEMPEDIT_ADD');?>
+ + + + + + + + + + + + + + + + + + + + + +

+ locked){ + $dis = 'disabled="disabled"'; + } else { + $dis = ''; + } ?> + size="70" maxlength="64"/> +
'.JText::_('JLIST_BACKEND_TEMPEDIT_TITLE_NOT_ALLOWED_TO_CHANGE_DESK'); }?> +

+ +
+

+ display( 'template_text', @$row->template_text , '100%', '500', '80', '5' ) ; + } else {?> + + +
+
'.JText::_('JLIST_BACKEND_TEMPEDIT_INFO_LIGHTBOX'); + ?> +
+
+
Templates Infos
+
+
+
+
+

+ + + + + + + + +
+ + +
+ + + + + + + + + + + + id; + $checked = JHTML::_('grid.checkedout', $row, $i ); + ?> + "> + + + + + + + + + + + +
template_name; ?> + template_typ -1]; ?> + + template_active > 0) { ?> + + + + locked > 0) { ?> + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + + +
id ? JText::_('JLIST_BACKEND_TEMPEDIT_EDIT') : JText::_('JLIST_BACKEND_TEMPEDIT_ADD');?>
+ + + + + + + + + + + + + + + + + + + + + +

+ locked){ + $dis = 'disabled="disabled"'; + } else { + $dis = ''; + } ?> + size="70" maxlength="64"/> +
'.JText::_('JLIST_BACKEND_TEMPEDIT_TITLE_NOT_ALLOWED_TO_CHANGE_DESK'); }?> +

+ +
+

+ display( 'template_text', @$row->template_text , '100%', '500', '80', '5' ) ; + } else {?> + + +
+ +
+
+
Templates Infos
+
+
+
+
+

+ + + + + + + + +
+ + + +
+ + + + + +
+ + + + + + + +
+ + + + + + + +
+ +
+
+ +

+ +
+
+
+

+ + + + + +
+ + +
+ + + + + +
+ + + + + + + +
+ + + + + + + + +
+ +
+ + +

+ +
+
+
+

+ + + + +
+ +
+
 
+ +startPane('jdconfig'); +echo $pane->startPanel(JText::_('JLIST_BACKEND_SETTINGS_TABTEXT_DOWNLOADS'),'downloads'); +?> + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + /
+
+ +

+ +
+
+ +

+
+ +

+
+
+ +

+
+
+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +
+
+
+ +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_SETTINGS_FAUTO_TAB_TITLE'),'autodetect'); +?> + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +
+
+
+ +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_SETTINGS_TABTEXT_FRONTEND'),'frontend'); +?> + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+
+ +

+ +
+
+ +

+ +

+ +

+ +

+ +

+ +

+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +

+
+
+ '.JText::_('JLIST_BACKEND_SETTINGS_FRONTEND_USE_CHECKBOX_INFO');?> +

+
+
+ +

+ +
+
+ +

+ +
+
+ +


+ +
+ getCfg('absolute_path') . '/components/com_jcomments/jcomments.php'; + if (file_exists($jcomments)) { + echo JText::_('JLIST_BACKEND_SETTINGS_JCOMMENTS_EXISTS_DESC'); + } else { + echo JText::_('JLIST_BACKEND_SETTINGS_JCOMMENTS_DESC'); + } ?> +

+ +
+
+ +
+
+
+ + + + + +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_SETTINGS_TABTEXT_BACKEND'),'backend'); +?> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +


+ +
+ +


+ +
+ +


+ +
+ +


+ +
+ +


+ +

+ +


+ +

+ +
+
+ +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_SETTINGS_TABTEXT_IMAGES'),'pics'); +?> + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +


+ px +
+ '.JText::_('JLIST_BACKEND_SETTINGS_FRONTEND_USE_SYMBOLE_INFO').'
'; + $msize = $jlistConfig['info.icons.size']; + $sample_path = $mainframe->getSiteURL().'images/jdownloads/miniimages/'; + $sample_pic = ' '; + $sample_pic .= ' '; + $sample_pic .= ''; + $sample_pic .= ' '; + $sample_pic .= ' '; + $sample_pic .= ''; + $sample_pic .= ' '; + $sample_pic .= ''; + echo $sample_pic; ?> +


+ px
+ +

+ +
+
+ +


+ px
+ +

+ +
+
+ +


+
+ +

+ +
+ +
+ +

+
+ +

+ +
+ +
+ +

+
+ +

+ +
+ +
+ +


+ +
+ +
+ +

+ +
+ +
+ +

+ +
+ +
+ +

+ +
+ +
+ +


+

+ '.JText::_('JLIST_CONFIG_SETTINGS_THUMBS_STATUS_GD_OK').''; + } else { + echo ''.JText::_('JLIST_CONFIG_SETTINGS_THUMBS_STATUS_GD_NOT_OK').''; + } ?> +
+ px + +
+ px + +


+ +
+ getSiteURL().'images/jdownloads/screenshots/thumbnails/no_pic.gif"/>'; + echo $nopic; + ?> +
+
+ +


+ +
+
+ +


+ +
+ +
+
+
+ +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_SETTINGS_MEDIA_TAB_TITLE'),'multimedia'); +?> + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+

+ +
+
+ +


+ +
+
+ +

+ +
+
+ +
+
+
+
+ +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_SETTINGS_FE_UPLOAD_TAB_TITLE'),'upload'); +?> + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + +

+ +
+
+ +

+ +
+
+ +

+ +
+
+ +
+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+
+ +

+ + +
+
+ +

+ +
+
+ +

+ +
+
+ +

+
+ +
+
+ +

+ +

+ +
+
+
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

+ +

+ +

+ +

+ +

+ +

+ +

+ +

+ +

+ +
+
+ +

+ +

+ +
+
+ +

+ +
+
+ +
+
+
+ +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_SETTINGS_TABTEXT_SECURITY'),'security'); +?> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+ +
+ +

+
+ +
+ +

+
+ +
+ +


+ +

+ +

+
+ +
+ +
+
+ +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_SETTINGS_TABTEXT_EMAIL'),'email'); +?> + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+ +

+ +
+ +

+ +
+
+ +

+
+
+ +

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+ +

+ +
+ +

+ +
+
+ +

+
+
+ +

+ +
+
+ +
+
+ +
+ +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_SETTINGS_TABTEXT_SPECIALS'),'specials'); +?> + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + +

+ +
+
+ +

+ +

+ +
+
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + +

+ +
+
+ +

+
+
+ +

+ +

+ +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+

+ +
+
+ +

+
+ +
+
+ +

+ +
+
+ +
+
+ +
+ + + + + + + +endPanel(); +echo $pane->startPanel(JText::_('JLIST_BACKEND_SETTINGS_TABTEXT_PLUGINS'),'plugins'); +?> + + + + +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ '.JText::_('JLIST_BACKEND_SETTINGS_FILEPLUGIN_NOT_INSTALLED').''; ?> +

+ +
+ +

+ +
+ +

+ +
+ +

+ +
+ +

+ +

+ +

+ +

+ +
+
+
+ +endPanel(); +echo $pane->endPane('jdconfig'); +?> + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + +
+


+ +
+
+
+ +
+ + + + +
+ + + + + + + + + + + + + + +
+
+
+ +

+ '.JText::_('JLIST_BACKEND_INFO_LINK_BACK').''; + ?> + + + + + +
+ +
+ + + + +
+ + + + + + + + + + + +
+ jDownloads Logo

+
+ jDownloads - a Download Management Component for Joomla!
+ Copyright 2007/2008 by Arno Betz - www.jDownloads.com all rights reserved. +

+ jDownloads logo created and copyright by rkdesign - all rights reserved.

+ '; + echo JText::_('JLIST_BACKEND_INFO_LICENSE_TEXT'); + ?> +
+
+ +

+'.JText::_('JLIST_BACKEND_INFO_LINK_BACK').''; + echo $back_link; + ?> + + + + + +
+ \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/admin.jdownloads.php b/oss/joomla/trunk/administrator/components/com_jdownloads/admin.jdownloads.php new file mode 100644 index 00000000..37a17a44 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/admin.jdownloads.php @@ -0,0 +1,4177 @@ +getPath( 'admin_html' ) ); +require_once( $mainframe->getPath( 'class' ) ); +require_once(EL_ADMIN_PATH.'/../../includes/pageNavigation.php'); + +// added backend css +$document =& JFactory::getDocument(); +$css = JURI::base(true).'/components/com_jdownloads/style.css'; +$document->addStyleSheet( $css, 'text/css', null, array() ); + +$GLOBALS['jlistConfig'] = buildjlistConfig(); + +$user = &JFactory::getUser(); + +$cid = JArrayHelper::getValue($_REQUEST, 'cid', array()); +$cat_id = intval(JArrayHelper::getValue($_REQUEST, 'cat_id', -1)); +$limit = intval( JArrayHelper::getValue( $_REQUEST, 'limit', $jlistConfig['files.per.side.be'] ) ); +$limitstart = intval( JArrayHelper::getValue( $_REQUEST, 'limitstart', 0 ) ); +$task = JArrayHelper::getValue( $_REQUEST, 'task', '' ); + +$database = &JFactory::getDBO(); +// search pad source +if (!$jlistConfig['pad.exists']){ + if (is_file(JPATH_COMPONENT_ADMINISTRATOR.DS.'pad'.DS.'padfile.php')){ + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '1' WHERE setting_name = 'pad.exists'"); + $database->query(); + $GLOBALS['jlistConfig'] = buildjlistConfig(); + } +} + +switch($task){ + + case 'categories.publish': + categoriesPublish( $cid, 1, $option ); + break; + + case 'categories.unpublish': + categoriesPublish( $cid, 0, $option ); + break; + + case 'categories.edit': + categoriesEdit($option,$cid); + break; + + case 'categories.list': + categoriesList($option, $task, $limitstart); + break; + + case 'categories.save': + categoriesSave($option); + break; + + case 'categories.apply': + categoriesSave($option,1); + break; + + case 'categories.delete': + categoriesDelete($option, $cid); + break; + + case 'categories.cancel': + categoriesCancel($option); + break; + + case 'categories.orderup': + categoriesOrder( $cid[0], -1, $option ); + break; + + case 'categories.orderdown': + categoriesOrder( $cid[0], 1, $option ); + break; + + case 'saveorder': + $typ = JArrayHelper::getValue( $_REQUEST, 'action' ); + if ($typ == 'file') { + filesSaveOrder( $cid, $cat_id ); + } else { + categoriesSaveOrder( $cid ); + } + break; + +/*FILES*/ + + case 'files.publish': + filesPublish( $cid, 1, $option, $cat_id ); + break; + + case 'files.unpublish': + filesPublish( $cid, 0, $option, $cat_id ); + break; + + case 'files.edit': + filesEdit($option,$cid,$cat_id); + break; + + case 'files.list': + filesList($option, $task, $cat_id, $limitstart); + break; + + case 'files.save': + filesSave($option, $cat_id); + break; + + case 'files.copy': + filesCopy($option, $cid, $cat_id); + break; + + case 'files.copy.save': + filesCopySave($option, $cat_id); + break; + + case 'files.apply': + filesSave($option, $cat_id, 1); + break; + + case 'files.delete': + filesDelete($option, $cid, $cat_id); + break; + + case 'files.remove': + filesRemove($option, $cid, $cat_id); + break; + + case 'files.cancel': + filesCancel($option, $cat_id); + break; + + case 'files.saveorder': + filesSaveOrder( $cid, $cat_id ); + break; + + case 'files.orderup': + filesOrder( $cid[0], -1, $option, $cat_id ); + break; + + case 'files.orderdown': + filesOrder( $cid[0], 1, $option, $cat_id ); + break; + +// Licenses + + case 'license.edit': + editLicense($option, $cid); + break; + + case 'license.save': + saveLicense($option); + break; + + case 'license.delete': + deleteLicense($option, $cid); + break; + + case 'license.cancel': + cancelLicense($option); + break; + + + case 'license.list': + listLicense($option); + break; + +// Templates + + case 'templates.menu': + menuTemplates($option, $cid); + break; + + case 'templates.edit.cats': + editTemplatesCats($option, $cid); + break; + + case 'templates.save.cats': + saveTemplatesCats($option); + break; + + case 'templates.apply.cats': + saveTemplatesCats($option,1); + break; + + case 'templates.delete.cats': + deleteTemplatesCats($option, $cid); + break; + + case 'templates.cancel.cats': + cancelTemplatesCats($option); + break; + + case 'templates.list.cats': + listTemplatesCats($option); + break; + + case 'templates.active.cats': + activeTemplatesCats($option, $cid); + break; + + case 'templates.edit.files': + editTemplatesFiles($option, $cid); + break; + + case 'templates.save.files': + saveTemplatesFiles($option); + break; + + case 'templates.apply.files': + saveTemplatesFiles($option,1); + break; + + case 'templates.delete.files': + deleteTemplatesFiles($option, $cid); + break; + + case 'templates.cancel.files': + cancelTemplatesFiles($option); + break; + + case 'templates.list.files': + listTemplatesFiles($option); + break; + + case 'templates.active.files': + activeTemplatesFiles($option, $cid); + break; + + case 'templates.edit.details': + editTemplatesDetails($option, $cid); + break; + + case 'templates.save.details': + saveTemplatesDetails($option); + break; + + case 'templates.apply.details': + saveTemplatesDetails($option,1); + break; + + case 'templates.delete.details': + deleteTemplatesDetails($option, $cid); + break; + + case 'templates.cancel.details': + cancelTemplatesDetails($option); + break; + + case 'templates.list.details': + listTemplatesDetails($option); + break; + + case 'templates.active.details': + activeTemplatesDetails($option, $cid); + break; + + + case 'templates.edit.summary': + editTemplatesSummary($option, $cid); + break; + + case 'templates.save.summary': + saveTemplatesSummary($option); + break; + + case 'templates.apply.summary': + saveTemplatesSummary($option,1); + break; + + case 'templates.delete.summary': + deleteTemplatesSummary($option, $cid); + break; + + case 'templates.cancel.summary': + cancelTemplatesSummary($option); + break; + + case 'templates.list.summary': + listTemplatesSummary($option); + break; + + case 'templates.active.summary': + activeTemplatesSummary($option, $cid); + break; + +// css edit + case 'css.edit': + cssEdit($option); + break; + +// css save + case 'css.save': + cssSave($option, $css_file, $css_text); + break; + +// language file edit + case 'language.edit': + languageEdit($option); + break; + +// language file save + case 'language.save': + languageSave($option, $lang_file, $lang_text); + break; + +// create backup file + case 'backup': + runBackup($option); + break; + +// upload file for restore + case 'restore': + showRestore($option, $task); + break; + +// run restore file + case 'restore.run': + runRestore($option, $task); + break; + +// manage download directories + case 'directories.edit': + directoriesEdit($option); + break; + +// create new directory + case 'directories.new': + directoriesNew($option); + break; + +// delete sub directory + case 'directory.remove': + directoryRemove($option); + break; + +// info + case 'info': + showInfo($option); + break; + +// info + case 'support': + showSupport($option); + break; + + case 'install.sample': + sampleInstall($option); + break; + +// Configuration + case 'config.save': + saveConfig($option); + break; + + case 'config.show': + showConfig($option); + break; + + case 'scan.files': + scanFiles($option, $task); + break; + + case 'delete.log': + deleteLog($option); + break; + + case 'delete.restore.log': + deleteRestoreLog($option); + break; + + default: + jlist_HTML::controlPanel($option, $task); + break; +} + +/* checkFiles +/ +/ check uploaddir and subdirs for variations +/ +/ +*/ +function checkFiles($task) { + global $jlistConfig; + ini_set('max_execution_time', '600'); + ignore_user_abort(true); + + $database = &JFactory::getDBO(); + //check if all files and dirs in the uploaddir directory are listed + if($jlistConfig['files.autodetect'] || $task == 'restore.run' || $task == 'scan.files'){ + if(file_exists(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'])){ + $startdir = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'; + $dir_len = strlen($startdir); + $dir = $startdir; + $only = FALSE; + $type = array(); + if ($jlistConfig['all.files.autodetect']){ + $allFiles = true; + } else { + $allFiles = FALSE; + $type = explode(',', $jlistConfig['file.types.autodetect']); + } + $recursive = TRUE; + $onlyDir = TRUE; + $files = array(); + $file = array(); + + $dirlist = array(); + + $new_files = 0; + $new_dirs_found = 0; + $new_dirs_create = 0; + $new_dirs_errors = 0; + $new_dirs_exists = 0; + $new_cats_create = 0; + $log_message = ''; + $success = FALSE; + + $log_array = array(); + + // zuerst neue cats suchen + clearstatcache(); + $searchdir = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'; + $searchdirs = array(); + $dirlist = searchdir($searchdir); + $no_writable = 0; + for ($i=0; $i < count($dirlist); $i++) { + // no tempzifiles directory + if(strpos($dirlist[$i], 'tempzipfiles') === FALSE) { + if (!is_writable($dirlist[$i])){ + $no_writable++; + } + $dirlist[$i] = str_replace($searchdir, '', $dirlist[$i]); + // am ende / löschen + if ($pos = strrpos($dirlist[$i], '/')){ + $searchdirs[] = substr($dirlist[$i], 0, $pos); + } + // $dirlist[$i] = substr($dirlist[$i], 0, $pos); + // $searchdirs[] = $dirlist[$i]; + } + } + for ($i=1; $i < count($searchdirs); $i++) { + $dirs = explode('/', $searchdirs[$i]); + $sum = count($dirs); + // this characters are not allowed in foldernames + if (!eregi("[?!:;\*@#%~=\+\$\^'\"\(\)\<\>]", $searchdirs[$i])) { + // prüfen ob dir als cat vorhanden + $database->setQuery("SELECT COUNT(*) FROM #__jdownloads_cats WHERE cat_dir = '$searchdirs[$i]'"); + $cat_da = $database->loadResult(); + // wenn nicht - hinzufügen + if (!$cat_da) { + $new_dirs_found++; + // neue cat anlegen + $row = new jlist_cats($database); + // bind it to the table + if (!$row -> bind($_POST)) { + echo "\n"; + exit(); + } + $row->cat_description = ''; + $row->cat_title = $dirs[$sum - 1]; + $row->cat_pic = $jlistConfig['cat.pic.default.filename']; + if ($sum > 1) { + // cat_id für parent_id holen + $parent = substr($searchdirs[$i], 0, strrpos($searchdirs[$i] , '/') ); + $database->setQuery("SELECT cat_id FROM #__jdownloads_cats WHERE cat_dir = '$parent'"); + $row->parent_id = $database->loadResult(); + } + $row->cat_alias = $row->cat_title; + $row->cat_alias = JFilterOutput::stringURLSafe($row->cat_alias); + if(trim(str_replace('-','',$row->cat_alias)) == '') { + $datenow =& JFactory::getDate(); + $row->cat_alias = $datenow->toFormat("%Y-%m-%d-%H-%M-%S"); + } + $row->cat_dir = $searchdirs[$i]; + // get a correct ordering value + if (!$row->ordering) { + $row->ordering = $row->getNextOrder(); + } + if (!$row -> store()) { + echo "\n"; + exit(); + } else { + if(!$row->cat_id) $row->cat_id = mysql_insert_id(); + } + $new_cats_create++; + $log_array[] = strftime($jlistConfig['global.datetime']).' - '.JText::_('JLIST_AUTO_CAT_CHECK_ADDED').' '.$searchdirs[$i].'
'; + } + } else { + // folder with illegal characters in name founded - create msg + $log_array[] = strftime($jlistConfig['global.datetime']).' - '.$searchdirs[$i].' '.JText::_('JLIST_AUTO_CAT_CHECK_ILLEGAL_NAME_FOUND_MSG').'
'; + } + } + + // Prüfen ob alle publishte cat-dirs existieren + $mis_cats = 0; + $database->setQuery("SELECT * FROM #__jdownloads_cats WHERE published=1"); + $cats = $database->loadObjectList(); + foreach($cats as $cat){ + $cat_dir = $searchdir.$cat->cat_dir; + // wenn nicht da - unpublishen + if(!is_dir($cat_dir)){ + $database->setQuery("UPDATE #__jdownloads_cats SET published = 0 WHERE cat_id = '$cat->cat_id'"); + $database->query(); + $mis_cats++; + $log_array[] = strftime($jlistConfig['global.datetime']).' - '.JText::_('JLIST_AUTO_CAT_CHECK_DISABLED').' '.$cat->cat_dir.'
'; + } + } + + // when add categories - the access rigts must checked from all + if ($new_cats_create){ + $sum = set_rights_of_cat (0, '00', $sum); // all cats will checked + } + + // alle files suchen und mit jdownloads_files abgleichen + $all_dirs = scan_dir($dir, $type, $only, $allFiles, $recursive, $onlyDir, $files); + if ($all_dirs != FALSE) { + reset ($files); + $new_files = 0; + foreach($files as $key3 => $array2) { + $filename = $files[$key3]['file']; + if ($filename <> '') { + // no files in tempzipfiles and jD root directory + if(strpos($files[$key3]['path'], 'tempzipfiles') === FALSE && $files[$key3]['path'] != $startdir) { + $dir_path_total = $files[$key3]['path']; + $restpath = substr($files[$key3]['path'], $dir_len); + $only_dirs = substr($restpath, 0, strlen($restpath) - 1); + // existiert filename in files? + $exist_file = false; + $database->setQuery("SELECT * FROM #__jdownloads_files WHERE url_download = '$filename'"); + $row_file_exists = $database->loadObjectList(); + // wenn da - in cats suchen + if ($row_file_exists) { + foreach ($row_file_exists as $row_file_exist) { + if (!$exist_file) { + $database->setQuery("SELECT COUNT(*) FROM #__jdownloads_cats WHERE cat_dir = '$only_dirs' AND cat_id = '$row_file_exist->cat_id'" ); + $row_cat_find = $database->loadResult(); + + if ($row_cat_find) { + $exist_file = true; + } else { + $exist_file = false; + } + } + } + } else { + $exist_file = false; + } + + if(!$exist_file) { + // not check the filename when restore backup file + if ($task != 'restore.run'){ + $filename_new = checkFileName($filename); + if ($filename_new != $filename) { + $success = @rename($startdir.$only_dirs.'/'.$filename, $startdir.$only_dirs.'/'.$filename_new); + if ($success) { + $filename = $filename_new; + } else { + // could not rename filename + } + } + } + $database->setQuery("SELECT cat_id FROM #__jdownloads_cats WHERE cat_dir = '$only_dirs'"); + $cat_id = $database->loadResult(); + if ($cat_id) { + $file_extension = strtolower(substr(strrchr($filename,"."),1)); + $file_obj = new jlist_files($database); + $file_obj->url_download = $filename; + $file_obj->file_title = str_replace('.'.$file_extension, '', $filename); + $file_obj->size = $files[$key3]['size']; + $file_obj->description = ''; + $file_obj->date_added = JHTML::_('date', 'now','%Y.%m.%d %H:%M:%S'); + $file_obj->cat_id = $cat_id; + $file_obj->file_alias = $file_obj->file_title; + $file_obj->file_alias = JFilterOutput::stringURLSafe($file_obj->file_alias); + if(trim(str_replace('-','',$file_obj->file_alias)) == '') { + $datenow =& JFactory::getDate(); + $file_obj->file_alias = $datenow->toFormat("%Y-%m-%d-%H-%M-%S"); + } + $filepfad = JPATH_SITE.'/images/jdownloads/fileimages/'.$file_extension.'.png'; + if(file_exists(JPATH_SITE.'/images/jdownloads/fileimages/'.$file_extension.'.png')){ + $file_obj->file_pic = $file_extension.'.png'; + } else { + $file_obj->file_pic = $jlistConfig['file.pic.default.filename']; + } + $file_obj->created_by = JText::_('JLIST_AUTO_FILE_CHECK_IMPORT_BY'); + // nur sofort publishen wenn option aktiv + if ($jlistConfig['autopublish.founded.files']){ + $file_obj->published = 1; + } else { + $file_obj->published = 0; + } + if ($jlistConfig['be.new.files.order.first']){ + $file_obj->ordering = 0; + $reorder = true; + } else { + $file_obj->ordering = $file_obj->getNextOrder(); + $reorder = false; + } + $file_obj->store(); + + if ($reorder){ + $res = $file_obj->reorder(''); + } + $new_files++; + $log_array[] = strftime($jlistConfig['global.datetime']).' - '.JText::_('JLIST_AUTO_FILE_CHECK_ADDED').' '.$only_dirs.'/'.$filename.'
'; + } else { + // cat dir not exist or invalid name + + } + } + } + } + } + } + + //prüfen ob download dateien alle physisch vorhanden - sonst unpublishen + $mis_files = 0; + $database->setQuery("SELECT * FROM #__jdownloads_files WHERE published=1"); + $files = $database->loadObjectList(); + foreach($files as $file){ + // nur interne files testen + if ($file->url_download <> ''){ + $database->setQuery("SELECT cat_dir FROM #__jdownloads_cats WHERE cat_id = '$file->cat_id'"); + $cat_dir = $database->loadResult(); + $cat_dir_long = $startdir.$cat_dir.'/'.$file->url_download; + // wenn nicht da - unpublishen + if(!is_file($cat_dir_long)){ + $database->setQuery("UPDATE #__jdownloads_files SET published = 0 WHERE file_id = '$file->file_id'"); + $database->query(); + $mis_files++; + $log_array[] = strftime($jlistConfig['global.datetime']).' - '.JText::_('JLIST_AUTO_FILE_CHECK_DISABLED').' '.$cat_dir.'/'.$file->url_download.'
'; + } + } + } + + // save log + if ($log_array) { + foreach ($log_array as $log) { + $log_message .= $log; + } + if ($task != 'restore.run'){ + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '$log_message' WHERE setting_name = 'last.log.message'"); + $database->query(); + $jlistConfig['last.log.message'] = $log_message; + } + } + + if ($task == 'restore.run'){ + return $log_message; + } + + if ($task == '' or $task == 'scan.files') { + echo '
'.JText::_('JLIST_BACKEND_AUTOCHECK_TITLE').'

'; + if ($new_cats_create > 0){ + echo ''.$new_cats_create.' '.JText::_('JLIST_BACKEND_AUTOCHECK_NEW_CATS').'
'; + } else { + echo ''.JText::_('JLIST_BACKEND_AUTOCHECK_NO_NEW_CATS').'
'; + } + + if ($new_files > 0){ + echo ''.$new_files.' '.JText::_('JLIST_BACKEND_AUTOCHECK_NEW_FILES').'
'; + } else { + echo ''.JText::_('JLIST_BACKEND_AUTOCHECK_NO_NEW_FILES').'
'; + } + + if ($mis_cats > 0){ + echo ''.$mis_cats.' '.JText::_('JLIST_BACKEND_AUTOCHECK_MISSING_CATS').'
'; + } else { + echo ''.JText::_('JLIST_BACKEND_AUTOCHECK_NO_MISSING_CATS').'
'; + } + + + if ($mis_files > 0){ + echo ''.$mis_files.' '.JText::_('JLIST_BACKEND_AUTOCHECK_MISSING_FILES').'

'; + } else { + echo ''.JText::_('JLIST_BACKEND_AUTOCHECK_NO_MISSING_FILES').'
'; + } + + if ($log_message) echo '
'.JText::_('JLIST_BACKEND_AUTOCHECK_LOG_TITLE').'
'.$log_message.'
'; + + } else { + + if ($task == 'files.list') { + echo ''; + if ($new_files > 0){ + echo ''; + } else { + echo ''; + } + if ($mis_files > 0){ + echo '
'.JText::_('JLIST_BACKEND_AUTOCHECK_TITLE').''.$new_files.' '.JText::_('JLIST_BACKEND_AUTOCHECK_NEW_FILES').'
'.JText::_('JLIST_BACKEND_AUTOCHECK_REFRESH_MESSAGE').'
'.JText::_('JLIST_BACKEND_AUTOCHECK_NO_NEW_FILES').''.$mis_files.' '.JText::_('JLIST_BACKEND_AUTOCHECK_MISSING_FILES').'
'.JText::_('JLIST_BACKEND_AUTOCHECK_REFRESH_MESSAGE').'
'; + } else { + echo ''.JText::_('JLIST_BACKEND_AUTOCHECK_NO_MISSING_FILES').''; + } + + if ($log_message) echo '
'.JText::_('JLIST_BACKEND_AUTOCHECK_LOG_TITLE').'
'.$log_message.'
'; + } + + if ($task == 'categories.list') { + echo ''; + if ($new_cats_create > 0){ + echo ''; + } else { + echo ''; + } + if ($mis_cats > 0){ + echo '
'.JText::_('JLIST_BACKEND_AUTOCHECK_TITLE').''.$new_cats_create.' '.JText::_('JLIST_BACKEND_AUTOCHECK_NEW_CATS').'
'.JText::_('JLIST_BACKEND_AUTOCHECK_REFRESH_MESSAGE').'
'.JText::_('JLIST_BACKEND_AUTOCHECK_NO_NEW_CATS').''.$mis_cats.' '.JText::_('JLIST_BACKEND_AUTOCHECK_MISSING_CATS').'
'.JText::_('JLIST_BACKEND_AUTOCHECK_REFRESH_MESSAGE').'
'; + } else { + echo ''.JText::_('JLIST_BACKEND_AUTOCHECK_NO_MISSING_CATS').''; + } + + if ($log_message) echo '
'.JText::_('JLIST_BACKEND_AUTOCHECK_LOG_TITLE').'
'.$log_message.'
'; + } + + + } + + } else { + // error upload dir not exists + echo ''.JText::_('JLIST_AUTOCHECK_DIR_NOT_EXIST').'

'.JText::_('JLIST_AUTOCHECK_DIR_NOT_EXIST_2').'
'; + + } + } +} + + +/** + * Füllt das Array mit den Dateiinformationen + * (Pfad, Verzeichnisname, Dateiname, Dateigröße, letzte Aktualisierung + * + * @param string $dir Pfad zum Verzeichnis + * @param string $file enthält den Dateinamen + * @param string $onlyDir Enthält nur den Verzeichnisnamen + * @param array $type Suchmuster dateitypen + * @param bool $allFiles Listet alle Dateien in den Verzeichnissen auf ohne Rücksicht auf $type + * @param array $files Enthält den Inhalt der Verzeichnisstruktur + * @return array Das Array mit allen Dateinamen + */ +function buildArray($dir,$file,$onlyDir,$type,$allFiles,$files) { + + $typeFormat = FALSE; + foreach ($type as $item) + { + if (strtolower($item) == substr(strtolower($file), -strlen($item))) + $typeFormat = TRUE; + } + + if($allFiles || $typeFormat == TRUE) + { + if(empty($onlyDir)) + $onlyDir = substr($dir, -strlen($dir), -1); + $files[$dir.$file]['path'] = $dir; + $files[$dir.$file]['file'] = $file; + $files[$dir.$file]['size'] = fsize($dir.$file); + $files[$dir.$file]['date'] = filemtime($dir.$file); + } + return $files; +} + +/** + * Durchläuft rekursiv das zu durchsuchende Verzeichnis + * + * @param string $dir Pfad zum Verzeichnis + * @param array $type aufzulistende Dateitypen + * @param bool $allFiles Listet alle Dateien in den Verzeichnissen auf ohne Rücksicht auf $type + * @param bool $recursive Durchläuft rekursiv alle Verzeichnisse und Unterverzeichnisse + * @param string $onlyDir Enthält nur den Verzeichnisnamen + * @param array $files Enthält als Verweis(Referenz) den Inhalt der Verzeichnisstruktur + * @return mixed false im Fehlerfall, ansonsten ein Array mit allen Dateinamen + */ + +function scan_dir($dir, $type=array(),$only=FALSE, $allFiles=FALSE, $recursive=TRUE, $onlyDir="", &$files){ + $handle = @opendir($dir); + if(!$handle) + return false; + while ($file = @readdir ($handle)) + { + if (eregi("^\.{1,2}$",$file)) + { + continue; + } + if(!$recursive && $dir != $dir.$file."/") + { + if(is_dir($dir.$file)) + continue; + } + if(is_dir($dir.$file)) + { + scan_dir($dir.$file."/", $type, $only, $allFiles, $recursive, $file, $files); + } + else + { + if($only) + $onlyDir = $dir; + + $files = buildArray($dir,$file,$onlyDir,$type,$allFiles,$files); + } + } + @closedir($handle); + return $files; +} + +function fsize($file) { + $a = array("B", "KB", "MB", "GB", "TB", "PB"); + + $pos = 0; + $size = filesize($file); + while ($size >= 1024) { + $size /= 1024; + $pos++; + } + + return round($size,2)." ".$a[$pos]; +} + +// get all dirs und subdirs for upload +// $path : path to browse +// $maxdepth : how deep to browse (-1=unlimited) +// $mode : "FULL"|"DIRS"|"FILES" +// $d : must not be defined + +function searchdir ( $path , $maxdepth = -1 , $mode = "DIRS" , $d = 0 ) { + if ( substr ( $path , strlen ( $path ) - 1 ) != '/' ) { $path .= '/' ; } + $dirlist = array () ; + if ( $mode != "FILES" ) { + $dirlist[] = $path ; + } + if ( $handle = opendir ( $path ) ) { + while ( false !== ( $file = readdir ( $handle ) ) ) { + if ( $file != '.' && $file != '..' ) { + $file = $path . $file ; + if ( ! is_dir ( $file ) ) { + if ( $mode != "DIRS" ) { + $dirlist[] = $file ; + } + } + elseif ( $d >=0 && ($d < $maxdepth || $maxdepth < 0) ) { + $result = searchdir ( $file . '/' , $maxdepth , $mode , $d + 1 ) ; + $dirlist = array_merge ( $dirlist , $result ) ; + } + } + } + closedir ( $handle ) ; + } + if ( $d == 0 ) { + natcasesort ( $dirlist ) ; + } + return ( $dirlist ) ; +} + +//////////////////// CATEGORIES /////////////////////// + +// list subcats as tree +function tree($parent, $ident, $tree) { + global $tree; + $database = &JFactory::getDBO(); + + $database->setQuery("SELECT * FROM #__jdownloads_cats WHERE parent_id =".$parent." ORDER BY ordering"); + + $rows = $database->loadObjectList(); + if ($database->getErrorNum()) { + echo $database->stderr(); + return false; + } + foreach ($rows as $v) { + $v->cat_title = $ident.".  L ".$v->cat_title; + $v->cat_title = str_replace('.  L ','.    ',$v->cat_title); + $x = strrpos($v->cat_title,'.    '); + $v->cat_title = substr_replace($v->cat_title, '.  L ', $x,7); + $tree[] = $v; + + tree($v->cat_id, $ident.".  L ", $tree); + } +} + +function scanFiles($option, $task){ + jlist_HTML::scanFiles($option, $task); + +} + + +//Publish Categories +function categoriesPublish( $cid=null, $publishform=1, $option ) { + global $mainframe; + $database = &JFactory::getDBO(); + if (!is_array( $cid ) || count( $cid ) < 1) { + $action = $publishcat ? 'publish' : 'unpublish'; + echo "\n"; + exit; + } + $total = count ( $cid ); + $cids = implode( ',', $cid ); + + $database->setQuery( "UPDATE #__jdownloads_cats" + . "\nSET published =". intval( $publishform ) + . "\nWHERE cat_id IN ( $cids )" + ); + if (!$database->query()) { + echo "\n"; + exit(); + } + switch ( $publishform ) { + case 1: + $msg = $total .JText::_('JLIST_BACKEND_CATSEDIT_SUC_PUBL')." "; + break; + case 0: + default: + $msg = $total .JText::_('JLIST_BACKEND_CATSEDIT_SUC_UNPUBL')." "; + break; + } + if (count( $cid ) == 1) { + $row = new jlist_files( $database ); + $row->checkin( $cid[0] ); + } + $mainframe->redirect( 'index2.php?option='.$option.'&task=categories.list', $msg ); +} + +// Reihenfolge ändern über orderup/orderdown +function categoriesOrder( $uid, $inc, $option ) { + global $mainframe; + $database = &JFactory::getDBO(); + $row = new jlist_cats( $database ); + $row->load( $uid ); + $row->move( $inc ); + $mainframe->redirect( "index2.php?option=com_jdownloads&task=categories.list" ); +} + +// Reihenfolge ändern über saverorder symbol +function categoriesSaveOrder( &$cid ) { + global $mainframe; + $database = &JFactory::getDBO(); + $total = count( $cid ); + // $order = josgetarrayints( 'order' ); + $order = JRequest::getVar('order', array(), 'post', 'array' ); + + for( $i=0; $i < $total; $i++ ) { + $query = "UPDATE #__jdownloads_cats" + . "\n SET ordering = " . (int) $order[$i] + . "\n WHERE cat_id = " . (int) $cid[$i]; + $database->setQuery( $query ); + if (!$database->query()) { + echo "\n"; + exit(); + } + // update ordering + $row = new jlist_cats( $database ); + $row->load( (int)$cid[$i] ); + } + // clean any existing cache files + $cache =& JFactory::getCache('com_jdownloads'); + $cache->clean('com_jdownloads'); + + $msg = JText::_('JLIST_BACKEND_CATS_SAVEORDER'); + $mainframe->redirect( 'index2.php?option=com_jdownloads&task=categories.list', $msg ); +} + +//Cancel Categories +function categoriesCancel($option){ + global $mainframe; + $database = &JFactory::getDBO(); + $row = new jlist_cats( $database ); + $row->bind( $_POST ); + $row->checkin(); + // alle cats freigeben + // all cats checked in !!! + $database->SetQuery("UPDATE #__jdownloads_cats SET checked_out = 0"); + $database->query(); + + $mainframe->redirect( "index2.php?option=".$option."&task=categories.list" ); +} +//Delete Categories +function categoriesDelete($option, $cid){ + global $jlistConfig, $mainframe; + $database = &JFactory::getDBO(); + + $total = count( $cid ); + $cats = join(",", $cid); + + $del_error = false; + $delerror = ''; + + // testen ob subcats existieren - dann nicht löschen + $database->setQuery("SELECT count(*) FROM #__jdownloads_cats WHERE parent_id IN ($cats)"); + if ($subcats_exist = $database->loadResult()){ + $msg = JText::_('JLIST_BE_NO_DEL_SUBCATS_EXISTS'); + } + + // testen ob files hierzu existieren - dann nicht löschen + $database->setQuery("SELECT count(*) FROM #__jdownloads_files WHERE cat_id IN ($cats)"); + if ($files_exist = $database->loadResult()){ + $msg =JText::_('JLIST_BE_NO_DEL_FILES_EXISTS'); + } + + //Delete Categories and dirs + if (!$subcats_exist && !$files_exist) { + // first get cat_dirs for delete dirs + $database->SetQuery("SELECT * FROM #__jdownloads_cats WHERE cat_id IN ($cats)"); + $del_dirs = $database->loadObjectList(); + + // remove from DB table + $database->SetQuery("DELETE FROM #__jdownloads_cats WHERE cat_id IN ($cats)"); + $database->Query(); + if ( !$database->query() ) { + echo "\n"; + exit(); + } + $msg = $total .JText::_('JLIST_BACKEND_CATSLIST_DEL')." "; + + //remove cat(s) + foreach($del_dirs as $dir) { + if (!@rmdir(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$dir->cat_dir)) { + $del_error = true; + } + if ($del_error) { + $delerror = JText::_('JLIST_BE_DEL_CATS_DIRS_ERROR'); + } else { + $delerror = JText::_('JLIST_BE_DEL_CATS_DIRS_OK'); + } + } + } + $mainframe->redirect( 'index2.php?option='.$option.'&task=categories.list', $msg.$delerror ); +} + +//Save Categories +function categoriesSave($option,$apply=0){ + global $jlistConfig, $mainframe; + $database = &JFactory::getDBO(); + + $new_cat = false; + $new_subcat = false; + $move_to_sub_cat = false; + $move_to_root_cat = false; + $title_changed = false; + $cat_dir_changed = false; + $move_sub_to_sub = false; + + $parent_cat_dir = ''; + $root_cat_dir = ''; + $source_dir = ''; + $dest_dir = ''; + $old_dir_name = ''; + $old_dir_name_long = ''; + $new_dir_name = ''; + $new_dir_name_long = ''; + $old_dir = ''; + $cat_dir_neu = ''; + $cat_dir_org = ''; + + $row = new jlist_cats($database); + // bind it to the table + if (!$row -> bind($_POST)) { + echo "\n"; + exit(); + } + + $row->cat_description = rtrim(stripslashes($row->cat_description)); + + if(empty($row->cat_title)) { + // error - title has not a value + $mainframe->redirect("index2.php?option=".$option."&task=categories.edit&cid=".$row->cat_id, JText::_('JLIST_BACKEND_CATSEDIT_ERROR_TITLE')." "); + } + $row->cat_title = trim($row->cat_title); + + // fill the alias with a valid value + if(empty($row->cat_alias)) { + $row->cat_alias = $row->cat_title; + } + $row->cat_alias = JFilterOutput::stringURLSafe($row->cat_alias); + + if(trim(str_replace('-','',$row->cat_alias)) == '') { + $datenow =& JFactory::getDate(); + $row->cat_alias = $datenow->toFormat("%Y-%m-%d-%H-%M-%S"); + } + + // convert Cyrillic and other characters + $search = array('а','б','в','г','д','е','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ь','я','ю','А','Б','В','Г','Д','Е','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ь','Я','Ю','"','\'',';','?','!','@','#','$','%','^','&','*','(',')','_','=','~','<','>','/','ѓ','Ѓ','ќ','Ќ','ѕ','Ѕ','џ','Џ','Љ','љ','њ','Њ','ј','Ј','ä','ü','ö','ß','Ä','Ü','Ö'); + $replace = array('a','b','v','g','d','e','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','tz','ch','sh','sht','a','yo','ya','yu','A','B','V','G','D','E','ZH','Z','I','J','K','L','M','N','O','P','R','S','T','U','F','H','TZ','CH','SH','SHT','A','YO','YA','YU','','','','','','','','','','','i','','','','_','','','','','','g','G','k','K','s','S','dj','DJ','LJ','lj','nj','NJ','j','J','ae','ue','oe','ss','Ae','Ue','Oe'); + if ($jlistConfig['create.auto.cat.dir']){ + $checked_cat_title = JString::str_ireplace($search, $replace, $row->cat_title); + } else { + $checked_cat_title = JString::str_ireplace($search, $replace, $row->cat_dir); + } + // remove all others + $checked_cat_title = preg_replace('#[^a-zA-Z0-9 _.-]#', '', $checked_cat_title); + + + if ($jlistConfig['create.auto.cat.dir'] && $row->cat_title && !$checked_cat_title){ + // ERROR - non latin caharacters used and auto folder creation is not set off + $mainframe->redirect("index2.php?option=".$option."&task=categories.edit&cid=".$row->cat_id, JText::_('JLIST_BACKEND_CATSEDIT_ERROR_FOLDER_NAME')." "); + } + // get id from the marked cat in list + $marked_cat_id = intval(JArrayHelper::getValue($_POST, 'catid', 0)); + $row->published = intval(JArrayHelper::getValue($_POST, 'publish', 0)); + + // get old cat_dir value + $old_dir_name = JArrayHelper::getValue($_POST, 'cat_dir_org', ''); + $old_dir_name_long = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$old_dir_name; + + // get original title + $org_title = JArrayHelper::getValue($_POST, 'cat_title_org', ''); + if ($org_title != '' && $org_title != $row->cat_title) { + if ($row->cat_id) { + $title_changed = true; + } + } else { + $title_changed = false; + } + + // only cat_dir changed and auto creation is off + $cat_dir_org = JArrayHelper::getValue($_POST, 'cat_dir_org', ''); + $path_dir_entry = JArrayHelper::getValue($_POST, 'path_dir_entry', ''); + if (!$jlistConfig['create.auto.cat.dir'] && $row->cat_id && $cat_dir_org != $path_dir_entry.$checked_cat_title){ + $title_changed = true; + $cat_dir_changed = true; + } + + // new or edit + if (!$row->cat_id) { + // new cat + $new_cat = true; + // is subcat marked? + if ($marked_cat_id == 0 ) { + $row->parent_id = 0; + $new_cat = true; + } else { + $row->parent_id = $marked_cat_id; + $new_subcat = true; + } + } else { + // cat changed + $new_cat = false; + if ($marked_cat_id != $row->cat_id ) { + if ($marked_cat_id == 0 ) { + // changed to root cat! + $move_to_root_cat = true; + $row->parent_id = 0; + } else { + // ändern als subcat bzw. zu anderer subcat verschieben + // get dir from parent cat + $move_to_sub_cat = true; + + $database->setQuery("SELECT cat_dir FROM #__jdownloads_cats WHERE cat_id = '$marked_cat_id'"); + $root_cat_dir = $database->loadResult(); + + $database->setQuery("SELECT parent_id FROM #__jdownloads_cats WHERE cat_id = '$marked_cat_id'"); + if ($database->loadResult()) { + $move_sub_to_sub = true; + } + + $row->parent_id = $marked_cat_id; + } + } + } + + // 1. new cat as root cat or 2. new cat as subcat ------------------- + if ($new_cat || $new_subcat) { + if ($new_subcat) { + // get path from the root cat + $database->setQuery("SELECT cat_dir FROM #__jdownloads_cats WHERE cat_id = '$marked_cat_id'"); + $parent_cat_dir = $database->loadResult(); + $new_dir = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$parent_cat_dir.'/'.$checked_cat_title; + } else { + $new_dir = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$checked_cat_title; + } + $new_dir_short = str_replace(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/', '', $new_dir); + + // create new dir if not exists + $dir_exist = is_dir("$new_dir"); + if(!$dir_exist) { + if ($makedir = @mkdir("$new_dir", 0777)) { + $message = ''; + } else { + $message = $new_dir_short.' '.JText::_('JLIST_BACKEND_DIRSEDIT_CREATE_DIR_MESSAGE_ERROR'); + } + } else { + $message = $new_dir_short.' '.JText::_('JLIST_BACKEND_DIRSEDIT_CREATE_DIR_MESSAGE_EXISTS'); + } + + if ($message) { + // error: abort with message + $mainframe->redirect("index2.php?option=".$option."&task=categories.edit&cid=".$row->cat_id, $message." "); + } + $row->cat_dir = $new_dir_short; + } + + // 3. cat title changed ---------------------------------------------- + if ($title_changed){ + $message = ''; + $last_dir_entry = substr(strrchr($old_dir_name,"/"),1); + if (!$last_dir_entry) $last_dir_entry = $old_dir_name; + $new_dir_name = str_replace($last_dir_entry, $checked_cat_title, $old_dir_name); + $new_dir_name_long = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$new_dir_name; + $cat_dir_neu = str_replace(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/', '', $new_dir_name); + + if ($new_dir_name_long != $old_dir_name_long){ + if ( @rename( $old_dir_name_long , $new_dir_name_long )) { + $message = ''; + } else { + $message = JText::_('JLIST_BACKEND_CATSEDIT_SAVE_ERROR_DIR'); + $mainframe->redirect("index2.php?option=".$option."&task=categories.edit&cid=".$row->cat_id, $message." "); + } + } + $row->cat_dir = $cat_dir_neu; + + // search subcats + $database->setQuery("SELECT * FROM #__jdownloads_cats WHERE cat_id != '$row->cat_id' AND cat_dir LIKE '%$org_title/%'"); + $sub_cats = $database->loadObjectList(); + + // actualize subcats + if ($sub_cats) { + foreach($sub_cats as $cats) { + $cats->cat_dir = str_replace($old_dir_name, $new_dir_name, $cats->cat_dir); + $database->setQuery("UPDATE #__jdownloads_cats SET cat_dir = '$cats->cat_dir' WHERE cat_id = '$cats->cat_id'"); + $database->query(); + } + } + } + + // 4. move rootcat to subcat -------------------------------------- + if ($move_to_sub_cat) { + $message = ''; + $last_dir_entry = substr(strrchr($old_dir_name,"/"),1); + if (!$last_dir_entry) $last_dir_entry = $old_dir_name; + if ($new_dir_name_long){ + $source_dir = $new_dir_name_long.'/'; + } else { + $source_dir = $old_dir_name_long.'/'; + } + $dest_dir = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$root_cat_dir.'/'.$last_dir_entry.'/'; + + $res = moveDirs($source_dir, $dest_dir, true, $message); + if ($message != '') { + // error: abort with message + $mainframe->redirect("index2.php?option=".$option."&task=categories.edit&cid=".$row->cat_id, $message." "); + } + + // search subcats + $database->setQuery("SELECT * FROM #__jdownloads_cats WHERE cat_id != '$row->cat_id' AND cat_dir LIKE '$row->cat_dir%'"); + $sub_cats = $database->loadObjectList(); + $row->cat_dir = $root_cat_dir.'/'.$checked_cat_title; + // actualize cat_dir in subcats + if ($sub_cats) { + foreach($sub_cats as $cats) { + $cats->cat_dir = str_replace($old_dir_name, $row->cat_dir, $cats->cat_dir); + $database->setQuery("UPDATE #__jdownloads_cats SET cat_dir = '$cats->cat_dir' WHERE cat_id = '$cats->cat_id'"); + $database->query(); + } + } + } + + // 5. move sub to root or sub to sub -------------------------------------- + if ($move_to_root_cat) { + $message = ''; + if ($new_dir_name_long){ + $source_dir = $new_dir_name_long.'/'; + } else { + $source_dir = $old_dir_name_long.'/'; + } + $dest_dir = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$checked_cat_title.'/'; + $res = moveDirs($source_dir, $dest_dir, true, $message); + if ($message != '') { + // error: abort with message + $mainframe->redirect("index2.php?option=".$option."&task=categories.edit&cid=".$row->cat_id, $message." "); + } + $new_dir_name = $checked_cat_title; + // search subcats + $database->setQuery("SELECT * FROM #__jdownloads_cats WHERE cat_id != '$row->cat_id' AND cat_dir LIKE '$old_dir_name/%'"); + $sub_cats = $database->loadObjectList(); + + // actualize subcats cat_dir + if ($sub_cats) { + foreach($sub_cats as $cats) { + $cats->cat_dir = str_replace($old_dir_name, $new_dir_name, $cats->cat_dir); + $database->setQuery("UPDATE #__jdownloads_cats SET cat_dir = '$cats->cat_dir' WHERE cat_id = '$cats->cat_id'"); + $database->query(); + } + } + $row->cat_dir = $new_dir_name; + } + if ($row->metakey){ + $row->metakey = stripslashes($row->metakey); + } + if ($row->metadesc){ + $row->metadesc = stripslashes($row->metadesc); + } + + // for the: set_rights_of_cat function - the cat_access value must save with the old value + if (!$row->cat_access) $row->cat_access = '00'; + $new_access = $row->cat_access; + $old_access = JArrayHelper::getValue($_POST, 'old_access', '00'); + if ($old_access) $row->cat_access = $old_access; + + + // get a correct ordering value + if (!$row->ordering) { + $row->ordering = $row->getNextOrder(); + } + + // write to db + if (!$row -> store()) { + echo "\n"; + exit(); + }else{ + if(!$row->cat_id) $row->cat_id = mysql_insert_id(); + } + + // check the access level from the children cats + $sum_changed = 0; + set_rights_of_cat($row->cat_id, $new_access, $sum_changed); + if ($sum_changed == -1){ + $msg = '- '.JText::_('JLIST_BACKEND_CATSEDIT_CATS_ACCESS_LEVEL_CAN_NOT_CHANGED_MSG'); + } else { + if ($sum_changed > 0){ + $sum_changed--; + $msg = '- '.$sum_changed.' '.JText::_('JLIST_BACKEND_CATSEDIT_SUM_CATS_ACCESS_LEVEL_CHANGED_AFTER_EDIT_MSG'); + } + } + + $row->checkin(); + // all cats checked in !!! + $database->SetQuery("SELECT cat_id FROM #__jdownloads_cats WHERE cat_id != $row->cat_id"); + $free_cat = $database->loadResultArray(); + $free_cat_id = implode(",", $free_cat); + $database->SetQuery("UPDATE #__jdownloads_cats SET checked_out = 0 WHERE cat_id IN ($free_cat_id)"); + $database->query(); + + if (!$apply) { + $mainframe->redirect("index2.php?option=".$option."&task=categories.list", JText::_('JLIST_BACKEND_CATSEDIT_SAVE')." ".$msg); + } else { + $mainframe->redirect("index2.php?option=".$option."&task=categories.edit&cid=".$row->cat_id, JText::_('JLIST_BACKEND_CATSEDIT_SAVE')." ".$msg); + } +} + +// edit cats +function categoriesEdit($option, $cid){ + global $jlistConfig, $tree, $mainframe; + $user = &JFactory::getUser(); + $database = &JFactory::getDBO(); + + if(is_array($cid)) $cid = 0; + $row = new jlist_cats( $database ); + $row->load( $cid ); + + // fehlermeldung wenn bereits in bearbeitung + if ($row->isCheckedOut( $user->get('id') )) { + $mainframe->redirect( 'index2.php?option='.$option.'&task=categories.list', JText::_('JLIST_BACKEND_CATS_USED') ); + } + $database->SetQuery("SELECT * FROM #__jdownloads_cats" + . "\nWHERE cat_id = $cid"); + $database->loadObject($row); + + if ($cid) { + $row->checkout( $user->get('id') ); + + // alle cats sperren für edit - falls dateioperationen laufen sollen + // all cats checked out !!! + $database->SetQuery("SELECT cat_id FROM #__jdownloads_cats WHERE cat_id != $cid"); + $lock_cat = $database->loadResultArray(); + $lock_cat_id = implode(",", $lock_cat); + $database->SetQuery("UPDATE #__jdownloads_cats SET checked_out = '$user->id' WHERE cat_id IN ($lock_cat_id)"); + $database->query(); + + } else { + $row->published = 1; + } + + // auswahlliste für zugriffskontrolle + $access_list[] = JHTML::_('select.option', '00', JText::_('JLIST_BACKEND_CATSEDIT_CAT_ACCESS_LEVEL_1')); + $access_list[] = JHTML::_('select.option', '01', JText::_('JLIST_BACKEND_CATSEDIT_CAT_ACCESS_LEVEL_2')); + $access_list[] = JHTML::_('select.option', '11', JText::_('JLIST_BACKEND_CATSEDIT_CAT_ACCESS_LEVEL_3')); + $access_list[] = JHTML::_('select.option', '22', JText::_('JLIST_BACKEND_CATSEDIT_CAT_ACCESS_LEVEL_4')); + $access_box = JHTML::_('select.genericlist', $access_list, 'cat_access', 'class="inputbox" size="4" ', 'value', 'text', $row->cat_access ); + + // auswahlliste für catsymbol + $cat_pic_dir = '/images/jdownloads/catimages/'; + $pic_files = JFolder::files( JPATH_SITE.$cat_pic_dir ); + $cat_pic_list[] = JHTML::_('select.option', '', JText::_('JLIST_BACKEND_SETTINGS_FRONTEND_PIC_TEXT')); + foreach ($pic_files as $file) { + if (eregi( "gif|jpg|png", $file )) { + $cat_pic_list[] = JHTML::_('select.option', $file ); + } + } + // auswahlliste mit bereits existierenden cats + $cat_list = array(); + if ($row->cat_id) { + $listtitle = JText::_('JLIST_BACKEND_CATSEDIT_ROOT_CAT_LISTBOX'); + } else { + $listtitle = JText::_('JLIST_BACKEND_CATSEDIT_ROOT_CAT_LISTBOX_NEW'); + } + + // for edit manually cat dir + $last_dir_entry = substr(strrchr($row->cat_dir,"/"),1); + if (!$last_dir_entry){ + $last_dir_entry = $row->cat_dir; + } else { + $path_pos = strrpos ( $row->cat_dir, "/" ); + $path_dir_entry = substr($row->cat_dir, 0, $path_pos + 1); + } + + // standard pic wenn als option ausgewählt + if ($jlistConfig['cat.pic.default.filename'] && !$row->cat_pic) { + $row->cat_pic = $jlistConfig['cat.pic.default.filename']; + } + + $inputbox_pic = JHTML::_('select.genericlist', $cat_pic_list, 'cat_pic', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].cat_pic.options[selectedIndex].value!='') {document.imagelib.src='../$cat_pic_dir' + document.forms[0].cat_pic.options[selectedIndex].value} else {document.imagelib.src=''}\"", 'value', 'text', $row->cat_pic ); + + jlist_HTML::categoriesEdit($option, $row, $inputbox_pic, $access_box, $last_dir_entry, $path_dir_entry); +} + +// list cats +function categoriesList($option, $task, $limitstart){ + global $mainframe, $limit, $tree; + $database = &JFactory::getDBO(); + + $search = $mainframe->getUserStateFromRequest( "search{$option}", 'search', '' ); + if (get_magic_quotes_gpc()) { + $search = stripslashes( $search ); + } + + if ( $search ) { + $where[] = "LOWER( a.cat_title ) LIKE '%" . $database->getEscaped( trim( strtolower( $search ) ) ) . "%'"; + } + + $filter = $mainframe->getUserStateFromRequest( "filter{$option}", 'filter', '' ); + $filter = intval( $filter ); + $database->SetQuery( "SELECT count(*)" + . "\nFROM #__jdownloads_cats AS a" + . "\nWHERE a.published >= 0" + ); + $total = $database->loadResult(); + echo $database->getErrorMsg(); + + if (!$search){ + $where = array( "a.published >= 0" , "a.parent_id = 0" ); + } + + if ($search && $filter == 1) { + $where[] = "LOWER(a.cat_title) LIKE '%$search%'"; + + $database->SetQuery( "SELECT count(*)" + . "\nFROM #__jdownloads_cats AS a" + . (count( $where ) ? "\n WHERE " . implode( ' AND ', $where ) : "") + ); + $total = $database->loadResult(); + echo $database->getErrorMsg(); + } + + if ($search) { + $where[] = "LOWER(a.cat_title) LIKE '%$search%'"; + + $database->SetQuery( "SELECT count(*)" + . "\nFROM #__jdownloads_cats AS a" + . (count( $where ) ? "\n WHERE " . implode( ' AND ', $where ) : "") + ); + $total = $database->loadResult(); + echo $database->getErrorMsg(); + } + + $pageNav = new JPagination( $total, $limitstart, $limit ); + + $query = "SELECT a.*" + . "\nFROM #__jdownloads_cats AS a" + . ( count( $where ) ? "\n WHERE " . implode( ' AND ', $where ) : "") + . "\nORDER BY a.parent_id, a.ordering, a.cat_title" + ; + + $database->SetQuery( $query ); + $cats = $database->loadObjectList(); + + // subcategories view as tree + $tree = array(); + + foreach ($cats as $v) { + $ident = ''; + $tree[] = $v; + tree($v->cat_id, $ident, $tree); + } + $database->SetQuery( $query, $pageNav->limitstart, $pageNav->limit ); + $rows = $database->loadObjectList(); + + // read sum of files from every cat + foreach ($tree as $row){ + $database->setQuery('SELECT COUNT(*) FROM #__jdownloads_files WHERE cat_id = '.$row->cat_id); + $row->sum_files = $database->loadResult(); + } + jlist_HTML::categoriesList($rows, $option, $pageNav, $search, $filter, $tree, $task, $limitstart); +} + +/*/////////////////// FILES //////////////////////*/ + +//Publish Files +function filesPublish( $cid=null, $publishform=1, $option, $cat_id ) { + global $mainframe; + $database = &JFactory::getDBO(); + + if (!is_array( $cid ) || count( $cid ) < 1) { + $action = $publishcat ? 'publish' : 'unpublish'; + echo "\n"; + exit; + } + $total = count ( $cid ); + $cids = implode( ',', $cid ); + // publish only when a intern or extern file link exist + if ($publishform) { + $database->setQuery( "SELECT file_id FROM #__jdownloads_files WHERE file_id IN ( $cids ) AND url_download = '' AND extern_file = ''"); + $nofiles = $database->loadResultArray(); + } + $database->setQuery( "UPDATE #__jdownloads_files" + . "\nSET published =". intval( $publishform ) + . "\nWHERE file_id IN ( $cids )" + ); + if (!$database->query()) { + echo "\n"; + exit(); + } + if ($nofiles){ + $no_cid = implode( ',', $nofiles ); + $database->setQuery( "UPDATE #__jdownloads_files SET published = 0 WHERE file_id IN ( $no_cid )" ); + $database->query(); + } + switch ( $publishform ) { + case 1: + if ($nofiles) { + $nofiles_sum = count($nofiles); + $total = $total - $nofiles_sum; + $msg = $total .JText::_('JLIST_BACKEND_FILESEDIT_SUC_PUBL').' - '.$nofiles_sum.' '.JText::_('JLIST_BACKEND_EDIT_FILES_CAN_NOT_PUBLISH_INFO').' '; + } else { + $msg = $total .JText::_('JLIST_BACKEND_FILESEDIT_SUC_PUBL')." "; + } + break; + case 0: + default: + $msg = $total .JText::_('JLIST_BACKEND_FILESEDIT_SUC_UNPUBL')." "; + break; + } + if (count( $cid ) == 1) { + $row = new jlist_files( $database ); + $row->checkin( $cid[0] ); + } + $mainframe->redirect( 'index2.php?option='.$option.'&task=files.list&cat_id='.$cat_id, $msg ); +} + +//Cancel Files +function filesCancel($option, $cat_id){ + global $mainframe; + $database = &JFactory::getDBO(); + $row = new jlist_files( $database ); + $row->bind( $_POST ); + $row->checkin(); + $mainframe->redirect( "index2.php?option=".$option."&task=files.list&cat_id=".$cat_id ); +} + +//Delete downloads +function filesDelete($option, $cid, $cat_id){ + global $mainframe, $jlistConfig; + $database = &JFactory::getDBO(); + $total = count( $cid ); + $files = join(",", $cid); + + // file delete option + $file_delete = intval(JArrayHelper::getValue($_POST, 'delete_files', 0)); + if ($file_delete == 1) { + $database->setQuery("SELECT * FROM #__jdownloads_files WHERE file_id IN ($files)"); + $loads = $database->loadObjectList(); + + //remove file(s) + foreach($loads as $url) { + // keine externen links + if ($url->url_download <> ''){ + // get cat_dir + $database->setQuery("SELECT cat_dir FROM #__jdownloads_cats WHERE cat_id = '$url->cat_id'"); + $cat_dir = $database->loadResult(); + + if (!@unlink(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$cat_dir.'/'.$url->url_download)) { + $del_error = true; + } + } + } + if ($del_error) { + $delerror = JText::_('JLIST_BACKEND_FILESEDIT_DEL_FILES_ERROR'); + } else { + $delerror = JText::_('JLIST_BACKEND_FILESEDIT_DEL_FILES_OK'); + } + } + + //Delete Downloads + $database->SetQuery("DELETE FROM #__jdownloads_files WHERE file_id IN ($files)"); + $database->Query(); + if ( !$database->query() ) { + echo "\n"; + exit(); + } + $msg = $total .JText::_('JLIST_BACKEND_FILESLIST_DEL')." "; + if ($file_delete == 1) { + $msg = $msg.' '.$delerror; + } + $mainframe->redirect( 'index2.php?option='. $option .'&task=files.list&cat_id='.$cat_id, $msg ); +} + +//Remove Files from server +function filesRemove($option, $cid, $cat_id){ + global $mainframe, $jlistConfig; + $database = &JFactory::getDBO(); + + $database->setQuery("SELECT url_download FROM #__jdownloads_files WHERE file_id = '$cid'"); + $url_download = $database->loadResult(); + $database->setQuery("SELECT cat_id FROM #__jdownloads_files WHERE file_id = '$cid'"); + $cat_id = $database->loadResult(); + $database->setQuery("SELECT cat_dir FROM #__jdownloads_cats WHERE cat_id = '$cat_id'"); + $cat_dir = $database->loadResult(); + //remove file + @unlink(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$cat_dir.'/'.$url_download); + //update db + $database->setQuery("UPDATE #__jdownloads_files SET url_download = '', size = '', published = 0 WHERE file_id = '$cid'"); + $database->query(); + //redirect to edit + $mainframe->redirect('index2.php?option=com_jdownloads&task=files.edit&hidemainmenu=1&cid='.$cid.'&cat_id='.$cat_id,JText::_('JLIST_BACKEND_FILESEDIT_REMOVE_OK')); +} + +//Save Files +function filesSave($option, $cat_id, $apply=0){ + global $mainframe, $jlistConfig; + $user = &JFactory::getUser(); + $database = &JFactory::getDBO(); + + $new_file = false; + $file_cat_changed = false; + $movedmsg = ''; + $padfile_upload = false; + $row = new jlist_files($database); + // bind it to the table + if (!$row -> bind($_POST)) { + echo "\n"; + exit(); + } + + // id der markierten hauptkategorie + $marked_cat_id = intval(JArrayHelper::getValue($_POST, 'cat_id2', 0)); + // file upload? + $file = JArrayHelper::getValue($_FILES,'file_upload',array('tmp_name'=>'')); + // padfile upload? + $padfile = JArrayHelper::getValue($_FILES,'pad_upload',array('tmp_name'=>'')); + // pic upload + $pic = JArrayHelper::getValue($_FILES,'file_upload_thumb',array('tmp_name'=>'')); + $modified_date_old = JArrayHelper::getValue($_POST, 'modified_date_old', null); + + if (empty($row->file_title)) { + if(!$padfile['tmp_name']){ + $mainframe->redirect("index2.php?option=".$option."&task=files.edit&cid=".$row->file_id, JText::_('JLIST_BACKEND_FILESEDIT_ERROR_TITLE')); + } + } else { + $row->file_title = stripslashes($row->file_title); + } + + // fill the alias with a valid value + if(empty($row->file_alias)) { + $row->file_alias = $row->file_title; + } + $row->file_alias = JFilterOutput::stringURLSafe($row->file_alias); + + if(trim(str_replace('-','',$row->file_alias)) == '') { + $datenow =& JFactory::getDate(); + $row->file_alias = $datenow->toFormat("%Y-%m-%d-%H-%M-%S"); + } + + // pic auswahl vom server + $pic_server = JArrayHelper::getValue($_POST,'file_thumb', ''); + $row->published = intval(JArrayHelper::getValue($_POST, 'publish', 0)); + $row->update_active = intval(JArrayHelper::getValue($_POST, 'update', 0)); + + if (empty($marked_cat_id)) { + $mainframe->redirect("index2.php?option=".$option."&task=files.edit&cid=".$row->file_id, JText::_('JLIST_BACKEND_FILESEDIT_CATLIST_ERROR')); + } + + // filename holen + $row->url_download = JArrayHelper::getValue($_POST, 'filename', ''); + + if (!$row->file_id){ + $row->cat_id = $marked_cat_id; + $row->created_by = $user->get('username'); + $new_file = true; + } else { + // actualize only when user has not changed self the date value + if ($modified_date_old == $row->modified_date){ + $row->modified_date = JHTML::_('date', 'now','%Y.%m.%d %H:%M:%S'); + } + //actalize modified_by + $row->modified_by = $user->get('username'); + + if ($row->cat_id != $marked_cat_id){ + $file_cat_changed = true; + $org_cat_id = $row->cat_id; + $row->cat_id = $marked_cat_id; + } + } + + // uploadverz. der kat holen + $database->SetQuery("SELECT cat_dir FROM #__jdownloads_cats WHERE cat_id = $marked_cat_id"); + $mark_catdir = $database->loadResult(); + + $row->description = rtrim(stripslashes($row->description)); + $row->description_long = rtrim(stripslashes($row->description_long)); + + if ($row->file_id){ + // get filesize and date if no value set + + if ($row->size == '' and $file['tmp_name'] == '' and !$file_cat_changed) { + if ($row->url_download) { + $filepath = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$mark_catdir.'/'.$row->url_download; + if (@is_file($filepath)) { + $row->size = fsize($filepath); + } + } else { + // extern file + $row->size = urlfilesize($row->extern_file,'b'); + } + } + + // is date empty get filedate - only for intern linked files + if ($row->url_download){ + if (empty($row->date_added) and $file['tmp_name'] == '' and !$file_cat_changed) { + $row->date_added = date("Y-m-d H:i:s", filemtime(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$mark_catdir.'/'.$row->url_download)); + } + } else { + // extern file + if (empty($row->date_added) and $file['tmp_name'] == '' and !$file_cat_changed) { + $row->date_added = urlfiledate($row->extern_file); + $row->size = urlfilesize($row->extern_file,'b'); + } + } + } else { + if ($row->size == '' and $file['tmp_name'] == '' and !$file_cat_changed) { + if ($row->url_download) { + $filepath = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$mark_catdir.'/'.$row->url_download; + if (@is_file($filepath)) { + $row->size = fsize($filepath); + } + } else { + // extern file + $row->size = urlfilesize($row->extern_file,'b'); + } + } + } + + //handle file upload + if($file['tmp_name'] != ''){ + $upload_dir = '/'.$jlistConfig['files.uploaddir'].'/'.$mark_catdir.'/'; + // replace special chars in filename + $filename_new = checkFileName($file['name']); + $file['name'] = $filename_new; + $target_path = JPATH_SITE.$upload_dir.$file['name']; + + // delete first old file if exist + if ($row->url_download){ + if (is_file(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$mark_catdir.'/'.$row->url_download)){ + @unlink(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$mark_catdir.'/'.$row->url_download); + $row->size = ''; + } + } + + if(@move_uploaded_file($file['tmp_name'], $target_path)) { + $database->setQuery("UPDATE #__jdownloads_files SET url_download = '{$file['name']}' WHERE file_id = '$row->file_id'"); + $database->query(); + $row->url_download = basename($target_path); + $row->extern_file = ''; + $row->extern_site = ''; + // set file extension pic + $file_extension = strtolower(substr(strrchr($row->url_download,"."),1)); + $filepfad = JPATH_SITE.'/images/jdownloads/fileimages/'.$file_extension.'.png'; + if(file_exists(JPATH_SITE.'/images/jdownloads/fileimages/'.$file_extension.'.png')){ + $row->file_pic = $file_extension.'.png'; + } else { + $row->file_pic = $jlistConfig['file.pic.default.filename']; + } + // get filesize and date if no value set from user after upload + if (!$row->size) { + $row->size = fsize($target_path); + } + // is date empty get filedate + if (empty($row->date_added)) { + $row->date_added = JHTML::_('date', 'now','%Y.%m.%d %H:%M:%S'); + } + } else { + $mainframe->redirect("index2.php?option=".$option."&task=files.edit&cid=".$row->file_id, JText::_('JLIST_BACKEND_FILESEDIT_CHECK_PERMISSIONS')." "); + } + } else { + // kein upload - Kat gewechselt? dann file verschieben + if ($file_cat_changed && $row->url_download != ''){ + // datei verschieben + // dir der alten cat holen + $database->SetQuery("SELECT cat_dir FROM #__jdownloads_cats WHERE cat_id = '$org_cat_id'"); + $old_catdir = $database->loadResult(); + + if(@rename(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$old_catdir.'/'.$row->url_download, JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$mark_catdir.'/'.$row->url_download )) { + $movedmsg = JText::_('JLIST_BACKEND_FILESEDIT_SAVE_MOVEFILE_OK'); + } else { + $movedmsg = JText::_('JLIST_BACKEND_FILESEDIT_SAVE_MOVEFILE_ERROR'); + } + } + } + + //handle padfile upload + if($padfile['tmp_name'] != ''){ + $padupload_dir = DS.$jlistConfig['pad.folder'].DS; + // replace special chars in filename + $padfilename_new = checkFileName($padfile['name']); + $padfile['name'] = $padfilename_new; + $target_path = JPATH_SITE.$padupload_dir.$padfile['name']; + + // delete first old file if exist + if (is_file(JPATH_SITE.DS.$jlistConfig['pad.folder'].DS.$padfilename_new)){ + @unlink(JPATH_SITE.DS.$jlistConfig['pad.folder'].DS.$padfilename_new); + } + + + if(@move_uploaded_file($padfile['tmp_name'], $target_path)) { + if ($jlistConfig['pad.exists'] && $jlistConfig['pad.use']){ + include_once(JPATH_COMPONENT_ADMINISTRATOR.DS.'pad'.DS.'padfile.php'); + $PAD = new PADFile($target_path); + $language = array(); + // Load file + if (!$PAD->Load()){ + $movedmsg .= ' '.JText::_('JLIST_BACKEND_FILE_EDIT_LOAD_PADFILE_ERROR'); + } else { + $padfile_upload = true; + // actualize the download data + $row->file_title = $PAD->XML->GetValue('XML_DIZ_INFO/Program_Info/Program_Name'); + $row->release = $PAD->XML->GetValue('XML_DIZ_INFO/Program_Info/Program_Version').' '.$PAD->XML->GetValue('XML_DIZ_INFO/Program_Info/Program_Release_Status'); + $row->description = $PAD->GetBestDescription(450, $jlistConfig['pad.language']); + $row->description_long = $PAD->GetBestDescription(2000, $jlistConfig['pad.language']); + $padlanguage = $PAD->XML->GetValue('XML_DIZ_INFO/Program_Info/Program_Language'); + $languages = explode(',', str_replace(' ', '', $jlistConfig['language.list'])); + $xx = array_search ($padlanguage, $languages); + if ($xx > 0){ + $row->language = (int)$xx; + } else { + $row->language = 0; + } + $row->system = $PAD->XML->GetValue('XML_DIZ_INFO/Program_Info/Program_OS_Support'); + $row->license = $PAD->XML->GetValue('XML_DIZ_INFO/Program_Info/Program_Type'); + $row->description_long .= '
'.JText::_('JLIST_FE_DETAILS_SYSTEM_TITLE').': '.$row->system.'
'.JText::_('JLIST_FE_DETAILS_LICENSE_TITLE').': '.$row->license; + $dollar = $PAD->XML->GetValue('XML_DIZ_INFO/Program_Info/Program_Cost_Dollars'); + $row->metadesc = $PAD->GetBestDescription(250, $jlistConfig['pad.language']); + $row->metakey = $PAD->XML->GetValue('XML_DIZ_INFO/Program_Descriptions/'.$jlistConfig['pad.language'].'/Keywords'); + $row->mirror_1 = $PAD->XML->GetValue('XML_DIZ_INFO/Web_Info/Download_URLs/Primary_Download_URL'); + $row->mirror_2 = $PAD->XML->GetValue('XML_DIZ_INFO/Web_Info/Download_URLs/Secondary_Download_URL'); + $row->url_home = $PAD->XML->GetValue('XML_DIZ_INFO/Company_Info/Company_WebSite_URL'); + $row->author = $PAD->XML->GetValue('XML_DIZ_INFO/Company_Info/Contact_Info/Author_First_Name').' '.$PAD->XML->GetValue('XML_DIZ_INFO/Company_Info/Contact_Info/Author_Last_Name'); + $row->url_author = $PAD->XML->GetValue('XML_DIZ_INFO/Company_Info/Contact_Info/Contact_Email'); + if (!$dollar){ + $currency = $PAD->XML->GetValue('XML_DIZ_INFO/Program_Info/Program_Cost_Other_Code'); + $dollar = $PAD->XML->GetValue('XML_DIZ_INFO/Program_Info/Program_Cost_Other').' '.$currency; + } else { + $dollar = $dollar.' $'; + } + $row->price = $dollar; + $movedmsg .= ' '.JText::_('JLIST_BACKEND_FILE_EDIT_SAVE_WITH_PAD_INFO'); + } + } + } else { + $movedmsg .= ' '.JText::_('JLIST_BACKEND_FILE_EDIT_SAVE_MOVEPADFILE_ERROR'); + } + } + + // pic upload + if($pic['tmp_name'] != ''){ + $upload_dir = '/images/jdownloads/screenshots/'; + // replace special chars in filename + $new_pic_name = checkFileName($pic['name']); + $pic['name'] = $new_pic_name; + $target_path = JPATH_SITE.$upload_dir.$new_pic_name; + + if(@move_uploaded_file($pic['tmp_name'], $target_path)) { + $database->setQuery("UPDATE #__jdownloads_files SET thumbnail = '$new_pic_name' WHERE file_id = '$row->file_id'"); + $database->query(); + $x = create_new_thumb($target_path); + // set correct chmod + @chmod($target_path, 0655); + $row->thumbnail = $new_pic_name; + } + } else { + // no new pic is uploaded + if ($row->file_id){ + // old download and pic from server is selected + $database->setQuery("UPDATE #__jdownloads_files SET thumbnail = '$pic_server' WHERE file_id = '$row->file_id'"); + $database->query(); + } else { + // new download and pic from server is selected + $row->thumbnail = $pic_server; + } + } + + if (!$row->url_download && !$row->extern_file){ + // download without intern or extern file can not set to publish! + $row->published = 0; + } + + // set extern site flag off when not exist mirror link + if (!$row->mirror_1){ + $row->extern_site_mirror_1 = 0; + } + if (!$row->mirror_2){ + $row->extern_site_mirror_2 = 0; + } + + if ($row->metakey){ + $row->metakey = stripslashes($row->metakey); + } + if ($row->metadesc){ + $row->metadesc = stripslashes($row->metadesc); + } + + // get a correct ordering value + if (!$row->ordering) { + if ($jlistConfig['be.new.files.order.first']){ + $row->ordering = 0; + $reorder = true; + } else { + $row->ordering = $row->getNextOrder(); + $reorder = false; + } + } + // store it in the db + if (!$row -> store()) { + echo "\n"; + exit(); + } + if(!$row->file_id) $row->file_id = mysql_insert_id(); + + if ($reorder){ + $res = $row->reorder(''); + } + + $row->checkin(); + if(!$apply) $mainframe->redirect("index2.php?option=".$option."&task=files.list&cat_id=".$cat_id, JText::_('JLIST_BACKEND_FILESEDIT_SAVE').$movedmsg." "); + else $mainframe->redirect("index2.php?option=".$option."&task=files.edit&cid=".$row->file_id."&cat_id=".$cat_id, JText::_('JLIST_BACKEND_FILESEDIT_SAVE').$movedmsg." "); +} + +// kopiere dateien in gleiche oder andere kategorie +function filesCopy($option, $cid, $cat_id){ + $database = &JFactory::getDBO(); + if (!is_array( $cid ) || count( $cid ) < 1) { + //$action = $publishcat ? 'publish' : 'unpublish'; + echo "\n"; + exit; + } + $files_id = implode(',', $cid); + $database->SetQuery("SELECT * FROM #__jdownloads_files WHERE file_id IN ($files_id)"); + $files = $database->loadObjectList(); + jlist_HTML::filesCopy($option, $files_id, $files, $cat_id); +} + +function filesCopySave($option, $cat_id_act){ + global $mainframe, $jlistConfig; + $database = &JFactory::getDBO(); + + $cid = array(); + $files_id = JArrayHelper::getValue($_REQUEST, 'cid2', 0); + $publish_files = intval(JArrayHelper::getValue($_REQUEST, 'filespublish', 0)); + $copy_files = intval(JArrayHelper::getValue($_REQUEST, 'copyalsofiles', 0)); + + $database->SetQuery("SELECT * FROM #__jdownloads_files WHERE file_id IN ($files_id)"); + $files = $database->loadObjectList(); + $cid = explode(',', $file_id); + $sum = count(cid); + + $cat_id = intval(JArrayHelper::getValue($_REQUEST, 'cat_id2', array())); + if ($cat_id){ + $database->SetQuery("SELECT cat_dir FROM #__jdownloads_cats WHERE cat_id = $cat_id"); + $cat_dir_new = $database->loadResult(); + foreach($files as $file){ + if ($cat_id == $file->cat_id){ + $filetitle = JText::_('JLIST_BACKEND_FILES_COPY_DOWNLOADS_TEXT').' '.$file->file_title; + } else { + $filetitle = $file->file_title; + } + if ($copy_files && $file->url_download != ''){ + $url_download = $file->url_download; + $database->SetQuery("SELECT cat_dir FROM #__jdownloads_cats WHERE cat_id = $file->cat_id"); + $cat_dir = $database->loadResult(); + $old_dir = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$cat_dir.'/'.$file->url_download; + $new_dir = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$cat_dir_new.'/'.$file->url_download; + if ( is_file ( $old_dir ) ){ + @copy($old_dir, $new_dir); + } else { + $url_download = ''; + } + } else { + $url_download = ''; + } + $file->description = htmlspecialchars($file->description, ENT_QUOTES); + $file->description_long = htmlspecialchars($file->description_long, ENT_QUOTES); + $database->setQuery("INSERT INTO #__jdownloads_files (`file_id`, `file_title`, `description`, `description_long`, `file_pic`, `price`, `release`, `language`, `system`, `license`, `url_license`, `size`, `date_added`, `url_download`, `extern_file`, `mirror_1`, `mirror_2`, `url_home`, `author`, `url_author`, `created_by`, `created_mail`, `modified_by`, `modified_date`, `downloads`, `cat_id`, `ordering`, `published`, `checked_out`, `checked_out_time`) VALUES (NULL, '$filetitle', '$file->description', '$file->description_long', '$file->file_pic', '$file->price', '$file->release', '$file->language', '$file->system', '$file->license', '$file->url_license', '', '$file->date_added', '$url_download', '$file->extern_file', '$file->mirror_1', '$file->mirror_2', '$file->url_home', '$file->author', '$file->author_url', '$file->created_by', '$file->created_mail', '', '0000-00-00 00:00:00', '0', '$cat_id', '0', '$publish_files', '0', '0000-00-00 00:00:00')"); + if (!$database->query()) { + // fehler beim erstellen in DB + echo $database->stderr(); + exit; + } + } + } + $mainframe->redirect("index2.php?option=".$option."&task=files.list&cat_id=".$cat_id_act, $sum.' '.JText::_('JLIST_BACKEND_FILES_COPY_SAVED')." "); +} + + +// files edit +function filesEdit($option, $cid, $cat_id){ + global $mainframe, $jlistConfig, $tree; + $user = &JFactory::getUser(); + $database = &JFactory::getDBO(); + + // for tooltip + JHTML::_('behavior.tooltip'); + // for datepicker + JHTML::_('behavior.calendar'); + + if(is_array($cid)) $cid = 0; + + $row = new jlist_files( $database ); + $row->load( $cid ); + + // fail if checked out from another admin + if ($row->isCheckedOut( $user->get('id') )) { + $mainframe->redirect( 'index2.php?option='.$option.'&task=files.list', JText::_('JLIST_BACKEND_FILES_USED') ); + } + $database->SetQuery("SELECT * FROM #__jdownloads_files" + . "\nWHERE file_id = $cid"); + $database->loadObject($row); + + if ($cid) { + $row->checkout( $user->get('id') ); + } else { + $row->published = 1; + } + + if (!$row->date_added) { + $row->date_added = JHTML::_('date', 'now','%Y.%m.%d %H:%M:%S'); + } + + // standard pic wenn als option ausgewählt + if ($jlistConfig['file.pic.default.filename'] && !$row->file_pic) { + $row->file_pic = $jlistConfig['file.pic.default.filename']; + } + + // build system listbox + $file_system = array(); + $file_sys_values = explode(',' , $jlistConfig['system.list']); + for ($i=0; $i < count($file_sys_values); $i++) { + $file_system[] = JHTML::_('select.option', $i, $file_sys_values[$i] ); + } + $listbox_system = JHTML::_('select.genericlist', $file_system, 'system', 'class="inputbox" size="1"', 'value', 'text', $row->system ); + + // build language listbox + $file_language = array(); + $file_lang_values = explode(',' , $jlistConfig['language.list']); + for ($i=0; $i < count($file_lang_values); $i++) { + $file_language[] = JHTML::_('select.option', $i, $file_lang_values[$i] ); + } + $listbox_language = JHTML::_('select.genericlist', $file_language, 'language', 'class="inputbox" size="1"', 'value', 'text', $row->language ); + + // get licenses array and build listbox with licenses + $licenses = array(); + $licenses[] = JHTML::_('select.option', '0', JText::_('JLIST_BACKEND_FILESEDIT_LICENSES_LIST') ); + $database->setQuery( "SELECT id AS value, license_title AS text FROM #__jdownloads_license" ); + $licenses = array_merge( $licenses, $database->loadObjectList() ); + + // symbol list for files + $file_pic_dir = '/images/jdownloads/fileimages/'; + $pic_files = JFolder::files( JPATH_SITE.$file_pic_dir ); + $file_pic_list[] = JHTML::_('select.option', '', JText::_('JLIST_BACKEND_SETTINGS_FRONTEND_FPIC_TEXT')); + foreach ($pic_files as $file) { + if (eregi( "gif|jpg|png", $file )) { + $file_pic_list[] = JHTML::_('select.option', $file ); + } + } + + $inputbox_pic = JHTML::_('select.genericlist', $file_pic_list, 'file_pic', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].file_pic.options[selectedIndex].value!='') {document.imagelib.src='../$file_pic_dir' + document.forms[0].file_pic.options[selectedIndex].value} else {document.imagelib.src=''}\"", 'value', 'text', $row->file_pic ); + + // thumbnail list for uploaded screenshot + $file_thumb_dir = '/images/jdownloads/screenshots/thumbnails/'; + $thumb_files = JFolder::files( JPATH_SITE.$file_thumb_dir ); + $file_thumb_list[] = JHTML::_('select.option', '', JText::_('JLIST_BACKEND_FILESEDIT_THUMBNAIL_LIST_NO_PIC')); + foreach ($thumb_files as $thumb) { + if (eregi( "gif|jpg|png", $thumb )) { + $file_thumb_list[] = JHTML::_('select.option', $thumb ); + } + } + + $inputbox_thumb = JHTML::_('select.genericlist', $file_thumb_list, 'file_thumb', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].file_thumb.options[selectedIndex].value!='') {document.imagelib4.src='../$file_thumb_dir' + document.forms[0].file_thumb.options[selectedIndex].value} else {document.imagelib4.src=''}\"", 'value', 'text', $row->thumbnail ); + + jlist_HTML::filesEdit($option, $row, $licenses, $up_files, $inputbox_pic, $listbox_system, $listbox_language, $no_writable, $inputbox_thumb, $cat_id); +} + +// files list +function filesList($option, $task, $cat_id, $limitstart){ + global $mainframe, $limit; + $database = &JFactory::getDBO(); + + $where = array(); + + $search = $mainframe->getUserStateFromRequest( "search{$option}", 'search', '' ); + if (get_magic_quotes_gpc()) { + $search = stripslashes( $search ); + } + + if ( $search ) { + $where[] = "LOWER( a.file_title ) LIKE '%" . $database->getEscaped( trim( strtolower( $search ) ) ) . "%'"; + } + + $filter = $mainframe->getUserStateFromRequest( "filter{$option}", 'filter', '' ); + $filter = intval( $filter ); + //$cat_id = intval(JArrayHelper::getValue($_REQUEST,'cat_id',-1)); + + switch($cat_id){ + case '-2': $where[] = "a.published > 0"; break; + case '-3': $where[] = "a.published = 0"; break; + case '0': $where[] = "a.published >= 0"; + $where[] = "a.cat_id = 0"; break; + case '-1': $where[] = "a.published >= 0"; break; + default: $where[] = "a.published >= 0"; + $where[] = "a.cat_id = ".$cat_id; break; + } + + $database->SetQuery( "SELECT count(*)" + . "\nFROM #__jdownloads_files AS a" + . "\nWHERE ". implode( ' AND ', $where ) + . "\nORDER BY a.cat_id, a.ordering" + ); + $total = $database->loadResult(); + echo $database->getErrorMsg(); + + if ($search && $filter == 1) { + $where[] = "LOWER(a.file_title) LIKE '%$search%'"; + $database->SetQuery( "SELECT count(*)" + . "\nFROM #__jdownloads_files AS a" + . (count( $where ) ? "\n WHERE " . implode( ' AND ', $where ) : "") + ); + $total = $database->loadResult(); + echo $database->getErrorMsg(); + } + + if ($search) { + $where[] = "LOWER(a.file_title) LIKE '%$search%'"; + $database->SetQuery( "SELECT count(*)" + . "\nFROM #__jdownloads_files AS a" + . (count( $where ) ? "\n WHERE " . implode( ' AND ', $where ) : "") + ); + $total = $database->loadResult(); + echo $database->getErrorMsg(); + } + + $pageNav = new JPagination( $total, $limitstart, $limit ); + $query = "SELECT a.*" + . "\nFROM #__jdownloads_files AS a" + . ( count( $where ) ? "\n WHERE " . implode( ' AND ', $where ) : "") + . "\nORDER BY a.cat_id, a.ordering" + ; + $database->SetQuery( $query, $pageNav->limitstart, $pageNav->limit ); + $rows = $database->loadObjectList(); + + // get cat titles for view + foreach($rows as $i=>$row){ + $cat = new jlist_cats($database); + $cat->load($row->cat_id); + $rows[$i]->cat_title = $cat->cat_title; + } + jlist_HTML::filesList($rows, $option, $pageNav, $search, $filter, $task, $limitstart); +} + +// change saveorder +function filesSaveOrder( &$cid, $cat_id ) { + global $mainframe; + $database = &JFactory::getDBO(); + + $total = count( $cid ); +// $order = josGetArrayInts( 'order' ); + $order = JRequest::getVar('order', array(), 'post', 'array' ); + + for( $i=0; $i < $total; $i++ ) { + $query = "UPDATE #__jdownloads_files" + . "\n SET ordering = " . (int) $order[$i] + . "\n WHERE file_id = " . (int) $cid[$i]; + $database->setQuery( $query ); + if (!$database->query()) { + echo "\n"; + exit(); + } + // update ordering + $row = new jlist_files( $database ); + $row->load( (int)$cid[$i] ); + } + + // clean any existing cache files + $cache =& JFactory::getCache('com_jdownloads'); + $cache->clean('com_jdownloads'); + + $msg = JText::_('JLIST_BACKEND_FILES_SAVEORDER'); + $mainframe->redirect( 'index2.php?option=com_jdownloads&task=files.list&cat_id='.$cat_id, $msg ); +} + +// change saveorder with orderup/orderdown image +function filesOrder( $uid, $inc, $option, $cat_id ) { + global $mainframe; + $database = &JFactory::getDBO(); + + $row = new jlist_files( $database ); + $row->load( $uid ); + $row->move( $inc ); + + $mainframe->redirect( 'index2.php?option=com_jdownloads&task=files.list&cat_id='.$cat_id ); +} + +/********************************************** +/ License +/ ********************************************/ + +// license edit +function editLicense($option, $cid){ + global $mainframe; + $user = &JFactory::getUser(); + $database = &JFactory::getDBO(); + + if(is_array($cid)) $cid = 0; + + $row = new jlist_license( $database ); + $row->load( $cid ); + + // fail if checked out not by 'me' + if ($row->isCheckedOut( $user->get('id') )) { + $mainframe->redirect( 'index2.php?option='.$option.'&task=license.list', $row->license_title.' '.JText::_('JLIST_BACKEND_LIC_USED') ); + } + $database->SetQuery("SELECT * FROM #__jdownloads_license" + . "\nWHERE id = $cid"); + $database->loadObject($row); + + if ($cid) { + $row->checkout( $user->get('id') ); + } else { + $row->published = 1; + } + + jlist_HTML::editLicense($option, $row); +} + +// license save +function saveLicense($option, $apply=0){ + global $mainframe; + $database = &JFactory::getDBO(); + + $row = new jlist_license($database); + + // bind it to the table + if (!$row -> bind($_POST)) { + echo "\n"; + exit(); + } + + if(empty($row->license_title)) { + $mainframe->redirect("index2.php?option=".$option."&task=license.edit", JText::_('JLIST_BACKEND_LICEDIT_ERROR_TITLE')); } + + $row->license_text = rtrim($row->license_text); + + // store it in the db + if (!$row -> store()) { + echo "\n"; + exit(); + }else{ + if(!$row->id) $row->id = mysql_insert_id(); + } + $row->checkin(); + if(!$apply) $mainframe->redirect("index2.php?option=".$option."&task=license.list", JText::_('JLIST_BACKEND_LICEDIT_SAVE')." "); + else $mainframe->redirect("index2.php?option=".$option."&task=license.edit&cid=".$row->id, JText::_('JLIST_BACKEND_LICEDIT_SAVE')." "); +} + +function deleteLicense($option, $cid){ + global $mainframe; + $database = &JFactory::getDBO(); + + $total = count( $cid ); + $cats = join(",", $cid); + + //Delete Categories + $database->SetQuery("DELETE FROM #__jdownloads_license WHERE id IN ($cats)"); + $database->Query(); + + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + $msg = $total .JText::_('JLIST_BACKEND_LICLIST_DEL')." "; + $mainframe->redirect( 'index2.php?option='. $option .'&task=license.list', $msg ); +} + +// license cancel +function cancelLicense($option){ + global $mainframe; + $database = &JFactory::getDBO(); + + $row = new jlist_license( $database ); + $row->bind( $_POST ); + $row->checkin(); + + $mainframe->redirect( "index2.php?option=".$option."&task=license.list" ); +} + +// license list +function listLicense($option){ + global $mainframe; + $database = &JFactory::getDBO(); + + $pageNav = new JPagination( $total, $limitstart, $limit ); + $query = "SELECT * FROM #__jdownloads_license"; + + $database->SetQuery( $query ); + $rows = $database->loadObjectList(); + + jlist_HTML::listLicense($rows, $option); +} + +/********************************************** +/ Templates +/ ********************************************/ + +function menuTemplates($option, $task) { + + jlist_HTML::controlPanelTemplate($option, $task); +} + + +// templates edit +function editTemplatesCats($option, $cid){ + global $mainframe; + $user = &JFactory::getUser(); + $database = &JFactory::getDBO(); + + if(is_array($cid)) $cid = 0; + + $row = new jlist_templates( $database ); + $row->load( $cid ); + + if ($row->isCheckedOut( $user->get('id') )) { + $mainframe->redirect( 'index2.php?option='.$option.'&task=templates.list.cats', $row->template_name.' '.JText::_('JLIST_BACKEND_CATS_USED') ); + } + $database->SetQuery("SELECT * FROM #__jdownloads_templates" + . "\nWHERE id = $cid"); + $database->loadObject($row); + + if ($cid) { + $row->checkout( $user->get('id') ); + } + + // load template text default + if ($row->template_name == ''){ + $row->template_text = JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_DEFAULT'); + } else { + if ($row->template_text == '') { + $row->template_text = JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_DEFAULT'); + } + } + + jlist_HTML::editTemplatesCats($option, $row); +} + +function editTemplatesFiles($option, $cid){ + global $mainframe; + $user = &JFactory::getUser(); + $database = &JFactory::getDBO(); + + if(is_array($cid)) $cid = 0; + + $row = new jlist_templates( $database ); + $row->load( $cid ); + + if ($row->isCheckedOut( $user->get('id') )) { + $mainframe->redirect( 'index2.php?option='.$option.'&task=templates.list.files', $row->template_name.' '.JText::_('JLIST_BACKEND_TEMP_USED') ); + } + $database->SetQuery("SELECT * FROM #__jdownloads_templates" + . "\nWHERE id = $cid"); + $database->loadObject($row); + + if ($cid) { + $row->checkout( $user->get('id') ); + } + + // load template text default + if ($row->template_name == ''){ + $row->template_text = JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT'); + } else { + if ($row->template_text == '') { + $row->template_text = JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT'); + } + } + + jlist_HTML::editTemplatesFiles($option, $row); +} + +function editTemplatesDetails($option, $cid){ + global $mainframe; + $user = &JFactory::getUser(); + $database = &JFactory::getDBO(); + + if(is_array($cid)) $cid = 0; + + $row = new jlist_templates( $database ); + $row->load( $cid ); + + if ($row->isCheckedOut( $user->get('id') )) { + $mainframe->redirect( 'index2.php?option='.$option.'&task=templates.list.details', $row->template_name.' '.JText::_('JLIST_BACKEND_TEMP_USED') ); + } + $database->SetQuery("SELECT * FROM #__jdownloads_templates" + . "\nWHERE id = $cid"); + $database->loadObject($row); + + if ($cid) { + $row->checkout( $user->get('id') ); + } + + // load template text default + if ($row->template_name == ''){ + $row->template_text = JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_DETAILS_DEFAULT'); + } else { + if ($row->template_text == '') { + $row->template_text = JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_DETAILS_DEFAULT'); + } + } + + jlist_HTML::editTemplatesDetails($option, $row); +} + +function editTemplatesSummary($option, $cid){ + global $mainframe; + $user = &JFactory::getUser(); + $database = &JFactory::getDBO(); + + if(is_array($cid)) $cid = 0; + + $row = new jlist_templates( $database ); + $row->load( $cid ); + + if ($row->isCheckedOut( $user->get('id') )) { + $mainframe->redirect( 'index2.php?option='.$option.'&task=templates.list.summary', $row->template_name.' '.JText::_('JLIST_BACKEND_TEMP_USED') ); + } + $database->SetQuery("SELECT * FROM #__jdownloads_templates" + . "\nWHERE id = $cid"); + $database->loadObject($row); + + if ($cid) { + $row->checkout( $user->get('id') ); + } + + // load template text default + if ($row->template_name == ''){ + $row->template_text = JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_SUMMARY_DEFAULT'); + } else { + if ($row->template_text == '') { + $row->template_text = JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_SUMMARY_DEFAULT'); + } + } + + jlist_HTML::editTemplatesSummary($option, $row); +} + +// templates save +function saveTemplatesCats($option, $apply=0){ + global $mainframe; + $database = &JFactory::getDBO(); + + $row = new jlist_templates($database); + + // bind it to the table + if (!$row->bind($_POST)) { + echo "\n"; + exit(); + } + + $row->locked = JArrayHelper::getValue($_POST, 'locked', ''); + if ($row->locked) { + $row->template_name = JArrayHelper::getValue($_POST, 'tempname', ''); + } + + if(empty($row->template_name)) { + $mainframe->redirect("index2.php?option=".$option."&task=templates.edit.cats", JText::_('JLIST_BACKEND_TEMPEDIT_ERROR_TITLE')); } + + $row->template_typ = '1'; + + $row->template_text = rtrim(stripslashes($row->template_text)); + + // store it in the db + if (!$row -> store()) { + echo "\n"; + exit(); + }else{ + if(!$row->id) $row->id = mysql_insert_id(); + } + $row->checkin(); + + if(!$apply) $mainframe->redirect("index2.php?option=".$option."&task=templates.list.cats", JText::_('JLIST_BACKEND_TEMPEDIT_SAVE')." "); + else $mainframe->redirect("index2.php?option=".$option."&task=templates.edit.cats&cid=".$row->id, JText::_('JLIST_BACKEND_TEMPEDIT_SAVE')." "); +} + +// templates save +function saveTemplatesFiles($option, $apply=0){ + global $mainframe; + $database = &JFactory::getDBO(); + + $row = new jlist_templates($database); + + // bind it to the table + if (!$row -> bind($_POST)) { + echo "\n"; + exit(); + } + + $row->locked = JArrayHelper::getValue($_POST, 'locked', ''); + if ($row->locked) { + $row->template_name = JArrayHelper::getValue($_POST, 'tempname', ''); + } + + if(empty($row->template_name)) { + $mainframe->redirect("index2.php?option=".$option."&task=templates.edit.files", JText::_('JLIST_BACKEND_TEMPEDIT_ERROR_TITLE')); } + + $row->template_typ = '2'; + + $row->template_text = rtrim(stripslashes($row->template_text)); + + // store it in the db + if (!$row -> store()) { + echo "\n"; + exit(); + }else{ + if(!$row->id) $row->id = mysql_insert_id(); + } + $row->checkin(); + if(!$apply) $mainframe->redirect("index2.php?option=".$option."&task=templates.list.files", JText::_('JLIST_BACKEND_TEMPEDIT_SAVE')." "); + else $mainframe->redirect("index2.php?option=".$option."&task=templates.edit.files&cid=".$row->id, JText::_('JLIST_BACKEND_TEMPEDIT_SAVE')." "); +} + +// templates save +function saveTemplatesDetails($option, $apply=0){ + global $mainframe; + $database = &JFactory::getDBO(); + + $row = new jlist_templates($database); + + // bind it to the table + if (!$row -> bind($_POST)) { + echo "\n"; + exit(); + } + + $row->locked = JArrayHelper::getValue($_POST, 'locked', ''); + if ($row->locked) { + $row->template_name = JArrayHelper::getValue($_POST, 'tempname', ''); + } + + if(empty($row->template_name)) { + $mainframe->redirect("index2.php?option=".$option."&task=templates.edit.details", JText::_('JLIST_BACKEND_TEMPEDIT_ERROR_TITLE')); } + + $row->template_typ = '5'; + + $row->template_text = rtrim(stripslashes($row->template_text)); + + // store it in the db + if (!$row -> store()) { + echo "\n"; + exit(); + }else{ + if(!$row->id) $row->id = mysql_insert_id(); + } + $row->checkin(); + if(!$apply) $mainframe->redirect("index2.php?option=".$option."&task=templates.list.details", JText::_('JLIST_BACKEND_TEMPEDIT_SAVE')." "); + else $mainframe->redirect("index2.php?option=".$option."&task=templates.edit.details&cid=".$row->id, JText::_('JLIST_BACKEND_TEMPEDIT_SAVE')." "); +} + +// templates save +function saveTemplatesSummary($option, $apply=0){ + global $mainframe; + $database = &JFactory::getDBO(); + + $row = new jlist_templates($database); + + // bind it to the table + if (!$row -> bind($_POST)) { + echo "\n"; + exit(); + } + + $row->locked = JArrayHelper::getValue($_POST, 'locked', ''); + if ($row->locked) { + $row->template_name = JArrayHelper::getValue($_POST, 'tempname', ''); + } + + if(empty($row->template_name)) { + $mainframe->redirect("index2.php?option=".$option."&task=templates.edit.summary", JText::_('JLIST_BACKEND_TEMPEDIT_ERROR_TITLE')); } + + $row->template_typ = '3'; + + $row->template_text = rtrim(stripslashes($row->template_text)); + + // store it in the db + if (!$row -> store()) { + echo "\n"; + exit(); + }else{ + if(!$row->id) $row->id = mysql_insert_id(); + } + $row->checkin(); + if(!$apply) $mainframe->redirect("index2.php?option=".$option."&task=templates.list.summary", JText::_('JLIST_BACKEND_TEMPEDIT_SAVE')." "); + else $mainframe->redirect("index2.php?option=".$option."&task=templates.edit.summary&cid=".$row->id, JText::_('JLIST_BACKEND_TEMPEDIT_SAVE')." "); +} + +// templates delete +function deleteTemplatesCats($option, $cid){ + global $mainframe; + $database = &JFactory::getDBO(); + + $total = count( $cid ); + $cids = implode( ',', $cid ); + + // check for active or default layout + $error_msg = checkTemplatesStatus($total,$cid); + + if ($error_msg) { + $mainframe->redirect("index2.php?option=".$option."&task=templates.list.cats", $error_msg); + } + + // delete + $database->SetQuery("DELETE FROM #__jdownloads_templates WHERE id IN ($cids)"); + $database->Query(); + + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + $msg = $total .JText::_('JLIST_BACKEND_TEMPLIST_DEL')." "; + $mainframe->redirect( 'index2.php?option='. $option .'&task=templates.list.cats', $msg ); +} + +// templates delete +function deleteTemplatesFiles($option, $cid){ + global $mainframe; + $database = &JFactory::getDBO(); + + $total = count( $cid ); + $cids = join(",", $cid); + + // check for active or default layout + $error_msg = checkTemplatesStatus($total,$cid); + + if ($error_msg) { + $mainframe->redirect("index2.php?option=".$option."&task=templates.list.files", $error_msg); + } + + // delete + $database->SetQuery("DELETE FROM #__jdownloads_templates WHERE id IN ($cids)"); + $database->Query(); + + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + $msg = $total .JText::_('JLIST_BACKEND_TEMPLIST_DEL')." "; + $mainframe->redirect( 'index2.php?option='. $option .'&task=templates.list.files', $msg ); +} + +// templates delete +function deleteTemplatesDetails($option, $cid){ + global $mainframe; + $database = &JFactory::getDBO(); + + $total = count( $cid ); + $cids = join(",", $cid); + + // check for active or default layout + $error_msg = checkTemplatesStatus($total,$cid); + + if ($error_msg) { + $mainframe->redirect("index2.php?option=".$option."&task=templates.list.details", $error_msg); + } + + // delete + $database->SetQuery("DELETE FROM #__jdownloads_templates WHERE id IN ($cids)"); + $database->Query(); + + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + $msg = $total .JText::_('JLIST_BACKEND_TEMPLIST_DEL')." "; + $mainframe->redirect( 'index2.php?option='. $option .'&task=templates.list.details', $msg ); +} + + +// templates delete +function deleteTemplatesSummary($option, $cid){ + global $mainframe; + $database = &JFactory::getDBO(); + + $total = count( $cid ); + $cids = join(",", $cid); + + // check for active or default layout + $error_msg = checkTemplatesStatus($total,$cid); + + if ($error_msg) { + $mainframe->redirect("index2.php?option=".$option."&task=templates.list.summary", $error_msg); + } + + // delete + $database->SetQuery("DELETE FROM #__jdownloads_templates WHERE id IN ($cids)"); + $database->Query(); + + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + $msg = $total .JText::_('JLIST_BACKEND_TEMPLIST_DEL')." "; + $mainframe->redirect( 'index2.php?option='. $option .'&task=templates.list.summary', $msg ); +} + +// templates cancel +function cancelTemplatesCats($option){ + global $mainframe; + $database = &JFactory::getDBO(); + + $row = new jlist_templates( $database ); + $row->bind( $_POST ); + $row->checkin(); + + $mainframe->redirect( "index2.php?option=".$option."&task=templates.list.cats" ); +} + +// templates cancel +function cancelTemplatesFiles($option){ + global $mainframe; + $database = &JFactory::getDBO(); + + $row = new jlist_templates( $database ); + $row->bind( $_POST ); + $row->checkin(); + + $mainframe->redirect( "index2.php?option=".$option."&task=templates.list.files" ); +} + +// templates cancel +function cancelTemplatesDetails($option){ + global $mainframe; + $database = &JFactory::getDBO(); + + $row = new jlist_templates( $database ); + $row->bind( $_POST ); + $row->checkin(); + + $mainframe->redirect( "index2.php?option=".$option."&task=templates.list.details" ); +} + +// templates cancel +function cancelTemplatesSummary($option){ + global $mainframe; + $database = &JFactory::getDBO(); + + $row = new jlist_templates( $database ); + $row->bind( $_POST ); + $row->checkin(); + + $mainframe->redirect( "index2.php?option=".$option."&task=templates.list.summary" ); +} + +// templates list +function listTemplatesCats($option){ + global $mainframe; + $database = &JFactory::getDBO(); + + $pageNav = new JPagination( $total, $limitstart, $limit ); + $query = "SELECT * FROM #__jdownloads_templates where template_typ = 1"; + + $database->SetQuery( $query ); + $rows = $database->loadObjectList(); + + jlist_HTML::listTemplatesCats($rows, $option); +} + +// templates list +function listTemplatesFiles($option){ + global $mainframe; + $database = &JFactory::getDBO(); + + $pageNav = new JPagination( $total, $limitstart, $limit ); + $query = "SELECT * FROM #__jdownloads_templates where template_typ = 2"; + + $database->SetQuery( $query ); + $rows = $database->loadObjectList(); + + jlist_HTML::listTemplatesFiles($rows, $option); +} + + +function listTemplatesDetails($option){ + global $mainframe; + $database = &JFactory::getDBO(); + + $pageNav = new JPagination( $total, $limitstart, $limit ); + $query = "SELECT * FROM #__jdownloads_templates where template_typ = 5"; + + $database->SetQuery( $query ); + $rows = $database->loadObjectList(); + + jlist_HTML::listTemplatesDetails($rows, $option); +} + +// templates list +function listTemplatesSummary($option){ + global $mainframe; + $database = &JFactory::getDBO(); + + $pageNav = new JPagination( $total, $limitstart, $limit ); + $query = "SELECT * FROM #__jdownloads_templates where template_typ = 3"; + + $database->SetQuery( $query ); + $rows = $database->loadObjectList(); + + jlist_HTML::listTemplatesSummary($rows, $option); +} + +// templates active +function activeTemplatesCats($option, $cid){ + global $mainframe; + $database = &JFactory::getDBO(); + + $total = count($cid); + if ($total > 1) { + echo "\n"; + exit(); + } + + $cids = implode( ',', $cid ); + + // parent active disabled + $database->SetQuery("UPDATE #__jdownloads_templates SET template_active = 0 WHERE template_typ = 1 AND template_active = 1"); + $database->Query(); + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + // new active enabled + $database->SetQuery("UPDATE #__jdownloads_templates SET template_active = 1 WHERE template_typ = 1 AND id IN ( $cids )"); + $database->Query(); + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + $msg = JText::_('JLIST_BACKEND_TEMPEDIT_ACTIVE')." "; + $mainframe->redirect( 'index2.php?option='. $option .'&task=templates.list.cats', $msg ); +} + +// templates active +function activeTemplatesFiles($option, $cid){ + global $mainframe; + $database = &JFactory::getDBO(); + + $total = count($cid); + if ($total > 1) { + echo "\n"; + exit(); + } + + $cids = implode( ',', $cid ); + + // parent active disabled + $database->SetQuery("UPDATE #__jdownloads_templates SET template_active = 0 WHERE template_typ = 2 AND template_active = 1"); + $database->Query(); + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + // new active enabled + $database->SetQuery("UPDATE #__jdownloads_templates SET template_active = 1 WHERE template_typ = 2 AND id IN ( $cids )"); + $database->Query(); + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + $msg = JText::_('JLIST_BACKEND_TEMPEDIT_ACTIVE')." "; + $mainframe->redirect( 'index2.php?option='. $option .'&task=templates.list.files', $msg ); +} + +// templates active +function activeTemplatesDetails($option, $cid){ + global $mainframe; + $database = &JFactory::getDBO(); + + $total = count($cid); + if ($total > 1) { + echo "\n"; + exit(); + } + + $cids = implode( ',', $cid ); + + // parent active disabled + $database->SetQuery("UPDATE #__jdownloads_templates SET template_active = 0 WHERE template_typ = 5 AND template_active = 1"); + $database->Query(); + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + // new active enabled + $database->SetQuery("UPDATE #__jdownloads_templates SET template_active = 1 WHERE template_typ = 5 AND id IN ( $cids )"); + $database->Query(); + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + $msg = JText::_('JLIST_BACKEND_TEMPEDIT_ACTIVE')." "; + $mainframe->redirect( 'index2.php?option='. $option .'&task=templates.list.details', $msg ); +} + + +// templates active +function activeTemplatesSummary($option, $cid){ + global $mainframe; + $database = &JFactory::getDBO(); + + $total = count($cid); + if ($total > 1) { + echo "\n"; + exit(); + } + + $cids = implode( ',', $cid ); + + // parent active disabled + $database->SetQuery("UPDATE #__jdownloads_templates SET template_active = 0 WHERE template_typ = 3 AND template_active = 1"); + $database->Query(); + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + // new active enabled + $database->SetQuery("UPDATE #__jdownloads_templates SET template_active = 1 WHERE template_typ = 3 AND id IN ( $cids )"); + $database->Query(); + if ( !$database->query() ) { + echo "\n"; + exit(); + } + + $msg = JText::_('JLIST_BACKEND_TEMPEDIT_ACTIVE')." "; + $mainframe->redirect( 'index2.php?option='. $option .'&task=templates.list.summary', $msg ); +} + +// css edit +function cssEdit($option) { + + $css_file = JPATH_SITE.'/components/com_jdownloads/jdownloads_fe.css'; + @chmod ($css_file, 0777); + + clearstatcache(); + if ( is_writable( $css_file ) == false ) { + $css_writable = false; + } else { + $css_writable = true; + } + jlist_HTML::cssEdit($option, $css_file, $css_writable); +} + +// css save +function cssSave($option, $css_file, $css_text) { + global $mainframe; + + $css_file = JArrayHelper::getValue($_POST,'css_file', ''); + $css_text = JArrayHelper::getValue($_POST,'css_text', ''); + clearstatcache(); + + if (!is_writable($css_file)) { + $mainframe->redirect("index2.php?option=".$option."&task=css.edit", JText::_('JLIST_BACKEND_EDIT_CSS_WRITE_STATUS_TEXT').JText::_('JLIST_BACKEND_EDIT_LANG_CSS_FILE_WRITABLE_NO') ); + break; + } + + if ($fp = fopen( $css_file, "w")) { + fputs($fp,stripslashes($css_text)); + fclose($fp); + $mainframe->redirect("index2.php?option=".$option."&task=css.edit", JText::_('JLIST_BACKEND_EDIT_CSS_SAVED')); + } +} + +// language edit +function languageEdit($option) { + global $mainframe; + + $params = JComponentHelper::getParams('com_languages'); + $frontend_lang = $params->get('site', 'en-GB'); + $language = JLanguage::getInstance($frontend_lang); + + // get language file for edit + $language = &JFactory::getLanguage(); + $language->load('com_jdownloads'); + $lang_file = JLanguage::getLanguagePath(JPATH_SITE); + + $lang_file .= DS.$frontend_lang.DS.$frontend_lang.'.com_jdownloads.ini'; + + @chmod ($lang_file, 0777); + clearstatcache(); + if ( is_writable( $lang_file ) == false ) { + $lang_writable = false; + } else { + $lang_writable = true; + } + + jlist_HTML::languageEdit($option, $lang_file, $lang_writable); +} + +// language save +function languageSave($option, $lang_file, $lang_text) { + global $mainframe; + + $lang_file = JArrayHelper::getValue($_POST,'lang_file', ''); + $lang_text = JArrayHelper::getValue($_POST,'lang_text', '', _MOS_ALLOWHTML); + + if (!is_writable($lang_file)) { + $mainframe->redirect("index2.php?option=".$option."&task=language.edit", JText::_('JLIST_BACKEND_EDIT_LANG_WRITE_STATUS_TEXT').JText::_('JLIST_BACKEND_EDIT_LANG_CSS_FILE_WRITABLE_NO') ); + break; + } + + if ($fp = fopen( $lang_file, "w")) { + fputs($fp,stripslashes($lang_text)); + fclose($fp); + $mainframe->redirect("index2.php?option=".$option."&task=language.edit", JText::_('JLIST_BACKEND_EDIT_LANG_SAVED')); + } + +} + + +/********************************************** +/ Configuration +/ ********************************************/ + +// Config view +function showConfig($option){ + global $jlistConfig, $mainframe; + $database = &JFactory::getDBO(); + + $user_groups = array(); + $user_groups[] = JHTML::_('select.option', '0', JText::_('JLIST_BACKEND_SETTINGS_FRONTEND_UPLOADS_ACCESS_ALL')); + $user_groups[] = JHTML::_('select.option', '1', JText::_('JLIST_BACKEND_SETTINGS_FRONTEND_UPLOADS_ACCESS_REGGED')); + $user_groups[] = JHTML::_('select.option', '2', JText::_('JLIST_BACKEND_SETTINGS_FRONTEND_UPLOADS_ACCESS_ADMINS')); + + $list_sortorder = array(); + $list_sortorder[] = JHTML::_('select.option', '0', JText::_('JLIST_BACKEND_SETTINGS_FILE_ORDER_1')); + $list_sortorder[] = JHTML::_('select.option', '1', JText::_('JLIST_BACKEND_SETTINGS_FILE_ORDER_2')); + $list_sortorder[] = JHTML::_('select.option', '2', JText::_('JLIST_BACKEND_SETTINGS_FILE_ORDER_3')); + $list_sortorder[] = JHTML::_('select.option', '3', JText::_('JLIST_BACKEND_SETTINGS_FILE_ORDER_4')); + $list_sortorder[] = JHTML::_('select.option', '4', JText::_('JLIST_BACKEND_SETTINGS_FILE_ORDER_5')); + $list_sortorder[] = JHTML::_('select.option', '5', JText::_('JLIST_BACKEND_SETTINGS_FILE_ORDER_6')); + + $cats_sortorder = array(); + $cats_sortorder[] = JHTML::_('select.option', '0', JText::_('JLIST_BACKEND_SETTINGS_CATS_ORDER_1')); + $cats_sortorder[] = JHTML::_('select.option', '1', JText::_('JLIST_BACKEND_SETTINGS_CATS_ORDER_2')); + $cats_sortorder[] = JHTML::_('select.option', '2', JText::_('JLIST_BACKEND_SETTINGS_CATS_ORDER_3')); + + // auswahlliste for default catsymbol + $cat_pic_dir = '/images/jdownloads/catimages/'; + $pic_files = JFolder::files( JPATH_SITE.$cat_pic_dir ); + $cat_pic_list[] = JHTML::_('select.option', '', ''); + foreach ($pic_files as $file) { + if (eregi( "gif|jpg|png", $file )) { + $cat_pic_list[] = JHTML::_('select.option', $file ); + } + } + + $inputbox_pic = JHTML::_('select.genericlist', $cat_pic_list, 'cat_pic', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].cat_pic.options[selectedIndex].value!='') {document.imagelib.src='../$cat_pic_dir' + document.forms[0].cat_pic.options[selectedIndex].value} else {document.imagelib.src=''}\"", 'value', 'text', $jlistConfig['cat.pic.default.filename'] ); + + // auswahlliste for default filesymbol + $file_pic_dir = '/images/jdownloads/fileimages/'; + $pic_files = JFolder::files( JPATH_SITE.$file_pic_dir ); + $file_pic_list[] = JHTML::_('select.option', '', ''); + foreach ($pic_files as $file) { + if (eregi( "gif|jpg|png", $file )) { + $file_pic_list[] = JHTML::_('select.option', $file ); + } + } + $inputbox_pic_file = JHTML::_('select.genericlist', $file_pic_list, 'file_pic', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].file_pic.options[selectedIndex].value!='') {document.imagelib2.src='../$file_pic_dir' + document.forms[0].file_pic.options[selectedIndex].value} else {document.imagelib2.src=''}\"", 'value', 'text', $jlistConfig['file.pic.default.filename'] ); + + // auswahlliste for hot image + $hot_pic_dir = '/images/jdownloads/hotimages/'; + $hot_files = JFolder::files( JPATH_SITE.$hot_pic_dir ); + $hot_pic_list[] = JHTML::_('select.option', '', ''); + foreach ($hot_files as $hotfile) { + if (eregi( "gif|jpg|png", $hotfile )) { + $hot_pic_list[] = JHTML::_('select.option', $hotfile ); + } + } + + $inputbox_hot = JHTML::_('select.genericlist', $hot_pic_list, 'hot_pic', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].hot_pic.options[selectedIndex].value!='') {document.imagelib3.src='../$hot_pic_dir' + document.forms[0].hot_pic.options[selectedIndex].value} else {document.imagelib3.src=''}\"", 'value', 'text', $jlistConfig['picname.is.file.hot'] ); + + // auswahlliste for new image + $new_pic_dir = '/images/jdownloads/newimages/'; + $new_files = JFolder::files( JPATH_SITE.$new_pic_dir ); + $new_pic_list[] = JHTML::_('select.option', '', ''); + foreach ($new_files as $newfile) { + if (eregi( "gif|jpg|png", $newfile )) { + $new_pic_list[] = JHTML::_('select.option', $newfile ); + } + } + + $inputbox_new = JHTML::_('select.genericlist', $new_pic_list, 'new_pic', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].new_pic.options[selectedIndex].value!='') {document.imagelib4.src='../$new_pic_dir' + document.forms[0].new_pic.options[selectedIndex].value} else {document.imagelib4.src=''}\"", 'value', 'text', $jlistConfig['picname.is.file.new'] ); + + // auswahlliste for download image + $down_pic_dir = '/images/jdownloads/downloadimages/'; + $down_files = JFolder::files( JPATH_SITE.$down_pic_dir ); + $down_pic_list[] = JHTML::_('select.option', '', ''); + foreach ($down_files as $downfile) { + if (eregi( "gif|jpg|png", $downfile )) { + $down_pic_list[] = JHTML::_('select.option', $downfile ); + } + } + + $inputbox_down = JHTML::_('select.genericlist', $down_pic_list, 'down_pic', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].down_pic.options[selectedIndex].value!='') {document.imagelib5.src='../$down_pic_dir' + document.forms[0].down_pic.options[selectedIndex].value} else {document.imagelib5.src=''}\"", 'value', 'text', $jlistConfig['download.pic.details'] ); + + $inputbox_down2 = JHTML::_('select.genericlist', $down_pic_list, 'down_pic2', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].down_pic2.options[selectedIndex].value!='') {document.imagelib9.src='../$down_pic_dir' + document.forms[0].down_pic2.options[selectedIndex].value} else {document.imagelib9.src=''}\"", 'value', 'text', $jlistConfig['download.pic.files'] ); + + $inputbox_mirror_1 = JHTML::_('select.genericlist', $down_pic_list, 'mirror_1_pic', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].mirror_1_pic.options[selectedIndex].value!='') {document.imagelib6.src='../$down_pic_dir' + document.forms[0].mirror_1_pic.options[selectedIndex].value} else {document.imagelib6.src=''}\"", 'value', 'text', $jlistConfig['download.pic.mirror_1'] ); + + $inputbox_mirror_2 = JHTML::_('select.genericlist', $down_pic_list, 'mirror_2_pic', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].mirror_2_pic.options[selectedIndex].value!='') {document.imagelib7.src='../$down_pic_dir' + document.forms[0].mirror_2_pic.options[selectedIndex].value} else {document.imagelib7.src=''}\"", 'value', 'text', $jlistConfig['download.pic.mirror_2'] ); + + // auswahlliste for update image + $upd_pic_dir = '/images/jdownloads/updimages/'; + $upd_files = JFolder::files( JPATH_SITE.$upd_pic_dir ); + $upd_pic_list[] = JHTML::_('select.option', '', ''); + foreach ($upd_files as $updfile) { + if (eregi( "gif|jpg|png", $updfile )) { + $upd_pic_list[] = JHTML::_('select.option', $updfile ); + } + } + + $inputbox_upd = JHTML::_('select.genericlist', $upd_pic_list, 'upd_pic', "class=\"inputbox\" size=\"1\"" + . " onchange=\"javascript:if (document.forms[0].upd_pic.options[selectedIndex].value!='') {document.imagelib8.src='../$upd_pic_dir' + document.forms[0].upd_pic.options[selectedIndex].value} else {document.imagelib8.src=''}\"", 'value', 'text', $jlistConfig['picname.is.file.updated'] ); + + // for content file plugin by pelma + // check if exists + $file_plugin_path = JPATH_ROOT.DS.'plugins'.DS.'content'.DS.'mos_jdownloads_file.php'; + if (file_exists($file_plugin_path)) { + $database->setQuery("SELECT template_name FROM #__jdownloads_templates WHERE template_typ = 2"); + $templaterows = $database->loadObjectList(); + $file_templates = array(); + $templatecnt = 0; + foreach ($templaterows as $templaterow) { + $file_templates[] = JHTML::_('select.option', $templaterow->template_name, $templaterow->template_name); + $templatecnt++; + } + $file_plugin_inputbox = JHTML::_('select.genericlist', $file_templates, "jlistConfig[fileplugin.defaultlayout]" , 'size="6" class="inputbox"', 'value', 'text', $jlistConfig['fileplugin.defaultlayout'] ); + $file_plugin_inputbox2 = JHTML::_('select.genericlist', $file_templates, "jlistConfig[fileplugin.layout_disabled]" , 'size="6" class="inputbox"', 'value', 'text', $jlistConfig['fileplugin.layout_disabled'] ); + } + + jlist_HTML::showConfig($option, $list_sortorder, $cats_sortorder, $user_groups, $file_plugin_inputbox, $file_plugin_inputbox2, $inputbox_pic, $inputbox_pic_file, $inputbox_hot, $inputbox_new, $inputbox_down, $inputbox_down2, $inputbox_mirror_1, $inputbox_mirror_2, $inputbox_upd); +} + +// Config save +function saveConfig($option){ + global $mainframe; + $database = &JFactory::getDBO(); + $msg = ''; + $root_dir = JArrayHelper::getValue($_POST,'root_dir', 'downloads'); + $jlistConfig = JArrayHelper::getValue($_POST,'jlistConfig',array(),_MOS_ALLOWHTML); + $resize_thumbs = intval(JArrayHelper::getValue($_POST,'resize_thumbs', 0)); + $jlistConfig['file.pic.default.filename'] = JArrayHelper::getValue($_POST,'file_pic', 'zip.png'); + $jlistConfig['cat.pic.default.filename'] = JArrayHelper::getValue($_POST,'cat_pic', 'folder.png'); + $jlistConfig['picname.is.file.new'] = JArrayHelper::getValue($_POST,'new_pic', 'newfile.gif'); + $jlistConfig['picname.is.file.hot'] = JArrayHelper::getValue($_POST,'hot_pic', 'hotfile.gif'); + $jlistConfig['picname.is.file.updated'] = JArrayHelper::getValue($_POST,'upd_pic', 'update_blue.png'); + $jlistConfig['download.pic.details'] = JArrayHelper::getValue($_POST,'down_pic', 'download_blue.png'); + $jlistConfig['download.pic.files'] = JArrayHelper::getValue($_POST,'down_pic2', 'download2.png'); + $jlistConfig['download.pic.mirror_1'] = JArrayHelper::getValue($_POST,'mirror_1_pic', 'mirror_blue1.png'); + $jlistConfig['download.pic.mirror_2'] = JArrayHelper::getValue($_POST,'mirror_2_pic', 'mirror_blue2.png'); + $jlistConfig['pad.folder'] = JArrayHelper::getValue($_POST,'pad.folder', 'padfiles'); + $reset_couter = $jlistConfig['reset.counters']; + $jlistConfig['reset.counters'] = 0; + + // remove spaces from lists + $jlistConfig['file.types.view'] = str_replace(' ', '', $jlistConfig['file.types.view']); + $jlistConfig['file.types.autodetect'] = str_replace(' ', '',$jlistConfig['file.types.autodetect']); + $jlistConfig['allowed.upload.file.types'] = str_replace(' ', '', $jlistConfig['allowed.upload.file.types']); + $jlistConfig['allowed.leeching.sites'] = str_replace(' ', '', $jlistConfig['allowed.leeching.sites']); + $anti_leech = $jlistConfig['anti.leech']; + // check the given upload size and correct it + $max_upload_php_ini = ini_get('upload_max_filesize') * 1024; + if ($jlistConfig['allowed.upload.file.size'] > $max_upload_php_ini) $jlistConfig['allowed.upload.file.size'] = $max_upload_php_ini; + + if (!is_dir(JPATH_SITE.DS.$jlistConfig['pad.folder'])){ + if ($makedir = @mkdir(JPATH_SITE.DS.$jlistConfig['pad.folder'].DS, 0777)) { + $msg = JText::_('JLIST_BACKEND_SETTINGS_PAD_FOLDER_CREATED'); + } else { + $msg = JText::_('JLIST_BACKEND_SETTINGS_PAD_FOLDER_NOT_CREATED'); + } + } + + // upload foldername changed? - then rename the folder + $old_dir = JPATH_SITE.'/'.$root_dir; + $new_dir = JPATH_SITE.'/'.$jlistConfig['files.uploaddir']; + if ($old_dir != $new_dir) { + if ( !@rename( $old_dir, $new_dir ) ) { + $msg = JText::_('JLIST_BACKEND_SETTINGS_UPLOADDIR_RENAME_ERROR'); + $mainframe->redirect('index2.php?option='.$option.'&task=config.show',$msg); + } else { + $msg = ''; + } + } + + // make sure, that one from this fields is activated for frontend upload form + if ( !$jlistConfig['fe.upload.view.select.file'] && !$jlistConfig['fe.upload.view.extern.file']){ + $jlistConfig['fe.upload.view.select.file'] = '1'; + } + + // anti-leech option + // if activated - copy and rename the htaccess + $source = JPATH_SITE.'/administrator/components/com_jdownloads/htaccess.txt'; + $dest = JPATH_SITE."/".$jlistConfig['files.uploaddir'].'/.htaccess'; + if ($anti_leech && !is_file($dest)){ + if (is_file($source)){ + @copy($source, $dest); + $msg .= JText::_('JLIST_ACTIVE_ANTILEECH_OK'); + } else { + $msg .= JText::_('JLIST_ACTIVE_ANTILEECH_ERROR'); + } + } else { + // anti leech off? then delete the htaccess + if (!$anti_leech) { + if (is_file($dest)){ + if (@unlink($dest)){ + $msg .= JText::_('JLIST_ACTIVE_ANTILEECH_OFF_OK'); + } else { + $msg .= JText::_('JLIST_ACTIVE_ANTILEECH_OFF_ERROR'); + } + } + } + } + + foreach($jlistConfig as $setting_name=>$setting_value){ + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '$setting_value' WHERE setting_name = '$setting_name'"); + $database->query(); + } + + $GLOBALS['jlistConfig'] = buildjlistConfig(); + + // recreate all thumbs new + if ($resize_thumbs){ + // first delete all old thumbs + $thumb_dir = JPATH_SITE.'/images/jdownloads/screenshots/thumbnails/'; + $screen_dir = JPATH_SITE.'/images/jdownloads/screenshots/'; + delete_dir_and_allfiles($thumb_dir); + $pic_files = array(); + $only = TRUE; + $type = array("png","jpg","gif"); + $allFiles = false; + $recursive = FALSE; + $onlyDir = FALSE; + $ok = scan_dir($screen_dir, $type, $only, $allFiles,$recursive, $onlyDir, $pic_files); + if ($ok){ + foreach ($pic_files as $pics){ + create_new_thumb($pics[path].$pics[file]); + } + $msg = $msg.' - '.JText::_('JLIST_CONFIG_SETTINGS_THUMBS_CREATE_ALL_MESSAGE'); + } + + } + + if ($reset_couter){ + $database->setQuery("UPDATE #__jdownloads_files SET downloads = 0"); + $database->query(); + $msg = $msg.' - '.JText::_('JLIST_BACKEND_SETTINGS_RESET_COUNTER_MSG'); + } + + $mainframe->redirect('index2.php?option='.$option.'&task=config.show',JText::_('JLIST_BACKEND_SETTINGS_SAVED').$msg); +} + +//Information +function showInfo($option) { + jlist_HTML::showInfo($option); +} + +// run backup +function runBackup($option){ + global $jlistConfig; + $database = &JFactory::getDBO(); + $prefix = $database->_table_prefix; + + $tabellen = array($prefix.'jdownloads_config', $prefix.'jdownloads_cats', $prefix.'jdownloads_files', $prefix.'jdownloads_license', $prefix.'jdownloads_templates'); + $ausgabe = 'setQuery("TRUNCATE TABLE `'.$tabellen[$i].'`") ;$database->query();'."\r\n"; + } + + foreach($tabellen as $tabelle){ + // id field name + switch($tabelle){ + case $prefix.'jdownloads_cats': + $id_name = 'cat_id'; + break; + case $prefix.'jdownloads_files': + $id_name = 'file_id'; + break; + default: + $id_name = 'id'; + break; + } + $database->setQuery("SELECT $id_name FROM $tabelle"); + $xids = $database->loadObjectList(); + + foreach($xids as $xid){ + switch($tabelle){ + case $prefix.'jdownloads_config': + $object = new jlist_config($database); + break; + case $prefix.'jdownloads_cats': + $object = new jlist_cats($database); + break; + case $prefix.'jdownloads_files': + $object = new jlist_files($database); + break; + case $prefix.'jdownloads_license': + $object = new jlist_license($database); + break; + case $prefix.'jdownloads_templates': + $object = new jlist_templates($database); + break; + } + switch($id_name){ + case 'cat_id': + $object->load($xid->cat_id); + break; + case 'file_id': + $object->load($xid->file_id); + break; + default: + $object->load($xid->id); + break; + } + + $sql = '$database->setQuery("INSERT INTO '.$tabelle.' ( %s ) VALUES ( %s );"); $database->query();$i++; '."\r\n"; + $fields = array(); + $values = array(); + foreach (get_object_vars( $object ) as $k => $v) { + if (is_array($v) or is_object($v) or $v === NULL) { + continue; + } + if ($k[0] == '_') { + continue; + } + $fields[] = $database->NameQuote( $k ); + $values[] = $database->Quote( $v ); + } + $ausgabe .= sprintf( $sql, implode( ",", $fields ) , implode( ",", $values ) ); + } + } + $ausgabe .= "\r\n?>"; + header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header ("Last-Modified: " . gmdate("D,d M Y H:i:s") . " GMT"); + header ("Cache-Control: no-store, no-cache, must-revalidate"); + header ('Cache-Control: post-check=0, pre-check=0', false ); + header ("Pragma: no-cache"); + header ("Content-type: text/plain"); + header ('Content-Disposition: attachment; filename="'.'backup_jdownloads_v'.$jlistConfig['jd.version'].'.txt'.'"' ); + print $ausgabe; + exit; +} + +function showRestore($option, $task){ + jlist_HTML::showRestore($option, $task); +} + +function runRestore($option, $task){ + global $mainframe, $jlistConfig; + $database = &JFactory::getDBO(); + + $output = ''; + + // get restore file + $file = JArrayHelper::getValue($_FILES,'restore_file',array('tmp_name'=>'')); + if($file['tmp_name']!= ''){ + $i = 0; + // auf korrekte version (>= 1.4) prüfen - + @$datei = fopen($file['tmp_name'],"r") or die ("Can not open File!"); + $muster = "/\bjd.version\b/i"; + $muster2 = "/\bcat_top_id\b/i"; + while (!feof($datei)) { + $zeile = fgets($datei, 4096); + if (preg_match($muster, $zeile)) { + if ($pos = strpos($zeile, "jd.version'", 100)){ + if ($vers = floatval(substr($zeile, 123, 3)) < 1.4){ + fclose($datei); + echo "\n"; + exit(); + } + } + } + if (preg_match($muster2, $zeile)) { + $is_cat_top_id = true; + } + } + + fclose($datei); + + // create temporary old cats data field for correct restore + if ($is_cat_top_id){ + $database->SetQuery("ALTER TABLE #__jdownloads_cats ADD cat_top_id VARCHAR(255) NOT NULL AFTER cat_id"); + $database->query(); + } + + // write values in db tables + require_once($file['tmp_name']); + + // remove temporary old data field + if ($is_cat_top_id){ + $database->SetQuery("ALTER TABLE #__jdownloads_cats DROP cat_top_id"); + $database->query(); + } + + // auto überwachung deaktivieren + if ($jlistConfig['files.autodetect'] == 1 ){ + $monitoring = true; + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '0' WHERE setting_name = 'files.autodetect'"); + $database->query(); + $jlistConfig['files.autodetect'] = 0; + } + + // falls backup von alter version - prüfen + require_once(EL_ADMIN_PATH.'/check.restore.jdownloads.php'); + $output = checkAfterRestore(); + $log_messages = checkFiles($task); + $sum = ''.sprintf(JText::_('JLIST_BACKEND_RESTORE_MSG'),(int)$i).''; + + if ($log_messages){ + $output = addslashes($sum.'
'.$output.'
'.JText::_('JLIST_AFTER_RESTORE_TITLE_3').'
'.$log_messages.'
'.JText::_('JLIST_CHECK_FINISH').''); + } else { + $output = addslashes($sum.'
'.$output.'
'.JText::_('JLIST_CHECK_FINISH').''); + } + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '$output' WHERE setting_name = 'last.restore.log'"); + $database->query(); + $jlistConfig['last.restore.log'] = stripslashes($output); + } + // auto überwachung aktivieren + if ($monitoring){ + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '1' WHERE setting_name = 'files.autodetect'"); + $database->query(); + $jlistConfig['files.autodetect'] = 1; + } + $mainframe->redirect('index2.php?option=com_jdownloads', $sum.' '.JText::_('JLIST_BACKEND_RESTORE_MSG_2')); +} + +// create new directory +function directoriesNew($option){ + global $mainframe, $jlistConfig; + + $marked_dir = JArrayHelper::getValue($_REQUEST, 'dirs', array()); + if ($marked_dir == '') { + $marked_dir = '/'.$jlistConfig['files.uploaddir'].'/'; + } + $new_dir_name = JArrayHelper::getValue($_REQUEST, 'new_subdir', ''); + $new_dir_name = str_replace('/', '', $new_dir_name); + $new_dir_name = trim($new_dir_name); + + $new_dir = JPATH_SITE.$marked_dir.$new_dir_name; + + // create new dir if not exists + $dir_exist = is_dir("$new_dir"); + if(!$dir_exist) { + if ($makedir = @mkdir("$new_dir", 0777)) { + $message = str_replace(JPATH_SITE.'/', '', $new_dir).' '.JText::_('JLIST_BACKEND_DIRSEDIT_CREATE_DIR_MESSAGE_OK'); + } else { + $message = str_replace(JPATH_SITE.'/', '', $new_dir).' '.JText::_('JLIST_BACKEND_DIRSEDIT_CREATE_DIR_MESSAGE_ERROR'); + } + } else { + $message = str_replace(JPATH_SITE.'/', '', $new_dir).' '.JText::_('JLIST_BACKEND_DIRSEDIT_CREATE_DIR_MESSAGE_EXISTS'); + } + $mainframe->redirect('index2.php?option='.$option.'&task=directories.edit',$message); +} + +// delete subdirectory incl. files +function directoryRemove($option){ + global $mainframe, $jlistConfig; + + $marked_dir = JArrayHelper::getValue($_REQUEST, 'del_dir', array()); + + // is value = root dir or false value - do nothing + if ($marked_dir == '/'.$jlistConfig['files.uploaddir'].'/' || !stristr($marked_dir, '/'.$jlistConfig['files.uploaddir'].'/')) { + $message = $del_dir.' '.JText::_('JLIST_BACKEND_DIRSEDIT_DELETE_DIR_ROOT_ERROR'); + $mainframe->redirect('index2.php?option='.$option.'&task=directories.edit',$message); + } else { + // del marked dir complete + $res = delete_dir_and_allfiles (JPATH_SITE.$marked_dir); + + switch ($res) { + case 0: + $message = $marked_dir.'
'.JText::_('JLIST_BACKEND_DIRSEDIT_DELETE_DIR_MESSAGE_OK'); + break; + case -2: + $message = $marked_dir.'
'.JText::_('JLIST_BACKEND_DIRSEDIT_DELETE_DIR_MESSAGE_ERROR'); + break; + default: + $message = $marked_dir.'
'.JText::_('JLIST_BACKEND_DIRSEDIT_DELETE_DIR_MESSAGE_ERROR_X'); + break; + } + $mainframe->redirect('index2.php?option='.$option.'&task=directories.edit',$message); + } +} + +/* +* Read configuration parameter +* +* @return jlistConfig +*/ +function buildjlistConfig(){ + $database = &JFactory::getDBO(); + + $jlistConfig = array(); + $database->setQuery("SELECT setting_name, setting_value FROM #__jdownloads_config"); + $jlistConfigObj = $database->loadObjectList(); + if(!empty($jlistConfigObj)){ + foreach ($jlistConfigObj as $jlistConfigRow){ + $jlistConfig[$jlistConfigRow->setting_name] = $jlistConfigRow->setting_value; + } + } + return $jlistConfig; +} + +// get upload directories +// +// @return dirs +// +function getDirectories() { + global $jlistConfig; + + $dirs = array(); + //search all subdirectories + if(file_exists(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'])){ + if ($handle = opendir(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'])) { + // List all the files + while (false !== ($file = readdir($handle))) { + if($file != '.' && $file != '..') { + if(is_dir(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'.$file)) { + // added tio list array + if ($file !== 'tempzipfiles') { + $dirs[] = $file; + } + } + } + } + } + closedir($handle); + } + return $dirs; +} + +// get all files in upload dir and subdirs +// +// @return up_files +// +function getFiles() { + global $jlistConfig; + + $up_files = array(); + + if(file_exists(JPATH_SITE.'/'.$jlistConfig['files.uploaddir'])){ + $startdir = JPATH_SITE.'/'.$jlistConfig['files.uploaddir'].'/'; + $dir_len = strlen($startdir); + $dir = $startdir; + $type = array("zip","txt","pdf"); + $only = FALSE; + $allFiles = TRUE; + $recursive = TRUE; + $onlyDir = TRUE; + $files = array(); + $file = array(); + + $all_dirs = scan_dir($dir, $typ, $only, $allFiles, $recursive, $onlyDir, $files); + if ($all_dirs != FALSE) { + reset ($files); + foreach($files as $key => $array) { + // ist dirname > startdir? + if ($startdir <> $files[$key]['path']) { + // unterverzeichnis vorhanden - nur pfadnamen ab download root + dateinamen + $restpath = substr($files[$key]['path'], $dir_len); + $files[$key]['path'] = $restpath; + } else { // dir ist startdir - also nur filenamen + $files[$key]['path'] = ''; + } + } + + // list all files + foreach($files as $key3 => $array2) { + if ($files[$key3]['file'] <> '') { + // no files in tempzifiles directory + if(strpos($files[$key3]['path'], 'tempzipfiles') === FALSE) { + $up_files[] = $files[$key3]['path'].$files[$key3]['file']; + } + } + } + } + } + return $up_files; +} + +// Kopiert alle dirs inkl. subdirs und files nach $dest +// und löscht abscchliessend das $source dir +function moveDirs($source, $dest, $recursive = true, $message) { + + $error = false; + + if (!is_dir($dest)) { + mkdir($dest); + } + + $handle = @opendir($source); + + if(!$handle) { + $message = JText::_('JLIST_BACKEND_CATSEDIT_ERROR_CAT_COPY'); + return $message; + } + + while ($file = @readdir ($handle)) { + if (eregi("^\.{1,2}$",$file)) { + continue; + } + + if(!$recursive && $source != $source.$file."/") { + if(is_dir($source.$file)) + continue; + } + + if(is_dir($source.$file)) { + moveDirs($source.$file."/", $dest.$file."/", $recursive, $message); + } else { + if (!@copy($source.$file, $dest.$file)) { + $error = true; + } + } + } + @closedir($handle); + + // $source löschen wenn KEIN error + if (!$error) { + $res = delete_dir_and_allfiles ($source); + if ($res) { + $message = JText::_('JLIST_BACKEND_CATSEDIT_ERROR_CAT_DEL_AFTER_COPY'); + } + } else { + $message = JText::_('JLIST_BACKEND_CATSEDIT_ERROR_CAT_COPY'); + } + return $message; +} + +// check for aktive or default layout before delete +// +// @return error_msg +// +function checkTemplatesStatus($total,$cid) { + $database = &JFactory::getDBO(); + + $error_msg = ''; + + // default template can not erase! + for( $i=0; $i < $total; $i++ ) { + $database->setQuery("SELECT locked FROM #__jdownloads_templates WHERE id = ($cid[$i])"); + if ($database->loadResult() == 1 ) { + $error_msg = JText::_('JLIST_BACKEND_TEMPLIST_ERROR_IS_LOCKED'); + } + } + // active template can not erase! + for( $i=0; $i < $total; $i++ ) { + $database->setQuery("SELECT template_active FROM #__jdownloads_templates WHERE id = ($cid[$i])"); + if ($database->loadResult() == 1 ) { + $error_msg = JText::_('JLIST_BACKEND_TEMPLIST_ERROR_IS_ACTIVE'); + } + } + return $error_msg; +} + +// delete_dir_and_allfiles - rekursiv löschen +// Rueckgabewerte: +// 0 - ok +// -1 - kein Verzeichnis +// -2 - Fehler beim Loeschen +// -3 - Ein Eintrag war keine Datei/Verzeichnis/Link + +function delete_dir_and_allfiles ($path) { + if (!is_dir ($path)) { + return -1; + } + $dir = @opendir ($path); + if (!$dir) { + return -2; + } + + while (($entry = @readdir($dir)) !== false) { + if ($entry == '.' || $entry == '..') continue; + if (is_dir ($path.'/'.$entry)) { + $res = delete_dir_and_allfiles ($path.'/'.$entry); + // manage errors + if ($res == -1) { + @closedir ($dir); + return -2; + } else if ($res == -2) { + @closedir ($dir); + return -2; + } else if ($res == -3) { + @closedir ($dir); + return -3; + } else if ($res != 0) { + @closedir ($dir); + return -2; + } + } else if (is_file ($path.'/'.$entry) || is_link ($path.'/'.$entry)) { + // delete file + $res = @unlink ($path.'/'.$entry); + if (!$res) { + @closedir ($dir); + return -2; + } + } else { + @closedir ($dir); + return -3; + } + } + @closedir ($dir); + // delete dir + $res = @rmdir ($path); + if (!$res) { + return -2; + } + return 0; +} + +// Beispieldaten installieren +function sampleInstall($option){ + global $jlistConfig; + $database = &JFactory::getDBO(); + + $root_dir = $jlistConfig['files.uploaddir']; + // beispieldaten speichern - wenn neuinstallation + $dir_exist = is_dir(JPATH_SITE.'/'.$root_dir); + if($dir_exist) { + if (is_writable(JPATH_SITE.'/'.$root_dir)) { + if (!is_dir(JPATH_SITE.'/'.$root_dir.'/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT'))){ + // daten speichern + // dirs für cats + $makdir = @mkdir(JPATH_SITE.'/'.$root_dir.'/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT'), 0777); + $makdir = @mkdir(JPATH_SITE.'/'.$root_dir.'/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT').'/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_SUB'), 0777); + // cat erstellen in db + if ($makdir) { + $database->setQuery("INSERT INTO #__jdownloads_cats (cat_title, cat_description, cat_dir, parent_id, cat_pic, published) VALUES ('".JText::_('JLIST_SAMPLE_DATA_CAT_NAME_ROOT')."', '".JText::_('JLIST_SAMPLE_DATA_CAT_NAME_TEXT')."', '".JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT')."', 0, 'joomla.png', 1)"); + $database->query(); + $cattitle = JText::_('JLIST_SAMPLE_DATA_CAT_NAME_ROOT'); + $database->setQuery("SELECT cat_id FROM #__jdownloads_cats WHERE cat_title = '$cattitle'"); + $catid = $database->loadResult(); + $database->setQuery("INSERT INTO #__jdownloads_cats (cat_title, cat_description, cat_dir, parent_id, cat_pic, published) VALUES ('".JText::_('JLIST_SAMPLE_DATA_CAT_NAME_SUB')."', '".JText::_('JLIST_SAMPLE_DATA_CAT_NAME_TEXT')."', '".JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT').'/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_SUB')."', ".$catid.", 'joomla.png', 1)"); + $database->query(); + // file kopieren nach catdir + $source_path = JPATH_SITE.'/administrator/components/com_jdownloads/mod_jdownloads_top_1.5.zip'; + $dest_path = JPATH_SITE.'/'.$root_dir.'/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT').'/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_SUB').'/mod_jdownloads_top_1.5.zip'; + @copy($source_path, $dest_path); + // downloads erstellen + $cattitle = JText::_('JLIST_SAMPLE_DATA_CAT_NAME_SUB'); + $database->setQuery("SELECT cat_id FROM #__jdownloads_cats WHERE cat_title = '$cattitle'"); + $catid = $database->loadResult(); + + $database->setQuery("INSERT INTO #__jdownloads_files (`file_id`, `file_title`, `description`, `description_long`, `file_pic`, `price`, `release`, `language`, `system`, `license`, `url_license`, `size`, `date_added`, `url_download`, `url_home`, `author`, `url_author`, `created_by`, `created_mail`, `modified_by`, `modified_date`, `downloads`, `cat_id`, `ordering`, `published`, `checked_out`, `checked_out_time`) VALUES (NULL, '".JText::_('JLIST_SAMPLE_DATA_FILE_NAME')."', '".JText::_('JLIST_SAMPLE_DATA_FILE_NAME_TEXT')."', '".JText::_('JLIST_SAMPLE_DATA_FILE_NAME_TEXT')."', 'joomla.png', '', '1.0', '2', '1', '1', '', '1.92 KB', '".date('Y-m-d H:i:s')."', 'mod_jdownloads_top_1.5.zip', 'www.jDownloads.com', 'Arno Betz', 'info@.jDownloads.com', 'Installer', '', '', '0000-00-00 00:00:00', '0', '".$catid."', '0', '1', '0', '0000-00-00 00:00:00')"); + $database->query(); + checkAlias(); + echo "
".JText::_('JLIST_SAMPLE_DATA_CREATE_OK')."
"; + } + } else { + // daten existieren schon + echo "
".JText::_('JLIST_SAMPLE_DATA_EXISTS')."
"; + } + } else { + // fehlermeldung: daten konnten nicht gespeichert werden + echo "
".JText::_('JLIST_SAMPLE_DATA_CREATE_ERROR')."
"; + } + + } else { + // fehlermeldung: daten konnten nicht gespeichert werden + echo "
".JText::_('JLIST_SAMPLE_DATA_CREATE_ERROR')."
"; + } + echo '

'.JText::_('JLIST_SAMPLE_DATA_BACK_TO_PANEL').'
'; +} + +// Dateigröße einer externen Datei ermitteln +function urlfilesize($url) { + if (substr($url,0,4)=='http' || substr($url,0,3)=='ftp') { + // for php 4 users + if (!function_exists('get_headers')) { + function get_headers($url, $format=0) { + $headers = array(); + $url = parse_url($url); + $host = isset($url['host']) ? $url['host'] : ''; + $port = isset($url['port']) ? $url['port'] : 80; + $path = (isset($url['path']) ? $url['path'] : '/') . (isset($url['query']) ? '?' . $url['query'] : ''); + $fp = fsockopen($host, $port, $errno, $errstr, 3); + if ($fp) { + $hdr = "GET $path HTTP/1.1\r\n"; + $hdr .= "Host: $host \r\n"; + $hdr .= "Connection: Close\r\n\r\n"; + fwrite($fp, $hdr); + while (!feof($fp) && $line = trim(fgets($fp, 1024))) { + if ($line == "\r\n") break; + list($key, $val) = explode(': ', $line, 2); + if ($format) + if ($val) $headers[$key] = $val; + else $headers[] = $key; + else $headers[] = $line; + } + fclose($fp); + return $headers; + } + return false; + } + } + $size = array_change_key_case(get_headers($url, 1),CASE_LOWER); + $size = $size['content-length']; + if (is_array($size)) { $size = $size[1]; } + } else { + $size = @filesize($url); + } + $a = array("B", "KB", "MB", "GB", "TB", "PB"); + + $pos = 0; + while ($size >= 1024) { + $size /= 1024; + $pos++; + } + return round($size,2)." ".$a[$pos]; +} + +// datum der externen datei holen +function urlfiledate($url){ + if (file_exists($url)){ + $aktuell = date("Y-m-d H:i:s",filemtime($url)); + } else { + $aktuell = date("Y-m-d H:i:s"); + } + return $aktuell; +} + +function create_new_thumb($picturepath) { + global $jlistConfig; + $thumbpath = JPATH_SITE.'/images/jdownloads/screenshots/thumbnails/'; + if (!is_dir($thumbpath)){ + @mkdir("$thumbpath", 0777); + } + $newsize = $jlistConfig['thumbnail.size.width']; + $thumbfilename = $thumbpath.basename($picturepath); + if (file_exists($thumbfilename)){ + return true; + } + + /* Prüfen ob Datei existiert */ + if(!file_exists($picturepath)) { + return false; + } + + /* MIME-Typ auslesen */ + $size=getimagesize($picturepath); + switch($size[2]) { + case "1": + $oldpic = imagecreatefromgif($picturepath); + break; + case "2": + $oldpic = imagecreatefromjpeg($picturepath); + break; + case "3": + $oldpic = imagecreatefrompng($picturepath); + break; + default: + return false; + } + /* Alte Maße auslesen */ + $width = $size[0]; + $height = $size[1]; + /* Neue Maße errechnen */ + if($width>=$height) { + $newwidth = $newsize; + $newheight = $newsize*$height/$width; + } else { + $newheight = $newsize; + $newwidth = $newsize*$width/$height; + } + /* Neues Bild erstellen mit den neuen Maßen */ + // png fix + $img = imagecreatefrompng($picturepath); + imagesavealpha($img,true); + $newpic = imagecreatetruecolor($newwidth,$newheight); + imagealphablending($newpic,false); + imagesavealpha($newpic,true); + + /* Jetzt wird das Bild nur noch verkleinert */ + imagecopyresized($newpic,$oldpic,0,0,0,0,$newwidth,$newheight,$width,$height); + // Bild speichern + switch($size[2]) { + case "1": return imagegif($newpic, $thumbfilename); + break; + case "2": return imagejpeg($newpic, $thumbfilename); + break; + case "3": return imagepng($newpic, $thumbfilename); + break; + } + //Bilderspeicher freigeben + imagedestroy($oldpic); + imagedestroy($newpic); +} + +function set_rights_to_tree($p_catid, $p_right, $p_right_from, &$p_changed){ +// function coded by pelma +// Funktion welche die Rechte eines Kategoriebaum setzt. Achtung REKURSIV !!! +// $p_catid = ID der Kategorie deren Rechte gesetzt werden soll. +// $p_right = Die Rechte welche gesetzt werden. +// $p_right_from = Die ursprünglichen Rechte +// $p_changed = Anzahl der Korrekturen +// echo $p_catid.' p_right_from:'.$p_right_from.' p_right:'.$p_right.'
'; + $database = &JFactory::getDBO(); + // Lesen der Kategorie aus der Datenbank. + $l_sql = "SELECT cat_access FROM #__jdownloads_cats WHERE cat_id = ".$p_catid; + $database->setQuery($l_sql); + $r_catrow = $database->loadObjectList(); + + // Hier werden die eigentlichen Rechte der aktuellen Kategorie gesetzt. + // Falls die Rechte der aktuellen Kategorie KLEINER sind als die zu setzenden Rechte. + // Damit wird verhindert, dass Unterkategorien welche schon höhere Rechte haben nicht überschrieben werden. + // Oder + // Falls die Rechte der aktuellen Kategorie kleiner oder gleich sind als die ursprünglichen Rechte. + // Sonst können kleinere Werte (=höhere Rechte) nicht gesetzt werden. + if (($r_catrow[0]->cat_access < $p_right) || ($r_catrow[0]->cat_access <= $p_right_from)){ + $l_sql = "UPDATE #__jdownloads_cats SET cat_access = '".$p_right."' WHERE cat_id = ".$p_catid; + $database->setQuery($l_sql); + $database->query(); + if ($p_changed != -1){ + $p_changed++; + } + } + + // Alle Unterkategorien der aktuellen Kategorie aus der Datenbank lesen. + // d.h. Alle Kategorien deren parent_id der aktuellen KategorienID entsprechen. + $l_sql = "SELECT cat_id FROM #__jdownloads_cats WHERE parent_id = ".$p_catid; + $database->setQuery($l_sql); + $l_childrows = $database->loadObjectList(); + if (!isset($l_childrows[0])){ + // Keine Unterkategorien gefunden, d.h. das Ende des aktuellen Kategorienbaumes ist erreicht. Die Funktion verlassen. + // Falls die Funktion in der Rekursivität ist, wird in der unteren foreach-Schleife die nächste Unterkategorie aufgerufen. + return; + } + // Alle Unterkategorien abfahren. + foreach ($l_childrows as $l_childrow){ + // Zuerst: Automatische Korrektur von Fehlern. + // D.h. Eine Unterkategorie welche schon niedrigere Rechte hat (=höheren Wert in cat_access) müsste eigentlich nicht abgefahren werden. + // Es könnte aber sein, dass diese Fehlern aufweist (z.B. bei einem Update von 1.3 nach 1.4). + // Fehler heisst in diesem Fall, dass eine Unter-Unter-Kategorie grössere Rechte hat (=niedriger Wert in cat_access). + // Dies ist ja verboten und muss korrigiert werden. + // Dazu: + // Die aktuelle Unterkategorie aus der Datenbank lesen + $l_sql = "SELECT cat_access FROM #__jdownloads_cats WHERE cat_id = ".$l_childrow->cat_id; + $database->setQuery($l_sql); + $l_child = $database->loadObjectList(); + // Die Original verlangten Werte als Defaut setzen. + $l_right = $p_right; + $l_right_from = $p_right_from; + + // Falls die Rechte der abzufahrenden Unterkategorie kleiner sind (cat_access grösser) als die ursprünglichen Rechte + // Und: die Rechte der abzufahrenden Unterkategorie kleiner sind (cat_access grösser) als die zu setzenden Rechte + // Dann: die eigenen Rechte der Unterkategorie ihr selbst als neu zu setzende Rechte übergeben. + if (($l_child[0]->cat_access > $p_right_from) && ($l_child[0]->cat_access > $p_right)){ + $l_right = $l_child[0]->cat_access; + $l_right_from = $l_child[0]->cat_access; + } + // Für alle Unterkategorien die Funktion nochmals aufrufen. + set_rights_to_tree($l_childrow->cat_id, $l_right, $l_right_from, $p_changed); + } +} + +function get_lowest_rights($p_catid, $p_suggest_right){ +// function coded by pelma +// Funktion welche alle darüberliegenden Kategorien nach niedrigeren Rechten (=höhere Werte) durchsucht, +// und den höchsten Wert zurückgibt. Diese Funktion ist nicht rekursiv. +// $p_catid = KategorienID, von welcher aus nach oben durchsucht wird. +// $p_suggested_right = Die rechte welche gesetzt werden sollen, und hier überprüft werden. + $database = &JFactory::getDBO(); + // Kategorie laden aus Datenbank + $l_sql = "SELECT cat_id, parent_id, cat_access FROM #__jdownloads_cats WHERE cat_id = ".$p_catid; + $database->setQuery($l_sql); + $l_catrow = $database->loadObjectList(); + if (!isset($l_catrow[0])){ + // Die Kategorie existiert nicht. Nicht weiterfahren, aber die vorgeschlagenen Rechte zurückgeben. + // (Dies sollte eigentlich nie vorkommen) + return $p_suggest_right; + } + // Initialiseren der Rechte welche von der Funktion zurückgegeben werden. + $l_therights = $p_suggest_right; + // Den Kategorien-Baum solange hochfahren bis keine höhere Kategorie mehr existiert. (d.h. bis die Hauptkategorie erreicht ist) + while ($l_catrow[0]->parent_id > 0 ){ + // Nächsthöhere Parent-Kategorie aus Datenbank lesen. + $l_sql = "SELECT parent_id, cat_access FROM #__jdownloads_cats WHERE cat_id = ".$l_catrow[0]->parent_id; + $database->setQuery($l_sql); + $l_catrow = $database->loadObjectList(); + // Wenn die geladene Parent-Kategorie einen höheren Wert hat, diesen übernehmen. + if ($l_catrow[0]->cat_access > $l_therights){ + $l_therights = $l_catrow[0]->cat_access; + } + } + // Zurück mit höchstem gefundenem Wert (=niedrigstes Recht) + return $l_therights; +} + +function set_rights_of_cat($p_catid, $p_suggest_right, &$p_changed){ +// function coded by pelma +// Hauptprozedur. Diese wird aufgerufen um die Rechte einer Kategorie zu setzen, inklusive deren Unterkategorien. +// $p_catid = KategorienID, welche gesetzt werden soll. +// $p_suggested_right = Die rechte welche gesetzt werden sollen. +// $p_changed = Anzahl der Korrekturen oder (-1): Gewünschte Änderung war nicht zulässig! + $database = &JFactory::getDBO(); + // Kategorie laden aus Datenbank. + $l_sql = "SELECT parent_id, cat_access FROM #__jdownloads_cats WHERE cat_id = ".$p_catid; + $database->setQuery($l_sql); + $l_catrow = $database->loadObjectList(); + if (!isset($l_catrow[0]) && ($p_catid > 0)){ + // Die Kategorie existiert nicht. Nicht weiterfahren. + return ''; + } + // Ursprüngliche Rechte der Kategorie lesen. + $l_rights_from = $l_catrow[0]->cat_access; + if ($l_catrow[0]->parent_id == 0){ + // Es ist eine Hauptkategorie. Darüberliegende Kategorien müssen nicht nach niedrigen Rechten durchsucht werden. + $l_rights_to_set = $p_suggest_right; + } else { + // Es ist eine Unterkategorie. Darüberliegenden Kategoriebaum nach niedrigen Rechten (=höherer Wert) durchsuchen. + // Damit wird gewährleitet, dass eine Unterkategorie keine höheren Rechte erhalten kann. + $l_rights_to_set = get_lowest_rights($p_catid, $p_suggest_right); + if ($l_rights_to_set > $p_suggest_right) $p_changed = -1; + } + // Die Rechte der Kategorie und aller Unter- und Unter-Unter-Kategorien setzen. + set_rights_to_tree($p_catid, $l_rights_to_set, $l_rights_from, $p_changed); +} + +function checkFileName($name){ + global $jlistConfig; + if ($name) { + $name = utf8_decode($name); + // change to uppercase + if ($jlistConfig['fix.upload.filename.uppercase']){ + $name = strtolower($name); + } + // change blanks + if ($jlistConfig['fix.upload.filename.blanks']){ + $name = str_replace(' ', '_', $name); + } + if ($jlistConfig['fix.upload.filename.specials']){ + // change special chars + $name = strtr($name, array( "'" => "", 'ä' => 'ae', 'ü' => 'ue', 'ö' => 'oe', 'Ä' => 'ae', 'Ü' => 'ue', 'Ö' => 'oe', 'ß' => 'ss', 'Þ' => 'TH', 'þ' => 'th', 'Ð' => 'DH', 'ð' => 'dh', 'ß' => 'ss', 'Œ' => 'OE', 'œ' => 'oe', 'Æ' => 'AE', 'æ' => 'ae', 'µ' => 'u')); + // remove invalid chars + $name = preg_replace('#[^a-z0-9_.-]#', '', $name); + } + $name = utf8_encode($name); + } + return $name; +} + +function checkAlias(){ + $database = &JFactory::getDBO(); + // check alias field + $database->setQuery("SELECT cat_id, cat_title, cat_alias FROM #__jdownloads_cats WHERE cat_alias = ''"); + $cats = $database->loadObjectList(); + if ($cats){ + foreach ($cats as $cat){ + $cat->cat_alias = $cat->cat_title; + $cat->cat_alias = JFilterOutput::stringURLSafe($cat->cat_alias); + if(trim(str_replace('-','',$cat->cat_alias)) == '') { + $datenow =& JFactory::getDate(); + $cat->cat_alias = $datenow->toFormat("%Y-%m-%d-%H-%M-%S"); + } + $database->setQuery("UPDATE #__jdownloads_cats SET cat_alias = '$cat->cat_alias' WHERE cat_id = '$cat->cat_id'"); + $database->query(); + } + } + $database->setQuery("SELECT file_id, file_title, file_alias FROM #__jdownloads_files WHERE file_alias = ''"); + $files = $database->loadObjectList(); + if ($files){ + foreach ($files as $file){ + $file->file_alias = $file->file_title; + $file->file_alias = JFilterOutput::stringURLSafe($file->file_alias); + if(trim(str_replace('-','',$file->file_alias)) == '') { + $datenow =& JFactory::getDate(); + $file->file_alias = $datenow->toFormat("%Y-%m-%d-%H-%M-%S"); + } + $database->setQuery("UPDATE #__jdownloads_files SET file_alias = '$file->file_alias' WHERE file_id = '$file->file_id'"); + $database->query(); + } + } +} + +function deleteLog($option){ + global $mainframe, $jlistConfig; + $database = &JFactory::getDBO(); + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '' WHERE setting_name = 'last.log.message'"); + $database->query(); + $jlistConfig['last.log.message'] = ''; + $mainframe->redirect("index2.php?option=com_jdownloads"); +} + +function deleteRestoreLog($option){ + global $mainframe, $jlistConfig; + $database = &JFactory::getDBO(); + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '' WHERE setting_name = 'last.restore.log'"); + $database->query(); + $jlistConfig['last.restore.log'] = ''; + $mainframe->redirect("index2.php?option=com_jdownloads"); +} +?> \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/check.restore.jdownloads.php b/oss/joomla/trunk/administrator/components/com_jdownloads/check.restore.jdownloads.php new file mode 100644 index 00000000..f5e406c4 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/check.restore.jdownloads.php @@ -0,0 +1,370 @@ +setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'files.uploaddir'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('files.uploaddir', 'downloads')"); + $database->query(); + $sum_configs++; + } else { + $database->setQuery("SELECT setting_value FROM #__jdownloads_config WHERE setting_name = 'files.uploaddir'"); + $dir = $database->loadResult(); + $root_dir = JPATH_SITE.'/'.$dir.'/'; + } + + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'global.datetime'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('global.datetime', '".JText::_('JLIST_INSTALL_DEFAULT_DATE_FORMAT')."')"); + $database->query(); + $sum_configs++; + } else { + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '".JText::_('JLIST_INSTALL_DEFAULT_DATE_FORMAT')."' WHERE setting_name = 'global.datetime'"); + $database->query(); + $jlistConfig['global.datetime'] = JText::_('JLIST_INSTALL_DEFAULT_DATE_FORMAT'); + } + + // new param für versionsnummer von jd + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'jd.version'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('jd.version','$jd_version')"); + $database->query(); + $sum_configs++; + } else { + // set new value + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '$jd_version' WHERE setting_name = 'jd.version'"); + $database->query(); + } + + // new param für versions status von jd + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'jd.version.state'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('jd.version.state','$jd_version_state')"); + $database->query(); + $sum_configs++; + } else { + // set new value + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '$jd_version_state' WHERE setting_name = 'jd.version.state'"); + $database->query(); + } + + // new param für svn version von jd + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'jd.version.svn'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('jd.version.svn','$jd_version_svn')"); + $database->query(); + $sum_configs++; + } else { + // set new value + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '$jd_version_svn' WHERE setting_name = 'jd.version.svn'"); + $database->query(); + } + + // new in 1.5 + + // options for config: view detail information site - default on + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'view.detailsite'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('view.detailsite', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('check.leeching', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('allowed.leeching.sites', '')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('block.referer.is.empty', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.author', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.author.url', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.release', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.price', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.license', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.language', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.system', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.pic.upload', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.desc.long', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('mp3.player.config', 'loop=0;showvolume=1;showstop=1;bgcolor1=006699;bgcolor2=66CCFF')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('mp3.view.id3.info', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('use.php.script.for.download', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('mp3.info.layout', '".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_ID3TAG')."')"); + $database->query(); + $sum_configs++; + } + // added in v1.5.1 + // for pad file support + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'pad.exists'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('pad.exists', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('pad.use', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('pad.folder', 'padfiles')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('pad.language', 'English')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('google.adsense.active', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('google.adsense.code', '')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('countdown.active', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('countdown.start.value', '60')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('countdown.text', '".JText::_('JLIST_BACKEND_SETTINGS_WAITING_NOTE_TEXT')."')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.extern.file', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.select.file', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.desc.short', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fix.upload.filename.blanks', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fix.upload.filename.uppercase', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fix.upload.filename.specials', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('use.report.download.link', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.report', '')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('download.pic.files', 'download2.png')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('view.sum.jcomments', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('change.cyrillic.chars', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('be.new.files.order.first', '1')"); + $database->query(); + $sum_configs++; + + } + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'downloads.footer.text'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('downloads.footer.text', '')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('view.back.button', '1')"); + $database->query(); + $sum_configs++; + + } + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'create.auto.cat.dir'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('create.auto.cat.dir', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('reset.counters', '0')"); + $database->query(); + $sum_configs++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'report.link.only.regged'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('report.link.only.regged', '1')"); + $database->query(); + $sum_configs++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'view.ratings'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('view.ratings', '1')"); + $database->query(); + $sum_configs++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'rating.only.for.regged'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('rating.only.for.regged', '0')"); + $database->query(); + $sum_configs++; + } + + + if ($sum_configs == 0) { + $output .= ' '.JText::_('JLIST_INSTALL_1').'
'; + } else { + $output .= ' '.$sum_configs.' '.JText::_('JLIST_INSTALL_2').'
'; + } + + //***************************** config data end ********************************************** + + $sum_added_fields = 0; + $prefix = $database->_table_prefix; + $tables = array( $prefix.'jdownloads_templates' ); + $result = $database->getTableFields( $tables ); + + if (!$result[$prefix.'jdownloads_templates']['cols']){ + $database->SetQuery("ALTER TABLE #__jdownloads_templates ADD cols TINYINT(1) NOT NULL DEFAULT 1 AFTER note"); + if ($database->query()) { + $sum_added_fields++; + } + } + + // false fieldname delete from prior svn if exist + if ($result[$prefix.'jdownloads_templates']['columns']){ + $database->SetQuery("ALTER TABLE #__jdownloads_templates DROP columns"); + } + + // new alias fields + if (!$result[$prefix.'jdownloads_cats']['cat_alias']){ + $database->SetQuery("ALTER TABLE #__jdownloads_cats ADD cat_alias varchar(255) NOT NULL default '' AFTER cat_title"); + if ($database->query()) { + $sum_added_fields++; + } + } + // new alias fields + if (!$result[$prefix.'jdownloads_files']['file_alias']){ + $database->SetQuery("ALTER TABLE #__jdownloads_files ADD file_alias varchar(255) NOT NULL default '' AFTER file_title"); + if ($database->query()) { + $sum_added_fields++; + } + } + + if ($sum_added_fields == 0) { + $output .= " ".JText::_('JLIST_INSTALL_1_2')."
"; + } else { + $output .= " ".$sum_added_fields." ".JText::_('JLIST_INSTALL_2_2')."
"; + } + + // new categories layout with 4 columns + $database->setQuery("SELECT * FROM #__jdownloads_templates WHERE template_typ = '1' AND locked = '1' AND template_name ='".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_COL_TITLE')."'"); + $temp = $database->loadResult(); + if (!$temp) { + $file_layout = stripslashes(JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_COL_DEFAULT')); + $database->setQuery("INSERT INTO #__jdownloads_templates (template_name, template_typ, template_text, template_active, locked, note, cols) VALUES ('".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_COL_TITLE')."', 1, '".$file_layout."', 0, 1, '".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_COL_NOTE')."', 4)"); + $database->query(); + $sum_layouts++; + } + + checkAlias(); + + return $output; +} +?> \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/htaccess.txt b/oss/joomla/trunk/administrator/components/com_jdownloads/htaccess.txt new file mode 100644 index 00000000..e0198322 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/htaccess.txt @@ -0,0 +1 @@ +deny from all diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/active.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/active.png new file mode 100644 index 0000000000000000000000000000000000000000..13c6b6cb6ecabe29ed2fd2335715fd9c5e11ba24 GIT binary patch literal 407 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$3?vg*uel1OBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%wFmfwxN1((WZ25kvbKle9>dbTYu6szdhFb}DQo8}J+_u( z4u|DZC&M1gDO=}M&uOXN+u}6ED|YQyBU*;|k8Ra~mcaE*cE z7{}go$NvBS|Jm=N1kg#kB|(0{KrYdMVd;DBzd((-o-U3d6}No)p7S*sFtqfCnrS(w zS~*zV|NnErO4U2-^{3xyu;RQlsfX)JW`QCh-_Ctr0ci-F;x;jVgocI_lUMYIJ85ZLExQ5Jy}kRAbt083}?6I-w~_1gSgfD5+G5 zW;(7eDy5pZkD3ITX3{hgDs_}PQ#DD}@m;(7N9_AN@B4Y4_t*D%-u%D-FLl*3svro7>sM|^7Xh#s} z2qDlf#3Qa$vAMZPq|2ukf#DfoX=!PB<3Lt?Zc?-_SUjlh23R5h|3E={xL_oipw(|h+Q6iOB`r>LkH9zO^87)6s;dnfjo zOlIroeo>PMz#-^#IuLb{GPoC+H4iwS#Fs6HWi9~=x(o)RQbSpLadoiU0K=qoL$GuD(g%o{i>iEj&m30Z8RT|c!_6-J@?_uEo%edZfc0+3BeS62R#dl#CJGsGaZGPF zAjE?If(#JC-`DvJRaO)=19SLTb5pRaz^Kg1GBr72o_dZ$p;RLRevXRa^)Uwtmdj%H zZ|#xn##Tu;g8x$_myqTRPi)AI=H^%o75b%LcW%O`q@)yjhL&<4{k+C!yxRnJ%sfYOW7FY;S^b;nzP|pUZN+37$Kj$T zYuC1~a;nQ)esgz)cbkaIG~39o*+Hm<6qK< z^YgVAN=%XhGiH%t7{^C(pA41sr)oFem>WGD9#2q1T_j5?kqUyliZHK`e&F27k1Y>I zS{)qq;(mYso5o5{3=4CN!;=Kn_&d4uh+CafZEdrX(SXk~ivVYgGMnw4>KGs9!T5-^{BIv}m_++IN;p21gqegrCssh{e`0tLm$l*|zsTNgRLTd7?^24jKN{eT z!%U7#|KbliHnrXP)OlMznf--ERA%hgc9elFDI{K}XfW09ba*oBn^VIdMLzy3c$|y8euaUv_YX&M-Iw;p#`cLu2eMUE z=aei@(VA>~rNTpN2vHJ@EEUvEYCj<)*=3Gd>+(V_m#Mg27-R|sV=J!NhQ{WDHDFo@ zt!L(1^}KQ$M)W6}VUl4kxnyBeW#3kJ&zZAI#AooNs&6s6%DM!D`XmBg5b@0Cm%^83 zOmXe{whPd1Z>+xM^rOk&?~3`D`J>^#)-Y1Kx)N%kdqQG$kuupPh+L@^_kgN|rS)`T zuHLr=7FT%d>YR7Xa>mF+y~@=_)ee6LQ&s)h6!b*j?2$3y+URKJE3QtHAD8QM8F^AR zYdoh@(3i3Qp|6W?e{6dYGyM$D?GHgDLc_?~AXiftEk7HJn0TowY=4H! z4Zg-68Oa6fk?yevb{+>S!UJGdkAAqN9_0x_uDMm+{D&72{5>u#Lnr3j-$hLoS}0n- zavnnY(s?)idI!zBpS?58t- z2Kbk2@5L~vV=4`Vz0l)cRyYzX&g}TOlKceWn0iaJaN5csn=(Rz*|&mF%F{Wxfovno zX%amElrA%vue=|NhCx2BqzHZ9f`z*a~j?KX>sr9!o3{F_Z;i> zKAxq21B&2!vM}Ivjda)u8V;7-(fc611C bs#=45c-=_L(X)Mrp9z9{1i+rUg%ke`wr=oj literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/backup.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/backup.png new file mode 100644 index 0000000000000000000000000000000000000000..b22a218240da621b264c5b59e5228e4933f98c0b GIT binary patch literal 1558 zcmc(f`#aMM0LH&em009fyFWYbDR(n6B`;G4!DF7&W4+KTnfd9`-O*w#Yc69?*jl8lCQVF z8`yd<>x2eay9X?{0$CQ5=>}b~nqZ@AADaj^?gh)ypFRy078WcmErPGSs;VA??@#?G zM%S_nqCH_CXU`nn;!0#F*y=f(Z#9);*4^C=*13Q+wi(ghiUKoE<^|;|oKPrirdm$7 zWpOwhnM|g)PE9VCQ^+?4DEhZkZ@y^Zy-(lP-dxr9rmHDZttrm%(G~NRm6i7P*7tpH zK%RqGELQT}!IEtwjlbvJN#zu#fC4A*ku_Lp1C}DP@wPL?JH?_;@&|U{Yb=}1UU`5h zDP~PfOeh{$k7b%P({_R#?yNvnKEJWzoa*4f2X{Li={?ka>ZO-2+sE?l6b#gN?(W+` zTfXI*E)*c=>kdhB5i3R8MfC09Qy<~*;MbYShK71R2|hPBM@mfKr(4OSQaNLXR4T2k zto)%+^!0WqOC1WX`-8=%;A5xBF;QvhqjC;x_M0?2+l0&I-U!C#y)s<6^+^=$kHbZGJx7;Ln%w`Cc9Sm12~2o6Heb`9oU7N# zMi6aN7H$p<^fDF}@DUN%`X^5wKD4&6x#aMX;e744(_4~HA)FI77K1h6Z^jYY*mN%Q-nbI&>PU|fhJn^;IJrLb1hIv7cbdwyol{;Jkz}l|`8lpl z>jmNKN6AjEDSXYyh@`tcm>oh-Vh%(OO1K96!Wcy~JBqyg(@aMFbeGPF%&=s{{Fype zk!=BXGi8W=RIV@a@%GoD6qJeJJ_Q=pLQ|OSF(41d8#MzIjutw3?$;O zZ~1YUR`Uk?bF2}bh{(UtEVd+BhbX-qbhq~0SL!?9OGgW;JQDQ zPrPVuZl~$sAh0n=r3Ds5?$Xxw)YS#kf+~B%&=-kr!aKkcZ3tQ2hau)d))rxy%H_{N z`%_fK)0u=$OV3z86IbW!o8C33&zGps@@w+5$vs?WvZH<8Li8|IL%i=93ue44x$4dI z^u+-NzCj@)1!8&GX4k5wXXYF9;HN4ejxM|s8D;4?p zxr1IkB7m?<>ubp7cUH`nl&hV(O?duWlN0FkIN3))uM2Hxk3r?0gd){!M0-UL5kr4$ z1N7NtDs)9RBuMuQS{i0n|Cc>6&uryJhtx5(nYcJiogDLc9W}(u)M*)Mi>jtlcq5Aq zIunpBFqVAla%0m?%K5jJzbGioHaGJoxJE_Od;-zQDE|yxY8?+Y`1vW5L=zh0X> z_9T9;&~Z5mK5QA>SDOGIuH9}kZY6#~AIZA>dCnrfeA;k;7jz&fYX8yF?>#;TK8IfE kh?T>f7;uoW6iiY9#P+yIU&^|r)!zU-+^~l#Ttmoz1BSC(6951J literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/categories.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/categories.png new file mode 100644 index 0000000000000000000000000000000000000000..b01d0bc4771632c983608804643dc2139e947ac0 GIT binary patch literal 1918 zcmc(f`#;l*1I9lq!d~pGjudgo?Qkk|rK>H}b}VWmM6R1IIF@#j5}WH-Bs1im%b`ef z$Zb^XCZVkq&fG#;=8_$k-9Mk>`&WFQ*Xw!Sujl9I^?K4yyPed58^8eo(7|Gy@oTjE zpEcL7W#EX`lQrm5T)ZiS$WTgjP!tJ36C;C3CfJCe3nV-#h!}IFn{)&KVARt%50|b< z=*1`)!TfmPQe@pnh}HzA)qS+`dL3S&bhy-C*#lB)!JW8* zE1X%7#ngjQ6lO@l%J3|Rjh*mJpY0HU$0@^pOfmB*h@*YYVpYa9sQLw>n)hII`TS*i z)7}u?ClOTq7WB1}cg1cH!z(zg{kp%jZ0xg;#;-L{+UyZ4v5++3IFSRM~`T5e7>Zt%9ZjF6~Q-g=i_Q7VzFN~AXaJ(=}mLeXMsr^GY;iywWgtfa8Md&xC=$nEC9so0Uf->zU! z1nout0YOj>gScsJFe(M_Mp&!=PXP|x+Ka?~RVSKprjE zL;2PO7)@-EiY=_}URS@Ny20>1FKs5Zd!cviNP9&nXR$o@4$K_Ue47e`!wxzNNk; z2KZ$cj>>l28j_xjaj4B5wP6$DTTf#%+Wp+@q~~@Z9j;Ql!s0MzV5Ws6pU>MKTGo=5 zL(pJKWy@y&PwVb!AlT#&$+}5E(mQ8IYpY+g()Z*FcdNe_8CuAx&Za@vH>b1U%yo_$ zT4kn~Kpj1+#m63z6jziT9l62?{3%y?9C1`iiuq*^aLesj@Ad@yo6N}Jvm z*Gwy>EKdeUs};}d7M}7+Ng(?Cao{lS@;-wA=Zd_+H_xrje^6f2KR&eTK(v z@$n&gR;xc*p*OOmFYhLT=I9EWgH-KD|BR16YkVfVCqjHac30z1?@}1PSI~GFCKPpf8g47M7^Nllb~-T-WG8(h)L?~Y%zwE)4v{NjAOEo!4ewAPAUH_H}|UL zfBNqG1W(RtGpF62eeNJiAy>5Ia>Vh{x%t16~7R2%q-isC!sm%V5qQC zl4UP-g5PdEu|S`?cJcwDZ^93;H=J{FO8GK(61WpRvHhBA_g}`Log{BV_tN_IY<7qo z$LC=a)=h1AY4Abr&Tm0@j*9qZB%pXzv{edO$`0kw;>t$^u$Vm1mpSG}c{ zCS@N~W=tz2&#ViY(KIKg=Q7*X#>&F!D9w4K|H5$G!i_6F6HlJMIlrydLts&8mH%Fv zPiB-Abw8wy>gEH39h1=m+1g$_XG!nkpoLL1!E)&>>~cpZ3u&D_?Uk>8YUmcxp0rbA z2pLAa^N%KB#@H}cCI8k}sJp^UxV$S2esTXuy#;2I)0@2-=`VYnL=CF)P?_PE!hvj& zp*eRa*P9%3EAmHwb*DSem>W}NxHCi@R{A4xz1qHFBpp>Ut>C4Bf-iH@SH_DvP}%cT z9Exv&%7R^t&wQ7tx}v-{q08QrQf8Kbt7teFsSx(JQ&%cVf%S0hy4%4`ux{8of#100 zIUaM-{8*i0Vli1~?ug&*9dOfxlAdXEQz`Xx;K3()Vqfv=`4GA74Nl+E5!2^D)f9(s zc}>$@HIO%DB#e}-VsyjkRw*!DcrX0KmWJ46MO|&NepwX^Zx&-HCLEUEdRkjNY+a_l z?@_Y$eLiC$H)XV8-f4VxSRVj|8dR#YZXAC@BG+6_c4!*o0bK#jTZCzP@z9xNp-k3q fTUkB~sc!`y>3@UAWw+_9{WE}dadWOe9+>bSTU;ic literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/categories_2.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/categories_2.png new file mode 100644 index 0000000000000000000000000000000000000000..24875c8e3dbbb4ddd7893751bab8cb717c4e3f50 GIT binary patch literal 2111 zcmd^>=U3Bt7KdYDVGwnOGZDnmWkeJyjtVmfK@Cj@m0kmg36Kz45D3lC3>}1(8hR&# z5I}knLXUKj&;<-Qpdiwx> za!Bd_MC91v)+vr<9OAf>roJW&R@J8}6uWwOpC#&A5luaCL_drd7N+UwVULy8bH_Mg zO|Tfp0MCA`1`Ku#X7tERw_*$ssE|R}a&R@2*$WYApr9XW89$&ja1z=;-2~`na{Mbn zbn%!!b#;6himBPJo&fhqpY0D#RHIE+LV397P$@@TLqytkV_#%D%-M3 zSnFQ|w&ecWp`G$kpyD_(w+?EUkQ{1A89Qm>7)mUI2q6XbDQtZ1{)3>!xbzymXVU>C zo44KH^(;Vo!K;zYfWZQnO`0rYmdY7C=ls3&Zs`3dNYiWFIP%Nc^Vc7u_mcWe2~S-8Zhxs165l|Fv46!!)o2=fgC9MhP!_!daVcYb&gn8$I$8^JBRH?DcS z$VPxl-1epdyA&R=WZODw?oZO97V!htw{Y(OvW#E*)u0uf_8sXp)Anv%-F*s|xk0Yx z<8pS41IL}in_`=RW7e*QW4j41+984UgXn1p{CA)#CWvVPgMR~8cjAEn2%tk7p9rC) zq}PxYX*jhL_>}Tha5Jj-v67yhp!|7Kp*m)z=G6mWG)wg8Bkn?f>G^v4R{W&bYw{PRKhDjop{5@R z!Og^fmQ)E;%jm6pCrryTwrM&;%a@BtOl{6mP7@LfRQ+wVcH;+Er-5=68{R1ztBXjw zcVQ*LJUbRSI$F@}@Tth%s+I1OhRRmAdj5>fy;hAFx(gKX_~_lDM&`O7?A94LL>?I?mHVH|un7%JKs4`tzN5)-31n94uyZj|N9 zqJ<25YUp2`Gu4vMiDk-*i|3;7crR}Ar8(Qv7OaZ)u%eIB7t?gZFtSt1La9!+Vh`Nt zN+$><{rWJ4>D-I%Pv=-RiXU!VOLZbsr4*~%S8m;>PMvrgeufO^=8Y734qfbY*fRG1 z{rgcFeyW>cNH2miqn}O@HtxVk78J19iv?oGFKmk1QZwnB;iEG+r1YwM21g`%+IP$UM+stYmaVG zbl`|OMvzce{&Gl9l<^BEncCcu)#74qu@pL1{)QsXC5IafV?T*&L^N^Cf>V2 z0VxXIH_UDd4nlf*njwBvkx-5>7|JrH4=Y|Hs9oX+@|JF1^;p_7x-24+Gp+8-;JD*d z?E;{vtG6b0jrxX9Mu&zQ*===~$Jk%(?KK c1{1jsbJ^^xrPGyc4nF{xp00sTr52j}ZyJ^U9{>OV literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/config.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/config.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5f8fdce07d711bf845ad36e1c23fd962ee0651 GIT binary patch literal 1646 zcmc(f`#aMM0LH&x%-LMmB+)RrgnvxAYPPt5suq2sF9ZTy2$FBOKVWzHD&8OE6zWUxclGzZ9DS|R{|EqpWETw1VPbqd zhdTai|9+2P7KK8QcINYW{Q2|eeFFYjSy>T@L?2pPl>+D2*Vp?$f1a5WzASqA4g>+% zjRjhHRb^Et2nOF7>}M}9ySpVUCNeWJhoREpVK*A;8$9GOJI=E=c|6h561}l;OiGGk zb!B8^#0b~7djGx$&V6oR0Nhy#?&AnZBuqMgC^#6ZS0;S=R6rn5}14BbY z+_B|eRvvLO;-}Qq?CTkfj*hO*&Q>^FxF$S-ZNB7vi(z0eHae8!$q+Z2SncNle>XMK$>C4 z-EZghq6ff3N%BZUxb~||@B!T08x9au{FNvceNAv>&Tyn3cmhFW!L;_Z9t z?#$zE*N`Mc<0=!wNqc1*TIw3F3Le|Wf z;gYRO-3+hpKaSHOT7F1Jsp}KFu-Vxok$V?`cI7i>yIvII5X61ne~uPIRk2|_)rgka z_=r5>8)(a(DAa6!2cqvyTb_30T9Xb`l{6+cumW$nwH>43tdPqxKl5I5^$A zUY6rz5wlNeQ4(#_5L|gKx`0++5$47e%>N*PGtHj4-x)_HD@k&G(5Xo-$qPB-EdrL) zWNB;iIllavko4!tk#RB56tRkajBSkW{>Er$bKfkj>A_q&0x9&!`n^8Ap0qjuH#mV5 zg$IDY*Nt>r67)jD7>(M}k0@GdEEVU`%B?HDk&(JeD=}$eR!sNbcL=RPCl*&6<-kSL zD8Z%an7gByP(KT^%W&a4<+3<=kV^&?7WQf zS)x^y9A@1C9!E5MSfgo~YBYJ;bk?$NEINv&#;nU%6ltb-TSgW1ye#0))JxfFl zUsw;$L+tyozS`9l3ts8LJ8FLH_()6+Z0B9r!fQIvE_^ZV>7+jFU1+v7g*{{l^PZ{q*} literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/config_2.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/config_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2f55ca70538572ecbc06b5a6e60f113f850336f2 GIT binary patch literal 1802 zcmd^==~t2o7{%XL6cj<7(pH_^%cano7B@`8Tv9TZQCtcwDJ#;PtQ;$y7PG~i+$!7b zq@7YnOR`b32p0y+5?9<%1VIZCG*Q{!cbu6&W1e%L`#aC`^?tb5f{DIZ^cpk(09b!N zLdX)$|5;tck`qd=Gnb%!*el2j0IFHrb*_J1x>uj_i98jWL^*XPE+ql*I+PTjVD3+i zJDd=b5O*l;WLtte03d+iz%U<8SQwwrpAf5-9ahin38(}B7=obaXwLHG(9WHurGI=Z zDiVMDHpUyXBZ+ivnbQpoGMP*zmlqWkZ3rH!ud82JSkT3DDSN5yJa*KQ1^pTj9DEd`A$xWmJ6e0(JaGdnw51A@&>O;b}-TUPp& z>g#_*A^UoJE6XdoIy+&dGCVX)tyDIEpj0Y_s8kS>K88k5h(vOm^(!|wpnb-=jDs1RZl_CAVQ7_SBQ*_LDRNZFJCn*TSlv)wIUE!mX_$iDG*C}0D_=- zCl`e>L>Or_8l_UHT9Qh|=ke5PHK(_49D@-Fg^P=eBU~rP1#2n5G7hQ|ft<2P=MW@p1WIj{%8k__3Ts3&N&XOCJS zBC(@y7N$^a@ht)S-#_%({j^%l3J9Pz3bgG8QTAokv1EiD&2&@Ea*r?Co-+k`dFg5C z-@bl@WimfszhL5CVO5o+q(r@_q+|#og<^pF{e7Dp#yKZGmNP$3H8O;p{+XVU`Bycy zRnE@$`(gUKcTUz(dlUMm#8XD|Jc!ESYNpD?b{Gs0;jK!p{vVq zb6Zeo%3n`rUbx`u;xZ?Zh{a;0uWZ+`Z+b+S@qs}()BYn#o^q*2*GHOnx2YC~lgbo& zn}#Ij7I9m`)GU@t1xf6;@~;#~roSIN{<{8$wFP+mK=L^}w={|>e=FAV@d;8X}P^uN#l)`8FklnnrA zUG^t@RjustwDq`}*2K_9f!OvPJehhX8Yt}t*L}sG8(F=c;Ne-h2RJ1yO>!u!^t{uPPh?87m{w{Zpi0x&9X{) z8Qy`IuvX95N3~D{hww(D%B|$lPX-#dly#+S-u(t);e%6Hk`7(k^NS_1L1E(V!)v>I5%9Q%eisSO*-k1iJ`8f z{2HA*TF-vz_MoPll~cxolldo(vwJegCC2F%Aq$SW$x3yzt+EwhzEZrE%|=)X%}Awp35# z{HW-JVbJf!b@rn5<^ImqgV;kfvt$9AoZD*GgNk;mJ+G;dGcPLC8;H|9{9lw@btmmIQH(fh@dgyi&=ePwMb2@9(tJM|* zuQ!Pqu}Ha;p%;KOjymxrs=4V!dpuJ{&!tcC0wL6q`rMr8Zi(TpPg_b%szb^slWA;^k5-DRM9YIHoUs$} l7VUP-nI3QPXh!BzH{l9ft5T;;Lzl`7@b@7Ss=Ub;{{}ghBk%wK literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/css.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/css.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb75acac9298f69b5baa017fba6c84989d0c679 GIT binary patch literal 1381 zcmc(e|2xwO0LMQ_=G#P?%@SMdYASRnmC2ZCkG1nPWh%6B;d~jze0x5=BzEPYV@9IR zL>ErZsMV^SnZ|N4rqF{+P3Q}oT$(=T{)&4)&-?v)-ao&ecdcL2}<{i(q| zTCEmB0xSw;e0*GMkFRoY_~u27i;JVv>1zk}KWJ`dv)NEI6N|-iI2=e9C@U+Qot-6- zNK`7dwzf7ZGEyoMt%iiSxVQ`s4iX3itu+eT3+U?VuCA^I1qHoEAz1`Mg8qi->1nxK zzOu5C%3>AlvPB>et+#I7YG^1ZDCjdW<{KM#aJhIq9>M|d@xaW?%;(Ra7e9T1=wan2 zPY8uVsJIx7Mnfh5KZR8u8@sTukQE&b9i#GKuwM`C&(6-)Xf$1jEsZ!-pN(FpK+xLS z3gu*LzXwz*)y3VoOEyRziFCWEY24IAB9Y|#`9T@%30nYSu}CH+OG`@`I2=eI%waLh z4nVzy>BEisLX<&eW#ydhHaHyq_Vw#JZ|{G6$xwP4kH@3Cx`I1w-*je)QA@0qNimI3TvY|b<)e_>JucKLYebxDn>XF`8SGJk)^2PkjfMqX1lj9_IRoHoapMi>! zCYbYROB{(6w2-&RM#yD*v6qzexN|AbugUMD>;FJoi6fG@N!tg8ecBp#-YZWPzIyho z?O-}D-X+#A-2JhzI&IUzf}_`4$k;pmak8rL6onGeEZ=lkVQvT{9g3+V76tF&crdXg zZ>j301b9xX+cm$%%ff*H*Xsj6l-OeW>gO`8#$X~zc&HnP1Io-UKmi+ObL;FL^|_q2 z6Mg6AU?m==v3k=3EML4=v;G_%!APEb(JU^W9D~uc-`MwO-~DFxw`cpv{B)B!wWfy8 z2*n0SP}b&c8}bb8$NF!ooRYFT+f&xo*6^s5$kGaSz|2cf7~;6w3&!U5p4y5V&zp3= zNIY2jLjA?vy%>X=40Wi?u4&3qU`ms(_NXhG%kL65`XX~M&K4E+9#vAzD?|a~cRQ)z zCe8a0_&n?M*N|LGk&RwqOd+@phQlItrWj<)F}>r_qE$%)CipKS>s;2;_C4{F-moj( zpn1_;E~iqwiFP%Zexr6FMh0V;mpSJDNU%W7Athu7y=P3YQ^#^190}KtRX;Y^Ts@kG zoKQ@h@=wy9ZG&dYqE|-u=B-XmePK|{lt-i)nFhJ%ogUHcTg=c>rC&pR2NRI?7SiL7 zpaX~UJhGxxQ}51kG1b|X(i-)%h_j3r88sS&S!&8czrmb<1fS+KrL<+|`V9e! L4~^976_NKZx(3nX literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/dir_edit.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/dir_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..b54bd40b4db2aa464b9206e37460927c43766ebf GIT binary patch literal 1347 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 literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/downloads_details.gif b/oss/joomla/trunk/administrator/components/com_jdownloads/images/downloads_details.gif new file mode 100644 index 0000000000000000000000000000000000000000..1e7fd71ad14bc20bdca06029d4291911d501b1a3 GIT binary patch literal 13431 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 W2Je4F(;qTH^8EM%T?z#Ng#HiWc*&Rm literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/downloads_files.gif b/oss/joomla/trunk/administrator/components/com_jdownloads/images/downloads_files.gif new file mode 100644 index 0000000000000000000000000000000000000000..277608994062c0d2c511f5abd0265f6c3bff607e GIT binary patch literal 15951 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�S6v<0D=f4;FMyHzb?D(v7EM>JF)Y|@9dJtLI8mT6j*=(xwWR7Z^aj9{NkyB z{px_TCfmF5SIJ%$^G7vDmvhV8^1JBIM~~KE?KJoN=?qg>x^mT#biL`=-4%%S#UCd< zccaBl-S(kSpB?AbgICh`+JiS9_PdAI9dvHdhBSHWq$i#8-ia@LUF4aMo_OP_ryW-A zbH}~=j~|2={PSNQyZL65w0PP=@m8Je_~k$KepEZ=AN}-QzhD1^H$eRf&wlyCU-SOT zx4H2hPj>8Mo%$GeKnH4XfEWCp{~Rbl4vtTP+o2!<8)!ihZcu~&JD~ctf@yDu%!1lYmc$|cu!0|q8VnPq!x9=0 zfd4b#5ku%cmKZUKD-0hNt0=}Aju25^G~*Lhh{AF)5r}V8qXI*hst{sPh7eq19%sl! zJetstM{M61_4vg*PVtR;>>?Zixkx)IQjCTCoD|QXFm0*%y8~Ap6r}vK&Qz~V-k~{I#Zg~^rSDf zX-;*zQ=azJr?tfCPlY;Eq88Pt5e@25mAX`>Hr1)NOsY2ppvoVzD{>{9;b+5MUD_&_N zS7zpwt~{}8RsYJ-um+Z<&H;dG%yQPVPS&zzfh=SrtJ9>8)hvz$tXnaqR>7_{v5So> zXvvD&TC%pVuWcr1O>0=i%67DP?dx7^n^N08_BN8m>}D@3+{zA@vYb_moILy4)G9Wv z&y{O!ze?KKO82g#rR`wV8eP&NHnq(??OMV6-Rgdpy4+oDR=X?Sxi;6l)>W^2uX`5t zo>sckrLK9kJ6Qde7rggn3y9bW1MT=|M${zQ!4bD$-9ctVCoU%}Sbv?oUKcujm&6Vq3~E++4DWvt=;z%G}=7iO=GXH4S$>ej+G z9x-kctKSt5n8=MavNjv*VGMUz#=X_&f`bd;1w&Z4XOZxgYg*wYf0)BSzHyGXi{ToV zS-G@r@qbawVgVC2#fW_|oYjop{B9V>{Pi-9oeSX7!Z^h$Zt{*}yk94?nXN7MZhBp- z*8)HJ(1reJgC$F4En8XAlxh!J}(c7&t zq(S^+T4(svPUbOryPD@PlX||Rc6F+SeQK^Y+Rl)+a7U|5+|4eV*$nPQ#q^NJVRZH*s$X9%;6R&T{+l*$5%NN$;Wx4a?du((s*X9~mJ+jveU+JS3 zzsFx~hqv!u>yDiAus{FCRgPfi<9yf1w>`0~5B}w=pZE0~a{1|u@-eT!{v>U&gz8%Xmc=I$-!?ps%xO9U+a0@re1GR`FKS(B(>^joLlHE* zjS9dVqr%-IKx9)xiL19T>p5dPxgt!$ew)BfD?=iq!pq||78JDbqCvw7!7H4@Lkz+~ z`#}_3y%DTIfODun)WCQvw@lo?kZMB(yg)gO!#i9=H~hp)48@NtH$O|aKHNk*T);Xc z!4v#IS!6O(#6sRHxluI5EmS^9RI)&{!%KWYXtKmCY{g(qHVo{jPK-H?OS$~(!OUYn zQvAR2!?%bdwfBp`1b-+QNAT*#?Rztj6D zp_EEcY%R?5E2P}Yw<5!r3puYGD3}zfl_bW9{5P!(OWcD*6jVz^w5Yq}$}W7!-E%^@ zoXdwi%i43gYGRb9w77PpMswsq`ZK=nQ%u++tnu?dfJ8a!!oJNE|dqQWQln)Imy= z%q+x4Ok6WaG(aANMPFo2z8u6S1h_$rH5E)vE~G^cgw71~#kvH{=d`{$^g=KMOkzB* zU=yc%@~AfSM;80CRusPZLnG8o?u^dHbWi^TKXcSEc7r%v zOhb}WP!mK>C`3rC>$LYYO&8QpvP?lS^EYj3m5*Xi1bt6Aj8E}&#MYC}V|-BM>`w4} zLlqsg;oQ#sG_?Um#$t3(hy&3Wg-^K@J+m~%TWdfPT{pelFF7mBY*No<^i5dAzyzgE z`J^|$g#J?JL{3`lMHmgmUbNB%{X|e?(LWSXF8xvf<<91e&0D%QaTLH;?9yaJNX>gu zBc5pT}OWf*o2)ZfhD`N0?tBh(|T3diFGDA^(MB|CydRHpmI_| z6h?{#S%ykdYdWWh(pddi$%h+KTeHqp4cV6+C*I^xfI`=FeV%oN*_@TBku^-3eW;Ti zNu3p1n{t*@9j0MIsD$##lC@Z;Y+9S$SaBWNsRgN`MN({fCSNirff6QxGK;PSTdajz zl*L)9HCvJz+loEfwcOf(Qm3^wDRrV#pe>7OJ=?oosI>j3qkUVqJ*dCsTfn^yy3Lfb z#oNPO*f|Z{#r508y~(}}+qF$5yG7i}g(tm*R)C6I&7IrMJy)lFSHh)S%O&0Zal%*3 z9bDA)+SFyH(XA$_OHb9E+0JEMVjaE0CuQj3StD7+=612#xP((-Wa`i?KHnM^V)Z@ZI3D9JE@VX3;X{^VByMC!#$g&>-!uN=IHu#Z zt6!1!PUn+a=Xsu7ss6R+d}c{>*5`iyJAU@( zm#ycFYG-u~=!0J5=w;tErZ9X)XuM72ZBku@8fc3G=!Z_&h>oV)rRaiYsEfwvf3@Zg zK4lLcXK9vZXXfRY0_l)$S3`zm87}EozGOnK=(aRmmp9?h6u=^W6;_9wO7*cX2Rsy6|QYBX!r9D~} zN%HEoW@}}Eq6m3wCQ<9Qrt7-4YiOD4yVmQy=4&U(>%Io;z!vP0nWMor?88QE$N1~S zX6(jx?8SEM$d+uthHRQB3s4A!%+~D976nYGgie^8{>c{Y(Z-m{o(WLt1W!=y)n;wh z{scxi9MYEU*=82gR*AEi08Q8gJ0Ss1kc3G9?%)<~;g$qUU=Z4-mLZ6QB4BPKVD9H` zZX1OWgM(&ugZHX|84sd`9sDKB^01{{dNpJ*5n1n{41WKrc zO0a}WaPRh>1V_LG$@%VO8G=kefMh~|Ot9{n`0oI>r2#MS{&t+g1{MIAfC#{sIPicb zXz%u3gg$u$1Q-HHXoL%IZz>QS22YeoKyU$%grP8T6esZpzu6IoiLxjGMVRmk7la!Z zghgP1t{{ODSO5fIghs&e96x{-Ulk*0CLqAkw6IzX$e!W2_{c-E$D+b_j5k~13(CXKj4EuC<`a230C*>J`V(3xAPq6 za~;TaL{D@FXBbcc6vLSSN)Lle&vei+fD(X%DR6^l4+APVj5R@wQI{2$s0f-+^_m#> zk4SZxDECuOiN)B7l}PuPFakb_11tX60y!`PHb@IIm;*Yf139pRJHUelAOT&UiFjXt zILM8E$Ac0egFI-02QY&q5O{(&c5_j5=kb6I(D)6&0QHuFFaUWmi1tM%0TUPlkO%oA zScwv03vYJ`mk;;s_>!343~;x3iFo&_DEFLyi6X#?DzE}FC<8Od0xU3r1vmpQK!Y^! z0yS6ztT=R<@c9L(f{3sBE3kqE*Z?gM0yZ#%qhEliuXu|`_IjCs3;>t9XaXsCg0_c( zk?#!?n1Z%%du>0H)+iG-L5-tmj=e{dzCRN+L6cKI35+<2!ru~gp9pkkiE;OcEP;H; zFA1Lri7sjP!_ShMC;|ka`u?oH0xZaaHy45}&;l+XeJ=QMv6qR>r+TBW0xal)LJxp1 zK!Dc=gVZ1U>&TYfx0Y>*+O1|724I4;S8pev`?r_!-iQL@r+XFH_UCtxGBJ@Af&TVz zca*3IkidDu=YGXs_nbI)@L&Av&;IT=3GOfdb{~K5hY2F!a1I{=_zxWUm;d-Df}wE# z_#XoOpa1=@e*^#sA_WE#ENJi`!h{MJGHmGZA;gFZ2}qLmg8WAk$Sb_uz1|u#W z1Yq*y$p9(=kQ``|0f-6~W{M!8;s=nNK@PY)N#aP(oJf)sq-b%VQG!XA7C6cjDN+Jb zn<{O3w4i_jS+xr2{+e|wSAt)~Y9*@>>_M~!)rK92*6UceW#PVsTUIXEv0w9=g{Wl7 zk|BbJAQ()zuwlSTB>oLN81do6OBT1RY?te0v0gQA#@ZQk-p`pIN}XDnYQ(Fj31-yT zalyxsB3BncXjb`uxQqM2Z-xU%v=_`}T_v8A4Kie*5WnUw^b+R9;(} zdFGaO;UQSwgL^U97J{TzRheoHWw=^vuf@gy0|tz=nr$fIrrSj<0RWRsG}&|m4l(v{ zfQkSdpn?znF~;Zv3@A=_p;J%^8Dw=tUMM71eWB-`cj7siqnHGHQwa1r|@bR@I zdf^%PC75B7SJzq%PPh<+W=2S%mkBu+l|^wvSK5%+(Fx~4l?ARgAO_DP{R!|EXpVkG!|tQcAOq5Cvc%qvPtZMY$|&zL~k02T9MZoR9%=O@G0A$ z0E~E=peCJI=!(6$sKN}F#?XQcGt3Z!rRLUPgGrkTJ1@Nv4N&iDZQ{ExzYigs;F-w& z3#X9bW9(r>IDRx-{#h;wk0`6AL~#iG>qN(gar{Y5)nZ2@l&xA)e$p@)B*He6XPNy#74% z(MvyX?S58lo75y_YkK{n@fRgC{q@IOt@VOt zZ#C7s^Pl){GIqS$$d7&M<6Hq5azF&qOnnJ_AOsCEf(cTvf)pfN|8g@m0EWPP5rp6Y zKbVjOGO%AE6d?*z_@(Xn?{F{qfNv~t0S~GWeI%?Q3EgMH6V|YYK6D5RHK;w4c;ErP zselCHMZ+I@?uIDLp$_@wL?%+Pip0qv*&d>S4P1Z&F?>J=lxRidO;LnUWLp`>s74e9 zF^dktfX8N1feakajca^g4po>&Dem!(ek@=cTS9?2R$zt${G-~=s7D^+{?UPme5CvW zNsQKI6GikDkq;6>W&~ zIEuNHo|HBPWhqI?NXmqoXrwXKoJl`-QE=|GfzpKOO;@@=Ftt(sfJQwkQj@CGr82dt zP8A^9OtLwtP89%AwQ5zddR48SM15Tyz*nhS)vJ27TV&m8i4OSHvtqTaZgs0#;hNR7 zf|aXgEvr`RI@Y>AwXc5tD_{dFSfrA0utha2ViT*_#fFutj%{mH*@}|Lf|at5g)Cp$ zYT38i#Tw$|bE)kt-<8I#;-Ssr&cSG@lI{cm5Pc-xf#xWEM_?{iN} z-Tkh&x5nixXw4g82G{q!2;OXeAFN*tLl?pZ{xFD-tK08}xWv0fE^tL_-MwZutLXJ@ zefuld`!@EhFMjci$tz&X}SJ z9qC7p8qz2!HKlEX>QTow(}Lafr(-SaLWddvi2jC)NxYJ4UE7-1wf--wQypnjPkPuT zS~aEvots%RyV-=UHMDJgl3PzZ(YgL`urF+le^q=j`p>Ct?N*; z+r-0m^tQd7YHzs+US;cyMJA9|00{x#GW^*h28LckDKBqKY4g@eQRHLCEXbJb%-lXYL7cw-ZcOC z&0Ae^l=HmjK4)yW!~5{RMqIEP7vRzT+ww#wJ*i7i?9*r4bg3J?*FVp#{jzSq+U}g` zE04NUr(U9|gMHU!x4Kc!K5dPQJ?(98{_5M;9`~^y_3XHQYQgP(_iCg4>OUX4UpGx{ zmxrCHP3JY!cWoQQgZl7n|Et;|UwFK`J@1N+eA*YU_ikN&?tUjX;QK0gY4aWCr2qQm z%`SJjci!?ycm3Gc&GMzwMe*u>eCs=Jc6KBF?t53gy05+Q)~`PJvkGjfr&wkw} z9{%)qdB%@Ec<__|^yB}3->F{!T3g2P9rS4)*zw-`x!(ZJAM{}!_Gy{+ITiO2VE9qn z{$XJ0t(*7hp9h*>?6sfQIiS`4&EM}mo#>Qc?cE;g?H>FY;QrBF0rp?&<(~4TUjlMq z{{bN8y`bWypa`;H12SF&!r25iRRxwG_-SAP&LIDZU)iDG`VF7;Ngo3`pxU7z?mgZD zl3?^fApk022KwI;8lV6^;Khxhz#ZTe4x9?&;1x0;>zSD6(IHaRVPG90Qzao8_Tl%H z;SP?W87`j}65{#Ep$I0T9H!q8Hevu4q8mD)42mHcY9Qem;sQn@7_Q+NlAsU1AsS|4 z6yl-N5uxFg*a~JI*=3g=E)|x|9<-rg>6KsgwVw%wp#0UIEwY^!<{s+NUn)Lg{J9`8 zP9NjN;vW`Y@B!cV4W9nq@2;DO%|oBQQz^+q48~?Q0A5{ zG9?qv<5ltGfq@lK8YNcF8dav*+wEBBJy|(I*8T~K^`SL=9g+Y z6<^M}nXfR$bVsoNU#h2kM{XaUNT?nw5jjfnz#us;`W`f}tkJ%O4yrLJ@BJr7F z3nE|$GNUJ&-s~~sG(KM{>S7$4U;;8F4aVd$4rE^H<1!{>a-JS?!eVAlXJ{tpF6w3t z)?!8?A8A@xeA!oPQr3+@mxjfqaiP@!yduHn zWd6A)CH5tM+NMJ$BTnWW(kbS0vL{epAWO!lXR@VqDVSP;<#jFCjP)3K{uouMr~lEX z5c=mO{+^&tu4fYxW-;y{aOUCymhlv%2(wBO1C_KI-Xtt+H3MdUi>HkIKlb)d{s_1p@XO-$@OnNAQ z`e<1uasd_!C1o1cR*q(1@#I^|X`g-S9iC#g zDqt6CCO7_%wMioHcA2zNsLZC`d{j7iy{W#Veg9tj4A+I9lMNR;tJTr)Z{S zJ31l@O6-TBtjgx>Wv(aB`eC8MEU~(yyD}m-o@<)ntj;E_cAcOs_AEXMY&7=XVj-n; zl5EVLEXFFW)^6>|AuZAV*Ekw2ZQ1O`lI^u3Cf9bF*RJV|hGD+KD7hAN=XA*{1ECWo>1~t+>|hn6@R`M(Ls1;dTXS+}R!B`mJ`!<~&y7!ER*0E~Rx& z?v5JcaX#zuQ7d-(%cB+a~hv^ej{~4?tgLU z&l0Pl`lyFG>gEn;fYRucBBY@HDa>+gn^J1aX2K z?*NBb0q^7>b}&m$FnmU;0>^2ZTCk>Ws{3~8r7Ez4qNokyFq?+(@w#sgi?6I|YTuSH z#D%NuPAWvgsOO&UMvCO`J}2`XtVTMk_EN1Diu@VE#@k2 zhT)BZ?&=bw5$`VGYHSg^*&M&|&#i4u)-jstu^saq9``XI2Xf@bu^<<+As5&mAF?7Z z^1cx=BR?`EGgcx;G9_2CNb#v9XR;#AND^D!x}auJ?z z2Lh`0va&3vY@0pp8ndt}&$2F~TrCGJ?vd{<2eZQBnF^OFZ!qVwFekIK5px+&u@ncb zGDq`Cin26Uvz$`1HD@zh;s!T&vp0V;IES-1k25)!vpJtLI;XQbuQNNhvpc^tJjb&< x&oe#OvpwH4KIgMO?=wI5vp@ecKnJuy4>Um+v_T)VIBT;)FEm3pbUFqE06WL0g!%vg literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/email.gif b/oss/joomla/trunk/administrator/components/com_jdownloads/images/email.gif new file mode 100644 index 0000000000000000000000000000000000000000..974a53d0c063ebee8a29b19bee316206b5ccebda GIT binary patch literal 4118 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 U;VZu5OTOi6zUPa+zEJ=GJ1Hyqr2qf` literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/help.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/help.png new file mode 100644 index 0000000000000000000000000000000000000000..2b95d7e5a4f9f682301929e275fd8fa72b271c95 GIT binary patch literal 1411 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 U*6qJBFugN)y85}Sb4q9e0Ddj2*#H0l literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/index.html b/oss/joomla/trunk/administrator/components/com_jdownloads/images/index.html new file mode 100644 index 00000000..88a5baf7 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/images/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/info.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/info.png new file mode 100644 index 0000000000000000000000000000000000000000..799369308a9bb771c0bec34380391880288d4546 GIT binary patch literal 1908 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 literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/jd_logo_small.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/jd_logo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..8089713ca0e87bf6294904da186a56883080cbff GIT binary patch literal 8975 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
+ + + + + +
jDownloads Logo
+

+ + _table_prefix; + $tablelist = $database->getTableList(); + if ( !in_array ( $prefix.'jdownloads_config', $tablelist ) ){ + echo '

'.JText::_('JLIST_INSTALL_ERROR_NO_TABLES').'

'; + } else { + + + // make only as update when prior version is >= 1.4 + // ************************************************* + $database->setQuery("SELECT setting_value FROM #__jdownloads_config WHERE setting_name = 'jd.version'"); + $version = floatval($database->loadResult()); + if ($version && $version < 1.4) { + // update not supported + echo '--> '.JText::_('JLIST_INSTALL_ABORT').'
'; + + } else { + + // install component + + + + //******************************************************************************************** + // move all images dirs to joomla images dir when not exists + // + // ******************************************************************************************* + $source_dir = array(); + $message = ''; + $ok = 0; + $create_root_ok = true; + + $image_root = JPATH_SITE.'/images/jdownloads/'; + $source_root = JPATH_SITE.'/components/com_jdownloads/'; + $source_dir[] = 'catimages/'; + $source_dir[] = 'fileimages/'; + $source_dir[] = 'miniimages/'; + $source_dir[] = 'hotimages/'; + $source_dir[] = 'newimages/'; + $source_dir[] = 'updimages/'; + $source_dir[] = 'downloadimages/'; + $source_dir[] = 'headerimages/'; + $source_dir[] = 'screenshots/'; + + if (!is_dir($image_root)){ + if (!@mkdir($image_root, 0755)){ + // wwwrun problems? + echo '--> '.JText::_('JLIST_INSTALL_MOVE_IMAGES_CREATE_ROOT_DIR_ERROR').'
'; + $create_root_ok = false; + } + } + if ($create_root_ok){ + $error = false; + foreach($source_dir as $source){ + $sourcedir = $source_root.$source; + if (@is_dir($sourcedir)){ + $destdir = $image_root.$source; + if (!is_dir($destdir)){ + $res = moveDirs($sourcedir, $destdir, true, $message); + if ($message != '') { + // Fehler + echo '--> '.JText::_('JLIST_INSTALL_MOVE_IMAGES_ERROR').' '.$message.'
'; + $error = true; + $message = ''; + } else { + // ok + $ok ++; + } + } + } + } + } + if ($ok > 0){ + echo '--> '.$ok.' '.JText::_('JLIST_INSTALL_MOVE_IMAGES_OK').'
'; + } else { + if (!$error) { + echo '--> '.JText::_('JLIST_INSTALL_MOVE_IMAGES_DEST_DIR_EXIST').'
'; + } + } + + if ($create_root_ok){ + // dirs l�schen falls nicht verschoben wurde, da schon da + foreach($source_dir as $source){ + if (is_dir($source_root.$source)){ + delete_dir_and_allfiles($source_root.$source); + } + } + } + + //******************************************************************************************** + // insert default config data - if not exist + // + // ******************************************************************************************* + + $sum_configs = 0; + $root_dir = ''; + $is_update = false; + + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'files.uploaddir'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('files.uploaddir', 'downloads')"); + $database->query(); + $sum_configs++; + } else { + $database->setQuery("SELECT setting_value FROM #__jdownloads_config WHERE setting_name = 'files.uploaddir'"); + $dir = $database->loadResult(); + $root_dir = JPATH_SITE.'/'.$dir.'/'; + $is_update = true; + } + + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'global.datetime'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('global.datetime', '".JText::_('JLIST_INSTALL_DEFAULT_DATE_FORMAT')."')"); + $database->query(); + $sum_configs++; + } else { + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '".JText::_('JLIST_INSTALL_DEFAULT_DATE_FORMAT')."' WHERE setting_name = 'global.datetime'"); + $database->query(); + $jlistConfig['global.datetime'] = JText::_('JLIST_INSTALL_DEFAULT_DATE_FORMAT'); + } + + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'files.autodetect'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('files.autodetect', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto', '".JText::_('JLIST_SETTINGS_INSTALL_5')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.option', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.betreff', '".JText::_('JLIST_SETTINGS_INSTALL_3')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.from', '".JText::_('JLIST_SETTINGS_INSTALL_4')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.fromname', 'JDownloads')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.html', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('zipfile.prefix', 'downloads_')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('files.order', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('checkbox.top.text', '".JText::_('JLIST_SETTINGS_INSTALL_1')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('downloads.titletext', '')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('layouts.editor', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('licenses.editor', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('files.editor', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('categories.editor', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('info.icons.size', '20')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('cat.pic.size', '48')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('file.pic.size', '32')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('offline', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('offline.text', '".JText::_('JLIST_BACKEND_OFFLINE_MESSAGE_DEFAULT')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('system.list', '".JText::_('JLIST_BACKEND_FILESEDIT_SYSTEM_DEFAULT_LIST')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('language.list', '".JText::_('JLIST_BACKEND_FILESEDIT_LANGUAGE_DEFAULT_LIST')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('file.types.view', 'html,htm,txt,pdf,doc,jpg,jpeg,png,gif')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('directories.autodetect', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('mail.cloaking', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('tempfile.delete.time', '20')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('frontend.upload.active', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('allowed.upload.file.types', 'zip,rar')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('allowed.upload.file.size', '2048')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('upload.access', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('files.per.side', '10')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('upload.form.text','".JText::_('JLIST_BACKEND_SETTINGS_FRONTEND_UPLOADS_FORM_TEXT_LAYOUT')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('jd.header.title', 'Downloads')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('files.per.side.be', '15')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('last.log.message', '')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('last.restore.log', '')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('show.header.catlist', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('anti.leech', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('direct.download', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('days.is.file.new', '15')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('picname.is.file.new', 'blue.png')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('loads.is.file.hot', '100')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('picname.is.file.hot', 'red.png')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('download.pic.details', 'download_blue.png')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('upload.auto.publish', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('cats.order', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('autopublish.founded.files', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('all.files.autodetect', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('file.types.autodetect', 'zip,rar,exe,pdf,doc,gif,jpg,png')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('jcomments.active', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fileplugin.defaultlayout','".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NAME')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fileplugin.show_hot', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fileplugin.show_new', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fileplugin.enable_plugin', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fileplugin.show_jdfiledisabled', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fileplugin.layout_disabled','".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NAME')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fileplugin.show_downloadtitle', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fileplugin.offline_title','".JText::_('JLIST_FRONTEND_SETTINGS_FILEPLUGIN_OFFLINE_FILETITLE')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fileplugin.offline_descr','".JText::_('JLIST_FRONTEND_SETTINGS_FILEPLUGIN_DESCRIPTION')."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('cat.pic.default.filename','folder.png')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('file.pic.default.filename','zip.png')"); + $database->query(); + $sum_configs++; + } + // new param f�r versionsnummer von jd + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'jd.version'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('jd.version','$jd_version')"); + $database->query(); + $sum_configs++; + } else { + // set new value + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '$jd_version' WHERE setting_name = 'jd.version'"); + $database->query(); + } + + // new param f�r versions status von jd + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'jd.version.state'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('jd.version.state','$jd_version_state')"); + $database->query(); + $sum_configs++; + } else { + // set new value + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '$jd_version_state' WHERE setting_name = 'jd.version.state'"); + $database->query(); + } + + // new param f�r svn version von jd + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'jd.version.svn'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('jd.version.svn','$jd_version_svn')"); + $database->query(); + $sum_configs++; + } else { + // set new value + $database->setQuery("UPDATE #__jdownloads_config SET setting_value = '$jd_version_svn' WHERE setting_name = 'jd.version.svn'"); + $database->query(); + } + + // for send mails after frontend uploads + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'send.mailto.upload'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.upload', '".JText::_('JLIST_SETTINGS_INSTALL_5' )."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.option.upload', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.betreff.upload', '".JText::_('JLIST_SETTINGS_INSTALL_6' )."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.from.upload', '".JText::_('JLIST_SETTINGS_INSTALL_4' )."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.fromname.upload', 'JDownloads')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.html.upload', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.template.upload', '".JText::_('JLIST_BACKEND_SETTINGS_GLOBAL_MAIL_UPLOAD_TEMPLATE' )."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.template.download', '".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_MAIL_DEFAULT' )."')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('download.pic.mirror_1', 'mirror_blue1.png')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('download.pic.mirror_2', 'mirror_blue2.png')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('picname.is.file.updated', 'green.png')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('days.is.file.updated', '15')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('thumbnail.size.width', '100')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('thumbnail.size.height', '100')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('thumbnail.view.placeholder', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('thumbnail.view.placeholder.in.lists', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('backend.manager.access', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('option.navigate.bottom', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('option.navigate.top', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('view.category.info', '0')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('save.monitoring.log', '1')"); + $database->query(); + $sum_configs++; + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('view.subheader', '1')"); + $database->query(); + $sum_configs++; + } + + // new in 1.5 + + // options for config: view detail information site - default on + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'view.detailsite'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('view.detailsite', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('check.leeching', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('allowed.leeching.sites', '')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('block.referer.is.empty', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.author', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.author.url', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.release', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.price', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.license', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.language', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.system', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.pic.upload', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.desc.long', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('mp3.player.config', 'loop=0;showvolume=1;showstop=1;bgcolor1=006699;bgcolor2=66CCFF')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('mp3.view.id3.info', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('use.php.script.for.download', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('mp3.info.layout', '".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_ID3TAG')."')"); + $database->query(); + $sum_configs++; + } + // added in v1.5.1 + // for pad file support + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'pad.exists'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('pad.exists', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('pad.use', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('pad.folder', 'padfiles')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('pad.language', 'English')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('google.adsense.active', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('google.adsense.code', '')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('countdown.active', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('countdown.start.value', '60')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('countdown.text', '".JText::_('JLIST_BACKEND_SETTINGS_WAITING_NOTE_TEXT')."')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.extern.file', '0')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.select.file', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fe.upload.view.desc.short', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fix.upload.filename.blanks', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fix.upload.filename.uppercase', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('fix.upload.filename.specials', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('use.report.download.link', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('send.mailto.report', '')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('download.pic.files', 'download2.png')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('view.sum.jcomments', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('change.cyrillic.chars', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('be.new.files.order.first', '1')"); + $database->query(); + $sum_configs++; + } + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'downloads.footer.text'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('downloads.footer.text', '')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('view.back.button', '1')"); + $database->query(); + $sum_configs++; + + } + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'create.auto.cat.dir'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('create.auto.cat.dir', '1')"); + $database->query(); + $sum_configs++; + + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('reset.counters', '0')"); + $database->query(); + $sum_configs++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'report.link.only.regged'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('report.link.only.regged', '1')"); + $database->query(); + $sum_configs++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'view.ratings'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('view.ratings', '1')"); + $database->query(); + $sum_configs++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_config WHERE setting_name = 'rating.only.for.regged'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->SetQuery("INSERT INTO #__jdownloads_config (setting_name, setting_value) VALUES ('rating.only.for.regged', '0')"); + $database->query(); + $sum_configs++; + } + + if ($sum_configs == 0) { + echo "--> ".JText::_('JLIST_INSTALL_1')."
"; + } else { + echo "--> ".$sum_configs." ".JText::_('JLIST_INSTALL_2')."
"; + } + + //***************************** config data end ********************************************** + + //******************************************************************************************** + // alter tables - insert here new fields from 1.5 for update from 1.4 + // ******************************************************************************************* + $sum_added_fields = 0; + $prefix = $database->_table_prefix; + + $tables = array( $prefix.'jdownloads_templates' ); + $result = $database->getTableFields( $tables ); + if (!$result[$prefix.'jdownloads_templates']['template_header_text']){ + $database->SetQuery("ALTER TABLE #__jdownloads_templates ADD template_header_text LONGTEXT NOT NULL AFTER template_typ"); + if ($database->query()) { + $sum_added_fields++; + } + } + if (!$result[$prefix.'jdownloads_templates']['template_subheader_text']){ + $database->SetQuery("ALTER TABLE #__jdownloads_templates ADD template_subheader_text LONGTEXT NOT NULL AFTER template_header_text"); + if ($database->query()) { + $sum_added_fields++; + } + } + if (!$result[$prefix.'jdownloads_templates']['template_footer_text']){ + $database->SetQuery("ALTER TABLE #__jdownloads_templates ADD template_footer_text LONGTEXT NOT NULL AFTER template_subheader_text"); + if ($database->query()) { + $sum_added_fields++; + } + } + if (!$result[$prefix.'jdownloads_templates']['cols']){ + $database->SetQuery("ALTER TABLE #__jdownloads_templates ADD cols TINYINT(1) NOT NULL DEFAULT 1 AFTER note"); + if ($database->query()) { + $sum_added_fields++; + } + } + // false fieldname delete from prior svn if exist + if ($result[$prefix.'jdownloads_templates']['columns']){ + $database->SetQuery("ALTER TABLE #__jdownloads_templates DROP columns"); + } + + // new alias fields + if (!$result[$prefix.'jdownloads_cats']['cat_alias']){ + $database->SetQuery("ALTER TABLE #__jdownloads_cats ADD cat_alias varchar(255) NOT NULL default '' AFTER cat_title"); + if ($database->query()) { + $sum_added_fields++; + } + } + // new alias fields + if (!$result[$prefix.'jdownloads_files']['file_alias']){ + $database->SetQuery("ALTER TABLE #__jdownloads_files ADD file_alias varchar(255) NOT NULL default '' AFTER file_title"); + if ($database->query()) { + $sum_added_fields++; + } + } + + if ($sum_added_fields == 0) { + echo "--> ".JText::_('JLIST_INSTALL_1_2')."
"; + } else { + echo "--> ".$sum_added_fields." ".JText::_('JLIST_INSTALL_2_2')."
"; + } + + //***************************** alter table end ********************************************** + + //******************************************************************************************** + // write default layouts in database + // ******************************************************************************************* + + + $sum_layouts =0; + $active = 0; + + $database->setQuery("SELECT * FROM #__jdownloads_templates WHERE template_typ = '1' AND locked = '1' AND template_name ='".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_DEFAULT_NAME')."'"); + $temp = $database->loadResult(); + if (!$temp) { + // exist active layout? + $database->setQuery("SELECT COUNT(*) FROM #__jdownloads_templates WHERE template_typ = '1' AND template_active = '1'"); + $active = $database->loadResult(); + if (!$active) { + $active = 1; + } else { + $active = 0; + } + $cat_layout = stripslashes(JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_DEFAULT')); + $database->setQuery("INSERT INTO #__jdownloads_templates (template_name, template_typ, template_text, template_active, locked) VALUES ('".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_DEFAULT_NAME')."', 1, '".$cat_layout."', ".$active.", 1)"); + $database->query(); + $sum_layouts++; + } + // files + $database->setQuery("SELECT * FROM #__jdownloads_templates WHERE template_typ = '2' AND locked = '1' AND template_name ='".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NAME')."'"); + $temp = $database->loadResult(); + if (!$temp) { + $file_layout = stripslashes(JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT')); + $database->setQuery("INSERT INTO #__jdownloads_templates (template_name, template_typ, template_text, template_active, locked) VALUES ('".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NAME')."', 2, '".$file_layout."', 0, 1)"); + $database->query(); + $sum_layouts++; + } + + // summary + $database->setQuery("SELECT * FROM #__jdownloads_templates WHERE template_typ = '3' AND locked = '1' AND template_name ='".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NAME')."'"); + $temp = $database->loadResult(); + if (!$temp) { + // exist active layout? + $database->setQuery("SELECT COUNT(*) FROM #__jdownloads_templates WHERE template_typ = '3' AND template_active = '1'"); + $active = $database->loadResult(); + if (!$active) { + $active = 1; + } else { + $active = 0; + } + $summary_layout = stripslashes(JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_SUMMARY_DEFAULT')); + $database->setQuery("INSERT INTO #__jdownloads_templates (template_name, template_typ, template_text, template_active, locked) VALUES ('".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NAME')."', 3, '".$summary_layout."', ".$active.", 1)"); + $database->query(); + $sum_layouts++; + } + + // layout for download details + $database->setQuery("SELECT * FROM #__jdownloads_templates WHERE template_typ = '5' AND locked = '1' AND template_name ='".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_DETAILS_DEFAULT_NAME')."'"); + $temp = $database->loadResult(); + if (!$temp) { + // exist active layout? + $database->setQuery("SELECT COUNT(*) FROM #__jdownloads_templates WHERE template_typ = '5' AND template_active = '1'"); + $active = $database->loadResult(); + if (!$active) { + $active = 1; + } else { + $active = 0; + } + $detail_layout = stripslashes(JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_DETAILS_DEFAULT')); + $database->setQuery("INSERT INTO #__jdownloads_templates (template_name, template_typ, template_text, template_active, locked) VALUES ('".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_DETAILS_DEFAULT_NAME')."', 5, '$detail_layout', ".$active.", 1)"); + $database->query(); + $sum_layouts++; + } + + // Simple layout with Checkboxes for files + $database->setQuery("SELECT * FROM #__jdownloads_templates WHERE template_typ = '2' AND locked = '1' AND template_name ='".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NEW_SIMPLE_1_NAME')." 1.4'"); + $temp = $database->loadResult(); + if (!$temp) { + // exist active layout? + $database->setQuery("SELECT COUNT(*) FROM #__jdownloads_templates WHERE template_typ = '2' AND template_active = '1'"); + $active = $database->loadResult(); + if (!$active) { + $active = 1; + } else { + $active = 0; + } + $file_layout = stripslashes(JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NEW_SIMPLE_1')); + $database->setQuery("INSERT INTO #__jdownloads_templates (template_name, template_typ, template_text, template_active, locked, note, checkbox_off, symbol_off) VALUES ('".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NEW_SIMPLE_1_NAME')." 1.4', 2, '".$file_layout."', ".$active.", 1, '', 0, 1)"); + $database->query(); + $sum_layouts++; + } + + // Simple layout without Checkboxes for files + $database->setQuery("SELECT * FROM #__jdownloads_templates WHERE template_typ = '2' AND locked = '1' AND template_name ='".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NEW_SIMPLE_2_NAME')." 1.4'"); + $temp = $database->loadResult(); + if (!$temp) { + $file_layout = stripslashes(JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NEW_SIMPLE_2')); + $database->setQuery("INSERT INTO #__jdownloads_templates (template_name, template_typ, template_text, template_active, locked, note, checkbox_off, symbol_off) VALUES ('".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_FILES_DEFAULT_NEW_SIMPLE_2_NAME')." 1.4', 2, '".$file_layout."', 0, 1, '', 1, 1)"); + $database->query(); + $sum_layouts++; + } + + // new categories layout with 4 columns + $database->setQuery("SELECT * FROM #__jdownloads_templates WHERE template_typ = '1' AND locked = '1' AND template_name ='".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_COL_TITLE')."'"); + $temp = $database->loadResult(); + if (!$temp) { + $file_layout = stripslashes(JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_COL_DEFAULT')); + $database->setQuery("INSERT INTO #__jdownloads_templates (template_name, template_typ, template_text, template_active, locked, note, cols) VALUES ('".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_COL_TITLE')."', 1, '".$file_layout."', 0, 1, '".JText::_('JLIST_BACKEND_SETTINGS_TEMPLATES_CATS_COL_NOTE')."', 4)"); + $database->query(); + $sum_layouts++; + } + + if ($sum_layouts == 0) { + echo "--> ".JText::_('JLIST_INSTALL_3')."
"; + } else { + echo "--> ".$sum_layouts." ".JText::_('JLIST_INSTALL_4')."
"; + } + + + //*************************************** end layouts **************************************** + + //******************************************************************************************** + // Write default licenses in database + // + // Get it from language file and checked if exists in DB + // + //******************************************************************************************** + + $lic_total = (int)JText::_('JLIST_SETTINGS_LICENSE_TOTAL'); + $sum_licenses = 0; + + $database->setQuery("SELECT * FROM #__jdownloads_license WHERE license_title = '".JText::_('JLIST_SETTINGS_LICENSE1_TITLE')."'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->setQuery("INSERT INTO #__jdownloads_license (license_title, license_text, license_url) VALUES ('".JText::_('JLIST_SETTINGS_LICENSE1_TITLE')."', '".JText::_('JLIST_SETTINGS_LICENSE1_TEXT')."', '".JText::_('JLIST_SETTINGS_LICENSE1_URL')."')"); + $database->query(); + $sum_licenses++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_license WHERE license_title = '".JText::_('JLIST_SETTINGS_LICENSE2_TITLE')."'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->setQuery("INSERT INTO #__jdownloads_license (license_title, license_text, license_url) VALUES ('".JText::_('JLIST_SETTINGS_LICENSE2_TITLE')."', '".JText::_('JLIST_SETTINGS_LICENSE2_TEXT')."', '".JText::_('JLIST_SETTINGS_LICENSE2_URL')."')"); + $database->query(); + $sum_licenses++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_license WHERE license_title = '".JText::_('JLIST_SETTINGS_LICENSE3_TITLE')."'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->setQuery("INSERT INTO #__jdownloads_license (license_title, license_text, license_url) VALUES ('".JText::_('JLIST_SETTINGS_LICENSE3_TITLE')."', '".JText::_('JLIST_SETTINGS_LICENSE3_TEXT')."', '".JText::_('JLIST_SETTINGS_LICENSE3_URL')."')"); + $database->query(); + $sum_licenses++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_license WHERE license_title = '".JText::_('JLIST_SETTINGS_LICENSE4_TITLE')."'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->setQuery("INSERT INTO #__jdownloads_license (license_title, license_text, license_url) VALUES ('".JText::_('JLIST_SETTINGS_LICENSE4_TITLE')."', '".JText::_('JLIST_SETTINGS_LICENSE4_TEXT')."', '".JText::_('JLIST_SETTINGS_LICENSE4_URL')."')"); + $database->query(); + $sum_licenses++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_license WHERE license_title = '".JText::_('JLIST_SETTINGS_LICENSE5_TITLE')."'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->setQuery("INSERT INTO #__jdownloads_license (license_title, license_text, license_url) VALUES ('".JText::_('JLIST_SETTINGS_LICENSE5_TITLE')."', '".JText::_('JLIST_SETTINGS_LICENSE5_TEXT')."', '".JText::_('JLIST_SETTINGS_LICENSE5_URL')."')"); + $database->query(); + $sum_licenses++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_license WHERE license_title = '".JText::_('JLIST_SETTINGS_LICENSE6_TITLE')."'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->setQuery("INSERT INTO #__jdownloads_license (license_title, license_text, license_url) VALUES ('".JText::_('JLIST_SETTINGS_LICENSE6_TITLE')."', '".JText::_('JLIST_SETTINGS_LICENSE6_TEXT')."', '".JText::_('JLIST_SETTINGS_LICENSE6_URL')."')"); + $database->query(); + $sum_licenses++; + } + + $database->setQuery("SELECT * FROM #__jdownloads_license WHERE license_title = '".JText::_('JLIST_SETTINGS_LICENSE7_TITLE')."'"); + $temp = $database->loadResult(); + if (!$temp) { + $database->setQuery("INSERT INTO #__jdownloads_license (license_title, license_text, license_url) VALUES ('".JText::_('JLIST_SETTINGS_LICENSE7_TITLE')."', '".JText::_('JLIST_SETTINGS_LICENSE7_TEXT')."', '".JText::_('JLIST_SETTINGS_LICENSE7_URL')."')"); + $database->query(); + $sum_licenses++; + } + + if ($sum_licenses == 0) { + echo "--> ".JText::_('JLIST_INSTALL_5')."
"; + } else { + echo "--> ".$sum_licenses." ".JText::_('JLIST_INSTALL_6')."
"; + } + + //***************************** end licenses ************************************************* + + //******************************************************************************************** + // Checked if exist joomfish + // if yes, move the files + //******************************************************************************************** + if (@is_dir(JPATH_SITE.'/administrator/components/com_joomfish/contentelements')){ + $fishresult = 1; + @rename( JPATH_SITE."/administrator/components/com_jdownloads/joomfish/jdownloads_cats.xml", JPATH_SITE."/administrator/components/com_joomfish/contentelements/jdownloads_cats.xml"); + @rename( JPATH_SITE."/administrator/components/com_jdownloads/joomfish/jdownloads_config.xml", JPATH_SITE."/administrator/components/com_joomfish/contentelements/jdownloads_config.xml"); + @rename( JPATH_SITE."/administrator/components/com_jdownloads/joomfish/jdownloads_files.xml", JPATH_SITE."/administrator/components/com_joomfish/contentelements/jdownloads_files.xml"); + @rename( JPATH_SITE."/administrator/components/com_jdownloads/joomfish/jdownloads_layouts.xml", JPATH_SITE."/administrator/components/com_joomfish/contentelements/jdownloads_layouts.xml"); + @rmdir ( JPATH_SITE."/administrator/components/com_jdownloads/joomfish"); + } else { + $fishresult = 0; + } + + if ($fishresult) { + echo "--> ".JText::_('JLIST_INSTALL_17')." ".JPATH_SITE.'/administrator/components/com_joomfish/contentelements'.'
'; + } else { + echo "--> ".JText::_('JLIST_INSTALL_18')." ".JPATH_SITE.'/administrator/components/com_jdownloads/joomfish'.'
'.JText::_('JLIST_INSTALL_19').'

'; + } + + //***************************** end joomfish ************************************************* + + //******************************************************************************************** + // Checked default directories + //******************************************************************************************** + + // downloads + $dir_exist = is_dir(JPATH_SITE."/downloads"); + + if($dir_exist) { + if (is_writable(JPATH_SITE."/downloads")) { + echo "--> ".JText::_('JLIST_INSTALL_7')."
"; + } else { + echo "--> ".JText::_('JLIST_INSTALL_8')."
"; + } + } else { + if ($makedir = @mkdir(JPATH_SITE."/downloads/", 0777)) { + echo "--> ".JText::_('JLIST_INSTALL_9')."
"; + } else { + echo "--> ".JText::_('JLIST_INSTALL_10')."
"; + } + } + + // tempzipfiles + $dir_existzip = is_dir(JPATH_SITE."/downloads/tempzipfiles"); + + if($dir_existzip) { + if (is_writable(JPATH_SITE."/downloads/tempzipfiles")) { + echo "--> ".JText::_('JLIST_INSTALL_11')."
"; + } else { + echo "--> ".JText::_('JLIST_INSTALL_12')."
"; + } + } else { + if ($makedir = @mkdir(JPATH_SITE."/downloads/tempzipfiles/", 0777)) { + echo "--> ".JText::_('JLIST_INSTALL_13')."
"; + } else { + echo "--> ".JText::_('JLIST_INSTALL_14')."
"; + } + } + + // beispieldaten speichern - wenn neuinstallation + if ($root_dir == ''){ + $dir_exist = is_dir(JPATH_SITE."/downloads"); + if($dir_exist) { + if (is_writable(JPATH_SITE."/downloads")) { + if (!is_dir(JPATH_SITE."/downloads/".JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT'))){ + // daten speichern + // dirs f�r cats + $makdir = @mkdir(JPATH_SITE."/downloads/".JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT'), 0777); + $makdir = @mkdir(JPATH_SITE."/downloads/".JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT').'/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_SUB'), 0777); + // cat erstellen in db + if ($makdir) { + $database->setQuery("INSERT INTO #__jdownloads_cats (cat_title, cat_description, cat_dir, parent_id, cat_pic, published) VALUES ('".JText::_('JLIST_SAMPLE_DATA_CAT_NAME_ROOT')."', '".JText::_('JLIST_SAMPLE_DATA_CAT_NAME_TEXT')."', '".JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT')."', 0, 'joomla.png', 1)"); + $database->query(); + $database->setQuery("INSERT INTO #__jdownloads_cats (cat_title, cat_description, cat_dir, parent_id, cat_pic, published) VALUES ('".JText::_('JLIST_SAMPLE_DATA_CAT_NAME_SUB')."', '".JText::_('JLIST_SAMPLE_DATA_CAT_NAME_TEXT')."', '".JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT').'/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_SUB')."', 1, 'joomla.png', 1)"); + $database->query(); + // file kopieren nach catdir + $source_path = JPATH_SITE."/administrator/components/com_jdownloads/mod_jdownloads_top_1.5.zip"; + $dest_path = JPATH_SITE.'/downloads/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_ROOT').'/'.JText::_('JLIST_SAMPLE_DATA_CAT_FOLDER_SUB').'/mod_jdownloads_top_1.5.zip'; + @copy($source_path, $dest_path); + // downloads erstellen + $database->setQuery("INSERT INTO #__jdownloads_files (`file_id`, `file_title`, `description`, `description_long`, `file_pic`, `price`, `release`, `language`, `system`, `license`, `url_license`, `size`, `date_added`, `url_download`, `url_home`, `author`, `url_author`, `created_by`, `created_mail`, `modified_by`, `modified_date`, `downloads`, `cat_id`, `ordering`, `published`, `checked_out`, `checked_out_time`) VALUES (NULL, '".JText::_('JLIST_SAMPLE_DATA_FILE_NAME')."', '".JText::_('JLIST_SAMPLE_DATA_FILE_NAME_TEXT')."', '".JText::_('JLIST_SAMPLE_DATA_FILE_NAME_TEXT')."', 'joomla.png', '', '1.0', '2', '1', '1', '', '1.92 KB', '".date('Y-m-d H:i:s')."', 'mod_jdownloads_top_1.5.zip', 'www.jDownloads.com', 'Arno Betz', 'info@jDownloads.com', 'Installer', '', '', '0000-00-00 00:00:00', '0', '2', '0', '1', '0', '0000-00-00 00:00:00')"); + $database->query(); + checkAlias(); + echo "--> ".JText::_('JLIST_SAMPLE_DATA_CREATE_OK')."
"; + } + } else { + // daten existieren schon + echo " ".JText::_('JLIST_SAMPLE_DATA_EXISTS')."
"; + } + } else { + // fehlermeldung: daten konnten nicht gespeichert werden + echo "--> ".JText::_('JLIST_SAMPLE_DATA_CREATE_ERROR')."
"; + } + } else { + // fehlermeldung: daten konnten nicht gespeichert werden + echo "--> ".JText::_('JLIST_SAMPLE_DATA_CREATE_ERROR')."
"; + } + } + checkAlias(); + + echo "--> ".JText::_('JLIST_INSTALL_DB_TIP')."
"; + ?>
+
+ + + +

+
+ + setQuery("SELECT cat_id, cat_title, cat_alias FROM #__jdownloads_cats WHERE cat_alias = ''"); + $cats = $database->loadObjectList(); + if ($cats){ + foreach ($cats as $cat){ + $cat->cat_alias = $cat->cat_title; + $cat->cat_alias = JFilterOutput::stringURLSafe($cat->cat_alias); + if(trim(str_replace('-','',$cat->cat_alias)) == '') { + $datenow =& JFactory::getDate(); + $cat->cat_alias = $datenow->toFormat("%Y-%m-%d-%H-%M-%S"); + } + $database->setQuery("UPDATE #__jdownloads_cats SET cat_alias = '$cat->cat_alias' WHERE cat_id = '$cat->cat_id'"); + $database->query(); + } + } + $database->setQuery("SELECT file_id, file_title, file_alias FROM #__jdownloads_files WHERE file_alias = ''"); + $files = $database->loadObjectList(); + if ($files){ + foreach ($files as $file){ + $file->file_alias = $file->file_title; + $file->file_alias = JFilterOutput::stringURLSafe($file->file_alias); + if(trim(str_replace('-','',$file->file_alias)) == '') { + $datenow =& JFactory::getDate(); + $file->file_alias = $datenow->toFormat("%Y-%m-%d-%H-%M-%S"); + } + $database->setQuery("UPDATE #__jdownloads_files SET file_alias = '$file->file_alias' WHERE file_id = '$file->file_id'"); + $database->query(); + } + } +} + +// Kopiert alle dirs inkl. subdirs und files nach $dest +// und l�scht abscchliessend das $source dir +function moveDirs($source, $dest, $recursive = true, $message) { + $error = false; + if (!is_dir($dest)) { + mkdir($dest); + } + $handle = @opendir($source); + if(!$handle) { + $message = JText::_('JLIST_INSTALL_MOVE_IMAGES_COPY_ERROR'); + return $message; + } + while ($file = @readdir ($handle)) { + if (eregi("^\.{1,2}$",$file)) { + continue; + } + if(!$recursive && $source != $source.$file."/") { + if(is_dir($source.$file)) + continue; + } + if(is_dir($source.$file)) { + moveDirs($source.$file."/", $dest.$file."/", $recursive, $message); + } else { + if (!@copy($source.$file, $dest.$file)) { + $error = true; + } + } + } + @closedir($handle); + // $source l�schen wenn KEIN error + if (!$error) { + $res = delete_dir_and_allfiles ($source); + if ($res) { + $message = JText::_('JLIST_INSTALL_MOVE_IMAGES_DEL_AFTER_COPY_ERROR'); + } + } else { + $message = JText::_('JLIST_INSTALL_MOVE_IMAGES_COPY_ERROR'); + } + return $message; +} + +// delete_dir_and_allfiles - rekursiv l�schen +// Rueckgabewerte: +// 0 - ok +// -1 - kein Verzeichnis +// -2 - Fehler beim Loeschen +// -3 - Ein Eintrag war keine Datei/Verzeichnis/Link + +function delete_dir_and_allfiles ($path) { + if (!is_dir ($path)) { + return -1; + } + $dir = @opendir ($path); + if (!$dir) { + return -2; + } + while (($entry = @readdir($dir)) !== false) { + if ($entry == '.' || $entry == '..') continue; + if (is_dir ($path.'/'.$entry)) { + $res = delete_dir_and_allfiles ($path.'/'.$entry); + // manage errors + if ($res == -1) { + @closedir ($dir); + return -2; + } else if ($res == -2) { + @closedir ($dir); + return -2; + } else if ($res == -3) { + @closedir ($dir); + return -3; + } else if ($res != 0) { + @closedir ($dir); + return -2; + } + } else if (is_file ($path.'/'.$entry) || is_link ($path.'/'.$entry)) { + // delete file + $res = @unlink ($path.'/'.$entry); + if (!$res) { + @closedir ($dir); + return -2; + } + } else { + @closedir ($dir); + return -3; + } + } + @closedir ($dir); + // delete dir + $res = @rmdir ($path); + if (!$res) { + return -2; + } + return 0; +} + +?> \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/install.sql b/oss/joomla/trunk/administrator/components/com_jdownloads/install.sql new file mode 100644 index 00000000..e8b26d49 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/install.sql @@ -0,0 +1,122 @@ + CREATE TABLE IF NOT EXISTS `#__jdownloads_config` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `setting_name` varchar(64) NOT NULL default '', + `setting_value` text NOT NULL, + PRIMARY KEY (`id`) + ) TYPE=MyISAM CHARACTER SET `utf8` COLLATE `utf8_general_ci`; + + CREATE TABLE IF NOT EXISTS `#__jdownloads_cats` ( + `cat_id` INT NOT NULL AUTO_INCREMENT, + `cat_dir` text NOT NULL, + `parent_id` INT NOT NULL , + `cat_title` VARCHAR( 255 ) NOT NULL, + `cat_alias` VARCHAR( 255 ) NOT NULL, + `cat_description` TEXT NOT NULL, + `cat_pic` VARCHAR( 255 ) NOT NULL, + `cat_access` VARCHAR( 3 ) NOT NULL default '00', + `metakey` TEXT NOT NULL default '', + `metadesc` TEXT NOT NULL default '', + `ordering` tinyint(4) NOT NULL default '0', + `published` tinyint(1) NOT NULL default '0', + `checked_out` int(11) NOT NULL default '0', + `checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (`cat_id`) + ) TYPE=MyISAM CHARACTER SET `utf8` COLLATE `utf8_general_ci`; + + CREATE TABLE IF NOT EXISTS `#__jdownloads_files` ( + `file_id` int(11) NOT NULL AUTO_INCREMENT, + `file_title` varchar(255) NOT NULL default '', + `file_alias` varchar(255) NOT NULL default '', + `description` longtext NOT NULL default '', + `description_long` longtext NOT NULL default '', + `file_pic` varchar(255) NOT NULL default '', + `thumbnail` varchar(255) NOT NULL default '', + `price` varchar(20) NOT NULL default '', + `release` varchar(255) NOT NULL default '', + `language` tinyint(2) NOT NULL default '0', + `system` tinyint(2) NOT NULL default '0', + `license` varchar(255) NOT NULL default '', + `url_license` varchar(255) NOT NULL default '', + `size` varchar(255) NOT NULL default '', + `date_added` datetime NOT NULL default '0000-00-00 00:00:00', + `url_download` varchar(255) NOT NULL default '', + `extern_file` varchar(255) NOT NULL default '', + `extern_site` tinyint(1) NOT NULL default '0', + `mirror_1` varchar(255) NOT NULL default '', + `mirror_2` varchar(255) NOT NULL default '', + `extern_site_mirror_1` tinyint(1) NOT NULL default '0', + `extern_site_mirror_2` tinyint(1) NOT NULL default '0', + `url_home` varchar(255) NOT NULL default '', + `author` varchar(255) NOT NULL default '', + `url_author` varchar(255) NOT NULL default '', + `created_by` varchar(255) NOT NULL default '', + `created_mail` varchar(255) NOT NULL default '', + `modified_by` varchar(255) NOT NULL default '', + `modified_date` datetime NOT NULL default '0000-00-00 00:00:00', + `downloads` int(11) NOT NULL default '0', + `cat_id` int(11) NOT NULL default '0', + `metakey` TEXT NOT NULL default '', + `metadesc` TEXT NOT NULL default '', + `update_active` tinyint(1) NOT NULL default '0', + `ordering` int(11) NOT NULL default '0', + `published` tinyint(1) NOT NULL default '0', + `checked_out` int(11) NOT NULL default '0', + `checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (`file_id`) + ) TYPE=MyISAM CHARACTER SET `utf8` COLLATE `utf8_general_ci`; + + CREATE TABLE IF NOT EXISTS `#__jdownloads_license` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `license_title` varchar(64) NOT NULL default '', + `license_text` longtext NOT NULL, + `license_url` varchar(255) NOT NULL default '', + `checked_out` int(11) NOT NULL default '0', + `checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (`id`) + ) TYPE=MyISAM CHARACTER SET `utf8` COLLATE `utf8_general_ci`; + + CREATE TABLE IF NOT EXISTS `#__jdownloads_templates` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `template_name` varchar(64) NOT NULL default '', + `template_typ` tinyint(2) NOT NULL default '0', + `template_header_text` longtext NOT NULL, + `template_subheader_text` longtext NOT NULL, + `template_footer_text` longtext NOT NULL, + `template_text` longtext NOT NULL, + `template_active` tinyint(1) NOT NULL default '0', + `locked` tinyint(1) NOT NULL default '0', + `note` tinytext NOT NULL, + `cols` tinyint(1) NOT NULL default '1', + `checkbox_off` tinyint(1) NOT NULL default '0', + `symbol_off` tinyint(1) NOT NULL default '0', + `checked_out` int(11) NOT NULL default '0', + `checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (`id`) + ) TYPE=MyISAM CHARACTER SET `utf8` COLLATE `utf8_general_ci`; + + CREATE TABLE IF NOT EXISTS `#__jdownloads_groups` ( + `id` int(11) NOT NULL auto_increment, + `groups_name` text NOT NULL, + `groups_description` longtext, + `groups_access` tinyint(4) NOT NULL default '1', + `groups_members` text, + PRIMARY KEY (`id`) + ) TYPE=MyISAM CHARACTER SET `utf8` COLLATE `utf8_general_ci`; + + CREATE TABLE IF NOT EXISTS `#__jdownloads_log` ( + `id` int(11) NOT NULL auto_increment, + `log_file_id` int(11) NOT NULL, + `log_ip` varchar(25) NOT NULL default '', + `log_datetime` datetime NOT NULL default '0000-00-00 00:00:00', + `log_user` int(11) NOT NULL default '0', + `log_browser` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`) + ) TYPE=MyISAM CHARACTER SET `utf8` COLLATE `utf8_general_ci`; + + CREATE TABLE IF NOT EXISTS `#__jdownloads_rating` ( + `file_id` int(11) NOT NULL default '0', + `rating_sum` int(11) unsigned NOT NULL default '0', + `rating_count` int(11) unsigned NOT NULL default '0', + `lastip` varchar(50) NOT NULL default '', + PRIMARY KEY (`file_id`) + ) TYPE=MyISAM CHARACTER SET `utf8` COLLATE `utf8_general_ci`; \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/jdownloads.xml b/oss/joomla/trunk/administrator/components/com_jdownloads/jdownloads.xml new file mode 100644 index 00000000..f5b11d84 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/jdownloads.xml @@ -0,0 +1,337 @@ + + + jDownloads + 04/2010 + YUCHENG HU + (C) 2009 www.hawebs.net + service@hawebs.net + www.hawebs.net + 1.0 + Download Management Component for Joomla! 1.5.x Native + + + + jdownloads.php + jdownloads.html.php + jdownloads.class.php + router.php + jdownloads.js + jdownloads_fe.css + mp3_player_maxi.swf + index.html + language/index.html + lightbox/index.html + lightbox/lightbox.js + lightbox/lightbox.css + lightbox/loading.gif + lightbox/overlay.png + lightbox/close.gif + lightbox/blank.gif + rating/index.html + rating/ajax.php + rating/css/index.html + rating/css/ajaxvote.php + rating/css/ajaxvote.css + rating/css/ajaxvote2.css + rating/images/index.html + rating/images/loading.gif + rating/images/star.png + rating/images/star.gif + rating/js/index.html + rating/js/ajaxvote.js + rating/js/ajaxvote.php + + + images/index.html + images/button_bg.png + images/new_window.png + images/upload.png + images/link_extern.gif + images/upload_ok.png + images/upload_stop.png + images/search.png + images/home_fe.png + images/summary.png + images/offline.png + images/form_no_value.png + fileimages/index.html + fileimages/doc.png + fileimages/xml.png + fileimages/real.png + fileimages/rtf.png + fileimages/ps.png + fileimages/pdf.png + fileimages/7z.png + fileimages/aiff.png + fileimages/arj.png + fileimages/bzip.png + fileimages/iso.png + fileimages/tgz.png + fileimages/java.png + fileimages/java-archive.png + fileimages/lhz.png + fileimages/perl.png + fileimages/rar.png + fileimages/tarz.png + fileimages/wma.png + fileimages/zip.png + fileimages/wav.png + fileimages/binary.png + fileimages/document.png + fileimages/font_truetype.png + fileimages/font_type1.png + fileimages/excel.png + fileimages/bmp.png + fileimages/gif.png + fileimages/png.png + fileimages/tiff.png + fileimages/psd.png + fileimages/jpeg.png + fileimages/jpg.png + fileimages/txt.png + fileimages/archive.png + fileimages/lha.png + fileimages/script.png + fileimages/tar.png + fileimages/mp3.png + fileimages/ogg.png + fileimages/font.png + fileimages/joomla.png + fileimages/html.png + fileimages/template.png + fileimages/calendar.png + fileimages/php.png + catimages/index.html + catimages/internet.png + catimages/video.png + catimages/office.png + catimages/multimedia.png + catimages/multimedia2.png + catimages/dictionary.png + catimages/audio.png + catimages/sound.png + catimages/font.png + catimages/desktop.png + catimages/graphics.png + catimages/games.png + catimages/accessories.png + catimages/folder.png + catimages/folder_net.png + catimages/folder_doc.png + catimages/folder_blue.png + catimages/folder_grey.png + catimages/folder_green.png + catimages/folder_public.png + catimages/folder_music.png + catimages/folder_images.png + catimages/folder_html.png + catimages/folder_documents.png + catimages/folder_video.png + catimages/folder_blue_2.png + catimages/dictionary2.png + catimages/guitar.png + catimages/joomla.png + catimages/bible.png + catimages/book.png + catimages/heart.png + catimages/hint.png + catimages/chess.png + catimages/blackjack.png + catimages/desktop2.png + catimages/graphics2.png + catimages/design.png + catimages/tools.png + miniimages/index.html + miniimages/stuff.png + miniimages/currency.png + miniimages/license.png + miniimages/weblink.png + miniimages/contact.png + miniimages/date.png + miniimages/language.png + miniimages/system.png + miniimages/download.png + downloadimages/index.html + downloadimages/download2.png + downloadimages/download3.gif + downloadimages/download.gif + downloadimages/blue_01.gif + downloadimages/blue_02.gif + downloadimages/blue_03.gif + downloadimages/blue_04.gif + downloadimages/blue_05.gif + downloadimages/blue_06.gif + downloadimages/brown_01.gif + downloadimages/brown_02.gif + downloadimages/brown_03.gif + downloadimages/green_01.gif + downloadimages/grey_01.gif + downloadimages/grey_02.gif + downloadimages/download_blue.png + downloadimages/download_green.png + downloadimages/download_red.png + downloadimages/mirror_green.png + downloadimages/mirror_green1.png + downloadimages/mirror_green2.png + downloadimages/mirror_blue.png + downloadimages/mirror_blue1.png + downloadimages/mirror_blue2.png + downloadimages/mirror_red.png + downloadimages/mirror_red1.png + downloadimages/mirror_red2.png + downloadimages/mirror.gif + downloadimages/mirror1.gif + downloadimages/mirror2.gif + hotimages/index.html + hotimages/hotfile.gif + hotimages/green_01.gif + hotimages/grey_01.gif + hotimages/blue_03.gif + hotimages/red.png + hotimages/blue.png + hotimages/green.png + hotimages/green2.png + hotimages/yellow.png + hotimages/orange.png + hotimages/grey.png + hotimages/sephia.png + newimages/index.html + newimages/newfile.gif + newimages/green_01.gif + newimages/grey_01.gif + newimages/blue_03.gif + newimages/blue.png + newimages/green.png + newimages/green2.png + newimages/orange.png + newimages/yellow.png + newimages/red.png + newimages/sephia.png + newimages/grey.png + updimages/index.html + updimages/blue.png + updimages/green.png + updimages/green2.png + updimages/yellow.png + updimages/orange.png + updimages/sephia.png + updimages/grey.png + updimages/red.png + screenshots/index.html + screenshots/no_pic.gif + screenshots/thumbnails/index.html + screenshots/thumbnails/no_pic.gif + headerimages/index.html + headerimages/upload_aqua.png + headerimages/upload_blue.png + headerimages/home.png + + + + + install.sql + + + + + language/zh-CN/zh-CN.com_jdownloads.ini + + language/en-GB/en-GB.com_jdownloads.ini + + + install.jdownloads.php + uninstall.jdownloads.php + + jDownloads + + 控制面板 + 下载文件列表 + 分类 + 许可证 + 布局管理 + 属性配置 + 创建备份 + 备份恢复 + 使用条款 + + + + admin.jdownloads.php + admin.jdownloads.html.php + check.restore.jdownloads.php + toolbar.jdownloads.php + toolbar.jdownloads.html.php + index.html + htaccess.txt + style.css + jdownloads.xml + install.sql + joomfish/jdownloads_config.xml + joomfish/jdownloads_cats.xml + joomfish/jdownloads_files.xml + joomfish/jdownloads_templates.xml + mod_jdownloads_top_1.5.zip + pad/index.html + pad/padfile.php + pad/padspec.php + pad/padvalidator.php + pad/xmlfile.php + + + images/jdownloads.jpg + images/categories.png + images/downloads.png + images/support.png + images/config.png + images/licenses.png + images/template.png + images/layouts.png + images/active.png + images/addedit.png + images/backup.png + images/restore.png + images/m_active.png + images/m_jdownloads.gif + images/m_downloads.gif + images/m_home.gif + images/m_categories.gif + images/m_licenses.gif + images/m_templates.gif + images/m_config.gif + images/m_backup.gif + images/m_restore.gif + images/m_info.gif + images/warning.png + images/help.png + images/home.png + images/css.png + images/info.png + images/downloads_2.png + images/categories_2.png + images/config_2.png + images/dir_edit.png + images/dir_edit_2.png + images/downloads_cats.gif + images/downloads_files.gif + images/downloads_details.gif + images/langmanager.png + images/summary.gif + images/email.gif + images/jd_logo_small.png + images/jd_logo_48.png + images/index.html + + + + language/zh-CN/zh-CN.com_jdownloads.ini + language/zh-CN/zh-CN.com_jdownloads.menu.ini + language/en-GB/en-GB.com_jdownloads.ini + language/en-GB/en-GB.com_jdownloads.menu.ini + language/us-US/us-US.com_jdownloads.ini + language/us-US/us-US.com_jdownloads.menu.ini + language/de-DE/de-DE.com_jdownloads.ini + language/de-DE/de-DE.com_jdownloads.menu.ini + + + \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_cats.xml b/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_cats.xml new file mode 100644 index 00000000..7c5e25a9 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_cats.xml @@ -0,0 +1,18 @@ + + +jDownloads Categories +Arno Betz +1.4 beta +Definition for the jDownloads component - Categories + + +ID +Title +Meta Description +Meta Keys +Description +Check out +Check out date +
+
+
diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_config.xml b/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_config.xml new file mode 100644 index 00000000..2d0dc950 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_config.xml @@ -0,0 +1,14 @@ + + +jDownloads Configuration +Arno Betz +1.4 beta +Definition for the jDownloads component: configuration + + +ID +Parameter Name +Parameter Value +
+
+
diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_files.xml b/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_files.xml new file mode 100644 index 00000000..258eeb12 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_files.xml @@ -0,0 +1,20 @@ + + + JDownloads Downloads + Arno Betz + 1.4 beta + Definition for the files in JDownloads + + + ID + Title + Description + Description long + Price + Meta Description + Meta Keys + Check out + Check out date +
+
+
\ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_templates.xml b/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_templates.xml new file mode 100644 index 00000000..4e4db326 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/joomfish/jdownloads_templates.xml @@ -0,0 +1,16 @@ + + +jDownloads Layouts +Arno Betz +1.4 beta +Definition for the jDownloads component: layouts + + +ID +Name +Layout text +Check out +Check out date +
+
+
diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/mod_jdownloads_top_1.5.zip b/oss/joomla/trunk/administrator/components/com_jdownloads/mod_jdownloads_top_1.5.zip new file mode 100644 index 0000000000000000000000000000000000000000..bab39e77e1a2c600e7770ef9dbf7fd3d2c65cc01 GIT binary patch literal 4876 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 literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/pad/index.html b/oss/joomla/trunk/administrator/components/com_jdownloads/pad/index.html new file mode 100644 index 00000000..88a5baf7 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/pad/index.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/pad/padfile.php b/oss/joomla/trunk/administrator/components/com_jdownloads/pad/padfile.php new file mode 100644 index 00000000..ccb3c131 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/pad/padfile.php @@ -0,0 +1,135 @@ += 2000 ) + $Descr = $this->XML->GetValue("XML_DIZ_INFO/Program_Descriptions/" . $Language . "/Char_Desc_2000"); + if ( $Descr != "" ) + return $Descr; + if ( $Length >= 450 ) + $Descr = $this->XML->GetValue("XML_DIZ_INFO/Program_Descriptions/" . $Language . "/Char_Desc_450"); + if ( $Descr != "" ) + return $Descr; + if ( $Length >= 250 ) + $Descr = $this->XML->GetValue("XML_DIZ_INFO/Program_Descriptions/" . $Language . "/Char_Desc_250"); + if ( $Descr != "" ) + return $Descr; + if ( $Length >= 80 ) + $Descr = $this->XML->GetValue("XML_DIZ_INFO/Program_Descriptions/" . $Language . "/Char_Desc_80"); + if ( $Descr != "" ) + return $Descr; + if ( $Length >= 45 ) + $Descr = $this->XML->GetValue("XML_DIZ_INFO/Program_Descriptions/" . $Language . "/Char_Desc_45"); + if ( $Descr != "" ) + return $Descr; + + // Try English, if nothing found yet + if ( $Language != "English" ) + { + if ( $Length >= 2000 ) + $Descr = $this->XML->GetValue("XML_DIZ_INFO/Program_Descriptions/English/Char_Desc_2000"); + if ( $Descr != "" ) + return $Descr; + if ( $Length >= 450 ) + $Descr = $this->XML->GetValue("XML_DIZ_INFO/Program_Descriptions/English/Char_Desc_450"); + if ( $Descr != "" ) + return $Descr; + if ( $Length >= 250 ) + $Descr = $this->XML->GetValue("XML_DIZ_INFO/Program_Descriptions/English/Char_Desc_250"); + if ( $Descr != "" ) + return $Descr; + if ( $Length >= 80 ) + $Descr = $this->XML->GetValue("XML_DIZ_INFO/Program_Descriptions/English/Char_Desc_80"); + if ( $Descr != "" ) + return $Descr; + if ( $Length >= 45 ) + $Descr = $this->XML->GetValue("XML_DIZ_INFO/Program_Descriptions/English/Char_Desc_45"); + if ( $Descr != "" ) + return $Descr; + } + + // Nothing found + return ""; + } +} + +?> \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/pad/padspec.php b/oss/joomla/trunk/administrator/components/com_jdownloads/pad/padspec.php new file mode 100644 index 00000000..9bae84d6 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/pad/padspec.php @@ -0,0 +1,118 @@ +Load() ) +// die "Cannot load PAD Spec. Error Code: " . $PADSpec->LastError; +// +// // Find spec for a specific PAD field +// echo $PADSpec->FindFieldNode("XML_DIZ_INFO/Program_Info/Program_Name"); +// +// HISTORY +// +// 2006-06-20 PHP5 compatibility (Oliver Grahl, ASP PAD Support) +// 2004-08-16 Initial Release (Oliver Grahl, ASP PAD Support) +// +////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////// +// Includes +////////////////////////////////////////////////////////////////////////////// + +include_once("xmlfile.php"); + + +////////////////////////////////////////////////////////////////////////////// +// Classes +////////////////////////////////////////////////////////////////////////////// + +// PADSpec (derives from XMLFile) +// Represents the PAD specification based on a XML PAD spec file +class PADSpec extends XMLFile +{ + ////////////////////////////////////////////////////////////////////////////// + // Public Properties + ////////////////////////////////////////////////////////////////////////////// + + // Reference to the /PAD_Spec/Fields node + var $FieldsNode; + + + ////////////////////////////////////////////////////////////////////////////// + // Construction + ////////////////////////////////////////////////////////////////////////////// + + // Constructor + // IN: $URL - the URL or local path of the PAD spec file (optional) + function PADSpec($URL = "") + { + // Inherited + parent::XMLFile($URL); + } + + + ////////////////////////////////////////////////////////////////////////////// + // Public Methods + ////////////////////////////////////////////////////////////////////////////// + + // Load + // RETURNS: true - Success (LastError is ERR_NO_ERROR) + // false - Failure (see LastError) + function Load() + { + $ret = parent::Load(); + + $this->FieldsNode =& $this->XML->FindNodeByPath("PAD_Spec/Fields"); + + return $ret; + } + + // Find spec node for field with Path + // IN: $Path - path of the PAD field, i.e. XML_DIZ_INFO/Company_Info/Company_Name + // RETURNS: reference to the Field node in the spec, NULL if not found + function &FindFieldNode($Path) + { + // Walk over all fields in the spec and compare Path + foreach($this->FieldsNode->ChildNodes as $FieldNode) + if ( $FieldNode->GetValue("Path") == $Path ) + return $FieldNode; + + // Not found + // To make PHP5 happy, we will not return NULL, but a variable which + // has a value of NULL. + $NULL = NULL; + return $NULL; + } +} + +?> \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/pad/padvalidator.php b/oss/joomla/trunk/administrator/components/com_jdownloads/pad/padvalidator.php new file mode 100644 index 00000000..de6c53f4 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/pad/padvalidator.php @@ -0,0 +1,392 @@ +Load() ) +// die "Cannot load PAD file. Error Code: " . $PAD->LastError; +// +// // Create PAD validator file object for for the local pad_spec.xml file +// $PADValidator = new PADValidator("pad_spec.xml"); +// +// // Load PAD file (see Constants section for possible error codes) +// if ( !$PADValidator->Load() ) +// die "Cannot load PAD Validator. Error Code: " . $PADValidator->LastError; +// +// // Validate +// $nErrors = $PADValidator->Validate($PAD); +// +// // Print validation errors +// echo $nErrors . " Errors"; +// if ( $nErrors > 0 ) +// foreach($PADValidator->ValidationErrors as $err) +// $err->Dump(); +// +// HISTORY +// +// 2004-08-16 Initial Release (Oliver Grahl, ASP PAD Support) +// +////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////// +// Includes +////////////////////////////////////////////////////////////////////////////// + +include_once("padfile.php"); +include_once("padspec.php"); + + +////////////////////////////////////////////////////////////////////////////// +// Classes +////////////////////////////////////////////////////////////////////////////// + +// PADValidationError class +// Represents an abstract PAD validation error +class PADValidationError +{ + ////////////////////////////////////////////////////////////////////////////// + // Construction + ////////////////////////////////////////////////////////////////////////////// + + // Constructor + // IN: &$PADValidator - reference to the PADValidator object holding this error + function PADValidationError(&$PADValidator) + { + // Append this error to the array + array_push($PADValidator->ValidationErrors, &$this); + } + + + ////////////////////////////////////////////////////////////////////////////// + // Methods + ////////////////////////////////////////////////////////////////////////////// + + // Dump error to HTML + function Dump() + { + echo "Unknown Error."; + } + + // Dump a name/value pair + // IN: $Name - the name + // IN: $Value - the corresponding value + function DumpValue($Name, $Value) + { + echo "
" . htmlspecialchars($Name . ":") . " ";
+    if ( $Value == "" )
+      echo "(empty)";
+    else
+      echo htmlspecialchars($Value);
+    echo "
"; + } + + // Dump an error string + // IN: $Title - the title + // IN: $Text - the error text + // IN: $Descr - the error description + function DumpError($Title, $Text, $Descr) + { + echo "" . htmlspecialchars($Title) . " " . + htmlspecialchars($Text) . " " . + "" . htmlspecialchars($Descr) . ""; + } +} + +// PADValidationSimpleError class (derives from PADValidationError) +// Represents a PAD validation error +class PADValidationSimpleError extends PADValidationError +{ + ////////////////////////////////////////////////////////////////////////////// + // Public Properties + ////////////////////////////////////////////////////////////////////////////// + + var $SpecFieldNode; + var $Value; + var $ErrorText; + + + ////////////////////////////////////////////////////////////////////////////// + // Construction + ////////////////////////////////////////////////////////////////////////////// + + // Constructor + // IN: &$PADValidator - reference to the PADValidator object holding this error + // IN: &$SpecFieldNode - reference to the XMLNode object holding the field spec + // IN: $Value - current value of the field + function PADValidationSimpleError(&$PADValidator, &$SpecFieldNode, $Value, $ErrorText) + { + // Inherited + parent::PADValidationError(&$PADValidator); + + $this->SpecFieldNode = $SpecFieldNode; + $this->Value = $Value; + + $this->ErrorText = $ErrorText; + } + + + ////////////////////////////////////////////////////////////////////////////// + // Methods + ////////////////////////////////////////////////////////////////////////////// + + // Dump error to HTML + function Dump() + { + $this->DumpValue($this->SpecFieldNode->GetValue("Name"), $this->Value); + $this->DumpError($this->SpecFieldNode->GetValue("Title"), $this->ErrorText, ""); + } +} + +// PADValidationRegExError class (derives from PADValidationError) +// Represents a PAD validation error regarding field regular expressions +class PADValidationRegExError extends PADValidationError +{ + ////////////////////////////////////////////////////////////////////////////// + // Public Properties + ////////////////////////////////////////////////////////////////////////////// + + var $SpecFieldNode; + var $Value; + + + ////////////////////////////////////////////////////////////////////////////// + // Construction + ////////////////////////////////////////////////////////////////////////////// + + // Constructor + // IN: &$PADValidator - reference to the PADValidator object holding this error + // IN: &$SpecFieldNode - reference to the XMLNode object holding the field spec + // IN: $Value - current value of the field + function PADValidationRegExError(&$PADValidator, &$SpecFieldNode, $Value) + { + // Inherited + parent::PADValidationError(&$PADValidator); + + $this->SpecFieldNode = $SpecFieldNode; + $this->Value = $Value; + } + + + ////////////////////////////////////////////////////////////////////////////// + // Methods + ////////////////////////////////////////////////////////////////////////////// + + // Dump error to HTML + function Dump() + { + $this->DumpValue($this->SpecFieldNode->GetValue("Name"), $this->Value); + $this->DumpError($this->SpecFieldNode->GetValue("Title"), + "does not match specification:", + $this->SpecFieldNode->GetValue("RegExDocumentation")); + } +} + +// PADValidationDependencyError class (derives from PADValidationError) +// Represents a PAD validation error regarding field dependencies +// DRAFT - CURRENTLY NOT IMPLEMENTED +class PADValidationDependencyError extends PADValidationError +{ + ////////////////////////////////////////////////////////////////////////////// + // Public Properties + ////////////////////////////////////////////////////////////////////////////// + + var $SpecFieldNode1; + var $SpecFieldNode2; + var $Value1; + var $Value2; + + + ////////////////////////////////////////////////////////////////////////////// + // Construction + ////////////////////////////////////////////////////////////////////////////// + + // Constructor + // IN: &$PADValidator - reference to the PADValidator object holding this error + // IN: &$SpecFieldNode - reference to the XMLNode object holding the field spec + // IN: $Value - current value of the field + function PADValidationDependencyError(&$PADValidator, &$SpecFieldNode1, $Value1, &$SpecFieldNode2, $Value2) + { + // Inherited + parent::PADValidationError(&$PADValidator); + + $this->SpecFieldNode1 = $SpecFieldNode1; + $this->SpecFieldNode2 = $SpecFieldNode2; + $this->Value1 = $Value1; + $this->Value2 = $Value2; + } + + + ////////////////////////////////////////////////////////////////////////////// + // Methods + ////////////////////////////////////////////////////////////////////////////// + + // Dump error to HTML + function Dump() + { + $this->DumpValue($this->SpecFieldNode1->GetValue("Name"), $this->Value1); + $this->DumpValue($this->SpecFieldNode2->GetValue("Name"), $this->Value2); + $this->DumpError($this->SpecFieldNode1->GetValue("Title") . ", " . + $this->SpecFieldNode2->GetValue("Title"), + "do not match dependency:", + $this->SpecFieldNode1->GetValue("Dependencies")); + } +} + + +// PADValidator class (derives from PADSpec) +// Represents a PAD Validator +class PADValidator extends PADSpec +{ + ////////////////////////////////////////////////////////////////////////////// + // Public Properties + ////////////////////////////////////////////////////////////////////////////// + + var $ValidationErrors; + + + ////////////////////////////////////////////////////////////////////////////// + // Construction + ////////////////////////////////////////////////////////////////////////////// + + // Constructor + // IN: $URL - the URL or local path of the PAD spec file (optional) + function PADValidator($URL = "") + { + // Inherited + parent::PADSpec($URL); + + // Inits + $this->ValidationErrors = array(); + } + + + ////////////////////////////////////////////////////////////////////////////// + // Public Methods + ////////////////////////////////////////////////////////////////////////////// + + // Validate + // IN: $PADFile - reference to the PADFile object to validate + // RETURNS: number of errors found (see ValidationErrors) + function Validate(&$PADFile) + { + // Clear + $this->ValidationErrors = array(); + + + // Verify RegEx: Walk over all fields in the spec + foreach($this->FieldsNode->ChildNodes as $SpecFieldNode) + { + // Get Path and RegEx for this field + $Path = $SpecFieldNode->GetValue("Path"); + $RegEx = $SpecFieldNode->GetValue("RegEx"); + + // Find the field content in the PAD + $PADFieldValue = $PADFile->XML->GetValue($Path); + + // Match against the RegEx + if ( !preg_match("/" . $RegEx . "/", $PADFieldValue) ) + new PADValidationRegExError($this, $SpecFieldNode, $PADFieldValue); + } + + + // Verify descriptions in languages other than English + $DescrFieldNames = array("Keywords", "Char_Desc_45", "Char_Desc_80", + "Char_Desc_250", "Char_Desc_450", "Char_Desc_2000"); + $NodeDescriptions =& $PADFile->XML->FindNodeByPath("XML_DIZ_INFO/Program_Descriptions"); + if ($NodeDescriptions) + foreach($NodeDescriptions->ChildNodes as $DescrNode) + if ( $DescrNode->Name != "English" ) + foreach($DescrFieldNames as $DescrFieldName) + { + // Find the spec field (with English instead of this language) + $Path = "XML_DIZ_INFO/Program_Descriptions/" . $DescrNode->Name . "/" . $DescrFieldName; + $SpecFieldNode = $this->FindFieldNode("XML_DIZ_INFO/Program_Descriptions/English/" . $DescrFieldName); + + // Overriding the Path child node does not work yet, so it will always show 'English' + //$NodePath = $SpecFieldNode->FindNodeByName("Path"); + //$NodePath->Value = $Path; + + // Get RegEx for this field + $RegEx = $SpecFieldNode->GetValue("RegEx"); + + // Find the field content in the PAD + $PADFieldValue = $PADFile->XML->GetValue($Path); + + // Match against the RegEx + if ( !preg_match("/" . $RegEx . "/", $PADFieldValue) ) + new PADValidationRegExError($this, $SpecFieldNode, $PADFieldValue); + } + + +/* + // Verify dependencies + // DRAFT - CURRENTLY NOT IMPLEMENTED + + // Program_Cost_Dollars should not be empty for non-free software types + $PADFieldValue = $PADFile->XML->GetValue("XML_DIZ_INFO/Program_Info/Program_Cost_Dollars"); + $SpecFieldNode = $this->FindFieldNode("XML_DIZ_INFO/Program_Info/Program_Cost_Dollars"); + $PADFieldValue2 = $PADFile->XML->GetValue("XML_DIZ_INFO/Program_Info/Program_Type"); + $SpecFieldNode2 = $this->FindFieldNode("XML_DIZ_INFO/Program_Info/Program_Type"); + if ( preg_match("/(Shareware|Commercial|Data Only)/", $PADFieldValue2) && + ($PADFieldValue == "") ) + new PADValidationDependencyError($this, $SpecFieldNode, $PADFieldValue, $SpecFieldNode2, $PADFieldValue2); + + // Program_Cost_Other_Code must not be empty if Program_Cost_Other is not empty + $PADFieldValue = $PADFile->XML->GetValue("XML_DIZ_INFO/Program_Info/Program_Cost_Other_Code"); + $SpecFieldNode = $this->FindFieldNode("XML_DIZ_INFO/Program_Info/Program_Cost_Other_Code"); + $PADFieldValue2 = $PADFile->XML->GetValue("XML_DIZ_INFO/Program_Info/Program_Cost_Other"); + $SpecFieldNode2 = $this->FindFieldNode("XML_DIZ_INFO/Program_Info/Program_Cost_Other"); + if ( ($PADFieldValue2 != "") && ($PADFieldValue == "") ) + new PADValidationDependencyError($this, $SpecFieldNode, $PADFieldValue, $SpecFieldNode2, $PADFieldValue2); + + // Expire_Based_On must not be empty if Expire_Count is not empty + $PADFieldValue = $PADFile->XML->GetValue("XML_DIZ_INFO/Program_Info/Expire_Info/Expire_Based_On"); + $SpecFieldNode = $this->FindFieldNode("XML_DIZ_INFO/Program_Info/Expire_Info/Expire_Based_On"); + $PADFieldValue2 = $PADFile->XML->GetValue("XML_DIZ_INFO/Program_Info/Expire_Info/Expire_Count"); + $SpecFieldNode2 = $this->FindFieldNode("XML_DIZ_INFO/Program_Info/Expire_Info/Expire_Count"); + if ( ($PADFieldValue == "") && ($PADFieldValue2 == "") ) + new PADValidationDependencyError($this, $SpecFieldNode, $PADFieldValue, $SpecFieldNode2, $PADFieldValue2); +*/ + + + // Verify URL against Application_XML_File_URL + $PADFieldValue = $PADFile->XML->GetValue("XML_DIZ_INFO/Web_Info/Application_URLs/Application_XML_File_URL"); + $SpecFieldNode = $this->FindFieldNode("XML_DIZ_INFO/Web_Info/Application_URLs/Application_XML_File_URL"); + if ( strcasecmp($PADFile->URL, $PADFieldValue) != 0 ) + new PADValidationSimpleError($this, $SpecFieldNode, $PADFieldValue, "does not match the URL you entered."); + + + // Return number of errors + return count($this->ValidationErrors); + } +} + +?> \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/pad/xmlfile.php b/oss/joomla/trunk/administrator/components/com_jdownloads/pad/xmlfile.php new file mode 100644 index 00000000..41cb6897 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/pad/xmlfile.php @@ -0,0 +1,417 @@ +Load() ) +// die "Cannot load XML. Error Code: " . $XMLFile->LastError; +// +// // Walk through the first level of the tree +// foreach($XMLFile->XML->ChildNodes as $Node) +// echo $Node->Name . " = " . $Node->Value; +// +// // Find a specific node value +// echo $XMLFile->XML->GetValue("tag1/tag2/tag3"); +// +// HISTORY +// +// 2006-08-31 PHP5 compatibility: avoid allow_call_time_pass_reference +// warning (Oliver Grahl, ASP PAD Support) +// 2006-06-20 PHP5 compatibility (Oliver Grahl, ASP PAD Support) +// 2006-02-17 LastErrorMsg: additional error message when Load() failed +// (Oliver Grahl, ASP PAD Support) +// 2004-11-11 Fixed bug with encoding conversion (Oliver Grahl, ASP PAD Support) +// 2004-10-29 Improved support for other encodings, like Windows-1252 +// (Oliver Grahl, ASP PAD Support) +// 2004-09-30 Improved UTF-8 support, added XMLFile->OutputEncoding, which +// defaults to ISO-8859-1 (Oliver Grahl, ASP PAD Support) +// 2004-08-16 Initial Release (Oliver Grahl, ASP PAD Support) +// +////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////// +// Constants +////////////////////////////////////////////////////////////////////////////// + +// Error values +define("ERR_NO_ERROR", 0); +define("ERR_NO_URL_SPECIFIED", 1); +define("ERR_READ_FROM_URL_FAILED", 2); +define("ERR_PARSE_ERROR", 3); + + +////////////////////////////////////////////////////////////////////////////// +// Classes +////////////////////////////////////////////////////////////////////////////// + +// XMLNode class +// Represents a simple XML Node with tag name, value and an array of child nodes +class XMLNode +{ + ////////////////////////////////////////////////////////////////////////////// + // Public Properties + ////////////////////////////////////////////////////////////////////////////// + + var $Name; + var $Value = ""; + var $ParentNode; + var $ChildNodes; + var $Level = 0; + + + ////////////////////////////////////////////////////////////////////////////// + // Construction + ////////////////////////////////////////////////////////////////////////////// + + // Constructor + function XMLNode($Name) + { + // Initializations + $this->Name = $Name; + $this->ChildNodes = array(); + } + + + ////////////////////////////////////////////////////////////////////////////// + // Public Methods + ////////////////////////////////////////////////////////////////////////////// + + // Set parent node + // IN: &$ParentNode - reference to the new parent node + function SetParent(&$ParentNode) + { + $this->ParentNode = &$ParentNode; + $this->Level = $this->ParentNode->Level + 1; + } + + + // Clear contents + function Clear() + { + $this->Name = ""; + $this->ChildNodes = array(); + unset($this->ParentNode); + $this->Level = 0; + } + + // Append a node + // IN: $Name - the tag name of the node to add + // RETURNS: reference to the XMLNode object that has been created + function &AppendNode($Name) + { + $node =& new XMLNode($Name); + $node->SetParent($this); + + // Do not use array_push with pass-by-reference any more to avoid + // allow_call_time_pass_reference warning (Oliver Grahl, 2006-08-31) + //array_push($this->ChildNodes, &$node); + $this->ChildNodes[] =& $node; + + return $node; + } + + // Returns the node according to the path (/-separated) + // IN: $Path - the path to the XML node, e.g. Root/Child/Name + // RETURNS: reference to the XMLNode object, NULL if node is not found + function &FindNodeByPath($Path) + { + // To make PHP5 happy, we will not return NULL, but a variable which + // has a value of NULL. + $NULL = NULL; + + $tags = explode("/", $Path); + + if ( count($tags) <= 0 ) + return $NULL; + + $node =& $this; + foreach($tags as $tag) + if ( ($tag != "") && !($node =& $node->FindNodeByName($tag)) ) + return $NULL; + + return $node; + } + + // Returns a node value according to the path (/-separated) + // IN: $Path - the path to the XML node, e.g. Root/Child/Name + // IN: $Default - value to use if node does not exists (optional) + // RETURNS: value of the node as string, empty string or default value if + // node is not found + function GetValue($Path, $Default = "") + { + $node =& $this->FindNodeByPath($Path); + if ( $node ) + return $node->Value; + else + return $Default; + } + + // Transforms XML tree to XML text + // RETURNS: the XML string + function ToString() + { + if ( $this->Level == 0 ) + { + // This is the root node, only walk through children + $out = ""; + foreach($this->ChildNodes as $node) + $out .= $node->ToString(); + } + else + { + // Print node depending of it's type + $indent = str_repeat("\t", $this->Level - 1); + + if ( count($this->ChildNodes) <= 0 ) + { + // A node without children + if ( $this->Value == "" ) + $out = $indent . "<" . $this->Name . " />\n"; + else + $out = $indent . "<" . $this->Name . ">" . $this->Value . "Name . ">\n"; + } + else + { + // A node with children + $out = $indent . "<" . $this->Name . ">" . $this->Value . "\n"; + foreach($this->ChildNodes as $node) + $out .= $node->ToString(); + $out .= $indent . "Name . ">\n"; + } + } + + return $out; + } + + // Dumps the XML text to HTML + function Dump() + { + echo "
" . htmlspecialchars($this->ToString()) . "
"; + } + + // Returns the node according to the name + // IN: $Name - the name of the XML child node, e.g. Child + // RETURNS: reference to the XMLNode object, NULL if node is not found + function &FindNodeByName($Name) + { + foreach($this->ChildNodes as $node) + if ( $node->Name == $Name ) + return $node; + + // To make PHP5 happy, we will not return NULL, but a variable which + // has a value of NULL. + $NULL = NULL; + return $NULL; + } +} + + +// XMLFile class +// Represents the XML file read from URL (URL or local file). +// Parses the XML into a tree of XMLNode objects (property XML). +class XMLFile +{ + ////////////////////////////////////////////////////////////////////////////// + // Public Properties + ////////////////////////////////////////////////////////////////////////////// + + var $URL = ""; + var $XML; + var $ParseError = ""; + var $LastError = ERR_NO_ERROR; + var $LastErrorMsg = ""; + var $OutputEncoding = "ISO-8859-1"; + + ////////////////////////////////////////////////////////////////////////////// + // Private Properties - DO NOT CALL FROM EXTERNAL + ////////////////////////////////////////////////////////////////////////////// + + var $_CurrentNode; + + + ////////////////////////////////////////////////////////////////////////////// + // Construction + ////////////////////////////////////////////////////////////////////////////// + + // Constructor + // IN: $URL - the URL or local path of the XML file (optional) + function XMLFile($URL = "") + { + // Initializations + $this->URL = $URL; + $this->XML = new XMLNode("[root]"); + } + + + ////////////////////////////////////////////////////////////////////////////// + // Public Methods + ////////////////////////////////////////////////////////////////////////////// + + // Load file from URL + // RETURNS: true - Success (LastError is ERR_NO_ERROR) + // false - Failure (see LastError, LastErrorMsg) + function Load() + { + $this->LastErrorMsg = ""; + + // Check if URL exists + if ( $this->URL == "" ) + { + $this->LastError = ERR_NO_URL_SPECIFIED; + return false; + } + + // Set track_errors, so that $php_errormsg can be used + // (possibly this will fail if PHP is running in SAFE MODE) + ini_set('track_errors', true); + + // Read in file (line by line) + $raw = @file($this->URL); + if ( !$raw ) + { + $this->LastError = ERR_READ_FROM_URL_FAILED; + if (isset($php_errormsg)) + { + $this->LastErrorMsg = trim($php_errormsg); + if ($this->LastErrorMsg == "failed to open stream: No error") + $this->LastErrorMsg = "Unknown host"; + } + return false; + } + + // Merge array of lines into one long string + $raw = implode("", $raw); + + // Remove Byte-Order-Mark (BOM) if existing + // (required to avoid problems on some PHP versions) + // UNCOMMENT THIS LINE IF YOU HAVE PROBLEMS WITH PAD FILES WITH A BOM + // $raw = substr($raw, strpos($raw, "<")); + + // Parse the raw XML into Nodes + if ( !$this->Parse($raw) ) + { + $this->LastError = ERR_PARSE_ERROR; + return false; + } + + // Succeeded + $this->LastError = ERR_NO_ERROR; + return true; + } + + // Read from XML + // IN: $Raw - the XML string + // RETURNS: true - Success + // false - Failure (see ParseError) + function Parse($Raw) + { + // Inits + $this->ParseError = ""; + $this->XML->Clear(); + $this->_CurrentNode =& $this->XML; + + // Look up the XML encoding + if ( preg_match("/<\?xml [^>]*encoding=['\"](.*?)['\"][^>]*>.*/", $Raw, $m) ) + $encoding = strtoupper($m[1]); + else + $encoding = "UTF-8"; + + // If the encoding is not natively supported by the PHP XML parser, try to + // decode on our own (to UTF-8), if decoding is not possible, assume UTF-8, + // which is the XML default. + if ( ($encoding != "UTF-8") && ($encoding != "US-ASCII") && ($encoding != "ISO-8859-1") ) + { + $encoding = ""; + if ( function_exists("mb_convert_encoding") ) + { + $encoded_source = @mb_convert_encoding($Raw, "UTF-8", $encoding); + if ( $encoded_source != NULL ) + { + $Raw = str_replace($m[0], "", $encoded_source); + $encoding = "UTF-8"; + } + } + } + + // Create and initialize parser + $xml_parser = xml_parser_create($encoding); + xml_parser_set_option($xml_parser, XML_OPTION_TARGET_ENCODING, $this->OutputEncoding); + xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); + // Do not pass by reference (&$this) any more to avoid + // allow_call_time_pass_reference warning (Oliver Grahl, 2006-08-31) + xml_set_object($xml_parser, $this); + xml_set_element_handler($xml_parser, "_StartElement", "_EndElement"); + xml_set_character_data_handler($xml_parser, "_CharacterData"); + + // Parse + if ( !xml_parse($xml_parser, $Raw, true) ) + { + // Save parse error and free parser + $this->ParseError = sprintf("%s at line %d", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser)); + xml_parser_free($xml_parser); + unset($this->_CurrentNode); + return false; + } + + // Free parser + xml_parser_free($xml_parser); + unset($this->_CurrentNode); + + return true; + } + + + ////////////////////////////////////////////////////////////////////////////// + // Private methods - DO NOT CALL FROM EXTERNAL + ////////////////////////////////////////////////////////////////////////////// + + // XML Parser: Node start + function _StartElement($parser, $name, $attrs) { + $this->_CurrentNode =& $this->_CurrentNode->AppendNode($name); + } + + // XML Parser: Node end + function _EndElement($parser, $name) { + $this->_CurrentNode->Value = trim($this->_CurrentNode->Value); + $this->_CurrentNode =& $this->_CurrentNode->ParentNode; + } + + // XML Parser: Node value + function _CharacterData($parser, $data) { + $this->_CurrentNode->Value .= $data; + } +} + +?> \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/style.css b/oss/joomla/trunk/administrator/components/com_jdownloads/style.css new file mode 100644 index 00000000..aa571545 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/style.css @@ -0,0 +1,33 @@ + +.icon-48-jdlogo { + background-image: url(../com_jdownloads/images/jd_logo_48.png); +} + +.adminheading { + background: #F0F0F0; + padding-left: 5px; + color: #993300; + font: 108%; +} + +table.jdadminpanel { + background-color: #FFF; + font-family : Arial, Helvetica, sans-serif; + margin: 0px; + padding: 0px; + border: 0px; + width: 100%; + border-collapse: collapse; + color: #C64934; + font-size : 18px; + font-weight: bold; + text-align: left; +} +table.jdadminpanel th { + background: none; + text-align: left; + height: 50px; + width: 99%; + padding-left: 10px; + border-bottom: 5px solid #fff; +} \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/toolbar.jdownloads.html.php b/oss/joomla/trunk/administrator/components/com_jdownloads/toolbar.jdownloads.html.php new file mode 100644 index 00000000..aedcf45a --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/toolbar.jdownloads.html.php @@ -0,0 +1,182 @@ + + * + * GNU GENERAL PUBLIC LICENSE + * + * ---------------------------------------------------------------------------------- + */ + +defined( '_JEXEC' ) or die( 'Restricted access' ); + +class menujlist { + function _DEFAULT(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_CPANEL_MAIN'), 'jdlogo' ); + } + + function EDIT_MENU(){ + JToolBarHelper::title( JText::_(''), 'jdlogo' ); + JToolBarHelper::save(); + JToolBarHelper::cancel(); + } + + function SETTINGS_MENU(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_CPANEL_SETTINGS'), 'jdlogo' ); + JToolBarHelper::save('config.save'); + JToolBarHelper::cancel('cancel',JText::_('JLIST_BACKEND_TOOLBAR_CLOSE')); + } + + function CATEGORIES_LIST(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_CPANEL_CATEGORIES'), 'jdlogo' ); + JToolBarHelper::addNew('categories.edit'); + JToolBarHelper::publish('categories.publish'); + JToolBarHelper::unpublish('categories.unpublish'); + JToolBarHelper::deleteList(JText::_('JLIST_BACKEND_CATSLIST_DEL_QUEST'),'categories.delete'); + } + + function CATEGORIES_ADD(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_CATSEDIT_TITLE'), 'jdlogo' ); + JToolBarHelper::save('categories.save'); + JToolBarHelper::apply('categories.apply'); + JToolBarHelper::cancel('categories.cancel'); + } + + function FILES_LIST(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_CPANEL_FILES'), 'jdlogo' ); + JToolBarHelper::addNew('files.edit'); + JToolBarHelper::custom( 'files.copy', 'copy.png', 'copy_f2.png', 'Copy', false ); + JToolBarHelper::publish('files.publish'); + JToolBarHelper::unpublish('files.unpublish'); + JToolBarHelper::deleteList(JText::_('JLIST_BACKEND_FILESLIST_DEL_QUEST'),'files.delete'); + } + + function FILES_EDIT(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_FILESEDIT_TITLE'), 'jdlogo' ); + JToolBarHelper::save('files.save'); + JToolBarHelper::apply('files.apply'); + JToolBarHelper::cancel('files.cancel'); + } + + function FILES_COPY(){ + JToolBarHelper::title( JText::_(''), 'jdlogo' ); + JToolBarHelper::save('files.copy.save'); + JToolBarHelper::cancel('files.list'); + } + + function LICENSE_LIST(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_CPANEL_LICENSE'), 'jdlogo' ); + JToolBarHelper::addNew('license.edit'); + JToolBarHelper::deleteList(JText::_('JLIST_BACKEND_LICLIST_DEL_QUEST'),'license.delete'); + } + + function LICENSE_EDIT(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_LICEDIT_TITLE'), 'jdlogo' ); + JToolBarHelper::save('license.save'); + JToolBarHelper::cancel('license.cancel'); + } + + function TEMPLATES_MENU(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_CPANEL_TEMPLATES_NAME'), 'jdlogo' ); + } + + function TEMPLATES_LIST_CATS(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_TEMPLIST_CATTITLE_HEAD'), 'jdlogo' ); + JToolBarHelper::custom( 'templates.active.cats', 'apply.png', 'apply_f2.png', JText::_('JLIST_BACKEND_TEMPLIST_MENU_TEXT_ACTIVE'), true ); + JToolBarHelper::addNew('templates.edit.cats'); + JToolBarHelper::deleteList(JText::_('JLIST_BACKEND_TEMPLIST_DEL_QUEST'),'templates.delete.cats'); + } + + function TEMPLATES_EDIT_CATS(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_TEMPEDIT_CATTITLE'), 'jdlogo' ); + JToolBarHelper::save('templates.save.cats'); + JToolBarHelper::apply('templates.apply.cats'); + JToolBarHelper::cancel('templates.cancel.cats'); + } + + function TEMPLATES_LIST_FILES(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_TEMPLIST_FILESTITLE_HEAD'), 'jdlogo' ); + JToolBarHelper::custom( 'templates.active.files', 'apply.png', 'apply_f2.png', JText::_('JLIST_BACKEND_TEMPLIST_MENU_TEXT_ACTIVE'), true ); + JToolBarHelper::addNew('templates.edit.files'); + JToolBarHelper::deleteList(JText::_('JLIST_BACKEND_TEMPLIST_DEL'),'templates.delete.files'); + } + + function TEMPLATES_EDIT_FILES(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_TEMPEDIT_FILESTITLE'), 'jdlogo' ); + JToolBarHelper::save('templates.save.files'); + JToolBarHelper::apply('templates.apply.files'); + JToolBarHelper::cancel('templates.cancel.files'); + } + + function TEMPLATES_LIST_DETAILS(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_TEMPLIST_DETAILSTITLE_HEAD'), 'jdlogo' ); + JToolBarHelper::custom( 'templates.active.details', 'apply.png', 'apply_f2.png', JText::_('JLIST_BACKEND_TEMPLIST_MENU_TEXT_ACTIVE'), true ); + JToolBarHelper::addNew('templates.edit.details'); + JToolBarHelper::deleteList(JText::_('JLIST_BACKEND_TEMPLIST_DEL'),'templates.delete.details'); + } + + function TEMPLATES_EDIT_DETAILS(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_TEMPEDIT_DETAILSTITLE'), 'jdlogo' ); + JToolBarHelper::save('templates.save.details'); + JToolBarHelper::apply('templates.apply.details'); + JToolBarHelper::cancel('templates.cancel.details'); + } + + function TEMPLATES_LIST_SUMMARY(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_TEMPLIST_SUMTITLE_HEAD'), 'jdlogo' ); + JToolBarHelper::custom( 'templates.active.summary', 'apply.png', 'apply_f2.png', JText::_('JLIST_BACKEND_TEMPLIST_MENU_TEXT_ACTIVE'), true ); + JToolBarHelper::addNew('templates.edit.summary'); + JToolBarHelper::deleteList(JText::_('JLIST_BACKEND_TEMPLIST_DEL'),'templates.delete.summary'); + } + + function TEMPLATES_EDIT_SUMMARY(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_TEMPEDIT_SUMTITLE'), 'jdlogo' ); + JToolBarHelper::save('templates.save.summary'); + JToolBarHelper::apply('templates.apply.summary'); + JToolBarHelper::cancel('templates.cancel.summary'); + } + + function CSS_EDIT(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_EDIT_CSS_TITLE_EDIT'), 'jdlogo' ); + JToolBarHelper::save('css.save'); + JToolBarHelper::cancel('templates.menu'); + } + + function LANG_EDIT(){ + JToolBarHelper::title( JText::_(''), 'jdlogo' ); + JToolBarHelper::save('language.save'); + JToolBarHelper::cancel('templates.menu'); + } + + function RESTORE_MENU(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_CPANEL_RESTORE'), 'jdlogo' ); + } + + function INFO_MENU(){ + JToolBarHelper::title( JText::_('JLIST_BACKEND_CPANEL_INFO'), 'jdlogo' ); + } + +} + +?> \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/toolbar.jdownloads.php b/oss/joomla/trunk/administrator/components/com_jdownloads/toolbar.jdownloads.php new file mode 100644 index 00000000..7dd2c05e --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/toolbar.jdownloads.php @@ -0,0 +1,132 @@ + + * + * GNU GENERAL PUBLIC LICENSE + * + * ---------------------------------------------------------------------------------- + */ + +defined( '_JEXEC' ) or die( 'Restricted access' ); +require_once( $mainframe->getPath( 'toolbar_html' ) ); + +switch ( $task ) { + + case "new": + case "edit": + case "editA": + case "copy": + menujlist::EDIT_MENU(); + break; + + case "categories.list": + menujlist::CATEGORIES_LIST(); + break; + + case "categories.edit": + menujlist::CATEGORIES_ADD(); + break; + + case "files.list": + menujlist::FILES_LIST(); + break; + + case "files.edit": + menujlist::FILES_EDIT(); + break; + + case "files.copy": + menujlist::FILES_COPY(); + break; + + case "license.list": + menujlist::LICENSE_LIST(); + break; + + case "license.edit": + menujlist::LICENSE_EDIT(); + break; + + case "templates.menu": + menujlist::TEMPLATES_MENU(); + break; + + case "templates.list.cats": + menujlist::TEMPLATES_LIST_CATS(); + break; + + case "templates.edit.cats": + menujlist::TEMPLATES_EDIT_CATS(); + break; + + case "templates.list.files": + menujlist::TEMPLATES_LIST_FILES(); + break; + + case "templates.edit.files": + menujlist::TEMPLATES_EDIT_FILES(); + break; + + case "templates.list.details": + menujlist::TEMPLATES_LIST_DETAILS(); + break; + + case "templates.edit.details": + menujlist::TEMPLATES_EDIT_DETAILS(); + break; + + case "templates.list.summary": + menujlist::TEMPLATES_LIST_SUMMARY(); + break; + + case "templates.edit.summary": + menujlist::TEMPLATES_EDIT_SUMMARY(); + break; + + case "css.edit": + menujlist::CSS_EDIT(); + break; + + case "language.edit": + menujlist::LANG_EDIT(); + break; + + case "config.show": + menujlist::SETTINGS_MENU(); + break; + + case "restore": + menujlist::RESTORE_MENU(); + break; + + case "info": + menujlist::INFO_MENU(); + break; + + default: + menujlist::_DEFAULT(); + break; + } +?> \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/uninstall.jdownloads.php b/oss/joomla/trunk/administrator/components/com_jdownloads/uninstall.jdownloads.php new file mode 100644 index 00000000..42793731 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/uninstall.jdownloads.php @@ -0,0 +1,48 @@ + + * + * GNU GENERAL PUBLIC LICENSE + * + * ---------------------------------------------------------------------------------- + */ + +defined( '_JEXEC' ) or die( 'Restricted access' ); + +/** + * + * @return unknown_type + */ +function com_uninstall() { + + $msg = ''; + $msg = '

下载目录和子目录内容未被卸载!

' + .'

文件夹 images/jdownloads/ 未被卸载!

' + .'

' + .'

如有必要,请手工删除JDownloads相关的数据表。

' + .'

否则,你仅可安装更新版本。

'; + echo $msg; +} +?> \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_languages/admin.languages.html.php b/oss/joomla/trunk/administrator/components/com_languages/admin.languages.html.php new file mode 100644 index 00000000..a5c8c234 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_languages/admin.languages.html.php @@ -0,0 +1,157 @@ + +
+ + +
+ + + + + +

message); ?>

+ + + + + + + + + + + + + +
+ + + +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + "> + + + + + + + + + + + +
+ + +   + + + + + + + + + + + + +
+ getListFooter(); ?> +
+ getRowOffset( $i ); ?> + + + + name;?> + + published == 1) { ?> + <?php echo JText::_( 'Default' ); ?> + +   + + + version; ?> + + creationdate; ?> + + author; ?> + + authorEmail; ?> +
+ + + + + + +
+ authorize( 'com_languages', 'manage' )) { + $mainframe->redirect( 'index.php', JText::_('ALERTNOTAUTH') ); +} + +require_once( JApplicationHelper::getPath( 'admin_html' ) ); + +$task = strtolower( JRequest::getCmd( 'task' ) ); +$cid = JRequest::getVar( 'cid', array(0), '', 'array' ); +$cid = array(JFilterInput::clean(@$cid[0], 'cmd')); + +$client = JRequest::getVar('client', 0, '', 'int'); +if ($client == 1) { + JSubMenuHelper::addEntry(JText::_('Site'),'#" onclick="javascript:document.adminForm.client.value=\'0\';submitbutton(\'\');'); + JSubMenuHelper::addEntry(JText::_('Administrator'), '#" onclick="javascript:document.adminForm.client.value=\'1\';submitbutton(\'\');', true ); +} else { + JSubMenuHelper::addEntry(JText::_('Site'), '#" onclick="javascript:document.adminForm.client.value=\'0\';submitbutton(\'\');', true ); + JSubMenuHelper::addEntry(JText::_('Administrator'), '#" onclick="javascript:document.adminForm.client.value=\'1\';submitbutton(\'\');'); +} + +switch ($task) +{ + case 'publish': + publishLanguage( $cid[0]); + break; + + default: + viewLanguages(); + break; +} + +/** +* Compiles a list of installed languages +*/ +function viewLanguages() +{ + global $mainframe, $option; + + // Initialize some variables + $db =& JFactory::getDBO(); + $client =& JApplicationHelper::getClientInfo(JRequest::getVar('client', '0', '', 'int')); + $rows = array (); + + $limit = $mainframe->getUserStateFromRequest( 'global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int' ); + $limitstart = $mainframe->getUserStateFromRequest( $option.'.limitstart', 'limitstart', 0, 'int' ); + + $rowid = 0; + + // Set FTP credentials, if given + jimport('joomla.client.helper'); + $ftp =& JClientHelper::setCredentialsFromRequest('ftp'); + + //load folder filesystem class + jimport('joomla.filesystem.folder'); + $path = JLanguage::getLanguagePath($client->path); + $dirs = JFolder::folders( $path ); + + foreach ($dirs as $dir) + { + $files = JFolder::files( $path.DS.$dir, '^([-_A-Za-z]*)\.xml$' ); + foreach ($files as $file) + { + $data = JApplicationHelper::parseXMLLangMetaFile($path.DS.$dir.DS.$file); + + $row = new StdClass(); + $row->id = $rowid; + $row->language = substr($file,0,-4); + + if (!is_array($data)) { + continue; + } + foreach($data as $key => $value) { + $row->$key = $value; + } + + // if current than set published + $params = JComponentHelper::getParams('com_languages'); + if ( $params->get($client->name, 'en-GB') == $row->language) { + $row->published = 1; + } else { + $row->published = 0; + } + + $row->checked_out = 0; + $row->mosname = JString::strtolower( str_replace( " ", "_", $row->name ) ); + $rows[] = $row; + $rowid++; + } + } + + + jimport('joomla.html.pagination'); + $pageNav = new JPagination( $rowid, $limitstart, $limit ); + + $rows = array_slice( $rows, $pageNav->limitstart, $pageNav->limit ); + + HTML_languages::showLanguages( $rows, $pageNav, $option, $client, $ftp ); +} + +/** +* Publish, or make current, the selected language +*/ +function publishLanguage( $language ) +{ + global $mainframe; + + // Check for request forgeries + JRequest::checkToken() or jexit( 'Invalid Token' ); + + // Initialize some variables + $client =& JApplicationHelper::getClientInfo(JRequest::getVar('client', '0', '', 'int')); + + $params = JComponentHelper::getParams('com_languages'); + $params->set($client->name, $language); + + $table =& JTable::getInstance('component'); + $table->loadByOption( 'com_languages' ); + + $table->params = $params->toString(); + + // pre-save checks + if (!$table->check()) { + JError::raiseWarning( 500, $table->getError() ); + return false; + } + + // save the changes + if (!$table->store()) { + JError::raiseWarning( 500, $table->getError() ); + return false; + } + + $mainframe->redirect('index.php?option=com_languages&client='.$client->id); +} \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_languages/index.html b/oss/joomla/trunk/administrator/components/com_languages/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_languages/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_languages/languages.xml b/oss/joomla/trunk/administrator/components/com_languages/languages.xml new file mode 100644 index 00000000..09761c60 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_languages/languages.xml @@ -0,0 +1,12 @@ + + + Language Manager + Joomla! Project + 2006 + Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. + http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + admin@joomla.org + www.joomla.org + 1.5.0 + Language Manager + diff --git a/oss/joomla/trunk/administrator/components/com_languages/toolbar.languages.html.php b/oss/joomla/trunk/administrator/components/com_languages/toolbar.languages.html.php new file mode 100644 index 00000000..fb14b3fc --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_languages/toolbar.languages.html.php @@ -0,0 +1,30 @@ + 'rounded', 'id' => 'section-box')); + echo $module; + } + + function login() + { + global $mainframe; + + // Check for request forgeries + JRequest::checkToken('request') or jexit( 'Invalid Token' ); + + $credentials = array(); + + $credentials['username'] = JRequest::getVar('username', '', 'method', 'username'); + $credentials['password'] = JRequest::getVar('passwd', '', 'post', 'string', JREQUEST_ALLOWRAW); + + $result = $mainframe->login($credentials); + + if (!JError::isError($result)) { + $mainframe->redirect('index.php'); + } + + LoginController::display(); + } + + function logout() + { + global $mainframe; + + $result = $mainframe->logout(); + + if (!JError::isError($result)) { + $mainframe->redirect('index.php?option=com_login'); + } + + LoginController::display(); + } +} diff --git a/oss/joomla/trunk/administrator/components/com_login/index.html b/oss/joomla/trunk/administrator/components/com_login/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_login/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_massmail/admin.massmail.html.php b/oss/joomla/trunk/administrator/components/com_massmail/admin.massmail.html.php new file mode 100644 index 00000000..6f6edc00 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_massmail/admin.massmail.html.php @@ -0,0 +1,139 @@ + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + +
+ +
+ + + +
+
+
+ +
+
+ + + + + + + + + + + +
+ + + +
+ + + +
+
+
+
+ + + + +
+ authorize( 'com_massmail', 'manage' )) { + $mainframe->redirect( 'index.php', JText::_('ALERTNOTAUTH') ); +} + +require_once( JApplicationHelper::getPath( 'admin_html' ) ); + +switch ($task) +{ + case 'send': + sendMail(); + break; + + case 'cancel': + $mainframe->redirect( 'index.php' ); + break; + + default: + messageForm( $option ); + break; +} + +function messageForm( $option ) +{ + $acl =& JFactory::getACL(); + + $gtree = array( + JHTML::_('select.option', 0, '- '. JText::_( 'All User Groups' ) .' -' ) + ); + + // get list of groups + $lists = array(); + $gtree = array_merge( $gtree, $acl->get_group_children_tree( null, 'users', false ) ); + $lists['gid'] = JHTML::_('select.genericlist', $gtree, 'mm_group', 'size="10"', 'value', 'text', 0 ); + + HTML_massmail::messageForm( $lists, $option ); +} + +function sendMail() +{ + global $mainframe; + + // Check for request forgeries + JRequest::checkToken() or jexit( 'Invalid Token' ); + + $db =& JFactory::getDBO(); + $user =& JFactory::getUser(); + $acl =& JFactory::getACL(); + + $mode = JRequest::getVar( 'mm_mode', 0, 'post', 'int' ); + $subject = JRequest::getVar( 'mm_subject', '', 'post', 'string' ); + $gou = JRequest::getVar( 'mm_group', '0', 'post', 'int' ); + $recurse = JRequest::getVar( 'mm_recurse', 'NO_RECURSE', 'post', 'word' ); + $bcc = JRequest::getVar( 'mm_bcc', 0, 'post', 'int' ); + + // pulls message inoformation either in text or html format + if ( $mode ) { + $message_body = JRequest::getVar( 'mm_message', '', 'post', 'string', JREQUEST_ALLOWRAW ); + } else { + // automatically removes html formatting + $message_body = JRequest::getVar( 'mm_message', '', 'post', 'string' ); + } + + // Check for a message body and subject + if (!$message_body || !$subject) { + $mainframe->redirect( 'index.php?option=com_massmail', JText::_( 'Please fill in the form correctly' ) ); + } + + // get users in the group out of the acl + $to = $acl->get_group_objects( $gou, 'ARO', $recurse ); + JArrayHelper::toInteger($to['users']); + + // Get sending email address + /* + $query = 'SELECT email' + . ' FROM #__users' + . ' WHERE id = '.(int) $user->get('id') + ; + $db->setQuery( $query ); + $user->set( 'email', $db->loadResult() ); + */ + + // Get all users email and group except for senders + $query = 'SELECT email' + . ' FROM #__users' + . ' WHERE id != '.(int) $user->get('id') + . ( $gou !== 0 ? ' AND id IN (' . implode( ',', $to['users'] ) . ')' : '' ) + ; + + $db->setQuery( $query ); + $rows = $db->loadObjectList(); + + // Check to see if there are any users in this group before we continue + if ( ! count($rows) ) { + $msg = JText::_('No users could be found in this group.'); + $mainframe->redirect( 'index.php?option=com_massmail', $msg ); + } + + $mailer =& JFactory::getMailer(); + $params =& JComponentHelper::getParams( 'com_massmail' ); + + // Build e-mail message format + $mailer->setSender(array($mainframe->getCfg('mailfrom'), $mainframe->getCfg('fromname'))); + $mailer->setSubject($params->get('mailSubjectPrefix') . stripslashes( $subject)); + $mailer->setBody($message_body . $params->get('mailBodySuffix')); + $mailer->IsHTML($mode); + + // Add recipients + + if ( $bcc ) { + foreach ($rows as $row) { + $mailer->addBCC($row->email); + } + $mailer->addRecipient($mainframe->getCfg('mailfrom')); + }else { + foreach ($rows as $row) { + $mailer->addRecipient($row->email); + } + } + + // Send the Mail + $rs = $mailer->Send(); + + // Check for an error + if ( JError::isError($rs) ) { + $msg = $rs->getError(); + } else { + $msg = $rs ? JText::sprintf( 'E-mail sent to', count( $rows ) ) : JText::_('The mail could not be sent'); + } + + // Redirect with the message + $mainframe->redirect( 'index.php?option=com_massmail', $msg ); + +} diff --git a/oss/joomla/trunk/administrator/components/com_massmail/config.xml b/oss/joomla/trunk/administrator/components/com_massmail/config.xml new file mode 100644 index 00000000..db4e82cb --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_massmail/config.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_massmail/index.html b/oss/joomla/trunk/administrator/components/com_massmail/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_massmail/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_massmail/massmail.xml b/oss/joomla/trunk/administrator/components/com_massmail/massmail.xml new file mode 100644 index 00000000..40cca433 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_massmail/massmail.xml @@ -0,0 +1,12 @@ + + + Mass Mail + Joomla! Project + April 2006 + Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. + http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + admin@joomla.org + www.joomla.org + 1.5.0 + DESCMASSMAIL + diff --git a/oss/joomla/trunk/administrator/components/com_massmail/toolbar.massmail.html.php b/oss/joomla/trunk/administrator/components/com_massmail/toolbar.massmail.html.php new file mode 100644 index 00000000..d89f2263 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_massmail/toolbar.massmail.html.php @@ -0,0 +1,35 @@ +

EZ{6D=t3djF4^vBYZlTjkkXW1| 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 F{0~z@P__U7 literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/langmanager.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/langmanager.png new file mode 100644 index 0000000000000000000000000000000000000000..aff84712314e617a29e7df8503bef15ec74f4585 GIT binary patch literal 1852 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 L-5e?}`=|Z`SfQTT literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/licenses.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/licenses.png new file mode 100644 index 0000000000000000000000000000000000000000..03d7923c5b341abdd80c3bc324ad9d7dd4e63efb GIT binary patch literal 1705 zcmc&!`#;l*AO0B5)Z*1COelRx#_4-VoZ~Vl4#T=2mt2o8F>{-0XKqDXbD1H>$h09s zXlOKRl-oE<`0C=iuLlpF%*je9Kx?&K^;e8LeVHsRA_ke^?no_02Bxw z7rYUyN93f$q-_y@cXu}zXEHo8Haf%<%r9(?Ao|#GeGE%uL;cD3(-MgUjf$wF`WBNs z2Kooq`It`=l$RaF1%-Dhk-vrsLydLtAHkuJzj%PSr2&!tPaZ)?>I1|tz=F5cQ|qZ!Y95coN3PV-;% z^$*2{AzLagPtANl`&-mEG*xCXOn>Kd6%EGn(+ z{)6iExhl@Hj+I&F(#K`i;4N_)iZOubW9QKdEfZyPD*Rk>C>da4nVY9A7c zl1arIA`yq(Tuh~w&{1OJ}Hd|KkYBZ4F?0w@SGo^QykjbMlJgFzw?;Pku45Fe>x7P&zRDt0|v(~ME+6Qaq6mT@s zcX{!~nLgp_F3nK*S)dz3^T%&1i0|@N?Vr6OJ z%Dw`v*AA`v9&O1q(bbULQ~9R3*Yp(?c-VuFV)+@I-P^R8dcaoKl* zf!;?jafY&^6#F&68Y~mCczV*cY+ETv@@fiX0x5lGfC7%+aXfD;I{8`I+dY3{-{1Aw z1HAb4;uay=8gm7fWlN5X@o%&M5?Bv2!oaXzwLA+w0pc{q%eXUG(;1eevT;-$mRGDC zmwtxU8&y-kANN+L%`k1y$l&2lI*$Ur^=6pJJ+uqWU&YB>z@I5jW#T7Fr&|ylH zmYVKDXbEhx5P}_ns z*IRH?-QMPxpId6hrhNdqVJsl;(7dWruF7&kbkqe~O`2){VQvk{WU#Eh>PMs)YZeB< zb1Z-FLgiROKb|YGVGuTgAxyk=89V6KhR!hC6BbN_u?4FIQEA*?S*)!s_J4$9F~$xy z8P0x3MQ)f|J@iMqH&KtnJiQ4z0WOuhha0q)o)_*P5x@0Fzb?IY{s4C zt7(=nEpPF2`A4K(l8+JR!B$UmH zcEt3cUtoxmVdElFZZ1`oVm)uFnmOBfe$iQQq0u6RmiF%ha^bpiRqu&sKJ`BKQ*t>A g2;wvCcA0=8V7Lb7M_jX^?M)egM7TLU{yl{F52Ll00RR91 literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_active.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_active.png new file mode 100644 index 0000000000000000000000000000000000000000..41f443cd0093f628d6172c2693aa300ce3337256 GIT binary patch literal 1810 zcmc&!={MVn0*$36%y{*TH~LboDq7WQqdaZVlvrcmN{ZSkQ6(BpRBEf*qO~tk+nA_* z8&ax-YJy-!iqib!MojrUi)d(OT0+>iI%b8d!{gO$7-L=FT3$s?@IU5*_3 zKZ2!>)Q=@gKC*vfERY!2$Pf(HKROs>8Wb52dY^XmYGf0)s{ClCm-JNNl~KGb#QzsrD0AXmd`I{DQ;gTWYD z2T~fus28H0T>x>PFAxD=HVzv<0{*ERNc=jHNK`YQc8*yk5D4Q(SUQX=-_}RYv6c^M z^S~9S2{M@s000{Rf-{6O^WRaq>+|#TP7hb~oN2d^JuTFIBji{g6Ns%?t*NOI0RSR` zLuLRp8qFn|m*277GjTA+5QRs@dj#g?k`GYW#%rFe*vE;U(H}czMNQ2e4^r3;zQ5&E zv0pUrmN)W~3g*f?x037Da~n3?A{o>V!l3le(M8LKZf`58o0Y!{28I_pY1{lSo4z<^ zcJV8VUm3WKW)c6i3K+Eyol36RMn+KD-YztJ5Ru=EKg%YgQ$Kb0 zj^@;^5pqbyrKGBQdRP>}A>@6{_< z^>NG|hs{h<%fWw-3z1axW&=j?#uH_F_fi!sTtq_`%LpJ3kp8%$gG!p3h8On zl+!Ed^7K`hiwGEhDCK|r+sXXhsQ3mh<~0_}WNYkR9ol(DBjKhO)1-~S6*~_M$&C$n zvijfd4!SQ~%>4 z#H2`}97sU-jSHUTk>JWU_oK~`RD9#LN>hots?IIK!*lr=2GX)CnkOQxdTW=3Wgdb{ zK3wGyH^lFf+V3u(_zT(8M_m@|r#Qww?$s7=e4jt|oc?WpD4p4q#**s^)J(96&7X`{ zEbTncZ$v(N>m?!OAg9rAW3vAO+W;&%7eB0Pv{28Ke_j%H?Iy<+rq)Yy5q!IA4K`?} z>+a=tsWUA9+ICvuErCai3u=u{gJIsKI#91OohSHbuypTU=$IvG>cU%lgrQyI2B6c2^yif%bO2MHJ`-R}^*LQw4yvhtMtL(e_=6HR9`g&Vu8tw}?wNu8! zjHxWR*yCrr)Vl;TF$~N+PFk>Sw6Wwr+*>Tm5I#r9-wj=EhH- zyaGSbjHhH&D$rt!$!v94;GH#y*g*>-#p*$7c4cX(VyTNOneRX9a)U@vSIUM0ah)4qE~d0x7^{f|P$(>Cb13o>IJ zt-axGtQo5BMP|*yb-H+Qr$3zchgfoNcT85RMVv7kb=^|2qPzr)UTfuqU~0KvYc|SK c_pc0qdSVG5DeeA+N9PGbSU8xs!2Oc{1^~nPfB*mh literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_backup.gif b/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_backup.gif new file mode 100644 index 0000000000000000000000000000000000000000..bb4cd018e57f14647d2f2ee98c7a42007cc6256f GIT binary patch literal 583 zcmZ?wbhEHb6krfwc;?PfoRj!$g2JmQO7CZCe4eBIZK2`sB}V^NnEhX4^?!rio(l0I zFOj#?)xOQw{lC@mTA${}>55-wsr=vV^k#|i#8CF{bJhPY*7?6&uP09S-#+(s$xMG2 zs{LPWB*eq=e~Z<>(_wpZSboh_`oC0jZ@cRM!(L~~IsPwF`M+BG|9buZyRH8pu={`5 z`TueE{}=qOUA=g-S@{17wf{TJ{-5?8h#WR!A4c5$S`@cl-|7L^FpFe;5_U-qt zUw{Ap{r~^}+O=zEOzwX0;K8wDhu5uJw|@QlHEY(aSh2jPy8|f8FhqdjPZq`(%^`W_>k-^U8*r zSB!Lxn@j`@Zfo4Ttn<*c$;|wP#j7{Ex*|;smR8m_w*MLa{}lMb+;Om(gO^QFV@cv+ aMLt;}!H|}Yqumm{0)|N|lovWMSOWlozq&*K literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_categories.gif b/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_categories.gif new file mode 100644 index 0000000000000000000000000000000000000000..e9f3674de5d91f07c779f67e6b9f88e78b995a93 GIT binary patch literal 650 zcmZ?wbhEHb6krfwcoxF&=Hs7_-~N65_5bmQ|F>WNyZ!9f?MGirR{!hX^MA+ne^*}p zKmY9i!sGuMxBSbP|1+rlg;UAxoW+0YHva9~`+x3i{a%|qM#>$#IJ zb*_GzF#U7ox__f z-;&e+CQM!8-}0eKkdBJ;9q#l7Q?{%^YS-?8X=Z1c6$Ip6yZ{BGFs zT`%smU-h+!-nYAV?{dh!u;<`ujqszb?GxrLSo;6}e};huia%KxUoeL-=ztsoiW3I* z=M5nt42+CS?Tie}EUauzP3#<;TwL6oJiL7T0{skvLc$`8ctpj-B_ySqq-6wUc}3-9 z1!ZQ-D>U&aiYO`XQxQ?zw53T^PEA@}UE_?Jnv|wileUhos-C`qp^>qPzNuN0kiPj- za|=r=PHPJr+a^0LS$pNF*1QgmP72OV`m!n|0*Z?kpXlS1jk7UOTG7hN$>GwW@Nw}W zMt1Qk4#5(Z&em|bNg6v>JUTc*wP}V445xE=Zo0iNP8G1&I2X literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_config.gif b/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_config.gif new file mode 100644 index 0000000000000000000000000000000000000000..608c79eefb3e17d9f64b50d18ebf74c2d72c3d08 GIT binary patch literal 353 zcmZ?wbhEHb6krfwxN6C8{o1wj=gwU?f8odXAALPNCypO4Dk%N?_wUOWFW$U-{8tb5^^j zFW>(7e&E1b28I<)D;PLS-zz9QWMO&OP@mm=ol)cVPDaLefq{%tr-U=!eN9jQ`{~o3 zBQF{GrYhEdI6HCT*YfhuUw<=-Y<3Rb-!CdUYsF(W-!~j;>%%sDTA!Eq|Nnmm450Xv zh4BTmC4&w~2IMCOwz>l{3hp{$%uJ6P5_H6v*d8-Z%+L~Rm0?cI3F+oM&McJqY>#V8 zij$%6MbS3Zj|IZ|GkVk#^z$rapcRisqa6jj;Ndek*sWHl9KwcNCI s)OEF8^knttOtCbOGSo0~GoCfcMasm~EN#<77j<*>GK=NSd5#R$02Wk}<^TWy literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_downloads.gif b/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_downloads.gif new file mode 100644 index 0000000000000000000000000000000000000000..1e2b0714087f5ea38c60306b6600201110950881 GIT binary patch literal 596 zcmZ?wbhEHb6krfwcox8L?AS>enUL8DF~-&N6`zIgEpHrAYo zrX%f}A12PamNoZE_{;~_o_t{wXkWW_lY`>~W}D@H-RDf|FIhLA51)E1bmB#Yu&qy@ zJ!e;+S+VT;v0ER!Cfur6{m{7jlyK7iHJi_tS8Q?UxR$l>4twNo*N`>!od;ao&#piH zrgrnIxP{MW9{t?8=Z!|`WuNl>3VBD$cliio0ws;ZirqN2J+ zr>2sYwvMizzPze|VW+f_ny#_2iK&^6nt7KYzp;g-rIob}{}fw!J4<^9M{AvqE+=PM zYs>d0F0NCAgxuO>ES;WkOseae^d(@DgNGoaC(9XcmIP0JPTp1v6Q@p3VRipLlgy$N N4k0fMO;#obYXFDW!GQn( literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_home.gif b/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_home.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8961eb3776933fde90d7d5f7d655f93e6870a15 GIT binary patch literal 581 zcmZ?wbhEHb6krfwc;>w7?IF2w&8nY2f3BP}Wv&{lo4WY&OrOh_E?&NH_QIJ{ zH?Lhecwny=H)Bs~#Pg?5kMG#%XQ_AT|dWzTwWTCvRgL z?;k&YJioNfJLiO7!I{rrzWn_6FQE7aw_>7a)-mtgbC)h%HVInpk#X29 zyacY2eICoNOS|?-`b~fK?8(FT-zF?Q^sq_4W5@Lun;N1@mwBzY@%q|+d5_+gPap7? z?0Vc|E9p1Q)W0vJVA01%mxYp6#S|`*FWmh0&AXgw2h_r*Ju4SyZoAOA^-4(ZKGxQA zk6KOM>}Y#5$@k{%`>(b&-<_ZJpx;BH>4;M1%A}^XtM*;FeDlH7V-NVVwunZ|mufo9 z(sn^LetyiXlMXeTS=!D`T6|EZYL{Trs^1@D3Z@SiT&aq3}* zHDC6Yw!OC>J$l4IB2fIv!pOjo&!7X+2Z|F0_QehPP0dNH92~52N`cKyX#uH@e3D}F z8DYthy*cdMLRo4}`lhn{X3d%Y@hK6u&E|1ds?8G73Lc6kz4p#p&7O>+-j>R}LAiF# z42(>gJWkEQ((WOr&WNxXH>HQNSqolc%F}Sj_SLrW^6Nd##KpqGE6!<=(3{WTW{@At t%&g-2j&oAsg4P4gI({vdH(qeD>&A2#$cQ92ajOZlJ6@Pj7@)vl4FD(K`&j@0 literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_licenses.gif b/oss/joomla/trunk/administrator/components/com_jdownloads/images/m_licenses.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2203037a793d17414ac6de273d803c7966833fc GIT binary patch literal 563 zcmZ?wbhEHb6krfwc;?FR_wV0Xvt~6nHC?)VRZ~^z=g*&e_w25%t!-~>yLJ2S@|hX2 z(NU+*UU>HW<&~>9-rdN3_4>`$Z9C3ixcunxlYbwV-@S3{-h)RICQLlBclzO@C*Qq$ z|M9ZxwHvqhA3FBr+4Ge>+BwOd$4{QUbML{lnRB~3+j~m1w(r`zXWzl=yPc1(GEI*( zS-)X(dTLr>QR%mD-_}oahzzuvI&DUMLsLs-*w+s?D#|O~fB3L$#oEuGKCND};nLx@ zcMliWrOM8qzaS(eY*B~llcToN+XGIWJhgc7B0C$~|Ns9p3@M=alZEjGvnzuR$km`Y zVPK!o;M&B%$i&Rh)Y;XsM7;+u90WR*1dG<9S&k@~&EO*N*M4 zY9wD4alLMme$yoSs$BeSyYlO5fj7;(Z+m3kb_>1lQ{TLJ_P@V>e_h)3eyY;D$x{D5 zKl`-I^!-ekYuB!QTp;ynk<#atN?(?$oj7sgT!;3L&Dt|ti-9g=7$QLNCkx{XW_Jc1 zkb6OK!oa?$!M&-urM1nSfsu*1y_toTZ6X^xM>_{6Cl@ylFCQO&D~kZX;L>G6!XhoA zVoSv(B!req@-s9^Ny`Yz%I%e3Dl4tf#H7eAs3d<%>5Q_XN|UOZy1K@->r#RmnoU~T zI?Hr*we^Ngu0E;TYXHo0l4Yu2n_w9K4msfDp=tEE-R8-t^Z+xg^M^UnNWRPhi{ XbZFtpT+-w*QOTjl?J`{T)%m&+3l-pe@tsOH%Hik;VsHe8swFr#w%x|k^^{QGyE z-oA0=*;|o2u7#|-#SproqOJ22xIi=H(hz@?&Wj(^Dh}sKKB1*yK>qrhLjZy zv5Oc2rl`+3qqO3>&fXVFJDy5(9Xh!+P{uBZA!;6jW3}M&Tlq`33T=2OI{y;qq_YN% zn{Daa}+DNCsct2U{Ls%xleYH908OY0tP($hCEG&C|YHaV|rYSv_KVQKYL-(2dT zjOqgyVQU^0X&W2qJBQvh3EQgtwUhqjQL*`A-(fc1J9QT>d}zM5tIVN^MbK$tl7ND< S5ufLgjf;=>w=gj>SOWmA1EvK4 literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/restore.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/restore.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7f4b875c70dd9fc7161317f2e3c9f97228b99c GIT binary patch literal 1671 zcmc&!`#;-<0{wao@wl{Amxj?~RIQYnxk70Z)hMY)XVI5EeVAw&|7Z0@~(#66$SIp^~^Kc4gX9BMc!*bHO~0sz1a zc@z=3<@^6bBfTxfd@_EzWj2{X=*%d5Qf5{h0Sg>T#K&VDkUz%Zu#wof#O(BbtRDdA zkx1nA7YEy$ zIW&rP`A-o6B)yd}K=cxm;q3+K?=BoybQX7Yc1TOX(n81#jUcZ9Z%F6G7x&8QNDDuQ zPEJlPKiDnF_mbBnuJ)BHp4QIexApb)Nk|qe-7GQX*b>9G=1RuW(vmnEqF{Zq_O7ds zMPFvqKl1vNJr7oT?na6K&RX*CspcSizIwYwOahA1qT_Y_5uhcuq3lA&%9xc}4KfmKk3jO8@7UCQ? zC6B8fXd3Q$QJ0&*FDFfZ5d6{Ays@#q*i<7f4VP7(l^3B!KkZ!Q;v{7W%E!*?XSMP> zr`4~U6x=5=lH*_h1^Grw+16lrnUScd|0Vx71$+#S;Q&D25{Wo;;-~RfRp;R2zTjSy z>!cvdaB{j!aVVI{MB|ff_FAX^{%n64DAdyK{L#6zz4WGBt#Mrso1Jl1iX8XqU*=u$ zHXaH1D{5p4Q1fFC!x_WX{Ea*0SMi&plPiT9rBd^c_oOCq3ALJhC|ew-&BQrx%PvBo zj?aA=sd#CfXOb;m^Y#0DZ*hnilDhe_n!{vR zfUU+XbdHQy4j>G|9DBkXB0j?c_Ym0+8^!v-c8LCmWVlCRY})7*uM$1#cNP6oZ^xD{ zN1alK!A7zyHnzL>VxitnN_Tnd-UG0S$+80IC(y4jXhEEt&DXU3)o%L9L{msxFjTmc z$_6{-n;RVI#4^JFne>)3VJ(c&MUDFoOA!@ES)5U%t$j~`>MOtY<3<>(>-Uq`s+&&4 zkb2r_QTtA-28|;GZ7lSFqvqr~JZ+ojEfmFOTY!w4tkT1;TI5YVfmZ?4*)!N?bf|Un zh6?xDn~Rwel42#u33K8Zj52pj@cymL|7=$8;})Z7#M(3eq+M;uf=utEDSze88L*xT|Jh>S!q9 z|Mo*6!I5B@SDa)+ox~w8CL@XXYvTYjVw#; zjTR-!wLk~P3*IbYrYxWFgg<2nWu>&!4l>+DuaC`~sqD3kV4jPj#@-IR{VXO*H(=ge zS9hztUb<>SR%&t*7wyG{Ep)^C&!Ap-CYW`n6`P}RJ6zX3k-koIO?s?%+2;dgLXgwI x0!EV*0;%w_+Id)L=r`fO2d31!E~B(o7{KX(?W*_Yr?9P~0+2x{MB`yh{@-r@mRkS- literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/summary.gif b/oss/joomla/trunk/administrator/components/com_jdownloads/images/summary.gif new file mode 100644 index 0000000000000000000000000000000000000000..33f63eb71c1f653a62bfd69e63ae648005523865 GIT binary patch literal 10073 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 literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/support.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/support.png new file mode 100644 index 0000000000000000000000000000000000000000..824190c47db6afec78d8bf5cb6627c731879be25 GIT binary patch literal 1639 zcmc(f`8yK~0LM2Cv$@aFlxj3`y-d?`g~c+=c!g0>%aNEXypHC+Wg!wdQX&kmD~VS* zQkgC{k!wv;+4j_?*z5f(-tY5#zn|y(^Y?kaSp+9LDTo>b002ng>}`pAH2lxteS3Lf zUZP_Us*zZaNY~KIk1BYz6=TsRX1UYYZPNUSbc82VYj}2K_$=Ll1J}ehn0D$NpP@up1rC$*LyZ0$ zRyB=F`dY- z>G_B&KUv>d(x`<&YKFXS=r)h1pTxHw){_r4Fb-cCeLcIy{-ST3!}+lbIwz)pdT})H z^T87}a6kS&ai6RMFiG8amRVec9EC67Ym}>^5;+rU>gDRN9$wYqh$E_{sFd{DrKQ!1 z%I+n>#J!=K0$CkFQ**7JcA10S^O~vyUTo?p_2zP1Tw-h8m%O)&Z$I=uCAa#6osp>M zi_!+Kl2+#7s z$%AL)ttC?p4%^FtqaY9ktXoS^hkLM%?;Q-9w(%iLFclpl-DpN)5>@K};u32gy z@_XF-k0>#1iU8Pu7dY?{fs^Lg!37U^5@IgQ?Kc zYU9)+D^n-Hn{T+fPcp@HV6R9EUq^x;c4v#8Vkn2^u6bt9!r4jhIU!v$zl$6*+S+0o zitS-vT#b$UrNJc2<@Bb4@u$UW3gwncSOH_|Gc)$vl1Ir2Zvf|y66*T`6_9rO91zGX z>|7Yw-(`EV+bU#ZGAd|QGhL#dCKhr*Yc#axl<$?NIIoKJ`O-zd)!Tf}VnRYir`B}u zbN@gbos#o)Td*<9Z-AtbTU)Zu!7ZAY+r^k9k}RT}9#3zO@fuINQ&OkIa7jq{`_X{9 zoQi46@4BBJly<0ghQB@G_l*|KN5%2I20fR6Dlj3;BY_^{*mD2)t1|hQi=fELq#aXW zSFtzaMVtQXuW@*(?h(D1);z{OBaoucx@pr&xhm-998FW#O;>&MfhI8feqc|bl?T$i zFE9uVJkz}pL+a1*N@K_GCmP;!&#Ccnca?S%(OcLhWR&iwETg-kWY9j0mvf?-F4sj= zflQ{uUm*AQ7WYVmomQH%75CRvhW z7gxzJ{dQTyw@omfp3A~5Gh^@MF+XK6qw1opY<-#Z?crx6m(={Ym4y)WxP7ul;yLYU zNj}2FMl~(2hB3r`Z6?KruS%`;+LYpZ{K1;qJx#g3k1+l>psB`rMsureo!183y zMcBi`654uWTs>G*)^~DQtuZ?7#Gy!+juCMi}`ZDPq+c(>fh!ujx+`6keAjnOVU`C9_d zSqAIY1Fj^!V?|?F?Q3Ri*WESk>>}dZXgNtSgZLqN>qY)`5h2YI1OxPLy_v~SFR|S_ OA^;BSWZP_gA^Bfw1yc_I literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/template.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/template.png new file mode 100644 index 0000000000000000000000000000000000000000..c620ee488c6c86099fdca5041ab8cf030804f37c GIT binary patch literal 1609 zcmc(f`#aMM0LH&A@f{N@95g~abVC;>kwgd^t&t?dFgb}uZrLb~Tq;CjBr~@~F5#KY zEwxZ`$uY6SGAmNbMziL&yOK>Ra zWz7g=Qo9>yjB}ya(3F0>kJ&2cub_f~Db^5hzVKcJeL*P3SJG6lWpS8%tpoBQLJxs%h$rb(a7j6K0ce7+zmGut+!<7R&C?yFTx-{&;$Fe9mxxaSj)+(9t3 zM)+%GU9@aeJfI&_qv@3ljjEPxtgVVyLHEb97?K)!1Y&3r`E2+==T})&CUBW5THBD? zjnpHyY^<#S5sjwg5s&(j#xfW8{Bif#B2E`#?e};8mmJWW0tQyWPohoE2OJBDJ=n;} zD=0#jawQT;Y0S5-t-)?Zq21iK>i;RgVjJQz0LZYM?QK2cCKew4aG&v1O~b-=sCe@3 zkU)dH}V`G}XFj8cpc8c>EZ|Kh`qPW`UlNss|BUx6W~{ zr;$p0dq?vU1LCnKdnKmaSn{D4{V9G6ol?FA{1x^n>y-04b07bRo(MlpKTjCYneaO0 znPC=5muP9;u(pf)#4`#?V24ZmPs9Iwy&XI*(!M1JUlEC>rou&GLJ>eklQ4rt^xxIV`m(c+OGD!P7c+o}G~ zK5uljhklL|m9;-1@T!&iM;-Z>>n3{*qxBxIc-L5!@9MEHBN?lA`Yu)tvDrWC=G%_? znq1K6>N1VH>j`_Y(2&xobGPcF4PthGA&+FM2g`OW7o_CaNLNt@FU&sWl1$^#meWDv z*6D;3Ha0hj-FORGv#imWghTmdhPn{rqpmRQP8|)9F%<1%f?8tHyazip+7m%0PcW~b z4V9}_W~U9VpCec%s9w`V%1Qqq*3D{WO{p8xPJa_1LR6AOEzMJvZ_vcZ5pxJsiT3da z@#JofP#jG6PA(1D$hCJFNuktUy2p<=s3eH*^j(e{D9h-q(6l-2>5&wNBERCHTJ}3` z=NXU($G&r)z2=DzjieWEJ8q5OL7`YncnPd-FfJc8E{okn5le$E-iF-2f*PK?_I}=? zM!yR_#@9_QpGfz$YuCtPxk%qGYe_uC^-{~K+qG+Zwi}fN%W~LkXwEOKsR+!q%MUrF z@>zxws0%W!_T#O~&uhA%37D^n#Wl>42uCdweQKt0W#sS?4Q?o%2$d)oN&{Y}b#{)lO{?##VV@TmE_ zWy)D+1|(Y5t3@~Bo?LeyXLxA?mPly!6d)1I^~3M3;X7@`XDIf5#&0iw zR#lJ^ z`0s7uQ$eeF87f7rTWQD;87aQy8#eTCsAd20rMENJTZ5Y$=@+y&lxqltOvmOzs|0Z< g{aq~g5hwx8fSj|bcv1iwwskdtvxA#`y`6vZzk3;2DgXcg literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/images/warning.png b/oss/joomla/trunk/administrator/components/com_jdownloads/images/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..f6b57adf79988b367df4f269b6489625dde67a22 GIT binary patch literal 3006 zcmV;v3qkaWP)-pT??mJ2HPZYX0B~v) zzWF^#piX@=6my-xv8lPPNG~h44tqpc|4!znJ-0c?E{+pf+ z+Z^3J+rPPOBio(2!Fc51hNXuFz^RuYmc-TMuYYB5^Rr=JE&O3+BNOp znN1e`rl~%A0E|ThUZ;mfAJ6pm?fmVowY?BM51NG7BrVH@H;43JWhN~?xI zqyKnl>)|eU_9o<_7WFj=dZ{RoX|&n%421UjIy?H0{rfv_ZW0ec39AOc*eD#{wvReD zzZD$V^=x}f2h4t8)7~zX3^0I&>(nz(X!x0-rpCJ05-HrP9S~Pd0!K#R-1N0gogLkO z@%XM6Iy|XK$lkUc$8uP=V}K3_1xU!nY3LXh>C8efK6~|IprP^Hfz8=flY+4tot_$n zuGCrf|){3USM$eDgVsPODC>P zPrc)Eab8?~DrFBmLg*hAxR|pRuY;I|3JDEu3 zJEdItY4VBzFdh*I!0%;yM|ss;>Yw8>f4(1v%-o2AeADWqrqS2J{H<~XuVG*Vc}zIG?zLjKZyYqK*>B}?ks)%Bl`O8 z@Js%BzGUdyib`Qc02qr1);BfdcJP}$y(34ux`Gg!08GnyRbqfFpD#5O3{T5`Mu!X2Gd z-me5o!Q2O|ZS*rRxND!+BaTMr&`yp1iU2S+3Yk1kuS@&Zrtsd)O7UGhpVb zolvsu9BNtr5ha-vz|25?-eOU97IJeidmi7yWx_-I*ZckTCo@?BD=F>@56;3(dp9( z26sH;cJZ~Tn-&8f2>@fGFrPzn8ob!oyM6b%<_?%SR~_hNh4Z3Rz~@xx6;IZM!eics z%uQ?5Wfo)}Q~_iW%p#a3WE1F9|G{A2h^u{V&#N747=Z_q!hHcydZ1h93u~L#MFvCr z4J~>ea`WYAZdRne5(s7*7Ct1PuH)3?Vt-B@0zNpw99ajq>*@6B|fj9ZO*`;mS|w_6OM5GxBRL2QNG|wEw=P@TpgW;}L;ZH;}UM zl?@%CBRySP;KQFnu>iVYF~TVY`INN*QkVsmU39R)3vNfbPq$%RL!&BG+~K@bAT?Ns zV_bQQaB#nOX6EYa|Mu=1Z#xXmJro8=rHJPW{Q;lXhJedL+_I$vgu$vapRKP>6$n^BKhZE-n&otEP?Te z0Hx63V0+VsuMYI?7UH7`$Yp?nwcC@4S~*--mK;jyP!smn7a#;~0nZOo{cYN`x+zOQ zRICY>fME(t3h^0Smw(3Q{yp`#W78*Q;?Z9?3@&||LA_@QD5c0t*4DXP$A>l@X!b26 zA$k=OGjQV~-2MGBH}ZTeQ$1)v}*jw{My+fw@_=cXvjqQnF#;M!?g(@8ek;lY6N#XyM zz<5L;mBLUw-dwll8{v(64dcukaOFLFOPey?b=zsJM0?7$z?ul@@Sm6Am48)a?9kyc z;QP-Ceti?=ASZ1QCFQw5>9{I8Xb`=Q_wu`J?%NlL#XmYZH=lUdFqmEu2`Hr~O6uIY zc5HCt?(U{k0w#ZMQ&g)6N+rswB{Z(2xYZ_~hq(;IvsRhQLOxe16SYJ>OO6*MW*1Yy z#s6VlLDApy#T`yVyqqgw+=~=G5rFZCz_4Q1S2~*eo)5N$5a-^6Le3geld`6(3U_L_ zr2hh_qNrXEDNv^E{LTPR!j~W{LOFrDU1e8)_6+yqt z``YHhdp@};dj*Ia?E~!faw$clw zz*CR8=WD!u>)qnSDfOv%q-7dWcdy-R5umlO3Vwe4ev!LUhVT zTv4@SQ(EIo?7UrZY~FcIQ`TR^oWicLJ{4N=gYvAgDh1ltO8rzlyJDLypFztmP`_!f zHWQ!jU&thXp=nHi`SInm!d)d`LaWzsoEQo|wZ^Y|!Qq0Q5$@SUMXjmwvEc5!Qx)}+ z)Vb^?%H2%U2;g97;9zI+^go + + + \ No newline at end of file diff --git a/oss/joomla/trunk/administrator/components/com_jdownloads/install.jdownloads.php b/oss/joomla/trunk/administrator/components/com_jdownloads/install.jdownloads.php new file mode 100644 index 00000000..6e285c84 --- /dev/null +++ b/oss/joomla/trunk/administrator/components/com_jdownloads/install.jdownloads.php @@ -0,0 +1,1203 @@ + + * + * GNU GENERAL PUBLIC LICENSE + * + * ---------------------------------------------------------------------------------- + */ + +defined( '_JEXEC' ) or die( 'Restricted access' ); +Error_Reporting(E_ERROR); + +function com_install() { + + $params = JComponentHelper::getParams('com_languages'); + $frontend_lang = $params->get('site', 'zh-CN'); + $language = JLanguage::getInstance($frontend_lang); + + // get language file for default layouts + $language = &JFactory::getLanguage(); + $language->load('com_jdownloads'); + $database = &JFactory::getDBO(); + + //********************************************* + // JD VERSION: + $jd_version = '1.6'; + $jd_version_state = 'Stable'; + $jd_version_svn = '730'; + //********************************************* + + + ?> +