svn: /pear2/BugManager/trunk/ src/BugManager/Issue.php src/BugManager/Site/PEAR/IssueManager.php www/jsonrpc.php www/pearworm/source/class/pearworm/BugController.js www/pearworm/source/class/pearworm/HistoryController.js www/pearworm/source/class/pearworm/MainWindow.js www/pearworm/source/class/pearworm/model/Issue.js www/pearworm/source/class/pearworm/view/ReportIssue.js

[email protected] (Greg Beaver) Sat, 11 Sep 2010 15:11:26 +0000
Newsgroups php.pear.cvs,php.pear.core
Message-ID <[email protected]>
cellog                                   Sat, 11 Sep 2010 15:11:26 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=303276

Log:
hallelujah, adding a new bug works fully!  Now just have to implement search and we are ready to do the finer-grained stuff like user login detection and login form

Changed paths:
    U   pear2/BugManager/trunk/src/BugManager/Issue.php
    U   pear2/BugManager/trunk/src/BugManager/Site/PEAR/IssueManager.php
    U   pear2/BugManager/trunk/www/jsonrpc.php
    U   pear2/BugManager/trunk/www/pearworm/source/class/pearworm/BugController.js
    U   pear2/BugManager/trunk/www/pearworm/source/class/pearworm/HistoryController.js
    U   pear2/BugManager/trunk/www/pearworm/source/class/pearworm/MainWindow.js
    U   pear2/BugManager/trunk/www/pearworm/source/class/pearworm/model/Issue.js
    U   pear2/BugManager/trunk/www/pearworm/source/class/pearworm/view/ReportIssue.js
svn-diffs-303276.txt (text/x-diff, 13.5 KB)
Modified: pear2/BugManager/trunk/src/BugManager/Issue.php
===================================================================
--- pear2/BugManager/trunk/src/BugManager/Issue.php	2010-09-11 15:02:10 UTC (rev 303275)
+++ pear2/BugManager/trunk/src/BugManager/Issue.php	2010-09-11 15:11:26 UTC (rev 303276)
@@ -123,6 +123,9 @@
             $val = $this->$name;
             if (is_array($val)) {
                 foreach ($val as $i => $item) {
+                    if (!is_object($item)) {
+                        var_dump($item);exit;
+                    }
                     $val[$i] = $item->toJson();
                 }
             } elseif ($val instanceof ContextContainer) {
@@ -140,6 +143,9 @@
         if ($ret['modifiedtimestamp'] === null) {
             $ret['modifiedtimestamp'] = 'Never';
         }
+        if (!is_array($ret['assigned'])) {
+            $ret['assigned'] = array();
+        }
         $ret['assignedsummary'] = implode(',', array_map(function($a){return $a['handle'];},
                                                $ret['assigned']));
         $this->startDecorators();
@@ -489,6 +495,7 @@
             $this->retrieve();
         } else {
             $this->reporter = \PEAR2\BugManager\Main::site()->defaultActorManager()->loggedinUser();
+            $this->status = "Open";
         }
         $errs = new \PEAR2\MultiErrors;
         if (isset($input['phpversion'])) {
@@ -578,6 +585,10 @@
             throw new ValidationException('Errors in form', 0, null, $errs);
         }
         $this->save();
+        $bug = new self;
+        $bug->id = $this->id;
+        $bug->retrieve();
+        return $bug->toJson();
     }

     static function listStatuses($asis = false)

