Esempio n. 1
0
class report_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')

    def __init__(self, title, description, coverage, keywords, sortorder,
                 releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder,
                             releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, releasedate, lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self.sortorder = sortorder
        self.releasedate = releasedate
Esempio n. 2
0
class event_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')
    location = LocalProperty('location')
    location_address = LocalProperty('location_address')
    host = LocalProperty('host')
    details = LocalProperty('details')

    def __init__(self, title, description, coverage, keywords, sortorder,
                 location, location_address, location_url, start_date,
                 end_date, host, agenda_url, event_url, details, topitem,
                 event_type, contact_person, contact_email, contact_phone,
                 contact_fax, releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder,
                             location, location_address, location_url,
                             start_date, end_date, host, agenda_url, event_url,
                             details, topitem, event_type, contact_person,
                             contact_email, contact_phone, contact_fax,
                             releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, location, location_address, location_url,
                        start_date, end_date, host, agenda_url, event_url,
                        details, topitem, event_type, contact_person,
                        contact_email, contact_phone, contact_fax, releasedate,
                        lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('location', lang, location)
        self._setLocalPropValue('location_address', lang, location_address)
        self._setLocalPropValue('host', lang, host)
        self._setLocalPropValue('details', lang, details)
        self.sortorder = sortorder
        self.location_url = location_url
        self.start_date = start_date
        self.end_date = end_date
        self.agenda_url = agenda_url
        self.event_url = event_url
        self.topitem = topitem
        self.event_type = event_type
        self.contact_person = contact_person
        self.contact_email = contact_email
        self.contact_phone = contact_phone
        self.contact_fax = contact_fax
        self.releasedate = releasedate
class semorganisation_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')
    address = LocalProperty('address')
    contact_title = LocalProperty('contact_title')
    contact_firstname = LocalProperty('contact_firstname')
    contact_lastname = LocalProperty('contact_lastname')
    contact_position = LocalProperty('contact_position')

    def __init__(self, title, description, coverage, keywords, sortorder,
                 org_type, address, org_url, contact_title, contact_firstname,
                 contact_lastname, contact_position, contact_email,
                 contact_phone, contact_fax, org_coord, releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder,
                             org_type, address, org_url, contact_title,
                             contact_firstname, contact_lastname,
                             contact_position, contact_email, contact_phone,
                             contact_fax, org_coord, releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, org_type, address, org_url, contact_title,
                        contact_firstname, contact_lastname, contact_position,
                        contact_email, contact_phone, contact_fax, org_coord,
                        releasedate, lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('address', lang, address)
        self._setLocalPropValue('contact_title', lang, contact_title)
        self._setLocalPropValue('contact_firstname', lang, contact_firstname)
        self._setLocalPropValue('contact_lastname', lang, contact_lastname)
        self._setLocalPropValue('contact_position', lang, contact_position)
        self.sortorder = sortorder
        self.org_type = org_type
        self.org_url = org_url
        self.contact_email = contact_email
        self.contact_phone = contact_phone
        self.contact_fax = contact_fax
        self.org_coord = org_coord
        self.releasedate = releasedate
Esempio n. 4
0
class project_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')
    contact = LocalProperty('contact')
    donor = LocalProperty('donor')
    links = LocalProperty('links')
    organisation = LocalProperty('organisation')
    location = LocalProperty('location')

    def __init__(self, title, description, coverage, keywords, country,
                 contact, donor, links, organisation, location, main_issues,
                 tools, budget, timeframe, priority_area, focus, sortorder,
                 releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, country,
                             contact, donor, links, organisation, location,
                             main_issues, tools, budget, timeframe,
                             priority_area, focus, sortorder, releasedate,
                             lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords, country,
                        contact, donor, links, organisation, location,
                        main_issues, tools, budget, timeframe, priority_area,
                        focus, sortorder, releasedate, lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('contact', lang, contact)
        self._setLocalPropValue('donor', lang, donor)
        self._setLocalPropValue('links', lang, links)
        self._setLocalPropValue('organisation', lang, organisation)
        self._setLocalPropValue('location', lang, location)
        self.country = country
        self.main_issues = main_issues
        self.tools = tools
        self.budget = budget
        self.timeframe = timeframe
        self.priority_area = priority_area
        self.focus = focus
        self.sortorder = sortorder
        self.releasedate = releasedate
Esempio n. 5
0
class semdocument_item(Implicit, NyProperties):
    """ """

    title =             LocalProperty('title')
    description =       LocalProperty('description')
    coverage =          LocalProperty('coverage')
    keywords =          LocalProperty('keywords')
    source =            LocalProperty('source')
    creator =           LocalProperty('creator')
    publisher =         LocalProperty('publisher')
    file_link =         LocalProperty('file_link')
    file_link_local =   LocalProperty('file_link_local')

    def __init__(self, title, description, coverage, keywords, sortorder, creator, 
        creator_email, rights, document_type, source, source_link, subject, relation, 
        publisher, file_link, file_link_local, releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder, creator, 
            creator_email, rights, document_type, source, source_link, subject, relation, 
            publisher, file_link, file_link_local, releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords, sortorder, creator, 
        creator_email, rights, document_type, source, source_link, subject, relation, 
        publisher, file_link, file_link_local, releasedate, lang):
        """ Save item properties. """

        self._setLocalPropValue('title',            lang, title)
        self._setLocalPropValue('description',      lang, description)
        self._setLocalPropValue('coverage',         lang, coverage)
        self._setLocalPropValue('keywords',         lang, keywords)
        self._setLocalPropValue('creator',          lang, creator)
        self._setLocalPropValue('source',           lang, source)
        self._setLocalPropValue('publisher',        lang, publisher)
        self._setLocalPropValue('file_link',        lang, file_link)
        self._setLocalPropValue('file_link_local',  lang, file_link_local)
        self.sortorder =        sortorder
        self.creator_email =    creator_email
        self.document_type =    document_type
        self.rights =           rights
        self.source_link =      source_link
        self.subject =          subject
        self.relation =         relation
        self.releasedate =      releasedate
Esempio n. 6
0
class story_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')
    body = LocalProperty('body')
    source = LocalProperty('source')

    def __init__(self, title, description, coverage, keywords, sortorder, body,
                 topitem, resourceurl, source, releasedate, frontpicture,
                 lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder,
                             body, topitem, resourceurl, source, releasedate,
                             frontpicture, lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, body, topitem, resourceurl, source,
                        releasedate, frontpicture, lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('body', lang, body)
        self.sortorder = sortorder
        self.topitem = topitem
        self.resourceurl = resourceurl
        self._setLocalPropValue('source', lang, source)
        self.releasedate = releasedate
        self.frontpicture = frontpicture

    def setFrontPicture(self, p_picture):
        """
        Upload the front page picture.
        """
        if p_picture != '':
            if hasattr(p_picture, 'filename'):
                if p_picture.filename != '':
                    l_read = p_picture.read()
                    if l_read != '':
                        self.frontpicture = l_read
                        self._p_changed = 1
            else:
                self.frontpicture = p_picture
                self._p_changed = 1

    def delFrontPicture(self):
        """
        Delete the front page picture.
        """
        self.frontpicture = None
        self._p_changed = 1
Esempio n. 7
0
class geopoint_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')

    def __init__(self, title, description, coverage, keywords, sortorder, lon_cardinal, lon_ds, lon_ms, 
        lon_ss, lat_cardinal, lat_ds, lat_ms, lat_ss, geo_type, url, pointer, releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder, lon_cardinal, lon_ds, lon_ms, 
        lon_ss, lat_cardinal, lat_ds, lat_ms, lat_ss, geo_type, url, pointer, releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords, sortorder, lon_cardinal, lon_ds, lon_ms, 
        lon_ss, lat_cardinal, lat_ds, lat_ms, lat_ss, geo_type, url, pointer, releasedate, lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self.lon_cardinal = lon_cardinal
        self.lon_ds = lon_ds
        self.lon_ms = lon_ms
        self.lon_ss = lon_ss
        self.lat_cardinal = lat_cardinal
        self.lat_ds = lat_ds
        self.lat_ms = lat_ms
        self.lat_ss = lat_ss
        self.geo_type = geo_type
        self.url = url
        self.pointer = pointer
        self.sortorder = sortorder
        self.releasedate = releasedate
Esempio n. 8
0
 def createProperty(self, p_id, p_value, lang):
     """
     Add a new property.
     @param p_id: property id
     @type p_id: string
     @param p_value: property value
     @type p_value: unicode
     @param lang: language code
     @type lang: string
     """
     self.__dynamic_properties[p_id] = ''
     setattr(self, p_id, LocalProperty(p_id))
     self._setLocalPropValue(p_id, lang, p_value)
     self._p_changed = 1
Esempio n. 9
0
class semproject_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')
    acronym = LocalProperty('acronym')
    programme = LocalProperty('programme')
    objectives = LocalProperty('objectives')
    results = LocalProperty('results')

    def __init__(self, title, description, coverage, keywords, sortorder,
                 acronym, budget, programme, resourceurl, objectives, results,
                 start_date, end_date, releasedate, lang, pr_number, subject):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder,
                             acronym, budget, programme, resourceurl,
                             objectives, results, start_date, end_date,
                             releasedate, lang, pr_number, subject)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, acronym, budget, programme, resourceurl,
                        objectives, results, start_date, end_date, releasedate,
                        lang, pr_number, subject):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('acronym', lang, acronym)
        self._setLocalPropValue('programme', lang, programme)
        self._setLocalPropValue('objectives', lang, objectives)
        self._setLocalPropValue('results', lang, results)
        self.subject = subject
        self.resourceurl = resourceurl
        self.budget = budget
        self.sortorder = sortorder
        self.start_date = start_date
        self.end_date = end_date
        self.releasedate = releasedate
        self.pr_number = pr_number
class reportcomment_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')
    comment = LocalProperty('comment')

    def __init__(self, title, description, coverage, keywords, sortorder,
                 releasedate, lang, comment, name, profession, email):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder,
                             releasedate, lang, comment, name, profession,
                             email)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, releasedate, lang, comment, name,
                        profession, email):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('comment', lang, comment)
        self.name = name
        self.profession = profession
        self.email = email
        self.sortorder = sortorder
        self.releasedate = releasedate
        self.lang = lang
Esempio n. 11
0
class RefTreeNode(LocalPropertyManager, SimpleItem):
    """ """

    meta_type = METATYPE_REFTREENODE
    icon = 'misc_/NaayaCore/RefTreeNode.gif'

    manage_options = (({
        'label': 'Properties',
        'action': 'manage_edit_html'
    }, ) + SimpleItem.manage_options)

    security = ClassSecurityInfo()

    title = LocalProperty('title')

    def __init__(self, id, title, parent, pickable, lang):
        """ """
        self.id = id
        self._setLocalPropValue('title', lang, title)
        self.parent = parent
        self.pickable = pickable

    #zmi actions
    security.declareProtected(view_management_screens, 'manageProperties')

    def manageProperties(self,
                         title='',
                         parent='',
                         pickable='',
                         lang=None,
                         REQUEST=None):
        """ """
        if parent == '': parent = None
        if pickable: pickable = 1
        else: pickable = 0
        if lang is None: lang = self.gl_get_selected_language()
        self._setLocalPropValue('title', lang, title)
        self.parent = parent
        self.pickable = pickable
        self._p_changed = 1
        if REQUEST:
            REQUEST.RESPONSE.redirect('manage_edit_html')

    #zmi pages
    security.declareProtected(view_management_screens, 'manage_edit_html')
    manage_edit_html = PageTemplateFile('zpt/reftreenode_manage_edit',
                                        globals())
class semmultimedia_item(Implicit, NyProperties):
    """ """

    title =         LocalProperty('title')
    description =   LocalProperty('description')
    coverage =      LocalProperty('coverage')
    keywords =      LocalProperty('keywords')
    creator =       LocalProperty('creator')
    source =        LocalProperty('source')


    def __init__(self, title, description, coverage, keywords, sortorder, creator, creator_email, 
            rights, type_multimedia, source, source_link, subject, relation, file_link, 
            file_link_local, format, releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder, creator, creator_email, 
            rights, type_multimedia, source, source_link, subject, relation, file_link, file_link_local, 
            format, releasedate, lang)
        NyProperties.__dict__['__init__'](self)


    def save_properties(self, title, description, coverage, keywords, sortorder, creator, creator_email, rights,
            type_multimedia, source, source_link, subject, relation, file_link, file_link_local, 
            format, releasedate, lang):
        """ Save item properties. """
        self._setLocalPropValue('title',        lang, title)
        self._setLocalPropValue('description',  lang, description)
        self._setLocalPropValue('coverage',     lang, coverage)
        self._setLocalPropValue('keywords',     lang, keywords)
        self._setLocalPropValue('source',       lang, source)
        self._setLocalPropValue('creator',      lang, creator)
        self.sortorder =        sortorder
        self.creator_email =    creator_email
        self.rights =           rights
        self.type_multimedia =  type_multimedia
        self.source_link =      source_link
        self.subject =          subject
        self.relation =         relation
        self.file_link =        file_link
        self.file_link_local =  file_link_local
        self.format =           format
        self.releasedate =      releasedate
Esempio n. 13
0
class semtextlaws_item(Implicit, NyProperties):
    """ """

    title =                 LocalProperty('title')
    description =           LocalProperty('description')
    coverage =              LocalProperty('coverage')
    keywords =              LocalProperty('keywords')
    source =                LocalProperty('source')
    official_journal_ref =  LocalProperty('official_journal_ref')

    def __init__(self, title, description, coverage, keywords, sortorder, source, source_link,
            subject, relation, geozone, file_link, file_link_local, official_journal_ref, type_law,
            original_language, statute, releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder, source, source_link,
            subject, relation, geozone, file_link, file_link_local, official_journal_ref, type_law,
            original_language, statute, releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords, sortorder, source, source_link,
            subject, relation, geozone, file_link, file_link_local, official_journal_ref, type_law,
            original_language, statute, releasedate, lang):
        """ Save item properties. """
        self._setLocalPropValue('title',                lang, title)
        self._setLocalPropValue('description',          lang, description)
        self._setLocalPropValue('coverage',             lang, coverage)
        self._setLocalPropValue('keywords',             lang, keywords)
        self._setLocalPropValue('source',               lang, source)
        self._setLocalPropValue('official_journal_ref', lang, official_journal_ref)
        self.sortorder =            sortorder
        self.source_link =          source_link
        self.subject =              subject
        self.relation =             relation
        self.geozone =              geozone
        self.file_link =            file_link
        self.file_link_local =      file_link_local
        self.type_law =             type_law
        self.original_language =    original_language
        self.statute =              statute
        self.releasedate =          releasedate
Esempio n. 14
0
class semfunding_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')
    funding_source = LocalProperty('funding_source')
    funding_programme = LocalProperty('funding_programme')

    def __init__(self, title, description, coverage, keywords, sortorder,
                 funding_source, funding_programme, funding_type, funding_rate,
                 releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder,
                             funding_source, funding_programme, funding_type,
                             funding_rate, releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, funding_source, funding_programme,
                        funding_type, funding_rate, releasedate, lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('funding_source', lang, funding_source)
        self._setLocalPropValue('funding_programme', lang, funding_programme)
        self.sortorder = sortorder
        self.funding_type = funding_type
        self.funding_rate = funding_rate
        self.releasedate = releasedate
Esempio n. 15
0
class NyPhoto(NyAttributes, LocalPropertyManager, NyItem, Image):
    """ """

    meta_type = METATYPE_NYPHOTO
    icon = 'misc_/NaayaPhotoArchive/NyPhoto.gif'
    icon_marked = 'misc_/NaayaPhotoArchive/NyPhoto_marked.gif'

    manage_options = (
        (
            {'label': 'Properties', 'action': 'manage_edit_html'},
            {'label': 'Displays', 'action': 'manage_displays_html'},
        )
        +
        NyItem.manage_options
    )

    security = ClassSecurityInfo()

    title = LocalProperty('title')
    author = LocalProperty('author')
    source = LocalProperty('source')
    description = LocalProperty('description')

    def __init__(self, id, title, author, source, description, sortorder,
        topitem, onfrontfrom, onfrontto, precondition, content_type,
        quality, displays, approved, approved_by, releasedate, lang):
        """ """
        #image stuff
        self.content_type = content_type
        self.precondition = precondition
        self.id = id
        NyItem.__dict__['__init__'](self)
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('author', lang, author)
        self._setLocalPropValue('source', lang, source)
        self._setLocalPropValue('description', lang, description)
        self.sortorder = sortorder
        self.topitem = topitem
        self.onfrontfrom = onfrontfrom
        self.onfrontto = onfrontto
        self.quality = quality
        self.displays = displays
        self.approved = approved
        self.approved_by = approved_by
        self.releasedate = releasedate
        self.__photos = {}

    security.declarePrivate('objectkeywords')
    def objectkeywords(self, lang):
        return u' '.join([self.getLocalProperty('title', lang),
            self.getLocalProperty('author', lang),
            self.getLocalProperty('source', lang),
            self.getLocalProperty('description', lang)])

    #FTP/WebDAV support
    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'PUT')
    def PUT(self, REQUEST, RESPONSE):
        """ Handle HTTP PUT requests. """
        self.dav__init(REQUEST, RESPONSE)
        if hasattr(self, 'dav__simpleifhandler'):
            self.dav__simpleifhandler(REQUEST, RESPONSE, refresh=1)
        file = REQUEST['BODYFILE']

        self.manage_upload(file)
        self.managePurgeDisplays()

        RESPONSE.setStatus(204)
        return RESPONSE

    security.declareProtected(ftp_access, 'manage_FTPget')
    def manage_FTPget(self):
        """ Handle GET requests. """
        return NyPhoto.inheritedAttribute('manage_FTPget')(self)

    security.declareProtected(ftp_access, 'manage_FTPstat')
    def manage_FTPstat(self, REQUEST):
        """ Handle STAT requests. """
        return NyPhoto.inheritedAttribute('manage_FTPstat')(self, REQUEST)

    #core
    def __get_aspect_ratio_size(self, width, height):
        #return proportional dimensions within desired size
        img_width, img_height = self.width, self.height
        sw = float(width) / img_width
        sh = float(height) / img_height
        if sw <= sh: height = int(sw * img_height + 0.5)
        else: width = int(sh * img_width + 0.5)
        return (width, height)

    def __resize(self, display):
        #resize and resample photo
        width, height = self.displays.get(display, (self.width, self.height))
        width, height = self.__get_aspect_ratio_size(width, height)
        newimg = StringIO()
        img = PIL.Image.open(StringIO(str(self.data)))
        fmt = img.format
        try: img = img.resize((width, height), PIL.Image.ANTIALIAS)
        except AttributeError: img = img.resize((width, height))
        img.save(newimg, fmt, quality=self.quality)
        newimg.seek(0)
        return Image('10', '', newimg)

    def __generate_display(self, display):
        #generates and stores a display
        self.__photos[display] = self.__resize(display)
        self._p_changed = 1

    #api
    def getZipData(self): return str(self.data)

    def get_displays(self):
        #returns a list with all dispays minus 'Thumbnail'
        l = self.displays.keys()
        l.remove('Thumbnail')
        l.sort(lambda x,y,d=self.displays: cmp(d[x][0]*d[x][1], d[y][0]*d[y][1]))
        return l

    def get_displays_edit(self):
        #returns a list with all dispays minus 'Thumbnail'
        l = self.displays.keys()
        l.sort(lambda x,y,d=self.displays: cmp(d[x][0]*d[x][1], d[y][0]*d[y][1]))
        return l

    def is_generated(self, display):
        #return whether display has been generated
        return self.__photos.has_key(display)

    def get_display_info(self, display):
        #returns widht, height, size of the specified display
        photo = self.__photos.get(display, None)
        if photo:
            return (photo.width, photo.height, photo.size)
        else:
            return (None, None, None)

    def get_display_js(self):
        #get code for picture displays
        js_data = []
        js_data.append('<script type="text/javascript"><!--')
        js_data.append('function img_display(display) { document.frmDisplay.imgDisplay.src = "%s" + "/view?display=" + display }' % self.absolute_url())
        js_data.append('// --></script>')
        return '\n'.join(js_data)

    #zmi actions
    security.declareProtected(view_management_screens, 'manageProperties')
    def manageProperties(self, title='', author='', source='', description='',
        sortorder='', approved='', topitem='', onfrontfrom='', onfrontto='',
        content_type='', quality='', releasedate='', discussion='', REQUEST=None):
        """ """
        if self.wl_isLocked():
            raise ResourceLockedError, "File is locked via WebDAV"
        try: sortorder = abs(int(sortorder))
        except: sortorder = DEFAULT_SORTORDER
        if approved: approved = 1
        else: approved = 0
        if topitem: topitem = 1
        else: topitem = 0
        onfrontfrom = self.utConvertStringToDateTimeObj(onfrontfrom)
        onfrontto = self.utConvertStringToDateTimeObj(onfrontto)
        try: quality = abs(int(quality))
        except: quality = DEFAULT_QUALITY
        if quality <= 0 or quality > 100: quality = DEFAULT_QUALITY
        releasedate = self.process_releasedate(releasedate, self.releasedate)
        lang = self.gl_get_selected_language()
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('author', lang, author)
        self._setLocalPropValue('source', lang, source)
        self._setLocalPropValue('description', lang, description)
        self.sortorder = sortorder
        self.topitem = topitem
        self.onfrontfrom = onfrontfrom
        self.onfrontto = onfrontto
        self.content_type = content_type
        self.quality = quality
        if approved != self.approved:
            self.approved = approved
            if approved == 0: self.approved_by = None
            else: self.approved_by = self.REQUEST.AUTHENTICATED_USER.getUserName()
        self.releasedate = releasedate
        self._p_changed = 1
        if discussion: self.open_for_comments()
        else: self.close_for_comments()
        self.recatalogNyObject(self)
        if REQUEST: REQUEST.RESPONSE.redirect('manage_edit_html?save=ok')

    security.declareProtected(view_management_screens, 'manageUpload')
    def manageUpload(self, file='', REQUEST=None):
        """ """
        if self.wl_isLocked():
            raise ResourceLockedError, "File is locked via WebDAV"
        self.manage_upload(file)
        self.managePurgeDisplays()
        if REQUEST: REQUEST.RESPONSE.redirect('manage_edit_html?save=ok')

    security.declareProtected(view_management_screens, 'manageDisplays')
    def manageDisplays(self, display=None, width=None, height=None, REQUEST=None):
        """ """
        if display and width and height:
            for x,y,z in zip(display,width,height):
                self.displays[x] = (int(y), int(z))
        self._p_changed = 1
        if REQUEST: REQUEST.RESPONSE.redirect('manage_displays_html?save=ok')

    security.declareProtected(view_management_screens, 'manageGenerateDisplays')
    def manageGenerateDisplays(self, REQUEST=None):
        """ """
        self.__photos = {}
        map(lambda x: self.__generate_display(x), self.displays.keys())
        self._p_changed = 1
        if REQUEST: REQUEST.RESPONSE.redirect('manage_displays_html?save=ok')

    security.declareProtected(view_management_screens, 'managePurgeDisplays')
    def managePurgeDisplays(self, REQUEST=None):
        """ """
        self.__photos = {}
        self._p_changed = 1
        if REQUEST: REQUEST.RESPONSE.redirect('manage_displays_html?save=ok')

    #site actions
    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'saveProperties')
    def saveProperties(self, title='', author='', source='', description='',
        sortorder='', topitem='', onfrontfrom='', onfrontto='', content_type='',
        quality='', releasedate='', discussion='', lang=None, REQUEST=None):
        """ """
        if not self.checkPermissionEditObject():
            raise EXCEPTION_NOTAUTHORIZED, EXCEPTION_NOTAUTHORIZED_MSG
        if self.wl_isLocked():
            raise ResourceLockedError, "File is locked via WebDAV"
        try: sortorder = abs(int(sortorder))
        except: sortorder = DEFAULT_SORTORDER
        if topitem: topitem = 1
        else: topitem = 0
        onfrontfrom = self.utConvertStringToDateTimeObj(onfrontfrom)
        onfrontto = self.utConvertStringToDateTimeObj(onfrontto)
        try: quality = abs(int(quality))
        except: quality = DEFAULT_QUALITY
        if quality <= 0 or quality > 100: quality = DEFAULT_QUALITY
        releasedate = self.process_releasedate(releasedate, self.releasedate)
        if lang is None: lang = self.gl_get_selected_language()
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('author', lang, author)
        self._setLocalPropValue('source', lang, source)
        self._setLocalPropValue('description', lang, description)
        self.sortorder = sortorder
        self.topitem = topitem
        self.onfrontfrom = onfrontfrom
        self.onfrontto = onfrontto
        self.content_type = content_type
        self.quality = quality
        self.releasedate = releasedate
        self._p_changed = 1
        if discussion: self.open_for_comments()
        else: self.close_for_comments()
        self.recatalogNyObject(self)
        if REQUEST:
            self.setSessionInfo([MESSAGE_SAVEDCHANGES % self.utGetTodayDate()])
            REQUEST.RESPONSE.redirect('%s/edit_html?lang=%s' % (self.absolute_url(), lang))

    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'saveUpload')
    def saveUpload(self, file='', lang=None, REQUEST=None):
        """ """
        if not self.checkPermissionEditObject():
            raise EXCEPTION_NOTAUTHORIZED, EXCEPTION_NOTAUTHORIZED_MSG
        if self.wl_isLocked():
            raise ResourceLockedError, "File is locked via WebDAV"
        if file != '':
            if hasattr(file, 'filename'):
                if file.filename != '':
                    self.manage_upload(file)
                    self.managePurgeDisplays()
        if lang is None: lang = self.get_default_language()
        if REQUEST:
            self.setSessionInfo([MESSAGE_SAVEDCHANGES % self.utGetTodayDate()])
            REQUEST.RESPONSE.redirect('%s/edit_html?lang=%s' % (self.absolute_url(), lang))

    #zmi pages
    security.declareProtected(view_management_screens, 'manage_edit_html')
    manage_edit_html = PageTemplateFile('zpt/photo_manage_edit', globals())

    security.declareProtected(view_management_screens, 'manage_displays_html')
    manage_displays_html = PageTemplateFile('zpt/photo_manage_displays', globals())

    #site pages
    security.declareProtected(view, 'index_html')
    index_html = PageTemplateFile('zpt/photo_index', globals())

    security.declareProtected(view, 'download')
    def download(self, REQUEST, RESPONSE):
        """ """
        self.REQUEST.RESPONSE.setHeader('Content-Type', self.content_type)
        self.REQUEST.RESPONSE.setHeader('Content-Length', self.size)
        self.REQUEST.RESPONSE.setHeader('Content-Disposition', 'attachment;filename=' + self.id)
        return NyPhoto.inheritedAttribute('index_html')(self, REQUEST, RESPONSE)

    security.declareProtected(view, 'view')
    def view(self, REQUEST, RESPONSE, display=None):
        """ """
        if display and self.displays.has_key(display):
            if not self.is_generated(display):
                self.__generate_display(display)
            return self.__photos[display].index_html(REQUEST, RESPONSE)
        return NyPhoto.inheritedAttribute('index_html')(self, REQUEST, RESPONSE)

    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'edit_html')
    edit_html = PageTemplateFile('zpt/photo_edit', globals())
