Exemplo n.º 1
0
    def clone_for_portal(self, division_id):

        filesintext = {found[1]:True for found in re.findall('(http://file001.profi.ntaxa.com/([^/]*)/)', self.long)}
        if self.image_file_id:
            filesintext[self.image_file_id] = True
        company = db(PortalDivision, id=division_id).one().portal.own_company

        for file_id in filesintext:
            filesintext[file_id] = \
                File.get(file_id).copy_file(company.id, company.system_folder_file_id).save().id

        article_portal = ArticlePortal(title=self.title, short=self.short,
                           portal_division_id=division_id,
                           article_company_id=self.id,
                           portal_id=db(PortalDivision, id=division_id).one().portal_id)

        if self.image_file_id:
            article_portal.image_file_id = filesintext[self.image_file_id]

        long_text = self.long
        for old_image_id in filesintext:
            long_text = long_text.replace('http://file001.profi.ntaxa.com/%s/' % (old_image_id, ),
                                          'http://file001.profi.ntaxa.com/%s/' % (filesintext[old_image_id], ))

        article_portal.long = long_text

        self.portal_article.append(article_portal)

        return self
Exemplo n.º 2
0
 def get_all_dir(f_id, copy_id=None):
     files_in_parent = [file for file in db(File, parent_id=f_id) if file.mime == 'directory' and file.id != copy_id]
     for file in files_in_parent:
         if file.mime == 'directory':
             for fil in db(File, parent_id=file.id, mime='directory'):
                 files_in_parent.append(fil) if fil.id != copy_id else None
     return files_in_parent
Exemplo n.º 3
0
def list_reader_load(json):
    next_page = json.get('next_page') if json.get('next_page') else 1
    search_text = request.args.get('search_text') or ''
    article_fields = 'title|id|subtitle|short|image_file_id|subtitle|publishing_tm|read_count,company.name|logo_file_id|id,' \
                     'division.name,portal.name|host|logo_file_id|id'
    favorite = request.args.get('favorite') == 'True'
    localtime = time.gmtime(time.time())
    filter = and_(Publication.portal_division_id == db(PortalDivision).filter(
                      PortalDivision.portal_id == db(UserPortalReader, user_id=g.user.id).subquery().c.portal_id).subquery().c.id,
                      Publication.status == Publication.STATUSES['PUBLISHED'],
                      Publication.publishing_tm < datetime.datetime(*localtime[:6])) if not favorite\
            else (Publication.id == db(ReaderPublication, user_id=g.user.id,
                                        favorite=True).subquery().c.article_portal_division_id)
    articles, pages, page = Search().search({'class': Publication,
                                             'filter': filter,
                                             'tags': True, 'return_fields': article_fields}, page=1,
                                                items_per_page=5*next_page,
                                                search_text=search_text)
    list_articles = Publication.get_list_reader_articles(articles)
    return {
        'end': True if pages == 1 or pages == 0 else False,
        'articles': list_articles,
        'pages': pages,
        'current_page': page,
        'page_buttons': Config.PAGINATION_BUTTONS,
        # 'portals': portals,
        'favorite': favorite
    }
Exemplo n.º 4
0
def list_reader(page=1):
    search_text = request.args.get('search_text') or ''
    favorite = 'favorite' in request.args
    if not favorite:
        articles, pages, page = Search().search({'class': Publication,
                                                 'filter': and_(Publication.portal_division_id ==
                                                                db(PortalDivision).filter(
                                                                    PortalDivision.portal_id ==
                                                                    db(UserPortalReader,
                                                                       user_id=g.user.id).subquery().
                                                                    c.portal_id).subquery().c.id,
                                                                Publication.status ==
                                                                Publication.STATUSES['PUBLISHED']),
                                                 'tags': True, 'return_fields': 'default_dict'}, page=page)
    else:
        articles, pages, page = Search().search({'class': Publication,
                                                 'filter': (Publication.id == db(ReaderPublication,
                                                                                 user_id=g.user.id,
                                                                                 favorite=True).subquery().c.
                                                            article_portal_division_id),
                                                 'tags': True, 'return_fields': 'default_dict'}, page=page,
                                                search_text=search_text)
    portals = UserPortalReader.get_portals_for_user() if not articles else None

    return render_template('partials/reader/reader_base.html',
                           articles=articles,
                           pages=pages,
                           current_page=page,
                           page_buttons=Config.PAGINATION_BUTTONS,
                           portals=portals,
                           favorite=favorite
                           )
Exemplo n.º 5
0
 def get_allowed_statuses(company_id=None, portal_id=None):
     if company_id:
         sub_query = db(MemberCompanyPortal, company_id=company_id).filter(
                 MemberCompanyPortal.status != "DELETED").all()
     else:
         sub_query = db(MemberCompanyPortal, portal_id=portal_id)
     return sorted(list({partner.status for partner in sub_query}))
Exemplo n.º 6
0
 def __search_start(self, *args: dict, **kwargs):
     """ Don't use this method, use Search().search() method """
     subquery_search = self.__get_subquery(*args, ord_by=kwargs.get('order_by'))
     if self.__pagination:
         from ..controllers.pagination import pagination as pagination_func
         subquery_search, self.__pages, page, _ = pagination_func(subquery_search, page=self.__page,
                                                                  items_per_page=self.__items_per_page)
     subquery_search = subquery_search.subquery()
     join_search = []
     for arg in args:
         join_params = arg.get('join') or arg['class']
         join_search.append(db(subquery_search).join(join_params,
                                                     arg['class'].id == subquery_search.c.index).subquery())
     objects = collections.OrderedDict()
     to_order = {}
     _order_by = kwargs.get('order_by') or Search.ORDER_MD_TM
     ord_by = 'text' if type(_order_by) in (str, list, tuple) \
         else self.__order_by_to_str[_order_by]
     for search in join_search:
         for cls in db(search).all():
             objects[cls.index] = {'id': cls.index, 'table_name': cls.table_name,
                                   'order': getattr(cls, ord_by), 'md_tm': cls.md_tm}
             to_order[cls.index] = (getattr(cls, ord_by), getattr(cls, 'md_tm'))
     objects = {obj['id']: obj for obj in
                collections.OrderedDict(sorted(objects.items())).values()}
     ordered = sorted(tuple(to_order.items()), reverse=False if self.__desc_asc == 'asc' else True,
                      key=operator.itemgetter(1))
     self.__reload_func(len(ordered), *args)
     if self.__return_objects:
         objects = self.__get_objects_from_db(*args, ordered_objects_list=ordered)
     else:
         objects = collections.OrderedDict((id, objects[id]) for id, ord in ordered)
     return objects, self.__pages, self.__page
