pagename); define("EWIKI_CONTROL_LINE", 0); define("EWIKI_LIST_LIMIT", 25); define("EWIKI_DEFAULT_LANG", current_language()); define("EWIKI_HTML_CHARS", 1); define("EWIKI_DB_TABLE_NAME", "wiki_pages"); function ewiki_database_moodle($action, &$args, $sw1, $sw2) { global $wiki, $wiki_entry, $CFG; #-- result array $r = array(); switch($action) { /* Returns database entry as array for the page whose name was given with the "id" key in the $args array, usually fetches the latest version of a page, unless a specific "version" was requested in the $args array. */ # Ugly, but we need to choose which wiki we are about to change/read case "GET": $id = "'" . mysql_escape_string($args["id"]) . "'"; ($version = 0 + @$args["version"]) and ($version = "AND (version=$version)") or ($version=""); # $result = mysql_query("SELECT * FROM " . EWIKI_DB_TABLE_NAME # . " WHERE (pagename=$id) $version ORDER BY version DESC LIMIT 1" #); #if ($result && ($r = mysql_fetch_array($result, MYSQL_ASSOC))) { # $r["id"] = $r["pagename"]; # unset($r["pagename"]); #} #if (strlen($r["meta"])) { # $r["meta"] = @unserialize($r["meta"]); #} $select="(pagename=$id) AND wiki=".$wiki_entry->id." $version "; $sort="version DESC"; $result_obj=get_records_select(EWIKI_DB_TABLE_NAME, $select,$sort,"*",0,1); if($result_obj) { $r=get_object_vars($result_obj[$args["id"]]); $r["id"] = $r["pagename"]; unset($r["pagename"]); $r["meta"] = @unserialize($r["meta"]); } break; /* Increases the hit counter for the page name given in $args array with "id" index key. */ case "HIT": #mysql_query("UPDATE " . EWIKI_DB_TABLE_NAME . " SET hits=(hits+1) WHERE pagename='" . mysql_escape_string($args["id"]) . "'"); # set_field does not work because of the "hits+1" construct #print "DO ".mysql_escape_string($args["id"]); exit; execute_sql("UPDATE " .$CFG->prefix.EWIKI_DB_TABLE_NAME . " SET hits=(hits+1) WHERE pagename='" . mysql_escape_string($args["id"]) . "' and wiki=".$wiki_entry->id, 0); break; /* Stores the $data array into the database, while not overwriting existing entries (using WRITE); returns 0 on failure and 1 if saved correctly. */ case "OVERWRITE": $COMMAND = "REPLACE"; break; case "WRITE": $COMMAND="WRITE"; $args["pagename"] = $args["id"]; unset($args["id"]); if (is_array($args["meta"])) { $args["meta"] = serialize($args["meta"]); } #$sql1 = $sql2 = ""; #foreach ($args as $index => $value) { # if (is_int($index)) { # continue; # } # $a = ($sql1 ? ', ' : ''); # $sql1 .= $a . $index; # $sql2 .= $a . "'" . mysql_escape_string($value) . "'"; #} #strlen(@$COMMAND) || ($COMMAND = "INSERT"); foreach ($args as $index => $value) { if (is_int($index)) { continue; } $args[$index] =mysql_escape_string($value); } $args["wiki"]=$wiki_entry->id; # Check if Record exists if($COMMAND=="REPLACE") { if(count_records(EWIKI_DB_TABLE_NAME,"wiki", $wiki_entry->id,"pagename",$args["pagename"],"version",$args["version"])) { delete_record(EWIKI_DB_TABLE_NAME,"wiki", $wiki_entry->id,"pagename",$args["pagename"],"version",$args["version"]); } } # Write $result=insert_record(EWIKI_DB_TABLE_NAME,$args,false,"pagename"); #$result = mysql_query("$COMMAND INTO " . EWIKI_DB_TABLE_NAME . # " (" . $sql1 . ") VALUES (" . $sql2 . ")" #); #return($result && mysql_affected_rows() ?1:0); return $result; break; /* Checks for existence of the WikiPages whose names are given in the $args array. Returns an array with the specified WikiPageNames associated with values of "0" or "1" (stating if the page exists in the database). For images/binary db entries returns the "meta" field instead of an "1". */ case "FIND": $select = ""; foreach (array_values($args) as $id) { if (strlen($id)) { $r[$id] = 0; $select .= ($select ? " OR " : "") . "(pagename='" . mysql_escape_string($id) . "')"; } } if($select) { $select = "(".$select.") AND wiki=".$wiki_entry->id; $result = get_records_select(EWIKI_DB_TABLE_NAME,$select); #$sql = "SELECT pagename AS id, meta FROM " . # EWIKI_DB_TABLE_NAME . " WHERE $sql " #); #while ($result && ($row = mysql_fetch_row($result))) { # $r[$row[0]] = strpos($row[1], 's:5:"image"') ? $row[1] : 1; while(list($key, $val) = @each($result)) { $r[$val->pagename]=strpos($val->meta, 's:5:"image"') ? $val->meta : 1; } } break; /* Counts the number of Versions */ case "COUNTVERSIONS": $sql= "SELECT pagename AS id, count(*) as versioncount". " FROM ". $CFG->prefix.EWIKI_DB_TABLE_NAME . " WHERE wiki = ".$wiki_entry->id. " GROUP BY id"; #print "$sql"; $result=get_records_sql($sql); while(list($key, $val) = each($result)) { $r[$key]=$val->versioncount; } break; /* Returns an array of __all__ pages, where each entry is made up of the fields from the database requested with the $args array, e.g. array("flags","meta","lastmodified"); */ case "GETALL": #$result = mysql_query("SELECT pagename AS id, ". # implode(", ", $args) . # " FROM ". EWIKI_DB_TABLE_NAME . # " GROUP BY id, version DESC" #); $sql= "SELECT pagename AS id, ". implode(", ", $args) . " FROM ". $CFG->prefix.EWIKI_DB_TABLE_NAME . " WHERE wiki = ".$wiki_entry->id. " GROUP BY id, version"; #print "$sql"; $result=get_records_sql($sql); $r = new ewiki_dbquery_result($args); $drop = ""; #while ($result && ($row = mysql_fetch_array($result, MYSQL_ASSOC))) { # $i = EWIKI_CASE_INSENSITIVE ? strtolower($row["id"]) : $row["id"]; # if ($i != $drop) { # $drop = $i; # $r->add($row); # } #} #print "
"; print_r($result); print ""; while(list($key, $val) = each($result)) { $row=get_object_vars($val); $i = EWIKI_CASE_INSENSITIVE ? strtolower($row["id"]) : $row["id"]; if ($i != $drop) { $drop = $i; $r->add($row); } } break; /* Returns array of database entries (also arrays), where the one specified column matches the specified content string, for example $args = array("content" => "text...piece") is not guaranteed to only search/return the latest version of a page */ case "SEARCH": $field = implode("", array_keys($args)); $content = strtolower(implode("", $args)); if ($field == "id") { $field = "pagename"; } #$result = mysql_query("SELECT pagename AS id, version, flags" . # (EWIKI_DBQUERY_BUFFER && ($field!="pagename") ? ", $field" : "") . # " FROM " . EWIKI_DB_TABLE_NAME . # " WHERE LOCATE('" . mysql_escape_string($content) . "', LCASE($field)) " . # " GROUP BY id, version DESC" #); $sql= "SELECT pagename AS id, version, flags" . (EWIKI_DBQUERY_BUFFER && ($field!="pagename") ? ", $field" : "") . " FROM " . $CFG->prefix.EWIKI_DB_TABLE_NAME . " WHERE LOCATE('" . mysql_escape_string($content) . "', LCASE($field)) and wiki=".$wiki_entry->id . " GROUP BY id, version DESC"; $result=get_records_sql($sql); $r = new ewiki_dbquery_result(array("id","version",$field)); $drop = ""; #while ($result && ($row = mysql_fetch_array($result, MYSQL_ASSOC))) { # $i = EWIKI_CASE_INSENSITIVE ? strtolower($row["id"]) : $row["id"]; # if ($i != $drop) { # $drop = $i; # $r->add($row); # } #} while(list($key, $val) = @each($result)) { $row=get_object_vars($val); $i = EWIKI_CASE_INSENSITIVE ? strtolower($row["id"]) : $row["id"]; if ($i != $drop) { $drop = $i; $r->add($row); } } break; case "DELETE": $id = mysql_escape_string($args["id"]); $version = $args["version"]; #mysql_query("DELETE FROM " . EWIKI_DB_TABLE_NAME ." # WHERE pagename='$id' AND version=$version"); # print "DELETING wiki:".$wiki_entry->id."Pagename: $id Version: $version