DataFile=$Filename; $this->DataKey=$KeyFieldName; $this->Separator=$Separator; $this->color="#FFFFFF"; } function ReadCSV() { //read data into this->ItemsList and return it in an array $this->Items_Count=0; $this->ItemsList=array(); $Item=array(); $fp = fopen ($this->DataFile,"r"); $this->HeaderData = fgetcsv ($fp, 3000, $this->Separator); while ($DataLine = fgetcsv ($fp, 3000, $this->Separator)) { for($i=0;$iHeaderData);$i++){ $Item[$this->HeaderData[$i]]=$DataLine[$i]; } array_push($this->ItemsList,$Item); $this->Items_Count++; } fclose($fp); return ($this->ItemsList); } function Select($needle,$column="all") { //get items in a sort of SQL Select query and return them in an array $this->ReadCSV(); if($needle=="*") { $result=$this->ItemsList; } else { $result=array(); if($column=="all") { while(list($key,$line)=each($this->ItemsList)) { if (stristr(implode("",$line),$needle)) array_push($result,$line); } } else { while(list($key,$line)=each($this->ItemsList)) { if (stristr($line[$column],$needle)) array_push($result,$line); } } } return ($result); } function ListAll() { //prints a list of all Data $Data=$this->ReadCSV(); reset ($this->ItemsList); reset ($this->HeaderData); $HHeaders=""; $HData=""; while(list($HKey,$HVal)=each($this->HeaderData)) { //Create Headers Line $HHeaders.=$this->HTTD($HVal); } $HHeaders=$this->HTTR($HHeaders); while(list($LineKey,$LineVal)=each($this->ItemsList)) { //Read Data Lines $HDataLine=""; while(list($DataKey,$DataVal)=each($LineVal)) { //Dissect one Data Line $HDataLine.=$this->HTTD($DataVal); } $HData.=$this->HTTR($HDataLine); //and add HTML to Data } print ($this->HTPage($this->HTTable($HHeaders.$HData))); } function GetValues($field) { //Fetch all values of a specified field and return values in array $Data=$this->ReadCSV(); $values=array(); while(list($key,$val)=each($this->ItemsList)) { if(!in_array($val[$field],$values)) array_push($values,$val[$field]); } sort($values); return $values; } function Edit() { //All edit function in one Table $Data=$this->ReadCSV(); if(isset($_POST['commit'])) { $this->Update($_POST[$this->DataKey],$_POST); $Data=$this->ReadCSV(); } if(isset($_POST['add'])) { $this->Add($_POST[$this->DataKey],$_POST); $Data=$this->ReadCSV(); } if(isset($_POST['delete'])) { $this->Delete($_POST[$this->DataKey]); $Data=$this->ReadCSV(); } $PAGE=$this->EditList(); print $PAGE; } // Administration Area function Update($key,$data) { //Updating Item "key" with "data" named array $this->ReadCSV(); for($i=0;$iItemsList);$i++) { If($this->ItemsList[$i][$this->DataKey]==$key){ while(list($key,$val)=each($this->HeaderData)) { if(isset($data[$val])) $this->ItemsList[$i][$val]=$data[$val]; } } } $this->WriteData(); return($this->ItemsList); } function Add($key,$data) { //add an Item "key" with "data" named array $this->ReadCSV(); $NewLine=array(); $NewItem=array($this->DataKey=>$key); while(list($key,$val)=each($this->HeaderData)) { if(isset($data[$val])) { $NewItem[$val]=$data[$val]; } else { $NewItem[$val]=$data[$val]=""; } } array_push($this->ItemsList,$NewItem); $this->WriteData(); return($this->ItemsList); } function EditList() { //returns Editor's List of Items reset ($this->ItemsList); reset ($this->HeaderData); $HHeaders=$this->HTTD(" "); $HData=""; while(list($HKey,$HVal)=each($this->HeaderData)) { //Create Headers Line $HHeaders.=$this->HTTD($HVal); } $HHeaders=$this->HTTR($HHeaders); while(list($LineKey,$LineVal)=each($this->ItemsList)) { //Read Data Lines $HDataLine=""; while(list($DataKey,$DataVal)=each($LineVal)) { //Dissect one Data Line $HDataLine.=$this->HTInput($DataKey,$DataVal); } $HData.=$this->HTForm($LineVal[$this->DataKey],$this->HTTR($this->HTButton("commit").$HDataLine.$this->HTButton("delete"))); //and add HTML to Data } $HDataLine=""; reset($this->HeaderData); while(list($DataKey,$DataVal)=each($this->HeaderData)) { // Add an extra Line for Adding a record $HDataLine.=$this->HTInput($DataVal,""); } $HData.=$this->HTForm($LineVal[$this->DataKey],$this->HTTR($this->HTButton("add").$HDataLine)); //and add HTML to Data return($this->HTPage($this->HTTable($HHeaders.$HData))); } function Delete($DeleteKey) { //Remove Item "Key" from the file $inter=array(); while(list($key,$val)=each($this->ItemsList)) { If($val[$this->DataKey]!=$DeleteKey) array_push($inter,$val); } $this->ItemsList=$inter; $this->WriteData(); return($this->ItemsList); } function WriteData() { //writing contents of ItemList to Datafile reset($this->ItemsList); $Output=implode($this->Separator, $this->HeaderData)."\n"; while(list($key,$val)=each($this->ItemsList)) { for($i=0;$iHeaderData);$i++){ $writekey=$this->HeaderData[$i]; $writeitem[$writekey]=$val[$writekey]; } $Output.=implode($this->Separator, $writeitem)."\n"; } $fp = fopen ($this->DataFile,"w"); flock($fp,2); fputs($fp,$Output); flock($fp,3); fclose($fp); } // Accessory HTML output functions function HTPage($value) { // Places $value into BODY of HTML Page $result = "\n"; $result.="".$this->DataFile." Editor\n"; $result.="\n"; $result.="\n"; $result.="\n".$value."\n"; return $result; } function HTForm($item,$data) { //places $data into form $item return "
\n".$data."
\n"; } function HTTable($value) { //places $value into TABLE return "\n".$value."
\n"; } function HTTR($value) { //places $value into TR $this->SRotate(); return "\n".$value."\n"; } function HTTD($value) { // places $value into TD return "color."\">".$value."\n"; } function HTInput($field,$value) { //returns TD input field $Olen=strlen($value); if($Olen<3) { $Ilen=12; } else { $Ilen=$Olen; } return "color."\">\n"; } function HTButton($value) { // returns "$value" button return "\n"; } function SRotate() { //rotating colors for more readability of tables if($this->color=="#FFFFFF") { $this->color="#CCEEFF"; } else { $this->color="#FFFFFF"; } } } ?>