yavsc/web/ApiControllers/CalendarController.cs

205 lines
5.6 KiB
C#

//
// CalendarController.cs
//
// Author:
// Paul Schneider <paulschneider@free.fr>
//
// Copyright (c) 2015 Paul Schneider
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program 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 Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Web.Http;
9 years ago
using Yavsc.Model.RolesAndMembers;
using System.Web.Security;
* MarkdownHelper.cs: implements MarkdownDeep helper from NuGet * uninstdbws.sql: * jquery-2.1.3.js: * jquery-2.1.4.js: * date.js: * mdd_help.htm: * scorediv-latest.js: * jquery-2.1.4.min.js: * jquery-2.1.3.min.js: * plural.js: * number.js: * jquery-2.1.4.min.map: * message.js: * jquery-2.1.3.min.map: * jquery-2.1.3-vsdoc.js: * currency.js: * jquery-2.1.4-vsdoc.js: * globalize.js: * MarkdownDeepLib.min.js: * relative-time.js: * globalize.cultures.js: * globalize.culture.kn.js: * globalize.culture.or.js: * globalize.culture.pa.js: * globalize.culture.pl.js: * globalize.culture.fo.js: * globalize.culture.ps.js: * globalize.culture.fi.js: * globalize.culture.fa.js: * globalize.culture.fr.js: * globalize.culture.nn.js: * globalize.culture.no.js: * globalize.culture.gl.js: * globalize.culture.gd.js: * globalize.culture.ga.js: * globalize.culture.oc.js: * globalize.culture.fy.js: * globalize.culture.eu.js: * globalize.culture.se.js: * globalize.culture.si.js: * globalize.culture.sk.js: * globalize.culture.sl.js: * globalize.culture.sq.js: * globalize.culture.sr.js: * globalize.culture.sv.js: * globalize.culture.sa.js: * globalize.culture.pt.js: * globalize.culture.et.js: * globalize.culture.es.js: * globalize.culture.rm.js: * globalize.culture.ro.js: * globalize.culture.ru.js: * globalize.culture.rw.js: * globalize.culture.gu.js: * globalize.culture.kk.js: * globalize.culture.ka.js: * globalize.culture.mk.js: * globalize.culture.ja.js: * globalize.culture.iu.js: * globalize.culture.ml.js: * globalize.culture.mn.js: * globalize.culture.mi.js: * globalize.culture.ky.js: * globalize.culture.lo.js: * globalize.culture.ko.js: * globalize.culture.lt.js: * globalize.culture.lv.js: * globalize.culture.km.js: * globalize.culture.kl.js: * globalize.culture.it.js: * globalize.culture.nb.js: * globalize.culture.hr.js: * globalize.culture.ne.js: * globalize.culture.hi.js: * globalize.culture.he.js: * globalize.culture.ha.js: * globalize.culture.nl.js: * globalize.culture.hu.js: * globalize.culture.mr.js: * globalize.culture.is.js: * globalize.culture.ii.js: * globalize.culture.ig.js: * globalize.culture.ms.js: * globalize.culture.id.js: * globalize.culture.hy.js: * globalize.culture.mt.js: * globalize.culture.sw.js: * globalize.culture.bs.js: * globalize.culture.tt.js: * globalize.culture.lb.js: * globalize.culture.ug.js: * globalize.culture.br.js: * globalize.culture.bo.js: * globalize.culture.uk.js: * globalize.culture.ca.js: * globalize.culture.tk.js: * globalize.culture.da.js: * globalize.culture.cy.js: * globalize.culture.tn.js: * globalize.culture.cs.js: * globalize.culture.co.js: * globalize.culture.tr.js: * globalize.culture.bn.js: * globalize.culture.as.js: * globalize.culture.yo.js: * globalize.culture.ar.js: * globalize.culture.zh.js: * globalize.culture.zu.js: * globalize.culture.am.js: * globalize.culture.af.js: * globalize.culture.xh.js: * globalize.culture.ur.js: * globalize.culture.bg.js: * globalize.culture.uz.js: * globalize.culture.be.js: * globalize.culture.ba.js: * globalize.culture.vi.js: * globalize.culture.az.js: * globalize.culture.wo.js: * globalize.culture.dv.js: * globalize.culture.te.js: * globalize.culture.de.js: * globalize.culture.tg.js: * globalize.culture.ta.js: * globalize.culture.el.js: * globalize.culture.th.js: * globalize.culture.arn.js: * globalize.culture.gsw.js: * globalize.culture.nso.js: * globalize.culture.sah.js: * globalize.culture.syr.js: * globalize.culture.tzm.js: * globalize.culture.kok.js: * globalize.culture.dsb.js: * globalize.culture.moh.js: * globalize.culture.sms.js: * globalize.culture.smn.js: * globalize.culture.smj.js: * globalize.culture.sma.js: * globalize.culture.hsb.js: * globalize.culture.quz.js: * globalize.culture.fil.js: * globalize.culture.qut.js: * globalize.culture.prs.js: * globalize.culture.mn-MN.js: * globalize.culture.rm-CH.js: * globalize.culture.ta-IN.js: * globalize.culture.ml-IN.js: * globalize.culture.zh-CN.js: * globalize.culture.zh-HK.js: * globalize.culture.tn-ZA.js: * globalize.culture.ms-BN.js: * globalize.culture.ro-RO.js: * globalize.culture.sq-AL.js: * globalize.culture.mr-IN.js: * globalize.culture.yo-NG.js: * globalize.culture.pt-PT.js: * globalize.culture.sa-IN.js: * globalize.culture.zh-MO.js: * globalize.culture.am-ET.js: * globalize.culture.lt-LT.js: * globalize.culture.tk-TM.js: * globalize.culture.sw-KE.js: * globalize.culture.af-ZA.js: * globalize.culture.lo-LA.js: * globalize.culture.lv-LV.js: * globalize.culture.mk-MK.js: * globalize.culture.zh-SG.js: * globalize.culture.zh-TW.js: * globalize.culture.sv-FI.js: * globalize.culture.mi-NZ.js: * globalize.culture.zu-ZA.js: * globalize.culture.sv-SE.js: * globalize.culture.xh-ZA.js: * globalize.culture.uk-UA.js: * globalize.culture.se-SE.js: * globalize.culture.nn-NO.js: * globalize.culture.si-LK.js: * globalize.culture.nl-NL.js: * globalize.culture.ur-PK.js: * globalize.culture.pl-PL.js: * globalize.culture.or-IN.js: * globalize.culture.tt-RU.js: * globalize.culture.pa-IN.js: * globalize.culture.ug-CN.js: * globalize.culture.rw-RW.js: * globalize.culture.se-FI.js: * globalize.culture.se-NO.js: * globalize.culture.nl-BE.js: * globalize.culture.ru-RU.js: * globalize.culture.mt-MT.js: * globalize.culture.th-TH.js: * globalize.culture.wo-SN.js: * globalize.culture.pt-BR.js: * globalize.culture.ms-MY.js: * globalize.culture.vi-VN.js: * globalize.culture.te-IN.js: * globalize.culture.sk-SK.js: * globalize.culture.ne-NP.js: * globalize.culture.tr-TR.js: * globalize.culture.sl-SI.js: * globalize.culture.ps-AF.js: * globalize.culture.nb-NO.js: * globalize.culture.oc-FR.js: * globalize.culture.en-JM.js: * globalize.culture.en-MY.js: * globalize.culture.en-NZ.js: * globalize.culture.en-PH.js: * globalize.culture.en-SG.js: * globalize.culture.en-TT.js: * globalize.culture.en-US.js: * globalize.culture.en-IN.js: * globalize.culture.dv-MV.js: * globalize.culture.el-GR.js: * globalize.culture.en-AU.js: * globalize.culture.en-BZ.js: * globalize.culture.en-CA.js: * globalize.culture.en-GB.js: * globalize.culture.en-IE.js: * globalize.culture.en-ZA.js: * globalize.culture.es-ES.js: * globalize.culture.es-GT.js: * globalize.culture.es-HN.js: * globalize.culture.es-MX.js: * globalize.culture.es-NI.js: * globalize.culture.es-PA.js: * globalize.culture.es-PE.js: * globalize.culture.es-EC.js: * globalize.culture.en-ZW.js: * globalize.culture.es-AR.js: * globalize.culture.es-BO.js: * globalize.culture.es-CL.js: * globalize.culture.es-CO.js: * globalize.culture.es-CR.js: * globalize.culture.es-DO.js: * globalize.culture.de-LU.js: * globalize.culture.ar-OM.js: * globalize.culture.ar-QA.js: * globalize.culture.ar-SA.js: * globalize.culture.ar-SY.js: * globalize.culture.ar-TN.js: * globalize.culture.ar-YE.js: * globalize.culture.as-IN.js: * globalize.culture.ar-MA.js: * globalize.culture.ar-DZ.js: * globalize.culture.ar-EG.js: * globalize.culture.ar-IQ.js: * globalize.culture.ar-JO.js: * globalize.culture.ar-KW.js: * globalize.culture.ar-LB.js: * globalize.culture.ar-LY.js: * globalize.culture.ba-RU.js: * globalize.culture.cs-CZ.js: * globalize.culture.cy-GB.js: * globalize.culture.da-DK.js: * globalize.culture.de-AT.js: * globalize.culture.de-CH.js: * globalize.culture.de-DE.js: * globalize.culture.de-LI.js: * globalize.culture.co-FR.js: * globalize.culture.be-BY.js: * globalize.culture.bg-BG.js: * globalize.culture.bn-BD.js: * globalize.culture.bn-IN.js: * globalize.culture.bo-CN.js: * globalize.culture.br-FR.js: * globalize.culture.ca-ES.js: * globalize.culture.es-PR.js: * globalize.culture.hi-IN.js: * globalize.culture.hr-BA.js: * globalize.culture.hr-HR.js: * globalize.culture.hu-HU.js: * globalize.culture.hy-AM.js: * globalize.culture.id-ID.js: * globalize.culture.he-IL.js: * globalize.culture.fy-NL.js: * globalize.culture.ga-IE.js: * globalize.culture.gd-GB.js: * globalize.culture.gl-ES.js: * globalize.culture.gu-IN.js: * globalize.culture.ka-GE.js: * globalize.culture.ig-NG.js: * globalize.culture.km-KH.js: * globalize.culture.kn-IN.js: * globalize.culture.ar-BH.js: * globalize.culture.ko-KR.js: * globalize.culture.ky-KG.js: * globalize.culture.lb-LU.js: * globalize.culture.kl-GL.js: * globalize.culture.ii-CN.js: * globalize.culture.is-IS.js: * globalize.culture.it-CH.js: * globalize.culture.it-IT.js: * globalize.culture.ja-JP.js: * globalize.culture.ar-AE.js: * globalize.culture.kk-KZ.js: * globalize.culture.fr-MC.js: * globalize.culture.fr-LU.js: * globalize.culture.fr-FR.js: * globalize.culture.fa-IR.js: * globalize.culture.fr-CH.js: * globalize.culture.et-EE.js: * globalize.culture.fi-FI.js: * globalize.culture.fo-FO.js: * globalize.culture.fr-BE.js: * globalize.culture.fr-CA.js: * globalize.culture.eu-ES.js: * globalize.culture.es-US.js: * globalize.culture.es-PY.js: * globalize.culture.es-UY.js: * globalize.culture.es-VE.js: * globalize.culture.es-SV.js: * globalize.culture.sma-SE.js: * globalize.culture.hsb-DE.js: * globalize.culture.prs-AF.js: * globalize.culture.sma-NO.js: * globalize.culture.qut-GT.js: * globalize.culture.moh-CA.js: * globalize.culture.zh-CHT.js: * globalize.culture.quz-BO.js: * globalize.culture.fil-PH.js: * globalize.culture.zh-CHS.js: * globalize.culture.smj-NO.js: * globalize.culture.gsw-FR.js: * globalize.culture.nso-ZA.js: * globalize.culture.sms-FI.js: * globalize.culture.quz-PE.js: * globalize.culture.sah-RU.js: * globalize.culture.kok-IN.js: * globalize.culture.syr-SY.js: * globalize.culture.smj-SE.js: * globalize.culture.arn-CL.js: * globalize.culture.dsb-DE.js: * globalize.culture.quz-EC.js: * globalize.culture.smn-FI.js: * globalize.culture.en-029.js: * globalize.culture.uz-Latn.js: * globalize.culture.tg-Cyrl.js: * globalize.culture.iu-Cans.js: * globalize.culture.mn-Mong.js: * globalize.culture.az-Latn.js: * globalize.culture.az-Cyrl.js: * globalize.culture.sr-Cyrl.js: * globalize.culture.mn-Cyrl.js: * globalize.culture.bs-Cyrl.js: * globalize.culture.iu-Latn.js: * globalize.culture.ha-Latn.js: * globalize.culture.sr-Latn.js: * globalize.culture.zh-Hant.js: * globalize.culture.bs-Latn.js: * globalize.culture.uz-Cyrl.js: * globalize.culture.zh-Hans.js: * globalize.culture.tzm-Latn.js: * globalize.culture.iu-Latn-CA.js: * globalize.culture.sr-Latn-RS.js: * globalize.culture.sr-Latn-ME.js: * globalize.culture.sr-Latn-CS.js: * globalize.culture.sr-Latn-BA.js: * globalize.culture.sr-Cyrl-RS.js: * globalize.culture.sr-Cyrl-ME.js: * globalize.culture.sr-Cyrl-CS.js: * globalize.culture.sr-Cyrl-BA.js: * globalize.culture.ha-Latn-NG.js: * globalize.culture.mn-Mong-CN.js: * globalize.culture.az-Cyrl-AZ.js: * globalize.culture.az-Latn-AZ.js: * globalize.culture.uz-Latn-UZ.js: * globalize.culture.uz-Cyrl-UZ.js: * globalize.culture.iu-Cans-CA.js: * globalize.culture.bs-Cyrl-BA.js: * globalize.culture.bs-Latn-BA.js: * globalize.culture.tg-Cyrl-TJ.js: * globalize.culture.tzm-Latn-DZ.js: Package update * cldr.js: * globalize.js: * event.js: * unresolved.js: * supplemental.js: * adds Localisation purpose dependency * mdd_styles.css: * mdd_gripper.png: * mdd_toolbar.png: * mdd_ajax_loader.gif: * mdd_modal_background.png: Adds Markdown editor resources * CalendarController.cs: Refactoring : moved Notification and MessagesWithPayLoad into the Google data model (YavscModel) * BlogsController.cs: * Removes input validation, in order to process some Markdown values. * Makes the "Edit" Method the one that do the inital post (makes the "Post" method obsolete) * App.master: * jQuery version updated to 2.1.4 * style.css: Sets a non null padding to the body of html pages. * Edit.aspx: Passes from BBCodes to Markdown at edition time, adds the Markdown editor. * UserPost.aspx: Now displays Markdown content * Web.config: * Modifies the "Thanks" configuration * Removes useless addembly bindings * * Web.csproj: * packages.config: Package updates * instdbws.sql: Adds a GCM registration id in the user's profile data. * LoginModel.cs: Allows numbers in passords and logins * YavscModel.csproj: GCM refactorisation * Post.aspx: Replaced by Edit.aspx
9 years ago
using Yavsc.Model.Google;
9 years ago
using Yavsc.Helpers;
using System.Web.Profile;
using Yavsc.Model.Circles;
using Yavsc.Model.Calendar;
using System.Web.Http.Routing;
9 years ago
9 years ago
namespace Yavsc.ApiControllers
{
/// <summary>
/// Night flash controller.
/// </summary>
* AccountController.cs: Register and reset passord from Web API * GCMController.cs: initial creation, will host GCM calls and related procedures. * ResetPassword.aspx: Html view to reset the password * LocalizedText.resx: * LocalizedText.fr.resx: new String form circles * Web.config: * Web.csproj: * YavscModel.csproj: * LocalizedText.Designer.cs: * Profile.cs: * Profile.cs: * LocalizedText.fr.Designer.cs: * LoginModel.cs: * Publishing.cs: * CalendarController.cs: * LoginModel.cs: * GCMRegister.cs: * Publishing.cs: * GCMRegister.cs: * NewRoleModel.cs: * NewRoleModel.cs: * RegisterModel.cs: * NewAdminModel.cs: * RegisterModel.cs: * NewAdminModel.cs: * LostPasswordModel.cs: * RegisterViewModel.cs: * RegisterViewModel.cs: * ProviderPublicInfo.cs: * RegisterClientModel.cs: * ChangePasswordModel.cs: * ProviderPublicInfo.cs: * RegisterClientModel.cs: * ChangePasswordModel.cs: Fixes a typo (in the namespace :-/) * NpgsqlCircleProvider.cs: Fixes the Circle creation * Global.asax.cs: * AdminController.cs: * NpgsqlContentProvider.cs: code formatting * BlogsController.cs: * CircleController.cs: * WorkFlowController.cs: * PaypalApiController.cs: * FrontOfficeController.cs: refactoring * AccountController.cs: Adds the way to reset the password * FrontOfficeController.cs: xml doc * T.cs: Make this class an helper to translation * YavscHelpers.cs: Implements the e-mail sending * style.css: style uniformization * Circles.aspx: Implements the Html interface to Circle creation (modifications and deletions are still to implement) * Register.ascx: Allows the error display in case of lack of power of the user at registering another user. * Estimate.aspx: use the partial view to register from the Account folder. Cleans the useless reference to ~/Theme/dark/style.css, that was for using the "tablesorter.js", no used anymore. * Web.config: Trying to have all the Index pages to work...
9 years ago
public class CalendarController: ApiController
{
YaEvent[] getTestList()
{
return new YaEvent[] {
new YaEvent () {
Description = "Test Descr",
Title = "Night club special bubble party",
Location = new Position () {
Longitude = 0,
Latitude = 0
}
},
new YaEvent () {
Title = "Test2",
Photo = "http://bla/im.png",
Location = new Position () {
Longitude = 0,
Latitude = 0
}
},
new YaEvent () {
Description = "Test Descr",
Title = "Night club special bubble party",
Location = new Position () {
Longitude = 0,
Latitude = 0
}
},
new YaEvent () {
Title = "Test2",
Photo = "http://bla/im.png",
Location = new Position () {
Longitude = 0,
Latitude = 0
}
}
};
}
/// <summary>
/// List events according the specified search arguments.
/// </summary>
/// <param name="args">Arguments.</param>
[ValidateAjaxAttribute]
[HttpGet]
public YaEvent[] List ([FromUri] PositionAndKeyphrase args)
{
return getTestList();
}
/// <summary>
/// Provider the specified ProviderId.
/// </summary>
/// <param name="ProviderId">Provider identifier.</param>
[HttpGet]
public ProviderPublicInfo ProviderInfo ([FromUri] string ProviderId)
{
return new ProviderPublicInfo () {
DisplayName = "Yavsc clubing",
WebPage = "http://yavsc.pschneider.fr/",
Calendar = new Schedule () {
Period = Periodicity.ThreeM,
WeekDays = new OpenDay[] { new OpenDay () { Day = WeekDay.Saturday,
Start = new TimeSpan(18,00,00),
End = new TimeSpan(2,00,00)
} },
Validity = new Period[] { new Period() {
Start = new DateTime(2015,5,29),
End = new DateTime(2015,5,30)} }
},
Description = "Yavsc Entertainment Production, Yet another private party",
LogoImgLocator = "http://yavsc.pschneider.fr/favicon.png",
Location = new Position () { Longitude = 0, Latitude = 0 },
LocationType = "Salle des fêtes"
};
}
/// <summary>
/// Posts the image.
/// </summary>
/// <returns>The image.</returns>
/// <param name="NFProvId">NF prov identifier.</param>
public string PostImage([FromUri] string NFProvId)
{
return null;
}
/// <summary>
/// Posts the event.
/// </summary>
/// <returns>The event identifier.</returns>
/// <param name="ev">Ev.</param>
public int PostEvent ([FromBody] ProvidedEvent ev)
{
throw new NotImplementedException();
}
/// <summary>
/// Registers with push notifications enabled.
/// </summary>
/// <param name="model">Model.</param>
[ValidateAjax]
public void RegisterWithPushNotifications(GCMRegisterModel model)
{
if (ModelState.IsValid) {
MembershipCreateStatus mcs;
var user = Membership.CreateUser (
model.UserName,
model.Password,
model.Email,
null,
null,
false,
out mcs);
switch (mcs) {
case MembershipCreateStatus.DuplicateEmail:
ModelState.AddModelError ("Email", "Cette adresse e-mail correspond " +
"à un compte utilisateur existant");
break;
case MembershipCreateStatus.DuplicateUserName:
* font-awesome.css: an awesome css * hallo.js: Use a forked Hallo.js * showdown.js: * to-markdown.js: * mdd_gripper.png: * mdd_toolbar.png: * mdd_modal_background.png: The client side Markdown is now implemented using Hallo.js * FontAwesome.otf: * fontawesome-webfont.eot: * fontawesome-webfont.svg: * fontawesome-webfont.ttf: * fontawesome-webfont.woff: * fontawesome-webfont.woff2: awesome * MarkdownDeep.dll: a modified version to render video and audio tags * NpgsqlBlogProvider.cs: * CalendarController.cs: * WorkFlowController.cs: refactoring: The `UserName` property from the `BlogEntry` class is renamed to `Author` * InputUserName.cs: formatting * BlogsController.cs: * refactoring: The `UserName` property from the `BlogEntry` class is renamed to `Author` * Fixes pandoc process on file named with some spaces * BlogsController.cs: UserName became Author on BlogEntry objects * Global.asax.cs: route /fonts is now ignored. * MarkdownHelper.cs: transform Markdown using a given base url * App.master: jquery was not needed on all pages. * Edit.aspx: using Hallo.js * BlogEntry.cs: * UserPost.aspx: * UserPosts.aspx: * BlogManager.cs: * RemoveTitle.aspx: * BlogEntryCollection.cs: * UUBlogEntryCollection.cs: * UUTBlogEntryCollection.cs: refactoring * Web.config: ? * Web.csproj: * use my local assembly for MarkdownDeep.dll * fontawesome integration * Hallo.js, to-markdown.js, showdowwn.js integration * packages.config: Now use forked MarkdownDeep * MarkdownDeepLib.min.js: * MarkdownDeep License.txt: * MarkdownDeep Quick Reference.txt: using my local revision * mdd_ajax_loader.gif: The client side Markdown is now implemented using Hallo.js
9 years ago
ModelState.AddModelError ("Author", "Ce nom d'utilisateur est " +
"déjà enregistré");
break;
case MembershipCreateStatus.Success:
Url.SendActivationMessage (user);
// TODO set registration id
throw new NotImplementedException ();
}
}
}
/// <summary>
/// Sets the registration identifier.
/// </summary>
/// <param name="registrationId">Registration identifier.</param>
[Authorize]
public void SetRegistrationId(string registrationId)
{
// TODO set registration id
setRegistrationId (Membership.GetUser ().UserName, registrationId);
}
private void setRegistrationId(string username, string regid) {
ProfileBase pr = ProfileBase.Create(username);
pr.SetPropertyValue ("gregid", regid);
}
/// <summary>
/// Notifies the event.
/// </summary>
/// <param name="evpub">Evpub.</param>
public MessageWithPayloadResponse NotifyEvent(EventPub evpub) {
SimpleJsonPostMethod<MessageWithPayload<YaEvent>,MessageWithPayloadResponse> r =
new SimpleJsonPostMethod<MessageWithPayload<YaEvent>,MessageWithPayloadResponse>(
"https://gcm-http.googleapis.com/gcm/send");
using (r) {
var msg = new MessageWithPayload<YaEvent> () { data = new YaEvent[] { (YaEvent)evpub } };
msg.to = string.Join (" ", Circle.Union (evpub.Circles));
return r.Invoke (msg);
}
}
}
}