/** * Get a photo from the oC and crops it with the suplied geometry. * @NoAdminRequired * @NoCSRFRequired */ public function cropPhoto() { $params = $this->request->urlParams; $x = isset($this->request->post['x']) && $this->request->post['x'] ? $this->request->post['x'] : 0; $y = isset($this->request->post['y']) && $this->request->post['y'] ? $this->request->post['y'] : 0; $w = isset($this->request->post['w']) && $this->request->post['w'] ? $this->request->post['w'] : -1; $h = isset($this->request->post['h']) && $this->request->post['h'] ? $this->request->post['h'] : -1; $tmpkey = $params['key']; $maxSize = isset($this->request->post['maxSize']) ? $this->request->post['maxSize'] : 200; $app = new App($this->api->getUserId()); $addressBook = $app->getAddressBook($params['backend'], $params['addressBookId']); $contact = $addressBook->getChild($params['contactId']); $response = new JSONResponse(); if (!$contact) { return $response->bailOut(App::$l10n->t('Couldn\'t find contact.')); } $data = $this->server->getCache()->get($tmpkey); if (!$data) { return $response->bailOut(App::$l10n->t('Image has been removed from cache')); } $image = new \OCP\Image(); if (!$image->loadFromData($data)) { return $response->bailOut(App::$l10n->t('Error creating temporary image')); } $w = $w !== -1 ? $w : $image->width(); $h = $h !== -1 ? $h : $image->height(); if (!$image->crop($x, $y, $w, $h)) { return $response->bailOut(App::$l10n->t('Error cropping image')); } if ($image->width() < $maxSize || $image->height() < $maxSize) { if (!$image->resize(200)) { return $response->bailOut(App::$l10n->t('Error resizing image')); } } // For vCard 3.0 the type must be e.g. JPEG or PNG // For version 4.0 the full mimetype should be used. // https://tools.ietf.org/html/rfc2426#section-3.1.4 if (strval($contact->VERSION) === '4.0') { $type = $image->mimeType(); } else { $type = explode('/', $image->mimeType()); $type = strtoupper(array_pop($type)); } if (isset($contact->PHOTO)) { $property = $contact->PHOTO; if (!$property) { $this->server->getCache()->remove($tmpkey); return $response->bailOut(App::$l10n->t('Error getting PHOTO property.')); } $property->setValue(strval($image)); $property->parameters = array(); $property->parameters[] = new \Sabre\VObject\Parameter('ENCODING', 'b'); $property->parameters[] = new \Sabre\VObject\Parameter('TYPE', $image->mimeType()); $contact->PHOTO = $property; } else { $contact->add('PHOTO', strval($image), array('ENCODING' => 'b', 'TYPE' => $type)); // TODO: Fix this hack $contact->setSaved(false); } if (!$contact->save()) { return $response->bailOut(App::$l10n->t('Error saving contact.')); } $thumbnail = Properties::cacheThumbnail($params['backend'], $params['addressBookId'], $params['contactId'], $image); $response->setData(array('status' => 'success', 'data' => array('id' => $params['contactId'], 'thumbnail' => $thumbnail))); $this->server->getCache()->remove($tmpkey); return $response; }
public static function renderOutput($addrbookId, $grpId = 'all') { if ($grpId === 'all') { $contacts_alphabet = VCard::all($addrbookId, null, null, array(), true); } elseif ($grpId === 'fav') { $contacts_alphabet = VCard::allByFavourite(); } else { $contacts_alphabet = VCard::getCardsByGroups($addrbookId, $grpId, null, null, true); } $addressBookPerm = Addressbook::find($addrbookId); //Favourites $favorites = \OC::$server->getTagManager()->load(self::$appname)->getFavorites(); $aFavourites = array(); if (is_array($favorites)) { foreach ($favorites as $fav) { $aFavourites[$fav] = 1; } } $contacts = array(); $counterAlle = 0; $aLetter = []; if ($contacts_alphabet) { $oldLetter = ''; foreach ($contacts_alphabet as $contact) { try { $vcard = VObject\Reader::read($contact['carddata']); $details = VCard::structureContact($vcard); $imgBuild = ''; if ($vcard->PHOTO) { $image = new \OCP\Image(); $image->loadFromData((string) $vcard->PHOTO); $imgSrc = $image->__toString(); $imgBuild = 'data:' . $image->mimeType() . ';base64,' . $imgSrc; } $sLetter = strtoupper(mb_substr($contact['sortFullname'], 0, 1, "UTF-8")); if ($sLetter !== $oldLetter) { $aLetter[] = $sLetter; } //\OCP\Util::writeLog(self::$appname,'LETTER: '. $sLetter.':'.$contact['fullname'], \OCP\Util::DEBUG); $contacts[$sLetter][] = array('id' => $contact['id'], 'aid' => $contact['addressbookid'], 'letter' => $sLetter, 'photo' => $imgBuild, 'component' => $contact['component'], 'fullname' => $contact['fullname'], 'surename' => $contact['surename'], 'lastname' => $contact['lastname'], 'organization' => $contact['organization'], 'bcompany' => $contact['bcompany'], 'data' => $details); $oldLetter = $sLetter; $counterAlle++; } catch (Exception $e) { continue; } } $oldLetter = ''; $buildingOutput = '<ul>'; foreach ($aLetter as $letterInfo) { $bFound = false; $ContactsOutput = ''; if (isset($contacts[$letterInfo])) { foreach ($contacts[$letterInfo] as $contactInfo) { $bFound = true; $CONTACTDATA = $contactInfo['data']; $prepareOutput = self::renderSingleCard($CONTACTDATA, $contactInfo, $addressBookPerm, $aFavourites); $ContactsOutput .= '<li class="contactsrow visible">' . $prepareOutput . '</li>'; } } if ($bFound === true) { $buildingOutput .= '<li class="letter" data-scroll="' . $letterInfo . '"><span>' . $letterInfo . '</span></li>' . $ContactsOutput; } else { $buildingOutput .= '<li class="letter hidden" data-scroll="' . $letterInfo . '"><span>' . $letterInfo . '</span></li>'; } } $buildingOutput .= '<li><span class="noitem hidden">' . (string) self::$l10n->t('No Cards found!') . '</span></li>'; $buildingOutput .= '</ul>'; } else { $buildingOutput = '<ul>'; foreach ($aLetter as $letterInfo) { $buildingOutput .= '<li class="letter hidden" data-scroll="' . $letterInfo . '"><span>' . $letterInfo . '</span></li>'; } $buildingOutput .= '<li><span class="noitem">' . (string) self::$l10n->t('Add a new contact or import existing contacts from a file (VCF) per Drag & Drop.') . ' <i id="importAddrStart" title="' . (string) self::$l10n->t('Import addressbook per Drag & Drop') . '" class="toolTip ioc ioc-upload"></i></span></li>'; $buildingOutput .= '</ul>'; } return $buildingOutput; }
public static function renderOutput($addrbookId, $grpId = 'all') { if ($grpId === 'all') { $contacts_alphabet = VCard::all($addrbookId, null, null, array(), true); } elseif ($grpId === 'fav') { $contacts_alphabet = VCard::allByFavourite(); } else { $contacts_alphabet = VCard::getCardsByGroups($addrbookId, $grpId, null, null, true); } $addressBookPerm = Addressbook::find($addrbookId); //Favourites $favorites = \OC::$server->getTagManager()->load(self::$appname)->getFavorites(); $aFavourites = array(); if (is_array($favorites)) { foreach ($favorites as $fav) { $aFavourites[$fav] = 1; } } $contacts = array(); $counterAlle = 0; $aLetter = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); if ($contacts_alphabet) { foreach ($contacts_alphabet as $contact) { try { $vcard = VObject\Reader::read($contact['carddata']); $details = VCard::structureContact($vcard); $imgBuild = ''; if ($vcard->PHOTO) { $image = new \OCP\Image(); $image->loadFromData((string) $vcard->PHOTO); $imgSrc = $image->__toString(); $imgBuild = 'data:' . $image->mimeType() . ';base64,' . $imgSrc; } $sLetter = strtoupper(substr($contact['fullname'], 0, 1)); //\OCP\Util::writeLog(self::$appname,'LETTER: '. $sLetter.':'.$contact['fullname'], \OCP\Util::DEBUG); $contacts[$sLetter][] = array('id' => $contact['id'], 'aid' => $contact['addressbookid'], 'letter' => $sLetter, 'photo' => $imgBuild, 'component' => $contact['component'], 'fullname' => $contact['fullname'], 'surename' => $contact['surename'], 'lastname' => $contact['lastname'], 'data' => $details); $counterAlle++; } catch (Exception $e) { continue; } } $oldLetter = ''; $buildingOutput = '<ul>'; foreach ($aLetter as $letterInfo) { $bFound = false; $ContactsOutput = ''; if (isset($contacts[$letterInfo])) { foreach ($contacts[$letterInfo] as $contactInfo) { $bFound = true; $CONTACTDATA = $contactInfo['data']; $prepareOutput = self::renderSingleCard($CONTACTDATA, $contactInfo, $addressBookPerm, $aFavourites); $ContactsOutput .= '<li class="contactsrow">' . $prepareOutput . '</li>'; } } if ($bFound === true) { $buildingOutput .= '<li class="letter" data-scroll="' . $letterInfo . '"><span>' . $letterInfo . '</span></li>' . $ContactsOutput; } else { $buildingOutput .= '<li class="letter hidden" data-scroll="' . $letterInfo . '"><span>' . $letterInfo . '</span></li>'; } } $buildingOutput .= '</ul>'; } else { $buildingOutput = '<ul>'; foreach ($aLetter as $letterInfo) { $buildingOutput .= '<li class="letter hidden" data-scroll="' . $letterInfo . '"><span>' . $letterInfo . '</span></li>'; } $buildingOutput .= '<li><span class="noitem">' . (string) self::$l10n->t('No Cards found!') . '</span></li>'; $buildingOutput .= '</ul>'; } return $buildingOutput; }
/** * @NoAdminRequired */ public function getImageFromCloud() { $id = $this->params('id'); $path = $this->params('path'); $localpath = \OC\Files\Filesystem::getLocalFile($path); $tmpkey = 'editphoto'; $size = getimagesize($localpath, $info); //$exif = @exif_read_data($localpath); $image = new \OCP\Image(); $image->loadFromFile($localpath); $image->fixOrientation(); $imgMimeType = $image->mimeType(); \OC::$server->getCache()->remove($tmpkey); \OC::$server->getCache()->remove($tmpkey . 'ratio'); $originalWidth = $image->width(); if (\OC::$server->getCache()->set($tmpkey, $image->data(), 600)) { if ($image->width() > 400 || $image->height() > 400) { $image->resize(400); } $ratio = $originalWidth / $image->width(); if (\OC::$server->getCache()->set($tmpkey . 'ratio', $ratio, 600)) { $imgString = $image->__toString(); $resultData = array('id' => $id, 'tmp' => $tmpkey, 'imgdata' => $imgString, 'mimetype' => $imgMimeType); $response = new JSONResponse(); $response->setData($resultData); return $response; } } }
/** * @NoAdminRequired */ public function showContact($id) { $id = $this->params('id'); $vcard = ContactsApp::getContactVCard($id); $oldaddressbookid = VCard::getAddressbookid($id); $addressBookPerm = Addressbook::find($oldaddressbookid); $editInfoCard = VCard::structureContact($vcard); $TELTYPE = ContactsApp::getTypesOfProperty('TEL'); $EMAILTYPE = ContactsApp::getTypesOfProperty('EMAIL'); $URLTYPE = ContactsApp::getTypesOfProperty('URL'); $ADRTYPE = ContactsApp::getTypesOfProperty('ADR'); $IMTYPE = ContactsApp::getIMOptions(); $aDefNArray = array('0' => 'lname', '1' => 'fname', '2' => 'anrede', '3' => 'title'); $aN = ''; if (isset($editInfoCard['N'][0]['value']) && count($editInfoCard['N'][0]['value']) > 0) { foreach ($editInfoCard['N'][0]['value'] as $key => $val) { if ($val != '') { $aN[$aDefNArray[$key]] = $val; } } } //X-ABSHOWAS; $bShowCompany = false; if (isset($editInfoCard['ORG'][0]['SHOWAS']) && $editInfoCard['ORG'][0]['SHOWAS'] == 'COMPANY') { $bShowCompany = true; } $aOrgDef = array('0' => 'firm', '1' => 'department'); $aOrg = array(); if (isset($editInfoCard['ORG'][0]['value']) && count($editInfoCard['ORG'][0]['value']) > 0) { foreach ($editInfoCard['ORG'][0]['value'] as $key => $val) { if ($val != '') { $aOrg[$aOrgDef[$key]] = $val; } } } $sBday = ''; if (isset($editInfoCard['BDAY'][0]['value']) && !empty($editInfoCard['BDAY'][0]['value'])) { $sBday = $editInfoCard['BDAY'][0]['value']; $date = new \DateTime($sBday); $sBday = $date->format('d. M Y'); } $sNotice = ''; if (isset($editInfoCard['NOTE'][0]['value']) && !empty($editInfoCard['NOTE'][0]['value'])) { $sNotice = stripcslashes($editInfoCard['NOTE'][0]['value']); $sNotice = str_replace("\n", '<br />', $sNotice); } $sNickname = ''; if (isset($editInfoCard['NICKNAME'][0]['value']) && !empty($editInfoCard['NICKNAME'][0]['value'])) { $sNickname = $editInfoCard['NICKNAME'][0]['value']; } $sPosition = ''; if (isset($editInfoCard['TITLE'][0]['value']) && !empty($editInfoCard['TITLE'][0]['value'])) { $sPosition = $editInfoCard['TITLE'][0]['value']; } $aAddr = ''; if (array_key_exists('ADR', $editInfoCard)) { $aAddr = $this->getAddressInfo($editInfoCard['ADR'], $ADRTYPE); } $aTel = ''; if (array_key_exists('TEL', $editInfoCard)) { $aTel = $this->getPhoneInfo($editInfoCard['TEL'], $TELTYPE); } $aEmail = ''; if (array_key_exists('EMAIL', $editInfoCard)) { $aEmail = $this->getEmailInfo($editInfoCard['EMAIL'], $EMAILTYPE); } $aUrl = ''; if (array_key_exists('URL', $editInfoCard)) { $aUrl = $this->getUrlInfo($editInfoCard['URL'], $URLTYPE); } $aImpp = ''; if (array_key_exists('IMPP', $editInfoCard)) { $aImpp = $this->getImppInfo($editInfoCard['IMPP'], $IMTYPE); } $aCloud = ''; if (array_key_exists('CLOUD', $editInfoCard)) { $aCloud = $this->getCloudInfo($editInfoCard['CLOUD'], $ADRTYPE); } $bPhoto = 0; $imgSrc = ''; $imgMimeType = ''; $tmpkey = 'editphoto'; $thumb = '<div id="noimage" class="ioc ioc-user"></div>'; if (isset($vcard->PHOTO)) { $bPhoto = 1; $thumb = ''; $image = new \OCP\Image(); $image->loadFromData((string) $vcard->PHOTO); $imgSrc = $image->__toString(); $imgMimeType = $image->mimeType(); \OC::$server->getCache()->remove($tmpkey); \OC::$server->getCache()->set($tmpkey, $image->data(), 600); } $catOutput = ''; if (isset($editInfoCard['CATEGORIES'][0]['value']) && count($editInfoCard['CATEGORIES'][0]['value']) > 0) { foreach ($editInfoCard['CATEGORIES'] as $key => $catInfo) { if ($key == 'value') { $aCatInfo = explode(',', $catInfo['value']); foreach ($aCatInfo as $key => $val) { $backgroundColor = ContactsApp::genColorCodeFromText(trim($val), 80); $color = ContactsApp::generateTextColor($backgroundColor); $catOutput .= '<span class="colorgroup toolTip" data-category="' . $val . '" style="background-color:' . $backgroundColor . ';color:' . $color . ';" title="' . $val . '">' . mb_substr($val, 0, 1, "UTF-8") . '</span> '; } } } } $addressBookName = $addressBookPerm['displayname']; $maxUploadFilesize = \OCP\Util::maxUploadFilesize('/'); $params = ['id' => $id, 'tmpkey' => $tmpkey, 'oldaddressbookid' => $oldaddressbookid, 'addressbooksPerm' => $addressBookPerm, 'isPhoto' => $bPhoto, 'thumbnail' => $thumb, 'categories' => $catOutput, 'addressbookname' => $addressBookName, 'bShowCompany' => $bShowCompany, 'imgsrc' => $imgSrc, 'imgMimeType' => $imgMimeType, 'anrede' => isset($aN['title']) ? $aN['title'] : '', 'fname' => isset($aN['fname']) ? $aN['fname'] : '', 'lname' => isset($aN['lname']) ? $aN['lname'] : '', 'firm' => isset($aOrg['firm']) ? $aOrg['firm'] : '', 'department' => isset($aOrg['department']) ? $aOrg['department'] : '', 'uploadMaxHumanFilesize' => \OCP\Util::humanFileSize($maxUploadFilesize), 'aTel' => isset($aTel) ? $aTel : '', 'aEmail' => isset($aEmail) ? $aEmail : '', 'aAddr' => isset($aAddr) ? $aAddr : '', 'aUrl' => isset($aUrl) ? $aUrl : '', 'aImpp' => isset($aImpp) ? $aImpp : '', 'aCloud' => isset($aCloud) ? $aCloud : '', 'sBday' => isset($sBday) ? $sBday : '', 'nickname' => isset($sNickname) ? $sNickname : '', 'position' => isset($sPosition) ? $sPosition : '', 'sNotice' => isset($sNotice) ? $sNotice : '']; $response = new TemplateResponse($this->appName, 'contact.show', $params, ''); return $response; }
/** * @NoAdminRequired */ public function showContact() { $id = $this->params('id'); $vcard = ContactsApp::getContactVCard($id); $oldaddressbookid = VCard::getAddressbookid($id); $addressBookPerm = Addressbook::find($oldaddressbookid); $editInfoCard = VCard::structureContact($vcard); $TELTYPE = ContactsApp::getTypesOfProperty('TEL'); $EMAILTYPE = ContactsApp::getTypesOfProperty('EMAIL'); $URLTYPE = ContactsApp::getTypesOfProperty('URL'); $ADRTYPE = ContactsApp::getTypesOfProperty('ADR'); $aDefNArray = array('0' => 'lname', '1' => 'fname', '2' => 'anrede', '3' => 'title'); $aN = ''; if (isset($editInfoCard['N'][0]['value']) && count($editInfoCard['N'][0]['value']) > 0) { foreach ($editInfoCard['N'][0]['value'] as $key => $val) { if ($val != '') { $aN[$aDefNArray[$key]] = $val; } } } $aOrgDef = array('0' => 'firm', '1' => 'department'); $aOrg = array(); if (isset($editInfoCard['ORG'][0]['value']) && count($editInfoCard['ORG'][0]['value']) > 0) { foreach ($editInfoCard['ORG'][0]['value'] as $key => $val) { if ($val != '') { $aOrg[$aOrgDef[$key]] = $val; } } } $sBday = ''; if (isset($editInfoCard['BDAY'][0]['value']) && !empty($editInfoCard['BDAY'][0]['value'])) { $sBday = $editInfoCard['BDAY'][0]['value']; $date = new \DateTime($sBday); $sBday = $date->format('d. M Y'); } $sNotice = ''; if (isset($editInfoCard['NOTE'][0]['value']) && !empty($editInfoCard['NOTE'][0]['value'])) { $sNotice = $editInfoCard['NOTE'][0]['value']; } $sNickname = ''; if (isset($editInfoCard['NICKNAME'][0]['value']) && !empty($editInfoCard['NICKNAME'][0]['value'])) { $sNickname = $editInfoCard['NICKNAME'][0]['value']; } $sPosition = ''; if (isset($editInfoCard['TITLE'][0]['value']) && !empty($editInfoCard['TITLE'][0]['value'])) { $sPosition = $editInfoCard['TITLE'][0]['value']; } $aAddr = ''; if (array_key_exists('ADR', $editInfoCard)) { $aAddr = $this->getAddressInfo($editInfoCard['ADR'], $ADRTYPE); } $aTel = ''; if (array_key_exists('TEL', $editInfoCard)) { $aTel = $this->getPhoneInfo($editInfoCard['TEL'], $TELTYPE); } $aEmail = ''; if (array_key_exists('EMAIL', $editInfoCard)) { $aEmail = $this->getEmailInfo($editInfoCard['EMAIL'], $EMAILTYPE); } $aUrl = ''; if (array_key_exists('URL', $editInfoCard)) { $aUrl = $this->getUrlInfo($editInfoCard['URL'], $URLTYPE); } $bPhoto = 0; $imgSrc = ''; $imgMimeType = ''; $thumb = '<div id="noimage" class="ioc ioc-user"></div>'; if (isset($vcard->PHOTO)) { $bPhoto = 1; $thumb = ''; $image = new \OCP\Image(); $image->loadFromData((string) $vcard->PHOTO); $imgSrc = $image->__toString(); $imgMimeType = $image->mimeType(); \OC::$server->getCache()->set('show-contacts-foto-' . $id, $image->data(), 600); } $maxUploadFilesize = \OCP\Util::maxUploadFilesize('/'); $params = ['id' => $id, 'tmpkey' => 'show-contacts-foto-' . $id, 'oldaddressbookid' => $oldaddressbookid, 'addressbooksPerm' => $addressBookPerm, 'isPhoto' => $bPhoto, 'thumbnail' => $thumb, 'imgsrc' => $imgSrc, 'imgMimeType' => $imgMimeType, 'anrede' => isset($aN['title']) ? $aN['title'] : '', 'fname' => isset($aN['fname']) ? $aN['fname'] : '', 'lname' => isset($aN['lname']) ? $aN['lname'] : '', 'firm' => isset($aOrg['firm']) ? $aOrg['firm'] : '', 'department' => isset($aOrg['department']) ? $aOrg['department'] : '', 'uploadMaxHumanFilesize' => \OCP\Util::humanFileSize($maxUploadFilesize), 'aTel' => isset($aTel) ? $aTel : '', 'aEmail' => isset($aEmail) ? $aEmail : '', 'aAddr' => isset($aAddr) ? $aAddr : '', 'aUrl' => isset($aUrl) ? $aUrl : '', 'sBday' => isset($sBday) ? $sBday : '', 'nickname' => isset($sNickname) ? $sNickname : '', 'position' => isset($sPosition) ? $sPosition : '', 'sNotice' => isset($sNotice) ? $sNotice : '']; $response = new TemplateResponse($this->appName, 'contact.show', $params, ''); return $response; }