Esempio n. 16
0
class expert_item(NyProperties, File):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')

    def __init__(self, id, title, description, coverage, keywords, surname,
                 name, ref_lang, country, maintopics, subtopics, sortorder,
                 file, precondition, content_type, downloadfilename, email,
                 releasedate, lang):
        """
        Constructor.
        """
        File.__dict__['__init__'](self, id, title, file, content_type,
                                  precondition)
        #"dirty" trick to get rid of the File's title property
        try:
            del self.title
        except:
            pass
        try:
            del self.id
        except:
            pass
        self.save_properties(title, description, coverage, keywords, surname,
                             name, ref_lang, country, maintopics, subtopics,
                             sortorder, downloadfilename, email, releasedate,
                             lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords, surname,
                        name, ref_lang, country, maintopics, subtopics,
                        sortorder, downloadfilename, email, releasedate, lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, '%s %s' % (surname, name))
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self.surname = surname
        self.name = name
        self.ref_lang = ref_lang
        self.country = country
        self.maintopics = maintopics
        self.subtopics = subtopics
        self.sortorder = sortorder
        self.downloadfilename = downloadfilename
        self.email = email
        self.releasedate = releasedate

    def handleUpload(self, file):
        """
        Upload a file from disk.
        """
        if file != '':
            if hasattr(file, 'filename'):
                if file.filename != '':
                    data, size = self._read_data(file)
                    content_type = self._get_content_type(
                        file, data, self.__name__, 'application/octet-stream')
                    self.update_data(data, content_type, size)
            else:
                self.update_data(file)
        self._p_changed = 1
        return cookId('', '', file)[0]
