[dev] Littles questions for using API's methods

Jan Schneider jan at horde.org
Mon Aug 6 07:28:44 UTC 2012


Zitat von Gerard Breiner <gerard.breiner at ias.u-psud.fr>:

> Hello,
>
> At this time I can export/import all main calendars kronolith to  
> davical but it seems there is an issue about permission. In fact  
> each of all ics files ì get has a SUMMARY:busy...
> I found it is due to kronolith/lib/Event.php getTitle method in  
> which it seems the current user has not permissions.
> [CODE]
> // We explicitly allow admin access here for the alarms notifications.
>         if (!$GLOBALS['registry']->isAdmin() && $this->private &&  
> $this->creator != $user) {
>               return _("busy");
>              } elseif ($GLOBALS['registry']->isAdmin() ||  
> $this->hasPermission(Horde_Perms::READ, $user)) {
>                    return strlen($this->title) ? $this->title :  
> _("[Unnamed event]");
>              }  else {
>                         return _("busy");
>              }
> [/CODE]
>
> Could you please indicate me  how to set up the permissions in my script :
>
> [CODE]
> #!/usr/bin/env php
> <?php
> set_include_path('/www/horde4/pear/php' . PATH_SEPARATOR .  
> get_include_path());
> if (file_exists(dirname(__FILE__) .  
> '/../../kronolith/lib/Application.php')) {
>     $baseDir = dirname(__FILE__) . '/../';
> } else {
>     require_once 'PEAR/Config.php';
>     $baseDir = PEAR_Config::singleton()
>         ->get('horde_dir', null, 'pear.horde.org') . '/kronolith/';
> }
>
> require_once dirname(__FILE__) . '/../lib/Application.php';
> Horde_Registry::appInit('kronolith', array(
>     'cli' => true
> ));
> // Call a Registry method.
> // Retrieve a list of users associated with each calendar, and
>     // thus a list of users who have used kronolith and
>     // potentially have an agenda preference set.
>     $calendars = $GLOBALS['kronolith_shares']->listAllShares();
>     $users = array();
>     foreach (array_keys($calendars) as $calendarId) {
>         try {
>             $calendar = $GLOBALS['kronolith_shares']->getShare($calendarId);
>         } catch (Exception $e) {
>             die($e->getMessage());
>         }
>         $users = array_merge($users,  
> $calendar->listUsers(Horde_Perms::READ));
>     }
>  // Remove duplicates.
>     $users = array_unique($users);
> natcasesort($users);
> // Tell the registry that we are doing authentication ourselves.
> define('AUTH_HANDLER', true);

   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This is H3 code.

