File Coverage

blib/lib/Etherpad.pm
Criterion Covered Total %
statement 15 450 3.3
branch 0 166 0.0
condition 0 3 0.0
subroutine 5 56 8.9
pod 50 50 100.0
total 70 725 9.6


line stmt bran cond sub pod time code
1             # vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
2             package Etherpad;
3             # ABSTRACT: interact with Etherpad API
4              
5 2     2   110928 use Mojo::Base -base;
  2         305746  
  2         13  
6 2     2   1364 use Mojo::UserAgent;
  2         405726  
  2         16  
7 2     2   70 use Mojo::IOLoop;
  2         4  
  2         11  
8 2     2   43 use Data::Dumper;
  2         3  
  2         89  
9 2     2   9 use Carp qw(carp);
  2         3  
  2         8860  
10              
11             has 'url';
12             has 'apikey';
13             has 'user';
14             has 'password';
15             has 'proxy';
16             has 'ua' => sub { Mojo::UserAgent->new; };
17              
18             our $VERSION = '1.2.13.1';
19              
20              
21             sub _execute {
22 0     0     my $c = shift;
23 0           my $args = shift;
24              
25 0 0         if (defined $c->proxy) {
26 0 0         if ($c->proxy->{detect}) {
27 0           $c->ua->proxy->detect;
28             } else {
29 0 0         $c->ua->proxy->http($c->proxy->{http}) if defined $c->proxy->{http};
30 0 0         $c->ua->proxy->http($c->proxy->{https}) if defined $c->proxy->{https};
31             }
32             }
33              
34 0           my $url = Mojo::URL->new($c->url);
35 0 0 0       $url->userinfo($c->user.':'.$c->password) if defined $c->user && defined $c->password;
36              
37 0           my $path = $url->path;
38 0           $path =~ s#/$##;
39 0           $url->path($path.'/api/'.$args->{api}.'/'.$args->{method});
40              
41 0           $args->{args}->{apikey} = $c->apikey;
42              
43 0           my $tx = $c->ua->get($url => form => $args->{args});
44 0           my $res = $tx->result;
45 0 0         if ($res->is_success) {
46 0           my $json = $res->json;
47 0 0         if ($json->{code} == 0) {
48 0 0         return 1 if $args->{boolean};
49 0           my $data;
50 0 0         if (defined $args->{key}) {
51 0 0         $data = (ref($json->{data}) eq 'HASH') ? $json->{data}->{$args->{key}} : $json->{data};
52             } else {
53 0           $data = $json->{data};
54             }
55              
56 0 0         return (wantarray) ? @{$data}: $data if ref($data) eq 'ARRAY';
  0 0          
57 0           return $data;
58             } else {
59 0           carp $json->{message};
60 0           return undef;
61             }
62             } else {
63 0           carp Dumper $res->message;
64 0           return undef;
65             }
66             }
67              
68              
69             #################################################################
70             #################################################################
71              
72             #################### subroutine header begin ####################
73              
74              
75             #################### subroutine header end ####################
76              
77              
78             sub create_group {
79 0     0 1   my $c = shift;
80              
81 0           return $c->_execute({
82             api => 1,
83             method => 'createGroup',
84             key => 'groupID'
85             });
86             }
87              
88              
89             #################### subroutine header begin ####################
90              
91              
92             #################### subroutine header end ####################
93              
94              
95             sub create_group_if_not_exists_for {
96 0     0 1   my $c = shift;
97 0           my $group_mapper = shift;
98              
99 0 0         unless (defined($group_mapper)) {
100 0           carp 'Please provide a group id';
101 0           return undef;
102             }
103              
104 0           my $args = {
105             groupMapper => $group_mapper
106             };
107              
108 0           return $c->_execute({
109             api => 1,
110             method => 'createGroupIfNotExistsFor',
111             key => 'groupID',
112             args => $args
113             });
114             }
115              
116              
117             #################### subroutine header begin ####################
118              
119              
120             #################### subroutine header end ####################
121              
122              
123             sub delete_group {
124 0     0 1   my $c = shift;
125 0           my $group_id = shift;
126              
127 0 0         unless (defined($group_id)) {
128 0           carp 'Please provide a group id';
129 0           return undef;
130             }
131              
132 0           my $args = {
133             groupID => $group_id
134             };
135              
136 0           return $c->_execute({
137             api => 1,
138             method => 'deleteGroup',
139             boolean => 1,
140             args => $args
141             });
142             }
143              
144              
145             #################### subroutine header begin ####################
146              
147              
148             #################### subroutine header end ####################
149              
150              
151             sub list_pads {
152 0     0 1   my $c = shift;
153 0           my $group_id = shift;
154              
155 0 0         unless (defined($group_id)) {
156 0           carp 'Please provide a group id';
157 0           return undef;
158             }
159              
160 0           my $args = {
161             groupID => $group_id
162             };
163              
164 0           return $c->_execute({
165             api => 1,
166             method => 'listPads',
167             key => 'padIDs',
168             args => $args
169             });
170             }
171              
172              
173             #################### subroutine header begin ####################
174              
175              
176             #################### subroutine header end ####################
177              
178              
179             sub create_group_pad {
180 0     0 1   my $c = shift;
181 0           my $group_id = shift;
182 0           my $pad_name = shift;
183 0           my $text = shift;
184              
185 0 0         unless (defined($pad_name)) {
186 0           carp 'Please provide at least 2 arguments : the group id and the pad name';
187             return undef
188 0           }
189              
190 0           my $args = {
191             groupID => $group_id,
192             padName => $pad_name
193             };
194 0 0         $args->{text} = $text if defined $text;
195              
196 0           return $c->_execute({
197             api => 1,
198             method => 'createGroupPad',
199             boolean => 1,
200             args => $args
201             });
202             }
203              
204              
205             #################### subroutine header begin ####################
206              
207              
208             #################### subroutine header end ####################
209              
210              
211             sub list_all_groups {
212 0     0 1   my $c = shift;
213              
214 0           return $c->_execute({
215             api => '1.1',
216             method => 'listAllGroups',
217             key => 'groupIDs'
218             });
219             }
220              
221              
222             #################################################################
223             #################################################################
224              
225             #################### subroutine header begin ####################
226              
227              
228             #################### subroutine header end ####################
229              
230              
231             sub create_author {
232 0     0 1   my $c = shift;
233 0           my $name = shift;
234              
235 0           my $args = {};
236 0 0         $args->{name} = $name if defined $name;
237              
238 0           return $c->_execute({
239             api => 1,
240             method => 'createAuthor',
241             key => 'authorID',
242             args => $args
243             });
244             }
245              
246              
247             #################### subroutine header begin ####################
248              
249              
250             #################### subroutine header end ####################
251              
252              
253             sub create_author_if_not_exists_for {
254 0     0 1   my $c = shift;
255 0           my $author_mapper = shift;
256 0           my $name = shift;
257              
258 0 0         unless (defined($author_mapper)) {
259 0           carp 'Please provide your application author id';
260 0           return undef;
261             }
262              
263 0           my $args = {
264             authorMapper => $author_mapper
265             };
266 0 0         $args->{name} = $name if defined $name;
267              
268 0           return $c->_execute({
269             api => 1,
270             method => 'createAuthorIfNotExistsFor',
271             key => 'authorID',
272             args => $args
273             });
274             }
275              
276              
277             #################### subroutine header begin ####################
278              
279              
280             #################### subroutine header end ####################
281              
282              
283             sub list_pads_of_author {
284 0     0 1   my $c = shift;
285 0           my $author_id = shift;
286              
287 0 0         unless (defined($author_id)) {
288 0           carp 'Please provide an author id';
289 0           return undef;
290             }
291              
292 0           my $args = {
293             authorID => $author_id
294             };
295              
296 0           return $c->_execute({
297             api => 1,
298             method => 'listPadsOfAuthor',
299             key => 'padIDs',
300             args => $args
301             });
302             }
303              
304              
305             #################### subroutine header end ####################
306              
307              
308             sub get_author_name {
309 0     0 1   my $c = shift;
310 0           my $author_id = shift;
311              
312 0 0         unless (defined($author_id)) {
313 0           carp 'Please provide an author id';
314 0           return undef;
315             }
316              
317 0           my $args = {
318             authorID => $author_id
319             };
320              
321 0           return $c->_execute({
322             api => '1.1',
323             method => 'getAuthorName',
324             key => 'authorName',
325             args => $args
326             });
327             }
328              
329              
330             #################################################################
331             #################################################################
332              
333             #################### subroutine header begin ####################
334              
335              
336             #################### subroutine header end ####################
337              
338              
339             sub create_session {
340 0     0 1   my $c = shift;
341 0           my $group_id = shift;
342 0           my $author_id = shift;
343 0           my $valid_until = shift;
344              
345 0 0         unless (defined($valid_until)) {
346 0           carp 'Please provide 3 arguments : the group id, the author id and a valid unix timestamp';
347 0           return undef;
348             }
349 0 0         unless ($valid_until =~ m/\d+/) {
350 0           carp 'Please provide a *valid* unix timestamp as third argument';
351 0           return undef;
352             }
353              
354 0           my $args = {
355             groupID => $group_id,
356             authorID => $author_id,
357             validUntil => $valid_until
358             };
359              
360 0           return $c->_execute({
361             api => 1,
362             method => 'createSession',
363             key => 'sessionID',
364             args => $args
365             });
366             }
367              
368              
369             #################### subroutine header begin ####################
370              
371              
372             #################### subroutine header end ####################
373              
374              
375             sub delete_session {
376 0     0 1   my $c = shift;
377 0           my $session_id = shift;
378              
379 0 0         unless (defined($session_id)) {
380 0           carp 'Please provide a session id';
381 0           return undef;
382             }
383              
384 0           my $args = {
385             sessionID => $session_id
386             };
387              
388 0           return $c->_execute({
389             api => 1,
390             method => 'deleteSession',
391             boolean => 1,
392             args => $args
393             });
394             }
395              
396              
397             #################### subroutine header begin ####################
398              
399              
400             #################### subroutine header end ####################
401              
402              
403             sub get_session_info {
404 0     0 1   my $c = shift;
405 0           my $session_id = shift;
406              
407 0 0         unless (defined($session_id)) {
408 0           carp 'Please provide a session id';
409 0           return undef;
410             }
411              
412 0           my $args = {
413             sessionID => $session_id
414             };
415              
416 0           return $c->_execute({
417             api => 1,
418             method => 'getSessionInfo',
419             args => $args
420             });
421             }
422              
423              
424             #################### subroutine header begin ####################
425              
426              
427             #################### subroutine header end ####################
428              
429              
430             sub list_sessions_of_group {
431 0     0 1   my $c = shift;
432 0           my $group_id = shift;
433              
434 0 0         unless (defined($group_id)) {
435 0           carp 'Please provide a group id';
436 0           return undef;
437             }
438              
439 0           my $args = {
440             groupID => $group_id
441             };
442              
443 0           return $c->_execute({
444             api => 1,
445             method => 'listSessionsOfGroup',
446             args => $args
447             });
448             }
449              
450              
451             #################### subroutine header begin ####################
452              
453              
454             #################### subroutine header end ####################
455              
456              
457             sub list_sessions_of_author {
458 0     0 1   my $c = shift;
459 0           my $author_id = shift;
460              
461 0 0         unless (defined($author_id)) {
462 0           carp 'Please provide an author id';
463 0           return undef;
464             }
465              
466 0           my $args = {
467             authorID => $author_id
468             };
469              
470 0           return $c->_execute({
471             api => 1,
472             method => 'listSessionsOfAuthor',
473             args => $args
474             });
475             }
476              
477              
478             #################################################################
479             #################################################################
480              
481             #################### subroutine header begin ####################
482              
483              
484             #################### subroutine header end ####################
485              
486              
487             sub get_text {
488 0     0 1   my $c = shift;
489 0           my $pad_id = shift;
490 0           my $rev = shift;
491              
492 0 0         unless (defined($pad_id)) {
493 0           carp 'Please provide at least a pad id';
494 0           return undef;
495             }
496              
497 0           my $args = {
498             padID => $pad_id
499             };
500 0 0         $args->{rev} = $rev if defined $rev;
501              
502 0           return $c->_execute({
503             api => 1,
504             method => 'getText',
505             key => 'text',
506             args => $args
507             });
508             }
509              
510              
511             #################### subroutine header begin ####################
512              
513              
514             #################### subroutine header end ####################
515              
516              
517             sub set_text {
518 0     0 1   my $c = shift;
519 0           my $pad_id = shift;
520 0           my $text = shift;
521              
522 0 0         unless (defined($text)) {
523 0           carp 'Please provide 2 arguments : a pad id and a text';
524 0           return undef;
525             }
526              
527 0           my $args = {
528             padID => $pad_id,
529             text => $text
530             };
531              
532 0           return $c->_execute({
533             api => 1,
534             method => 'setText',
535             boolean => 1,
536             args => $args
537             });
538             }
539              
540              
541             #################### subroutine header begin ####################
542              
543              
544             #################### subroutine header end ####################
545              
546              
547             sub append_text {
548 0     0 1   my $c = shift;
549 0           my $pad_id = shift;
550 0           my $text = shift;
551              
552 0 0         unless (defined($text)) {
553 0           carp 'Please provide 2 arguments : a pad id and a text';
554 0           return undef;
555             }
556              
557 0           my $args = {
558             padID => $pad_id,
559             text => $text
560             };
561              
562 0           return $c->_execute({
563             api => '1.2.13',
564             method => 'appendText',
565             boolean => 1,
566             args => $args
567             });
568             }
569              
570              
571             #################### subroutine header begin ####################
572              
573              
574             #################### subroutine header end ####################
575              
576              
577             sub get_html {
578 0     0 1   my $c = shift;
579 0           my $pad_id = shift;
580 0           my $rev = shift;
581              
582 0 0         unless (defined($pad_id)) {
583 0           carp 'Please provide at least a pad id';
584 0           return undef;
585             }
586              
587 0           my $args = {
588             padID => $pad_id
589             };
590 0 0         $args->{rev} = $rev if defined $rev;
591              
592 0           return $c->_execute({
593             api => 1,
594             method => 'getHTML',
595             key => 'html',
596             args => $args
597             });
598             }
599              
600              
601             #################### subroutine header begin ####################
602              
603              
604             #################### subroutine header end ####################
605              
606              
607             sub set_html {
608 0     0 1   my $c = shift;
609 0           my $pad_id = shift;
610 0           my $html = shift;
611              
612 0 0         unless (defined($html)) {
613 0           carp 'Please provide 2 arguments : a pad id and a HTML code';
614 0           return undef;
615             }
616              
617 0           my $args = {
618             padID => $pad_id,
619             html => $html
620             };
621              
622 0           return $c->_execute({
623             api => 1,
624             method => 'setHTML',
625             boolean => 1,
626             args => $args
627             });
628             }
629              
630              
631             #################### subroutine header begin ####################
632              
633              
634             #################### subroutine header end ####################
635              
636              
637             sub get_attribute_pool {
638 0     0 1   my $c = shift;
639 0           my $pad_id = shift;
640              
641 0 0         unless (defined($pad_id)) {
642 0           carp 'Please provide a pad id';
643 0           return undef;
644             }
645              
646 0           my $args = {
647             padID => $pad_id
648             };
649              
650 0           return $c->_execute({
651             api => '1.2.8',
652             method => 'getAttributePool',
653             key => 'pool',
654             args => $args
655             });
656             }
657              
658              
659             #################### subroutine header begin ####################
660              
661              
662             #################### subroutine header end ####################
663              
664              
665             sub get_revision_changeset {
666 0     0 1   my $c = shift;
667 0           my $pad_id = shift;
668 0           my $rev = shift;
669              
670 0 0         unless (defined($pad_id)) {
671 0           carp 'Please provide at least a pad id';
672 0           return undef;
673             }
674              
675 0           my $args = {
676             padID => $pad_id
677             };
678 0 0         $args->{rev} = $rev if defined $rev;
679              
680 0           return $c->_execute({
681             api => '1.2.8',
682             method => 'getRevisionChangeset',
683             args => $args
684             });
685             }
686              
687              
688             #################### subroutine header begin ####################
689              
690              
691             #################### subroutine header end ####################
692              
693              
694             sub create_diff_html {
695 0     0 1   my $c = shift;
696 0           my $pad_id = shift;
697 0           my $start_rev = shift;
698 0           my $end_rev = shift;
699              
700 0 0         unless (defined($pad_id)) {
701 0           carp 'Please provide a pad id, a start_rev and an end_rev';
702 0           return undef;
703             }
704              
705 0 0         unless (defined($start_rev)) {
706 0           carp 'Please provide a start_rev and an end_rev';
707 0           return undef;
708             }
709              
710 0 0         unless (defined($end_rev)) {
711 0           carp 'Please provide an end_rev';
712 0           return undef;
713             }
714              
715 0           my $args = {
716             padID => $pad_id,
717             startRev => $start_rev,
718             endRev => $end_rev
719             };
720              
721 0           return $c->_execute({
722             api => '1.2.7',
723             method => 'createDiffHTML',
724             args => $args
725             });
726             }
727              
728              
729             #################### subroutine header begin ####################
730              
731              
732             #################### subroutine header end ####################
733              
734              
735             sub restore_revision {
736 0     0 1   my $c = shift;
737 0           my $pad_id = shift;
738 0           my $rev = shift;
739              
740 0 0         unless (defined($pad_id)) {
741 0           carp 'Please provide a pad id, a start_rev and an end_rev';
742 0           return undef;
743             }
744              
745 0 0         unless (defined($rev)) {
746 0           carp 'Please provide a revision number';
747 0           return undef;
748             }
749              
750 0           my $args = {
751             padID => $pad_id,
752             rev => $rev
753             };
754              
755 0           return $c->_execute({
756             api => '1.2.11',
757             method => 'restoreRevision',
758             boolean => 1,
759             args => $args
760             });
761             }
762              
763              
764             #################################################################
765             #################################################################
766              
767             #################### subroutine header begin ####################
768              
769              
770             #################### subroutine header end ####################
771              
772              
773             sub get_chat_history {
774 0     0 1   my $c = shift;
775 0           my $pad_id = shift;
776 0           my $start = shift;
777 0           my $end = shift;
778              
779 0 0         unless (defined($pad_id)) {
780 0           carp 'Please provide at least a pad id';
781 0           return undef;
782             }
783              
784 0           my $args = {
785             padID => $pad_id
786             };
787 0 0         $args->{start} = $start if defined $start;
788 0 0         $args->{end} = $end if defined $end;
789              
790 0           return $c->_execute({
791             api => '1.2.7',
792             method => 'getChatHistory',
793             key => 'messages',
794             args => $args
795             });
796             }
797              
798              
799             #################### subroutine header begin ####################
800              
801              
802             #################### subroutine header end ####################
803              
804              
805             sub get_chat_head {
806 0     0 1   my $c = shift;
807 0           my $pad_id = shift;
808              
809 0 0         unless (defined($pad_id)) {
810 0           carp 'Please provide a pad id';
811 0           return undef;
812             }
813              
814 0           my $args = {
815             padId => $pad_id
816             };
817              
818 0           return $c->_execute({
819             api => '1.2.7',
820             method => 'getChatHead',
821             key => 'chatHead',
822             args => $args
823             });
824             }
825              
826              
827             #################### subroutine header begin ####################
828              
829              
830             #################### subroutine header end ####################
831              
832              
833             sub append_chat_message {
834 0     0 1   my $c = shift;
835 0           my $pad_id = shift;
836 0           my $text = shift;
837 0           my $author_id = shift;
838 0           my $timestamp = shift;
839              
840 0 0         unless (defined($pad_id)) {
841 0           carp 'Please provide a pad id, a text, an authorID and a timestamp';
842 0           return undef;
843             }
844              
845 0 0         unless (defined($text)) {
846 0           carp 'Please provide a text, an authorID and a timestamp';
847 0           return undef;
848             }
849              
850 0 0         unless (defined($author_id)) {
851 0           carp 'Please provide an authorID and a timestamp';
852 0           return undef;
853             }
854              
855 0 0         unless (defined($timestamp)) {
856 0           carp 'Please provide a timestamp';
857 0           return undef;
858             }
859              
860 0           my $args = {
861             padID => $pad_id,
862             text => $text,
863             authorID => $author_id,
864             time => $timestamp
865             };
866              
867 0           return $c->_execute({
868             api => '1.2.12',
869             method => 'appendChatMessage',
870             boolean => 1,
871             args => $args
872             });
873             }
874              
875              
876             #################################################################
877             #################################################################
878              
879             #################### subroutine header begin ####################
880              
881              
882             #################### subroutine header end ####################
883              
884              
885             sub create_pad {
886 0     0 1   my $c = shift;
887 0           my $pad_id = shift;
888 0           my $text = shift;
889              
890 0 0         unless (defined($pad_id)) {
891 0           carp 'Please provide at least a pad id';
892 0           return undef;
893             }
894              
895 0           my $args = {
896             padID => $pad_id
897             };
898 0 0         $args->{text} = $text if defined $text;
899              
900 0           return $c->_execute({
901             api => 1,
902             method => 'createPad',
903             boolean => 1,
904             args => $args
905             });
906             }
907              
908              
909             #################### subroutine header begin ####################
910              
911              
912             #################### subroutine header end ####################
913              
914              
915             sub get_revisions_count {
916 0     0 1   my $c = shift;
917 0           my $pad_id = shift;
918              
919 0 0         unless (defined($pad_id)) {
920 0           carp 'Please provide a pad id';
921 0           return undef;
922             }
923              
924 0           my $args = {
925             padID => $pad_id
926             };
927              
928 0           return $c->_execute({
929             api => 1,
930             method => 'getRevisionsCount',
931             key => 'revisions',
932             args => $args
933             });
934             }
935              
936              
937             #################### subroutine header begin ####################
938              
939              
940             #################### subroutine header end ####################
941              
942              
943             sub get_saved_revisions_count {
944 0     0 1   my $c = shift;
945 0           my $pad_id = shift;
946              
947 0 0         unless (defined($pad_id)) {
948 0           carp 'Please provide a pad id';
949 0           return undef;
950             }
951              
952 0           my $args = {
953             padID => $pad_id
954             };
955              
956 0           return $c->_execute({
957             api => '1.2.11',
958             method => 'getSavedRevisionsCount',
959             key => 'savedRevisions',
960             args => $args
961             });
962             }
963              
964              
965             #################### subroutine header begin ####################
966              
967              
968             #################### subroutine header end ####################
969              
970              
971             sub list_saved_revisions {
972 0     0 1   my $c = shift;
973 0           my $pad_id = shift;
974              
975 0 0         unless (defined($pad_id)) {
976 0           carp 'Please provide a pad id';
977 0           return undef;
978             }
979              
980 0           my $args = {
981             padID => $pad_id
982             };
983              
984 0           return $c->_execute({
985             api => '1.2.11',
986             method => 'listSavedRevisions',
987             key => 'savedRevisions',
988             args => $args
989             });
990             }
991              
992              
993             #################### subroutine header begin ####################
994              
995              
996             #################### subroutine header end ####################
997              
998              
999             sub save_revision {
1000 0     0 1   my $c = shift;
1001 0           my $pad_id = shift;
1002 0           my $rev = shift;
1003              
1004 0 0         unless (defined($pad_id)) {
1005 0           carp 'Please provide a pad id';
1006 0           return undef;
1007             }
1008              
1009 0           my $args = {
1010             padID => $pad_id
1011             };
1012 0 0         $args->{rev} = $rev if defined $rev;
1013              
1014 0           return $c->_execute({
1015             api => '1.2.11',
1016             method => 'saveRevision',
1017             boolean => 1,
1018             args => $args
1019             });
1020             }
1021              
1022              
1023             #################### subroutine header begin ####################
1024              
1025              
1026             #################### subroutine header end ####################
1027              
1028              
1029             sub get_users_count {
1030 0     0 1   my $c = shift;
1031 0           my $pad_id = shift;
1032              
1033 0           return $c->pad_users_count($pad_id);
1034             }
1035              
1036             sub pad_users_count {
1037 0     0 1   my $c = shift;
1038 0           my $pad_id = shift;
1039              
1040 0 0         unless (defined($pad_id)) {
1041 0           carp 'Please provide a pad id';
1042 0           return undef;
1043             }
1044              
1045 0           my $args = {
1046             padID => $pad_id
1047             };
1048              
1049 0           return $c->_execute({
1050             api => 1,
1051             method => 'padUsersCount',
1052             key => 'padUsersCount',
1053             args => $args
1054             });
1055             }
1056              
1057              
1058             #################### subroutine header begin ####################
1059              
1060              
1061             #################### subroutine header end ####################
1062              
1063              
1064             sub pad_users {
1065 0     0 1   my $c = shift;
1066 0           my $pad_id = shift;
1067              
1068 0 0         unless (defined($pad_id)) {
1069 0           carp 'Please provide a pad id';
1070 0           return undef;
1071             }
1072              
1073 0           my $args = {
1074             padID => $pad_id
1075             };
1076              
1077 0           return $c->_execute({
1078             api => '1.1',
1079             method => 'padUsers',
1080             key => 'padUsers',
1081             args => $args
1082             });
1083             }
1084              
1085              
1086             #################### subroutine header begin ####################
1087              
1088              
1089             #################### subroutine header end ####################
1090              
1091              
1092             sub delete_pad {
1093 0     0 1   my $c = shift;
1094 0           my $pad_id = shift;
1095              
1096 0 0         unless (defined($pad_id)) {
1097 0           carp 'Please provide a pad id';
1098 0           return undef;
1099             }
1100              
1101 0           my $args = {
1102             padID => $pad_id
1103             };
1104              
1105 0           return $c->_execute({
1106             api => 1,
1107             method => 'deletePad',
1108             boolean => 1,
1109             args => $args
1110             });
1111             }
1112              
1113              
1114             #################### subroutine header begin ####################
1115              
1116              
1117             #################### subroutine header end ####################
1118              
1119              
1120             sub copy_pad {
1121 0     0 1   my $c = shift;
1122 0           my $source_id = shift;
1123 0           my $destination_id = shift;
1124 0           my $force = shift;
1125              
1126 0 0         unless (defined($source_id)) {
1127 0           carp 'Please provide a source pad id and a destination pad id';
1128 0           return undef;
1129             }
1130              
1131 0 0         unless (defined($destination_id)) {
1132 0           carp 'Please provide a destination pad id';
1133 0           return undef;
1134             }
1135              
1136 0           $source_id =~ s/ /_/g;
1137 0           $destination_id =~ s/ /_/g;
1138              
1139 0           my $args = {
1140             sourceID => $source_id,
1141             destinationID => $destination_id,
1142             };
1143 0 0         $args->{force} = ($force) ? 'true' : 'false' if defined $force;
    0          
1144              
1145 0           return $c->_execute({
1146             api => '1.2.9',
1147             method => 'copyPad',
1148             boolean => 1,
1149             args => $args
1150             });
1151             }
1152              
1153              
1154             #################### subroutine header begin ####################
1155              
1156              
1157             #################### subroutine header end ####################
1158              
1159              
1160             sub move_pad {
1161 0     0 1   my $c = shift;
1162 0           my $source_id = shift;
1163 0           my $destination_id = shift;
1164 0           my $force = shift;
1165              
1166 0 0         unless (defined($source_id)) {
1167 0           carp 'Please provide a source pad id and a destination pad id';
1168 0           return undef;
1169             }
1170              
1171 0 0         unless (defined($destination_id)) {
1172 0           carp 'Please provide a destination pad id';
1173 0           return undef;
1174             }
1175              
1176 0           $source_id =~ s/ /_/g;
1177 0           $destination_id =~ s/ /_/g;
1178              
1179 0           my $args = {
1180             sourceID => $source_id,
1181             destinationID => $destination_id,
1182             };
1183 0 0         $args->{force} = ($force) ? 'true' : 'false' if defined $force;
    0          
1184              
1185 0           return $c->_execute({
1186             api => '1.2.9',
1187             method => 'movePad',
1188             boolean => 1,
1189             args => $args
1190             });
1191             }
1192              
1193              
1194             #################### subroutine header begin ####################
1195              
1196              
1197             #################### subroutine header end ####################
1198              
1199              
1200             sub get_read_only_id {
1201 0     0 1   my $c = shift;
1202 0           my $pad_id = shift;
1203              
1204 0 0         unless (defined($pad_id)) {
1205 0           carp 'Please provide a pad id';
1206 0           return undef;
1207             }
1208              
1209 0           my $args = {
1210             padID => $pad_id
1211             };
1212              
1213 0           return $c->_execute({
1214             api => 1,
1215             method => 'getReadOnlyID',
1216             key => 'readOnlyID',
1217             args => $args
1218             });
1219             }
1220              
1221              
1222             #################### subroutine header begin ####################
1223              
1224              
1225             #################### subroutine header end ####################
1226              
1227              
1228             sub get_pad_id {
1229 0     0 1   my $c = shift;
1230 0           my $read_only_id = shift;
1231              
1232 0 0         unless (defined($read_only_id)) {
1233 0           carp 'Please provide a read only id';
1234 0           return undef;
1235             }
1236              
1237 0           my $args = {
1238             padID => $read_only_id
1239             };
1240              
1241 0           return $c->_execute({
1242             api => '1.2.10',
1243             method => 'getPadID',
1244             key => 'padID',
1245             args => $args
1246             });
1247             }
1248              
1249              
1250             #################### subroutine header begin ####################
1251              
1252              
1253             #################### subroutine header end ####################
1254              
1255              
1256             sub set_public_status {
1257 0     0 1   my $c = shift;
1258 0           my $pad_id = shift;
1259 0           my $public_status = shift;
1260              
1261 0 0         unless (defined($public_status)) {
1262 0           carp 'Please provide 2 arguments : a pad id and a public status (1 or 0)';
1263 0           return undef;
1264             }
1265              
1266 0 0         my $args = {
1267             padID => $pad_id,
1268             publicStatus => ($public_status) ? 'true' : 'false'
1269             };
1270              
1271 0           return $c->_execute({
1272             api => 1,
1273             method => 'setPublicStatus',
1274             boolean => 1,
1275             args => $args
1276             });
1277             }
1278              
1279              
1280             #################### subroutine header begin ####################
1281              
1282              
1283             #################### subroutine header end ####################
1284              
1285              
1286             sub get_public_status {
1287 0     0 1   my $c = shift;
1288 0           my $pad_id = shift;
1289              
1290 0 0         unless (defined($pad_id)) {
1291 0           carp 'Please provide a pad id';
1292 0           return undef;
1293             }
1294              
1295 0           my $args = {
1296             padID => $pad_id
1297             };
1298              
1299 0           return $c->_execute({
1300             api => 1,
1301             method => 'getPublicStatus',
1302             key => 'publicStatus',
1303             args => $args
1304             });
1305             }
1306              
1307              
1308             #################### subroutine header begin ####################
1309              
1310              
1311             #################### subroutine header end ####################
1312              
1313              
1314             sub set_password {
1315 0     0 1   my $c = shift;
1316 0           my $pad_id = shift;
1317 0           my $password = shift;
1318              
1319 0 0         unless (defined($password)) {
1320 0           carp 'Please provide 2 arguments : a pad id and a password';
1321 0           return undef;
1322             }
1323              
1324 0           my $args = {
1325             padID => $pad_id,
1326             password => $password
1327             };
1328              
1329 0           return $c->_execute({
1330             api => 1,
1331             method => 'setPassword',
1332             boolean => 1,
1333             args => $args
1334             });
1335             }
1336              
1337              
1338             #################### subroutine header begin ####################
1339              
1340              
1341             #################### subroutine header end ####################
1342              
1343              
1344             sub is_password_protected {
1345 0     0 1   my $c = shift;
1346 0           my $pad_id = shift;
1347              
1348 0 0         unless (defined($pad_id)) {
1349 0           carp 'Please provide a pad id';
1350 0           return undef;
1351             }
1352              
1353 0           my $args = {
1354             padID => $pad_id
1355             };
1356              
1357 0           return $c->_execute({
1358             api => 1,
1359             method => 'isPasswordProtected',
1360             key => 'isPasswordProtected',
1361             args => $args
1362             });
1363             }
1364              
1365              
1366             #################### subroutine header begin ####################
1367              
1368              
1369             #################### subroutine header end ####################
1370              
1371              
1372             sub list_authors_of_pad {
1373 0     0 1   my $c = shift;
1374 0           my $pad_id = shift;
1375              
1376 0 0         unless (defined($pad_id)) {
1377 0           carp 'Please provide a pad id';
1378 0           return undef;
1379             }
1380              
1381 0           my $args = {
1382             padID => $pad_id
1383             };
1384              
1385 0           return $c->_execute({
1386             api => 1,
1387             method => 'listAuthorsOfPad',
1388             key => 'authorIDs',
1389             args => $args
1390             });
1391             }
1392              
1393              
1394             #################### subroutine header begin ####################
1395              
1396              
1397             #################### subroutine header end ####################
1398              
1399              
1400             sub list_names_of_authors_of_pad {
1401 0     0 1   my $c = shift;
1402 0           my $pad_id = shift;
1403              
1404 0 0         unless (defined($pad_id)) {
1405 0           carp 'Please provide a pad id';
1406 0           return undef;
1407             }
1408              
1409 0           my @names;
1410 0           my $anonymous = 0;
1411              
1412 0           my @authors = $c->list_authors_of_pad($pad_id);
1413 0           for my $author (@authors) {
1414 0           my $name = $c->get_author_name($author);
1415 0 0         if (defined($name)) {
1416 0           push @names, $name;
1417             } else {
1418 0           $anonymous++;
1419             }
1420             }
1421 0           @names = sort(@names);
1422 0 0         push @names, $anonymous . ' anonymous' if ($anonymous);
1423              
1424 0 0         return (wantarray) ? @names : \@names;
1425             }
1426              
1427              
1428             #################### subroutine header begin ####################
1429              
1430              
1431             #################### subroutine header end ####################
1432              
1433              
1434             sub get_last_edited {
1435 0     0 1   my $c = shift;
1436 0           my $pad_id = shift;
1437              
1438 0 0         unless (defined($pad_id)) {
1439 0           carp 'Please provide at least a pad id';
1440 0           return undef;
1441             }
1442              
1443 0           my $args = {
1444             padID => $pad_id
1445             };
1446              
1447 0           return $c->_execute({
1448             api => 1,
1449             method => 'getLastEdited',
1450             key => 'lastEdited',
1451             args => $args
1452             });
1453             }
1454              
1455              
1456             #################### subroutine header begin ####################
1457              
1458              
1459             #################### subroutine header end ####################
1460              
1461              
1462             sub send_clients_message {
1463 0     0 1   my $c = shift;
1464 0           my $pad_id = shift;
1465 0           my $msg = shift;
1466              
1467 0 0         unless (defined($msg)) {
1468 0           carp "Please provide 2 arguments : the pad id and a message";
1469 0           return undef;
1470             }
1471              
1472 0           my $args = {
1473             padID => $pad_id,
1474             msg => $msg
1475             };
1476              
1477 0           return $c->_execute({
1478             api => '1.1',
1479             method => 'sendClientsMessage',
1480             boolean => 1,
1481             args => $args
1482             });
1483             }
1484              
1485              
1486             #################### subroutine header begin ####################
1487              
1488              
1489             #################### subroutine header end ####################
1490              
1491              
1492             sub check_token {
1493 0     0 1   my $c = shift;
1494              
1495 0           my $args = {};
1496              
1497 0           return $c->_execute({
1498             api => '1.2',
1499             method => 'checkToken',
1500             boolean => 1,
1501             args => $args
1502             });
1503             }
1504              
1505              
1506             #################################################################
1507             #################################################################
1508              
1509             #################### subroutine header begin ####################
1510              
1511              
1512              
1513             sub list_all_pads {
1514 0     0 1   my $c = shift;
1515              
1516 0           my $args = {};
1517              
1518 0           return $c->_execute({
1519             api => '1.2.1',
1520             method => 'listAllPads',
1521             key => 'padIDs',
1522             args => $args
1523             });
1524             }
1525              
1526             #################### footer pod documentation begin ###################
1527             #################### footer pod documentation end ###################
1528              
1529             1;
1530              
1531             __END__