Esempio n. 17
0
class semnews_item(Implicit, NyProperties):
    """ """

    contact_person = LocalProperty('contact_person')
    contact_email = LocalProperty('contact_email')
    contact_phone = LocalProperty('contact_phone')
    creator = LocalProperty('creator')
    rights = LocalProperty('rights')
    title = LocalProperty('title')
    source = LocalProperty('source')
    keywords = LocalProperty('keywords')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    file_link = LocalProperty('file_link')
    file_link_local = LocalProperty('file_link_local')

    def __init__(self, creator, creator_email, contact_person, contact_email,
                 contact_phone, rights, title, news_type, file_link,
                 file_link_local, source, source_link, keywords, description,
                 subject, relation, coverage, news_date, working_langs,
                 sortorder, releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(creator, creator_email, contact_person,
                             contact_email, contact_phone, rights, title,
                             news_type, file_link, file_link_local, source,
                             source_link, keywords, description, subject,
                             relation, coverage, news_date, working_langs,
                             sortorder, releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, creator, creator_email, contact_person,
                        contact_email, contact_phone, rights, title, news_type,
                        file_link, file_link_local, source, source_link,
                        keywords, description, subject, relation, coverage,
                        news_date, working_langs, sortorder, releasedate,
                        lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('creator', lang, creator)
        self._setLocalPropValue('contact_person', lang, contact_person)
        self._setLocalPropValue('contact_email', lang, contact_email)
        self._setLocalPropValue('contact_phone', lang, contact_phone)
        self._setLocalPropValue('rights', lang, rights)
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('source', lang, source)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('file_link', lang, file_link)
        self._setLocalPropValue('file_link_local', lang, file_link_local)
        self.creator_email = creator_email
        self.working_langs = working_langs
        self.news_type = news_type
        self.source_link = source_link
        self.subject = subject
        self.relation = relation
        self.news_date = news_date
        self.sortorder = sortorder
        self.releasedate = releasedate
Esempio n. 18
0
class NyPhotoFolder(NyAttributes, LocalPropertyManager, NyContainer):
    """ """

    meta_type = METATYPE_NYPHOTOFOLDER
    icon = 'misc_/NaayaPhotoArchive/NyPhotoFolder.gif'

    manage_options = (NyContainer.manage_options[0:2] + (
        {
            'label': 'Properties',
            'action': 'manage_edit_html'
        },
        {
            'label': 'Displays',
            'action': 'manage_displays_html'
        },
    ) + NyContainer.manage_options[3:8])

    meta_types = ({
        'name': METATYPE_NYPHOTO,
        'action': 'manage_addNyPhoto_html'
    }, )
    all_meta_types = meta_types

    security = ClassSecurityInfo()

    security.declareProtected(view_management_screens,
                              'manage_addNyPhoto_html')
    manage_addNyPhoto_html = NyPhoto.manage_addNyPhoto_html

    security.declareProtected(PERMISSION_ADD_PHOTO, 'addNyPhoto')
    addNyPhoto = NyPhoto.addNyPhoto

    title = LocalProperty('title')

    def __init__(self, id, title, quality, approved, approved_by, releasedate,
                 lang):
        """ """
        self.id = id
        NyContainer.__dict__['__init__'](self)
        self._setLocalPropValue('title', lang, title)
        self.quality = quality
        self.displays = DEFAULT_DISPLAYS.copy()
        self.approved = approved
        self.approved_by = approved_by
        self.releasedate = releasedate

    security.declarePrivate('objectkeywords')

    def objectkeywords(self, lang):
        return u' '.join([self.getLocalProperty('title', lang)])

    #FTP/WebDAV support
    def PUT_factory(self, name, typ, body):
        """ Create Photo objects by default for image types. """
        if typ[:6] == 'image/':
            if self.glCheckPermissionPublishObjects():
                approved, approved_by = 1, self.REQUEST.AUTHENTICATED_USER.getUserName(
                )
            else:
                approved, approved_by = 0, None
            ob = NyPhoto.NyPhoto(name, '', '', '', '', DEFAULT_SORTORDER, 0,
                                 None, None, '', typ, DEFAULT_QUALITY,
                                 self.displays.copy(), approved, approved_by,
                                 self.process_releasedate(),
                                 self.gl_get_selected_language())
            self.gl_add_languages(ob)
            ob.submitThis()
            return ob
        return None

    #api
    def get_photofolder_object(self):
        return self

    def get_photofolder_path(self, p=0):
        return self.absolute_url(p)

    def getObjects(self):
        return [
            x for x in self.objectValues(METATYPE_NYPHOTO) if x.submitted == 1
        ]

    def getPendingObjects(self):
        return [
            x for x in self.getObjects()
            if x.approved == 0 and x.submitted == 1
        ]

    def getPendingContent(self):
        return self.getPendingObjects()

    def getPublishedObjects(self):
        return [
            x for x in self.getObjects()
            if x.approved == 1 and x.submitted == 1
        ]

    def getPendingFolders(self):
        return []

    def getPublishedFolders(self):
        return []

    def getObjectsForValidation(self):
        return []

    def count_notok_objects(self):
        return 0

    def count_notchecked_objects(self):
        return 0

    def checkPermissionAddPhotos(self):
        return self.checkPermission(PERMISSION_ADD_PHOTO)

    def get_displays_edit(self):
        #returns a list with all dispays minus 'Thumbnail'
        l = self.displays.keys()
        l.sort(lambda x, y, d=self.displays: cmp(d[x][0] * d[x][1], d[y][0] *
                                                 d[y][1]))
        return l

    def process_querystring(self, p_querystring):
        #eliminates empty values and the 'start' key
        if p_querystring:
            l_qsparts = p_querystring.split('&')
            for i in range(len(l_qsparts)):
                if l_qsparts[i] != '':
                    l_qsparts_tuple = l_qsparts[i].split('=', 1)
                    l_key = self.utUnquote(l_qsparts_tuple[0])
                    l_value = self.utUnquote(l_qsparts_tuple[1])
                    if l_value == '' or l_key == 'start':
                        l_qsparts[i] = ''
            return '&'.join(filter(None, l_qsparts))
        else:
            return ''

    def _page_result(self, p_result, p_start):
        #Returns results with paging information
        l_paging_information = (0, 0, 0, -1, -1, 0, NUMBER_OF_RESULTS_PER_PAGE,
                                [0])
        try:
            p_start = abs(int(p_start))
        except:
            p_start = 0
        if len(p_result) > 0:
            l_paging_information = batch_utils(
                NUMBER_OF_RESULTS_PER_PAGE, len(p_result),
                p_start).butGetPagingInformations()
        if len(p_result) > 0:
            return (
                l_paging_information,
                self.utSplitSequence(
                    p_result[l_paging_information[0]:l_paging_information[1]],
                    NUMBER_OF_RESULTS_PER_LINE))
        else:
            return (l_paging_information,
                    self.utSplitSequence([], NUMBER_OF_RESULTS_PER_LINE))

    def query_photos(self, q='', f='', p_start=0):
        #query/filter photos
        lang = self.getLocalizer().get_selected_language()
        if q == '': q = None
        if f == '': f = None
        else: f = 1
        return self._page_result(
            self.query_objects_ex(meta_type=METATYPE_NYPHOTO,
                                  q=q,
                                  lang=lang,
                                  path='/'.join(self.getPhysicalPath()),
                                  topitem=f,
                                  approved=1,
                                  sort_on='releasedate',
                                  sort_order='reverse'), p_start)

    def _page_result_admin(self, p_result, p_start):
        #Returns results with paging information
        l_paging_information = (0, 0, 0, -1, -1, 0, NUMBER_OF_RESULTS_PER_PAGE,
                                [0])
        try:
            p_start = abs(int(p_start))
        except:
            p_start = 0
        if len(p_result) > 0:
            l_paging_information = batch_utils(
                NUMBER_OF_RESULTS_PER_PAGE, len(p_result),
                p_start).butGetPagingInformations()
        if len(p_result) > 0:
            return (
                l_paging_information,
                self.get_archive_listing(
                    p_result[l_paging_information[0]:l_paging_information[1]]))
        else:
            return (l_paging_information, self.get_archive_listing([]))

    def query_photos_admin(self, q='', f='', p_start=0):
        #query/filter photos
        lang = self.getLocalizer().get_selected_language()
        if q == '': q = None
        if f == '': f = None
        else: f = 1
        return self._page_result_admin(
            self.query_objects_ex(meta_type=METATYPE_NYPHOTO,
                                  q=q,
                                  lang=lang,
                                  path='/'.join(self.getPhysicalPath()),
                                  topitem=f,
                                  approved=1,
                                  sort_on='releasedate',
                                  sort_order='reverse'), p_start)

    #zmi actions
    security.declareProtected(view_management_screens, 'manageProperties')

    def manageProperties(self,
                         title='',
                         quality='',
                         approved='',
                         releasedate='',
                         discussion='',
                         REQUEST=None):
        """ """
        try:
            quality = abs(int(quality))
        except:
            quality = DEFAULT_QUALITY
        if quality <= 0 or quality > 100: quality = DEFAULT_QUALITY
        if approved: approved = 1
        else: approved = 0
        releasedate = self.process_releasedate(releasedate, self.releasedate)
        lang = self.gl_get_selected_language()
        self._setLocalPropValue('title', lang, title)
        self.quality = quality
        if approved != self.approved:
            self.approved = approved
            if approved == 0: self.approved_by = None
            else:
                self.approved_by = self.REQUEST.AUTHENTICATED_USER.getUserName(
                )
        self.releasedate = releasedate
        self._p_changed = 1
        if discussion: self.open_for_comments()
        else: self.close_for_comments()
        self.recatalogNyObject(self)
        if REQUEST: REQUEST.RESPONSE.redirect('manage_edit_html?save=ok')

    security.declareProtected(view_management_screens, 'manageDisplays')

    def manageDisplays(self,
                       display=None,
                       width=None,
                       height=None,
                       REQUEST=None):
        """ """
        if display and width and height:
            for x, y, z in zip(display, width, height):
                self.displays[x] = (int(y), int(z))
        self._p_changed = 1
        if REQUEST: REQUEST.RESPONSE.redirect('manage_displays_html?save=ok')

    security.declareProtected(view_management_screens,
                              'manageGenerateDisplays')

    def manageGenerateDisplays(self, REQUEST=None):
        """ """
        map(lambda x: x.manageGenerateDisplays(), self.getObjects())
        if REQUEST: REQUEST.RESPONSE.redirect('manage_displays_html?save=ok')

    security.declareProtected(view_management_screens, 'managePurgeDisplays')

    def managePurgeDisplays(self, REQUEST=None):
        """ """
        map(lambda x: x.managePurgeDisplays(), self.getObjects())
        if REQUEST: REQUEST.RESPONSE.redirect('manage_displays_html?save=ok')

    #site actions
    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'saveProperties')

    def saveProperties(self,
                       title='',
                       quality='',
                       discussion='',
                       lang=None,
                       REQUEST=None):
        """ """
        try:
            quality = abs(int(quality))
        except:
            quality = DEFAULT_QUALITY
        if quality <= 0 or quality > 100: quality = DEFAULT_QUALITY
        if lang is None: lang = self.gl_get_selected_language()
        self._setLocalPropValue('title', lang, title)
        self.quality = quality
        self._p_changed = 1
        if discussion: self.open_for_comments()
        else: self.close_for_comments()
        self.recatalogNyObject(self)
        if REQUEST:
            self.setSessionInfo([MESSAGE_SAVEDCHANGES % self.utGetTodayDate()])
            REQUEST.RESPONSE.redirect('%s/edit_html?lang=%s' %
                                      (self.absolute_url(), lang))

    security.declareProtected(view, 'downloadAllObjects')

    def downloadAllObjects(self, REQUEST=None):
        """
        Download all pictures in a zip file.
        """
        return self.utGenerateZip(name=self.id,
                                  objects=self.getPublishedObjects(),
                                  RESPONSE=REQUEST.RESPONSE)

    security.declareProtected(view, 'downloadObjects')

    def downloadObjects(self, ids=None, REQUEST=None):
        """
        Download selected pictures in a zip file.
        """
        return self.utGenerateZip(name=self.id,
                                  objects=map(self._getOb,
                                              self.utConvertToList(ids)),
                                  RESPONSE=REQUEST.RESPONSE)

    security.declareProtected(PERMISSION_ADD_PHOTO, 'uploadZip')

    def uploadZip(self, file='', REQUEST=None):
        """
        Expand a zipfile into a number of Photos.
        Go through the zipfile and for each file create a I{Naaya Photo} object.
        """
        err = ''
        try:
            if type(file) is not type('') and hasattr(file, 'filename'):
                # According to the zipfile.py ZipFile just needs a file-like object
                zf = ZZipFile(file)
                for name in zf.namelist():
                    zf.setcurrentfile(name)
                    content = zf.read()
                    if self.isValidImage(content):
                        id = name[max(rfind(name, '/'), rfind(name, '\\'),
                                      rfind(name, ':')) + 1:]
                        ob = self._getOb(id, None)
                        if ob:
                            id = '%s_%s' % (PREFIX_NYPHOTO +
                                            self.utGenRandomId(6), id)
                        self.addNyPhoto(id=id,
                                        title=name,
                                        file=content,
                                        lang=self.gl_get_selected_language())
            else:
                err = 'Invalid zip file.'
        except Exception, error:
            err = str(error)
        if REQUEST:
            if err != '':
                self.setSessionErrors([err])
                return REQUEST.RESPONSE.redirect('%s/uploadzip_html' %
                                                 self.absolute_url())
            else:
                self.setSessionInfo(
                    [MESSAGE_SAVEDCHANGES % self.utGetTodayDate()])
                return REQUEST.RESPONSE.redirect('%s/admin_html' %
                                                 self.absolute_url())
Esempio n. 19
0
class HTMLPortlet(LocalPropertyManager, Folder, NyEpozToolbox):
    """ """

    meta_type = METATYPE_HTMLPORTLET
    icon = 'misc_/NaayaCore/HTMLPortlet.gif'

    manage_options = (Folder.manage_options[:3] +
                      ({
                          'label': 'Properties Ex',
                          'action': 'manage_properties_html'
                      }, ) + Folder.manage_options[3:])

    def all_meta_types(self, interfaces=None):
        """ """
        y = []
        additional_meta_types = ['Image', 'File']
        for x in Products.meta_types:
            if x['name'] in additional_meta_types:
                y.append(x)
        return y

    security = ClassSecurityInfo()

    title = LocalProperty('title')
    body = LocalProperty('body')

    def __init__(self, id, title, body, portlettype, lang):
        #constructor
        self.id = id
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('body', lang, body)
        self.portlettype = portlettype
        self.template = ZopePageTemplate('', HTML_PORTLET_TEMPLATE,
                                         'text/html')

    def __call__(self, context={}, *args):
        """ """
        if not context.has_key('args'):
            context['args'] = args
        context['skin_files_path'] = self.getLayoutTool().getSkinFilesPath()
        wrappedTemplate = self.template.__of__(self)
        context['here'] = self
        return wrappedTemplate.pt_render(extra_context=context)

    def get_type_label(self):
        #returns the label for the portlet type
        return PORTLETS_TYPES[self.portlettype]

    #zmi actions
    security.declareProtected(view_management_screens,
                              'manage_properties_html')

    def manage_properties(self, title='', body='', lang=None, REQUEST=None):
        """ """
        if lang is None: lang = self.gl_get_selected_language()
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('body', lang, body)
        self._p_changed = 1
        if REQUEST: REQUEST.RESPONSE.redirect('manage_properties_html?save=ok')

    #zmi pages
    security.declareProtected(view_management_screens,
                              'manage_properties_html')
    manage_properties_html = PageTemplateFile(
        'zpt/htmlportlet_manage_properties', globals())
Esempio n. 20
0
class news_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')
    details = LocalProperty('details')
    source = LocalProperty('source')

    def __init__(self, title, description, coverage, keywords, sortorder,
                 details, expirationdate, topitem, smallpicture, bigpicture,
                 resourceurl, source, releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder,
                             details, expirationdate, topitem, smallpicture,
                             bigpicture, resourceurl, source, releasedate,
                             lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, details, expirationdate, topitem,
                        smallpicture, bigpicture, resourceurl, source,
                        releasedate, lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self.sortorder = sortorder
        self._setLocalPropValue('details', lang, details)
        self.expirationdate = expirationdate
        self.topitem = topitem
        self.resourceurl = resourceurl
        self._setLocalPropValue('source', lang, source)
        self.smallpicture = smallpicture
        self.bigpicture = bigpicture
        self.releasedate = releasedate

    def setSmallPicture(self, p_picture):
        """
        Upload the small picture.
        """
        if p_picture != '':
            if hasattr(p_picture, 'filename'):
                if p_picture.filename != '':
                    l_read = p_picture.read()
                    if l_read != '':
                        self.smallpicture = l_read
                        self._p_changed = 1
            else:
                self.smallpicture = p_picture
                self._p_changed = 1

    def setBigPicture(self, p_picture):
        """
        Upload the big picture.
        """
        if p_picture != '':
            if hasattr(p_picture, 'filename'):
                if p_picture.filename != '':
                    l_read = p_picture.read()
                    if l_read != '':
                        self.bigpicture = l_read
                        self._p_changed = 1
            else:
                self.bigpicture = p_picture
                self._p_changed = 1

    def delSmallPicture(self):
        """
        Delete the small picture.
        """
        self.smallpicture = None
        self._p_changed = 1

    def delBigPicture(self):
        """
        Delete the big picture.
        """
        self.bigpicture = None
        self._p_changed = 1
Esempio n. 21
0
class NyCountry(NyFolder):
    """ """

    meta_type = METATYPE_OBJECT
    meta_label = LABEL_OBJECT
    icon = 'misc_/NaayaContent/NyCountry.gif'
    icon_marked = 'misc_/NaayaContent/NyCountry_marked.gif'

    manage_options = (NyFolder.manage_options)

    security = ClassSecurityInfo()

    nfp_label = LocalProperty('nfp_label')
    nfp_url = LocalProperty('nfp_url')
    link_ins = LocalProperty('link_ins')
    link_doc = LocalProperty('link_doc')
    link_train = LocalProperty('link_train')
    link_rd = LocalProperty('link_rd')
    link_data = LocalProperty('link_data')

    def __init__(self, id, title, description, coverage, keywords, sortorder,
                 smallflag, nfp_label, nfp_url, link_ins, link_doc, link_train,
                 link_rd, link_data, publicinterface, contributor,
                 folder_meta_types, releasedate, lang):
        """ """
        NyFolder.__dict__['__init__'](self, id, title, description, coverage,
                                      keywords, sortorder, publicinterface, '',
                                      contributor, folder_meta_types,
                                      releasedate, lang)
        self._setLocalPropValue('nfp_label', lang, nfp_label)
        self._setLocalPropValue('nfp_url', lang, nfp_url)
        self._setLocalPropValue('link_ins', lang, link_ins)
        self._setLocalPropValue('link_doc', lang, link_doc)
        self._setLocalPropValue('link_train', lang, link_train)
        self._setLocalPropValue('link_rd', lang, link_rd)
        self._setLocalPropValue('link_data', lang, link_data)
        self.smallflag = smallflag

    security.declarePrivate('loadDefaultData')

    def loadDefaultData(self, lang, legislation_feed_url, project_feed_url):
        """ """
        #load country folder skeleton - default content
        path = join(NAAYACONTENT_PRODUCT_PATH, 'NyCountry', 'skel.nyexp')
        import_handler, error = import_parser().parse(self.futRead(path, 'r'))
        if import_handler is not None:
            for object in import_handler.root.objects:
                self.import_data(object)
        else:
            raise Exception, EXCEPTION_PARSINGFILE % (path, error)
        #create right portlets
        addHTMLPortlet(self,
                       id=self.get_portlet_indicators_id(),
                       title='Key indicators',
                       lang=lang)
        addHTMLPortlet(self,
                       id=self.get_portlet_reports_id(),
                       title='Important reports',
                       lang=lang)
        #create remote channels
        manage_addRemoteChannel(self,
                                id=self.get_rc_legislation_id(),
                                title='Legislation on water RSS feed',
                                url=legislation_feed_url)
        manage_addRemoteChannel(self,
                                id=self.get_rc_project_id(),
                                title='Project water RSS feed',
                                url=project_feed_url)

    security.declarePrivate('export_this_tag_custom')

    def export_this_tag_custom(self):
        return 'publicinterface="%s" maintainer_email="%s" folder_meta_types="%s" smallflag="%s" legislation_feed_url="%s" project_feed_url="%s"' % \
            (self.utXmlEncode(self.publicinterface),
                self.utXmlEncode(self.maintainer_email),
                self.utXmlEncode(','.join(self.folder_meta_types)),
                self.utBase64Encode(self.utNoneToEmpty(self.smallflag)),
                self.utXmlEncode(self.get_rc_legislation_url()),
                self.utXmlEncode(self.get_rc_project_url()))

    security.declarePrivate('export_this_body_custom')

    def export_this_body_custom(self):
        r = []
        ra = r.append
        for l in self.gl_get_languages():
            ra('<nfp_label lang="%s"><![CDATA[%s]]></nfp_label>' %
               (l, self.utToUtf8(self.getLocalProperty('nfp_label', l))))
            ra('<nfp_url lang="%s"><![CDATA[%s]]></nfp_url>' %
               (l, self.utToUtf8(self.getLocalProperty('nfp_url', l))))
            ra('<link_ins lang="%s"><![CDATA[%s]]></link_ins>' %
               (l, self.utToUtf8(self.getLocalProperty('link_ins', l))))
            ra('<link_doc lang="%s"><![CDATA[%s]]></link_doc>' %
               (l, self.utToUtf8(self.getLocalProperty('link_doc', l))))
            ra('<link_train lang="%s"><![CDATA[%s]]></link_train>' %
               (l, self.utToUtf8(self.getLocalProperty('link_train', l))))
            ra('<link_rd lang="%s"><![CDATA[%s]]></link_rd>' %
               (l, self.utToUtf8(self.getLocalProperty('link_rd', l))))
            ra('<tooltip lang="%s"><![CDATA[%s]]></tooltip>' %
               (l, self.utToUtf8(self.getLocalProperty('tooltip', l))))
            ra('<link_data lang="%s"><![CDATA[%s]]></link_data>' %
               (l, self.utToUtf8(self.getLocalProperty('link_data', l))))
        #portlets and remote channels
        for l_portlet in self.objectValues('Naaya HTML Portlet'):
            ra('<ob meta_type="%s" id="%s" param="0">' %
               (l_portlet.meta_type, l_portlet.id))
            for l in self.gl_get_languages():
                ra('<title lang="%s"><![CDATA[%s]]></title>' %
                   (l, self.utToUtf8(l_portlet.getLocalProperty('title', l))))
                ra('<body lang="%s"><![CDATA[%s]]></body>' %
                   (l, self.utToUtf8(l_portlet.getLocalProperty('body', l))))
            ra('</ob>')
        for l_channel in self.objectValues('Naaya Remote Channel'):
            ra('<ob meta_type="%s" id="%s" title="%s" url="%s" numbershownitems="%s" param="0"/>'
               % (l_channel.meta_type, l_channel.id, l_channel.title,
                  l_channel.url, l_channel.numbershownitems))
        return ''.join(r)

    def get_left_portlets_objects(self):
        #get the left portlets objects
        l = ['portlet_country_left']
        return filter(lambda x: x is not None,
                      map(self.getPortletsTool()._getOb, l, (None, ) * len(l)))

    def get_right_portlets_objects(self):
        #get the right portlets objects
        l, t = [], self.getPortletsTool()
        p = self.get_portlet_indicators()
        if p is not None: l.append(p)
        p = self.get_portlet_reports()
        if p is not None: l.append(p)
        p = t._getOb('portlet_country_news')
        if p is not None: l.append(p)
        p = t._getOb('portlet_country_events')
        if p is not None: l.append(p)
        p = t._getOb('portlet_country_projects')
        if p is not None: l.append(p)
        return l

    def hasVersion(self):
        """
        Checks if the object is locked.
        @return:
            - B{TRUE/1} if true
            - B{FALSE/0} otherwise
        """
        return 0

    def hasLinksValues(self):
        """
        Checks if the object has at least one link value.
        @return:
            - B{TRUE/1} if true
            - B{FALSE/0} otherwise
        """
        return self.utLinkValue(self.link_ins) or self.utLinkValue(self.link_doc) or \
            self.utLinkValue(self.link_train) or self.utLinkValue(self.link_rd) or \
            self.utLinkValue(self.link_data)

    #api
    def get_country_object(self):
        return self

    def get_country_object_title(self, lang='en'):
        return self.utToUtf8(self.getLocalProperty('title', lang))

    def get_country_object_path(self, p=0):
        return self.absolute_url(p)

    def get_portlet_indicators_id(self):
        return '%sindicators' % PREFIX_PORTLET

    def get_portlet_indicators(self):
        return self._getOb('%sindicators' % PREFIX_PORTLET, None)

    def get_portlet_reports_id(self):
        return '%sreports' % PREFIX_PORTLET

    def get_portlet_reports(self):
        return self._getOb('%sreports' % PREFIX_PORTLET, None)

    def get_rc_legislation_id(self):
        return 'rclegislation'

    def get_rc_legislation(self):
        return self._getOb('rclegislation', None)

    def get_rc_legislation_url(self):
        return self._getOb('rclegislation', None).url

    def get_rc_project_id(self):
        return 'rcproject'

    def get_rc_project(self):
        return self._getOb('rcproject', None)

    def get_rc_project_url(self):
        return self._getOb('rcproject', None).url

    def getCountryNews(self):
        #returns a list with news related with the country
        l_search_key = self.getLocalProperty(
            'title', 'en') + ' or ' + self.getLocalProperty('coverage', 'en')
        expr = 'self.getCatalogedObjects(meta_type=\'%s\', approved=1, howmany=5, coverage_%s=l_search_key)' % (
            METATYPE_NYSEMNEWS, 'en')
        return eval(expr)

    def getCountryEvents(self):
        #returns a list with upcoming events related with the country
        l_search_key = self.getLocalProperty(
            'title', 'en') + ' or ' + self.getLocalProperty('coverage', 'en')
        expr = 'self.getCatalogedObjects(meta_type=\'%s\', approved=1, howmany=5, coverage_%s=l_search_key)' % (
            METATYPE_NYSEMEVENT, 'en')
        return eval(expr)

    def getCountryProjects(self):
        #returns a list with projects related with the country
        l_search_key = self.getLocalProperty('coverage', 'en')
        expr = 'self.getCatalogedObjects(meta_type=\'%s\', approved=1, coverage_%s=l_search_key)' % (
            METATYPE_NYSEMPROJECT, 'en')
        return eval(expr)

    def getCountryContent(self):
        #returns the contained objects sorted by sort order
        return self.utSortObjsListByAttr([
            x for x in self.objectValues(self.searchable_content)
            if x.approved == 1
        ], 'sortorder', 0)

    def inCountryTopic(self, p_topic, p_location):
        #test if the given location is in the context of a country topic
        if isinstance(p_topic, str):
            page = self.REQUEST['URL'].split('/')[-1]
            return page == p_topic
        if p_location == self: return 0
        else:
            l_parent = p_location
            while l_parent.getParentNode() != self:
                l_parent = l_parent.getParentNode()
            return p_topic == l_parent

    def getSmallFlag(self, REQUEST=None):
        """ """
        return self.smallflag

    def hasSmallFlag(self):
        return self.smallflag is not None

    def setSmallFlag(self, source, file, url):
        """
        Upload the small flag.
        """
        if source == 'file':
            if file != '':
                if hasattr(file, 'filename'):
                    if file.filename != '':
                        l_read = file.read()
                        if l_read != '':
                            self.smallflag = l_read
                            self._p_changed = 1
                else:
                    self.smallflag = file
                    self._p_changed = 1
        elif source == 'url':
            if url != '':
                l_data, l_ctype = self.grabFromUrl(url)
                if l_data is not None:
                    self.smallflag = l_data
                    self._p_changed = 1

    def delSmallFlag(self):
        """
        Delete the small flag.
        """
        self.smallflag = None
        self._p_changed = 1

    #zmi actions
    security.declareProtected(view_management_screens, 'manageProperties')

    def manageProperties(self,
                         title='',
                         description='',
                         coverage='',
                         keywords='',
                         sortorder='',
                         publicinterface='',
                         approved='',
                         source='file',
                         flag_file='',
                         flag_url='',
                         del_smallflag='',
                         nfp_label='',
                         nfp_url='',
                         link_ins='',
                         link_doc='',
                         link_train='',
                         link_rd='',
                         link_data='',
                         legislation_feed_url='',
                         project_feed_url='',
                         releasedate='',
                         discussion='',
                         lang='',
                         REQUEST=None,
                         **kwargs):
        """ """
        if not self.checkPermissionEditObject():
            raise EXCEPTION_NOTAUTHORIZED, EXCEPTION_NOTAUTHORIZED_MSG
        try:
            sortorder = abs(int(sortorder))
        except:
            sortorder = DEFAULT_SORTORDER
        if publicinterface: publicinterface = 1
        else: publicinterface = 0
        if approved: approved = 1
        else: approved = 0
        releasedate = self.process_releasedate(releasedate, self.releasedate)
        if not lang: lang = self.gl_get_selected_language()
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('nfp_label', lang, nfp_label)
        self._setLocalPropValue('nfp_url', lang, nfp_url)
        self._setLocalPropValue('link_ins', lang, link_ins)
        self._setLocalPropValue('link_doc', lang, link_doc)
        self._setLocalPropValue('link_train', lang, link_train)
        self._setLocalPropValue('link_rd', lang, link_rd)
        self._setLocalPropValue('link_data', lang, link_data)
        self.sortorder = sortorder
        self.publicinterface = publicinterface
        self.approved = approved
        self.releasedate = releasedate
        self.updatePropertiesFromGlossary(lang)
        self.updateDynamicProperties(
            self.processDynamicProperties(METATYPE_OBJECT, REQUEST, kwargs),
            lang)
        if approved != self.approved:
            if approved == 0: approved_by = None
            else: approved_by = self.REQUEST.AUTHENTICATED_USER.getUserName()
            self.approveThis(approved, approved_by)
        if del_smallflag != '': self.delSmallFlag()
        else: self.setSmallFlag(source, flag_file, flag_url)
        self._p_changed = 1
        if discussion: self.open_for_comments()
        else: self.close_for_comments()
        self.recatalogNyObject(self)
        self.createPublicInterface()
        #update remote channels feeds
        self.get_rc_legislation().set_new_feed_url(legislation_feed_url)
        self.get_rc_project().set_new_feed_url(project_feed_url)
        if REQUEST: REQUEST.RESPONSE.redirect('manage_edit_html?save=ok')

    #site actions
    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'saveProperties')

    def saveProperties(self,
                       title='',
                       description='',
                       coverage='',
                       keywords='',
                       sortorder='',
                       source='file',
                       flag_file='',
                       flag_url='',
                       del_smallflag='',
                       nfp_label='',
                       nfp_url='',
                       link_ins='',
                       link_doc='',
                       link_train='',
                       link_rd='',
                       link_data='',
                       legislation_feed_url='',
                       project_feed_url='',
                       releasedate='',
                       discussion='',
                       lang=None,
                       REQUEST=None,
                       **kwargs):
        """ """
        if not self.checkPermissionEditObject():
            raise EXCEPTION_NOTAUTHORIZED, EXCEPTION_NOTAUTHORIZED_MSG
        if not sortorder: sortorder = DEFAULT_SORTORDER
        if lang is None: lang = self.gl_get_selected_language()
        #check mandatory fiels
        r = self.getSite().check_pluggable_item_properties(METATYPE_OBJECT, title=title, \
            description=description, coverage=coverage, keywords=keywords, sortorder=sortorder, \
            releasedate=releasedate, discussion=discussion, \
            nfp_label=nfp_label, nfp_url=nfp_url, source=source, flag_file=flag_file, flag_url=flag_url, \
            link_ins=link_ins, link_doc=link_doc, link_train=link_train, link_rd=link_rd, link_data=link_data, \
            legislation_feed_url=legislation_feed_url, project_feed_url=project_feed_url)
        if not len(r):
            releasedate = self.process_releasedate(releasedate,
                                                   self.releasedate)
            sortorder = int(sortorder)
            self.sortorder = sortorder
            self.releasedate = releasedate
            self._setLocalPropValue('title', lang, title)
            self._setLocalPropValue('description', lang, description)
            self._setLocalPropValue('coverage', lang, coverage)
            self._setLocalPropValue('keywords', lang, keywords)
            self._setLocalPropValue('nfp_label', lang, nfp_label)
            self._setLocalPropValue('nfp_url', lang, nfp_url)
            self._setLocalPropValue('link_ins', lang, link_ins)
            self._setLocalPropValue('link_doc', lang, link_doc)
            self._setLocalPropValue('link_train', lang, link_train)
            self._setLocalPropValue('link_rd', lang, link_rd)
            self._setLocalPropValue('link_data', lang, link_data)
            if del_smallflag != '': self.delSmallFlag()
            else: self.setSmallFlag(source, flag_file, flag_url)
            self.updatePropertiesFromGlossary(lang)
            self.updateDynamicProperties(
                self.processDynamicProperties(METATYPE_OBJECT, REQUEST,
                                              kwargs), lang)
            self._p_changed = 1
            if discussion: self.open_for_comments()
            else: self.close_for_comments()
            self.recatalogNyObject(self)
            #update remote channels feeds
            self.get_rc_legislation().set_new_feed_url(legislation_feed_url)
            self.get_rc_project().set_new_feed_url(project_feed_url)
            if REQUEST:
                self.setSessionInfo(
                    [MESSAGE_SAVEDCHANGES % self.utGetTodayDate()])
                REQUEST.RESPONSE.redirect('edit_html?lang=%s' % lang)
        else:
            if REQUEST is not None:
                self.setSessionErrors(r)
                self.set_pluggable_item_session(METATYPE_OBJECT, id=id, title=title, \
                    description=description, coverage=coverage, keywords=keywords, \
                    sortorder=sortorder, releasedate=releasedate, discussion=discussion, \
                    nfp_label=nfp_label, nfp_url=nfp_url, source=source, flag_url=flag_url, \
                    link_ins=link_ins, link_doc=link_doc, link_train=link_train, link_rd=link_rd, link_data=link_data, \
                    legislation_feed_url=legislation_feed_url, project_feed_url=project_feed_url, \
                    del_smallflag=del_smallflag)
                REQUEST.RESPONSE.redirect('%s/edit_html?lang=%s' %
                                          (self.absolute_url(), lang))
            else:
                raise Exception, '%s' % ', '.join(r)

    security.declareProtected(PERMISSION_EDIT_OBJECTS,
                              'update_legislation_feed')

    def update_legislation_feed(self, REQUEST=None):
        """ """
        if not self.checkPermissionEditObject():
            raise EXCEPTION_NOTAUTHORIZED, EXCEPTION_NOTAUTHORIZED_MSG
        channel = self.get_rc_legislation()
        channel.harvest_feed()
        if REQUEST:
            if channel.get_feed_bozo_exception() is not None:
                self.setSessionErrors([channel.get_feed_bozo_exception()])
            else:
                self.setSessionInfo(
                    [MESSAGE_SAVEDCHANGES % self.utGetTodayDate()])
            REQUEST.RESPONSE.redirect('%s/legislation_water/' %
                                      self.absolute_url())

    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'update_project_feed')

    def update_project_feed(self, REQUEST=None):
        """ """
        if not self.checkPermissionEditObject():
            raise EXCEPTION_NOTAUTHORIZED, EXCEPTION_NOTAUTHORIZED_MSG
        channel = self.get_rc_project()
        channel.harvest_feed()
        if REQUEST:
            if channel.get_feed_bozo_exception() is not None:
                self.setSessionErrors([channel.get_feed_bozo_exception()])
            else:
                self.setSessionInfo(
                    [MESSAGE_SAVEDCHANGES % self.utGetTodayDate()])
            REQUEST.RESPONSE.redirect('%s/project_water/index_html' %
                                      self.absolute_url())

    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'editPortlet')

    def editPortlet(self, id='', title='', body='', lang=None, REQUEST=None):
        """ """
        if not self.checkPermissionEditObject():
            raise EXCEPTION_NOTAUTHORIZED, EXCEPTION_NOTAUTHORIZED_MSG
        ob = self.getObjectById(id)
        if ob is not None:
            ob.manage_properties(title, body, lang)
        if REQUEST:
            self.setSessionInfo([MESSAGE_SAVEDCHANGES % self.utGetTodayDate()])
            REQUEST.RESPONSE.redirect('%s/editportlet_html?id=%s' %
                                      (self.absolute_url(), id))

    #zmi pages
    security.declareProtected(view_management_screens, 'manage_edit_html')
    manage_edit_html = PageTemplateFile('zpt/country_manage_edit', globals())

    #site pages
    security.declareProtected(view, 'standard_html_header')

    def standard_html_header(self, REQUEST=None, RESPONSE=None, **args):
        """ """
        if not args.has_key('show_edit'): args['show_edit'] = 0
        args['here'] = self.REQUEST.PARENTS[0]
        args['skin_files_path'] = self.getLayoutTool().getSkinFilesPath()
        return self.getFormsTool().getContent(
            args, 'country_custom_header').split(
                '<!--SITE_HEADERFOOTER_MARKER-->')[0]

    security.declareProtected(view, 'standard_html_header')

    def standard_html_footer(self, REQUEST=None, RESPONSE=None):
        """ """
        context = {'here': self.REQUEST.PARENTS[0]}
        context['skin_files_path'] = self.getLayoutTool().getSkinFilesPath()
        return self.getFormsTool().getContent(
            context, 'country_custom_footer').split(
                '<!--SITE_HEADERFOOTER_MARKER-->')[1]

    security.declareProtected(view, 'index_html')

    def index_html(self, REQUEST=None, RESPONSE=None):
        """ """
        if self.publicinterface:
            l_index = self._getOb('index', None)
            if l_index is not None: return l_index()
        return self.getFormsTool().getContent({'here': self}, 'country_index')

    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'edit_html')

    def edit_html(self, REQUEST=None, RESPONSE=None):
        """ """
        return self.getFormsTool().getContent({'here': self}, 'country_edit')

    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'editportlet_html')

    def editportlet_html(self, REQUEST=None, RESPONSE=None):
        """ """
        return self.getFormsTool().getContent({'here': self},
                                              'country_editportlet')
