public bool FilterCommitBefore(CFilter filter)
        {
            if (api.Request[api.AddPluginPrefix("HoursFilterType")] != null)
            {
                var pluginField = filter.GetPluginField(Statics.PluginId, "HoursFilterType");
                PreCommitHoursSelection = pluginField == null ? "Unset" : pluginField.ToString();

                var newValue = api.Request[api.AddPluginPrefix("HoursFilterType")].ToLower();
                FilterType type = FilterType.Unset;
                switch (newValue)
                {
                    case "yes":
                        type = FilterType.Yes;
                        break;
                    case "no":
                        type = FilterType.No;
                        break;
                }
                filter.SetPluginField(Statics.PluginId, "HoursFilterType", type.ToString());
            }

            if (api.Request[api.AddPluginPrefix("SplitFilterType")] != null)
            {
                var pluginField = filter.GetPluginField(Statics.PluginId, "SplitFilterType");
                PreCommitSplitSelection = pluginField == null ? "Unset" : pluginField.ToString();

                var newValue = api.Request[api.AddPluginPrefix("SplitFilterType")].ToLower();
                FilterType type = FilterType.Unset;
                switch (newValue)
                {
                    case "yes":
                        type = FilterType.Yes;
                        break;
                    case "no":
                        type = FilterType.No;
                        break;
                }
                filter.SetPluginField(Statics.PluginId, "SplitFilterType", type.ToString());
            }
            return true;
        }
예제 #2
0
 public void FilterCommitRollback(CFilter Filter)
 {
     /* if the filter commit was aborted, reset the awesomeness
      * level to the pre-commit value */
     Filter.SetPluginField(PLUGIN_ID, "ixAwesomness", preCommitAwesomenessLevel);
 }
 public CDialogItem[] FilterDisplayEdit(CFilter filter)
 {
     return null;
 }
 public bool FilterBugEntryCanCreate(CFilter filter)
 {
     return false;
 }
 protected virtual FilterType GetSplitFilterType(CFilter filter)
 {
     if (filter.GetPluginField(Statics.PluginId, "SplitFilterType") != null)
     {
         return (FilterType)Enum.Parse(typeof(FilterType), Convert.ToString(filter.GetPluginField(Statics.PluginId, "SplitFilterType")));
     }
     return FilterType.Unset;
 }
        public CFilterOption[] FilterOptions(CFilter filter)
        {
            var hasHoursOption = api.Filter.NewFilterOption();
            hasHoursOption.fShowDialogItem = true;
            hasHoursOption.SetSelectOne(new[]{"Yes", "No"});
            hasHoursOption.SetDefault(string.Empty);
            hasHoursOption.sQueryParam = api.PluginPrefix + "HoursFilterType";
            hasHoursOption.sHeader = "Has Hours?";
            hasHoursOption.sName = "hasHours";

            var hasSplitOption = api.Filter.NewFilterOption();
            hasSplitOption.fShowDialogItem = true;
            hasSplitOption.SetSelectOne(new[] {"Yes", "No"});
            hasSplitOption.SetDefault(string.Empty);
            hasSplitOption.sQueryParam = api.PluginPrefix + "SplitFilterType";
            hasSplitOption.sHeader = "Has Split?";
            hasSplitOption.sName = "hasSplit";
            return new[] { hasHoursOption, hasSplitOption };
        }
        public CFilterStringList FilterOptionsString(CFilter filter)
        {
            var filterList = new CFilterStringList();
            switch(GetHoursFilterType(filter))
            {
                case FilterType.Yes:
                    filterList.Add("Has Hours", "HoursFilterType");
                    break;
                case FilterType.No:
                    filterList.Add("Has No Hours", "HoursFilterType");
                    break;
                case FilterType.Unset:
                    filterList.Add(string.Empty, "HoursFilterType");
                    break;
            }

            switch(GetSplitFilterType(filter))
            {
                case FilterType.Yes:
                    filterList.Add("Has Split", "SplitFilterType");
                    break;
                case FilterType.No:
                    filterList.Add("Has No Split", "SplitFilterType");
                    break;
                case FilterType.Unset:
                    filterList.Add(string.Empty, "SplitFilterType");
                    break;
            }

            return filterList;
        }
예제 #8
0
        public string FilterOptionsUrlParams(CFilter filter)
        {
            /* To make the filter saveable, we need to assign a querystring
             * parameter to this filter setting. */

            int ixAwesomeness = Convert.ToInt32(
                filter.GetPluginField(PLUGIN_ID, "ixAwesomeness"));

            if (ixAwesomeness < 1)
                return "";
            else
                return api.PluginPrefix + "ixAwesomeness="
                    + Convert.ToString(ixAwesomeness);
        }
예제 #9
0
        protected string GetAwesomenessSelect(CFilter Filter)
        {
            List<string> rgsAwesomenessLevels;
            List<string> rgsAwesomenessIxs;

            int ixSelectedIndex = 0;

            CSelectQuery sq = api.Database.NewSelectQuery(sAwesomenessTableName);

            sq.AddSelect("*");

            /* Iterate through the data set and populate the drop-down */
            DataSet ds = sq.GetDataSet();

            if (ds.Tables[0] == null || ds.Tables[0].Rows.Count == 0)
                return string.Empty;

            int numOptions = ds.Tables[0].Rows.Count;

            rgsAwesomenessLevels = new List<string>();
            rgsAwesomenessIxs = new List<string>();

            for (int i = 0; i < numOptions; i++)
            {
                rgsAwesomenessLevels.Add(ds.Tables[0].Rows[i]["sAwesomenessLevel"].ToString());
                rgsAwesomenessIxs.Add(ds.Tables[0].Rows[i]["ixAwesomeness"].ToString());
            }

            /* If there's already an "Awesomeness" value, set the selected index of the drop-down
             * to the proper non-zero value */

            if (Convert.ToInt32(Filter.GetPluginField(PLUGIN_ID, "ixAwesomeness")) != 0)
                ixSelectedIndex = Convert.ToInt32(
                    Filter.GetPluginField(PLUGIN_ID, "ixAwesomeness")) - 1;

            return Forms.SelectInput(api.PluginPrefix + "ixAwesomeness",
                rgsAwesomenessLevels.ToArray(),
                rgsAwesomenessIxs[ixSelectedIndex],
                rgsAwesomenessIxs.ToArray());
        }
