40e949 | 2004-01-14 | Elias Levy | | inherit "roxenlib";
constant browsers =
({
"AvantGo",
"Internet Explorer",
"Netscape",
"Lynx",
"Opera",
"Other"
});
constant oses =
({
"AIX",
"AmigaOS",
"BSD/OS",
"BeOS",
"FreeBSD",
"HP-UX",
"IRIX",
"Linux",
"MacOS",
"NetBSD",
"OS/2",
"OSF1",
"OpenBSD",
"SCO",
"Solaris",
"SunOS",
"Windows",
"Windows 95",
"Windows 98",
"Windows NT",
"Other"
});
void add_run(mapping m, object db)
{
object result;
string query;
array row;
query = "INSERT INTO runs (ad, campaign, startd, endd, impressions, "
"exposure, domains, browsers, oses, competitors) VALUES (" +
db->quote(m->ad) + " , " +
db->quote(m->campaign) + " , " +
db->quote(m->start) + " , " +
db->quote(m->end) + " , " +
db->quote(m->impressions) + " , " +
db->quote(m->exposure) + " ,'" +
db->quote(m->domains * "!") + "','" +
db->quote(m->browsers * "!") + "','" +
db->quote(m->oses * "!") + "','" +
db->quote(m->competitors * "!") + "' )";
db->query(query);
result = db->big_query("SELECT LAST_INSERT_ID()");
row = result->fetch_row();
set_ad_groups((int)row[0], db, m->groups / "\0");
set_default_groups((int)row[0], db,
m->defaul_groups?m->default_groups/"\0":({}));
do_update_weight(db, "0", row[0]);
}
array(mapping) get_runs(object db)
{
object result;
string query, ret;
array row, runs;
query = "SELECT r.id, CONCAT(c.name,':',r.startd,'-',r.endd) AS n "
"FROM runs AS r, campaigns AS c WHERE r.campaign=c.id ORDER BY n";
result = db->big_query(query);
runs = ({});
while(row = result->fetch_row())
runs += ({ (["id":row[0],"name":row[1]]) });
return runs;
}
array get_ad_groups(int id, object db)
{
object result;
array row, groups;
groups = ({});
result = db->big_query("SELECT gid FROM groupAds WHERE run="+id);
while(row = result->fetch_row())
groups += ({ row[0] });
return groups;
}
array get_default_groups(int id, object db)
{
object result;
array row, groups;
groups = ({});
result = db->big_query("SELECT gid FROM groupDefaultAds WHERE run="+id);
while(row = result->fetch_row())
groups += ({ row[0] });
return groups;
}
void set_ad_groups(int id, object db, array groups)
{
db->query("DELETE FROM groupAds WHERE run="+id);
foreach(groups, string g)
db->query("INSERT INTO groupAds (run, gid) "
"VALUES (" + id + "," + db->quote(g) + ")");
}
void set_default_groups(int id, object db, array groups)
{
db->query("DELETE FROM groupDefaultAds WHERE run="+id);
foreach(groups, string g)
db->query("INSERT INTO groupDefaultAds (run, gid) "
"VALUES (" + id + ", " + db->quote(g) + ")");
}
mapping get_info(int id, object db)
{
object result;
string query, ret;
array row;
query = "SELECT id, ad, campaign, startd, endd, impressions,"
"exposure, domains, browsers, oses, competitors "
"FROM runs WHERE id="+id;
result = db->big_query(query);
row = result->fetch_row();
return
([
"id" : row[0],
"ad" : row[1],
"campaign" : row[2],
"start" : row[3],
"end" : row[4],
"impressions" : row[5],
"groups" : get_ad_groups((int)row[0], db) * "\0",
"default_groups": get_default_groups((int)row[0], db) * "\0",
"exposure" : row[6], "domains" : (row[7]/"!") - ({""}),
"browsers" : (row[8]/"!") - ({""}),
"oses" : (row[9]/"!") - ({""}),
"competitors" : (row[10]/"!") - ({""})
]);
}
void set_info(mapping m, object db)
{
string query;
query = "UPDATE runs SET "
"ad=" + db->quote(m->ad) + ", "
"campaign=" + db->quote(m->campaign) + ", "
"startd=" + db->quote(m->start) + ", "
"endd=" + db->quote(m->end) + ", "
"impressions="+ db->quote(m->impressions) + ", "
"exposure=" + db->quote(m->exposure) + ", "
"domains='" + db->quote(arrayp(m->domains)?m->domains*"!":"")+"', "
"browsers='" + db->quote(arrayp(m->browsers)?m->browsers*"!":"")+"',"
"oses='" + db->quote(arrayp(m->oses)?m->oses*"!":"")+"', "
"competitors='"
+ db->quote(arrayp(m->competitors)?m->competitors*"!":"") + "' "
"WHERE id="+m->id;
db->query(query);
set_ad_groups((int)m->id, db, m->groups / "\0");
set_default_groups((int)m->id, db,
m->defaul_groups?m->default_groups/"\0":({}));
update_weight(db, m->id);
}
void delete_run(int id, object db)
{
object result;
string query, ret;
mapping m;
db->query("DELETE FROM impressions WHERE run="+id);
db->query("DELETE FROM groupAds WHERE run="+id);
db->query("DELETE FROM groupDefaultAds WHERE run="+id);
db->query("DELETE FROM runs WHERE id="+id);
}
string get_stats(int run, object db)
{
return .Ad.do_stats("run="+run, db);
}
void update_weight(object db, string rid)
{
|