Enable adding tasks
This commit is contained in:
parent
8911653043
commit
d709791dd4
16 changed files with 1574 additions and 641 deletions
|
@ -44,7 +44,8 @@ class Application extends App {
|
|||
return new PageController(
|
||||
$c->query('AppName'),
|
||||
$c->query('Request'),
|
||||
$c->query('UserId')
|
||||
$c->query('UserId'),
|
||||
$c->query('ServerContainer')->getConfig()
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
@ -30,6 +30,19 @@ use \OCP\AppFramework\Http\TemplateResponse;
|
|||
*/
|
||||
class PageController extends Controller {
|
||||
|
||||
/**
|
||||
* @param string $appName
|
||||
* @param IConfig $config
|
||||
*/
|
||||
public function __construct($appName, IRequest $request,
|
||||
$userId, IConfig $config) {
|
||||
parent::__construct($appName, $request);
|
||||
$this->config = $config;
|
||||
$this->userId = $userId;
|
||||
$this->userSession = $userSession;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
* @NoCSRFRequired
|
||||
|
@ -62,10 +75,10 @@ class PageController extends Controller {
|
|||
$day = new \DateTime('today');
|
||||
$day = $day->format('d');
|
||||
|
||||
// TODO: Make a HTMLTemplateResponse class
|
||||
$appVersion = $this->config->getAppValue($this->appName, 'installed_version');
|
||||
$response = new TemplateResponse('tasks', 'main');
|
||||
$response->setParams(array(
|
||||
'DOM' => $day
|
||||
'appVersion' => $appVersion
|
||||
));
|
||||
|
||||
return $response;
|
||||
|
|
|
@ -39,7 +39,6 @@ angular.module('Tasks').controller('ListController', [
|
|||
this._$scope.calendars = this._$listsmodel.getAll();
|
||||
this._$scope.draggedTasks = [];
|
||||
this._$scope.TasksBusinessLayer = this._$tasksbusinesslayer;
|
||||
this._$scope.status.listNameBackup = '';
|
||||
|
||||
this._$scope["delete"] = function(calendar) {
|
||||
var really;
|
||||
|
|
|
@ -23,29 +23,88 @@
|
|||
var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
||||
|
||||
angular.module('Tasks').controller('TasksController', [
|
||||
'$scope', '$window', '$routeParams', 'TasksModel', 'ListsModel', 'CollectionsModel', 'TasksBusinessLayer', '$location', 'SettingsBusinessLayer', 'SearchBusinessLayer', function($scope, $window, $routeParams, TasksModel, ListsModel, CollectionsModel, TasksBusinessLayer, $location, SettingsBusinessLayer, SearchBusinessLayer) {
|
||||
'$scope', '$window', '$routeParams', 'TasksModel', 'ListsModel', 'CollectionsModel', 'TasksBusinessLayer', '$location', 'SettingsBusinessLayer', 'SearchBusinessLayer', 'VTodo', function($scope, $window, $routeParams, TasksModel, ListsModel, CollectionsModel, TasksBusinessLayer, $location, SettingsBusinessLayer, SearchBusinessLayer, VTodo) {
|
||||
var TasksController;
|
||||
TasksController = (function() {
|
||||
function TasksController(_$scope, _$window, _$routeParams, _$tasksmodel, _$listsmodel, _$collectionsmodel, _tasksbusinesslayer, $location, _settingsbusinesslayer, _searchbusinesslayer) {
|
||||
var _this = this;
|
||||
this._$scope = _$scope;
|
||||
this._$window = _$window;
|
||||
this._$routeParams = _$routeParams;
|
||||
this._$tasksmodel = _$tasksmodel;
|
||||
this._$listsmodel = _$listsmodel;
|
||||
this._$collectionsmodel = _$collectionsmodel;
|
||||
this._tasksbusinesslayer = _tasksbusinesslayer;
|
||||
this.$location = $location;
|
||||
this._settingsbusinesslayer = _settingsbusinesslayer;
|
||||
this._searchbusinesslayer = _searchbusinesslayer;
|
||||
this._$scope.tasks = this._$tasksmodel.getAll();
|
||||
this._$scope.draggedTasks = [];
|
||||
this._$scope.lists = this._$listsmodel.getAll();
|
||||
this._$scope.days = [0, 1, 2, 3, 4, 5, 6];
|
||||
this._$scope.isAddingTask = false;
|
||||
this._$scope.focusInputField = false;
|
||||
this._$scope.TasksModel = this._$tasksmodel;
|
||||
this._$scope.TasksBusinessLayer = this._tasksbusinesslayer;
|
||||
function TasksController(_$scope, _$window, _$routeParams, _$tasksmodel, _$listsmodel, _$collectionsmodel, _tasksbusinesslayer, $location, _settingsbusinesslayer, _searchbusinesslayer, vtodo) {
|
||||
var _this = this;
|
||||
this._$scope = _$scope;
|
||||
this._$window = _$window;
|
||||
this._$routeParams = _$routeParams;
|
||||
this._$tasksmodel = _$tasksmodel;
|
||||
this._$listsmodel = _$listsmodel;
|
||||
this._$collectionsmodel = _$collectionsmodel;
|
||||
this._tasksbusinesslayer = _tasksbusinesslayer;
|
||||
this.$location = $location;
|
||||
this._settingsbusinesslayer = _settingsbusinesslayer;
|
||||
this._searchbusinesslayer = _searchbusinesslayer;
|
||||
this._vtodo = vtodo;
|
||||
this._$scope.tasks = this._$tasksmodel.getAll();
|
||||
this._$scope.draggedTasks = [];
|
||||
this._$scope.lists = this._$listsmodel.getAll();
|
||||
this._$scope.days = [0, 1, 2, 3, 4, 5, 6];
|
||||
this._$scope.isAddingTask = false;
|
||||
this._$scope.focusInputField = false;
|
||||
this._$scope.TasksModel = this._$tasksmodel;
|
||||
this._$scope.TasksBusinessLayer = this._tasksbusinesslayer;
|
||||
|
||||
this._$scope.addTask = function(taskName, related, calendar) {
|
||||
var task;
|
||||
var task, _ref,
|
||||
_this = this;
|
||||
if (related == null) {
|
||||
related = '';
|
||||
}
|
||||
if (calendar == null) {
|
||||
calendar = '';
|
||||
}
|
||||
_$scope.isAddingTask = true;
|
||||
task = {
|
||||
// tmpID: 'newTask' + Date.now(),
|
||||
// id: 'newTask' + Date.now(),
|
||||
calendar: null,
|
||||
related: related,
|
||||
name: taskName,
|
||||
starred: false,
|
||||
priority: '0',
|
||||
due: false,
|
||||
start: false,
|
||||
reminder: null,
|
||||
completed: false,
|
||||
complete: '0',
|
||||
note: false
|
||||
};
|
||||
if (((_ref = _$scope.route.listID) === 'starred' || _ref === 'today' || _ref === 'week' || _ref === 'all' || _ref === 'completed' || _ref === 'current')) {
|
||||
if (related) {
|
||||
task.calendar = calendar;
|
||||
} else {
|
||||
task.calendarid = _$listsmodel.getStandardList();
|
||||
}
|
||||
if (_$scope.route.listID === 'starred') {
|
||||
task.starred = true;
|
||||
}
|
||||
if (_$scope.route.listID === 'today') {
|
||||
task.due = moment().startOf('day').format("YYYYMMDDTHHmmss");
|
||||
}
|
||||
if (_$scope.route.listID === 'current') {
|
||||
task.start = moment().format("YYYYMMDDTHHmmss");
|
||||
}
|
||||
} else {
|
||||
task.calendar = _$listsmodel.getByUri(_$scope.route.calendarID);
|
||||
}
|
||||
console.log(task);
|
||||
task = VTodo.create(task);
|
||||
// console.log(task);
|
||||
_tasksbusinesslayer.add(task).then(function(task) {
|
||||
_$scope.isAddingTask = false;
|
||||
});
|
||||
_$scope.status.focusTaskInput = false;
|
||||
_$scope.status.focusSubtaskInput = false;
|
||||
_$scope.status.addSubtaskTo = '';
|
||||
_$scope.status.taskName = '';
|
||||
return _$scope.status.subtaskName = '';
|
||||
};
|
||||
|
||||
this._$scope.getAddString = function() {
|
||||
var calendar;
|
||||
if (angular.isDefined(calendar = _$listsmodel.getStandardList())) {
|
||||
|
@ -206,61 +265,6 @@
|
|||
filter = _searchbusinesslayer.getFilter();
|
||||
return n('tasks', '%n Completed Task', '%n Completed Tasks', _$listsmodel.getCount(listID, type, filter));
|
||||
};
|
||||
this._$scope.addTask = function(taskName, related, calendarid) {
|
||||
var task, _ref,
|
||||
_this = this;
|
||||
if (related == null) {
|
||||
related = '';
|
||||
}
|
||||
if (calendarid == null) {
|
||||
calendarid = '';
|
||||
}
|
||||
_$scope.isAddingTask = true;
|
||||
task = {
|
||||
tmpID: 'newTask' + Date.now(),
|
||||
id: 'newTask' + Date.now(),
|
||||
calendarid: null,
|
||||
related: related,
|
||||
name: taskName,
|
||||
starred: false,
|
||||
priority: '0',
|
||||
due: false,
|
||||
start: false,
|
||||
reminder: null,
|
||||
completed: false,
|
||||
complete: '0',
|
||||
note: false
|
||||
};
|
||||
if (((_ref = _$scope.route.listID) === 'starred' || _ref === 'today' || _ref === 'week' || _ref === 'all' || _ref === 'completed' || _ref === 'current')) {
|
||||
if (related) {
|
||||
task.calendarid = calendarid;
|
||||
} else {
|
||||
task.calendarid = _$listsmodel.getStandardList();
|
||||
}
|
||||
if (_$scope.route.listID === 'starred') {
|
||||
task.starred = true;
|
||||
}
|
||||
if (_$scope.route.listID === 'today') {
|
||||
task.due = moment().startOf('day').format("YYYYMMDDTHHmmss");
|
||||
}
|
||||
if (_$scope.route.listID === 'current') {
|
||||
task.start = moment().format("YYYYMMDDTHHmmss");
|
||||
}
|
||||
} else {
|
||||
task.calendarid = _$scope.route.listID;
|
||||
}
|
||||
_tasksbusinesslayer.addTask(task, function(data) {
|
||||
_$tasksmodel.add(data);
|
||||
return _$scope.isAddingTask = false;
|
||||
}, function() {
|
||||
return _$scope.isAddingTask = false;
|
||||
});
|
||||
_$scope.status.focusTaskInput = false;
|
||||
_$scope.status.focusSubtaskInput = false;
|
||||
_$scope.status.addSubtaskTo = '';
|
||||
_$scope.status.taskName = '';
|
||||
return _$scope.status.subtaskName = '';
|
||||
};
|
||||
this._$scope.checkTaskInput = function($event) {
|
||||
if ($event.keyCode === 27) {
|
||||
$($event.currentTarget).blur();
|
||||
|
@ -320,7 +324,7 @@
|
|||
return TasksController;
|
||||
|
||||
})();
|
||||
return new TasksController($scope, $window, $routeParams, TasksModel, ListsModel, CollectionsModel, TasksBusinessLayer, $location, SettingsBusinessLayer, SearchBusinessLayer);
|
||||
return new TasksController($scope, $window, $routeParams, TasksModel, ListsModel, CollectionsModel, TasksBusinessLayer, $location, SettingsBusinessLayer, SearchBusinessLayer, VTodo);
|
||||
}
|
||||
]);
|
||||
|
||||
|
|
|
@ -19,60 +19,51 @@
|
|||
*
|
||||
*/
|
||||
|
||||
(function() {
|
||||
angular.module('Tasks').factory('ListsBusinessLayer', [
|
||||
angular.module('Tasks').factory('ListsBusinessLayer', [
|
||||
'ListsModel', 'Persistence', 'TasksBusinessLayer', 'CalendarService', function(ListsModel, Persistence, TasksBusinessLayer, CalendarService) {
|
||||
var ListsBusinessLayer;
|
||||
ListsBusinessLayer = (function() {
|
||||
function ListsBusinessLayer(_$listsmodel, _persistence, _$tasksbusinesslayer, _$calendarservice) {
|
||||
this._$listsmodel = _$listsmodel;
|
||||
this._persistence = _persistence;
|
||||
this._$tasksbusinesslayer = _$tasksbusinesslayer;
|
||||
this._$calendarservice = _$calendarservice;
|
||||
}
|
||||
|
||||
ListsBusinessLayer.prototype.init = function() {
|
||||
return this._$calendarservice.getAll().then(function(calendars) {
|
||||
var calendar, _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = calendars.length; _i < _len; _i++) {
|
||||
calendar = calendars[_i];
|
||||
_results.push(ListsModel.add(calendar));
|
||||
var ListsBusinessLayer;
|
||||
ListsBusinessLayer = (function() {
|
||||
function ListsBusinessLayer(_$listsmodel, _persistence, _$tasksbusinesslayer, _$calendarservice) {
|
||||
this._$listsmodel = _$listsmodel;
|
||||
this._persistence = _persistence;
|
||||
this._$tasksbusinesslayer = _$tasksbusinesslayer;
|
||||
this._$calendarservice = _$calendarservice;
|
||||
}
|
||||
return _results;
|
||||
});
|
||||
};
|
||||
|
||||
ListsBusinessLayer.prototype.add = function(calendar, onSuccess, onFailure) {
|
||||
if (onSuccess == null) {
|
||||
onSuccess = null;
|
||||
}
|
||||
if (onFailure == null) {
|
||||
onFailure = null;
|
||||
}
|
||||
return this._$calendarservice.create(calendar, '#FF7A66', ['vtodo']).then(function(calendar) {
|
||||
ListsModel.add(calendar);
|
||||
return calendar;
|
||||
});
|
||||
};
|
||||
ListsBusinessLayer.prototype.init = function() {
|
||||
return this._$calendarservice.getAll().then(function(calendars) {
|
||||
var calendar, _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = calendars.length; _i < _len; _i++) {
|
||||
calendar = calendars[_i];
|
||||
_results.push(ListsModel.add(calendar));
|
||||
}
|
||||
return _results;
|
||||
});
|
||||
};
|
||||
|
||||
ListsBusinessLayer.prototype["delete"] = function(calendar) {
|
||||
return this._$calendarservice["delete"](calendar).then(function() {
|
||||
return ListsModel["delete"](calendar);
|
||||
});
|
||||
};
|
||||
ListsBusinessLayer.prototype.add = function(calendar) {
|
||||
return this._$calendarservice.create(calendar, '#FF7A66', ['vtodo']).then(function(calendar) {
|
||||
ListsModel.add(calendar);
|
||||
return calendar;
|
||||
});
|
||||
};
|
||||
|
||||
ListsBusinessLayer.prototype.rename = function(calendar) {
|
||||
this._$calendarservice.update(calendar).then(function(calendar) {
|
||||
calendar.dropPreviousState();
|
||||
});
|
||||
};
|
||||
ListsBusinessLayer.prototype["delete"] = function(calendar) {
|
||||
return this._$calendarservice["delete"](calendar).then(function() {
|
||||
return ListsModel["delete"](calendar);
|
||||
});
|
||||
};
|
||||
|
||||
return ListsBusinessLayer;
|
||||
ListsBusinessLayer.prototype.rename = function(calendar) {
|
||||
this._$calendarservice.update(calendar).then(function(calendar) {
|
||||
calendar.dropPreviousState();
|
||||
});
|
||||
};
|
||||
|
||||
})();
|
||||
return new ListsBusinessLayer(ListsModel, Persistence, TasksBusinessLayer, CalendarService);
|
||||
return ListsBusinessLayer;
|
||||
|
||||
})();
|
||||
return new ListsBusinessLayer(ListsModel, Persistence, TasksBusinessLayer, CalendarService);
|
||||
}
|
||||
]);
|
||||
|
||||
}).call(this);
|
||||
]);
|
||||
|
|
|
@ -19,42 +19,22 @@
|
|||
*
|
||||
*/
|
||||
|
||||
(function() {
|
||||
angular.module('Tasks').factory('TasksBusinessLayer', [
|
||||
'TasksModel', 'Persistence', function(TasksModel, Persistence) {
|
||||
var TasksBusinessLayer;
|
||||
TasksBusinessLayer = (function() {
|
||||
function TasksBusinessLayer(_$tasksmodel, _persistence) {
|
||||
this._$tasksmodel = _$tasksmodel;
|
||||
this._persistence = _persistence;
|
||||
}
|
||||
|
||||
TasksBusinessLayer.prototype.addTask = function(task, onSuccess, onFailure) {
|
||||
var parentID, success,
|
||||
_this = this;
|
||||
if (onSuccess == null) {
|
||||
onSuccess = null;
|
||||
}
|
||||
if (onFailure == null) {
|
||||
onFailure = null;
|
||||
}
|
||||
onSuccess || (onSuccess = function() {});
|
||||
onFailure || (onFailure = function() {});
|
||||
this._$tasksmodel.add(task);
|
||||
this.uncompleteParents(task.related);
|
||||
parentID = this._$tasksmodel.getIdByUid(task.related);
|
||||
if (parentID) {
|
||||
this.unhideSubtasks(parentID);
|
||||
}
|
||||
success = function(response) {
|
||||
if (response.status === 'error') {
|
||||
return onFailure();
|
||||
} else {
|
||||
return onSuccess(response.data);
|
||||
angular.module('Tasks').factory('TasksBusinessLayer', [
|
||||
'TasksModel', 'Persistence', 'VTodoService', function(TasksModel, Persistence, VTodoService) {
|
||||
var TasksBusinessLayer;
|
||||
TasksBusinessLayer = (function() {
|
||||
function TasksBusinessLayer(_$tasksmodel, _persistence, _$vtodoservice) {
|
||||
this._$tasksmodel = _$tasksmodel;
|
||||
this._persistence = _persistence;
|
||||
this._$vtodoservice = _$vtodoservice;
|
||||
}
|
||||
};
|
||||
return this._persistence.addTask(task, success);
|
||||
};
|
||||
|
||||
TasksBusinessLayer.prototype.add = function(task) {
|
||||
return this._$vtodoservice.create(task.calendar, task.data).then(function(task) {
|
||||
// TasksModel.add(task);
|
||||
return task;
|
||||
});
|
||||
};
|
||||
|
||||
TasksBusinessLayer.prototype.getAll = function(calendar) {};
|
||||
|
||||
|
@ -568,8 +548,6 @@
|
|||
return TasksBusinessLayer;
|
||||
|
||||
})();
|
||||
return new TasksBusinessLayer(TasksModel, Persistence);
|
||||
return new TasksBusinessLayer(TasksModel, Persistence, VTodoService);
|
||||
}
|
||||
]);
|
||||
|
||||
}).call(this);
|
||||
]);
|
||||
|
|
42
js/app/services/icalfactory.js
Normal file
42
js/app/services/icalfactory.js
Normal file
|
@ -0,0 +1,42 @@
|
|||
/**
|
||||
* ownCloud - Tasks
|
||||
*
|
||||
* @author Raghu Nayyar
|
||||
* @author Georg Ehrke
|
||||
* @author Raimund Schlüßler
|
||||
* @copyright 2016 Raghu Nayyar <beingminimal@gmail.com>
|
||||
* @copyright 2016 Georg Ehrke <oc.list@georgehrke.com>
|
||||
* @copyright 2016 Raimund Schlüßler <raimund.schluessler@googlemail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
angular.module('Tasks').service('ICalFactory', [
|
||||
function() {
|
||||
'use strict';
|
||||
|
||||
// creates a new ICAL root element with a product id property
|
||||
return {
|
||||
new: function() {
|
||||
var root = new ICAL.Component(['vcalendar', [], []]);
|
||||
|
||||
var version = angular.element('#app').attr('data-appVersion');
|
||||
root.updatePropertyWithValue('prodid', '-//ownCloud tasks v' + version);
|
||||
|
||||
return root;
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
|
@ -54,38 +54,38 @@ angular.module('Tasks').factory('Calendar', ['$rootScope', '$filter', function($
|
|||
_updatedProperties: []
|
||||
});
|
||||
|
||||
angular.extend(this, {
|
||||
tmpId: null,
|
||||
fcEventSource: {
|
||||
events: function (start, end, timezone, callback) {
|
||||
// console.log('querying events ...');
|
||||
// TimezoneService.get(timezone).then(function(tz) {
|
||||
// _this.list.loading = true;
|
||||
// $rootScope.$broadcast('reloadCalendarList');
|
||||
// angular.extend(this, {
|
||||
// tmpId: null,
|
||||
// fcEventSource: {
|
||||
// events: function (start, end, timezone, callback) {
|
||||
// // console.log('querying events ...');
|
||||
// // TimezoneService.get(timezone).then(function(tz) {
|
||||
// // _this.list.loading = true;
|
||||
// // $rootScope.$broadcast('reloadCalendarList');
|
||||
|
||||
// VEventService.getAll(_this, start, end).then(function(events) {
|
||||
// var vevents = [];
|
||||
// for (var i = 0; i < events.length; i++) {
|
||||
// vevents = vevents.concat(events[i].getFcEvent(start, end, tz));
|
||||
// }
|
||||
// // VEventService.getAll(_this, start, end).then(function(events) {
|
||||
// // var vevents = [];
|
||||
// // for (var i = 0; i < events.length; i++) {
|
||||
// // vevents = vevents.concat(events[i].getFcEvent(start, end, tz));
|
||||
// // }
|
||||
|
||||
// callback(vevents);
|
||||
// // callback(vevents);
|
||||
|
||||
// _this.list.loading = false;
|
||||
// $rootScope.$broadcast('reloadCalendarList');
|
||||
// });
|
||||
// });
|
||||
},
|
||||
editable: this._properties.writable,
|
||||
calendar: this
|
||||
},
|
||||
list: {
|
||||
edit: false,
|
||||
loading: this.enabled,
|
||||
locked: false,
|
||||
editingShares: false
|
||||
}
|
||||
});
|
||||
// // _this.list.loading = false;
|
||||
// // $rootScope.$broadcast('reloadCalendarList');
|
||||
// // });
|
||||
// // });
|
||||
// },
|
||||
// editable: this._properties.writable,
|
||||
// calendar: this
|
||||
// },
|
||||
// list: {
|
||||
// edit: false,
|
||||
// loading: this.enabled,
|
||||
// locked: false,
|
||||
// editingShares: false
|
||||
// }
|
||||
// });
|
||||
|
||||
var components = props['{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set'];
|
||||
for (var i=0; i < components.length; i++) {
|
||||
|
|
|
@ -98,35 +98,6 @@
|
|||
}
|
||||
};
|
||||
|
||||
ListsModel.prototype.voidAll = function() {
|
||||
var list, lists, _i, _len, _results;
|
||||
lists = this.getAll();
|
||||
_results = [];
|
||||
for (_i = 0, _len = lists.length; _i < _len; _i++) {
|
||||
list = lists[_i];
|
||||
_results.push(list["void"] = true);
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
ListsModel.prototype.removeVoid = function() {
|
||||
var id, list, listIDs, lists, _i, _j, _len, _len1, _results;
|
||||
lists = this.getAll();
|
||||
listIDs = [];
|
||||
for (_i = 0, _len = lists.length; _i < _len; _i++) {
|
||||
list = lists[_i];
|
||||
if (list["void"]) {
|
||||
listIDs.push(list.id);
|
||||
}
|
||||
}
|
||||
_results = [];
|
||||
for (_j = 0, _len1 = listIDs.length; _j < _len1; _j++) {
|
||||
id = listIDs[_j];
|
||||
_results.push(this.removeById(id));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
ListsModel.prototype.getStandardList = function() {
|
||||
var calendars;
|
||||
if (this.size()) {
|
||||
|
|
402
js/app/services/models/vtodo.js
Normal file
402
js/app/services/models/vtodo.js
Normal file
|
@ -0,0 +1,402 @@
|
|||
/**
|
||||
* ownCloud - Calendar App
|
||||
*
|
||||
* @author Raghu Nayyar
|
||||
* @author Georg Ehrke
|
||||
* @copyright 2016 Raghu Nayyar <beingminimal@gmail.com>
|
||||
* @copyright 2016 Georg Ehrke <oc.list@georgehrke.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
angular.module('Tasks').factory('VTodo', ['$filter', 'ICalFactory', 'RandomStringService', function($filter, icalfactory, RandomStringService) {
|
||||
'use strict';
|
||||
|
||||
// /**
|
||||
// * check if vevent is the one described in event
|
||||
// * @param {String} recurrenceId
|
||||
// * @param {Object} vevent
|
||||
// * @returns {boolean}
|
||||
// */
|
||||
// function isCorrectEvent(recurrenceId, vevent) {
|
||||
// if (recurrenceId === null) {
|
||||
// if (!vevent.hasProperty('recurrence-id')) {
|
||||
// return true;
|
||||
// }
|
||||
// } else {
|
||||
// if (recurrenceId === vevent.getFirstPropertyValue('recurrence-id').toICALString()) {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * get DTEND from vevent
|
||||
// * @param {object} vevent
|
||||
// * @returns {ICAL.Time}
|
||||
// */
|
||||
// function calculateDTEnd(vevent) {
|
||||
// if (vevent.hasProperty('dtend')) {
|
||||
// return vevent.getFirstPropertyValue('dtend');
|
||||
// } else if (vevent.hasProperty('duration')) {
|
||||
// var dtstart = vevent.getFirstPropertyValue('dtstart').clone();
|
||||
// dtstart.addDuration(vevent.getFirstPropertyValue('duration'));
|
||||
// return dtstart;
|
||||
// } else {
|
||||
// return vevent.getFirstPropertyValue('dtstart').clone();
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// /**
|
||||
// * register timezones from ical response
|
||||
// * @param components
|
||||
// */
|
||||
// function registerTimezones(components) {
|
||||
// var vtimezones = components.getAllSubcomponents('vtimezone');
|
||||
// angular.forEach(vtimezones, function (vtimezone) {
|
||||
// var timezone = new ICAL.Timezone(vtimezone);
|
||||
// ICAL.TimezoneService.register(timezone.tzid, timezone);
|
||||
// });
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * check if we need to convert the timezone of either dtstart or dtend
|
||||
// * @param dt
|
||||
// * @returns {boolean}
|
||||
// */
|
||||
// function isTimezoneConversionNecessary(dt) {
|
||||
// return (dt.icaltype !== 'date' &&
|
||||
// dt.zone !== ICAL.Timezone.utcTimezone &&
|
||||
// dt.zone !== ICAL.Timezone.localTimezone);
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * check if dtstart and dtend are both of type date
|
||||
// * @param dtstart
|
||||
// * @param dtend
|
||||
// * @returns {boolean}
|
||||
// */
|
||||
// function isEventAllDay(dtstart, dtend) {
|
||||
// return (dtstart.icaltype === 'date' && dtend.icaltype === 'date');
|
||||
// }
|
||||
|
||||
// *
|
||||
// * parse an recurring event
|
||||
// * @param vevent
|
||||
// * @param start
|
||||
// * @param end
|
||||
// * @param timezone
|
||||
// * @return []
|
||||
|
||||
// function parseTimeForRecurringEvent(vevent, start, end, timezone) {
|
||||
// var dtstart = vevent.getFirstPropertyValue('dtstart');
|
||||
// var dtend = calculateDTEnd(vevent);
|
||||
// var duration = dtend.subtractDate(dtstart);
|
||||
// var fcDataContainer = [];
|
||||
|
||||
// var iterator = new ICAL.RecurExpansion({
|
||||
// component: vevent,
|
||||
// dtstart: dtstart
|
||||
// });
|
||||
|
||||
// var next;
|
||||
// while ((next = iterator.next())) {
|
||||
// if (next.compare(start) < 0) {
|
||||
// continue;
|
||||
// }
|
||||
// if (next.compare(end) > 0) {
|
||||
// break;
|
||||
// }
|
||||
|
||||
// var dtstartOfRecurrence = next.clone();
|
||||
// var dtendOfRecurrence = next.clone();
|
||||
// dtendOfRecurrence.addDuration(duration);
|
||||
|
||||
// if (isTimezoneConversionNecessary(dtstartOfRecurrence) && timezone) {
|
||||
// dtstartOfRecurrence = dtstartOfRecurrence.convertToZone(timezone);
|
||||
// }
|
||||
// if (isTimezoneConversionNecessary(dtendOfRecurrence) && timezone) {
|
||||
// dtendOfRecurrence = dtendOfRecurrence.convertToZone(timezone);
|
||||
// }
|
||||
|
||||
// fcDataContainer.push({
|
||||
// allDay: isEventAllDay(dtstartOfRecurrence, dtendOfRecurrence),
|
||||
// start: dtstartOfRecurrence.toJSDate(),
|
||||
// end: dtendOfRecurrence.toJSDate(),
|
||||
// repeating: true
|
||||
// });
|
||||
// }
|
||||
|
||||
// return fcDataContainer;
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * parse a single event
|
||||
// * @param vevent
|
||||
// * @param timezone
|
||||
// * @returns {object}
|
||||
// */
|
||||
// function parseTimeForSingleEvent(vevent, timezone) {
|
||||
// var dtstart = vevent.getFirstPropertyValue('dtstart');
|
||||
// var dtend = calculateDTEnd(vevent);
|
||||
|
||||
// if (isTimezoneConversionNecessary(dtstart) && timezone) {
|
||||
// dtstart = dtstart.convertToZone(timezone);
|
||||
// }
|
||||
// if (isTimezoneConversionNecessary(dtend) && timezone) {
|
||||
// dtend = dtend.convertToZone(timezone);
|
||||
// }
|
||||
|
||||
// return {
|
||||
// allDay: isEventAllDay(dtstart, dtend),
|
||||
// start: dtstart.toJSDate(),
|
||||
// end: dtend.toJSDate(),
|
||||
// repeating: false
|
||||
// };
|
||||
// }
|
||||
|
||||
function VTodo(calendar, props, uri) {
|
||||
var _this = this;
|
||||
|
||||
angular.extend(this, {
|
||||
calendar: calendar,
|
||||
data: props['{urn:ietf:params:xml:ns:caldav}calendar-data'],
|
||||
uri: uri,
|
||||
etag: props['{DAV:}getetag'] || null
|
||||
});
|
||||
|
||||
this.jCal = ICAL.parse(this.data);
|
||||
this.components = new ICAL.Component(this.jCal);
|
||||
|
||||
if (this.components.jCal.length === 0) {
|
||||
throw "invalid calendar";
|
||||
}
|
||||
|
||||
// angular.extend(this, {
|
||||
// getFcEvent: function(start, end, timezone) {
|
||||
// var iCalStart = new ICAL.Time();
|
||||
// iCalStart.fromUnixTime(start.format('X'));
|
||||
// var iCalEnd = new ICAL.Time();
|
||||
// iCalEnd.fromUnixTime(end.format('X'));
|
||||
|
||||
// if (_this.components.jCal.length === 0) {
|
||||
// return [];
|
||||
// }
|
||||
|
||||
// registerTimezones(_this.components);
|
||||
|
||||
// var vevents = _this.components.getAllSubcomponents('vevent');
|
||||
// var renderedEvents = [];
|
||||
|
||||
// angular.forEach(vevents, function (vevent) {
|
||||
// var event = new ICAL.Event(vevent);
|
||||
// var fcData;
|
||||
|
||||
// try {
|
||||
// if (!vevent.hasProperty('dtstart')) {
|
||||
// return;
|
||||
// }
|
||||
// if (event.isRecurring()) {
|
||||
// fcData = parseTimeForRecurringEvent(vevent, iCalStart, iCalEnd, timezone.jCal);
|
||||
// } else {
|
||||
// fcData = [];
|
||||
// fcData.push(parseTimeForSingleEvent(vevent, timezone.jCal));
|
||||
// }
|
||||
// } catch(e) {
|
||||
// console.log(e);
|
||||
// }
|
||||
|
||||
// if (typeof fcData === 'undefined') {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// for (var i = 0, length = fcData.length; i < length; i++) {
|
||||
// // add information about calendar
|
||||
// fcData[i].calendar = _this.calendar;
|
||||
// fcData[i].editable = calendar.writable;
|
||||
// fcData[i].backgroundColor = calendar.color;
|
||||
// fcData[i].borderColor = calendar.color;
|
||||
// fcData[i].textColor = calendar.textColor;
|
||||
// fcData[i].className = 'fcCalendar-id-' + calendar.tmpId;
|
||||
|
||||
// // add information about actual event
|
||||
// fcData[i].uri = _this.uri;
|
||||
// fcData[i].etag = _this.etag;
|
||||
// fcData[i].title = vevent.getFirstPropertyValue('summary');
|
||||
|
||||
// if (event.isRecurrenceException()) {
|
||||
// fcData[i].recurrenceId = vevent
|
||||
// .getFirstPropertyValue('recurrence-id')
|
||||
// .toICALString();
|
||||
// fcData[i].id = _this.uri + event.recurrenceId;
|
||||
// } else {
|
||||
// fcData[i].recurrenceId = null;
|
||||
// fcData[i].id = _this.uri;
|
||||
// }
|
||||
|
||||
// fcData[i].event = _this;
|
||||
|
||||
// renderedEvents.push(fcData[i]);
|
||||
// }
|
||||
// });
|
||||
|
||||
// return renderedEvents;
|
||||
// },
|
||||
// getSimpleData: function(recurrenceId) {
|
||||
// var vevents = _this.components.getAllSubcomponents('vevent');
|
||||
|
||||
// for (var i = 0; i < vevents.length; i++) {
|
||||
// if (!isCorrectEvent(recurrenceId, vevents[i])) {
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// return objectConverter.parse(vevents[i]);
|
||||
// }
|
||||
// },
|
||||
// drop: function(recurrenceId, delta) {
|
||||
// var vevents = _this.components.getAllSubcomponents('vevent');
|
||||
// var foundEvent = false;
|
||||
// var deltaAsSeconds = delta.asSeconds();
|
||||
// var duration = new ICAL.Duration().fromSeconds(deltaAsSeconds);
|
||||
// var propertyToUpdate = null;
|
||||
|
||||
// for (var i = 0; i < vevents.length; i++) {
|
||||
// if (!isCorrectEvent(recurrenceId, vevents[i])) {
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// if (vevents[i].hasProperty('dtstart')) {
|
||||
// propertyToUpdate = vevents[i].getFirstPropertyValue('dtstart');
|
||||
// propertyToUpdate.addDuration(duration);
|
||||
// vevents[i].updatePropertyWithValue('dtstart', propertyToUpdate);
|
||||
// }
|
||||
|
||||
// if (vevents[i].hasProperty('dtend')) {
|
||||
// propertyToUpdate = vevents[i].getFirstPropertyValue('dtend');
|
||||
// propertyToUpdate.addDuration(duration);
|
||||
// vevents[i].updatePropertyWithValue('dtend', propertyToUpdate);
|
||||
// }
|
||||
|
||||
// foundEvent = true;
|
||||
// }
|
||||
|
||||
// if (!foundEvent) {
|
||||
// return false;
|
||||
// }
|
||||
// _this.data = _this.components.toString();
|
||||
// return true;
|
||||
// },
|
||||
// resize: function(recurrenceId, delta) {
|
||||
// var vevents = _this.components.getAllSubcomponents('vevent');
|
||||
// var foundEvent = false;
|
||||
// var deltaAsSeconds = delta.asSeconds();
|
||||
// var duration = new ICAL.Duration().fromSeconds(deltaAsSeconds);
|
||||
// var propertyToUpdate = null;
|
||||
|
||||
// for (var i = 0; i < vevents.length; i++) {
|
||||
// if (!isCorrectEvent(recurrenceId, vevents[i])) {
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// if (vevents[i].hasProperty('duration')) {
|
||||
// propertyToUpdate = vevents[i].getFirstPropertyValue('duration');
|
||||
// duration.fromSeconds((duration.toSeconds() + propertyToUpdate.toSeconds()));
|
||||
// vevents[i].updatePropertyWithValue('duration', duration);
|
||||
// } else if (vevents[i].hasProperty('dtend')) {
|
||||
// propertyToUpdate = vevents[i].getFirstPropertyValue('dtend');
|
||||
// propertyToUpdate.addDuration(duration);
|
||||
// vevents[i].updatePropertyWithValue('dtend', propertyToUpdate);
|
||||
// } else if (vevents[i].hasProperty('dtstart')) {
|
||||
// propertyToUpdate = vevents[i].getFirstPropertyValue('dtstart').clone();
|
||||
// propertyToUpdate.addDuration(duration);
|
||||
// vevents[i].addPropertyWithValue('dtend', propertyToUpdate);
|
||||
// } else {
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// foundEvent = true;
|
||||
// }
|
||||
|
||||
// if (!foundEvent) {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// _this.data = _this.components.toString();
|
||||
// return true;
|
||||
// },
|
||||
// patch: function(recurrenceId, newSimpleData) {
|
||||
// var vevents = _this.components.getAllSubcomponents('vevent');
|
||||
// var vevent = null;
|
||||
|
||||
// for (var i = 0; i < vevents.length; i++) {
|
||||
// if (!isCorrectEvent(recurrenceId, vevents[i])) {
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// vevent = vevents[i];
|
||||
// }
|
||||
|
||||
// if (!vevent) {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// objectConverter.patch(vevent, this.getSimpleData(recurrenceId), newSimpleData);
|
||||
// vevent.updatePropertyWithValue('last-modified', ICAL.Time.now());
|
||||
// _this.data = _this.components.toString();
|
||||
// }
|
||||
// });
|
||||
}
|
||||
|
||||
VTodo.create = function(task) {
|
||||
// console.log(start, end, timezone);
|
||||
var comp = icalfactory.new();
|
||||
|
||||
var vtodo = new ICAL.Component('vtodo');
|
||||
comp.addSubcomponent(vtodo);
|
||||
vtodo.updatePropertyWithValue('created', ICAL.Time.now());
|
||||
vtodo.updatePropertyWithValue('dtstamp', ICAL.Time.now());
|
||||
vtodo.updatePropertyWithValue('last-modified', ICAL.Time.now());
|
||||
vtodo.updatePropertyWithValue('uid', RandomStringService.generate());
|
||||
vtodo.updatePropertyWithValue('summary', task.name);
|
||||
|
||||
// objectConverter.patch(vevent, {}, {
|
||||
// allDay: !start.hasTime() && !end.hasTime(),
|
||||
// dtstart: {
|
||||
// type: start.hasTime() ? 'datetime' : 'date',
|
||||
// value: start,
|
||||
// parameters: {
|
||||
// zone: timezone
|
||||
// }
|
||||
// },
|
||||
// dtend: {
|
||||
// type: end.hasTime() ? 'datetime' : 'date',
|
||||
// value: end,
|
||||
// parameters: {
|
||||
// zone: timezone
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
|
||||
return new VTodo(task.calendar, {
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-data': comp.toString(),
|
||||
'{DAV:}getetag': null
|
||||
}, null);
|
||||
};
|
||||
|
||||
return VTodo;
|
||||
}]);
|
|
@ -126,85 +126,6 @@
|
|||
{type}/{setting}/{value}', params);
|
||||
};
|
||||
|
||||
Persistence.prototype.getLists = function(onSuccess, showLoading, which) {
|
||||
var failureCallbackWrapper, params, successCallbackWrapper,
|
||||
_this = this;
|
||||
if (showLoading == null) {
|
||||
showLoading = true;
|
||||
}
|
||||
if (which == null) {
|
||||
which = 'all';
|
||||
}
|
||||
onSuccess || (onSuccess = function() {});
|
||||
if (showLoading) {
|
||||
this._Loading.increase();
|
||||
successCallbackWrapper = function(data) {
|
||||
onSuccess();
|
||||
return _this._Loading.decrease();
|
||||
};
|
||||
failureCallbackWrapper = function(data) {
|
||||
return _this._Loading.decrease();
|
||||
};
|
||||
} else {
|
||||
successCallbackWrapper = function(data) {
|
||||
return onSuccess();
|
||||
};
|
||||
failureCallbackWrapper = function(data) {};
|
||||
}
|
||||
params = {
|
||||
onSuccess: successCallbackWrapper,
|
||||
onFailure: failureCallbackWrapper,
|
||||
routeParams: {
|
||||
request: which
|
||||
}
|
||||
};
|
||||
return this._request.get('/apps/tasks/lists', params);
|
||||
};
|
||||
|
||||
Persistence.prototype.addList = function(list, onSuccess, onFailure) {
|
||||
var params;
|
||||
if (onSuccess == null) {
|
||||
onSuccess = null;
|
||||
}
|
||||
if (onFailure == null) {
|
||||
onFailure = null;
|
||||
}
|
||||
onSuccess || (onSuccess = function() {});
|
||||
onFailure || (onFailure = function() {});
|
||||
params = {
|
||||
data: {
|
||||
name: list.displayname,
|
||||
tmpID: list.tmpID
|
||||
},
|
||||
onSuccess: onSuccess,
|
||||
onFailure: onFailure
|
||||
};
|
||||
return this._request.post('/apps/tasks/lists/add', params);
|
||||
};
|
||||
|
||||
Persistence.prototype.setListName = function(list) {
|
||||
var params;
|
||||
params = {
|
||||
routeParams: {
|
||||
listID: list.id
|
||||
},
|
||||
data: {
|
||||
name: list.displayname
|
||||
}
|
||||
};
|
||||
return this._request.post('/apps/tasks/lists/{listID}/name', params);
|
||||
};
|
||||
|
||||
Persistence.prototype.deleteList = function(listID) {
|
||||
var params;
|
||||
params = {
|
||||
routeParams: {
|
||||
listID: listID
|
||||
}
|
||||
};
|
||||
return this._request.post('/apps/tasks/lists/{listID}/delete', params);
|
||||
};
|
||||
|
||||
Persistence.prototype.getTasks = function(type, listID, onSuccess, showLoading) {
|
||||
var failureCallbackWrapper, params, successCallbackWrapper,
|
||||
_this = this;
|
||||
|
|
31
js/app/services/randomstringservice.js
Normal file
31
js/app/services/randomstringservice.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
/**
|
||||
* ownCloud - Calendar App
|
||||
*
|
||||
* @author Raghu Nayyar
|
||||
* @author Georg Ehrke
|
||||
* @copyright 2016 Raghu Nayyar <beingminimal@gmail.com>
|
||||
* @copyright 2016 Georg Ehrke <oc.list@georgehrke.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
angular.module('Tasks').factory('RandomStringService', function () {
|
||||
'use strict';
|
||||
|
||||
return {
|
||||
generate: function() {
|
||||
return Math.random().toString(36).substr(2);
|
||||
}
|
||||
};
|
||||
});
|
|
@ -19,27 +19,24 @@
|
|||
*
|
||||
*/
|
||||
|
||||
(function() {
|
||||
angular.module('Tasks').factory('Status', [
|
||||
angular.module('Tasks').factory('Status', [
|
||||
function() {
|
||||
var Status;
|
||||
Status = (function() {
|
||||
function Status() {
|
||||
this._$status = {
|
||||
addingList: false,
|
||||
focusTaskInput: false
|
||||
};
|
||||
}
|
||||
var Status;
|
||||
Status = (function() {
|
||||
function Status() {
|
||||
this._$status = {
|
||||
addingList: false,
|
||||
focusTaskInput: false
|
||||
};
|
||||
}
|
||||
|
||||
Status.prototype.getStatus = function() {
|
||||
return this._$status;
|
||||
return this._$status;
|
||||
};
|
||||
|
||||
return Status;
|
||||
|
||||
})();
|
||||
return new Status();
|
||||
})();
|
||||
return new Status();
|
||||
}
|
||||
]);
|
||||
|
||||
}).call(this);
|
||||
]);
|
||||
|
|
169
js/app/services/vtodoservice.js
Normal file
169
js/app/services/vtodoservice.js
Normal file
|
@ -0,0 +1,169 @@
|
|||
/**
|
||||
* ownCloud - Tasks
|
||||
*
|
||||
* @author Raghu Nayyar
|
||||
* @author Georg Ehrke
|
||||
* @author Raimund Schlüßler
|
||||
* @copyright 2016 Raghu Nayyar <beingminimal@gmail.com>
|
||||
* @copyright 2016 Georg Ehrke <oc.list@georgehrke.com>
|
||||
* @copyright 2016 Raimund Schlüßler <raimund.schluessler@googlemail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
angular.module('Tasks').service('VTodoService', ['DavClient', 'VTodo', 'RandomStringService', function(DavClient, VTodo, RandomStringService) {
|
||||
'use strict';
|
||||
|
||||
var _this = this;
|
||||
|
||||
this.getAll = function(calendar, start, end) {
|
||||
var xmlDoc = document.implementation.createDocument('', '', null);
|
||||
var cCalQuery = xmlDoc.createElement('c:calendar-query');
|
||||
cCalQuery.setAttribute('xmlns:c', 'urn:ietf:params:xml:ns:caldav');
|
||||
cCalQuery.setAttribute('xmlns:d', 'DAV:');
|
||||
cCalQuery.setAttribute('xmlns:a', 'http://apple.com/ns/ical/');
|
||||
cCalQuery.setAttribute('xmlns:o', 'http://owncloud.org/ns');
|
||||
xmlDoc.appendChild(cCalQuery);
|
||||
|
||||
var dProp = xmlDoc.createElement('d:prop');
|
||||
cCalQuery.appendChild(dProp);
|
||||
|
||||
var dGetEtag = xmlDoc.createElement('d:getetag');
|
||||
dProp.appendChild(dGetEtag);
|
||||
|
||||
var cCalendarData = xmlDoc.createElement('c:calendar-data');
|
||||
dProp.appendChild(cCalendarData);
|
||||
|
||||
var cFilter = xmlDoc.createElement('c:filter');
|
||||
cCalQuery.appendChild(cFilter);
|
||||
|
||||
var cCompFilterVCal = xmlDoc.createElement('c:comp-filter');
|
||||
cCompFilterVCal.setAttribute('name', 'VCALENDAR');
|
||||
cFilter.appendChild(cCompFilterVCal);
|
||||
|
||||
var cCompFilterVTodo = xmlDoc.createElement('c:comp-filter');
|
||||
cCompFilterVTodo.setAttribute('name', 'VTODO');
|
||||
cCompFilterVCal.appendChild(cCompFilterVTodo);
|
||||
|
||||
// var cTimeRange = xmlDoc.createElement('c:time-range');
|
||||
// cTimeRange.setAttribute('start', this._getTimeRangeStamp(start));
|
||||
// cTimeRange.setAttribute('end', this._getTimeRangeStamp(end));
|
||||
// cCompFilterVTodo.appendChild(cTimeRange);
|
||||
|
||||
var url = calendar.url;
|
||||
var headers = {
|
||||
'Content-Type': 'application/xml; charset=utf-8',
|
||||
'Depth': 1,
|
||||
'requesttoken': OC.requestToken
|
||||
};
|
||||
var body = cCalQuery.outerHTML;
|
||||
|
||||
return DavClient.request('REPORT', url, headers, body).then(function(response) {
|
||||
if (!DavClient.wasRequestSuccessful(response.status)) {
|
||||
//TODO - something went wrong
|
||||
return;
|
||||
}
|
||||
|
||||
var vTodos = [];
|
||||
|
||||
for (var i in response.body) {
|
||||
var object = response.body[i];
|
||||
var properties = object.propStat[0].properties;
|
||||
|
||||
var uri = object.href.substr(object.href.lastIndexOf('/') + 1);
|
||||
|
||||
var vTodo = new VTodo(calendar, properties, uri);
|
||||
vTodos.push(vTodo);
|
||||
}
|
||||
|
||||
return vTodos;
|
||||
});
|
||||
};
|
||||
|
||||
this.get = function(calendar, uri) {
|
||||
var url = calendar.url + uri;
|
||||
return DavClient.request('GET', url, {'requesttoken' : OC.requestToken}, '').then(function(response) {
|
||||
return new VTodo(calendar, {
|
||||
'{urn:ietf:params:xml:ns:caldav}calendar-data': response.body,
|
||||
'{DAV:}getetag': response.xhr.getResponseHeader('ETag')
|
||||
}, uri);
|
||||
});
|
||||
};
|
||||
|
||||
this.create = function(calendar, data, returnTodo) {
|
||||
if (typeof returnTodo === 'undefined') {
|
||||
returnTodo = true;
|
||||
}
|
||||
|
||||
var headers = {
|
||||
'Content-Type': 'text/calendar; charset=utf-8',
|
||||
'requesttoken': OC.requestToken
|
||||
};
|
||||
var uri = this._generateRandomUri();
|
||||
var url = calendar.url + uri;
|
||||
|
||||
return DavClient.request('PUT', url, headers, data).then(function(response) {
|
||||
if (!DavClient.wasRequestSuccessful(response.status)) {
|
||||
console.log(response);
|
||||
return false;
|
||||
// TODO - something went wrong, do smth about it
|
||||
}
|
||||
|
||||
return returnTodo ?
|
||||
_this.get(calendar, uri) :
|
||||
true;
|
||||
});
|
||||
};
|
||||
|
||||
this.update = function(task) {
|
||||
var url = task.calendar.url + task.uri;
|
||||
var headers = {
|
||||
'Content-Type': 'text/calendar; charset=utf-8',
|
||||
'If-Match': task.etag,
|
||||
'requesttoken': OC.requestToken
|
||||
};
|
||||
|
||||
return DavClient.request('PUT', url, headers, task.data).then(function(response) {
|
||||
task.etag = response.xhr.getResponseHeader('ETag');
|
||||
return DavClient.wasRequestSuccessful(response.status);
|
||||
});
|
||||
};
|
||||
|
||||
this.delete = function(task) {
|
||||
var url = task.calendar.url + task.uri;
|
||||
var headers = {
|
||||
'If-Match': task.etag,
|
||||
'requesttoken': OC.requestToken
|
||||
};
|
||||
|
||||
return DavClient.request('DELETE', url, headers, '').then(function(response) {
|
||||
return DavClient.wasRequestSuccessful(response.status);
|
||||
});
|
||||
};
|
||||
|
||||
this._generateRandomUri = function() {
|
||||
var uri = 'ownCloud-';
|
||||
uri += RandomStringService.generate();
|
||||
uri += RandomStringService.generate();
|
||||
uri += '.ics';
|
||||
|
||||
return uri;
|
||||
};
|
||||
|
||||
// this._getTimeRangeStamp = function(momentObject) {
|
||||
// return momentObject.format('YYYYMMDD') + 'T' + momentObject.format('HHmmss') + 'Z';
|
||||
// };
|
||||
|
||||
}]);
|
1050
js/public/app.js
1050
js/public/app.js
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,4 @@
|
|||
<div ng-app="Tasks" ng-cloak ng-controller="AppController" ng-click="closeAll($event)" id="app" class="handler">
|
||||
<div ng-app="Tasks" ng-cloak ng-controller="AppController" ng-click="closeAll($event)" id="app" class="handler" data-appVersion="<?php p($_['appVersion']); ?>">
|
||||
<div id="app-navigation" ng-controller="ListController">
|
||||
<ul id="collections">
|
||||
<li id="collection_{{ collection.id }}"
|
||||
|
|
Loading…
Reference in a new issue