Esempio n. 1
0
    def updateTrimImage(self, requestImageType):
        self.loadModel()
        if self.model is None:
            self.model = Content(id=self.id)
        self.loadJson()

        imageType = self._getImageType(requestImageType)
        type = "%s_trim" % imageType
        imageTrimInfo = {}
        if os.path.isfile(self._getImageFile(imageType)):
            if type in self.json and self.json[type] is not None:
                imageTrimInfo = self.json[type]
            for f in ('x1', 'y1', 'x2', 'y2'):
                if f in self.request.POST and self.request.POST[f] is not None:
                    imageTrimInfo[f] = self.request.POST[f]
            self.json[type] = imageTrimInfo
            self.json[imageType] = self._getImageUrl(imageType)
            self.saveJson()
            self.model.save()
            self._trimImage(imageType, imageTrimInfo)
            return HttpResponse("{'result':'ok'}",
                                status=200,
                                content_type="application/json;charset=utf8")
        return HttpResponse("{'result':'no file to crop'}",
                            status=400,
                            content_type="application/json;charset=utf8")
Esempio n. 2
0
 def update(self, onsave):
     self.loadModel()
     if self.model is None:
         self.model = Content(id=self.id)
     self.loadJson()
     self.safeUpdateField('title')
     self.safeUpdateField('about')
     self.safeUpdateField('text')
     self.safeUpdateField('image')
     self.safeUpdateField('thumbnail')
     self.safeUpdateField('short_title', 'short-title')
     self.safeUpdateField('short_text', 'short-text')
     self.saveJson()
     self.model.buildRelationships()
     self.model.save()
     return redirect(onsave, self.model.id)
Esempio n. 3
0
 def update(self, onsave):
     self.loadModel()
     if self.model is None:
         self.model = Content(id=self.id)
     self.loadJson()
     self.safeUpdateField('title')
     self.safeUpdateField('about')
     self.safeUpdateField('text')
     self.safeUpdateField('image')
     self.safeUpdateField('thumbnail')
     self.safeUpdateField('short_title', 'short-title')
     self.safeUpdateField('short_text', 'short-text')
     self.saveJson();
     self.model.buildRelationships()
     self.model.save()
     return redirect(onsave, self.model.id)
Esempio n. 4
0
 def updateTrimImage(self, requestImageType):
     self.loadModel()
     if self.model is None:
         self.model = Content(id=self.id)
     self.loadJson()
     
     imageType =  self._getImageType(requestImageType)
     type = "%s_trim" % imageType
     imageTrimInfo = {}
     if os.path.isfile(self._getImageFile(imageType)):
         if type in self.json and self.json[type] is not None:
             imageTrimInfo = self.json[type]
         for f in ( 'x1','y1','x2','y2'):
             if f in self.request.POST and self.request.POST[f] is not None:
                 imageTrimInfo[f] = self.request.POST[f]                    
         self.json[type] = imageTrimInfo
         self.json[imageType] = self._getImageUrl(imageType)
         self.saveJson()
         self.model.save()
         self._trimImage(imageType, imageTrimInfo)
         return HttpResponse("{'result':'ok'}",status=200,content_type="application/json;charset=utf8")
     return HttpResponse("{'result':'no file to crop'}",status=400,content_type="application/json;charset=utf8")
