· 7 years ago · Apr 12, 2018, 04:16 PM
1
2function googleDrivePicker() {
3
4 var pickerApiLoaded = false;
5 var authApiLoaded = false;
6 var oauthToken;
7 var picker;
8 var authBtn = $("#picker");
9
10 loadPicker();
11
12 authBtn.click(function () {
13 pickData();
14 });
15
16 function loadPicker() {
17 gapi.load('auth', {callback: onAuthApiLoad});
18 gapi.load('picker', {callback: onPickerApiLoad});
19 }
20
21 function pickData() {
22 authBtn.button('loading');
23
24 if (!oauthToken) {
25 var options = {
26 client_id: window.google_client_id,
27 scope: [
28 'https://www.googleapis.com/auth/drive.file',
29 'https://www.googleapis.com/auth/drive.readonly'
30 ],
31 immediate: false
32 };
33
34 gapi.auth.authorize(options, function (authResult) {
35 if (authResult && !authResult.error) {
36 handleAuthResult(authResult);
37 }
38 });
39 } else {
40 createPicker();
41 }
42
43 setTimeout(function () {
44 authBtn.button('reset');
45 }, 1);
46 }
47
48 function onAuthApiLoad() {
49 authApiLoaded = true;
50 }
51
52 function onPickerApiLoad() {
53 pickerApiLoaded = true;
54 }
55
56 function handleAuthResult(authResult) {
57 if (authResult && !authResult.error) {
58 oauthToken = authResult.access_token;
59 createPicker();
60 }
61 }
62
63 // Create and render a Picker object for searching images.
64 function createPicker() {
65 if (pickerApiLoaded && authApiLoaded && oauthToken) {
66 //var view = new google.picker.View(google.picker.ViewId.DOCS);
67 var view = new google.picker.DocsView();
68 view.setIncludeFolders(true);
69 view.setMimeTypes(getMimes().join(','));
70
71 picker = new google.picker.PickerBuilder()
72 .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
73 .setOrigin(window.location.protocol + '//' + window.location.host)
74 .setOAuthToken(oauthToken)
75 .setMaxItems(100)
76 .addView(view)
77 .setTitle(getPickerTitle())
78 .setCallback(onPicked)
79 .build();
80
81 showPicker();
82 }
83 }
84
85
86 function getPickerTitle() {
87 var documentType = $("#DocumentUploadForm_type").val();
88 switch (parseInt(documentType)) {
89 case app.DOCUMENT.TYPE_SIMPLE_DOCUMENT:
90 return 'Select document';
91 case app.DOCUMENT.TYPE_PRESENTATION:
92 return 'Select deck';
93 case app.DOCUMENT.TYPE_VIDEO:
94 return 'Select video';
95 case app.DOCUMENT.TYPE_IMAGE:
96 return 'Select creative';
97 }
98 }
99
100 function getMimes() {
101 var documentType = $("#DocumentUploadForm_type").val();
102 documentType = parseInt(documentType);
103 if (typeof allowedMimes[documentType] !== 'undefined') {
104 return allowedMimes[documentType];
105 } else {
106 return [];
107 }
108 }
109
110
111 function onPicked(data) {
112 if (data.action == google.picker.Action.PICKED) {
113 $.each(data.docs, function (index, file) {
114 gapi.client.load('drive', 'v2', function () {
115 var request = gapi.client.drive.files.get({
116 fileId: file.id
117 });
118
119 request.execute(function (resp) {
120 googleDrivePicked(resp, oauthToken);
121 });
122 });
123 });
124 }
125 }
126
127 function showPicker() {
128 picker.setVisible(true);
129 $("#picker").button('reset');
130 }
131
132 /**
133 * Callback for google drive picker
134 * @param data
135 */
136 function googleDrivePicked(file, oauthToken) {
137
138 setDocumentError(null);
139 $('.file-pickers').addClass('disabled');
140
141
142 var exportMimes = [];
143 if (typeof file.exportLinks !== 'undefined') {
144 exportMimes = Object.keys(file.exportLinks);
145 }
146
147 $.ajax({
148 url: "/document-s3/upload-from-gd",
149 type: 'POST',
150 dataType: 'json',
151 //async: true,
152 data: {
153 file_id: file.id,
154 access_token: oauthToken,
155 export_mimes: exportMimes
156 },
157 success: function (s3Document) {
158 $('#progressBlock').hide();
159
160 if ('undefined' !== typeof s3Document && s3Document.error) {
161 $('.file-pickers').removeClass('disabled');
162 setDocumentError(s3Document.error);
163 return;
164 } else {
165
166 addFileItem({
167 guid: stringHelper.guid(),
168 name: s3Document.name,
169 document_s3_id: s3Document.id
170 });
171 }
172 }
173 });
174 }
175}