Esempio n. 22
0
class file_item(NyProperties, File):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')

    def __init__(self, id, title, description, coverage, keywords, sortorder,
                 file, precondition, content_type, downloadfilename,
                 releasedate, lang):
        """
        Constructor.
        """
        try:
            id = id()
        except TypeError:
            pass

        File.__dict__['__init__'](self, id, title, file, content_type,
                                  precondition)
        #"dirty" trick to get rid of the File's title property
        try:
            del self.title
        except:
            pass
        try:
            del self.id
        except:
            pass
        self.save_properties(title, description, coverage, keywords, sortorder,
                             downloadfilename, releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def del_file_title(self):
        """
        Removes the File's object 'title' property.
        We are using a LocalProperty 'title'.
        """
        try:
            del self.title
        except:
            pass
        self._p_changed = 1

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, downloadfilename, releasedate, lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self.sortorder = sortorder
        self.downloadfilename = downloadfilename
        self.releasedate = releasedate

    def handleUpload(self, source, file, url):
        """
        Upload a file from disk or from a given URL.
        """
        if source == 'file':
            if file != '':
                if hasattr(file, 'filename'):
                    if file.filename != '':
                        data, size = self._read_data(file)
                        content_type = self._get_content_type(
                            file, data, self.__name__,
                            'application/octet-stream')
                        self.update_data(data, content_type, size)
                else:
                    self.update_data(file)
        elif source == 'url':
            if url != '':
                l_data, l_ctype = self.grabFromUrl(url)
                if l_data is not None:
                    self.update_data(l_data, l_ctype)
                    self.content_type = l_ctype
        self._p_changed = 1
Esempio n. 23
0
class NySemThematicDir(NyFolder):
    """ """
    meta_type = METATYPE_OBJECT
    meta_label = LABEL_OBJECT
    icon        = 'misc_/NaayaContent/NySemThematicDir.gif'
    icon_marked = 'misc_/NaayaContent/NySemThematicDir_marked.gif'

    security = ClassSecurityInfo()

    criteria_keywords = LocalProperty('criteria_keywords')

    def all_meta_types(self, interfaces=None):
        """ What can you put inside me? """
        #filter meta types
        l = list(filter(lambda x: x['name'] in [METATYPE_FOLDER, METATYPE_NYURL, METATYPE_NYEXFILE, METATYPE_NYDOCUMENT], Products.meta_types))
        #handle uninstalled pluggable meta_types
        pluggable_meta_types = self.get_pluggable_metatypes()
        pluggable_installed_meta_types = self.get_pluggable_installed_meta_types()
        t = copy(l)
        for x in t:
            if (x['name'] in pluggable_meta_types) and (x['name'] not in pluggable_installed_meta_types):
                l.remove(x)
        return l

    def __init__(self, id='', title='', description='', coverage='',
                    keywords='', criteria_keywords='', sortorder='', publicinterface='', maintainer_email='', contributor='',
                    folder_meta_types='', releasedate='', criteria_date='', themes='', lang=''):
        NyFolder.__dict__['__init__'](self, id, title, description, coverage,
            keywords, sortorder, publicinterface, maintainer_email, contributor,
            folder_meta_types, releasedate, lang)
        self.themes = themes
        self.criteria_date = criteria_date
        self._setLocalPropValue('criteria_keywords', lang, criteria_keywords)

    security.declarePrivate('export_this_tag_custom')
    def export_this_tag_custom(self):
        return 'publicinterface="%s" maintainer_email="%s" folder_meta_types="%s" themes="%s" criteria_date="%s"' % \
            (self.utXmlEncode(self.publicinterface),
                self.utXmlEncode(self.maintainer_email),
                self.utXmlEncode(','.join(self.folder_meta_types)),
                self.utXmlEncode(self.themes),
                self.utXmlEncode(self.criteria_date))

    security.declarePrivate('export_this_body_custom')
    def export_this_body_custom(self):
        r = []
        ra = r.append
        for l in self.gl_get_languages():
            ra('<criteria_keywords lang="%s"><![CDATA[%s]]></criteria_keywords>' % (l, self.utToUtf8(self.getLocalProperty('criteria_keywords', l))))
        return ''.join(r)


    #zmi actions
    security.declareProtected(view_management_screens, 'manageProperties')
    def manageProperties(self, title='', description='', coverage='', keywords='',
        criteria_keywords='', sortorder='', publicinterface='', approved='', releasedate='',
        criteria_date='', discussion='', themes='', lang='', REQUEST=None, **kwargs):
        """ """
        if not self.checkPermissionEditObject():
            raise EXCEPTION_NOTAUTHORIZED, EXCEPTION_NOTAUTHORIZED_MSG
        try: sortorder = abs(int(sortorder))
        except: sortorder = DEFAULT_SORTORDER
        if publicinterface: publicinterface = 1
        else: publicinterface = 0
        if approved: approved = 1
        else: approved = 0
        themes = self.utConvertToList(themes)
        releasedate = self.process_releasedate(releasedate, self.releasedate)
        criteria_date = self.process_releasedate(criteria_date, self.criteria_date)
        if not lang: lang = self.gl_get_selected_language()
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('criteria_keywords', lang, criteria_keywords)
        self.sortorder = sortorder
        self.publicinterface = publicinterface
        self.themes = themes
        self.approved = approved
        self.releasedate = releasedate
        self.criteria_date = criteria_date

        self.updatePropertiesFromGlossary(lang)
        self.updateDynamicProperties(self.processDynamicProperties(METATYPE_OBJECT, REQUEST, kwargs), lang)
        if approved != self.approved:
            if approved == 0: approved_by = None
            else: approved_by = self.REQUEST.AUTHENTICATED_USER.getUserName()
            self.approveThis(approved, approved_by)
        self._p_changed = 1
        if discussion: self.open_for_comments()
        else: self.close_for_comments()
        self.recatalogNyObject(self)
        self.createPublicInterface()
        #update remote channels feeds
        if REQUEST: REQUEST.RESPONSE.redirect('manage_edit_html?save=ok')


    #site actions
    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'saveProperties')
    def saveProperties(self, title='', description='', coverage='',
        keywords='', criteria_keywords='', sortorder='', maintainer_email='',
        releasedate='', criteria_date='', discussion='', themes='', lang=None,
        REQUEST=None, **kwargs):
        """ """
        if not self.checkPermissionEditObject():
            raise EXCEPTION_NOTAUTHORIZED, EXCEPTION_NOTAUTHORIZED_MSG
        if not sortorder: sortorder = DEFAULT_SORTORDER
        if lang is None: lang = self.gl_get_selected_language()
        #check mandatory fiels
        r = self.getSite().check_pluggable_item_properties(METATYPE_OBJECT, id=id, title=title, \
            description=description, coverage=coverage, keywords=keywords, \
            criteria_keywords=criteria_keywords, sortorder=sortorder, \
            releasedate=releasedate, criteria_date=criteria_date, \
            maintainer_email=maintainer_email, discussion=discussion, themes=themes)
        if not len(r):
            releasedate = self.process_releasedate(releasedate, self.releasedate)
            criteria_date = self.process_releasedate(criteria_date, self.criteria_date)
            sortorder = int(sortorder)
            themes = self.utConvertToList(themes)
            self._setLocalPropValue('title', lang, title)
            self._setLocalPropValue('description', lang, description)
            self._setLocalPropValue('coverage', lang, coverage)
            self._setLocalPropValue('keywords', lang, keywords)
            self._setLocalPropValue('criteria_keywords', lang, criteria_keywords)
            self.sortorder = sortorder
            self.maintainer_email = maintainer_email
            self.themes = themes
            self.releasedate = releasedate
            self.criteria_date = criteria_date

            self.updatePropertiesFromGlossary(lang)
            self.updateDynamicProperties(self.processDynamicProperties(METATYPE_OBJECT, REQUEST, kwargs), lang)
            self._p_changed = 1
            if discussion: self.open_for_comments()
            else: self.close_for_comments()
            self.recatalogNyObject(self)
            #update remote channels feeds
            if REQUEST:
                self.setSessionInfo([MESSAGE_SAVEDCHANGES % self.utGetTodayDate()])
                REQUEST.RESPONSE.redirect('edit_html?lang=%s' % lang)
        else:
            if REQUEST is not None:
                self.setSessionErrors(r)
                self.set_pluggable_item_session(METATYPE_OBJECT, id=id, title=title, \
                    description=description, coverage=coverage, keywords=keywords, \
                    criteria_keywords=criteria_keywords, sortorder=sortorder, \
                    releasedate=releasedate, criteria_date=criteria_date, \
                    maintainer_email=maintainer_email, discussion=discussion, themes=themes, lang=lang)
                REQUEST.RESPONSE.redirect('%s/edit_html?lang=%s' % (self.absolute_url(), lang))
            else:
                raise Exception, '%s' % ', '.join(r)


    security.declareProtected(PERMISSION_EDIT_OBJECTS, 'edit_html')
    def edit_html(self, REQUEST=None, RESPONSE=None):
        """ """
        return self.getFormsTool().getContent({'here': self}, 'semthematicdir_edit')

    #site pages
    security.declareProtected(view, 'index_html')
    def index_html(self, REQUEST=None, RESPONSE=None):
        """ """
        return self.getFormsTool().getContent({'here': self}, 'semthematicdir_index') 

    def hasVersion(self):
        """
        Checks if the object is locked.
        @return:
            - B{TRUE/1} if true
            - B{FALSE/0} otherwise
        """
        return 0

    def format_results(self, p_objects=[], skey='', rkey='', ps_start=''):
        """Return sorted events"""
        results = []
        res_per_page = 10
        try:    ps_start = int(ps_start)
        except: ps_start = 0
        try:    rkey = int(rkey)
        except: rkey = 0

        if skey == 'date':
            p_objects.sort(lambda x,y: cmp(y.bobobase_modification_time(), x.bobobase_modification_time()))
            results.extend(p_objects)
        else:
            l_objects = self.utSortObjsByLocaleAttr(p_objects, skey, rkey, self.gl_get_selected_language())
            results.extend(l_objects)

        #batch related
        batch_obj = batch_utils(res_per_page, len(results), ps_start)
        if len(results) > 0:
            paging_informations = batch_obj.butGetPagingInformations()
        else:
            paging_informations = (-1, 0, 0, -1, -1, 0, res_per_page, [0])
        return (paging_informations, (1, 1, results[paging_informations[0]:paging_informations[1]]))

    security.declareProtected(view, 'getThDirPortletsData')
    def getThDirPortletsData(self, skey='', rkey='', ps_start=''):
        """
        Returns a list of news, events, projects and all the rest of the object types
        """
        #return nothing if no themes were selected
        if self.themes==[''] and self.criteria_keywords=='': return [[],[],[],[]]
        #query the thesaurus for concepts
        lang = self.gl_get_selected_language()
        th_list = self.themes
        added_any_word = False
        portal_thesaurus = self.getPortalThesaurus()
        l_allconcepts = {}
        l_additional_concepts = {}
        for lang in self.gl_get_languages():
            l_allconcepts[lang] = []
            l_additional_concepts[lang] = []
            if th_list != ['']:
                for theme_id in th_list:
                    terms_list = []
                    for k in portal_thesaurus.getThemeConcept(theme_id, lang):
                        if k.concept_name: terms_list.append(k.concept_name)
                    if terms_list != ['']:
                        added_any_word = True
                        l_allconcepts[lang].extend(terms_list)
            l_additional = self.getLocalProperty('criteria_keywords', lang)
            l_additional_list = [x.strip() for x in l_additional.split(',') if x.strip()!='']
            l_additional_concepts[lang].extend(l_additional_list)
            if l_additional_list != ['']:
                l_allconcepts[lang].extend(l_additional_list)
                added_any_word = True

        if added_any_word:
            ThesaurusData = self.getThDirPortletsDataSpecific
            l_news     = ThesaurusData(l_allconcepts, l_additional_concepts, p_news=1, p_amount=5)
            l_events   = ThesaurusData(l_allconcepts, l_additional_concepts, p_events=1, p_amount=5)
            l_projects = ThesaurusData(l_allconcepts, l_additional_concepts, p_projects=1, p_amount=0)

            l_rest     = ThesaurusData(l_allconcepts, l_additional_concepts, p_amount=0)
            l_rest     = self.format_results(l_rest, skey, rkey, ps_start)

            return [l_news, l_events, l_projects, l_rest]
        else:
            return [[],[],[],[]]


    security.declareProtected(view, 'getThDirPortletsData')
    def getThDirPortletsDataSpecific(self, p_allconcepts, p_additional_list, p_news=0, p_events=0, p_projects=0, p_amount=0,):
        """
        Returns a list of specific object type
        """
        results = []
        l_meta = []
        l_meta_sbj = []
        lang = self.gl_get_selected_language()
        obs_with_subject = [METATYPE_NYSEMDOCUMENT, METATYPE_NYSEMMULTIMEDIA, METATYPE_NYSEMTEXTLAWS, \
                            METATYPE_NYSEMNEWS, METATYPE_NYSEMEVENT, METATYPE_NYSEMPROJECT]

        #decide the searchable metatypes
        if p_news:
            l_meta.append(METATYPE_NYSEMNEWS)
        elif p_events:
            l_meta.append(METATYPE_NYSEMEVENT)
        elif p_projects:
            l_meta.append(METATYPE_NYSEMPROJECT)
        else:
            l_meta.extend(self.get_pluggable_installed_meta_types())
            l_meta.append(METATYPE_FOLDER)
            l_meta.remove(METATYPE_NYSEMNEWS)
            l_meta.remove(METATYPE_NYSEMEVENT)
            l_meta.remove(METATYPE_NYSEMPROJECT)
            l_meta.remove(self.meta_type)

        for k in l_meta:
            if k in obs_with_subject:
                l_meta_sbj.append(k)
                l_meta.remove(k)

        res = []
        #search for objects with subject property
        query = {}
        if l_meta_sbj:
            if self.themes != ['']:
                for th in self.themes:
                    expr = 'self.getCatalogedObjects(meta_type=l_meta_sbj, approved=1, resource_subject=th, releasedate=self.criteria_date, releasedate_range=\'min\')'
                    res.extend(eval(expr))

        #search for objects without subject property
        query = {}
        if l_meta:
            for lang in self.gl_get_languages():
                if len(p_allconcepts[lang]):
                    #split the lists of concepts
                    l_nos = range(0, len(p_allconcepts[lang]), 100)
                    l_nos2 = l_nos[:]
                    l_nos2.remove(0)
                    l_nos2.append(len(p_allconcepts[lang])+1)
                    l_nos2 = [x-1 for x in l_nos2]
                    l_concepts = {}
                    l_concepts[lang] = [p_allconcepts[lang][l_nos[i]:l_nos2[i]] for i in range(len(l_nos))]

                    for sub_list in l_concepts[lang]:
                        query[lang] = ' or '.join(['"%s"' % self.utStrEscapeForSearch(x) for x in sub_list])
                        expr = 'self.getCatalogedObjects(meta_type=l_meta, approved=1, objectkeywords_%s=query[\'%s\'], releasedate=self.criteria_date, releasedate_range=\'min\')' % (lang, lang)
                        res.extend(eval(expr))

        #search after additional keywords
        query = {}
        all_meta = []
        all_meta.extend(l_meta_sbj)
        all_meta.extend(l_meta)
        for l_meta in all_meta:
            for lang in self.gl_get_languages():
                if p_additional_list[lang]:
                    query[lang] = ' or '.join(['"%s"' % self.utStrEscapeForSearch(x) for x in p_additional_list[lang]])
                    expr = 'self.getCatalogedObjects(meta_type=l_meta, approved=1, objectkeywords_%s=query[\'%s\'], releasedate=self.criteria_date, releasedate_range=\'min\')' % (lang, lang)
                    res.extend(eval(expr))

        results = self.utEliminateDuplicatesByURL(res)

        if p_amount:
            results.sort(lambda x,y: cmp(y.bobobase_modification_time(), x.bobobase_modification_time()))
            return results[:p_amount]
        return results


    #zmi pages
    security.declareProtected(view_management_screens, 'manage_edit_html')
    manage_edit_html = PageTemplateFile('zpt/semthematicdir_manage_edit', globals())

    security.declareProtected(view_management_screens, 'manage_folder_subobjects_html')
    manage_folder_subobjects_html = PageTemplateFile('zpt/semthematicdir_manage_subobjects', globals())

    security.declarePrivate('setReleaseDate')
    def setCriteriaDate(self, criteria_date):
        """
        Set the release date of the current object.
        @param releasedate: the date
        @type releasedate: DateTime
        """
        self.criteria_date = self.utGetDate(criteria_date)
        self._p_changed = 1

    #utils
    def utSortObjsByLocaleAttr(self, p_list, p_attr, p_desc=1, p_locale=''):
        """Sort a list of objects by an attribute values based on locale"""
        if not p_locale:
            #normal sorting
            l_len = len(p_list)
            l_temp = map(None, map(getattr, p_list, (p_attr,)*l_len), xrange(l_len), p_list)
            l_temp.sort()
            if p_desc: l_temp.reverse()
            return map(operator.getitem, l_temp, (-1,)*l_len)
        else:
            #locale sorting based
            try:
                default_locale = locale.setlocale(locale.LC_ALL)

                try:
                    #try to set for NT, WIN operating systems
                    locale.setlocale(locale.LC_ALL, p_locale)
                except:
                    #try to set for other operating system
                    if p_locale == 'ar': p_locale = 'ar_DZ'
                    else:                p_locale = '%s_%s' % (p_locale, p_locale.upper())
                    locale.setlocale(locale.LC_ALL, p_locale)

                #sorting
                l_len = len(p_list)
                l_temp = map(None, map(getattr, p_list, (p_attr,)*l_len), xrange(l_len), p_list)
                l_temp.sort(lambda x, y: locale.strcoll(x[0], y[0]))
                if p_desc: l_temp.reverse()

                locale.setlocale(locale.LC_ALL, default_locale)
                return map(operator.getitem, l_temp, (-1,)*l_len)
            except:
                #in case of failure make a normal sorting
                locale.setlocale(locale.LC_ALL, default_locale)
                return self.utSortObjsByLocaleAttr(p_list, p_attr, p_desc)
