]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/Graph/external/jpgraph/src/utils/jpdocgen/jpdbdelclass.php
Se borran cosas que no entran en mlib.
[mecon/meconlib.git] / lib / MECON / Graph / external / jpgraph / src / utils / jpdocgen / jpdbdelclass.php
1 <?php
2 //==============================================================================
3 // Name:        JPDBDELCLASS.PHP
4 // Description: Deletes a class from the documentation DB
5 // Created:     2002-04-14 
6 // Author:          johanp@aditus.nu
7 // Version:     $Id: jpdbdelclass.php,v 1.3 2002/06/05 22:39:14 aditus Exp $
8 //
9 // License:         QPL 1.0
10 // Copyright (C) 2002 Johan Persson
11 //
12 //==============================================================================
13
14 include ("jpdb.php");
15 include ("de_utils.php");
16
17 DEFINE("DELDB_OVERRIDE_REFCHK",1);
18 DEFINE("DELDB_OVERRIDE_EXTCHK",2);
19
20 class RemoveDBClass {
21     var $iDB;
22     function RemoveDBCLass($aDB) {
23         $this->iDB = $aDB;
24     }
25     
26     function Run($aProjname,$aClass,$aFlags=0) {
27         
28         // Get some info about this class   
29         $q = 'SELECT * FROM tbl_class_'.$aProjname.' WHERE fld_name='."'$aClass'";
30         $res = $this->iDB->Query($q);
31         if( $res->NumRows() == 0 ) {
32             Utils::Error("Can't find class '$aClass' in DB.");
33             return false;
34         }
35                     
36         $class = $res->Fetch();
37         
38         // As a safety check we don't allow deleting classes who's
39         // methods are referenced by the method references in other classes.
40         
41         $q = "SELECT DISTINCT CONCAT(c.fld_name,'::<b>',b.fld_name,'</b>()') as fld_name 
42              FROM tbl_method_".$aProjname." as a,tbl_method_".$aProjname." as b,tbl_class_".$aProjname." as c 
43              WHERE a.fld_classidx=".$class['fld_key']." AND
44                    c.fld_key = b.fld_classidx AND
45                    (b.fld_methref1=a.fld_key OR
46                     b.fld_methref2=a.fld_key OR
47                     b.fld_methref3=a.fld_key OR
48                     b.fld_methref4=a.fld_key OR
49                     b.fld_methref5=a.fld_key) 
50               ";
51         $res = $this->iDB->Query($q);
52         $n = $res->NumRows(); 
53         if( $n > 0 && !($aFlags & DELDB_OVERRIDE_REFCHK)) {
54             $s = '';
55             while( $n > 0 ) {
56                 $row = $res->Fetch();
57                 $s .= $row['fld_name'];
58                 if( $n > 1 ) $s .= ",<br> ";
59                 --$n;
60             }
61             Utils::Error("Can't delete class '$aClass' since it's methods are referenced by:<br>$s<p>");    
62             return false;
63         }           
64         
65         // As another safety check we don't allow deleting classes which
66         // are superclasses to some other classes in the DB
67         
68         $q = 'SELECT fld_name FROM tbl_class_'.$aProjname.' WHERE fld_parentname='."'$aClass'";
69         $res = $this->iDB->Query($q);
70         $n = $res->NumRows(); 
71         if( $n > 0 && !($aFlags & DELDB_OVERRIDE_EXTCHK) ) {
72             $s = '';
73             while( $n > 0 ) {
74                 $row = $res->Fetch();
75                 $s .= "CLASS ".$row['fld_name'];
76                 if( $n > 1 ) $s .= ",<br> ";
77                 --$n;
78             }
79             Utils::Error("Can't delete class '$aClass' since it is inherited by:<br>$s<p>");    
80             return false;
81         }           
82         
83         // Checks are done. Point of no return. Now really delete class
84         
85         // Start by deleting all methods in this class
86         $q = "DELETE FROM tbl_method_".$aProjname." WHERE fld_classidx=".$class['fld_key'];
87         $this->iDB->Query($q);
88
89         // .. and all instance variables
90         $q = "DELETE FROM tbl_classvars_".$aProjname." WHERE fld_classidx=".$class['fld_key'];
91         $this->iDB->Query($q);
92         
93         // ... and the class
94         $q = "DELETE FROM tbl_class_".$aProjname." WHERE fld_name='".$aClass."'";
95         $this->iDB->Query($q);
96         
97         return true;        
98     }
99 }
100
101 // Driver
102 class Driver {
103     var $iDB;
104         var $iProjname,$iProjidx;
105         
106     function Driver() {
107         global $HTTP_COOKIE_VARS;
108         $this->iDB = DBFactory::InitDB();
109         
110                 $this->iProjname = strtok(@$HTTP_COOKIE_VARS['ddda_project'],':');              
111                 if( $this->iProjname != '' ) {
112                         $this->iProjidx = strtok(':');
113                 } 
114                 else
115                         die('No project specified.');                   
116     }
117     
118     function Run($aClass,$aFlags=0) {
119         $dbremove = new RemoveDBClass($this->iDB);
120         if( $dbremove->Run($this->iProjname,$aClass,$aFlags) )
121             echo "Class <b>$aClass</b> has been removed from JpGraph Database.";
122         else
123             Utils::Error("Can't remove class <b>$aClass</b> from JpGRaph Database.");
124     }   
125 }
126
127
128 //==========================================================================
129 // Script entry point
130 // Read URL argument and create Driver
131 //==========================================================================
132 if( !isset($HTTP_GET_VARS['class']) )
133     Utils::Error("Must specify class to remove from db. Use syntax class=<class-name>");
134 else
135     $class = urldecode($HTTP_GET_VARS['class']);
136     
137 $driver = new Driver();
138 $driver->Run($class);
139 ?>