davidg Thu Mar 8 02:25:15 2001 EDT
Added files:
/php4/ext/midgard session.c mgd_session.h session.sql
Modified files:
/php4/ext/midgard article.c
Log:
Session management (experimental code)
Index: php4/ext/midgard/article.c
diff -u php4/ext/midgard/article.c:1.11 php4/ext/midgard/article.c:1.12
--- php4/ext/midgard/article.c:1.11 Tue Mar 6 02:35:02 2001
+++ php4/ext/midgard/article.c Thu Mar 8 02:25:15 2001
@@ -1,4 +1,4 @@
-/* $Id: article.c,v 1.11 2001/03/06 10:35:02 emile Exp $
+/* $Id: article.c,v 1.12 2001/03/08 10:25:15 davidg Exp $
Copyright (C) 1999 Jukka Zitting <[EMAIL PROTECTED]>
Copyright (C) 2000 The Midgard Project ry
Copyright (C) 2000 Emile Heyns, Aurora SA <[EMAIL PROTECTED]>
@@ -770,7 +770,7 @@
MGD_FUNCTION(bool, update_article, (int id, int topic, string name,
string title,
string abstract,
- string
content, string author,
+ string
+content, int author,
string url,
string calstart,
int caldays,
int icon, int view,
int print,
string extra1, string extra2,
Index: php4/ext/midgard/session.c
+++ php4/ext/midgard/session.c
/* $Id: session.c,v 1.1 2001/03/08 10:25:15 davidg Exp $
Copyright (C) 1999 Jukka Zitting <[EMAIL PROTECTED]>
Copyright (C) 2000 The Midgard Project ry
Copyright (C) 2001 David Guerizec, Aurora SA <[EMAIL PROTECTED]>
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "php_midgard.h"
#if HAVE_MIDGARD
#if HAVE_MIDGARD_SESSION
#include "php.h"
#include "../session/php_session.h"
#include "mgd_session.h"
#define GET_MGD midgard * mgd = mgd_handle();
typedef struct {
int id;
int ready;
} ps_midgard;
ps_module ps_mod_midgard = {
PS_MOD(midgard)
};
static int ps_midgard_valid_key(const char *key)
{
size_t len;
const char *p;
char c;
int ret = 1;
for (p = key; (c = *p); p++) {
/* valid characters are a..z,A..Z,0..9 */
if (!((c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') ||
(c >= '0' && c <= '9'))) {
ret = 0;
break;
}
}
len = p - key;
if (len == 0)
ret = 0;
return ret;
}
static int ps_midgard_write(ps_midgard * data, const char * key, const char * val)
{
GET_MGD;
if(!data->ready)
return FAILURE;
if(data->id) {
if(mgd_update(mgd, "session", data->id,
"sess_data='$s', "
"expire=UNIX_TIMESTAMP() + 3600, "
"changed=UNIX_TIMESTAMP()",
val))
return SUCCESS;
assert(0);
} else {
if((data->id = mgd_create(mgd, "session",
"sess_key, sess_data, person, expire,
changed",
"$q, $q, $d, UNIX_TIMESTAMP() + 3600,
UNIX_TIMESTAMP()",
key, val, mgd_user(mgd))))
return SUCCESS;
assert(0);
}
return FAILURE;
}
static void ps_midgard_open(ps_midgard *data, const char *key)
{
GET_MGD;
if(data->id) {
php_error(E_WARNING, "Called twice ??");
}
data->id = 0;
if(!mgd) {
php_error(E_WARNING, "Midgard is not ready yet for session management,"
" please come back later...");
return;
}
if(!ps_midgard_valid_key(key))
return;
data->id = mgd_exists_id(mgd, "session",
"sess_key=$q AND person=$d", // AND
expire>=UNIX_TIMESTAMP()",
key, mgd_user(mgd));
data->ready = 1;
return;
}
#define PS_MIDGARD_DATA ps_midgard *data = PS_GET_MOD_DATA()
PS_OPEN_FUNC(midgard)
{
ps_midgard *data;
data = ecalloc(sizeof(*data), 1);
PS_SET_MOD_DATA(data);
data->id = 0;
data->ready = 0;
return SUCCESS;
}
PS_CLOSE_FUNC(midgard)
{
PS_MIDGARD_DATA;
efree(data);
*mod_data = NULL;
return SUCCESS;
}
PS_READ_FUNC(midgard)
{
midgard_res * res;
PS_MIDGARD_DATA;
GET_MGD;
ps_midgard_open(data, key);
if(!data->id) return FAILURE;
res = mgd_query(mgd, "SELECT sess_data FROM session WHERE id=$d",
data->id);
if(res) {
if(mgd_fetch(res)) {
*vallen = strlen(mgd_colvalue(res, 0));
*val = estrdup(mgd_colvalue(res, 0));
mgd_release(res);
return SUCCESS;
}
mgd_release(res);
}
return FAILURE;
}
PS_WRITE_FUNC(midgard)
{
PS_MIDGARD_DATA;
GET_MGD;
ps_midgard_open(data, key);
if(!mgd) {
php_error(E_WARNING, "Midgard is not ready yet for session management,"
" please come back later...");
return FAILURE;
}
return ps_midgard_write(data, key, val);
}
PS_DESTROY_FUNC(midgard)
{
PS_MIDGARD_DATA;
GET_MGD;
ps_midgard_open(data, key);
if(!data->id) return FAILURE;
if(mgd_delete(mgd, "session", data->id))
return SUCCESS;
return FAILURE;
}
PS_GC_FUNC(midgard)
{
midgard_res * res;
GET_MGD;
if(!mgd) {
php_error(E_WARNING, "Midgard is not ready yet for session management,"
" please come back later...");
return FAILURE;
}
res = mgd_query(mgd, "DELETE FROM session "
"WHERE expire < UNIX_TIMESTAMP()");
if(res) {
mgd_release(res);
return SUCCESS;
}
return FAILURE;
}
#endif // HAVE_MIDGARD_SESSION
#endif // HAVE_MIDGARD
Index: php4/ext/midgard/mgd_session.h
+++ php4/ext/midgard/mgd_session.h
/* $Id: mgd_session.h,v 1.1 2001/03/08 10:25:15 davidg Exp $
Copyright (C) 1999 Jukka Zitting <[EMAIL PROTECTED]>
Copyright (C) 2000 The Midgard Project ry
Copyright (C) 2001 David Guerizec, Aurora SA <[EMAIL PROTECTED]>
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#if HAVE_MIDGARD_SESSION
#ifndef MGD_SESSION_H
#define MGD_SESSION_H
extern ps_module ps_mod_midgard;
#define ps_midgard_ptr &ps_mod_midgard
PS_FUNCS(midgard);
#endif
#endif // HAVE_MIDGARD_SESSION
Index: php4/ext/midgard/session.sql
+++ php4/ext/midgard/session.sql
#
# Table structure for table 'session'
#
CREATE TABLE session (
id int(11) unsigned NOT NULL auto_increment,
sess_key varchar(255) NOT NULL,
sess_data text NOT NULL,
expire timestamp(14),
person int(11) unsigned DEFAULT '0' NOT NULL,
sitegroup int(11) unsigned DEFAULT '0' NOT NULL,
PRIMARY KEY (id),
KEY sessid (sess_key),
KEY expire (expire)
);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]