return pbl author attribute to its original usage
and use the new primary_authors attribute instead Fixes #9547
This commit is contained in:
parent
e8af57e3ab
commit
893b31e769
9 changed files with 43 additions and 11 deletions
2
changelog_entries/primary_authors.md
Normal file
2
changelog_entries/primary_authors.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
### WML Engine
|
||||
* The author attribute is now again a display only attribute. Instead the primary_authors attribute should be used, which supports specifying multiple primary authors.
|
|
@ -211,6 +211,7 @@
|
|||
{ROW text_box _"Forum thread:" "forum_thread" _"The numeric topic ID of a thread on the Wesnoth forums where players can post feedback."}
|
||||
{ROW label _"Forum URL" "forum_url" _"The full URL of your feedback thread on the forums."}
|
||||
{ROW toggle_button _"Forum Authentication:" "forum_auth" _"Whether to use your forum username and password when uploading or to store your password and email address in the add-on’s _server.pbl."}
|
||||
{ROW text_box _"Primary Authors:" "primary_authors" _"Comma delimited list of forum usernames of other people who are allowed to upload updates for this add-on or delete this add-on."}
|
||||
{ROW text_box _"Secondary Authors:" "secondary_authors" _"Comma delimited list of forum usernames of other people who are allowed to upload updates for this add-on."}
|
||||
{ROW text_box _"Email:" "email" _"An email address you can be contacted at in case of issues with your add-on."}
|
||||
{ROW text_box _"Password:" "password" _"The add-on’s current password. Using forum authentication is recommended instead since this password is not stored securely."}
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
{SIMPLE_KEY email email}
|
||||
[/then]
|
||||
[else]
|
||||
{SIMPLE_KEY primary_authors string_list}
|
||||
{SIMPLE_KEY secondary_authors string_list}
|
||||
[/else]
|
||||
[/if]
|
||||
|
|
|
@ -45,12 +45,16 @@ void addon_auth::pre_show()
|
|||
pwd->set_value(cfg_["passphrase"].str(""));
|
||||
|
||||
std::vector<config> content_list;
|
||||
content_list.emplace_back("label", cfg_["author"].str(""));
|
||||
|
||||
for(const auto& author : utils::split(cfg_["primary_authors"].str(""), ',')) {
|
||||
content_list.emplace_back("label", author);
|
||||
}
|
||||
for(const auto& author : utils::split(cfg_["secondary_authors"].str(""), ',')) {
|
||||
content_list.emplace_back("label", author);
|
||||
}
|
||||
find_widget<menu_button>("choose_uploader").set_values(content_list);
|
||||
if(content_list.size() > 0) {
|
||||
find_widget<menu_button>("choose_uploader").set_values(content_list);
|
||||
}
|
||||
}
|
||||
|
||||
void addon_auth::post_show()
|
||||
|
|
|
@ -140,15 +140,21 @@ void editor_edit_pbl::pre_show()
|
|||
|
||||
if(pbl["forum_auth"].to_bool()) {
|
||||
find_widget<toggle_button>("forum_auth").set_value(true);
|
||||
find_widget<text_box>("primary_authors").set_value(pbl["primary_authors"]);
|
||||
find_widget<text_box>("secondary_authors").set_value(pbl["secondary_authors"]);
|
||||
find_widget<text_box>("email").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<label>("email_label").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<text_box>("password").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<label>("password_label").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<text_box>("primary_authors").set_visible(gui2::widget::visibility::visible);
|
||||
find_widget<label>("primary_authors_label").set_visible(gui2::widget::visibility::visible);
|
||||
find_widget<text_box>("secondary_authors").set_visible(gui2::widget::visibility::visible);
|
||||
find_widget<label>("secondary_authors_label").set_visible(gui2::widget::visibility::visible);
|
||||
} else {
|
||||
find_widget<text_box>("email").set_value(pbl["email"]);
|
||||
find_widget<text_box>("password").set_value(pbl["passphrase"]);
|
||||
find_widget<text_box>("primary_authors").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<label>("primary_authors_label").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<text_box>("secondary_authors").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<label>("secondary_authors_label").set_visible(gui2::widget::visibility::invisible);
|
||||
}
|
||||
|
@ -265,6 +271,10 @@ config editor_edit_pbl::create_cfg()
|
|||
if(find_widget<toggle_button>("forum_auth").get_value_bool()) {
|
||||
cfg["forum_auth"] = true;
|
||||
|
||||
if(const std::string& primary_authors = find_widget<text_box>("primary_authors").get_value(); !primary_authors.empty()) {
|
||||
cfg["primary_authors"] = primary_authors;
|
||||
}
|
||||
|
||||
if(const std::string& secondary_authors = find_widget<text_box>("secondary_authors").get_value(); !secondary_authors.empty()) {
|
||||
cfg["secondary_authors"] = secondary_authors;
|
||||
}
|
||||
|
@ -319,6 +329,8 @@ void editor_edit_pbl::toggle_auth()
|
|||
find_widget<text_box>("password").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<label>("email_label").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<label>("password_label").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<text_box>("primary_authors").set_visible(gui2::widget::visibility::visible);
|
||||
find_widget<label>("primary_authors_label").set_visible(gui2::widget::visibility::visible);
|
||||
find_widget<text_box>("secondary_authors").set_visible(gui2::widget::visibility::visible);
|
||||
find_widget<label>("secondary_authors_label").set_visible(gui2::widget::visibility::visible);
|
||||
} else {
|
||||
|
@ -326,6 +338,8 @@ void editor_edit_pbl::toggle_auth()
|
|||
find_widget<text_box>("password").set_visible(gui2::widget::visibility::visible);
|
||||
find_widget<label>("email_label").set_visible(gui2::widget::visibility::visible);
|
||||
find_widget<label>("password_label").set_visible(gui2::widget::visibility::visible);
|
||||
find_widget<text_box>("primary_authors").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<label>("primary_authors_label").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<text_box>("secondary_authors").set_visible(gui2::widget::visibility::invisible);
|
||||
find_widget<label>("secondary_authors_label").set_visible(gui2::widget::visibility::invisible);
|
||||
}
|
||||
|
|
|
@ -1339,6 +1339,13 @@ ADDON_CHECK_STATUS server::validate_addon(const server::request& req, config*& e
|
|||
return ADDON_CHECK_STATUS::USER_DOES_NOT_EXIST;
|
||||
}
|
||||
|
||||
for(const std::string& primary_author : utils::split(upload["primary_authors"].str(), ',')) {
|
||||
if(!user_handler_->user_exists(primary_author)) {
|
||||
LOG_CS << "Validation error: forum auth requested for a primary author who doesn't exist";
|
||||
return ADDON_CHECK_STATUS::USER_DOES_NOT_EXIST;
|
||||
}
|
||||
}
|
||||
|
||||
for(const std::string& secondary_author : utils::split(upload["secondary_authors"].str(), ',')) {
|
||||
if(!user_handler_->user_exists(secondary_author)) {
|
||||
LOG_CS << "Validation error: forum auth requested for a secondary author who doesn't exist";
|
||||
|
@ -1523,7 +1530,7 @@ void server::handle_upload(const server::request& req)
|
|||
// Write general metadata attributes
|
||||
|
||||
addon.copy_or_remove_attributes(upload,
|
||||
"title", "name", "uploader", "author", "secondary_authors", "description", "version", "icon",
|
||||
"title", "name", "uploader", "author", "primary_authors", "secondary_authors", "description", "version", "icon",
|
||||
"translate", "dependencies", "core", "type", "tags", "email", "forum_auth"
|
||||
);
|
||||
|
||||
|
@ -1565,7 +1572,7 @@ void server::handle_upload(const server::request& req)
|
|||
// if p1 is primary, p2 is secondary, and p2 uploads, then this is skipped because the uploader is not the primary author
|
||||
// if next time p2 is primary, p1 is secondary, and p1 uploads, then p1 is both uploader and secondary author
|
||||
// therefore p2's author information would not be reinserted if the uploader attribute were used instead
|
||||
user_handler_->db_insert_addon_authors(server_id_, name, addon["author"].str(), utils::split(addon["secondary_authors"].str(), ','));
|
||||
user_handler_->db_insert_addon_authors(server_id_, name, utils::split(addon["primary_authors"].str(), ','), utils::split(addon["secondary_authors"].str(), ','));
|
||||
}
|
||||
}
|
||||
user_handler_->db_insert_addon_info(server_id_, name, addon["title"].str(), addon["type"].str(), addon["version"].str(), addon["forum_auth"].to_bool(), topic_id, upload["uploader"].str());
|
||||
|
|
|
@ -282,13 +282,16 @@ void fuh::db_delete_addon_authors(const std::string& instance_version, const std
|
|||
conn_.delete_addon_authors(instance_version, id);
|
||||
}
|
||||
|
||||
void fuh::db_insert_addon_authors(const std::string& instance_version, const std::string& id, const std::string& primary_author, const std::vector<std::string>& secondary_authors) {
|
||||
conn_.insert_addon_author(instance_version, id, primary_author, 1);
|
||||
|
||||
void fuh::db_insert_addon_authors(const std::string& instance_version, const std::string& id, const std::vector<std::string>& primary_authors, const std::vector<std::string>& secondary_authors) {
|
||||
// ignore any duplicate authors
|
||||
std::set<std::string> inserted_authors;
|
||||
inserted_authors.emplace(primary_author);
|
||||
|
||||
for(const std::string& primary_author : primary_authors) {
|
||||
if(inserted_authors.count(primary_author) == 0) {
|
||||
inserted_authors.emplace(primary_author);
|
||||
conn_.insert_addon_author(instance_version, id, primary_author, 1);
|
||||
}
|
||||
}
|
||||
for(const std::string& secondary_author : secondary_authors) {
|
||||
if(inserted_authors.count(secondary_author) == 0) {
|
||||
inserted_authors.emplace(secondary_author);
|
||||
|
|
|
@ -310,10 +310,10 @@ public:
|
|||
*
|
||||
* @param instance_version Which major version this is for (1.16, 1.17, etc).
|
||||
* @param id The ID of the add-on.
|
||||
* @param primary_author The primary author of the add-on.
|
||||
* @param primary_authors The primary authors of the add-on.
|
||||
* @param secondary_authors The secondary authors of the add-on.
|
||||
*/
|
||||
void db_insert_addon_authors(const std::string& instance_version, const std::string& id, const std::string& primary_author, const std::vector<std::string>& secondary_authors);
|
||||
void db_insert_addon_authors(const std::string& instance_version, const std::string& id, const std::vector<std::string>& primary_authors, const std::vector<std::string>& secondary_authors);
|
||||
|
||||
/**
|
||||
* Checks whether any author information exists for a particular addon and version, since if there's no author information then of course no primary or secondary authors will ever be found.
|
||||
|
|
|
@ -143,6 +143,6 @@ public:
|
|||
virtual bool db_is_user_primary_author(const std::string& instance_version, const std::string& id, const std::string& username) = 0;
|
||||
virtual bool db_is_user_secondary_author(const std::string& instance_version, const std::string& id, const std::string& username) = 0;
|
||||
virtual void db_delete_addon_authors(const std::string& instance_version, const std::string& id) = 0;
|
||||
virtual void db_insert_addon_authors(const std::string& instance_version, const std::string& id, const std::string& primary_author, const std::vector<std::string>& secondary_authors) = 0;
|
||||
virtual void db_insert_addon_authors(const std::string& instance_version, const std::string& id, const std::vector<std::string>& primary_authors, const std::vector<std::string>& secondary_authors) = 0;
|
||||
virtual bool db_do_any_authors_exist(const std::string& instance_version, const std::string& id) = 0;
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue