* Allow user to have many orgs * Allow users to handle multi orgs in settings * Make rounded buttons inline * Add multi org function to dashboards * Fix merge conflicts * Fix mistake in merge conflict fix oops * Display the correct membership level * Fix accessibility issues * Display organizations for article editors * Handle submitting org id with preact editors * Make listings work with multiple organizations * Allow listings to have multiple orgs on create * Display the correct number of credits for each org * Move script tag to Webpack * Allow multi orgs for purchasing and viewing credits * Use OrganizationMembership as authorization check * Display multiple organizations for notifications * Allow dashboard to be viewable under multi-orgs * Remove unused method * Add multi-org functionality for article editors * Show pro dashboard buttons for member+ org levels * Leave the correct organization * Allow article API to change org id * Add left-out authorization method oops * Make nav buttons a bit more clear * Fix merge conflict * Fix adding org id for /api/articles and tests * Fix tests for org policy * Use proper logic for displaying org members * Update org actions with new authorization * Use correct org when creating a listing * Remove additional payment charge oops * Mark org notifications as read with authorization * Remove deprecated post_as_organization attribute * Use new org_admin syntax * Remove deprecated org logic for article create and update * Default all RSS posts to not belong to any org * Render org_member page for guest users * Update org policy spec to work with multi orgs * Use org_membership for org traits and move identity code * Use org_member trait * Update to work with multi-orgs * Validate article's org_id if param org_id is blank * Make a let variable * Remove unnecessary eager load for credits * Fix HTML structure and org logic for non-org users * Update credits spec for multi-org * Add test for failed payment when purchased by org * Lint listings_spec * Test that the listing was created under the user * Add tests for POST /listings multi-org * Use double quotes for classes * Fix /manage and a few other multi-org bugs * Fix test for multi org * Use correct method SQL exists? not Rails exist? * Fix reads spec for multi-org * Fix org_controller actions to work with multi org * Test only multi org and not old usage and fix leave_org * Fix org showing user profile img test for multi-org * Fix org logic for users with no orgs * Remove switch org functionality * Update tests and add hidden param for org id * Redirect to the specific organization * Test other org button actions * Use settings_notice instead of legacy notice and refactor * Fix weird extra end issue prob from merge conflicts * Test for with new flash key * Fix user_views_org tests for multi-org * Test for new flash message * Update snapshot with new a11y html * Move styling to stylesheet * Add site admins functionality * Move org_member? method in user model and refactor * Use unspent_credits_count for organizations * Add tests for /listings/new and minor bug fixes * Use .present? in case of empty array * Fix a lingering deprecated method * Use greater than 1 for random numbers * Add tests for counting spent and unspent credits
53 lines
1.5 KiB
Ruby
53 lines
1.5 KiB
Ruby
module Articles
|
|
class Updater
|
|
def initialize(user, article_id, article_params)
|
|
@user = user
|
|
@article_id = article_id
|
|
@article_params = article_params
|
|
end
|
|
|
|
def self.call(*args)
|
|
new(*args).call
|
|
end
|
|
|
|
def call
|
|
article = load_article
|
|
|
|
# the client can change the series the article belongs to
|
|
if article_params.key?(:series)
|
|
series = article_params[:series]
|
|
article.collection = Collection.find_series(series, article.user) if series.present?
|
|
article.collection = nil if series.nil?
|
|
end
|
|
|
|
# convert tags from array to a string
|
|
tags = article_params[:tags]
|
|
if tags.present?
|
|
article_params[:tag_list] = tags.join(", ")
|
|
article_params.delete(:tags)
|
|
end
|
|
|
|
# updated edited time only if already published and not edited by an admin
|
|
update_edited_at = article.user == user && article.published
|
|
article_params[:edited_at] = Time.current if update_edited_at
|
|
|
|
article.update!(article_params)
|
|
|
|
# send notification only the first time an article is published
|
|
send_notification = article.published && article.saved_change_to_published_at.present?
|
|
Notification.send_to_followers(article, "Published") if send_notification
|
|
|
|
article.decorate
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :user, :article_id
|
|
attr_accessor :article_params
|
|
|
|
def load_article
|
|
relation = user.has_role?(:super_admin) ? Article.includes(:user) : user.articles
|
|
relation.find(article_id)
|
|
end
|
|
end
|
|
end
|