diff options
-rw-r--r-- | bitbake/lib/toaster/contrib/tts/urllist.py | 3 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/static/js/base.js | 3 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/static/js/libtoaster.js | 8 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/static/js/projectapp.js | 73 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/templates/base.html | 3 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/templates/project.html | 2 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/tests.py | 1 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/urls.py | 2 | ||||
-rwxr-xr-x | bitbake/lib/toaster/toastergui/views.py | 110 |
9 files changed, 108 insertions, 97 deletions
diff --git a/bitbake/lib/toaster/contrib/tts/urllist.py b/bitbake/lib/toaster/contrib/tts/urllist.py index a7d6d6ec4e..433ac9fe85 100644 --- a/bitbake/lib/toaster/contrib/tts/urllist.py +++ b/bitbake/lib/toaster/contrib/tts/urllist.py | |||
@@ -40,10 +40,7 @@ URLS = [ | |||
40 | 'toastergui/project/1/importlayer', | 40 | 'toastergui/project/1/importlayer', |
41 | 'toastergui/project/1/targets/', | 41 | 'toastergui/project/1/targets/', |
42 | 'toastergui/project/1/machines/', | 42 | 'toastergui/project/1/machines/', |
43 | 'toastergui/xhr_build/', | ||
44 | 'toastergui/xhr_projectbuild/1/', | 43 | 'toastergui/xhr_projectbuild/1/', |
45 | 'toastergui/xhr_projectinfo/', | ||
46 | 'toastergui/xhr_projectedit/1', | ||
47 | 'toastergui/xhr_configvaredit/1', | 44 | 'toastergui/xhr_configvaredit/1', |
48 | 'toastergui/xhr_datatypeahead/1', | 45 | 'toastergui/xhr_datatypeahead/1', |
49 | 'toastergui/xhr_importlayer/', | 46 | 'toastergui/xhr_importlayer/', |
diff --git a/bitbake/lib/toaster/toastergui/static/js/base.js b/bitbake/lib/toaster/toastergui/static/js/base.js index 9424b6c328..9c8d01ef5a 100644 --- a/bitbake/lib/toaster/toastergui/static/js/base.js +++ b/bitbake/lib/toaster/toastergui/static/js/base.js | |||
@@ -29,7 +29,7 @@ function basePageInit (ctx) { | |||
29 | if (libtoaster.ctx.projectId == undefined) | 29 | if (libtoaster.ctx.projectId == undefined) |
30 | return; | 30 | return; |
31 | 31 | ||
32 | libtoaster.getProjectInfo(ctx.projectInfoUrl, libtoaster.ctx.projectId, | 32 | libtoaster.getProjectInfo(libtoaster.ctx.projectPageUrl, |
33 | function(data){ | 33 | function(data){ |
34 | if (data.machine.name == undefined || data.layers.length == 0) { | 34 | if (data.machine.name == undefined || data.layers.length == 0) { |
35 | /* we can't build anything with out a machine and some layers */ | 35 | /* we can't build anything with out a machine and some layers */ |
@@ -102,7 +102,6 @@ function basePageInit (ctx) { | |||
102 | /* TBD: do we override even if we already have a context project ?? */ | 102 | /* TBD: do we override even if we already have a context project ?? */ |
103 | /* TODO: replace global library context with references to the "selected" project */ | 103 | /* TODO: replace global library context with references to the "selected" project */ |
104 | libtoaster.ctx.projectPageUrl = selectedProject.projectPageUrl; | 104 | libtoaster.ctx.projectPageUrl = selectedProject.projectPageUrl; |
105 | libtoaster.ctx.xhrProjectEditUrl = selectedProject.xhrProjectEditUrl; | ||
106 | libtoaster.ctx.projectName = selectedProject.name; | 105 | libtoaster.ctx.projectName = selectedProject.name; |
107 | libtoaster.ctx.projectId = selectedProject.id; | 106 | libtoaster.ctx.projectId = selectedProject.id; |
108 | 107 | ||
diff --git a/bitbake/lib/toaster/toastergui/static/js/libtoaster.js b/bitbake/lib/toaster/toastergui/static/js/libtoaster.js index 72fb0a93f5..87910299a5 100644 --- a/bitbake/lib/toaster/toastergui/static/js/libtoaster.js +++ b/bitbake/lib/toaster/toastergui/static/js/libtoaster.js | |||
@@ -120,11 +120,11 @@ var libtoaster = (function (){ | |||
120 | } | 120 | } |
121 | 121 | ||
122 | /* Get a project's configuration info */ | 122 | /* Get a project's configuration info */ |
123 | function _getProjectInfo(url, projectId, onsuccess, onfail){ | 123 | function _getProjectInfo(url, onsuccess, onfail){ |
124 | $.ajax({ | 124 | $.ajax({ |
125 | type: "POST", | 125 | type: "GET", |
126 | data : { format: "json" }, | ||
126 | url: url, | 127 | url: url, |
127 | data: { project_id : projectId }, | ||
128 | headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, | 128 | headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, |
129 | success: function (_data) { | 129 | success: function (_data) { |
130 | if (_data.error !== "ok") { | 130 | if (_data.error !== "ok") { |
@@ -150,7 +150,7 @@ var libtoaster = (function (){ | |||
150 | function _editCurrentProject(data, onSuccess, onFail){ | 150 | function _editCurrentProject(data, onSuccess, onFail){ |
151 | $.ajax({ | 151 | $.ajax({ |
152 | type: "POST", | 152 | type: "POST", |
153 | url: libtoaster.ctx.xhrProjectEditUrl, | 153 | url: libtoaster.ctx.projectPageUrl + "?format=json", |
154 | data: data, | 154 | data: data, |
155 | headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, | 155 | headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, |
156 | success: function (data) { | 156 | success: function (data) { |
diff --git a/bitbake/lib/toaster/toastergui/static/js/projectapp.js b/bitbake/lib/toaster/toastergui/static/js/projectapp.js index a3309c76af..36c942fa29 100644 --- a/bitbake/lib/toaster/toastergui/static/js/projectapp.js +++ b/bitbake/lib/toaster/toastergui/static/js/projectapp.js | |||
@@ -156,6 +156,62 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc | |||
156 | * Retrieves text suggestions for text-edit drop down autocomplete boxes | 156 | * Retrieves text suggestions for text-edit drop down autocomplete boxes |
157 | */ | 157 | */ |
158 | 158 | ||
159 | $scope.getLayersAutocompleteSuggestions = function(currentValue) { | ||
160 | var deffered = $q.defer(); | ||
161 | |||
162 | $http({method:"GET", url: $scope.urls.layers, params : { search: currentValue, format: "json" }}) | ||
163 | .success(function (_data) { | ||
164 | if (_data.error != "ok") { | ||
165 | console.warn("error on data", _data.error); | ||
166 | deffered.reject(_data.error); | ||
167 | } | ||
168 | deffered.resolve(_data.rows); | ||
169 | }); | ||
170 | |||
171 | return deffered.promise; | ||
172 | } | ||
173 | |||
174 | $scope.filterProjectLayerIds = function () { | ||
175 | return $scope.layers.map(function (e) { return e.id; }); | ||
176 | } | ||
177 | |||
178 | $scope.getMachinesAutocompleteSuggestions = function(currentValue) { | ||
179 | var deffered = $q.defer(); | ||
180 | |||
181 | $http({method:"GET", url: $scope.urls.machines, params : { search: currentValue, format: "json" }}) | ||
182 | .success(function (_data) { | ||
183 | if (_data.error != "ok") { | ||
184 | console.warn("error on data", _data.error); | ||
185 | deffered.reject(_data.error); | ||
186 | } | ||
187 | deffered.resolve(_data.rows); | ||
188 | }); | ||
189 | |||
190 | return deffered.promise; | ||
191 | } | ||
192 | |||
193 | $scope.getRecipesAutocompleteSuggestions = function(currentValue) { | ||
194 | var deffered = $q.defer(); | ||
195 | |||
196 | $http({method:"GET", url: $scope.urls.targets, params : { search: currentValue, format: "json" }}) | ||
197 | .success(function (_data) { | ||
198 | if (_data.error != "ok") { | ||
199 | console.warn("error on data", _data.error); | ||
200 | deffered.reject(_data.error); | ||
201 | } | ||
202 | deffered.resolve(_data.rows); | ||
203 | }); | ||
204 | return deffered.promise; | ||
205 | } | ||
206 | |||
207 | $scope.values = function() { | ||
208 | var deffered = $q.defer(); | ||
209 | |||
210 | deffered.resolve(["mama", "tata"]); | ||
211 | |||
212 | return deffered.promise; | ||
213 | }; | ||
214 | |||
159 | $scope.getAutocompleteSuggestions = function(type, currentValue) { | 215 | $scope.getAutocompleteSuggestions = function(type, currentValue) { |
160 | var deffered = $q.defer(); | 216 | var deffered = $q.defer(); |
161 | 217 | ||
@@ -421,7 +477,7 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc | |||
421 | 477 | ||
422 | 478 | ||
423 | $scope.onLayerSelect = function (item) { | 479 | $scope.onLayerSelect = function (item) { |
424 | $scope.layerAddId = item.id; | 480 | $scope.layerToAdd = item; |
425 | }; | 481 | }; |
426 | 482 | ||
427 | $scope.machineSelect = function (machineName) { | 483 | $scope.machineSelect = function (machineName) { |
@@ -443,14 +499,9 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc | |||
443 | }; | 499 | }; |
444 | 500 | ||
445 | 501 | ||
446 | $scope.layerAddById = function (id) { | ||
447 | $scope.layerAddId = id; | ||
448 | $scope.layerAdd(); | ||
449 | }; | ||
450 | |||
451 | $scope.layerAdd = function() { | 502 | $scope.layerAdd = function() { |
452 | 503 | ||
453 | $http({method:"GET", url: $scope.urls.xhr_datatypeahead, params : { type: "layerdeps", value: $scope.layerAddId }}) | 504 | $http({method:"GET", url: $scope.layerToAdd.layerdict.layerdetailurl, params : {}}) |
454 | .success(function (_data) { | 505 | .success(function (_data) { |
455 | if (_data.error != "ok") { | 506 | if (_data.error != "ok") { |
456 | console.warn(_data.error); | 507 | console.warn(_data.error); |
@@ -493,7 +544,7 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc | |||
493 | }); | 544 | }); |
494 | 545 | ||
495 | modalInstance.result.then(function (selectedArray) { | 546 | modalInstance.result.then(function (selectedArray) { |
496 | selectedArray.push($scope.layerAddId); | 547 | selectedArray.push($scope.layerToAdd.layerversion.id); |
497 | console.warn("TRC6: selected", selectedArray); | 548 | console.warn("TRC6: selected", selectedArray); |
498 | 549 | ||
499 | $scope._makeXHRCall({ | 550 | $scope._makeXHRCall({ |
@@ -512,7 +563,7 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc | |||
512 | $scope._makeXHRCall({ | 563 | $scope._makeXHRCall({ |
513 | method: "POST", url: $scope.urls.xhr_edit, | 564 | method: "POST", url: $scope.urls.xhr_edit, |
514 | data: { | 565 | data: { |
515 | layerAdd: $scope.layerAddId, | 566 | layerAdd: $scope.layerToAdd.layerversion.id, |
516 | } | 567 | } |
517 | }).then(function () { | 568 | }).then(function () { |
518 | $scope.layerAddName = undefined; | 569 | $scope.layerAddName = undefined; |
@@ -768,10 +819,8 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc | |||
768 | 819 | ||
769 | 820 | ||
770 | _cmdExecuteWithParam("/layeradd=", function (layer) { | 821 | _cmdExecuteWithParam("/layeradd=", function (layer) { |
771 | angular.forEach(layer.split(","), function (l) { | 822 | $scope.layerToAdd = layer; |
772 | $scope.layerAddId = l; | ||
773 | $scope.layerAdd(); | 823 | $scope.layerAdd(); |
774 | }); | ||
775 | }); | 824 | }); |
776 | }; | 825 | }; |
777 | 826 | ||
diff --git a/bitbake/lib/toaster/toastergui/templates/base.html b/bitbake/lib/toaster/toastergui/templates/base.html index e10dc11673..5d51bc3c95 100644 --- a/bitbake/lib/toaster/toastergui/templates/base.html +++ b/bitbake/lib/toaster/toastergui/templates/base.html | |||
@@ -34,13 +34,11 @@ | |||
34 | projectsUrl : "{% url 'all-projects' %}", | 34 | projectsUrl : "{% url 'all-projects' %}", |
35 | {% if project.id %} | 35 | {% if project.id %} |
36 | xhrProjectDataTypeaheadUrl : "{% url 'xhr_datatypeahead' project.id %}", | 36 | xhrProjectDataTypeaheadUrl : "{% url 'xhr_datatypeahead' project.id %}", |
37 | xhrProjectEditUrl : "{% url 'xhr_projectedit' project.id %}", | ||
38 | projectPageUrl : "{% url 'project' project.id %}", | 37 | projectPageUrl : "{% url 'project' project.id %}", |
39 | projectName : "{{project.name}}", | 38 | projectName : "{{project.name}}", |
40 | projectId : {{project.id}}, | 39 | projectId : {{project.id}}, |
41 | {% else %} | 40 | {% else %} |
42 | xhrProjectDataTypeaheadUrl : undefined, | 41 | xhrProjectDataTypeaheadUrl : undefined, |
43 | xhrProjectEditUrl : undefined, | ||
44 | projectPageUrl : undefined, | 42 | projectPageUrl : undefined, |
45 | projectName : undefined, | 43 | projectName : undefined, |
46 | projectId : undefined, | 44 | projectId : undefined, |
@@ -53,7 +51,6 @@ | |||
53 | $(document).ready(function () { | 51 | $(document).ready(function () { |
54 | /* Vars needed for base.js */ | 52 | /* Vars needed for base.js */ |
55 | var ctx = {}; | 53 | var ctx = {}; |
56 | ctx.projectInfoUrl = "{% url 'xhr_projectinfo' %}"; | ||
57 | ctx.numProjects = {{projects|length}}; | 54 | ctx.numProjects = {{projects|length}}; |
58 | ctx.currentUrl = "{{request.path|escapejs}}"; | 55 | ctx.currentUrl = "{{request.path|escapejs}}"; |
59 | 56 | ||
diff --git a/bitbake/lib/toaster/toastergui/templates/project.html b/bitbake/lib/toaster/toastergui/templates/project.html index 933da4f7da..e598631304 100644 --- a/bitbake/lib/toaster/toastergui/templates/project.html +++ b/bitbake/lib/toaster/toastergui/templates/project.html | |||
@@ -430,7 +430,7 @@ angular.element(document).ready(function() { | |||
430 | scope = angular.element("#main").scope(); | 430 | scope = angular.element("#main").scope(); |
431 | scope.urls = {}; | 431 | scope.urls = {}; |
432 | scope.urls.xhr_build = "{% url 'xhr_projectbuild' project.id %}"; | 432 | scope.urls.xhr_build = "{% url 'xhr_projectbuild' project.id %}"; |
433 | scope.urls.xhr_edit = "{% url 'xhr_projectedit' project.id %}"; | 433 | scope.urls.xhr_edit = "{% url 'project' project.id %}?format=json"; |
434 | scope.urls.xhr_datatypeahead = "{% url 'xhr_datatypeahead' project.id %}"; | 434 | scope.urls.xhr_datatypeahead = "{% url 'xhr_datatypeahead' project.id %}"; |
435 | scope.urls.layers = "{% url 'all-layers' project.id %}"; | 435 | scope.urls.layers = "{% url 'all-layers' project.id %}"; |
436 | scope.urls.targets = "{% url 'all-targets' project.id %}"; | 436 | scope.urls.targets = "{% url 'all-targets' project.id %}"; |
diff --git a/bitbake/lib/toaster/toastergui/tests.py b/bitbake/lib/toaster/toastergui/tests.py index 0f10020940..c92c5feeb5 100644 --- a/bitbake/lib/toaster/toastergui/tests.py +++ b/bitbake/lib/toaster/toastergui/tests.py | |||
@@ -40,7 +40,6 @@ class AllProjectsViewTestCase(ProvisionedProjectTestCase): | |||
40 | self.assertTrue("id" in data["list"][0]) | 40 | self.assertTrue("id" in data["list"][0]) |
41 | self.assertTrue("xhrProjectDataTypeaheadUrl" in data["list"][0]) | 41 | self.assertTrue("xhrProjectDataTypeaheadUrl" in data["list"][0]) |
42 | self.assertTrue("projectPageUrl" in data["list"][0]) | 42 | self.assertTrue("projectPageUrl" in data["list"][0]) |
43 | self.assertTrue("xhrProjectEditUrl" in data["list"][0]) | ||
44 | self.assertTrue("projectBuildUrl" in data["list"][0]) | 43 | self.assertTrue("projectBuildUrl" in data["list"][0]) |
45 | 44 | ||
46 | class ProvisionedLayersProjectTestCase(ProvisionedProjectTestCase): | 45 | class ProvisionedLayersProjectTestCase(ProvisionedProjectTestCase): |
diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py index e10e0bb159..d527be0017 100644 --- a/bitbake/lib/toaster/toastergui/urls.py +++ b/bitbake/lib/toaster/toastergui/urls.py | |||
@@ -122,8 +122,6 @@ urlpatterns = patterns('toastergui.views', | |||
122 | name=tables.LayerMachinesTable.__name__.lower()), | 122 | name=tables.LayerMachinesTable.__name__.lower()), |
123 | 123 | ||
124 | url(r'^xhr_projectbuild/(?P<pid>\d+)$', 'xhr_projectbuild', name='xhr_projectbuild'), | 124 | url(r'^xhr_projectbuild/(?P<pid>\d+)$', 'xhr_projectbuild', name='xhr_projectbuild'), |
125 | url(r'^xhr_projectinfo/$', 'xhr_projectinfo', name='xhr_projectinfo'), | ||
126 | url(r'^xhr_projectedit/(?P<pid>\d+)$', 'xhr_projectedit', name='xhr_projectedit'), | ||
127 | url(r'^xhr_configvaredit/(?P<pid>\d+)$', 'xhr_configvaredit', name='xhr_configvaredit'), | 125 | url(r'^xhr_configvaredit/(?P<pid>\d+)$', 'xhr_configvaredit', name='xhr_configvaredit'), |
128 | 126 | ||
129 | url(r'^xhr_datatypeahead/(?P<pid>\d+)$', 'xhr_datatypeahead', name='xhr_datatypeahead'), | 127 | url(r'^xhr_datatypeahead/(?P<pid>\d+)$', 'xhr_datatypeahead', name='xhr_datatypeahead'), |
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 678e356e0d..91c4fa2543 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
@@ -2210,6 +2210,45 @@ if toastermain.settings.MANAGED: | |||
2210 | except User.DoesNotExist: | 2210 | except User.DoesNotExist: |
2211 | puser = None | 2211 | puser = None |
2212 | 2212 | ||
2213 | # execute POST requests | ||
2214 | if request.method == "POST": | ||
2215 | # add layers | ||
2216 | if 'layerAdd' in request.POST: | ||
2217 | for lc in Layer_Version.objects.filter(pk__in=request.POST['layerAdd'].split(",")): | ||
2218 | ProjectLayer.objects.get_or_create(project = prj, layercommit = lc) | ||
2219 | |||
2220 | # remove layers | ||
2221 | if 'layerDel' in request.POST: | ||
2222 | for t in request.POST['layerDel'].strip().split(" "): | ||
2223 | pt = ProjectLayer.objects.filter(project = prj, layercommit_id = int(t)).delete() | ||
2224 | |||
2225 | if 'projectName' in request.POST: | ||
2226 | prj.name = request.POST['projectName'] | ||
2227 | prj.save(); | ||
2228 | |||
2229 | if 'projectVersion' in request.POST: | ||
2230 | prj.release = Release.objects.get(pk = request.POST['projectVersion']) | ||
2231 | # we need to change the bitbake version | ||
2232 | prj.bitbake_version = prj.release.bitbake_version | ||
2233 | prj.save() | ||
2234 | # we need to change the layers | ||
2235 | for i in prj.projectlayer_set.all(): | ||
2236 | # find and add a similarly-named layer on the new branch | ||
2237 | try: | ||
2238 | lv = prj.compatible_layerversions(layer_name = i.layercommit.layer.name)[0] | ||
2239 | ProjectLayer.objects.get_or_create(project = prj, layercommit = lv) | ||
2240 | except IndexError: | ||
2241 | pass | ||
2242 | finally: | ||
2243 | # get rid of the old entry | ||
2244 | i.delete() | ||
2245 | |||
2246 | if 'machineName' in request.POST: | ||
2247 | machinevar = prj.projectvariable_set.get(name="MACHINE") | ||
2248 | machinevar.value=request.POST['machineName'] | ||
2249 | machinevar.save() | ||
2250 | |||
2251 | |||
2213 | # we use implicit knowledge of the current user's project to filter layer information, e.g. | 2252 | # we use implicit knowledge of the current user's project to filter layer information, e.g. |
2214 | pid = prj.id | 2253 | pid = prj.id |
2215 | 2254 | ||
@@ -2241,10 +2280,12 @@ if toastermain.settings.MANAGED: | |||
2241 | "branch" : { "name" : x.layercommit.get_vcs_reference(), "layersource" : x.layercommit.up_branch.layer_source.name if x.layercommit.up_branch != None else None}}, | 2280 | "branch" : { "name" : x.layercommit.get_vcs_reference(), "layersource" : x.layercommit.up_branch.layer_source.name if x.layercommit.up_branch != None else None}}, |
2242 | prj.projectlayer_set.all().order_by("id")), | 2281 | prj.projectlayer_set.all().order_by("id")), |
2243 | "targets" : map(lambda x: {"target" : x.target, "task" : x.task, "pk": x.pk}, prj.projecttarget_set.all()), | 2282 | "targets" : map(lambda x: {"target" : x.target, "task" : x.task, "pk": x.pk}, prj.projecttarget_set.all()), |
2283 | "variables": map(lambda x: (x.name, x.value), prj.projectvariable_set.all()), | ||
2244 | "freqtargets": freqtargets[:5], | 2284 | "freqtargets": freqtargets[:5], |
2245 | "releases": map(lambda x: {"id": x.pk, "name": x.name, "description":x.description}, Release.objects.all()), | 2285 | "releases": map(lambda x: {"id": x.pk, "name": x.name, "description":x.description}, Release.objects.all()), |
2246 | "project_html": 1, | 2286 | "project_html": 1, |
2247 | } | 2287 | } |
2288 | |||
2248 | try: | 2289 | try: |
2249 | context["machine"] = {"name": prj.projectvariable_set.get(name="MACHINE").value} | 2290 | context["machine"] = {"name": prj.projectvariable_set.get(name="MACHINE").value} |
2250 | except ProjectVariable.DoesNotExist: | 2291 | except ProjectVariable.DoesNotExist: |
@@ -2300,66 +2341,6 @@ if toastermain.settings.MANAGED: | |||
2300 | except Exception as e: | 2341 | except Exception as e: |
2301 | return HttpResponse(jsonfilter({"error":str(e) + "\n" + traceback.format_exc()}), content_type = "application/json") | 2342 | return HttpResponse(jsonfilter({"error":str(e) + "\n" + traceback.format_exc()}), content_type = "application/json") |
2302 | 2343 | ||
2303 | # This is a wraper for xhr_projectedit which allows for a project id | ||
2304 | # which only becomes known client side | ||
2305 | def xhr_projectinfo(request): | ||
2306 | if request.POST.has_key("project_id") == False: | ||
2307 | raise BadParameterException("invalid project id") | ||
2308 | |||
2309 | return xhr_projectedit(request, request.POST['project_id']) | ||
2310 | |||
2311 | def xhr_projectedit(request, pid): | ||
2312 | try: | ||
2313 | prj = Project.objects.get(id = pid) | ||
2314 | # add layers | ||
2315 | if 'layerAdd' in request.POST: | ||
2316 | for lc in Layer_Version.objects.filter(pk__in=request.POST['layerAdd'].split(",")): | ||
2317 | ProjectLayer.objects.get_or_create(project = prj, layercommit = lc) | ||
2318 | |||
2319 | # remove layers | ||
2320 | if 'layerDel' in request.POST: | ||
2321 | for t in request.POST['layerDel'].strip().split(" "): | ||
2322 | pt = ProjectLayer.objects.filter(project = prj, layercommit_id = int(t)).delete() | ||
2323 | |||
2324 | if 'projectName' in request.POST: | ||
2325 | prj.name = request.POST['projectName'] | ||
2326 | prj.save(); | ||
2327 | |||
2328 | if 'projectVersion' in request.POST: | ||
2329 | prj.release = Release.objects.get(pk = request.POST['projectVersion']) | ||
2330 | # we need to change the bitbake version | ||
2331 | prj.bitbake_version = prj.release.bitbake_version | ||
2332 | prj.save() | ||
2333 | # we need to change the layers | ||
2334 | for i in prj.projectlayer_set.all(): | ||
2335 | # find and add a similarly-named layer on the new branch | ||
2336 | try: | ||
2337 | lv = prj.compatible_layerversions(layer_name = i.layercommit.layer.name)[0] | ||
2338 | ProjectLayer.objects.get_or_create(project = prj, layercommit = lv) | ||
2339 | except IndexError: | ||
2340 | pass | ||
2341 | finally: | ||
2342 | # get rid of the old entry | ||
2343 | i.delete() | ||
2344 | |||
2345 | if 'machineName' in request.POST: | ||
2346 | machinevar = prj.projectvariable_set.get(name="MACHINE") | ||
2347 | machinevar.value=request.POST['machineName'] | ||
2348 | machinevar.save() | ||
2349 | |||
2350 | # return all project settings | ||
2351 | return HttpResponse(jsonfilter( { | ||
2352 | "error": "ok", | ||
2353 | "layers" : map(lambda x: {"id": x.layercommit.pk, "orderid" : x.pk, "name" : x.layercommit.layer.name, "giturl" : x.layercommit.layer.vcs_url, "url": x.layercommit.layer.layer_index_url, "layerdetailurl": reverse("layerdetails", args=(prj.id, x.layercommit.pk,)), "branch" : { "name" : x.layercommit.get_vcs_reference(), "layersource" : x.layercommit.up_branch.layer_source.name}}, prj.projectlayer_set.all().select_related("layer").order_by("id")), | ||
2354 | "builds" : _project_recent_build_list(prj), | ||
2355 | "variables": map(lambda x: (x.name, x.value), prj.projectvariable_set.all()), | ||
2356 | "machine": {"name": prj.projectvariable_set.get(name="MACHINE").value}, | ||
2357 | "prj": {"name": prj.name, "release": { "id": prj.release.pk, "name": prj.release.name, "desc": prj.release.description}}, | ||
2358 | }), content_type = "application/json") | ||
2359 | |||
2360 | except Exception as e: | ||
2361 | return HttpResponse(jsonfilter({"error":str(e) + "\n" + traceback.format_exc()}), content_type = "application/json") | ||
2362 | |||
2363 | 2344 | ||
2364 | from django.views.decorators.csrf import csrf_exempt | 2345 | from django.views.decorators.csrf import csrf_exempt |
2365 | @csrf_exempt | 2346 | @csrf_exempt |
@@ -2929,7 +2910,6 @@ if toastermain.settings.MANAGED: | |||
2929 | p.id = p.pk | 2910 | p.id = p.pk |
2930 | p.xhrProjectDataTypeaheadUrl = reverse('xhr_datatypeahead', args=(p.id,)) | 2911 | p.xhrProjectDataTypeaheadUrl = reverse('xhr_datatypeahead', args=(p.id,)) |
2931 | p.projectPageUrl = reverse('project', args=(p.id,)) | 2912 | p.projectPageUrl = reverse('project', args=(p.id,)) |
2932 | p.xhrProjectEditUrl = reverse('xhr_projectedit', args=(p.id,)) | ||
2933 | p.projectBuildUrl = reverse('xhr_projectbuild', args=(p.id,)) | 2913 | p.projectBuildUrl = reverse('xhr_projectbuild', args=(p.id,)) |
2934 | 2914 | ||
2935 | # build view-specific information; this is rendered specifically in the builds page, at the top of the page (i.e. Recent builds) | 2915 | # build view-specific information; this is rendered specifically in the builds page, at the top of the page (i.e. Recent builds) |
@@ -3234,14 +3214,6 @@ else: | |||
3234 | return {} | 3214 | return {} |
3235 | 3215 | ||
3236 | @_template_renderer('landing_not_managed.html') | 3216 | @_template_renderer('landing_not_managed.html') |
3237 | def xhr_projectinfo(request): | ||
3238 | return {} | ||
3239 | |||
3240 | @_template_renderer('landing_not_managed.html') | ||
3241 | def xhr_projectedit(request, pid): | ||
3242 | return {} | ||
3243 | |||
3244 | @_template_renderer('landing_not_managed.html') | ||
3245 | def xhr_datatypeahead(request): | 3217 | def xhr_datatypeahead(request): |
3246 | return {} | 3218 | return {} |
3247 | 3219 | ||