diff --git a/DESCRIPTION b/DESCRIPTION index 7bc2d083a2f446544da43eddfd87f3d0a10fc920..1462f1b3f34da31d59f95c3746e5a863c5175271 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,12 +1,12 @@ Package: Mediawikir Type: Package Title: Connects to a mediawiki instance and writes in it what you want -Version: 0.1.10 +Version: 0.1.11 Author: Mathieu Loiseau Maintainer: Mathieu Loiseau <loiseaum@univ-grenoble-alpes.fr> Description: Mediawikir class can be used to post the output of an R script directly into a mediawiki instance. Batchator class allows batch page creation. License: MIT Encoding: UTF-8 LazyData: true -RoxygenNote: 6.1.1 +RoxygenNote: 7.0.2 Imports: httr,R6,stringr diff --git a/LICENSE b/LICENSE index 5211f90266cddd8b35399250502c8d99d87a189a..c61927aa8607a336ed1a209c3113514919f59a36 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018 Mathieu Loiseau +Copyright (c) 2020 Mathieu Loiseau Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/R/class.R b/R/class.R index 8e6177c57985b255731c0f8cbdc83b5f18df0d9b..701ff1b8ffd2d344d5aab34179e51a029ae7d359 100644 --- a/R/class.R +++ b/R/class.R @@ -40,7 +40,9 @@ library(stringr) #' \item{\code{instance_url}}{The base url to the mediawiki instance} #' \item{\code{user}}{The screen name of the user who will be credited for the changes in the wiki} #' \item{\code{pass}}{The user's password} -#' }} +#' \item{\code{dir}}{In case of \href{https://www.mediawiki.org/wiki/Manual:Short_URL}{short Url configuration}, +#' the base url for mediawiki is not the actual directory containing the api and index.php files. In these cases, +#' the user should specify the installation directory of mediawiki from the base_url.} #' \item{\code{setPage(pageNameOrId)}}{To set the page for the next post #' \describe{ #' \item{\code{pageNameOrId}}{The name (or id) of the wiki page which contains the changes} @@ -134,10 +136,15 @@ Mediawikir <- R6Class("Mediawikir", ###### # initialize ###### - initialize = function (instance_url, user, pass){ + initialize = function (instance_url, user, pass, dir=""){ tryCatch({ - self$base_url <- instance_url - self$api <- paste(instance_url,"/","api.php",sep="") + if(dir !=""){ + self$extra_sep <- paste(instance_url,"/",dir ,sep="") + } + else{ + self$base_url <- instance_url + } + self$api <- paste(self$base_url,"/","api.php",sep="") self$user_name <- user self$auth_token <- self$connect(pass) }, @@ -396,6 +403,7 @@ Mediawikir <- R6Class("Mediawikir", #' \item{\code{wiki}}{The base url to the mediawiki instance} #' \item{\code{authr}}{The screen name of the user who will be credited for the changes in the wiki} #' \item{\code{pass}}{The user's password} +#' \item{\code{dir}}{The installation directory of mediawiki, if needed} #' }} #' \item{\code{loadTemplate(file_path)}}{Takes the path of a text file containing a template that will serve as base #' for all the pages generated. The template should contain occurrences of the fields defined in the content file.} @@ -424,9 +432,9 @@ Batchator <- R6Class("Batchator", ###### # initialize ###### - initialize = function (wiki,author,pass){ + initialize = function (wiki,author,pass,dir=""){ tryCatch({ - self$wiki <- Mediawikir$new(wiki, author, pass) + self$wiki <- Mediawikir$new(wiki, author, pass, dir) }, error = function(e){ print(e$message) @@ -539,6 +547,9 @@ Batchator <- R6Class("Batchator", self$wiki$setPage(pageId) print(paste("processing page '",pageId,"' (",pageIdType,")", sep=""))#/**/ for(j in 2:length(field_list)){ + #self$wiki$addContent("test") #debug + #test = self$wiki$postContent() #debug + #print(test) #debug success = self$wiki$replaceSingleLineTemplateField(toString(field_list[j]),toString(rows[i,j])) print(paste("new value : |",field_list[j],"=",rows[i,j]," → ",success,sep="")) } diff --git a/man/Batchator.Rd b/man/Batchator.Rd index d180f3af52fbe35bb70f700bf6df7ce84c04994b..5a7594f91a52bf7ae9296d67a481cb2f820d74ff 100644 --- a/man/Batchator.Rd +++ b/man/Batchator.Rd @@ -5,31 +5,12 @@ \alias{Batchator} \title{Batchator: Batch input to mediawiki based on a csv and a template} \format{An \code{\link{R6Class}} generator object} -\usage{ -Batchator -} \value{ Object of \code{\link{R6Class}} with methods to interact with mediawiki instance } \description{ Uses \link{Mediawikir} to create/edit a batch of mediawiki pages } -\section{Fields}{ - -\describe{ -\item{\code{author}}{the mediawiki user who will be the author of the pages/modifications} - -\item{\code{wiki}}{a mediawikir object} - -\item{\code{page_name_pattern}}{a pattern to name the pages generated} - -\item{\code{template}}{the content of a text file with the template for the wikitext of the pages to create in a batch} - -\item{\code{field_list}}{the list of symbols that will be replaced (the first line of the csv file that will be sent to the Batchator)} - -\item{\code{content}}{a matrix of the words that will replace the symbols in the templates (both content and page names — the next lines of the csv file)} -}} - \section{Methods}{ \describe{ @@ -38,6 +19,7 @@ Uses \link{Mediawikir} to create/edit a batch of mediawiki pages \item{\code{wiki}}{The base url to the mediawiki instance} \item{\code{authr}}{The screen name of the user who will be credited for the changes in the wiki} \item{\code{pass}}{The user's password} + \item{\code{dir}}{The installation directory of mediawiki, if needed} }} \item{\code{loadTemplate(file_path)}}{Takes the path of a text file containing a template that will serve as base for all the pages generated. The template should contain occurrences of the fields defined in the content file.} @@ -82,3 +64,97 @@ Uses \link{Mediawikir} to create/edit a batch of mediawiki pages #"Help:full/page/Name","New value for att1","New value for att2" } \keyword{mediawiki} +\section{Public fields}{ +\if{html}{\out{<div class="r6-fields">}} +\describe{ +\item{\code{author}}{the mediawiki user who will be the author of the pages/modifications} + +\item{\code{wiki}}{a mediawikir object} + +\item{\code{page_name_pattern}}{a pattern to name the pages generated} + +\item{\code{template}}{the content of a text file with the template for the wikitext of the pages to create in a batch} + +\item{\code{field_list}}{the list of symbols that will be replaced (the first line of the csv file that will be sent to the Batchator)} + +\item{\code{content}}{a matrix of the words that will replace the symbols in the templates (both content and page names — the next lines of the csv file)} +} +\if{html}{\out{</div>}} +} +\section{Methods}{ +\subsection{Public methods}{ +\itemize{ +\item \href{#method-new}{\code{Batchator$new()}} +\item \href{#method-loadTemplate}{\code{Batchator$loadTemplate()}} +\item \href{#method-setPageNamePattern}{\code{Batchator$setPageNamePattern()}} +\item \href{#method-loadContent}{\code{Batchator$loadContent()}} +\item \href{#method-applyTemplate}{\code{Batchator$applyTemplate()}} +\item \href{#method-modifyWikiTemplateAttributes}{\code{Batchator$modifyWikiTemplateAttributes()}} +\item \href{#method-clone}{\code{Batchator$clone()}} +} +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-new"></a>}} +\subsection{Method \code{new()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Batchator$new(wiki, author, pass, dir = "")}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-loadTemplate"></a>}} +\subsection{Method \code{loadTemplate()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Batchator$loadTemplate(file_path)}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-setPageNamePattern"></a>}} +\subsection{Method \code{setPageNamePattern()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Batchator$setPageNamePattern(naming_pattern)}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-loadContent"></a>}} +\subsection{Method \code{loadContent()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Batchator$loadContent(file_path)}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-applyTemplate"></a>}} +\subsection{Method \code{applyTemplate()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Batchator$applyTemplate()}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-modifyWikiTemplateAttributes"></a>}} +\subsection{Method \code{modifyWikiTemplateAttributes()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Batchator$modifyWikiTemplateAttributes(file_path)}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-clone"></a>}} +\subsection{Method \code{clone()}}{ +The objects of this class are cloneable with this method. +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Batchator$clone(deep = FALSE)}\if{html}{\out{</div>}} +} + +\subsection{Arguments}{ +\if{html}{\out{<div class="arguments">}} +\describe{ +\item{\code{deep}}{Whether to make a deep clone.} +} +\if{html}{\out{</div>}} +} +} +} diff --git a/man/Mediawikir.Rd b/man/Mediawikir.Rd index 42c661445c137a634e2e443c873c1215c3a0c919..0c000af94b524f20b6c0e104810d17aba1601450 100644 --- a/man/Mediawikir.Rd +++ b/man/Mediawikir.Rd @@ -5,17 +5,30 @@ \alias{Mediawikir} \title{Mediawikir: write R output to mediawiki} \format{An \code{\link{R6Class}} generator object} -\usage{ -Mediawikir -} \value{ Object of \code{\link{R6Class}} with methods to interact with mediawiki instance } \description{ A Mediawikir controller serves to connect to a mediawiki API as a registered user in order to edit automatically certain documents based on R scripts } -\section{Fields}{ +\section{}{ +NA +} +\examples{ + mwHandler <- Mediawikir$new("http://my.wiki.org", "reg_user", "mypassword") + mwHandler$setPage("wikiPage") + mwHandler$addContent("This is an introduction to Mediawikir") + mwHandler$addContent("First step","h2") + mwHandler$addContent("First step of the first step","h3") + fileName <- mwHandler$uploadFile("path/toFile.png","My beautiful image.png") + mwHandler$addContent(paste("[[",fileName,"]]",sep="")) + mwHandler$postContent() + mwHandler$replaceSingleLineTemplateField("attribute", "newValue") +} +\keyword{mediawiki} +\section{Public fields}{ +\if{html}{\out{<div class="r6-fields">}} \describe{ \item{\code{base_url}}{the mediawiki instance base url} @@ -28,71 +41,114 @@ A Mediawikir controller serves to connect to a mediawiki API as a registered use \item{\code{content}}{the future content of \code{page}, which will be incrementally constructed using object methods} \item{\code{user_name}}{the user to credit for the changes} -}} - +} +\if{html}{\out{</div>}} +} \section{Methods}{ +\subsection{Public methods}{ +\itemize{ +\item \href{#method-connect}{\code{Mediawikir$connect()}} +\item \href{#method-new}{\code{Mediawikir$new()}} +\item \href{#method-setPage}{\code{Mediawikir$setPage()}} +\item \href{#method-resetContent}{\code{Mediawikir$resetContent()}} +\item \href{#method-addContent}{\code{Mediawikir$addContent()}} +\item \href{#method-postContent}{\code{Mediawikir$postContent()}} +\item \href{#method-getContent}{\code{Mediawikir$getContent()}} +\item \href{#method-replaceSingleLineTemplateField}{\code{Mediawikir$replaceSingleLineTemplateField()}} +\item \href{#method-uploadFile}{\code{Mediawikir$uploadFile()}} +\item \href{#method-clone}{\code{Mediawikir$clone()}} +} +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-connect"></a>}} +\subsection{Method \code{connect()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Mediawikir$connect(pass)}\if{html}{\out{</div>}} +} -\describe{ - \item{\code{initialize(instance_url, user, pass)}}{Creates a new \pkg{Mediawikir} object out of: - \describe{ - \item{\code{instance_url}}{The base url to the mediawiki instance} - \item{\code{user}}{The screen name of the user who will be credited for the changes in the wiki} - \item{\code{pass}}{The user's password} - }} - \item{\code{setPage(pageNameOrId)}}{To set the page for the next post - \describe{ - \item{\code{pageNameOrId}}{The name (or id) of the wiki page which contains the changes} - }} - \item{\code{connect(pass)}}{Should not be called directly (see \code{initialize} for detail)} - \item{\code{resetContent(baseContent="")}}{To reset the content of the page for the next post - \describe{ - \item{\code{baseContent}}{The wikitext base for the next post} - }} - \item{\code{addContent(theContent, type="p")}}{To add content that will later on be posted to mediawiki. This is where structuring elements are provided - \describe{ - \item{\code{theContent}}{Either text (using mediawiki syntax) or path to a file} - \item{\code{type}}{\describe{ - \item{\code{p} → A plain paragraph.}{} - \item{\code{h2} → Level 2 title}{} - \item{\code{h3} → Level 3 title}{} - \item{\code{h4} → Level 4 title}{} - \item{\code{h5} → Level 5 title}{} - \item{\code{raw} → No editing of the content}{} - }} - }} - \item{\code{postContent(comment)}}{To replace the content of the \code{page} (attribute) with \code{content} (attribute). - Parameter \code{comment} specifies the description of the modification, default is \code{“R generated contentâ€}} - \item{\code{uploadFile(file_path, file_name)}}{To upload a file to the server (will overwrite existing files) - \describe{ - \item{\code{file_path}}{Path to the file to upload to the server} - \item{\code{file_name}}{Name under which to store it} - \item{Returns the title of the wiki page containing the file or \code{FALSE} on error}{} - }} - \item{\code{getContent()}}{Returns the \emph{wikitext} of the selected page (cf. \code{setPage})} - \item{\code{replaceSingleLineTemplateField(template, field, newValue)}}{To replace a field of a template in the selected \code{page}. - - This method does not work with numbered parameters. - - Right now it works only for pages that only contain one occurence of the parameter (it does not take outer context into account) - - Additionnally, this function is not meat for templates the value of which spans accross multiple lines. - \describe{ - \item{\code{template}}{The template to look for} - \item{\code{field}}{The name of the field concerned} - \item{\code{newValue}}{The new value of the field} - }} } +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-new"></a>}} +\subsection{Method \code{new()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Mediawikir$new(instance_url, user, pass, dir = "")}\if{html}{\out{</div>}} } -\examples{ - mwHandler <- Mediawikir$new("http://my.wiki.org", "reg_user", "mypassword") - mwHandler$setPage("wikiPage") - mwHandler$addContent("This is an introduction to Mediawikir") - mwHandler$addContent("First step","h2") - mwHandler$addContent("First step of the first step","h3") - fileName <- mwHandler$uploadFile("path/toFile.png","My beautiful image.png") - mwHandler$addContent(paste("[[",fileName,"]]",sep="")) - mwHandler$postContent() - mwHandler$replaceSingleLineTemplateField("attribute", "newValue") } -\keyword{mediawiki} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-setPage"></a>}} +\subsection{Method \code{setPage()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Mediawikir$setPage(pageNameOrId)}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-resetContent"></a>}} +\subsection{Method \code{resetContent()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Mediawikir$resetContent(aContent = "")}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-addContent"></a>}} +\subsection{Method \code{addContent()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Mediawikir$addContent(theContent, type = "p")}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-postContent"></a>}} +\subsection{Method \code{postContent()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Mediawikir$postContent(comment = "R generated content")}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-getContent"></a>}} +\subsection{Method \code{getContent()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Mediawikir$getContent()}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-replaceSingleLineTemplateField"></a>}} +\subsection{Method \code{replaceSingleLineTemplateField()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Mediawikir$replaceSingleLineTemplateField( + field = "", + newValue = "", + template = "" +)}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-uploadFile"></a>}} +\subsection{Method \code{uploadFile()}}{ +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Mediawikir$uploadFile(file_path, file_name)}\if{html}{\out{</div>}} +} + +} +\if{html}{\out{<hr>}} +\if{html}{\out{<a id="method-clone"></a>}} +\subsection{Method \code{clone()}}{ +The objects of this class are cloneable with this method. +\subsection{Usage}{ +\if{html}{\out{<div class="r">}}\preformatted{Mediawikir$clone(deep = FALSE)}\if{html}{\out{</div>}} +} + +\subsection{Arguments}{ +\if{html}{\out{<div class="arguments">}} +\describe{ +\item{\code{deep}}{Whether to make a deep clone.} +} +\if{html}{\out{</div>}} +} +} +}