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...
232 lines
7.1 KiB
C#
232 lines
7.1 KiB
C#
//
|
|
// NpgsqlCircleProvider.cs
|
|
//
|
|
// Author:
|
|
// Paul Schneider <paul@pschneider.fr>
|
|
//
|
|
// Copyright (c) 2015 GNU GPL
|
|
//
|
|
// 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 Yavsc.Model.Circles;
|
|
using System.Collections.Specialized;
|
|
using System.Configuration;
|
|
using Npgsql;
|
|
using NpgsqlTypes;
|
|
using System.Collections.Generic;
|
|
using System.Web.Security;
|
|
|
|
namespace WorkFlowProvider
|
|
{
|
|
/// <summary>
|
|
/// Npgsql circle provider.
|
|
/// </summary>
|
|
public class NpgsqlCircleProvider : CircleProvider
|
|
{
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="WorkFlowProvider.NpgsqlCircleProvider"/> class.
|
|
/// </summary>
|
|
public NpgsqlCircleProvider ()
|
|
{
|
|
}
|
|
|
|
#region implemented abstract members of CircleProvider
|
|
|
|
/// <summary>
|
|
/// Add the specified user.
|
|
/// </summary>
|
|
/// <param name="id">circle Identifier.</param>
|
|
/// <param name="username">User name.</param>
|
|
public override void Add (long id, string username)
|
|
{
|
|
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString))
|
|
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
|
|
cmd.CommandText = "insert into circle_members (circle_id, member) values (:cid,:uname)";
|
|
cmd.Parameters.AddWithValue("cid",id);
|
|
cmd.Parameters.AddWithValue("uname",username);
|
|
cnx.Open ();
|
|
cmd.ExecuteNonQuery ();
|
|
cnx.Close ();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Remove the specified user.
|
|
/// </summary>
|
|
/// <param name="id">circle Identifier.</param>
|
|
/// <param name="username">User name.</param>
|
|
public override void Remove (long id, string username)
|
|
{
|
|
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString))
|
|
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
|
|
cmd.CommandText = "delete from circle_members where circle_id = :cid and username = :uname";
|
|
cmd.Parameters.AddWithValue("cid",id);
|
|
cmd.Parameters.AddWithValue("uname",username);
|
|
cnx.Open ();
|
|
cmd.ExecuteNonQuery ();
|
|
cnx.Close ();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get the specified id.
|
|
/// </summary>
|
|
/// <param name="id">Identifier.</param>
|
|
public override Circle Get (long id)
|
|
{
|
|
Circle circ=null;
|
|
|
|
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString)) {
|
|
cnx.Open ();
|
|
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
|
|
cmd.CommandText = "select title, owner from circle where _id = :cid";
|
|
cmd.Parameters.AddWithValue ("cid", id);
|
|
using (NpgsqlDataReader dr = cmd.ExecuteReader ()) {
|
|
if (dr.Read ()) {
|
|
circ = new Circle ();
|
|
circ.Id = id;
|
|
circ.Title = dr.GetString (
|
|
dr.GetOrdinal ("title"));
|
|
circ.Owner = dr.GetString (
|
|
dr.GetOrdinal ("owner"));
|
|
}
|
|
dr.Close ();
|
|
}
|
|
}
|
|
|
|
if (circ != null) {
|
|
|
|
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
|
|
cmd.CommandText = "select member from circle_members where circle_id = :cid";
|
|
cmd.Parameters.AddWithValue ("cid", id);
|
|
cmd.Prepare ();
|
|
List<string> members = new List<string> ();
|
|
using (NpgsqlDataReader dr = cmd.ExecuteReader ()) {
|
|
while (dr.Read ())
|
|
members.Add (dr.GetString (0));
|
|
dr.Close ();
|
|
circ.Members = members.ToArray ();
|
|
}
|
|
}
|
|
}
|
|
cnx.Close ();
|
|
}
|
|
return circ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Add the specified owner, title and users.
|
|
/// </summary>
|
|
/// <param name="owner">Owner.</param>
|
|
/// <param name="title">Title.</param>
|
|
/// <param name="users">Users.</param>
|
|
public override long Create (string owner, string title, string[] users)
|
|
{
|
|
long id = 0;
|
|
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString)) {
|
|
cnx.Open ();
|
|
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
|
|
cmd.CommandText = "insert into circle (owner,title,applicationname) values (:wnr,:tit,:app) returning _id";
|
|
cmd.Parameters.AddWithValue ("wnr", owner);
|
|
cmd.Parameters.AddWithValue ("tit", title);
|
|
cmd.Parameters.AddWithValue ("app", applicationName);
|
|
id = (long) cmd.ExecuteScalar ();
|
|
}
|
|
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
|
|
cmd.CommandText = "insert into circle_members (circle_id,member) values (@cid,@mbr)";
|
|
cmd.Parameters.AddWithValue ("cid", id);
|
|
cmd.Parameters.Add ("mbr", NpgsqlDbType.Varchar);
|
|
cmd.Prepare ();
|
|
foreach (string user in users) {
|
|
object pkid = Membership.GetUser (user).ProviderUserKey;
|
|
cmd.Parameters[1].Value = pkid.ToString();
|
|
cmd.ExecuteNonQuery ();
|
|
}
|
|
}
|
|
cnx.Close ();
|
|
}
|
|
return id;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Delete the specified owner and title.
|
|
/// </summary>
|
|
/// <param name="id">Identifier.</param>
|
|
public override void Delete (long id)
|
|
{
|
|
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString))
|
|
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
|
|
cmd.CommandText = "delete from circle where _id = @cid";
|
|
cmd.Parameters.AddWithValue("cid",id);
|
|
cnx.Open ();
|
|
cmd.ExecuteNonQuery ();
|
|
cnx.Close ();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// List user's circles.
|
|
/// </summary>
|
|
/// <param name="user">User.</param>
|
|
public override CircleInfoCollection List (string user)
|
|
{
|
|
CircleInfoCollection cc = null;
|
|
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString))
|
|
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
|
|
cmd.CommandText = "select _id, title from circle where owner = :wnr";
|
|
cmd.Parameters.AddWithValue("wnr",user);
|
|
cnx.Open ();
|
|
cmd.Prepare ();
|
|
using (NpgsqlDataReader rdr = cmd.ExecuteReader ()) {
|
|
if (rdr.HasRows) {
|
|
cc = new CircleInfoCollection ();
|
|
while (rdr.Read ()) {
|
|
string title = null;
|
|
int ottl = rdr.GetOrdinal ("title");
|
|
if (!rdr.IsDBNull (ottl))
|
|
title = rdr.GetString (ottl);
|
|
long id = (long) rdr.GetInt64 (
|
|
rdr.GetOrdinal ("_id"));
|
|
cc.Add (new CircleInfo (id,title));
|
|
}
|
|
}
|
|
rdr.Close ();
|
|
}
|
|
cnx.Close ();
|
|
|
|
}
|
|
return cc;
|
|
}
|
|
|
|
#endregion
|
|
|
|
string connectionString = null;
|
|
string applicationName = null;
|
|
/// <summary>
|
|
/// Initialize this object using the specified name and config.
|
|
/// </summary>
|
|
/// <param name="name">Name.</param>
|
|
/// <param name="config">Config.</param>
|
|
public override void Initialize (string name, NameValueCollection config)
|
|
{
|
|
if ( string.IsNullOrWhiteSpace(config ["connectionStringName"]))
|
|
throw new ConfigurationErrorsException ("No name for Npgsql connection string found");
|
|
|
|
connectionString = ConfigurationManager.ConnectionStrings [config ["connectionStringName"]].ConnectionString;
|
|
applicationName = config["applicationName"] ?? "/";
|
|
}
|
|
|
|
}
|
|
}
|
|
|