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() {
|
||||
$ids = $_REQUEST["ids"] ?? [];
|
||||
|
||||
|
@ -1394,11 +1423,19 @@ class Pref_Prefs extends Handler_Protected {
|
|||
|
||||
array_push($rv, ["title" => __("Default profile"),
|
||||
"id" => 0,
|
||||
"initialized" => true,
|
||||
"active" => empty($_SESSION["profile"])
|
||||
]);
|
||||
|
||||
foreach ($profiles as $profile) {
|
||||
$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());
|
||||
};
|
||||
|
||||
|
|
|
@ -128,6 +128,24 @@ const Helpers = {
|
|||
getSelectedProfiles: function () {
|
||||
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 () {
|
||||
const sel_rows = this.getSelectedProfiles();
|
||||
|
||||
|
@ -174,7 +192,7 @@ const Helpers = {
|
|||
|
||||
<div class="pull-right">
|
||||
<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>
|
||||
|
||||
|
@ -198,6 +216,7 @@ const Helpers = {
|
|||
</script>
|
||||
</span>` : `${profile.title}`}
|
||||
${profile.active ? __("(active)") : ""}
|
||||
${profile.initialized ? "" : __("(empty)")}
|
||||
</td>
|
||||
</tr>
|
||||
`).join("")}
|
||||
|
@ -205,9 +224,11 @@ const Helpers = {
|
|||
</div>
|
||||
|
||||
<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()'})}
|
||||
${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'))}
|
||||
</footer>
|
||||
</form>
|
||||
|
|
Loading…
Reference in New Issue