Merge branch 'master' of gitorious.org:owncloud/owncloud
This commit is contained in:
commit
fd54791952
38 changed files with 1434 additions and 406 deletions
|
@ -1,12 +1,12 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de>
|
||||
* Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
require_once ("../../../lib/base.php");
|
||||
require_once ('../../../lib/base.php');
|
||||
OC_JSON::checkLoggedIn();
|
||||
OC_JSON::checkAppEnabled('calendar');
|
||||
$view = $_GET['v'];
|
||||
|
|
|
@ -11,7 +11,10 @@ OC_JSON::checkLoggedIn();
|
|||
OC_JSON::checkAppEnabled('calendar');
|
||||
|
||||
$id = $_POST['id'];
|
||||
$event_object = OC_Calendar_App::getEventObject($id);
|
||||
$access = OC_Calendar_App::getaccess($id, OC_Calendar_App::EVENT);
|
||||
if($access != 'owner' && $access != 'rw'){
|
||||
OC_JSON::error(array('message'=>'permission denied'));
|
||||
exit;
|
||||
}
|
||||
$result = OC_Calendar_Object::delete($id);
|
||||
OC_JSON::success();
|
||||
?>
|
||||
|
|
|
@ -14,7 +14,13 @@ if(!OC_USER::isLoggedIn()) {
|
|||
OC_JSON::checkAppEnabled('calendar');
|
||||
|
||||
$id = $_GET['id'];
|
||||
$data = OC_Calendar_App::getEventObject($id);
|
||||
$data = OC_Calendar_App::getEventObject($id, true, true);
|
||||
|
||||
if(!$data){
|
||||
OC_JSON::error(array('data' => array('message' => self::$l10n->t('Wrong calendar'))));
|
||||
exit;
|
||||
}
|
||||
$access = OC_Calendar_App::getaccess($id, OC_Calendar_Share::EVENT);
|
||||
$object = OC_VObject::parse($data['calendardata']);
|
||||
$vevent = $object->VEVENT;
|
||||
|
||||
|
@ -182,8 +188,12 @@ if($data['repeating'] == 1){
|
|||
}else{
|
||||
$repeat['repeat'] = 'doesnotrepeat';
|
||||
}
|
||||
|
||||
$calendar_options = OC_Calendar_Calendar::allCalendars(OC_User::getUser());
|
||||
if($access == 'owner'){
|
||||
$calendar_options = OC_Calendar_Calendar::allCalendars(OC_User::getUser());
|
||||
}else{
|
||||
$calendar_options = array(OC_Calendar_App::getCalendar($data['calendarid'], false));
|
||||
}
|
||||
$category_options = OC_Calendar_App::getCategoryOptions();
|
||||
$repeat_options = OC_Calendar_App::getRepeatOptions();
|
||||
$repeat_end_options = OC_Calendar_App::getEndOptions();
|
||||
$repeat_month_options = OC_Calendar_App::getMonthOptions();
|
||||
|
@ -195,8 +205,14 @@ $repeat_bymonth_options = OC_Calendar_App::getByMonthOptions();
|
|||
$repeat_byweekno_options = OC_Calendar_App::getByWeekNoOptions();
|
||||
$repeat_bymonthday_options = OC_Calendar_App::getByMonthDayOptions();
|
||||
|
||||
$tmpl = new OC_Template('calendar', 'part.editevent');
|
||||
$tmpl->assign('id', $id);
|
||||
if($access == 'owner' || $access == 'rw'){
|
||||
$tmpl = new OC_Template('calendar', 'part.editevent');
|
||||
}elseif($access == 'r'){
|
||||
$tmpl = new OC_Template('calendar', 'part.showevent');
|
||||
}
|
||||
|
||||
$tmpl->assign('eventid', $id);
|
||||
$tmpl->assign('access', $access);
|
||||
$tmpl->assign('lastmodified', $lastmodified);
|
||||
$tmpl->assign('calendar_options', $calendar_options);
|
||||
$tmpl->assign('repeat_options', $repeat_options);
|
||||
|
@ -245,4 +261,4 @@ if($repeat['repeat'] != 'doesnotrepeat'){
|
|||
$tmpl->assign('repeat_date', '');
|
||||
$tmpl->assign('repeat_year', 'bydate');
|
||||
}
|
||||
$tmpl->printpage();
|
||||
$tmpl->printpage();
|
|
@ -10,21 +10,34 @@ require_once('../../../../lib/base.php');
|
|||
OC_JSON::checkLoggedIn();
|
||||
OC_JSON::checkAppEnabled('calendar');
|
||||
|
||||
$id = $_POST['id'];
|
||||
|
||||
if(!array_key_exists('calendar', $_POST)){
|
||||
$cal = OC_Calendar_Object::getCalendarid($id);
|
||||
$_POST['calendar'] = $cal;
|
||||
}else{
|
||||
$cal = $_POST['calendar'];
|
||||
}
|
||||
|
||||
$access = OC_Calendar_App::getaccess($id, OC_Calendar_App::EVENT);
|
||||
if($access != 'owner' && $access != 'rw'){
|
||||
OC_JSON::error(array('message'=>'permission denied'));
|
||||
exit;
|
||||
}
|
||||
|
||||
$errarr = OC_Calendar_Object::validateRequest($_POST);
|
||||
if($errarr){
|
||||
//show validate errors
|
||||
OC_JSON::error($errarr);
|
||||
exit;
|
||||
}else{
|
||||
$id = $_POST['id'];
|
||||
$cal = $_POST['calendar'];
|
||||
$data = OC_Calendar_App::getEventObject($id);
|
||||
$data = OC_Calendar_App::getEventObject($id, false, false);
|
||||
$vcalendar = OC_VObject::parse($data['calendardata']);
|
||||
|
||||
OC_Calendar_App::isNotModified($vcalendar->VEVENT, $_POST['lastmodified']);
|
||||
OC_Calendar_Object::updateVCalendarFromRequest($_POST, $vcalendar);
|
||||
|
||||
$result = OC_Calendar_Object::edit($id, $vcalendar->serialize());
|
||||
OC_Calendar_Object::edit($id, $vcalendar->serialize());
|
||||
if ($data['calendarid'] != $cal) {
|
||||
OC_Calendar_Object::moveToCalendar($id, $cal);
|
||||
}
|
||||
|
|
|
@ -9,15 +9,18 @@ require_once('../../../../lib/base.php');
|
|||
OC_JSON::checkLoggedIn();
|
||||
|
||||
$id = $_POST['id'];
|
||||
|
||||
$vcalendar = OC_Calendar_App::getVCalendar($id);
|
||||
$access = OC_Calendar_App::getaccess($id, OC_Calendar_App::EVENT);
|
||||
if($access != 'owner' && $access != 'rw'){
|
||||
OC_JSON::error(array('message'=>'permission denied'));
|
||||
exit;
|
||||
}
|
||||
$vcalendar = OC_Calendar_App::getVCalendar($id, false, false);
|
||||
$vevent = $vcalendar->VEVENT;
|
||||
|
||||
$allday = $_POST['allDay'];
|
||||
$delta = new DateInterval('P0D');
|
||||
$delta->d = $_POST['dayDelta'];
|
||||
$delta->i = $_POST['minuteDelta'];
|
||||
|
||||
OC_Calendar_App::isNotModified($vevent, $_POST['lastmodified']);
|
||||
|
||||
$dtstart = $vevent->DTSTART;
|
||||
|
@ -40,4 +43,4 @@ $vevent->setDateTime('DTSTAMP', 'now', Sabre_VObject_Element_DateTime::UTC);
|
|||
|
||||
$result = OC_Calendar_Object::edit($id, $vcalendar->serialize());
|
||||
$lastmodified = $vevent->__get('LAST-MODIFIED')->getDateTime();
|
||||
OC_JSON::success(array('lastmodified'=>(int)$lastmodified->format('U')));
|
||||
OC_JSON::success(array('lastmodified'=>(int)$lastmodified->format('U')));
|
|
@ -44,6 +44,7 @@ $repeat_byweekno_options = OC_Calendar_App::getByWeekNoOptions();
|
|||
$repeat_bymonthday_options = OC_Calendar_App::getByMonthDayOptions();
|
||||
|
||||
$tmpl = new OC_Template('calendar', 'part.newevent');
|
||||
$tmpl->assign('access', 'owner');
|
||||
$tmpl->assign('calendar_options', $calendar_options);
|
||||
$tmpl->assign('repeat_options', $repeat_options);
|
||||
$tmpl->assign('repeat_month_options', $repeat_month_options);
|
||||
|
|
|
@ -10,7 +10,13 @@ OC_JSON::checkLoggedIn();
|
|||
|
||||
$id = $_POST['id'];
|
||||
|
||||
$vcalendar = OC_Calendar_App::getVCalendar($id);
|
||||
$access = OC_Calendar_App::getaccess($id, OC_Calendar_App::EVENT);
|
||||
if($access != 'owner' && $access != 'rw'){
|
||||
OC_JSON::error(array('message'=>'permission denied'));
|
||||
exit;
|
||||
}
|
||||
|
||||
$vcalendar = OC_Calendar_App::getVCalendar($id, false, false);
|
||||
$vevent = $vcalendar->VEVENT;
|
||||
|
||||
$delta = new DateInterval('P0D');
|
||||
|
@ -27,6 +33,6 @@ unset($vevent->DURATION);
|
|||
$vevent->setDateTime('LAST-MODIFIED', 'now', Sabre_VObject_Element_DateTime::UTC);
|
||||
$vevent->setDateTime('DTSTAMP', 'now', Sabre_VObject_Element_DateTime::UTC);
|
||||
|
||||
$result = OC_Calendar_Object::edit($id, $vcalendar->serialize());
|
||||
OC_Calendar_Object::edit($id, $vcalendar->serialize());
|
||||
$lastmodified = $vevent->__get('LAST-MODIFIED')->getDateTime();
|
||||
OC_JSON::success(array('lastmodified'=>(int)$lastmodified->format('U')));
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de>
|
||||
* Copyright (c) 2011, 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
|
@ -8,102 +8,19 @@
|
|||
|
||||
require_once ('../../../lib/base.php');
|
||||
require_once('when/When.php');
|
||||
$l = OC_L10N::get('calendar');
|
||||
$unnamed = $l->t('unnamed');
|
||||
function create_return_event($event, $vevent){
|
||||
$return_event = array();
|
||||
global $unnamed;
|
||||
$return_event['id'] = (int)$event['id'];
|
||||
$return_event['title'] = htmlspecialchars(($event['summary']!=NULL || $event['summary'] != '')?$event['summary']: $unnamed);
|
||||
$return_event['description'] = isset($vevent->DESCRIPTION)?htmlspecialchars($vevent->DESCRIPTION->value):'';
|
||||
$last_modified = $vevent->__get('LAST-MODIFIED');
|
||||
if ($last_modified){
|
||||
$lastmodified = $last_modified->getDateTime()->format('U');
|
||||
}else{
|
||||
$lastmodified = 0;
|
||||
}
|
||||
$return_event['lastmodified'] = (int)$lastmodified;
|
||||
return $return_event;
|
||||
}
|
||||
|
||||
OC_JSON::checkLoggedIn();
|
||||
OC_JSON::checkAppEnabled('calendar');
|
||||
|
||||
if(version_compare(PHP_VERSION, '5.3.0', '>=')){
|
||||
$start = DateTime::createFromFormat('U', $_GET['start']);
|
||||
$end = DateTime::createFromFormat('U', $_GET['end']);
|
||||
}else{
|
||||
$start = new DateTime('@' . $_GET['start']);
|
||||
$end = new DateTime('@' . $_GET['end']);
|
||||
}
|
||||
$start = (version_compare(PHP_VERSION, '5.3.0', '>='))?DateTime::createFromFormat('U', $_GET['start']):new DateTime('@' . $_GET['start']);
|
||||
$end = (version_compare(PHP_VERSION, '5.3.0', '>='))?DateTime::createFromFormat('U', $_GET['end']):new DateTime('@' . $_GET['end']);
|
||||
|
||||
$calendar_id = $_GET['calendar_id'];
|
||||
if (is_numeric($calendar_id)) {
|
||||
$calendar = OC_Calendar_App::getCalendar($calendar_id);
|
||||
OC_Response::enableCaching(0);
|
||||
OC_Response::setETagHeader($calendar['ctag']);
|
||||
$events = OC_Calendar_Object::allInPeriod($calendar_id, $start, $end);
|
||||
} else {
|
||||
$events = array();
|
||||
OC_Hook::emit('OC_Calendar', 'getEvents', array('calendar_id' => $calendar_id, 'events' => &$events));
|
||||
}
|
||||
$events = OC_Calendar_App::getrequestedEvents($_GET['calendar_id'], $start, $end);
|
||||
|
||||
$user_timezone = OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'timezone', date_default_timezone_get());
|
||||
$return = array();
|
||||
$output = array();
|
||||
foreach($events as $event){
|
||||
if (isset($event['calendardata'])) {
|
||||
$object = OC_VObject::parse($event['calendardata']);
|
||||
$vevent = $object->VEVENT;
|
||||
} else {
|
||||
$vevent = $event['vevent'];
|
||||
}
|
||||
|
||||
$return_event = create_return_event($event, $vevent);
|
||||
|
||||
$dtstart = $vevent->DTSTART;
|
||||
$start_dt = $dtstart->getDateTime();
|
||||
$dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
|
||||
$end_dt = $dtend->getDateTime();
|
||||
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE){
|
||||
$return_event['allDay'] = true;
|
||||
}else{
|
||||
$return_event['allDay'] = false;
|
||||
$start_dt->setTimezone(new DateTimeZone($user_timezone));
|
||||
$end_dt->setTimezone(new DateTimeZone($user_timezone));
|
||||
}
|
||||
|
||||
//Repeating Events
|
||||
if($event['repeating'] == 1){
|
||||
$duration = (double) $end_dt->format('U') - (double) $start_dt->format('U');
|
||||
$r = new When();
|
||||
$r->recur($start_dt)->rrule((string) $vevent->RRULE);
|
||||
while($result = $r->next()){
|
||||
if($result < $start){
|
||||
continue;
|
||||
}
|
||||
if($result > $end){
|
||||
break;
|
||||
}
|
||||
if($return_event['allDay'] == true){
|
||||
$return_event['start'] = $result->format('Y-m-d');
|
||||
$return_event['end'] = date('Y-m-d', $result->format('U') + --$duration);
|
||||
}else{
|
||||
$return_event['start'] = $result->format('Y-m-d H:i:s');
|
||||
$return_event['end'] = date('Y-m-d H:i:s', $result->format('U') + $duration);
|
||||
}
|
||||
$return[] = $return_event;
|
||||
}
|
||||
}else{
|
||||
if($return_event['allDay'] == true){
|
||||
$return_event['start'] = $start_dt->format('Y-m-d');
|
||||
$end_dt->modify('-1 sec');
|
||||
$return_event['end'] = $end_dt->format('Y-m-d');
|
||||
}else{
|
||||
$return_event['start'] = $start_dt->format('Y-m-d H:i:s');
|
||||
$return_event['end'] = $end_dt->format('Y-m-d H:i:s');
|
||||
}
|
||||
$return[] = $return_event;
|
||||
}
|
||||
$output[] = OC_Calendar_App::generateEventOutput($event, $start, $end);
|
||||
|
||||
}
|
||||
OC_JSON::encodedPrint($return);
|
||||
OC_JSON::encodedPrint($output);
|
||||
?>
|
||||
|
|
|
@ -7,11 +7,12 @@
|
|||
*/
|
||||
//check for calendar rights or create new one
|
||||
ob_start();
|
||||
require_once('../../../../lib/base.php');
|
||||
require_once ('../../../../lib/base.php');
|
||||
OC_JSON::checkLoggedIn();
|
||||
OC_Util::checkAppEnabled('calendar');
|
||||
$nl = "\n\r";
|
||||
$progressfile = OC::$APPSROOT . '/apps/calendar/import_tmp/' . md5(session_id()) . '.txt';
|
||||
$nl="\r\n";
|
||||
$comps = array('VEVENT'=>true, 'VTODO'=>true, 'VJOURNAL'=>true);
|
||||
$progressfile = 'import_tmp/' . md5(session_id()) . '.txt';
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '10');
|
||||
|
@ -29,85 +30,94 @@ if($_POST['method'] == 'new'){
|
|||
}
|
||||
$id = $_POST['id'];
|
||||
}
|
||||
//analyse the calendar file
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '20');
|
||||
fclose($progressfopen);
|
||||
}
|
||||
$searchfor = array('VEVENT', 'VTODO', 'VJOURNAL');
|
||||
$parts = $searchfor;
|
||||
$filearr = explode($nl, $file);
|
||||
$inelement = false;
|
||||
$parts = array();
|
||||
// normalize the newlines
|
||||
$file = str_replace(array("\r","\n\n"), array("\n","\n"), $file);
|
||||
$lines = explode("\n", $file);
|
||||
unset($file);
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '30');
|
||||
fclose($progressfopen);
|
||||
}
|
||||
// analyze the file, group components by uid, and keep refs to originating calendar object
|
||||
// $cals is array calendar objects, keys are 1st line# $cal, ie array( $cal => $caldata )
|
||||
// $caldata is array( 'first' => 1st component line#, 'last' => last comp line#, 'end' => end line# )
|
||||
// $caldata is used to create prefix/suffix strings when building import text
|
||||
// $uids is array of component arrays, keys are $uid, ie array( $uid => array( $beginlineno => $component ) )
|
||||
// $component is array( 'end' => end line#, 'cal'=> $cal )
|
||||
$comp=$uid=$cal=false;
|
||||
$cals=$uids=array();
|
||||
$i = 0;
|
||||
foreach($filearr as $line){
|
||||
foreach($searchfor as $search){
|
||||
if(substr_count($line, $search) == 1){
|
||||
list($attr, $val) = explode(':', $line);
|
||||
if($attr == 'BEGIN'){
|
||||
$parts[]['begin'] = $i;
|
||||
$inelement = true;
|
||||
foreach($lines as $line) {
|
||||
|
||||
if(strpos($line, ':')!==false) {
|
||||
list($attr, $val) = explode(':', strtoupper($line));
|
||||
if ($attr == 'BEGIN' && $val == 'VCALENDAR') {
|
||||
$cal = $i;
|
||||
$cals[$cal] = array('first'=>$i,'last'=>$i,'end'=>$i);
|
||||
} elseif ($attr =='BEGIN' && $cal!==false && isset($comps[$val])) {
|
||||
$comp = $val;
|
||||
$beginNo = $i;
|
||||
} elseif ($attr == 'END' && $cal!==false && $val == 'VCALENDAR') {
|
||||
if($comp!==false) {
|
||||
unset($cals[$cal]); // corrupt calendar, unset it
|
||||
} else {
|
||||
$cals[$cal]['end'] = $i;
|
||||
}
|
||||
if($attr == 'END'){
|
||||
$parts[count($parts) - 1]['end'] = $i;
|
||||
$inelement = false;
|
||||
$comp=$uid=$cal=false; // reset calendar
|
||||
} elseif ($attr == 'END' && $comp!==false && $val == $comp) {
|
||||
if(! $uid) {
|
||||
$uid = OC_Calendar_Object::createUID();
|
||||
}
|
||||
$uids[$uid][$beginNo] = array('end'=>$i, 'cal'=>$cal);
|
||||
if ($cals[$cal]['first'] == $cal) {
|
||||
$cals[$cal]['first'] = $beginNo;
|
||||
}
|
||||
$cals[$cal]['last'] = $i;
|
||||
$comp=$uid=false; // reset component
|
||||
} elseif ($attr =="UID" && $comp!==false) {
|
||||
list($attr, $uid) = explode(':', $line);
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
//import the calendar
|
||||
// import the calendar
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '40');
|
||||
fwrite($progressfopen, '60');
|
||||
fclose($progressfopen);
|
||||
}
|
||||
$start = '';
|
||||
for ($i = 0; $i < $parts[0]['begin']; $i++) {
|
||||
if($i == 0){
|
||||
$start = $filearr[0];
|
||||
}else{
|
||||
$start .= $nl . $filearr[$i];
|
||||
}
|
||||
}
|
||||
$end = '';
|
||||
for($i = $parts[count($parts) - 1]['end'] + 1;$i <= count($filearr) - 1; $i++){
|
||||
if($i == $parts[count($parts) - 1]['end'] + 1){
|
||||
$end = $filearr[$parts[count($parts) - 1]['end'] + 1];
|
||||
}else{
|
||||
$end .= $nl . $filearr[$i];
|
||||
}
|
||||
}
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '50');
|
||||
fclose($progressfopen);
|
||||
}
|
||||
$importready = array();
|
||||
foreach($parts as $part){
|
||||
for($i = $part['begin']; $i <= $part['end'];$i++){
|
||||
if($i == $part['begin']){
|
||||
$content = $filearr[$i];
|
||||
}else{
|
||||
$content .= $nl . $filearr[$i];
|
||||
foreach($uids as $uid) {
|
||||
|
||||
$prefix=$suffix=$content=array();
|
||||
foreach($uid as $begin=>$details) {
|
||||
|
||||
$cal = $details['cal'];
|
||||
if(!isset($cals[$cal])) {
|
||||
continue; // from corrupt/incomplete calendar
|
||||
}
|
||||
$cdata = $cals[$cal];
|
||||
// if we have multiple components from different calendar objects,
|
||||
// we should really merge their elements (enhancement?) -- 1st one wins for now.
|
||||
if(! count($prefix)) {
|
||||
$prefix = array_slice($lines, $cal, $cdata['first'] - $cal);
|
||||
}
|
||||
if(! count($suffix)) {
|
||||
$suffix = array_slice($lines, $cdata['last']+1, $cdata['end'] - $cdata['last']);
|
||||
}
|
||||
$content = array_merge($content, array_slice($lines, $begin, $details['end'] - $begin + 1));
|
||||
}
|
||||
$importready[] = $start . $nl . $content . $nl . $end;
|
||||
}
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '70');
|
||||
fclose($progressfopen);
|
||||
}
|
||||
if(count($parts) == 1){
|
||||
OC_Calendar_Object::add($id, $file);
|
||||
}else{
|
||||
foreach($importready as $import){
|
||||
if(count($content)) {
|
||||
$import = join($nl, array_merge($prefix, $content, $suffix)) . $nl;
|
||||
OC_Calendar_Object::add($id, $import);
|
||||
}
|
||||
}
|
||||
//done the import
|
||||
// finished import
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '100');
|
||||
|
@ -117,4 +127,4 @@ sleep(3);
|
|||
if(is_writable('import_tmp/')){
|
||||
unlink($progressfile);
|
||||
}
|
||||
OC_JSON::success();
|
||||
OC_JSON::success();
|
12
apps/calendar/ajax/share/activation.php
Normal file
12
apps/calendar/ajax/share/activation.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
require_once('../../../../lib/base.php');
|
||||
$id = strip_tags($_GET['id']);
|
||||
$activation = strip_tags($_GET['activation']);
|
||||
OC_Calendar_Share::set_active(OC_User::getUser(), $id, $activation);
|
||||
OC_JSON::success();
|
|
@ -36,5 +36,5 @@ if($sharetype == 'group' && !OC_Group::groupExists($sharewith)){
|
|||
OC_JSON::error(array('message'=>'group not found'));
|
||||
exit;
|
||||
}
|
||||
$success = OC_Calendar_Share::changepermission($sharewith, $sharetype, $id, $permission, (($idtype=='calendar') ? OC_Calendar_Share::CALENDAR : OC_Calendar_Share::Event));
|
||||
$success = OC_Calendar_Share::changepermission($sharewith, $sharetype, $id, $permission, (($idtype=='calendar') ? OC_Calendar_Share::CALENDAR : OC_Calendar_Share::EVENT));
|
||||
OC_JSON::success();
|
|
@ -16,6 +16,14 @@ switch($idtype){
|
|||
OC_JSON::error(array('message'=>'unexspected parameter'));
|
||||
exit;
|
||||
}
|
||||
if($idtype == 'calendar' && !OC_Calendar_App::getCalendar($id)){
|
||||
OC_JSON::error(array('message'=>'permission denied'));
|
||||
exit;
|
||||
}
|
||||
if($idtype == 'event' && !OC_Calendar_App::getEventObject($id)){
|
||||
OC_JSON::error(array('message'=>'permission denied'));
|
||||
exit;
|
||||
}
|
||||
$sharewith = $_GET['sharewith'];
|
||||
$sharetype = strip_tags($_GET['sharetype']);
|
||||
switch($sharetype){
|
||||
|
@ -38,7 +46,7 @@ if($sharetype == 'group' && !OC_Group::groupExists($sharewith)){
|
|||
if($sharetype == 'user' && OC_User::getUser() == $sharewith){
|
||||
OC_JSON::error(array('meesage'=>'you can not share with yourself'));
|
||||
}
|
||||
$success = OC_Calendar_Share::share(OC_User::getUser(), $sharewith, $sharetype, $id, (($idtype=='calendar') ? OC_Calendar_Share::CALENDAR : OC_Calendar_Share::Event));
|
||||
$success = OC_Calendar_Share::share(OC_User::getUser(), $sharewith, $sharetype, $id, (($idtype=='calendar') ? OC_Calendar_Share::CALENDAR : OC_Calendar_Share::EVENT));
|
||||
if($success){
|
||||
if($sharetype == 'public'){
|
||||
OC_JSON::success(array('message'=>$success));
|
||||
|
|
|
@ -30,12 +30,11 @@ switch($sharetype){
|
|||
if($sharetype == 'user' && !OC_User::userExists($sharewith)){
|
||||
OC_JSON::error(array('message'=>'user not found'));
|
||||
exit;
|
||||
}
|
||||
if($sharetype == 'group' && !OC_Group::groupExists($sharewith)){
|
||||
}elseif($sharetype == 'group' && !OC_Group::groupExists($sharewith)){
|
||||
OC_JSON::error(array('message'=>'group not found'));
|
||||
exit;
|
||||
}
|
||||
$success = OC_Calendar_Share::unshare(OC_User::getUser(), $sharewith, $sharetype, $id, (($idtype=='calendar') ? OC_Calendar_Share::CALENDAR : OC_Calendar_Share::Event));
|
||||
$success = OC_Calendar_Share::unshare(OC_User::getUser(), $sharewith, $sharetype, $id, (($idtype=='calendar') ? OC_Calendar_Share::CALENDAR : OC_Calendar_Share::EVENT));
|
||||
if($success){
|
||||
OC_JSON::success();
|
||||
}else{
|
||||
|
|
|
@ -5,9 +5,12 @@ OC::$CLASSPATH['OC_Calendar_Calendar'] = 'apps/calendar/lib/calendar.php';
|
|||
OC::$CLASSPATH['OC_Calendar_Object'] = 'apps/calendar/lib/object.php';
|
||||
OC::$CLASSPATH['OC_Calendar_Hooks'] = 'apps/calendar/lib/hooks.php';
|
||||
OC::$CLASSPATH['OC_Connector_Sabre_CalDAV'] = 'apps/calendar/lib/connector_sabre.php';
|
||||
OC::$CLASSPATH['OC_Calendar_Share'] = 'apps/calendar/lib/share.php';
|
||||
OC::$CLASSPATH['OC_Search_Provider_Calendar'] = 'apps/calendar/lib/search.php';
|
||||
OC_HOOK::connect('OC_User', 'post_deleteUser', 'OC_Calendar_Hooks', 'deleteUser');
|
||||
OC_Util::addScript('calendar','loader');
|
||||
OC_Util::addScript("3rdparty", "chosen/chosen.jquery.min");
|
||||
OC_Util::addStyle("3rdparty", "chosen/chosen");
|
||||
OC_App::register( array(
|
||||
'order' => 10,
|
||||
'id' => 'calendar',
|
||||
|
@ -19,4 +22,4 @@ OC_App::addNavigationEntry( array(
|
|||
'icon' => OC_Helper::imagePath( 'calendar', 'icon.svg' ),
|
||||
'name' => $l->t('Calendar')));
|
||||
OC_App::registerPersonal('calendar', 'settings');
|
||||
OC_Search::registerProvider('OC_Search_Provider_Calendar');
|
||||
OC_Search::registerProvider('OC_Search_Provider_Calendar');
|
|
@ -187,5 +187,107 @@
|
|||
</declaration>
|
||||
|
||||
</table>
|
||||
|
||||
<table>
|
||||
|
||||
<name>*dbprefix*calendar_share_event</name>
|
||||
|
||||
<declaration>
|
||||
|
||||
<field>
|
||||
<name>owner</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>255</length>
|
||||
</field>
|
||||
|
||||
<field>
|
||||
<name>share</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>255</length>
|
||||
</field>
|
||||
|
||||
<field>
|
||||
<name>sharetype</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>6</length>
|
||||
</field>
|
||||
|
||||
<field>
|
||||
<name>eventid</name>
|
||||
<type>integer</type>
|
||||
<default></default>
|
||||
<notnull>true</notnull>
|
||||
<unsigned>true</unsigned>
|
||||
<length>11</length>
|
||||
</field>
|
||||
|
||||
<field>
|
||||
<name>permissions</name>
|
||||
<type>integer</type>
|
||||
<notnull>true</notnull>
|
||||
<length>1</length>
|
||||
</field>
|
||||
|
||||
</declaration>
|
||||
|
||||
</table>
|
||||
|
||||
<table>
|
||||
|
||||
<name>*dbprefix*calendar_share_calendar</name>
|
||||
|
||||
<declaration>
|
||||
|
||||
<field>
|
||||
<name>owner</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>255</length>
|
||||
</field>
|
||||
|
||||
<field>
|
||||
<name>share</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>255</length>
|
||||
</field>
|
||||
|
||||
<field>
|
||||
<name>sharetype</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>6</length>
|
||||
</field>
|
||||
|
||||
<field>
|
||||
<name>calendarid</name>
|
||||
<type>integer</type>
|
||||
<default></default>
|
||||
<notnull>true</notnull>
|
||||
<unsigned>true</unsigned>
|
||||
<length>11</length>
|
||||
</field>
|
||||
|
||||
<field>
|
||||
<name>permissions</name>
|
||||
<type>integer</type>
|
||||
<notnull>true</notnull>
|
||||
<length>1</length>
|
||||
</field>
|
||||
|
||||
<field>
|
||||
<name>active</name>
|
||||
<type>integer</type>
|
||||
<default>1</default>
|
||||
<notnull>true</notnull>
|
||||
<length>4</length>
|
||||
</field>
|
||||
|
||||
</declaration>
|
||||
|
||||
</table>
|
||||
|
||||
</database>
|
||||
|
|
|
@ -1 +1 @@
|
|||
0.2.1
|
||||
0.3
|
|
@ -56,6 +56,12 @@ button.category{margin:0 3px;}
|
|||
.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;}
|
||||
|
||||
#event {padding: 0;margin: 0;margin-top:-5px}
|
||||
|
||||
.calendar_share_dropdown{ display:block; position:absolute; z-index:100; width:16em; right:0; margin-right:7em; background:#F8F8F8; padding:1em;
|
||||
-moz-box-shadow:0 1px 1px #777; -webkit-box-shadow:0 1px 1px #777; box-shadow:0 1px 1px #777;
|
||||
-moz-border-radius:0 0 1em 1em; -webkit-border-radius:0 0 1em 1em; border-radius:0 0 1em 1em;}
|
||||
|
||||
.fc-list-table
|
||||
{
|
||||
margin: 10px;
|
||||
|
|
|
@ -13,7 +13,7 @@ $cal = isset($_GET['calid']) ? $_GET['calid'] : NULL;
|
|||
$event = isset($_GET['eventid']) ? $_GET['eventid'] : NULL;
|
||||
$nl = "\r\n";
|
||||
if(isset($cal)){
|
||||
$calendar = OC_Calendar_App::getCalendar($cal);
|
||||
$calendar = OC_Calendar_App::getCalendar($cal, true);
|
||||
$calobjects = OC_Calendar_Object::all($cal);
|
||||
header('Content-Type: text/Calendar');
|
||||
header('Content-Disposition: inline; filename=' . $calendar['displayname'] . '.ics');
|
||||
|
@ -21,7 +21,7 @@ if(isset($cal)){
|
|||
echo $calobject['calendardata'] . $nl;
|
||||
}
|
||||
}elseif(isset($event)){
|
||||
$data = OC_Calendar_App::getEventObject($_GET['eventid']);
|
||||
$data = OC_Calendar_App::getEventObject($_GET['eventid'], true);
|
||||
$calendarid = $data['calendarid'];
|
||||
$calendar = OC_Calendar_App::getCalendar($calendarid);
|
||||
header('Content-Type: text/Calendar');
|
||||
|
|
|
@ -1,130 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
//check for calendar rights or create new one
|
||||
ob_start();
|
||||
require_once ('../../lib/base.php');
|
||||
OC_JSON::checkLoggedIn();
|
||||
OC_Util::checkAppEnabled('calendar');
|
||||
$nl="\r\n";
|
||||
$comps = array('VEVENT'=>true, 'VTODO'=>true, 'VJOURNAL'=>true);
|
||||
$progressfile = 'import_tmp/' . md5(session_id()) . '.txt';
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '10');
|
||||
fclose($progressfopen);
|
||||
}
|
||||
$file = OC_Filesystem::file_get_contents($_POST['path'] . '/' . $_POST['file']);
|
||||
if($_POST['method'] == 'new'){
|
||||
$id = OC_Calendar_Calendar::addCalendar(OC_User::getUser(), $_POST['calname']);
|
||||
OC_Calendar_Calendar::setCalendarActive($id, 1);
|
||||
}else{
|
||||
$calendar = OC_Calendar_App::getCalendar($_POST['id']);
|
||||
if($calendar['userid'] != OC_USER::getUser()){
|
||||
OC_JSON::error();
|
||||
exit();
|
||||
}
|
||||
$id = $_POST['id'];
|
||||
}
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '20');
|
||||
fclose($progressfopen);
|
||||
}
|
||||
// normalize the newlines
|
||||
$file = str_replace(array("\r","\n\n"), array("\n","\n"), $file);
|
||||
$lines = explode("\n", $file);
|
||||
unset($file);
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '30');
|
||||
fclose($progressfopen);
|
||||
}
|
||||
// analyze the file, group components by uid, and keep refs to originating calendar object
|
||||
// $cals is array calendar objects, keys are 1st line# $cal, ie array( $cal => $caldata )
|
||||
// $caldata is array( 'first' => 1st component line#, 'last' => last comp line#, 'end' => end line# )
|
||||
// $caldata is used to create prefix/suffix strings when building import text
|
||||
// $uids is array of component arrays, keys are $uid, ie array( $uid => array( $beginlineno => $component ) )
|
||||
// $component is array( 'end' => end line#, 'cal'=> $cal )
|
||||
$comp=$uid=$cal=false;
|
||||
$cals=$uids=array();
|
||||
$i = 0;
|
||||
foreach($lines as $line) {
|
||||
|
||||
if(strpos($line, ':')!==false) {
|
||||
list($attr, $val) = explode(':', strtoupper($line));
|
||||
if ($attr == 'BEGIN' && $val == 'VCALENDAR') {
|
||||
$cal = $i;
|
||||
$cals[$cal] = array('first'=>$i,'last'=>$i,'end'=>$i);
|
||||
} elseif ($attr =='BEGIN' && $cal!==false && isset($comps[$val])) {
|
||||
$comp = $val;
|
||||
$beginNo = $i;
|
||||
} elseif ($attr == 'END' && $cal!==false && $val == 'VCALENDAR') {
|
||||
if($comp!==false) {
|
||||
unset($cals[$cal]); // corrupt calendar, unset it
|
||||
} else {
|
||||
$cals[$cal]['end'] = $i;
|
||||
}
|
||||
$comp=$uid=$cal=false; // reset calendar
|
||||
} elseif ($attr == 'END' && $comp!==false && $val == $comp) {
|
||||
if(! $uid) {
|
||||
$uid = OC_Calendar_Object::createUID();
|
||||
}
|
||||
$uids[$uid][$beginNo] = array('end'=>$i, 'cal'=>$cal);
|
||||
if ($cals[$cal]['first'] == $cal) {
|
||||
$cals[$cal]['first'] = $beginNo;
|
||||
}
|
||||
$cals[$cal]['last'] = $i;
|
||||
$comp=$uid=false; // reset component
|
||||
} elseif ($attr =="UID" && $comp!==false) {
|
||||
list($attr, $uid) = explode(':', $line);
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
// import the calendar
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '60');
|
||||
fclose($progressfopen);
|
||||
}
|
||||
foreach($uids as $uid) {
|
||||
|
||||
$prefix=$suffix=$content=array();
|
||||
foreach($uid as $begin=>$details) {
|
||||
|
||||
$cal = $details['cal'];
|
||||
if(!isset($cals[$cal])) {
|
||||
continue; // from corrupt/incomplete calendar
|
||||
}
|
||||
$cdata = $cals[$cal];
|
||||
// if we have multiple components from different calendar objects,
|
||||
// we should really merge their elements (enhancement?) -- 1st one wins for now.
|
||||
if(! count($prefix)) {
|
||||
$prefix = array_slice($lines, $cal, $cdata['first'] - $cal);
|
||||
}
|
||||
if(! count($suffix)) {
|
||||
$suffix = array_slice($lines, $cdata['last']+1, $cdata['end'] - $cdata['last']);
|
||||
}
|
||||
$content = array_merge($content, array_slice($lines, $begin, $details['end'] - $begin + 1));
|
||||
}
|
||||
if(count($content)) {
|
||||
$import = join($nl, array_merge($prefix, $content, $suffix)) . $nl;
|
||||
OC_Calendar_Object::add($id, $import);
|
||||
}
|
||||
}
|
||||
// finished import
|
||||
if(is_writable('import_tmp/')){
|
||||
$progressfopen = fopen($progressfile, 'w');
|
||||
fwrite($progressfopen, '100');
|
||||
fclose($progressfopen);
|
||||
}
|
||||
sleep(3);
|
||||
if(is_writable('import_tmp/')){
|
||||
unlink($progressfile);
|
||||
}
|
||||
OC_JSON::success();
|
|
@ -21,6 +21,10 @@ $eventSources = array();
|
|||
foreach($calendars as $calendar){
|
||||
$eventSources[] = OC_Calendar_Calendar::getEventSourceInfo($calendar);
|
||||
}
|
||||
|
||||
$eventSources[] = array('url' => 'ajax/events.php?calendar_id=shared_rw', 'backgroundColor' => '#1D2D44', 'borderColor' => '#888', 'textColor' => 'white', 'editable'=>'true');
|
||||
$eventSources[] = array('url' => 'ajax/events.php?calendar_id=shared_r', 'backgroundColor' => '#1D2D44', 'borderColor' => '#888', 'textColor' => 'white', 'editable' => 'false');
|
||||
|
||||
OC_Hook::emit('OC_Calendar', 'getSources', array('sources' => &$eventSources));
|
||||
$categories = OC_Calendar_App::getCategoryOptions();
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@ Calendar={
|
|||
$('#advanced_month').change(function(){
|
||||
Calendar.UI.repeat('month');
|
||||
});
|
||||
$( "#event" ).tabs({ selected: 0});
|
||||
$('#event').dialog({
|
||||
width : 500,
|
||||
close : function(event, ui) {
|
||||
|
@ -455,7 +456,7 @@ Calendar={
|
|||
$('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url);
|
||||
$('#calendar_holder').fullCalendar('addEventSource', data.eventSource);
|
||||
if (calendarid == 'new'){
|
||||
$('#choosecalendar_dialog > table').append('<tr><td colspan="6"><a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="' + newcalendar + '"></a></td></tr>');
|
||||
$('#choosecalendar_dialog > table:first').append('<tr><td colspan="6"><a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="' + newcalendar + '"></a></td></tr>');
|
||||
}
|
||||
}else{
|
||||
$("#displayname_"+calendarid).css('background-color', '#FF2626');
|
||||
|
@ -494,6 +495,109 @@ Calendar={
|
|||
left: -10000
|
||||
});
|
||||
}
|
||||
},
|
||||
Share:{
|
||||
currentid: 'false',
|
||||
idtype: '',
|
||||
activation:function(object,owner,id){
|
||||
$.getJSON(OC.filePath('calendar', 'ajax/share', 'activation.php'),{id:id, idtype:'calendar', activation:object.checked?1:0});
|
||||
$('#calendar_holder').fullCalendar('refetchEvents');
|
||||
},
|
||||
dropdown:function(userid, calid){
|
||||
$('.calendar_share_dropdown').remove();
|
||||
$('<div class="calendar_share_dropdown"></div>').appendTo('#'+userid+'_'+calid);
|
||||
$.get(OC.filePath('calendar', 'ajax/share', 'dropdown.php') + '?calid=' + calid, function(data){
|
||||
$('#'+userid+'_'+calid+' > .calendar_share_dropdown').html(data);
|
||||
$('#'+userid+'_'+calid+' > .calendar_share_dropdown').show('blind');
|
||||
$('#share_user').chosen();
|
||||
$('#share_group').chosen();
|
||||
});
|
||||
Calendar.UI.Share.currentid = calid;
|
||||
Calendar.UI.Share.idtype = 'calendar';
|
||||
},
|
||||
share:function(id, idtype, sharewith, sharetype){
|
||||
$.getJSON(OC.filePath('calendar', 'ajax/share', 'share.php'),{id:id, idtype:idtype, sharewith:sharewith, sharetype:sharetype}, function(data){
|
||||
|
||||
});
|
||||
},
|
||||
unshare:function(id, idtype, sharewith, sharetype){
|
||||
$.getJSON(OC.filePath('calendar', 'ajax/share', 'unshare.php'),{id:id, idtype:idtype, sharewith:sharewith, sharetype:sharetype}, function(){
|
||||
if(sharetype == 'public'){
|
||||
$('#public_token').val('');
|
||||
$('#public_token').css('display', 'none');
|
||||
}
|
||||
});
|
||||
},
|
||||
changepermission:function(id, idtype, sharewith, sharetype, permission){
|
||||
$.getJSON(OC.filePath('calendar', 'ajax/share', 'changepermission.php'),{id:id, idtype:idtype, sharewith: sharewith, sharetype:sharetype, permission: (permission?1:0)});
|
||||
},
|
||||
init:function(){
|
||||
$('.calendar_share_dropdown').live('mouseleave', function(){
|
||||
$('.calendar_share_dropdown').hide('blind', function(){
|
||||
$('.calendar_share_dropdown').remove();
|
||||
});
|
||||
});
|
||||
$('#share_user').live('change', function(){
|
||||
if($('#sharewithuser_' + $('#share_user option:selected').text()).length == 0){
|
||||
Calendar.UI.Share.share(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, $('#share_user option:selected').text(), 'user');
|
||||
var newitem = '<li id="sharewithuser_' + $('#share_user option:selected').text() +'"><input type="checkbox" width="12px" style="visibility:hidden;" title="' + $('#share_user option:selected').text() + '">' + $('#share_user option:selected').text() + '<img src="/owncloud/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li>';
|
||||
$('#sharewithuser_list').append(newitem);
|
||||
$('#sharewithuser_' + $('#share_user option:selected').text() + ' > img').click(function(){
|
||||
$('#share_user option[value="' + $(this).parent().text() + '"]').removeAttr('disabled');
|
||||
Calendar.UI.Share.unshare(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, $(this).parent().text(), 'user' );
|
||||
$("#share_user").trigger("liszt:updated");
|
||||
$(this).parent().remove();
|
||||
});
|
||||
$('#share_user option:selected').attr('disabled', 'disabled');
|
||||
$("#share_user").trigger("liszt:updated");
|
||||
}
|
||||
});
|
||||
$('#share_group').live('change', function(){
|
||||
if($('#sharewithgroup_' + $('#share_group option:selected').text()).length == 0){
|
||||
Calendar.UI.Share.share(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, $('#share_group option:selected').text(), 'group');
|
||||
var newitem = '<li id="sharewithgroup_' + $('#share_group option:selected').text() +'"><input type="checkbox" width="12px" style="visibility:hidden;" title="' + $('#share_group option:selected').text() + '">' + $('#share_group option:selected').text() + '<img src="/owncloud/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li>';
|
||||
$('#sharewithgroup_list').append(newitem);
|
||||
$('#sharewithgroup_' + $('#share_group option:selected').text() + ' > img').click(function(){
|
||||
$('#share_group option[value="' + $(this).parent().text() + '"]').removeAttr('disabled');
|
||||
Calendar.UI.Share.unshare(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, $(this).parent().text(), 'group');
|
||||
$("#share_group").trigger("liszt:updated");
|
||||
$(this).parent().remove();
|
||||
});
|
||||
$('#share_group option:selected').attr('disabled', 'disabled');
|
||||
$("#share_group").trigger("liszt:updated");
|
||||
}
|
||||
});
|
||||
$('#sharewithuser_list > li > input:checkbox').live('change', function(){
|
||||
Calendar.UI.Share.changepermission(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, $(this).parent().text(), 'user', this.checked);
|
||||
});
|
||||
$('#sharewithgroup_list > li > input:checkbox').live('change', function(){
|
||||
Calendar.UI.Share.changepermission(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, $(this).parent().text(), 'group', this.checked);
|
||||
});
|
||||
$('#publish').live('change', function(){
|
||||
if(this.checked == 1){
|
||||
Calendar.UI.Share.share(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, '', 'public');
|
||||
}else{
|
||||
Calendar.UI.Share.unshare(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, '', 'public');
|
||||
}
|
||||
});
|
||||
$('#sharewithuser_list').live('mouseenter', function(){
|
||||
$('#sharewithuser_list > li > img').css('display', 'block');
|
||||
$('#sharewithuser_list > li > input').css('visibility', 'visible');
|
||||
});
|
||||
$('#sharewithuser_list').live('mouseleave', function(){
|
||||
$('#sharewithuser_list > li > img').css('display', 'none');
|
||||
$('#sharewithuser_list > li > input').css('visibility', 'hidden');
|
||||
});
|
||||
$('#sharewithgroup_list').live('mouseenter', function(){
|
||||
$('#sharewithgroup_list > li > img').css('display', 'block');
|
||||
$('#sharewithgroup_list > li > input').css('visibility', 'visible');
|
||||
});
|
||||
$('#sharewithgroup_list').live('mouseleave', function(){
|
||||
$('#sharewithgroup_list > li > img').css('display', 'none');
|
||||
$('#sharewithgroup_list > li > input').css('visibility', 'hidden');
|
||||
});
|
||||
/*var permissions = (this.checked) ? 1 : 0;*/
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -749,4 +853,5 @@ $(document).ready(function(){
|
|||
$('#datecontrol_right').click(function(){
|
||||
$('#calendar_holder').fullCalendar('next');
|
||||
});
|
||||
Calendar.UI.Share.init();
|
||||
});
|
||||
|
|
|
@ -44,7 +44,7 @@ Calendar_Import={
|
|||
$('#newcalendar').attr('readonly', 'readonly');
|
||||
$('#calendar').attr('disabled', 'disabled');
|
||||
var progressfile = $('#progressfile').val();
|
||||
$.post(OC.filePath('calendar', '', 'import.php'), {method: String (method), calname: String (calname), path: String (path), file: String (filename), id: String (calid)}, function(data){
|
||||
$.post(OC.filePath('calendar', 'ajax/import', 'import.php'), {method: String (method), calname: String (calname), path: String (path), file: String (filename), id: String (calid)}, function(data){
|
||||
if(data.status == 'success'){
|
||||
$('#progressbar').progressbar('option', 'value', 100);
|
||||
$('#import_done').css('display', 'block');
|
||||
|
|
13
apps/calendar/lib/alarm.php
Normal file
13
apps/calendar/lib/alarm.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
/*
|
||||
* This class manages reminders for calendars
|
||||
*/
|
||||
class OC_Calendar_Alarm{
|
||||
|
||||
}
|
|
@ -1,60 +1,121 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
|
||||
* Copyright (c) 2012 Georg Ehrke <georg@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* This class manages our app actions
|
||||
*/
|
||||
OC_Calendar_App::$l10n = OC_L10N::get('calendar');
|
||||
OC_Calendar_App::$l10n = new OC_L10N('calendar');
|
||||
OC_Calendar_App::$tz = OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'timezone', date_default_timezone_get());
|
||||
class OC_Calendar_App{
|
||||
const CALENDAR = 'calendar';
|
||||
const EVENT = 'event';
|
||||
/*
|
||||
* @brief language object for calendar app
|
||||
*/
|
||||
public static $l10n;
|
||||
|
||||
/*
|
||||
* @brief categories of the user
|
||||
*/
|
||||
protected static $categories = null;
|
||||
|
||||
public static function getCalendar($id){
|
||||
$calendar = OC_Calendar_Calendar::find( $id );
|
||||
if( $calendar === false || $calendar['userid'] != OC_User::getUser()){
|
||||
OC_JSON::error(array('data' => array('message' => self::$l10n->t('Wrong calendar'))));
|
||||
exit();
|
||||
/*
|
||||
* @brief timezone of the user
|
||||
*/
|
||||
public static $tz;
|
||||
|
||||
/*
|
||||
* @brief returns informations about a calendar
|
||||
* @param int $id - id of the calendar
|
||||
* @param bool $security - check access rights or not
|
||||
* @param bool $shared - check if the user got access via sharing
|
||||
* @return mixed - bool / array
|
||||
*/
|
||||
public static function getCalendar($id, $security = true, $shared = false){
|
||||
$calendar = OC_Calendar_Calendar::find($id);
|
||||
if($shared === true){
|
||||
if(OC_Calendar_Share::check_access(OC_User::getUser(), $id, OC_Calendar_Share::CALENDAR)){
|
||||
return $calendar;
|
||||
}
|
||||
}
|
||||
return $calendar;
|
||||
}
|
||||
|
||||
public static function getEventObject($id){
|
||||
$event_object = OC_Calendar_Object::find( $id );
|
||||
if( $event_object === false ){
|
||||
OC_JSON::error();
|
||||
exit();
|
||||
if($security === true){
|
||||
if($calendar['userid'] != OC_User::getUser()){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
self::getCalendar( $event_object['calendarid'] );//access check
|
||||
return $event_object;
|
||||
}
|
||||
|
||||
public static function getVCalendar($id){
|
||||
$event_object = self::getEventObject( $id );
|
||||
|
||||
$vcalendar = OC_VObject::parse($event_object['calendardata']);
|
||||
// Check if the vcalendar is valid
|
||||
if(is_null($vcalendar)){
|
||||
OC_JSON::error();
|
||||
exit();
|
||||
if($calendar === false){
|
||||
return false;
|
||||
}
|
||||
return $vcalendar;
|
||||
return OC_Calendar_Calendar::find($id);
|
||||
}
|
||||
|
||||
public static function isNotModified($vevent, $lastmodified)
|
||||
{
|
||||
|
||||
/*
|
||||
* @brief returns informations about an event
|
||||
* @param int $id - id of the event
|
||||
* @param bool $security - check access rights or not
|
||||
* @param bool $shared - check if the user got access via sharing
|
||||
* @return mixed - bool / array
|
||||
*/
|
||||
public static function getEventObject($id, $security = true, $shared = false){
|
||||
$event = OC_Calendar_Object::find($id);
|
||||
if($shared === true){
|
||||
if(OC_Calendar_Share::check_access(OC_User::getUser(), $id, OC_Calendar_Share::EVENT)){
|
||||
return $event;
|
||||
}
|
||||
}
|
||||
if($security === true){
|
||||
$calendar = self::getCalendar($event['calendarid'], false);
|
||||
if($calendar['userid'] != OC_User::getUser()){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if($event === false){
|
||||
return false;
|
||||
}
|
||||
return $event;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief returns the parsed calendar data
|
||||
* @param int $id - id of the event
|
||||
* @param bool $security - check access rights or not
|
||||
* @return mixed - bool / object
|
||||
*/
|
||||
public static function getVCalendar($id, $security = true, $shared = false){
|
||||
$event_object = self::getEventObject($id, $security, $shared);
|
||||
if($event_object === false){
|
||||
return false;
|
||||
}
|
||||
$vobject = OC_VObject::parse($event_object['calendardata']);
|
||||
if(is_null($vobject)){
|
||||
return false;
|
||||
}
|
||||
return $vobject;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief checks if an event was edited and dies if it was
|
||||
* @param (object) $vevent - vevent object of the event
|
||||
* @param (int) $lastmodified - time of last modification as unix timestamp
|
||||
* @return (bool)
|
||||
*/
|
||||
public static function isNotModified($vevent, $lastmodified){
|
||||
$last_modified = $vevent->__get('LAST-MODIFIED');
|
||||
if($last_modified && $lastmodified != $last_modified->getDateTime()->format('U')){
|
||||
OC_JSON::error(array('modified'=>true));
|
||||
exit;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief returns the default categories of ownCloud
|
||||
* @return (array) $categories
|
||||
*/
|
||||
protected static function getDefaultCategories()
|
||||
{
|
||||
return array(
|
||||
|
@ -75,14 +136,22 @@ class OC_Calendar_App{
|
|||
self::$l10n->t('Work'),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief returns the vcategories object of the user
|
||||
* @return (object) $vcategories
|
||||
*/
|
||||
protected static function getVCategories() {
|
||||
if (is_null(self::$categories)) {
|
||||
self::$categories = new OC_VCategories('calendar', null, self::getDefaultCategories());
|
||||
}
|
||||
return self::$categories;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief returns the categories of the vcategories object
|
||||
* @return (array) $categories
|
||||
*/
|
||||
public static function getCategoryOptions()
|
||||
{
|
||||
$categories = self::getVCategories()->categories();
|
||||
|
@ -127,40 +196,226 @@ class OC_Calendar_App{
|
|||
public static function getRepeatOptions(){
|
||||
return OC_Calendar_Object::getRepeatOptions(self::$l10n);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief returns the options for the end of an repeating event
|
||||
* @return array - valid inputs for the end of an repeating events
|
||||
*/
|
||||
public static function getEndOptions(){
|
||||
return OC_Calendar_Object::getEndOptions(self::$l10n);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief returns the options for an monthly repeating event
|
||||
* @return array - valid inputs for monthly repeating events
|
||||
*/
|
||||
public static function getMonthOptions(){
|
||||
return OC_Calendar_Object::getMonthOptions(self::$l10n);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief returns the options for an weekly repeating event
|
||||
* @return array - valid inputs for weekly repeating events
|
||||
*/
|
||||
public static function getWeeklyOptions(){
|
||||
return OC_Calendar_Object::getWeeklyOptions(self::$l10n);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief returns the options for an yearly repeating event
|
||||
* @return array - valid inputs for yearly repeating events
|
||||
*/
|
||||
public static function getYearOptions(){
|
||||
return OC_Calendar_Object::getYearOptions(self::$l10n);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief returns the options for an yearly repeating event which occurs on specific days of the year
|
||||
* @return array - valid inputs for yearly repeating events
|
||||
*/
|
||||
public static function getByYearDayOptions(){
|
||||
return OC_Calendar_Object::getByYearDayOptions();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief returns the options for an yearly repeating event which occurs on specific month of the year
|
||||
* @return array - valid inputs for yearly repeating events
|
||||
*/
|
||||
public static function getByMonthOptions(){
|
||||
return OC_Calendar_Object::getByMonthOptions(self::$l10n);
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief returns the options for an yearly repeating event which occurs on specific week numbers of the year
|
||||
* @return array - valid inputs for yearly repeating events
|
||||
*/
|
||||
public static function getByWeekNoOptions(){
|
||||
return OC_Calendar_Object::getByWeekNoOptions();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief returns the options for an yearly or monthly repeating event which occurs on specific days of the month
|
||||
* @return array - valid inputs for yearly or monthly repeating events
|
||||
*/
|
||||
public static function getByMonthDayOptions(){
|
||||
return OC_Calendar_Object::getByMonthDayOptions();
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief returns the options for an monthly repeating event which occurs on specific weeks of the month
|
||||
* @return array - valid inputs for monthly repeating events
|
||||
*/
|
||||
public static function getWeekofMonth(){
|
||||
return OC_Calendar_Object::getWeekofMonth(self::$l10n);
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief checks the access for a calendar / an event
|
||||
* @param (int) $id - id of the calendar / event
|
||||
* @param (string) $type - type of the id (calendar/event)
|
||||
* @return (string) $access - level of access
|
||||
*/
|
||||
public static function getaccess($id, $type){
|
||||
if($type == self::CALENDAR){
|
||||
$calendar = self::getCalendar($id, false, false);
|
||||
if($calendar['userid'] == OC_User::getUser()){
|
||||
return 'owner';
|
||||
}
|
||||
$isshared = OC_Calendar_Share::check_access(OC_User::getUser(), $id, OC_Calendar_Share::CALENDAR);
|
||||
if($isshared){
|
||||
$writeaccess = OC_Calendar_Share::is_editing_allowed(OC_User::getUser(), $id, OC_Calendar_Share::CALENDAR);
|
||||
if($writeaccess){
|
||||
return 'rw';
|
||||
}else{
|
||||
return 'r';
|
||||
}
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}elseif($type == self::EVENT){
|
||||
if(OC_Calendar_Object::getowner($id) == OC_User::getUser()){
|
||||
return 'owner';
|
||||
}
|
||||
$isshared = OC_Calendar_Share::check_access(OC_User::getUser(), $id, OC_Calendar_Share::EVENT);
|
||||
if($isshared){
|
||||
$writeaccess = OC_Calendar_Share::is_editing_allowed(OC_User::getUser(), $id, OC_Calendar_Share::EVENT);
|
||||
if($writeaccess){
|
||||
return 'rw';
|
||||
}else{
|
||||
return 'r';
|
||||
}
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief analyses the parameter for calendar parameter and returns the objects
|
||||
* @param (string) $calendarid - calendarid
|
||||
* @param (int) $start - unixtimestamp of start
|
||||
* @param (int) $end - unixtimestamp of end
|
||||
* @return (array) $events
|
||||
*/
|
||||
public static function getrequestedEvents($calendarid, $start, $end){
|
||||
$events = array();
|
||||
if($calendarid == 'shared_rw' || $_GET['calendar_id'] == 'shared_r'){
|
||||
$calendars = OC_Calendar_Share::allSharedwithuser(OC_USER::getUser(), OC_Calendar_Share::CALENDAR, 1, ($_GET['calendar_id'] == 'shared_rw')?'rw':'r');
|
||||
foreach($calendars as $calendar){
|
||||
$calendarevents = OC_Calendar_Object::allInPeriod($calendar['calendarid'], $start, $end);
|
||||
$events = array_merge($events, $calendarevents);
|
||||
}
|
||||
$singleevents = OC_Calendar_Share::allSharedwithuser(OC_USER::getUser(), OC_Calendar_Share::EVENT, 1, ($_GET['calendar_id'] == 'shared_rw')?'rw':'r');
|
||||
foreach($singleevents as $singleevent){
|
||||
$event = OC_Calendar_Object::find($singleevent['eventid']);
|
||||
$events[] = $event;
|
||||
}
|
||||
}else{
|
||||
$calendar_id = $_GET['calendar_id'];
|
||||
if (is_numeric($calendar_id)) {
|
||||
$calendar = self::getCalendar($calendar_id);
|
||||
OC_Response::enableCaching(0);
|
||||
OC_Response::setETagHeader($calendar['ctag']);
|
||||
$events = OC_Calendar_Object::allInPeriod($calendar_id, $start, $end);
|
||||
} else {
|
||||
OC_Hook::emit('OC_Calendar', 'getEvents', array('calendar_id' => $calendar_id, 'events' => &$events));
|
||||
}
|
||||
}
|
||||
return $events;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief generates the output for an event which will be readable for our js
|
||||
* @param (mixed) $event - event object / array
|
||||
* @param (int) $start - unixtimestamp of start
|
||||
* @param (int) $end - unixtimestamp of end
|
||||
* @return (array) $output - readable output
|
||||
*/
|
||||
public static function generateEventOutput($event, $start, $end){
|
||||
$output = array();
|
||||
|
||||
if(isset($event['calendardata'])){
|
||||
$object = OC_VObject::parse($event['calendardata']);
|
||||
$vevent = $object->VEVENT;
|
||||
}else{
|
||||
$vevent = $event['vevent'];
|
||||
}
|
||||
|
||||
$last_modified = @$vevent->__get('LAST-MODIFIED');
|
||||
$lastmodified = ($last_modified)?$last_modified->getDateTime()->format('U'):0;
|
||||
|
||||
$output = array('id'=>(int)$event['id'],
|
||||
'title' => htmlspecialchars(($event['summary']!=NULL || $event['summary'] != '')?$event['summary']: self::$l10n->t('unnamed')),
|
||||
'description' => isset($vevent->DESCRIPTION)?htmlspecialchars($vevent->DESCRIPTION->value):'',
|
||||
'lastmodified'=>$lastmodified);
|
||||
|
||||
$dtstart = $vevent->DTSTART;
|
||||
$start_dt = $dtstart->getDateTime();
|
||||
$dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
|
||||
$end_dt = $dtend->getDateTime();
|
||||
|
||||
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE){
|
||||
$output['allDay'] = true;
|
||||
}else{
|
||||
$output['allDay'] = false;
|
||||
$start_dt->setTimezone(new DateTimeZone(self::$tz));
|
||||
$end_dt->setTimezone(new DateTimeZone(self::$tz));
|
||||
}
|
||||
|
||||
if($event['repeating'] == 1){
|
||||
$duration = (double) $end_dt->format('U') - (double) $start_dt->format('U');
|
||||
$r = new When();
|
||||
$r->recur($start_dt)->rrule((string) $vevent->RRULE);
|
||||
/*$r = new iCal_Repeat_Generator(array('RECUR' => $start_dt,
|
||||
* 'RRULE' => (string)$vevent->RRULE
|
||||
* 'RDATE' => (string)$vevent->RDATE
|
||||
* 'EXRULE' => (string)$vevent->EXRULE
|
||||
* 'EXDATE' => (string)$vevent->EXDATE));*/
|
||||
while($result = $r->next()){
|
||||
if($result < $start){
|
||||
continue;
|
||||
}
|
||||
if($result > $end){
|
||||
break;
|
||||
}
|
||||
if($output['allDay'] == true){
|
||||
$output['start'] = $result->format('Y-m-d');
|
||||
$output['end'] = date('Y-m-d', $result->format('U') + --$duration);
|
||||
}else{
|
||||
$output['start'] = $result->format('Y-m-d H:i:s');
|
||||
$output['end'] = date('Y-m-d H:i:s', $result->format('U') + $duration);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if($output['allDay'] == true){
|
||||
$output['start'] = $start_dt->format('Y-m-d');
|
||||
$end_dt->modify('-1 sec');
|
||||
$output['end'] = $end_dt->format('Y-m-d');
|
||||
}else{
|
||||
$output['start'] = $start_dt->format('Y-m-d H:i:s');
|
||||
$output['end'] = $end_dt->format('Y-m-d H:i:s');
|
||||
}
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
|
13
apps/calendar/lib/attendees.php
Normal file
13
apps/calendar/lib/attendees.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
/*
|
||||
* This class manages Attendees for calendars
|
||||
*/
|
||||
class OC_Calendar_Attendees{
|
||||
|
||||
}
|
|
@ -104,7 +104,7 @@ class OC_Calendar_Object{
|
|||
$uri = 'owncloud-'.md5($data.rand().time()).'.ics';
|
||||
|
||||
$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*calendar_objects (calendarid,objecttype,startdate,enddate,repeating,summary,calendardata,uri,lastmodified) VALUES(?,?,?,?,?,?,?,?,?)' );
|
||||
$result = $stmt->execute(array($id,$type,$startdate,$enddate,$repeating,$summary,$data,$uri,time()));
|
||||
$stmt->execute(array($id,$type,$startdate,$enddate,$repeating,$summary,$data,$uri,time()));
|
||||
|
||||
OC_Calendar_Calendar::touchCalendar($id);
|
||||
|
||||
|
@ -123,7 +123,7 @@ class OC_Calendar_Object{
|
|||
list($type,$startdate,$enddate,$summary,$repeating,$uid) = self::extractData($object);
|
||||
|
||||
$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*calendar_objects (calendarid,objecttype,startdate,enddate,repeating,summary,calendardata,uri,lastmodified) VALUES(?,?,?,?,?,?,?,?,?)' );
|
||||
$result = $stmt->execute(array($id,$type,$startdate,$enddate,$repeating,$summary,$data,$uri,time()));
|
||||
$stmt->execute(array($id,$type,$startdate,$enddate,$repeating,$summary,$data,$uri,time()));
|
||||
|
||||
OC_Calendar_Calendar::touchCalendar($id);
|
||||
|
||||
|
@ -144,7 +144,7 @@ class OC_Calendar_Object{
|
|||
list($type,$startdate,$enddate,$summary,$repeating,$uid) = self::extractData($object);
|
||||
|
||||
$stmt = OC_DB::prepare( 'UPDATE *PREFIX*calendar_objects SET objecttype=?,startdate=?,enddate=?,repeating=?,summary=?,calendardata=?, lastmodified = ? WHERE id = ?' );
|
||||
$result = $stmt->execute(array($type,$startdate,$enddate,$repeating,$summary,$data,time(),$id));
|
||||
$stmt->execute(array($type,$startdate,$enddate,$repeating,$summary,$data,time(),$id));
|
||||
|
||||
OC_Calendar_Calendar::touchCalendar($oldobject['calendarid']);
|
||||
|
||||
|
@ -165,7 +165,7 @@ class OC_Calendar_Object{
|
|||
list($type,$startdate,$enddate,$summary,$repeating,$uid) = self::extractData($object);
|
||||
|
||||
$stmt = OC_DB::prepare( 'UPDATE *PREFIX*calendar_objects SET objecttype=?,startdate=?,enddate=?,repeating=?,summary=?,calendardata=?, lastmodified = ? WHERE id = ?' );
|
||||
$result = $stmt->execute(array($type,$startdate,$enddate,$repeating,$summary,$data,time(),$oldobject['id']));
|
||||
$stmt->execute(array($type,$startdate,$enddate,$repeating,$summary,$data,time(),$oldobject['id']));
|
||||
|
||||
OC_Calendar_Calendar::touchCalendar($oldobject['calendarid']);
|
||||
|
||||
|
@ -202,7 +202,7 @@ class OC_Calendar_Object{
|
|||
|
||||
public static function moveToCalendar($id, $calendarid){
|
||||
$stmt = OC_DB::prepare( 'UPDATE *PREFIX*calendar_objects SET calendarid=? WHERE id = ?' );
|
||||
$result = $stmt->execute(array($calendarid,$id));
|
||||
$stmt->execute(array($calendarid,$id));
|
||||
|
||||
OC_Calendar_Calendar::touchCalendar($id);
|
||||
|
||||
|
@ -432,11 +432,6 @@ class OC_Calendar_Object{
|
|||
$errarr['title'] = 'true';
|
||||
$errnum++;
|
||||
}
|
||||
$calendar = OC_Calendar_Calendar::find($request['calendar']);
|
||||
if($calendar['userid'] != OC_User::getUser()){
|
||||
$errarr['cal'] = 'true';
|
||||
$errnum++;
|
||||
}
|
||||
|
||||
$fromday = substr($request['from'], 0, 2);
|
||||
$frommonth = substr($request['from'], 3, 2);
|
||||
|
@ -461,11 +456,11 @@ class OC_Calendar_Object{
|
|||
if($request['repeat'] != 'doesnotrepeat'){
|
||||
if(is_nan($request['interval']) && $request['interval'] != ''){
|
||||
$errarr['interval'] = 'true';
|
||||
$ernum++;
|
||||
$errnum++;
|
||||
}
|
||||
if(array_key_exists('repeat', $request) && !array_key_exists($request['repeat'], self::getRepeatOptions(OC_Calendar_App::$l10n))){
|
||||
$errarr['repeat'] = 'true';
|
||||
$ernum++;
|
||||
$errnum++;
|
||||
}
|
||||
if(array_key_exists('advanced_month_select', $request) && !array_key_exists($request['advanced_month_select'], self::getMonthOptions(OC_Calendar_App::$l10n))){
|
||||
$errarr['advanced_month_select'] = 'true';
|
||||
|
@ -760,8 +755,6 @@ class OC_Calendar_Object{
|
|||
$vevent->setDateTime('DTSTAMP', 'now', Sabre_VObject_Element_DateTime::UTC);
|
||||
$vevent->setString('SUMMARY', $title);
|
||||
|
||||
$dtstart = new Sabre_VObject_Element_DateTime('DTSTART');
|
||||
$dtend = new Sabre_VObject_Element_DateTime('DTEND');
|
||||
if($allday){
|
||||
$start = new DateTime($from);
|
||||
$end = new DateTime($to.' +1 day');
|
||||
|
@ -787,4 +780,15 @@ class OC_Calendar_Object{
|
|||
|
||||
return $vcalendar;
|
||||
}
|
||||
|
||||
public static function getowner($id){
|
||||
$event = self::find($id);
|
||||
$cal = OC_Calendar_Calendar::find($event['calendarid']);
|
||||
return $cal['userid'];
|
||||
}
|
||||
|
||||
public static function getCalendarid($id){
|
||||
$event = self::find($id);
|
||||
return $event['calendarid'];
|
||||
}
|
||||
}
|
||||
|
|
259
apps/calendar/lib/share.php
Normal file
259
apps/calendar/lib/share.php
Normal file
|
@ -0,0 +1,259 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
/*
|
||||
* This class manages shared calendars
|
||||
*/
|
||||
class OC_Calendar_Share{
|
||||
const CALENDAR = 'calendar';
|
||||
const EVENT = 'event';
|
||||
/*
|
||||
* @brief: returns informations about all calendar or events which users are sharing with the user - userid
|
||||
* @param: (string) $userid - id of the user
|
||||
* @param: (string) $type - use const self::CALENDAR or self::EVENT
|
||||
* @return: (array) $return - information about calendars
|
||||
*/
|
||||
public static function allSharedwithuser($userid, $type, $active=null, $permission=null){
|
||||
$group_where = self::group_sql(OC_Group::getUserGroups($userid));
|
||||
$permission_where = self::permission_sql($permission);
|
||||
if($type == self::CALENDAR){
|
||||
$active_where = self::active_sql($active);
|
||||
}else{
|
||||
$active_where = '';
|
||||
}
|
||||
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*calendar_share_' . $type . ' WHERE ((share = ? AND sharetype = "user") ' . $group_where . ') AND owner <> ? ' . $permission_where . ' ' . $active_where);
|
||||
$result = $stmt->execute(array($userid, $userid));
|
||||
$return = array();
|
||||
while( $row = $result->fetchRow()){
|
||||
$return[] = $row;
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
/*
|
||||
* @brief: returns all users a calendar / event is shared with
|
||||
* @param: (int) id - id of the calendar / event
|
||||
* @param: (string) $type - use const self::CALENDAR or self::EVENT
|
||||
* @return: (array) $users - information about users a calendar / event is shared with
|
||||
*/
|
||||
public static function allUsersSharedwith($id, $type){
|
||||
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*calendar_share_' . $type . ' WHERE ' . $type . 'id = ? ORDER BY share');
|
||||
$result = $stmt->execute(array($id));
|
||||
$users = array();
|
||||
while( $row = $result->fetchRow()){
|
||||
$users[] = $row;
|
||||
}
|
||||
return $users;
|
||||
}
|
||||
/*
|
||||
* @brief: shares a calendar / event
|
||||
* @param: (string) $owner - userid of the owner
|
||||
* @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
|
||||
* @param: (string) $sharetype - type of sharing (can be: user/group/public)
|
||||
* @param: (string) $id - id of the calendar / event
|
||||
* @param: (string) $type - use const self::CALENDAR or self::EVENT
|
||||
* @return (mixed) - token (if $sharetype == public) / bool (if $sharetype != public)
|
||||
*/
|
||||
public static function share($owner, $share, $sharetype, $id, $type){
|
||||
if(self::is_already_shared($owner, $share, $sharetype, $id, $type)){
|
||||
return false;
|
||||
}
|
||||
switch($sharetype){
|
||||
case 'user':
|
||||
case 'group':
|
||||
case 'public':
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
if($sharetype == 'public'){
|
||||
$share = self::generate_token($id, $type);
|
||||
}
|
||||
$stmt = OC_DB::prepare('INSERT INTO *PREFIX*calendar_share_' . $type . ' (owner,share,sharetype,' . $type . 'id,permissions' . (($type == self::CALENDAR)?', active':'') . ') VALUES(?,?,?,?,0' . (($type == self::CALENDAR)?', 1':'') . ')' );
|
||||
$result = $stmt->execute(array($owner,$share,$sharetype,$id));
|
||||
if($sharetype == 'public'){
|
||||
return $share;
|
||||
}else{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* @brief: stops sharing a calendar / event
|
||||
* @param: (string) $owner - userid of the owner
|
||||
* @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
|
||||
* @param: (string) $sharetype - type of sharing (can be: user/group/public)
|
||||
* @param: (string) $id - id of the calendar / event
|
||||
* @param: (string) $type - use const self::CALENDAR or self::EVENT
|
||||
* @return (bool)
|
||||
*/
|
||||
public static function unshare($owner, $share, $sharetype, $id, $type){
|
||||
$stmt = OC_DB::prepare('DELETE FROM *PREFIX*calendar_share_' . $type . ' WHERE owner = ? ' . (($sharetype != 'public')?'AND share = ?':'') . ' AND sharetype = ? AND ' . $type . 'id = ?');
|
||||
if($sharetype != 'public'){
|
||||
$stmt->execute(array($owner,$share,$sharetype,$id));
|
||||
}else{
|
||||
$stmt->execute(array($owner,$sharetype,$id));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
* @brief: changes the permission for a calendar / event
|
||||
* @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
|
||||
* @param: (string) $sharetype - type of sharing (can be: user/group/public)
|
||||
* @param: (string) $id - id of the calendar / event
|
||||
* @param: (int) $permission - permission of user the calendar / event is shared with (if $sharetype == public then $permission = 0)
|
||||
* @param: (string) $type - use const self::CALENDAR or self::EVENT
|
||||
* @return (bool)
|
||||
*/
|
||||
public static function changepermission($share, $sharetype, $id, $permission, $type){
|
||||
if($sharetype == 'public' && $permission == 1){
|
||||
$permission = 0;
|
||||
}
|
||||
$stmt = OC_DB::prepare('UPDATE *PREFIX*calendar_share_' . $type . ' SET permissions = ? WHERE share = ? AND sharetype = ? AND ' . $type . 'id = ?');
|
||||
$stmt->execute(array($permission, $share, $sharetype, $id));
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
* @brief: generates a token for public calendars / events
|
||||
* @return: (string) $token
|
||||
*/
|
||||
private static function generate_token($id, $type){
|
||||
$uniqid = uniqid();
|
||||
if($type == self::CALENDAR){
|
||||
$events = OC_Calendar_Object::all($id);
|
||||
$string = '';
|
||||
foreach($events as $event){
|
||||
$string .= $event['calendardata'];
|
||||
}
|
||||
}else{
|
||||
$string = OC_Calendar_Object::find($id);
|
||||
}
|
||||
$string = sha1($string['calendardata']);
|
||||
$id = sha1($id);
|
||||
$array = array($uniqid,$string,$id);
|
||||
shuffle($array);
|
||||
$string = implode('', $array);
|
||||
$token = md5($string);
|
||||
return substr($token, rand(0,16), 15);
|
||||
}
|
||||
/*
|
||||
* @brief: checks if it is already shared
|
||||
* @param: (string) $owner - userid of the owner
|
||||
* @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
|
||||
* @param: (string) $sharetype - type of sharing (can be: user/group/public)
|
||||
* @param: (string) $id - id of the calendar / event
|
||||
* @param: (string) $type - use const self::CALENDAR or self::EVENT
|
||||
* @return (bool)
|
||||
*/
|
||||
public static function is_already_shared($owner, $share, $sharetype, $id, $type){
|
||||
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*calendar_share_' . $type . ' WHERE owner = ? AND share = ? AND sharetype = ? AND ' . $type . 'id = ?');
|
||||
$result = $stmt->execute(array($owner, $share, $sharetype, $id));
|
||||
if($result->numRows() > 0){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
private static function group_sql($groups){
|
||||
$group_where = '';
|
||||
$i = 0;
|
||||
foreach($groups as $group){
|
||||
$group_where .= ' OR ';
|
||||
$group_where .= ' (share = "' . $group . '" AND sharetype = "group") ';
|
||||
$i++;
|
||||
}
|
||||
return $group_where;
|
||||
}
|
||||
private static function permission_sql($permission = null){
|
||||
$permission_where = '';
|
||||
if(!is_null($permission)){
|
||||
$permission_where = ' AND permissions = ';
|
||||
$permission_where .= ($permission=='rw')?'"1"':'"0"';
|
||||
}
|
||||
return $permission_where;
|
||||
}
|
||||
private static function active_sql($active = null){
|
||||
$active_where = '';
|
||||
if(!is_null($active)){
|
||||
$active_where = 'AND active = ';
|
||||
$active_where .= (!is_null($active) && $active)?'1':'0';
|
||||
}
|
||||
return $active_where;
|
||||
}
|
||||
/*
|
||||
* @brief: checks the permission for editing an event
|
||||
* @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
|
||||
* @param: (string) $id - id of the calendar / event
|
||||
* @param: (string) $type - use const self::CALENDAR or self::EVENT
|
||||
* @return (bool)
|
||||
*/
|
||||
public static function is_editing_allowed($share, $id, $type){
|
||||
$group_where = self::group_sql(OC_Group::getUserGroups($share));
|
||||
$permission_where = self::permission_sql('rw');
|
||||
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*calendar_share_' . $type . ' WHERE ((share = ? AND sharetype = "user") ' . $group_where . ') ' . $permission_where);
|
||||
$result = $stmt->execute(array($share));
|
||||
if($result->numRows() == 1){
|
||||
return true;
|
||||
}
|
||||
if($type == self::EVENT){
|
||||
$event = OC_Calendar_App::getEventObject($id, false, false);
|
||||
return self::is_editing_allowed($share, $event['calendarid'], self::CALENDAR);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/*
|
||||
* @brief: checks the access of
|
||||
* @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
|
||||
* @param: (string) $id - id of the calendar / event
|
||||
* @param: (string) $type - use const self::CALENDAR or self::EVENT
|
||||
* @return (bool)
|
||||
*/
|
||||
public static function check_access($share, $id, $type){
|
||||
$group_where = self::group_sql(OC_Group::getUserGroups($share));
|
||||
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*calendar_share_' . $type . ' WHERE (' . $type . 'id = ? AND (share = ? AND sharetype = "user") ' . $group_where . ')');
|
||||
$result = $stmt->execute(array($id,$share));
|
||||
$rows = $result->numRows();
|
||||
if($rows > 0){
|
||||
return true;
|
||||
}elseif($type == self::EVENT){
|
||||
$event = OC_Calendar_App::getEventObject($id, false, false);
|
||||
return self::check_access($share, $event['calendarid'], self::CALENDAR);
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* @brief: returns the calendardata of an event or a calendar
|
||||
* @param: (string) $token - token which should be searched
|
||||
* @return: mixed - bool if false, array with type and id if true
|
||||
*/
|
||||
public static function getElementByToken($token){
|
||||
$stmt_calendar = OC_DB::prepare('SELECT * FROM *PREFIX*calendar_share_' . OC_Calendar_Share::CALENDAR . ' WHERE sharetype = "public" AND share = ?');
|
||||
$result_calendar = $stmt_calendar->execute(array($token));
|
||||
$stmt_event = OC_DB::prepare('SELECT * FROM *PREFIX*calendar_share_' . OC_Calendar_Share::EVENT . ' WHERE sharetype = "public" AND share = ?');
|
||||
$result_event = $stmt_event->execute(array($token));
|
||||
$return = array();
|
||||
if($result_calendar->numRows() == 0 && $result_event->numRows() == 0){
|
||||
return false;
|
||||
}elseif($result_calendar->numRows() != 0){
|
||||
$return ['type'] = 'calendar';
|
||||
$calendar = $result_calendar->fetchRow();
|
||||
$return ['id'] = $calendar['calendarid'];
|
||||
}else{
|
||||
$return ['type'] = 'event';
|
||||
$event = $result_event->fetchRow();
|
||||
$return ['id'] = $event['eventid'];
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief sets the active status of the calendar
|
||||
* @param (string) $
|
||||
*/
|
||||
public static function set_active($share, $id, $active){
|
||||
$stmt = OC_DB::prepare('UPDATE *PREFIX*calendar_share_calendar SET active = ? WHERE share = ? AND sharetype = "user" AND calendarid = ?');
|
||||
$stmt->execute(array($active, $share, $id));
|
||||
}
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
<?php
|
||||
require_once ("../../lib/base.php");
|
||||
OC_Preferences::deleteKey(OC_USER::getUser(), 'calendar', 'timezone');
|
||||
?>
|
23
apps/calendar/share.php
Normal file
23
apps/calendar/share.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
require_once('../../lib/base.php');
|
||||
$token = strip_tags($_GET['t']);
|
||||
$shared = OC_Calendar_Share::getElementByToken($token);
|
||||
$nl = "\n\r";
|
||||
if($shared['type'] == OC_Calendar_Share::CALENDAR){
|
||||
$calendar = OC_Calendar_App::getCalendar($shared['id'], false);
|
||||
$calobjects = OC_Calendar_Object::all($shared['id']);
|
||||
header('Content-Type: text/Calendar');
|
||||
header('Content-Disposition: inline; filename=' . $calendar['displayname'] . '.ics');
|
||||
foreach($calobjects as $calobject){
|
||||
echo $calobject['calendardata'] . $nl;
|
||||
}
|
||||
}elseif($shared['type'] == OC_Calendar_Share::EVENT){
|
||||
$data = OC_Calendar_App::getEventObject($shared['id'], false);
|
||||
$calendarid = $data['calendarid'];
|
||||
$calendar = OC_Calendar_App::getCalendar($calendarid);
|
||||
header('Content-Type: text/Calendar');
|
||||
header('Content-Disposition: inline; filename=' . $data['summary'] . '.ics');
|
||||
echo $data['calendardata'];
|
||||
}else{
|
||||
header('Error 404: Not Found');
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
<div id="choosecalendar_dialog" title="<?php echo $l->t("Choose active calendars"); ?>">
|
||||
<p><b><?php echo $l->t('Your calendars'); ?>:</b></p>
|
||||
<table width="100%" style="border: 0;">
|
||||
<?php
|
||||
$option_calendars = OC_Calendar_Calendar::allCalendars(OC_User::getUser());
|
||||
|
@ -6,6 +7,12 @@ for($i = 0; $i < count($option_calendars); $i++){
|
|||
echo "<tr>";
|
||||
$tmpl = new OC_Template('calendar', 'part.choosecalendar.rowfields');
|
||||
$tmpl->assign('calendar', $option_calendars[$i]);
|
||||
if(OC_Calendar_Share::allUsersSharedwith($option_calendars[$i]['id'], OC_Calendar_Share::CALENDAR) == array()){
|
||||
$shared = false;
|
||||
}else{
|
||||
$shared = true;
|
||||
}
|
||||
$tmpl->assign('shared', $shared);
|
||||
$tmpl->printpage();
|
||||
echo "</tr>";
|
||||
}
|
||||
|
@ -20,4 +27,25 @@ for($i = 0; $i < count($option_calendars); $i++){
|
|||
<p style="margin: 0 auto;width: 90%;"><input style="display:none;width: 90%;float: left;" type="text" id="caldav_url" onmouseover="$('#caldav_url').select();" title="<?php echo $l->t("CalDav Link"); ?>"><img id="caldav_url_close" style="height: 20px;vertical-align: middle;display: none;" src="../../core/img/actions/delete.svg" alt="close" onclick="$('#caldav_url').hide();$('#caldav_url_close').hide();"/></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table><br>
|
||||
<p><b><?php echo $l->t('Shared calendars'); ?>: </b></p>
|
||||
<table width="100%" style="border: 0;">
|
||||
<?php
|
||||
$share = OC_Calendar_Share::allSharedwithuser(OC_User::getUser(), OC_Calendar_Share::CALENDAR);
|
||||
$count = count($share);
|
||||
for($i = 0; $i < $count; $i++){
|
||||
$share[$i]['calendar'] = OC_Calendar_App::getCalendar($share[$i]['calendarid'], false, false);
|
||||
echo '<tr>';
|
||||
$tmpl = new OC_Template('calendar', 'part.choosecalendar.rowfields.shared');
|
||||
$tmpl->assign('share', $share[$i]);
|
||||
$tmpl->printpage();
|
||||
echo '</tr>';
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
<?php
|
||||
if($count == 0){
|
||||
echo '<p style="text-align:center;"><b>' . $l->t('No shared calendars') . '</b></p>';
|
||||
}
|
||||
?>
|
||||
</div>
|
|
@ -1,4 +1,8 @@
|
|||
<?php
|
||||
echo "<td width=\"20px\"><input id=\"active_" . $_['calendar']["id"] . "\" type=\"checkbox\" onClick=\"Calendar.UI.Calendar.activation(this, " . $_['calendar']["id"] . ")\"" . ($_['calendar']["active"] ? ' checked="checked"' : '') . "></td>";
|
||||
echo "<td><label for=\"active_" . $_['calendar']["id"] . "\">" . $_['calendar']["displayname"] . "</label></td>";
|
||||
echo "<td width=\"20px\"><a href=\"#\" onclick=\"Calendar.UI.showCalDAVUrl('" . OC_User::getUser() . "', '" . rawurlencode( $_['calendar']["uri"] ) . "');\" title=\"" . $l->t("CalDav Link") . "\" class=\"action\"><img class=\"svg action\" src=\"../../core/img/actions/public.svg\"></a></td><td width=\"20px\"><a href=\"export.php?calid=" . $_['calendar']["id"] . "\" title=\"" . $l->t("Download") . "\" class=\"action\"><img class=\"svg action\" src=\"../../core/img/actions/download.svg\"></a></td><td width=\"20px\"><a href=\"#\" title=\"" . $l->t("Edit") . "\" class=\"action\" onclick=\"Calendar.UI.Calendar.edit(this, " . $_['calendar']["id"] . ");\"><img class=\"svg action\" src=\"../../core/img/actions/rename.svg\"></a></td><td width=\"20px\"><a href=\"#\" onclick=\"Calendar.UI.Calendar.deleteCalendar('" . $_['calendar']["id"] . "');\" title=\"" . $l->t("Delete") . "\" class=\"action\"><img class=\"svg action\" src=\"../../core/img/actions/delete.svg\"></a></td>";
|
||||
echo '<td width="20px"><input id="active_' . $_['calendar']['id'] . '" type="checkbox" onClick="Calendar.UI.Calendar.activation(this,' . $_['calendar']['id'] . ')"' . ($_['calendar']['active'] ? ' checked="checked"' : '') . '></td>';
|
||||
echo '<td id="' . OC_User::getUser() . '_' . $_['calendar']['id'] . '"><label for="active_' . $_['calendar']['id'] . '">' . $_['calendar']['displayname'] . '</label></td>';
|
||||
echo '<td width="20px"><a href="#" onclick="Calendar.UI.Share.dropdown(\'' . OC_User::getUser() . '\', \'' . $_['calendar']['id'] . '\');" title="' . $l->t("Share Calendar") . '" class="action"><img class="svg action" src="' . ((!$_['shared']) ? '../../core/img/actions/share.svg' : '../../core/img/actions/shared.svg') . '"></a></td>';
|
||||
echo '<td width="20px"><a href="#" onclick="Calendar.UI.showCalDAVUrl(\'' . OC_User::getUser() . '\', \'' . $_['calendar']['uri'] . '\');" title="' . $l->t("CalDav Link") . '" class="action"><img class="svg action" src="../../core/img/actions/public.svg"></a></td>';
|
||||
echo '<td width="20px"><a href="export.php?calid=' . $_['calendar']['id'] . '" title="' . $l->t('Download') . '" class="action"><img class="svg action" src="../../core/img/actions/download.svg"></a></td>';
|
||||
echo '<td width="20px"><a href="#" title="' . $l->t('Edit') . '" class="action" onclick="Calendar.UI.Calendar.edit(this, ' . $_['calendar']['id'] . ');"><img class="svg action" src="../../core/img/actions/rename.svg"></a></td>';
|
||||
echo '<td width="20px"><a href="#" onclick="Calendar.UI.Calendar.deleteCalendar(\'' . $_['calendar']['id'] . '\');" title="' . $l->t('Delete') . '" class="action"><img class="svg action" src="../../core/img/actions/delete.svg"></a></td>';
|
|
@ -0,0 +1,4 @@
|
|||
<?php
|
||||
echo '<td width="20px"><input id="active_' . $_['share']['owner'] . '_' . $_['share']['calendar']['id'] . '" type="checkbox" onClick="Calendar.UI.Share.activation(this,\'' . $_['share']['owner'] . '\',' . $_['share']['calendar']['id'] . ')"' . ($_['share']['active'] ? ' checked="checked"' : '') . '></td>';
|
||||
echo '<td><label for="active_' . $_['share']['owner'] . '_' . $_['share']['calendar']['id'] . '">' . $_['share']['calendar']['displayname'] . '</label></td>';
|
||||
echo '<td style="font-style: italic;">' . $l->t('shared with you by') . ' ' . $_['share']['owner'] . '</td>';
|
|
@ -1,13 +1,13 @@
|
|||
<div id="event" title="<?php echo $l->t("Edit an event");?>">
|
||||
<form id="event_form">
|
||||
<input type="hidden" name="id" value="<?php echo $_['id'] ?>">
|
||||
<input type="hidden" name="id" value="<?php echo $_['eventid'] ?>">
|
||||
<input type="hidden" name="lastmodified" value="<?php echo $_['lastmodified'] ?>">
|
||||
<?php echo $this->inc("part.eventform"); ?>
|
||||
<div style="width: 100%;text-align: center;color: #FF1D1D;" id="errorbox"></div>
|
||||
<span id="actions">
|
||||
<input type="button" class="submit" style="float: left;" value="<?php echo $l->t("Submit");?>" onclick="Calendar.UI.validateEventForm('ajax/event/edit.php');">
|
||||
<input type="button" class="submit" style="float: left;" name="delete" value="<?php echo $l->t("Delete");?>" onclick="Calendar.UI.submitDeleteEventForm('ajax/event/delete.php');">
|
||||
<input type="button" class="submit" style="float: right;" name="export" value="<?php echo $l->t("Export");?>" onclick="window.location='export.php?eventid=<?php echo $_['id'] ?>';">
|
||||
<input type="button" class="submit" style="float: right;" name="export" value="<?php echo $l->t("Export");?>" onclick="window.location='export.php?eventid=<?php echo $_['eventid'] ?>';">
|
||||
</span>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -1,3 +1,19 @@
|
|||
<script type="text/javascript">
|
||||
<?php
|
||||
echo 'Calendar.UI.Share.idtype = "event";' . "\n" . 'Calendar.UI.Share.currentid = "' . $_['eventid'] . '";';
|
||||
?>
|
||||
</script>
|
||||
|
||||
<ul>
|
||||
<li><a href="#tabs-1"><?php echo $l->t('Eventinfo'); ?></a></li>
|
||||
<li><a href="#tabs-2"><?php echo $l->t('Repeating'); ?></a></li>
|
||||
<li><a href="#tabs-3"><?php echo $l->t('Alarm'); ?></a></li>
|
||||
<li><a href="#tabs-4"><?php echo $l->t('Attendees'); ?></a></li>
|
||||
<?php if($_['access'] == 'owner') { ?>
|
||||
<li><a href="#tabs-5"><?php echo $l->t('Share'); ?></a></li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<div id="tabs-1">
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<th width="75px"><?php echo $l->t("Title");?>:</th>
|
||||
|
@ -26,7 +42,7 @@
|
|||
<?php } else { ?>
|
||||
<th width="75px"> </th>
|
||||
<td>
|
||||
<input type="hidden" name="calendar" value="<?php echo $_['calendar_options'][0]['id'] ?>">
|
||||
<input type="hidden" name="calendar" value="<?php echo $_['calendar_options'][0]['id']; ?>">
|
||||
</td>
|
||||
<?php } ?>
|
||||
</tr>
|
||||
|
@ -59,7 +75,27 @@
|
|||
</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 style="width:100%">
|
||||
<hr>
|
||||
<table>
|
||||
<tr>
|
||||
<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']) ? htmlspecialchars($_['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']) ? htmlspecialchars($_['description']) : '' ?></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tabs-2">
|
||||
<table style="width:100%">
|
||||
<tr>
|
||||
<th width="75px"><?php echo $l->t("Repeat");?>:</th>
|
||||
<td>
|
||||
|
@ -112,7 +148,7 @@
|
|||
<tr id="advanced_weekday" style="display:none;">
|
||||
<th width="75px"></th>
|
||||
<td id="weeklycheckbox">
|
||||
<select id="weeklyoptions" name="weeklyoptions[]" multiple="multiple" title="<?php echo $l->t("Select weekdays") ?>">
|
||||
<select id="weeklyoptions" name="weeklyoptions[]" multiple="multiple" style="width: 150px;" title="<?php echo $l->t("Select weekdays") ?>">
|
||||
<?php
|
||||
if (!isset($_['weekdays'])) {$_['weekdays'] = array();}
|
||||
echo html_select_options($_['repeat_weekly_options'], $_['repeat_weekdays'], array('combine'=>true));
|
||||
|
@ -185,6 +221,7 @@
|
|||
<td>
|
||||
<select id="end" name="end">
|
||||
<?php
|
||||
if($_['repeat_end'] == '') $_['repeat_end'] = 'never';
|
||||
echo html_select_options($_['repeat_end_options'], $_['repeat_end']);
|
||||
?>
|
||||
</select>
|
||||
|
@ -203,23 +240,13 @@
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php echo $l->t('Summary'); ?>:<span id="repeatsummary"></span>
|
||||
</div>
|
||||
<hr>
|
||||
<!-- support for attendees will be added in following versions -->
|
||||
<table>
|
||||
<tr>
|
||||
<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']) ? htmlspecialchars($_['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']) ? htmlspecialchars($_['description']) : '' ?></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tabs-3">//Alarm</div>
|
||||
<div id="tabs-4">//Attendees</div>
|
||||
<?php if($_['access'] == 'owner') { ?>
|
||||
<div id="tabs-5">
|
||||
<?php echo $this->inc('share.dropdown'); ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<input type="hidden" id="filename" value="<?php echo $_['filename'];?>">
|
||||
<input type="hidden" id="path" value="<?php echo $_['path'];?>">
|
||||
<input type="hidden" id="progressfile" value="<?php echo md5(session_id()) . '.txt';?>">
|
||||
<p style="text-align:center;"><b><?php echo $l->t('Please choose the calendar'); ?></b>
|
||||
<p style="text-align:center;"><b><?php echo $l->t('Please choose the calendar'); ?></b></p>
|
||||
<select style="width:100%;" id="calendar" name="calendar">
|
||||
<?php
|
||||
$calendar_options = OC_Calendar_Calendar::allCalendars(OC_User::getUser());
|
||||
|
@ -17,7 +17,7 @@ echo html_select_options($calendar_options, $calendar_options[0]['id'], array('v
|
|||
<input type="button" value="<?php echo $l->t("Import");?>!" id="startimport">
|
||||
</div>
|
||||
<div id="progressbar_container" style="display: none">
|
||||
<p style="text-align:center;"><b><?php echo $l->t('Importing calendar'); ?></b>
|
||||
<p style="text-align:center;"><b><?php echo $l->t('Importing calendar'); ?></b></p>
|
||||
<div id="progressbar"></div>
|
||||
<div id="import_done" style="display: none;">
|
||||
<p style="text-align:center;"><b><?php echo $l->t('Calendar imported successfully'); ?></b></p>
|
||||
|
|
247
apps/calendar/templates/part.showevent.php
Normal file
247
apps/calendar/templates/part.showevent.php
Normal file
|
@ -0,0 +1,247 @@
|
|||
<div id="event" title="<?php echo $l->t("View an event");?>">
|
||||
<ul>
|
||||
<li><a href="#tabs-1"><?php echo $l->t('Eventinfo'); ?></a></li>
|
||||
<li><a href="#tabs-2"><?php echo $l->t('Repeating'); ?></a></li>
|
||||
<li><a href="#tabs-3"><?php echo $l->t('Alarm'); ?></a></li>
|
||||
<li><a href="#tabs-4"><?php echo $l->t('Attendees'); ?></a></li>
|
||||
</ul>
|
||||
<div id="tabs-1">
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<th width="75px"><?php echo $l->t("Title");?>:</th>
|
||||
<td>
|
||||
<?php echo isset($_['title']) ? htmlspecialchars($_['title']) : '' ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<th width="75px"><?php echo $l->t("Category");?>:</th>
|
||||
<td>
|
||||
<?php
|
||||
if(count($_['categories']) == 0){
|
||||
echo $l->t('No categories selected');
|
||||
}else{
|
||||
echo '<select id="category" name="categories[]" multiple="multiple" title="' . $l->t("Select category") . '">';
|
||||
echo html_select_options($_['categories'], $_['categories'], array('combine'=>true));
|
||||
echo '</select>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<th width="75px"> <?php echo $l->t("Calendar");?>:</th>
|
||||
<td>
|
||||
<select name="calendar" disabled="disabled">
|
||||
<option>
|
||||
<?php
|
||||
$calendar = OC_Calendar_App::getCalendar($_['calendar']);
|
||||
echo $calendar['displayname'] . ' ' . $l->t('of') . ' ' . $calendar['userid'];
|
||||
?>
|
||||
</option>
|
||||
|
||||
</select>
|
||||
</td>
|
||||
<th width="75px"> </th>
|
||||
<td>
|
||||
<input type="hidden" name="calendar" value="<?php echo $_['calendar_options'][0]['id'] ?>">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<th width="75px"></th>
|
||||
<td>
|
||||
<input onclick="Calendar.UI.lockTime();" type="checkbox"<?php if($_['allday']){echo 'checked="checked"';} ?> id="allday_checkbox" name="allday" disabled="disabled">
|
||||
<?php echo $l->t("All Day Event");?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th width="75px"><?php echo $l->t("From");?>:</th>
|
||||
<td>
|
||||
<?php echo $_['startdate'];?>
|
||||
<?php echo (!$_['allday'])?$l->t('at'):''; ?>
|
||||
<?php echo $_['starttime'];?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th width="75px"><?php echo $l->t("To");?>:</th>
|
||||
<td>
|
||||
<?php echo $_['enddate'];?>
|
||||
<?php echo (!$_['allday'])?$l->t('at'):''; ?>
|
||||
<?php echo $_['endtime'];?>
|
||||
</td>
|
||||
</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;">
|
||||
<hr>
|
||||
<table>
|
||||
<tr>
|
||||
<th width="85px"><?php echo $l->t("Location");?>:</th>
|
||||
<td>
|
||||
<?php echo isset($_['location']) ? htmlspecialchars($_['location']) : '' ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table>
|
||||
<tr>
|
||||
<th width="85px" style="vertical-align: top;"><?php echo $l->t("Description");?>:</th>
|
||||
<td>
|
||||
<?php echo isset($_['description']) ? htmlspecialchars($_['description']) : '' ?></textarea>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tabs-2">
|
||||
<table style="width:100%">
|
||||
<tr>
|
||||
<th width="75px"><?php echo $l->t("Repeat");?>:</th>
|
||||
<td>
|
||||
<select id="repeat" name="repeat">
|
||||
<?php
|
||||
echo html_select_options(array($_['repeat_options'][$_['repeat']]), $_['repeat']);
|
||||
?>
|
||||
</select></td>
|
||||
<td><input type="button" style="float:right;" class="submit" value="<?php echo $l->t("Advanced"); ?>" onclick="Calendar.UI.showadvancedoptionsforrepeating();" id="advanced_options_button"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="advanced_options_repeating" style="display:none;">
|
||||
<table style="width:100%">
|
||||
<tr id="advanced_month" style="display:none;">
|
||||
<th width="75px"></th>
|
||||
<td>
|
||||
<select id="advanced_month_select" name="advanced_month_select">
|
||||
<?php
|
||||
echo html_select_options(array($_['repeat_month_options'][$_['repeat_month']]), $_['repeat_month']);
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="width:100%">
|
||||
<tr id="advanced_year" style="display:none;">
|
||||
<th width="75px"></th>
|
||||
<td>
|
||||
<select id="advanced_year_select" name="advanced_year_select">
|
||||
<?php
|
||||
echo html_select_options(array($_['repeat_year_options'][$_['repeat_year']]), $_['repeat_year']);
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="width:100%">
|
||||
<tr id="advanced_weekofmonth" style="display:none;">
|
||||
<th width="75px"></th>
|
||||
<td id="weekofmonthcheckbox">
|
||||
<select id="weekofmonthoptions" name="weekofmonthoptions">
|
||||
<?php
|
||||
echo html_select_options(array($_['repeat_weekofmonth_options'][$_['repeat_weekofmonth']]), $_['repeat_weekofmonth']);
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="width:100%">
|
||||
<tr id="advanced_weekday" style="display:none;">
|
||||
<th width="75px"></th>
|
||||
<td id="weeklycheckbox">
|
||||
<select id="weeklyoptions" name="weeklyoptions[]" multiple="multiple" style="width: 150px;" title="<?php echo $l->t("Select weekdays") ?>">
|
||||
<?php
|
||||
if (!isset($_['weekdays'])) {$_['weekdays'] = array();}
|
||||
echo html_select_options(array($_['repeat_weekly_options'][$_['repeat_weekdays']]), $_['repeat_weekdays'], array('combine'=>true));
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="width:100%">
|
||||
<tr id="advanced_byyearday" style="display:none;">
|
||||
<th width="75px"></th>
|
||||
<td id="byyeardaycheckbox">
|
||||
<select id="byyearday" name="byyearday[]" multiple="multiple" title="<?php echo $l->t("Select days") ?>">
|
||||
<?php
|
||||
if (!isset($_['repeat_byyearday'])) {$_['repeat_byyearday'] = array();}
|
||||
echo html_select_options(array($_['repeat_byyearday_options'][$_['repeat_byyearday']]), $_['repeat_byyearday'], array('combine'=>true));
|
||||
?>
|
||||
</select><?php echo $l->t('and the events day of year.'); ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="width:100%">
|
||||
<tr id="advanced_bymonthday" style="display:none;">
|
||||
<th width="75px"></th>
|
||||
<td id="bymonthdaycheckbox">
|
||||
<select id="bymonthday" name="bymonthday[]" multiple="multiple" title="<?php echo $l->t("Select days") ?>">
|
||||
<?php
|
||||
if (!isset($_['repeat_bymonthday'])) {$_['repeat_bymonthday'] = array();}
|
||||
echo html_select_options(array($_['repeat_bymonthday_options'][$_['repeat_bymonthday']]), $_['repeat_bymonthday'], array('combine'=>true));
|
||||
?>
|
||||
</select><?php echo $l->t('and the events day of month.'); ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="width:100%">
|
||||
<tr id="advanced_bymonth" style="display:none;">
|
||||
<th width="75px"></th>
|
||||
<td id="bymonthcheckbox">
|
||||
<select id="bymonth" name="bymonth[]" multiple="multiple" title="<?php echo $l->t("Select months") ?>">
|
||||
<?php
|
||||
if (!isset($_['repeat_bymonth'])) {$_['repeat_bymonth'] = array();}
|
||||
echo html_select_options(array($_['repeat_bymonth_options'][$_['repeat_bymonth']]), $_['repeat_bymonth'], array('combine'=>true));
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="width:100%">
|
||||
<tr id="advanced_byweekno" style="display:none;">
|
||||
<th width="75px"></th>
|
||||
<td id="bymonthcheckbox">
|
||||
<select id="byweekno" name="byweekno[]" multiple="multiple" title="<?php echo $l->t("Select weeks") ?>">
|
||||
<?php
|
||||
if (!isset($_['repeat_byweekno'])) {$_['repeat_byweekno'] = array();}
|
||||
echo html_select_options(array($_['repeat_byweekno_options'][$_['repeat_byweekno']]), $_['repeat_byweekno'], array('combine'=>true));
|
||||
?>
|
||||
</select><?php echo $l->t('and the events week of year.'); ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="width:100%">
|
||||
<tr>
|
||||
<th width="75px"><?php echo $l->t('Interval'); ?>:</th>
|
||||
<td>
|
||||
<?php echo isset($_['repeat_interval']) ? $_['repeat_interval'] : '1'; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th width="75px"><?php echo $l->t('End'); ?>:</th>
|
||||
<td>
|
||||
<select id="end" name="end">
|
||||
<?php
|
||||
if($_['repeat_end'] == '') $_['repeat_end'] = 'never';
|
||||
echo html_select_options(array($_['repeat_end_options'][$_['repeat_end']]), $_['repeat_end']);
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td id="byoccurrences" style="display:none;">
|
||||
<?php echo $_['repeat_count'] . ' ' . $l->t('occurrences'); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td id="bydate" style="display:none;">
|
||||
<?php echo $_['repeat_date']; ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php echo $l->t('Summary'); ?>:<span id="repeatsummary"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tabs-3">//Alarm</div>
|
||||
<div id="tabs-4">//Attendees</div>
|
||||
|
||||
</div>
|
77
apps/calendar/templates/share.dropdown.php
Normal file
77
apps/calendar/templates/share.dropdown.php
Normal file
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
if(array_key_exists('calid', $_)){
|
||||
$id = $_['calid'];
|
||||
$sharedelements = OC_Calendar_Share::allUsersSharedwith($_['calid'], OC_Calendar_Share::CALENDAR);
|
||||
}else{
|
||||
$sharedelements = OC_Calendar_Share::allUsersSharedwith($_['eventid'], OC_Calendar_Share::EVENT);
|
||||
$id = $_['eventid'];
|
||||
}
|
||||
$users = array();$groups = array();$public = array();
|
||||
foreach($sharedelements as $sharedelement){
|
||||
if($sharedelement['sharetype'] == 'user'){
|
||||
$users[] = $sharedelement;
|
||||
}elseif($sharedelement['sharetype'] == 'group'){
|
||||
$groups[] = $sharedelement;
|
||||
}elseif($sharedelement['sharetype'] == 'public'){
|
||||
$public = $sharedelement;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<strong><?php echo $l->t('Users');?>:</strong><br>
|
||||
<select id="share_user" title="<?php echo $l->t('select users');?>" data-placeholder="<?php echo $l->t('select users'); ?>">
|
||||
<option value=""></option>
|
||||
<?php
|
||||
$allocusers = OC_User::getUsers();
|
||||
$allusers = array();
|
||||
foreach($allocusers as $ocuser){
|
||||
$allusers[$ocuser] = $ocuser;
|
||||
}
|
||||
unset($allusers[OC_User::getUser()]);
|
||||
$allusers = array_flip($allusers);
|
||||
echo html_select_options($allusers, array());
|
||||
?>
|
||||
</select><br>
|
||||
<ul id="sharewithuser_list">
|
||||
<?php foreach($users as $user): ?>
|
||||
<li id="sharewithuser_<?php echo $user['share']; ?>"><input type="checkbox" width="12px" <?php echo ($user['permissions']?'checked="checked"':'')?> style="visibility:hidden;" title="<?php echo $l->t('Editable'); ?>"><?php echo $user['share']; ?><img src="<?php echo OC::$WEBROOT; ?>/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li>
|
||||
<script>
|
||||
$('#sharewithuser_<?php echo $user['share']; ?> > img').click(function(){
|
||||
$('#share_user option[value="<?php echo $user['share']; ?>"]').removeAttr('disabled');
|
||||
Calendar.UI.Share.unshare(<?php echo $id; ?>, '<?php echo (array_key_exists('calid', $_)?'calendar':'event');?>', '<?php echo $user['share']; ?>', 'user');
|
||||
$('#sharewithuser_<?php echo $user['share']; ?>').remove();
|
||||
$("#share_user").trigger("liszt:updated");
|
||||
});
|
||||
$('#share_user option[value="<?php echo $user['share']; ?>"]').attr('disabled', 'disabled');
|
||||
</script>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<strong><?php echo $l->t('Groups');?>:</strong><br>
|
||||
<select id="share_group" title="<?php echo $l->t('select groups');?>" data-placeholder="<?php echo $l->t('select groups'); ?>">
|
||||
<option value=""></option>
|
||||
<?php
|
||||
$allocgroups = OC_Group::getGroups();
|
||||
$allgroups = array();
|
||||
foreach($allocgroups as $ocgroup){
|
||||
$allgroups[$ocgroup] = $ocgroup;
|
||||
}
|
||||
echo html_select_options($allgroups, array());
|
||||
?>
|
||||
</select><br>
|
||||
<ul id="sharewithgroup_list">
|
||||
<?php foreach($groups as $group): ?>
|
||||
<li id="sharewithgroup_<?php echo $group['share']; ?>"><input type="checkbox" width="12px" <?php echo ($group['permissions']?'checked="checked"':'')?> style="visibility:hidden;" title="<?php echo $l->t('Editable'); ?>"><?php echo $group['share']; ?><img src="<?php echo OC::$WEBROOT; ?>/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li>
|
||||
<script>
|
||||
$('#sharewithgroup_<?php echo $group['share']; ?> > img').click(function(){
|
||||
$('#share_group option[value="<?php echo $group['share']; ?>"]').removeAttr('disabled');
|
||||
Calendar.UI.Share.unshare(<?php echo $id; ?>, '<?php echo (array_key_exists('calid', $_)?'calendar':'event');?>, '<?php echo $group['share']; ?>', 'group'); ?>
|
||||
$('#sharewithgroup_<?php echo $group['share']; ?>').remove();
|
||||
$("#share_group").trigger("liszt:updated");
|
||||
});
|
||||
$('#share_group option[value="<?php echo $group['share']; ?>"]').attr('disabled', 'disabled');
|
||||
</script>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<div id="public">
|
||||
<input type="checkbox" id="publish" <?php echo ($public['share'])?'checked="checked"':'' ?>><label for="publish"><?php echo $l->t('make public'); ?></label><br>
|
||||
<input type="text" id="public_token" value="<?php echo OC_Helper::linkToAbsolute('apps/calendar', 'share.php?t=' . $public['share'], null, true) ; ?>" onmouseover="$('#public_token').select();" style="<?php echo (!$public['share'])?'display:none':'' ?>">
|
||||
</div>
|
|
@ -33,7 +33,7 @@ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#35537a', end
|
|||
|
||||
/* INPUTS */
|
||||
input[type="text"], input[type="password"] { cursor:text; }
|
||||
input, select, button, .button, #quota, div.jp-progress, .pager li a { font-size:1em; width:10em; margin:.3em; padding:.6em .5em .4em; background:#fff; color:#333; border:1px solid #ddd; -moz-box-shadow:0 1px 1px #fff, 0 2px 0 #bbb inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; outline:none; }
|
||||
input, textarea, select, button, .button, #quota, div.jp-progress, .pager li a { font-size:1em; width:10em; margin:.3em; padding:.6em .5em .4em; background:#fff; color:#333; border:1px solid #ddd; -moz-box-shadow:0 1px 1px #fff, 0 2px 0 #bbb inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; outline:none; }
|
||||
input[type="text"], input[type="password"], input[type="search"] { background:#f8f8f8; color:#555; cursor:text; }
|
||||
input[type="text"], input[type="password"], input[type="search"] { -webkit-appearance:textfield; -moz-appearance:textfield; -webkit-box-sizing:content-box; -moz-box-sizing:content-box; box-sizing:content-box; }
|
||||
input[type="text"]:hover, input[type="text"]:focus, input[type="text"]:active,
|
||||
|
|
Loading…
Reference in a new issue