3 # Charles Roussel <charles.roussel@ensimag.imag.fr>
4 # Simon Cathebras <simon.cathebras@ensimag.imag.fr>
5 # Julien Khayat <julien.khayat@ensimag.imag.fr>
6 # Guillaume Sasdy <guillaume.sasdy@ensimag.imag.fr>
7 # Simon Perrat <simon.perrat@ensimag.imag.fr>
8 # License: GPL v2 or later
11 # ./test-gitmw.pl <command> [argument]*
12 # Execute in terminal using the name of the function to call as first
13 # parameter, and the function's arguments as following parameters
16 # ./test-gitmw.pl "get_page" foo .
17 # will call <wiki_getpage> with arguments <foo> and <.>
19 # Available functions are:
28 use DateTime
::Format
::ISO8601
;
29 use open ':encoding(utf8)';
30 use constant SLASH_REPLACEMENT
=> "%2F";
32 #Parsing of the config file
34 my $configfile = "$ENV{'CURR_DIR'}/test.config";
36 open my $CONFIG, "<", $configfile or die "can't open $configfile: $!";
44 my ($key, $value) = split (/\s*=\s*/,$_, 2);
45 $config{$key} = $value;
46 last if ($key eq 'LIGHTTPD' and $value eq 'false');
47 last if ($key eq 'PORT');
49 close $CONFIG or die "can't close $configfile: $!";
51 my $wiki_address = "http://$config{'SERVER_ADDR'}".":"."$config{'PORT'}";
52 my $wiki_url = "$wiki_address/$config{'WIKI_DIR_NAME'}/api.php";
53 my $wiki_admin = "$config{'WIKI_ADMIN'}";
54 my $wiki_admin_pass = "$config{'WIKI_PASSW'}";
55 my $mw = MediaWiki
::API
->new;
56 $mw->{config
}->{api_url
} = $wiki_url;
59 # wiki_login <name> <password>
61 # Logs the user with <name> and <password> in the global variable
62 # of the mediawiki $mw
64 $mw->login( { lgname
=> "$_[0]",lgpassword
=> "$_[1]" } )
65 || die "getpage: login failed";
68 # wiki_getpage <wiki_page> <dest_path>
70 # fetch a page <wiki_page> from the wiki referenced in the global variable
71 # $mw and copies its content in directory dest_path
76 my $page = $mw->get_page( { title
=> $pagename } );
77 if (!defined($page)) {
78 die "getpage: wiki does not exist";
81 my $content = $page->{'*'};
82 if (!defined($content)) {
83 die "getpage: page does not exist";
86 $pagename=$page->{'title'};
87 # Replace spaces by underscore in the page name
89 $pagename =~ s/\//%2F/g
;
90 open(my $file, ">$destdir/$pagename.mw");
91 print $file "$content";
96 # wiki_delete_page <page_name>
98 # delete the page with name <page_name> from the wiki referenced
99 # in the global variable $mw
100 sub wiki_delete_page
{
101 my $pagename = $_[0];
103 my $exist=$mw->get_page({title
=> $pagename});
105 if (defined($exist->{'*'})){
106 $mw->edit({ action
=> 'delete',
108 || die $mw->{error
}->{code
} . ": " . $mw->{error
}->{details
};
110 die "no page with such name found: $pagename\n";
114 # wiki_editpage <wiki_page> <wiki_content> <wiki_append> [-c=<category>] [-s=<summary>]
116 # Edit a page named <wiki_page> with content <wiki_content> on the wiki
117 # referenced with the global variable $mw
118 # If <wiki_append> == true : append <wiki_content> at the end of the actual
119 # content of the page <wiki_page>
120 # If <wik_page> doesn't exist, that page is created with the <wiki_content>
122 my $wiki_page = $_[0];
123 my $wiki_content = $_[1];
124 my $wiki_append = $_[2];
126 my ($summ, $cat) = ();
127 GetOptions
('s=s' => \
$summ, 'c=s' => \
$cat);
130 if (defined($wiki_append) && $wiki_append eq 'true') {
134 my $previous_text ="";
137 my $ref = $mw->get_page( { title
=> $wiki_page } );
138 $previous_text = $ref->{'*'};
141 my $text = $wiki_content;
142 if (defined($previous_text)) {
143 $text="$previous_text$text";
146 # Eventually, add this page to a category.
148 my $category_name="[[Category:$cat]]";
149 $text="$text\n $category_name";
155 $mw->edit( { action
=> 'edit', title
=> $wiki_page, summary
=> $summary, text
=> "$text"} );
158 # wiki_getallpagename [<category>]
160 # Fetch all pages of the wiki referenced by the global variable $mw
161 # and print the names of each one in the file all.txt with a new line
162 # ("\n") between these.
163 # If the argument <category> is defined, then this function get only the pages
164 # belonging to <category>.
165 sub wiki_getallpagename
{
166 # fetch the pages of the wiki
167 if (defined($_[0])) {
168 my $mw_pages = $mw->list ( { action
=> 'query',
169 list
=> 'categorymembers',
170 cmtitle
=> "Category:$_[0]",
174 || die $mw->{error
}->{code
}.": ".$mw->{error
}->{details
};
175 open(my $file, ">all.txt");
176 foreach my $page (@
{$mw_pages}) {
177 print $file "$page->{title}\n";
182 my $mw_pages = $mw->list({
187 || die $mw->{error
}->{code
}.": ".$mw->{error
}->{details
};
188 open(my $file, ">all.txt");
189 foreach my $page (@
{$mw_pages}) {
190 print $file "$page->{title}\n";
196 sub wiki_upload_file
{
197 my $file_name = $_[0];
198 my $resultat = $mw->edit ( {
200 filename
=> $file_name,
201 comment
=> 'upload a file',
202 file
=> [ $file_name ],
206 } ) || die $mw->{error
}->{code
} . ' : ' . $mw->{error
}->{details
};
211 # Main part of this script: parse the command line arguments
212 # and select which function to execute
213 my $fct_to_call = shift;
215 wiki_login
($wiki_admin, $wiki_admin_pass);
217 my %functions_to_call = qw(
218 upload_file wiki_upload_file
219 get_page wiki_getpage
220 delete_page wiki_delete_page
221 edit_page wiki_editpage
222 getallpagename wiki_getallpagename
224 die "$0 ERROR: wrong argument" unless exists $functions_to_call{$fct_to_call};
225 &{$functions_to_call{$fct_to_call}}(@ARGV);