| 
									
										
										
										
											2019-03-16 09:37:35 +00:00
										 |  |  | # frozen_string_literal: true | 
					
						
							| 
									
										
										
										
											2019-03-15 01:32:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-04 17:09:25 +00:00
										 |  |  | # Redmine - project management software | 
					
						
							| 
									
										
										
										
											2024-02-26 22:55:54 +00:00
										 |  |  | # Copyright (C) 2006-  Jean-Philippe Lang | 
					
						
							| 
									
										
										
										
											2009-01-04 17:09:25 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  | # modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  | # as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  | # of the License, or (at your option) any later version. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | # GNU General Public License for more details. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | # along with this program; if not, write to the Free Software | 
					
						
							|  |  |  | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-16 21:55:30 +00:00
										 |  |  | require_relative 'utils/date_calculation' | 
					
						
							|  |  |  | require_relative 'utils/shell' | 
					
						
							| 
									
										
										
										
											2015-08-14 08:20:32 +00:00
										 |  |  | require 'fileutils' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-04 17:09:25 +00:00
										 |  |  | module Redmine | 
					
						
							|  |  |  |   module Utils | 
					
						
							|  |  |  |     class << self | 
					
						
							|  |  |  |       # Returns the relative root url of the application | 
					
						
							|  |  |  |       def relative_url_root | 
					
						
							| 
									
										
										
										
											2021-12-29 06:12:27 +00:00
										 |  |  |         if ActionController::Base.respond_to?(:relative_url_root) | 
					
						
							| 
									
										
										
										
											2019-10-19 04:30:01 +00:00
										 |  |  |           ActionController::Base.relative_url_root.to_s | 
					
						
							|  |  |  |         else | 
					
						
							| 
									
										
										
										
											2012-04-25 17:17:49 +00:00
										 |  |  |           ActionController::Base.config.relative_url_root.to_s | 
					
						
							| 
									
										
										
										
											2019-10-19 04:30:01 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2009-01-04 17:09:25 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2011-09-20 02:46:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-04 17:09:25 +00:00
										 |  |  |       # Sets the relative root url of the application | 
					
						
							|  |  |  |       def relative_url_root=(arg) | 
					
						
							| 
									
										
										
										
											2021-12-29 06:12:27 +00:00
										 |  |  |         if ActionController::Base.respond_to?(:relative_url_root=) | 
					
						
							| 
									
										
										
										
											2009-01-04 17:09:25 +00:00
										 |  |  |           ActionController::Base.relative_url_root=arg | 
					
						
							|  |  |  |         else | 
					
						
							| 
									
										
										
										
											2012-04-25 17:17:49 +00:00
										 |  |  |           ActionController::Base.config.relative_url_root = arg | 
					
						
							| 
									
										
										
										
											2009-01-04 17:09:25 +00:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2012-03-04 11:05:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       # Generates a n bytes random hex string | 
					
						
							|  |  |  |       # Example: | 
					
						
							|  |  |  |       #   random_hex(4) # => "89b8c729" | 
					
						
							|  |  |  |       def random_hex(n) | 
					
						
							| 
									
										
										
										
											2012-04-25 17:17:49 +00:00
										 |  |  |         SecureRandom.hex(n) | 
					
						
							| 
									
										
										
										
											2012-03-04 11:05:02 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2015-08-14 08:20:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       def save_upload(upload, path) | 
					
						
							|  |  |  |         directory = File.dirname(path) | 
					
						
							| 
									
										
										
										
											2022-06-30 07:35:23 +00:00
										 |  |  |         FileUtils.mkdir_p directory | 
					
						
							| 
									
										
										
										
											2015-08-14 08:20:32 +00:00
										 |  |  |         File.open(path, "wb") do |f| | 
					
						
							|  |  |  |           if upload.respond_to?(:read) | 
					
						
							|  |  |  |             buffer = "" | 
					
						
							|  |  |  |             while (buffer = upload.read(8192)) | 
					
						
							|  |  |  |               f.write(buffer) | 
					
						
							|  |  |  |               yield buffer if block_given? | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             f.write(upload) | 
					
						
							|  |  |  |             yield upload if block_given? | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2009-01-04 17:09:25 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |