Ejemplo n.º 1
0
def generate_menu(request):
    dajax = Dajax()

    account = Account.objects.get(user=request.user)
    wx_account = None
    if account.has_wx_bound:
        wx_account = WXAccount.objects.filter(account=account, state=WXAccount.STATE_BOUND)[0]

    menu_count = wx_account.menu_set.count()
    if menu_count >= 2 and menu_count <= 3:
        wx_access_token = cache.get('wx_access_token_%d' % wx_account.id, None)
        if wx_access_token is None:
            wx_access_token = get_wx_access_token(wx_account.app_id, wx_account.app_secret)

        if wx_access_token is None:
            dajax.add_data({ 'ret_code' : 1001, 'ret_msg' : '微信系统繁忙,请重试生成菜单' }, 'generateMenuCallback')
        else:
            view_fmt = u'{"type": "view", "name": "%s", "url": "%s"}'
            buttons = []
            for menu in wx_account.menu_set.all():
                sub_buttons = []
                menuItems = PageGroup.objects.filter(menu=menu)
                if not is_app_menu(menu):
                    if len(menuItems) > 1:
                        for item in menuItems:
                            values = (item.page.tab_name, get_page_url(item.page))
                            sub_buttons.append(view_fmt % values)
                else:
                    page = menuItems[0].page
                    if page.real_type == ContentType.objects.get_for_model(ProductApp):
                        product_app = page.cast()
                        for cls in product_app.productclass_set.all():
                            sub_buttons.append(view_fmt % (cls.name, cls.get_url()))
                        sub_buttons.append(view_fmt % (u'全部产品', get_page_url(page)))
                    elif page.real_type == ContentType.objects.get_for_model(CaseApp):
                        case_app = page.cast()
                        for cls in case_app.caseclass_set.all():
                            sub_buttons.append(view_fmt % (cls.name, cls.get_url()))
                        sub_buttons.append(view_fmt % (u'全部成功案例', get_page_url(page)))

                if len(sub_buttons) > 0:
                    fmt = u'{ "type": "click", "name": "%s", "sub_button": [%s] }'
                    buttons.append(fmt % (menu.name, ','.join(sub_buttons)))
                else:
                    buttons.append(view_fmt % (menu.name, get_page_url(menuItems[0].page)))

            menu_data = u'{"button":[%s]}' % ','.join(buttons)
            logger.debug("menu_data:")
            logger.debug(menu_data)
            if create_wx_menu(wx_access_token, menu_data):
                dajax.add_data({'ret_code' : 0, 'ret_msg' : ''}, 'generateMenuCallback')
            else:
                dajax.add_data({'ret_code' : 1002, 'ret_msg' : '微信系统繁忙,请重试生成菜单!'},'generateMenuCallback')
    else:
        dajax.add_data({ 'ret_code' : 1000, 'ret_msg' : '菜单项数量应该为2~3个!' }, 'generateMenuCallback')

    return dajax.json()