Exemplo n.º 7
0
    def create_company(self, data, file):

        comp_dict = {"author_user_id": g.user_dict["id"]}
        status = STATUS()
        for x, y in zip(data.keys(), data.values()):
            comp_dict[x] = y
        company = Company(**comp_dict)
        db_session.add(company)
        db_session.commit()

        user_rbac = UserCompany(user_id=company.author_user_id, company_id=company.id, status=status.ACTIVE())
        db(Company, id=company.id).update(
            {
                "logo_file": File.upload(
                    file=file,
                    company_id=company.id,
                    parent_id=company.corporate_folder_file_id,
                    author=g.user_dict["name"],
                    author_user_id=g.user_dict["id"],
                )
            }
        )
        db_session.add(user_rbac)
        db_session.commit()
        r = Right()
        r.add_rights(company.author_user_id, company.id, COMPANY_OWNER)
Exemplo n.º 8
0
def crop_image(image_id, coordinates, zoom, params):
    from ..models.company import Company
    image_query = db(File, id=image_id).one()  # get file object
    company_owner = db(Company).filter(or_(
                Company.system_folder_file_id == image_query.root_folder_id,
                Company.journalist_folder_file_id == image_query.root_folder_id)).one()  # get company file owner
    return File.crop(image_query, coordinates, zoom, company_owner, params)
Exemplo n.º 9
0
def update_article_portal(json, article_id):
    db(ArticlePortalDivision, id=article_id).update({'status': json.get('new_status')})
    json['article']['status'] = json.get('new_status')
    json['new_status'] = ARTICLE_STATUS_IN_PORTAL.published \
        if json.get('new_status') != ARTICLE_STATUS_IN_PORTAL.published \
        else ARTICLE_STATUS_IN_PORTAL.declined
    return json
Exemplo n.º 10
0
    def validate(self):
        ret = {'errors': {}, 'warnings': {}, 'notices': {}}
        if db(Portal, company_owner_id=self.company_owner_id).count():
            ret['errors']['ok'] = 'portal for company already exists'
        if not re.match('[^\s]{3,}', self.name):
            ret['errors']['name'] = 'pls enter a bit longer name'
        if not re.match(
                '^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9]{1,})$',
                self.host):
            ret['errors']['host'] = 'pls enter valid host name'

        grouped = {}

        for div in self.divisions:
            if div.portal_division_type_id in grouped:
                grouped[div.portal_division_type_id] += 1
            else:
                grouped[div.portal_division_type_id] = 1

        for check_division in db(PortalDivisionType).all():
            if check_division.id not in grouped:
                grouped[check_division.id] = 0
            if check_division.min > grouped[check_division.id]:
                ret['errors'][
                    'division_%s' % (check_division.id,)] = 'you need at least %s `%s`' % (
                check_division.min, check_division.id)
                if grouped[check_division.id] ==  0:
                    ret['errors']['add_division'] = 'add at least one `%s`' % (check_division.id,)
            if check_division.max < grouped[check_division.id]:
                ret['errors'][
                    'division_%s' % (check_division.id,)] = 'you you can have only %s `%s`' % (
                check_division.max, check_division.id)

        return ret
Exemplo n.º 11
0
 def apply_company_to_portal(company_id, portal_id):
     """Add company to MemberCompanyPortal table. Company will be partner of this portal"""
     g.db.add(MemberCompanyPortal(company=db(Company, id=company_id).one(),
                                  portal=db(Portal, id=portal_id).one(),
                                  company_portal_plan_id=db(Portal, id=portal_id).one().
                                  portal_plan_id))
     g.db.flush()
Exemplo n.º 12
0
    def subquery_user_articles(search_text=None, user_id=None, **kwargs):
        article_filter = db(ArticleCompany, article_id=Article.id, **kwargs)
        if search_text:
            article_filter = article_filter.filter(ArticleCompany.title.ilike(
                "%" + repr(search_text).strip("'") + "%"))

        return db(Article, author_user_id=user_id).filter(article_filter.exists())
Exemplo n.º 13
0
 def save_all(id_f, attr, new_id):
     del attr['name']
     lists = File.get_all_dir(id_f, new_id)
     files = [file for file in db(File, parent_id=id_f) if file.mime != 'directory']
     f = File.save_files(files, new_id, attr)
     new_list = []
     old_list = []
     for dir in lists:
         if dir.parent_id == id_f:
             old_list.append(dir.id)
             attr['parent_id'] = new_id
             files = [file for file in db(File, parent_id=dir.id) if file.mime != 'directory']
             dir.detach().attr(attr)
             dir.save()
             new_list.append(dir)
             File.save_files(files, dir.id, attr)
         else:
             old_list.append(dir.id)
             files = [file for file in db(File, parent_id=dir.id) if file.mime != 'directory']
             parent = File.get(dir.parent_id)
             index = File.get_index(parent, old_list)
             attr['parent_id'] = new_list[index].id
             dir.detach().attr(attr)
             dir.save()
             new_list.append(dir)
             File.save_files(files, dir.id, attr)
     return old_list, new_list
Exemplo n.º 14
0
def update_article_portal(json, article_id):
    db(ArticlePortalDivision, id=article_id).update({'status': json.get('new_status')})
    article = db(ArticlePortalDivision, id=article_id).one().get_client_side_dict()
    allowed_statuses = ArticlePortalDivision.STATUSES.keys()
    json['allowed_statuses'] = allowed_statuses
    json['article']['status'] = json.get('new_status')
    return json
Exemplo n.º 15
0
    def __init__(self, name=None,
                 # portal_plan_id=None,
                 logo_file_id=None,
                 company_owner=None,
                 host=None, divisions=[], portal_layout_id=None):
        self.name = name
        self.logo_file_id = logo_file_id
        # self.company_owner_id = company_owner_id
        # self.articles = articles
        self.host = host
        self.divisions = divisions
        # self.portal_plan_id = portal_plan_id if portal_plan_id else db(MemberCompanyPortalPlan).first().id
        self.portal_layout_id = portal_layout_id if portal_layout_id else db(PortalLayout).first().id

        self.own_company = company_owner

        self.company_members = [
            MemberCompanyPortal(portal=self, company=company_owner, plan=db(MemberCompanyPortalPlan).first())]

        # self.own_company.company_portals = db(MemberCompanyPortalPlan).first()

        # db(MemberCompanyPortalPlan).first().portal_companies.add(MemberCompanyPortal(company=self.own_company))




        # self.company_assoc = [MemberCompanyPortal(portal = self,
        #                                     company = self.own_company,
        #                                     company_portal_plan_id=db(MemberCompanyPortalPlan).first().id)]


        pass