Esempio n. 24
0
class semevent_item(Implicit, NyProperties):
    """ """

    contact_person = LocalProperty('contact_person')
    creator = LocalProperty('creator')
    title = LocalProperty('title')
    keywords = LocalProperty('keywords')
    description = LocalProperty('description')
    source = LocalProperty('source')
    coverage = LocalProperty('coverage')
    organizer = LocalProperty('organizer')
    address = LocalProperty('address')
    duration = LocalProperty('duration')
    file_link = LocalProperty('file_link')
    file_link_copy = LocalProperty('file_link_copy')

    def __init__(self, title, description, coverage, keywords, sortorder,
                 creator, creator_email, topitem, event_type, source,
                 source_link, file_link, file_link_copy, subject, relation,
                 organizer, duration, geozone, address, start_date, end_date,
                 event_status, contact_person, contact_email, contact_phone,
                 working_langs, releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder,
                             creator, creator_email, topitem, event_type,
                             source, source_link, file_link, file_link_copy,
                             subject, relation, organizer, duration, geozone,
                             address, start_date, end_date, event_status,
                             contact_person, contact_email, contact_phone,
                             working_langs, releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, creator, creator_email, topitem, event_type,
                        source, source_link, file_link, file_link_copy,
                        subject, relation, organizer, duration, geozone,
                        address, start_date, end_date, event_status,
                        contact_person, contact_email, contact_phone,
                        working_langs, releasedate, lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('contact_person', lang, contact_person)
        self._setLocalPropValue('creator', lang, creator)
        self._setLocalPropValue('source', lang, source)
        self._setLocalPropValue('organizer', lang, organizer)
        self._setLocalPropValue('duration', lang, duration)
        self._setLocalPropValue('address', lang, address)
        self._setLocalPropValue('file_link', lang, file_link)
        self._setLocalPropValue('file_link_copy', lang, file_link_copy)
        self.contact_email = contact_email
        self.contact_phone = contact_phone
        self.working_langs = working_langs
        self.sortorder = sortorder
        self.creator_email = creator_email
        self.topitem = topitem
        self.event_type = event_type
        self.source_link = source_link
        self.subject = subject
        self.relation = relation
        self.geozone = geozone
        self.start_date = start_date
        self.end_date = end_date
        self.event_status = event_status
        self.releasedate = releasedate
class NyTalkBackConsultation(NyAttributes, Implicit, NyProperties, NyContainer,
                             NyNonCheckControl, utils):
    """ """

    meta_type = METATYPE_TALKBACKCONSULTATION
    meta_label = LABEL_OBJECT

    meta_types = [
        {
            'name': METATYPE_TALKBACKCONSULTATION_SECTION,
            'action': 'addSection',
            'permission': PERMISSION_MANAGE_TALKBACKCONSULTATION
        },
    ]

    icon = 'misc_/NaayaContent/NyTalkBackConsultation.gif'
    icon_marked = 'misc_/NaayaContent/NyTalkBackConsultation_marked.gif'

    title = LocalProperty('title')
    description = LocalProperty('description')

    security = ClassSecurityInfo()

    def __init__(self, id, title, description, sortorder, start_date, end_date,
                 public_registration, allow_file, allow_reviewer_invites,
                 contributor, releasedate, lang):
        """ """

        self.id = id
        self.contributor = contributor
        NyContainer.__dict__['__init__'](self)
        self.save_properties(title, description, sortorder, start_date,
                             end_date, public_registration, allow_file,
                             allow_reviewer_invites, releasedate, lang)

        NyProperties.__dict__['__init__'](self)
        self.invitations = InvitationsContainer('invitations')
        self.submitted = 1

    def set_allow_reviewer_invites(self, allow):
        perm = '_Naaya___Invite_to_TalkBack_Consultation_Permission'
        roles = getattr(self, perm, [])

        if allow and 'Reviewer' not in roles:
            roles.append('Reviewer')
        elif not allow and 'Reviewer' in roles:
            roles.remove('Reviewer')

        if roles:
            setattr(self, perm, roles)
        else:
            if hasattr(self, perm):
                delattr(self, perm)

    def get_allow_reviewer_invites(self):
        perm = '_Naaya___Invite_to_TalkBack_Consultation_Permission'
        roles = getattr(self, perm, [])
        return ('Reviewer' in roles)

    allow_reviewer_invites = property(get_allow_reviewer_invites,
                                      set_allow_reviewer_invites)

    security.declarePrivate('save_properties')

    def save_properties(self, title, description, sortorder, start_date,
                        end_date, public_registration, allow_file,
                        allow_reviewer_invites, releasedate, lang):

        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)

        if not hasattr(self, 'imageContainer'):
            self.imageContainer = NyImageContainer(self, True)

        if start_date:
            self.start_date = self.utConvertStringToDateTimeObj(start_date)
        else:
            self.start_date = self.utGetTodayDate()

        if end_date:
            self.end_date = self.utConvertStringToDateTimeObj(end_date)
        else:
            self.end_date = self.utGetTodayDate()

        try:
            self.sortorder = abs(int(sortorder))
        except:
            self.sortorder = DEFAULT_SORTORDER

        self.releasedate = releasedate
        self.public_registration = public_registration
        self.allow_file = allow_file
        self.allow_reviewer_invites = allow_reviewer_invites

    security.declareProtected(PERMISSION_MANAGE_TALKBACKCONSULTATION,
                              'saveProperties')

    def saveProperties(self,
                       title='',
                       description='',
                       sortorder='',
                       start_date='',
                       end_date='',
                       public_registration='',
                       allow_file='',
                       allow_reviewer_invites=False,
                       lang='',
                       REQUEST=None):
        """ """

        if not title:
            self.setSession('title', title)
            self.setSession('description', description)
            self.setSessionErrors(['The Title field must have a value.'])
            if REQUEST:
                return REQUEST.RESPONSE.redirect('%s/edit_html?lang=%s' %
                                                 (self.absolute_url(), lang))
            else:
                raise ValueError('The title field must have a value.')

        releasedate = self.releasedate
        self.updateRequestRoleStatus(public_registration, lang)
        self.save_properties(title, description, sortorder, start_date,
                             end_date, public_registration, allow_file,
                             allow_reviewer_invites, releasedate, lang)

        if REQUEST:
            self.setSessionInfo([MESSAGE_SAVEDCHANGES % self.utGetTodayDate()])
            REQUEST.RESPONSE.redirect('%s/edit_html?lang=%s' %
                                      (self.absolute_url(), lang))

    security.declarePrivate('addDynProp')

    def addDynProp(self):
        """ """
        dynprop_tool = self.getDynamicPropertiesTool()
        if not hasattr(dynprop_tool, METATYPE_OBJECT):
            dynprop_tool.manage_addDynamicPropertiesItem(id=METATYPE_OBJECT,
                                                         title=METATYPE_OBJECT)
            dynprop_tool._getOb(METATYPE_OBJECT).manageAddDynamicProperty(
                id='show_contributor_request_role',
                name=
                'Allow visitors to register as reviewers for this consultation',
                type='boolean')

    security.declareProtected(PERMISSION_MANAGE_TALKBACKCONSULTATION,
                              'updateRequestRoleStatus')

    def updateRequestRoleStatus(self, public_registration, lang):
        """ Allow public registration for this consultation """
        if public_registration:
            self.updateDynamicProperties(
                self.processDynamicProperties(
                    METATYPE_TALKBACKCONSULTATION,
                    {'show_contributor_request_role': 'on'}), lang)
        if not public_registration:
            self.updateDynamicProperties(
                self.processDynamicProperties(
                    METATYPE_TALKBACKCONSULTATION,
                    {'show_contributor_request_role': ''}), lang)

    security.declareProtected(PERMISSION_MANAGE_TALKBACKCONSULTATION,
                              'checkReviewerRole')

    def checkReviewerRole(self):
        """
        Checks if the 'Reviewer' role exists,
        creates and adds review permissions if it doesn't exist
        """

        auth_tool = self.getAuthenticationTool()
        roles = auth_tool.list_all_roles()
        PERMISSION_GROUP = 'Review content'

        if PERMISSION_GROUP not in auth_tool.listPermissions().keys():
            auth_tool.addPermission(
                PERMISSION_GROUP,
                'Allow posting reviews/comments to consultation objects.',
                [PERMISSION_REVIEW_TALKBACKCONSULTATION])
        else:
            permissions = auth_tool.getPermission(PERMISSION_GROUP).get(
                'permissions', [])
            if PERMISSION_REVIEW_TALKBACKCONSULTATION not in permissions:
                permissions.append(PERMISSION_REVIEW_TALKBACKCONSULTATION)
                auth_tool.editPermission(
                    PERMISSION_GROUP,
                    'Allow posting reviews/comments to consultation objects.',
                    permissions)

        if 'Reviewer' not in roles:
            auth_tool.addRole('Reviewer', [PERMISSION_GROUP])
        else:
            role_permissions = auth_tool.getRolePermissions('Reviewer')
            if PERMISSION_GROUP not in role_permissions:
                role_permissions.append(PERMISSION_GROUP)
                auth_tool.editRole('Reviewer', role_permissions)

        #give permissions to administrators and reviewers
        admin_permissions = self.permissionsOfRole('Administrator')
        site = self.getSite()
        if PERMISSION_MANAGE_TALKBACKCONSULTATION not in admin_permissions:
            site.manage_permission(PERMISSION_MANAGE_TALKBACKCONSULTATION,
                                   ('Administrator', ),
                                   acquire=1)
            site.manage_permission(PERMISSION_REVIEW_TALKBACKCONSULTATION, (
                'Administrator',
                'Reviewer',
            ),
                                   acquire=1)

    security.declareProtected(view, 'get_consultation')

    def get_consultation(self):
        return self

    security.declareProtected(view, 'list_sections')

    def list_sections(self):
        """ """
        sections = self.objectValues([METATYPE_TALKBACKCONSULTATION_SECTION])
        sections.sort(lambda x, y: cmp(x.title, y.title))
        return sections

    security.declareProtected(view, 'get_start_date')

    def get_start_date(self):
        """ Returns the start date in dd/mm/yyyy string format. """

        return self.utConvertDateTimeObjToString(self.start_date)

    security.declareProtected(view, 'get_end_date')

    def get_end_date(self):
        """ Returns the end date in dd/mm/yyyy string format. """

        return self.utConvertDateTimeObjToString(self.end_date)

    security.declareProtected(view, 'get_days_left')

    def get_days_left(self):
        """ Returns the remaining days for the consultation or the number of days before it starts """

        today = self.utGetTodayDate().earliestTime()
        if not self.start_date or not self.end_date:
            return (1, 0)

        if self.start_date.lessThanEqualTo(today):
            return (1, int(str(self.end_date - today).split('.')[0]))
        else:
            return (0, int(str(self.start_date - today).split('.')[0]))

    security.declareProtected(view_management_screens, 'manage_options')

    def manage_options(self):
        """ """

        l_options = (NyContainer.manage_options[0], )
        l_options += ({'label': 'View', 'action': 'index_html'},) + \
                  NyContainer.manage_options[3:8]
        return l_options

    def get_user_name(self):
        # first, check if we have an invite key
        invitation = self.invitations.get_current_invitation(self.REQUEST)
        if invitation is not None:
            return invitation.name

        # no invite key; look for current Zope user
        auth_tool = self.getAuthenticationTool()
        userid = auth_tool.get_current_userid()

        if userid is None:  # anonymous user
            return None

        name = auth_tool.name_from_userid(userid)
        if name == '':
            name = userid
        return name

    def get_user_name_or_userid(self, userid=None):
        if userid is None:
            return self.get_user_name()

        auth_tool = self.getAuthenticationTool()
        name = auth_tool.name_from_userid(userid)
        if name == '':
            name = userid

        return name

    def checkTalkBackConsultationUser(self):
        """
        Checks if the user is logged in and has reviewer rights:
        0 if user is anonymous,
        1 if user has reviewer role
        2 if user doesn't have reviewer role
        """
        review_check = self.checkPermissionReviewTalkBackConsultation()

        if self.isAnonymousUser(): return 0
        elif review_check: return 1
        elif not review_check: return 2

    security.declareProtected(view, 'check_cannot_comment')

    def check_cannot_comment(self):
        """ """

        if not self.checkPermissionReviewTalkBackConsultation():
            return 'no-permission'

        if self.get_days_left()[1] <= 0:
            return 'deadline-reached'

    security.declareProtected(PERMISSION_COMMENTS_ADD, 'log_in_authenticated')

    def log_in_authenticated(self, REQUEST=None):
        """ Log in user and redirect to TalkBack Consultation index """
        if REQUEST is not None:
            self.REQUEST.RESPONSE.redirect(self.absolute_url())

    #permissions
    def checkPermissionReviewTalkBackConsultation(self):
        """
        Check for reviewing the TalkBack Consultation.
        """
        return self.checkPermission(PERMISSION_REVIEW_TALKBACKCONSULTATION)

    def checkPermissionManageTalkBackConsultation(self):
        """
        Check for managing the TalkBack Consultation.
        """
        return self.checkPermission(PERMISSION_MANAGE_TALKBACKCONSULTATION)

    def checkPermissionInviteToTalkBackConsultation(self):
        """
        Check for inviting others to the TalkBack Consultation.
        """
        return self.checkPermission(PERMISSION_INVITE_TO_TALKBACKCONSULTATION)

    security.declareProtected(view, 'custom_editor')

    def custom_editor(self, editor_tool, lang, dom_id):
        extra_options = {
            'content_css':
            [self.absolute_url() + '/misc_/NaayaContent/tb-editor.css'],
            'theme_advanced_buttons1': [
                'bold,italic,underline,strikethrough,sub,sup,forecolor,'
                'backcolor,removeformat,separator,'
                'bullist,numlist,separator,'
                'justifyleft,justifycenter,justifyright,justifyfull,separator,'
                'link,unlink,hr,image,separator,'
                'pastetext,pasteword,cleanup,code,help'
            ],
            'theme_advanced_buttons2': [''],
        }
        return editor_tool.render(dom_id,
                                  lang,
                                  image_support=True,
                                  extra_options=extra_options)

    addSection = addSection

    #zmi pages
    security.declareProtected(view_management_screens, 'manage_edit_html')
    manage_edit_html = PageTemplateFile('zpt/talkbackconsultation_manage_edit',
                                        globals())

    #site pages
    security.declareProtected(view, 'index_html')
    index_html = NaayaPageTemplateFile('zpt/talkbackconsultation_index',
                                       globals(), 'tbconsultation_index')

    # header and footer templates are proxied since invited reviewers
    # have "View" permission only in this folder; if the consultation
    # is restricted, they would not be able to see consultation pages.
    def standard_html_header(self, *args, **kwargs):
        return self.aq_parent.standard_html_header(*args, **kwargs)

    def standard_html_footer(self, *args, **kwargs):
        return self.aq_parent.standard_html_footer(*args, **kwargs)

    security.declareProtected(PERMISSION_MANAGE_TALKBACKCONSULTATION,
                              'edit_html')
    edit_html = PageTemplateFile('zpt/talkbackconsultation_edit', globals())

    security.declareProtected(PERMISSION_MANAGE_TALKBACKCONSULTATION,
                              'section_add_html')
    section_add_html = addSection_html

    __allow_groups__ = InvitationUsersTool()
    _View_Permission = ['InvitedReviewer']
    _Naaya___Review_TalkBack_Consultation_Permission = ['InvitedReviewer']
    __ac_roles__ = ['InvitedReviewer']

    admin_comments = CommentsAdmin('admin_comments')