Esempio n. 5
0
class PageView(AbstractContentView):
    
    def render(self):
        return render_to_response("content.djt.html", self.buildContext(self.summary()))

    def renderEdit(self):
        return render_to_response("edit-content.djt.html", self.buildEditContext(self.summary(editmode=True),{ 'uphere' : "%s_" % urlquote(self.id) }))
    
    def update(self, onsave):
        self.loadModel()
        if self.model is None:
            self.model = Content(id=self.id)
        self.loadJson()
        self.safeUpdateField('title')
        self.safeUpdateField('about')
        self.safeUpdateField('text')
        self.safeUpdateField('image')
        self.safeUpdateField('thumbnail')
        self.safeUpdateField('short_title', 'short-title')
        self.safeUpdateField('short_text', 'short-text')
        self.saveJson();
        self.model.buildRelationships()
        self.model.save()
        return redirect(onsave, self.model.id)

    def updateTrimImage(self, requestImageType):
        self.loadModel()
        if self.model is None:
            self.model = Content(id=self.id)
        self.loadJson()
        
        imageType =  self._getImageType(requestImageType)
        type = "%s_trim" % imageType
        imageTrimInfo = {}
        if os.path.isfile(self._getImageFile(imageType)):
            if type in self.json and self.json[type] is not None:
                imageTrimInfo = self.json[type]
            for f in ( 'x1','y1','x2','y2'):
                if f in self.request.POST and self.request.POST[f] is not None:
                    imageTrimInfo[f] = self.request.POST[f]                    
            self.json[type] = imageTrimInfo
            self.json[imageType] = self._getImageUrl(imageType)
            self.saveJson()
            self.model.save()
            self._trimImage(imageType, imageTrimInfo)
            return HttpResponse("{'result':'ok'}",status=200,content_type="application/json;charset=utf8")
        return HttpResponse("{'result':'no file to crop'}",status=400,content_type="application/json;charset=utf8")


    def viewFramedImage(self, imageType):
        return render_to_response("img-framed.djt.html", 
                                  self.buildEditContext(
                                                        self.summary(editmode=True),
                                                        { 'imagebase' : MEDIA_URL, 
                                                         'img' : self._getImageUrl(self._getImageType(imageType))}))
    
    def viewTrimImageJson(self, imageType):
        self.loadJson()
        type = "%s_trim" % self._getImageType(imageType)
        imageTrimInfo = {}
        
        if type in self.json and self.json[type] is not None:
            imageTrimInfo = self.json[type]
        return HttpResponse(json.dumps(imageTrimInfo), status=200, content_type="application/json;charset=utf8")
    
    def _getImageType(self, imageType):
        if imageType.startswith("thumbnail-"):
            return "thumbnail"
        return "image"
    
    def _getImageFile(self,imageType, croped = False, id = None):
        if id is None:
            id = self.id
        if croped:
            f = "%s%s_%s_croped.jpg" % (MEDIA_ROOT,id,imageType)
        else:
            f = "%s%s_%s.jpg" % (MEDIA_ROOT,id,imageType)
        return f
    
    def _getImageUrl(self,imageType,cropped=False, id = None, nocheck = False):
        if id is None:
            id = self.id
        if cropped:
            f = self._getImageFile(imageType, cropped, id = id)
            if nocheck or os.path.isfile(f):
                return "%s%s_%s_croped.jpg" % ( MEDIA_URL, id, imageType  )
        f = self._getImageFile(imageType, id = id)
        if nocheck or os.path.isfile(f):
            return "%s%s_%s.jpg" % ( MEDIA_URL, id, imageType  )
        return False

    def _getImageUrls(self, id = None, nocheck = False):
        if id is None:
            id = self.id
        return {
            'main' : self._getImageUrl("image", id=id, nocheck=nocheck),
            'main_crop' : self._getImageUrl("image",id=id, cropped=True, nocheck=nocheck),
            'thumbnail' : self._getImageUrl("thumbnail", id=id, nocheck=nocheck),
            'thumbnail_crop' : self._getImageUrl("thumbnail", id=id,cropped=True, nocheck=nocheck),
            }

    def _trimImage(self, imageType, imageTrimInfo):
        f = self._getImageFile(imageType)
        croped = self._getImageFile(imageType,True)
        if os.path.isfile(croped):
            os.remove(croped)
        if os.path.isfile(f):
            shutil.copy(f, croped)
            if imageTrimInfo is not None:
                try:
                    im = Image.open(f)
                    im = im.crop((int(imageTrimInfo['x1']),int(imageTrimInfo['y1']),int(imageTrimInfo['x2']),int(imageTrimInfo['y2'])))
                    im.save(self._getImageFile(imageType,True))
                except Exception as e:
                    logging.getLogger(__name__).exception(
                            "Trim Image %s failed" % (f))
                    return False
        return True

    
    
    def updateImage(self, requestImageType, onsave):
        if self.request.FILES is not None and "file" in self.request.FILES:
            self.loadJson()
            f = self.request.FILES['file']
            imageType = self._getImageType(requestImageType)
            targetFile = self._getImageFile(imageType)
            destination = open(targetFile, 'wb+')
            for chunk in f.chunks():
                destination.write(chunk)
            destination.close()
            trimInfoName = "%s_trim" % imageType
            imageTrimInfo = None
            if self.json is not None and trimInfoName in self.json and self.json[trimInfoName] is not None:
                imageTrimInfo = self.json[trimInfoName]
            self._trimImage(imageType, imageTrimInfo)               
        return redirect(onsave, self.id, requestImageType)
    
    def getPages(self):
        pages = []
        for content in ContentMeta.objects.all():
            pages.append({ 'meta' : content, 'pageimages' : self._getImageUrls(id=content.id)})
        return { 'pages' : pages }
        
    
    def summary(self, editmode=False):
        self.loadJson()
        summary = self.getPages()
        if self.json is None:
            return summary
        page = { 'id' : self.model.id }
        page.update(self.json)
        summary['page'] = page
        summary['pageimages'] = self._getImageUrls(nocheck=editmode)
        return summary
    
    def loadModel(self):
        if self.model is None:
            self.model = Content.objects.get(id=self.id)
