示例#1
0
 def __setitem__(self, item, value):
     """
     修改一个系统配置项的值到用户个性化设置中,这主要用于系统运行期保存一些个性化的参数设置。
     """
     if self.__getitem__(item) == value: return
     if item in self._cache: self._cache.pop(item)
     op = threadlocals.get_current_user()
     if op and op.is_anonymous(): op = None
     items = item.split(".", 1)
     opt = Option.objects.get(app_label=items[0], name=items[1])
     try:
         p_opt = PersonalOption.objects.get(option=opt, user=op)
     except ObjectDoesNotExist:
         p_opt = PersonalOption(option=opt,
                                user=op)  # create it if not exists
     if not (p_opt.value == value):
         p_opt.value = value
         p_opt.save()
         if item == 'base.language':
             from django.utils.translation import check_for_language, activate, get_language
             request = threadlocals.get_current_request()
             if request:
                 lang_code = value
                 if lang_code and check_for_language(lang_code):
                     if hasattr(request, 'session'):
                         request.session['django_language'] = lang_code
                         activate(lang_code)
                         request.LANGUAGE_CODE = get_language()
     self._cache[item] = value
示例#2
0
 def __getitem__(self, item):
     # if item in self._cache:        return self._cache[item]
     op = threadlocals.get_current_user()
     if op and op.is_anonymous(): op = None
     if '.' not in item:
         value = getattr(settings, item)
     else:
         items = item.split(".", 1)
         value = None
         try:
             opt = Option.objects.get(app_label=items[0], name=items[1])
         except ObjectDoesNotExist:
             return None
         try:
             if op:
                 opt = PersonalOption.objects.get(option=opt, user=op)
                 value = opt.value
         except ObjectDoesNotExist:
             pass
         if value == None:
             try:
                 opt = SystemOption.objects.get(option=opt)
                 value = opt.value
             except ObjectDoesNotExist:
                 value = opt.default
         self._cache[item] = value
     return value
示例#3
0
def set_msg_read(request, datakey):
    u = threadlocals.get_current_user()
    try:
        um = UsrMsg()
        um.user = u
        um.msg = InstantMsg.objects.filter(pk=datakey)[0]
        um.readtype = "1"
        um.save()
        return getJSResponse('{ Info:"OK" }')
    except:
        import traceback
        traceback.print_exc()
        return getJSResponse('{ Info:"exception!" }')
示例#4
0
def get_instant_msg(request):
    u = threadlocals.get_current_user()
    if u and u.is_anonymous():
        return getJSResponse(u"[]")
    d = {}
    qs = None
    [SYSMSG, ATTMSG, IACCESSMSG, PERSONNELMSG] = [1, 2, 3, 4]
    exclude_msgtype = []
    if "mysite.att" not in settings.INSTALLED_APPS:
        exclude_msgtype.append(ATTMSG)
    if "mysite.iaccess" not in settings.INSTALLED_APPS:
        exclude_msgtype.append(IACCESSMSG)

    msgtypes = MsgType.objects.exclude(pk__in=exclude_msgtype)
    dt = datetime.datetime.now()
    dt = datetime.datetime(year=dt.year, month=dt.month, day=dt.day)

    # 持续时间过滤条件
    querys = []
    for elem in msgtypes:
        begin_date = dt - datetime.timedelta(days=elem.msg_keep_time)
        querys.append((Q(change_time__gte=begin_date) & Q(msgtype=elem)))
    combine_query = querys[0]
    for i in querys[1:]:
        combine_query |= i

    # 不是超级管理员过滤条件
    if not u.is_superuser:
        ms = GroupMsg.objects.filter(group__user=u).values_list("msgtype")
        d["msgtype__in"] = ms

    # 是否已读过滤条件
    has_read = UsrMsg.objects.filter(user=u).values_list("msg")

    qs = InstantMsg.objects.filter(**d).exclude(id__in=has_read)
    qs = qs.filter(combine_query).order_by("-pk")

    json_data = {
        "fields": ["id", "msgtype", "content", "change_time"],
        "data": []
    }
    for ee in qs:
        json_data["data"].append([
            ee.id,
            u"%s" % ee.msgtype, ee.content,
            ee.change_time.strftime("%Y-%m-%d")
        ])

    return getJSResponse(json.dumps(json_data))
