diff options
Diffstat (limited to 'bin/reevotech/PropiedadActualizar.php')
-rw-r--r-- | bin/reevotech/PropiedadActualizar.php | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/bin/reevotech/PropiedadActualizar.php b/bin/reevotech/PropiedadActualizar.php new file mode 100644 index 00000000..6e0fb829 --- /dev/null +++ b/bin/reevotech/PropiedadActualizar.php @@ -0,0 +1,128 @@ +<?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" +# ---- + +$opciones = getopt('d:t:p:f:'); + +if ($opciones['d']) { + $deployment = $opciones['d']; +} else { + echo "Es necesario que definas el nombre del deployment con -d='ecoversities'\n"; + exit; +} + +// error_reporting(0); +// Load all the stuff +require_once( __DIR__ . '/vendor/autoload.php' ); +require_once( __DIR__ .'/../../etc/global_config-'.$deployment.'.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 ); +echo "Deployment URL: $wgServer \n"; + + +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, 2); + $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); +} + +?> |