Architecture: Forms, Model Validation, Presentation: Re: brandnew Turba installation throws errors

Ralf Lang <[email protected]> Tue, 28 May 2019 08:10:46 +0200
Newsgroups gmane.comp.horde.devel
Message-ID <[email protected]>
Hi Michael,

Am 22.03.19 um 21:27 schrieb Michael J Rubinsky:
>
> Quoting Sebastian Birnbach <[email protected]>:
>
>> I could not find an appropriate setting in php.ini, could you please
>> be a
>> little more specific?
>>
>> [develop@ixie ~]$ php --version
>> PHP 7.2.13 (cli) (built: Jan=A0 1 2019 23:42:23) ( NTS DEBUG )
>> Copyright (c) 1997-2018 The PHP Group
>> Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
>> =A0=A0=A0 with Xdebug v2.6.1, Copyright (c) 2002-2018, by Derick Rethans
>> =A0=A0=A0 with Zend OPcache v7.2.13, Copyright (c) 1999-2018, by Zend
>> Technologies
>>
>>
>> Am Fr., 22. M=E4rz 2019 um 14:48 Uhr schrieb Ralf Lang
>> <[email protected]>:
>>
>>>
>>> Am 22.03.19 um 11:11 schrieb Sebastian Birnbach:
>>> > On a new horde installation with turba I see these errors upon
>>> accessing
>>> a
>>> > demo entry:
>>> >
>>> > Mar 22 11:05:26 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Horde_Form_Type_country::init($prompt =3D NULL) should be compatible
>>> with
>>> > Horde_Form_Type_enum::init($values, $prompt =3D NULL) [pid 57796 on
>>> line 0
>>> of
>>> > "/usr/local/share/pear/Horde/Form/Type.php"]
>>> > Mar 22 11:05:26 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Turba_Form_AddContact::validate() should be compatible with
>>> > Horde_Form::validate($vars =3D NULL, $canAutoFill =3D false) [pid
>>> 57796 on
>>> line
>>> > 5 of "/usr/local/www/horde/turba/lib/Form/AddContact.php"]
>>> > Mar 22 11:05:26 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Horde_Form_Action_updatefield::getActionScript(&$form, &$renderer,
>>> > $varname) should be compatible with
>>> > Horde_Form_Action::getActionScript($form, $renderer, $varname)
>>> [pid 57796
>>> > on line 0 of
>>> "/usr/local/share/pear/Horde/Form/Action/updatefield.php"]
>>> > Mar 22 11:05:26 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Horde_Form_Action_updatefield::setValues(&$vars, $sourceVal,
>>> $arrayVal =3D
>>> > false) should be compatible with Horde_Form_Action::setValues(&$vars,
>>> > $sourceVal, $index =3D NULL, $arrayVal =3D false) [pid 57796 on line =
0 of
>>> > "/usr/local/share/pear/Horde/Form/Action/updatefield.php"]
>>> > Mar 22 11:05:34 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Horde_Form_Type_country::init($prompt =3D NULL) should be compatible
>>> with
>>> > Horde_Form_Type_enum::init($values, $prompt =3D NULL) [pid 35165 on
>>> line 0
>>> of
>>> > "/usr/local/share/pear/Horde/Form/Type.php"]
>>> > Mar 22 11:05:34 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Turba_Form_AddContact::validate() should be compatible with
>>> > Horde_Form::validate($vars =3D NULL, $canAutoFill =3D false) [pid
>>> 35165 on
>>> line
>>> > 5 of "/usr/local/www/horde/turba/lib/Form/AddContact.php"]
>>> > Mar 22 11:05:34 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Horde_Form_Action_updatefield::getActionScript(&$form, &$renderer,
>>> > $varname) should be compatible with
>>> > Horde_Form_Action::getActionScript($form, $renderer, $varname)
>>> [pid 35165
>>> > on line 0 of
>>> "/usr/local/share/pear/Horde/Form/Action/updatefield.php"]
>>> > Mar 22 11:05:34 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Horde_Form_Action_updatefield::setValues(&$vars, $sourceVal,
>>> $arrayVal =3D
>>> > false) should be compatible with Horde_Form_Action::setValues(&$vars,
>>> > $sourceVal, $index =3D NULL, $arrayVal =3D false) [pid 35165 on line =
0 of
>>> > "/usr/local/share/pear/Horde/Form/Action/updatefield.php"]
>>> > Mar 22 11:05:35 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Horde_Form_Type_country::init($prompt =3D NULL) should be compatible
>>> with
>>> > Horde_Form_Type_enum::init($values, $prompt =3D NULL) [pid 35165 on
>>> line 0
>>> of
>>> > "/usr/local/share/pear/Horde/Form/Type.php"]
>>> > Mar 22 11:05:35 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Horde_Form_Action_updatefield::getActionScript(&$form, &$renderer,
>>> > $varname) should be compatible with
>>> > Horde_Form_Action::getActionScript($form, $renderer, $varname)
>>> [pid 35165
>>> > on line 0 of
>>> "/usr/local/share/pear/Horde/Form/Action/updatefield.php"]
>>> > Mar 22 11:05:35 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Horde_Form_Action_updatefield::setValues(&$vars, $sourceVal,
>>> $arrayVal =3D
>>> > false) should be compatible with Horde_Form_Action::setValues(&$vars,
>>> > $sourceVal, $index =3D NULL, $arrayVal =3D false) [pid 35165 on line =
0 of
>>> > "/usr/local/share/pear/Horde/Form/Action/updatefield.php"]
>>> > Mar 22 11:05:35 ixie HORDE: [turba] PHP ERROR: Declaration of
>>> > Turba_Form_EditContact::renderActive($renderer, $vars, $action,
>>> $method)
>>> > should be compatible with Horde_Form::renderActive($renderer =3D NULL,
>>> $vars
>>> > =3D NULL, $action =3D '', $method =3D 'get', $enctype =3D NULL, $focu=
s =3D
>>> true)
>>> [pid
>>> > 35165 on line 0 of
>>> "/usr/local/www/horde/turba/lib/Form/EditContact.php"]
>>> >
>>> >
>>> > I updated the whole installation through
>>> > sudo pear upgrade -a -B -c horde
>>> > but the errors remain.
>>> >
>>> > Looks to me like an incompatibility between turba application and
>>> base
>>> > packages.
>
> Nope. It's because Horde_Form is badly outdated and needs to be
> refactored for PHP 7. Prior to PHP 7 these were E_STRICT warnings..
>
> This should not be affecting functionality though.
>
>
I have an upcoming project soon which will, as a side effect, provide
some reason to patch most horde_form_* signatures to be compatible by
either expanding the base class signatures to optional parameters or
making additional sub class parameters optional,
depending on what seems to be the more reasonable way.

