Merge branch 'master' of gitorious.org:owncloud/owncloud
This commit is contained in:
commit
f14a62c875
20 changed files with 104 additions and 34 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -28,3 +28,6 @@ RCS/*
|
|||
# eclipse
|
||||
.project
|
||||
.settings
|
||||
|
||||
# netbeans
|
||||
nbproject
|
||||
|
|
2
README
2
README
|
@ -4,7 +4,7 @@ It is alpha software in development and should be treated accordingly.
|
|||
|
||||
http://ownCloud.org
|
||||
|
||||
Installation instructions: http://owncloud.org/index.php/Installation
|
||||
Installation instructions: http://owncloud.org/install
|
||||
Source code: http://gitorious.org/owncloud
|
||||
|
||||
Mailing list: http://mail.kde.org/mailman/listinfo/owncloud
|
||||
|
|
|
@ -29,6 +29,9 @@ if($starttime != 'undefined' && !is_nan($starttime) && !$allday){
|
|||
$startminutes = '00';
|
||||
}else{
|
||||
$starttime = date('H');
|
||||
if(strlen($starttime) == 2 && $starttime <= 9){
|
||||
$starttime = substr($starttime, 1, 1);
|
||||
}
|
||||
$startminutes = date('i');
|
||||
}
|
||||
|
||||
|
@ -38,7 +41,18 @@ $endyear = $startyear;
|
|||
$endtime = $starttime;
|
||||
$endminutes = $startminutes;
|
||||
if($endtime == 23) {
|
||||
$endday++;
|
||||
if($startday == date(t, mktime($starttime, $startminutes, 0, $startmonth, $startday, $startyear))){
|
||||
$datetimestamp = mktime(0, 0, 0, $startmonth, $startday, $startyear);
|
||||
$datetimestamp = $datetimestamp + 86400;
|
||||
$endmonth = date("m", $datetimestamp);
|
||||
$endday = date("d", $datetimestamp);
|
||||
$endyear = date("Y", $datetimestamp);
|
||||
}else{
|
||||
$endday++;
|
||||
if($endday <= 9){
|
||||
$endday = "0" . $endday;
|
||||
}
|
||||
}
|
||||
$endtime = 0;
|
||||
} else {
|
||||
$endtime++;
|
||||
|
|
|
@ -7,4 +7,5 @@
|
|||
<author>Georg Ehrke (Userinterface), Jakob Sack</author>
|
||||
<require>2</require>
|
||||
<description>Calendar with CalDAV support</description>
|
||||
<default_enable/>
|
||||
</info>
|
||||
|
|
|
@ -352,6 +352,10 @@ Calendar={
|
|||
}
|
||||
},"json");
|
||||
},
|
||||
showadvancedoptions:function(){
|
||||
$("#advanced_options").css("display", "block");
|
||||
$("#advanced_options_button").css("display", "none");
|
||||
},
|
||||
createEventPopup:function(e){
|
||||
var popup = $(this).data('popup');
|
||||
if (!popup){
|
||||
|
|
|
@ -5,12 +5,6 @@
|
|||
<input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Title of the Event");?>" value="<?php echo isset($_['title']) ? $_['title'] : '' ?>" maxlength="100" name="title"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th width="75px"><?php echo $l->t("Location");?>:</th>
|
||||
<td>
|
||||
<input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Location of the Event");?>" value="<?php echo isset($_['location']) ? $_['location'] : '' ?>" maxlength="100" name="location" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table>
|
||||
<tr>
|
||||
|
@ -60,7 +54,12 @@
|
|||
|
||||
<input type="time" value="<?php echo $_['endtime'];?>" name="totime" id="totime">
|
||||
</td><!--use jquery-->
|
||||
</tr><!--
|
||||
</tr>
|
||||
</table>
|
||||
<input type="button" class="submit" value="<?php echo $l->t("Advanced options"); ?>" onclick="Calendar.UI.showadvancedoptions();" id="advanced_options_button">
|
||||
<div id="advanced_options" style="display: none;">
|
||||
<!--
|
||||
<table>
|
||||
<tr>
|
||||
<th width="75px"><?php echo $l->t("Repeat");?>:</th>
|
||||
<td>
|
||||
|
@ -85,7 +84,16 @@
|
|||
<hr>-->
|
||||
<table>
|
||||
<tr>
|
||||
<th width="75px" style="vertical-align: top;"><?php echo $l->t("Description");?>:</th>
|
||||
<th width="85px"><?php echo $l->t("Location");?>:</th>
|
||||
<td>
|
||||
<input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Location of the Event");?>" value="<?php echo isset($_['location']) ? $_['location'] : '' ?>" maxlength="100" name="location" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table>
|
||||
<tr>
|
||||
<th width="85px" style="vertical-align: top;"><?php echo $l->t("Description");?>:</th>
|
||||
<td><textarea style="width:350px;height: 150px;" placeholder="<?php echo $l->t("Description of the Event");?>" name="description"><?php echo isset($_['description']) ? $_['description'] : '' ?></textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
|
|
@ -7,4 +7,5 @@
|
|||
<author>Jakob Sack</author>
|
||||
<require>2</require>
|
||||
<description>Address book with CardDAV support.</description>
|
||||
<default_enable/>
|
||||
</info>
|
||||
|
|
|
@ -7,4 +7,5 @@
|
|||
<licence>AGPL</licence>
|
||||
<author>Robin Appelman</author>
|
||||
<require>2</require>
|
||||
</info>
|
||||
<default_enable/>
|
||||
</info>
|
||||
|
|
|
@ -7,4 +7,5 @@
|
|||
<licence>AGPL</licence>
|
||||
<author>Michael Gapczynski</author>
|
||||
<require>2</require>
|
||||
</info>
|
||||
<default_enable/>
|
||||
</info>
|
||||
|
|
|
@ -6,4 +6,5 @@
|
|||
<licence>AGPL</licence>
|
||||
<author>Robin Appelman</author>
|
||||
<require>2</require>
|
||||
<default_enable/>
|
||||
</info>
|
||||
|
|
|
@ -7,4 +7,5 @@
|
|||
<licence>AGPL</licence>
|
||||
<author>Robin Appelman</author>
|
||||
<require>2</require>
|
||||
</info>
|
||||
<default_enable/>
|
||||
</info>
|
||||
|
|
|
@ -9,8 +9,9 @@ div.jp-progress { position:absolute; overflow:hidden; top:.5em; left:8em; width:
|
|||
div.jp-seek-bar { background:#eee; width:0; height:100%; cursor:pointer; }
|
||||
div.jp-play-bar { background:#ccc; width:0; height:100%; }
|
||||
div.jp-seeking-bg { background:url("../img/pbar-ani.gif"); }
|
||||
div.jp-current-time,div.jp-duration { position:absolute; font-size:.64em; font-style:oblique; top:1em; left:13.5em; }
|
||||
div.jp-duration { left:33em; }
|
||||
div.jp-current-time,div.jp-duration { position:absolute; font-size:.64em; font-style:oblique; top:0.9em; left:13.5em; }
|
||||
div.jp-duration { display: none }
|
||||
div.jp-current-song { left: 33em; position: absolute; top: 0.9em; }
|
||||
div.jp-duration { text-align:right; }
|
||||
|
||||
a.jp-mute,a.jp-unmute { left:24em; }
|
||||
|
@ -21,9 +22,11 @@ div.jp-volume-bar-value { background:#ccc; width:0; height:0.4em; }
|
|||
#collection li.album,#collection li.song { margin-left:3em; }
|
||||
#leftcontent img.remove { display:none; float:right; cursor:pointer; }
|
||||
#leftcontent li:hover img.remove { display:inline; }
|
||||
#leftcontent li {white-space: normal; }
|
||||
#collection li button { float:right; }
|
||||
#collection li,#playlist li { list-style-type:none; }
|
||||
.template { display:none; }
|
||||
.collection_playing { background:#eee; }
|
||||
|
||||
#collection li { padding-right:10px; }
|
||||
#searchresults input.play, #searchresults input.add { float:left; height:1em; width:1em; }
|
||||
|
@ -34,6 +37,7 @@ tr td { border-top:1px solid #eee; height:2.2em; }
|
|||
tr .artist img { vertical-align:middle; }
|
||||
tr.album td.artist { padding-left:1em; }
|
||||
tr.song td.artist { padding-left:2em; }
|
||||
.add {margin: 0 0.5em 0 0; }
|
||||
|
||||
#scan { position:absolute; right:13em; top:0em; }
|
||||
#scan .start { position:relative; display:inline; float:right; }
|
||||
|
|
|
@ -15,7 +15,7 @@ $(document).ready(function(){
|
|||
PlayList.play(oldSize);
|
||||
PlayList.render();
|
||||
});
|
||||
var button=$('<input type="button" title="'+t('media','Add to playlist')+'" class="add"></input>');
|
||||
var button=$('<input type="button" title="'+t('media','Add album to playlist')+'" class="add"></input>');
|
||||
button.css('background-image','url('+OC.imagePath('core','actions/play-add')+')')
|
||||
button.click(function(event){
|
||||
event.stopPropagation();
|
||||
|
@ -24,6 +24,7 @@ $(document).ready(function(){
|
|||
});
|
||||
row.find('div.name').append(button);
|
||||
}
|
||||
$('.add').tipsy({gravity:'n', fade:true, delayIn: 400, live:true});
|
||||
Collection.display();
|
||||
});
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ var PlayList={
|
|||
PlayList.init(items[index].type,null); // init calls load that calls play
|
||||
}else{
|
||||
PlayList.player.jPlayer("setMedia", items[PlayList.current]);
|
||||
$(".jp-current-song").text(items[PlayList.current].name);
|
||||
items[index].playcount++;
|
||||
PlayList.player.jPlayer("play",time);
|
||||
if(index>0){
|
||||
|
@ -67,6 +68,8 @@ var PlayList={
|
|||
PlayList.init(items[index].type,null); // init calls load that calls play
|
||||
}
|
||||
}
|
||||
$(".song").removeClass("collection_playing");
|
||||
$(".jp-playlist-" + index).addClass("collection_playing");
|
||||
},
|
||||
init:function(type,ready){
|
||||
if(!PlayList.player){
|
||||
|
|
|
@ -5,6 +5,7 @@ PlayList.render=function(){
|
|||
var item=PlayList.items[i];
|
||||
var li=$('<li/>');
|
||||
li.append(item.name);
|
||||
li.attr('class', 'jp-playlist-' + i);
|
||||
var img=$('<img class="remove svg action" src="'+OC.imagePath('core','actions/delete')+'"/>');
|
||||
img.click(function(event){
|
||||
event.stopPropagation();
|
||||
|
@ -18,6 +19,7 @@ PlayList.render=function(){
|
|||
li.addClass('song');
|
||||
PlayList.parent.append(li);
|
||||
}
|
||||
$(".jp-playlist-" + PlayList.current).addClass("collection_playing");
|
||||
}
|
||||
PlayList.getSelected=function(){
|
||||
return $('tbody td.name input:checkbox:checked').parent().parent();
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
<div class="jp-volume-bar">
|
||||
<div class="jp-volume-bar-value"></div>
|
||||
</div>
|
||||
<div class="jp-current-song"></div>
|
||||
|
||||
<div class="player" id="jp-player"></div>
|
||||
|
||||
|
|
|
@ -7,4 +7,5 @@
|
|||
<licence>AGPL</licence>
|
||||
<author>Robin Appelman</author>
|
||||
<require>2</require>
|
||||
</info>
|
||||
<default_enable/>
|
||||
</info>
|
||||
|
|
|
@ -243,13 +243,14 @@ class OC_Installer{
|
|||
* If $enabled is true, apps are installed as enabled.
|
||||
* If $enabled is false, apps are installed as disabled.
|
||||
*/
|
||||
public static function installShippedApps( $enabled ){
|
||||
public static function installShippedApps(){
|
||||
$dir = opendir( OC::$SERVERROOT."/apps" );
|
||||
while( false !== ( $filename = readdir( $dir ))){
|
||||
if( substr( $filename, 0, 1 ) != '.' and is_dir(OC::$SERVERROOT."/apps/$filename") ){
|
||||
if( file_exists( OC::$SERVERROOT."/apps/$filename/appinfo/app.php" )){
|
||||
if(!OC_Installer::isInstalled($filename)){
|
||||
OC_Installer::installShippedApp($filename);
|
||||
$info = OC_Installer::installShippedApp($filename);
|
||||
$enabled = isset($info['default_enable']);
|
||||
if( $enabled ){
|
||||
OC_Appconfig::setValue($filename,'enabled','yes');
|
||||
}else{
|
||||
|
@ -265,7 +266,7 @@ class OC_Installer{
|
|||
/**
|
||||
* install an app already placed in the app folder
|
||||
* @param string $app id of the app to install
|
||||
* @return bool
|
||||
* @returns array see OC_App::getAppInfo
|
||||
*/
|
||||
public static function installShippedApp($app){
|
||||
//install the database
|
||||
|
@ -279,5 +280,6 @@ class OC_Installer{
|
|||
}
|
||||
$info=OC_App::getAppInfo(OC::$SERVERROOT."/apps/$app/appinfo/info.xml");
|
||||
OC_Appconfig::setValue($app,'installed_version',$info['version']);
|
||||
return $info;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -206,7 +206,7 @@ class OC_Setup {
|
|||
OC_User::login($username, $password);
|
||||
|
||||
//guess what this does
|
||||
OC_Installer::installShippedApps(true);
|
||||
OC_Installer::installShippedApps();
|
||||
|
||||
//create htaccess files for apache hosts
|
||||
if (strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) {
|
||||
|
|
47
lib/util.php
47
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 (".exec('whoami').")")));
|
||||
$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->printPage();
|
||||
exit;
|
||||
}
|
||||
|
@ -208,28 +208,21 @@ class OC_Util {
|
|||
}
|
||||
$CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" );
|
||||
$CONFIG_DBNAME = OC_Config::getValue( "dbname", "owncloud" );
|
||||
|
||||
//try to get the username the httpd server runs on, used in hints
|
||||
$stat=stat($_SERVER['DOCUMENT_ROOT']);
|
||||
if(is_callable('posix_getpwuid')){
|
||||
$serverUser=posix_getpwuid($stat['uid']);
|
||||
$serverUser='\''.$serverUser['name'].'\'';
|
||||
}else{
|
||||
$serverUser='\'www-data\' for ubuntu/debian';//TODO: try to detect the distro and give a guess based on that
|
||||
}
|
||||
$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)";
|
||||
|
||||
//check for correct file permissions
|
||||
if(!stristr(PHP_OS, 'WIN')){
|
||||
$permissionsModHint="Please change the permissions to 0770 so that the directory cannot be listed by other users.";
|
||||
$prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY_ROOT)),-3);
|
||||
if(substr($prems,-1)!='0'){
|
||||
OC_Helper::chmodr($CONFIG_DATADIRECTORY_ROOT,0770);
|
||||
clearstatcache();
|
||||
$prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY_ROOT)),-3);
|
||||
if(substr($prems,2,1)!='0'){
|
||||
$errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') is readable from the web<br/>','hint'=>$permissionsHint);
|
||||
$errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') is readable for other users<br/>','hint'=>$permissionsModHint);
|
||||
}
|
||||
}
|
||||
if( OC_Config::getValue( "enablebackup", false )){
|
||||
|
@ -239,7 +232,7 @@ class OC_Util {
|
|||
clearstatcache();
|
||||
$prems=substr(decoct(@fileperms($CONFIG_BACKUPDIRECTORY)),-3);
|
||||
if(substr($prems,2,1)!='0'){
|
||||
$errors[]=array('error'=>'Data directory ('.$CONFIG_BACKUPDIRECTORY.') is readable from the web<br/>','hint'=>$permissionsHint);
|
||||
$errors[]=array('error'=>'Data directory ('.$CONFIG_BACKUPDIRECTORY.') is readable for other users<br/>','hint'=>$permissionsModHint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -250,11 +243,39 @@ class OC_Util {
|
|||
$errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') not writable by ownCloud<br/>','hint'=>$permissionsHint);
|
||||
}
|
||||
|
||||
//TODO: check for php modules
|
||||
// check if all required php modules are present
|
||||
if(!class_exists('ZipArchive')){
|
||||
$errors[]=array('error'=>'PHP module ZipArchive not installed.<br/>','hint'=>'Please ask your server administrator to install the module.');
|
||||
}
|
||||
|
||||
if(!function_exists('mb_detect_encoding')){
|
||||
$errors[]=array('error'=>'PHP module mb multibyte not installed.<br/>','hint'=>'Please ask your server administrator to install the module.');
|
||||
}
|
||||
if(!function_exists('ctype_digit')){
|
||||
$errors[]=array('error'=>'PHP module ctype is not installed.<br/>','hint'=>'Please ask your server administrator to install the module.');
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Try to get the username the httpd server runs on, used in hints
|
||||
*/
|
||||
public static function checkWebserverUser(){
|
||||
$stat=stat($_SERVER['DOCUMENT_ROOT']);
|
||||
if(is_callable('posix_getpwuid')){
|
||||
$serverUser=posix_getpwuid($stat['uid']);
|
||||
$serverUser='\''.$serverUser['name'].'\'';
|
||||
}elseif(exec('whoami')){
|
||||
$serverUser=exec('whoami');
|
||||
}else{
|
||||
$serverUser='\'www-data\' for ubuntu/debian'; //TODO: try to detect the distro and give a guess based on that
|
||||
}
|
||||
return $serverUser;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if the user is logged in, redirects to home if not
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue