PageRenderTime 120ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/php/framework/app/system/db/Session.php

http://agile-project2.googlecode.com/
PHP | 296 lines | 276 code | 18 blank | 2 comment | 35 complexity | 3b9b38a74871410c4cf988ca5a54c226 MD5 | raw file
Possible License(s): MIT, LGPL-2.0, BSD-3-Clause, GPL-2.0
  1. <?php
  2. include 'Database.php';
  3. class Session {
  4. private $sql;
  5. private $insert_id;
  6. private $error;
  7. public function __construct(){
  8. }
  9. public function save ($obj){
  10. $this->methodas($obj,"afterSave");
  11. $nameclass = get_class($obj);
  12. $reflector = new ReflectionClass( $nameclass );
  13. $properties = $reflector->getProperties();
  14. $name = "";
  15. $values = "";
  16. $num = count($properties);
  17. $i = 1;
  18. foreach($properties as $property){
  19. if($property->getName() != "id"){
  20. if( $num == $i ){
  21. $name = $name.$property->getName() ;
  22. $values = $values."'".$obj->{$property->getName()}."'";
  23. }else{
  24. $name = $name.$property->getName().", " ;
  25. $values = $values."'".$obj->{$property->getName()}."'".", " ;
  26. }
  27. }
  28. $i++;
  29. }
  30. $nameclass = substr($nameclass,0,strpos($nameclass,"Model"));
  31. $this->sql = "INSERT INTO ".$nameclass."( ".$name ." ) values(".$values.");" ;
  32. if(Database::Connect()->execute($this->sql)){
  33. $this->insert_id = Database::Connect()->insert_id();
  34. return true;
  35. }else{
  36. $this->error = Database::Connect()->error();
  37. return false;
  38. }
  39. }
  40. public function read ($obj){
  41. $reflector = new ReflectionClass( get_class($obj) );
  42. $properties = $reflector->getProperties();
  43. $name = "";
  44. $num = count($properties);
  45. $i = 1;
  46. foreach($properties as $property){
  47. if( $num == $i ){
  48. $name = $name.$property->getName() ;
  49. }else{
  50. $name = $name.$property->getName().", " ;
  51. }
  52. $i++;
  53. }
  54. $nameclass = get_class($obj);
  55. $nameclass = substr($nameclass,0,strpos($nameclass,"Model"));
  56. $this->sql = "SELECT ".$name." FROM ".$nameclass." WHERE id = '".$obj->{"id"}."';" ;
  57. $rst = Database::Connect()->query($this->sql);
  58. foreach ($rst->record as $value) {
  59. foreach($properties as $property){
  60. $obj->{$property->getName()} = $value[$property->getName()] ;
  61. }
  62. }
  63. return $obj;
  64. }
  65. public function readAll ($obj){
  66. $reflector = new ReflectionClass( get_class($obj) );
  67. $properties = $reflector->getProperties();
  68. $name = "";
  69. $num = count($properties);
  70. $i = 1;
  71. foreach($properties as $property){
  72. if( $num == $i ){
  73. $name = $name.$property->getName() ;
  74. }else{
  75. $name = $name.$property->getName().", " ;
  76. }
  77. $i++;
  78. }
  79. $i = 0;
  80. $this->sql = "SELECT ".$name." FROM ".get_class($obj).";" ;
  81. $rst = Database::Connect()->query($this->sql);
  82. foreach ($rst->record as $value) {
  83. $objrow = null;
  84. foreach($properties as $property){
  85. $objrow->{$property->getName()} = $value[$property->getName()] ;
  86. }
  87. $contaner[$i]=$objrow;
  88. $i++;
  89. }
  90. return $contaner;
  91. }
  92. public function detail ($obj){
  93. $nameClass = get_class($obj);
  94. $reflector = new ReflectionClass( $nameClass );
  95. $properties = $reflector->getProperties();
  96. $inner = "";
  97. $name = "";
  98. $i = 1;
  99. $ii = 1;
  100. $j = 0;
  101. $num = count($properties);
  102. foreach($properties as $property){
  103. if( $num == $ii ){
  104. $endsWith = substr( $property->getName() , -strlen( "_id" ));
  105. if($endsWith == "_id"){
  106. $newClass = substr( $property->getName(),0,-strlen( "_id" ));
  107. $newObjClass = new ReflectionClass( $newClass );
  108. $newProperties = $newObjClass->getProperties();
  109. $newnum = count($newProperties);
  110. $i = 1;
  111. foreach($newProperties as $newproperty){
  112. if( $newnum == $i ){
  113. $newname = $newname." ".$newClass.".".$newproperty->getName()." '".strtolower($newClass).".".$newproperty->getName()."'" ;
  114. }else{
  115. $newname = $newname." ".$newClass.".".$newproperty->getName()." '".strtolower($newClass).".".$newproperty->getName()."', " ;
  116. }
  117. $i++;
  118. }
  119. $inner = $inner."INNER JOIN ".$newClass." ".$newClass." ON ".$newClass.".id = ".$nameClass.".".$property->getName();
  120. $foreing[$j] = $newproperty->getName();
  121. //$foreingname[$j] = $newname;
  122. $name = $name." ".$nameClass.".".$property->getName()." '".strtolower($nameClass).".".$property->getName()."'" ;
  123. }else{
  124. $name = $name." ".$nameClass.".".$property->getName()." '".strtolower($nameClass).".".$property->getName()."'" ;
  125. }
  126. }else{
  127. $endsWith = substr( $property->getName() , -strlen( "_id" ));
  128. if($endsWith == "_id"){
  129. $newClass = substr( $property->getName(),0,-strlen( "_id" ));
  130. $newObjClass = new ReflectionClass( $newClass );
  131. $newProperties = $newObjClass->getProperties();
  132. $newnum = count($newProperties);
  133. $i = 1;
  134. foreach($newProperties as $newproperty){
  135. if( $newnum == $i ){
  136. $newname = $newname." ".$newClass.".".$newproperty->getName()." '".strtolower($newClass).".".$newproperty->getName()."'" ;
  137. }else{
  138. $newname = $newname." ".$newClass.".".$newproperty->getName()." '".strtolower($newClass).".".$newproperty->getName()."', " ;
  139. }
  140. $i++;
  141. }
  142. $inner = $inner."INNER JOIN ".$newClass." ".$newClass." ON ".$newClass.".id = ".$nameClass.".".$property->getName();
  143. $foreing[$j] = $newproperty->getName();
  144. //$foreingname[$j] = $newname;
  145. $name = $name." ".$nameClass.".".$property->getName()." '".strtolower($nameClass).".".$property->getName()."', " ;
  146. }else{
  147. $name = $name." ".$nameClass.".".$property->getName()." '".strtolower($nameClass).".".$property->getName()."', " ;
  148. }
  149. }
  150. $ii++;
  151. }
  152. $this->sql = "SELECT ".$name." , ".$newname." "." FROM ".get_class($obj)." ".get_class($obj)." ".$inner." WHERE ".get_class($obj).".id = '".$obj->{"id"}."';" ;
  153. return Database::Connect()->query($this->sql);
  154. }
  155. public function detailAll ($obj){
  156. $nameClass = get_class($obj);
  157. $reflector = new ReflectionClass( $nameClass );
  158. $nameClass = substr($nameClass,0,strpos($nameClass,"Model"));
  159. $properties = $reflector->getProperties();
  160. $inner = "";
  161. $name = "";
  162. $i = 1;
  163. $ii = 1;
  164. $j = 0;
  165. $num = count($properties);
  166. foreach($properties as $property){
  167. if( $num == $ii ){
  168. $endsWith = substr( $property->getName() , -strlen( "_id" ));
  169. if($endsWith == "_id"){
  170. $newClass = substr( $property->getName(),0,-strlen( "_id" ));
  171. $newObjClass = new ReflectionClass( $newClass );
  172. $newProperties = $newObjClass->getProperties();
  173. $newnum = count($newProperties);
  174. $i = 1;
  175. foreach($newProperties as $newproperty){
  176. if( $newnum == $i ){
  177. $newname = $newname." ".$newClass.".".$newproperty->getName()." '".strtolower($newClass).".".$newproperty->getName()."'" ;
  178. }else{
  179. $newname = $newname." ".$newClass.".".$newproperty->getName()." '".strtolower($newClass).".".$newproperty->getName()."', " ;
  180. }
  181. $i++;
  182. }
  183. $inner = $inner."INNER JOIN ".$newClass." ".$newClass." ON ".$newClass.".id = ".$nameClass.".".$property->getName();
  184. $foreing[$j] = $newproperty->getName();
  185. $name = $name." ".$nameClass.".".$property->getName()." '".strtolower($nameClass).".".$property->getName()."'" ;
  186. }else{
  187. $name = $name." ".$nameClass.".".$property->getName()." '".strtolower($nameClass).".".$property->getName()."'" ;
  188. }
  189. }else{
  190. $endsWith = substr( $property->getName() , -strlen( "_id" ));
  191. if($endsWith == "_id"){
  192. $newClass = substr( $property->getName(),0,-strlen( "_id" ));
  193. $newObjClass = new ReflectionClass( $newClass );
  194. $newProperties = $newObjClass->getProperties();
  195. $newnum = count($newProperties);
  196. $i = 1;
  197. foreach($newProperties as $newproperty){
  198. if( $newnum == $i ){
  199. $newname = $newname." ".$newClass.".".$newproperty->getName()." '".strtolower($newClass).".".$newproperty->getName()."'" ;
  200. }else{
  201. $newname = $newname." ".$newClass.".".$newproperty->getName()." '".strtolower($newClass).".".$newproperty->getName()."', " ;
  202. }
  203. $i++;
  204. }
  205. $inner = $inner."INNER JOIN ".$newClass." ".$newClass." ON ".$newClass.".id = ".$nameClass.".".$property->getName();
  206. $foreing[$j] = $newproperty->getName();
  207. $name = $name." ".$nameClass.".".$property->getName()." '".strtolower($nameClass).".".$property->getName()."', " ;
  208. }else{
  209. $name = $name." ".$nameClass.".".$property->getName()." '".strtolower($nameClass).".".$property->getName()."', " ;
  210. }
  211. }
  212. $ii++;
  213. }
  214. if($newname==""){
  215. $this->sql = "SELECT ".$name." FROM ".$nameClass." ".$nameClass." ".$inner.";" ;
  216. }else{
  217. $this->sql = "SELECT ".$name." , ".$newname." "." FROM ".$nameClass." ".$nameClass." ".$inner.";" ;
  218. }
  219. $rst = Database::Connect()->query($this->sql);
  220. return $rst;
  221. }
  222. public function update ($obj){
  223. $reflector = new ReflectionClass( get_class($obj) );
  224. $properties = $reflector->getProperties();
  225. $values = "";
  226. $num = count($properties);
  227. $i = 1;
  228. foreach($properties as $property){
  229. if( $num == $i ){
  230. $values = $values.$property->getName()." = '".$obj->{$property->getName()}."'";
  231. }else{
  232. $values = $values.$property->getName()." = '".$obj->{$property->getName()}."'".", " ;
  233. }
  234. $i++;
  235. }
  236. $nameclass = substr(get_class($obj),0,strpos(get_class($obj),"Model"));
  237. $this->sql = "UPDATE ".$nameclass." SET ".$values." WHERE id = '".$obj->{"id"}."';" ;
  238. if(Database::Connect()->execute($this->sql)){
  239. $this->insert_id = Database::Connect()->insert_id();
  240. return true;
  241. }else{
  242. $this->error = Database::Connect()->error();
  243. return false;
  244. }
  245. }
  246. public function delete ($obj){
  247. $nameclass = substr(get_class($obj),0,strpos(get_class($obj),"Model"));
  248. $this->sql = "DELETE FROM ".$nameclass." WHERE id = '".$obj->{"id"}."';" ;
  249. if(Database::Connect()->execute($this->sql)){
  250. $this->insert_id = Database::Connect()->insert_id();
  251. return true;
  252. }else{
  253. $this->error = Database::Connect()->error();
  254. return false;
  255. }
  256. }
  257. public function query ($sql){
  258. $this->sql = $sql;
  259. $rst = Database::Connect()->query($this->sql);
  260. return $rst;
  261. }
  262. public function traceSQL(){
  263. return $this->sql;
  264. }
  265. public function getInsertID(){
  266. return $this->insert_id;
  267. }
  268. public function methodas($obj,$method_name){
  269. if(method_exists(get_class($obj),$method_name)){
  270. $method= new ReflectionMethod(get_class($obj),$method_name);
  271. $method->invoke($obj);
  272. }
  273. }
  274. public function error(){
  275. return $this->error;
  276. }
  277. }
  278. ?>