// returns all theme categories. public Collection<CategoriasTematica> getThemeCategoriesList() { // only get theme categories from this movement. IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); IEnumerable<CategoriasTematica> themeCategoriesEnum = indignadoContext.ExecuteQuery<CategoriasTematica>("SELECT id, idMovimiento, titulo, descripcion FROM CategoriasTematicas WHERE idMovimiento = {0}", IdMovement); Collection<CategoriasTematica> themeCategoriesCol = new Collection<CategoriasTematica>(); foreach (CategoriasTematica themeCategory in themeCategoriesEnum) { // get own interest if (UserInfo != null) { IEnumerable<int> myInterests = indignadoContext.ExecuteQuery<int>("SELECT COUNT(*) FROM Intereses WHERE (idCategoriaTematica = {0}) AND (idUsuario = {1})", themeCategory.id, UserInfo.Id); foreach (int myInterest in myInterests) { themeCategory.miInteres = myInterest; } } // add item to the collection themeCategoriesCol.Add(themeCategory); } // return the collection return themeCategoriesCol; }
// ****************** // controller methods // ****************** // creates a movement. public void createMovement(Movimiento movement) { // fixes the movement settings movement.habilitado = true; movement.url.Replace(' ', '_'); if (movement.maxMarcasInadecuadasRecursoX < 1) { movement.maxMarcasInadecuadasRecursoX = 5; } if (movement.maxRecursosInadecuadosUsuarioZ < 1) { movement.maxRecursosInadecuadosUsuarioZ = 5; } if (movement.maxRecursosPopularesN < 1) { movement.maxRecursosPopularesN = 5; } if (movement.maxUltimosRecursosM < 1) { movement.maxUltimosRecursosM = 5; } // creates the movement. IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); indignadoContext.Movimientos.InsertOnSubmit(movement); indignadoContext.SubmitChanges(); // get the movement's id. IEnumerable<Movimiento> movementsEnum = indignadoContext.ExecuteQuery<Movimiento> ("SELECT id FROM Movimiento WHERE nombre = {0}", movement.nombre); int idMov = -1; foreach (Movimiento mov in movementsEnum) { if (mov.nombre == movement.nombre) { idMov = mov.id; } } // creates the movement admin. DTRegisterModel user = new DTRegisterModel(); user.nombre = "movadmin"; user.apodo = "movadmin"; user.contraseña = "1234"; user.idMovimiento = idMov; user.latitud = (float)movement.latitud; user.longitud = (float)movement.longitud; user.mail = movement.nombre + "@tsi1.com.uy"; Usuario userDb = DTToClass.DTToUsuario(user); userDb.banned = false; userDb.privilegio = (short) Roles.MovAdminMask; userDb.fechaRegistro = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, DateTime.UtcNow.Hour, DateTime.UtcNow.Minute, 0); indignadoContext.Usuarios.InsertOnSubmit(userDb); // submit changes to the database indignadoContext.SubmitChanges(); }
public static void RefreshNewsList(object o) { try { var controller = o as NewsResourcesController; IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); List<Movimiento> movimientos = indignadoContext.Movimientos.ToList(); foreach (Movimiento mov in movimientos) { IEnumerable<RssFeed> fuentesEnum = indignadoContext.ExecuteQuery<RssFeed> ("SELECT * FROM RssFeeds WHERE idMovimiento = {0}", mov.id); // get items from the sources. Collection<List<RssItem>> ColRssLists = new Collection<List<RssItem>>(); Collection<String> colRssSourceTitle = new Collection<String>(); Collection<String> colRssSourceUrl = new Collection<String>(); foreach (RssFeed source in fuentesEnum) { List<RssItem> rssItemsList = RssDocument.Load(new System.Uri(source.url)).Channel.Items; ColRssLists.Add(rssItemsList); colRssSourceTitle.Add(source.titulo); colRssSourceUrl.Add(source.url); if (ColRssLists.Count > 10) { break; } } // add items to the collection. Collection<DTRssItem> rssItemsCol = new Collection<DTRssItem>(); if (ColRssLists.Count > 0) { for (int j = 0; j < 10; j++) { List<RssItem> rssItemsList = ColRssLists[j % ColRssLists.Count]; if (rssItemsList.Count > (j / ColRssLists.Count)) { DTRssItem dtRssItem = ClassToDT.RssItemToDT(rssItemsList[j / ColRssLists.Count]); dtRssItem.sourceTitle = colRssSourceTitle[j % colRssSourceTitle.Count]; dtRssItem.sourceUrl = colRssSourceUrl[j % colRssSourceTitle.Count]; rssItemsCol.Add(dtRssItem); } } controller._rssItemsCol[mov.id] = rssItemsCol; } } } catch (Exception error) { } }
// returns the data of the user. public Usuario getUser() { IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); IEnumerable<Usuario> usersEnum = indignadoContext.ExecuteQuery<Usuario> ("SELECT * FROM Usuarios WHERE (id = {0})", UserInfo.Id); return usersEnum.First(); }
// returns all resources. public DTResourcesCol_NewsResources getResourcesList(int pageNumber) { // get all resources from this movement. IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); IEnumerable<Recurso> recursosEnum = indignadoContext.ExecuteQuery<Recurso> ("SELECT Recursos.id, Recursos.idUsuario, Usuarios.apodo AS apodoUsuario, titulo, descripcion, fecha, tipo, urlLink, urlImage, urlVideo, urlThumb, CantAprobaciones.cantAprobaciones FROM Recursos LEFT JOIN Usuarios ON (Usuarios.id = Recursos.idUsuario) LEFT JOIN (SELECT idRecurso, COUNT (idUsuario) AS cantAprobaciones FROM Aprobaciones GROUP BY idRecurso) CantAprobaciones ON (CantAprobaciones.idRecurso = Recursos.id) WHERE (Usuarios.idMovimiento = {0}) AND (Recursos.deshabilitado = {1}) ORDER BY Recursos.id DESC", IdMovement, 0); Movimiento movement = indignadoContext.Movimientos.Single(x => x.id == IdMovement); return toResourcesCol(recursosEnum, movement.maxUltimosRecursosM, pageNumber); }
// mark a resource as inappropriate. public void markResourceInappropriate(Recurso resource) { // create a markInappropriate MarcasInadecuado markInappropriate = new MarcasInadecuado(); markInappropriate.idRecurso = resource.id; markInappropriate.idUsuario = UserInfo.Id; try { // get database context. IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); // get the movement. Movimiento movement = indignadoContext.Movimientos.Single(x => x.id == IdMovement); // add markInappropriate to the database. indignadoContext.MarcasInadecuados.InsertOnSubmit(markInappropriate); indignadoContext.SubmitChanges(); indignadoContext = new IndignadoDBDataContext(); // get number of marks of the resource. int numberMarksResource = 0; IEnumerable<int> numbersMarksR = indignadoContext.ExecuteQuery<int>("SELECT COUNT(*) FROM MarcasInadecuados WHERE (idRecurso = {0})", resource.id); foreach (int numberMarksR in numbersMarksR) { numberMarksResource = numberMarksR; } // if number of marks matches X, disable the resource. if (numberMarksResource >= movement.maxMarcasInadecuadasRecursoX) { indignadoContext.ExecuteQuery<int>("UPDATE Recursos SET deshabilitado = {0} WHERE id = {1}", 1, resource.id); } // get this resources's user id. int thisUserId = -1; IEnumerable<int> thisUsersID = indignadoContext.ExecuteQuery<int>("SELECT idUsuario FROM Recursos WHERE (id = {0})", resource.id); foreach (int thisUserID in thisUsersID) { thisUserId = thisUserID; } // get number of disabled resources published by this resources's user. int numberMarksUser = 0; IEnumerable<int> numbersMarksU = indignadoContext.ExecuteQuery<int> ("SELECT COUNT(*) FROM Recursos WHERE (idUsuario = {0}) AND (deshabilitado = {1})", thisUserId, 1); foreach (int numberMarksU in numbersMarksU) { numberMarksUser = numberMarksU; } // if number of marks matches Z, ban the user. if (numberMarksUser >= movement.maxRecursosInadecuadosUsuarioZ) { indignadoContext.ExecuteQuery<int>("UPDATE Usuarios SET banned = {0} WHERE id = {1}", true, thisUserId); } // commit changes to the database. indignadoContext.SubmitChanges(); } catch (Exception error) { } }
// converts a resources enumerable to a collection. private DTResourcesCol_NewsResources toResourcesCol(IEnumerable<Recurso> recursosEnum, int itemsNumber, int pageNumber) { IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); // create new resources datatypes collection. DTResourcesCol_NewsResources dtResourcesCol = new DTResourcesCol_NewsResources(); dtResourcesCol.items = new Collection<DTResource_NewsResources>(); Collection<Recurso> colecciontrucha = new Collection<Recurso>(); foreach (Recurso resource in recursosEnum) { colecciontrucha.Add(resource); } // get page number int itemsCount = colecciontrucha.Count(); int maxpag = (itemsCount / itemsNumber); if (itemsCount % itemsNumber != 0){ maxpag++; } if (pageNumber > maxpag) { pageNumber = maxpag; } dtResourcesCol.currentPage = pageNumber; dtResourcesCol.maxPage = maxpag; //recursosEnum = recursosEnum.Skip((pageNumber-1)*itemsNumber); // for each resource, ... int counter = 0; foreach (Recurso resource in colecciontrucha) { counter++; if (counter <= (pageNumber - 1) * itemsNumber) { continue; } // get own like if (UserInfo != null) { IEnumerable<int> iLikesIt = indignadoContext.ExecuteQuery<int>("SELECT COUNT(*) FROM Aprobaciones WHERE (idRecurso = {0}) AND (idUsuario = {1})", resource.id, UserInfo.Id); foreach (int iLikeIt in iLikesIt) { resource.meGusta = iLikeIt; } } // get own mark as inappropriate if (UserInfo != null) { IEnumerable<int> myMarksInappr = indignadoContext.ExecuteQuery<int>("SELECT COUNT(*) FROM MarcasInadecuados WHERE (idRecurso = {0}) AND (idUsuario = {1})", resource.id, UserInfo.Id); foreach (int myMarkInappr in myMarksInappr) { resource.yoMarqueInadecuado = myMarkInappr; } } // add item to the collection dtResourcesCol.items.Add(ClassToDT.ResourceToDT_NewsResources(resource)); // stop at the desired number of items. if (dtResourcesCol.items.Count >= itemsNumber) { break; } } return dtResourcesCol; }
// returns all resources published by the movement admin. public DTResourcesCol_NewsResources getResourcesListMovAdmin(int pageNumber) { IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); Usuario movAdmin = indignadoContext.Usuarios.SingleOrDefault(u => (u.idMovimiento == IdMovement) && ((u.privilegio & IndignadoServer.Roles.MovAdminMask) == IndignadoServer.Roles.MovAdminMask)); IEnumerable<Recurso> resourcesEnum = indignadoContext.ExecuteQuery<Recurso> ("SELECT Recursos.id, Recursos.idUsuario, Usuarios.apodo AS apodoUsuario, titulo, descripcion, fecha, tipo, urlLink, urlImage, urlVideo, urlThumb, CantAprobaciones.cantAprobaciones FROM Recursos LEFT JOIN Usuarios ON (Usuarios.id = Recursos.idUsuario) LEFT JOIN (SELECT idRecurso, COUNT (idUsuario) AS cantAprobaciones FROM Aprobaciones GROUP BY idRecurso) CantAprobaciones ON (CantAprobaciones.idRecurso = Recursos.id) WHERE (Usuarios.idMovimiento = {0}) AND (Usuarios.id = {1}) ORDER BY Recursos.id DESC", IdMovement, movAdmin.id); Movimiento movement = indignadoContext.Movimientos.Single(x => x.id == IdMovement); return toResourcesCol(resourcesEnum, movement.maxUltimosRecursosM, pageNumber); }
// convert users enumerable to collection. private Collection<Usuario> toUsersCol(IEnumerable<Usuario> usersEnum) { IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); // create new users collection. Collection<Usuario> usersCol = new Collection<Usuario>(); // for each user in the enumerable, ... foreach (Usuario user in usersEnum) { // get number of resources marked as inappropriate. IEnumerable<int> numbersMarksInappropriateResources = indignadoContext.ExecuteQuery<int> ("SELECT COUNT(*) FROM (SELECT idRecurso FROM MarcasInadecuados GROUP BY idRecurso) RecursosMarcadosInadecuado LEFT JOIN Recursos ON Recursos.id = RecursosMarcadosInadecuado.idRecurso WHERE Recursos.idUsuario = {0}", user.id); foreach (int numberMarksInappropriateResources in numbersMarksInappropriateResources) { user.cantRecursosMarcadosInadecuados = numberMarksInappropriateResources; } // get number of disabled resources. IEnumerable<int> numbersDisabledResources = indignadoContext.ExecuteQuery<int> ("SELECT COUNT(*) FROM Recursos WHERE (idUsuario = {0}) AND (deshabilitado = {1})", user.id, 1); foreach (int numberDisabledResources in numbersDisabledResources) { user.cantRecursosDeshabilitados = numberDisabledResources; } // add user to the collection. usersCol.Add(user); } // return the users collection. return usersCol; }
// gets the theme categories. public Collection<CategoriasTematica> listThemeCategories() { // only get theme categories from this movement. IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); IEnumerable<CategoriasTematica> themeCategoriesEnum = indignadoContext.ExecuteQuery<CategoriasTematica> ("SELECT id, idMovimiento, titulo, descripcion FROM CategoriasTematicas WHERE idMovimiento = {0}", IdMovement); Collection<CategoriasTematica> themeCategoriesCol = new Collection<CategoriasTematica>(); foreach (CategoriasTematica themeCategory in themeCategoriesEnum) { // add item to the collection themeCategoriesCol.Add(themeCategory); } // return the collection return themeCategoriesCol; }
// convert users enumerable to collection. private Collection<Recurso> toResourcesCol(IEnumerable<Recurso> resourcesEnum) { IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); // create new resources collection. Collection<Recurso> recursosCol = new Collection<Recurso>(); // for each resource in the enumerable, ... foreach (Recurso resource in resourcesEnum) { // get number of likes IEnumerable<int> numbersLikes = indignadoContext.ExecuteQuery<int>("SELECT COUNT(*) FROM Aprobaciones WHERE idRecurso = {0}", resource.id); foreach (int numberLikes in numbersLikes) { resource.cantAprobaciones = numberLikes; } /* // get number of marks as inappropriate IEnumerable<int> numbersMarksInappropriate = indignadoContext.ExecuteQuery<int>("SELECT COUNT(*) FROM MarcasInadecuados WHERE idRecurso = {0}", resource.id); foreach (int numberMarksInappropriate in numbersMarksInappropriate) { resource.cantMarcasInadecuado = numberMarksInappropriate; } * */ // add item to the collection recursosCol.Add(resource); } return recursosCol; }
// gets the rss resources. public DTRssSourcesCol listRssSources() { DTRssSourcesCol result = new DTRssSourcesCol(); result.items = new Collection<DTRssSource>(); IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); IEnumerable<RssFeed> ressEnum = indignadoContext.ExecuteQuery<RssFeed>("SELECT * FROM RssFeeds WHERE idMovimiento = {0}", IdMovement); foreach (RssFeed rss in ressEnum) { DTRssSource dtRss = new DTRssSource(); dtRss.tag = rss.tag; dtRss.url = rss.url; dtRss.title = rss.titulo; result.items.Add(dtRss); } return result; }
// returns all users. public Collection<Usuario> getUsersListFull() { IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); IEnumerable<Usuario> usersEnum = indignadoContext.ExecuteQuery<Usuario> ("SELECT * FROM Usuarios WHERE (idMovimiento = {0}) AND (privilegio = {1})", IdMovement, 0); return toUsersCol(usersEnum); }
// returns all the data of the user. public Usuario getUser(Usuario user) { IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); Usuario userFull = indignadoContext.Usuarios.SingleOrDefault(u => (u.id == user.id)); // get number of resources marked as inappropriate. IEnumerable<int> numbersMarksInappropriateResources = indignadoContext.ExecuteQuery<int> ("SELECT COUNT(*) FROM (SELECT idRecurso FROM MarcasInadecuados GROUP BY idRecurso) RecursosMarcadosInadecuado LEFT JOIN Recursos ON Recursos.id = RecursosMarcadosInadecuado.idRecurso WHERE Recursos.idUsuario = {0}", userFull.id); foreach (int numberMarksInappropriateResources in numbersMarksInappropriateResources) { userFull.cantRecursosMarcadosInadecuados = numberMarksInappropriateResources; } // get number of disabled resources. IEnumerable<int> numbersDisabledResources = indignadoContext.ExecuteQuery<int> ("SELECT COUNT(*) FROM Recursos WHERE (idUsuario = {0}) AND (deshabilitado = {1})", userFull.id, 1); foreach (int numberDisabledResources in numbersDisabledResources) { userFull.cantRecursosDeshabilitados = numberDisabledResources; } return userFull; }
// returns all resources published by the given user. public Collection<Recurso> getResourcesListUser(Usuario user) { IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); IEnumerable<Recurso> resourcesEnum = indignadoContext.ExecuteQuery<Recurso> ("SELECT Recursos.id, Recursos.idUsuario, Usuarios.apodo AS apodoUsuario, titulo, descripcion, fecha, tipo, urlLink, urlImage, urlVideo, urlThumb, deshabilitado, CantAprobaciones.cantAprobaciones, CantMarcasInadecuados.cantMarcasInadecuado FROM Recursos LEFT JOIN Usuarios ON (Usuarios.id = Recursos.idUsuario) LEFT JOIN (SELECT idRecurso, COUNT (idUsuario) AS cantAprobaciones FROM Aprobaciones GROUP BY idRecurso) CantAprobaciones ON (CantAprobaciones.idRecurso = Recursos.id) LEFT JOIN (SELECT idRecurso, COUNT (idUsuario) AS cantMarcasInadecuado FROM MarcasInadecuados GROUP BY idRecurso) CantMarcasInadecuados ON (CantMarcasInadecuados.idRecurso = Recursos.id) WHERE (Usuarios.id = {0}) ORDER BY CantMarcasInadecuados.cantMarcasInadecuado DESC, Recursos.id DESC", user.id); return toResourcesCol(resourcesEnum); }
// returns all resources enabled. public Collection<Recurso> getResourcesListEnabled() { // get all resources from this movement. IndignadoDBDataContext indignadoContext = new IndignadoDBDataContext(); IEnumerable<Recurso> resourcesEnum = indignadoContext.ExecuteQuery<Recurso> //("SELECT Recursos.id, Recursos.idUsuario, Usuarios.apodo AS apodoUsuario, titulo, descripcion, fecha, tipo, urlLink, urlImage, urlVideo, urlThumb, deshabilitado FROM Recursos LEFT JOIN Usuarios ON (Usuarios.id = Recursos.idUsuario) WHERE (Usuarios.idMovimiento = {0}) AND (Recursos.deshabilitado = {1})", IdMovement, 0); ("SELECT Recursos.id, Recursos.idUsuario, Usuarios.apodo AS apodoUsuario, titulo, descripcion, fecha, tipo, urlLink, urlImage, urlVideo, urlThumb, deshabilitado, CantAprobaciones.cantAprobaciones, CantMarcasInadecuados.cantMarcasInadecuado FROM Recursos LEFT JOIN Usuarios ON (Usuarios.id = Recursos.idUsuario) LEFT JOIN (SELECT idRecurso, COUNT (idUsuario) AS cantAprobaciones FROM Aprobaciones GROUP BY idRecurso) CantAprobaciones ON (CantAprobaciones.idRecurso = Recursos.id) LEFT JOIN (SELECT idRecurso, COUNT (idUsuario) AS cantMarcasInadecuado FROM MarcasInadecuados GROUP BY idRecurso) CantMarcasInadecuados ON (CantMarcasInadecuados.idRecurso = Recursos.id) WHERE (Usuarios.idMovimiento = {0}) AND (Recursos.deshabilitado = {1}) ORDER BY CantMarcasInadecuados.cantMarcasInadecuado DESC, Recursos.id DESC", IdMovement, 0); return toResourcesCol(resourcesEnum); }