diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/acts_as_xapian/acts_as_xapian.rb | 72 | ||||
| -rw-r--r-- | lib/alaveteli_text_masker.rb | 35 | ||||
| -rw-r--r-- | lib/configuration.rb | 13 | 
3 files changed, 72 insertions, 48 deletions
| diff --git a/lib/acts_as_xapian/acts_as_xapian.rb b/lib/acts_as_xapian/acts_as_xapian.rb index 6520a20a4..f742bae52 100644 --- a/lib/acts_as_xapian/acts_as_xapian.rb +++ b/lib/acts_as_xapian/acts_as_xapian.rb @@ -487,41 +487,37 @@ module ActsAsXapian          # date ranges or similar. Use this for cheap highlighting with          # TextHelper::highlight, and excerpt.          def words_to_highlight(opts = {}) -          default_opts = { :include_original => false, :regex => false } -          opts = default_opts.merge(opts) - -          # Reject all prefixes other than Z, which we know is reserved for stems -          terms = query.terms.reject { |t| t.term.first.match(/^[A-Y]$/) } -          # Collect the stems including the Z prefix -          raw_stems = terms.map { |t| t.term if t.term.start_with?('Z') }.compact.uniq.sort -          # Collect stems, chopping the Z prefix off -          stems = raw_stems.map { |t| t[1..-1] }.compact.sort -          # Collect the non-stem terms -          words = terms.map { |t| t.term unless t.term.start_with?('Z') }.compact.sort - -          # Add the unstemmed words from the original query -          # Sometimes stems can be unhelpful with the :regex option, for example -          # stemming 'boring' results in us trying to highlight 'bore'. -          if opts[:include_original] -            raw_stems.each do |raw_stem| -              words << ActsAsXapian.query_parser.unstem(raw_stem).uniq -            end - -            words = words.any? ? words.flatten.uniq : [] -          end - -          if opts[:regex] -            stems.map! { |w| /\b(#{ w })\w*\b/iu } -            words.map! { |w| /\b(#{ w })\b/iu } -          end - -          if RUBY_VERSION.to_f >= 1.9 -              (stems + words).map! do |term| -                  term.is_a?(String) ? term.force_encoding('UTF-8') : term -              end -          else -              stems + words -          end +            default_opts = { :include_original => false, :regex => false } +            opts = default_opts.merge(opts) + +            # Reject all prefixes other than Z, which we know is reserved for stems +            terms = query.terms.reject { |t| t.term.first.match(/^[A-Y]$/) } +            # Collect the stems including the Z prefix +            raw_stems = terms.map { |t| t.term if t.term.start_with?('Z') }.compact.uniq.sort +            # Collect stems, chopping the Z prefix off +            stems = raw_stems.map { |t| t[1..-1] }.compact.sort +            # Collect the non-stem terms +            words = terms.map { |t| t.term unless t.term.start_with?('Z') }.compact.sort + +            # Add the unstemmed words from the original query +            # Sometimes stems can be unhelpful with the :regex option, for example +            # stemming 'boring' results in us trying to highlight 'bore'. +            if opts[:include_original] +                raw_stems.each do |raw_stem| +                    words << ActsAsXapian.query_parser.unstem(raw_stem).uniq +                end + +                words = words.any? ? words.flatten.uniq : [] +            end + +            if opts[:regex] +                stems.map! { |w| /\b(#{ correctly_encode(w) })\w*\b/iu } +                words.map! { |w| /\b(#{ correctly_encode(w) })\b/iu } +            end + +            (stems + words).map! do |term| +                term.is_a?(String) ? correctly_encode(term) : term +            end          end          # Text for lines in log file @@ -529,6 +525,12 @@ module ActsAsXapian              "Search: " + self.query_string          end +        private + +        def correctly_encode(w) +            RUBY_VERSION.to_f >= 1.9 ? w.force_encoding('UTF-8') : w +        end +      end      # Search for models which contain theimportant terms taken from a specified diff --git a/lib/alaveteli_text_masker.rb b/lib/alaveteli_text_masker.rb index 68ff0d318..5d836f66c 100644 --- a/lib/alaveteli_text_masker.rb +++ b/lib/alaveteli_text_masker.rb @@ -28,9 +28,7 @@ module AlaveteliTextMasker      end      def apply_pdf_masks!(text, options = {}) -        uncompressed_text = nil -        uncompressed_text = AlaveteliExternalCommand.run("pdftk", "-", "output", "-", "uncompress", -                                                         :stdin_string => text) +        uncompressed_text = uncompress_pdf(text)          # if we managed to uncompress the PDF...          if !uncompressed_text.blank?              # then censor stuff (making a copy so can compare again in a bit) @@ -39,19 +37,13 @@ module AlaveteliTextMasker              # if the censor rule removed something...              if censored_uncompressed_text != uncompressed_text                  # then use the altered file (recompressed) -                recompressed_text = nil -                if AlaveteliConfiguration::use_ghostscript_compression == true -                    command = ["gs", "-sDEVICE=pdfwrite", "-dCompatibilityLevel=1.4", "-dPDFSETTINGS=/screen", "-dNOPAUSE", "-dQUIET", "-dBATCH", "-sOutputFile=-", "-"] -                else -                    command = ["pdftk", "-", "output", "-", "compress"] -                end -                recompressed_text = AlaveteliExternalCommand.run(*(command + [{:stdin_string=>censored_uncompressed_text}])) +                recompressed_text = compress_pdf(censored_uncompressed_text)                  if recompressed_text.blank?                      # buggy versions of pdftk sometimes fail on                      # compression, I don't see it's a disaster in                      # these cases to save an uncompressed version?                      recompressed_text = censored_uncompressed_text -                    logger.warn "Unable to compress PDF; problem with your pdftk version?" +                    Rails.logger.warn "Unable to compress PDF; problem with your pdftk version?"                  end                  if !recompressed_text.blank?                      text.replace recompressed_text @@ -62,6 +54,27 @@ module AlaveteliTextMasker      private +    def uncompress_pdf(text) +        AlaveteliExternalCommand.run("pdftk", "-", "output", "-", "uncompress", :stdin_string => text) +    end + +    def compress_pdf(text) +        if AlaveteliConfiguration::use_ghostscript_compression +            command = ["gs", +                       "-sDEVICE=pdfwrite", +                       "-dCompatibilityLevel=1.4", +                       "-dPDFSETTINGS=/screen", +                       "-dNOPAUSE", +                       "-dQUIET", +                       "-dBATCH", +                       "-sOutputFile=-", +                       "-"] +        else +            command = ["pdftk", "-", "output", "-", "compress"] +        end +        AlaveteliExternalCommand.run(*(command + [ :stdin_string => text ])) +    end +      # Replace text in place      def apply_binary_masks!(text, options = {})          # Keep original size, so can check haven't resized it diff --git a/lib/configuration.rb b/lib/configuration.rb index 90fd30d5f..c983152e0 100644 --- a/lib/configuration.rb +++ b/lib/configuration.rb @@ -32,6 +32,7 @@ module AlaveteliConfiguration              :DISABLE_EMERGENCY_USER => false,              :DOMAIN => 'localhost:3000',              :DONATION_URL => '', +            :ENABLE_WIDGETS => false,              :EXCEPTION_NOTIFICATIONS_FROM => '',              :EXCEPTION_NOTIFICATIONS_TO => '',              :FORCE_REGISTRATION_ON_NEW_REQUEST => false, @@ -52,6 +53,7 @@ module AlaveteliConfiguration              :MTA_LOG_TYPE => 'exim',              :NEW_RESPONSE_REMINDER_AFTER_DAYS => [3, 10, 24],              :OVERRIDE_ALL_PUBLIC_BODY_REQUEST_EMAILS => '', +            :PRODUCTION_MAILER_DELIVERY_METHOD => 'sendmail',              :PUBLIC_BODY_STATISTICS_PAGE => false,              :PUBLIC_BODY_LIST_FALLBACK_TO_DEFAULT_LOCALE => false,              :RAW_EMAILS_LOCATION => 'files/raw_emails', @@ -63,6 +65,13 @@ module AlaveteliConfiguration              :RESPONSIVE_STYLING => true,              :SITE_NAME => 'Alaveteli',              :SKIP_ADMIN_AUTH => false, +            :SMTP_MAILER_ADDRESS => 'localhost', +            :SMTP_MAILER_PORT => 25, +            :SMTP_MAILER_DOMAIN => '', +            :SMTP_MAILER_USER_NAME =>  '', +            :SMTP_MAILER_PASSWORD => '', +            :SMTP_MAILER_AUTHENTICATION => 'plain', +            :SMTP_MAILER_ENABLE_STARTTLS_AUTO => true,              :SPECIAL_REPLY_VERY_LATE_AFTER_DAYS => 60,              :THEME_BRANCH => false,              :THEME_URL => "", @@ -77,9 +86,9 @@ module AlaveteliConfiguration              :USE_MAILCATCHER_IN_DEVELOPMENT => true,              :UTILITY_SEARCH_PATH => ["/usr/bin", "/usr/local/bin"],              :VARNISH_HOST => '', -            :WORKING_OR_CALENDAR_DAYS => 'working', +            :WORKING_OR_CALENDAR_DAYS => 'working'            } -      end +    end    def AlaveteliConfiguration.method_missing(name)      key = name.to_s.upcase | 
