src/ldt/ldt/ldt_utils/models.py
changeset 330 806188af5027
parent 314 1a8620e5ebb0
child 333 4ddf8c0eeab4
--- a/src/ldt/ldt/ldt_utils/models.py	Wed Jan 04 12:17:47 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/models.py	Wed Jan 04 17:28:54 2012 +0100
@@ -10,7 +10,7 @@
 from ldt.security.manager import SafeManager
 from sorl.thumbnail import ImageField
 from utils import (create_ldt, copy_ldt, create_empty_iri, update_iri, 
-    generate_uuid, clean_description)
+    generate_uuid)
 import lucene
 import lxml.etree
 import mimetypes
@@ -18,6 +18,7 @@
 import tagging.fields
 import uuid
 
+
 class Author(SafeModel):
 
     handle = models.CharField(max_length=512, unique=True, blank=True, null=True)
@@ -127,7 +128,7 @@
     tags = tagging.fields.TagField(max_length=2048, null=True, blank=True)
     media_obj = models.ForeignKey('Media', blank=True, null=True)
     
-    image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/contents/", default="thumbnails/contents/content_default_icon.png")
+    image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/contents/", default=settings.DEFAULT_CONTENT_ICON)
     
     class Meta:
         ordering = ["title"]
@@ -354,7 +355,7 @@
     state = models.IntegerField(choices=STATE_CHOICES, default=1)
     description = models.TextField(null=True, blank=True)
     
-    image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/projects/", default="thumbnails/projects/project_default_icon.png")
+    image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/projects/", default=settings.DEFAULT_PROJECT_ICON)
     
     class Meta:
         ordering = ["title"]
@@ -410,12 +411,17 @@
         project.ldt_id = str(uuid.uuid1()) #@UndefinedVariable
         project.created_by = user.username
         project.changed_by = user.username
-        project.state = 1
+        project.state = 1                        
         project.save()
         assign('view_project', user, project)
-        assign('change_project', user, project)
+        assign('change_project', user, project)           
+                        
         for content in contents:
             project.contents.add(content)
+            
+        project.set_icon()
+        project.save()
+                        
         return create_ldt(project, user)
 
     def copy_project(self, user, title, description='', group=None):
@@ -430,14 +436,31 @@
         return project
     
     def publish(self):
+        if not self.pk:
+            self.save()
         self.state = 2
         everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME)
         assign('ldt_utils.view_project', everyone, self)
+        self.save()
         
     def unpublish(self):
+        if not self.pk():
+            self.save()
         self.state = 1
         everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME)
         remove_perm('ldt_utils.view_project', everyone, self)
+        self.save()
+        
+    def set_icon(self):
+        default_image = os.path.basename(settings.DEFAULT_CONTENT_ICON)
+
+        for content in self.contents.all():
+            if os.path.basename(content.image.file.name) != default_image:
+                self.image = content.image
+                return True
+            
+        self.image = settings.DEFAULT_PROJECT_ICON
+        return False
     
     def check_access(self, user):
         if (user and user.is_staff) or self.state == 2: 
@@ -445,45 +468,6 @@
         else:
             return False        
         
-    def save(self):
-        if self.pk and self.ldt:
-            doc = lxml.etree.fromstring(self.ldt)
-            new_contents = []
-            contents = doc.xpath("/iri/medias/media")
-            for elem in contents:
-                id = elem.get("id")
-                new_contents.append(id)
-    
-            for c in self.contents.all():
-                if not c.iri_id in new_contents:
-                    self.contents.remove(c)
-            
-            contents_id = [c.id for c in self.contents.all()]
-            for c in new_contents:
-                if c not in contents_id:
-                    content = Content.objects.get(iri_id=c)
-                    self.contents.add(content)
-                                
-            description = self.get_description(doc)
-            new_desc = clean_description(description)
-            
-            if new_desc:        
-                desc_node = doc.xpath('/iri/project')[0]
-                desc_node.set('abstract', new_desc)
-                self.ldt = lxml.etree.tostring(doc, pretty_print=True)
-            
-            self.description = new_desc if new_desc else description
-
-        super(Project, self).save() 
-        
-        if self.state == 2:
-            self.publish()
-        elif self.state == 1:
-            self.unpublish()
-            
-        super(Project, self).save()
-               
-        
 
 class Segment(SafeModel):