示例#5
0
 def delete(self):
     if self.Admin.cache:
         key = cache_key(self, self.pk)
         cache.set(key, None)
         cache.delete(key)
         print('------CachingModel delete: %s---------' % key)
     if self.Admin.log:
         op = threadlocals.get_current_user()
         if op and op.is_anonymous(): op = None
         LogEntry.objects.log_action(
             user_id=op and op.pk or None,
             content_type_id=ContentType.objects.get_for_model(self).pk,
             object_id=self.pk,
             object_repr=force_unicode(self),
             action_flag=DELETION)
     super(CachingModel, self).delete()
示例#6
0
    def get_query_set(self):
        qs = super(RowCacheManager, self).get_query_set()
        try:  # 根据 status 排除已经删除/停用的数据
            if hasattr(self.model, "can_restore") and self.model.can_restore:
                qs = qs.exclude(status=STATUS_INVALID)
                pass  # 修改已删除人员历史记录显示为空的问题
            else:
                qs = qs.exclude(status=STATUS_STOP).exclude(
                    status=STATUS_INVALID)
        except:
            pass

        op = threadlocals.get_current_user()
        if (op is None) or op.is_anonymous():
            return qs
        if not hasattr(op, "customer_id"): return qs

        # TODO: 根据当前用户的权限过滤数据
        # 根据登录用户所属客户,过滤出该客户的数据
        if hasattr(qs.model, "customer"):
            qs = qs.filter(customer_id=op.customer_id)
        return qs
示例#7
0
    def save(self, *args, **kwargs):
        is_new = False
        if self.pk is None or self.create_time is None:
            is_new = True
        elif kwargs.get("force_insert", False):
            is_new = True
        if is_new and kwargs.get("force_update", False):
            is_new = False
        log_msg = kwargs.get('log_msg', True)  # 默认为True
        print("save: is_new=%s, self.pk=%s, self.create_time=%s, kwarg=%s" %
              (is_new, self.pk, self.create_time, kwargs))
        op = threadlocals.get_current_user()
        if op and op.is_anonymous():
            op = None
        print("save: %s self.status:%s" %
              (self.__class__.__name__, self.status))
        if is_new:
            self.create_time = datetime.datetime.now()
            if op: self.create_operator = op.username
            old_obj = None
        else:
            if self.status == STATUS_INVALID:  # 标记为删除
                self.delete_time = datetime.datetime.now()
                if op: self.delete_operator = op.username
            else:  # 修改
                self.change_time = datetime.datetime.now()
                if op: self.change_operator = op.username
            # pwp添加具体的修改信息

            old_obj = self.__class__.all_objects.filter(pk=self.pk)[0]
            change_info = []
            for field in old_obj._meta.fields:
                field_name = field.name
                if field_name == 'status' or field_name not in [
                        abs_field.name
                        for abs_field in CachingModel._meta.fields
                ]:  # 只显示非自动维护字段的改变
                    if field.choices:
                        old_value = (
                            old_obj.__getattribute__("get_" + field_name +
                                                     "_display")()) or ""
                        new_value = (self.__getattribute__("get_" +
                                                           field_name +
                                                           "_display")()) or ""
                    else:
                        old_value = getattr(old_obj, field_name)
                        new_value = getattr(self, field_name)

                    if new_value != old_value and (old_value or "None") != (
                            new_value or "None"):
                        change_info.append(u"%s(%s->%s)" %
                                           (field.verbose_name, old_value
                                            or "", new_value or ""))

            if kwargs.has_key('log_msg') and type(
                    kwargs['log_msg']) != bool:  # 配置了指定写入的日志信息(默认写入)
                kwargs['log_msg'] = u"%s" % kwargs[
                    'log_msg']  # + u";".join(change_info)
            elif change_info:
                kwargs['log_msg'] = u";".join(change_info)
            elif self.status != STATUS_INVALID:  # 不是删除操作
                return  # 没有修改任何数据,无须进行保存操作

        log_msg_content = kwargs.pop('log_msg', '')
        invalidate_cache = kwargs.pop('invalidate_cache', True)
        print("save: %s, super save: %s" %
              (self.__class__.__name__, self.__dict__))

        # if SYNC_MODEL:
        #     hk = save_hook(is_new,self,old_obj).check()
        # super(CachingModel, self).save(*args, **kwargs)
        # if SYNC_MODEL:
        #     hk.sync()
        if self.Admin.cache and invalidate_cache:
            key = cache_key(self, self.pk)
            #                    print "\tinvalidate_cache:", key
            cache.delete(key)
        if log_msg or (
                self.Admin.log and log_msg != False
        ):  # log_msg设置了字符串,无论Admin.log都写日志;log_msg=False 表示强制不写日志

            LogEntry.objects.log_action(
                user_id=op and op.pk or None,
                content_type_id=ContentType.objects.get_for_model(self).pk,
                object_id=self.pk,
                object_repr=force_unicode(self),
                action_flag=(is_new and ADDITION)
                or (self.status == STATUS_INVALID) and DELETION or CHANGE,
                change_message=log_msg_content[0:511] or "")
        if is_new:
            try:
                for r in self._meta.get_all_related_objects():
                    if isinstance(r.field, models.OneToOneField):
                        r.model(**{r.field.name: self}).save()
            except:
                pass
