diff --git a/apps/contacts/templates/part.addcardform.php b/apps/contacts/templates/part.addcardform.php
index c7d668fae58..037e3629bb9 100644
--- a/apps/contacts/templates/part.addcardform.php
+++ b/apps/contacts/templates/part.addcardform.php
@@ -1,51 +1,101 @@
-
diff --git a/apps/contacts/templates/part.addpropertyform.php b/apps/contacts/templates/part.addpropertyform.php
deleted file mode 100644
index 885330e5778..00000000000
--- a/apps/contacts/templates/part.addpropertyform.php
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
diff --git a/apps/contacts/templates/part.details.php b/apps/contacts/templates/part.details.php
index 438f84d45d4..f5bd75809b1 100644
--- a/apps/contacts/templates/part.details.php
+++ b/apps/contacts/templates/part.details.php
@@ -1,16 +1,12 @@
-
-
+
+
+
+
+
diff --git a/apps/contacts/templates/part.property.php b/apps/contacts/templates/part.property.php
index 31fb187a0d3..4bc3a4d85f8 100644
--- a/apps/contacts/templates/part.property.php
+++ b/apps/contacts/templates/part.property.php
@@ -1,72 +1,66 @@
-
-
- |
-
-
-
- |
-
- t('Birthday'); ?> |
-
- l('date',new DateTime($_['property']['value'])); ?>
+
+
+ t('Birthday'); ?>
+
+ l('date',new DateTime($_['property']['value'])); ?>
- |
+
- t('Organization'); ?> |
-
+ t('Organization'); ?>
+
- |
+
- t('Email'); ?> |
-
+ t('Email'); ?>
+
- |
+
- t('Phone'); ?> |
-
+ t('Phone'); ?>
+
- ()
+ (t(ucwords(str_replace('cell','mobile',strtolower($_['property']['parameters']['TYPE'])))); ?>)
- |
+
-
+
t('Address'); ?>
- ()
+ (t(ucwords($_['property']['parameters']['TYPE'])); ?>)
- |
-
+
+
- t('PO Box'); ?>
+
- t('Extended'); ?>
+
- t('Street'); ?>
+
- t('City'); ?>
+
- t('Region'); ?>
+
- t('Zipcode'); ?>
+
- t('Country'); ?>
+
- |
+
-
+
diff --git a/apps/contacts/templates/part.setpropertyform.php b/apps/contacts/templates/part.setpropertyform.php
index 69c789795e5..811b9626ce4 100644
--- a/apps/contacts/templates/part.setpropertyform.php
+++ b/apps/contacts/templates/part.setpropertyform.php
@@ -1,18 +1,55 @@
-
+
+
+
diff --git a/apps/contacts/templates/settings.php b/apps/contacts/templates/settings.php
index f5c37c5a044..d9130625200 100644
--- a/apps/contacts/templates/settings.php
+++ b/apps/contacts/templates/settings.php
@@ -1,7 +1,7 @@
diff --git a/apps/external/ajax/seturls.php b/apps/external/ajax/seturls.php
new file mode 100644
index 00000000000..c8e97754544
--- /dev/null
+++ b/apps/external/ajax/seturls.php
@@ -0,0 +1,24 @@
+
+ * This file is licensed under the Affero General Public License version 3 or later.
+ * See the COPYING-README file.
+ */
+
+require_once('../../../lib/base.php');
+OC_Util::checkAdminUser();
+
+if(isset($_POST['s1name'])) OC_Config::setValue( 'external-site1name', $_POST['s1name'] );
+if(isset($_POST['s1url'])) OC_Config::setValue( 'external-site1url', $_POST['s1url'] );
+if(isset($_POST['s2name'])) OC_Config::setValue( 'external-site2name', $_POST['s2name'] );
+if(isset($_POST['s2url'])) OC_Config::setValue( 'external-site2url', $_POST['s2url'] );
+if(isset($_POST['s3name'])) OC_Config::setValue( 'external-site3name', $_POST['s3name'] );
+if(isset($_POST['s3url'])) OC_Config::setValue( 'external-site3url', $_POST['s3url'] );
+if(isset($_POST['s4name'])) OC_Config::setValue( 'external-site4name', $_POST['s4name'] );
+if(isset($_POST['s4url'])) OC_Config::setValue( 'external-site4url', $_POST['s4url'] );
+if(isset($_POST['s5name'])) OC_Config::setValue( 'external-site5name', $_POST['s5name'] );
+if(isset($_POST['s5url'])) OC_Config::setValue( 'external-site5url', $_POST['s5url'] );
+
+echo 'true';
+
+?>
diff --git a/apps/external/appinfo/app.php b/apps/external/appinfo/app.php
new file mode 100644
index 00000000000..df14954d86f
--- /dev/null
+++ b/apps/external/appinfo/app.php
@@ -0,0 +1,37 @@
+.
+*
+*/
+
+OC_APP::registerAdmin('external','settings');
+
+OC_App::register( array( 'order' => 70, 'id' => 'external', 'name' => 'External' ));
+
+if(OC_Config::getValue( "external-site1name", '' )<>'') OC_App::addNavigationEntry( array( 'id' => 'external_index1', 'order' => 80, 'href' => OC_Helper::linkTo( 'external', 'index.php' ).'?id=1', 'icon' => OC_Helper::imagePath( 'external', 'external.png' ), 'name' => OC_Config::getValue( "external-site1name", '' )));
+
+if(OC_Config::getValue( "external-site2name", '' )<>'') OC_App::addNavigationEntry( array( 'id' => 'external_index2', 'order' => 80, 'href' => OC_Helper::linkTo( 'external', 'index.php' ).'?id=2', 'icon' => OC_Helper::imagePath( 'external', 'external.png' ), 'name' => OC_Config::getValue( "external-site2name", '' )));
+
+if(OC_Config::getValue( "external-site3name", '' )<>'') OC_App::addNavigationEntry( array( 'id' => 'external_index3', 'order' => 80, 'href' => OC_Helper::linkTo( 'external', 'index.php' ).'?id=3', 'icon' => OC_Helper::imagePath( 'external', 'external.png' ), 'name' => OC_Config::getValue( "external-site3name", '' )));
+
+if(OC_Config::getValue( "external-site4name", '' )<>'') OC_App::addNavigationEntry( array( 'id' => 'external_index4', 'order' => 80, 'href' => OC_Helper::linkTo( 'external', 'index.php' ).'?id=4', 'icon' => OC_Helper::imagePath( 'external', 'external.png' ), 'name' => OC_Config::getValue( "external-site4name", '' )));
+
+if(OC_Config::getValue( "external-site5name", '' )<>'') OC_App::addNavigationEntry( array( 'id' => 'external_index5', 'order' => 80, 'href' => OC_Helper::linkTo( 'external', 'index.php' ).'?id=5', 'icon' => OC_Helper::imagePath( 'external', 'external.png' ), 'name' => OC_Config::getValue( "external-site5name", '' )));
+
diff --git a/apps/external/appinfo/info.xml b/apps/external/appinfo/info.xml
new file mode 100644
index 00000000000..05f5709916d
--- /dev/null
+++ b/apps/external/appinfo/info.xml
@@ -0,0 +1,10 @@
+
+
+ external
+ External
+ Show external Application in the ownCloud menu
+ 1.0
+ AGPL
+ Frank Karlitschek
+ 2
+
diff --git a/apps/external/img/external.png b/apps/external/img/external.png
new file mode 100644
index 00000000000..75d1366326b
Binary files /dev/null and b/apps/external/img/external.png differ
diff --git a/apps/external/img/external.svg b/apps/external/img/external.svg
new file mode 100644
index 00000000000..b47305fbd08
--- /dev/null
+++ b/apps/external/img/external.svg
@@ -0,0 +1,292 @@
+
+
+
+
diff --git a/apps/external/index.php b/apps/external/index.php
new file mode 100644
index 00000000000..116e16d9096
--- /dev/null
+++ b/apps/external/index.php
@@ -0,0 +1,47 @@
+.
+*
+*/
+
+require_once('../../lib/base.php');
+
+// Check if we are a user
+if( !OC_User::isLoggedIn()){
+ header( "Location: ".OC_Helper::linkTo( '', 'index.php' ));
+ exit();
+}
+
+
+if(isset($_GET['id'])){
+
+ $id=$_GET['id'];
+ $id = (int) $id;
+
+ $url=OC_Config::getValue( "external-site".$id."url", '' );
+ OC_App::setActiveNavigationEntry( 'external_index'.$id );
+
+ $tmpl = new OC_Template( 'external', 'frame', 'user' );
+ $tmpl->assign('url',$url);
+ $tmpl->printPage();
+
+}
+
+?>
diff --git a/apps/external/js/admin.js b/apps/external/js/admin.js
new file mode 100644
index 00000000000..6b9b6c67737
--- /dev/null
+++ b/apps/external/js/admin.js
@@ -0,0 +1,68 @@
+$(document).ready(function(){
+
+
+
+ $('#s1name').blur(function(event){
+ event.preventDefault();
+ var post = $( "#s1name" ).serialize();
+ $.post( OC.filePath('external','ajax','seturls.php') , post, function(data){ OC.msg.finishedSaving('#s1name .msg', data); });
+ });
+
+ $('#s2name').blur(function(event){
+ event.preventDefault();
+ var post = $( "#s2name" ).serialize();
+ $.post( OC.filePath('external','ajax','seturls.php') , post, function(data){ OC.msg.finishedSaving('#s2name .msg', data); });
+ });
+
+ $('#s3name').blur(function(event){
+ event.preventDefault();
+ var post = $( "#s3name" ).serialize();
+ $.post( OC.filePath('external','ajax','seturls.php') , post, function(data){ OC.msg.finishedSaving('#s3name .msg', data); });
+ });
+
+ $('#s4name').blur(function(event){
+ event.preventDefault();
+ var post = $( "#s4name" ).serialize();
+ $.post( OC.filePath('external','ajax','seturls.php') , post, function(data){ OC.msg.finishedSaving('#s4name .msg', data); });
+ });
+
+ $('#s5name').blur(function(event){
+ event.preventDefault();
+ var post = $( "#s5name" ).serialize();
+ $.post( OC.filePath('external','ajax','seturls.php') , post, function(data){ OC.msg.finishedSaving('#s5name .msg', data); });
+ });
+
+ $('#s1url').blur(function(event){
+ event.preventDefault();
+ var post = $( "#s1url" ).serialize();
+ $.post( OC.filePath('external','ajax','seturls.php') , post, function(data){ OC.msg.finishedSaving('#s1url .msg', data); });
+ });
+
+ $('#s2url').blur(function(event){
+ event.preventDefault();
+ var post = $( "#s2url" ).serialize();
+ $.post( OC.filePath('external','ajax','seturls.php') , post, function(data){ OC.msg.finishedSaving('#s2url .msg', data); });
+ });
+
+ $('#s3url').blur(function(event){
+ event.preventDefault();
+ var post = $( "#s3url" ).serialize();
+ $.post( OC.filePath('external','ajax','seturls.php') , post, function(data){ OC.msg.finishedSaving('#s3url .msg', data); });
+ });
+
+ $('#s4url').blur(function(event){
+ event.preventDefault();
+ var post = $( "#s4url" ).serialize();
+ $.post( OC.filePath('external','ajax','seturls.php') , post, function(data){ OC.msg.finishedSaving('#s4url .msg', data); });
+ });
+
+ $('#s5url').blur(function(event){
+ event.preventDefault();
+ var post = $( "#s5url" ).serialize();
+ $.post( OC.filePath('external','ajax','seturls.php') , post, function(data){ OC.msg.finishedSaving('#s5url .msg', data); });
+ });
+
+
+});
+
+
diff --git a/apps/external/settings.php b/apps/external/settings.php
new file mode 100644
index 00000000000..ad33c16e1bf
--- /dev/null
+++ b/apps/external/settings.php
@@ -0,0 +1,22 @@
+assign('s1name',OC_Config::getValue( "external-site1name", '' ));
+ $tmpl->assign('s2name',OC_Config::getValue( "external-site2name", '' ));
+ $tmpl->assign('s3name',OC_Config::getValue( "external-site3name", '' ));
+ $tmpl->assign('s4name',OC_Config::getValue( "external-site4name", '' ));
+ $tmpl->assign('s5name',OC_Config::getValue( "external-site5name", '' ));
+
+ $tmpl->assign('s1url',OC_Config::getValue( "external-site1url", '' ));
+ $tmpl->assign('s2url',OC_Config::getValue( "external-site2url", '' ));
+ $tmpl->assign('s3url',OC_Config::getValue( "external-site3url", '' ));
+ $tmpl->assign('s4url',OC_Config::getValue( "external-site4url", '' ));
+ $tmpl->assign('s5url',OC_Config::getValue( "external-site5url", '' ));
+
+return $tmpl->fetchPage();
+?>
diff --git a/apps/external/templates/frame.php b/apps/external/templates/frame.php
new file mode 100644
index 00000000000..38b4008353d
--- /dev/null
+++ b/apps/external/templates/frame.php
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
diff --git a/apps/external/templates/settings.php b/apps/external/templates/settings.php
new file mode 100644
index 00000000000..a72327d35c8
--- /dev/null
+++ b/apps/external/templates/settings.php
@@ -0,0 +1,23 @@
+
diff --git a/apps/files_imageviewer/appinfo/app.php b/apps/files_imageviewer/appinfo/app.php
index 3dfbb76ceb0..0f77076b79b 100644
--- a/apps/files_imageviewer/appinfo/app.php
+++ b/apps/files_imageviewer/appinfo/app.php
@@ -1,6 +1,8 @@
diff --git a/apps/files_imageviewer/css/jquery.fancybox-1.3.4.css b/apps/files_imageviewer/css/jquery.fancybox-1.3.4.css
new file mode 100644
index 00000000000..030497750b2
--- /dev/null
+++ b/apps/files_imageviewer/css/jquery.fancybox-1.3.4.css
@@ -0,0 +1,359 @@
+/*
+ * FancyBox - jQuery Plugin
+ * Simple and fancy lightbox alternative
+ *
+ * Examples and documentation at: http://fancybox.net
+ *
+ * Copyright (c) 2008 - 2010 Janis Skarnelis
+ * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
+ *
+ * Version: 1.3.4 (11/11/2010)
+ * Requires: jQuery v1.3+
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+#fancybox-loading {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 40px;
+ height: 40px;
+ margin-top: -20px;
+ margin-left: -20px;
+ cursor: pointer;
+ overflow: hidden;
+ z-index: 1104;
+ display: none;
+}
+
+#fancybox-loading div {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 40px;
+ height: 480px;
+ background-image: url('../img/fancybox/fancybox.png');
+}
+
+#fancybox-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ z-index: 1100;
+ display: none;
+}
+
+#fancybox-tmp {
+ padding: 0;
+ margin: 0;
+ border: 0;
+ overflow: auto;
+ display: none;
+}
+
+#fancybox-wrap {
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: 20px;
+ z-index: 1101;
+ outline: none;
+ display: none;
+}
+
+#fancybox-outer {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ background: #fff;
+}
+
+#fancybox-content {
+ width: 0;
+ height: 0;
+ padding: 0;
+ outline: none;
+ position: relative;
+ overflow: hidden;
+ z-index: 1102;
+ border: 0px solid #fff;
+}
+
+#fancybox-hide-sel-frame {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: transparent;
+ z-index: 1101;
+}
+
+#fancybox-close {
+ position: absolute;
+ top: -15px;
+ right: -15px;
+ width: 30px;
+ height: 30px;
+ background: transparent url('../img/fancybox.png') -40px 0px;
+ cursor: pointer;
+ z-index: 1103;
+ display: none;
+}
+
+#fancybox-error {
+ color: #444;
+ font: normal 12px/20px Arial;
+ padding: 14px;
+ margin: 0;
+}
+
+#fancybox-img {
+ width: 100%;
+ height: 100%;
+ padding: 0;
+ margin: 0;
+ border: none;
+ outline: none;
+ line-height: 0;
+ vertical-align: top;
+}
+
+#fancybox-frame {
+ width: 100%;
+ height: 100%;
+ border: none;
+ display: block;
+}
+
+#fancybox-left, #fancybox-right {
+ position: absolute;
+ bottom: 0px;
+ height: 100%;
+ width: 35%;
+ cursor: pointer;
+ outline: none;
+ background: transparent url('../img/blank.gif');
+ z-index: 1102;
+ display: none;
+}
+
+#fancybox-left {
+ left: 0px;
+}
+
+#fancybox-right {
+ right: 0px;
+}
+
+#fancybox-left-ico, #fancybox-right-ico {
+ position: absolute;
+ top: 50%;
+ left: -9999px;
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ cursor: pointer;
+ z-index: 1102;
+ display: block;
+}
+
+#fancybox-left-ico {
+ background-image: url('../img/fancybox.png');
+ background-position: -40px -30px;
+}
+
+#fancybox-right-ico {
+ background-image: url('../img/fancybox.png');
+ background-position: -40px -60px;
+}
+
+#fancybox-left:hover, #fancybox-right:hover {
+ visibility: visible; /* IE6 */
+}
+
+#fancybox-left:hover span {
+ left: 20px;
+}
+
+#fancybox-right:hover span {
+ left: auto;
+ right: 20px;
+}
+
+.fancybox-bg {
+ position: absolute;
+ padding: 0;
+ margin: 0;
+ border: 0;
+ width: 20px;
+ height: 20px;
+ z-index: 1001;
+}
+
+#fancybox-bg-n {
+ top: -20px;
+ left: 0;
+ width: 100%;
+ background-image: url('../img/fancybox-x.png');
+}
+
+#fancybox-bg-ne {
+ top: -20px;
+ right: -20px;
+ background-image: url('../img/fancybox.png');
+ background-position: -40px -162px;
+}
+
+#fancybox-bg-e {
+ top: 0;
+ right: -20px;
+ height: 100%;
+ background-image: url('../img/fancybox-y.png');
+ background-position: -20px 0px;
+}
+
+#fancybox-bg-se {
+ bottom: -20px;
+ right: -20px;
+ background-image: url('../img/fancybox.png');
+ background-position: -40px -182px;
+}
+
+#fancybox-bg-s {
+ bottom: -20px;
+ left: 0;
+ width: 100%;
+ background-image: url('../img/fancybox-x.png');
+ background-position: 0px -20px;
+}
+
+#fancybox-bg-sw {
+ bottom: -20px;
+ left: -20px;
+ background-image: url('../img/fancybox.png');
+ background-position: -40px -142px;
+}
+
+#fancybox-bg-w {
+ top: 0;
+ left: -20px;
+ height: 100%;
+ background-image: url('../img/fancybox-y.png');
+}
+
+#fancybox-bg-nw {
+ top: -20px;
+ left: -20px;
+ background-image: url('../img/fancybox.png');
+ background-position: -40px -122px;
+}
+
+#fancybox-title {
+ font-family: Helvetica;
+ font-size: 12px;
+ z-index: 1102;
+}
+
+.fancybox-title-inside {
+ padding-bottom: 10px;
+ text-align: center;
+ color: #333;
+ background: #fff;
+ position: relative;
+}
+
+.fancybox-title-outside {
+ padding-top: 10px;
+ color: #fff;
+}
+
+.fancybox-title-over {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ color: #FFF;
+ text-align: left;
+}
+
+#fancybox-title-over {
+ padding: 10px;
+ background-image: url('../img/fancybox/fancy_title_over.png');
+ display: block;
+}
+
+.fancybox-title-float {
+ position: absolute;
+ left: 0;
+ bottom: -20px;
+ height: 32px;
+}
+
+#fancybox-title-float-wrap {
+ border: none;
+ border-collapse: collapse;
+ width: auto;
+}
+
+#fancybox-title-float-wrap td {
+ border: none;
+ white-space: nowrap;
+}
+
+#fancybox-title-float-left {
+ padding: 0 0 0 15px;
+ background: url('../img/fancybox/fancybox.png') -40px -90px no-repeat;
+}
+
+#fancybox-title-float-main {
+ color: #FFF;
+ line-height: 29px;
+ font-weight: bold;
+ padding: 0 0 3px 0;
+ background: url('../img/fancybox/fancybox-x.png') 0px -40px;
+}
+
+#fancybox-title-float-right {
+ padding: 0 0 0 15px;
+ background: url('../img/fancybox/fancybox.png') -55px -90px no-repeat;
+}
+
+/* IE6 */
+
+.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
+.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame {
+ height: expression(this.parentNode.clientHeight + "px");
+}
+
+#fancybox-loading.fancybox-ie6 {
+ position: absolute; margin-top: 0;
+ top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px');
+}
+
+#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); }
+
+/* IE6, IE7, IE8 */
+
+.fancybox-ie .fancybox-bg { background: transparent !important; }
+
+.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); }
diff --git a/apps/files_imageviewer/css/lightbox.css b/apps/files_imageviewer/css/lightbox.css
deleted file mode 100644
index d96dd051b1e..00000000000
--- a/apps/files_imageviewer/css/lightbox.css
+++ /dev/null
@@ -1,32 +0,0 @@
-#lightbox_overlay{
- position:fixed;
- display:none;
- height:100%;
- width:100%;
- top:0px;
- left:0px;
- opacity:0.5;
- filter: alpha(opacity = 50);
- background-color:black;
- z-index:9999;
-}
-
-#lightbox{
- position:fixed;
- display:none;
- max-height:90%;
- max-width:90%;
- top:10px;
- margin-left:auto;
- margin-right:auto;
- z-index:9999;
-}
-
-#lightbox_loader{
- text-align:center;
- position:fixed;
- top: 40%;
- left: 50%;
- color:white;
-}
-#lightbox_loader img { margin-right: 1em;}
\ No newline at end of file
diff --git a/apps/files_imageviewer/img/blank.gif b/apps/files_imageviewer/img/blank.gif
new file mode 100644
index 00000000000..35d42e808f0
Binary files /dev/null and b/apps/files_imageviewer/img/blank.gif differ
diff --git a/apps/files_imageviewer/img/fancy_close.png b/apps/files_imageviewer/img/fancy_close.png
new file mode 100644
index 00000000000..07035307ad4
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_close.png differ
diff --git a/apps/files_imageviewer/img/fancy_loading.png b/apps/files_imageviewer/img/fancy_loading.png
new file mode 100644
index 00000000000..2503017960b
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_loading.png differ
diff --git a/apps/files_imageviewer/img/fancy_nav_left.png b/apps/files_imageviewer/img/fancy_nav_left.png
new file mode 100644
index 00000000000..ebaa6a4fd34
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_nav_left.png differ
diff --git a/apps/files_imageviewer/img/fancy_nav_right.png b/apps/files_imageviewer/img/fancy_nav_right.png
new file mode 100644
index 00000000000..873294e969d
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_nav_right.png differ
diff --git a/apps/files_imageviewer/img/fancy_shadow_e.png b/apps/files_imageviewer/img/fancy_shadow_e.png
new file mode 100644
index 00000000000..2eda0893649
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_shadow_e.png differ
diff --git a/apps/files_imageviewer/img/fancy_shadow_n.png b/apps/files_imageviewer/img/fancy_shadow_n.png
new file mode 100644
index 00000000000..69aa10e233b
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_shadow_n.png differ
diff --git a/apps/files_imageviewer/img/fancy_shadow_ne.png b/apps/files_imageviewer/img/fancy_shadow_ne.png
new file mode 100644
index 00000000000..79f6980a3ba
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_shadow_ne.png differ
diff --git a/apps/files_imageviewer/img/fancy_shadow_nw.png b/apps/files_imageviewer/img/fancy_shadow_nw.png
new file mode 100644
index 00000000000..7182cd938ae
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_shadow_nw.png differ
diff --git a/apps/files_imageviewer/img/fancy_shadow_s.png b/apps/files_imageviewer/img/fancy_shadow_s.png
new file mode 100644
index 00000000000..d8858bfb78e
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_shadow_s.png differ
diff --git a/apps/files_imageviewer/img/fancy_shadow_se.png b/apps/files_imageviewer/img/fancy_shadow_se.png
new file mode 100644
index 00000000000..541e3ffd3e8
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_shadow_se.png differ
diff --git a/apps/files_imageviewer/img/fancy_shadow_sw.png b/apps/files_imageviewer/img/fancy_shadow_sw.png
new file mode 100644
index 00000000000..b451689fa7b
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_shadow_sw.png differ
diff --git a/apps/files_imageviewer/img/fancy_shadow_w.png b/apps/files_imageviewer/img/fancy_shadow_w.png
new file mode 100644
index 00000000000..8a4e4a887f1
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_shadow_w.png differ
diff --git a/apps/files_imageviewer/img/fancy_title_left.png b/apps/files_imageviewer/img/fancy_title_left.png
new file mode 100644
index 00000000000..6049223d1ec
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_title_left.png differ
diff --git a/apps/files_imageviewer/img/fancy_title_main.png b/apps/files_imageviewer/img/fancy_title_main.png
new file mode 100644
index 00000000000..8044271f29b
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_title_main.png differ
diff --git a/apps/files_imageviewer/img/fancy_title_over.png b/apps/files_imageviewer/img/fancy_title_over.png
new file mode 100644
index 00000000000..d9f458f4bb8
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_title_over.png differ
diff --git a/apps/files_imageviewer/img/fancy_title_right.png b/apps/files_imageviewer/img/fancy_title_right.png
new file mode 100644
index 00000000000..e36d9db2a7c
Binary files /dev/null and b/apps/files_imageviewer/img/fancy_title_right.png differ
diff --git a/apps/files_imageviewer/img/fancybox-x.png b/apps/files_imageviewer/img/fancybox-x.png
new file mode 100644
index 00000000000..c2130f8698f
Binary files /dev/null and b/apps/files_imageviewer/img/fancybox-x.png differ
diff --git a/apps/files_imageviewer/img/fancybox-y.png b/apps/files_imageviewer/img/fancybox-y.png
new file mode 100644
index 00000000000..7ef399b9908
Binary files /dev/null and b/apps/files_imageviewer/img/fancybox-y.png differ
diff --git a/apps/files_imageviewer/img/fancybox.png b/apps/files_imageviewer/img/fancybox.png
new file mode 100644
index 00000000000..65e14f68fd8
Binary files /dev/null and b/apps/files_imageviewer/img/fancybox.png differ
diff --git a/apps/files_imageviewer/js/jquery.fancybox-1.3.4.pack.js b/apps/files_imageviewer/js/jquery.fancybox-1.3.4.pack.js
new file mode 100644
index 00000000000..1373ed0838b
--- /dev/null
+++ b/apps/files_imageviewer/js/jquery.fancybox-1.3.4.pack.js
@@ -0,0 +1,46 @@
+/*
+ * FancyBox - jQuery Plugin
+ * Simple and fancy lightbox alternative
+ *
+ * Examples and documentation at: http://fancybox.net
+ *
+ * Copyright (c) 2008 - 2010 Janis Skarnelis
+ * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
+ *
+ * Version: 1.3.4 (11/11/2010)
+ * Requires: jQuery v1.3+
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+;(function(b){var m,t,u,f,D,j,E,n,z,A,q=0,e={},o=[],p=0,d={},l=[],G=null,v=new Image,J=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W=/[^\.]\.(swf)\s*$/i,K,L=1,y=0,s="",r,i,h=false,B=b.extend(b("
")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('
The requested content cannot be loaded.
Please try again later.
');
+F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)||
+c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick=
+false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('
').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel",
+function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("
![]()
").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='
";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win==
+"function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('
');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor,
+opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length?
+d.titlePosition=="float"?'
':'
'+s+"
":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding});
+y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height==
+i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents());
+f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode==
+37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto");
+s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('
').appendTo(j);
+f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c);
+j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type==
+"image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"),
+10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)};
+b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k=
+0,C=a.length;k
o.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+
+1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h=
+true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1;
+b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5-
+d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b(''),t=b(''),u=b(''),f=b(''));D=b('').append('').appendTo(f);
+D.append(j=b(''),E=b(''),n=b(''),z=b(''),A=b(''));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()});
+b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('').prependTo(D)}}};
+b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",
+easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery);
\ No newline at end of file
diff --git a/apps/files_imageviewer/js/jquery.mousewheel-3.0.4.pack.js b/apps/files_imageviewer/js/jquery.mousewheel-3.0.4.pack.js
new file mode 100644
index 00000000000..cb66588e29c
--- /dev/null
+++ b/apps/files_imageviewer/js/jquery.mousewheel-3.0.4.pack.js
@@ -0,0 +1,14 @@
+/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
+* Licensed under the MIT License (LICENSE.txt).
+*
+* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
+* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
+* Thanks to: Seamus Leahy for adding deltaX and deltaY
+*
+* Version: 3.0.4
+*
+* Requires: 1.2.2+
+*/
+
+(function(d){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0,e=0;a=d.event.fix(b);a.type="mousewheel";if(a.wheelDelta)c=a.wheelDelta/120;if(a.detail)c=-a.detail/3;e=c;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){e=0;h=-1*c}if(b.wheelDeltaY!==undefined)e=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,c,h,e);return d.event.handle.apply(this,i)}var f=["DOMMouseScroll","mousewheel"];d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=
+f.length;a;)this.addEventListener(f[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=f.length;a;)this.removeEventListener(f[--a],g,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);
\ No newline at end of file
diff --git a/apps/files_imageviewer/js/lightbox.js b/apps/files_imageviewer/js/lightbox.js
index 4f079b6d8af..94743aa85e0 100644
--- a/apps/files_imageviewer/js/lightbox.js
+++ b/apps/files_imageviewer/js/lightbox.js
@@ -1,18 +1,4 @@
-
-var lightBoxShown=false;
$(document).ready(function() {
- images={};//image cache
- loading_str = t('files_imageviewer','Loading');
- var overlay=$('');
- overlay.find('#lightbox_loader img')
- .attr('src',OC.imagePath('core', 'loading-dark.gif'))
- .attr('alt',loading_str)
- .after(loading_str);
- $( 'body' ).append(overlay);
- var container=$('');
- $( 'body' ).append(container);
- $( '#lightbox_overlay' ).click(hideLightbox);
- $( '#lightbox' ).click(hideLightbox);
if(typeof FileActions!=='undefined'){
FileActions.register('image','View','',function(filename){
viewImage($('#dir').val(),filename);
@@ -22,7 +8,6 @@ $(document).ready(function() {
OC.search.customResults.Images=function(row,item){
var image=item.link.substr(item.link.indexOf('file=')+5);
var a=row.find('a');
- var container=$('');
a.attr('href','#');
a.click(function(){
var file=image.split('/').pop();
@@ -32,52 +17,11 @@ $(document).ready(function() {
}
});
-function viewImage(dir,file){
+function viewImage(dir, file) {
var location=OC.filePath('files','ajax','download.php')+'?files='+file+'&dir='+dir;
- var overlay=$('#lightbox_overlay');
- var container=$('#lightbox');
- overlay.show();
- if(!images[location]){
- var img = new Image();
- img.onload = function(){
- images[location]=img;
- if($('#lightbox_overlay').is(':visible'))
- showLightbox(container,img);
- }
- img.src = location;
- }else{
- showLightbox(container,images[location]);
- }
+ $.fancybox({
+ "href": location,
+ "title": file,
+ "titlePosition": "inside"
+ });
}
-
-function showLightbox(container,img){
- var maxWidth = $( window ).width() - 50;
- var maxHeight = $( window ).height() - 50;
- if( img.width > maxWidth || img.height > maxHeight ) { // One of these is larger than the window
- var ratio = img.width / img.height;
- if( img.height >= maxHeight ) {
- img.height = maxHeight;
- img.width = maxHeight * ratio;
- } else {
- img.width = maxWidth;
- img.height = maxWidth / ratio;
- }
- }
- container.empty();
- container.append(img);
- container.css('top',Math.round( ($( window ).height() - img.height)/2));
- container.css('left',Math.round( ($( window ).width() - img.width)/2));
- $('#lightbox').show();
- setTimeout(function(){
- lightBoxShown=true;
- },100);
-}
-
-function hideLightbox(event){
- if(event){
- event.stopPropagation();
- $('#lightbox_overlay').hide();
- $('#lightbox').hide();
- lightBoxShown=false;
- }
-}
\ No newline at end of file
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index c0fc91e92ad..4056d693bfa 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -10,7 +10,7 @@ $(document).ready(function() {
type: 'GET',
url: OC.linkTo('files_sharing', 'ajax/getitem.php'),
dataType: 'json',
- data: 'source='+file,
+ data: {source: file},
async: false,
success: function(users) {
if (users) {
@@ -46,6 +46,7 @@ $(document).ready(function() {
$('.share').click(function(event) {
event.preventDefault();
+ event.stopPropagation();
var filenames = getSelectedFiles('name');
var length = filenames.length;
var files = '';
@@ -184,8 +185,8 @@ function createDropdown(filename, files) {
html += '';
html += ' ';
if (filename) {
- $('tr[data-file="'+filename+'"]').addClass('mouseOver');
- $(html).appendTo($('tr[data-file="'+filename+'"] td.filename'));
+ $('tr').filterAttr('data-file',filename).addClass('mouseOver');
+ $(html).appendTo($('tr').filterAttr('data-file',filename).find('td.filename'));
} else {
$(html).appendTo($('thead .share'));
}
diff --git a/apps/gallery/ajax/getCovers.php b/apps/gallery/ajax/getCovers.php
index d84bf2a7903..b9c7558a53c 100644
--- a/apps/gallery/ajax/getCovers.php
+++ b/apps/gallery/ajax/getCovers.php
@@ -18,6 +18,7 @@ function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height, $tgtImg, $
default:
exit();
}
+ if(!$myImage) exit();
$ratio_orig = $width_orig/$height_orig;
if ($thumbnail_width/$thumbnail_height > $ratio_orig) {
@@ -52,8 +53,11 @@ $targetImg = imagecreatetruecolor($numOfItems*$box_size, $box_size);
$counter = 0;
while (($i = $result->fetchRow()) && $counter < $numOfItems) {
$imagePath = OC::$CONFIG_DATADIRECTORY . $i['file_path'];
- CroppedThumbnail($imagePath, $box_size, $box_size, $targetImg, $counter*$box_size);
- $counter++;
+ if(file_exists($imagePath))
+ {
+ CroppedThumbnail($imagePath, $box_size, $box_size, $targetImg, $counter*$box_size);
+ $counter++;
+ }
}
header('Content-Type: image/png');
diff --git a/apps/gallery/ajax/thumbnail.php b/apps/gallery/ajax/thumbnail.php
index f24782390f6..a1416452932 100644
--- a/apps/gallery/ajax/thumbnail.php
+++ b/apps/gallery/ajax/thumbnail.php
@@ -5,6 +5,9 @@ OC_JSON::checkAppEnabled('gallery');
function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height) { //$imgSrc is a FILE - Returns an image resource.
//getting the image dimensions
+ if(! function_exists('imagecreatefromjpeg'))
+ OC_Log::write('gallery','GD module not installed',OC_Log::ERROR);
+
list($width_orig, $height_orig) = getimagesize($imgSrc);
switch (strtolower(substr($imgSrc, strrpos($imgSrc, '.')+1))) {
case "jpeg":
@@ -18,6 +21,7 @@ function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height) { //$imgSr
default:
exit();
}
+ if(!$myImage) exit();
$ratio_orig = $width_orig/$height_orig;
if ($thumbnail_width/$thumbnail_height > $ratio_orig) {
@@ -47,9 +51,10 @@ $img = $_GET['img'];
$tmp = OC::$CONFIG_DATADIRECTORY . $img;
-header('Content-Type: image/png');
-$image = CroppedThumbnail($tmp, $box_size, $box_size);
-
-imagepng($image);
-imagedestroy($image);
-?>
+if(file_exists($tmp))
+{
+ header('Content-Type: image/png');
+ $image = CroppedThumbnail($tmp, $box_size, $box_size);
+ imagepng($image);
+ imagedestroy($image);
+}
\ No newline at end of file
diff --git a/apps/gallery/lib_scanner.php b/apps/gallery/lib_scanner.php
index 5490c4a55ad..1231de3f3c4 100644
--- a/apps/gallery/lib_scanner.php
+++ b/apps/gallery/lib_scanner.php
@@ -31,7 +31,7 @@ class OC_GALLERY_SCANNER {
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE `uid_owner` = ? AND `album_name` = ?');
$result = $stmt->execute(array(OC_User::getUser(), $current_album['name']));
if ($result->numRows() == 0 && count($current_album['images'])) {
- $stmt = OC_DB::prepare('REPLACE INTO *PREFIX*gallery_albums (`uid_owner`, `album_name`) VALUES (?, ?)');
+ $stmt = OC_DB::prepare('INSERT INTO *PREFIX*gallery_albums (`uid_owner`, `album_name`) VALUES (?, ?)');
$stmt->execute(array(OC_User::getUser(), $current_album['name']));
}
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE `uid_owner` = ? AND `album_name` = ?');
@@ -42,7 +42,7 @@ class OC_GALLERY_SCANNER {
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_photos WHERE `album_id` = ? AND `file_path` = ?');
$result = $stmt->execute(array($albumId, $img));
if ($result->numRows() == 0) {
- $stmt = OC_DB::prepare('REPLACE INTO *PREFIX*gallery_photos (`album_id`, `file_path`) VALUES (?, ?)');
+ $stmt = OC_DB::prepare('INSERT INTO *PREFIX*gallery_photos (`album_id`, `file_path`) VALUES (?, ?)');
$stmt->execute(array($albumId, $img));
}
}
diff --git a/apps/gallery/templates/view_album.php b/apps/gallery/templates/view_album.php
index ea2969e0110..230e2a5c21d 100644
--- a/apps/gallery/templates/view_album.php
+++ b/apps/gallery/templates/view_album.php
@@ -1,9 +1,17 @@
+
@@ -12,7 +20,7 @@ OC_Util::addStyle( 'files_imageviewer', 'lightbox' );
-

+

diff --git a/apps/media/css/player.css b/apps/media/css/player.css
index c4a098543d1..0f29748f351 100644
--- a/apps/media/css/player.css
+++ b/apps/media/css/player.css
@@ -1,7 +1,7 @@
#playercontrols{
display:inline;
margin-left:1em;
- width:7em;
+ width:4em;
height:1em;
position:fixed;
top:auto;
diff --git a/apps/media/lib_collection.php b/apps/media/lib_collection.php
index 571cb7e6850..caa3ac3f479 100644
--- a/apps/media/lib_collection.php
+++ b/apps/media/lib_collection.php
@@ -267,7 +267,7 @@ class OC_MEDIA_COLLECTION{
$query=self::$queries['addsong'];
}
$query->execute(array($name,$artist,$album,$path,$uid,$length,$track,$size));
- $songId=OC_DB::insertid();
+ $songId=OC_DB::insertid('*PREFIX*media_songs');
// self::setLastUpdated();
return self::getSongId($name,$artist,$album);
}
diff --git a/apps/remoteStorage/lib_remoteStorage.php b/apps/remoteStorage/lib_remoteStorage.php
index f10a72870a4..4bbadafe7d2 100644
--- a/apps/remoteStorage/lib_remoteStorage.php
+++ b/apps/remoteStorage/lib_remoteStorage.php
@@ -4,12 +4,6 @@ class OC_remoteStorage {
public static function getValidTokens($ownCloudUser, $userAddress, $dataScope) {
$query=OC_DB::prepare("SELECT token,appUrl FROM *PREFIX*authtoken WHERE user=? AND userAddress=? AND dataScope=? LIMIT 100");
$result=$query->execute(array($ownCloudUser,$userAddress,$dataScope));
- if( PEAR::isError($result)) {
- $entry = 'DB Error: "'.$result->getMessage().'"
';
- $entry .= 'Offending command was: '.$result->getDebugInfo().'
';
- OC_Log::write('removeStorage',$entry,OC_Log::ERROR);
- die( $entry );
- }
$ret = array();
while($row=$result->fetchRow()){
$ret[$row['token']]=$userAddress;
@@ -21,12 +15,6 @@ class OC_remoteStorage {
$user=OC_User::getUser();
$query=OC_DB::prepare("SELECT token,appUrl,userAddress,dataScope FROM *PREFIX*authtoken WHERE user=? LIMIT 100");
$result=$query->execute(array($user));
- if( PEAR::isError($result)) {
- $entry = 'DB Error: "'.$result->getMessage().'"
';
- $entry .= 'Offending command was: '.$result->getDebugInfo().'
';
- OC_Log::write('removeStorage',$entry,OC_Log::ERROR);
- die( $entry );
- }
$ret = array();
while($row=$result->fetchRow()){
$ret[$row['token']] = array(
@@ -42,23 +30,11 @@ class OC_remoteStorage {
$user=OC_User::getUser();
$query=OC_DB::prepare("DELETE FROM *PREFIX*authtoken WHERE token=? AND user=?");
$result=$query->execute(array($token,$user));
- if( PEAR::isError($result)) {
- $entry = 'DB Error: "'.$result->getMessage().'"
';
- $entry .= 'Offending command was: '.$result->getDebugInfo().'
';
- OC_Log::write('removeStorage',$entry,OC_Log::ERROR);
- die( $entry );
- }
}
private static function addToken($token, $appUrl, $userAddress, $dataScope){
$user=OC_User::getUser();
$query=OC_DB::prepare("INSERT INTO *PREFIX*authtoken (`token`,`appUrl`,`user`,`userAddress`,`dataScope`) VALUES(?,?,?,?,?)");
$result=$query->execute(array($token,$appUrl,$user,$userAddress,$dataScope));
- if( PEAR::isError($result)) {
- $entry = 'DB Error: "'.$result->getMessage().'"
';
- $entry .= 'Offending command was: '.$result->getDebugInfo().'
';
- OC_Log::write('removeStorage',$entry,OC_Log::ERROR);
- die( $entry );
- }
}
public static function createDataScope($appUrl, $userAddress, $dataScope){
$token=uniqid();
diff --git a/apps/user_webfinger/webfinger.php b/apps/user_webfinger/webfinger.php
index afb53689682..349afaba507 100644
--- a/apps/user_webfinger/webfinger.php
+++ b/apps/user_webfinger/webfinger.php
@@ -4,7 +4,14 @@ if($_SERVER['SCRIPT_NAME'] == '/.well-known/webfinger.php') {
} else {
header('Please-first: activate');
}
-header("Content-Type: application/xml+xrd");
+// header("Content-Type: application/xml+xrd");
+
+// calculate the documentroot
+// modified version of the one in lib/base.php that takes the .well-known symlink into account
+$DOCUMENTROOT=realpath($_SERVER['DOCUMENT_ROOT']);
+$SERVERROOT=str_replace("\\",'/',dirname(dirname(dirname(dirname(__FILE__)))));
+$SUBURI=substr(realpath($_SERVER["SCRIPT_FILENAME"]),strlen($SERVERROOT));
+$WEBROOT=substr($SUBURI,0,-34);
if($_GET['q']) {
$bits = explode('@', $_GET['q']);
@@ -20,5 +27,5 @@ echo "<";
?xml version="1.0" encoding="UTF-8"?>
-
+
diff --git a/core/css/styles.css b/core/css/styles.css
index ea09a1f3636..d1c648383c0 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -32,12 +32,14 @@ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#35537a', end
/* INPUTS */
input[type="text"], input[type="password"] { cursor:text; }
-input, select, .button, #quota, div.jp-progress, .pager li a { font-size:1em; width:10em; margin:.3em; padding:.6em .5em .4em; background:#fff; color:#333; border:1px solid #ddd; -moz-box-shadow:0 1px 1px #fff, 0 2px 0 #bbb inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; outline:none; }
+input, select, button, .button, #quota, div.jp-progress, .pager li a { font-size:1em; width:10em; margin:.3em; padding:.6em .5em .4em; background:#fff; color:#333; border:1px solid #ddd; -moz-box-shadow:0 1px 1px #fff, 0 2px 0 #bbb inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; outline:none; }
input[type="text"], input[type="password"], input[type="search"] { background:#f8f8f8; color:#555; cursor:text; }
-input[type="text"], input[type="password"], input[type="search"] { -webkit-appearance:textfield; -webkit-box-sizing:content-box; }
-input[type="text"]:hover, input[type="text"]:focus, input[type="password"]:hover, input[type="password"]:focus, input[type="search"]:hover, input[type="search"]:focus { background:#fff; color:#333; }
+input[type="text"], input[type="password"], input[type="search"] { -webkit-appearance:textfield; -moz-appearance:textfield; -webkit-box-sizing:content-box; -moz-box-sizing:content-box; box-sizing:content-box; }
+input[type="text"]:hover, input[type="text"]:focus, input[type="text"]:active,
+input[type="password"]:hover, input[type="password"]:focus, input[type="password"]:active,
+.searchbox input[type="search"]:hover, .searchbox input[type="search"]:focus, .searchbox input[type="search"]:active { background-color:#fff; color:#333; opacity:1; }
-input[type="submit"], input[type="button"], .button, #quota, div.jp-progress, .pager li a { width:auto; padding:.4em; border:1px solid #ddd; font-weight:bold; cursor:pointer; background:#f8f8f8; color:#555; text-shadow:#fff 0 1px 0; -moz-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; }
+input[type="submit"], input[type="button"], button, .button, #quota, div.jp-progress, .pager li a { width:auto; padding:.4em; border:1px solid #ddd; font-weight:bold; cursor:pointer; background:#f8f8f8; color:#555; text-shadow:#fff 0 1px 0; -moz-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; }
input[type="submit"]:hover, input[type="submit"]:focus, input[type="button"]:hover, input[type="button"]:focus, .button:hover { background:#fff; color:#333; }
input[type="checkbox"] { width:auto; }
#quota { cursor:default; }
@@ -46,7 +48,7 @@ input[type="checkbox"] { width:auto; }
#body-login input[type="text"], #body-login input[type="password"] { width: 13em; }
#body-login input.login { width: auto; float: right; }
#remember_login { margin:.8em .2em 0 1em; }
-form.searchbox input[type="search"] { position:fixed; font-size:1.2em; top:.4em; right:3em; padding:.2em .5em .2em 1.5em; background-image:url('../img/actions/search.svg'); background-repeat:no-repeat; background-position:.5em center; border:0; -moz-border-radius:1em; -webkit-border-radius:1em; border-radius:1em; }
+.searchbox input[type="search"] { position:fixed; font-size:1.2em; top:.4em; right:3em; padding:.2em .5em .2em 1.5em; background:#fff url('../img/actions/search.svg') no-repeat .5em center; border:0; -moz-border-radius:1em; -webkit-border-radius:1em; border-radius:1em; opacity:.3; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; }
input[type="submit"].enabled { background:#66f866; border:1px solid #5e5; -moz-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; -webkit-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; }
input[type="submit"].highlight{ background:#ffc100; border:1px solid #db0; text-shadow:#ffeedd 0 1px 0; -moz-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #ffeedd inset; -webkit-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #ffeedd inset; box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #ffeedd inset; }
@@ -70,14 +72,14 @@ input[type="submit"].highlight{ background:#ffc100; border:1px solid #db0; text-
#login form { width:22em; margin:2em auto 2em; padding:0; }
#login form fieldset { background:0; border:0; margin-bottom:2em; padding:0; }
#login form fieldset legend { font-weight:bold; }
-#login form label { margin:.9em .8em .7em;; color:#666; }
+#login form label { margin:.95em 0 0 .85em; color:#666; }
/* NEEDED FOR INFIELD LABELS */
p.infield { position: relative; }
label.infield { cursor: text !important; }
#login form label.infield { position:absolute; font-size:1.5em; color:#AAA; }
#login #dbhostlabel, #login #directorylabel { display:block; margin:.95em 0 .8em -8em; }
#login form input[type="checkbox"]+label { position:relative; margin:0; font-size:1em; text-shadow:#fff 0 1px 0; }
-#login form ul.errors { background:#fed7d7; border:1px solid #f00; list-style-indent:inside; margin:0 0 2em; padding:1em; }
+#login form .errors { background:#fed7d7; border:1px solid #f00; list-style-indent:inside; margin:0 0 2em; padding:1em; }
#login form #selectDbType { text-align:center; }
#login form #selectDbType label { position:static; font-size:1em; margin:0 -.3em 1em; cursor:pointer; padding:.4em; border:1px solid #ddd; font-weight:bold; background:#f8f8f8; color:#555; text-shadow:#eee 0 1px 0; -moz-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; }
diff --git a/core/img/actions/info.png b/core/img/actions/info.png
index f27c73d6d13..2257d144d11 100644
Binary files a/core/img/actions/info.png and b/core/img/actions/info.png differ
diff --git a/core/img/actions/info.svg b/core/img/actions/info.svg
index 4f5e644b25f..1e07aed8527 100644
--- a/core/img/actions/info.svg
+++ b/core/img/actions/info.svg
@@ -10,59 +10,17 @@
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="16px"
- height="16px"
- id="svg3281"
- version="1.1"
- inkscape:version="0.48.2 r9819"
- sodipodi:docname="info.svg"
- inkscape:export-filename="/home/emerzh/Documents/img/actions/info.png"
- inkscape:export-xdpi="250.02"
- inkscape:export-ydpi="250.02">
-
-
-
-
-
-
-
-
+ version="1.0"
+ width="16"
+ height="16"
+ id="svg11300"
+ inkscape:version="0.48.1 r9760"
+ sodipodi:docname="users.svg"
+ inkscape:export-filename="/home/jancborchardt/jancborchardt/ownCloud/icons/users.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ id="metadata26">
@@ -73,31 +31,1728 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- i
+ transform="matrix(0.78786264,0,0,0.78786264,-3.1483699,0.44173984)"
+ id="g3743-3"
+ style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+
+
+
+
+
+
+
diff --git a/core/img/actions/upload.png b/core/img/actions/upload.png
new file mode 100644
index 00000000000..5744aad75a8
Binary files /dev/null and b/core/img/actions/upload.png differ
diff --git a/core/img/actions/upload.svg b/core/img/actions/upload.svg
new file mode 100644
index 00000000000..91333bb681e
--- /dev/null
+++ b/core/img/actions/upload.svg
@@ -0,0 +1,73 @@
+
+
+
+
diff --git a/core/img/logo-inverted.svg b/core/img/logo-inverted.svg
new file mode 100644
index 00000000000..427531bc7a9
--- /dev/null
+++ b/core/img/logo-inverted.svg
@@ -0,0 +1,891 @@
+
+
+
+
\ No newline at end of file
diff --git a/core/img/logo-square.png b/core/img/logo-square.png
new file mode 100644
index 00000000000..086d415db6d
Binary files /dev/null and b/core/img/logo-square.png differ
diff --git a/core/img/logo.svg b/core/img/logo.svg
new file mode 100644
index 00000000000..c1df6cb7153
--- /dev/null
+++ b/core/img/logo.svg
@@ -0,0 +1,890 @@
+
+
+
+
\ No newline at end of file
diff --git a/core/js/js.js b/core/js/js.js
index 9e814ca0729..5846d289880 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -365,7 +365,7 @@ $(document).ready(function(){
$('.jp-controls .jp-previous').tipsy({gravity:'nw', fade:true, live:true});
$('.jp-controls .jp-next').tipsy({gravity:'n', fade:true, live:true});
$('.password .action').tipsy({gravity:'se', fade:true, live:true});
- $('.file_upload_button_wrapper').tipsy({gravity:'e', fade:true});
+ $('.file_upload_button_wrapper').tipsy({gravity:'w', fade:true});
$('.selectedActions a.delete').tipsy({gravity: 'se', fade:true, live:true});
$('.selectedActions a').tipsy({gravity:'s', fade:true, live:true});
$('#headerSize').tipsy({gravity:'s', fade:true, live:true});
@@ -401,3 +401,10 @@ if (!Array.prototype.map){
return res;
};
}
+
+/**
+ * Filter Jquery selector by attribute value
+ **/
+$.fn.filterAttr = function(attr_name, attr_value) {
+ return this.filter(function() { return $(this).attr(attr_name) === attr_value; });
+};
diff --git a/files/ajax/newfile.php b/files/ajax/newfile.php
new file mode 100644
index 00000000000..5c4f49a3675
--- /dev/null
+++ b/files/ajax/newfile.php
@@ -0,0 +1,27 @@
+ array( "message" => "Empty Filename" )));
+ exit();
+}
+
+if(OC_Files::newFile($dir, $filename, 'file')) {
+ if($content){
+ OC_Filesystem::file_put_contents($dir.'/'.$filename,$content);
+ }
+ OC_JSON::success(array("data" => array('content'=>$content)));
+ exit();
+}
+
+
+OC_JSON::error(array("data" => array( "message" => "Error when creating the file" )));
\ No newline at end of file
diff --git a/files/css/files.css b/files/css/files.css
index a8419e972ef..22f4810d0a6 100644
--- a/files/css/files.css
+++ b/files/css/files.css
@@ -3,15 +3,22 @@
See the COPYING-README file. */
/* FILE MENU */
-.actions { padding:.3em; float:left; }
-.actions input { margin:0; }
+.actions { padding:.3em; float:left; height:2em; }
+.actions input, .actions button, .actions .button { margin:0; }
#file_menu { right:0; position:absolute; top:0; }
#file_menu a { display:block; float:left; background-image:none; text-decoration:none; }
-.file_upload_form, #file_newfolder_form { display:inline; float: left;}
+.file_upload_form, #file_newfolder_form { display:inline; float: left; margin-left:0; }
#fileSelector, #file_upload_submit, #file_newfolder_submit { display:none; }
.file_upload_wrapper, #file_newfolder_name { background-repeat:no-repeat; background-position:.5em .5em; padding-left:2em; }
-.file_upload_wrapper { font-weight:bold; display:-moz-inline-box; /* fallback for older firefox versions*/ display:inline-block; padding-left:0; overflow:hidden; position:relative; margin:.1em 1em .1em 0em;}
+.file_upload_wrapper { font-weight:bold; display:-moz-inline-box; /* fallback for older firefox versions*/ display:inline-block; padding-left:0; overflow:hidden; position:relative; margin:0;}
.file_upload_wrapper .file_upload_button_wrapper { position:absolute; top:0; left:0; width:100%; height:100%; cursor:pointer; z-index:1000; }
+#new { float:left; border-top-right-radius:0; border-bottom-right-radius:0; margin:0 0 0 1em; border-right:none; z-index:1010; height:1.3em; }
+#new.active { border-bottom-left-radius:0; border-bottom:none; background:#f8f8f8 }
+#new>a{ padding-left:1em; padding-right:1em; }
+#new>ul { display:none; position:fixed; text-align:left; padding:.5em; background:#f8f8f8; margin-top:0.075em; border:1px solid #ddd; min-width:7em; margin-left:-.5em; z-index:-1; }
+#new>ul>li { margin:.3em; padding-left:2em; background-repeat:no-repeat; cursor:pointer; padding-bottom:0.1em }
+#new>ul>li>p { cursor:pointer; }
+#new>ul>li>input { padding:0.3em; margin:-0.3em; }
#file_newfolder_name { background-image:url('../../core/img/places/folder.svg'); font-weight:normal; width:7em; }
.file_upload_start, .file_upload_filename { font-size:1em; }
@@ -19,7 +26,9 @@
.file_upload_target { display:none; }
.file_upload_start { opacity:0; filter:alpha(opacity=0); z-index:1; position:absolute; left:0; top:0; width:100%; cursor:pointer;}
-.file_upload_filename { z-index:100; cursor:pointer;}
+.file_upload_filename.active { border-bottom-right-radius:0 }
+.file_upload_filename { z-index:100; cursor:pointer; border-top-left-radius:0; border-bottom-left-radius:0; padding:.3em; }
+
.file_upload_form, .file_upload_wrapper, .file_upload_start, .file_upload_filename, #file_upload_submit { cursor:pointer; }
@@ -33,8 +42,8 @@ span.extention, td.date { color:#999; }
span.extention { opacity:0; -webkit-transition:opacity 500ms; -moz-transition:opacity 500ms; -o-transition:opacity 500ms; transition:opacity 500ms; }
tr:hover span.extention { opacity:1; }
div.crumb { float:left; display:block; background:no-repeat right 0; padding:.75em 1.5em 0 1em; height:2.9em; }
-div.crumb:first-child { padding-left:1.5em; }
-div.crumb:last-child { font-weight:bold; }
+div.crumb:first-child { padding-left:1em; }
+div.crumb.last { font-weight:bold; }
table tr.mouseOver td { background-color:#eee; }
table th { height:2em; padding:0 .5em; color:#999; }
table th .name { float:left; margin-left:.5em; }
@@ -54,7 +63,7 @@ table td.filename form { float:left; font-size:.85em; }
table thead.fixed tr{ position:fixed; top:6.5em; z-index:49; -moz-box-shadow:0 -3px 7px #ddd; -webkit-box-shadow:0 -3px 7px #ddd; box-shadow:0 -3px 7px #ddd; }
table thead.fixed { height:2em; }
#fileList tr td.filename>input[type=checkbox]:first-child { opacity:0; float:left; margin:.7em 0 0 1em; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/ -webkit-transition:opacity 500ms; -moz-transition:opacity 500ms; -o-transition:opacity 500ms; transition:opacity 500ms; }
-#fileList tr:hover td.filename>input[type="checkbox"]:first-child { opacity:.8; }
+#fileList tr td.filename>input[type="checkbox"]:hover:first-child { opacity:.8; }
#fileList tr td.filename>input[type="checkbox"]:checked:first-child { opacity:1; }
#fileList tr td.filename { -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms; }
#select_all { float:left; margin:.3em 0.6em 0 .5em; }
@@ -63,4 +72,5 @@ table thead.fixed { height:2em; }
.selectedActions { display:none; }
/* add breadcrumb divider to the File item in navigation panel */
-#navigation>ul>li:first-child { background:url('../../core/img/breadcrumb-start.svg') no-repeat 12.5em 0px; width:12.5em; padding-right:1em; }
+#navigation>ul>li:first-child { background:url('../../core/img/breadcrumb-start.svg') no-repeat 12.5em 0px; width:12.5em; padding-right:1em; position:fixed; }
+#navigation>ul>li:first-child+li { padding-top:2.9em; }
\ No newline at end of file
diff --git a/files/index.php b/files/index.php
index bd37598289a..4b3bbd1bfd4 100644
--- a/files/index.php
+++ b/files/index.php
@@ -42,6 +42,10 @@ if(!isset($_SESSION['timezone'])){
OC_App::setActiveNavigationEntry( "files_index" );
// Load the files
$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
+// Redirect if directory does not exist
+if(!OC_Filesystem::is_dir($dir)) {
+ header("Location: ".$_SERVER['PHP_SELF']."");
+}
$files = array();
foreach( OC_Files::getdirectorycontent( $dir ) as $i ){
@@ -85,6 +89,10 @@ $upload_max_filesize = OC_Helper::computerFileSize(ini_get('upload_max_filesize'
$post_max_size = OC_Helper::computerFileSize(ini_get('post_max_size'));
$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
+$freeSpace=OC_Filesystem::free_space('/');
+$freeSpace=max($freeSpace,0);
+$maxUploadFilesize = min($maxUploadFilesize ,$freeSpace);
+
$tmpl = new OC_Template( "files", "index", "user" );
$tmpl->assign( "fileList", $list->fetchPage() );
$tmpl->assign( "breadcrumb", $breadcrumbNav->fetchPage() );
diff --git a/files/js/fileactions.js b/files/js/fileactions.js
index f95c5e84dc1..9e2688e82c1 100644
--- a/files/js/fileactions.js
+++ b/files/js/fileactions.js
@@ -56,7 +56,7 @@ FileActions={
$('#fileList .action').remove();
var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
var file=FileActions.getCurrentFile();
- if($('tr[data-file="'+file+'"]').data('renaming')){
+ if($('tr').filterAttr('data-file',file).data('renaming')){
return;
}
var defaultAction=FileActions.getDefault(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
diff --git a/files/js/filelist.js b/files/js/filelist.js
index 3e85a35f6ef..5740ece9716 100644
--- a/files/js/filelist.js
+++ b/files/js/filelist.js
@@ -4,7 +4,7 @@ FileList={
},
addFile:function(name,size,lastModified,loading){
var img=(loading)?OC.imagePath('core', 'loading.gif'):OC.imagePath('core', 'filetypes/file.png');
- var html='';
+ var html='
';
if(name.indexOf('.')!=-1){
var basename=name.substr(0,name.lastIndexOf('.'));
var extention=name.substr(name.lastIndexOf('.'));
@@ -29,16 +29,21 @@ FileList={
html+='| '+simpleSize+' | ';
html+=''+relative_modified_date(lastModified.getTime() / 1000)+' | ';
html+='
';
- FileList.insertElement(name,'file',$(html));
+ FileList.insertElement(name,'file',$(html).attr('data-file',name));
if(loading){
- $('tr[data-file="'+name+'"]').data('loading',true);
+ $('tr').filterAttr('data-file',name).data('loading',true);
}else{
- $('tr[data-file="'+name+'"] td.filename').draggable(dragOptions);
+ $('tr').filterAttr('data-file',name).find('td.filename').draggable(dragOptions);
}
},
addDir:function(name,size,lastModified){
- var html='';
- html+='| '+name+' | ';
+ html = $('
').attr({ "data-type": "dir", "data-size": size, "data-file": name});
+ td = $(' | ').attr({"class": "filename", "style": 'background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')' });
+ td.append('');
+ var link_elem = $('').attr({ "class": "name", "href": "index.php?dir="+ encodeURIComponent($('#dir').val()+'/'+name) });
+ link_elem.append($('').addClass('nametext').text(name));
+ td.append(link_elem);
+ html.append(td);
if(size!='Pending'){
simpleSize=simpleFileSize(size);
}else{
@@ -47,13 +52,15 @@ FileList={
sizeColor = Math.round(200-Math.pow((size/(1024*1024)),2));
lastModifiedTime=Math.round(lastModified.getTime() / 1000);
modifiedColor=Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*5);
- html+=''+simpleSize+' | ';
- html+=''+relative_modified_date(lastModified.getTime() / 1000)+' | ';
- html+='';
+ td = $(' | ').attr({ "class": "filesize", "title": humanFileSize(size), "style": 'color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')'}).text(simpleSize);
+ html.append(td);
- FileList.insertElement(name,'dir',$(html));
- $('tr[data-file="'+name+'"] td.filename').draggable(dragOptions);
- $('tr[data-file="'+name+'"] td.filename').droppable(folderDropOptions);
+ td = $(' | ').attr({ "class": "date" });
+ td.append($('').attr({ "class": "modified", "title": formatDate(lastModified), "style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')' }).text( relative_modified_date(lastModified.getTime() / 1000) ));
+ html.append(td);
+ FileList.insertElement(name,'dir',html);
+ $('tr').filterAttr('data-file',name).find('td.filename').draggable(dragOptions);
+ $('tr').filterAttr('data-file',name).find('td.filename').droppable(folderDropOptions);
},
refresh:function(data) {
result = jQuery.parseJSON(data.responseText);
@@ -64,8 +71,8 @@ FileList={
resetFileActionPanel();
},
remove:function(name){
- $('tr[data-file="'+name+'"] td.filename').draggable('destroy');
- $('tr[data-file="'+name+'"]').remove();
+ $('tr').filterAttr('data-file',name).find('td.filename').draggable('destroy');
+ $('tr').filterAttr('data-file',name).remove();
if($('tr[data-file]').length==0){
$('#emptyfolder').show();
$('.file_upload_filename').addClass('highlight');
@@ -101,7 +108,7 @@ FileList={
$('.file_upload_filename').removeClass('highlight');
},
loadingDone:function(name){
- var tr=$('tr[data-file="'+name+'"]');
+ var tr=$('tr').filterAttr('data-file',name);
tr.data('loading',false);
var mime=tr.data('mime');
tr.attr('data-mime',mime);
@@ -111,13 +118,13 @@ FileList={
tr.find('td.filename').draggable(dragOptions);
},
isLoading:function(name){
- return $('tr[data-file="'+name+'"]').data('loading');
+ return $('tr').filterAttr('data-file',name).data('loading');
},
rename:function(name){
- var tr=$('tr[data-file="'+name+'"]');
+ var tr=$('tr').filterAttr('data-file',name);
tr.data('renaming',true);
var td=tr.children('td.filename');
- var input=$('');
+ var input=$('').val(name);
var form=$('')
form.append(input);
td.children('a.name').text('');
@@ -143,7 +150,7 @@ FileList={
}
$.ajax({
url: 'ajax/rename.php',
- data: "dir="+$('#dir').val()+"&newname="+encodeURIComponent(newname)+"&file="+encodeURIComponent(name)
+ data: { dir : $('#dir').val(), newname: newname, file: name }
});
});
form.click(function(event){
@@ -165,9 +172,10 @@ FileList={
files=[files];
}
$.each(files,function(index,file){
- $('tr[data-file="'+file+'"]').hide();
- $('tr[data-file="'+file+'"]').find('input[type="checkbox"]').removeAttr('checked');
- $('tr[data-file="'+file+'"]').removeClass('selected');
+ var files = $('tr').filterAttr('data-file',file);
+ files.hide();
+ files.find('input[type="checkbox"]').removeAttr('checked');
+ files.removeClass('selected');
});
procesSelection();
FileList.deleteCanceled=false;
@@ -208,7 +216,7 @@ $(document).ready(function(){
if($('#notification').data('deletefile'))
{
$.each(FileList.deleteFiles,function(index,file){
- $('tr[data-file="'+file+'"]').show();
+ $('tr').filterAttr('data-file',file).show();
// alert(file);
});
FileList.deleteCanceled=true;
diff --git a/files/js/files.js b/files/js/files.js
index 902c5e54934..4eaa098241b 100644
--- a/files/js/files.js
+++ b/files/js/files.js
@@ -1,4 +1,9 @@
$(document).ready(function() {
+ $('#fileList tr').each(function(){
+ //little hack to set unescape filenames in attribute
+ $(this).attr('data-file',decodeURIComponent($(this).attr('data-file')));
+ });
+
if($('tr[data-file]').length==0){
$('.file_upload_filename').addClass('highlight');
}
@@ -64,7 +69,7 @@ $(document).ready(function() {
}
procesSelection();
} else {
- var filename=$(this).parent().parent().data('file');
+ var filename=$(this).parent().parent().attr('data-file');
if(!FileList.isLoading(filename)){
var mime=$(this).parent().parent().data('mime');
var type=$(this).parent().parent().data('type');
@@ -158,7 +163,7 @@ $(document).ready(function() {
});
$('.file_upload_start').live('change',function(){
- var form=$(this).parent().parent();
+ var form=$(this).closest('form');
var uploadId=form.attr('data-upload-id');
var files=this.files;
var target=form.children('iframe');
@@ -185,9 +190,9 @@ $(document).ready(function() {
if(response[0] != undefined && response[0].status == 'success'){
for(var i=0;iul').hide();
+ $('#new').removeClass('active');
+ $('button.file_upload_filename').removeClass('active');
+ $('#new li').each(function(i,element){
+ if($(element).children('p').length==0){
+ $(element).children('input').remove();
+ $(element).append(''+$(element).data('text')+'
');
+ }
+ });
+ });
+ $('#new').click(function(event){
+ event.stopPropagation();
+ });
+ $('#new>a').click(function(){
+ $('#new>ul').toggle();
+ $('#new').toggleClass('active');
+ $('button.file_upload_filename').toggleClass('active');
+ });
+ $('#new li').click(function(){
+ if($(this).children('p').length==0){
+ return;
+ }
+
+ $('#new li').each(function(i,element){
+ if($(element).children('p').length==0){
+ $(element).children('input').remove();
+ $(element).append(''+$(element).data('text')+'
');
+ }
+ });
+
+ var type=$(this).data('type');
+ var text=$(this).children('p').text();
+ $(this).data('text',text);
+ $(this).children('p').remove();
+ var input=$('');
+ $(this).append(input);
+ input.focus();
+ input.change(function(){
+ var name=$(this).val();
+ switch(type){
+ case 'file':
+ $.ajax({
+ url: OC.filePath('files','ajax','newfile.php'),
+ data: "dir="+encodeURIComponent($('#dir').val())+"&filename="+encodeURIComponent(name)+'&content=%20%0A',
+ complete: function(data){boolOperationFinished(data, function(){
+ var date=new Date();
+ FileList.addFile(name,0,date);
+ var tr=$('tr').filterAttr('data-file',name);
+ tr.data('mime','text/plain');
+ getMimeIcon('text/plain',function(path){
+ tr.find('td.filename').attr('style','background-image:url('+path+')');
+ });
+ });}
+ });
+ break;
+ case 'folder':
+ $.ajax({
+ url: OC.filePath('files','ajax','newfolder.php'),
+ data: "dir="+encodeURIComponent($('#dir').val())+"&foldername="+encodeURIComponent(name),
+ complete: function(data){boolOperationFinished(data, function(){
+ var date=new Date();
+ FileList.addDir(name,0,date);
+ });}
+ });
+ break;
+ }
+ var li=$(this).parent();
+ $(this).remove();
+ li.append(''+li.data('text')+'
');
+ $('#new>a').click();
+ });
+ });
});
-var adjustNewFolderSize = function() {
- if($('#file_newfolder_name').val() != '') {
- splitSize($('#file_newfolder_name'),$('#file_newfolder_submit'));
- $('#file_newfolder_name').unbind('keyup', adjustNewFolderSize);
- };
-}
-
-function splitSize(existingEl, appearingEl) {
- nw = parseInt($(existingEl).css('width')) - parseInt($(appearingEl).css('width'));
- $(existingEl).css('width', nw + 'px');
- $(appearingEl).fadeIn(250);
-}
-
-function unsplitSize(stayingEl, vanishingEl) {
- nw = parseInt($(stayingEl).css('width')) + parseInt($(vanishingEl).css('width'));
- $(stayingEl).css('width', nw + 'px');
- $(vanishingEl).fadeOut(250);
-}
-
-function resetFileActionPanel() {
- $('#file_action_panel form').css({"display":"none"});
- $('#file_action_panel').attr('activeAction', false);
-}
-
function boolOperationFinished(data, callback) {
result = jQuery.parseJSON(data.responseText);
if(result.status == 'success'){
@@ -343,7 +398,7 @@ var folderDropOptions={
url: 'ajax/move.php',
data: "dir="+dir+"&file="+file+'&target='+dir+'/'+target,
complete: function(data){boolOperationFinished(data, function(){
- var el=$('#fileList tr[data-file="'+file+'"] td.filename');
+ var el = $('#fileList tr').filterAttr('data-file',file).find('td.filename');
el.draggable('destroy');
FileList.remove(file);
});}
@@ -445,7 +500,7 @@ function getSelectedFiles(property){
var files=[];
elements.each(function(i,element){
var file={
- name:$(element).data('file'),
+ name:$(element).attr('data-file'),
mime:$(element).data('mime'),
type:$(element).data('type'),
size:$(element).data('size'),
diff --git a/files/templates/index.php b/files/templates/index.php
index a63f6e62b63..722c38e4776 100644
--- a/files/templates/index.php
+++ b/files/templates/index.php
@@ -2,20 +2,27 @@
diff --git a/files/templates/part.breadcrumb.php b/files/templates/part.breadcrumb.php
index 63242dd326c..ab81cc5c039 100644
--- a/files/templates/part.breadcrumb.php
+++ b/files/templates/part.breadcrumb.php
@@ -1,5 +1,6 @@
-
- ")'>
-
">
+
+
svg" data-dir='' style='background-image:url("")'>
+
">
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/files/templates/part.list.php b/files/templates/part.list.php
index 6bf5efe2fb2..46830ba3a37 100644
--- a/files/templates/part.list.php
+++ b/files/templates/part.list.php
@@ -5,7 +5,7 @@
$relative_modified_date = relative_modified_date($file['mtime']);
$relative_date_color = round((time()-$file['mtime'])/60/60/24*14); // the older the file, the brighter the shade of grey; days*14
if($relative_date_color>200) $relative_date_color = 200; ?>
-
'>
+
'>
diff --git a/lib/MDB2/Driver/Datatype/sqlite3.php b/lib/MDB2/Driver/Datatype/sqlite3.php
index 378d5540cbe..d74badbe4f1 100644
--- a/lib/MDB2/Driver/Datatype/sqlite3.php
+++ b/lib/MDB2/Driver/Datatype/sqlite3.php
@@ -1,49 +1,24 @@
.
+ *
+ */
require_once('MDB2/Driver/Datatype/Common.php');
diff --git a/lib/MDB2/Driver/Function/sqlite3.php b/lib/MDB2/Driver/Function/sqlite3.php
index 0d6b329f0ad..a013aea165a 100644
--- a/lib/MDB2/Driver/Function/sqlite3.php
+++ b/lib/MDB2/Driver/Function/sqlite3.php
@@ -1,48 +1,24 @@
|
-// +----------------------------------------------------------------------+
-//
-//
+/**
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 2011 Robin Appelman icewind1991@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see .
+ *
+ */
require_once('MDB2/Driver/Function/Common.php');
diff --git a/lib/MDB2/Driver/Manager/sqlite3.php b/lib/MDB2/Driver/Manager/sqlite3.php
index eabbb72b3c2..c5c19a90fb5 100644
--- a/lib/MDB2/Driver/Manager/sqlite3.php
+++ b/lib/MDB2/Driver/Manager/sqlite3.php
@@ -1,48 +1,24 @@
|
-// +----------------------------------------------------------------------+
-//
-//
+/**
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 2011 Robin Appelman icewind1991@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see .
+ *
+ */
require_once('MDB2/Driver/Manager/Common.php');
diff --git a/lib/MDB2/Driver/Native/sqlite3.php b/lib/MDB2/Driver/Native/sqlite3.php
index 81dc67dea65..de650107238 100644
--- a/lib/MDB2/Driver/Native/sqlite3.php
+++ b/lib/MDB2/Driver/Native/sqlite3.php
@@ -1,48 +1,24 @@
|
-// +----------------------------------------------------------------------+
-//
-//
+/**
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 2011 Robin Appelman icewind1991@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see .
+ *
+ */
require_once 'MDB2/Driver/Native/Common.php';
/**
diff --git a/lib/MDB2/Driver/Reverse/sqlite3.php b/lib/MDB2/Driver/Reverse/sqlite3.php
index d488977b158..d5595da84c5 100644
--- a/lib/MDB2/Driver/Reverse/sqlite3.php
+++ b/lib/MDB2/Driver/Reverse/sqlite3.php
@@ -1,48 +1,24 @@
|
-// +----------------------------------------------------------------------+
-//
-//
+/**
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 2011 Robin Appelman icewind1991@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see .
+ *
+ */
require_once('MDB2/Driver/Reverse/Common.php');
diff --git a/lib/MDB2/Driver/sqlite3.php b/lib/MDB2/Driver/sqlite3.php
index a41aeed4850..e42d36176c4 100644
--- a/lib/MDB2/Driver/sqlite3.php
+++ b/lib/MDB2/Driver/sqlite3.php
@@ -1,48 +1,24 @@
|
-// +----------------------------------------------------------------------+
-//
-//
+/**
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 2011 Robin Appelman icewind1991@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see .
+ *
+ */
/**
* MDB2 SQLite3 driver
diff --git a/lib/app.php b/lib/app.php
index 30ebcf032b3..d3d99865762 100644
--- a/lib/app.php
+++ b/lib/app.php
@@ -100,11 +100,11 @@ class OC_App{
}
/**
- * @brief enables an app
+ * @brief disables an app
* @param $app app
* @returns true/false
*
- * This function set an app as enabled in appconfig.
+ * This function set an app as disabled in appconfig.
*/
public static function disable( $app ){
OC_Appconfig::setValue( $app, 'enabled', 'no' );
diff --git a/lib/base.php b/lib/base.php
index d5fff1e0a74..c52b4493e01 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -77,6 +77,9 @@ class OC{
// set some stuff
//ob_start();
error_reporting(E_ALL | E_STRICT);
+ if (defined('DEBUG') && DEBUG){
+ ini_set('display_errors', 1);
+ }
date_default_timezone_set('Europe/Berlin');
ini_set('arg_separator.output','&');
diff --git a/lib/config.php b/lib/config.php
index 3aa69327f56..2c82036257f 100644
--- a/lib/config.php
+++ b/lib/config.php
@@ -175,7 +175,7 @@ class OC_Config{
$result=@file_put_contents( OC::$SERVERROOT."/config/config.php", $content );
if(!$result) {
$tmpl = new OC_Template( '', 'error', 'guest' );
- $tmpl->assign('errors',array(1=>array('error'=>"Can't write into config directory 'config'",'hint'=>"You can usually fix this by setting the owner of 'config' to the user that the web server uses (".OC_Util::checkWebserverUser().")")));
+ $tmpl->assign('errors',array(1=>array('error'=>"Can't write into config directory 'config'",'hint'=>"You can usually fix this by giving the webserver use write access to the config directory in owncloud")));
$tmpl->printPage();
exit;
}
diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php
index b049f39c171..98661dbb184 100644
--- a/lib/connector/sabre/file.php
+++ b/lib/connector/sabre/file.php
@@ -29,7 +29,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
*/
public function get() {
- return OC_Filesystem::file_get_contents($this->path);
+ return OC_Filesystem::fopen($this->path,'r');
}
diff --git a/lib/db.php b/lib/db.php
index 44be619fde1..c059f5ab336 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -42,11 +42,22 @@ class OC_DB {
*
* Connects to the database as specified in config.php
*/
- public static function connect(){
+ public static function connect($backend=null){
if(self::$connection){
return;
}
- if(class_exists('PDO') && OC_Config::getValue('installed', false)){//check if we can use PDO, else use MDB2 (instalation always needs to be done my mdb2)
+ if(is_null($backend)){
+ $backend=self::BACKEND_MDB2;
+ if(class_exists('PDO') && OC_Config::getValue('installed', false)){//check if we can use PDO, else use MDB2 (instalation always needs to be done my mdb2)
+ $type = OC_Config::getValue( "dbtype", "sqlite" );
+ if($type=='sqlite3') $type='sqlite';
+ $drivers=PDO::getAvailableDrivers();
+ if(array_search($type,$drivers)!==false){
+ $backend=self::BACKEND_PDO;
+ }
+ }
+ }
+ if($backend==self::BACKEND_PDO){
self::connectPDO();
self::$connection=self::$PDO;
self::$backend=self::BACKEND_PDO;
@@ -213,6 +224,7 @@ class OC_DB {
/**
* @brief gets last value of autoincrement
+ * @param $table string The optional table name (will replace *PREFIX*) and add sequence suffix
* @returns id
*
* MDB2 lastInsertID()
@@ -220,9 +232,14 @@ class OC_DB {
* Call this method right after the insert command or other functions may
* cause trouble!
*/
- public static function insertid(){
+ public static function insertid($table=null){
self::connect();
- return self::$connection->lastInsertId();
+ if($table !== null){
+ $prefix = OC_Config::getValue( "dbtableprefix", "oc_" );
+ $suffix = OC_Config::getValue( "dbsequencesuffix", "_id_seq" );
+ $table = str_replace( '*PREFIX*', $prefix, $table );
+ }
+ return self::$connection->lastInsertId($table.$suffix);
}
/**
@@ -252,7 +269,7 @@ class OC_DB {
*
* TODO: write more documentation
*/
- public static function getDbStructure( $file ){
+ public static function getDbStructure( $file ,$mode=MDB2_SCHEMA_DUMP_STRUCTURE){
self::connectScheme();
// write the scheme
@@ -288,7 +305,7 @@ class OC_DB {
$file2 = tempnam( get_temp_dir(), 'oc_db_scheme_' );
$content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
$content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
- if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite don't
+ if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
$content = str_replace( '0000-00-00 00:00:00', 'CURRENT_TIMESTAMP', $content );
}
file_put_contents( $file2, $content );
@@ -315,6 +332,39 @@ class OC_DB {
return true;
}
+
+ /**
+ * @brief update the database scheme
+ * @param $file file to read structure from
+ */
+ public static function updateDbFromStructure($file){
+ $CONFIG_DBNAME = OC_Config::getValue( "dbname", "owncloud" );
+ $CONFIG_DBTABLEPREFIX = OC_Config::getValue( "dbtableprefix", "oc_" );
+ $CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" );
+
+ self::connectScheme();
+
+ // read file
+ $content = file_get_contents( $file );
+
+ // Make changes and save them to a temporary file
+ $file2 = tempnam( get_temp_dir(), 'oc_db_scheme_' );
+ $content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
+ $content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
+ if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
+ $content = str_replace( '0000-00-00 00:00:00', 'CURRENT_TIMESTAMP', $content );
+ }
+ file_put_contents( $file2, $content );
+ $previousSchema = self::$schema->getDefinitionFromDatabase();
+ $op = $schema->updateDatabase($file2, $previousSchema, array(), false);
+
+ if (PEAR::isError($op)) {
+ $error = $op->getMessage();
+ OC_Log::write('core','Failed to update database structure ('.$error.')',OC_Log::FATAL);
+ return false;
+ }
+ return true;
+ }
/**
* @brief connects to a MDB2 database scheme
diff --git a/lib/filestorage/local.php b/lib/filestorage/local.php
index 58c34e972de..9e29f85071a 100644
--- a/lib/filestorage/local.php
+++ b/lib/filestorage/local.php
@@ -84,6 +84,11 @@ class OC_Filestorage_Local extends OC_Filestorage{
return $return;
}
public function rename($path1,$path2){
+ if(! $this->file_exists($path1)){
+ OC_Log::write('core','unable to rename, file does not exists : '.$path1,OC_Log::ERROR);
+ return false;
+ }
+
if($return=rename($this->datadir.$path1,$this->datadir.$path2)){
$this->clearFolderSizeCache($path1);
$this->clearFolderSizeCache($path2);
@@ -126,18 +131,21 @@ class OC_Filestorage_Local extends OC_Filestorage{
public function getMimeType($fspath){
if($this->is_readable($fspath)){
+ $mimeType='application/octet-stream';
if (@is_dir($this->datadir.$fspath)) {
// directories are easy
return "httpd/unix-directory";
- }elseif (function_exists('finfo_open') and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)){
+ }
+ if($mimeType=='application/octet-stream' and function_exists('finfo_open') and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)){
$mimeType =strtolower(finfo_file($finfo,$this->datadir.$fspath));
$mimeType=substr($mimeType,0,strpos($mimeType,';'));
finfo_close($finfo);
- return $mimeType;
- } else if (function_exists("mime_content_type")) {
+ }
+ if ($mimeType=='application/octet-stream' && function_exists("mime_content_type")) {
// use mime magic extension if available
- $mime_type = mime_content_type($this->datadir.$fspath);
- } else if (OC_Helper::canExecute("file")) {
+ $mimeType = mime_content_type($this->datadir.$fspath);
+ }
+ if ($mimeType=='application/octet-stream' && OC_Helper::canExecute("file")) {
// it looks like we have a 'file' command,
// lets see it it does have mime support
$fspath=str_replace("'","\'",$fspath);
@@ -146,18 +154,18 @@ class OC_Filestorage_Local extends OC_Filestorage{
pclose($fp);
//trim the character set from the end of the response
- $mime_type=substr($reply,0,strrpos($reply,' '));
+ $mimeType=substr($reply,0,strrpos($reply,' '));
}
- if (empty($mime_type)) {
+ if ($mimeType=='application/octet-stream') {
// Fallback solution: (try to guess the type by the file extension
if(!self::$mimetypes){
self::$mimetypes=include('mimetypes.list.php');
}
$extention=strtolower(strrchr(basename($fspath), "."));
$extention=substr($extention,1);//remove leading .
- $mime_type=(isset(self::$mimetypes[$extention]))?self::$mimetypes[$extention]:'application/octet-stream';
+ $mimeType=(isset(self::$mimetypes[$extention]))?self::$mimetypes[$extention]:'application/octet-stream';
}
- return $mime_type;
+ return $mimeType;
}
}
diff --git a/lib/filesystem.php b/lib/filesystem.php
index 3497431f1ee..cae8ead5b16 100644
--- a/lib/filesystem.php
+++ b/lib/filesystem.php
@@ -366,9 +366,11 @@ class OC_Filesystem{
case 'a':
$hooks[]='write';
break;
+ default:
+ OC_Log::write('core','invalid mode ('.$mode.') for '.$path,OC_Log::ERROR);
}
- return self::basicOperation('fopen',$path,$hooks);
+ return self::basicOperation('fopen',$path,$hooks,$mode);
}
static public function toTmpFile($path){
if(OC_FileProxy::runPreProxies('toTmpFile',$path) and self::canRead($path) and $storage=self::getStorage($path)){
diff --git a/lib/hook.php b/lib/hook.php
index b069a7da6c0..83a16106bf0 100644
--- a/lib/hook.php
+++ b/lib/hook.php
@@ -20,7 +20,7 @@ class OC_Hook{
* TODO: write example
*/
static public function connect( $signalclass, $signalname, $slotclass, $slotname ){
- // Cerate the data structure
+ // Create the data structure
if( !array_key_exists( $signalclass, self::$registered )){
self::$registered[$signalclass] = array();
}
diff --git a/lib/log.php b/lib/log.php
index a951b676037..446ddd48848 100644
--- a/lib/log.php
+++ b/lib/log.php
@@ -41,7 +41,7 @@ class OC_Log{
*/
public static function write($app,$message,$level){
$minLevel=OC_Config::getValue( "loglevel", 2 );
- if($level>$minLevel){
+ if($level>=$minLevel){
$datadir=OC_Config::getValue( "datadirectory", OC::$SERVERROOT.'/data' );
$logFile=OC_Config::getValue( "logfile", $datadir.'/owncloud.log' );
$entry=array('app'=>$app,'message'=>$message,'level'=>$level,'time'=>time());
@@ -59,6 +59,9 @@ class OC_Log{
return array();
}
$fh=fopen($logFile,'r');
+ if($fh === false){ // Unable to read log file!
+ return array();
+ }
while(!feof($fh)){
$line=fgets($fh);
if($line){
diff --git a/lib/ocsclient.php b/lib/ocsclient.php
index 654c5e0527b..072fd236fee 100644
--- a/lib/ocsclient.php
+++ b/lib/ocsclient.php
@@ -108,6 +108,7 @@ class OC_OCSClient{
$xml=@file_get_contents($url);
if($xml==FALSE){
+ OC_Log::write('core','Unable to parse OCS content',OC_Log::FATAL);
return NULL;
}
$data=simplexml_load_string($xml);
@@ -143,6 +144,7 @@ class OC_OCSClient{
$kbe=array();
$xml=@file_get_contents($url);
if($xml==FALSE){
+ OC_Log::write('core','Unable to parse knowledgebase content',OC_Log::FATAL);
return NULL;
}
$data=simplexml_load_string($xml);
diff --git a/lib/setup.php b/lib/setup.php
index 2dcedb9b820..e2d56ddaf4a 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -82,7 +82,7 @@ class OC_Setup {
$dbpass = $options['dbpass'];
$dbname = $options['dbname'];
$dbhost = $options['dbhost'];
- $dbtableprefix = OC_Config::getValue('dbtableprefix','oc_');
+ $dbtableprefix = $options['dbtableprefix'];
OC_Config::setValue('dbname', $dbname);
OC_Config::setValue('dbhost', $dbhost);
OC_Config::setValue('dbtableprefix', $dbtableprefix);
@@ -135,7 +135,7 @@ class OC_Setup {
$dbpass = $options['dbpass'];
$dbname = $options['dbname'];
$dbhost = $options['dbhost'];
- $dbtableprefix = OC_Config::getValue('dbtableprefix','oc_');
+ $dbtableprefix = $options['dbtableprefix'];
OC_CONFIG::setValue('dbname', $dbname);
OC_CONFIG::setValue('dbhost', $dbhost);
OC_CONFIG::setValue('dbtableprefix', $dbtableprefix);
diff --git a/lib/template.php b/lib/template.php
index 440b62003e7..d1439199e1e 100644
--- a/lib/template.php
+++ b/lib/template.php
@@ -98,6 +98,33 @@ function relative_modified_date($timestamp) {
else { return $l->t('years ago'); }
}
+function html_select_options($options, $selected, $params=array()) {
+ if (!is_array($selected)){
+ $selected=array($selected);
+ }
+ if (isset($params['combine']) && $params['combine']){
+ $options = array_combine($options, $options);
+ }
+ $value_name = $label_name = false;
+ if (isset($params['value'])){
+ $value_name = $params['value'];
+ }
+ if (isset($params['label'])){
+ $label_name = $params['label'];
+ }
+ $html = '';
+ foreach($options as $value => $label){
+ if ($value_name && is_array($label)){
+ $value = $label[$value_name];
+ }
+ if ($label_name && is_array($label)){
+ $label = $label[$label_name];
+ }
+ $select = in_array($value, $selected) ? ' selected="selected"' : '';
+ $html .= '';
+ }
+ return $html;
+}
/**
* This class provides the templates for owncloud.
diff --git a/lib/util.php b/lib/util.php
index 90cc1f6123a..14313569a1d 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -24,7 +24,7 @@ class OC_Util {
$success=@mkdir($CONFIG_DATADIRECTORY_ROOT);
if(!$success) {
$tmpl = new OC_Template( '', 'error', 'guest' );
- $tmpl->assign('errors',array(1=>array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY_ROOT.")",'hint'=>"You can usually fix this by setting the owner of '".OC::$SERVERROOT."' to the user that the web server uses (".OC_Util::checkWebserverUser().")")));
+ $tmpl->assign('errors',array(1=>array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY_ROOT.")",'hint'=>"You can usually fix this by giving the webserver write access to the ownCloud directory '".OC::$SERVERROOT."' ")));
$tmpl->printPage();
exit;
}
@@ -183,7 +183,7 @@ class OC_Util {
$serverUser=OC_Util::checkWebserverUser();
//common hint for all file permissons error messages
- $permissionsHint="Permissions can usually be fixed by setting the owner of the file or directory to the user the web server runs as ($serverUser)";
+ $permissionsHint="Permissions can usually be fixed by giving the webserver write access to the ownCloud directory";
//check for correct file permissions
if(!stristr(PHP_OS, 'WIN')){
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index 6f16152bc5b..27133e9e67e 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -5,7 +5,7 @@
*/?>
diff --git a/settings/templates/help.php b/settings/templates/help.php
index 4e3cdd7b908..754bf8b6376 100644
--- a/settings/templates/help.php
+++ b/settings/templates/help.php
@@ -9,7 +9,10 @@
printPage();
+ if($pageNavi)
+ {
+ $pageNavi->printPage();
+ }
?>
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index 19bd8789125..54487165f3c 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -35,7 +35,7 @@
- t('Help translating');?>
+ t('Help translate');?>
|