예제 #1
0
 public function createLink(UseyourDrive_Node $cachedentry = null, $shorten = true)
 {
     $link = false;
     $error = false;
     if ($cachedentry === null) {
         /* Check if file is cached and still valid */
         $cached = $this->cache->isCached($this->_requestedEntry);
         /* Get the file if not cached */
         if ($cached === false) {
             $cachedentry = $this->getEntry($this->_requestedEntry);
         } else {
             $cachedentry = $cached;
         }
     }
     if ($cachedentry !== null && $cachedentry !== false) {
         $entry = $cachedentry->getItem();
         /* Check file permission */
         $has_permission = false;
         $permissions = $entry->getPermissions();
         $permission_type = $this->settings['permission_domain'] === '' ? 'anyone' : 'domain';
         $permission_value = $this->settings['permission_domain'] === '' ? '' : $this->settings['permission_domain'];
         if (count($entry->getPermissions()) > 0) {
             if ($this->settings['manage_permissions'] === 'Yes') {
                 foreach ($entry->getPermissions() as $permission) {
                     if ($permission->getType() === $permission_type && in_array($permission->getRole(), array('reader', 'writer')) && $permission->getValue() === $permission_value && $permission->getWithLink()) {
                         $has_permission = true;
                         $shareable = true;
                         break;
                     }
                 }
             } else {
                 $shareable = true;
             }
         }
         /* Set new permission if needed */
         if ($has_permission === false && $this->settings['manage_permissions'] === 'Yes') {
             $newPermission = new Google_Service_Drive_Permission();
             $newPermission->setType($permission_type);
             $newPermission->setRole("reader");
             $newPermission->setValue($permission_value);
             $newPermission->setWithLink(true);
             try {
                 $permission = $this->googleDriveService->permissions->insert($entry->getId(), $newPermission);
                 $cachedentry = $this->getEntry($this->_requestedEntry, true);
                 $entry = $cachedentry->getItem();
                 $shareable = true;
             } catch (Exception $e) {
                 $shareable = false;
             }
         }
         $linkurl = $entry->getWebContentLink();
         if ($shareable) {
             $linkurl = $entry->getAlternateLink();
             if (strpos($entry->getMimeType(), 'video') !== false || strpos($entry->getMimeType(), 'audio') !== false) {
                 $embedlink = $entry->getEmbedLink();
                 if (!empty($embedlink)) {
                     $linkurl = 'https://docs.google.com/file/d/' . $entry->getId() . '/preview';
                 }
             }
         }
         if (!empty($linkurl)) {
             if ($shorten) {
                 $url = new Google_Service_Urlshortener_Url();
                 $url->longUrl = $linkurl;
                 $url = $this->googleUrlshortenerService->url->insert($url, array("userIp" => $this->userip));
                 $link = $url->getId();
             } else {
                 $link = $linkurl;
             }
         } else {
             $error = __("Can't create link", 'useyourdrive');
         }
     }
     $embedlink = $entry->getEmbedLink();
     if (empty($embedlink)) {
         $embedlink = 'https://docs.google.com/viewer?srcid=' . $entry->getId() . '&pid=explorer&embedded=true';
         /* As of 12 November 2014, the Google Doc viewer doesn't display PDF files anymore */
         if (strpos($entry->getMimeType(), 'application/pdf') !== false) {
             $embedlink = 'https://docs.google.com/file/d/' . $entry->getId() . '/preview';
             /* Powerpoints can't be showed embedded */
         } elseif (strpos($entry->getMimeType(), 'google-apps.presentation') !== false) {
             $embedlink = 'https://docs.google.com/presentation/d/' . $entry->getId() . '/preview';
         }
     } else {
         if (strpos($entry->getMimeType(), 'application/vnd.google-apps') === false) {
             $embedlink = 'https://docs.google.com/file/d/' . $entry->getId() . '/preview';
             /* Powerpoints can't be showed embedded */
         } elseif (strpos($entry->getMimeType(), 'google-apps.presentation') !== false) {
         } else {
             $embedlink = $entry->getAlternateLink();
             $embedlink = str_replace('http://', 'https://', $embedlink);
         }
     }
     $resultdata = array('id' => $entry->getId(), 'name' => $entry->getTitle(), 'link' => $link, 'embeddedlink' => $embedlink, 'size' => UseyourDrive_bytesToSize1024($entry->getFileSize()), 'error' => $error);
     return $resultdata;
 }
예제 #2
0
 /**
  * Set Google Doc to share with anyone.
  *
  * @link https://developers.google.com/drive/web/manage-sharing
  * @link https://developers.google.com/drive/v2/reference/permissions
  * @link http://stackoverflow.com/questions/11155441/set-file-sharing-level-to-anyone-with-the-link-through-google-drive-api
  *
  * @param Google_Service_Drive $service Drive API service instance.
  * @param string               $file_id File ID for Google Drive document.
  */
 protected function share_doc_with_anyone(Google_Service_Drive $service, $file_id)
 {
     $new_perm = new Google_Service_Drive_Permission();
     $new_perm->setRole('reader');
     $new_perm->setType('anyone');
     // unsure about this...
     $new_perm->setWithLink(true);
     // either id or value can be set; not both
     //$new_perm->setId( 'anyoneWithLink' );
     $new_perm->setValue('');
     // insert the permission
     $service->permissions->insert($file_id, $new_perm);
 }