Exemplo n.º 16
0
 def subquery_search(filters=None, sorts=None, edit=None):
     sub_query = db(TranslateTemplate)
     list_filters = []; list_sorts = []
     if edit:
         exist = db(TranslateTemplate, template=edit['template'], name=edit['name']).first()
         i = datetime.datetime.now()
         TranslateTemplate.get(exist.id).attr({edit['col']: edit['newValue'], 'md_tm':i}).save().get_client_side_dict()
     if 'url' in filters:
         list_filters.append({'type': 'select', 'value': filters['url'], 'field': TranslateTemplate.url})
     if 'template' in filters:
         list_filters.append({'type': 'select', 'value': filters['template'], 'field': TranslateTemplate.template})
     if 'name' in filters:
         list_filters.append({'type': 'text', 'value': filters['name'], 'field': TranslateTemplate.name})
     if 'uk' in filters:
         list_filters.append({'type': 'text', 'value': filters['uk'], 'field': TranslateTemplate.uk})
     if 'en' in filters:
         list_filters.append({'type': 'text', 'value': filters['en'], 'field': TranslateTemplate.en})
     if 'portal.name' in filters:
         sub_query = sub_query.join(Portal,
                                    Portal.id == TranslateTemplate.portal_id)
         list_filters.append({'type': 'text', 'value': filters['portal.name'], 'field': Portal.name})
     if 'cr_tm' in sorts:
         list_sorts.append({'type': 'date', 'value': sorts['cr_tm'], 'field': TranslateTemplate.cr_tm})
     elif 'ac_tm' in sorts:
         list_sorts.append({'type': 'date', 'value': sorts['ac_tm'], 'field': TranslateTemplate.ac_tm})
     else:
         list_sorts.append({'type': 'date', 'value': 'desc', 'field': TranslateTemplate.cr_tm})
     sub_query = Grid.subquery_grid(sub_query, list_filters, list_sorts)
     return sub_query
Exemplo n.º 17
0
 def search_for_portal_to_join(company_id, searchtext):
     """This method return all portals which are not partners current company"""
     return [port.get_client_side_dict() for port in
             db(Portal).filter(~db(MemberCompanyPortal,
                                   company_id=company_id,
                                   portal_id=Portal.id).exists()
                               ).filter(Portal.name.ilike("%" + searchtext + "%")).all()]
Exemplo n.º 18
0
def companies_load(json):
    companies, pages, page, count = pagination(query=db(Company)
        .filter(
            Company.id == db(UserCompany, user_id=g.user.id).subquery().c.company_id), page=1,
            items_per_page=6 * json.get('next_page') if json.get('next_page') else 6)
    return {'companies': [usr_cmp.get_client_side_dict() for usr_cmp in companies],
            'user_id': g.user.id, 'end': True if pages == 1 or pages == 0 else False}
Exemplo n.º 19
0
def list_reader_load(json):
    favorite = request.args.get("favorite") == "True"
    localtime = time.gmtime(time.time())

    if favorite:
        publication_filter = (
            Publication.id == db(ReaderPublication, user_id=g.user.id, favorite=True).subquery().c.publication_id
        )
    else:
        division_filter = and_(
            PortalDivision.portal_id == db(UserPortalReader, user_id=g.user.id).subquery().c.portal_id
        )
        publication_filter = and_(
            Publication.portal_division_id == db(PortalDivision).filter(division_filter).subquery().c.id,
            Publication.status == Publication.STATUSES["PUBLISHED"],
            Publication.publishing_tm < datetime.datetime(*localtime[:6]),
        )

    publications, next_page = Publication.get_page(
        filter=publication_filter, order_by=desc(Publication.publishing_tm), page=json.get("next_page"), per_page=10
    )
    return {
        "next_page": next_page,
        "end": next_page < 0,
        "articles": [p.create_article() for p in publications],
        "favorite": favorite,
    }
Exemplo n.º 20
0
def crop_image(image_id, coordinates):

    image_query = db(File, id=image_id).one()
    if db(ImageCroped, original_image_id=image_id).count():
        return update_croped_image(image_id, coordinates)
    company_owner = db(Company).filter(or_(
        Company.system_folder_file_id == image_query.root_folder_id,
        Company.journalist_folder_file_id == image_query.root_folder_id)).one()
    bytes_file = crop_with_coordinates(image_query, coordinates)
    if bytes_file:
        croped = File()
        croped.md_tm = strftime("%Y-%m-%d %H:%M:%S", gmtime())
        croped.size = sys.getsizeof(bytes_file.getvalue())
        croped.name = image_query.name + '_cropped'
        croped.parent_id = company_owner.system_folder_file_id
        croped.root_folder_id = company_owner.system_folder_file_id
        croped.mime = image_query.mime
        fc = FileContent(content=bytes_file.getvalue(), file=croped)
        copy_original_image_to_system_folder = \
            File(parent_id=company_owner.system_folder_file_id, name=image_query.name+'_original',
                 mime=image_query.mime, size=image_query.size, user_id=g.user.id,
                 root_folder_id=company_owner.system_folder_file_id, author_user_id=g.user.id)
        cfc = FileContent(content=image_query.file_content.content,
                          file=copy_original_image_to_system_folder)
        g.db.add_all([croped, fc, copy_original_image_to_system_folder, cfc])
        g.db.flush()
        ImageCroped(original_image_id=copy_original_image_to_system_folder.id,
                    croped_image_id=croped.id,
                    x=float(coordinates['x']), y=float(coordinates['y']),
                    width=float(coordinates['width']),
                    height=float(coordinates['height']), rotate=int(coordinates['rotate'])).save()
        return croped.id
    else:
        return image_query.id
Exemplo n.º 21
0
def publications_load(json, company_id):
    portal = db(Company, id=company_id).one().own_portal
    if not portal:
        return dict(portal_not_exist=True)
    current_page = json.get('page') or 1
    params = {'search_text': json.get('search_text'), 'portal_id': portal.id}
    if json.get('status'):
        params['status'] = json.get('status')
    subquery = ArticlePortalDivision.subquery_portal_articles(**params)
    if json.get('company_id'):
        subquery = subquery.filter(db(ArticleCompany,
                                      company_id=json.get('company_id'),
                                      id=ArticlePortalDivision.article_company_id).exists())
    articles, pages, current_page = pagination(subquery,
                                               page=current_page)

    companies = ArticlePortalDivision.get_companies_which_send_article_to_portal(portal.id)
    statuses = {status: status for status in ARTICLE_STATUS_IN_PORTAL.all}
    publications = []
    for a in articles:
        a = a.get_client_side_dict()
        del a['long']
        publications.append(a)

    return {'publications': publications,
            'companies': companies,
            'pages': {'total': pages,
                      'current_page': current_page,
                      'page_buttons': Config.PAGINATION_BUTTONS},
            'statuses': statuses}
