Inheritance: INotifyPropertyChanging, INotifyPropertyChanged
 partial void DeleteMarcasInadecuado(MarcasInadecuado instance);
 partial void UpdateMarcasInadecuado(MarcasInadecuado instance);
 partial void InsertMarcasInadecuado(MarcasInadecuado instance);
		private void detach_MarcasInadecuados(MarcasInadecuado entity)
		{
			this.SendPropertyChanging();
			entity.Usuario = null;
		}
		private void attach_MarcasInadecuados(MarcasInadecuado entity)
		{
			this.SendPropertyChanging();
			entity.Recurso = this;
		}
        // 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)
            {
            }
        }