summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorYaco <franco@reevo.org>2019-09-07 03:15:23 -0300
committerYaco <franco@reevo.org>2019-09-07 03:15:23 -0300
commit7097d8792fbcc66cebffbd5574d0ce165964ed8a (patch)
tree804d509ab6a1fd1b81b33c0360312b011df2df95 /bin
parent18c9ecc89689a653199744e101528384ee9b49f4 (diff)
Agrega scripts varios para modificar propiedades semanticas
Diffstat (limited to 'bin')
-rw-r--r--bin/wiki/ListarPaginas.php66
-rw-r--r--bin/wiki/PropiedadActualizar.php119
-rw-r--r--bin/wiki/PropiedadObtener.php80
-rwxr-xr-xbin/wiki/Scripts/CompletaDireccionPorGeo.sh35
4 files changed, 300 insertions, 0 deletions
diff --git a/bin/wiki/ListarPaginas.php b/bin/wiki/ListarPaginas.php
new file mode 100644
index 00000000..1b231b89
--- /dev/null
+++ b/bin/wiki/ListarPaginas.php
@@ -0,0 +1,66 @@
+<?php
+# ----
+# Copyright (C) 2013-2020 - Reevo Project (http://reevo.org)
+# License: Affero GPL version 3 - http://www.gnu.org/licenses/agpl.html
+# ES: Este script recibe el nombre de Plantilla y lista todas las paginas que lo usan.
+# ----
+
+
+// error_reporting(0);
+// Load all the stuff
+require_once( __DIR__ . '/vendor/autoload.php' );
+require_once( __DIR__ .'/../../etc/global_config.php' );
+
+// Log in to a wiki
+$api = new \Mediawiki\Api\MediawikiApi( $wgServer .'/api.php' );
+$api->login( new \Mediawiki\Api\ApiUser( $REEVO_WIKI_API_USER, $REEVO_WIKI_API_PASS ) );
+$services = new \Mediawiki\Api\MediawikiFactory( $api );
+
+// Obtengo el nombre del template como parámetro
+if ($argv[1]) {
+
+ $pageListGetter = $services->newPageListGetter();
+ $tipo = explode(':',$argv[1]);
+ switch ($tipo[0]) {
+ case 'Plantilla'||'Template':
+ $examplePages = $pageListGetter->getPageListFromPageTransclusions( $argv[1] );
+ break;
+ case 'Categoría'||'Category':
+ $examplePages = $pageListGetter->getPageListFromCategoryName( $argv[1] );
+ break;
+ default:
+ echo "No reconozco el tipo de objeto que estas intentando listar (debe ser Categoría o Plantilla)\n\n";
+ exit();
+ break;
+ }
+ $array = accessProtected($examplePages,'pages');
+ foreach ( $array as $exPage ) {
+ $pagename = $exPage->getTitle()->getText();
+ echo "$pagename \n";
+ }
+} else {
+ echo "Hay que indicar una plantilla como parametro \n";
+}
+
+function accessProtected($obj, $prop) {
+ $reflection = new ReflectionClass($obj);
+ $property = $reflection->getProperty($prop);
+ $property->setAccessible(true);
+ return $property->getValue($obj);
+}
+
+
+
+
+
+// print_r($examplePages);
+
+// $myArray = json_decode(json_encode($examplePages), true);
+// print_r($examplePages->getPageList());
+
+
+
+
+
+
+?>
diff --git a/bin/wiki/PropiedadActualizar.php b/bin/wiki/PropiedadActualizar.php
new file mode 100644
index 00000000..7ed1e5cb
--- /dev/null
+++ b/bin/wiki/PropiedadActualizar.php
@@ -0,0 +1,119 @@
+<?php
+# ----
+# Copyright (C) 2013-2020 - Reevo Project (http://reevo.org)
+# License: Affero GPL version 3 - http://www.gnu.org/licenses/agpl.html
+# ES: Este script recibe el nombre de una pagina e intenta agregar o actualizar las propiedades específicadas de las mismas con el valor dado.
+# Algo como: php PropiedadActualizar.php -t=Experiencia:Summerhill -f=true -p="experiencia:descripcion|Algo" -p="experiencia:lugar-pais|AR"
+# ----
+
+
+// error_reporting(0);
+// Load all the stuff
+require_once( __DIR__ . '/vendor/autoload.php' );
+require_once( __DIR__ .'/../../etc/global_config.php' );
+
+// Log in to a wiki
+$api = new \Mediawiki\Api\MediawikiApi( $wgServer .'/api.php' );
+$api->login( new \Mediawiki\Api\ApiUser( $REEVO_WIKI_API_USER, $REEVO_WIKI_API_PASS ) );
+$services = new \Mediawiki\Api\MediawikiFactory( $api );
+
+$opciones = getopt('t:p:f:');
+
+if ($opciones['t']) {
+ if ($opciones['p']) {
+ $title = $opciones['t'];
+ if (is_string($opciones['p'])) {
+ $prop[] = $opciones['p'];
+ } else {
+ $prop = $opciones['p'];
+ }
+ foreach ($prop as $key => $value) {
+ $p = explode('|', $value);
+ $propiedades[$p[0]] = $p[1];
+ }
+ $result = ActualizarPropiedades($title, $propiedades, $opciones, $services);
+ echo "\nSe actualizó correctamente la página $result ($wgServer/$result)\n\n\n";
+ } else {
+ echo "Es necesario que definas al menos una propiedad para agregar o modificar con -p='propiedad|valor'\n";
+ }
+} else {
+ echo "Es necesario que definas el nombe de la pagina a editar con -t='Pagina'\n";
+}
+
+// Obtengo el nombre de la página como parámetro
+
+function ActualizarPropiedades($title, $propiedades, $opciones, $services) {
+
+ $page = $services->newPageGetter()->getFromTitle( $title );
+ $pagecontent = $page->getRevisions()->getLatest();
+ if (!$pagecontent) {
+ echo "\n**** ERROR: No existe una página con el nombre '$title'\n\n\n";
+ exit();
+ } else {
+ echo "\n**** PROCESANDO: '$title' ****\n";
+ }
+
+ $pagecontent = $page->getRevisions()->getLatest()->getContent()->getData();
+
+ $template = preg_grep('/^\{{(.*(?<!}}))$/', explode("\n", $pagecontent));
+ $template_pos = array_key_first($template);
+ $templatefin = preg_grep('/^\}}(.*)$/', explode("\n", $pagecontent));
+ $templatefin_pos = array_key_first($templatefin);
+
+
+ $extracto = preg_grep('/^\|/', explode("\n", $pagecontent));
+ foreach ($extracto as $key => $value) {
+ $data = str_replace('|','',$value);
+ $data_limpia = explode('=', $data);
+ $propiedades_previas[$data_limpia[0]] = $data_limpia[1];
+ }
+
+ // Verifico que tengo que hacer
+ if ($opciones['f'] == 'true') {
+ echo "\nVoy a actulizar y/o agregar las siguientes propiedades: \n";
+ $propiedades_actualizables = array_intersect_key($propiedades,$propiedades_previas);
+ print_r($propiedades_actualizables);
+ $propiedades_final = array_replace($propiedades_previas, $propiedades);
+ } else {
+ echo "\nNo se van a reemplazar los valores de propiedades existentes. Agrega '-f=true' para hacerlo. Propiedadedes existentes con sus valores actuales: \n";
+ $propiedades_actualizables = array_intersect_key($propiedades, $propiedades_previas);
+ print_r($propiedades_actualizables);
+
+ echo "\nPropiedades antes no definidas que voy a agregar: \n";
+ $propiedades_nuevas = array_diff_key($propiedades,$propiedades_previas);
+ print_r($propiedades_nuevas);
+ $propiedades_final = array_replace($propiedades_previas, $propiedades_nuevas);
+ }
+
+ // Construyo un array con el formato del template original
+ $propiedades_final_array[] = $template[$template_pos];
+ foreach ($propiedades_final as $key => $value) {
+ $propiedades_final_array[] = '|'.$key.'='.$value;
+ }
+ $propiedades_final_array[] = $templatefin[$templatefin_pos];
+
+ // Hago un array con el contenido de toda la pagina y reemplazo el template viejo por el nuevo
+ $contenido_array = explode("\n", $pagecontent);
+ $templatefin_pos = $templatefin_pos + 1;
+ array_splice($contenido_array, $template_pos, $templatefin_pos,$propiedades_final_array);
+
+ $contenido_final = implode("\n", $contenido_array);
+
+ $newContent = new \Mediawiki\DataModel\Content( $contenido_final );
+ $pagetitle = new \Mediawiki\DataModel\Title( $title );
+ $identifier = new \Mediawiki\DataModel\PageIdentifier( $pagetitle );
+ $revision = new \Mediawiki\DataModel\Revision( $newContent, $identifier );
+ $services->newRevisionSaver()->save( $revision );
+
+ return $title;
+
+}
+
+function accessProtected($obj, $prop) {
+ $reflection = new ReflectionClass($obj);
+ $property = $reflection->getProperty($prop);
+ $property->setAccessible(true);
+ return $property->getValue($obj);
+}
+
+?>
diff --git a/bin/wiki/PropiedadObtener.php b/bin/wiki/PropiedadObtener.php
new file mode 100644
index 00000000..05bb157b
--- /dev/null
+++ b/bin/wiki/PropiedadObtener.php
@@ -0,0 +1,80 @@
+<?php
+# ----
+# Copyright (C) 2013-2020 - Reevo Project (http://reevo.org)
+# License: Affero GPL version 3 - http://www.gnu.org/licenses/agpl.html
+# ES: Este script recibe el nombre de una pagina e intenta obtener el valor las propiedades específicas.
+# Algo como: php PropiedadObtener.php -t=Experiencia:Summerhill -p="experiencia:lugar" -p="experiencia:lugar-pais"
+# ----
+
+
+// error_reporting(0);
+// Load all the stuff
+require_once( __DIR__ . '/vendor/autoload.php' );
+require_once( __DIR__ .'/../../etc/global_config.php' );
+
+// Log in to a wiki
+$api = new \Mediawiki\Api\MediawikiApi( $wgServer .'/api.php' );
+$api->login( new \Mediawiki\Api\ApiUser( $REEVO_WIKI_API_USER, $REEVO_WIKI_API_PASS ) );
+$services = new \Mediawiki\Api\MediawikiFactory( $api );
+
+$opciones = getopt('t:p:f:');
+
+if ($opciones['t']) {
+ if ($opciones['p']) {
+ $title = $opciones['t'];
+ if (is_string($opciones['p'])) {
+ $prop[] = $opciones['p'];
+ } else {
+ $prop = $opciones['p'];
+ }
+ foreach ($prop as $key => $value) {
+ // $p = explode('|', $value);
+ $propiedades[$value] = '';
+ }
+ $result = ObtenerPropiedades($title, $propiedades, $opciones, $services);
+ } else {
+ echo "Es necesario que definas al menos una propiedad para obtener con -p='propiedad|valor'\n";
+ }
+} else {
+ echo "Es necesario que definas el nombe de la pagina a revisar con -t='Pagina'\n";
+}
+
+// Obtengo el nombre de la página como parámetro
+
+function ObtenerPropiedades($title, $propiedades, $opciones, $services) {
+
+ $page = $services->newPageGetter()->getFromTitle( $title );
+ $pagecontent = $page->getRevisions()->getLatest();
+ if (!$pagecontent) {
+ echo "\n**** ERROR: No existe una página con el nombre '$title'\n\n\n";
+ exit();
+ } else {
+ // echo "\n**** PROCESANDO: '$title' ****\n";
+ }
+
+ $pagecontent = $page->getRevisions()->getLatest()->getContent()->getData();
+
+ // armo un array con las propiedades de SMW
+ $extracto = preg_grep('/^\|/', explode("\n", $pagecontent));
+ foreach ($extracto as $key => $value) {
+ $data = str_replace('|','',$value);
+ $data_limpia = explode('=', $data);
+ $propiedades_previas[$data_limpia[0]] = $data_limpia[1];
+ }
+
+ foreach ($propiedades as $key => $value) {
+ if (array_key_exists($key, $propiedades_previas)) {
+ echo "$propiedades_previas[$key]\n";
+ }
+ }
+
+}
+
+function accessProtected($obj, $prop) {
+ $reflection = new ReflectionClass($obj);
+ $property = $reflection->getProperty($prop);
+ $property->setAccessible(true);
+ return $property->getValue($obj);
+}
+
+?>
diff --git a/bin/wiki/Scripts/CompletaDireccionPorGeo.sh b/bin/wiki/Scripts/CompletaDireccionPorGeo.sh
new file mode 100755
index 00000000..c77e83f3
--- /dev/null
+++ b/bin/wiki/Scripts/CompletaDireccionPorGeo.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# Este script lo usamos para actualizar los datos de ubicacion de experiencia a partir del campo que tiene la geolocalizacion... algo asi como "reverse geocoding". Usamos OSM nominatim: https://nominatim.org/release-docs/develop/api/Search/
+#
+# Se puede usar como: for i in `php ../ListarPaginas.php Plantilla:Experiencia`; do ./CompletaDireccionPorGeo.sh "$i"; done
+
+EXP="$1"
+
+curl -s "https://nominatim.openstreetmap.org/search.php?format=json&addressdetails=1&q=`php ../PropiedadObtener.php -t="$EXP" -p="experiencia:lugar" | sed 's/, /%2C+/g'`" > /tmp/json
+
+CALLE_ORIG=`php ../PropiedadObtener.php -t="$EXP" -p="experiencia:lugar-calle"`
+
+cat /tmp/json | jq .
+
+CALLE=`cat /tmp/json | jq '.[] | .address.road' && cat /tmp/json | jq '.[] | .address.house_number' && echo ", " && cat /tmp/json | jq '.[] | .address.neighbourhood' && echo ", " && cat /tmp/json | jq '.[] | .address.suburb'`
+CIUDAD=`cat /tmp/json | jq '.[] | .address.city' && cat /tmp/json | jq '.[] | .address.town' && echo ", " && cat /tmp/json | jq '.[] | .address.state_district'`
+PROVINCIA=`cat /tmp/json | jq '.[] | .address.state'`
+PAIS=`cat /tmp/json | jq '.[] | .address.country_code'`
+
+# Correcciones finales de formato
+
+if [ -z "$CALLE_ORIG" ]
+then
+ CALLE=`echo $CALLE | sed 's/"//g' | sed 's/ ,/,/g' | sed 's/null//g' | sed 's/ , //g' `
+ # No hay calle
+else
+ CALLE=`echo $CALLE | sed 's/"//g' | sed 's/ ,/,/g' | sed 's/null//g' | sed 's/ , //g' `
+ CALLE="$CALLE_ORIG ($CALLE)"
+fi
+
+CIUDAD=`echo $CIUDAD | sed 's/"//g' | sed 's/ ,/,/g' | sed 's/null//g' | sed 's/ , //g' `
+PROVINCIA=`echo $PROVINCIA | sed 's/"//g' | sed 's/ ,/,/g' | sed 's/null//g' | sed 's/ , //g' `
+PAIS=`echo ${PAIS^^} | sed 's/"//g' | sed 's/null//g'`
+
+php ../PropiedadActualizar.php -t="$EXP" -f="true" -p="experiencia:lugar-calle|$CALLE" -p="experiencia:lugar-ciudad|$CIUDAD" -p="experiencia:lugar-provincia|$PROVINCIA" -p="experiencia:lugar-pais|$PAIS"