Exemplo n.º 22
0
    def __init__(self, name=None,
                 # portal_plan_id=None,
                 logo_file_id=None,
                 company_owner=None,
                 favicon_file_id=None,
                 lang='uk',
                 host=None, divisions=[], portal_layout_id=None):
        self.name = name
        self.lang = lang
        self.logo_file_id = logo_file_id
        self.favicon_file_id = favicon_file_id

        self.host = host
        self.divisions = divisions
        self.portal_layout_id = portal_layout_id if portal_layout_id else db(PortalLayout).first().id

        self.own_company = company_owner

        self.company_members = [
            MemberCompanyPortal(portal=self, company=company_owner, status=MemberCompanyPortal.STATUSES['ACTIVE'],
                                plan=db(MemberCompanyPortalPlan).first())]

        # self.own_company.company_portals = db(MemberCompanyPortalPlan).first()

        # db(MemberCompanyPortalPlan).first().portal_companies.add(MemberCompanyPortal(company=self.own_company))




        # self.company_assoc = [MemberCompanyPortal(portal = self,
        #                                     company = self.own_company,
        #                                     company_portal_plan_id=db(MemberCompanyPortalPlan).first().id)]


        pass
Exemplo n.º 23
0
    def subquery_company_articles(search_text=None, company_id=None, **kwargs):
        sub_query = db(ArticleCompany, company_id=company_id)
        if 'filter' in kwargs.keys():
             if 'material_status' in kwargs['filter'].keys():
                sub_query = db(ArticleCompany, company_id=company_id, status=kwargs['filter']['material_status'])
             if 'publication_status' in kwargs['filter'].keys() or 'portals' in kwargs['filter'].keys():
                sub_query = sub_query.join(ArticlePortalDivision,
                                       ArticlePortalDivision.article_company_id == ArticleCompany.id)
                if 'publication_status' in kwargs['filter'].keys():
                    sub_query = sub_query.filter(ArticlePortalDivision.status == kwargs['filter']['publication_status'])
                if 'portals' in kwargs['filter'].keys():
                    sub_query = sub_query.join(PortalDivision,
                                           PortalDivision.id == ArticlePortalDivision.portal_division_id). \
                    filter(PortalDivision.portal_id == kwargs['filter']['portals'])
        if search_text:
            if 'title' in search_text:
                sub_query = sub_query.filter(ArticleCompany.title.ilike("%" + search_text['title'] + "%"))
        if 'sort' in kwargs.keys():
            if 'date' in kwargs['sort'].keys():
                sub_query = sub_query.order_by(ArticleCompany.md_tm.asc()) if kwargs[
                                                                              'sort']['date'] == 'asc' else sub_query.order_by(
                ArticleCompany.md_tm.desc())

        else:
            sub_query = sub_query.order_by(expression.desc(ArticleCompany.md_tm))
        return sub_query
Exemplo n.º 24
0
 def search_for_company_to_join(user_id, searchtext):
     """Return all companies which are not current user employers yet"""
     return [company.get_client_side_dict() for company in
             db(Company).filter(~db(UserCompany, user_id=user_id,
                                    company_id=Company.id).exists()).
             filter(Company.name.ilike("%" + searchtext + "%")
                    ).all()]
Exemplo n.º 25
0
 def get_portal_division(self):
     return (
         db(PortalDivision)
         .filter(
             PortalDivision.id == db(ArticlePortalDivision, id=self.article_portal_division_id).c.portal_division_id
         )
         .one()
     )
Exemplo n.º 26
0
 def search_for_company_to_submit(user_id, article_id, searchtext):
     # TODO: AA by OZ:    .filter(user_id has to be employee in company and
     # TODO: must have rights to submit article to this company)
     return [x.to_dict('id,name') for x in db(Company).filter(~db(ArticleCompany).
                                                              filter_by(company_id=Company.id,
                                                                        article_id=article_id).
                                                              exists()).filter(
         Company.name.ilike("%" + searchtext + "%")).all()]
Exemplo n.º 27
0
    def query_all_companies(user_id):

        status = STATUS()
        companies = []
        query_companies = db(UserCompany, user_id=user_id, status=status.ACTIVE()).all()
        for x in query_companies:
            companies = companies + db(Company, id=x.company_id).all()
        return set(companies)
Exemplo n.º 28
0
 def get_all_in_dir_rev(id):
     files_in_parent = [file for file in db(File, parent_id=id)]
     for file in files_in_parent:
         if file.mime == 'directory':
             for fil in db(File, parent_id=file.id):
                 files_in_parent.append(fil)
     files_in_parent = files_in_parent[::-1]
     return files_in_parent
Exemplo n.º 29
0
 def change_status_employee(company_id, user_id, status=STATUS.SUSPENDED()):
     """This method make status employee in this company suspended"""
     db(UserCompany, company_id=company_id, user_id=user_id). \
         update({'status': status})
     if status == STATUS.DELETED():
         UserCompany.update_rights(user_id=user_id,
                                   company_id=company_id,
                                   new_rights=()
                                   )
Exemplo n.º 30
0
 def articles_visibility_for_user(portal_id):
     employer = True
     visibilities = Publication.VISIBILITIES.copy()
     if not db(UserCompany, user_id=getattr(g.user, 'id', None),
               status=UserCompany.STATUSES['ACTIVE']).filter(
                 UserCompany.company_id == db(Portal.company_owner_id, id=portal_id)).count():
         visibilities.pop(Publication.VISIBILITIES['CONFIDENTIAL'])
         employer = False
     return visibilities.keys(), employer
Exemplo n.º 31
0
 def check_fields():
     form = request.form
     required_fields = ['email', 'display_name', 'password', 'password1']
     for field in required_fields:
         if field not in form.keys():
             return False
         else:
             if not form.get(field):
                 return False
             elif form.get('password') != form.get('password1'):
                 return False
     if db(User, profireader_email=request.form.get('email')).first():
         flash('User with this email already exist')
         return False
     return True
