[kronolith] Default external calendar

Gerard Breiner gerard.breiner at ias.u-psud.fr
Tue Apr 10 15:42:15 UTC 2012


Le 06/04/2012 16:24, Gerard Breiner a écrit :
> Le 06/04/2012 16:16, Gerard Breiner a écrit :
>> Le 06/04/2012 15:58, Gerard Breiner a écrit :
>>> Le 06/04/2012 15:04, Jan Schneider a écrit :
>>>>
>>>> Zitat von Gerard Breiner <gerard.breiner at ias.u-psud.fr>:
>>>>
>>>>> Le 06/04/2012 13:40, Jan Schneider a écrit :
>>>>>>
>>>>>> Zitat von Gerard Breiner <gerard.breiner at ias.u-psud.fr>:
>>>>>>
>>>>>>> Le 19/03/2012 16:41, Gerard Breiner a écrit :
>>>>>>>> Le 19/03/2012 09:36, Jan Schneider a écrit :
>>>>>>>>>
>>>>>>>>> Zitat von gerard breiner <gerard.breiner at ias.u-psud.fr>:
>>>>>>>>>
>>>>>>>>>> gerard breiner <gerard.breiner at ias.u-psud.fr> a écrit :
>>>>>>>>>>
>>>>>>>>>>> Jan Schneider <jan at horde.org> a écrit :
>>>>>>>>>>>
>>>>>>>>>>>> Zitat von gerard breiner <gerard.breiner at ias.u-psud.fr>:
>>>>>>>>>>>>
>>>>>>>>>>>>> Jan Schneider <jan at horde.org> a écrit :
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Zitat von Gerard Breiner <gerard.breiner at ias.u-psud.fr>:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Le 14/02/2012 15:37, Jan Schneider a écrit :
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Zitat von Martin Hochreiter <linuxbox at wavenet.at>:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> You cannot simply replace strings in the value copied 
>>>>>>>>>>>>>>>>>> from the database, because it is a serialized hash. 
>>>>>>>>>>>>>>>>>> Using $registry in prefs.local.php is not a good idea 
>>>>>>>>>>>>>>>>>> either.
>>>>>>>>>>>>>>>>>> Instead you should create a preference hook that 
>>>>>>>>>>>>>>>>>> builds the hash, and return it serialized.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> what a pitty :)  ... ok, thank you I will create a 
>>>>>>>>>>>>>>>>> hook for that (new world for me...)
>>>>>>>>>>>>>>>>> What should I use instead of the $registry variable to 
>>>>>>>>>>>>>>>>> get the credentials - or is it ok
>>>>>>>>>>>>>>>>> to use it in the hooks?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> The prefs_init hook already gets the user name passed.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hello ,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I'm working on this too... So I followed the above Jan's 
>>>>>>>>>>>>>>> advice  and as well as read the very good doc 
>>>>>>>>>>>>>>> /horde/config/hooks.php.dist (many thanks for all the 
>>>>>>>>>>>>>>> work). The result is that I managed to create the remote 
>>>>>>>>>>>>>>> calendar by working with prefs and hooks.local.php.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Here is what I've done :
>>>>>>>>>>>>>>> kronolit/config/prefs.local.php
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> [CODE]
>>>>>>>>>>>>>>> // remote calendars
>>>>>>>>>>>>>>> $_prefs['remote_cals'] = array(
>>>>>>>>>>>>>>> 'value' => '',
>>>>>>>>>>>>>>> 'hook' => 'true',
>>>>>>>>>>>>>>> 'locked' => 'false'
>>>>>>>>>>>>>>> );
>>>>>>>>>>>>>>> [/CODE]
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> [CODE]
>>>>>>>>>>>>>>> kronolith/config/hooks.local.phpclass Kronolith_Hooks
>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>> public function prefs_init($prefs, $value, $username, 
>>>>>>>>>>>>>>> $scope_ob)
>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>  switch ($prefs) {
>>>>>>>>>>>>>>>       case 'remote_cals':
>>>>>>>>>>>>>>>            $no_serialize = array(array('name'=>'Calendar',
>>>>>>>>>>>>>>>                                        
>>>>>>>>>>>>>>> 'url'=>'https://myurl/caldav.php/' .$username. '/agenda',
>>>>>>>>>>>>>>>                                        'user'=> $username
>>>>>>>>>>>>>>>  //                                    'password' => 
>>>>>>>>>>>>>>> $password
>>>>>>>>>>>>>>>                                  )
>>>>>>>>>>>>>>>                           );
>>>>>>>>>>>>>>>          $value = serialize($no_serialize);
>>>>>>>>>>>>>>>          return $value;
>>>>>>>>>>>>>>>  }
>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>> [/CODE]
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Nevertheless at this time I don't know how to catch the 
>>>>>>>>>>>>>>> password... If Jan look at this again I would appreciate 
>>>>>>>>>>>>>>> a little more hints about this last issue.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Try $GLOBALS['registry']->getAuthCredential('password')
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Jan.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -- 
>>>>>>>>>>>>>> The Horde Project
>>>>>>>>>>>>>> http://www.horde.org/
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -- 
>>>>>>>>>>>>>> Kronolith mailing list
>>>>>>>>>>>>>> Frequently Asked Questions: http://horde.org/faq/
>>>>>>>>>>>>>> To unsubscribe, mail: kronolith-unsubscribe at lists.horde.org
>>>>>>>>>>>>>
>>>>>>>>>>>>> Many thanks Jan for this advice... This command give the 
>>>>>>>>>>>>> password without encodage (I tried it in 
>>>>>>>>>>>>> admin/phpshell.php ). Nevertheless  it seems that username 
>>>>>>>>>>>>> and password are expecting as something like : 
>>>>>>>>>>>>> s:4:"user";s:12:"PYnhqb8tbok=";s:8:"password";s:15:"PQ7F+FGnp7t="; 
>>>>>>>>>>>>> .
>>>>>>>>>>>>
>>>>>>>>>>>> Sorry?
>>>>>>>>>>>>
>>>>>>>>>>>> -- 
>>>>>>>>>>>> The Horde Project
>>>>>>>>>>>> http://www.horde.org/
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> -- 
>>>>>>>>>>>> Kronolith mailing list
>>>>>>>>>>>> Frequently Asked Questions: http://horde.org/faq/
>>>>>>>>>>>> To unsubscribe, mail: kronolith-unsubscribe at lists.horde.org
>>>>>>>>>>>
>>>>>>>>>>> Probably misunderstanding from me... So followed your idea 
>>>>>>>>>>> for catching the password, here is what is my code now :
>>>>>>>>>>>
>>>>>>>>>>> kronolith/config/hooks.local.php
>>>>>>>>>>>
>>>>>>>>>>> [CODE]
>>>>>>>>>>> class Kronolith_Hooks
>>>>>>>>>>> {
>>>>>>>>>>>  public function prefs_init($prefs, $value, $username, 
>>>>>>>>>>> $scope_ob)
>>>>>>>>>>>  {
>>>>>>>>>>>    switch ($prefs) {
>>>>>>>>>>>        case 'remote_cals':
>>>>>>>>>>>            $no_serialize = array(array('name'=>'Calendar',
>>>>>>>>>>>                                        
>>>>>>>>>>> 'url'=>'https://calendar.ias.u-psud.fr/caldav.php/' 
>>>>>>>>>>> .$username. '/calendar',
>>>>>>>>>>>                                        'user'=> $username,
>>>>>>>>>>>                                        'password' => 
>>>>>>>>>>> $GLOBALS['registry']->getAuthCredential('password')
>>>>>>>>>>>                                      )
>>>>>>>>>>>                                 );
>>>>>>>>>>>            $value = serialize($no_serialize);
>>>>>>>>>>>            return $value;
>>>>>>>>>>>      }
>>>>>>>>>>> }
>>>>>>>>>>> }
>>>>>>>>>>> [/CODE]
>>>>>>>>>>>
>>>>>>>>>>> The remote calendar show up in the kronolith's interface but 
>>>>>>>>>>> credentials are still requested despite the user and 
>>>>>>>>>>> password in hooks.local.php.
>>>>>>>>>>>
>>>>>>>>>>> Best regards
>>>>>>>>>>>
>>>>>>>>>>> Gerard Breiner
>>>>>>>>>>>
>>>>>>>>>>> -- 
>>>>>>>>>>> Kronolith mailing list
>>>>>>>>>>> Frequently Asked Questions: http://horde.org/faq/
>>>>>>>>>>> To unsubscribe, mail: kronolith-unsubscribe at lists.horde.org
>>>>>>>>>>
>>>>>>>>>> Hello
>>>>>>>>>> Just for tests I added a few lines in the above code so that 
>>>>>>>>>> to save the $value variable in a file. We can see that each 
>>>>>>>>>> keys has respectively their values and the password is do 
>>>>>>>>>> catching.
>>>>>>>>>>
>>>>>>>>>> a:1:{i:0;a:4:{s:4:"name";s:10:"MyCalendar";s:3:"url";s:59:"https://davicalserver/caldav.php/gbreiner/calendar";s:4:"user";s:8:"gbreiner";s:8:"password";s:7:"1testpass2";}} 
>>>>>>>>>> Having said When I click on agenda (kronolith) and then click 
>>>>>>>>>> on "MyCalendar" I get the message (color red) saying that 
>>>>>>>>>> login and password are requested.
>>>>>>>>>> So I read again the docs into which it is said : "This hook 
>>>>>>>>>> is ONLY executed on login and preferences are cached during a 
>>>>>>>>>> user's session". So I'm wondering why I have to put again 
>>>>>>>>>> login and password in the form of "MyCalendar".
>>>>>>>>>>
>>>>>>>>>> I'm wondering where am I wrong....
>>>>>>>>>
>>>>>>>>> User name and password need to be encrypted with the user's 
>>>>>>>>> password and base64 encoded. See 
>>>>>>>>> Kronolith::subscribeRemoteCalendar(). Or even better: *use* 
>>>>>>>>> subscribeRemoteCalendar().
>>>>>>>>>
>>>>>>>>> Jan.
>>>>>>>>>
>>>>>>>> Many thanks Jan!  Works very fine now .....
>>>>>>>> The code is now :
>>>>>>>>
>>>>>>>> kronolith/config/hooks.local.php
>>>>>>>>
>>>>>>>> [CODE]
>>>>>>>> namespace Kronolith\subscribeRemoteCalendar;
>>>>>>>> use Kronolith\subscribeRemoteCalendar;
>>>>>>>> class Kronolith_Hooks
>>>>>>>> {
>>>>>>>>   public function prefs_init($prefs, $value, $username, $scope_ob)
>>>>>>>>   {
>>>>>>>>       switch ($prefs) {
>>>>>>>>            case 'remote_cals':
>>>>>>>>                  $password = 
>>>>>>>> $GLOBALS['registry']->getAuthCredential('password');
>>>>>>>>                  $info = array(array('name'=>'MyCalendar',
>>>>>>>>                                             
>>>>>>>> 'url'=>'https://calendar.ias.u-psud.fr/caldav.php/' .$username. 
>>>>>>>> '/calendar',
>>>>>>>>                                             'user'=> $user,
>>>>>>>>                                             'password' => 
>>>>>>>> $password
>>>>>>>>                                       )
>>>>>>>>                                );
>>>>>>>>              $value =  subscribeRemoteCalendar($info);
>>>>>>>>               return $value;
>>>>>>>>       }
>>>>
>>>>>>>>  }
>>>>>>>> }
>>>>>>>> [/CODE]
>>>>>>>>
>>>>>>>> kronolith/config/prefs.local.php
>>>>>>>>
>>>>>>>> [CODE]
>>>>>>>> $_prefs['remote_cals'] = array(
>>>>>>>>   'value' => '',
>>>>>>>>   'hook' => 'true'
>>>>>>>> );
>>>>>>>>
>>>>>>>> Best regards.
>>>>>>>>
>>>>>>>> Gérard Breiner
>>>>>>>> [/CODE]
>>>>>>>>
>>>>>>>>
>>>>>>> Hello Jan and alls,
>>>>>>>
>>>>>>> I come back again about this subject because  what I believed 
>>>>>>> was working doesn't longer works... I have to recognized that 
>>>>>>> the use of namespace and *use* keywords are new for me. So for 
>>>>>>> doing "simple" I use $value = 
>>>>>>> Kronolith::subscribeRemoteCalendar($info); . Nevertheless, it 
>>>>>>> seems that $value is empty.
>>>>>>
>>>>>> Yes. The method doesn't return anything. It does exactly what the 
>>>>>> method name says. It subscribes a remote calendar.
>>>>>>
>>>>>>> Kronolith is 3.016.
>>>>>>>
>>>>>>> Here is the kronolith/config/hooks.php :
>>>>>>>
>>>>>>> [CODE]
>>>>>>> class Kronolith_Hooks
>>>>>>> {
>>>>>>>    public function prefs_init($prefs, $value, $username, $scope_ob)
>>>>>>>    {
>>>>>>> $user = $username;
>>>>>>>        switch ($prefs) {
>>>>>>>             case 'remote_cals':
>>>>>>>                   $password = 
>>>>>>> $GLOBALS['registry']->getAuthCredential('password');
>>>>>>>                   $info = array(array('name' => $username,
>>>>>>>                                       'url' => 
>>>>>>> 'https://calendar.ias.u-psud.fr/caldav.php/' .$username. 
>>>>>>> '/calendar',
>>>>>>>                                       'user' => $user,
>>>>>>>                                       'password' => $password
>>>>>>>                                      )
>>>>>>>                                 );
>>>>>>>               $value = subscribeRemoteCalendar($info);
>>>>>>>               return $value;
>>>>>>>        }
>>>>>>>   }
>>>>>>>
>>>>>>> [/CODE]
>>>>>>>
>>>>>>> And the prefs['remote-cals'] in kronolith/config/prefs.local.php
>>>>>>>
>>>>>>> [CODE]
>>>>>>> // remote calendars
>>>>>>> $_prefs['remote_cals'] = array(
>>>>>>>    'value' => '',
>>>>>>>    'hook' => 'true'
>>>>>>> );
>>>>>>> [/CODE]
>>>>>>>
>>>>>>> And the horde.log about kronolith :
>>>>>>>
>>>>>>> [LOG]
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] Load config 
>>>>>>> file (conf.php; app: kronolith) [pid 28322 on line 865 of 
>>>>>>> "/ww                                                
>>>>>>> w/horde4/pear/php/Horde.php"]
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] Load config 
>>>>>>> file (hooks.php; app: kronolith) [pid 28322 on line 865 of 
>>>>>>> "/w                                                
>>>>>>> ww/horde4/pear/php/Horde.php"]
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] SQL  (0,0002s)
>>>>>>>        SELECT DISTINCT s.* FROM kronolith_shares s LEFT JOIN
>>>>>>>          kronolith_shares_users u ON u.share_id = s.share_id 
>>>>>>> LEFT JOIN
>>>>>>>          kronolith_shares_groups g ON g.share_id = s.share_id WHERE
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] SQL  (0,0001s)
>>>>>>>        SELECT share_id, user_uid, perm FROM 
>>>>>>> kronolith_shares_users WHERE
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] SQL  (0,0001s)
>>>>>>>        SELECT share_id, group_uid, perm FROM 
>>>>>>> kronolith_shares_groups WHERE
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] Horde_Prefs: 
>>>>>>> Storing preference value (display_remote_cals) [pid 28322 
>>>>>>> on                                                 line 200 of 
>>>>>>> "/www/horde4/pear/php/Horde/Prefs.php"]
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] Horde_Prefs: 
>>>>>>> Storing preference value (holiday_drivers) [pid 28322 on 
>>>>>>> line                                                 200 of 
>>>>>>> "/www/horde4/pear/php/Horde/Prefs.php"]
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] Horde_Prefs: 
>>>>>>> Storing preference value (display_external_cals) [pid 28322 
>>>>>>> o                                                n line 200 of 
>>>>>>> "/www/horde4/pear/php/Horde/Prefs.php"]
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] SQL  (0,0001s)
>>>>>>>        SELECT DISTINCT s.* FROM kronolith_shares s LEFT JOIN
>>>>>>>          kronolith_shares_users u ON u.share_id = s.share_id 
>>>>>>> LEFT JOIN
>>>>>>>          kronolith_shares_groups g ON g.share_id = s.share_id WHERE
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] SQL  (0,0001s)
>>>>>>>        SELECT share_id, user_uid, perm FROM 
>>>>>>> kronolith_shares_users WHERE
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] SQL  (0,0006s)
>>>>>>> 2012-04-06T11:40:53+02:00 DEBUG: HORDE4 [kronolith] Max memory 
>>>>>>> usage: 35913728 bytes [pid 28322 on line 476 of 
>>>>>>> "/www/horde4/pe                                                
>>>>>>> ar/php/Horde/Registry.php"]
>>>>>>> [/LOG]
>>>>>>>
>>>>>>> Thanks in advance.
>>>>>>>
>>>>>>> Best regards.
>>>>>>>
>>>>>>> Gérard Breiner
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> -- 
>>>>>>> kronolith mailing list
>>>>>>> Frequently Asked Questions: http://wiki.horde.org/FAQ
>>>>>>> To unsubscribe, mail: kronolith-unsubscribe at lists.horde.org
>>>>>>
>>>>> So, how I can see the subscribe is performed whereas "Remote 
>>>>> Calendars" doesn't show up anything ?
>>>>> It doesn't work since I've removed the one I  had created via the 
>>>>> hook and changed the name of the remote calendar in the hook by 
>>>>> $username.
>>>>
>>>> Either don't call this method from a preference hook, or take a 
>>>> look at the code of that method and use it inside the preference hook.
>>>>
>>>>>  (I recently upgrade by pear, so horde is now 4.0.14 and kronolith 
>>>>> is 3.0.16). I also migrate again the database horde3 to horde4 to 
>>>>> assume that all is "right". Nevertheless there is certainly 
>>>>> something I missed but after working several days on this issue I 
>>>>> have to recognize I need help. If you could give me some others 
>>>>> hints for tracking this that would be friendly.
>>>>>
>>>>> Many thanks.
>>>>>
>>>>> Best regards.
>>>>>
>>>>> Gérard Breiner
>>>>> -- 
>>>>> kronolith mailing list
>>>>> Frequently Asked Questions: http://wiki.horde.org/FAQ
>>>>> To unsubscribe, mail: kronolith-unsubscribe at lists.horde.org
>>>>
>>> Thanks Jan,
>>> I'd already  look at the code of this method but maybe not enough. 
>>> It seems that I should a little more  look at  
>>> 'display_remote_calendars'.
>>>
>>> Best regards
>>>
>>> Gérard Breiner
>>>
>> An idea that comes in my mind... If I don't put 'name' and 'url' in 
>> the hook I should have to rise an exception  according the code of 
>> subscribeRemoteCalendar but I do not get the message "You must 
>> specify a name and a URL." So I'm  wondering if the methode is indeed 
>> executed....
>>
>> [CODE]
>> if (!(strlen($info['name']) && strlen($info['url']))) {
>>             throw new Kronolith_Exception(_("You must specify a name 
>> and a URL."));
>>         }
>> [/CODE]
>>
>>
>> Gérard Breiner
>>
>>
> Oh sorry, the exception is do rised, so the method is do executed.
>
> Gérard
Hello,

Good news, this time my hook works very fine. When a user  logged into 
webmail  the prefs_init hook subscribe for him at his remote calendar 
davical  and use $username as calendar name.
So, the final code of kronolith/config/hook.php is :

[CODE]
class Kronolith_Hooks
{
     public function prefs_init($prefs, $value, $username, $scope_ob)
     {
$user = $username;
         switch ($prefs) {
              case 'remote_cals':
                    $password = 
$GLOBALS['registry']->getAuthCredential('password');
                  //  $info = array(array('name' => $username,
                    $info = array('name' => $username,
                                        'url' => 
'https://calendar.ias.u-psud.fr/caldav.php/' .$username. '/calendar',
                                        'user' => $user,
                                        'password' => $password

                                       );
                  Kronolith::subscribeRemoteCalendar($info);

         }
          $remote_calendars = $GLOBALS['prefs']->getValue('remote_cals');
          return ($remote_calendars);
    }
}

In the kronolith/config/prefs.local.php

$_prefs['remote_cals'] = array(
     'value' => '',
     'hook' => true
);
Hoping that can help others...

Best regards.

Gérard Breiner
[/CODE]


More information about the kronolith mailing list