diff -r 6a0b65d60d00 -r 806188af5027 src/ldt/ldt/ldt_utils/models.py --- 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):