Merge branch 'master' of git://gitorious.org/+owncloud-reviewers/owncloud/owncloud2 into stable

This commit is contained in:
Jan-Christoph Borchardt 2011-10-22 18:10:26 +02:00
commit 27936ab9c7
109 changed files with 352 additions and 1554 deletions

5
.gitignore vendored
View file

@ -32,4 +32,7 @@ RCS/*
# netbeans
nbproject
.DS_Store
# geany
*.geany
.DS_Store

View file

@ -2,13 +2,14 @@ Files in ownCloud are licensed under the Affero General Public License version 3
the text of which can be found in COPYING-AGPL, or any later version of the AGPL,
unless otherwise noted.
Components of ownCloud:
* jQuery is dual licensed under MIT and GPL
* HTTP is three clause BSD license
* MDB2 uses a custom license in the BSD style
* User is AGPL
* XML/RPC is both MIT and PHP license
Licensing of components:
* jQuery: MIT / GPL
* HTTP: 3 clause BSD
* MDB2: BSD style custom
* User: AGPL
* XML/RPC: MIT / PHP
* Silk icons: Creative Commons Attribution
All unmodified files from these and other sources retain their original copyright
and license notices: see the relevant individual files.
Attribution information for ownCloud is contained in the AUTHORS file.
Attribution information for ownCloud is contained in the AUTHORS file.

View file

@ -41,6 +41,5 @@ $metadata = getURLMetadata($url);
$tmpl->assign('URL', htmlentities($metadata['url']));
$tmpl->assign('TITLE', htmlentities($metadata['title']));
$tmpl->assign('DESCRIPTION', htmlentities($metadata['description']));
$tmpl->printPage();

View file

@ -40,15 +40,14 @@ if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){
//FIXME: Detect when user adds a known URL
$query = OC_DB::prepare("
INSERT INTO *PREFIX*bookmarks
(url, title, description, user_id, public, added, lastmodified)
VALUES (?, ?, ?, ?, 0, $_ut, $_ut)
(url, title, user_id, public, added, lastmodified)
VALUES (?, ?, ?, 0, $_ut, $_ut)
");
$params=array(
htmlspecialchars_decode($_GET["url"]),
htmlspecialchars_decode($_GET["title"]),
htmlspecialchars_decode($_GET["description"]),
OC_User::getUser()
);
$query->execute($params);

View file

@ -41,14 +41,13 @@ $bookmark_id = (int)$_GET["id"];
$query = OC_DB::prepare("
UPDATE *PREFIX*bookmarks
SET url = ?, title =?, description = ?, lastmodified = $_ut
SET url = ?, title =?, lastmodified = $_ut
WHERE id = $bookmark_id
");
$params=array(
htmlspecialchars_decode($_GET["url"]),
htmlspecialchars_decode($_GET["title"]),
htmlspecialchars_decode($_GET["description"]),
);
$query->execute($params);

View file

@ -59,7 +59,7 @@ if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){
}
$query = OC_DB::prepare('
SELECT id, url, title, description,
SELECT id, url, title,
CASE WHEN *PREFIX*bookmarks.id = *PREFIX*bookmarks_tags.bookmark_id
THEN GROUP_CONCAT( tag ' .$_gc_separator. ' )
ELSE \' \'

View file

@ -1,27 +1,14 @@
<?php
/**
* ownCloud - bookmarks plugin
*
* @author Arthur Schiwon
* @copyright 2011 Arthur Schiwon blizzz@arthur-schiwon.de
*
* 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 Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright (c) 2011 Marvin Thomas Rabe <m.rabe@echtzeitraum.de>
* Copyright (c) 2011 Arthur Schiwon <blizzz@arthur-schiwon.de>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
OC_App::register( array( 'order' => 70, 'id' => 'bookmark', 'name' => 'Bookmarks' ));
OC_App::addNavigationEntry( array( 'id' => 'bookmarks_index', 'order' => 70, 'href' => OC_Helper::linkTo( 'bookmarks', 'index.php' ), 'icon' => OC_Helper::imagePath( 'bookmarks', 'bookmarks.png' ), 'name' => 'Bookmarks' ));
OC_App::registerPersonal('bookmarks', 'settings');

View file

@ -29,13 +29,6 @@
<notnull>true</notnull>
<length>140</length>
</field>
<field>
<name>description</name>
<type>text</type>
<default></default>
<notnull>false</notnull>
<length>255</length>
</field>
<field>
<name>user_id</name>
<type>text</type>

View file

@ -1,5 +1,52 @@
<?php
// Source: http://www.php.net/manual/de/function.curl-setopt.php#102121
// This works around a safe_mode/open_basedir restriction
function curl_exec_follow(/*resource*/ $ch, /*int*/ &$maxredirect = null) {
$mr = $maxredirect === null ? 5 : intval($maxredirect);
if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off')) {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $mr > 0);
curl_setopt($ch, CURLOPT_MAXREDIRS, $mr);
} else {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
if ($mr > 0) {
$newurl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$rch = curl_copy_handle($ch);
curl_setopt($rch, CURLOPT_HEADER, true);
curl_setopt($rch, CURLOPT_NOBODY, true);
curl_setopt($rch, CURLOPT_FORBID_REUSE, false);
curl_setopt($rch, CURLOPT_RETURNTRANSFER, true);
do {
curl_setopt($rch, CURLOPT_URL, $newurl);
$header = curl_exec($rch);
if (curl_errno($rch)) {
$code = 0;
} else {
$code = curl_getinfo($rch, CURLINFO_HTTP_CODE);
if ($code == 301 || $code == 302) {
preg_match('/Location:(.*?)\n/', $header, $matches);
$newurl = trim(array_pop($matches));
} else {
$code = 0;
}
}
} while ($code && --$mr);
curl_close($rch);
if (!$mr) {
if ($maxredirect === null) {
trigger_error('Too many redirects. When following redirects, libcurl hit the maximum amount.', E_USER_WARNING);
} else {
$maxredirect = 0;
}
return false;
}
curl_setopt($ch, CURLOPT_URL, $newurl);
}
}
return curl_exec($ch);
}
function getURLMetadata($url) {
//allow only http(s) and (s)ftp
$protocols = '/^[hs]{0,1}[tf]{0,1}tp[s]{0,1}\:\/\//i';
@ -12,17 +59,11 @@ function getURLMetadata($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($ch);
$page = curl_exec_follow($ch);
curl_close($ch);
@preg_match( "/<title>(.*)<\/title>/si", $page, $match );
$metadata['title'] = htmlspecialchars_decode(@$match[1]);
$meta = get_meta_tags($url);
if(array_key_exists('description', $meta)) {
$metadata['description'] = $meta['description'];
}
return $metadata;
}

View file

@ -12,34 +12,13 @@
padding: 0.5ex;
}
.bookmark_actions {
font-size: smaller;
color: #ff44ff;
padding-left: 4em;
}
.bookmark_actions span:hover {
cursor: pointer;
text-decoration: underline;
}
.bookmarks_sorting {
float: left;
margin-left: 2em;
}
.bookmarks_sorting li {
padding: 1ex 1em;
border: 1px solid gray;
-moz-border-radius:1em; -webkit-border-radius:1em; border-radius:1em;
}
.bookmarks_sorting_active {
font-weight: bold;
}
.bookmarks_add {
display: none;
margin-top: 45px;
}
.bookmarks_list {
margin-top: 45px;
}
.bookmarks_addBml {
@ -56,15 +35,28 @@
width: 20em;
}
.bookmark_actions {
display: none;
font-size: smaller;
color: #666;
padding-left: 4em;
}
.bookmark_actions span:hover {
cursor: pointer;
text-decoration: underline;
}
.bookmark_single {
margin-left: 2em;
margin-top: 3ex;
padding: 0.5ex;
/* border-bottom: 1px solid black; */
padding: 0.5em 1em;
}
.bookmark_single:hover {
background-color: #ccccff;
background-color: #EAEAEA;
}
.bookmark_single:hover .bookmark_actions {
display: block;
}
.bookmark_title {
@ -77,14 +69,10 @@
color: green;
}
.bookmark_tags {
.bookmark_tag {
color: #ff3333;
}
.clear {
clear:both;
}
.loading_meta {
display: none;
margin-left: 5px;

View file

@ -5,11 +5,10 @@ $(document).ready(function() {
function addBookmark(event) {
var url = $('#bookmark_add_url').val();
var title = $('#bookmark_add_title').val();
var description = $('#bookmark_add_description').val();
var tags = $('#bookmark_add_tags').val();
$.ajax({
url: 'ajax/addBookmark.php',
data: 'url=' + encodeURI(url) + '&title=' + encodeURI(title) + '&description=' + encodeURI(description) + '&tags=' + encodeURI(tags),
data: 'url=' + encodeURI(url) + '&title=' + encodeURI(title) + '&tags=' + encodeURI(tags),
success: function(data){
location.href='index.php';
}

View file

@ -12,9 +12,6 @@ $(document).ready(function() {
$(window).scroll(updateOnBottom);
$('#bookmark_add_url').focusout(getMetadata);
$('.' + bookmarks_sorting).addClass('bookmarks_sorting_active');
$('.bookmarks_sorting li').click(function(event){changeSorting(this)});
$('.bookmarks_list').empty();
getBookmarks();
@ -39,6 +36,7 @@ function getBookmarks() {
for(var i in bookmarks.data) {
updateBookmarksList(bookmarks.data[i]);
}
$('.bookmark_link').click(recordClick);
$('.bookmark_delete').click(delBookmark);
$('.bookmark_edit').click(showBookmark);
@ -57,36 +55,21 @@ function getMetadata() {
success: function(pageinfo){
$('#bookmark_add_url').val(pageinfo.data.url);
$('#bookmark_add_title').val(pageinfo.data.title);
if (pageinfo.data.description !== undefined){
$('#bookmark_add_description').val(pageinfo.data.description);
}
$('.loading_meta').css('display','none');
}
});
}
function changeSorting(sortEl) {
$('.' + bookmarks_sorting).removeClass('bookmarks_sorting_active');
bookmarks_sorting = sortEl.className;
$('.' + bookmarks_sorting).addClass('bookmarks_sorting_active');
$('.bookmarks_list').empty();
bookmarks_page = 0;
bookmarks_loading = false;
getBookmarks();
}
// function addBookmark() {
// Instead of creating editBookmark() function, Converted the one above to
// addOrEditBookmark() to make .js file more compact.
function addOrEditBookmark(event) {
var id = $('#bookmark_add_id').val();
var url = encodeEntities($('#bookmark_add_url').val())
var title = encodeEntities($('#bookmark_add_title').val())
var description = encodeEntities($('#bookmark_add_description').val())
var tags = encodeEntities($('#bookmark_add_tags').val())
var taglist = tags.split(' ')
var url = encodeEntities($('#bookmark_add_url').val());
var title = encodeEntities($('#bookmark_add_title').val());
var tags = encodeEntities($('#bookmark_add_tags').val());
var taglist = tags.split(' ');
var tagshtml = '';
for ( var i=0, len=taglist.length; i<len; ++i ){
tagshtml += '<a class="bookmark_tag" href="?tag=' + encodeURI(taglist[i]) + '">' + taglist[i] + '</a> ';
@ -95,16 +78,15 @@ function addOrEditBookmark(event) {
if (id == 0) {
$.ajax({
url: 'ajax/addBookmark.php',
data: 'url=' + encodeURI(url) + '&title=' + encodeURI(title) + '&description=' + encodeURI(description) + '&tags=' + encodeURI(tags),
data: 'url=' + encodeURI(url) + '&title=' + encodeURI(title) + '&tags=' + encodeURI(tags),
success: function(response){
var bookmark_id = response.data;
$('.bookmarks_add').slideToggle();
$('.bookmarks_add').children('p').children('.bookmarks_input').val('');
$('.bookmarks_list').prepend(
'<div class="bookmark_single" data-id="' + bookmark_id + '" >' +
'<p class="bookmark_title"><a href="' + url + '" target="_new" class="bookmark_link">' + title + '</a></p>' +
'<p class="bookmark_title"><a href="' + url + '" target="_blank" class="bookmark_link">' + title + '</a></p>' +
'<p class="bookmark_url">' + url + '</p>' +
'<p class="bookmark_description">' + description + '</p>' +
'<p class="bookmark_tags">' + tagshtml + '</p>' +
'<p class="bookmark_actions"><span class="bookmark_delete">Delete</span>&nbsp;<span class="bookmark_edit">Edit</span></p>' +
'</div>'
@ -115,8 +97,7 @@ function addOrEditBookmark(event) {
else {
$.ajax({
url: 'ajax/editBookmark.php',
data: 'id=' + id + '&url=' + encodeURI(url) + '&title=' + encodeURI(title) + '&description=' +
encodeURI(description) + '&tags=' + encodeURI(tags),
data: 'id=' + id + '&url=' + encodeURI(url) + '&title=' + encodeURI(title) + '&tags=' + encodeURI(tags),
success: function(){
$('.bookmarks_add').slideToggle();
$('.bookmarks_add').children('p').children('.bookmarks_input').val('');
@ -124,7 +105,6 @@ function addOrEditBookmark(event) {
var record = $('.bookmark_single[data-id = "' + id + '"]');
record.children('.bookmark_url:first').text(url);
record.children('.bookmark_description:first').text(description);
var record_title = record.children('.bookmark_title:first').children('a:first');
record_title.attr('href', url);
@ -138,7 +118,7 @@ function addOrEditBookmark(event) {
}
function delBookmark(event) {
var record = $(this).parent().parent()
var record = $(this).parent().parent();
$.ajax({
url: 'ajax/delBookmark.php',
data: 'url=' + encodeURI($(this).parent().parent().children('.bookmark_url:first').text()),
@ -151,7 +131,6 @@ function showBookmark(event) {
$('#bookmark_add_id').val(record.attr('data-id'));
$('#bookmark_add_url').val(record.children('.bookmark_url:first').text());
$('#bookmark_add_title').val(record.children('.bookmark_title:first').text());
$('#bookmark_add_description').val(record.children('.bookmark_description:first').text());
$('#bookmark_add_tags').val(record.children('.bookmark_tags:first').text());
if ($('.bookmarks_add').css('display') == 'none') {
@ -163,10 +142,6 @@ function showBookmark(event) {
}
function editBookmark(event) {
}
function updateBookmarksList(bookmark) {
var tags = encodeEntities(bookmark.tags).split(' ');
var taglist = '';
@ -178,9 +153,8 @@ function updateBookmarksList(bookmark) {
}
$('.bookmarks_list').append(
'<div class="bookmark_single" data-id="' + bookmark.id +'" >' +
'<p class="bookmark_title"><a href="' + encodeEntities(bookmark.url) + '" target="_new" class="bookmark_link">' + encodeEntities(bookmark.title) + '</a></p>' +
'<p class="bookmark_title"><a href="' + encodeEntities(bookmark.url) + '" target="_blank" class="bookmark_link">' + encodeEntities(bookmark.title) + '</a></p>' +
'<p class="bookmark_url">' + encodeEntities(bookmark.url) + '</p>' +
'<p class="bookmark_description">' + encodeEntities(bookmark.description) + '</p>' +
'<p class="bookmark_tags">' + taglist + '</p>' +
'<p class="bookmark_actions"><span class="bookmark_delete">Delete</span>&nbsp;<span class="bookmark_edit">Edit</span></p>' +
'</div>'

View file

@ -0,0 +1,13 @@
<?php
/**
* Copyright (c) 2011 Marvin Thomas Rabe <m.rabe@echtzeitraum.de>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
$tmpl = new OC_Template( 'bookmarks', 'settings');
OC_Util::addScript('bookmarks','settings');
return $tmpl->fetchPage();

View file

@ -1,7 +1,6 @@
<div class="bookmarks_addBm">
<p><label class="bookmarks_label"><?php echo $l->t('Address'); ?></label><input type="text" id="bookmark_add_url" class="bookmarks_input" value="<?php echo $_['URL']; ?>"/></p>
<p><label class="bookmarks_label"><?php echo $l->t('Title'); ?></label><input type="text" id="bookmark_add_title" class="bookmarks_input" value="<?php echo $_['TITLE']; ?>" /></p>
<p><label class="bookmarks_label"><?php echo $l->t('Description'); ?></label><input type="text" id="bookmark_add_description" class="bookmarks_input" value="<?php echo $_['DESCRIPTION']; ?>" /></p>
<p><label class="bookmarks_label"><?php echo $l->t('Tags'); ?></label><input type="text" id="bookmark_add_tags" class="bookmarks_input" /></p>
<p><label class="bookmarks_label"> </label><label class="bookmarks_hint"><?php echo $l->t('Hint: Use space to separate tags.'); ?></label></p>
<p><label class="bookmarks_label"></label><input type="submit" value="<?php echo $l->t('Add bookmark'); ?>" id="bookmark_add_submit" /></p>

View file

@ -1,27 +1,25 @@
<?php
/**
* Copyright (c) 2011 Marvin Thomas Rabe <m.rabe@echtzeitraum.de>
* Copyright (c) 2011 Arthur Schiwon <blizzz@arthur-schiwon.de>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
?>
<input type="hidden" id="bookmarkFilterTag" value="<?php if(isset($_GET['tag'])) echo htmlentities($_GET['tag']); ?>" />
<h2 class="bookmarks_headline"><?php echo isset($_GET["tag"]) ? $l->t('Bookmarks with tag: ') . urldecode($_GET["tag"]) : $l->t('All bookmarks'); ?></h2>
<div class="bookmarks_menu">
<input type="button" class="bookmarks_addBtn" value="<?php echo $l->t('Add bookmark'); ?>"/>&nbsp;
<a class="bookmarks_addBml" href="javascript:var url = encodeURIComponent(location.href);window.open('<?php echo OC_Helper::linkTo('bookmarks', 'addBm.php', null, true); ?>?url='+url, 'owncloud-bookmarks');" title="<?php echo $l->t('Drag this to your browser bookmarks and click it, when you want to bookmark a webpage.'); ?>"><?php echo $l->t('Add page to ownCloud'); ?></a>
<div id="controls">
<input type="button" class="bookmarks_addBtn" value="<?php echo $l->t('Add bookmark'); ?>"/>
</div>
<div class="bookmarks_add">
<input type="hidden" id="bookmark_add_id" value="0" />
<p><label class="bookmarks_label"><?php echo $l->t('Address'); ?></label><input type="text" id="bookmark_add_url" class="bookmarks_input" /></p>
<p><label class="bookmarks_label"><?php echo $l->t('Title'); ?></label><input type="text" id="bookmark_add_title" class="bookmarks_input" />
<img class="loading_meta" src="<?php echo OC_Helper::imagePath('core', 'loading.gif'); ?>" /></p>
<p><label class="bookmarks_label"><?php echo $l->t('Description'); ?></label><input type="text" id="bookmark_add_description" class="bookmarks_input" />
<img class="loading_meta" src="<?php echo OC_Helper::imagePath('core', 'loading.gif'); ?>" /></p>
<p><label class="bookmarks_label"><?php echo $l->t('Tags'); ?></label><input type="text" id="bookmark_add_tags" class="bookmarks_input" /></p>
<p><label class="bookmarks_label"> </label><label class="bookmarks_hint"><?php echo $l->t('Hint: Use space to separate tags.'); ?></label></p>
<p><label class="bookmarks_label"></label><input type="submit" value="<?php echo $l->t('Add bookmark'); ?>" id="bookmark_add_submit" /></p>
</div>
<div class="bookmarks_sorting pager">
<ul>
<li class="bookmarks_sorting_recent"><?php echo $l->t('Recent Bookmarks'); ?></li>
<li class="bookmarks_sorting_clicks"><?php echo $l->t('Most clicks'); ?></li>
</ul>
</div>
<div class="clear"></div>
<div class="bookmarks_list">
<?php echo $l->t('You have no bookmarks'); ?>
</div>
</div>

View file

@ -0,0 +1,14 @@
<?php
/**
* Copyright (c) 2011 Marvin Thomas Rabe <m.rabe@echtzeitraum.de>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
?>
<form id="bookmarks">
<fieldset class="personalblock">
<span class="bold"><?php echo $l->t('Bookmarklet:');?></span>&nbsp;<a class="bookmarks_addBml" href="javascript:var url = encodeURIComponent(location.href);window.open('<?php echo OC_Helper::linkTo('bookmarks', 'addBm.php', null, true); ?>?url='+url, 'owncloud-bookmarks');"><?php echo $l->t('Add page to ownCloud'); ?></a>
<br/><em><?php echo $l->t('Drag this to your browser bookmarks and click it, when you want to bookmark a webpage.'); ?></em><br />
</fieldset>
</form>

View file

@ -15,7 +15,7 @@ OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar');
$userid = OC_User::getUser();
$calendarid = OC_Calendar_Calendar::addCalendar($userid, $_POST['name'], $_POST['description'], 'VEVENT,VTODO,VJOURNAL', null, 0, $_POST['color']);
$calendarid = OC_Calendar_Calendar::addCalendar($userid, $_POST['name'], 'VEVENT,VTODO,VJOURNAL', null, 0, $_POST['color']);
OC_Calendar_Calendar::setCalendarActive($calendarid, 1);
$calendar = OC_Calendar_Calendar::findCalendar($calendarid);
$tmpl = new OC_Template('calendar', 'part.choosecalendar.rowfields');

View file

@ -28,674 +28,43 @@ $select_year = $_GET["year"];
$user_timezone = OC_Preferences::getValue(OC_USER::getUser(), "calendar", "timezone", "Europe/London");
foreach($events as $event)
{
if($select_year != substr($event['startdate'], 0, 4) && $event["repeating"] == false)
if ($select_year != substr($event['startdate'], 0, 4))
continue;
if($select_year == substr($event['startdate'], 0, 4) && $event["repeating"] == false){
$object = Sabre_VObject_Reader::read($event['calendardata']);
$vevent = $object->VEVENT;
$dtstart = $vevent->DTSTART;
$dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
$start_dt = $dtstart->getDateTime();
$start_dt->setTimezone(new DateTimeZone($user_timezone));
$end_dt = $dtend->getDateTime();
$end_dt->setTimezone(new DateTimeZone($user_timezone));
$year = $start_dt->format('Y');
$month = $start_dt->format('n') - 1; // return is 0 based
$day = $start_dt->format('j');
$hour = $start_dt->format('G');
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop)
{
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
if ($hour == 'allday')
{
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour]))
{
$return[$year][$month][$day][$hour][] = $return_event;
}
else
{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
$object = Sabre_VObject_Reader::read($event['calendardata']);
$vevent = $object->VEVENT;
$dtstart = $vevent->DTSTART;
$dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
$start_dt = $dtstart->getDateTime();
$start_dt->setTimezone(new DateTimeZone($user_timezone));
$end_dt = $dtend->getDateTime();
$end_dt->setTimezone(new DateTimeZone($user_timezone));
$year = $start_dt->format('Y');
$month = $start_dt->format('n') - 1; // return is 0 based
$day = $start_dt->format('j');
$hour = $start_dt->format('G');
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
if($event["repeating"] == 1){
$object = Sabre_VObject_Reader::read($event['calendardata']);
$vevent = $object->VEVENT;
//echo substr_count($event["calendardata"], "EXDATE");
$numofelements = substr_count($vevent->RRULE, ";");
$properties = array("FREQ"=>"false", "UNTIL"=>"false", "COUNT"=>"false", "INTERVAL"=>"false", "BYDAY"=>"false", "BYMONTHDAY"=>"false", "BYWEEKNO"=>"false", "BYMONTH"=>"false", "BYYEARDAY"=>"false", "BYSETPOS"=>"false");
$exruleproperties = array("FREQ"=>"false", "UNTIL"=>"false", "COUNT"=>"false", "INTERVAL"=>"false", "BYDAY"=>"false", "BYMONTHDAY"=>"false", "BYWEEKNO"=>"false", "BYMONTH"=>"false", "BYYEARDAY"=>"false", "BYSETPOS"=>"false");
$byday = array("MO"=>"false", "TU"=>"false", "WE"=>"false", "TH"=>"false", "FR"=>"false", "SA"=>"false", "SU"=>"false");
if($numofelements != 0){
$rrule = explode(";", $vevent->RRULE);
for($i = 0;$i <= $numofelements;$i++){
$rule = explode("=", $rrule[$i]);
$property = $rule[0];
$value = $rule[1];
$properties[$property] = $value;
}
if($properties["BYDAY"] != "false"){
$numofdays = substr_count($properties["BYDAY"], ",");
if($numofdays == 0){
if(strlen($properties["BYDAY"]) != 2){
$lenght = strlen($properties["BYDAY"]);
switch($lenght){
case "3":
$properties["BYSETPOS"] = substr($properties["BYDAY"],0,1);
$properties["BYDAY"] = substr($properties["BYDAY"],1,2);
break;
case "4":
$properties["BYSETPOS"] = substr($properties["BYDAY"],0,2);
$properties["BYDAY"] = substr($properties["BYDAY"],2,2);
break;
case "5":
$properties["BYSETPOS"] = substr($properties["BYDAY"],0,3);
$properties["BYDAY"] = substr($properties["BYDAY"],3,2);
break;
case "6":
$properties["BYSETPOS"] = substr($properties["BYDAY"],0,4);
$properties["BYDAY"] = substr($properties["BYDAY"],4,2);
break;
}
}
$byday[$properties["BYDAY"]] = true;
}else{
$days = explode(",", $properties["BYDAY"]);
for($i = 0;$i <= $numofdays;$i++){
$day = $days[$i];
$byday[$day] = true;
}
}
}
}else{
$rule = explode("=", $vevent->RRULE);
$properties[$rule[0]] = $rule[1];
}
if($properties["INTERVAL"] == "false"){
$properties["INTERVAL"] = 1;
}
$count = 0; //counts all loops
$countedoutputs = 0; //counts only the outputs
$countchecker = true;
$dtstart = $vevent->DTSTART;
$dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
$start_dt = $dtstart->getDateTime();
$start_dt->setTimezone(new DateTimeZone($user_timezone));
$end_dt = $dtend->getDateTime();
$end_dt->setTimezone(new DateTimeZone($user_timezone));
$firststart_year = $start_dt->format('Y');
$firststart_month = $start_dt->format('n');
$firststart_day = $start_dt->format('j');
$hour = $start_dt->format('G');
$interval = 0;
if($properties["UNTIL"] != "false"){
$until = $properties["UNTIL"];
$until_year = substr($until, 0, 4);
$until_month = substr($until, 4, 2);
$until_day = substr($until, 6, 2);
}
//print_r($properties);
//print_r($byday);
if($properties["FREQ"] == "DAILY"){
if($properties["BYDAY"] == "false"){
$byday = array("MO"=>"1", "TU"=>"1", "WE"=>"1", "TH"=>"1", "FR"=>"1", "SA"=>"1", "SU"=>"1");
}
while(date("Y", mktime(0,0,0, $firststart_month, $firststart_day, $firststart_year) + ($count * 1 * 86400 * $interval)) <= $select_year && $countchecker == true){
if($byday[strtoupper(substr(date("D", mktime(0,0,0, $firststart_month, $firststart_day, $firststart_year) + ($count * 1 * 86400 * $interval)), 0, 2))] == "1"){
$newunixtime = mktime(0,0,0, $firststart_month, $firststart_day, $firststart_year) + ($count * 1 * 86400 * $interval);
$year = date("Y", $newunixtime);
$month = date("n", $newunixtime) - 1; // return is 0 based
$day = date("j", $newunixtime);
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
}
$count++;
}
}
if($properties["FREQ"] == "WEEKLY"){
if($properties["BYDAY"] == "false"){
$byday[strtoupper(substr(date("D", mktime(0,0,0, $firststart_month, $firststart_day, $firststart_year)), 0, 2))] = "1";
}
while(date("Y", mktime(0,0,0, $firststart_month, $firststart_day, $firststart_year) + ($count * 1 * 86400 * $interval)) <= $select_year && $countchecker == true){
if($byday[strtoupper(substr(date("D", mktime(0,0,0, $firststart_month, $firststart_day, $firststart_year) + ($count * 1 * 86400 * $interval)), 0, 2))] == "1"){
$newunixtime = mktime(0,0,0, $firststart_month, $firststart_day, $firststart_year) + ($count * 1 * 86400 * $interval);
$year = date("Y", $newunixtime);
$month = date("n", $newunixtime) - 1; // return is 0 based
$day = date("j", $newunixtime);
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
}
$count++;
}
}
if($properties["FREQ"] == "MONTHLY"){
if(substr_count($properties["BYMONTHDAY"], ",") != 0){
$numofBYMONTHDAY = substr_count($properties["BYMONTHDAY"], ",");
if($numofBYMONTHDAY == 0){
$BYMONTHDAY = array();
$BYMONTHDAY[0] = $properties["BYMONTHDAY"];
}else{
$BYMONTHDAY = explode(",", $properties["BYMONTHDAY"]);
}
while(date("Y", mktime(0,0,0, $firststart_month + ($count * $interval), $properties["BYMONTHDAY"], $firststart_year)) <= $select_year && $countchecker == true){
for($i = 0;$i <= $numofBYMONTHDAY;$i++){
$newunixtime = mktime(0,0,0, $firststart_month + ($count * $interval), $BYMONTHDAY[$i], $firststart_year);
$year = date("Y", $newunixtime);
$month = date("n", $newunixtime) - 1; // return is 0 based
$day = date("j", $newunixtime);
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
}
$count++;
}
}
//if($properties["BYMONTHDAY"] != "false"){
if($properties["BYSETPOS"] == "false"){
while(date("Y", mktime(0,0,0, $firststart_month + ($count * $interval), $properties["BYMONTHDAY"], $firststart_year)) <= $select_year && $countchecker == true){
$newunixtime = mktime(0,0,0, $firststart_month + ($count * $interval), $properties["BYMONTHDAY"], $firststart_year);
$year = date("Y", $newunixtime);
$month = date("n", $newunixtime) - 1; // return is 0 based
$day = date("j", $newunixtime);
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
$count++;
}
}else{
if(!is_nan($properties["BYSETPOS"]) && $properties["BYSETPOS"] >= 1){
while(date("Y", mktime(0,0,0, $firststart_month + ($count * $interval), $firststart_day, $firststart_year)) <= $select_year && $countchecker == true){
$lastdayofmonth = date("t", mktime(0,0,0, $firststart_month + ($count * $interval), $firststart_day, $firststart_year));
$matches = 0;
$matchedday = "";
for($i = 1;$i <= $lastdayofmonth;$i++){
$thisday = date("j", mktime(0,0,0, $firststart_month + ($count * $interval), $i, $firststart_year));
$thisdayname = strtoupper(substr(date("D", mktime(0,0,0, $firststart_month + ($count * $interval), $i, $firststart_year)),0,2));
//echo $thisdayname . " " . $thisday . "\n";
if($byday[$thisdayname] == 1){
$matches++;
}
if($matches == $properties["BYSETPOS"]){
$matchedday = $thisday;
$i = 32;
}
}
$newunixtime = mktime(0,0,0, $firststart_month + ($count * $interval), $firststart_day, $firststart_year);
$year = date("Y", $newunixtime);
$month = date("n", $newunixtime) - 1; // return is 0 based
$day = $matchedday;
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
$count++;
}
}elseif(!is_nan($properties["BYSETPOS"]) && $properties["BYSETPOS"] <= -1){
while(date("Y", mktime(0,0,0, $firststart_month + ($count * $interval), $firststart_day, $firststart_year)) <= $select_year && $countchecker == true){
$lastdayofmonth = date("t", mktime(0,0,0, $firststart_month + ($count * $interval), 1, $firststart_year));
$matches = 0;
$matchedday = "";
for($i = $lastdayofmonth;$i >= 1;$i--){
$thisday = date("j", mktime(0,0,0, $firststart_month + ($count * $interval), $i, $firststart_year));
$thisdayname = strtoupper(substr(date("D", mktime(0,0,0, $firststart_month + ($count * $interval), $i, $firststart_year)),0,2));
//echo $thisdayname . " " . $thisday . "\n";
if($byday[$thisdayname] == 1){
$matches++;
}
if($matches == $properties["BYSETPOS"]){
$matchedday = $thisday;
$i = 0;
}
}
$newunixtime = mktime(0,0,0, $firststart_month + ($count * $interval), $firststart_day, $firststart_year);
$year = date("Y", $newunixtime);
$month = date("n", $newunixtime) - 1; // return is 0 based
$day = $matchedday;
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
$count++;
}
//}
}
}
if(strlen($properties["BYDAY"]) == 2){
while(date("Y", mktime(0,0,0, $firststart_month + ($count * $interval), $firststart_day, $firststart_year)) <= $select_year && $countchecker == true){
if($byday[strtoupper(substr(date("D", mktime(0,0,0, $firststart_month + ($count * $interval), $firststart_day, $firststart_year)), 0, 2))] == "1"){
$newunixtime = mktime(0,0,0, $firststart_month + ($count * $interval), $firststart_day, $firststart_year);
$year = date("Y", $newunixtime);
$month = date("n", $newunixtime) - 1; // return is 0 based
$day = date("j", $newunixtime);
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
}
$count++;
}
}else{
while(date("Y", mktime(0,0,0, 0, 0, $firststart_year + ($count * $interval))) <= $select_year && $countchecker == true){
$newunixtime = mktime(0,0,0, $properties["BYMONTH"], $properties["BYMONTHDAY"], $firststart_year + ($count * $interval));
$year = date("Y", $newunixtime);
$month = $month - 1; // return is 0 based
$day = $dateofweekone;
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
$count++;
}
}
}
if($properties["FREQ"] == "YEARLY"){
if($properties["BYMONTH"] != "false"){
if($properties["BYMONTHDAY"] == false){
$properties["BYMONTHDAY"] = date("j", mktime(0,0,0, $firststart_month, $firststart_day, $firststart_year));
}
if($properties["BYDAY"] == "false"){
while(date("Y", mktime(0,0,0, $properties["BYMONTH"], $properties["BYMONTHDAY"], $firststart_year + ($count * $interval))) <= $select_year && $countchecker == true){
$newunixtime = mktime(0,0,0, $properties["BYMONTH"], $properties["BYMONTHDAY"], $firststart_year + ($count * $interval));
$year = date("Y", $newunixtime);
$month = date("n", $newunixtime) - 1; // return is 0 based
$day = date("j", $newunixtime);
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
$count++;
}
}
if(strlen($properties["BYDAY"]) == 2){
while(date("Y", mktime(0,0,0, $properties["BYMONTH"], $properties["BYMONTHDAY"], $firststart_year + ($count * $interval))) <= $select_year && $countchecker == true){
$newunixtime = mktime(0,0,0, $properties["BYMONTH"], $properties["BYMONTHDAY"], $firststart_year + ($count * $interval));
$year = date("Y", $newunixtime);
$month = date("n", $newunixtime) - 1; // return is 0 based
$day = date("j", $newunixtime);
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
$count++;
}
}else{
$number = substr($properties["BYDAY"],0,1);
$weekday = substr($properties["BYDAY"],1,2);
$month = $properties["BYMONTH"];
$dateofweekone = "";
for($i = 0; $i <= 7;$i++){
if(strtoupper(substr(date("D", mktime(0,0,0, $properties["BYMONTH"], $i, $select_year)), 0, 2)) == $weekday){
$dateofweekone = date("j", mktime(0,0,0, $properties["BYMONTH"], $i, $select_year));
$i = 8;
}
}
if($number != 1){
$dateofweekone = $dateofweekone + (7 * ($number - 1));
}
while(date("Y", mktime(0,0,0, 0, 0, $firststart_year + ($count * $interval))) <= $select_year && $countchecker == true){
$newunixtime = mktime(0,0,0, $properties["BYMONTH"], $properties["BYMONTHDAY"], $firststart_year + ($count * $interval));
$year = date("Y", $newunixtime);
$month = $month - 1; // return is 0 based
$day = $dateofweekone;
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
$count++;
}
}
}elseif($properties["BYYEARDAY"] != false){
$numofyeardays = substr_count($properties["BYYEARDAY"], ",");
if($numofyeardays == 0){
$yeardays = array();
$yeardays[0] = $properties["BYYEARDAY"];
}else{
$yeardays = explode(",", $properties["BYYEARDAY"]);
}
while(date("Y", mktime(0,0,0, 0, 0, $firststart_year + ($count * $interval)) + ($yeardays[$numofyeardays]-1) * 86400) <= $select_year && $countchecker == true){
for($i = 0;$i <= $numofyeardays;$i++){
$newunixtime = mktime(0,0,0, 1, 1, $firststart_year + ($count * $interval)) + ($yeardays[$i] -1) * 86400;
$year = date("Y", $newunixtime);
$month = date("n", $newunixtime) - 1; // return is 0 based
$day = date("j", $newunixtime);
if($properties["UNTIL"] != "false"){
if($year >= $until_year && $month + 1 >= $until_month && $day > $until_day){
break;
}
}
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
$hour = 'allday';
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop){
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
$interval = $properties["INTERVAL"];
$countedoutputs++;
if($properties["COUNT"] != "false"){
if($countedoutputs == $properties["COUNT"]){
$countchecker = false;
}
}
if ($hour == 'allday'){
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour])){
$return[$year][$month][$day][$hour][] = $return_event;
}else{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
}
$count++;
}
}
}
$return_event = array();
foreach(array('id', 'calendarid', 'objecttype', 'repeating') as $prop)
{
$return_event[$prop] = $event[$prop];
}
$return_event['startdate'] = explode('|', $start_dt->format('Y|m|d|H|i'));
$return_event['enddate'] = explode('|', $end_dt->format('Y|m|d|H|i'));
$return_event['description'] = $event['summary'];
if ($hour == 'allday')
{
$return_event['allday'] = true;
}
if (isset($return[$year][$month][$day][$hour]))
{
$return[$year][$month][$day][$hour][] = $return_event;
}
else
{
$return[$year][$month][$day][$hour] = array(1 => $return_event);
}
}
OC_JSON::encodedPrint($return);

View file

@ -15,7 +15,6 @@ OC_JSON::checkAppEnabled('calendar');
$calendar = array(
'id' => 'new',
'displayname' => '',
'description' => '',
'calendarcolor' => '',
);
$tmpl = new OC_Template('calendar', 'part.editcalendar');

View file

@ -15,7 +15,7 @@ OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar');
$calendarid = $_POST['id'];
OC_Calendar_Calendar::editCalendar($calendarid, $_POST['name'], $_POST['description'], null, null, null, $_POST['color']);
OC_Calendar_Calendar::editCalendar($calendarid, $_POST['name'], null, null, null, $_POST['color']);
OC_Calendar_Calendar::setCalendarActive($calendarid, $_POST['active']);
$calendar = OC_Calendar_Calendar::findCalendar($calendarid);
$tmpl = new OC_Template('calendar', 'part.choosecalendar.rowfields');

View file

@ -153,12 +153,6 @@
<length>4</length>
</field>
<field>
<name>description</name>
<type>clob</type>
<notnull>false</notnull>
</field>
<field>
<name>calendarorder</name>
<type>integer</type>

View file

@ -5,7 +5,7 @@
* See the COPYING-README file.
*/
#view {margin-left: 10px; float: left; font-size: 12px;}
#view { float: left; font-size: 12px; height: 100%;}
#datecontrol {text-align: center;}
#datecontrol_left{font-size: 12px;}
#datecontrol_right{font-size: 12px;}
@ -17,7 +17,6 @@
#editentry_dialog {display: none;}
#parsingfail_dialog{display: none;}
#view {margin-left: 10px; float: left; font-size: 12px; height: 100%;}
#calendar_holder {height: 100%; width: 100%;}
#onedayview, #oneweekview, #fourweeksview, #onemonthview, #listview {display: none; position: absolute;bottom: 0; right: 0; left: 160px; top: 80px;}
#onedayview table {margin: 0; padding: 0; width: 100%; height: 100%; border-spacing:1px; background: #EEEEEE;}
@ -59,5 +58,5 @@ color:#A9A9A9;
select#category{width:140px;}
button.category{margin:0 3px;}
.calendar-colorpicker-color{display:inline-block;width:20px;height:20px;margin-right:2px;cursor:pointer;}
.calendar-colorpicker-color.active{background-image:url("../../../core/img/jquery-ui/ui-icons_222222_256x240.png");background-position:-62px -143px;}
.calendar-colorpicker-color{display:inline-block;width:20px;height:20px;margin-right:2px;cursor:pointer;border:2px solid transparent;}
.calendar-colorpicker-color.active{border:2px solid black;}

View file

@ -23,7 +23,7 @@ if($_GET["import"] == "existing"){
$filename = "/" . $_GET["file"];
}
}else{
$id = OC_Calendar_Calendar::addCalendar(OC_User::getUser(), $_POST['calname'], $_POST['description']);
$id = OC_Calendar_Calendar::addCalendar(OC_User::getUser(), $_POST['calname']);
OC_Calendar_Calendar::setCalendarActive($id, 1);
$calid = $id;
if($_POST["path"] != ""){

View file

@ -200,6 +200,7 @@ Calendar={
});
}
});
window.setTimeout("Calendar.UI.loadEvents(" + year + ")", 120000);
},
getEventsForDate:function(date){
var day = date.getDate();
@ -491,8 +492,6 @@ Calendar={
// based on jquery-colorpicker at jquery.webspirited.com
var obj = $('.colorpicker', container);
var picker = $('<div class="calendar-colorpicker"></div>');
var size = 20;
//build an array of colors
var colors = {};
$(obj).children('option').each(function(i, elm) {
@ -501,7 +500,7 @@ Calendar={
colors[i].label = $(elm).text();
});
for (var i in colors) {
picker.append('<span class="calendar-colorpicker-color ' + (colors[i].color == $(obj).children(":selected").val() ? ' active' : '') + '" rel="' + colors[i].label + '" style="background-color: #' + colors[i].color + '; width: ' + size + 'px; height: ' + size + 'px;"></span>');
picker.append('<span class="calendar-colorpicker-color ' + (colors[i].color == $(obj).children(":selected").val() ? ' active' : '') + '" rel="' + colors[i].label + '" style="background-color: #' + colors[i].color + ';"></span>');
}
picker.delegate(".calendar-colorpicker-color", "click", function() {
$(obj).val($(this).attr('rel'));

View file

@ -30,7 +30,6 @@
* uri VARCHAR(100),
* active INTEGER UNSIGNED NOT NULL DEFAULT '0',
* ctag INTEGER UNSIGNED NOT NULL DEFAULT '0',
* description TEXT,
* calendarorder INTEGER UNSIGNED NOT NULL DEFAULT '0',
* calendarcolor VARCHAR(10),
* timezone TEXT,
@ -94,14 +93,13 @@ class OC_Calendar_Calendar{
* @brief Creates a new calendar
* @param string $userid
* @param string $name
* @param string $description
* @param string $components Default: "VEVENT,VTODO,VJOURNAL"
* @param string $timezone Default: null
* @param integer $order Default: 1
* @param string $color Default: null
* @return insertid
*/
public static function addCalendar($userid,$name,$description,$components='VEVENT,VTODO,VJOURNAL',$timezone=null,$order=0,$color=null){
public static function addCalendar($userid,$name,$components='VEVENT,VTODO,VJOURNAL',$timezone=null,$order=0,$color=null){
$all = self::allCalendars($userid);
$uris = array();
foreach($all as $i){
@ -110,8 +108,8 @@ class OC_Calendar_Calendar{
$uri = self::createURI($name, $uris );
$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*calendar_calendars (userid,displayname,uri,ctag,description,calendarorder,calendarcolor,timezone,components) VALUES(?,?,?,?,?,?,?,?,?)' );
$result = $stmt->execute(array($userid,$name,$uri,1,$description,$order,$color,$timezone,$components));
$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*calendar_calendars (userid,displayname,uri,ctag,calendarorder,calendarcolor,timezone,components) VALUES(?,?,?,?,?,?,?,?)' );
$result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components));
return OC_DB::insertid();
}
@ -121,18 +119,17 @@ class OC_Calendar_Calendar{
* @param string $principaluri
* @param string $uri
* @param string $name
* @param string $description
* @param string $components
* @param string $timezone
* @param integer $order
* @param string $color
* @return insertid
*/
public static function addCalendarFromDAVData($principaluri,$uri,$name,$description,$components,$timezone,$order,$color){
public static function addCalendarFromDAVData($principaluri,$uri,$name,$components,$timezone,$order,$color){
$userid = self::extractUserID($principaluri);
$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*calendar_calendars (userid,displayname,uri,ctag,description,calendarorder,calendarcolor,timezone,components) VALUES(?,?,?,?,?,?,?,?,?)' );
$result = $stmt->execute(array($userid,$name,$uri,1,$description,$order,$color,$timezone,$components));
$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*calendar_calendars (userid,displayname,uri,ctag,calendarorder,calendarcolor,timezone,components) VALUES(?,?,?,?,?,?,?,?)' );
$result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components));
return OC_DB::insertid();
}
@ -141,7 +138,6 @@ class OC_Calendar_Calendar{
* @brief Edits a calendar
* @param integer $id
* @param string $name Default: null
* @param string $description Default: null
* @param string $components Default: null
* @param string $timezone Default: null
* @param integer $order Default: null
@ -150,20 +146,19 @@ class OC_Calendar_Calendar{
*
* Values not null will be set
*/
public static function editCalendar($id,$name=null,$description=null,$components=null,$timezone=null,$order=null,$color=null){
public static function editCalendar($id,$name=null,$components=null,$timezone=null,$order=null,$color=null){
// Need these ones for checking uri
$calendar = self::findCalendar($id);
// Keep old stuff
if(is_null($name)) $name = $calendar['name'];
if(is_null($description)) $description = $calendar['description'];
if(is_null($components)) $components = $calendar['components'];
if(is_null($timezone)) $timezone = $calendar['timezone'];
if(is_null($order)) $order = $calendar['calendarorder'];
if(is_null($color)) $color = $calendar['color'];
$stmt = OC_DB::prepare( 'UPDATE *PREFIX*calendar_calendars SET displayname=?,description=?,calendarorder=?,calendarcolor=?,timezone=?,components=?,ctag=ctag+1 WHERE id=?' );
$result = $stmt->execute(array($name,$description,$order,$color,$timezone,$components,$id));
$stmt = OC_DB::prepare( 'UPDATE *PREFIX*calendar_calendars SET displayname=?,calendarorder=?,calendarcolor=?,timezone=?,components=?,ctag=ctag+1 WHERE id=?' );
$result = $stmt->execute(array($name,$order,$color,$timezone,$components,$id));
return true;
}

View file

@ -102,13 +102,12 @@ class OC_Connector_Sabre_CalDAV extends Sabre_CalDAV_Backend_Abstract {
}
if(!isset($newValues['displayname'])) $newValues['displayname'] = 'unnamed';
if(!isset($newValues['description'])) $newValues['description'] = '';
if(!isset($newValues['components'])) $newValues['components'] = 'VEVENT,VTODO';
if(!isset($newValues['timezone'])) $newValues['timezone'] = null;
if(!isset($newValues['calendarorder'])) $newValues['calendarorder'] = 0;
if(!isset($newValues['calendarcolor'])) $newValues['calendarcolor'] = null;
return OC_Calendar_Calendar::addCalendarFromDAVData($principalUri,$calendarUri,$newValues['displayname'],$newValues['description'],$newValues['components'],$newValues['timezone'],$newValues['calendarorder'],$newValues['calendarcolor']);
return OC_Calendar_Calendar::addCalendarFromDAVData($principalUri,$calendarUri,$newValues['displayname'],$newValues['components'],$newValues['timezone'],$newValues['calendarorder'],$newValues['calendarcolor']);
}
/**
@ -191,12 +190,11 @@ class OC_Connector_Sabre_CalDAV extends Sabre_CalDAV_Backend_Abstract {
// Success
if(!isset($newValues['displayname'])) $newValues['displayname'] = null;
if(!isset($newValues['description'])) $newValues['description'] = null;
if(!isset($newValues['timezone'])) $newValues['timezone'] = null;
if(!isset($newValues['calendarorder'])) $newValues['calendarorder'] = null;
if(!isset($newValues['calendarcolor'])) $newValues['calendarcolor'] = null;
OC_Calendar_Calendar::editCalendar($calendarId,$newValues['displayname'],$newValues['description'],null,$newValues['timezone'],$newValues['calendarorder'],$newValues['calendarcolor']);
OC_Calendar_Calendar::editCalendar($calendarId,$newValues['displayname'],null,$newValues['timezone'],$newValues['calendarorder'],$newValues['calendarcolor']);
return true;

View file

@ -25,12 +25,6 @@
</td>
</tr>
<?php endif; ?>
<tr>
<th><?php echo $l->t('Description') ?></th>
<td>
<textarea id="description_<?php echo $_['calendar']['id'] ?>"><?php echo $_['calendar']['description'] ?></textarea>
</td>
</tr>
<tr>
<th><?php echo $l->t('Calendar color') ?></th>
<td>

View file

@ -31,11 +31,6 @@ foreach($calendars as $calendar){
<input id="displayname" type="text" value="">
</td>
</tr>
<th><?php echo $l->t('Description') ?></th>
<td>
<textarea id="description"></textarea>
</td>
</tr>
</table>
<!-- end of modified part -->
<br><br>
@ -65,8 +60,7 @@ function importcal(importtype){
}
if(importtype == "new"){
var calname = $("#displayname").val();
var description = $("#description").val();
$.post(OC.filePath('calendar', '', 'import.php'), {'import':'new', 'calname':calname, 'description':description, 'path':path, 'file':file}, function(){
$.post(OC.filePath('calendar', '', 'import.php'), {'import':'new', 'calname':calname, 'path':path, 'file':file}, function(){
$("#importdialog").dialog('destroy').remove();
$("#importdialogholder").remove();
});

View file

@ -6,41 +6,39 @@
* later.
* See the COPYING-README file.
*/
OC_UTIL::addScript('', 'jquery.multiselect');
OC_UTIL::addStyle('', 'jquery.multiselect');
?>
<form id="calendar">
<fieldset class="personalblock">
<table class="nostyle">
<tr><td><label for="timezone" class="bold"><?php echo $l->t('Timezone');?></label></td><td><select style="display: none;" id="timezone" name="timezone">
<table class="nostyle">
<tr><td><label for="timezone" class="bold"><?php echo $l->t('Timezone');?></label></td><td><select style="display: none;" id="timezone" name="timezone">
<?php
$continent = '';
foreach($_['timezones'] as $timezone):
$ex=explode('/', $timezone, 2);//obtain continent,city
if (!isset($ex[1])) {
$ex[1] = $ex[0];
$ex[0] = "Other";
}
if ($continent!=$ex[0]):
if ($continent!="") echo '</optgroup>';
echo '<optgroup label="'.$ex[0].'">';
endif;
$city=strtr($ex[1], '_', ' ');
$continent=$ex[0];
echo '<option value="'.$timezone.'"'.($_['timezone'] == $timezone?' selected="selected"':'').'>'.$city.'</option>';
$continent = '';
foreach($_['timezones'] as $timezone):
$ex=explode('/', $timezone, 2);//obtain continent,city
if (!isset($ex[1])) {
$ex[1] = $ex[0];
$ex[0] = "Other";
}
if ($continent!=$ex[0]):
if ($continent!="") echo '</optgroup>';
echo '<optgroup label="'.$ex[0].'">';
endif;
$city=strtr($ex[1], '_', ' ');
$continent=$ex[0];
echo '<option value="'.$timezone.'"'.($_['timezone'] == $timezone?' selected="selected"':'').'>'.$city.'</option>';
endforeach;?>
</select></td></tr>
</select></td></tr>
<tr><td><label for="timeformat" class="bold"><?php echo $l->t('Timeformat');?></label></td><td>
<select style="display: none;" id="timeformat" title="<?php echo "timeformat"; ?>" name="timeformat">
<option value="24" id="24h"><?php echo $l->t("24h"); ?></option>
<option value="ampm" id="ampm"><?php echo $l->t("12h"); ?></option>
</select>
</td></tr>
<tr><td><label for="timeformat" class="bold"><?php echo $l->t('Timeformat');?></label></td><td>
<select style="display: none;" id="timeformat" title="<?php echo "timeformat"; ?>" name="timeformat">
<option value="24" id="24h"><?php echo $l->t("24h"); ?></option>
<option value="ampm" id="ampm"><?php echo $l->t("12h"); ?></option>
</select>
</td></tr>
</table>
</table>
<?php echo $l->t('Calendar CalDAV syncing address:');?>
<?php echo OC_Helper::linkTo('apps/calendar', 'caldav.php', null, true); ?><br />
<?php echo $l->t('Calendar CalDAV syncing address:');?>
<?php echo OC_Helper::linkTo('apps/calendar', 'caldav.php', null, true); ?><br />
</fieldset>
</form>

View file

@ -37,16 +37,28 @@ if( $addressbook === false || $addressbook['userid'] != OC_USER::getUser()){
}
$fn = $_POST['fn'];
$values = $_POST['value'];
$parameters = $_POST['parameters'];
$vcard = new Sabre_VObject_Component('VCARD');
$vcard->add(new Sabre_VObject_Property('FN',$fn));
$vcard->add(new Sabre_VObject_Property('UID',OC_Contacts_VCard::createUID()));
foreach(array('ADR', 'TEL', 'EMAIL', 'ORG') as $propname){
$value = $values[$propname];
if (isset($parameters[$propname])){
$prop_parameters = $parameters[$propname];
} else {
$prop_parameters = array();
}
OC_Contacts_VCard::addVCardProperty($vcard, $propname, $value, $prop_parameters);
}
$id = OC_Contacts_VCard::add($aid,$vcard->serialize());
$details = OC_Contacts_VCard::structureContact($vcard);
$name = $details['FN'][0]['value'];
$tmpl = new OC_Template('contacts','part.details');
$tmpl->assign('details',$details);
$tmpl->assign('id',$id);
$page = $tmpl->fetchPage();
OC_JSON::success(array('data' => array( 'id' => $id, 'page' => $page )));
OC_JSON::success(array('data' => array( 'id' => $id, 'name' => $name, 'page' => $page )));

View file

@ -53,7 +53,7 @@ $name = $_POST['name'];
$value = $_POST['value'];
$parameters = isset($_POST['parameteres'])?$_POST['parameters']:array();
OC_Contacts_VCard::addVCardProperty($vcard, $name, $value, $parameters);
$property = OC_Contacts_VCard::addVCardProperty($vcard, $name, $value, $parameters);
$line = count($vcard->children) - 1;
$checksum = md5($property->serialize());

View file

@ -1,2 +1,3 @@
.contacts_details_left {text-align:right;vertical-align:top;padding:2px;}
.contacts_details_right {text-align:left;vertical-align:top;padding:2px;}
#contacts_deletecard {position:absolute;top:15px;right:0;}

View file

@ -1,11 +1,4 @@
$(document).ready(function(){
/*-------------------------------------------------------------------------
* Actions for startup
*-----------------------------------------------------------------------*/
if( $('#leftcontent li').length > 0 ){
$('#leftcontent li').first().addClass('active');
}
/*-------------------------------------------------------------------------
* Event handlers
*-----------------------------------------------------------------------*/
@ -75,7 +68,7 @@ $(document).ready(function(){
$('#contacts_addpropertyform input[type="submit"]').live('click',function(){
$.post('ajax/addproperty.php',$('#contacts_addpropertyform').serialize(),function(jsondata){
if(jsondata.status == 'success'){
$('#contacts_cardoptions').before(jsondata.data.page);
$('#contacts_details').append(jsondata.data.page);
$('#contacts_addpropertyform').remove();
$('#contacts_addcontactsparts').remove();
}
@ -129,7 +122,7 @@ $(document).ready(function(){
});
$('#contacts_setpropertyform input[type="submit"]').live('click',function(){
$.post('ajax/setproperty.php',$('#contacts_setpropertyform').serialize(),function(jsondata){
$.post('ajax/setproperty.php',$(this).parent('form').serialize(),function(jsondata){
if(jsondata.status == 'success'){
$('.contacts_details_property[data-checksum="'+jsondata.data.oldchecksum+'"]').replaceWith(jsondata.data.page);
}

View file

@ -290,6 +290,7 @@ class OC_Contacts_VCard{
}
$vcard->add($property);
return $property;
}
/**

View file

@ -14,5 +14,5 @@ OC_Util::addStyle('contacts','styles');
</ul>
</div>
<div id="rightcontent" class="rightcontent" data-id="<?php echo $_['id']; ?>">
<?php echo $this->inc("part.details"); ?>
<?php echo $this->inc("part.addcardform"); ?>
</div>

View file

@ -1,5 +1,5 @@
<?php if(array_key_exists('FN',$_['details'])): ?>
<table>
<table id="contacts_details">
<?php if(isset($_['details']['PHOTO'])): // Emails first ?>
<tr class="contacts_details_property">
<td class="contacts_details_left">&nbsp;</td>
@ -28,7 +28,7 @@
<?php endforeach; ?>
</table>
<form>
<input type="button" id="contacts_deletecard" value="<?php echo $l->t('Delete');?>">
<img class="svg action" id="contacts_deletecard" src="<?php echo image_path('', 'actions/delete.svg'); ?>" title="<?php echo $l->t('Delete contact');?>" />
<input type="button" id="contacts_addproperty" value="<?php echo $l->t('Add Property');?>">
</form>
<?php endif; ?>

View file

@ -1,8 +1,8 @@
<tr class="contacts_details_property" data-checksum="<?php echo $_['property']['checksum']; ?>">
<?php if($_['property']['name'] == 'FN'): ?>
<td class="contacts_details_left"><?php echo $l->t('Name'); ?></td>
<td class="contacts_details_left"></td>
<td class="contacts_details_right">
<?php echo $_['property']['value']; ?>
<strong><?php echo $_['property']['value']; ?></strong>
<span style="display:none;" data-use="edit"><img class="svg action" src="<?php echo image_path('', 'actions/rename.svg'); ?>" /></span>
</td>
<?php elseif($_['property']['name'] == 'BDAY'): ?>

View file

@ -30,8 +30,9 @@ if ($source !== false) {
foreach (OC_Files::getdirectorycontent($source) as $i) {
$i['date'] = OC_Util::formatDate($i['mtime'] );
if ($i['type'] == 'file') {
$i['extention'] = substr($i['name'], strrpos($i['name'], "."));
$i['basename'] = substr($i['name'], 0, strrpos($i['name'], "."));
$fileinfo = pathinfo($i['name']);
$i['basename'] = $fileinfo['filename'];
$i['extention'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : '';
}
$i['directory'] = substr($i['directory'], $rootLength);
if ($i['directory'] == "/") {
@ -70,7 +71,7 @@ if ($source !== false) {
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: public");
header("Content-Disposition: filename=".basename($source));
header('Content-Disposition: filename="'.basename($source).'"');
header("Content-Type: " . $mimetype);
header("Content-Length: " . OC_Filesystem::filesize($source));
//download the file

View file

@ -1,62 +0,0 @@
<?php
require_once('../../../lib/base.php');
function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height) { //$imgSrc is a FILE - Returns an image resource.
//getting the image dimensions
list($width_orig, $height_orig) = getimagesize($imgSrc);
switch (strtolower(substr($imgSrc, strrpos($imgSrc, '.')+1))) {
case "jpeg":
case "jpg":
$myImage = imagecreatefromjpeg($imgSrc);
break;
default:
exit();
}
$ratio_orig = $width_orig/$height_orig;
if ($thumbnail_width/$thumbnail_height > $ratio_orig) {
$new_height = $thumbnail_width/$ratio_orig;
$new_width = $thumbnail_width;
} else {
$new_width = $thumbnail_height*$ratio_orig;
$new_height = $thumbnail_height;
}
$x_mid = $new_width/2; //horizontal middle
$y_mid = $new_height/2; //vertical middle
$process = imagecreatetruecolor(round($new_width), round($new_height));
imagecopyresampled($process, $myImage, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig);
$thumb = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
imagecopyresampled($thumb, $process, 0, 0, ($x_mid-($thumbnail_width/2)), ($y_mid-($thumbnail_height/2)), $thumbnail_width, $thumbnail_height, $thumbnail_width, $thumbnail_height);
imagedestroy($process);
imagedestroy($myImage);
return $thumb;
}
// Check if we are a user
if( !OC_User::isLoggedIn()){
echo json_encode( array( 'status' => 'error', 'data' => array( 'message' => 'You need to log in.')));
exit();
}
$box_size = 200;
$album_name = $_GET['album'];
$x = $_GET['x'];
$stmt = OC_DB::prepare('SELECT `file_path` FROM *PREFIX*gallery_photos,*PREFIX*gallery_albums WHERE *PREFIX*gallery_albums.`uid_owner` = ? AND `album_name` = ? AND *PREFIX*gallery_photos.`album_id` == *PREFIX*gallery_albums.`album_id`');
$result = $stmt->execute(array(OC_User::getUser(), $album_name));
$x = min((int)($x/($box_size/$result->numRows())), $result->numRows()-1); // get image to display
$result->seek($x); // never throws
$path = $result->fetchRow();
$path = $path['file_path'];
$tmp = OC::$CONFIG_DATADIRECTORY . $path;
$imagesize = getimagesize($tmp);
header('Content-Type: image/png');
$image = CroppedThumbnail($tmp, $box_size, $box_size);
imagepng($image);
imagedestroy($image);
?>

View file

@ -1,14 +0,0 @@
<?php
require_once('../../../lib/base.php');
if( !OC_User::isLoggedIn()){
echo json_encode( array( 'status' => 'error', 'data' => array( 'message' => 'You need to log in.')));
exit();
}
$stmt = OC_DB::prepare('INSERT INTO *PREFIX*gallery_albums ("uid_owner", "album_name") VALUES ("'.OC_User::getUser().'", "'.$_GET['album_name'].'")');
$stmt->execute(array());
echo json_encode(array( 'status' => 'success', 'name' => $_GET['album_name']));
?>

View file

@ -1,22 +0,0 @@
<?php
require_once('../../../lib/base.php');
if (!OC_User::IsLoggedIn()) {
echo json_encode(array('status' => 'error', 'message' => 'You need to log in'));
exit();
}
$a = array();
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE `uid_owner` = ?');
$result = $stmt->execute(array(OC_User::getUser()));
while ($r = $result->fetchRow()) {
$album_name = $r['album_name'];
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_photos WHERE `album_id` = ?');
$tmp_res = $stmt->execute(array($r['album_id']));
$a[] = array('name' => $album_name, 'numOfItems' => min($tmp_res->numRows(), 10));
}
echo json_encode(array('status'=>'success', 'albums'=>$a));
?>

View file

@ -1,66 +0,0 @@
<?php
require_once('../../../lib/base.php');
function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height, $tgtImg, $shift) {
//getting the image dimensions
list($width_orig, $height_orig) = getimagesize($imgSrc);
switch (strtolower(substr($imgSrc, strrpos($imgSrc, '.')+1))) {
case "jpeg":
case "jpg":
case "tiff":
$myImage = imagecreatefromjpeg($imgSrc);
break;
case "png":
$myImage = imagecreatefrompng($imgSrc);
break;
default:
exit();
}
$ratio_orig = $width_orig/$height_orig;
if ($thumbnail_width/$thumbnail_height > $ratio_orig) {
$new_height = $thumbnail_width/$ratio_orig;
$new_width = $thumbnail_width;
} else {
$new_width = $thumbnail_height*$ratio_orig;
$new_height = $thumbnail_height;
}
$x_mid = $new_width/2; //horizontal middle
$y_mid = $new_height/2; //vertical middle
$process = imagecreatetruecolor(round($new_width), round($new_height));
imagecopyresampled($process, $myImage, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig);
imagecopyresampled($tgtImg, $process, $shift, 0, ($x_mid-($thumbnail_width/2)), ($y_mid-($thumbnail_height/2)), $thumbnail_width, $thumbnail_height, $thumbnail_width, $thumbnail_height);
imagedestroy($process);
imagedestroy($myImage);
}
// Check if we are a user
if( !OC_User::isLoggedIn()){
echo json_encode( array( 'status' => 'error', 'data' => array( 'message' => 'You need to log in.')));
exit();
}
$box_size = 200;
$album_name= $_GET['album_name'];
$stmt = OC_DB::prepare('SELECT `file_path` FROM *PREFIX*gallery_photos,*PREFIX*gallery_albums WHERE *PREFIX*gallery_albums.`uid_owner` = ? AND `album_name` = ? AND *PREFIX*gallery_photos.`album_id` = *PREFIX*gallery_albums.`album_id`');
$result = $stmt->execute(array(OC_User::getUser(), $album_name));
$numOfItems = min($result->numRows(),10);
$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++;
}
header('Content-Type: image/png');
imagepng($targetImg);
imagedestroy($targetImg);
?>

View file

@ -1,14 +0,0 @@
<?php
require_once('../../../lib/base.php');
require_once('../lib_scanner.php');
if (!OC_User::IsLoggedIn()) {
echo json_encode(array('status' => 'error', 'message' => 'You need to log in'));
exit();
}
echo json_encode(array( 'status' => 'success', 'albums' => OC_GALLERY_SCANNER::scan('')));
//echo json_encode(array('status' => 'success', 'albums' => array(array('name' => 'test', 'imagesCount' => 1, 'images' => array('dupa')))));
?>

View file

@ -1,58 +0,0 @@
<?php
require_once('../../../lib/base.php');
function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height) { //$imgSrc is a FILE - Returns an image resource.
//getting the image dimensions
list($width_orig, $height_orig) = getimagesize($imgSrc);
switch (strtolower(substr($imgSrc, strrpos($imgSrc, '.')+1))) {
case "jpeg":
case "jpg":
case "tiff":
$myImage = imagecreatefromjpeg($imgSrc);
break;
case "png":
$myImage = imagecreatefrompng($imgSrc);
break;
default:
exit();
}
$ratio_orig = $width_orig/$height_orig;
if ($thumbnail_width/$thumbnail_height > $ratio_orig) {
$new_height = $thumbnail_width/$ratio_orig;
$new_width = $thumbnail_width;
} else {
$new_width = $thumbnail_height*$ratio_orig;
$new_height = $thumbnail_height;
}
$x_mid = $new_width/2; //horizontal middle
$y_mid = $new_height/2; //vertical middle
$process = imagecreatetruecolor(round($new_width), round($new_height));
imagecopyresampled($process, $myImage, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig);
$thumb = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
imagecopyresampled($thumb, $process, 0, 0, ($x_mid-($thumbnail_width/2)), ($y_mid-($thumbnail_height/2)), $thumbnail_width, $thumbnail_height, $thumbnail_width, $thumbnail_height);
imagedestroy($process);
imagedestroy($myImage);
return $thumb;
}
// Check if we are a user
if( !OC_User::isLoggedIn()){
echo json_encode( array( 'status' => 'error', 'data' => array( 'message' => 'You need to log in.')));
exit();
}
$box_size = 200;
$img = $_GET['img'];
$tmp = OC::$CONFIG_DATADIRECTORY . $img;
header('Content-Type: image/png');
$image = CroppedThumbnail($tmp, $box_size, $box_size);
imagepng($image);
imagedestroy($image);
?>

View file

@ -1,27 +0,0 @@
<?php
OC_App::register(array(
'order' => 20,
'id' => 'gallery',
'name' => 'Gallery'));
OC_App::addNavigationEntry( array(
'id' => 'gallery_index',
'order' => 20,
'href' => OC_Helper::linkTo('gallery', 'index.php'),
'icon' => OC_Helper::linkTo('', 'core/img/filetypes/image.png'),
'name' => 'Gallery'));
class OC_GallerySearchProvider extends OC_Search_Provider{
function search($query){
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ? AND album_name LIKE ?');
$result = $stmt->execute(array(OC_User::getUser(),'%'.$query.'%'));
$results=array();
while($row=$result->fetchRow()){
$results[]=new OC_Search_Result($row['album_name'],'',OC_Helper::linkTo( 'apps/gallery', 'index.php?view='.$row['album_name']),'Galleries');
}
return $results;
}
}
new OC_GallerySearchProvider();
?>

View file

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<database>
<name>*dbname*</name>
<create>true</create>
<overwrite>false</overwrite>
<charset>latin1</charset>
<table>
<name>*dbprefix*gallery_albums</name>
<declaration>
<field>
<name>album_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>uid_owner</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>album_name</name>
<type>text</type>
<notnull>true</notnull>
<length>100</length>
</field>
</declaration>
</table>
<table>
<name>*dbprefix*gallery_photos</name>
<declaration>
<field>
<name>photo_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>album_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<length>4</length>
</field>
<field>
<name>file_path</name>
<type>text</type>
<notnull>true</notnull>
<length>100</length>
</field>
</declaration>
</table>
</database>

View file

@ -1,10 +0,0 @@
<?xml version="1.0"?>
<info>
<id>gallery</id>
<name>Gallery</name>
<version>0.1</version>
<licence>AGPL</licence>
<author>Bartosz Przybylski</author>
<require>2</require>
<description></description>
</info>

View file

@ -1,23 +0,0 @@
div#gallery_list {
margin: 90pt 20pt;
}
div#gallery_album_box {
width: 200px;
text-align: center;
border: 0;
float: left;
margin: 5pt;
}
div#gallery_album_box h1 {
font-size: 12pt;
font-family: Arial;
}
div#gallery_album_cover {
width: 199px;
height: 199px;
border: solid 1px black;
}

View file

@ -1,33 +0,0 @@
<?php
require_once('../../lib/base.php');
OC_Util::checkLoggedIn();
OC_App::setActiveNavigationEntry( 'gallery_index' );
if (!isset($_GET['view'])) {
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ?');
$result = $stmt->execute(array(OC_User::getUser()));
$r = array();
while ($row = $result->fetchRow())
$r[] = $row;
$tmpl = new OC_Template( 'gallery', 'index', 'user' );
$tmpl->assign('r', $r);
$tmpl->printPage();
} else {
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_photos, *PREFIX*gallery_albums WHERE uid_owner = ? AND album_name = ? AND *PREFIX*gallery_albums.album_id = *PREFIX*gallery_photos.album_id');
$result = $stmt->execute(array(OC_User::getUser(), $_GET['view']));
$photos = array();
while ($p = $result->fetchRow())
$photos[] = $p['file_path'];
$tmpl = new OC_Template( 'gallery', 'view_album', 'user' );
$tmpl->assign('photos', $photos);
$tmpl->assign('albumName', $_GET['view']);
$tmpl->printPage();
}
?>

View file

@ -1,41 +0,0 @@
var actual_cover;
$(document).ready(function() {
$.getJSON('ajax/getAlbums.php', function(r) {
if (r.status == 'success') {
for (var i in r.albums) {
var a = r.albums[i];
Albums.add(a.name, a.numOfItems);
}
var targetDiv = document.getElementById('gallery_list');
if (targetDiv) {
Albums.display(targetDiv);
} else {
alert('Error occured: no such layer `gallery_list`');
}
} else {
alert('Error occured: ' + r.message);
}
});
});
function createNewAlbum() {
var name = prompt("album name", "");
if (name != null && name != "") {
$.getJSON("ajax/createAlbum.php", {album_name: name}, function(r) {
if (r.status == "success") {
var v = '<div class="gallery_album_box"><a href="?view='+r.name+'"><img class="gallery_album_cover"/></a><h1>'+r.name+'</h1></div>';
$('div#gallery_list').append(v);
}
});
}
}
function scanForAlbums() {
$.getJSON('ajax/scanForAlbums.php', function(r) {
if (r.status == 'success') {
window.location.reload(true);
} else {
alert('Error occured: ' + r.message);
}
});
}

View file

@ -1,80 +0,0 @@
Albums={
// album item in this array should look as follow
// {name: string,
// numOfCovers: int}
//
// previews array should be an array of base64 decoded images
// to display to user as preview picture when scrolling throught
// the album cover
albums:new Array(),
// add simply adds new album to internal structure
// however albums names must be unique so other
// album with the same name wont be insered,
// and false will be returned
// true on success
add: function(album_name, num) {
for (var a in Albums.albums) {
if (a.name == album_name) {
return false;
}
}
Albums.albums.push({name: album_name, numOfCovers: num});
return true;
},
// remove element with given name
// returns remove element or undefined if no such element was present
remove: function(name) {
var i = -1, tmp = 0;
for (var a in Albums.albums) {
if (a.name == name) {
i = tmp;
break;
}
tmp++;
}
if (i != -1) {
return Albums.albums.splice(i,1);
}
return undefined;
},
// return element which match given name
// of undefined if such element do not exist
find: function(name) {
var i = -1, tmp = 0;
for (var k in Albums.albums) {
var a = Albums.albums[k];
if (a.name == name) {
i = tmp;
break;
}
tmp++;
}
if (i != -1) {
return Albums.albums[i];
}
return undefined;
},
// displays gallery in linear representation
// on given element, and apply default styles for gallery
display: function(element) {
var displayTemplate = '<div id="gallery_album_box" title="*NAME*"><a href="?view=*NAME*"><div id="gallery_album_cover"></div></a><h1>*NAME*</h1></div></div>';
for (var i in Albums.albums) {
var a = Albums.albums[i];
var local = $(displayTemplate.replace(/\*NAME\*/g, a.name));
local.css('background-repeat', 'no-repeat');
local.css('background-position', '0 0');
local.css('background-image','url("ajax/getCovers.php?album_name='+a.name+'")');
local.mousemove(function(e) {
var albumMetadata = Albums.find(this.title);
if (albumMetadata == undefined) {
return;
}
var x = Math.min(Math.floor((e.clientX - this.offsetLeft)/(this.offsetWidth/albumMetadata.numOfCovers)), albumMetadata.numOfCovers-1);
x *= this.offsetWidth;
$(this).css('background-position', -x+'px 0');
});
$(element).append(local);
}
}
}

View file

@ -1,57 +0,0 @@
<?php
require_once('base.php'); // base lib
class OC_GALLERY_SCANNER {
public static function scan($root) {
$albums = array();
self::scanDir($root, $albums);
return $albums;
}
public static function scanDir($path, &$albums) {
$current_album = array('name'=> $path, 'imagesCount' => 0, 'images' => array());
$current_album['name'] = str_replace('/', '.', str_replace(OC::$CONFIG_DATADIRECTORY, '', $current_album['name']));
$current_album['name'] = ($current_album['name']==='')?'main':$current_album['name'];
if ($dh = OC_Filesystem::opendir($path)) {
while (($filename = readdir($dh)) !== false) {
$filepath = $path.'/'.$filename;
if (substr($filename, 0, 1) == '.') continue;
if (OC_Filesystem::is_dir($filepath)) {
self::scanDir($filepath, $albums);
} elseif (self::isPhoto($path.'/'.$filename)) {
$current_album['images'][] = $filepath;
}
}
}
$current_album['imagesCount'] = count($current_album['images']);
$albums[] = $current_album;
$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->execute(array(OC_User::getUser(), $current_album['name']));
}
$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']));
$albumId = $result->fetchRow();
$albumId = $albumId['album_id'];
foreach ($current_album['images'] as $img) {
$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->execute(array($albumId, $img));
}
}
}
public static function isPhoto($filename) {
if (substr(OC_Filesystem::getMimeType($filename), 0, 6) == "image/")
return 1;
return 0;
}
}
?>

View file

@ -1,12 +0,0 @@
<?php
OC_Util::addStyle('gallery', 'styles');
OC_Util::addScript('gallery', 'albums');
OC_Util::addScript('gallery', 'album_cover');
?>
<div id="controls">
<!-- <input type="button" value="New album" onclick="javascript:createNewAlbum();" />-->
<input type="button" value="Rescan" onclick="javascript:scanForAlbums();" /><br/>
</div>
<div id="gallery_list">
</div>

View file

@ -1,20 +0,0 @@
<?php
OC_Util::addStyle('gallery', 'styles');
OC_Util::addScript('gallery', 'album_cover');
OC_Util::addScript( 'files_imageviewer', 'lightbox' );
OC_Util::addStyle( 'files_imageviewer', 'lightbox' );
?>
<div id="controls">
<a href="?"><input type="button" value="Back" /></a><br/>
</div>
<div id="gallery_list">
<?php
foreach ($_['photos'] as $a) {
?>
<a onclick="javascript:viewImage('/','<?php echo $a; ?>');"><img src="ajax/thumbnail.php?img=<?php echo $a ?>"></a>
<?php
}
?>
</div>

View file

@ -29,5 +29,5 @@ OC_APP::registerPersonal('media','settings');
OC_App::register( array( 'order' => 3, 'id' => 'media', 'name' => 'Media' ));
OC_App::addNavigationEntry( array( 'id' => 'media_index', 'order' => 2, 'href' => OC_Helper::linkTo( 'media', 'index.php' ), 'icon' => OC_Helper::imagePath( 'core', 'filetypes/audio.svg' ), 'name' => $l->t('Music') ));
OC_App::addNavigationEntry(array('id' => 'media_index', 'order' => 2, 'href' => OC_Helper::linkTo('media', 'index.php'), 'icon' => OC_Helper::imagePath('core', 'places/music.svg'), 'name' => $l->t('Music')));
?>

View file

@ -1,6 +1,6 @@
#controls ul.jp-controls { padding:0; }
#controls ul.jp-controls li { display:inline; }
#controls ul.jp-controls li a { position:absolute; padding:.8em 1em; }
#controls ul.jp-controls li a { position:absolute; padding:.8em 1em .8em 0; }
a.jp-play, a.jp-pause { left:2.5em; }
a.jp-pause { display:none; }
a.jp-next { left:5em; }
@ -39,7 +39,7 @@ 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 { position:absolute; right:13.5em; top:0em; }
#scan .start { position:relative; display:inline; float:right; }
#scan .stop { position:relative; display:inline; float:right; }
#scan #scanprogressbar { position:relative; display:inline-block; width:10em; height:1.5em; top:.4em; }

View file

@ -2,6 +2,6 @@
<fieldset class="personalblock">
<strong>Media</strong><br />
Ampache address:
<?php echo OC_Helper::linkTo('apps/media', 'tomahawk.php', null, true); ?><br />
<?php echo OC_Helper::linkTo('apps/media', '', null, true); ?><br />
</fieldset>
</form>

View file

@ -44,7 +44,7 @@ if(isset($_SERVER['HTTP_ORIGIN'])) {
header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
header('Access-Control-Max-Age: 3600');
header('Access-Control-Allow-Methods: OPTIONS, GET, PUT, DELETE, PROPFIND');
header('Access-Control-Allow-Headers: Authorization');
header('Access-Control-Allow-Headers: Authorization, Content-Type');
} else {
header('Access-Control-Allow-Origin: *');
}

View file

@ -7,5 +7,4 @@
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>2</require>
<default_enable/>
</info>

View file

@ -1,11 +0,0 @@
<?php
$ownCloudBaseUri = substr($_SERVER['REQUEST_URI'],0, -(strlen('/apps/user_webfinger/activate.php')));
$thisAppDir = __DIR__;
$appsDir = dirname($thisAppDir);
$ownCloudDir = dirname($appsDir);
try{
symlink($thisAppDir, $ownCloudDir.'/.well-known');
echo "Webfinger should now work.\n";
} catch(Exception $e) {
echo "Please create a file called '.well-known in the ownCloud root, give the web server user permission to change it, and retry.\n";
}

View file

@ -0,0 +1,6 @@
<?php
$appInfoDir = __DIR__;
$thisAppDir = dirname($appInfoDir);
$appsDir = dirname($thisAppDir);
$ownCloudDir = dirname($appsDir);
symlink($thisAppDir, $ownCloudDir.'/.well-known');

View file

@ -34,6 +34,7 @@ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#35537a', end
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[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="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; }
@ -50,7 +51,7 @@ input[type="submit"].enabled { background:#66f866; border:1px solid #5e5; -moz-b
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; }
/* CONTENT ------------------------------------------------------------------ */
#controls { width:100%; top:3.5em; height:2.8em; margin:0; background:#f7f7f7; border-bottom:1px solid #eee; position:fixed; z-index:50; -moz-box-shadow:0 -3px 7px #000; -webkit-box-shadow:0 -3px 7px #000; box-shadow:0 -3px 7px #000; }
#controls { padding: 0 0.5em; width:100%; top:3.5em; height:2.8em; margin:0; background:#f7f7f7; border-bottom:1px solid #eee; position:fixed; z-index:50; -moz-box-shadow:0 -3px 7px #000; -webkit-box-shadow:0 -3px 7px #000; box-shadow:0 -3px 7px #000; }
#controls .button { display:inline-block; }
#content { margin:3.5em 0 0 12.5em; }
#leftcontent, .leftcontent { position:fixed; overflow: auto; top:6.4em; width:20em; background:#f8f8f8; border-right:1px solid #ddd; }
@ -117,7 +118,7 @@ tbody tr:hover, tr:active { background-color:#f8f8f8; }
#quotatext {padding: .6em 1em;}
div.jp-play-bar, div.jp-seek-bar { padding:0; }
.pager { list-style:none; float:right; display:inline; margin:.7em 12.7em 0 0; }
.pager { list-style:none; float:right; display:inline; margin:.7em 13em 0 0; }
.pager li { display:inline-block; }
li.error { width:640px; margin:4em auto; padding:1em 1em 1em 4em; background:#ffe .8em .8em no-repeat; border:1px solid #ccc; -moz-border-radius:10px; -webkit-border-radius:10px; border-radius:10px; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 691 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 561 B

After

Width:  |  Height:  |  Size: 385 B

BIN
core/img/filetypes/code.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 B

After

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 B

BIN
core/img/filetypes/font.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 307 B

After

Width:  |  Height:  |  Size: 606 B

BIN
core/img/filetypes/link.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 923 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 B

BIN
core/img/filetypes/php.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 B

View file

@ -0,0 +1,22 @@
Silk icon set 1.3
_________________________________________
Mark James
http://www.famfamfam.com/lab/icons/silk/
_________________________________________
This work is licensed under a
Creative Commons Attribution 2.5 License.
[ http://creativecommons.org/licenses/by/2.5/ ]
This means you may use it for any purpose,
and make any changes you like.
All I ask is that you include a link back
to this page in your credits.
Are you using this icon set? Send me an email
(including a link or picture if available) to
mjames@gmail.com
Any other questions about this icon set please
contact mjames@gmail.com

BIN
core/img/filetypes/ruby.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 603 B

BIN
core/img/filetypes/text.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 B

BIN
core/img/filetypes/vcf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
core/img/filetypes/x-.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 B

BIN
core/img/places/file.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 B

View file

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

BIN
core/img/places/music.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 B

View file

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

BIN
core/img/places/picture.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

View file

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Some files were not shown because too many files have changed in this diff Show more