/// <summary>
        /// Logs a user's current activity (aka action) via the mechanics API.
        /// </summary>
        /// <param name="actionName"></param>
        /// <param name="userid"></param>
        /// <param name="portalid"></param>
        /// <param name="contentItemId"></param>
        /// <param name="context"></param>
        /// <param name="notes"></param>
        public int LogUserActivity(string actionName,
                                   int userid,
                                   int portalid,
                                   int contentItemId,
                                   string context,
                                   string notes)
        {
            var desktopModuleId = DesktopModuleController.GetDesktopModuleByModuleName(Constants.DESKTOPMODULE_NAME, portalid).DesktopModuleID;
            int ret             = -1;

            if (desktopModuleId > 0)
            {
                var smCtrl = MechanicsController.Instance;
                ScoringActionDefinition adef = smCtrl.GetScoringActionDefinition(actionName, DesktopModule.DesktopModuleID);
                if (adef == null)
                {
                    AddScoringDefinitions();
                }

                if (adef != null)
                {
                    ret = smCtrl.LogUserActivity(adef.ActionName, adef.DesktopModuleId, new UserScoreLog
                    {
                        ContentItemId      = contentItemId,
                        Context            = context,
                        Notes              = notes,
                        CreatedOnDate      = DateTime.Now,
                        ScoringActionDefId = adef.ScoringActionDefId,
                        PortalId           = portalid,
                        UserId             = userid
                    });
                }
            }
            return(ret);
        }
        ///<summary>
        /// Returns a scoring activity (aka action) via the mechanics API.
        ///</summary>
        /// <param name="actionName"></param>
        /// <param name="portalid"></param>
        public ScoringAction GetScoringAction(string actionName, int portalid)
        {
            var                     desktopModuleId = DesktopModuleController.GetDesktopModuleByModuleName(Constants.DESKTOPMODULE_NAME, portalid).DesktopModuleID;
            ScoringAction           ret             = null;
            var                     smCtrl          = MechanicsController.Instance;
            ScoringActionDefinition adef            = smCtrl.GetScoringActionDefinition(actionName, desktopModuleId);

            if (adef != null)
            {
                var ctlr = new DotNetNuke.Mechanics.Components.Controllers.Internal.InternalMechanicsController();
                ret = ctlr.GetScoringAction(adef.ScoringActionDefId, portalid);
            }
            return(ret);
        }
        /// <summary>
        /// Add a scoring action definition if it does not already exist.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="exp"></param>
        /// <param name="rep"></param>
        /// <param name="actionType"></param>
        /// <param name="maxCount"></param>
        /// <param name="interval"></param>
        private static void AddScoringAction(string name, int rep, int exp, ActionTypes actionType, int maxCount = 0, ScoringIntervals interval = ScoringIntervals.Undefined)
        {
            var scoringActionDef = MechanicsController.Instance.GetScoringActionDefinition(name, DesktopModule.DesktopModuleID);

            if (scoringActionDef != null)
            {
                return;
            }

            scoringActionDef = new ScoringActionDefinition
            {
                ActionName = name,
                DefaultExperiencePoints = exp,
                DefaultReputationPoints = rep,
                DefaultMaxCount         = maxCount,
                DefaultInterval         = interval,
                DesktopModuleId         = DesktopModule.DesktopModuleID,
                ActionType = actionType
            };

            MechanicsController.Instance.AddScoringActionDefinition(scoringActionDef);
        }