Esempio n. 26
0
class contact_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')
    personaltitle = LocalProperty('personaltitle')
    jobtitle = LocalProperty('jobtitle')
    firstname = LocalProperty('firstname')
    lastname = LocalProperty('lastname')
    department = LocalProperty('department')
    organisation = LocalProperty('organisation')
    postaladdress = LocalProperty('postaladdress')

    def __init__(self, title, description, coverage, keywords, sortorder,
                 personaltitle, firstname, lastname, jobtitle, department,
                 organisation, postaladdress, phone, fax, cellphone, email,
                 webpage, releasedate, lang):
        """
        Constructor.
        """
        self.save_properties(title, description, coverage, keywords, sortorder,
                             personaltitle, firstname, lastname, jobtitle,
                             department, organisation, postaladdress, phone,
                             fax, cellphone, email, webpage, releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, personaltitle, firstname, lastname,
                        jobtitle, department, organisation, postaladdress,
                        phone, fax, cellphone, email, webpage, releasedate,
                        lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('personaltitle', lang, personaltitle)
        self._setLocalPropValue('jobtitle', lang, jobtitle)
        self._setLocalPropValue('firstname', lang, firstname)
        self._setLocalPropValue('lastname', lang, lastname)
        self._setLocalPropValue('department', lang, department)
        self._setLocalPropValue('organisation', lang, organisation)
        self._setLocalPropValue('postaladdress', lang, postaladdress)
        self.phone = phone
        self.fax = fax
        self.cellphone = cellphone
        self.email = email
        self.webpage = webpage
        self.sortorder = sortorder
        self.releasedate = releasedate
Esempio n. 27
0
class exfile_item(Implicit, NyProperties):
    """ """

    title = LocalProperty('title')
    description = LocalProperty('description')
    coverage = LocalProperty('coverage')
    keywords = LocalProperty('keywords')
    downloadfilename = LocalProperty('downloadfilename')

    def __init__(self, id, title, description, coverage, keywords, sortorder,
                 file, precondition, content_type, downloadfilename,
                 releasedate, lang):
        """
        Constructor.
        """
        self.__files = {}
        self.__files[lang] = file_item(id, title, file, content_type,
                                       precondition)
        self.save_properties(title, description, coverage, keywords, sortorder,
                             downloadfilename, releasedate, lang)
        NyProperties.__dict__['__init__'](self)

    def getFileItems(self):
        return self.__files

    def setFileItems(self, files):
        self.__files = files
        self._p_changed = 1

    def copyFileItems(self, source, target):
        """ """
        files = {}
        for k, v in source.getFileItems().items():
            files[k] = file_item(v.getId(), v.title, '', v.precondition,
                                 v.content_type)
            files[k].update_data(v.get_data(as_string=False))
            files[k].content_type = v.content_type
            files[k].precondition = v.precondition
            files[k].copyVersions(v)
        target.setFileItems(files)

    def getFileItem(self, lang=None):
        """ """
        if lang is None: lang = self.gl_get_selected_language()
        if not self.__files.has_key(lang):
            self.__files[lang] = file_item('', '', '', '', '')
            self._p_changed = 1
        return self.__files[lang]

    def getFileItemData(self, lang=None, as_string=False):
        fileitem = self.getFileItem(lang)
        return fileitem.get_data(as_string=as_string)

    def size(self, lang=None):
        """ """
        if lang is None: lang = self.gl_get_selected_language()
        try:
            return self.getFileItem(lang).size
        except:
            return 0

    def get_size(self, lang=None):
        """ """
        if lang is None: lang = self.gl_get_selected_language()
        try:
            return self.getFileItem(lang).size
        except:
            return 0

    def content_type(self, lang=None):
        """ """
        if lang is None: lang = self.gl_get_selected_language()
        return self.getFileItem(lang).content_type
        #try:
        #except: return 'application/octet-stream'

    def precondition(self, lang=None):
        """ """
        if lang is None: lang = self.gl_get_selected_language()
        try:
            return self.getFileItem(lang).precondition
        except:
            return ''

    def set_content_type(self, content_type, lang):
        """ """
        try:
            self.getFileItem(lang).content_type = content_type
        except:
            pass

    def set_precondition(self, precondition, lang):
        """ """
        try:
            self.getFileItem(lang).precondition = precondition
        except:
            pass

    def save_properties(self, title, description, coverage, keywords,
                        sortorder, downloadfilename, releasedate, lang):
        """
        Save item properties.
        """
        self._setLocalPropValue('title', lang, title)
        self._setLocalPropValue('description', lang, description)
        self._setLocalPropValue('coverage', lang, coverage)
        self._setLocalPropValue('keywords', lang, keywords)
        self._setLocalPropValue('downloadfilename', lang, downloadfilename)
        self.sortorder = sortorder
        self.releasedate = releasedate

    def handleUpload(self, source, file, url, lang=None):
        """
        Upload a file from disk or from a given URL.
        """
        if lang is None: lang = self.gl_get_selected_language()
        self.getFileItem(lang).handleUpload(source, file, url, self)

    def createversion(self, username, lang=None):
        """
        Creates a version.
        """
        if lang is None: lang = self.gl_get_selected_language()
        self.getFileItem(lang).createVersion(username)

    def getOlderVersions(self, lang=None):
        """
        Returns the dictionary of older versions. This means that current
        version is removed because it cointains the current content of the
        object.
        """
        if lang is None: lang = self.gl_get_selected_language()
        try:
            return self.getFileItem(lang).getOlderVersions()
        except:
            return []