예제 #10
0
        public CSelectQuery FilterOptionsQuery(CFilter filter)
        {
            /* Specify a query for the list of cases to be returned when the
             * filter is imposed. */

            int ixAwesomeness =
                ToAwesomenessSelectRange(
                Convert.ToInt32(filter.GetPluginField(PLUGIN_ID, "ixAwesomeness")));

            CSelectQuery query = api.Database.NewSelectQuery("Bug");
            if (ixAwesomeness == 0)
                return query;

            query.AddLeftJoin(sBugAwesomenessTableName, "Bug.ixBug = joinedBug.ixBug", "joinedBug");
            query.SetParamInt("ixAwesomeness", ixAwesomeness);

            if (ixAwesomeness == 1)
            {
                query.AddWhere(
                    @"joinedBug.ixAwesomeness IS NULL OR
                    joinedBug.ixAwesomeness = @ixAwesomeness");
            }
            else
            {
                query.AddWhere("joinedBug.ixAwesomeness = @ixAwesomeness");
            }

            return query;
        }
예제 #11
0
        public CFilterStringList FilterOptionsString(CFilter filter)
        {
            int ixAwesomeness = Convert.ToInt32(
                filter.GetPluginField(PLUGIN_ID, "ixAwesomeness"));

            CFilterStringList list = new CFilterStringList();

            /* Return a string for the "Filter:" message at the top of the case list
             * so that the the user can clearly interpret current filter settings.
             * ixAwesomeness = 0 will correspond to "any level of awesomeness," so
             * no message is shown at all in that case. */

            string sFilterString;
            /* if there is an awesomeness in the range of possible values,
             * generate the filter string */
            if (ixAwesomeness > 0 && ixAwesomeness <= rgsAwesomenessIxs.Length)
            {
                if (ixAwesomeness == 1)
                {
                    sFilterString = "with no level of awesomeness specified";
                }
                else
                {
                    sFilterString = String.Format(@"with awesomeness level ""{0}""",
                        GetAwesomenessString(ixAwesomeness));
                }
                /* the second parameter to CFilterStringList.Add specifies the
                 * CFilterOption by name to display when the text is clicked */
                list.Add(sFilterString, "awesomeness");
            }
            return list;
        }
예제 #12
0
        public CFilterOption[] FilterOptions(CFilter filter)
        {
            /* Create a new filter option to be included in the list of options
             * available in the "Filter:" drop-down at the top of the case
             * list. */

            int ixAwesomeness =
                ToAwesomenessSelectRange(
                Convert.ToInt32(filter.GetPluginField(PLUGIN_ID, "ixAwesomeness")));

            CFilterOption fo = api.Filter.NewFilterOption();

            /* Specify a single-select drop-down, and add a default value of "any" */

            fo.SetSelectOne(rgsAwesomenessLevels,
               Convert.ToString(ixAwesomeness), rgsAwesomenessIxs);
            fo.SetDefault("0", "Any");
            fo.sQueryParam = api.PluginPrefix + "ixAwesomeness";
            fo.fShowDialogItem = true;
            fo.sHeader = "Level of Awesomeness";
            fo.sName = "awesomeness";
            return new CFilterOption[] { fo };
        }
예제 #13
0
        public string[] FilterDisplayListFields(CFilter Filter)
        {
            int ixAwesomeness = Convert.ToInt32(
                Filter.GetPluginField(PLUGIN_ID, "ixAwesomeness"));
            /* including dashes to match those automatically added on the
             * edit filter page, so the user knows it's not the literal
             * awesomeness value "Any" */
            string s = (ixAwesomeness < 2) ?
                       "-- Any --" :
                       GetAwesomenessString(ixAwesomeness);

            return new string[] { s };
        }
예제 #14
0
 public CDialogItem[] FilterDisplayEdit(CFilter Filter)
 {
     /* if you specify one or more CFilterOptions, they will appear
      * on the edit filter page automatically. You don't need to
      * explicitly add dialog items here. */
     return null;
 }
 /// <summary>
 /// Read the filter's ixPersonOriginallyOpenedBy. If it's invalid, fix it (set it to "any")
 /// </summary>
 /// <param name="filter">Filter to check (and possibly update)</param>
 /// <returns>The validated ixPersonOriginallyOpenedBy</returns>
 protected int GetFieldValueFromFilter(CFilter filter)
 {
     filter.IgnorePermissions = true;
     int ixPersonFromFilter = Convert.ToInt32(filter.GetPluginField(PLUGIN_ID,
                                                                    PLUGIN_FIELD_NAME));
     if (!IsValidPerson(ixPersonFromFilter))
     {
         ixPersonFromFilter = IXPERSON_ANY;
         filter.SetPluginField(PLUGIN_ID, PLUGIN_FIELD_NAME, ixPersonFromFilter);
     }
     return ixPersonFromFilter;
 }
 public string FilterBugEntryUrlParams(CFilter filter)
 {
     return "";
 }
 public bool FilterBugEntryCanCreate(CFilter filter)
 {
     // you cannot set an opener on a new case, so don't allow quick-adding if the filter
     // includes an original opener
     return (GetFieldValueFromFilter(filter) < IXPERSON_MIN);
 }
        public bool FilterCommitBefore(CFilter Filter)
        {
            if (api.Request[sPluginFieldNamePrefixed] != null)
            {
                ixPersonOriginallyOpenedByPreCommit =
                Convert.ToInt32(Filter.GetPluginField(PLUGIN_ID, PLUGIN_FIELD_NAME));

                int ixPersonOriginallyOpenedBy = IXPERSON_INVALID;

                /* use tryparse in case the URL querystring value isn't a valid integer */
                if (Int32.TryParse(api.Request[sPluginFieldNamePrefixed].ToString(),
                                   out ixPersonOriginallyOpenedBy))
                {
                    // if the requested value isn't an actual CPerson, set the plugin field to "any"
                    if (!IsValidPerson(ixPersonOriginallyOpenedBy))
                        ixPersonOriginallyOpenedBy = IXPERSON_ANY;
                    Filter.SetPluginField(PLUGIN_ID, PLUGIN_FIELD_NAME,
                        ixPersonOriginallyOpenedBy);
                }
            }

            return true;
        }
        public CSelectQuery FilterOptionsQuery(CFilter filter)
        {
            var select = api.Database.NewSelectQuery("Bug");
            var pluginTableName = GetPluginTableName(Tables.HOURS_TABLE);
            switch(GetHoursFilterType(filter))
            {
                case FilterType.Yes:
                    select.AddLeftJoin(pluginTableName, string.Format("Bug.ixBug = {0}.ixBug", pluginTableName));
                    select.AddWhere(string.Format("{0}.ixBug IS NOT NULL", pluginTableName));
                    break;
                case FilterType.No:
                    select.AddLeftJoin(pluginTableName, string.Format("Bug.ixBug = {0}.ixBug", pluginTableName));
                    select.AddWhere(string.Format("{0}.ixBug IS NULL", pluginTableName));
                    break;
            }

            pluginTableName = GetPluginTableName(Tables.SPLIT_TABLE);
            switch (GetSplitFilterType(filter))
            {
                case FilterType.Yes:
                    select.AddLeftJoin(pluginTableName, string.Format("Bug.ixBug = {0}.ixBug", pluginTableName));
                    select.AddWhere(string.Format("{0}.ixBug IS NOT NULL", pluginTableName));
                    break;
                case FilterType.No:
                    select.AddLeftJoin(pluginTableName, string.Format("Bug.ixBug = {0}.ixBug", pluginTableName));
                    select.AddWhere(string.Format("{0}.ixBug IS NULL", pluginTableName));
                    break;
            }
            return select;
        }
 public void FilterCommitRollback(CFilter Filter)
 {
     Filter.SetPluginField(PLUGIN_ID, PLUGIN_FIELD_NAME, ixPersonOriginallyOpenedByPreCommit);
 }
        public string FilterOptionsUrlParams(CFilter filter)
        {
            var hours = string.Empty;
            switch (GetHoursFilterType(filter))
            {
                case FilterType.Yes:
                    hours = api.PluginPrefix + "HoursFilterType=Yes";
                    break;
                case FilterType.No:
                    hours = api.PluginPrefix + "HoursFilterType=No";
                    break;
            }

            var split = string.Empty;
            switch (GetSplitFilterType(filter))
            {
                case FilterType.Yes:
                    split = api.PluginPrefix + "SplitFilterType=Yes";
                    break;
                case FilterType.No:
                    split = api.PluginPrefix + "SplitFilterType=No";
                    break;
            }

            if (hours == string.Empty)
            {
                return split;
            }
            if (split == string.Empty)
            {
                return hours;
            }
            return hours + "&" + split;
        }
        public CFilterOption[] FilterOptions(CFilter filter)
        {
            /* Create a new filter option to be included in the list of options
             * available in the "Filter:" drop-down at the top of the case
             * list. */

            int ixPersonOriginallyOpenedBy = GetFieldValueFromFilter(filter);

            CFilterOption filterOption = api.Filter.NewFilterOption();

            /* Specify a single person select drop-down */
            filterOption.SetSelectOnePerson(ixPersonOriginallyOpenedBy);
            filterOption.sQueryParam = sPluginFieldNamePrefixed;
            filterOption.fShowDialogItem = true;
            filterOption.sHeader = FILTER_HEADING;
            filterOption.sName = PLUGIN_FIELD_NAME;
            filterOption.SetDefault(IXPERSON_ANY.ToString(), FILTER_OPTION_ANY);
            return new CFilterOption[] { filterOption };
        }
 public string FilterBugEntryUrlParams(CFilter filter)
 {
     return api.PluginPrefix + "HoursFilterType=" + filter.GetPluginField(Statics.PluginId, "HoursFilterType") + "&SplitFilterType=" + filter.GetPluginField(Statics.PluginId, "SplitFilterType");
 }
        public CSelectQuery FilterOptionsQuery(CFilter filter)
        {
            int ixPersonOriginallyOpenedBy = GetFieldValueFromFilter(filter);

            CSelectQuery query = api.Database.NewSelectQuery("Bug");
            if (ixPersonOriginallyOpenedBy < IXPERSON_MIN)
                return query;

            query.AddLeftJoin("BugEvent", GetBugOpenedEventLeftJoinClause(), BUGEVENT_TABLE_ALIAS);
            query.AddWhere(string.Format("{0}.ixPerson = @ixPersonOriginallyOpenedBy",
                                         BUGEVENT_TABLE_ALIAS));
            query.SetParamInt("@ixPersonOriginallyOpenedBy", ixPersonOriginallyOpenedBy);

            return query;
        }
 public void FilterCommitAfter(CFilter filter)
 {
 }
        public CFilterStringList FilterOptionsString(CFilter filter)
        {
            int ixPersonOriginallyOpenedBy = GetFieldValueFromFilter(filter);

            CFilterStringList list = new CFilterStringList();

            /* Return a string for the "Filter:" message at the top of the case list
             * so that the the user can clearly interpret current filter settings. */

            string sFilterString;

            if (ixPersonOriginallyOpenedBy >= IXPERSON_MIN)
            {
                sFilterString = string.Format("{0} {1}",
                                              FILTER_STRING,
                                              api.Person.GetPerson(ixPersonOriginallyOpenedBy).sFullName);

                /* the second parameter to CFilterStringList.Add specifies the
                 * CFilterOption by name to display when the text is clicked */
                list.Add(sFilterString, PLUGIN_FIELD_NAME);
            }
            return list;
        }
 public void FilterCommitRollback(CFilter filter)
 {
     filter.SetPluginField(Statics.PluginId, "HoursFilterType", PreCommitHoursSelection);
     filter.SetPluginField(Statics.PluginId, "SplitFilterType", PreCommitSplitSelection);
 }
        public string FilterOptionsUrlParams(CFilter filter)
        {
            /* To make the filter saveable, we need to assign a querystring
             * parameter to this filter setting. */

            int ixPersonOriginallyOpenedBy = GetFieldValueFromFilter(filter);

            if (ixPersonOriginallyOpenedBy < IXPERSON_MIN)
                return "";
            else
                return string.Format("{0}={1}",
                                     sPluginFieldNamePrefixed,
                                     ixPersonOriginallyOpenedBy);
        }
 public string[] FilterDisplayListFields(CFilter filter)
 {
     return new[] {"Has Hours?", "Has Split?"};
 }
예제 #30
0
        public bool FilterCommitBefore(CFilter Filter)
        {
            /* Set the preCommitAwesomenessLevel member variable */

            if (api.Request[api.AddPluginPrefix("ixAwesomeness")] != null)
            {
                int ixAwesomenessNew = -1;

                preCommitAwesomenessLevel = Convert.ToInt32(Filter.GetPluginField(PLUGIN_ID,
                        "ixAwesomeness"));

                /* use tryparse in case the URL querystring value isn't a valid integer */
                if (Int32.TryParse(api.Request[api.AddPluginPrefix("ixAwesomeness")].ToString(), out ixAwesomenessNew) &&
                    (ixAwesomenessNew > -1)
                )
                    Filter.SetPluginField(PLUGIN_ID, "ixAwesomeness",
                        ixAwesomenessNew);
            }

            return true;
        }