Exemplo n.º 32
0
 def portal_division_dict(article, tags=None):
     if (not hasattr(article, 'portal_division_id')) or (
             article.portal_division_id is None):
         return {'positioned_articles': []}
     else:
         filter = article.position_unique_filter()
         return {
             'positioned_articles': [
                 pda.get_client_side_dict(fields='id|position|title') for
                 pda in db(ArticlePortalDivision).filter(filter).order_by(
                     expression.desc(ArticlePortalDivision.position)).all()
             ],
             'availableTags':
             tags
         }
Exemplo n.º 33
0
 def get_list_reader_liked(article_portal_division_id):
     me = db(ReaderPublication,
             article_portal_division_id=article_portal_division_id,
             user_id=g.user.id,
             liked=True).first()
     limit = 15
     articles = db(ReaderPublication,
                   article_portal_division_id=article_portal_division_id,
                   liked=True)
     liked_users = [
         User.get(article.user_id).profireader_name
         for article in articles.limit(limit)
     ]
     if me:
         if g.user.profireader_name in liked_users:
             index = liked_users.index(g.user.profireader_name)
             del liked_users[index]
         else:
             del liked_users[-1]
         liked_users.insert(0, g.user.profireader_name)
     if articles.count() > limit:
         liked_users.append('and ' + str((articles.count() - limit)) +
                            ' more...')
     return liked_users
Exemplo n.º 34
0
def get_portal_dict_for_material(portal,
                                 company,
                                 material=None,
                                 publication=None):
    ret = portal.get_client_side_dict(
        fields=
        'id, name, host, logo_file_id, divisions.id|name|portal_division_type_id, own_company.name|id|logo_file_id'
    )

    # ret['rights'] = MemberCompanyPortal.get(company_id=company_id, portal_id=ret['id']).rights
    ret['divisions'] = PRBase.get_ordered_dict([
        d for d in ret['divisions']
        if (d['portal_division_type_id'] == 'events'
            or d['portal_division_type_id'] == 'news')
    ])

    if material:
        publication_in_portal = db(ArticlePortalDivision).filter_by(
            article_company_id=material.id).filter(
                ArticlePortalDivision.portal_division_id.in_([
                    div_id for div_id, div in ret['divisions'].items()
                ])).first()
    else:
        publication_in_portal = publication

    if publication_in_portal:
        ret['publication'] = publication_in_portal.get_client_side_dict(
            'id,position,title,status,visibility,portal_division_id,publishing_tm'
        )
        ret['publication']['division'] = ret['divisions'][
            ret['publication']['portal_division_id']]
        ret['publication']['counts'] = '0/0/0/0'

        ret['actions'] = publication_in_portal.actions(company)
        ret['publication']['actions'] = ret['actions']

    else:
        ret['publication'] = None
        canbesubmited = material.actions(company)[
            ArticleCompany.ACTIONS['SUBMIT']]
        if canbesubmited is True:
            membership = MemberCompanyPortal.get(portal_id=portal.id,
                                                 company_id=company.id)
            canbesubmited = membership.has_rights(
                MemberCompanyPortal.RIGHT_AT_PORTAL.PUBLICATION_PUBLISH)
        ret['actions'] = {ArticleCompany.ACTIONS['SUBMIT']: canbesubmited}

    return ret
Exemplo n.º 35
0
def password_reset_request(json):
    if not current_user.is_anonymous():
        flash('To reset your password logout first please.')
        redirect(url_for('reader.list_reader'))
        return False

    user = db(User, profireader_email=json.get('email')).first()
    if user:
        user.generate_pass_reset_token().save()
        SendEmail().send_email(subject='Reset password', send_to=(user.profireader_email, ""),
                               html=render_template('auth/email/reset_password.html', user=user),)
        flash('An email with instructions to reset your password has been sent to you.')
        redirect(url_for('auth.login_signup_endpoint') + '?login_signup=login')
    else:
        flash('You are not Profireader user yet. Sign up Profireader first please.')
    return {}
Exemplo n.º 36
0
def confirm(token):
    user = db(User, email_conf_token=token).first()
    portal_id = request.args.get('subscribe_to_portal')
    if user and user.confirmed:
        return render_template("auth/confirm_email.html", message='Your account has been already confirmed!')
    elif not user or not user.confirm_email():
        return render_template("auth/unconfirmed.html", message='Wrong or expired token',
                               email=user.profireader_email if user else '')
    else:
        logout_user()
        user.confirmed = True
        user.save()
        login_user(user)
        if portal_id:
            return redirect(url_for('reader.reader_subscribe', portal_id=portal_id))
        return render_template("auth/confirm_email.html")
Exemplo n.º 37
0
 def subquery_portal_articles(portal_id, filters, sorts):
     sub_query = db(Publication)
     list_filters = []
     list_sorts = []
     if 'publication_status' in filters:
         list_filters.append({
             'type': 'select',
             'value': filters['publication_status'],
             'field': Publication.status
         })
     if 'company' in filters:
         sub_query = sub_query.join(Publication.company)
         list_filters.append({
             'type': 'select',
             'value': filters['company'],
             'field': Company.id
         })
     if 'date' in filters:
         list_filters.append({
             'type': 'date_range',
             'value': filters['date'],
             'field': Publication.publishing_tm
         })
     sub_query = sub_query. \
         join(Publication.division). \
         join(PortalDivision.portal). \
         filter(Portal.id == portal_id)
     if 'title' in filters:
         list_filters.append({
             'type': 'text',
             'value': filters['title'],
             'field': Publication.title
         })
     if 'date' in sorts:
         list_sorts.append({
             'type': 'date',
             'value': sorts['date'],
             'field': Publication.publishing_tm
         })
     else:
         list_sorts.append({
             'type': 'date',
             'value': 'desc',
             'field': Publication.publishing_tm
         })
     sub_query = Grid.subquery_grid(sub_query, list_filters, list_sorts)
     return sub_query
Exemplo n.º 38
0
def edit_profile(user_id):
    if current_user.get_id() != user_id:
        abort(403)

    user_query = db(User, id=user_id)

    #form = EditProfileForm()
    #if form.validate_on_submit():
    #    pass

    user = user_query.first()

    if request.method == 'GET':
        return render_template('general/user_edit_profile.html',  user=user, avatar_size=AVATAR_SIZE)

    if 'avatar' in request.form.keys():
        avatar_type = request.form.get('avatar')
        avatar_methods = {'Upload Image': 'upload', 'Use Gravatar': 'gravatar', 'facebook': 'facebook',
                          'google': 'google', 'linkedin': 'linkedin', 'microsoft': 'microsoft'}
        avatar_type = avatar_methods[avatar_type]
        if avatar_type == 'Upload Image':
            user = user_query.first()
            image = request.files['avatar']
            user.avatar_update(image)
        else:
            user.avatar(avatar_type, size=AVATAR_SIZE, small_size=AVATAR_SMALL_SIZE)
        g.db.add(user)
        g.db.commit()

    else:
        user_fields = dict()
        user_fields['profireader_name'] = request.form['name']
        user_fields['profireader_first_name'] = request.form['first_name']
        user_fields['profireader_last_name'] = request.form['last_name']
        user_fields['profireader_gender'] = request.form['gender']
        user_fields['profireader_link'] = request.form['link']
        user_fields['profireader_phone'] = request.form['phone']
        user_fields['lang'] = request.form['language']
        user_fields['location'] = request.form['location']
        user_fields['about_me'] = request.form['about_me']

        user_query.update(user_fields)
        flash('You have successfully updated you profile.')

    #return redirect(url_for('user.profile', user_id=user_id, avatar_size=2*AVATAR_SIZE))
    return render_template('general/user_edit_profile.html',  user=user, avatar_size=AVATAR_SIZE)
