"Fossies" - the Fresh Open Source Software Archive

Member "discourse-3.1.3/db/fixtures/006_badges.rb" (9 Nov 2023, 13205 Bytes) of package /linux/www/discourse-3.1.3.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Ruby source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. See also the last Fossies "Diffs" side-by-side code changes report for "006_badges.rb": 3.0.6_vs_3.1.0.

    1 # frozen_string_literal: true
    2 
    3 require "badge_queries"
    4 
    5 BadgeGrouping.seed do |g|
    6   g.id = BadgeGrouping::GettingStarted
    7   g.name = "Getting Started"
    8   g.default_position = 10
    9 end
   10 
   11 BadgeGrouping.seed do |g|
   12   g.id = BadgeGrouping::Community
   13   g.name = "Community"
   14   g.default_position = 11
   15 end
   16 
   17 BadgeGrouping.seed do |g|
   18   g.id = BadgeGrouping::Posting
   19   g.name = "Posting"
   20   g.default_position = 12
   21 end
   22 
   23 BadgeGrouping.seed do |g|
   24   g.id = BadgeGrouping::TrustLevel
   25   g.name = "Trust Level"
   26   g.default_position = 13
   27 end
   28 
   29 BadgeGrouping.seed do |g|
   30   g.id = BadgeGrouping::Other
   31   g.name = "Other"
   32   g.default_position = 14
   33 end
   34 
   35 # BUGFIX
   36 DB.exec <<-SQL.squish
   37   UPDATE badges
   38      SET badge_grouping_id = -1
   39    WHERE NOT EXISTS (
   40             SELECT 1
   41               FROM badge_groupings g
   42              WHERE g.id = badge_grouping_id
   43          ) OR (id < 100 AND badge_grouping_id = #{BadgeGrouping::Other})
   44 SQL
   45 
   46 [
   47   [Badge::BasicUser, "Basic User", BadgeType::Bronze],
   48   [Badge::Member, "Member", BadgeType::Bronze],
   49   [Badge::Regular, "Regular", BadgeType::Silver],
   50   [Badge::Leader, "Leader", BadgeType::Gold],
   51 ].each do |id, name, type|
   52   Badge.seed do |b|
   53     b.id = id
   54     b.name = name
   55     b.badge_type_id = type
   56     b.query = BadgeQueries.trust_level(id)
   57     b.default_badge_grouping_id = BadgeGrouping::TrustLevel
   58     b.trigger = Badge::Trigger::TrustLevelChange
   59     # allow title for tl3 and above
   60     b.default_allow_title = id > Badge::Member
   61     b.default_icon = "fa-user"
   62     b.system = true
   63   end
   64 end
   65 
   66 Badge.seed do |b|
   67   b.id = Badge::Reader
   68   b.name = "Reader"
   69   b.default_icon = "book-reader"
   70   b.badge_type_id = BadgeType::Bronze
   71   b.multiple_grant = false
   72   b.target_posts = false
   73   b.show_posts = false
   74   b.query = BadgeQueries::Reader
   75   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
   76   b.auto_revoke = false
   77   b.system = true
   78 end
   79 
   80 Badge.seed do |b|
   81   b.id = Badge::ReadGuidelines
   82   b.name = "Read Guidelines"
   83   b.default_icon = "file-alt"
   84   b.badge_type_id = BadgeType::Bronze
   85   b.multiple_grant = false
   86   b.target_posts = false
   87   b.show_posts = false
   88   b.query = BadgeQueries::ReadGuidelines
   89   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
   90   b.trigger = Badge::Trigger::UserChange
   91   b.system = true
   92 end
   93 
   94 Badge.seed do |b|
   95   b.id = Badge::FirstLink
   96   b.name = "First Link"
   97   b.default_icon = "link"
   98   b.badge_type_id = BadgeType::Bronze
   99   b.multiple_grant = false
  100   b.target_posts = true
  101   b.show_posts = true
  102   b.query = BadgeQueries::FirstLink
  103   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  104   b.trigger = Badge::Trigger::PostRevision
  105   b.system = true
  106 end
  107 
  108 Badge.seed do |b|
  109   b.id = Badge::FirstQuote
  110   b.name = "First Quote"
  111   b.default_icon = "quote-right"
  112   b.badge_type_id = BadgeType::Bronze
  113   b.multiple_grant = false
  114   b.target_posts = true
  115   b.show_posts = true
  116   b.query = BadgeQueries::FirstQuote
  117   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  118   b.trigger = Badge::Trigger::PostRevision
  119   b.system = true
  120 end
  121 
  122 Badge.seed do |b|
  123   b.id = Badge::FirstLike
  124   b.name = "First Like"
  125   b.default_icon = "heart"
  126   b.badge_type_id = BadgeType::Bronze
  127   b.multiple_grant = false
  128   b.target_posts = true
  129   b.show_posts = true
  130   b.query = BadgeQueries::FirstLike
  131   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  132   b.trigger = Badge::Trigger::PostAction
  133   b.system = true
  134 end
  135 
  136 Badge.seed do |b|
  137   b.id = Badge::FirstFlag
  138   b.name = "First Flag"
  139   b.default_icon = "flag"
  140   b.badge_type_id = BadgeType::Bronze
  141   b.multiple_grant = false
  142   b.target_posts = true
  143   b.show_posts = false
  144   b.query = BadgeQueries::FirstFlag
  145   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  146   b.trigger = Badge::Trigger::PostAction
  147   b.auto_revoke = false
  148   b.system = true
  149 end
  150 
  151 [
  152   [Badge::Promoter, "Promoter", BadgeType::Bronze, 1, 0],
  153   [Badge::Campaigner, "Campaigner", BadgeType::Silver, 3, 1],
  154   [Badge::Champion, "Champion", BadgeType::Gold, 5, 2],
  155 ].each do |id, name, type, count, trust_level|
  156   Badge.seed do |b|
  157     b.id = id
  158     b.name = name
  159     b.default_icon = "fa-user-plus"
  160     b.badge_type_id = type
  161     b.multiple_grant = false
  162     b.target_posts = false
  163     b.show_posts = false
  164     b.query = BadgeQueries.invite_badge(count, trust_level)
  165     b.default_badge_grouping_id = BadgeGrouping::Community
  166     # daily is good enough
  167     b.trigger = Badge::Trigger::None
  168     b.auto_revoke = true
  169     b.system = true
  170   end
  171 end
  172 
  173 Badge.seed do |b|
  174   b.id = Badge::FirstShare
  175   b.name = "First Share"
  176   b.default_icon = "share-alt"
  177   b.badge_type_id = BadgeType::Bronze
  178   b.multiple_grant = false
  179   b.target_posts = true
  180   b.show_posts = true
  181   b.query = BadgeQueries::FirstShare
  182   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  183   # don't trigger for now, its too expensive
  184   b.trigger = Badge::Trigger::None
  185   b.system = true
  186 end
  187 
  188 [
  189   [Badge::NiceShare, "Nice Share", BadgeType::Bronze, 25],
  190   [Badge::GoodShare, "Good Share", BadgeType::Silver, 300],
  191   [Badge::GreatShare, "Great Share", BadgeType::Gold, 1000],
  192 ].each do |id, name, level, count|
  193   Badge.seed do |b|
  194     b.id = id
  195     b.name = name
  196     b.default_icon = "share-alt"
  197     b.badge_type_id = level
  198     b.multiple_grant = true
  199     b.target_posts = true
  200     b.show_posts = true
  201     b.query = BadgeQueries.sharing_badge(count)
  202     b.default_badge_grouping_id = BadgeGrouping::Community
  203     # don't trigger for now, its too expensive
  204     b.trigger = Badge::Trigger::None
  205     b.system = true
  206   end
  207 end
  208 
  209 Badge.seed do |b|
  210   b.id = Badge::Welcome
  211   b.name = "Welcome"
  212   b.default_icon = "heart"
  213   b.badge_type_id = BadgeType::Bronze
  214   b.multiple_grant = false
  215   b.target_posts = true
  216   b.show_posts = true
  217   b.query = BadgeQueries::Welcome
  218   b.default_badge_grouping_id = BadgeGrouping::Community
  219   b.trigger = Badge::Trigger::PostAction
  220   b.system = true
  221 end
  222 
  223 Badge.seed do |b|
  224   b.id = Badge::Autobiographer
  225   b.name = "Autobiographer"
  226   b.default_icon = "user-edit"
  227   b.badge_type_id = BadgeType::Bronze
  228   b.multiple_grant = false
  229   b.query = BadgeQueries::Autobiographer
  230   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  231   b.trigger = Badge::Trigger::UserChange
  232   b.system = true
  233 end
  234 
  235 Badge.seed do |b|
  236   b.id = Badge::Editor
  237   b.name = "Editor"
  238   b.default_icon = "pen"
  239   b.badge_type_id = BadgeType::Bronze
  240   b.multiple_grant = false
  241   b.query = BadgeQueries::Editor
  242   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  243   b.trigger = Badge::Trigger::PostRevision
  244   b.system = true
  245 end
  246 
  247 Badge.seed do |b|
  248   b.id = Badge::WikiEditor
  249   b.name = "Wiki Editor"
  250   b.default_icon = "far-edit"
  251   b.badge_type_id = BadgeType::Bronze
  252   b.multiple_grant = false
  253   b.target_posts = true
  254   b.query = BadgeQueries::WikiEditor
  255   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  256   b.trigger = Badge::Trigger::PostRevision
  257   b.system = true
  258 end
  259 
  260 [
  261   [Badge::NicePost, "Nice Post", BadgeType::Bronze, false],
  262   [Badge::GoodPost, "Good Post", BadgeType::Silver, false],
  263   [Badge::GreatPost, "Great Post", BadgeType::Gold, false],
  264 ].each do |id, name, type, topic|
  265   Badge.seed do |b|
  266     b.id = id
  267     b.name = name
  268     b.default_icon = "reply"
  269     b.badge_type_id = type
  270     b.multiple_grant = true
  271     b.target_posts = true
  272     b.show_posts = true
  273     b.query = BadgeQueries.like_badge(Badge.like_badge_counts[id], topic)
  274     b.default_badge_grouping_id = BadgeGrouping::Posting
  275     b.trigger = Badge::Trigger::PostAction
  276     b.system = true
  277   end
  278 end
  279 
  280 [
  281   [Badge::NiceTopic, "Nice Topic", BadgeType::Bronze, true],
  282   [Badge::GoodTopic, "Good Topic", BadgeType::Silver, true],
  283   [Badge::GreatTopic, "Great Topic", BadgeType::Gold, true],
  284 ].each do |id, name, type, topic|
  285   Badge.seed do |b|
  286     b.id = id
  287     b.name = name
  288     b.default_icon = "file-signature"
  289     b.badge_type_id = type
  290     b.multiple_grant = true
  291     b.target_posts = true
  292     b.show_posts = true
  293     b.query = BadgeQueries.like_badge(Badge.like_badge_counts[id], topic)
  294     b.default_badge_grouping_id = BadgeGrouping::Posting
  295     b.trigger = Badge::Trigger::PostAction
  296     b.system = true
  297   end
  298 end
  299 
  300 Badge.seed do |b|
  301   b.id = Badge::Anniversary
  302   b.name = "Anniversary"
  303   b.default_icon = "birthday-cake"
  304   b.badge_type_id = BadgeType::Silver
  305   b.default_badge_grouping_id = BadgeGrouping::Community
  306   b.query = nil
  307   b.trigger = Badge::Trigger::None
  308   b.auto_revoke = false
  309   b.system = true
  310   b.multiple_grant = true
  311 end
  312 
  313 [
  314   [Badge::PopularLink, "Popular Link", BadgeType::Bronze, 50],
  315   [Badge::HotLink, "Hot Link", BadgeType::Silver, 300],
  316   [Badge::FamousLink, "Famous Link", BadgeType::Gold, 1000],
  317 ].each do |id, name, level, count|
  318   Badge.seed do |b|
  319     b.id = id
  320     b.name = name
  321     b.default_icon = "link"
  322     b.badge_type_id = level
  323     b.multiple_grant = true
  324     b.target_posts = true
  325     b.show_posts = true
  326     b.query = BadgeQueries.linking_badge(count)
  327     b.default_badge_grouping_id = BadgeGrouping::Posting
  328     # don't trigger for now, its too expensive
  329     b.trigger = Badge::Trigger::None
  330     b.system = true
  331   end
  332 end
  333 
  334 [
  335   [Badge::Appreciated, "Appreciated", BadgeType::Bronze, 1, 20],
  336   [Badge::Respected, "Respected", BadgeType::Silver, 2, 100],
  337   [Badge::Admired, "Admired", BadgeType::Gold, 5, 300],
  338 ].each do |id, name, level, like_count, post_count|
  339   Badge.seed do |b|
  340     b.id = id
  341     b.name = name
  342     b.default_icon = "fa-heart"
  343     b.badge_type_id = level
  344     b.query = BadgeQueries.liked_posts(post_count, like_count)
  345     b.default_badge_grouping_id = BadgeGrouping::Community
  346     b.trigger = Badge::Trigger::None
  347     b.auto_revoke = false
  348     b.system = true
  349   end
  350 end
  351 
  352 [
  353   [Badge::ThankYou, "Thank You", BadgeType::Bronze, 20, 10],
  354   [Badge::GivesBack, "Gives Back", BadgeType::Silver, 100, 100],
  355   [Badge::Empathetic, "Empathetic", BadgeType::Gold, 500, 1000],
  356 ].each do |id, name, level, count, ratio|
  357   Badge.seed do |b|
  358     b.id = id
  359     b.name = name
  360     b.default_icon = "fa-heart"
  361     b.badge_type_id = level
  362     b.query = BadgeQueries.liked_back(count, ratio)
  363     b.default_badge_grouping_id = BadgeGrouping::Community
  364     b.trigger = Badge::Trigger::None
  365     b.auto_revoke = false
  366     b.system = true
  367   end
  368 end
  369 
  370 [
  371   [Badge::OutOfLove, "Out of Love", BadgeType::Bronze, 1],
  372   [Badge::HigherLove, "Higher Love", BadgeType::Silver, 5],
  373   [Badge::CrazyInLove, "Crazy in Love", BadgeType::Gold, 20],
  374 ].each do |id, name, level, count|
  375   Badge.seed do |b|
  376     b.id = id
  377     b.name = name
  378     b.default_icon = "fa-heart"
  379     b.badge_type_id = level
  380     b.query = BadgeQueries.like_rate_limit(count)
  381     b.default_badge_grouping_id = BadgeGrouping::Community
  382     b.trigger = Badge::Trigger::None
  383     b.auto_revoke = false
  384     b.system = true
  385   end
  386 end
  387 
  388 Badge.seed do |b|
  389   b.id = Badge::FirstMention
  390   b.name = "First Mention"
  391   b.default_icon = "at"
  392   b.badge_type_id = BadgeType::Bronze
  393   b.multiple_grant = false
  394   b.target_posts = true
  395   b.show_posts = true
  396   b.query = BadgeQueries::FirstMention
  397   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  398   b.trigger = Badge::Trigger::PostRevision
  399   b.system = true
  400 end
  401 
  402 Badge.seed do |b|
  403   b.id = Badge::FirstEmoji
  404   b.name = "First Emoji"
  405   b.default_icon = "smile"
  406   b.badge_type_id = BadgeType::Bronze
  407   b.multiple_grant = false
  408   b.target_posts = true
  409   b.show_posts = true
  410   b.query = nil
  411   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  412   b.trigger = Badge::Trigger::None
  413   b.system = true
  414 end
  415 
  416 Badge.seed do |b|
  417   b.id = Badge::FirstOnebox
  418   b.name = "First Onebox"
  419   b.default_icon = "cube"
  420   b.badge_type_id = BadgeType::Bronze
  421   b.multiple_grant = false
  422   b.target_posts = true
  423   b.show_posts = true
  424   b.query = nil
  425   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  426   b.trigger = Badge::Trigger::None
  427   b.system = true
  428 end
  429 
  430 Badge.seed do |b|
  431   b.id = Badge::FirstReplyByEmail
  432   b.name = "First Reply By Email"
  433   b.default_icon = "envelope"
  434   b.badge_type_id = BadgeType::Bronze
  435   b.multiple_grant = false
  436   b.target_posts = true
  437   b.show_posts = true
  438   b.query = nil
  439   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  440   b.trigger = Badge::Trigger::None
  441   b.system = true
  442 end
  443 
  444 Badge.seed do |b|
  445   b.id = Badge::NewUserOfTheMonth
  446   b.name = "New User of the Month"
  447   b.default_icon = "medal"
  448   b.badge_type_id = BadgeType::Bronze
  449   b.multiple_grant = false
  450   b.target_posts = false
  451   b.show_posts = false
  452   b.query = nil
  453   b.default_badge_grouping_id = BadgeGrouping::GettingStarted
  454   b.trigger = Badge::Trigger::None
  455   b.system = true
  456 end
  457 
  458 [
  459   [Badge::Enthusiast, "Enthusiast", BadgeType::Bronze, 10],
  460   [Badge::Aficionado, "Aficionado", BadgeType::Silver, 100],
  461   [Badge::Devotee, "Devotee", BadgeType::Gold, 365],
  462 ].each do |id, name, level, days|
  463   Badge.seed do |b|
  464     b.id = id
  465     b.name = name
  466     b.default_icon = "far-eye"
  467     b.badge_type_id = level
  468     b.query = BadgeQueries.consecutive_visits(days)
  469     b.default_badge_grouping_id = BadgeGrouping::Community
  470     b.trigger = Badge::Trigger::None
  471     b.auto_revoke = false
  472     b.system = true
  473   end
  474 end
  475 
  476 Badge
  477   .where("NOT system AND id < 100")
  478   .each do |badge|
  479     new_id = [Badge.maximum(:id) + 1, 100].max
  480     old_id = badge.id
  481     badge.update_columns(id: new_id)
  482     UserBadge.where(badge_id: old_id).update_all(badge_id: new_id)
  483   end