@@ -18,6 +18,21 @@ def self.generate(query_id, query_params, recipients, opts = {})
18
18
build_report_pms ( query , table , recipients , attach_csv : opts [ :attach_csv ] , result :)
19
19
end
20
20
21
+ def self . generate_post ( query_id , query_params , opts = { } )
22
+ query = DiscourseDataExplorer ::Query . find ( query_id )
23
+ return { } if !query
24
+
25
+ params = params_to_hash ( query_params )
26
+
27
+ result = DataExplorer . run_query ( query , params )
28
+ query . update! ( last_run_at : Time . now )
29
+
30
+ return { } if opts [ :skip_empty ] && result [ :pg_result ] . values . empty?
31
+ table = ResultToMarkdown . convert ( result [ :pg_result ] )
32
+
33
+ build_report_post ( query , table , attach_csv : opts [ :attach_csv ] , result :)
34
+ end
35
+
21
36
private
22
37
23
38
def self . params_to_hash ( query_params )
@@ -42,37 +57,77 @@ def self.params_to_hash(query_params)
42
57
43
58
def self . build_report_pms ( query , table = "" , targets = [ ] , attach_csv : false , result : nil )
44
59
pms = [ ]
45
- upload =
46
- if attach_csv
47
- tmp_filename =
48
- "#{ query . slug } @#{ Slug . for ( Discourse . current_hostname , "discourse" ) } -#{ Date . today } .dcqresult.csv"
49
- tmp = Tempfile . new ( tmp_filename )
50
- tmp . write ( ResultFormatConverter . convert ( :csv , result ) )
51
- tmp . rewind
52
- UploadCreator . new ( tmp , tmp_filename , type : "csv_export" ) . create_for (
53
- Discourse . system_user . id ,
54
- )
55
- end
60
+ upload = create_csv_upload ( query , result ) if attach_csv
56
61
57
62
targets . each do |target |
58
63
name = target [ 0 ]
59
64
pm_type = "target_#{ target [ 1 ] } s"
60
65
61
66
pm = { }
62
- pm [ "title" ] = "Scheduled Report for #{ query . name } "
67
+ pm [ "title" ] = I18n . t (
68
+ "data_explorer.report_generator.private_message.title" ,
69
+ query_name : query . name ,
70
+ )
63
71
pm [ pm_type ] = Array ( name )
64
- pm [ "raw" ] = "Hi #{ name } , your data explorer report is ready.\n \n " +
65
- "Query Name:\n #{ query . name } \n \n Here are the results:\n #{ table } \n \n " +
66
- "<a href='#{ Discourse . base_url } /admin/plugins/explorer?id=#{ query . id } '>View query in Data Explorer</a>\n \n " +
67
- "Report created at #{ Time . zone . now . strftime ( "%Y-%m-%d at %H:%M:%S" ) } (#{ Time . zone . name } )"
72
+ pm [ "raw" ] = I18n . t (
73
+ "data_explorer.report_generator.private_message.body" ,
74
+ recipient_name : name ,
75
+ query_name : query . name ,
76
+ table : table ,
77
+ base_url : Discourse . base_url ,
78
+ query_id : query . id ,
79
+ created_at : Time . zone . now . strftime ( "%Y-%m-%d at %H:%M:%S" ) ,
80
+ timezone : Time . zone . name ,
81
+ )
68
82
if upload
69
- pm [ "raw" ] << "\n \n Appendix: [#{ upload . original_filename } |attachment](#{ upload . short_url } )"
83
+ pm [ "raw" ] << "\n \n " +
84
+ I18n . t (
85
+ "data_explorer.report_generator.upload_appendix" ,
86
+ filename : upload . original_filename ,
87
+ short_url : upload . short_url ,
88
+ )
70
89
end
71
90
pms << pm
72
91
end
73
92
pms
74
93
end
75
94
95
+ def self . build_report_post ( query , table = "" , attach_csv : false , result : nil )
96
+ upload = create_csv_upload ( query , result ) if attach_csv
97
+
98
+ post = { }
99
+ post [ "raw" ] = I18n . t (
100
+ "data_explorer.report_generator.post.body" ,
101
+ recipient_name : name ,
102
+ query_name : query . name ,
103
+ table : table ,
104
+ base_url : Discourse . base_url ,
105
+ query_id : query . id ,
106
+ created_at : Time . zone . now . strftime ( "%Y-%m-%d at %H:%M:%S" ) ,
107
+ timezone : Time . zone . name ,
108
+ )
109
+
110
+ if upload
111
+ post [ "raw" ] << "\n \n " +
112
+ I18n . t (
113
+ "data_explorer.report_generator.upload_appendix" ,
114
+ filename : upload . original_filename ,
115
+ short_url : upload . short_url ,
116
+ )
117
+ end
118
+
119
+ post
120
+ end
121
+
122
+ def self . create_csv_upload ( query , result )
123
+ tmp_filename =
124
+ "#{ query . slug } @#{ Slug . for ( Discourse . current_hostname , "discourse" ) } -#{ Date . today } .dcqresult.csv"
125
+ tmp = Tempfile . new ( tmp_filename )
126
+ tmp . write ( ResultFormatConverter . convert ( :csv , result ) )
127
+ tmp . rewind
128
+ UploadCreator . new ( tmp , tmp_filename , type : "csv_export" ) . create_for ( Discourse . system_user . id )
129
+ end
130
+
76
131
def self . filter_recipients_by_query_access ( recipients , query )
77
132
users = User . where ( username : recipients )
78
133
groups = Group . where ( name : recipients )
0 commit comments