However, I consider Horde_Form fairly legacy and I won't provide a
refactoring, just make it work without throwing errors - and step by
step moving away.
Tightly coupling presentation to validation seems wrong from the current
standpoint.

My team is currently doing something different. We basically decouple UI
as much as possible from the backend, communicating mostly through JSON
messages.

We have modified the rampage.php endpoint so it can cope with

- different scenarios where apps are not below /horde/ but either on
different domain, document root or other hierarchy (used to break nag)
- horde_routes definitions with http verb limits (POST, GET, ...) - We
want this for RESTish ajax.
- TODO: unauthenticated scenarios (can likely be ported from the rest
POC I did a while ago), scenarios authenticated through tokens
(invitation based guest access to horde_share based objects)

We are currently reproducing common horde UI tiles into ReactJs
components (topbar, sidebar, button bar, generic list views)

We use Horde_Controller to deliver a base plate with skeleton html,
initial horde environment, translation strings, path to js/css/service
endpoints as json.
Basically the client page gets bootstrapped with a sort of registry and
is drawn out of javascripts.

If anything needs to be rendered server side, we build a Horde_View
subclass and template html and deliver it through some endpoint.

We have a de-prototyped plain JS client to the horde ajax framework
which acts like HordeCore.doAction but promise-based.

Most json communication is still based on Horde_Ajax_Application* but we
think we might move to Horde_Controller at some point.

The Model part is still a great void. We are heavy on Horde_Rdo and
either use it directly or hide it inside some hand-coded wrappers which
only exposed a defined API rather than directly allow accessing database
properties.
I tried to abstract some backend-agnostic "model" base but it went
nowhere practical. Too convoluted, to complex. I'd now rather extract
some parts into traits for re-use and have

What we basically want to achieve is to make frontend development as
decoupled as possible from the backend, use modern frontend technology,
slowly get rid of prototypeJs-based building blocks. Horde_Forms doesn't
fit well into this pattern.


-- =

Ralf Lang
Linux Consultant / Developer
Tel.: +49-170-6381563
Mail: [email protected]
B1 Systems GmbH
Osterfeldstra=DFe 7 / 85088 Vohburg / http://www.b1-systems.de
GF: Ralph Dehner / Unternehmenssitz: Vohburg / AG: Ingolstadt,HRB 3537


-- =

dev mailing list
Frequently Asked Questions: http://wiki.horde.org/FAQ
To unsubscribe, mail: [email protected]