diff --git a/inc/auth-functions.php b/inc/auth-functions.php index 6d539688..2b9b1a55 100644 --- a/inc/auth-functions.php +++ b/inc/auth-functions.php @@ -139,74 +139,76 @@ function CreateHomeCollections( $username, $default_timezone = null ) { $c->messages[] = i18n('Home ') . $v['type'] . i18n(' already exists'); continue; } - $params[':user_no'] = $principal->user_no(); - $params[':parent_container'] = $principal->dav_name(); - $params[':dav_etag'] = '-1'; - $params[':collection_path'] = $principal->dav_name().$v['name'].'/'; - if ( isset($v['displayname']) && ! empty($v['displayname']) ) { - $params[':displayname'] = str_replace(array('%fn', '%rfn'), array($user_fullname, $user_rfullname), $v['displayname']); - } elseif ( isset($v['displayname_suffix']) && ! empty($v['displayname_suffix']) ) { - $params[':displayname'] = $user_fullname . $v['displayname_suffix']; - } else { - $typeLabels = [ - 'calendar' => ' calendar', - 'addressbook' => ' addressbook', - 'schedule-outbox' => ' Outbox', // capitalized for consistency with CalDAVRequest (line 396) - 'schedule-inbox' => ' Inbox' - ]; - $suffix = isset($typeLabels[$v['type']]) ? $typeLabels[$v['type']] : ''; - $params[':displayname'] = $user_fullname . $suffix; - } - $params[':resourcetypes'] = ""; - $params[':is_calendar'] = ( $v['type'] === 'calendar' ); - $params[':is_addressbook'] = ( $v['type'] === 'addressbook' ); - $params[':privileges'] = ( !isset($v['privileges']) || $v['privileges']===null ? null : privilege_to_bits($v['privileges']) ); - - $qry = new AwlQuery( $sql, $params ); - if ( $qry->Exec() ) { - $c->messages[] = i18n('Home ') . $v['type'] . i18n(' added. ') . $v['name']; - dbg_error_log("User", ":Write: Created user's home '%s' at '%s'", $v['type'], $params[':collection_path']); - - // create value for urn:ietf:params:xml:ns:caldav:supported-calendar-component-set property - if($v['type'] == 'calendar' && isset($v['calendar_components']) && $v['calendar_components'] != null && is_array($v['calendar_components']) && count($v['calendar_components'])) { - // convert the array to uppercase and allow only real calendar components - $components_clean=array_intersect(array_map("strtoupper", $v['calendar_components']), array('VEVENT', 'VTODO', 'VJOURNAL', 'VTIMEZONE', 'VFREEBUSY', 'VPOLL', 'VAVAILABILITY')); - - // convert the $components_clean array to XML string - $result_xml=''; - foreach($components_clean as $curr) - $result_xml.=sprintf('', $curr); - - // handle the components XML string as user defined property (see below) - if($result_xml!='') - $v['default_properties']['urn:ietf:params:xml:ns:caldav:supported-calendar-component-set']=$result_xml; + else { + $params[':user_no'] = $principal->user_no(); + $params[':parent_container'] = $principal->dav_name(); + $params[':dav_etag'] = '-1'; + $params[':collection_path'] = $principal->dav_name().$v['name'].'/'; + if ( isset($v['displayname']) && ! empty($v['displayname']) ) { + $params[':displayname'] = str_replace(array('%fn', '%rfn'), array($user_fullname, $user_rfullname), $v['displayname']); + } elseif ( isset($v['displayname_suffix']) && ! empty($v['displayname_suffix']) ) { + $params[':displayname'] = $user_fullname . $v['displayname_suffix']; + } else { + $typeLabels = [ + 'calendar' => ' calendar', + 'addressbook' => ' addressbook', + 'schedule-outbox' => ' Outbox', // capitalized for consistency with CalDAVRequest (line 396) + 'schedule-inbox' => ' Inbox' + ]; + $suffix = isset($typeLabels[$v['type']]) ? $typeLabels[$v['type']] : ''; + $params[':displayname'] = $user_fullname . $suffix; } + $params[':resourcetypes'] = ""; + $params[':is_calendar'] = ( $v['type'] === 'calendar' ); + $params[':is_addressbook'] = ( $v['type'] === 'addressbook' ); + $params[':privileges'] = ( !isset($v['privileges']) || $v['privileges']===null ? null : privilege_to_bits($v['privileges']) ); - // store all user defined properties (note: it also handles 'calendar_components' - see above) - if(isset($v['default_properties']) && $v['default_properties'] != null && is_array($v['default_properties']) && count($v['default_properties'])) { - $sql2='INSERT INTO property (dav_name, property_name, property_value, changed_on, changed_by) '; - $sql2.='VALUES (:collection_path, :property_name, :property_value, current_timestamp, :user_no);'; - $params2[':user_no'] = $principal->user_no(); - $params2[':collection_path'] = $principal->dav_name().$v['name'].'/'; + $qry = new AwlQuery( $sql, $params ); + if ( $qry->Exec() ) { + $c->messages[] = i18n('Home ') . $v['type'] . i18n(' added. ') . $v['name']; + dbg_error_log("User", ":Write: Created user's home '%s' at '%s'", $v['type'], $params[':collection_path']); - foreach( $v['default_properties'] AS $key => $val ) { - $params2[':property_name'] = $key; - $params2[':property_value'] = $val; + // create value for urn:ietf:params:xml:ns:caldav:supported-calendar-component-set property + if($v['type'] == 'calendar' && isset($v['calendar_components']) && $v['calendar_components'] != null && is_array($v['calendar_components']) && count($v['calendar_components'])) { + // convert the array to uppercase and allow only real calendar components + $components_clean=array_intersect(array_map("strtoupper", $v['calendar_components']), array('VEVENT', 'VTODO', 'VJOURNAL', 'VTIMEZONE', 'VFREEBUSY', 'VPOLL', 'VAVAILABILITY')); - $qry2 = new AwlQuery( $sql2, $params2 ); - if ( $qry2->Exec() ) { - dbg_error_log("User", ":Write: Created property '%s' for '%s' at '%s'", $params2[':property_name'], $v['type'], $params2[':collection_path']); - } - else { - $c->messages[] = i18n("There was an error writing to the database."); - return false; + // convert the $components_clean array to XML string + $result_xml=''; + foreach($components_clean as $curr) + $result_xml.=sprintf('', $curr); + + // handle the components XML string as user defined property (see below) + if($result_xml!='') + $v['default_properties']['urn:ietf:params:xml:ns:caldav:supported-calendar-component-set']=$result_xml; + } + + // store all user defined properties (note: it also handles 'calendar_components' - see above) + if(isset($v['default_properties']) && $v['default_properties'] != null && is_array($v['default_properties']) && count($v['default_properties'])) { + $sql2='INSERT INTO property (dav_name, property_name, property_value, changed_on, changed_by) '; + $sql2.='VALUES (:collection_path, :property_name, :property_value, current_timestamp, :user_no);'; + $params2[':user_no'] = $principal->user_no(); + $params2[':collection_path'] = $principal->dav_name().$v['name'].'/'; + + foreach( $v['default_properties'] AS $key => $val ) { + $params2[':property_name'] = $key; + $params2[':property_value'] = $val; + + $qry2 = new AwlQuery( $sql2, $params2 ); + if ( $qry2->Exec() ) { + dbg_error_log("User", ":Write: Created property '%s' for '%s' at '%s'", $params2[':property_name'], $v['type'], $params2[':collection_path']); + } + else { + $c->messages[] = i18n("There was an error writing to the database."); + return false; + } } } } - } - else { - $c->messages[] = i18n("There was an error writing to the database."); - return false; + else { + $c->messages[] = i18n("There was an error writing to the database."); + return false; + } } } }