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; }
/** * 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); }