def publish(json, publication_id, actor_membership_id, request_from):
    action = g.req('action', allowed=['load', 'validate', 'save'])

    publication = Publication.get(publication_id)

    actor_membership = MemberCompanyPortal.get(actor_membership_id)
    publisher_membership = MemberCompanyPortal.get_by_portal_id_company_id(
        publication.portal_division.portal_id, publication.material.company_id)

    if action == 'load':
        return publish_dialog_load(publication, publisher_membership)
    else:
        publish_dialog_save(publication, json['publication'], status=Publication.STATUSES['PUBLISHED'])

    if action == 'validate':
        publication.detach()
        return publication.validate(True)
    else:
        publication.save()
        utils.db.execute_function("tag_publication_set_position('%s', ARRAY ['%s']);" %
                                  (publication.id, "', '".join([t.id for t in publication.tags])))

        actor_membership.NOTIFY_MATERIAL_ACTION_BY_COMPANY_OR_PORTAL(
            action='PUBLISH', material_title=publication.material.title,
            company_or_portal='company' if request_from == 'company_material_details' else 'portal')

        if request_from == 'company_material_details':
            return actor_membership.material_or_publication_grid_row(publication.material)
        elif request_from == 'portal_publications':
            return publication.portal_publication_grid_row(actor_membership)
    def article_actions_by_portal(cls, publication):
        from profapp.models.permissions import RIGHT_AT_COMPANY, RIGHT_AT_PORTAL
        from ..models.company import UserCompany
        from ..models.portal import MemberCompanyPortal
        from ..models.materials import Publication

        portal = publication.portal_division.portal
        employment = UserCompany.get_by_user_and_company_ids(company_id=portal.company_owner_id)
        membership = MemberCompanyPortal.get_by_portal_id_company_id(
            portal_id=portal.id, company_id=portal.company_owner_id)

        publish_rights = employment.rights[RIGHT_AT_COMPANY.ARTICLES_SUBMIT_OR_PUBLISH] and \
                         membership.rights[RIGHT_AT_PORTAL.PUBLICATION_PUBLISH]

        unpublish_rights = employment.rights[RIGHT_AT_COMPANY.ARTICLES_UNPUBLISH] and \
                           membership.rights[RIGHT_AT_PORTAL.PUBLICATION_UNPUBLISH]

        if publication.status == Publication.STATUSES['SUBMITTED']:
            ret = [
                {'name': cls.ACTIONS['DELETE'], 'enabled': employment.rights[RIGHT_AT_COMPANY.ARTICLES_DELETE]},
            ]
        elif publication.status == Publication.STATUSES['UNPUBLISHED']:
            ret = [
                {'name': cls.ACTIONS['DELETE'], 'enabled': employment.rights[RIGHT_AT_COMPANY.ARTICLES_DELETE]},
                {'name': cls.ACTIONS['PUBLISH'], 'enabled': publish_rights},
            ]
        elif publication.status == Publication.STATUSES['PUBLISHED']:
            ret = [
                {'name': cls.ACTIONS['UNPUBLISH'], 'enabled': unpublish_rights},
                {'name': cls.ACTIONS['PUBLISH'], 'enabled': publish_rights and unpublish_rights},
            ]
        elif publication.status == Publication.STATUSES['DELETED']:
            ret = [
                {'name': cls.ACTIONS['UNDELETE'], 'enabled': unpublish_rights},
            ]
        else:
            ret = []

        for change in ret:
            change['message'] = ''
        return ret
Beispiel #3
0
def publish(json, publication_id, actor_membership_id, request_from):
    action = g.req('action', allowed=['load', 'validate', 'save'])

    publication = Publication.get(publication_id)

    actor_membership = MemberCompanyPortal.get(actor_membership_id)
    publisher_membership = MemberCompanyPortal.get_by_portal_id_company_id(
        publication.portal_division.portal_id, publication.material.company_id)

    if action == 'load':
        return publish_dialog_load(publication, publisher_membership)
    else:
        publish_dialog_save(publication,
                            json['publication'],
                            status=Publication.STATUSES['PUBLISHED'])

    if action == 'validate':
        publication.detach()
        return publication.validate(True)
    else:
        publication.save()
        utils.db.execute_function(
            "tag_publication_set_position('%s', ARRAY ['%s']);" %
            (publication.id, "', '".join([t.id for t in publication.tags])))

        actor_membership.NOTIFY_MATERIAL_ACTION_BY_COMPANY_OR_PORTAL(
            action='PUBLISH',
            material_title=publication.material.title,
            company_or_portal='company'
            if request_from == 'company_material_details' else 'portal')

        if request_from == 'company_material_details':
            return actor_membership.material_or_publication_grid_row(
                publication.material)
        elif request_from == 'portal_publications':
            return publication.portal_publication_grid_row(actor_membership)
Beispiel #4
0
 def get_publisher_membership(self):
     from profapp.models.portal import MemberCompanyPortal
     return MemberCompanyPortal.get_by_portal_id_company_id(
         company_id=self.material.company_id, portal_id=self.portal_division.portal_id)
Beispiel #5
0
    def article_actions_by_portal(cls, publication):
        from profapp.models.permissions import RIGHT_AT_COMPANY, RIGHT_AT_PORTAL
        from ..models.company import UserCompany
        from ..models.portal import MemberCompanyPortal
        from ..models.materials import Publication

        portal = publication.portal_division.portal
        employment = UserCompany.get_by_user_and_company_ids(
            company_id=portal.company_owner_id)
        membership = MemberCompanyPortal.get_by_portal_id_company_id(
            portal_id=portal.id, company_id=portal.company_owner_id)

        publish_rights = employment.rights[RIGHT_AT_COMPANY.ARTICLES_SUBMIT_OR_PUBLISH] and \
                         membership.rights[RIGHT_AT_PORTAL.PUBLICATION_PUBLISH]

        unpublish_rights = employment.rights[RIGHT_AT_COMPANY.ARTICLES_UNPUBLISH] and \
                           membership.rights[RIGHT_AT_PORTAL.PUBLICATION_UNPUBLISH]

        if publication.status == Publication.STATUSES['SUBMITTED']:
            ret = [
                {
                    'name': cls.ACTIONS['DELETE'],
                    'enabled':
                    employment.rights[RIGHT_AT_COMPANY.ARTICLES_DELETE]
                },
            ]
        elif publication.status == Publication.STATUSES['UNPUBLISHED']:
            ret = [
                {
                    'name': cls.ACTIONS['DELETE'],
                    'enabled':
                    employment.rights[RIGHT_AT_COMPANY.ARTICLES_DELETE]
                },
                {
                    'name': cls.ACTIONS['PUBLISH'],
                    'enabled': publish_rights
                },
            ]
        elif publication.status == Publication.STATUSES['PUBLISHED']:
            ret = [
                {
                    'name': cls.ACTIONS['UNPUBLISH'],
                    'enabled': unpublish_rights
                },
                {
                    'name': cls.ACTIONS['PUBLISH'],
                    'enabled': publish_rights and unpublish_rights
                },
            ]
        elif publication.status == Publication.STATUSES['DELETED']:
            ret = [
                {
                    'name': cls.ACTIONS['UNDELETE'],
                    'enabled': unpublish_rights
                },
            ]
        else:
            ret = []

        for change in ret:
            change['message'] = ''
        return ret