Closed Bug 91037 (bz-customfields) Opened 24 years ago Closed 14 years ago

A generic implementation for custom fields

Categories

(Bugzilla :: Bugzilla-General, enhancement, P1)

2.12
enhancement

Tracking

()

RESOLVED FIXED

People

(Reporter: tony.tyson, Unassigned)

References

(Depends on 10 open bugs, )

Details

(Keywords: meta, Whiteboard: [Read Comment 312] *#*#* POST NO SUPPORT QUESTIONS HERE *#*#* [Summary: Comment 239])

Attachments

(34 files, 17 obsolete files)

7.26 KB, patch
Details | Diff | Splinter Review
598 bytes, text/plain
Details
1.58 KB, patch
Details | Diff | Splinter Review
10.22 KB, text/plain
Details
471 bytes, patch
Details | Diff | Splinter Review
416 bytes, patch
Details | Diff | Splinter Review
8.12 KB, patch
Details | Diff | Splinter Review
1.53 KB, patch
Details | Diff | Splinter Review
4.36 KB, patch
Details | Diff | Splinter Review
12.70 KB, patch
Details | Diff | Splinter Review
26.76 KB, patch
Details | Diff | Splinter Review
40.99 KB, patch
Details | Diff | Splinter Review
8.33 KB, patch
Details | Diff | Splinter Review
12.57 KB, text/plain
Details
30.00 KB, application/x-tar
Details
36.81 KB, patch
bbaetz
: review-
Details | Diff | Splinter Review
34.33 KB, patch
Details | Diff | Splinter Review
28.83 KB, patch
Details | Diff | Splinter Review
1.17 KB, patch
Details | Diff | Splinter Review
59.92 KB, patch
Details | Diff | Splinter Review
63.54 KB, patch
Details | Diff | Splinter Review
14.57 KB, patch
Details | Diff | Splinter Review
1.20 KB, patch
Details | Diff | Splinter Review
66.76 KB, patch
Details | Diff | Splinter Review
4.18 KB, patch
Details | Diff | Splinter Review
21.71 KB, application/octet-stream
Details
11.03 KB, patch
Details | Diff | Splinter Review
87.54 KB, patch
Details | Diff | Splinter Review
312 bytes, patch
Details | Diff | Splinter Review
312 bytes, patch
Details | Diff | Splinter Review
312 bytes, patch
Details | Diff | Splinter Review
39.23 KB, patch
Details | Diff | Splinter Review
6.83 KB, patch
mkanat
: review-
Details | Diff | Splinter Review
49.08 KB, patch
Details | Diff | Splinter Review
This enhancements allows users to add custom fields to bugzilla. This is accomplished through 3 new tables on the database side. Enclosed is the current version (perl patch/schema/setup). Buglist (querying) and processmail still need to be updated. A nicer front end for adding the custom fields would be nice too.
Attached file schema updates
Quick setup: # # Create a few new fields (valexp is a | delimited list of valid values) # mysql> insert into customfields (name,type,valexp) values ('CF1', 'single', 'a|b|c'); mysql> insert into customfields (name,type,valexp) values ('CF2', 'single', '1|2|3'); mysql> insert into customfields (name,type,valexp) values ('CF3', 'single', 'a|b|c|1|2|3'); # # Associate the new fields with a product # mysql> insert into products_customfields (product,cf_id) -> select 'TestProduct' product, id cf_id from customfields -> where name='CF1' or name='CF2' or name='CF3'; # # Go ahead and update fields # mysql> insert into fielddefs (name, description, sortkey) -> values( 'CF1', 'CF1', 42); mysql> insert into fielddefs (name, description, sortkey) -> values( 'CF2', 'CF2', 43); mysql> insert into fielddefs (name, description, sortkey) -> values( 'CF3', 'CF3', 44); delete your versioncache and your off ... Still needs some work. I'll contribute more soon.
I went ahead and implemented the ability to query on the custom fields. There is some reasonably complex stuff going on in buglist.cgi. I recommend anyone attempting schema changes to bugzilla to get a handle on that code first (unlike myself :) So with this patch you can use the advanced query to search based on the value of custom fields like "Customer=TheFlintstones" or "Reproducibility>5". Now you can create per product custom fields by inserting some values into the database. The resulting fields can be entered, changed, queried, and tracked via the activity table. On the down side, doing queries with multiple custom fields results in several joins (potentially poor performance).
Keywords: patch, review
Priority: -- → P3
Target Milestone: --- → Bugzilla 2.16
I'm kind of confused - can you please write what steps I have to do in order to put new fields? I've tried to run the editcustomfields.cgi that you've attached and got a server error...
Sorry, I've meant a software error. The full error is this: Software error: select id, c.name, f.description, type, valexp from customfields c, fielddefs f WHERE f.name = c.name ORDER BY id: Table 'bugs.customfields' doesn't exist at globals.pl line 173.
It looks like you miss "customfields" table. Are you sure you've applied all changes described by Tony Tyson (first two attachements for this bug)? editcustomfields.cgi is _just_ front end for database changes done by Tony.
So in general, to add new fields all I have to do is to create three new tables as described in attachment 2 [details] [diff] [review] of Tony, add code as described in attachments 1 and 3 of Tony, and add editcustomfields.cgi?
Exactly. You should also apply patch from attachment 5 [details] to make editcustomfields script available from standard bugzilla footer. Alternatively, you can add hyperlink to it on bugzilla main page or wherever you want.
As far as I understand, in the "Value expression" field I should enter the values that will show in the list. But I succedded to write there only one value. How can I have several values?
You must separate values with "|" character (you can find it in Tony's example above) e.g.: "one|two|three". Maybe I will add some GUI for adding multiple values in more civilized way. Or at least some help text.
Ok, now I've got it. Thanks, now I have my new fields working. I think it will be a great idea to enter this feature into the next formal version.
-> Bugzilla product, General component, reassigning.
Assignee: tara → justdave
Component: Bugzilla → Bugzilla-General
Product: Webtools → Bugzilla
Version: Bugzilla 2.12 → 2.12
Here are the results of my e-mail discussion with Tony and other usenet suggestions. I put it here not to be forgotten in case someone wish to implement it (in Bugzilla 2.16?): Generally, it seems that customfield needs some additional attributes to be even cooler: description (mediumtext) - Description of the field. On "new bug"/"query" pages field name can be hyperlink which displays this text. default (mediumtext) - Optional default value of a field. For fields of type "any" this may be regular expression that can match more than one selection. mandatory (integer) - boolean flag indicating if the field is mandatory for a new bug. The user would not be allowed to enter a bug without mandatory customfield. valid_exp (mediumtext) - Perl regular expression to validate input. You could specify the field to be e.g. decimal number, string or whatever. There should be the possibility to control customfields layout on "query bug" page. It should be considered how all this stuff affects performance (great number of bugs and customfield values).
Since we appear to be headed towards a template-based bugzilla, I would suggest the following additional information should be stored about each field as well: 1) a flag that indicates whather the field will be dynamically inserted in the "custom fields" area of the default template or not. Reasoning for this is if you want to put the new field somewhere specific on the layout, you would want to turn this off, and manually place it in your custom copy of the template. 2) a flag to indicate whether the field should be included on the new bug entry screen. This might be able to be combined with the "required" flag, that is, make the field "required", "optional", or "not needed". required and optional would both show up on the new bug entry page, and not needed would only show up on the bug change form.
I've attached a patch for editcustomfields.cgi. This prevents "zombie" customfields values to stay in bugs_customfields table, when customfields itselt is being deleted. I think it is reasonable to delete values of customfiled when the filed is deleted...
I've attached a patch for full (I hope) support for customfields of type "multi" and "any". This is obvious but - please backup your files before you apply it! I had a little problem to stay in-sych with all those patches-to- patches... The patch itself should be applied after all previous patches attached this bug.
Ooops... One more thing about 'Support for customfields of type "any" and "multi"' patch - you have to delete your data/versioncache file to make it work!
For future modifications to this entry, I'd like to contribute our situation... The issue for us is that we have a ton of products. They kind of break down into four categories, "client", "server", "requirements", and "other". Each of these categories will have different requirements on which custom fields are used. i.e the client products will need fields like "client os". The issue is that it is difficult to pick and choose all of these products out of the list of hundreds for each custom field added. It is especially difficult because when new products are added, we have to remember to add the correct custom fields to it. What I'd like to be able to do is select a group and have it select those products for me... It could also extend to other areas, i.e. querying on number of bugs per group, etc.
Also please note: 1. The field names in the bugs activity table have changed. Fix this by: diff -u -r1.5 process_bug.cgi --- process_bug.cgi 11 Oct 2001 09:00:03 -0000 1.5 +++ process_bug.cgi 11 Oct 2001 23:28:55 -0000 @@ -1471,7 +1472,7 @@ SendSQL($qstr); my $fid = GetFieldID($_); - $qstr = "insert into bugs_activity (bug_id,who,bug_when,fieldid,oldvalue,newvalue)" . + $qstr = "insert into bugs_activity (bug_id,who,bug_when,fieldid,removed,added)" . " values ($bugid,$whoid,'$timestamp',$fid,'$cfbug{$_}[0]','$::FORM{$_}')"; #print "<pre>$qstr</pre>\n"; SendSQL($qstr); 2. The current implementation only works if the field name is a valid identifier. There needs to be something like $name =~ s|[^A-Za-z0-9]+|_|g in appropriate places.
You mean bugs_activity table definition changed from bugzilla 2.12 -> 2.14? Does it mean that you were able to add custom fields to 2.14? Actually, custom fields stuff is the only reason why I did not upgrade to 2.14 so far. I even did not try...
What is the status of this ticket v-s-a-vis 2.16?
There is no traction here wrt to 2.16, it is alongside many other useful patches we would like to look at.
So what do we have to do to get it in?
For 2.16, there is little that can be done. I don't see any way this is going to make it. But we're now trying for shorter release cycles, so this isn't such a tragedy. For getting this in faster, there are various things you can do. You can volunteer someone else as a reviewer (I've asked louie to take a look at this). In terms of getting the code ready: We want all MySQLisms removed so Bugzilla can be cross database compatible. This means (at least) no enumeration types, instead they should be converted to IDs or plain integers. Also mediumint will probably be deprecated in favour of int as that is ANSI SQL. We want all CGIs templatised and running in taint mode. We're heading there at the moment. In particular, this work is going to clash with that, so I don't see us getting far until that is no longer so. See bug #86168 regarding templates. Also regarding the edit*.cgi files, see in particular bug #97706. The initial work for this is currently housed on the CUST_RES_BRANCH, which is bug #94534 among some others. In particular I want most edit*.cgi to use admineditor.pl on this branch. This will give you easy templatisation and taint mode. I had thought this stored it's values in localconfig, apparently it doesn't maybe I saw an older version, this is good. An overview of how this currently works would be good too.
"Change several bugs at once" did not work with customfields - customfields-handling code was outside the bug-processing loop. This patch puts it inside.
Not on the 2.16 train at the moment. Gerv
Target Milestone: Bugzilla 2.16 → Bugzilla 2.18
I have applied all the changes for buglist.cgi that enable the long listing for the custom fields but have noticed that the custom fields cannot be selected for 'custom column' arrangements. Can someone suggest a fix for this? I am attempting to create a simple patch but would welcome some help from people stronger in mysql programming.
Greetings, i've patched added the tables to my mysql database and i've used the patches above but when i got to about patch number 5 (support for 'any' and 'multi' i noticed that bugzilla wasn't updating the new tables in the mysql database with the new custom fields when i commit the bug. is this due to a patch i missed? any info would be helpful. thanks.
You mean, you cannot see custom fields values, you've entered on "show bug" page? Or you don't see these values in "bugs" table? If it is "bugs" table which bothers you, then don't bother - custom fields are stored in separate table (bugs_customfields) which refers to "bugs" through bug_id field.
No, I mean the custom field shows up in bugzilla, but when i alter the custom field and commit the bug, then go back and look the bug up again, it's always the default value. When i look up my custom field in the Mysql DB it's empty.
OK, i did all this last Friday so i've forgotten some info here. I'm trying to get these patches to work in solaris 5.8... the patches themselves didn't go through for most hunks, (I'm using the latest version of patch). In order to get things off the ground i edited the files manually and added/deleted lines like the patches would have if patch was working. this got me to the point were everything was working but the afore mentioned problem of the custom field not being updated in the database when the bug was commited. Any more info on making the patches work themselves or the DB update issue would help out alot :) Thanks.
ok and it's bugs_customfields->values thats not getting updated. bug_id and cf_id work fine.
First of all - it's pretty strange that you were not able to make the patches. I've checked all my patches before sending it here (SuSE Linux) Maybe you tried to patch 2.14? The patches here are for 2.12, but some people claimed they were able to hack 2.14 too. Second - providing you can see your desired customfields on enter_bug page, there is only one place where its values goes into bugs_customfields table: one "for" statement at the very end of post_bug.cgi, right before "Bug $id posted" printout. As you say, you were editing the files manulay, maybe you've missed something in post_bug.cgi?
Heh i figured it out afew days ago. this was rather stupid... No we're using 2.12 here but someone created a values name in custom_fields with a space in it. And thats all that it was. :) as for the patches... i still don't know why they don't work... :| Thanks for your help though.
Does anyone have a jumbo patch for this against 2.15?
This adds support for custom fields for bug_email.pl (inserting bugs to Bugzilla through e-mail). This patch is against Bugzilla 2.12!!! You specify customfields in the mail body just like other fields (no spaces in customfield name!), e.g.: @DatabaseType = Oracle The patch contains some other things as well: - support form attachments of typy "inline" - "qa_contact" is required only if useqacontact parameter is on.
Can anyone suggest a patch for "Change Columns" on the query page that will select/deselect customfields? I updated colchange.cgi to something like the following: my @masterlist = ("opendate", "source", "contact", "company", ..... where "company" is a customfield. Apparently this data is fed back into buglist.cgi and that's where the actual change needs to be. I started to modify buglist.cgi to something like the following: my @legal_fields = ("product", "version", "company", ..... but then realized that customfields has its' own table and this approach won't work. Can anyone give suggestions on how to get buglist.cgi to recognize the different customfield selections from colchange.cgi? I'm trying to get one (or more) customfields printed in the issue list query output.
I'm coding a fix to include custom columns in 'change columns' in the query results. Changes to buglist.cgi, colchange.cgi and globals.pl. Sorting by custom columns would require a major rewrite of buglist.cgi.
Revised custom fields patch against 2.14.1 -- very experimental, please read, discuss, test and correct. Doesn't include editcustomfields.cgi (see the next attachment).
This goes with the previous attachment to this ticket. It is a revised version of the custom fields definition editor. Again, very experimental, uploaded so you can read, review, test etc.
Arguably there should be three attributes of a custom field: - an identifier for use in HTML name attributes (e.g. 'EffortDays' or maybe 'customfield01') - a name to be displayed next to the field value (e.g. 'Effort (Days)') and - a description (e.g. "Estimated/actual effort in days"). We only have two of these at the moment. Does anyone have any preferences/ideas? Also there is a bug in my revised patch (you get the wrong columns if you select "change several bugs at once" and also display a custom field). When you find some more bugs I may issue a revised^2 patch. You may also notice that, if you display more than one custom field in the buglist, you can't sort by any of them. This is a feature.
Dave, since there is such a lot of interest in this patch, any chance of reconsidering it for 2.16? Maybe "ifdef'ed" using Param('usecustomfields')? This would make a lot of people happy. Would anyone of those who have worked on this be willing to redo it when all templatization patches have been checked in? Or maybe this can get in as the first thing after 2.16, followed by a 2.16.1 release for just this feature? This way, people using this can skip 2.16 and directly upgrade to 2.16.1...
considering we really did make it to "freeze mode" for 2.16, I think 2.17.1 sounds like a good plan. Won't be long now.
I just want to say that I strongly support Andreas' comment. Having this patch in would make transitioning to 2.16 or 2.16.1 sooooooo much easier for me, Ximian, and GNOME.
What would have to be done to get this into 2.16.1?
hopefully there won't be a 2.16.1. Even number minor revision numbers are for the stable releases and security fixes to those releases. 2.17.1 would be the next incremental feature release (and 2.18 would be the next stable release)
A'propos comment #49: This seems OK. "description" could be accessible by clicking on custom field name on show_bug page. An identifier for use in HTML name attributes seems OK - this will prevent syntax problems. But maybe we could use custom field id for this? E.g. "cfield$id". This way: 1. we would have HTML-correct and unique name 2. we don't have to introduce another identifier. I don't think it will complicate the code. Besides the issues mentioned in my comment #17, it would be good it there is a way to specify order of custom fields on "bug_form.pl" form. Maybe we need separate table (customfields_layout?), which would specify layout for each product. Layout could be an expression, like: "9,5|11", where the numbers are field identifiers and "|" is "line-break". It seems like defining customfields set for product twice... Maybe someone have better idea? BTW: does anybody have some experience how much customfields stuff affects performance? I mean really big database. My bug-set (few hundreds bugs) seems too small to judge.
As far as performance, the bug database I'm using is up to 3,100 issues. We have 8 custom fields defined which results in about 24K rows in the bugs_customfields table. That table would be the most significant factor in performance issues. With about 50 or so active users, I would say that we really have not observed any performance issues. Looking back at the schema, it would probably make sense to put a multi-column index on the bug_id and cf_id fields in the bugs_customfields table. Another option may be to make the value field a varchar(255) instead of mediumtext. That would restrict the max size of any value, including "or'ed" multi-values, to 255 characters. Oh, and I'll be very happy if this enhancement gets into the final product :)
Yes, I think it is a good idea to make customfield value varchar rather then mediumtext. From my experience it seems that customfields are rather used for storing short "tags" rather then long texts. This limitation would probably hit "multi" fields first... But - I think it can be an installation option: varchar(255) default. You can start with varchar and optionally convert the column to mediumtext - it s is legal im mysql.
There was a bug in the previous "Revised patch against 2.14.1 (alpha) part 1". When you only had a multi-select custom field, it wouldn't appear on the new bug form. I changed line 583 of the patch from: if (%customfield_popups || %customfield_text) { To: if (%customfield_multi || %customfield_popups || %customfield_text) { Otherwise, I've been rather happy with the patch!
Could someone obsolete my "Puts table definitions (with indexes) into checksetup.pl", "Prints custom fields in 'long list' (formatted for print)" and "Revised patch against 2.14.1 (alpha) part 1" patches please? I don't have permission. Why do you want to restrict field values to 255 characters? Sometimes we want to be able to write more e.g. a "testing performed" field. I was considering an alternative implementation in which some custom fields were stored on the bugs table instead. This would complicate the custom fields code but the SQL would run faster. This would also allow a choice of datatypes for fields.
Attachment #53171 - Attachment is obsolete: true
About VARCHAR - it seems that I have rather wrong idea that this will give better performance then mediumtext. I've read a bit of mysql docs and it does not seem so. Some database expert should answer this question. From my point of view, customfields are used to store some short tags, which I can query. I use status whiteboard and attachments for long texts. But, of course, if varchar has no better performance then mediumtext - why no use it.
I'm not a database expert, but I can tell you that VARCHAR is cross-db complient whereas MEDIUMTEXT isn't. I believe VARCHAR is also more space conservative as MEDIUMTEXT is quite large (see bug 96431).
In MySQL: MEDIUMTEXT is 3 bytes + the text (not in SQL92), also TINYTEXT (1+) and TEXT (2+). VARCHAR(n < 256) is 1 byte + the text (in SQL92). So you are looking at an extra 2 bytes per custom field if you use MEDIUMTEXT. PostgreSQL has TEXT and VARCHAR(n < 2^32) which are both 4 bytes + the text. Sybase 12.5 has TEXT and VARCHAR(n < 256). Text fields typically cannot be used in joins, or in where, order by, compute, group by, or union clauses.
There is a bug in editcustomfields.cgi -- if you have a custom field of type 'single' and a valid value includes a space, *sometimes* all the valid value text after the space is lost. I've looked through the code and I can't see any obvious cause for this behaviour.
Question: is this version of the patch going to be The Answer for custom fields post-2.16? Or at least something reasonably compatible at the DB and configuration levels? It would be really nice to be able to have some assurance that if I drop this on top of a 2.16 install when I upgrade to 2.18 I won't have to redo all my custom fields Yet Again. BTW, I'd strongly recommend taking a look at Scarab's custom field implementation- I don't know how configuration is implemented in this patch (if at all) but one of Scarab's strongest points (IMHO) is the extremely well thought out web UI for adding custom fields. It's per product, which I think is really overkill and uneeded by bugzilla, but otherwise is very slick.
No guarantees at all -- the contributors to the patch are all outside the Mozilla organisation. The Bugzilla support team are yet to look at it, as far as I know. They may well make changes, including changes to the underlying schema (changes to the user interface are less of a problem).
>The Bugzilla support team are yet to look at it, as far >as I know. That isn't strictly true; Dave and Matt both have and they are pretty core. But yeah, Matt asked me to look at it... and that happened exactly never :/
The contributors to the patch would be interested in the fruits of your deliberations. In particular, is the major table (bugs_customfields) likely to change? (The other tables just contain the metadata describing the custom fields, and so anyone who implemented the current patch and then upgrded to 2.18 could manually reenter the metadata information if they needed to, but upgrading the bugs/customfields data itself is a bit more difficult and risky).
I think that even bugs_customfields can be changed if it only improves the whole stuff. But in such case there should be a conversion script, which take care of database update. This sounds pretty obvious but can easily be forgotten...
Blocks: 141101
Attachment #66426 - Attachment is obsolete: true
Attachment #53172 - Attachment is obsolete: true
Things to do for 2.16: 1. 'custom fields' needs sometimes to appear in the footer (template changes). 2. buglist.cgi -- merge in (nasty) code to display custom fields and (even nastier) code to sort on them; make these write to template variables. 3. enter_bug.cgi sets up template fields for each field; need to add a new template variable that is a hash (or an array?); need to modify template to display these. 4. long_list.cgi needs to pass the values of the custom fields to the template, which needs to be able to pick them up. 5. post_bug.pl needs to pass custom field values to the template; the code to analyse and action custom field parameters needs to be merged in. 6. There's a lot more that merges in nicely like process_bug.pl. 7. There is also the editcustomfields.cgi script, which should be templatised.
The next question is which variables should the *.cgi pass to the *.html.tmpl? bug_form.pl has a $bug variable -- perhaps we should add $bug.customvalues.$cf_id to it. or do we just use $bug.$cf_id? bug_list.cgi has @bugs -- similarly for each item in this. enter_bug.cgi (new bugs) passes various descriptors of possible field values -- either we set up an @custom_fields variable or maybe @custom_popups, @custom_text,... long_list.cgi just needs the values really, so add to $bug the same as for bug_form.pl. Any ideas on how to do this?
Martin, can you give short summary of the overall design from a birds eye perspective (or some pointers to some existing docs, as long as they are still up-to-date)? Is attachment 42496 [details] still valid? Do you think the new fields can be used (or even should be used) for existing fields like OS or Platform, too? If they are not specific to custom fields, maybe it's better to choose a more general name like "generic_fields" or something? Is it worth to have the reusable backend logic in a perl module like GenericFields.pm (or SimpleFields.pm) or something? (The idea being that the cgi scripts only new a few additional lines of code which call the backend routines in the perl module with the actual parameters.) If this is possible, what would be the interface of such a module?
The database schema in the 'schema updates' attachment is still in place (although the revised patch migrates this to checksetup.pl and makes minor changes). The custom field data is stored in a bugs_customfields table that has one row for each (bug, field) pair. The customfields table contains the description of each field and the products_customfields table controls which products (and so which bugs) have which custom fields. An alternative solution would have been to add the custom fields to the bugs table, which would have been riskier and harder to administer but would provide faster performance. The transition to 2.16 does not give any reason to change the database schema. The transition to 2.16 is about 'templatising' the existing patch. Let me suggest (further to what I wrote yesterday) that (i) custom fields be named 'cf' . $cf_id i.e. 'cf1', 'cf2' etc so their values are passed to the template as $bug{'cf' . $cf_id} (or $bugs[$n]->{'cf' . $cf_id} for a buglist) and (ii) we need a template variable $custom_fields{'cf' . $cf_id} that essentially is an image of the customfields table.
Was this incorporated into 2.16? I am using 2.16rc and did not see 'customised field' feature in it.
No, this is not in 2.16rc1 and will not be in 2.16. See comment 50 to 54 above.
I have applied all the patches from this page and adapted them to v2.16r1 but attachment 57458 [details] [diff] [review] from comment 33 seems weird to me. I can't find from which version it was created. I think a part of the patch is missing. Actually it does not correspond to the previous attachment 42495 [details] [diff] [review]. I might be wrong because i'm not an expert hacker, but i think it's worth noticing.
Well, as far as I remember, it was a patch for attachment 49739 [details] [diff] [review]. Anyway - it seems to me, that all patches except the last one ("Revised patch against 2.14.1 ...") should be obsoleted - it seems like attachment 68323 [details] [diff] [review] contains everything necessary (except contrib/bug_email stuff, which is in attachment 64119 [details] [diff] [review])
Sorry, you're right.I didn't check the right patches. So I'm working on a patch for version 2.16.But there's a problem with the new sub-function is_tainted() in global.pl. I get this error : Attempted to send tainted string 'update bugs_customfields set value='yes' where cf_id=19 and bug_id=1' to the database at globals.pl line 250. which comes from process_bug.cgi : (part of attachment 68323 [details] [diff] [review]) my $qstr = "UPDATE bugs_customfields SET value = '$new_value' WHERE cf_id=$cfbug{$_}[1] and bug_id=$id"; SendSQL($qstr); The comment for sub is_tainted() is "# Don't ask me how it works..." so it doesn't really help me. So if anyone knows what this function is for and what is wrong with the SQL statement I would appreciate.
I haven't looked at your code so I can't give you precise pointers, but shortly and generally: Running the perl code in taint mode means that you will have to validate all the input coming from an untrustworthy source (such as HTML forms). Until an input value is checked properly, it is "tainted" - and if you try to use a tainted value in something critical (system() call, db access and so on), Perl will stop you. This is a safety measure. For more info on taint mode, please use Google. For this specific instance, check out what the Bugzilla developer's guide says and examine the code, particularly subs detaint_natural and SqlQuote. Probably you're just forgetting to check the format of a certain value input from the form.
The statement itself seems pretty correct to me. Maybe you should try: "update bugs_customfields set value=".SqlQuote("yes")." where cf_id=19 and bug_id=1" ?
Does attachment id 64119(This adds support for custom fields for bug_email.pl) work for version 2.14.1 also?
Patch for customfields of type "multi" and "single" (what is "any" for?). Includes the contrib/bug_email.pl patch against version 2.16rc1 Requires editcustomfields.cgi from attachment 49739 [details] [diff] [review]. (no templates for this part) I've been learning perl for just 3 weeks and this is the first patch of my life, so be careful with it. But it works for me.
"any" allows you to put arbitrary text into customfield. It is presented as text input field on bug's pages. Very important (at least for me).
Ok I've added the "any" support. What I am supposed to do? Submit a new complete patch, because I didn't keep the version without "any"...
I think it would be best to obsolete the attachment 86395 [details] [diff] [review] and add the new one.
To be applied after the previous patch (attachment 86395 [details] [diff] [review]) against 2.16rc1
I'm using BugZilla 2.14.1 with the "Revised patch against 2.14.1 (alpha) part 1 - Patch Version 2" and the editcustomfields.cgi file. I have a couple of issues and would like to know if these are known issues. - The "Change several bugs at once" page is not supporting the custom fields. - Opening a specific bug, the custom fields only show up when the state is NEW, not if the state is ASSIGNED. It doesn't matter if I'm the reporter or assignee. - The Long Format List of Bugs will not show the custom fields. - Adding a custom field via colchange.cgi as an additional column will show up the column correctly in the bug list, but if you open the "Change several bugs at once" page the heading of the column is correct, but the content is from a different field.
Unfortunately, the only answer I can give you is The Most Annoying Answer of A Developer: "it works fine on my site" :) Maybe the author of attachment 68323 [details] [diff] [review] can give you the answer if attachment 57458 [details] [diff] [review] was included there. I guess it was. This patch lives for pretty long time (since 2.12). There is no single person, which manages all the changes, patches, patches to patches etc. We all are waiting for a day when it is included in Bugzilla main trunk.
This attachment includes the templates for editcustomfields.cgi and the new version of editcustomfields.cgi to use these templates. There still are several problems if someone wants to have a look at them : -The mandatory field doesn't appear after editing a custom field -The javascript to check the fields of a new custom field is very simple. It needs to be upgraded. Any comments wellcome.
for those of you trying to use the patch against 2.16, there's a fun off-by-one bug leaves out the last bug in any search... Debugging this stuff is a pain in the ass. My lame solution is to add: if ($previousID) { push @bugs, $bug; } after the while (my @row = FetchSQLData()) { block, around line 1510. So, it looks like: while (my @row = FetchSQLData()) { .... } if ($previousID) { push @bugs, $bug; } ------ hope this helps. email me if you need more explanation on what to fix.
You're right this part of the patch is awful (the bug is in bugform.pl). Actually the problem is to try to query for all values within only one query. The solution is maybe to add another query especially for custom fields, that would make everything easier.
bumping priority just to get it up in the queue a bit... this has sat around too long.
Priority: P3 → P2
The checksetup.pl changes look wrong - they only run if the table exists?? IS it posible to get a newer patch, against the trunk?
I said something wrong, comment 89 deals with buglist.cgi. Anyway, I think that the detabase schema is not the right one, especially bugs_customfields table. I've been thinking about it for days but haven't found another schema. But IMO if this has to be into the future releases this should be completely changed to make it really easier to query for bugs. At the moment buglist.cgi has too many awful fixes, and very bad performance. A sql specialist should have a look at it.
Blocks: 157206
I'm not sure you can figure out anything different than Tony did. We have two tables: bugs and customfields. Assuming we don't want to touch bugs table, the only thing to do is to introduce third table: bugs_customfields which will link together those two entities. But - maybe a proper VIEW on database will do the job??? Unfortunately mysql does not support views (however it is on TODO list). Maybe totally different approach should be considered here (I was taking about it with Tony some time ago): forget this patch and implement it as dynamic changes on bugs table (add/remove columns)? Maybe this would result in cleaner approach?
I can't tell if this would help getting better performance, but this would obviously allow to treat every field as a custom field, and every custom field as a normal one. It would make it much more easier to query the database. Templatisation would be easier as well. It would be done once for all. Can anyone tell if dynamical changes are possible regarding performance and stability? Anyway, I plan to have a second view on buglist.cgi to see if it's possible to improve it.
That's the point! There should be no difference in handling of "normal" and "custom" bug's attributes. Only such approach can be "The Right Thing". But - this would require great changes at the roots of Bugzilla, I guess. I don't think we should expect Mozilla to do so (I'm not sure if I would like it either...) This sounds like breaking up a stable product. I think this patch is a great _patch_. I'm not sure how to do it better. I've been developing a system which was designed to allow user to self-define own attributes of some entity (custom fields - that's it). We solved it by making _all_ attributes except identifier optional (custom). We implemented it as "third table" (actually set of tables)- somewhat similar to this patch but more complicated ("custom fields" could be grouped, had their hierarchy, could be inherited etc.). The product were installed with set of predefined "fields". The results were: 1. The system was really flexible. You could define almost anything with no changes in the code. 2. The parameters-handling code was more complicated, but uniform - all parameters were "custom" 3. Performance was not very good, but fortunately acceptable. That's my $0.25
The schema looks fine - one more join on the bug_id should be quick. Is it possible to get one single combined patch for all this against current tip, preferably one without lots of needless whitespace changes everywhere? I think that custom fields should be either 'freeform' (eg status whiteboard) or 'constrained' (eg platform, os). Constrained types could then be single or multiple. This appears to be what you have here (with attachment 86582 [details] [diff] [review] included) - is that correct? Instead of using an enum (which isn't portable between databases), use a constant defined in an appropriate file, and an int-type in the schema The value for the custom field should not be a mediumtext (which allows 16 megs worth of data). Maybe the table for custom fields should have an option for the max length, otherwise a tinytext (255 characters) should be enough, shouldn't it? make_popup and make_selection_widget should go away, and become part of a template. multi-entry fields should be stored as multiple entries in the bug/cust_field table, rather than | separated strings. multi-entry fields should maybe have the option of being restricted to a certain set of values; maybe you already do that. You CAN NOT remove the -T option from the cgi files. Taint mode is required for bugzilla scripts. Thats a general overview; I haven't looked at specifics, though.
Re comment #96, I (personally) would like to use this for replacing stuff like hte status whiteboard, which is currently a param. Lets do this in stages, though - first add this, then swap over.
Oh, and perf is _definately_ an issue with bugzilla. That would need to be looked at before doing what I said in comment #98. For queries, this would involve one more join per searched attribute, which hopefully shouldn't be too painful. It would, however, need to be measured.
What the current schema does give you is the ability to add custom fields on the fly. You don't need to be a superuser, you just need the right group. If you want to modify the bugs table, this is going to take a bit more management. You will need to have major permissions and it will take your Bugzilla off the air for a while. Other than that, it is arguably a good idea to put the custom fields into the bugs table.
One should not forget another good thing about keeping custom fields away from "bugs" table: you define custom fields for project, not for entire Bugzilla. First, I considered this more bug than feature, but now I'm sure it is OK.
The lack of ability to make a custom field global is most definitely a bug and a showstopper for us (bugzilla.gnome.org and bugzilla.ximian.com). Recreating the same custom field over and over again for 90+ products is just not an option for us. I believe that Dave Fallon has patches to make this Do The Right Thing; I've been urging him to comment on this bug for a while.
Well - there should definitely be an option to make custom field global. But there should also be an option to make selected field project-specific. Maybe most projects share the same set of custom fields, but some do not. E.g. I don't like to see "Database Type" field for a product which has nothing to do with databases. Thus, "the lack of ability to make a custom field global" sounds like GUI rather, then database-structure problem to me.
I tihnk you missed the point - having these on the bugs table is definately not the way to go. I was talking about the possibilily of moving stuff which is currently there off. Pretend I didn't say that bit for now :)
I would like to comment about the ability to make a custom field global: - currently you can make a custom field apply to multiple products (at least this seems possible in our installation).. So if you select all it will apply it to all products.. of course this means that if a new products comes up you need to update the custom field. In addition to the suggestion to propose a 'global' assignement, I would like to suggest the ability to make custom fields specific to components. In some cases the way our products/components are organised this made a lot of sense.. If we have time we will work on a patch.. if there are any suggestions about this they are welcome..
Don't use a global component, just store NULL in the product column in the map table.
About make_popup and make_selection_widget mentionned in comment 97 they were in the patch against 2.16rc1 because of editcustomfields.cgi, but since I provided a "basic" patch to templatize editcustomfields.cgi they are no longer required (as far as I remember). I say "basic" because as I mentionned earlier many javascript verifications were still required (they were in the initial editcustomfields.cgi), and the mandatory checkbox did not work. I don't have much time to have a look a all this. I should mention as well that the templates for enter_bug.cgi were very simple and did not take positions into account. This should be improved too at least to prevent 3 listboxes to be in the same row (this was in patch against 2.14.1 I guess), but it is not very complicated I think. I will try to do a single patch for all this against 2.16rc2, but I do not know anything about how does checksteup.pl work (because Bradley said that something was wrong)
The present implementation allows you to attach a custom field to all *existing* products -- you just select all products when you create the field definition. But when you create additional products, they don't get the custom field. You can go back and add the products to the all custom fields using the GUI (a real pain, by the way, especially if you have lots of products). Using NULL to mean 'all products' is likely to cause all sorts of problems in your SQL code -- at the moment the SQL does joins on the product_customfields table and those won't work if you have NULLs.
Martin's comment #108 is exactly the issue we face with b.g.o and ximian's bugzill a - we need custom fields to apply across the board, no questions asked. Going and applying to every custom field each time a new field is added would be a nightmare. So, I will happily volunteer to get a unified patch against CVS since I've made this work for b.g.o already, but I have a few questions first that we should work out so I'm not going in the wrong direction... 1. How are we going to deal with global custom fields, database-wise? My preference is having custom fields default to global, with the presence of entries in products_customfields defining if they only apply to a subset of the products. This requires some code changes, since the current setup validates against an associative array to see if a field is legal - we'd have to have entries for every product x every global custom field, which would get prohibitively rediculous. So, I think this should be changed to a function that deals with it more appropriately, returning all the fields limited to a given product + all the global fields. 2. Is it realistic to move all the current bug fields to "custom" fields? If so, we should think about changing some of the naming conventions so it makes more sense. I think it's well worth doing, since it simplifies the template stuff, and continues bugzilla down the flexibility path, but it's obviously not my call. 3. Custom templates and custom fields don't play well together - it's more difficult than it should be to say "custom field X goes over here, Y over there". Is there a way to deal with in the templates, by saying "iterate through the custom fields, displaying all the ones that haven't been otherwise dealt with" - I guess so, now that I think about it, but it means the iteration needs to happen after the custom fields with fixed positions are displayed. So, given this stuff, I'll start working on a patch - feedback would be greatly appreciated, of course.
1) Yeah,. thats the way to go (and is the way groups are moving, too) 2) Lets postpone that discussion. If we decide to do that, it won't be part of the patches here anyway. 3) Yeah, in the edit.html.tmpl template, have the BLOCK which does the field printing set [% $foo.displayed = 1 %] and then have the bit which iterates over the custom fields only PROCESS the BLOCK [% IF NOT $foo.displayed %]
Okay, cool, I'll generate a patch then, plus a bunch of bug fixes I've found.
We have half a dozen teams with a dozen or so products per team. The custom fields apply at the team level (not globally) so we would like some way to set this (preferably without updating each product). We don't have many custom fields (about ten) so we could put them in the bugs table without any problems. Many of the fields in the bugs table are referenced in the code by name, so you couldn't treat them as custom fields. Custom fields (by definition) should not have any specific code behind them. I don't see any problem with referring to custom fields in local templates.
To make sure I understand, you want to say a given custom field applies to a "team"? You can already say a given field only applies to X, Y, and Z products. I presume you want, when adding a new product to a "team", have the custom field automatically show up for that product (i.e., have the cfs associated with "teams", not products necessarily). This seems reasonable, but I have no idea what you're using to represent teams. If it's groups, you'll probably need to file a separate bug that this one blocks, as that's outside the scope of what I've done/trying to do.
I've made a patch to change the way buglist.cgi queries for customfields. Instead of the old method which joined less tables (just one), but got more rows datas than necessary, this version uses more join tables (exactly as many as custom fields that are to be displyed) but got exactly the datas required. I can't tell wich one is faster, if someone can tell me what's best. Or if someone can try on a huge database. If it occurs that this method is the right one I will submit the patch. I also tried "patch against 2.16rc1", it works fine against 2.16rc2.
A template was missing. The mandatory field now works.
Attachment #88928 - Attachment is obsolete: true
Attachment #91797 - Attachment description: A few bugs fixes → Templates for editcustomfields
I'd need to see the code, but one join per custom field is probably better.
Eventually this kind of query is not a good idea because if a custom field is created after the creation of a project, the bugs already in this project will not be listed in longlist because they are not in bugs_customfields. A solution would be to create a entry in bugs_customfields (with the default value) for each bug already in a project when a new custom field is added. But that seems pretty ugly.
When adding a mandatory field, then you will have to set the defaults for all bugs. (or, if there isn't a default, then ask what to use for the addition) Also, you could use a LEFT JOIN, and convert empty stings to mean no entry, or something, but I do think that you are going to require an entry to be in the custom fields table for every field for every bug.
Just in case someone is trying to port this to 2.17, I've got a somewhat working patch against today's -HEAD. There are some outstanding bugs right now so I'm not putting up the patch: buglist.cgi only sees X-1 tickets (a query that matches 5 tickets only shows 4 found). The create.html.tmpl javascript for popping up on mandatory fields may be broken as well.
Here's my first attempt at bringing this patch up to HEAD. I tried to change as little as possible from the original, so don't yell at me too much for how things are laid out. Since I've never seen the original in action, it's tough for me to judge what worked and how it worked, but this at least seems to get something started.
A few updates to make this work properly in my installation (HEAD). In the CGI I had to move confirm_login to after ConnectToDatabase, and exported the "type" $vars for the template. When editing your customfields, you no longer have to keep reselecting the "type" (it was defaulting to any).
The problem with n-1 bugs has been solved (see comment 89), the editcustomfields.cgi problems with mandatory field has been solved (comment 115). make_selection_widget and make_popup are no longer required since you provided a patch for templates for editcustomfields. A template was missing as well as mentionned in comment 115.
Missed the n-1 comment, I (wrongly) presumed those comments talked about issues resolved in the latest patchset. The updated patch & templates I posted should have the fixes in comment 89 and comment 115 integrated - let me know if I caused any regressions.
I managed to find two bugs in the last patchset/templates: When viewing a ticket that has a "single" customfield, it shows the first choice as being selected (due to how dropdowns work). If we put a <option value=""> as the first option for single's, this problem no longer occurs (haven't seen any side effects yet). customfields with spaces (such as "Build ID") in their names cannot be selected as custom columns via colchange.cgi. This is due to the COLUMNLIST cookie being stored as a space seperated list of values. This can be fixed trivially by changing the join in colchange.cgi and the split in buglist.cgi to something else (:: for instance), but has the side affect of forcing anyone who's got a custom query column listing to go back to colchange.cgi and re-sumbit to get the new fixed cookie. The other workaround for this issue would be forcing customfield names to not allow spaces in them. This would be somewhat annoying, but less invasive. I'm open for ideas here (sorry for barging in on the patches for this ticket, btw.. I'm just prepping for a production instance here at work).
New patch generated off of todays HEAD. Now urlencode/decode's the fielnd names so that buglist.cgi & colchange.cgi don't have issues with customfields with spaces in them. Thanks to justdave for the solution idea. patch no longer includes make_selection_widget or make_popup, as they are no longer used due to the new templates system. Fixes all the bugs I know about.
Attachment #94230 - Attachment is obsolete: true
Comment on attachment 94340 [details] [diff] [review] customfields patch against HEAD >Index: buglist.cgi >+# Completely stupid : we get a complete record for each customfield >+# required in the list (2 customfields = 2 complete records taken from the base) >+# The SQL request should be improved to change that. So add a DISTINCT into the sql query. >Index: checksetup.pl >=================================================================== >RCS file: /cvsroot/mozilla/webtools/bugzilla/checksetup.pl,v >retrieving revision 1.166 >diff -u -b -B -r1.166 checksetup.pl >--- checksetup.pl 30 Jul 2002 14:05:20 -0000 1.166 >+++ checksetup.pl 7 Aug 2002 16:33:21 -0000 >@@ -1584,6 +1584,42 @@ > userid mediumint not null default 0, > quip text not null'; > >+# Table that defines custom fields >+# >+$table{'customfields'} = >+ "id mediumint(9) default '0' not null auto_increment, PRIMARY KEY this one, and remove the default. >+ name varchar(64) default '' not null, no default. >+ type enum('any','single','multi'), enums are Bad. Use a number instead, and add |use constant| into globals.pl >+ valid_exp mediumtext not null default '', >+ default_value mediumtext not null default '', ditto, no default here/ >+ mandatory tinyint not null default 0, >+ KEY id (id), use PRIMARY KEY above, and then don't do it here. >+ index(name)"; unique(name) >+ >+# >+# Product to CustomField join >+# >+$table{'products_customfields'} = >+ "product varchar(64) default '' not null, >+ cf_id mediumint(9) default '0' not null, >+ >+ index(product), instead, unique(product, cf_id), which allows product to be used here. However, if you want this part, then you need to wait for bug 43600 to land, which does this as an id, and will make the code a lot simpler. >+ index(cf_id)"; >+ >+ >+# >+# Bug to CustomField join >+# >+$table{'bugs_customfields'} = >+ "bug_id mediumint(9) default '0' not null, >+ cf_id mediumint(9) default '0' not null, lose the defauls; 0 isn't valid anyway >+ value mediumtext, >+ >+ index(bug_id, cf_id), >+ index(cf_id, bug_id)"; You definately don't need both of these unique(bug_id, cf_id) index (cf_id) should do >@@ -2953,6 +2990,13 @@ > # Add a field for the attachment ID to the bugs_activity table, so installations > # using the attachment manager can record changes to attachments. > AddField("bugs_activity", "attach_id", "mediumint null"); >+ >+if (&TableExists('customfields')) { >+ RenameField ('customfields', 'valexp', 'valid_exp'); >+ AddField('customfields', 'default_value', "mediumtext not null default ''"); >+ AddField('customfields', 'mandatory', 'tinyint not null default 0'); >+} >+ Move this to be the last entry, and ad teh date/comment/bug # that all the others have. > > # 2002-02-04 bbaetz@student.usyd.edu.au bug 95732 > # Remove logincookies.cryptpassword, and delete entries which become >Index: colchange.cgi >@@ -71,7 +76,8 @@ > } else { > foreach my $i (@masterlist) { > if (defined $::FORM{"column_$i"}) { >- push @collist, $i; >+ # this allows spaces in customfields for the space-delimited COLUMNLIST cookie. >+ push @collist, url_quote($i); Yeah, thats fine. When we move the use CGI.pm then it will do the encoding for us. >Index: long_list.cgi >=================================================================== >RCS file: /cvsroot/mozilla/webtools/bugzilla/long_list.cgi,v >retrieving revision 1.27 >diff -u -b -B -r1.27 long_list.cgi >--- long_list.cgi 26 Jul 2002 18:16:39 -0000 1.27 >+++ long_list.cgi 7 Aug 2002 16:33:21 -0000 >Index: post_bug.cgi >=================================================================== >RCS file: /cvsroot/mozilla/webtools/bugzilla/post_bug.cgi,v >retrieving revision 1.58 >diff -u -b -B -r1.58 post_bug.cgi >--- post_bug.cgi 31 Jul 2002 12:46:02 -0000 1.58 >+++ post_bug.cgi 7 Aug 2002 16:33:21 -0000 >@@ -1,4 +1,4 @@ >-#!/usr/bonsaitools/bin/perl -wT >+#!/usr/bonsaitools/bin/perl -w Absolutely not! > >+for my $cfname (@{$::customfields{$::FORM{'product'}}}) { >+ my ($type, $valid_exp, $id, $mandatory, $default_value) = >+ @{$::legal_customfields{$cfname}}; >+} >+ Wouldn't an sql query be easier? The versioncache is overused as is, and I wonder if this just makes it more complicated. >+ >+ > # Lock tables before inserting records for the new bug into the database > # if we are using a shadow database to prevent shadow database corruption > # when two bugs get created at the same time. You'll need to read lock the custom field table too. <skiped looking at of proces/post bug> >Index: enter_bug.cgi >=================================================================== >RCS file: /cvsroot/mozilla/webtools/bugzilla/enter_bug.cgi,v >retrieving revision 1.69 >diff -u -b -B -r1.69 enter_bug.cgi >--- enter_bug.cgi 11 Jun 2002 13:32:01 -0000 1.69 >+++ enter_bug.cgi 7 Aug 2002 16:33:21 -0000 >@@ -1,4 +1,4 @@ >-#!/usr/bonsaitools/bin/perl -wT >+#!/usr/bonsaitools/bin/perl -w > # -*- Mode: perl; indent-tabs-mode: nil -*- > # No. >+#To use default values. Uncomment the following lines to use this feature. eww... >Index: defparams.pl >=================================================================== >RCS file: /cvsroot/mozilla/webtools/bugzilla/defparams.pl,v >retrieving revision 1.81 >diff -u -b -B -r1.81 defparams.pl >--- defparams.pl 31 Jul 2002 10:15:54 -0000 1.81 >+++ defparams.pl 7 Aug 2002 16:33:22 -0000 >@@ -155,6 +155,18 @@ > "b", > 0); > >+DefParam("preferlists", >+ "If this is on, Bugzilla will display most selection options as selection lists. If this is off, Bugzilla will use radio buttons and checkboxes instead.", >+ "b", >+ 1); >+ You're merging other stuff here. The creation code for custom fields also needs to ensure that you don't call a custom field 'bug_id', or something like that.
Attachment #94340 - Flags: review-
*** Bug 95966 has been marked as a duplicate of this bug. ***
ok, it looks like attachment 94340 [details] [diff] [review] is not the correct way to patch a current (2.16) bugzilla installation with custom fields. is the current "reccomended" way to use the 2.14 patches against 2.14.3 ? or is there an effort to port the patches forward? (i'd hate to duplicate any work)
*is* anyone working on the 2.16 patch?
Keywords: review
has anyone got this working with 2.16? i'm thinking of trying to get it working but it'd be good to know if anyone else has before i start.
Seems to work ok although i haven't given it a huge amount of testing yet. Tried it on a fresh install of 2.16 and all the patches were applied successfully and it seems possible to add, edit, delete customfields, create new bugs with them and query them - so I guess that's what matters.
The file editcustomfields.cgi appears to be missing in the patch file. Do I need to download anything else?
you'll need "Templates and CGI for editcustomfields (tarball)" (attachment 94231 [details]) as well as the patch. i didn't bother including editcustomfields.cgi in the patch seeing as it's already in the tarball along with the templates. put editcustomfields.cgi in your top-level bugzilla dir along with all your other .cgis and put the templates in a customfields dir in your default templates dir (bugzilla/template/en/default/customfields for me).
Glad to see Stuart picking up the slack on this ticket. This is a patch against HEAD that I've been sitting on for a bit, not based on Stuart's patch. This one is against HEAD as of a few minutes ago, and appears to work in light testing. Currently, you cannot search customfields via this patch through the "Bug Changes" area in query.cgi, which sucks. I'm not entirely happy with my buglist.cgi hack is pretty bad too (second query), but gets the job done. I don't plan on updating this patch again, but if I do, it may be using Stuart's updated patch.
i think i've found a bug in edit.html.tmpl & create.html.tmpl when displaying custom fields of type "single". it doesn't seem to show which item has been selected. here's the patches that fix it: --- create.html.tmpl.old Fri Sep 27 16:10:45 2002 +++ create.html.tmpl Fri Sep 27 15:46:02 2002 @@ -116,7 +116,9 @@ <select name="[% c.name %]" > [%- FOREACH d=c.values %] <option value="[% d FILTER html %]" - [% " selected" IF d == c.selectedvalue %] + [% FOREACH e = c.selectedvalues %] + [% " selected" IF d == e %] + [% END %] >[% d FILTER html -%] </option> [%- END %] --- edit.html.tmpl Fri Sep 27 15:37:49 2002 +++ edit.html.tmpl.old Fri Sep 27 16:05:10 2002 @@ -178,9 +178,7 @@ <select name="[% c.name %]"> [%- FOREACH d=c.values %] <option value="[% d FILTER html %]" - [% FOREACH e = c.selectedvalues %] - [% " selected" IF d == e %] - [% END %] + [% " selected" IF d == c.selectedvalue %] >[% d FILTER html -%] </option> [%- END %]
Stuart's latest patch for edit.html.tmpl disn't work for me and i think it should be left as it. Ofcourse i applied his patch over the patch against 2.16 for the custom feilds. also in the edit.html.tmpl, i noticed that for a "single" type when i was editing a bug, there was a empty-line entry and i removed this by adding the follwoing to bug_form.pl for (@{$::customfields{$bug{'product'}}}) { # print STDERR "*** '$_'"; print STDERR " value: $bug{$_} *** \n"; # print STDERR "bug id: $id value : $bug{$_} <br>"; my %cbug; $cbug{'name'} = $_; $cbug{'type'} = $::legal_customfields{$_}[0]; $cbug{'default'} = $::legal_customfields{$_}[4]; + $cbug{'mandatory'} = $::legal_customfields{$_}[3]; and also changed edit.html.tmpl to [%- FOREACH c = customfield %] [% IF c.type == "single" %] <td align="right" valign = "top"> <b>[% c.name FILTER html %]:</b></td> <td align="left" valign = "top"> <select name="[% c.name %]"> - <option value=\"\"> + [% "<option value=\"\">" IF c.mandatory == 0 %] [% FOREACH d = c.values %] <option [% "selected" IF d == c.selectedvalues %] value="[% d FILTER html %]">[% d FILTER html %] [% END %] </select> </td> <td>&nbsp;</td> hope this helps ya'all... thanks, saqib
sorry about that - i got the files the wrong way around when doing the diff for edit.html.tmpl. i've modified my templates quite a lot so couldn't do a diff on the actual files. it's easy enough to do manually though - just replace [% " selected" IF d == c.selectedvalue %] with [% FOREACH e = c.selectedvalues %] [% " selected" IF d == e %] [% END %] in the bit for custom fields of type "single". while i'm here, has anyone modified long_list.cgi & show-multiple.html.tmpl to work properly with customfields? there is a bit in long_list.cgi and a reference to look at show-multiple.html.tmpl but there doesn't appear to be anything there.
Well once more it's my fault, I forgot on part of the patch I presume. Here's what you must insert into bug/show-multiple.html.tmpl on line 77 : <tr> [% FOREACH c= bug.customfield %] [% PROCESS cell attr = { description => c, name => c } %] [% END %] </tr> and that should work fine. Anyway I intend to submit a new patch against 2.16.1 with every corrections proposed by Bradley Baetz. It will propose as well a simple way to place the custom fields on the report page and minor changes. Bradley : you said : "enums are Bad. Use a number instead, and add |use constant| into globals.pl". Ok to use a number, but I don't understand what I am supposed to do with globals.pl (how can i put the correspondance between number and text in global.pl?)
I've noticed that the mandatory field of a custom field doesn't seem to have any effect. this is especially the case with an Any Field type which you can leave empty and commit changes to a bug. i am no expert at perl, but i am trying to fix this. will let you know how it goes...
Found a bug in buglist.cgi: If you change your columns so that the buglist includes customfields, only the customfield with the lowest ID will be displayed alongside the correct bug. All the rest will be displayed alongside the next bug in the list. Modified it so that the record is only added once all the customfields have been processed for that bug.
Also noted that when adding a custom field, it should't have any special chars like a '-' because the custom field's mandatory validation is done with javascript and it doesn't like field names with these special chars. There is also a bug in that when you go to edit a custom field, it doesn't show the name of the field. Also a bug in that when you delete a custom field, it still appears when you click on "New Bug". It doesn't go away till an hour later because it reads it from the data/versioncache and this only gets updated every hour.
Just noticed that the patch against buglist.cgi (101701) I posted isn't perfect. If you change your columns to include customfields then the buglist doesn't show any bugs from before the customfields were added (or something like that - not quite sure about it's behaviour). Although if you view a bug then it does appear. Also it always reports one bug even when there are zarro bugs. Anyway, don't have to time to fix it now but just though I warn anyone who has applied it.
At our site, we are implementing a hack to support a "date" type in addition to the "any", "single" and "multi". The data is simply stored as plain text, rather than taking advantage of MySQLs DATE datatype. When a custom field of type "date" is changed during bug submission or editing, it is stomped into a uniform YYYY-MM-DD format, with invalid dates generating an error screen via ThrowUserError. Acceptable inputs are anything that Date::Manip will accept. Is there interest in picking up this hack as a general addition to the custom fields? If so, I'll work on creating a patch against 2.16 for it once we're confident in its stability.
A proper patch for this bug should be extendable to almost any type. But yeah, storing in text is really the only possible way. That will cause problems for queries though, since we couldn't index on the date value. Hmm.
If you store dates as yyyy-mm-dd it will sort correctly.
Oh, good point, and the indexing for < vs > would work too. Forgot about that
I got around this problem by using a javascript popup datepicker with an icon beside the relevant fields to bring it up. Obviously the user can still type in an invalid date themselves but if they use the datepicker then it will always insert a valid date in YYYY-MM-DD format which works for sorting and querying. It also saves the user having to deal with YYYY-MM-DD format (at least when entering and editing bugs - haven't modified the query page). Christopher - I would be interested in your patch as some kind of validation would be good.
OK, I'll try to construct the patch later this week, after we've done some more internal testing. The patch permits the user to enter dates in any format. It converts valid dates to YYYY-MM-DD before storing them, and rejects invalid dates without storing them.
Re: Comment 142- Fixed problem with zero bugs not being reported: --- buglist.cgi.old Thu Oct 17 17:02:33 2002 +++ buglist.cgi Thu Oct 17 11:33:01 2002 @@ -1549,8 +1549,10 @@ } # Add the final record to the list -$bug->{'id'} = $previousID; -push @bugs, $bug; +if ($previousID > 0) { + $bug->{'id'} = $previousID; + push @bugs, $bug; +} # Switch back from the shadow database to the regular database so PutFooter() # can determine the current user even if the "logincookies" table is corrupted The other problem (where the buglist doesn't include bugs which were last viewed before the customfields were added) wasn't really a fault in buglist.cgi. I just ran a script to get each bug using wget which consequently populated the bug_customfields table and now its ok. Definetly are neater ways to do it but this seemed the easiest.
Has anyone produced a patch for processmail to show the new customfields? That would be a nice addition to the features.
I was trying to ensure that all my patches are up to date before submitting the date patch, and am having trouble with Stuart's patch against his buglist.cgi patch (see Comment 142 and Comment 149). Patch 142 went in against my version of buglist.cgi just fine, but the micro-patch in 142 doesn't. The comment "# Add the final record to the list" isn't in my version of buglist.cgi. Was this patch against HEAD or against 2.16? Or am I out of synch somewhere?
The comment "# Add the final record to the list" is from my original buglist.cgi patch (attachment 101701 [details] [diff] [review]). Apologies if it's all got a bit messy & confusing patching against patches. Basically all the patch in Comment 149 does is wraps $bug->{'id'} = $previousID; push @bugs, $bug; in a conditional (if ($previousID > 0)) so that it doen't report 1 bug when there are 0. If you are unsure where in the code this is, it's just above "# Switch back from the shadow database to the regular database so PutFooter()" Oh and it's all against 2.16.
Aha! Found it. Thanks for the pointer.
Blocks: 112319
Blocks: 177271
This patch tries to apply every remarks made by Bradley Baetz (except getting rid of enum. If someone wants to give me a hint on how to do that i'm ok). Major changes : -buglist.cgi rewrite: Now it is possible to use the "sort order determination" even with customfields (which was not possible before). If you intend to order a longlist by a custom field, and then remove this custom field from the list of displayed columns, buglist.cgi deletes the custom order (which is not the case for common fields) The query is quite different from that in the other patches (slower?, faster?). But the previous query did not allow to order determination. -When a custom field is created for a given product, every bug in this product has an entry created in bugs_customfields set to the default value given.I think this has to be done to keep a unified set of bugs. -editposition.cgi is a easy and simple way to order customfields in the templates. Positions are defined like that for example on the bug_entry form: pos #1 pos #2 pos #3 pos #4, etc... A default position is given when a custom field is created (=max_position+1) Maybe this is not interesting for anyone but who knows? A method will have to be found not matter what, so why not give it a try.
The trick for getting rid of enums is to either define another table going from your values to text (probably overkill in your case) or to define constants in the code. The first known case of doing the latter of these is in bug 147275, where there is now a Constants.pm I am suprised to see the patches against 2.16.1 I think you are making life unecessarily complicated for yourself. If you do this against 2.17, then it may actually get landed in the main product. On 2.16.1, it would not.
Actually major changes are done in new files, that's why, for the most part, it is not dependant on the version. I had a look at 2.17 and there will be just a few changes for this patch. I get the point on how to use constant instead of enum. Next patch will include this and will be against 2.17.
ok, the last comment w/r/t the 2.17 branch was made more than a month ago. I've started porting the 2.16.1 patch to the 2.17 branch. Is anyone else doing this? Once again, I don't want to duplicate effort (I'm doing enough internal customization on bugzilla that I don't need any _more_ work).
There is actually an open debate as to whether this is a good idea or not. This discussion was inspired by a Joel on Software article: http://www.joelonsoftware.com/news/20020912.html I don't know what Dave's current thinking is, but you should probably find out before doing lots of work. :-) Gerv
The current thinking is that we decide what the core types of these fields are that we need to have available, and provide 3 or 4 of each hardwired in the bugs table with a UI in the admin interface for customizing the labels shown to the users or hiding/showing those fields. This gives you a limited ability for adding custom fields, while not creating headaches and performance issues with multiple joins during queries.
I would argue that it's up to the administrator of the DB to decide whether the performance degradations or confusion of many custom fields is worth it (or even significant, given the size of their installation). I think it comes down to whether Bugzilla is intended to be usable in a general corporate environment or not. If the answer is yes, then the number and type of custom fields isn't usually under the control of the DB administrator, but rather is decided by some kind of committee or by his boss. Yes, maybe that's a bad thing. But it's a real thing, and the only purpose that would be served by making it impossible is to cause Bugzilla not to be used. The ability to patch in arbitrary custom fields was simply a requirement (end of story) when my company selected BZ for our bug db. If it wasn't there, we wouldn't be using it. Also, frankly, companies that have wide ranging products (hardware/software/etc, potentially each of which needs actual validly useful unique custom fields) really can't live with a DB that has an arbitrarily limited number of them.
WRT comment 158: That Joel doesn't have to have custom fields. This one requires them as do MANY other sites. There are many valid reasons for a site to need to add a field. It would be goodness to make that easy. Sites that are expecting huge loads may want to use some caution.
Could you make the number of custom fields an installation-specific configuration parameter? The site administrator could set this parameter before running the check setup script.
If bugzilla is going to go the way Dave has suggested (i.e. hardwired fields with customisable labels - comment #159) then it might be worth finding out how many custom fields people currently have on the their installs. We've got up to 9 depending on the product so 3 or 4 would be rather limiting. Also, It would be interesting to know how many people have noticed performance issues after installing custom fields. I certainly haven't but our DB is pretty small. And we don't have a problem with people finding the custom fields too confusing as our bugzilla is only used by technical staff anyway (and manangers too but they seem to be coping).
I'm afraid that if you set hardwired custom-fields number to N, you will _always_ find someone who just needs N+1 (at least for N<100 :))). But maybe it would be possible to make fields number configurable through checksetup.pl? This way custom fields can be "bugs" table columns and still be really "custom". However, this way custom-fields would not be product-dependent. Most custom fields I'm using right now is product-specific. As far as I'm concerned, a small performance degradation is a reasonable price for customizable fields. But my Bugzilla is really small (bugs < 1000)...
There's been a LOT of discussion about this on the developers mailing list the last week or so. New ideas for cleaner ways to implement it that won't involve limiting the number of fields, etc. If you're not already a subscriber, the archives are available off of http://www.bugzilla.org/discussion.html
After checking out the blog mentioned in comment 158 (an interesting set of articles, to be sure), I've been thinking a lot about custom fields, and I've come to the following conclusions: 1) Joel is partially right about custom fields, in that they can tend to make the DB harder to use (especially mandatory custom fields). Also, for the most part, the fields people want at first glance aren't really justifiable as fields. In most cases, it would be better to give people better search abilities and provide templates that stick the data into the description field a la Mozilla's new bug page. 2) Where I part with Joel is this: I think there are some categories of custom fields that *are* appropriate and useful (maybe even necessary). In particular, some fields have special needs that can only be effectively addressed by a custom field, for example: a) Fields that must be searched/sorted/reported on (Some examples: Our work process requires an ordered list of issues each engineer is working on. Also, I'm required to generate reports on how well my team meets its written commitment dates for fixing bugs). b) Fields requiring formatting validation (e.g. dates, selection lists, email addresses, URLs, etc.), especially when needed to enable effective searching (e.g. it's hard to find all of a customer's bugs if the spelling of the customer's name is left up to each bug reporter). c) Fields needing security validation (e.g. only certain users can change that data). Even if we don't want to implement such validation in BZ's custom fields, some thought should be given to making customization for this purpose easier. d) Genuinely necessary required fields (the aforementioned customer name, maybe). However, mandatory fields without format validation would probably be better served by a customized bug template, so this is really a subset of b. e) Fields that need to have customized processing applied to them. The existing URL field is a bit like this, but different BZ installations will have different needs. For example: I want to write some code to go through and mark bugs as "Critical" if the "remaining effort" plus the current date is greater than the "Customer Requested Date". It's much easier to deal with stuff like this if these are actual (format validated :-) fields. 3) Different products will have different needs for custom fields. It's hard to imagine wanting to sort or validate the same kinds of special fields for a browser as for a database engine. 4) My attempts at customizing the current bugs_customfields patch indicate it is poor at serving these needs. The current design makes it extremely hard to code the kinds of needed "special cases" described above, because even just selecting records that have constraints on 2 custom fields requires quite advanced SQL programming abilities (and usually is very inefficient). For example, the current design makes it almost impossible to sort on more than 1 custom field, yet sorting's one of the few valid justifications for having a custom field in the first place. 5) Any ideas for implementing custom fields that have all the custom fields as separate columns in 1 table lead to database bloat, and require lengthy ALTER TABLE's that might be hard to do in a production environment. 6) Any ideas that split chunks of the custom fields into different tables based on product (or whatever) make it difficult to change a bug's product (or whatever). Also, this kind of approach only reduces the ALTER TABLE problem a little bit. 7) Any ideas (like the current patch) that put all the fields into 1 table without having separate columns for each field lead to multiple joins that are very inefficient and complicated (or impossible) to program. My conclusion from all the above is that we want a fully orthagonal database schema for custom fields. I.e. each custom field should have its own table, containing only the bug_id and the field itself. Such a schema is in many ways simpler to program than a single table mechanism, more powerful than most, and reasonably efficient to boot. Yes, there are huge piles of joins, but they are (at worst) "eq_ref" joins since the bug_id is a UNIQUE key and is the only thing you join on. In many cases they will turn out to be "const" joins, which are even faster. No ALTER TABLEs, no bloat, reasonably efficient and easy-to-program searching/sorting (even with multiple custom field sort criteria)... what more could we want? Finally, many "custom fields" people want are really just intended to serve as reminders about what to put into a bug report (or to make certain things mandatory). In addition to true custom fields, I think we would serve the community well by also providing a GUI-customizable and internally-supported "new bug template" mechanism similar to Mozilla's new bug page. And, yes, I'm willing to put in effort to help with such a task...
> I'm required to generate reports on how well my team meets its written > commitment dates for fixing bugs). I'm sure you've read Joel's comments on using a bug system for this sort of thing... > b) Fields requiring formatting validation This can be done using JS on the bug entry page, and using entry templates. > 5) Any ideas for implementing custom fields that have all the custom fields as > separate columns in 1 table lead to database bloat, and require lengthy ALTER > TABLE's that might be hard to do in a production environment. What is "database bloat", and how does this plan lead to it? > Yes, there are huge piles of joins, but they are (at worst) "eq_ref" joins > since the bug_id is a UNIQUE key and is the only thing you join on. In many > cases they will turn out to be "const" joins, which are even faster. I have no idea what either of those things are; but I would take a lot of convincing that adding one join to every bug lookup for each custom field is a good idea performance-wise. We cannot afford _any_ performance degredation in Bugzilla - b.m.o. is slow enough as it is. I agree that, conceptually, this is a clean way to do it - but I think we may get overwhelmed by the practical issues involved. > In addition to true custom fields, I think we would serve the > community well by also providing a GUI-customizable and internally-supported > "new bug template" mechanism similar to Mozilla's new bug page. We already have such a mechanism; it's not GUI-customisable but then neither are any of our other templates, and we have no plans to make them so. Gerv
>> I'm required to generate reports on how well my team meets its written >> commitment dates for fixing bugs). > >I'm sure you've read Joel's comments on using a bug system for this sort of >thing... Not everything Joel writes is correct. It's a fundamental principle of information management that information that's stored in more than 1 place is subject to rot. A bug DB should store all company-necessary information related to the fixing of bugs. I don't think this is really subject to question. The only thing that's questionable is whether special fields are needed or if the data can be stored in existing plaintext fields. I claim that some (unpredictable to BZ programmers) data doesn't want to live this way. >> b) Fields requiring formatting validation > >This can be done using JS on the bug entry page, and using entry templates. Ok, but if this is the answer for everything, why bother writing a general purpose bug DB at all? Also, not all of us are browser/web programmers (i.e. I would have to go to significant effort to learn JS, etc.). Anyway, a reasonably admin-friendly, customizable mechanism for entering bugs and validating fields (and searching/sorting on the results of this) might be a reasonable solution to this particular dilemma. BTW, bug entry templates also can take care of Joel's only valid reason for objecting to custom fields: ease of bug entry. One can make an arbitrarily simple (subject to business rules) bug entry template for use by people that don't need the added complexity. >> separate columns in 1 table lead to database bloat, and require lengthy ALTER >> TABLE's that might be hard to do in a production environment. > >What is "database bloat", and how does this plan lead to it? Rows in tables are typically stored as fixed length records in most DBs that I know of (for speed reasons). So if you have 30 extra custom fields (even if only 2 of them are used for each product), every row in the DB takes up all the space used by all of the fields. While this doesn't necessarily matter directly unless you expect to be disk-bound, it can have other performance ramifications, especially if a row starts to exceed the size of a disk sector. >> Yes, there are huge piles of joins, but they are (at worst) "eq_ref" joins > >I have no idea what either of those things are; but I would take a lot of These are reasonably efficient DB join mechanisms that can rely solely on indexed columns (and only need to grab 1 row for each combination of previous DB lookups). >convincing that adding one join to every bug lookup for each custom field is a >good idea performance-wise. We cannot afford _any_ performance degredation in >Bugzilla - b.m.o. is slow enough as it is. Again, b.m.o won't be affected by anything they don't want to be affected by. There are no joins if you have no custom fields. There's no DB bloat if you have no custom fields. With this fully orthagonal scheme there's *no* performance degradation of any kind unless you actually add custom fields to the DB. >I agree that, conceptually, this is a clean way to do it - but I think we may >get overwhelmed by the practical issues involved. Always a reasonable concern. Can anyone think of some practical concerns to discuss about this idea (i.e. orthagonal DB schema for custom fields)?
> Not everything Joel writes is correct. I know that - I was just mentioning it. > >What is "database bloat", and how does this plan lead to it? > > Rows in tables are typically stored as fixed length records in most DBs that I > know of (for speed reasons). So if you have 30 extra custom fields (even if > only 2 of them are used for each product), every row in the DB takes up all > the space used by all of the fields. OK, I get it. True. Thanks. :-) >> Yes, there are huge piles of joins, but they are (at worst) "eq_ref" joins > >I have no idea what either of those things are; but I would take a lot of These are reasonably efficient DB join mechanisms that can rely solely on indexed columns (and only need to grab 1 row for each combination of previous DB lookups). > Always a reasonable concern. Can anyone think of some practical concerns to > discuss about this idea (i.e. orthagonal DB schema for custom fields)? As I think I've said in the newsgroup, custom fields really needs to be designed (if not implemented) by someone like bbaetz, who understands database internals. Gerv
[Note: This is the Bugzilla "Joel," not "Joel On Software"] Perhaps the right approach is as follows.... 1) Create a cumtomdefs (to store all the administrative controls for customfields) customtext table, a customnum table, and a customdate table. Each of those other tables would keep the actual data and a link to what kind of field (the def) and the bug or attachment to which the field applies. 2) Through administrative interfaces permit the admin to specify the following.... FIRST FIELD: Product/Component combinations (Default to ALL/ALL except NONE/NONE) Group membership to see field (Default to none needed) Group membership to change field (Default to none needed) Title of FIRST TEXT FIELD field type (text/number/date) (and size???) X include on Bug entry form Next FIELD .... In templates, have default run-time code that plops the relevent custom fields in the relevent forms UNLESS something else in the template tells it not to. Also, provide functions to make it easy for a template to either call up the fields or not. (might not even need the functions) In queries and reports, it should be easy enough to build in.
OK, Zippy volunteered one of their DBAs to chat with me about this for an afternoon, and here's what he suggests: Since each table you add needs to be indexed on bug_id, and every time you join it is going to be another index to scan. Therefore he suggests that for fields which have a 1 to 1 relationship with a bug (the field can only exist once on that bug - CCs and dependencies are good examples of things that DON'T fit this definition) that each should be a new column on the same "custom fields" table. This way there's only one join to get all of the fields, and there's only one index to scan in order to perform the join. Fields that have a one to many relationship or a many to many relationship would each be stored as a separate table, for obvious reasons. :) We would of course need some sort of "metadata" table which contains information Bugzilla can read about what fields are available and where they're stored. I don't think much UI would be required from the web side for editing it... An interactive shell script would be fine. In fact, an interactive shell script to do it would be necessary, even if we do have a web interface for it. Why? Because in enterprise production environments, the Bugzilla user isn't going to get add/drop rights. Schema changes in the production database need to be made by a DBA account (not an application access account), and in a lot of cases that means the DBA himself has to run said script. Schema changes are not taken lightly in enterprise environments, so it's not something you can just up and do on a whim. (and yes, that's being taken into account in the rewrites being done to checksetup.pl for supporting Sybase and Postgres - so a DBA can run the schema updates section with a separate password if necessary)
Any shell script is bound be highly problematic cross-os-wise. If the "shell script" can be in Perl, we're much better off - but it's a standalone application, then.
Well... it's kinda hard to use DBI from the shell... ;-) Yeah, it'd be a Perl script. I simply meant it would be accessible from the shell. :)
I don't think that changing the structure of your database is something that requires a web interface :-) But your DBA has an excellent idea. Put single-value fields in one table, and multi-value fields in their own tables. This way, we can convert all of os, platform, url etc. to custom fields without b.m.o. losing performance. Gerv
This seems a good idea. I'm not sure that we need many-to-ones; just the one custom fields table (plus any metadata support).
Not sure I understand the implications of this latest suggestion to the problem of "multi-select" custom fields. As currently implemented in the custom fields patch, these are 1::1, because all the current selections are stored in the single text field and are decomposed for display, and searching naturally does the right thing (mostly). One could argue they are "many-to-one", but I'm not sure how useful that would be vs. the current implementation. They "look" 1::1 to users. In case anyone's curious, the main place I think multi-selects belong are areas like Hardware/OS(s). The current BZ kludge of "All" isn't really that useful, IMNSHO... it should be obvious and easy to search for all issues that affect, say, Win2k. Another example might be "Languages" for localization issues.
Dave: DBI::Shell could be fed a sql file, but... Anyway, there are several custom fields types. 1-any - stuff like status_whiteboard 1-N - platform - 1 bug has multiple choces, but can only pick one M-N - platform allowing multiple options - one bug has multiple choices, and can pick as many as they want. For the N-N stuff, we definately need a join. For the 1-N stuff, we do too. The 1-any stuff is a bit trickier. The problem is that I don't see the problem in the join. If we search on a text field (like status_whiteboard), then we need to do a table scan anyway, and the join overhead is lost in the noise. If we're not searching, then its only going to be used for display, and for one bug, a quick index lookup would be fine. And I can't think of anything else a 1-1 mapping would be for, apart from text fields (They could be used for checkboxes, but we have request flags for that) IOW, the 1-1 mapping is (bug_id, field_id, value) with indexes on bug_id and field_id. The lookup is trivial with subselects, and we can even cache the field_name->id mapping in the versioncache to get rid of one of them. (That may not be worth it; if the fieldname->id table is in the db's cache, the db can probably do a lookup in C faster than we can in perl) 1-N mappings for versions and the like are needed to avoid the problems we have now, wrt renaming them, and so on. So we'd be linking to one or more numbers, in a separate table (separate because of the join speed for the text index jointing to an int, and the like). That table could handle 1-N and N-N stuff easily. The idea of changing the schema behind the scenes doesn't exactly fill me with confidence. I also don't want to go this way just because mysql's optimiser sucks. Lets be honest - we have really low requirements on our database. We don't do anything fancy at all, really. DB speed is not a limiting factor for us, with the exception of buglist.cgi, and for most of those queries mothra's age is the issue. Premature optimisation is the root of all evil, and such.
Oh, and one extra problem with the 'add a column to the table' thing is that there have been requests for product specific fields, and doing this as a column would waste space, and the like. I'm not sure if thats significant, but I guess it could add up.
While product specific fields could be pretty nice in some cases, there is a much more general need to at least have some level of custom field control. Even having a fixed number of 1:1 fields that you could just rename would be a huge improvement over what we have now. The approach most recently discussed would be of tremendous help to many of us who need some level of custom fields.
I've tried out this patch and I seem to keep getting... INSERT INTO bugs_customfields VALUES(35, , ''): You have an error in your SQL syntax near ' '')' at line 1 at globals.pl line 277. when I commit a new bug. I patched off 2.16.1 and everything went well? I added a custom field and then deleted the custom field. I checked the database and there are no customer fields but it keeps happening.
I put the Patch Against 2.16.1 against a 2.16.2 tree. So far things have been pretty smooth except for in the editcustomfields.cgi I had to add: trick_taint($valid_exp); trick_taint($mandatory); To avoid tainting (line 156). in buglist.cgi removed "as " part from push @fields , "bcf$cf_id.value "; (line 323) now to see if I can add the custom columns to query.cgi.
Has anyone upgraded their bugzilla custom fields install from 2.16.2 to 2.16.3? I just did using CVS and when I ran checksetup.pl I got errors reported in globals.pl. Anyone else had this problem and got a quick fix for it?
Had a look into it and it seems there was an error while merging globals.pl (although I'm sure I never saw any error messages during the update). If anyone else gets the problem, here's what you have to do to fix it: 566,567c566 < <<<<<<< globals.pl < print FID GenerateCode('@::legal_components'); --- > print $fh GenerateCode('@::legal_components'); 574,575c573,574 < print FID GenerateCode('%::customfields'); < print FID GenerateCode('%::legal_customfields'); --- > print $fh GenerateCode('%::customfields'); > print $fh GenerateCode('%::legal_customfields'); 577,579d575 < ======= < print $fh GenerateCode('@::legal_components'); < >>>>>>> 1.169.2.15
Sorry for the spam, but someone came into IRC asking about custom fields; Gerv's page on the subject should be easy to point people to in that situation.
we've been using custom fields for a while, and we are using Bugzilla 2.16 with the customfields patch against 2.16 of 2002-09-24 09:22:00. And here is what we think is missing: - bulk updates (as in "change several bugs at once") does nothing for custom fields - Saving bookmarkable templates doesn't save values of custom fields - buglists that display columns that are customfields are not working as bugs which don't have custom fields don't get shown on the buglist. We have since fixed this, and would recommend the following in the buglist.cgi around line 303: if (@custom_columns > 0) { #push(@fields, "bugs_customfields.cf_id "); push(@fields, "customfields.name"); push(@fields, "bugs_customfields.value "); my $cf_left_join = "LEFT JOIN bugs_customfields ". "ON bugs_customfields.bug_id = bugs.bug_id " . "AND bugs_customfields.cf_id " . "IN (" . CustomFieldNumbers(@custom_columns) . ")"; push(@supptables, $cf_left_join); push(@supptables, "LEFT JOIN customfields ". "ON customfields.id = bugs_customfields.cf_id"); } Can anyone tell me if the newer patches address any of the issues which i have listes? thanks --saqib
Curious question, will this feature allow you to add custom fields tied to a specific product? Or maybe tied to a specific group (assuming people can be in multiple groups). Thanks!
From the patch we applied (2002-09-24 09:22:00), the customfields were per-product. Maybe the newer patches address your requirements.
I just setup Bugzilla 2.16.3 on Mandrake and it is up & running I happened to look at Bug 91037 and I found that u have implemented custom fields I am confused where to start from.There are some 200 comments on this bug. The comment 131 seemed to me the start point. I copied editcustomfields.cgi to my top level directory and the templates from customfields dir to /bugzilla/template/en/default These are the only steps I followed.Do I need to make any changes to mySQL. Shall I see some kind of GUI which allows me to add custom fields. Can u please email me the step by step procedure for implementing custom fields. I would really appreciate it Thanks Deen
After reading through these 200 comments, it sure is confusing about how to reach a solution. I find many patches for patches, making it difficult to find the right patch to apply that works. Does anyone have a to-be-applied-from-scratch patch file ? I want to apply this on my 2.16.3 bugzilla installation. I have found these shortcomings so far * No support for custom-fields at the query page (query.cgi) * "Change several bugs at once" doesnt work for customfields * Sorting on the Customfields on the buglist.cgi (result of a query) doesnt work * editposition.cgi doesnt work Can someone help with a stable set of patches that we can use ?
* No support for custom-fields at the query page (query.cgi) the customfields are in the drop down box down the bottom left of the query page under Advanced Quierying using Boolean charts * "Change several bugs at once" doesnt work for customfields We got this working and hope to have a patch soon. we are currently testing it * Sorting on the Customfields on the buglist.cgi (result of a query) doesnt work true. * editposition.cgi doesnt work no comemnt.
Attached patch Patch Agains 2.17.4 (obsolete) — Splinter Review
I've ported the patch to version 2.17.4 with minimal testing.. Most of the changes have been because of the change from product to product_id in many tables..
I've ported the patch to version 2.17.4 with minimal testing.. Most of the changes have been because of the change from product to product_id in many tables..
Attachment #131560 - Attachment is obsolete: true
I've ported the patch to the HEAD of Sept 16th 2003 with minimal testing.. Most of the changes have been because of the change from product to product_id in many tables.. HEAD of Sept 16th is post 2.17.4 and before 2.17.5
using 'Sept 16th 2003' patch (attachment id=131562) leads to a server error: 1. 'Edit/add custom fields' 2. 'Commit' apache error-message contains: malformed header from script. Bad header=</pre>: /srv/www/htdocs/tasktrack/editcustomfields.cgi editcustomfields.cgi: Insecure dependency in parameter 1 of DBI::db=HASH(0x884b584)->prepare method call while running with -T switch at Bugzilla/DB.pm line 64.
additional info to my comment #194: the error occurs only when editing an existing customfield.
I've just tried what you say on a test installation and cannot reproduce it.. This is probably linked to 'tainted' mode and I'm not very competent at fixing these because I don't really understand what this is about.. One of the big changes I made is moving from using the 'product' variable to use the 'product_id' variable in queries.. Maybe there might be a tainted mode call for this variable that is needed in some cases.. I think it would help if you had the exact line of the failure in editcustomfields.cgi.. Ludovic
reply on comment #196: the following fix of editcustomfields.cgi works for me: 169c169 < SendSQL("UPDATE customfields SET type='$type', valid_exp='$valid_exp', mandatory=" . ($mandatory ne ''? '1':'0') . ", default_value= '$default_value' --- > SendSQL("UPDATE customfields SET type='$type', valid_exp=" . SqlQuote($valid_exp) . ", mandatory=" . ($mandatory ne ''? '1':'0') . ", default_value= '$default_value'
Looks like the patch against 2.17 HEAD (possibly other patches, haven't checked them) causes the query sort ordering to fail due to the following change on line 672 of buglist.cgi: original line: $query .= " ORDER BY $db_order " if ($order); new line: $query . " ORDER BY $db_order " if ($order); Looks like a typo, and if you revert the line back, the original column sorting works as it should. Since this is such a trivial fix I'll let somebody else more involved fix the patch if this is the correct thing to do.
Here is a new version of the patch that should fix most of the problems reported and a bunch of other problems.. It is now possible to use fields of type 'multi' and custom fields can be associated to All products and components..
Attachment #131562 - Attachment is obsolete: true
First, thanks for the great work. This patch is gonna save me so much time. ;) Being new to the project I'm not sure if this is the proper place to ask questions, but I see many posted in the comments to I'll add mine. If there's a better place, shoot me an email and I'll ask my questions there. I've applied the patch without problems. I can manually enter http://beabugs1/devzilla/editcustomfields.cgi and enter my own custom fields. The problem is I don't see the link to "custom fields" in the useful links part of the footer. I checked the template source and there is the code to add the link. Next, I checked the parameters and verified that data/params contained 'usecustomfields' => '1'. Finally I checked my user permissions to make sure I had tweakparams turned on, which I do and I see the "Sanity Check" and "parameters" links. Where else should I look to see why I'm not getting the "custom fields" links?
cannot sort a buglist by clicking on a customfield header: 1. show a buglist (query.cgi/buglist.cgi?...) 2. add a customfield to the listed columns (colchange.cgi) 3. click on customfield header to sort buglist leads to an internal error page: Invalid Column Name The custom sort order specified in your form submission contains an invalid column name bcf1.value. see buglist.cgi line 582 Another Problem: colchange.cgi seems to fail on including customfields with a multiword-name (e.g. 'Test Equipment')
Is there a meta-bug that tracks all of these custom field issues? There are so many different issues reported in this bug that it seems hard to keep track of them all...
I don't think there is another bug.. Currently in the latest patch I submitted for the 2.17 Head code, the problems in comment 194, comment 197, comment 198 are fixed.. comment 200 was a local issue (the template was copied in the custom area so the patch did not modify it).. I'm looking at the problems explained in comment 201
Problems reported in comment 201 are now fixed.. Some of the fixes are a little bit of a hack in the way the ordering is handled for custom fields and in the way custom fields with white spaces are treated.. I've made some modifications to show the 'description' in the column headers and the create and edit template instead of the field name.. With this modification it would probably be better to not allow custom fields with white spaces.. this can only be a debugging nightmare..
Attachment #132198 - Attachment is obsolete: true
This is an additional patch which has multiple features: Custom Fields Picker: Needs patch from Bug 102852. This allows to create custom fields of type 'user' and of type 'date' (the 'date' type behaves like the 'any' type).. The fields of type 'user' will have a picker allowing to search for valid email addresses from the database (it also supports LDAP).. Also you can create a homemade picker (write the javascript to call pickValue in the 'picker' entry field). Example: for the customer custom field pickValue(this.form.customer, 'value', 'value', null, true, 'db', 'bugs_customfields', true, 'cf_id=27') would allow to search for existing customer in the database... Custom Fields by entry type: Patch from Bug 221017 allows to create different of entry types (Bug, Task, Tracker, Project, etc..).. This patch allows to restrict the usage of each custom field for specific entry types.. For exemple if the 'customer' custom field has 'Tracker|Project' in the allowedtypes field then it will only appear in the entries of type Tracker or Project.
No notification email is generated, when a customfield changes. Also the initial notification email (when submitting a new ticket) does not contain information about the customfields.
I won't have time to make these modifications.. If somebody wants to help out it would be great..
A slight change to template/en/customfields/create.html.tmpl that will add the string "(Optional)" after custom fields that are not mandatory.
Help! I'm highly dependent on notification emails, if a customfield changes (see comments #206 and #207), but I'm not familiar enough with bugzilla to make the necessary modifications.
Has anyone updated their 2.16.3-with-customfields to 2.16.4 using CVS yet? It should work OK but there were a few problems last time when going from 2.16.2 to 2.16.3.
Upgraded via CVS and all went fine.
Could somebody please let me know what are the patches that I need to apply to get the custom-field functionality working. I have done a fresh install of 2.16.4 last week on a linux box. Any help or pointers will be great. Thanks -joseph
New version of the patch with minor fixes working on 2.17.6
Attachment #132461 - Attachment is obsolete: true
I installed 2.17.6 (Nov 2 2003 release) and applied the patch(135401) suggested in comment 213. On accessing editcustom...cgi script, I get this Software error. (I don't see product_id column in products_customfields table) ------------------Browser Window Message------ DBD::mysql::st execute failed: Unknown column 'product_id' in 'where clause' [for Statement "select customfields.name, products.name from customfields, products_customfields, products where customfields.id=cf_id and (product_id = products.id or product_id=0) order by customfields.id"] at Bugzilla/DB.pm line 66 Bugzilla::DB::SendSQL('select customfields.name, products.name from customfields, pr...') called at globals.pl line 188 main::GenerateVersionTable() called at globals.pl line 392 main::GetVersionTable() called at ..... editcustomfields.cgi line 26
I think your database is desynchronized between the products and the products_customfields table: If the table products_customfields does not exist it will be create will field 'product_id'.. If the table products_customfields already exists with field product_id nothing needs to be done.. If the table products_customfields exists with field product then it is upgraded only of the field product is found in the products table (sign of a 2.16 version) So you must have a products table that is already upgraded to the product_id field and a products_customfields that is not.. Either: - you start from a clean DB or - you run this script: ALTER TABLE products_customfields ADD COLUMN product_id smallint not null; UPDATE products_customfields SET product_id = XXX WHERE product 'YYY'; ... repeat for each existing custom field .. ALTER TABLE products_customfields DROP COLUMN product;
I have 2.16.3 installed and desperately need to add Custom Fields. How do I do it? There are so many patches, and patches for patches in this bug that I have no clue what to. Even IF I did know what patches to install I can't find any information about how to apply them in the documentation. I'm new to Bugzilla, MySQL & Linux (a triple threat, lol) and need detailed instructions on how/where to install the patches to get this functionality. I found out, the hard way, during the installation that many times the documentation just "assumes" you'll do something without telling you to actually do it. As a "newbie" I need detailed step-by-step instructions. I've seen other people ask for this (Comments 188 & 189) in the bug but I don't actually see the instructions. Can someone help point me in the right direction, please?
> There are so many patches, and patches for patches in this bug that I have no > clue what to. Even IF I did know what patches to install I can't find any > information about how to apply them in the documentation. They aren't mentioned in the documentation because they aren't officially supported (otherwise they'd be in Bugzilla itself.) > I found out, > the hard way, during the installation that many times the documentation > just "assumes" you'll do something without telling you to actually do it. You also made this accusation about our documentation in the newsgroup. At the time, I asked you to name, or to file bugs on, the bits you thought were unclear. A search of Bugzilla reveals no such bugs. Perhaps while you are waiting for someone to explain which is the right patch (I certainly don't know) you might find time to file them? :-) Gerv
I added a bug which has been accepted about a minor issue I ran into during the install and the other bugs I wanted to add where all duplicates. Another issue I brought up on the message board was also entered as a bug a week or 2 ago based on my post.
> I added a bug which has been accepted about a minor issue I ran into during > the install and the other bugs I wanted to add where all duplicates. Indeed you did; I don't know why my first search didn't find it. Apologies. If you would list the duplicates of the bugs you wanted to file (perhaps in an email to me) I'll see if some of them can be fixed. Gerv
see comment #206. Ludovic, please verify the changes!
Relating custom fields with Product level fields. I am looking for a functionality/relationship similar to what happens when you select a product (in the query interface) and the relevant components, versions, and milestones for that product is filtered/displayed by the UI (selectProduct javascript function). Does anybody know of a patch/pointer/ that will allow me to establish this relationship between 'Version' and user defined custom field, say, 'revisionCF' on enter bug interface? Something like the following: I want to tie Version 3.1 for my product with revisionCF 3.1.1, 3.1.2, 3.1.3 or for Version 3.2 with 3.2.1, 3.2.2, etc. product --> Version --> RevisionCF I was wondering if you could please suggest the way to go about it or point me to relevant information.
Background: Upgrade from 2.17.4 (no CF patch) to 2.17.6 Applied CF patch for 2.17.6 Applied change-notification-email patch Now when I create a bug, edit.html.tmpl doesn't show the custom fields but when I click on Back To Bug # link or access the bug using its ID, custom fields show up. Some how this portion of the code is not executed (in edit.html.tmpl) when a bug is created for the first time: [% FOREACH c = customfield %] [% IF c.done != 1 %] [% PROCESS cfedit %] [% c.done = 1 %] [% END %] [% END %] Is this a bug? Any idea how this can be fixed? Any help is greatly appreciated.
------- Additional Comment #222 From Hamid Tehrani 2004-01-09 15:32 ------- I have encounted this problem too. As debug the post_bug.cgi, I found that when $vars contains no {'customfield'} when transferred to $template->process("bug/create/created.html.tmpl", $vars), so didn't show custom fields after post bug. To fix this bug, add this line in post_bug.cgi: $vars->{'customfield'}=$bug->{'customfield'};
Blocks: 226852
Blocks: 193215
We're having a problem with custom fields at our installation. We're running v2.17.6 with the CF patch. When people go through a list and move bugs from NEW to ASSIGNED the contents of all the custom fields is lost. The settings and values for the custom fields doesn't seem to matter. I've been unsuccessfully hunting this problem for a while now. Has anyone else encountered this problem? Do you have any suggestions of where I might look?
In answer to 224: I probably noticed the same. process_bug.cgi also needs the $vars->{'customfield'}=$bug->{'customfield'}; line (as described in comment 223). Search for: # next.html.tmpl includes edit.html.tmpl, and therefore we # need $bug defined in $vars. $vars->{'bug'} = $bug; and put $vars->{'customfield'}=$bug->{'customfield'}; below that (sorry for not making a patch).
Do you have any problems with slow queries for creation_ts? When I specify dates for 'Only bugs changed between' and select [Bug Creation] it takes a long time to get any results (most of the cases it times out). Anybody else is experiencing this problem? I am using 2.17.6.
(In reply to comment #226) > Do you have any problems with slow queries for creation_ts? That's probably bug 232150. Try its fix and reopen if you still see slowness.
I'm still here, just fixing the owner to more accurately indicate that I haven't actually been helping with this yet. I think Sean's been the one mostly working on this, but I'll let him take it if he wants rather than me forcing it on him.
Assignee: justdave → nobody
Config: linux 2.17.6 with patches 135401 and 136712. Getting a software error when using customfields in change_columns (colchange.cgi). This only occurs when I have selected one of my customfields to show in a list (buglist.cgi). I can reliably reproduce this. DBD::mysql::st execute failed: Unknown table 'map_assigned_to' in order clause [for Statement "SELECT bugs.bug_id, bugs.bug_severity, bugs.priority, bugs.bug_status, bugs.resolution, bugs.bug_severity, bugs.rep_platform, map_reporter.login_name, bugs.bug_status, bugs.resolution, bugs.short_desc, bcf1.value as bug_impact FROM bugs, profiles AS map_reporter LEFT JOIN customfields cf1 ON cf1.name='bug_impact' LEFT JOIN bugs_customfields bcf1 ON bugs.bug_id = bcf1.bug_id and bcf1.cf_id=cf1.id, keywords keywords_ LEFT JOIN bug_group_map ON bug_group_map.bug_id = bugs.bug_id AND bug_group_map.group_id NOT IN (6,7,3,8,2,1,5,4) LEFT JOIN cc ON cc.bug_id = bugs.bug_id AND cc.who = 55 WHERE bugs.reporter = map_reporter.userid AND keywords_.bug_id = bugs.bug_id AND (((lower(bugs.keywords) regexp '(^|[^a-z0-9])review($|[^a-z0-9])') AND (keywords_.keywordid = 6))) AND ((bug_group_map.group_id IS NULL) OR (bugs.reporter_accessible = 1 AND bugs.reporter = 55) OR (bugs.cclist_accessible = 1 AND cc.who IS NOT NULL) OR (bugs.assigned_to = 55) OR (bugs.qa_contact = 55) ) GROUP BY bugs.bug_id ORDER BY map_assigned_to.login_name,bugs.priority "] at Bugzilla/DB.pm line 66 Bugzilla::DB::SendSQL('SELECT bugs.bug_id, bugs.bug_severity, bugs.priority, bugs.bug_s...') called at /usr/local/bugzilla-2.17.6/buglist.cgi line 744 any ideas?
Hi folks, Im just a newbie trying to come up to speed on this code.... I have applied Patch 135401 against 2.17.6 and it went on ok. From paramenters I can now select UseCustomFields. But where do I add in the custom fields? There seems to be patchs on patchs on patchs for the EditCustomFields.cgi and I for one am confused. If anyone has 2 mins, can they write a quick paragraph explaining to all us newbies out there how to setup the custom fields ? Cheers in advance, Mat
OK...Mats mini guide to getting this installed (complete newbie!) Sorry for the spam folks...but throught other newbies might find it useful 1. Install http://bugzilla.mozilla.org/attachment.cgi?id=135401&action=view Do this from the bugzilla root using "patch -p1 < 91037_217H_customfields_v2.patch" This patch installs all of the CGI code AND all the template code. From what I can understand this is all you need to do for basic custom fields. 2. Run "perl checksetup.pl" again 3. Now you can add custom fields by www.yourbugsinstallation.com/editcustomfields.cgi There is also www.yourbugsinstall.com/editposition.cgi How you use them after this....Im still learning.
(In reply to comment #213) > Created an attachment (id=135401) > Patch against 2.17.6 > New version of the patch with minor fixes working on 2.17.6 I have successfully installed this patch on 2.17.6 in a Win32 environment. Things work wonderfully. I have a small cosmetic problem though. When I enter a bug(http://mybugzilla/enter_bug.cgi) or view a bug (http://mybugzilla/show_bug.cgi?id=1) I get strange characters () on the html page. Any ideas as to why these characters are showing up? They don't show up on the long list page however. Any help would be appreciated. We have some very anal folks on staff who have to use this and they are whining and unfortunately they pay me.
Attached file A new implementation of custom fields (obsolete) —
This is a new custom fields implementation. Apply the patch to a 2.17.4 installation, then see the file README-CustomFields for instructions.
Attachment #141367 - Attachment is obsolete: true
Attachment #141367 - Attachment is patch: false
This is a new custom fields implementation. Apply the patch to a 2.17.4 installation, then see the file README-CustomFields for instructions. D'oh! Sorry about the earlier attachment; I didn't realize patches shouldn't be zipped.
I installed 2.17.6, applied Custom Fields patches(135401 and 136712), entered 2 ne w custom fields, added above mentioned code lines in the files process_bug.cgi and post_bug.cgi and I still cannot see the custom fields when I try to add a new bug . They appear thou in the "Advanced Querying Using Boolean Charts:" drop-down boxe s when I do Search. Can anyone explain what the purpose of the editposition.cgi file? any more documen tation on what is the correct syntax of creating new custom field. I tried to add a new drop-down box and I assumed that the listed items in it I sho uld place in the "Valid Expression" box in the editcustomfields.cgi page. Any help will be greatly appreciated! Thanks Svet
I installed 2.17.6, applied Custom Fields patches(135401 and 136712), entered 2 new custom fields, added above mentioned code lines in the files process_bug.cgi and post_bug.cgi and I still cannot see the custom fields when I try to add a new bug. They appear thou in the "Advanced Querying Using Boolean Charts:" drop-down boxes when I do Search. Can anyone explain what the purpose of the editposition.cgi file? any more documentation on what is the correct syntax of creating new custom field. I tried to add a new drop-down box and I assumed that the listed items in it I should place in the "Valid Expression" box in the editcustomfields.cgi page. Any help will be greatly appreciated! Thanks Svet
I took a look at attachment 141368 [details] [diff] [review] and have a few observations... First, it generally diverges from some of the traditional Bugzilla conventions that are a must if it is to land. Most notably, it uses boilerplate SQL to update the schema rather than using checksetup.pl to ensure a smooth migration both initially and in the future. It also appears to implemet a number of common functions of its own that should probably be merged with Bugzilla's common functions. The existing code seems to attemot to lay out the fields as a programming decision. I think this is fine as an initial cut, but it probably wants to be enhance in a subsequent (distinct) bug to permit a template author to "claim" a customfield and keep the automatic code from handling that field so the template can do it in a locally desirable manner. If a bug is edited and a customfield is not provided to process_bug, does it leave the customfield untouched? I suspect that getting this landed will require quite a drive just because of the size of the patch. Before suggesting that Sean do anything about matching the rest of the Bugzilla conventions, I suggest that a design be posted here and debated to consensus. Having done a monster patch myself, I think it is worth reminding everyone that this will take a few months concerted effort by the author and a few primary reviewers. Are we ready? I'm in as a reviewer.
Count me in too.
Okay, as the beginning of a specification, I've looked over all the comments here, and here is a brief summary based on the information comtained in this bug: Obviously custom fields is a large patch, and it requires incremental implementation. So, here is an in-order description of custom fields, from the bare basic functionality to full-blown power. This is not in order of priority, but instead in what seems like the easiest order to implement all functionality in. (1) The basic functionality of custom fields is: enter_bug.cgi: The ability to enter data into a custom text field show_bug.cgi: The ability to see the data from entered custom text fields. (2) An shell-based admin tool to manage custom fields. (3) In order for this to become useful for most users: query.cgi: The ability to search custom fields (4) Ability to track custom fields in the bug activity. (5) Custom fields of different types, such as Select or Radio. (6) Control of Custom fields through templates. (7) Ability to do mass-changes of custom fields. Future ------ Down the road, some users would like: + enter_bug.cgi: Ability to make certain fields mandatory. + enter_bug.cgi: Don't break bookmarkable templates + show_bug.cgi: Ability to control where custom fields appear + long_list.cgi: Ability to see custom fields in long_list. + buglist.cgi: The ability to see custom fields in the bug list. + query.cgi: Ability to search custom fields in "Bug Changes" + admin: GUI to add and maintain custom fields. + admin: Ability to restrict fields to products. + admin: Ability to delete custom fields from the system + Data validation by regular expression + Descriptions for custom fields somewhere in the UI + Ability to style custom fields with CSS, and ability to have custom name attributes for custom fields. + Contrib and non-web tools should understand custom fields. + Date-type fields (note comment 145) + Multi-select fields + Group-based security controls for custom fields + Ability to tie custom fields to current fields (comment 221) Essential Requirements as this is happening ------------------------------------------- + No MySQL-specific code + Maintainable schema changes (checksetup.pl) + A Bugzilla without any custom fields does not get noticeably slower. + Custom fields work in taint mode + All current Bugzilla functionality must continue to work properly. + Don't cause any more cross-platform bugs (for Win32) Desired Requirements -------------------- + Speed of searching custom fields is good. + A Bugzilla *with* custom fields does not get noticeably slower. + No premature optimization Important Comments from Bugzilla Maintainers -------------------------------------------- comment 18 -- Template Interactions comment 32 -- Certain Requirements comment 97 -- Types of Fields, Schema comment 165 -- Note about discussion on developers list comment 170 -- Admin GUI comment 171 -- DB Structure (also see following comments) comment 237 -- General comments on Sean's new Custom Fields patch Where to Go From Here --------------------- My proposal is this: Break (1) - (7) above into separate bugs, and make them block this bug. Sean, can you break your patch down into a patch that does *only* (1), above, and file it as a bug blocking this one? Then we can review that, get it in 2.19.1, and move on from there.
Whiteboard: [Summary: Comment 239]
This isn't going to make it into 2.18...
Target Milestone: Bugzilla 2.18 → Bugzilla 2.20
Hi, This issue refers to the 'Patch against 2.17.6' patch ... I've noticed an issue with displaying customfield values as columns in buglist.cgi ... when displaying both of the two customfields I'm using, their values are swapped! However, the correct value is there when displaying only one customfield column. Is there a workaround, or is this resolved by a newer patch (i.e., the 'new implementaton')?
Do we have a customfields pathc against 2.16.5
the existing patches work on 2.16.5. i'm not sure which ones you need to apply though as i applied them on 2.16.1 and have just been updating via cvs since. the only problems i had was from 2.16.2 -> 2.16.3 (see comment 183).
I've installed the "A new implementation of custom fields" into 2.17.4. -I ran the custom-fields-schema.txt and it worked fine. -I ran the create-fields.pl and it worked fine. -I tried to run the checksetup.pl and got the following: Creating table group_control_map ... [Thu Jul 15 18:04:57 2004] checksetup.pl: DBD::mysql::db do failed: Table 'group_control_map' already exists at checksetup.pl line 1808. -When I now try to access the bugzilla I get the following: Undefined subroutine &Bugzilla::CustomFields::Common::prepare_sql called at Bugzilla/CustomFields/Common.pm line 76. I've had a look at the file and the prepare_sql routine isn't available, is that some sort of a standard file? I'm going crazy here, since I really would like the "custom fields"... Thanks for any help!
(In reply to comment #244) > I've installed the "A new implementation of custom fields" into 2.17.4. > [Thu Jul 15 18:04:57 2004] checksetup.pl: DBD::mysql::db do failed: > Table 'group_control_map' already exists at checksetup.pl line 1808. That's probably bug 212095 (which was fixed in 2.17.5)
(In reply to comment #245) > (In reply to comment #244) > > I've installed the "A new implementation of custom fields" into 2.17.4. > > [Thu Jul 15 18:04:57 2004] checksetup.pl: DBD::mysql::db do failed: > > Table 'group_control_map' already exists at checksetup.pl line 1808. > That's probably bug 212095 (which was fixed in 2.17.5) Thanks! That fixed the first issue, the issue: Undefined subroutine &Bugzilla::CustomFields::Common::prepare_sql called at Bugzilla/CustomFields/Common.pm line 76. Still remains though, anyone got any ideas?
(In reply to comment #246) > Thanks! That fixed the first issue, the issue: > Undefined subroutine &Bugzilla::CustomFields::Common::prepare_sql called at > Bugzilla/CustomFields/Common.pm line 76. > > Still remains though, anyone got any ideas? Yes. Replace this line: my $sth = prepare_sql($sql, @param); ...with these lines: my $sth = Bugzilla->dbh->prepare($sql); $sth->execute(@param); Unfortunately, I didn't detect this error before shipping off the patch. It's a bit depressing that it took so long for someone to notice. Maybe folks have been fixing it themselves? I dunno. Oh, and you can delete that line "my @row;" just prior, while you're at it. Dang, how did that get left in there? It's even in my current sandbox code.
Some comments on comment 239: I don't want to rehash my (extremely long and pedantic :-) comment 166, but I think it would be wise to keep in mind the small number of valid reasons for adding custom fields when deciding on implementation priorities. In particular, I think there is no point in implementing a custom fields feature that doesn't have: + The ability to see custom fields in the bug list, mostly to facilitate sorting the buglist on custom fields, preferably 2 levels deep. + Data validation by regular expression + Date-type fields (though this could be a subset of data validation) + Single/Multi-select fields (facilitates search/sort) + Some mechanism to facilitate report generation based on custom fields (inclusion in the RDF formatted output, for example) So I'd personally put those in as initial steps rather than some kind of nebulous "for the future" category. And maybe: + Group-based security controls for custom fields The whole point of custom fields is to satisfy the need to validate/restrict, search, sort, report on, or otherwise specially process, well-defined chunks of information pertaining to a bug which are unique to a particular installation. Using them for anything else is just inefficiency and poor usability, usually due to bureaucracy.
Ray's right, all those things should be in the final incarnation of custom fields and the chosen schema should not preclude easy addition of those features. However, landing a giant patch in something like Bugzilla is much harder than landing several smaller patches. Bugzilla is a fast-moving target, so code rot is a real problem to contend with and the drivers have plenty of cats to herd. The Bugzilla bug lifecycle even exacerbates this problem to a certain extent, since the bug can't be marked fixed until the patch lands and all relevant patches need to land before it can be marked fixed. i.e. you can't land several smaller patches as each is done on a single bug. As such, if the schema is acceptable, this bug ought to be resolved when the core functionality is ready and several bugs with properly marked dependencies should be filed to handle the additional functionality. Since today we can wish this bug "Happy 3rd Birthday!" it's important to consider the benefits of getting a good foundation in so we can actually get the house built.
Ray has good points in comment 248 regarding comment 239. However I agree with Bill in comment 249 about needing to break this down into smaller pieces. Max stepped forward in comment 239 to try and identify a list of requirements, and to break it up into phases of an implementation. If we are ever going to get custom fields in, we have to start somewhere. And the most important part I believe is getting a start on the schema. It would be a big step forward just having a schema identified and in which would be supported, even if there was no UI to go with it. In the hopes that this bug doesn't live on another 3 years, I would prefer to follow the plan outlined in commen 239 just as a start. Can the latest approach on custom fields be broken down as suggested there?
I certainly have no argument with the notion that this monster needs to be broken down into smaller steps. I was merely trying to state an opinion that the elements I mentioned really, really don't belong in a category labelled "Future: Down the road, some users would like", but rather that they should be steps 8-12 (and maybe 13). Actually, I think they should go before steps 6 and 7, but maybe that's just me.
I have applied Custom Fields patch to my 2.14.5 Bugzilla installation. But, when I go to editcustomfields.cgi page none of the hyperlinks are enabled. I can't Add new fields or Edit the existing ones. Can anyone tell what am I missing here? Thanks, Fawad
Bugzilla 2.20 feature set is now frozen as of 15 Sept 2004. Anything flagged enhancement that hasn't already landed is being pushed out. If this bug is otherwise ready to land, we'll handle it on a case-by-case basis, please set the blocking2.20 flag to '?' if you think it qualifies.
Target Milestone: Bugzilla 2.20 → Bugzilla 2.22
I realize that this is a huge enhancment, but I think it's something that a lot of people would use. I certainly would customize a lot of the fields and I know other bugzilla users who would love to be able to make some company-specific or industry specific fields.
Set blocking 2.20 to '?' to match with the documented plan at http://www.bugzilla.org/status/roadmap.html#milestones I certainly _hope_ this will make 2.20, since there are several planned changes to our bugzilla that are waiting on this... I can help with some testing if it's needed, but I'm a bit unsure which of the mountain of patches is best...
Flags: blocking2.20?
(In reply to comment #255) > I certainly _hope_ this will make 2.20, since there are several planned changes > to our bugzilla that are waiting on this... It won't. The feature set for 2.20 is already frozen, and this counts as a feature change.
Flags: blocking2.20? → blocking2.20-
Has anyone seen a patch for 2.18rcN out there where N=[1,2,3]?
(In reply to comment #257) > Has anyone seen a patch for 2.18rcN out there where N=[1,2,3]? or, for 2.18 (proper), since it's been recently released? it's sort of ridiculous that this feature is still not in the package.
This attachment is a zipped tar file that contains a very minimal custom fields implementation for Bugzilla 2.18.3. No changes are made to the Bugzilla interface or to existing Bugzilla files or database entities. Custom field data introduced by this patch can only be examined programatically or from a database client. A much fuller custom fields implementation is in use at my company; the purpose of this minimal version is to garner some support for the basic schema and implementation before going forward with the rest. These files are enclosed: simplified-schema.sql duplicate-data.sql Bugzilla/CustomFields.pm Bugzilla/Query.pm To create the schema, feed simplified-schema.sql to the mysql client. duplicate-data.sql is a SQL script that creates twenty custom fields which are duplicates of standard bug attributes. It also copies the data from those standard attributes into the new custom fields. The fields have the same names as the columns of the BUGS table, but with "cf_" prepended. (For example, "op_sys" becomes "cf_op_sys".) Bugzilla::CustomFields is a module that provides an interface to custom fields. It's strictly read-only; I've removed all the code from my production version except that which implements the basic get_custom_fields() function. Bugzilla::Query is a module for searching for bugs. Both modules are thoroughly documented with POD. Use "perldoc" or your favorite editor to read it. If you have an interest in custom fields, kindly take some time to evaluate these files and let me know your thoughts. Thanks.
Attachment #141368 - Attachment is obsolete: true
Comment on attachment 171799 [details] Bare-bones, read-only custom field implementation OK, I've looked over this REALLY quickly. I like the schema, and I like CustomFields.pm. Are you aware that Query.pm entirely replaces Search.pm, from what I can see? And Search.pm is probably the most complex code in Bugzilla? Now, all in all, I prefer the interface of your Query.pm to our current Search.pm. However, the change to using it would be so massive that it would never be checked-in. Almost every single Bugzilla developer would have to give it a review+ and do more extensive testing than we have QA power to do. It would be the longest development cycle in the history of mankind to work out any performance problems and bugs that we encountered. That's hard for me to say, since I'd prefer that our Search.pm worked like your Query.pm does. I think that the reality is, though, that if we depend on its existence, this custom fields method won't get checked-in. However, I'd be willing to do the review on any other code that you might have, if you're willing to work with Search.pm as it is. And if a LOT of other Bugzilla developers are willing to go with it, I'd love to try to get your Query.pm checked-in, but it would have to be an entirely separate bug from this one.
Assignee: nobody → mcafee
Here's a basic alternative implementation that uses a FAC database schema (see discussion on the developer's mailing list about FAC vs. FAD database schemas). It comes with a simple command-line script for adding a custom field, lets you search custom fields via the boolean chart, displays them on bug pages, lets you edit them, commits your changes, and includes them in XML bug output. Besides the choice of schema, the other advantages of this implementation are that it reuses existing code for searching, updating, and storing meta-data about fields; it makes only minor and largely discrete modifications to Bugzilla code; and it decouples Bugzilla field types from MySQL column types so that we can define a much richer set of types (f.e. a "user" type which auto-generates special user-picking UI) than those available to us as database columns. Current core limitations are that it supports only text fields (the implementation supports multiple types, but I haven't added any additional ones yet); and it does not yet provide the option of storing data in separate tables (this requires some more Search.pm and process_bug.cgi hacking).
Your patch on bug 280770 got into this somehow :)
I like the approach in myk's patch, particularly in the way it uses fielddefs and causes the standard ways of accessing fields to "just work" with customfields. I haven't checked for completeness yet, but that really feels like the right path.
(In reply to comment #262) > Your patch on bug 280770 got into this somehow :) Yes, it's a prerequisite for this patch (the template uses the field type constants to determine each custom fields' type). I'll remove it from the next version of this patch if bug 280770 gets resolved by then.
I tried applying <a href=https://bugzilla.mozilla.org/attachment.cgi?id=135401>the most recent jumbo patch</a> against 2.18, which obviously did not go exactly smoothly. After some hacking, I got everything to work well enough, execpt that I can't seem to figure out how to populate custom fields of type "multi." Either I'm missing something really obvious, or I screwed up during the patching process. Does anyone have any pointers with regard to what I should expect to see when creating a "multi" field or how to get this functionality to work with 2.18?
You need to put possible values for the multi field in the "Value regexp" field, seperated by '|'s. e.g. 'one|two|three|four'. And then when you are editing a bug, they should appear in a listbox which allows you select any of the values.
I've got another strange problem with my custom fields implementation: now, whenever a bug is displayed, the custom fields are displayed three times on the bug form. This problem does not occur while the bug is being created (i.e., only show_bug.cgi appears to be producing the bogus output). Also, if the custom fields are updated following the bug's creation, the duplicate field instances go away. Where might I start looking into this problem?
Attached patch patch for 2.18 (obsolete) — Splinter Review
I am not a regular Bugzilla developer but thought I would share this patch which is a result of installing the patch: 'Patch against 2.17.6 of 2003-11-13 07:45 PST' against 2.18 (with alias fixes from bug #165022 and bug #248386). The patch involved some hacking to resolve. I have also fixed several issues with custom fields on the templates and have also extended the search to include the custom fields which seems to work OK.
Attached patch Search fix for 2.18 patch (obsolete) — Splinter Review
A small patch to be applied after the main 2.18 patch which adds a hidden field of the match type to fix a search problem with 'multi' custom fields.
I started looking at adding my own custom fields and then later came upon this bug ID. So I have some thoughts on how I think some aspects of custom fields should be implemented . I'll list them here as food for thought. 1. Custom fields values should not come from a "|" delimited list as the fields may come from a second DB system. i.e. the list of customers can be in the thousands and you may want the customer list populated dynamically multiple times per day based on some script. Also, coming from a table, the list can be sorted by MySQL as it is fetched from the table by some sorting criteria. 2. Custom field values should not be referred to by ID, but rather should be stored as value because the list of custom values might change over time, and you may still want to keep the historical value. EX: we used to have customer X, and customer X no longer exists. 3. We already have a type of custom fields implementation in bugzilla: Flags. The only difference is that flags have only 4 values: +, -, , ?. Should we not consider flags to be a type of custom fields and extend that implementation?
*** Bug 285805 has been marked as a duplicate of this bug. ***
Notwithstanding comment 270 which has some merits I am pursuing getting custom fields working against 2.18. There are some tweaks required to the search and edit templates for single and multi types which I will try and submit a patch for. I have noticed two outstanding issues as follows: If the contents of custom field are changed then sanity check finds an invalid value in bugs.activity. This should be tweaked to recognise or ignore custom fields. I have also noted that the custom fields are inserted into table fielddefs but with custom = 0, which I wonder should be set to 1.
Before a decision is made on the custom fields direction, I'd like to list a few more thoughts on my comparison of Bugzilla and a few other work flow management tools out there as would be nice to have implemented within Bugzilla. 1. custom field types: (checkbox, pulldown, multi-value, graphic type, calculated type, date type, URL type) 2. Access privileges: (view, edit, search) 3. As for the values allowed, they should also be customizable with privilages.
Ideally the custom fields should also be able to be customizable based on product and optionally component.
This is a revised full patch for custom fields against 2.18 which replaces those I submitted under comment 268 and comment 269. This solves various edit and search issues and allows search values to be remembered when editing a search. I have not fixed the 2 outstanding issues I noted in comment 272. This is now being used in production and I do not plan to do any more work on this for some time. I'll leave it to others to implement further types. On the access privileges mentioned in comment 273 I strongly suggest this is done as extensions to ALL fields defined in fielddefs and not just to the additional custom fields. This again I leave to others.
Attachment #175290 - Attachment is obsolete: true
Attachment #176873 - Attachment is obsolete: true
Depends on: 287311
Depends on: 287322
Depends on: 287323
Depends on: 287324
Depends on: 287325
Depends on: bz_select
Depends on: 287328
Depends on: 287330
Depends on: 287332
Depends on: 287334
Depends on: 287335
No longer blocks: 112319
No longer blocks: 141101
No longer blocks: 177271
No longer blocks: 193215
No longer blocks: 226852
As you have probably all noticed, this bug is now a meta-bug for tracking all the requirements to have a "full-featured" custom fields feature in Bugzilla. Incremental development should happen on the blocking bugs. At the moment, none of them are assigned to anybody. If you'd like to work on them, just assign them to yourself or express interest in working on it, in the bug. If you have any questions about how to implement anything, the best thing to do is to catch us on irc.mozilla.org in #mozwebtools. If you can't do that, you can subsribe to the developers@bugzilla.org mailing list and ask your development-related questions on there. Please remember, general bugzilla support questions, such as questions about using any patches currently attached to this bug should go to the mozilla-webtools newsgroup, not to the developers list. For more details on that, see http://www.bugzilla.org/support/
Alias: bz-customfields
Keywords: meta
Summary: a generic implementation for custom fields → A generic implementation for custom fields
Depends on: 288174
Blocks: 291433
This is no longer assigned to a specific person. Currently, the primary people working on it are myk, joel, and myself. If anybody would like to help, just look over the blockers and see what you'd like to work on.
Assignee: mcafee → general
No longer blocks: 291433
QA Contact: mattyt-bugzilla → default-qa
Since Applying "Updated full custom fields patch for 2.18 " to my fresh install I now loose the Summary field every time I modify a bug. The correct summary appears in any searches but as soon as you open the bug for modifying it reverts to --- and if you click commit without changing it, it will then be stored as --- Please help.
Blocks: majorbugs
Solved my last problem, finger trouble :-( All working fine now. Next question. Can anyone help me. I need to be able to put more than 255 characters into the valid_exp field. I have changed the template so that the actual html field will take it but if I put more than 255 characters into it the commit button stops working and appears to do nothing. Any suggestions much appreciated.
Solved my last problem, finger trouble :-( All working fine now. Next question. Can anyone help me. I need to be able to put more than 255 characters into the valid_exp field. I have changed the template so that the actual html field will take it but if I put more than 255 characters into it the commit button stops working and appears to do nothing. Any suggestions much appreciated.
Solved my last problem, finger trouble :-( All working fine now. Next question. Can anyone help me. I need to be able to put more than 255 characters into the valid_exp field. I have changed the template so that the actual html field will take it but if I put more than 255 characters into it the commit button stops working and appears to do nothing. Any suggestions much appreciated.
Looks like you're still having finger trouble!
No longer blocks: majorbugs
Hi, I install the full custom fields patch for 2.18. I run checksetup.pl is ok! But my bugzilla system can't login very issue for all users. error message below: DBD::mysql::st execute failed: Unknown column 'product_id' in 'where clause' [for Statement "select customfields.name, products.name from customfields, products_customfields, products where customfields.id=cf_id and (product_id = products.id or product_id=0) order by customfields.id"] at Bugzilla/DB.pm line 62 Bugzilla::DB::SendSQL('select customfields.name, products.name from customfields, produ...') called at globals.pl line 189 main::GenerateVersionTable() called at globals.pl line 393 main::GetVersionTable() called at /usr/local/tools/apache/bugzilla/query.cgi line 121
Does anybody know if patch for 2.16.1 https://bugzilla.mozilla.org/attachment.cgi?id=104485 supports 2.16.5? Thanks
I don't know if that patch will work without any modifications, but you would certainly be able to get it working quite easily if it doesn't. I started with earlier patches against 2.16.1 and have since upgraded via CVS without any major problems (see commment 182).
Does it work with the latest 2.20RC1 Version ?
Does it work with the latest 2.20RC1 Version ?
This is an updated version for the patch from comment #261. It should be applicable against 2.20rc2.
This is a highly extended version of the patch against 2.20rc2, which adds boolean fields, enumerations, and text areas. The patch depends on the enumeration class patch for Bug 287326: https://bugzilla.mozilla.org/attachment.cgi?id=193864
Attachment #192726 - Attachment is obsolete: true
I've installed the "A new implementation of custom fields" and "Search fix for 2.18 patch" and "Updated full custom fields patch for 2.18" patches to our 2.18.1 installation. It is fine that search values to be remembered when editing a search. But if a saved search is edited, all custom fields have the default values and not the saved values. The only reason I could found, is to comment out the default setting. I tried to set the default to the saved values with 'default' => $default{$cfield}, but this doesn't works. Does anyone know how to set the displayed values to the saved values of the search? === This is the code in query.cgi that I have modified with comment out the default setting === #add custom fields my @custom_fields; foreach my $cfield (keys %::legal_customfields) { my ($t, $ve, $id, $m, $d, $desc) = @{$::legal_customfields{$cfield}}; # Create hash to hold attributes for each product. my %field = ( 'name' => $cfield, 'desc' => $desc, 'id' => $id, # 'default' => $d, 'type' => $t, 'values' => ($t eq 'single' or $t eq 'multi') ? [split('\|',$ve)] : [], 'size' => 7, ); push @custom_fields,\%field; } $vars->{'custom_fields'} = \@custom_fields;
A have applied the patch on the most updated debian unstable distro and had the following minor problems with 2.18.3 version from debian-sources: 1. perl lib paths were not resolved and to resolve them I added to all *.cgi and *.pl files use lib '/usr/share/bugzilla'; Probably, this is a purely debian issue; 2. As soon as I add a custom field, I get this error on commiting a new bug: DBD::mysql::st execute failed: Table 'customfields' was not locked with LOCK TABLES [for Statement "SELECT id, type, default_value FROM customfields where name='build_found'"] at Bugzilla/DB.pm line 62 Bugzilla::DB::SendSQL('SELECT id, type, default_value FROM customfields where name=\...') called at C:/bugzilla/post_bug.cgi line 450 The solution described in: http://www.forum4designers.com/message291336.html In post_bug.cgi, I found at line 411, the following statement: SendSQL("LOCK TABLES bugs WRITE, bug_group_map WRITE, longdescs WRITE, cc WRITE, keywords WRITE, dependencies WRITE, bugs_activity WRITE, groups READ, user_group_map READ, keyworddefs READ, fielddefs READ"); I added this to the end of the SQL: customfields READ, bugs_customfields WRITE After making that change, commit of a new bug or an update bug with a custom field now works. Sincerely, Robert Iakobashvili coroberti@gmail.com
Corrected the Bugzilla/Constants.pm which didn't patch correctly
Highlights : - Updated addcustomfield.pl with new type "date" - New parameter "dateformat" used to control the input format of "date" fields (no validation of user input) Thanks for your reviews and criticisms since this is my very first contribution to Bugzilla.
Attachment #199928 - Flags: review?
Comment on attachment 199928 [details] [diff] [review] Added a "Date" type for the FAC implementation, against my previous 2.20 patch This is a *meta* bug. No attachments will be accepted into the main code base from this bug. In fact, patches probably shouldn't be attached to this bug.
Attachment #199928 - Flags: review? → review-
This patch accumulates the patches from comment 292 (which is based on the patch from comment 289) and comment 293. Alexander, I understand your request for not attaching patches to this bug. But then, how about reviewing my patch in bug 287326 finally, in order to finish this finally?
Attachment #193867 - Attachment is obsolete: true
Attached patch Updated FAC-based patch for 2.20 (obsolete) — Splinter Review
Updated version of the patch, which no longer uses mysql_last_insert_id, but the proper bz_last_key.
Attachment #200179 - Attachment is obsolete: true
The trunk is now frozen to prepare Bugzilla 2.22. Enhancement bugs are retargetted to 2.24.
Target Milestone: Bugzilla 2.22 → Bugzilla 2.24
*** Bug 320539 has been marked as a duplicate of this bug. ***
Please specify the steps to include custom fields.I have downloaded the customfields.tar. But i am not able to proceed further.
*** Bug 326218 has been marked as a duplicate of this bug. ***
(In reply to comment #275) > Created an attachment (id=177870) [edit] > Updated full custom fields patch for 2.18 > This is a revised full patch for custom fields against 2.18 which replaces > those I submitted under comment 268 and comment 269. This solves various edit > and search issues and allows search values to be remembered when editing a > search. I have not fixed the 2 outstanding issues I noted in comment 272. > This is now being used in production and I do not plan to do any more work on > this for some time. I'll leave it to others to implement further types. > On the access privileges mentioned in comment 273 I strongly suggest this is > done as extensions to ALL fields defined in fielddefs and not just to the > additional custom fields. This again I leave to others. I use the bugzilla 2.18.1 and use the patch . I want to update the search.html.tmpl ,what can select different product display the customfields of this product. Can you help me? What can i do?
Blocks: bz-roadmap
Is there any way I can convert the custom field the script creates and change it from a freeform box to one that has preselected values for the user like OS,Priority, Hardware,etc..
(In reply to comment #302) > Is there any way I can convert the custom field the script creates and change > it from a freeform box to one that has preselected values for the user like > OS,Priority, Hardware,etc.. If you create a custom field of Type 'Single' and then enter the options in Valid Expression seperated by pipes (e.g. telephone|email|fax|letter), then it appears as a dropdown combo box. Or at least that's how it works for me, but I'm still running 2.16.x and hence haven't applied most of the recent customfields changes.
This would be very helpful in order to add various useful meta information to bugs, in particular it would be cool if bugZilla admins could specify meta information for bugs such as: - estimated complexity of bug/request (low,moderate,huge etc.) - min. skills required to address a bug/request (i.e. Perl,SQL,HTML etc.) - level of skills required (beginner,advanced,expert etc.) - estimated time required for people with said skills (< 10 hrs,< 20hrs, < 50hrs) This would make it pretty straightforward to sort of maintain a facility where potential contributors could search the database for bugs matching their individual skill profiles (expertise, max amount of time, components they want to work on etc.) Basically, something like this would probably appeal to most open source projects, as it would become extremely easy to attract new potential contributors.
Not sure if this is going too off topic but I am using the FAC based patch and using enums. I customized it so it works like version or milestone where I can associate each with a certain product but I am having trouble finding where bugzilla does most of the sql commands to pull from the database and fill in the form values. I went through enter_bug.cgi but with no luck yet. I was looking in globals.pl at the GetVersionTable() function but am not sure there either can any give me a suggestion where to look? Been at this for days now.
Nvermind I got it. (In reply to comment #305) > Not sure if this is going too off topic but I am using the FAC based patch and > using enums. I customized it so it works like version or milestone where I can > associate each with a certain product but I am having trouble finding where > bugzilla does most of the sql commands to pull from the database and fill in > the form values. I went through enter_bug.cgi but with no luck yet. I was > looking in globals.pl at the GetVersionTable() function but am not sure there > either can any give me a suggestion where to look? Been at this for days now.
Sorry i had a dumb moment. I did not get it sorry help would still be appreciated. > (In reply to comment #305) > > Not sure if this is going too off topic but I am using the FAC based patch and > > using enums. I customized it so it works like version or milestone where I can > > associate each with a certain product but I am having trouble finding where > > bugzilla does most of the sql commands to pull from the database and fill in > > the form values. I went through enter_bug.cgi but with no luck yet. I was > > looking in globals.pl at the GetVersionTable() function but am not sure there > > either can any give me a suggestion where to look? Been at this for days now.
ok this is my last comment in thsi forever I really got it this time. I must be annoying as hell
Whiteboard: [Summary: Comment 239] → [Summary: Comment 239] *#*#* POST NO SUPPORT QUESTIONS HERE *#*#*
IMHO, it would possibly make sense to eventually consider providing some sort of template mechanism for custom fields, that way it would be possible to easily exchange preconfigured custom fields, possibly even via some official webpage: There are various types of custom fields that many users may often find useful, in such cases administrators shouldn't have to manually set up such custom fields, but rather simply download a corresponding template and install it. For example, a custom field like "benefits" (of implementing an RFE) that may offer preconfigured benefits like "performance improvement", "usability improvement", "reliability improvement", "size improvement", "administration improvement", "debugging improvement" etc. (one could even provide preconfigured drawbacks). Similar fields are also used by other major bug tracking software (i.e. Microsoft's Connect). If such custom fields are fully searchable and may possibly be even used to plot diagrams, this could be a very useful development aid. Likewise, some projects may be interested in what group of people (developers, artists, support, end users), or which components would benefit from implementing a certain RFE, thus one could provide a preconfigured field for "beneficiaries" that may offer corresponding fields (target audience or components) in order to aid development teams in prioritizing their efforts. Also, some bug trackers provide extra status information for RFEs, specifically meant to track the development progress of an RFE (i.e. discussing, planning, design, implementation phase ...) Given that there are various patches available to extend bugZilla to be interfaces with SCM systems such as CVS, one could even take this one step further and directly provide potential contributors with a list of affected source files, directly taken from a CVS repository. Basically, having support for custom fields in bugZilla (including some support for template-based exchange of the corresponding configuration files) would make it quite feasible to have bugZilla become a fully featured project management system. Ultimately, a well designed "custom fields" architecture would possibly make it feasible to convert all standard fields to use the same flexible approach.
I am new to bugzilla and hence would require some help from you all here. Could anyone let me know how to get the current updates / patches for bugzilla 2.20? In such a case will all the new customization [custom field] etc get merged with bugzilla 2.20 release? The customizations mentioned here would really come handy for us too. Please check BUG #344086 about the same. Looking forward to your replies on the same. Thanks,
Depends on: 344513
Depends on: 344521
This patch adds support for enum fields in the "Advanced Search".
Attachment #200184 - Attachment is obsolete: true
Just to make this clear one more time: * None of the patches on this bug are supported. * We are implementing custom fields support, and it will have nothing to do with any patch on this bug. * You will not be able to carry over your custom fields from your old installation into whatever we devise for Bugzilla 3.0.
Whiteboard: [Summary: Comment 239] *#*#* POST NO SUPPORT QUESTIONS HERE *#*#* → [Read Comment 312] *#*#* POST NO SUPPORT QUESTIONS HERE *#*#* [Summary: Comment 239]
Depends on: 344875
Depends on: 344878
(In reply to comment #312) > Just to make this clear one more time: > > * None of the patches on this bug are supported. > * We are implementing custom fields support, and it will have nothing to do > with > any patch on this bug. > * You will not be able to carry over your custom fields from your old > installation > into whatever we devise for Bugzilla 3.0. > I guess we are many who are really excited about finally getting custom field support and would love to know a bit about how it is going to work. If somebody would tell a bit more about how it will be it would be great.
(In reply to comment #313) > I guess we are many who are really excited about finally getting custom field > support and would love to know a bit about how it is going to work. > If somebody would tell a bit more about how it will be it would be great. Ah yeah, I totally understand. Your best bet is to read any bugs blocking this one that have been marked as RESOLVED FIXED, because that's what we've implemented so far. Other than that, the best way to find out about custom fields is to use the current CVS version of Bugzilla (using the editfields.cgi script) or to wait until we write the documentation for them.
Depends on: 351899
This bug is retargetted to Bugzilla 3.2 for one of the following reasons: - it has no assignee (except the default one) - we don't expect someone to fix it in the next two weeks (i.e. before we freeze the trunk to prepare Bugzilla 3.0 RC1) - it's not a blocker If you are working on this bug and you think you will be able to submit a patch in the next two weeks, retarget this bug to 3.0. If this bug is something you would like to see implemented in 3.0 but you are not a developer or you don't think you will be able to fix this bug yourself in the next two weeks, please *do not* retarget this bug. If you think this bug should absolutely be fixed before we release 3.0, either ask on IRC or use the "blocking3.0 flag".
Target Milestone: Bugzilla 3.0 → Bugzilla 3.2
Depends on: 357315
Depends on: 357324
Whiteboard: [Read Comment 312] *#*#* POST NO SUPPORT QUESTIONS HERE *#*#* [Summary: Comment 239] → [roadmap: 3.2] [Read Comment 312] *#*#* POST NO SUPPORT QUESTIONS HERE *#*#* [Summary: Comment 239]
Depends on: 371995
As this is our meta-bug for tracking custom fields work, it doesn't need a target milestone, and it won't be on the roadmap itself. Instead, specific custom field features will be on the roadmap.
Whiteboard: [roadmap: 3.2] [Read Comment 312] *#*#* POST NO SUPPORT QUESTIONS HERE *#*#* [Summary: Comment 239] → [Read Comment 312] *#*#* POST NO SUPPORT QUESTIONS HERE *#*#* [Summary: Comment 239]
Target Milestone: Bugzilla 3.2 → ---
Priority: P2 → P1
Depends on: 393450
Flags: testcase?
Flags: testcase?
Maybe bug 342113 can be mentioned on the "depends on" list ?
Also, can bug 377956 be mentioned in the "depends on" list?
Due to the implementation of bug 287334, and the choice of bug 287334 comment 19 (For now we will implement this as a single bug id) could bug 537749 be added to the dependency list?
Depends on: 342113, 479550
As far as I'm concerned, this bug is done, and has been for some indefinite period of time. Bugzilla 3.0 added custom fields, there are a bunch of custom field types, and custom fields are now an integral part of Bugzilla, not something we need a tracking bug for anymore.
Status: NEW → RESOLVED
Closed: 14 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: