Exemplo n.º 1
0
 public static function GetOembedFileInfo($sUrl)
 {
     $mResult = false;
     $sOembedUrl = '';
     if (false !== strpos($sUrl, 'youtube.com') || false !== strpos($sUrl, 'youtu.be')) {
         $sOembedUrl = 'https://youtube.com/oembed?format=json&url=' . $sUrl;
     } else {
         if (false !== strpos($sUrl, 'vimeo.com')) {
             $sOembedUrl = 'https://vimeo.com/api/oembed.json?format=json&url=' . $sUrl;
         } else {
             if (false !== strpos($sUrl, 'soundcloud.com')) {
                 $sOembedUrl = 'https://soundcloud.com/oembed?format=json&url=' . $sUrl;
             }
         }
     }
     if (strlen($sOembedUrl) > 0) {
         $oCurl = curl_init();
         \curl_setopt_array($oCurl, array(CURLOPT_URL => $sOembedUrl, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => 1, CURLOPT_FOLLOWLOCATION => true, CURLOPT_ENCODING => '', CURLOPT_AUTOREFERER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_CONNECTTIMEOUT => 5, CURLOPT_TIMEOUT => 5, CURLOPT_MAXREDIRS => 5));
         $sResult = curl_exec($oCurl);
         curl_close($oCurl);
         $oResult = json_decode($sResult);
         if ($oResult) {
             $sSearch = $oResult->html;
             $aPatterns = array('/ width="\\d+."/', '/ height="\\d+."/', '/(src="[^\\"]+)/');
             $aResults = array(' width="896"', ' height="504"', '$1?&autoplay=1&auto_play=true');
             $oResult->html = preg_replace($aPatterns, $aResults, $sSearch);
             $aRemoteFileInfo = \api_Utils::GetRemoteFileInfo($sUrl);
             $oResult->fileSize = $aRemoteFileInfo['size'];
             $oResult->thumbnailLink = $oResult->thumbnail_url;
             $mResult = $oResult;
         }
     }
     return $mResult;
 }
Exemplo n.º 2
0
 public function GetFiles($oAccount, $sType = \EFileStorageTypeStr::Personal, $sPath = '', $sPattern = '')
 {
     $oDirectory = null;
     $aItems = array();
     $aResult = array();
     $oMin = $this->GetMinManager();
     if ($oAccount && $this->Init($oAccount)) {
         $oTenant = null;
         $oApiTenants = \CApi::Manager('tenants');
         if ($oApiTenants) {
             $oTenant = 0 < $oAccount->IdTenant ? $oApiTenants->GetTenantById($oAccount->IdTenant) : $oApiTenants->GetDefaultGlobalTenant();
         }
         $sRootPath = $this->getRootPath($oAccount, $sType, true);
         $oDirectory = $this->getDirectory($oAccount, $sType, $sPath);
         if ($oDirectory !== null) {
             if (!empty($sPattern) || is_numeric($sPattern)) {
                 $aItems = $oDirectory->Search($sPattern);
                 $aDirectoryInfo = $oDirectory->getChildrenProperties();
                 foreach ($aDirectoryInfo as $oDirectoryInfo) {
                     if (isset($oDirectoryInfo['Link']) && strpos($oDirectoryInfo['Name'], $sPattern) !== false) {
                         $aItems[] = new \afterlogic\DAV\FS\File($oDirectory->getPath() . '/' . $oDirectoryInfo['@Name']);
                     }
                 }
             } else {
                 $aItems = $oDirectory->getChildren();
             }
             $iThumbnailLimit = 1024 * 1024 * 2;
             // 2MB
             foreach ($aItems as $oValue) {
                 $sFilePath = str_replace($sRootPath, '', dirname($oValue->getPath()));
                 $aProps = $oValue->getProperties(array('Owner', 'Shared', 'Name', 'Link', 'LinkType'));
                 $oItem = new \CFileStorageItem();
                 $oItem->Type = $sType;
                 $oItem->TypeStr = $sType;
                 $oItem->Path = $sFilePath;
                 $oItem->Name = $oValue->getName();
                 $oItem->Id = $oValue->getName();
                 $oItem->FullPath = $oItem->Name !== '' ? $oItem->Path . '/' . $oItem->Name : $oItem->Path;
                 $sID = '';
                 if ($oValue instanceof \afterlogic\DAV\FS\Directory) {
                     $sID = $this->GenerateShareHash($oAccount, $sType, $sFilePath, $oValue->getName());
                     $oItem->IsFolder = true;
                 }
                 if ($oValue instanceof \afterlogic\DAV\FS\File) {
                     $sID = $this->GenerateShareHash($oAccount, $sType, $sFilePath, $oValue->getName());
                     $oItem->IsFolder = false;
                     $oItem->Size = $oValue->getSize();
                     $oFileInfo = null;
                     if (isset($aProps['Link'])) {
                         $oItem->IsLink = true;
                         $iLinkType = api_Utils::GetLinkType($aProps['Link']);
                         $oItem->LinkType = $iLinkType;
                         $oItem->LinkUrl = $aProps['Link'];
                         if (isset($iLinkType) && $oTenant) {
                             if (\EFileStorageLinkType::GoogleDrive === $iLinkType) {
                                 $oSocial = $oTenant->GetSocialByName('google');
                                 if ($oSocial) {
                                     $oFileInfo = \api_Utils::GetGoogleDriveFileInfo($aProps['Link'], $oSocial->SocialApiKey);
                                     if ($oFileInfo) {
                                         $oItem->Name = isset($oFileInfo->title) ? $oFileInfo->title : $oItem->Name;
                                         $oItem->Size = isset($oFileInfo->fileSize) ? $oFileInfo->fileSize : $oItem->Size;
                                     }
                                 }
                             } else {
                                 if (\EFileStorageLinkType::DropBox === $iLinkType) {
                                     $aProps['Link'] = str_replace('www.dropbox.com', 'dl.dropboxusercontent.com', $aProps['Link']);
                                 }
                                 $oItem->Name = isset($aProps['Name']) ? $aProps['Name'] : basename($aProps['Link']);
                                 $aRemoteFileInfo = \api_Utils::GetRemoteFileInfo($aProps['Link']);
                                 $oItem->Size = $aRemoteFileInfo['size'];
                             }
                         }
                     } else {
                         $oItem->IsLink = false;
                     }
                     $oItem->LastModified = $oValue->getLastModified();
                     $oItem->ContentType = $oValue->getContentType();
                     if (!$oItem->ContentType) {
                         $oItem->ContentType = \api_Utils::MimeContentType($oItem->Name);
                     }
                     if (\CApi::GetConf('labs.allow-thumbnail', true)) {
                         if ($oItem->IsLink && $oItem->LinkType === \EFileStorageLinkType::GoogleDrive && isset($oFileInfo) && isset($oFileInfo->thumbnailLink)) {
                             $oItem->Thumb = true;
                             $oItem->ThumbnailLink = $oFileInfo->thumbnailLink;
                         } else {
                             $oItem->Thumb = $oItem->Size < $iThumbnailLimit && \api_Utils::IsGDImageMimeTypeSuppoted($oItem->ContentType, $oItem->Name);
                         }
                     }
                     $oItem->Iframed = !$oItem->IsFolder && !$oItem->IsLink && \CApi::isIframedMimeTypeSupported($oItem->ContentType, $oItem->Name);
                     $oItem->Hash = \CApi::EncodeKeyValues(array('Type' => $sType, 'Path' => $sFilePath, 'Name' => $oValue->getName(), 'FileName' => $oValue->getName(), 'MimeType' => $oItem->ContentType, 'Size' => $oValue->getSize(), 'Iframed' => $oItem->Iframed));
                 }
                 $mMin = $oMin->GetMinByID($sID);
                 $oItem->Shared = isset($aProps['Shared']) ? $aProps['Shared'] : empty($mMin['__hash__']) ? false : true;
                 $oItem->Owner = isset($aProps['Owner']) ? $aProps['Owner'] : $oAccount->Email;
                 if ($oItem && '.asc' === \strtolower(\substr(\trim($oItem->Name), -4))) {
                     $mResult = $this->GetFile($oAccount, $oItem->Type, $oItem->Path, $oItem->Name);
                     if (is_resource($mResult)) {
                         $oItem->Content = stream_get_contents($mResult);
                     }
                 }
                 $aResult[] = $oItem;
             }
         }
     }
     return $aResult;
 }
