[cvs] [Wiki] changed: DatabaseCleanup
Wiki Guest
wikiguest at horde.org
Mon Jan 12 16:02:59 UTC 2009
guest [193.50.125.9] Mon, 12 Jan 2009 11:02:59 -0500
Modified page: http://wiki.horde.org/DatabaseCleanup
New Revision: 1.3
Change log: add a sample using an api to purge old userdata
@@ -1,4 +1,83 @@
+January 12th 2009
+Another script in PHP using API removeUserData dom.lalot à gmail.com
+Sorry for my poor coding, I'm a Perl programmer not a PHP one.
+
+<code>
+#!/usr/bin/env php
+<?php
+ at define('AUTH_HANDLER', true);
+ at define('HORDE_BASE', dirname(__FILE__));
+# require_once HORDE_BASE . '/lib/base.php';
+// Do CLI checks and environment setup first.
+require_once HORDE_BASE . '/lib/core.php';
+require_once 'Horde/CLI.php';
+// Make sure no one runs this from the web.
+if (!Horde_CLI::runningFromCLI()) {
+ exit("Must be run from the command line\n");
+}
+// Load the CLI environment - make sure there's no time limit, init some
+// variables, etc.
+$cli = &Horde_CLI::singleton();
+$cli->init();
+// Include needed libraries.
+require_once HORDE_BASE . '/lib/base.php';
+// Authenticate as administrator.
+if (!count($conf['auth']['admins'])) {
+ exit("You must have at least one administrator configured to run
the alarms.php script.\n");
+}
+$auth = &Auth::singleton($conf['auth']['driver']);
+$auth->setAuth($conf['auth']['admins'][0], array());
+require_once HORDE_BASE . '/lib/Horde/Auth.php';
+global $conf;
+require_once 'DB.php';
+$db = &DB::connect($conf['sql']);
+if (is_a($db, 'PEAR_Error')) {
+ Horde::fatal($db, __FILE__, __LINE__);
+}
+$validusers=$auth->listUsers();
+$valides=count($validusers);
+if ($valides==0){
+ echo "Can't list users, your auth driver has no listusers capability\n";
+ exit;
+}
+echo "$valides valid users found\n";
+$valides=array();
+foreach($validusers as $value){
+ $valides[$value]=1;
+}
+// Looking at prefs to get most of old user data
+$db->setOption('portability', DB_PORTABILITY_LOWERCASE |
DB_PORTABILITY_ERRORS);
+$result = $db->query('SELECT pref_uid FROM horde_prefs WHERE pref_uid
like \'%\'');
+if (is_a($result, 'PEAR_Error')) {
+ $cli->message($result->toString(), 'cli.error');
+ exit;
+}
+
+$uid = array();
+while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
+ $login=$row['pref_uid'];
+ $uid[$login] = $login;
+}
+$total=count($uid);
+echo "$total data user found\n";
+exit; # Drop this line if you want to remove data
+
+//now compare valid and data found and purge
+foreach ($uid as $value) {
+ if (!array_key_exists($value,$valides)){
+ echo "Not Found $value\n";
+ Auth::removeUserData($value);
+ $supp++;
+ }
+}
+echo "suppressed $supp\n";
+?>
+
+
+</code>
+
+
Here is a database cleanup script that was first posted on the
Horde list by Jacques Beaudoin <jacques-beaudoin at cspi.qc.ca>
-
I changed it a little.
It really should be PHP-ized and get the database information from
the configs
More information about the cvs
mailing list