/// <summary>
        /// 从ObjectContext中创建非单例controller,并初始化(注入ctx和controller所属的appType)
        /// </summary>
        /// <param name="controllerType"></param>
        /// <param name="ctx"></param>
        /// <returns></returns>
        public static ControllerBase FindController(Type controllerType, MvcContext ctx)
        {
            if (controllerType == null)
            {
                return(null);
            }

            ControllerBase result = ObjectContext.CreateObject(controllerType) as ControllerBase;

            if (result == null)
            {
                return(null);
            }
            result.setContext(ctx);
            setControllerAppInfo(controllerType, result);

            //IControllerFactory factory;
            //factories.TryGetValue( controllerType.FullName, out factory );
            //if (factory == null) return null;

            //ControllerBase result = factory.New();
            //InjectController( result, ctx );

            return(result);
        }
Beispiel #2
0
        private void runAfterAction(MvcContext ctx)
        {
            List <String> pages = new List <String>();

            List <ActionObserver> actionObservers = ControllerMeta.GetActionObservers(ctx.controller.GetType(), ctx.route.action);

            if (actionObservers == null)
            {
                return;
            }

            List <IPageCache> observedPages = new List <IPageCache>();

            foreach (ActionObserver x in actionObservers)
            {
                logger.Info("run after ActionObserver=>" + x.GetType());
                ActionObserver ob = (ActionObserver)ObjectContext.CreateObject(x.GetType());
                ob.AfterAction(ctx);

                if (ob.GetType().IsSubclassOf(typeof(ActionCache)))
                {
                    loadObservedPage((ActionCache)ob, observedPages);
                }
            }

            foreach (IPageCache pc in observedPages)
            {
                logger.Info("update IPageCache=" + pc.GetType().FullName);
                pc.UpdateCache(ctx);
            }
        }
Beispiel #3
0
        private void runJobSingle(HtmlJobItem x)
        {
            try {
                Object p = ObjectContext.CreateObject(x.Name);

                if (strUtil.HasText(x.Ids))
                {
                    rft.CallMethod(p, x.Method, new object[] { x.Ids });
                    cdb.delete(x);
                }
                else if (x.PostId > 0)
                {
                    rft.CallMethod(p, x.Method, new object[] { x.PostId });
                    cdb.delete(x);
                }
                else
                {
                    logger.Info("param is invalid. type=" + x.Name + ", method=" + x.Method);
                }
            }

            catch (Exception ex) {
                logger.Error(ex.Message);
                logger.Error(ex.StackTrace);
            }
        }
Beispiel #4
0
        private void runJobSingle(HtmlJobItem x)
        {
            try {
                Object p = ObjectContext.CreateObject(x.Name);
                rft.CallMethod(p, x.Method, new object[] { x.PostId });

                cdb.delete(x);
            }

            catch (Exception ex) {
                logger.Error(ex.Message);
                logger.Error(ex.StackTrace);
            }
        }
Beispiel #5
0
        private static Dictionary <String, IInitHelper> getInitList()
        {
            Dictionary <String, IInitHelper> map = new Dictionary <String, IInitHelper>();

            foreach (KeyValuePair <String, Type> kv in ObjectContext.Instance.TypeList)
            {
                if (rft.IsInterface(kv.Value, typeof(IInitHelper)) == false)
                {
                    continue;
                }

                IInitHelper obj = ObjectContext.CreateObject(kv.Value) as IInitHelper;

                map.Add(obj.GetMemberType().Name.ToLower(), obj);
            }

            return(map);
        }
Beispiel #6
0
        /// <summary>
        /// 从ObjectContext中创建非单例controller,并初始化(注入ctx和controller所属的appType)
        /// </summary>
        /// <param name="controllerType"></param>
        /// <param name="ctx"></param>
        /// <returns></returns>
        public static ControllerBase FindController(Type controllerType, MvcContext ctx)
        {
            if (controllerType == null)
            {
                return(null);
            }

            ControllerBase controller = ObjectContext.CreateObject(controllerType) as ControllerBase;

            if (controller == null)
            {
                return(null);
            }
            ObjectContext.InterceptProperty(controller);
            controller.setContext(ctx);
            setControllerAppInfo(controllerType, controller);

            return(controller);
        }
Beispiel #7
0
        private static Dictionary <Type, IMenuService> getMenuServiceMap()
        {
            Dictionary <Type, IMenuService> map = new Dictionary <Type, IMenuService>();

            foreach (KeyValuePair <String, Type> kv in ObjectContext.Instance.TypeList)
            {
                if (kv.Value.IsAbstract)
                {
                    continue;
                }
                if (rft.IsInterface(kv.Value, typeof(IMenuService)) == false)
                {
                    continue;
                }

                IMenuService obj = ObjectContext.CreateObject(kv.Value) as IMenuService;

                map.Add(obj.GetMemberType(), obj);
            }

            return(map);
        }
Beispiel #8
0
        public static T CopyEntity <T>(ObjectContext ctx, T entity, bool copyKeys = false) where T : EntityObject
        {
            T clone = ctx.CreateObject <T>();

            PropertyInfo[] pis = entity.GetType().GetProperties();

            foreach (PropertyInfo pi in pis)
            {
                EdmScalarPropertyAttribute[] attrs = (EdmScalarPropertyAttribute[])
                                                     pi.GetCustomAttributes(typeof(EdmScalarPropertyAttribute), false);

                foreach (EdmScalarPropertyAttribute attr in attrs)
                {
                    if (!copyKeys && attr.EntityKeyProperty)
                    {
                        continue;
                    }

                    pi.SetValue(clone, pi.GetValue(entity, null), null);
                }
            }

            return(clone);
        }
Beispiel #9
0
        //--------------------------------------------


        public T Validate(MvcContext ctx)
        {
            String title    = ctx.Post("Title");
            String question = ctx.PostHtml("Question");

            string[]      answers = ctx.web.postValuesByKey("Answer");
            StringBuilder builder = new StringBuilder();
            int           acount  = 0;

            foreach (String answer in answers)
            {
                if ((strUtil.HasText(answer) && (answer.Length > 0)) && (answer.Length < 80))
                {
                    builder.Append(answer);
                    builder.Append("\n");
                    acount++;
                }
            }
            String strAnswer = builder.ToString();

            int    polltype     = ctx.PostInt("PollType");
            int    days         = ctx.PostInt("Days");
            int    voterRank    = ctx.PostInt("VoterRank");
            String strIsVisible = ctx.Post("IsVisible");
            String openVoter    = ctx.Post("OpenVoter");

            if (strUtil.IsNullOrEmpty(title))
            {
                ctx.errors.Add(lang.get("exTitle"));
            }
            if (strUtil.IsNullOrEmpty(strAnswer))
            {
                ctx.errors.Add(alang(ctx, "exPollOptions"));
            }

            if (strUtil.HasText(strAnswer))
            {
                if (acount < 2)
                {
                    ctx.errors.Add(alang(ctx, "exPollMinTwoOptions"));
                }
                if (acount > 20)
                {
                    ctx.errors.Add(alang(ctx, "exPollMaxTwoOptions"));
                }
            }
            if (days > 365 * 10)
            {
                ctx.errors.Add(alang(ctx, "exPollMaxDay"));
                days = 0;
            }

            T poll = (T)ObjectContext.CreateObject(typeof(T));

            poll.Title      = title;
            poll.Question   = question;
            poll.Answer     = strAnswer;
            poll.ExpiryDate = DateTime.Now.AddDays((double)days);
            poll.VoterRank  = voterRank;

            int isVisible = 0;

            if (strUtil.HasText(strIsVisible) && strIsVisible.Equals("on"))
            {
                isVisible = 1;
            }

            int isOpenVoter = 0;

            if (strUtil.HasText(openVoter) && openVoter.Equals("on"))
            {
                isOpenVoter = 1;
            }

            poll.Type        = polltype;
            poll.IsVisible   = isVisible;
            poll.IsOpenVoter = isOpenVoter;

            poll.Creator    = (User)ctx.viewer.obj;
            poll.CreatorUrl = ctx.viewer.obj.Url;

            poll.OwnerId   = ctx.owner.Id;
            poll.OwnerType = ctx.owner.obj.GetType().FullName;
            poll.OwnerUrl  = ctx.owner.obj.Url;

            poll.AppId = ctx.app.Id;
            poll.Ip    = ctx.Ip;

            return(poll);
        }
