* Add missing spaces
* Use filter_map over map + reject/compact
* Simplify FactoryBot calls
* Use to_h with block instead of map + to_h
* Use guard clause
* Refactoring questions asked of user
In this pull request, I'm extracting and normalizing role-based
questions asked of the user.
Prior to this commit, our codebase has asked two very similar questions
of our user model:
- `user.has_role?(:admin)`
- `user.admin?`
In asking `has_role?(:admin)` we are relying on implementation details
of the rolify gem. In addition, the `has_role?` question asked
throughout controllers or views means that it's harder to create
hieararchies of permissions.
In favoring `user.admin?` as our question, we can use that indirection
as an opportunity to discuss and decide "Should someone with the
`:super_admin` role be `user.admin? == true`?"
The details of this commit is to do three primary things:
1. Ask the `has_role?` questions in "one place" in the code (e.g. the
`Authorizer` module)
2. Extract the role based questions that are on the `User` model and
provde backwards compatable delegation.
3. Structure the code so that it's harder to accidentally call
`user.has_role?` (e.g., make `User#has_role?` and `User#has_any_role?`
private).
This is related to #15624 and the updates are informed by discussion in
PR #15691. This commit supplants #15691.
* Refactoring the liquid tag policy tests
* Fixing typo
* Bump for travis
* Remove Connect
* Remove more Connect specs
* Remove a lot more Connect code
* 🚮
* It all has to go
* Explicitly add httpclient
* Update application layout
* Remove messages association from User
* Start fixing specs
* reintroduce util function and refactor references
* Remove Connect Cypress test
* Fix more specs
* Remove Connect from listings
* Ignore contact_via_connect column on listings
* Remove contact_via_connect usages
* Ignore mod_chat_channel_id on tags
* Drop Connect tables
* Remove email_connect_messages from user notification settings
* Re-add httpclient 2.8.3
This was mistakenly removed as a merge conflict
* Don't need to exclude removed chat channel file
* Remove unneeded style for chat channels
* Remove unneeded channel list prop type
* Remove chat channels index/connect-link from getPageEntries
* Re-add comment from httpclient in Gemfile
* Remove connect references from mailers
Tag Moderators no longer have a chat channel
No longer will users be notified about new messages (there won't be
any)
No longer will users be notified about channel invites (you can't
invite anyone anymore)
* Don't configure Pusher and remove PUSHER_* from .env_sample
since it's removed from gemfile, the Pusher constant will not resolve, if this is
configured in the environment variables we'll fail to boot.
Co-authored-by: Suzanne Aitchison <suzanne@forem.com>
Co-authored-by: Dan Uber <dan@forem.com>
* first pass of styling of the page
* feat: scroll to the position in the config controller in stimulus
* feat: add the tooltip and a cursor thats not allowed
* feat: add a disabled property for all that needs smtp to be enabled
* feat: update the form styling
* feat: update the form
* specs: update the label name
* fix: syntax error
* chore: update the newline
* spec: test the invitation flow
* fix test
* feat: update the form as per suggestions
* spec: update the tests to match the new workflow
* oops committed debugging code
* chore: add a before to set the smtp_enabled method
* feat: update the boldness and fontsize of the link
* feat: remove size
* Update admin welcome checklist
* Update invite link text in test
* Remove extraneous invite line and period
* Add overview tracking to all links in checklist
* Fix spec to check for proper link
* Uses Settings::UserExperience.public to conditionally render btn
* Updates landing page-related specs to account for private forem
* Uses Settings::UserExperience in place of ForemInstance in admin_creates_new_page_spec.rb
* Reverts Settings::UserExperience.public? changes throughout codebase
- Removes any changes to ForemInstance.private?
- Adds a new helper method, self.invitation_only?
- Updates self.private? logic
* Updates landing page specs and reverts unnecessary changes
- Reverts any changes that removed the check for
ForemInstance.private?
- Updates landingPage.spec.js to use findByRole rather
than findByText
* Reverts a change to admin_manages_pages_spec.rb
* Updates landingPage.spec.js per PR review comment
* Updates #private_forem_or_no_enabled_auth_options and spec
* Uses .invite_only? in _providers_registration_form.html.erb
* Adjusts authenticationSection.spec.js to test that FB is enabled
* Updates necessary specs to check .invitation_only?
* Consistently uses invite_only_mode_or_no_enabled_auth_options
- Updates all necessary places within the codebase to use
reverted method name, invite_only_mode_or_no_enabled_auth_providers
- Updates #self.enabled to check ForemInstance.invitation_only?
rather than ForemInstance.private?
- Reverts change to Facebook assertion within authenticationSection
e2e test
* Removes superfluous .to from authenticationSection.spec.js
* Adds name to ALLOWED_PARAMS in Admin::TagsController
* Adds local: true to /admin/tags/_form.html.erb
- Sets local: true in tags partial for proper
redirects and to properly render flash messages
for both the #create and #update actions
* Adds local: true to the Add Moderator button for tags
* Adds and updates systems specs for tags
- Updates the admin_updates_tag_spec.rb system spec
- Adds an admin_creates_new_tag_spec.rb system spec
- Updates the success flash message in Admin::TagsController
* Adds landing_page checkbox for Landing Page
* Adds landing_page to page_params in Admin::Pages::Controller
* Adds landing_page to admin_manages_pages and admin_creates_pages specs
* Adjusts copy for Landing Page in pages/_form.html.erb
* Places #post_a_job before #privacy in Pages::Controller
- Ensures that all page-related methods are properly
alphabetized
* Alphabetizes remaining out-of-order page-related methods
- Ensures that all page-related methods within the
Pages::Controller are in alphabetical order, following
the order of the other methods
* Adds landing_page check to ApplicationController#verify_private_forem
* Adds a single_landing_page validation to the Page model
* Adds a lock.svg to /images and uses it in the pages index
* Adjusts buttons and checkboxes to use crayons class in pages partial
* Ensures that pages/_form.html.erb destroy button uses crayons
* Adds a landing_page validation-related test to page_spec.rb
* Updates #single_landing_page validation and error message
* WIP: Adds JS modal upon landing_page error in pages/_form.html.erb
* Adds a working modal upon error in pages/_form.html.erb
- Removes redundant #single_landing_page validation from Page
- Adds #has_a_landing_page? in place of #single_landing_page
- Conditionally renders the landing_page checkbox in _form.html.erb
- Adds styles to locked screen/landing page modal
- Adds copy to locked screen/landing page modal
- Beings adding buttons to overwrite current landing_page
* Updates the data-modal-selectors and ids in pages/_form.html.erb
* Uses #landing_page_path within pages/_form.html.erb modal
- Adds a link_to to link to the current landing page in the modal
- Adds styles to buttons and link_to in modal
* Adds back single_landing_page validation to Page.rb
* Reverts changes and updates methods within Page.rb
- Reverts changes to #single_landing_page
- Refactors #has_a_landing_page? and #landing_page_path
- Updates div id in pages/_form.html.erb
* Adjusts #single_landing_page error message slightly
* Adds a test for landing_pages in stories_index_spec.rb
* Adds an overwrite attribute to Pages for the modal in _form
- Fixes anonymous spelling
* Refactors pages/_form.html.erb and cleans up spelling
* Adds a safe operator to landing_page.path in Page
- Adjusts the placement of the hidden value in pages/_form.html.erb
* Updates styling for Current Locked Screen link
* Adds the ability to overwrite an active landing page on click
- Adds Admin::PagesController#update_and_overwrite and refactors
AdminPages::Controller#udpate to work with new method
- Adds a remote attribute, overwrite, to Admin::PagesController
via a hidden_field in pages/_form.html.erb and an attr_accessor in
the Page model
- Adds a toggleOverwrite() function to pages/_form.html.erb to
toggle the (soon to be hidden) overwrite checkbox in the form --
the checkbox is toggled on button click
* Adds a guard clause to #landing_page_path in Page.rb
* Adds a safe naviagtor to Admin::PagesController#update_and_overwrite_landing_page
* Adds a type and return to Overwrite button to prevent submit
* Adds a hidden class to the overwrite checkbox field in _form.html.erb
- Hides the overwrite checkbox since it is only used to overwrite
the landing_page boolean on click of the "Overwrite current locked
screen" button
* Adds Admin::PagesController#create_and_overwrite and removes hidden class
* Adds landing page-related tests to admin_manages_pages_spec.rb
* Remove messy commented out code and place it in GH comment instead
* PR Review Feedback: Renames remote attr, defines class methods, updates views
- Renames remote attribute to overwrite_landing_page
- Updates all necessary views, methods, etc. w/ new attr
- Defines two class methods to make code more extensible
- Updates all necessary views, methods, etc. w/ new methods
* Remove unnecessary comments and revert changes to ternary in _form.html.erb
* Adjustments for accessibility within _form and index
- Adds a descriptive id to <p> in _form.html.erb
- Adds an ariadescribedby field to _form.html.erb
- Adjusts title within index.html.erb
* Refactors landing_page-related code per PR review requests
- Adds a landing_page_modal_controller.js that handles
and further customizes the dismiss and overwrite button, and
handles opening the modal
- Adds a _landing_page_modal partial to extract modal-specific
html outside of the _form.html.erb partial
- Refactors _form.html.erb to account for the _landing_page_modal
partial and the landing_page_modal_controller.js
- Refactors the overwrite checkbox to be a hidden_field rather than
a hidden checkbox and removes existing hidden_field to accomodate it
- Loads the @landing_page within Admin::PagesController#edit for
use by the _landing_page_modal.html.erb partial
- Refactors Page#single_landing_page to be more readable
- Removes useless JS from _form.html.erb
* Removes #landing_page_exists? class method since it isnt used now
* Uses the #landing_page class method within ApplicationController
* Removes pending status from test in admin_manages_pages_spec.rb
* Adds an e2e test for landing pages and adds to seeds_e2e
- Adds a landingPage.spec.js to test landing pages
- Adds a Page to seeds_e2e.rb for landingPage.spec.js
* Removes references to articles from e2e test and adds clickable link
* Adds another Page to seeds_e2e.rb and updates link names in test
* Adds the Current Locked Screen title to modal and opens in new link
* Renames Dismiss to Cancel and updates all necessary code
* Adjusts landingPage.spec.js
* check for existing landing page before showing modal
* Update Cypress tests and fix bug in LandingPageModalController
* Apply suggestions from code review
Co-authored-by: Suzanne Aitchison <suzanne@forem.com>
* Orders Pages by created_at desc in /admin/pages/index.html.erb for consistency
* Targets specific edit button in landingPage.spec.js
Co-authored-by: Suzanne Aitchison <suzanne@forem.com>
Co-authored-by: rhymes <github@rhymes.dev>
* Rename SiteConfig
* More renaming
* Update spec
* Update mandatory settings mapping
* More renaming
* e2e test fixes
* You have a rename, and you have a rename
* Spec fix
* More changes
* Temporarily disable specs
* After-merge update
* Undo rename for migration
* undo rename of DUS
* Fix DUS
* Fix merge problem
* Remove redundant DUS
* Fix specs
* Remove unused code
* Change wrong class name
* More cleanup
* Re-add missing values to constant
* Fix constant
* Fix spec
* Remove obsolete fields
* Add accidentally removed field
* Update spec
* Move methods from Settings::General to ForemInstance
* Remove unneeded model
* Change mentions of 'site config'
* Rename banned and comment_banned roles
* Add data update script to rename roles containing 'ban'
* Add named error for Suspended users
* Update unidiomatic method names
* Rename misc banned to suspended
* Apply suggestions from code review
Co-authored-by: Michael Kohl <me@citizen428.net>
* Add unit tests for suspended methods
This commit also adds TODO comments for removing banned and
comment_banned from the codebase after data update scripts have
successfully run on all of our Forems.
Co-authored-by: Michael Kohl <me@citizen428.net>
* chore: use consistent code styles for the parenthesis around arguments
* Revert "chore: use consistent code styles for the parenthesis around arguments"
This reverts commit 281c899a5cff0480b182fef45b10ef69979166cb.
* chore: add consistent parenthesis
* feat: add a feature flag for data update scripts
* feat: write some tests for it
* chore: oops
* stub the data update scripts out wherever the profile admin is
* chore: remove some unneeded ones
* refactor: use call_original
* feat: add a feature flag to all the Forems (but not enable it as yet)
* Use Ransack for admin/tags
* Update admin tags index to use search with Ransack
* Add feature to sort tags in /admin/tags
* Add test for viewing /admin/tags pages
* Add aria labels for sort links
* Make links a bit more accessible
* Removes collective_noun and collective_noun_disabled from app
* Config Generalization: replaces community_qualified_name with community_name
- Generalizes SiteConfig after the removal of collective_noun field
- Updates copy where necessary to be readable with community_name
- Makes the community_name SiteConfig description more explicit
- Adds flexibility for Admins by removing appended "community"
* Adds a data_update script to remove collective_noun and collective_noun_disabled
* Removes appended community from stories_controller.rb
* Removes unnecessary quotation marks around SiteConfig.community_name.to_s
* Makes SiteConfig community_name description more explicit
* Removes topic from #email_from and replaces arg with _
* Removes argument from #email_from (facepalm)
* Reverts changes to application_mailer and notify_mailer_spec
* Removes default "Community" topic from application_mailer and makes topic optional
* Refactors #prepopulate_new_form to resolve Code Climate failures
* Refactors #email_from even further by use of a ternary operator per review suggestion
* Simplifies the data_update script used to remove collective_noun per review request
* Adds a data_update script to append community to community_name
* Updates data_update script to correctly append Community to community_name
* Removes RemoveCollectiveNounFromConfig and updates other script
* Removes superfluous false from data_update script
* Updates data_update script to be more idiomatic
* Prepare to drop profile columns from user
* Update code and factory
* Also remove unused constant
* Move validation from user to profile
* Remove Profiles::ExtractData service object
* Add more comments
* Simplify sameAs attribute generation
* Obey me machine, I am your master
* Fix condition order in guard clause
* Temporarily disable callback
* Fix specs
* Reduce usage of Profile#refresh_attributes!
* Remove leftover comment
* Handle social media links differently
* More spec fixes
* Fix specs for admin profile fields controller
* Fix specs after merge
* Fix remaining specs
* Update user show request spec
* Add comment for follow_hiring_tag
* Only save profile when user is valid
* Fix seeds.rb for profile fields
* Switch from before_save to after_save
* Undo unrelated formattin change
* Update spec/fixtures/files/profile_fields.csv
Co-authored-by: Molly Struve <mollylbs@gmail.com>
* Remove data update script and spec
* Fix spec
* Fix typo in comment
* Fix typo in comment
* Move article resave logic to service object
* Move profile field creation to before(:suite)
* Refactor error handling in Profiles::Update
* Fix Profiles::Update specs and refactor
* Temporarily disable spec
* Add ProfileValidator
* Clean up
* Move DB ready check into app/lib
* Refresh attributes after importing from CSV
* Fix specs
* Remove unused file
* A girl has no name. A profile neither.
* Fix specs
* Add responds_to? check
* Spec fix
* Add name to user fields in profile settings page
Co-authored-by: Molly Struve <mollylbs@gmail.com>
* Adds ability for admins to create new tags via /admin/tags
* Merge branch 'master' of github.com:forem/forem into fdoxyz/admin-new-tags-11026
* Fix rubocop pre-hook
* UI Tweaks
* replaces show with edit action & other minor changes
* Reverse unrelated changes
* Removed more unrelated edits
* Fix specs
* Fix moderator link
* Implement changes
* display "Suspended" if user role.name is banned
* Correct equality symbol
Co-authored-by: Michael Kohl <me@citizen428.net>
Co-authored-by: Michael Kohl <me@citizen428.net>
* Adds a default color hex value to the /admin/tags/show color picker
* Rebased against color-picker changes and adds default color to edit.html.erb
* Adds a system spec for admin/tags and adjusts the filename for admin_creates_new_page_spec
* Uses .blank? in place of .nil? in admin/tags/show.html.erb
* Refactors test in admin_updates_tag_spec.rb
* Adds new and edit views for events and removes them from the index view
* Fixes formatting issues in /admin/pages/index.html.erb
* Refactors /admin/events partial, new, and edit forms
* Updates admin_events routes to include all routes except destroy
* Refactors Admin::EventsController and adds #new and #edit actions
* specs: Adjusts admin_creates_new_event_spec to work with /admin/event changes
* Refactors the Admin::EventsController, routes, and events index even further
- Adds back placeholder text in Events form
- Removes unnecessary code from controller
- Reverts changes to routes
- Adjusts event_cover_image size on index.html.erb
* specs: Adds tests around creating and updating events to events_spec
* Adds pagination to Admin::EventsController #index to cap events at 20 per page
* Removes .all from Admin::EventsController and adds a line to index.html.erb
* Uses crayons classes for _event_form.html.erb
* Improve error messages and validation for pages
This could probably be cleaner, but I wanted to avoid changing behavior,
so there is a bit of redundancy.
In this commit, I also had to convert an if statement to a case
statement for Rubocop.
* Add system spec for editing pages
* Use errors_as_sentence
* feat: allow a page to override the code_of_conduct, terms and privacy page
* feat: let privacy policy also use a partial for its contents like coc and terms
* feat: show the defaults or the pages
* specs: add tests for the overrides
* feat: update some styles and make use crayons buttons
* fix: update order of test items
* spec: fix
* reactor: move this whole section in the if
* feat: updates
* fix: code climate + travis
* more codeeclimate
* Remove extra character from meta_keywords in /listings/index.html.erb
* Remove meta_keywords from MANDATORY_CONFIGS
* Add and use meta_keywords_tag helper
* Use modern tag syntax instead of deprecated syntax
* Add and use meta_keywords_default helper
* Add and use meta_keywords_article helper
* Remove * from meta_keywords_field.label
* Update meta_keyword specs to account for no keywords being set
* Add CRUD actions for badge management to Internal::Badges::Controller
* Update sytling of badges index view in index.html.erb
-Uses a table to display all badges
-Links to the badge edit page from the badge title
-Displays a badges slug, title, and badge_image
-Adds an Award Badge button to the index view
* Adds an edit view, edit.html.erb, for badges
-Gives the ability to edit a badge title and/or slug
-Adds an Update Badge button to the left of the view
-Adds a Back to All Badges button to the right of the view
-Displays the badge image in the edit form
* Adjusts the path names in #award_badges in Internal::Badges::Controller
* Adds CRUD actions to the Internal::Badges::Controller and needed routes
* Add a description field to the edit.html.erb for badge management
* Add #award to Internal::Badges::Controller with matching view and routes
-Adds an #award method that sets @badge for #award_badges
-Adds an award.html.erb view for awarding badges
-Adds an award path for awarding badges
-Removes unnecessary code from controller, routes, and views
* Adds image upload functionality to the edit view for badges
* Ensure that usernames are downcased when awarding badges
-Chains downcase to usernames in #award_badges in
Internal::Badges::Controller
* Move badge-related views from old Internal folder to the correct Admin folder
Change routes and paths from /internal to /admin
* Refactor badge_params in Admin::Badges::Controller
* Add additional tests around awarding and updating badges in /admin/badge_achievements
* Add a create view to /admin/badges
-Adds new and create actions to Admin::Badges::Controller
-Adds a create view for creating badges at new.html.erb
-Adds a Create Badge button to the index view
-Moves the Award Badges button to the bottom of the index view
* Add a test around creating badges and clean up existing specs in badges_spec.rb
Adjust path in admin_awards_badges_spec.rb to be correct path
* Adjust routes from /badges/award_badges to /badges/badge_achievements/award_badges
Update paths in admin/badge-related specs
* Adjust paths in badges_spec.rb to be admin_badge_achievements_award_badges_path
* Adjust button styling for Award Badge
* Adjust paths back to /admin/badges in badges_spec.rb
* Add clarification around usernames when awarding badges
* Mark test in black_box_spec.rb as pending due to Travis failure
* Change wording used around usernames and @ symbols in award.html.erb