> $contentType = 'text/calendar';
> foreach ($users as $user) {
>    $registry->setAuth($user, array('password' => ''));

      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
You are explicitely setting a user here that is *not* an admin.

>    $cals[$user] = $registry->call('calendar/listCalendars',  
> array(true, HORDE_PERMS::READ));
>    if ($cals[$user]['0'] != '') {
>       if (strpbrk($user, '*') != true) {
>        if ($user != 'mmiville')  {
>            $export[$user] =  
> $registry->call('calendar/exportCalendar', array($cals[$user]['0'],  
> $contentType, Horde_Perms::READ));
>            $file = '/home/webadm/exported_calendars/' . $user . '.ics';
>            $hdl = fopen ($file, a);
>            fwrite($hdl,($export[$user]));
>
> }
> }
> } //end of foreach
> fclose($hdl);
> [/CODE]
>
> Any help would be appreciated.
>
> Best regards.
>
> Gérard Breiner
>
> Le 15 juin 2012 à 22:05, Gerard Breiner a écrit :
>
>> Many thanks again Jan? I read the doc?  No doubt that Xdebug is a  
>> very suitable tool for debugging?
>> However for this time  I finally chose to debug  by adding  
>> temporarily a var_dump(events) at the line 845 in  
>> kronolith/lib/Api.php... I found a event_recurtype field  set to 1  
>> which I replace by the NULL value and afterwards the calendar has  
>> been exported without another error.
>>
>> Best regards.
>>
>> Gérard
>>
>>
>> Le 14 juin 2012 à 14:29, Jan Schneider a écrit :
>>
>>>
>>> Zitat von Gerard Breiner <gerard.breiner at ias.u-psud.fr>:
>>>
>>>> Many thanks Jan for your fast answer?. However, I Installed  
>>>> Xdebug  but I'm trying to use it without result?
>>>> Yet it is installed? php -m list :  [
>>>> Zend Modules]
>>>> Xdebug
>>>>
>>>> In my Cli php.ini I added  :
>>>>
>>>> [CODE]
>>>> error_reporting = E_ALL & E_NOTICE
>>>>
>>>> [xdebug]
>>>> zend_extension="/usr/lib64/php5/20090626/xdebug.so"
>>>> ;xdebug.default_enable=Off
>>>> xdebug.default_enable=1
>>>> xdebug.show_local_vars=1
>>>> xdebug.trace_format=2
>>>> xdebug.trace_output_dir="/www/horde4/log"
>>>> xdebug.trace_output_name="xdebug.log"
>>>>
>>>> [/CODE]
>>>>
>>>> When I run my script "exportCalendars.phpt" for the calendars  
>>>> which has a bad event I get :
>>>>
>>>> PHP Notice:  Undefined index: SERVER_NAME in  
>>>> /www/horde4/config/horde.local.php on line 12
>>>> PHP Stack trace:
>>>> PHP   1. {main}() /www/horde4/pear/exportcals.php:0
>>>> PHP   2. require_once() /www/horde4/pear/exportcals.php:12
>>>> PHP   3. require_once() /www/horde4/lib/Application.php:18
>>>> PHP   4. include_once() /www/horde4/lib/core.php:40
>>>> PHP Notice:  Undefined index: SERVER_PORT in  
>>>> /www/horde4/config/horde.local.php on line 13
>>>> PHP Stack trace:
>>>> PHP   1. {main}() /www/horde4/pear/exportcals.php:0
>>>> PHP   2. require_once() /www/horde4/pear/exportcals.php:12
>>>> PHP   3. require_once() /www/horde4/lib/Application.php:18
>>>> PHP   4. include_once() /www/horde4/lib/core.php:40
>>>> PHP Notice:  Undefined index: SERVER_NAME in  
>>>> /www/horde4/config/horde.local.php on line 22
>>>> PHP Stack trace:
>>>> PHP   1. {main}() /www/horde4/pear/exportcals.php:0
>>>> PHP   2. require_once() /www/horde4/pear/exportcals.php:12
>>>> PHP   3. require_once() /www/horde4/lib/Application.php:18
>>>> PHP   4. include_once() /www/horde4/lib/core.php:40
>>>>
>>>> ====================
>>>>
>>>> Fatal Error:
>>>> DateTime::__construct(): Failed to parse time string (-001-11-01)  
>>>> at position 7 (-): Double timezone specification
>>>>
>>>> 1. Horde_Registry->call() /www/horde4/pear/exportcals.php:68
>>>> 2. Horde_Registry->callByPackage()  
>>>> /www/horde4/pear/php/Horde/Registry.php:979
>>>> 3. call_user_func_array() /www/horde4/pear/php/Horde/Registry.php:1020
>>>> 4. Kronolith_Api->exportCalendar()
>>>> 5. Kronolith_Event->toiCalendar() /www/horde4/kronolith/lib/Api.php:846
>>>> 6. Horde_Date->__construct() /www/horde4/kronolith/lib/Event.php:842
>>>> 7. Horde_Date->_initializeFromArgs()  
>>>> /www/horde4/pear/php/Horde/Date.php:201
>>>> 8. Horde_Date->_initializeFromArray()  
>>>> /www/horde4/pear/php/Horde/Date.php:1045
>>>> 9. Horde_Date->_correct() /www/horde4/pear/php/Horde/Date.php:1076
>>>> 10. Horde_Date_Utils::daysInMonth()  
>>>> /www/horde4/pear/php/Horde/Date.php:1009
>>>> 11. DateTime->__construct() /www/horde4/pear/php/Horde/Date/Utils.php:58
>>>>
>>>> I wonder what else I have to configure for Xdebug  works.
>>>
>>> See http://xdebug.org/docs/stack_trace especially xdebug.collect_params
>>>
>>>>
>>>> Best regards.
>>>>
>>>> Gérard
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Le 11 juin 2012 à 16:58, Jan Schneider a écrit :
>>>>
>>>>> Install Xdebug and you should get a backtrace with function call  
>>>>> parameter that would help identifying the broken event.
>>>>>
>>>>> Zitat von Gerard Breiner <gerard.breiner at ias.u-psud.fr>:
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> I come here back for saying my script works and do what he is  
>>>>>> supposed to do? I think to have identified the calendar for  
>>>>>> which "calendar/exportCalendars" rise the error  "Double  
>>>>>> timezone specification".
>>>>>> Is there a way for identifying what is not clean inside this calendar ?
>>>>>>
>>>>>> Many thanks in advance.
>>>>>>
>>>>>> Best regards.
>>>>>>
>>>>>> Gérard
>>>>>>
>>>>>>
>>>>>> Le 6 juin 2012 à 17:08, Gerard Breiner a écrit :
>>>>>>
>>>>>>> Many thanks Jan, Mike?.
>>>>>>>
>>>>>>> I picked up a few pieces of code and now I might expect  to  
>>>>>>> get an export of all the calendar but I'm facing an error when  
>>>>>>> I run 'calendar/exportCalendars' method :
>>>>>>> It seems this error occurs for calendars whose owners has  
>>>>>>> never create an event.
>>>>>>>
>>>>>>> Fatal Error:
>>>>>>> DateTime::__construct(): Failed to parse time string  
>>>>>>> (-001-11-01) at position 7 (-): Double timezone specification
>>>>>>>
>>>>>>> It seems this error is raised at :
>>>>>>> DateTime->__construct() /www/horde4/pear/php/Horde/Date/Utils.php:58
>>>>>>>
>>>>>>> At this time my code is :
>>>>>>>
>>>>>>> [CODE]
>>>>>>> #!/usr/bin/env php
>>>>>>> <?php
>>>>>>> set_include_path('/www/horde4/pear/php' . PATH_SEPARATOR .  
>>>>>>> get_include_path());
>>>>>>> if (file_exists(dirname(__FILE__) .  
>>>>>>> '/../../kronolith/lib/Application.php')) {
>>>>>>> $baseDir = dirname(__FILE__) . '/../';
>>>>>>> } else {
>>>>>>> require_once 'PEAR/Config.php';
>>>>>>> $baseDir = PEAR_Config::singleton()
>>>>>>>     ->get('horde_dir', null, 'pear.horde.org') . '/kronolith/';
>>>>>>> }
>>>>>>>
>>>>>>> require_once dirname(__FILE__) . '/../lib/Application.php';
>>>>>>> Horde_Registry::appInit('kronolith', array(
>>>>>>> 'cli' => true
>>>>>>> ));
>>>>>>> // Call a Registry method.
>>>>>>> // Retrieve a list of users associated with each calendar, and
>>>>>>> // thus a list of users who have used kronolith and
>>>>>>> // potentially have an agenda preference set.
>>>>>>> $calendars = $GLOBALS['kronolith_shares']->listAllShares();
>>>>>>> $users = array();
>>>>>>> foreach (array_keys($calendars) as $calendarId) {
>>>>>>>     try {
>>>>>>>         $calendar =  
>>>>>>> $GLOBALS['kronolith_shares']->getShare($calendarId);
>>>>>>>     } catch (Exception $e) {
>>>>>>>         continue;
>>>>>>>     }
>>>>>>>     $users = array_merge($users,  
>>>>>>> $calendar->listUsers(Horde_Perms::READ));
>>>>>>> }
>>>>>>> // Remove duplicates.
>>>>>>> $users = array_unique($users);
>>>>>>>
>>>>>>> // Tell the registry that we are doing authentication ourselves.
>>>>>>> define('AUTH_HANDLER', true);
>>>>>>>
>>>>>>> $contentType = 'text/calendar';
>>>>>>> foreach ($users as $user) {
>>>>>>> $registry->setAuth($user, array('password' => ''));
>>>>>>> $cals[$user] = $registry->call('calendar/listCalendars',  
>>>>>>> array('true', 'HORDE_PERMS::READ'));
>>>>>>> if ($cals[$user]['0'] != '') {
>>>>>>>    $export[$user] = $registry->call('calendar/exportCalendar',  
>>>>>>> array($cals[$user]['0'], $contentType, 'Horde_Perms::READ'));
>>>>>>>    $file = '/home/webadm/exportCalendars/' . $user . '.ics';
>>>>>>>    $hdl = fopen($file, a);
>>>>>>>    fwrite($hdl, $export[$user]);
>>>>>>> }
>>>>>>>
>>>>>>> }
>>>>>>> fclose($hdl);
>>>>>>> [/CODE]
>>>>>>>
>>>>>>> Best regards.
>>>>>>>
>>>>>>> Gérard
>>>>>>>
>>>>>>>
>>>>>>> Le 4 juin 2012 à 17:20, Michael J Rubinsky a écrit :
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Quoting Gerard Breiner <gerard.breiner at ias.u-psud.fr>:
>>>>>>>>
>>>>>>>>> Hello Mike,
>>>>>>>>>
>>>>>>>>> Thanks for these precisions? It make me understand what Jan meant?
>>>>>>>>> I will try soon to reduce registry.local.php and kept only  
>>>>>>>>> what is necessary.
>>>>>>>>>
>>>>>>>>> I have another question about calendar permissions and listCalendars.
>>>>>>>>> In the admin interface admin/perms I have assigned the  
>>>>>>>>> permissions 'show' and 'read' to allow the user webadm  
>>>>>>>>> access to all agendas.
>>>>>>>>> I dont understand why with the below code I do not list all  
>>>>>>>>> the calendars but only the others users shares with "webadm"  
>>>>>>>>> user? It is like the perms I setup has not been validated.
>>>>>>>>
>>>>>>>> Permissions for calendars are set by the owner of the  
>>>>>>>> calendar, from within Kronolith - not from the administrative  
>>>>>>>> interface. Look on the calendar's property view.
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> mike
>>>>>>>>
>>>>>>>> The Horde Project (www.horde.org)
>>>>>>>> mrubinsk at horde.org
>>>>>>>
>>>>>>> --
>>>>>>> dev mailing list
>>>>>>> Frequently Asked Questions: http://wiki.horde.org/FAQ
>>>>>>> To unsubscribe, mail: dev-unsubscribe at lists.horde.org
>>>>>>
>>>>>> --
>>>>>> dev mailing list
>>>>>> Frequently Asked Questions: http://wiki.horde.org/FAQ
>>>>>> To unsubscribe, mail: dev-unsubscribe at lists.horde.org
>>>>>
>>>>> --
>>>>> Jan Schneider
>>>>> The Horde Project
>>>>> http://www.horde.org/
>>>>>
>>>>>
>>>>> --
>>>>> dev mailing list
>>>>> Frequently Asked Questions: http://wiki.horde.org/FAQ
>>>>> To unsubscribe, mail: dev-unsubscribe at lists.horde.org
>>>
>>> --
>>> Jan Schneider
>>> The Horde Project
>>> http://www.horde.org/
>>>
>>>
>>
>> --
>> dev mailing list
>> Frequently Asked Questions: http://wiki.horde.org/FAQ
>> To unsubscribe, mail: dev-unsubscribe at lists.horde.org


-- 
Jan Schneider
The Horde Project
http://www.horde.org/



More information about the dev mailing list