Exemplo n.º 39
0
    def add_delete_liked_user_article(article_portal_division_id, liked):
        articleReader = db(
            ReaderPublication,
            article_portal_division_id=article_portal_division_id,
            user_id=g.user.id).first()

        if not articleReader:
            articleReader = ReaderPublication.add_to_table_if_not_exists(
                article_portal_division_id)
        articleReader.liked = False if articleReader.liked else True
        article_division = ArticlePortalDivision.get(
            article_portal_division_id)
        article_division.like_count = article_division.like_count - 1 \
            if articleReader.liked == False and article_division.like_count != 0 else article_division.like_count + 1
        article_division.save()
        articleReader.save()
        return articleReader.liked
Exemplo n.º 40
0
 def get_unique_name(name, mime, parent_id):
     if File.is_name(name, mime, parent_id):
         ext = File.ext(name)
         name = File.if_copy(name)
         list = []
         for n in db(File,parent_id = parent_id, mime=mime):
             if re.match(r'^'+name+'\(\d+\)'+''+ext+'', n.name):
                 pos = (len(n.name) - 2) - len(ext)
                 list.append(int(n.name[pos:pos+1]))
         if list == []:
             return name+'(1)'+ext
         else:
             list.sort()
             index = list[-1] + 1
             return name+'('+str(index)+')'+ext
     else:
         return name
Exemplo n.º 41
0
def companies_partners_load(json, company_id):
    subquery = Company.subquery_company_partners(company_id, json.get('filter'),
                                                 filters_exсept=MembersRights.INITIALLY_FILTERED_OUT_STATUSES)
    members, pages, current_page, count = pagination(subquery, **Grid.page_options(json.get('paginationOptions')))
    return {'grid_data': [utils.dict_merge({'member': member.get_client_side_dict(more_fields='company'),
                                              'company_id': company_id,
                                              'portal_id': db(Portal, company_owner_id=company_id).first().id},
                                             {'actions': MembersRights(company=company_id,
                                                                       member_company=member).actions()},
                                             {'id': member.id})
                          for member in members],
            'grid_filters': {k: [{'value': None, 'label': TranslateTemplate.getTranslate('', '__-- all --')}] + v for
                             (k, v) in {'member.status': [{'value': status, 'label': status} for status in
                                                          MembersRights.STATUSES]}.items()},
            'grid_filters_except': list(MembersRights.INITIALLY_FILTERED_OUT_STATUSES),
            'total': count,
            'page': current_page}
Exemplo n.º 42
0
def send(parent_id):
    parent = File.get(parent_id)
    root = parent.root_folder_id
    if parent.mime == 'root':
        root = parent.id
    company = db(Company, journalist_folder_file_id=root).one()
    if File.if_action_allowed('upload', company.id) == False:
        return jsonify({'error': True})
    data = request.form
    uploaded_file = request.files['file']
    name = File.get_unique_name(
        urllib.parse.unquote(uploaded_file.filename).replace('"', '_').replace(
            '*', '_').replace('/', '_').replace('\\', '_'), data.get('ftype'),
        parent.id)
    data.get('ftype')
    if re.match('^video/.*', data.get('ftype')):
        body = {
            'title': uploaded_file.filename,
            'description': '',
            'status': 'public'
        }
        youtube = YoutubeApi(body_dict=body,
                             video_file=uploaded_file.stream.read(-1),
                             chunk_info=dict(
                                 chunk_size=int(data.get('chunkSize')),
                                 chunk_number=int(data.get('chunkNumber')),
                                 total_size=int(data.get('totalSize'))),
                             company_id=company.id,
                             root_folder_id=company.journalist_folder_file_id,
                             parent_folder_id=parent_id)
        file = youtube.upload()
    else:
        file = File.upload(name,
                           data,
                           parent.id,
                           root,
                           company,
                           content=uploaded_file.stream.read(-1))
    return jsonify({
        'result': {
            'size': 0
        },
        'error': True if file == 'error' else False,
        'file_id': file
    })
Exemplo n.º 43
0
 def set_division_page_size(self, page_size_for_divisions=None):
     page_size_for_divisions = page_size_for_divisions or self.page_size_for_divisions
     config = db(PortalConfig, id=self.id).first()
     dps = dict()
     if config and page_size_for_divisions:
         dps = simplejson.loads(getattr(config, PortalConfig.PAGE_SIZE_PER_DIVISION))
         dps.update(page_size_for_divisions)
     elif page_size_for_divisions:
         for division in self.portal.divisions:
             if page_size_for_divisions.get(division.name):
                 dps[division.name] = page_size_for_divisions.get(division.name)
             else:
                 dps[division.name] = Config.ITEMS_PER_PAGE
     else:
         for division in self.portal.divisions:
             dps[division.name] = Config.ITEMS_PER_PAGE
     dps = simplejson.dumps(dps)
     self.division_page_size = dps
Exemplo n.º 44
0
    def setup_new_company(self):
        """Add new company to company table and make all necessary relationships,
        if company with this name already exist raise DublicateName"""
        if db(Company, name=self.name).count():
            raise errors.DublicateName({
                'message': 'Company name %(name)s already exist. Please choose another name',
                'data': self.get_client_side_dict()})

        user_company = UserCompany(status=UserCompany.STATUSES['ACTIVE'], rights={UserCompany.RIGHT_AT_COMPANY._OWNER:
                                                                                      True})
        user_company.employer = self
        g.user.employer_assoc.append(user_company)
        g.user.companies.append(self)
        self.youtube_playlists.append(YoutubePlaylist(name=self.name, company_owner=self))
        self.save()
        print(self)

        return self
