[dev] Littles questions for using API's methods

Jan Schneider jan at horde.org
Mon Aug 6 19:40:56 UTC 2012


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

> Le 6 août 2012 à 09:28, Jan Schneider a écrit :
>
>>
>> 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.
> So, what is the H4 code ?

I'm only talking about the last line. It's actually not necessary in  
H4 anymore, because the 'cli' flag for appInit() already disables  
authentication.

> Something like this for getting users ? :
>
> [CODE]
> $db = $injector->getInstance('Horde_Db_Adapter');
> if (!empty($options['debug'])) {
>     $logger = new Horde_Log_Logger(new Horde_Log_Handler_Stream(STDOUT));
>     $db->setLogger($logger);
> $sql2 = 'SELECT DISTINCT share_owner  FROM kronolith_shares';
>
>  try {
>     $useruids = $db->selectValues($sql2);
> } catch (Horde_Db_Exception $e) {
>     die($e->getMessage());
> }
> natcasesort($useruids);}
> [/CODE]
> That works but I suppose it is still H3?. ?
>
>
>>
>>> $contentType = 'text/calendar';
>>> foreach ($users as $user) {
>>>   $registry->setAuth($user, array('password' => ''));
>>
>>     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> You are explicitely setting a user here that is *not* an admin.
>
> Yes, but if I do understand,  the user may be other than admin if he  
> has permission on the current event.

Correct.

> this is checked in kronolith/lib/Event.php getTitle()  line : [CODE]  
> } elseif ($GLOBALS['registry']->isAdmin() ||  
> $this->hasPermission(Horde_Perms::READ, $user)) [/CODE]. If I put a  
> negation on the "hasPermission" it works. It is this condition that  
> put a "busy" for SUMMARY. Yet in my code I specified  
> "Horde_Perms::READ"?.

Yes, and it should work.

>>>   $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));

The 3rd parameter doesn't exist.

>>>           $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/
>>


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



More information about the dev mailing list