Esempio n. 6
0
 def loadJson(self):
     if self.json is None:
         self.loadModel()
         self.json = Content.safe_to_json(self.model)
Esempio n. 7
0
class PageView(AbstractContentView):
    def render(self):
        return render_to_response("content.djt.html",
                                  self.buildContext(self.summary()))

    def renderEdit(self):
        return render_to_response(
            "edit-content.djt.html",
            self.buildEditContext(self.summary(editmode=True),
                                  {'uphere': "%s_" % urlquote(self.id)}))

    def update(self, onsave):
        self.loadModel()
        if self.model is None:
            self.model = Content(id=self.id)
        self.loadJson()
        self.safeUpdateField('title')
        self.safeUpdateField('about')
        self.safeUpdateField('text')
        self.safeUpdateField('image')
        self.safeUpdateField('thumbnail')
        self.safeUpdateField('short_title', 'short-title')
        self.safeUpdateField('short_text', 'short-text')
        self.saveJson()
        self.model.buildRelationships()
        self.model.save()
        return redirect(onsave, self.model.id)

    def updateTrimImage(self, requestImageType):
        self.loadModel()
        if self.model is None:
            self.model = Content(id=self.id)
        self.loadJson()

        imageType = self._getImageType(requestImageType)
        type = "%s_trim" % imageType
        imageTrimInfo = {}
        if os.path.isfile(self._getImageFile(imageType)):
            if type in self.json and self.json[type] is not None:
                imageTrimInfo = self.json[type]
            for f in ('x1', 'y1', 'x2', 'y2'):
                if f in self.request.POST and self.request.POST[f] is not None:
                    imageTrimInfo[f] = self.request.POST[f]
            self.json[type] = imageTrimInfo
            self.json[imageType] = self._getImageUrl(imageType)
            self.saveJson()
            self.model.save()
            self._trimImage(imageType, imageTrimInfo)
            return HttpResponse("{'result':'ok'}",
                                status=200,
                                content_type="application/json;charset=utf8")
        return HttpResponse("{'result':'no file to crop'}",
                            status=400,
                            content_type="application/json;charset=utf8")

    def viewFramedImage(self, imageType):
        return render_to_response(
            "img-framed.djt.html",
            self.buildEditContext(
                self.summary(editmode=True), {
                    'imagebase': MEDIA_URL,
                    'img': self._getImageUrl(self._getImageType(imageType))
                }))

    def viewTrimImageJson(self, imageType):
        self.loadJson()
        type = "%s_trim" % self._getImageType(imageType)
        imageTrimInfo = {}

        if type in self.json and self.json[type] is not None:
            imageTrimInfo = self.json[type]
        return HttpResponse(json.dumps(imageTrimInfo),
                            status=200,
                            content_type="application/json;charset=utf8")

    def _getImageType(self, imageType):
        if imageType.startswith("thumbnail-"):
            return "thumbnail"
        return "image"

    def _getImageFile(self, imageType, croped=False, id=None):
        if id is None:
            id = self.id
        if croped:
            f = "%s%s_%s_croped.jpg" % (MEDIA_ROOT, id, imageType)
        else:
            f = "%s%s_%s.jpg" % (MEDIA_ROOT, id, imageType)
        return f

    def _getImageUrl(self, imageType, cropped=False, id=None, nocheck=False):
        if id is None:
            id = self.id
        if cropped:
            f = self._getImageFile(imageType, cropped, id=id)
            if nocheck or os.path.isfile(f):
                return "%s%s_%s_croped.jpg" % (MEDIA_URL, id, imageType)
        f = self._getImageFile(imageType, id=id)
        if nocheck or os.path.isfile(f):
            return "%s%s_%s.jpg" % (MEDIA_URL, id, imageType)
        return False

    def _getImageUrls(self, id=None, nocheck=False):
        if id is None:
            id = self.id
        return {
            'main':
            self._getImageUrl("image", id=id, nocheck=nocheck),
            'main_crop':
            self._getImageUrl("image", id=id, cropped=True, nocheck=nocheck),
            'thumbnail':
            self._getImageUrl("thumbnail", id=id, nocheck=nocheck),
            'thumbnail_crop':
            self._getImageUrl("thumbnail",
                              id=id,
                              cropped=True,
                              nocheck=nocheck),
        }

    def _trimImage(self, imageType, imageTrimInfo):
        f = self._getImageFile(imageType)
        croped = self._getImageFile(imageType, True)
        if os.path.isfile(croped):
            os.remove(croped)
        if os.path.isfile(f):
            shutil.copy(f, croped)
            if imageTrimInfo is not None:
                try:
                    im = Image.open(f)
                    im = im.crop(
                        (int(imageTrimInfo['x1']), int(imageTrimInfo['y1']),
                         int(imageTrimInfo['x2']), int(imageTrimInfo['y2'])))
                    im.save(self._getImageFile(imageType, True))
                except Exception as e:
                    logging.getLogger(__name__).exception(
                        "Trim Image %s failed" % (f))
                    return False
        return True

    def updateImage(self, requestImageType, onsave):
        if self.request.FILES is not None and "file" in self.request.FILES:
            self.loadJson()
            f = self.request.FILES['file']
            imageType = self._getImageType(requestImageType)
            targetFile = self._getImageFile(imageType)
            destination = open(targetFile, 'wb+')
            for chunk in f.chunks():
                destination.write(chunk)
            destination.close()
            trimInfoName = "%s_trim" % imageType
            imageTrimInfo = None
            if self.json is not None and trimInfoName in self.json and self.json[
                    trimInfoName] is not None:
                imageTrimInfo = self.json[trimInfoName]
            self._trimImage(imageType, imageTrimInfo)
        return redirect(onsave, self.id, requestImageType)

    def getPages(self):
        pages = []
        for content in ContentMeta.objects.all():
            pages.append({
                'meta': content,
                'pageimages': self._getImageUrls(id=content.id)
            })
        return {'pages': pages}

    def summary(self, editmode=False):
        self.loadJson()
        summary = self.getPages()
        if self.json is None:
            return summary
        page = {'id': self.model.id}
        page.update(self.json)
        summary['page'] = page
        summary['pageimages'] = self._getImageUrls(nocheck=editmode)
        return summary

    def loadModel(self):
        if self.model is None:
            self.model = Content.objects.get(id=self.id)
Esempio n. 8
0
 def loadJson(self):
     if self.json is None:
         self.loadModel()
         self.json = Content.safe_to_json(self.model)