github.com/elliott5/community@v0.14.1-0.20160709191136-823126fb026a/sdk/pages.go (about) 1 // Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved. 2 // 3 // This software (Documize Community Edition) is licensed under 4 // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html 5 // 6 // You can operate outside the AGPL restrictions by purchasing 7 // Documize Enterprise Edition and obtaining a commercial license 8 // by contacting <sales@documize.com>. 9 // 10 // https://documize.com 11 12 package documize 13 14 import ( 15 "bytes" 16 "encoding/json" 17 "errors" 18 "io/ioutil" 19 "net/http" 20 "strings" 21 22 "github.com/documize/community/documize/api/endpoint/models" 23 "github.com/documize/community/documize/api/entity" 24 ) 25 26 // GetDocumentPages returns all the pages in a document. 27 func (c *Client) GetDocumentPages(documentID string) ([]entity.Page, error) { 28 req, err := http.NewRequest("GET", c.BaseURL+"/api/documents/"+documentID+"/pages", nil) 29 if err != nil { 30 return nil, err 31 } 32 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 33 resp, err := c.Client.Do(req) 34 if err != nil { 35 return nil, err 36 } 37 defer resp.Body.Close() // ignore error 38 pages := make([]entity.Page, 0, 12) 39 dec := json.NewDecoder(resp.Body) 40 err = dec.Decode(&pages) 41 if err != nil { 42 return nil, err 43 } 44 return pages, nil 45 } 46 47 // GetDocumentPagesBatch returns those pages in a document whose RefIDs are in a comma-separated list. 48 func (c *Client) GetDocumentPagesBatch(documentID, pageIDlist string) ([]entity.Page, error) { 49 50 req, err := http.NewRequest("POST", c.BaseURL+"/api/documents/"+documentID+"/pages/batch", strings.NewReader(pageIDlist)) 51 if err != nil { 52 return nil, err 53 } 54 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 55 resp, err := c.Client.Do(req) 56 if err != nil { 57 return nil, err 58 } 59 defer resp.Body.Close() // ignore error 60 pages := make([]entity.Page, 0, 12) 61 dec := json.NewDecoder(resp.Body) 62 err = dec.Decode(&pages) 63 if err != nil { 64 return nil, err 65 } 66 return pages, nil 67 } 68 69 // AddDocumentPage adds the given page into the indicated document. 70 func (c *Client) AddDocumentPage(documentID string, pg *entity.Page) (*entity.Page, error) { 71 72 pageJSON, err := json.Marshal(pg) 73 if err != nil { 74 return nil, err 75 } 76 77 req, err := http.NewRequest("POST", c.BaseURL+"/api/documents/"+documentID+"/pages", bytes.NewReader(pageJSON)) 78 if err != nil { 79 return nil, err 80 } 81 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 82 resp, err := c.Client.Do(req) 83 if err != nil { 84 return nil, err 85 } 86 defer resp.Body.Close() // ignore error 87 var page entity.Page 88 dec := json.NewDecoder(resp.Body) 89 err = dec.Decode(&page) 90 if err != nil { 91 return nil, err 92 } 93 return &page, nil 94 } 95 96 // DeleteDocumentPage deletes the given page from the indicated document. 97 func (c *Client) DeleteDocumentPage(documentID, pageID string) error { 98 req, err := http.NewRequest("DELETE", c.BaseURL+"/api/documents/"+documentID+"/pages/"+pageID, nil) 99 if err != nil { 100 return err 101 } 102 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 103 resp, err := c.Client.Do(req) 104 if err != nil { 105 return err 106 } 107 defer resp.Body.Close() // ignore error 108 res, err := ioutil.ReadAll(resp.Body) 109 if err != nil { 110 return err 111 } 112 if isError(string(res)) { 113 return errors.New(trimErrors(string(res))) 114 } 115 return nil 116 } 117 118 // DeleteDocumentPages deletes the given pageIDs in a slice from the indicated document. 119 func (c *Client) DeleteDocumentPages(documentID string, pageIDlist []string) error { 120 model := make([]models.PageLevelRequestModel, len(pageIDlist)) 121 for k := range pageIDlist { 122 model[k].PageID = pageIDlist[k] 123 } 124 modelJSON, err := json.Marshal(&model) 125 if err != nil { 126 return err 127 } 128 req, err := http.NewRequest("POST", c.BaseURL+"/api/documents/"+documentID+"/pages/unused", bytes.NewReader(modelJSON)) 129 if err != nil { 130 return err 131 } 132 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 133 resp, err := c.Client.Do(req) 134 if err != nil { 135 return err 136 } 137 defer resp.Body.Close() // ignore error 138 res, err := ioutil.ReadAll(resp.Body) 139 if err != nil { 140 return err 141 } 142 if isError(string(res)) { 143 return errors.New(trimErrors(string(res))) 144 } 145 return nil 146 } 147 148 // UpdateDocumentPage updates the given page from the indicated document. 149 func (c *Client) UpdateDocumentPage(pg *entity.Page) error { 150 pgJSON, err := json.Marshal(pg) 151 if err != nil { 152 return err 153 } 154 req, err := http.NewRequest("PUT", c.BaseURL+"/api/documents/"+pg.DocumentID+"/pages/"+pg.RefID, bytes.NewReader(pgJSON)) 155 if err != nil { 156 return err 157 } 158 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 159 resp, err := c.Client.Do(req) 160 if err != nil { 161 return err 162 } 163 defer resp.Body.Close() // ignore error 164 res, err := ioutil.ReadAll(resp.Body) 165 if err != nil { 166 return err 167 } 168 if isError(string(res)) { 169 return errors.New(trimErrors(string(res))) 170 } 171 return nil 172 } 173 174 // GetDocumentPageRevisions returns all the previous versions of a given page in a document. 175 func (c *Client) GetDocumentPageRevisions(documentID, pageID string) ([]entity.Revision, error) { 176 req, err := http.NewRequest("GET", c.BaseURL+"/api/documents/"+documentID+"/pages/"+pageID+"/revisions", nil) 177 if err != nil { 178 return nil, err 179 } 180 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 181 resp, err := c.Client.Do(req) 182 if err != nil { 183 return nil, err 184 } 185 defer resp.Body.Close() // ignore error 186 revs := make([]entity.Revision, 0, 3) 187 dec := json.NewDecoder(resp.Body) 188 err = dec.Decode(&revs) 189 if err != nil { 190 return nil, err 191 } 192 return revs, nil 193 } 194 195 // GetDocumentPageDiff returns html showing the difference between the given page revision and the current version of 196 // a given page in a document. 197 func (c *Client) GetDocumentPageDiff(documentID, pageID, revID string) ([]byte, error) { 198 req, err := http.NewRequest("GET", c.BaseURL+"/api/documents/"+documentID+"/pages/"+pageID+"/revisions/"+revID, nil) 199 if err != nil { 200 return nil, err 201 } 202 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 203 resp, err := c.Client.Do(req) 204 if err != nil { 205 return nil, err 206 } 207 defer resp.Body.Close() // ignore error 208 diff, err := ioutil.ReadAll(resp.Body) 209 if err != nil { 210 return nil, err 211 } 212 return diff, nil 213 } 214 215 // RollbackDocumentPage reverts the given document page back to the chosen revision. 216 func (c *Client) RollbackDocumentPage(documentID, pageID, revID string) error { 217 req, err := http.NewRequest("POST", c.BaseURL+"/api/documents/"+documentID+"/pages/"+pageID+"/revisions/"+revID, nil) 218 if err != nil { 219 return err 220 } 221 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 222 resp, err := c.Client.Do(req) 223 if err != nil { 224 return err 225 } 226 defer resp.Body.Close() // ignore error 227 diff, err := ioutil.ReadAll(resp.Body) 228 if err != nil { 229 return err 230 } 231 if isError(string(diff)) { 232 return errors.New(trimErrors(string(diff))) 233 } 234 return nil 235 } 236 237 // ChangeDocumentPageLevel sets the levels of the pages in the PageLevelRequestModel for the given document. 238 func (c *Client) ChangeDocumentPageLevel(documentID string, plrm *[]models.PageLevelRequestModel) error { 239 b, err := json.Marshal(plrm) 240 if err != nil { 241 return err 242 } 243 req, err := http.NewRequest("POST", c.BaseURL+"/api/documents/"+documentID+"/pages/level", bytes.NewReader(b)) 244 if err != nil { 245 return err 246 } 247 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 248 resp, err := c.Client.Do(req) 249 if err != nil { 250 return err 251 } 252 defer resp.Body.Close() // ignore error 253 diff, err := ioutil.ReadAll(resp.Body) 254 if err != nil { 255 return err 256 } 257 if isError(string(diff)) { 258 return errors.New(trimErrors(string(diff))) 259 } 260 return nil 261 } 262 263 // ChangeDocumentPageSequence sets the sequences of the pages in the PageSequenceRequestModel for the given document. 264 func (c *Client) ChangeDocumentPageSequence(documentID string, psrm *[]models.PageSequenceRequestModel) error { 265 b, err := json.Marshal(psrm) 266 if err != nil { 267 return err 268 } 269 req, err := http.NewRequest("POST", c.BaseURL+"/api/documents/"+documentID+"/pages/sequence", bytes.NewReader(b)) 270 if err != nil { 271 return err 272 } 273 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 274 resp, err := c.Client.Do(req) 275 if err != nil { 276 return err 277 } 278 defer resp.Body.Close() // ignore error 279 diff, err := ioutil.ReadAll(resp.Body) 280 if err != nil { 281 return err 282 } 283 if isError(string(diff)) { 284 return errors.New(trimErrors(string(diff))) 285 } 286 return nil 287 }