Modified: pear2/BugManager/trunk/src/BugManager/Site/PEAR/IssueManager.php
===================================================================
--- pear2/BugManager/trunk/src/BugManager/Site/PEAR/IssueManager.php	2010-09-11 15:02:10 UTC (rev 303275)
+++ pear2/BugManager/trunk/src/BugManager/Site/PEAR/IssueManager.php	2010-09-11 15:11:26 UTC (rev 303276)
@@ -224,8 +224,21 @@
                 $this->esc($value) . '"';
         } elseif ($contextname == 'packageversion') {
             Issue::addEscaper($this->escaper);
+            // first determine if there are any releases at all
             $sql = 'SELECT COUNT(*) as count FROM packages p, releases r
                 WHERE p.name=' . $bug->context['packagename']->value() . ' AND
+                    r.package=p.id';
+            $result = $this->mysqli->query($sql);
+            if ($result === false) {
+                throw new BugManager\UnexpectedValueException('Database error: '.$this->mysqli->error);
+            }
+            $ret = $result->fetch_assoc();
+            if (!$ret['count']) {
+                return $value === null || $value === "";
+            }
+
+            $sql = 'SELECT COUNT(*) as count FROM packages p, releases r
+                WHERE p.name=' . $bug->context['packagename']->value() . ' AND
                     r.package=p.id AND
                     r.version="' . $this->esc($value) . '"';
         } else {

Modified: pear2/BugManager/trunk/www/jsonrpc.php
===================================================================
--- pear2/BugManager/trunk/www/jsonrpc.php	2010-09-11 15:02:10 UTC (rev 303275)
+++ pear2/BugManager/trunk/www/jsonrpc.php	2010-09-11 15:11:26 UTC (rev 303276)
@@ -14,8 +14,10 @@
     if ($exception instanceof JsonRpcException) {
         if ($exception->getPrevious() instanceof PEAR2\BugManager\ValidationException) {
             $message = $exception->getMessage();
-            foreach ($exception->getPrevious()->getPrevious() as $err) {
-                $message .= "\n" . $err->getMessage();
+            if ($exception->getPrevious()->getPrevious() instanceof PEAR2\MultiErrors) {
+                foreach ($exception->getPrevious()->getPrevious() as $err) {
+                    $message .= "\n" . $err->getMessage();
+                }
             }
         } else {
             $message = $exception->getMessage();

Modified: pear2/BugManager/trunk/www/pearworm/source/class/pearworm/BugController.js
===================================================================
--- pear2/BugManager/trunk/www/pearworm/source/class/pearworm/BugController.js	2010-09-11 15:02:10 UTC (rev 303275)
+++ pear2/BugManager/trunk/www/pearworm/source/class/pearworm/BugController.js	2010-09-11 15:11:26 UTC (rev 303276)
@@ -22,7 +22,8 @@
   extend : qx.core.Object,

   events: {
-    "buglistUpdated" : "qx.event.type.Data"
+    "buglistUpdated" : "qx.event.type.Data",
+    "reloadTables"   : "qx.event.type.Data"
   },

   members : {
@@ -33,6 +34,7 @@
       for (var i = 0; i < this._bugs.length; i++) {
         if (this._bugs[i].issue == null) {
           delete this._bugs[i].issue;
+          delete this._bugs[i];
         }
       }
       alert("Could not load bug: " + result.getData().message);
@@ -50,6 +52,7 @@
     removeBug: function(id, doevent, removepane)
     {
       if (!this._bugs[id]) {
+        delete this._bugs[id];
         return;
       }
       if (removepane) {
@@ -95,10 +98,17 @@
     },
     handleSelection: function(e)
     {
+      if (!e.getData().length) {
+        this._bugs = {};
+        this.fireDataEvent("buglistUpdated", null);
+        return;
+      }
       var id = e.getData()[0].getIssue().getId();
-      var temp = this._bugs[id];
-      delete this._bugs[id];
-      this._bugs[id] = temp;
+      if (this._bugs[id]) {
+        var temp = this._bugs[id];
+        delete this._bugs[id];
+        this._bugs[id] = temp;
+      }
       this.fireDataEvent("buglistUpdated", null);
     },
     displayBug: function(id, view, data)
@@ -150,6 +160,7 @@
         myview.addListener("newbug", function(e) {
           this.removeBug(-1, false, true);
           this.displayBug(e.getData().id, "bug", e.getData());
+          this.fireDataEvent("reloadTables", null);
         }, this);
       }
       this._pane.add(myview);

Modified: pear2/BugManager/trunk/www/pearworm/source/class/pearworm/HistoryController.js
===================================================================
--- pear2/BugManager/trunk/www/pearworm/source/class/pearworm/HistoryController.js	2010-09-11 15:02:10 UTC (rev 303275)
+++ pear2/BugManager/trunk/www/pearworm/source/class/pearworm/HistoryController.js	2010-09-11 15:11:26 UTC (rev 303276)
@@ -121,6 +121,18 @@
       if (select) {
         this._bugcontroller.selectBug(-1);
       }
+    },
+
+    startWork: function()
+    {
+      // initial state retrieval
+      var state = qx.bom.History.getInstance().getState();
+      this.setApplicationState(state);
+    },
+
+    setupReloader: function(func, context)
+    {
+      this._bugcontroller.addListener("reloadTables", func, context);
     }
   },
   construct : function(leftpane, rightpane)
@@ -132,9 +144,6 @@
     this._bugcontroller = new pearworm.BugController(this._right);
     this._bugcontroller.addListener("buglistUpdated", this.saveState, this);

-    // initial state retrieval
-    var state = qx.bom.History.getInstance().getState();
-    this.setApplicationState(state);
     qx.bom.History.getInstance().addListener("request", function(e)
     {
       var state = e.getData();

Modified: pear2/BugManager/trunk/www/pearworm/source/class/pearworm/MainWindow.js
===================================================================
--- pear2/BugManager/trunk/www/pearworm/source/class/pearworm/MainWindow.js	2010-09-11 15:02:10 UTC (rev 303275)
+++ pear2/BugManager/trunk/www/pearworm/source/class/pearworm/MainWindow.js	2010-09-11 15:11:26 UTC (rev 303276)
@@ -24,6 +24,9 @@
   statics: {
     HISTORY: null
   },
+  events: {
+    "bugOK" : "qx.event.type.Data"
+  },
   construct : function()
   {
     this.base(arguments, "vertical");
@@ -31,15 +34,25 @@
     unused.listStatuses();
     unused.listPackages();
     unused.listPhpversions();
-    var subpane = new qx.ui.splitpane.Pane("horizontal");
-
-    var start = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)),
+    unused.addListener("dataLoaded", function() {
+      this._dataLoaded++;
+      if (this._dataLoaded == 3) {
+        this.fireDataEvent("bugOK", null);
+      }
+    }, this);
+    this.addListener("bugOK", function() {
+      pearworm.MainWindow.HISTORY.startWork();
+    });
+    var subpane = new qx.ui.splitpane.Pane("horizontal"),
+        start = new qx.ui.container.Composite(new qx.ui.layout.HBox(5)),
         table = new qx.ui.table.Table(),
         tablemodel = new pearworm.RemoteTable(),
         detail = new qx.ui.tabview.TabView("top"),
         columns = table.getTableColumnModel(),
         historymanager = new pearworm.HistoryController(table, detail);
     pearworm.MainWindow.HISTORY = historymanager;
+    this._tablemodel = tablemodel;
+    historymanager.setupReloader(this.reloadTableData, this);

     tablemodel.setColumns(["Id", "Date", "Last Modified", "Type", "Summary", "Site", "Reporter", "Assigned"],
                           ["id", "createtimestamp", "modifiedtimestamp", "type", "summary", "primarycategory",
@@ -71,5 +84,13 @@
     newbug.addListener("execute", function() {
       historymanager.displayReportBug(true);
     });
+  },
+  members: {
+    _dataLoaded: 0,
+    _tablemodel: null,
+    reloadTableData: function()
+    {
+      this._tablemodel.reloadData();
+    }
   }
 });

Modified: pear2/BugManager/trunk/www/pearworm/source/class/pearworm/model/Issue.js
===================================================================
--- pear2/BugManager/trunk/www/pearworm/source/class/pearworm/model/Issue.js	2010-09-11 15:02:10 UTC (rev 303275)
+++ pear2/BugManager/trunk/www/pearworm/source/class/pearworm/model/Issue.js	2010-09-11 15:11:26 UTC (rev 303276)
@@ -24,6 +24,7 @@
   events: {
     "dirty" : "qx.event.type.Data",
     "clean" : "qx.event.type.Data",
+    "newbug" : "qx.event.type.Data",
     "dataLoaded" : "qx.event.type.Data"
   },

@@ -68,7 +69,8 @@
       event: "changeAttachments"
     },
     packagename : {
-      event: "changePackagename"
+      event: "changePackagename",
+      init: ""
     },
     packageversion : {
       event: "changePackageversion",

Modified: pear2/BugManager/trunk/www/pearworm/source/class/pearworm/view/ReportIssue.js
===================================================================
--- pear2/BugManager/trunk/www/pearworm/source/class/pearworm/view/ReportIssue.js	2010-09-11 15:02:10 UTC (rev 303275)
+++ pear2/BugManager/trunk/www/pearworm/source/class/pearworm/view/ReportIssue.js	2010-09-11 15:11:26 UTC (rev 303276)
@@ -48,6 +48,8 @@
       var form = new qx.ui.form.Form();
       var manager = form.getValidationManager();
       var formcontroller = new qx.data.controller.Form(this._issue);
+      this._formcontroller = formcontroller;
+      this._form = form;
       var pvmodel = this._issue.listPhpversions();
       var packagemodel = this._issue.listPackages();
       var typemodel = qx.data.marshal.Json.createModel([
@@ -155,6 +157,7 @@
       typecontroller.setTarget(typefield);

       var packagecontroller = new qx.data.controller.List();
+      this._packagecontroller = packagecontroller;
       packagecontroller.setModel(packagemodel);
       packagecontroller.setLabelPath("name");
       var packagefield = new qx.ui.form.SelectBox().set({
@@ -163,25 +166,25 @@
       });
       packagecontroller.setTarget(packagefield);

-      if (packagemodel === null) {
-        this._issue.addListener("dataLoaded", function(e) {
-          if (e.getData() == "packages") {
-            var p = this._issue.listPackages();
-            packagecontroller.setModel(p);
-            this._issue.setPackagename(p.getItem(0).getName());
-          }
-        }, this);
-      }
-
       var packageversioncontroller = new qx.data.controller.List();
+      this._packageversioncontroller = packageversioncontroller;
       packagecontroller.bind("selection[0].versions", packageversioncontroller, "model");
       packageversioncontroller.setLabelPath("name");
       var packageversionfield = new qx.ui.form.SelectBox().set({
         minWidth: 150
       });
       packageversioncontroller.setTarget(packageversionfield);
+      packageversioncontroller.addListener("changeModel", function(e) {
+        var model = e.getData();
+        if (model.getLength()) {
+          this.setPackageversion(model.getItem(0).getName());
+        } else {
+          this.setPackageversion(null);
+        }
+      }, this._issue);

       var pvcontroller = new qx.data.controller.List();
+      this._pvcontroller = pvcontroller;
       pvcontroller.setModel(pvmodel);
       pvcontroller.setLabelPath("name");
       var pvfield = new qx.ui.form.SelectBox().set({
@@ -190,14 +193,6 @@
       });
       pvcontroller.setTarget(pvfield);

-      if (pvmodel === null) {
-        this._issue.addListener("dataLoaded", function(e) {
-          if (e.getData() == "phpversion") {
-            pvcontroller.setModel(this._issue.listPhpversions());
-          }
-        }, this);
-      }
-
       var summaryfield = new qx.ui.form.TextField("").set({
             minWidth: 400,
             required: true
@@ -243,7 +238,12 @@
       });
       scroller.add(renderer);
       return scroller;
-    }
+    },
+    _formcontroller: null,
+    _form: null,
+    _packagecontroller: null,
+    _pvcontroller: null,
+    _packageversioncontroller: null
   },
   construct : function(issue) {
     this.base(arguments);
@@ -266,6 +266,7 @@
     issue.setSecondarycategories("");
     issue.setNewcomment("");
     issue.setDescription("");
+    issue.setPackageversion(null);
     issue.setAssigned([]); // todo: add 3 assigned dropdowns
     issue.setAttachments([]);
   }