config->getValueString(Application::APP_ID, 'enableDefaultContact', 'no'); if ($enableDefaultContact !== 'yes') { return; } $appData = $this->appDataFactory->get('dav'); try { $folder = $appData->getFolder('defaultContact'); $defaultContactFile = $folder->getFile('defaultContact.vcf'); $data = $defaultContactFile->getContent(); } catch (\Exception $e) { $this->logger->error('Couldn\'t get default contact file', ['exception' => $e]); return; } // Make sure the UID is unique $newUid = Uuid::v4()->toRfc4122(); $newRev = date('Ymd\THis\Z'); $vcard = \Sabre\VObject\Reader::read($data, \Sabre\VObject\Reader::OPTION_FORGIVING); if ($vcard->UID) { $vcard->UID->setValue($newUid); } else { $vcard->add('UID', $newUid); } if ($vcard->REV) { $vcard->REV->setValue($newRev); } else { $vcard->add('REV', $newRev); } // Level 3 means that the document is invalid // https://sabre.io/vobject/vcard/#validating-vcard $level3Warnings = array_filter($vcard->validate(), function ($warning) { return $warning['level'] === 3; }); if (!empty($level3Warnings)) { $this->logger->error('Default contact is invalid', ['warnings' => $level3Warnings]); return; } try { $this->cardDav->createCard($addressBookId, 'default', $vcard->serialize(), false); } catch (\Exception $e) { $this->logger->error($e->getMessage(), ['exception' => $e]); } } }