Exemplo n.º 3
0
 /**
  * @return array
  */
 public function AjaxFilesUpload()
 {
     $oAccount = $this->getDefaultAccountFromParam();
     $oTenant = null;
     if ($this->oApiTenants) {
         $oTenant = 0 < $oAccount->IdTenant ? $this->oApiTenants->getTenantById($oAccount->IdTenant) : $this->oApiTenants->getDefaultGlobalTenant();
     }
     $mResult = false;
     if ($this->oApiCapability->isFilesSupported($oAccount) && $oTenant) {
         $aFiles = $this->getParamValue('Hashes', null);
         if (is_array($aFiles) && 0 < count($aFiles)) {
             $mResult = array();
             foreach ($aFiles as $sHash) {
                 $aData = \CApi::DecodeKeyValues($sHash);
                 if (\is_array($aData) && 0 < \count($aData)) {
                     $oFileInfo = $this->oApiFilestorage->getFileInfo($oAccount, $aData['Type'], $aData['Path'], $aData['Name']);
                     $rFile = null;
                     if ($oFileInfo->IsLink) {
                         if (\EFileStorageLinkType::GoogleDrive === $oFileInfo->LinkType) {
                             $oSocial = $oTenant->getSocialByName('google');
                             if ($oSocial) {
                                 $oInfo = \api_Utils::GetGoogleDriveFileInfo($oFileInfo->LinkUrl, $oSocial->SocialApiKey);
                                 $aData['Name'] = isset($oInfo->title) ? $oInfo->title : $aData['Name'];
                                 $aData['Size'] = isset($oInfo->fileSize) ? $oInfo->fileSize : $aData['Size'];
                                 if (isset($oInfo->downloadUrl)) {
                                     $rFile = \MailSo\Base\ResourceRegistry::CreateMemoryResource();
                                     $this->oHttp->SaveUrlToFile($oInfo->downloadUrl, $rFile);
                                     rewind($rFile);
                                 }
                             }
                         } else {
                             $rFile = \MailSo\Base\ResourceRegistry::CreateMemoryResource();
                             $aData['Name'] = basename($oFileInfo->LinkUrl);
                             $aRemoteFileInfo = \api_Utils::GetRemoteFileInfo($oFileInfo->LinkUrl);
                             $aData['Size'] = $aRemoteFileInfo['size'];
                             $this->oHttp->SaveUrlToFile($oFileInfo->LinkUrl, $rFile);
                             rewind($rFile);
                         }
                     } else {
                         $rFile = $this->oApiFilestorage->getFile($oAccount, $aData['Type'], $aData['Path'], $aData['Name']);
                     }
                     $sTempName = md5('Files/Tmp/' . $aData['Type'] . $aData['Path'] . $aData['Name'] . microtime(true) . rand(1000, 9999));
                     if (is_resource($rFile) && $this->ApiFileCache()->putFile($oAccount, $sTempName, $rFile)) {
                         $aItem = array('Name' => $oFileInfo->Name, 'TempName' => $sTempName, 'Size' => (int) $aData['Size'], 'Hash' => $sHash, 'MimeType' => '');
                         $aItem['MimeType'] = \MailSo\Base\Utils::MimeContentType($aItem['Name']);
                         $aItem['NewHash'] = \CApi::EncodeKeyValues(array('TempFile' => true, 'AccountID' => $oAccount->IdAccount, 'Name' => $aItem['Name'], 'TempName' => $sTempName));
                         $mResult[] = $aItem;
                         if (is_resource($rFile)) {
                             @fclose($rFile);
                         }
                     }
                 }
             }
         } else {
             throw new \ProjectCore\Exceptions\ClientException(\ProjectCore\Notifications::InvalidInputParameter);
         }
     } else {
         throw new \ProjectCore\Exceptions\ClientException(\ProjectCore\Notifications::FilesNotAllowed);
     }
     return $this->DefaultResponse($oAccount, __FUNCTION__, $mResult);
 }
Exemplo n.º 4
0
 public static function PopulateGoogleDriveFileInfo(&$oFileInfo)
 {
     if (!isset($oFileInfo->downloadUrl)) {
         switch ($oFileInfo->mimeType) {
             case 'application/vnd.google-apps.document':
                 $oFileInfo->downloadUrl = $oFileInfo->exportLinks->{'application/vnd.openxmlformats-officedocument.wordprocessingml.document'};
                 $oFileInfo->title = $oFileInfo->title . '.docx';
                 break;
             case 'application/vnd.google-apps.spreadsheet':
                 $oFileInfo->downloadUrl = $oFileInfo->exportLinks->{'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'};
                 $oFileInfo->title = $oFileInfo->title . '.xlsx';
                 break;
             case 'application/vnd.google-apps.drawing':
                 $oFileInfo->downloadUrl = $oFileInfo->exportLinks->{'image/png'};
                 $oFileInfo->title = $oFileInfo->title . '.png';
                 break;
             case 'application/vnd.google-apps.presentation':
                 $oFileInfo->downloadUrl = $oFileInfo->exportLinks->{'application/vnd.openxmlformats-officedocument.presentationml.presentation'};
                 $oFileInfo->title = $oFileInfo->title . '.pptx';
                 break;
             default:
                 $oFileInfo->downloadUrl = $oFileInfo->exportLinks->{'application/pdf'};
                 $oFileInfo->title = $oFileInfo->title . '.pdf';
                 break;
         }
         if (!isset($oFileInfo->fileSize)) {
             $aRemoteFileInfo = \api_Utils::GetRemoteFileInfo($oFileInfo->downloadUrl);
             $oFileInfo->fileSize = $aRemoteFileInfo['size'];
         }
     }
 }