[dev] Registry_Application's prefs methods flawed?

Jan Schneider jan at horde.org
Tue Jan 4 20:26:35 UTC 2011


Zitat von Michael M Slusarz <slusarz at horde.org>:

> Quoting Jan Schneider <jan at horde.org>:
>
>> Zitat von Michael M Slusarz <slusarz at horde.org>:
>>
>>> Quoting Jan Schneider <jan at horde.org>:
>>>
>>>> While fixing some issue with populating preference values in  
>>>> Kronolith, I noticed that the prefs methods in the  
>>>> Horde_Registry_Application sub-classes uses pref groups  
>>>> ($ui->group) to determine which preference to manipulate  
>>>> ($ui->override). This seems flawed because the individual prefs  
>>>> can be assigned different groups in the config/prefs.php  
>>>> configuration files.
>>>
>>> This is expected, and it is a compromise.  It is not possible to  
>>> move things around between pref groups easily at this time because  
>>> the conditional logic is hardcoded in the App_Registry_Application  
>>> file, as you discovered.  This was a compromise since the  
>>> alternative would be to have all of this conditional code living  
>>> in prefs.php instead, or (more likely) having each individual  
>>> preference be overloaded with configuration options.  Or, even  
>>> more extreme, have each preference live in a separate  
>>> class/object.  Unfortunately, prefs are one of those things that  
>>> need to be exposed to ALL admins so we have to keep the API  
>>> somewhat workable.
>>>
>>> IMHO, we really shouldn't be having prefs appear on multiple  
>>> screens anyway.  It just adds to the prefs clutter and is  
>>> duplicative and confusing.  If its one of those things where one  
>>> pref might control prefs living in a different group, then we are  
>>> probably Doing It Wrong; these prefs should logically be broken  
>>> into and a new, separate group.  I would rather see usage of  
>>> linkage between groups pages via links rather than a duplicated  
>>> pref entry.  And some prefs simply can't be split up (identity  
>>> prefs) because they rely on other elements in the page  
>>> (javascript; specific handling based on the group name).
>>>
>>> Conversely, if you really do want to have prefs appear in multiple  
>>> groups, then you can simply add the necessary code to deal with  
>>> that individual pref in the App_Registry_Application methods.  The  
>>> valid list of prefs for the current group can always be obtained  
>>> via:
>>> $ui->getChangeablePrefs($ui->group)
>>
>> I wasn't actually referring to having prefs in several groups,  
>> though this obviously experience the same problems I described. I  
>> referred to the admin's capability to assign a pref to a different  
>> group than originally intended.
>>
>> Regarding identities the idea was (and I actually thought this  
>> already happened during one of the pref rewrites) that the identity  
>> stuff is flexible enough to theoretically allow adding and removing  
>> any prefs to/from identities. Of course this would still require  
>> some code that actually uses the identity to receive a pref value,  
>> instead of retrieving it from the prefs object directly. But this  
>> could be a custom application for example.
>
> This is still the case.  What I am saying is that identities prefs  
> MUST live in the identities group, because they are handled  
> differently by the Prefs UI handling code.  e.g. The identities page  
> automatically inserts the identity switching JS code into the page -  
> this would get VERY complicated/messy if you would allow identities  
> prefs to appear in any group.

Yes, this absolutely makes sense.

>> Back to grouping prefs: I think it makes a lot of sense to have  
>> some preferences in multiple groups. It was actually me who did  
>> this in the first place because some users are expecting prefs in a  
>> different group than others. Beside that, it simply makes sense to  
>> access certain prefs from different places. Most prominent and  
>> obvious examples are the special folders. It makes perfectly sense  
>> to have a group where all special folders can be managed, while  
>> still being able to set the trash folder from the group for  
>> deleting messages.
>
> I don't necessarily disagree with you, but the other solution (that  
> makes more sense to me, btw) is to move each mailbox pref into a  
> different group.  Thus, all preference options dealing with the  
> trash folder (trash mailbox location, use virtual trash?, login  
> tasks to purge the trash mailbox) should appear in a single Trash  
> preference group.

That's already the case, isn't it? They are preferences of the message  
deletion group. This is no contradiction to what I said though, or am  
I missing something? Do you want this pref to *only* be in the  
trash/deletion group?

>> From the 3 possible approaches you outlined in your first  
>> paragraph, the second one sounds like the one we want to use, I  
>> don't really understand why you don't deem that one appropriate.  
>> After all this happens in lib/Application.php which is not a place  
>> for admin's to go, and whether we identify special handling for  
>> prefs by pref group or pref name doesn't seem to make much of a  
>> difference.
>
> I think you are referring to "conditional code living in prefs.php  
> instead, or (more likely) having each individual preference be  
> overloaded with configuration options."  And I'm not sure how that  
> would work(?)  We should never be conditionally excluding individual  
> prefs entries with if () blocks.

Not in config/prefs.php, but in Application.php. We actually do this,  
but embedded in a group-switch-statement, instead of a  
pref-switch-statement.

> And for various prefs/groups, we don't know whether to show/hide  
> prefs until AFTER we parse the prefs.php file.  So that's not going  
> to work unless we start doing something like defining functions to  
> run post-parsing.  And all this does is completely clutter up the  
> preferences file.  My intent for prefs.php is to keep it as simple  
> as possible - I am for any solution to allow this over the ability  
> to let an admin switch pref groups (which few admins will ever do).

I think we misunderstood each other. I don't want the old prefs.php  
files back with all this embedded logic. I only want to change the  
prefs methods in Application.php to trigger pref-specific behavior  
based on prefs, not on groups.

Jan.

-- 
Do you need professional PHP or Horde consulting?
http://horde.org/consulting/



More information about the dev mailing list