Beispiel #10
0
        public override void Process(ProcessContext context)
        {
            MvcEventPublisher.Instance.BeginProcessAction(context.ctx);
            if (context.ctx.utils.isSkipCurrentProcessor())
            {
                return;
            }

            MvcContext ctx = context.ctx;

            ControllerBase controller = ctx.controller;


            // 1) 检查 action 缓存
            ActionCacheChecker xChecker     = ActionCacheChecker.InitAction(ctx);
            Object             cacheContent = xChecker.GetCache();

            if (cacheContent != null)
            {
                logger.Info("load from actionCache=" + xChecker.CacheKey);
                context.setContent(cacheContent.ToString());
                setPageMeta_FromCache(ctx, xChecker.CacheKey);
                return;
            }

            // 2) 运行 before action (获取所有的 ActionObserver)
            List <ActionObserver> actionObservers = ControllerMeta.GetActionObservers(controller.GetType(), ctx.route.action);

            if (actionObservers != null)
            {
                foreach (ActionObserver x in actionObservers)
                {
                    ActionObserver ob         = (ActionObserver)ObjectContext.CreateObject(x.GetType());
                    Boolean        isContinue = ob.BeforeAction(ctx);
                    if (!isContinue)
                    {
                        return;
                    }
                }
            }

            // 3) 运行 action
            MethodInfo actionMethod = ctx.ActionMethodInfo; // context.getActionMethod();

            // 设值模板并载入全局变量
            setControllerView(controller, actionMethod);

            // 运行并处理post值
            ActionRunner.runAction(ctx, controller, actionMethod, controller.utils.runAction);
            if (ctx.utils.isEnd())
            {
                afterAction(ctx);
                return;
            }

            String actionContent = controller.utils.getActionResult();

            // 4) 后续缓存处理
            if (xChecker.IsActionCache)
            {
                xChecker.AddCache(actionContent);
                addPageMeta_ToCache(ctx, xChecker.CacheKey);
            }

            actionContent = PostValueProcessor.ProcessPostValue(actionContent, ctx);

            if (ctx.utils.isAjax)
            {
                context.showEnd(actionContent);
            }
            else if (ctx.utils.isFrame())
            {
                int intNoLayout = ctx.utils.getNoLayout();

                if (intNoLayout == 0)
                {
                    String content = MvcUtil.getFrameContent(actionContent);
                    context.showEnd(content);
                }
                else
                {
                    context.setContent(actionContent);
                }
            }
            else
            {
                context.setContent(actionContent);
            }

            afterAction(ctx);
        }
Beispiel #11
0
        public void Create()
        {
            int          appInfoId = cvt.ToInt(ctx.Post("appInfoId"));
            AppInstaller info      = getAppInfo(appInfoId);

            if (info.IsClose(ctx.owner.obj.GetType()))
            {
                echo("app closed");
                return;
            }

            if (!checkInstall(info))
            {
                return;
            }

            String name = ctx.Post("Name");
            //AccessStatus accs = AccessStatusUtil.GetPostValue( ctx.PostInt( "AccessStatus" ) );
            AccessStatus accs = AccessStatus.Public;


            Type appType = ObjectContext.Instance.TypeList[info.TypeFullName];

            if (rft.IsInterface(appType, typeof(IAppInstaller)))
            {
                // 主题ID
                String themeId = ctx.Post("themeId");

                IAppInstaller customInstaller = ObjectContext.CreateObject(appType) as IAppInstaller;
                IMemberApp    capp            = customInstaller.Install(ctx, ctx.owner.obj, name, accs, themeId);
                intiAppPermission(capp);


                echoToParentPart(lang("opok"), to(Index), 1);
                return;
            }


            IMember owner   = ctx.owner.obj;
            User    creator = (User)ctx.viewer.obj;

            // 1、添加一条 IMemberApp
            IMemberApp app = userAppService.Add(creator, owner, name, info.Id, accs);

            if (app != null)
            {
                // 2、添加菜单
                String appUrl = UrlConverter.clearUrl(app, ctx);
                menuService.AddMenuByApp(app, name, "", appUrl);

                // 3、初始化权限
                intiAppPermission(app);

                log(SiteLogString.InsertApp(), app);


                echoToParentPart(lang("opok"), to(Index), 1);
            }
            else
            {
                errors.Add(lang("exop"));

                run(NewApp, info.Id);
            }
        }
Beispiel #12
0
        public void testIocAndAop()
        {
            TComplexObject obj = ObjectContext.CreateObject(typeof(TComplexObject)) as TComplexObject;

            obj.Save();
        }