Exemplo n.º 45
0
 def get_unique_name(name, mime, parent_id):
     if File.is_name(name, mime, parent_id):
         ext = File.ext(name)
         fromname = name[:-(len(ext) + 3)] if File.is_copy(name) else name[:-len(ext) if ext else -1]
         list = []
         for file in db(File, parent_id=parent_id, mime=mime):
             clearName = file.name[:-(len(ext) + 3)] if File.is_copy(file.name) else file.name[:-len(ext)]
             if fromname == clearName:
                 pos = (len(file.name) - 2) - len(ext) if File.is_copy(file.name) else None
                 if pos:
                     list.append(int(file.name[pos:pos + 1]))
         if list == []:
             return fromname + '(1)' + ext
         else:
             list.sort()
             index = list[-1] + 1
             return fromname + '(' + str(index) + ')' + ext
     else:
         return name
Exemplo n.º 46
0
def employment_action(json, company_id, employment_id, action):
    employment = db(UserCompany).filter_by(id=employment_id).one()

    if action == UserCompany.ACTIONS['REJECT']:
        employment.status = UserCompany.STATUSES['REJECTED']
    elif action == UserCompany.ACTIONS['ENLIST']:
        employment.status = UserCompany.STATUSES['ACTIVE']
    elif action == UserCompany.ACTIONS['FIRE']:
        employment.status = UserCompany.STATUSES['FIRED']

    employment.save()

    return PRBase.merge_dicts(
        employment.employee.get_client_side_dict(),
        employment.get_client_side_dict(), {
            'actions':
            employment.actions(
                UserCompany.get(user_id=g.user.id, company_id=company_id))
        })
Exemplo n.º 47
0
def employment_action(json, company_id, employment_id, action):
    employment = db(UserCompany).filter_by(id=employment_id).one()

    if action == EmployeesRight.ACTIONS['REJECT']:
        employment.status = EmployeesRight.STATUSES['REJECTED']
    elif action == EmployeesRight.ACTIONS['ENLIST']:
        employment.status = EmployeesRight.STATUSES['ACTIVE']
    elif action == EmployeesRight.ACTIONS['FIRE']:
        employment.status = EmployeesRight.STATUSES['FIRED']

    employment.save()

    return utils.dict_merge(
        employment.employee.get_client_side_dict(),
        employment.get_client_side_dict(), {
            'actions':
            EmployeesRight(company=company_id,
                           employment=employment).actions()
        })
Exemplo n.º 48
0
    def insert_after(self, insert_after_id, filter=None):

        tochange = db(self.__class__)

        if filter is not None:
            tochange = tochange.filter(filter)

        if insert_after_id == False:
            oldtop = tochange.order_by(expression.desc(
                self.__class__.position)).first()
            if oldtop and (oldtop.id != self.id):
                self.position = None
                self.save()
                self.position = oldtop.position + 1
            elif not oldtop:
                self.position = None
                self.save()
                self.position = 1
        elif insert_after_id == True:
            oldbottom = tochange.order_by(
                expression.asc(self.__class__.position)).first()
            if oldbottom and (oldbottom.id != self.id):
                self.position = None
                self.save()
                tochange.update({'position': self.__class__.position + 1})
                self.position = 1
            elif not oldbottom:
                self.position = None
                self.save()
                self.position = 1
        elif insert_after_id is None:
            self.position = None
        elif self.id != insert_after_id:
            insert_after_object = self.get(insert_after_id)
            if self.position != insert_after_object.position - 1:
                self.position = None
                self.save()
                tochange = tochange.filter(
                    self.__class__.position >= insert_after_object.position)
                tochange.update({'position': self.__class__.position + 1})
                self.position = insert_after_object.position - 1

        return self
Exemplo n.º 49
0
    def subquery_search(template=None, url=None, **kwargs):
        sub_query = db(Ips)
        if 'filter' in kwargs:
            if 'url' in kwargs['filter']:
                sub_query = sub_query.filter_by(url=kwargs['filter']['url'])
            if 'template' in kwargs['filter']:
                sub_query = sub_query.filter_by(template=kwargs['filter']['template'])
        if 'search_text' in kwargs:
            if 'name' in kwargs['search_text']:
                sub_query = sub_query.filter(Ips.name.ilike("%" + kwargs['search_text']['name'] + "%"))
            if 'uk' in kwargs['search_text']:
                sub_query = sub_query.filter(Ips.uk.ilike("%" + kwargs['search_text']['uk'] + "%"))
            if 'en' in kwargs['search_text']:
                sub_query = sub_query.filter(Ips.en.ilike("%" + kwargs['search_text']['en'] + "%"))
        if 'cr_tm' in kwargs['sort']:
            sub_query = sub_query.order_by(Ips.cr_tm.asc()) if kwargs['sort']['cr_tm'] == 'asc' else sub_query.order_by(TranslateTemplate.cr_tm.desc())
        elif 'ac_tm' in kwargs['sort']:
            sub_query = sub_query.order_by(Ips.ac_tm.asc()) if kwargs['sort']['ac_tm'] == 'asc' else sub_query.order_by(TranslateTemplate.ac_tm.desc())


        return sub_query
Exemplo n.º 50
0
 def __get_objects_from_db(self, *args, ordered_objects_list=None):
     items = dict()
     for cls in args:
         fields = cls.get('return_fields') or 'id'
         tags = cls.get('tags')
         assert type(fields) is str, \
             'Arg parameter return_fields must be string but %s given' % fields
         for a in db(cls['class']).filter(cls['class'].id.in_(
                 list(map(lambda x: x[0], ordered_objects_list)))).all():
             if fields != 'default_dict' and not tags:
                 items[a.id] = a.get_client_side_dict(fields=fields)
             elif fields != 'default_dict' and tags:
                 items[a.id] = a.get_client_side_dict(fields=fields)
                 items[a.id].update(dict(tags=a.tags))
             elif fields == 'default_dict' and not tags:
                 items[a.id] = a.get_client_side_dict()
             else:
                 items[a.id] = a.get_client_side_dict()
                 items[a.id].update(dict(tags=a.tags))
     return collections.OrderedDict(
         (id, items[id]) for id, val in ordered_objects_list)
