2019-07-16 06:46:32 -04:00
|
|
|
import {
|
|
|
|
default as computed,
|
|
|
|
on,
|
|
|
|
observes
|
2020-02-19 11:57:59 -05:00
|
|
|
} from "discourse-common/utils/decorators";
|
2020-07-06 15:25:19 -04:00
|
|
|
import getURL from "discourse-common/lib/get-url";
|
2018-10-10 07:56:23 -04:00
|
|
|
import RestModel from "discourse/models/rest";
|
2015-06-25 17:53:03 -04:00
|
|
|
|
2015-07-02 12:19:30 -04:00
|
|
|
const Query = RestModel.extend({
|
2015-06-30 13:20:22 -04:00
|
|
|
dirty: false,
|
2015-06-30 18:12:12 -04:00
|
|
|
params: {},
|
2015-07-02 12:15:55 -04:00
|
|
|
results: null,
|
2015-06-30 18:12:12 -04:00
|
|
|
|
2019-07-16 06:46:32 -04:00
|
|
|
@on("init")
|
|
|
|
_init() {
|
|
|
|
this._super(...arguments);
|
|
|
|
|
2018-10-10 07:56:23 -04:00
|
|
|
this.set("dirty", false);
|
2019-07-16 06:46:32 -04:00
|
|
|
},
|
2015-06-30 22:51:38 -04:00
|
|
|
|
2019-07-16 06:46:32 -04:00
|
|
|
@on("init")
|
|
|
|
@observes("param_info")
|
|
|
|
_initParams() {
|
2015-06-30 18:12:12 -04:00
|
|
|
this.resetParams();
|
2019-07-16 06:46:32 -04:00
|
|
|
},
|
2015-06-30 22:51:38 -04:00
|
|
|
|
2019-09-11 10:09:41 -04:00
|
|
|
@observes("name", "description", "sql", "group_ids")
|
2019-07-16 06:46:32 -04:00
|
|
|
markDirty() {
|
2018-10-10 07:56:23 -04:00
|
|
|
this.set("dirty", true);
|
2019-07-16 06:46:32 -04:00
|
|
|
},
|
2015-06-30 13:20:22 -04:00
|
|
|
|
|
|
|
markNotDirty() {
|
2018-10-10 07:56:23 -04:00
|
|
|
this.set("dirty", false);
|
2015-06-30 13:20:22 -04:00
|
|
|
},
|
|
|
|
|
2019-07-16 06:46:32 -04:00
|
|
|
hasParams: Ember.computed.reads("param_info.length"),
|
2015-07-14 19:01:38 -04:00
|
|
|
|
2015-06-30 18:12:12 -04:00
|
|
|
resetParams() {
|
2015-07-02 12:19:30 -04:00
|
|
|
const newParams = {};
|
2019-07-16 06:46:32 -04:00
|
|
|
const oldParams = this.params;
|
|
|
|
const paramInfo = this.param_info || [];
|
|
|
|
paramInfo.forEach(pinfo => {
|
2015-07-14 19:01:38 -04:00
|
|
|
const name = pinfo.identifier;
|
|
|
|
if (oldParams[pinfo.identifier]) {
|
2015-07-02 12:19:30 -04:00
|
|
|
newParams[name] = oldParams[name];
|
2018-10-10 07:56:23 -04:00
|
|
|
} else if (pinfo["default"] !== null) {
|
|
|
|
newParams[name] = pinfo["default"];
|
|
|
|
} else if (pinfo["type"] === "boolean") {
|
|
|
|
newParams[name] = "false";
|
2015-06-30 18:12:12 -04:00
|
|
|
} else {
|
2018-10-10 07:56:23 -04:00
|
|
|
newParams[name] = "";
|
2015-06-30 18:12:12 -04:00
|
|
|
}
|
|
|
|
});
|
2018-10-10 07:56:23 -04:00
|
|
|
this.set("params", newParams);
|
2015-06-30 18:12:12 -04:00
|
|
|
},
|
|
|
|
|
2019-07-16 06:46:32 -04:00
|
|
|
@computed("id")
|
|
|
|
downloadUrl(id) {
|
2015-06-30 15:52:17 -04:00
|
|
|
// TODO - can we change this to use the store/adapter?
|
2020-07-06 15:25:19 -04:00
|
|
|
return getURL(`/admin/plugins/explorer/queries/${id}.json?export=1`);
|
2019-07-16 06:46:32 -04:00
|
|
|
},
|
2015-06-30 15:52:17 -04:00
|
|
|
|
2015-06-25 17:53:03 -04:00
|
|
|
createProperties() {
|
2019-07-16 06:46:32 -04:00
|
|
|
if (this.sql) {
|
2015-06-30 15:52:17 -04:00
|
|
|
// Importing
|
|
|
|
return this.updateProperties();
|
|
|
|
}
|
2015-06-26 12:16:09 -04:00
|
|
|
return this.getProperties("name");
|
|
|
|
},
|
|
|
|
|
|
|
|
updateProperties() {
|
2019-07-16 06:46:32 -04:00
|
|
|
const props = this.getProperties(Query.updatePropertyNames);
|
|
|
|
if (this.destroyed) {
|
|
|
|
props.id = this.id;
|
2015-06-30 15:52:17 -04:00
|
|
|
}
|
|
|
|
return props;
|
2015-06-25 17:53:03 -04:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2015-06-30 13:20:22 -04:00
|
|
|
Query.reopenClass({
|
2019-06-14 13:27:41 -04:00
|
|
|
updatePropertyNames: [
|
|
|
|
"name",
|
|
|
|
"description",
|
|
|
|
"sql",
|
|
|
|
"created_by",
|
|
|
|
"created_at",
|
2019-09-11 10:09:41 -04:00
|
|
|
"group_ids",
|
2019-06-14 13:27:41 -04:00
|
|
|
"last_run_at"
|
|
|
|
]
|
2015-06-30 13:20:22 -04:00
|
|
|
});
|
|
|
|
|
2015-06-25 17:53:03 -04:00
|
|
|
export default Query;
|