PhpLabWare version 0.3 
/plugins/ -> gb_plugin.php

1  <?php
2 
3  // plugin_inc.php - skeleton file for plugin codes
4  // plugin_inc.php - author: Nico Stuurman
5 
6  /*
7  Copyright 2002, Nico Stuurman
8 
9  This is a skeleton file to code your own plugins.
10  To use it, rename this file to something meaningfull,
11  add the path and name to this file (relative to the phplabware root)
12  in the column 'plugin_code' of 'tableoftables', and code away.
13  And, when you make something nice, please send us a copy!
14 
15  This program is free software: you can redistribute it and/ormodify it under
16  the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
17 
18  */
19 
20 
21  ////
22  // !This function is called after a record has been added
23  // As an example, it is used to write some data concerning the
24  // new record to a file for inclusion in a webpage
25  /*
26  function plugin_add ($db,$tableid,$id)
27  {
28  }
29  */
30 
31 
32  ////
33  // !Change/calculate/check values just before they are added/modified
34  // $fieldvalues is an array with the column names as key.
35  // Any changes you make in the values of $fieldvalues will result in
36  // changes in the database.
37  // You could, for instance, calculate a value of a field based on other fields
38  // make sure this function returns true (or does not exist), or additions/modification
39  // will fail!
40  function plugin_check_data($db,&$fieldvalues,$table_desc,$modify=false)
41  {
42     global $HTTP_POST_VARS, $HTTP_POST_FILES;
43 
44 
45  # Genbank entry parsing constants
46  # (may need to adjust!)
47  $KEYCOL=0;
48  $VALUECOL=12;
49  $FEATURECOL=5;
50  $FEATUREVALCOL=21;
51 
52     // we can not demand a file to be there since this might be a modify
53     if (is_readable($HTTP_POST_FILES["gbfile"]["tmp_name"][0])) {
54        // force the mime-type to be pdb compliant
55         $HTTP_POST_FILES["gbfile"]["type"][0]="chemical/seq-na-genbank";
56 
57  $lines = file($HTTP_POST_FILES["gbfile"]["tmp_name"][0]);
58  $feature_section=FALSE;
59  $sequence_section=FALSE;
60 
61  #parse file
62  foreach ($lines as $line) {
63 
64    #Accession?
65    if (preg_match("/^ACCESSION\s+(.+)/", $line, $matches)) {
66      $accessions=preg_split("/\s+/",$matches[1]);
67      continue;
68    }
69 
70    #VERSION?
71    if (preg_match("/^VERSION/", $line)) {
72      $vernid = preg_split("/\s+/", $line);
73      list($junk,$tmp)=preg_split("/:/",$vernid[3]);
74      $vernid[3]='g'.$tmp;
75      $version=$vernid[2];
76      $Nid=$vernid[3];
77      continue ;
78    }
79 
80    #COMMENT? - We need to check for VNTI info in here.
81    if (preg_match("/^COMMENT\s+(.+)/", $line, $matches)) {
82      $comment_text=$matches[1];
83 
84      if (preg_match("/This file is created by Vector NTI/",$comment_text)) {
85        $VNTI_file=TRUE;
86      }
87      if (preg_match("/VNTNAME\|(.*)\|/",$comment_text,$matches)) {
88        $name=$matches[1];
89      }
90      if (preg_match("/VNTAUTHORNAME\|(.*)\|/",$comment_text,$matches)) {
91        $auth=$matches[1];
92      }
93 
94      #Done with comment checking - most of the rest of the VNTI stuff looks like
95      #drawing info
96      continue ;
97    }
98    # special case for the features table
99    # features section is all text from ^FEATURES to ^ORIGIN
100    if (preg_match("/^FEATURES/",$line)){
101        unset($keyword);
102        $feature_section=TRUE;
103    }
104    if ($feature_section){
105        if (preg_match("/^FEATURES/", $line)) {
106           unset ($features);
107           continue;
108        }
109        
110        if (preg_match("/^(BASE COUNT|ORIGIN)/", $line)) {
111           if (isset($feature))
112           $features[]=$feature;
113           unset ($feature);
114           if (preg_match("/^BASE COUNT/", $line))
115           continue;
116          
117           #special case for the sequence itself
118           if (preg_match("/^ORIGIN/", $line)) {
119           $feature_section=FALSE;
120           $sequence_section=TRUE;
121           continue;
122           }
123        }
124        $featurelabel = trim(substr($line,$FEATURECOL,$FEATUREVALCOL-$FEATURECOL));
125        $featurevalue = trim(substr($line,$FEATUREVALCOL));
126        if (isset($featurelabel)) {
127           if (isset($feature))
128           $features[]=$feature;
129           $feature = array('label'=>$featurelabel,'value'=>$featurevalue);
130        } else {
131           $feature['value'] .= $featurevalue;
132        }
133        continue;
134    }
135 
136 
137  #For now, don't parse any other keys
138 
139    #just scoop up sequence into one big string; we'll clean it up later.
140    #assumes sequence is last thing in file
141    if($sequence_section) {
142        if (preg_match("/^\/\//",$line))
143           continue;
144      $sequence.=$line;
145    }
146  }
147 
148  # remove leading numbers and whitespace
149  $sequence = preg_replace("/^(.{9,10})/m", "", $sequence); #strip leader
150  $sequence = preg_replace("/(.{10}) /m", "$1", $sequence); # remove spacers
151  $sequence = preg_replace("/\s/", "", $sequence); #strip newlines and whitespace
152 
153          #set table values appropriately
154          $fieldvalues["fullname"]=$name;
155          $fieldvalues["author"]=$auth;
156  }
157    return true;
158  }
159 
160  ////
161  // !Overrides the standard 'show record'function
162  function plugin_show($db,$tableinfo,$id,$USER,$system_settings,$backbutton=true)
163  {
164  }
165 
166 
167  ////
168  // !Extends the search query
169  // $query is the complete query that you can change and must return
170  // $fieldvalues is an array with the column names as key.
171  // if there is an $existing_clause (boolean) you should prepend your additions
172  // with ' AND' or ' OR', otherwise you should not
173  function plugin_search($query,$fieldvalues,$existing_clause)
174    {
175      return $query;
176    }
177 
178 
179  ////
180    // !Extends function getvalues
181    // $allfields is a 2-D array containing the field names of the table in the first dimension
182    // and name,columnid,label,datatype,display_table,display_record,ass_t,ass_column,
183    // ass_local_key,required,modifiable,text,values in the 2nd D
184    function plugin_getvalues($db,&$allfields,$id,$tableid)
185    {
186    }
187 
188  ////
189    // !Extends function display_add
190    // This lets you add information to every specific item
191    function plugin_display_add ($db,$tableid,$nowfield)
192    {
193      if ($nowfield["name"]=="gbfile") {
194        echo "<br>If a Vector NTI file is uploaded (above), the fields Name and Author will be extracted from the file.";
195      }
196 
197    }
198 
199 
200  ?>


Generated: Sun Oct 5 21:17:35 2003 SourceForge Logo Generated by PHPXref 0.2