Exemplo n.º 51
0
    def wrapper(*args, **kwargs):

        if g.debug or g.testing:
            if not func.__dict__.get('__check_rights__'):
                print('Please add "check_right" decorator for your func!')
            start = time.clock()
            try:
                ret = func(*args, **kwargs)
            except:
                import sys
                print("Unexpected error:", sys.exc_info()[0])
                return "Unexpected error:", sys.exc_info()[0]
                # return redirect(url_for('general.index'))
            end = time.clock()
            profiler = db(
                Profiler,
                name=func.__name__,
                blueprint_name=func.__dict__['__endpoint__']).first()
            method = ','.join([
                method for method in func.__dict__['__method__']
            ]) if func.__dict__['__method__'] else None
            if profiler:
                profiler.update_profile(end - start, method)
            else:
                Profiler().create_profile(func.__name__,
                                          func.__dict__['__endpoint__'],
                                          end - start, method)
            return ret
        else:
            if not func.__dict__['__check_rights__']:
                raise Exception(
                    'method not allowed! Please add "check_right" decorator for your func!'
                )
            try:
                ret = func(*args, **kwargs)
            except:
                import sys
                print("Unexpected error:", sys.exc_info()[0])
                return "Unexpected error:", sys.exc_info()[0]
        return ret
Exemplo n.º 52
0
def details(article_portal_division_id):
    search_text, portal, _ = get_params()
    if search_text:
        return redirect(url_for('front.index', search_text=search_text))
    article = ArticlePortalDivision.get(article_portal_division_id)
    article_visibility = article.article_visibility_details()
    article_dict = article.get_client_side_dict(fields='id, title,short, like_count, read_count, cr_tm, '
                                                       'md_tm, visibility,'
                                                       'publishing_tm, keywords, status, long, image_file_id,'
                                                       'division.name, division.portal.id,'
                                                       'company.name|id')
    article_dict['tags'] = article.tags

    division = g.db().query(PortalDivision).filter_by(id=article.portal_division_id).one()
    if article_visibility is not True:
        back_to_url('front.details', host=portal.host, article_portal_division_id=article_portal_division_id)
    else:
        article.add_recently_read_articles_to_session()
    related_articles = g.db().query(ArticlePortalDivision).filter(
        and_(ArticlePortalDivision.id != article.id,
             ArticlePortalDivision.portal_division_id.in_(
                 db(PortalDivision.id).filter(PortalDivision.portal_id == article.division.portal_id))
             )).order_by(ArticlePortalDivision.cr_tm.desc()).limit(5).all()
    favorite = article.check_favorite_status(user_id=getattr(g.user, 'id', None))
    liked = article.article_is_liked(getattr(g.user, 'id', None), article_portal_division_id)
    return render_template('front/' + g.portal_layout_path + 'article_details.html',
                           portal=portal_and_settings(portal),
                           current_division=division.get_client_side_dict(),
                           articles_related={
                               a.id: a.get_client_side_dict(fields='id, title, publishing_tm, company.name|id')
                               for a
                               in related_articles},
                           article=article_dict,
                           favorite=favorite,
                           liked=liked,
                           article_visibility=article_visibility is True,
                           redirect_info=article_visibility
                           )
Exemplo n.º 53
0
def config_load(json):
    page = json.get('paginationOptions')['pageNumber']
    pageSize = json.get('paginationOptions')['pageSize']
    params = {}
    params['sort'] = {}
    params['filter'] = {}
    params['search_text'] = {}
    if json.get('sort'):
        for n in json.get('sort'):
            params['sort'][n] = json.get('sort')[n]
    if json.get('filter'):
        for b in json.get('filter'):
            if json.get('filter')[b] != '-- all --':
                params['filter'][b] = json.get('filter')[b]
    if json.get('search_text'):
        for d in json.get('search_text'):
            params['search_text'][d] = json.get('search_text')[d]
    if json.get('editItem'):
        exist = db(Config,
                   template=json.get('editItem')['template'],
                   name=json.get('editItem')['name']).first()
        i = datetime.datetime.now()
        Config.get(exist.id).attr({
            json.get('editItem')['col']:
            json.get('editItem')['newValue'],
            'md_tm':
            i
        }).save().get_client_side_dict()
    subquery = Config.subquery_search(template=json.get('template') or None,
                                      url=json.get('url') or None,
                                      **params)

    translations, pages, current_page, count = pagination(
        subquery, page=page, items_per_page=pageSize)
    grid_data = TranslateTemplate.getListGridDataTranslation(translations)

    return {'grid_data': grid_data, 'total': subquery.count()}
Exemplo n.º 54
0
    def clone_for_portal_images_and_replace_urls(self, portal_division_id, article_portal_division):
        filesintext = {found[1]: True for found in
                       re.findall('(https?://file001.profireader.com/([^/]*)/)', self.long)}
        if self.image_file_id:
            filesintext[self.image_file_id] = True
        company = db(PortalDivision, id=portal_division_id).one().portal.own_company

        for file_id in filesintext:
            filesintext[file_id] = \
                File.get(file_id).copy_file(company_id=company.id,
                                            root_folder_id=company.system_folder_file_id,
                                            parent_id=company.system_folder_file_id,
                                            article_portal_division_id=article_portal_division.id).save().id

        if self.image_file_id:
            article_portal_division.image_file_id = filesintext[self.image_file_id]

        article_portal_division.save()

        long_text = self.long
        for old_image_id in filesintext:
            long_text = long_text.replace('://file001.profireader.com/%s/' % (old_image_id,),
                                          '://file001.profireader.com/%s/' % (filesintext[old_image_id],))
        return long_text
Exemplo n.º 55
0
 def init_on_load(self):
     if self.portal_division_type_id == 'company_subportal':
         self.settings = db(PortalDivisionSettingsCompanySubportal).filter_by(
                 portal_division_id=self.id).one()
Exemplo n.º 56
0
 def get(user_id=None, portal_id=None):
     return db(UserPortalReader).filter_by(user_id=user_id , portal_id=portal_id).first()
Exemplo n.º 57
0
 def get_portals_for_user():
     portals = db(Portal).filter(~(Portal.id.in_(db(UserPortalReader.portal_id, user_id=g.user.id)))).all()
     for portal in portals:
         yield (portal.id, portal.name,)
Exemplo n.º 58
0
 def get_portal_divisions_json(self):
     return json.dumps({division[0]: {'name': division[1], 'show_division': True, 'comments': True}
                        for division in db(PortalDivision.id, PortalDivision.name, portal_id=self.portal_id).all()},
                       ensure_ascii=False)
Exemplo n.º 59
0
 def get_division_types():
     """Return all divisions on profireader"""
     return db(PortalDivisionType).all()
Exemplo n.º 60
0
 def get_members(company_id, *args):
     subquery = db(MemberCompanyPortal).filter(
         MemberCompanyPortal.portal_id == db(Portal, company_owner_id=company_id).subquery().c.id).filter(MemberCompanyPortal.status != MemberCompanyPortal.STATUSES['REJECTED'])
     return subquery