示例#8
0
def get_all_app_and_models(hide_visible_false=True, trans_apps=[]):
    lng = get_language()
    usr = threadlocals.get_current_user()
    if hide_visible_false:
        cache_key = "%s_%s_%s" % (lng, usr.username, "menu_list")
    else:
        cache_key = "%s_%s_%s" % (lng, usr.username, "menu_list_with_hide")
    if usr.is_anonymous():
        cache.delete(cache_key)
    menu_list = cache.get(cache_key)
    if menu_list:
        return menu_list
    apps = {}
    tmp_apps = [e for e in settings.INSTALLED_APPS]
    if trans_apps:
        tmp_apps = trans_apps
    for application in tmp_apps:
        app_label = application.split(".")[-1]
        apps[app_label] = {'models': [], 'is_app_true': 'true'}
    for app_label in apps.keys():
        print("==========appskey=", app_label, "==", apps[app_label])
        app = get_app(app_label)
        print("==========typeofapp=", type(app))
        apps[app_label]['name'] = u"%(name)s" % {
            'name':
            hasattr(app, "verbose_name") and app.verbose_name or unicode(
                DataTranslation.get_field_display(ContentType, 'app_label',
                                                  app_label))
        }
        apps[app_label]['index'] = hasattr(
            app, '_menu_index') and app._menu_index or 9999
        for i in dir(app):
            print("==========i=", i)
            app_menu = None
            try:
                model = app.__getattribute__(i)
                m0 = {}
                if issubclass(model, models.Model) and (model._meta.app_label
                                                        == app_label):
                    admin = hasattr(model, "Admin") and model.Admin or None
                    if not model._meta.abstract:
                        perm = '%s.%s_%s' % (model._meta.app_label, "browse",
                                             model.__name__.lower())
                        if usr.has_perm(perm):
                            m0 = {
                                'verbose_name': u"%(name)s" % {
                                    'name': model._meta.verbose_name
                                },
                                'model': model,
                                'index': 9999
                            }
                            if (not admin or not hasattr(admin, "visible")
                                    or admin.visible):
                                m0["visible"] = True
                            else:
                                m0["visible"] = False
                            if hasattr(admin, "menu_index"):
                                m0['index'] = admin.menu_index

                            if hasattr(admin, "parent_model"):
                                m0["parent_model"] = admin.parent_model
                            if hasattr(admin, "select_related_perms"):
                                m0["select_related_perms"] = admin.select_related_perms
                            if hasattr(admin, "hide_perms"):
                                m0["hide_perms"] = admin.hide_perms
                            if hasattr(admin, "cancel_perms"):
                                m0["cancel_perms"] = admin.cancel_perms
                            app_menu = app_label
                            if hasattr(admin, "app_menu"):
                                app_menu = admin.app_menu

                            m0['menu_group'] = hasattr(
                                admin, "menu_group"
                            ) and admin.menu_group or app_label  #未配置时取app_menu(即app_label)

                elif issubclass(model, AppOperation) and hasattr(
                        model, 'view'):
                    operation_flag = hasattr(
                        model,
                        'operation_flag') and model.operation_flag or "true"
                    menu_group = hasattr(
                        model, '_menu_group'
                    ) and model._menu_group or app_label  #未配置时取app_menu(即app_label)
                    if usr.has_perm("contenttypes.can_%s" % model.__name__):
                        m0 = {
                            'verbose_name': u"%(name)s" % {
                                'name':
                                hasattr(model, "verbose_name")
                                and model.verbose_name or
                                (u"%s" % _(model.__name__))
                            },
                            'model': None,
                            'operation': model,
                            'menu_group': menu_group,
                            'operation_flag': operation_flag,
                            'url': reverse(model.view.im_func),
                            'index': 9999
                        }
                        if (not hasattr(model, 'visible')
                                or getattr(model, 'visible')):
                            m0["visible"] = True
                        else:
                            m0["visible"] = False
                        if hasattr(model, 'add_model_permission'):
                            m0["add_model_permission"] = model.add_model_permission
                        if hasattr(model, '_parent_model'):
                            m0["parent_model"] = model._parent_model
                        if hasattr(model, "_menu_index"):
                            m0['index'] = model._menu_index
                        if hasattr(model, "_select_related_perms"):
                            m0["select_related_perms"] = model._select_related_perms
                        if hasattr(model, "_hide_perms"):
                            m0["hide_perms"] = model._hide_perms
                        if hasattr(model, "_cancel_perms"):
                            m0["cancel_perms"] = model._cancel_perms

                        app_menu = app_label
                        if hasattr(model, "_app_menu"):
                            app_menu = model._app_menu

                elif issubclass(model, AppPage):
                    app_menu = hasattr(
                        model, 'app_menu') and model.app_menu or app_label
                    menu_group = app_menu
                    if usr.has_perm(
                            "contenttypes.can_%s" %
                            model.__name__) or (not model.visible
                                                and not hide_visible_false):
                        m0 = {
                            'verbose_name': u"%(name)s" % {
                                'name':
                                hasattr(model, "verbose_name")
                                and model.verbose_name or
                                (u"%s" % _(model.__name__))
                            },
                            'model': None,
                            'page': model,
                            'operation': model,
                            'menu_group': menu_group,
                            'url': '/page/%s/%s/' %
                            (menu_group,
                             model.__name__),  #reverse(model.view.im_func),
                            'index': model.menu_index,
                            'visible': model.visible
                        }

                if m0:
                    m0['app_label'] = app_label
                    m0['name'] = u"%(name)s" % {'name': model.__name__}
                    if app_menu not in apps:
                        apps[app_menu] = {
                            'name':
                            u"%(name)s" % {
                                'name': _(app_menu)
                            },
                            'models': [
                                m0,
                            ],
                            'index':
                            hasattr(app, '_menu_index') and app._menu_index
                            or 9999
                        }
                    else:
                        apps[app_menu]['models'].append(m0)
            except TypeError:
                pass
            except:
                import traceback
                traceback.print_exc()
                pass
    if hide_visible_false:
        for k, v in apps.items():
            vmodels = [m for m in v['models'] if m["visible"]]
            v['models'] = vmodels
    mlist = [(k, v) for k, v in apps.items() if v['models']]
    mlist.sort(lambda x1, x2: x1[1]['index'] - x2[1]['index'])
    for m in mlist:
        m[1]['models'].sort(lambda x1, x2: (x1['index'] - x2['index']) or
                            (x1['name'] >= x2['name'] and 1 or -1))
    #return dict(mlist)不能排序
    cache.set(cache_key, mlist, 60 * 60 * 24)

    return mlist