add settings profile cloning
This commit is contained in:
parent
92c78beb90
commit
8ed8a10965
|
@ -1338,6 +1338,35 @@ class Pref_Prefs extends Handler_Protected {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function cloneprofile() {
|
||||||
|
$old_profile = $_REQUEST["old_profile"] ?? 0;
|
||||||
|
$new_title = clean($_REQUEST["new_title"]);
|
||||||
|
|
||||||
|
if ($old_profile && $new_title) {
|
||||||
|
$new_profile = ORM::for_table('ttrss_settings_profiles')->create();
|
||||||
|
$new_profile->title = $new_title;
|
||||||
|
$new_profile->owner_uid = $_SESSION['uid'];
|
||||||
|
|
||||||
|
if ($new_profile->save()) {
|
||||||
|
$sth = $this->pdo->prepare("INSERT INTO ttrss_user_prefs
|
||||||
|
(owner_uid, pref_name, profile, value)
|
||||||
|
SELECT
|
||||||
|
:uid,
|
||||||
|
pref_name,
|
||||||
|
:new_profile,
|
||||||
|
value
|
||||||
|
FROM ttrss_user_prefs
|
||||||
|
WHERE owner_uid = :uid AND profile = :old_profile");
|
||||||
|
|
||||||
|
$sth->execute([
|
||||||
|
"uid" => $_SESSION["uid"],
|
||||||
|
"new_profile" => $new_profile->id,
|
||||||
|
"old_profile" => $old_profile,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function remprofiles() {
|
function remprofiles() {
|
||||||
$ids = $_REQUEST["ids"] ?? [];
|
$ids = $_REQUEST["ids"] ?? [];
|
||||||
|
|
||||||
|
@ -1394,11 +1423,19 @@ class Pref_Prefs extends Handler_Protected {
|
||||||
|
|
||||||
array_push($rv, ["title" => __("Default profile"),
|
array_push($rv, ["title" => __("Default profile"),
|
||||||
"id" => 0,
|
"id" => 0,
|
||||||
|
"initialized" => true,
|
||||||
"active" => empty($_SESSION["profile"])
|
"active" => empty($_SESSION["profile"])
|
||||||
]);
|
]);
|
||||||
|
|
||||||
foreach ($profiles as $profile) {
|
foreach ($profiles as $profile) {
|
||||||
$profile['active'] = ($_SESSION["profile"] ?? 0) == $profile->id;
|
$profile['active'] = ($_SESSION["profile"] ?? 0) == $profile->id;
|
||||||
|
|
||||||
|
$num_settings = ORM::for_table('ttrss_user_prefs')
|
||||||
|
->where('profile', $profile->id)
|
||||||
|
->count();
|
||||||
|
|
||||||
|
$profile['initialized'] = $num_settings > 0;
|
||||||
|
|
||||||
array_push($rv, $profile->as_array());
|
array_push($rv, $profile->as_array());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -128,6 +128,24 @@ const Helpers = {
|
||||||
getSelectedProfiles: function () {
|
getSelectedProfiles: function () {
|
||||||
return Tables.getSelected("pref-profiles-list");
|
return Tables.getSelected("pref-profiles-list");
|
||||||
},
|
},
|
||||||
|
cloneSelected: function() {
|
||||||
|
const sel_rows = this.getSelectedProfiles();
|
||||||
|
|
||||||
|
if (sel_rows.length == 1) {
|
||||||
|
const new_title = prompt(__("Name for cloned profile:"));
|
||||||
|
|
||||||
|
if (new_title) {
|
||||||
|
xhr.post("backend.php", {op: "pref-prefs", method: "cloneprofile", "new_title": new_title, "old_profile": sel_rows[0]}, () => {
|
||||||
|
Notify.close();
|
||||||
|
dialog.refresh();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
alert(__("Please select a single profile to clone."));
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
removeSelected: function () {
|
removeSelected: function () {
|
||||||
const sel_rows = this.getSelectedProfiles();
|
const sel_rows = this.getSelectedProfiles();
|
||||||
|
|
||||||
|
@ -174,7 +192,7 @@ const Helpers = {
|
||||||
|
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
<input name='newprofile' dojoType='dijit.form.ValidationTextBox' required='1'>
|
<input name='newprofile' dojoType='dijit.form.ValidationTextBox' required='1'>
|
||||||
${App.FormFields.button_tag(__('Create profile'), "", {onclick: 'App.dialogOf(this).addProfile()'})}
|
${App.FormFields.button_tag(App.FormFields.icon("add_circle") + " " + __('Add'), "", {onclick: 'App.dialogOf(this).addProfile()'})}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -198,6 +216,7 @@ const Helpers = {
|
||||||
</script>
|
</script>
|
||||||
</span>` : `${profile.title}`}
|
</span>` : `${profile.title}`}
|
||||||
${profile.active ? __("(active)") : ""}
|
${profile.active ? __("(active)") : ""}
|
||||||
|
${profile.initialized ? "" : __("(empty)")}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
`).join("")}
|
`).join("")}
|
||||||
|
@ -205,9 +224,11 @@ const Helpers = {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
${App.FormFields.button_tag(App.FormFields.icon("delete") + " " +__('Remove selected profiles'), "",
|
${App.FormFields.button_tag(App.FormFields.icon("delete") + " " +__('Remove selected'), "",
|
||||||
{class: 'pull-left alt-danger', onclick: 'App.dialogOf(this).removeSelected()'})}
|
{class: 'pull-left alt-danger', onclick: 'App.dialogOf(this).removeSelected()'})}
|
||||||
${App.FormFields.submit_tag(App.FormFields.icon("check") + " " + __('Activate profile'), {onclick: 'App.dialogOf(this).execute()'})}
|
${App.FormFields.button_tag(App.FormFields.icon("content_copy") + " " + __('Clone'), "",
|
||||||
|
{class: '', onclick: 'App.dialogOf(this).cloneSelected()'})}
|
||||||
|
${App.FormFields.submit_tag(App.FormFields.icon("check") + " " + __('Activate'), {onclick: 'App.dialogOf(this).execute()'})}
|
||||||
${App.FormFields.cancel_dialog_tag(__('Cancel'))}
|
${App.FormFields.cancel_dialog_tag(__('Cancel'))}
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|
Loading…
Reference in New Issue