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('/^\{{(.*(? $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); } ?>