coldfusion - Issues with CFZip functionality -
i have following working half way. trying cfzip contents of downloaded excel file there 1 problem involved. code below shows there 3 tickets. 1 main ticket , 2 tickets extended answers of main ticket. attachments allowed on tickets, main ones , children's too.
when try download excel file, trying download 2 folders should inside zip file. 1 should pointing child , 1 parent. both should have respective attachments. missing big piece of code here.
here code:
<cfquery datasource="#request.dsn#" name="maintickets"> select s.ticketid,cast(s.dateraised varchar) dateraised,s.summary,s.raisedby,s.assignedto, st.status ,cast(s.lastupdateddate varchar),cast(s.timespent float) timespent,stt.tickettype,s.lastupdatedcomment supporttickets s inner join supportstatustype st on st.statusid = s.status inner join supporttickettype stt on stt.tickettypeid = s.tickettype s.ticketid in (<cfqueryparam cfsqltype="cf_sql_numeric" value="#url.ticketid#" list="yes"> ) </cfquery> <cfset filename = "detailed_ticket_summary" & dateformat(now(), 'mm_dd_yyyy') & "." & "xls"> <cfset s = spreadsheetnew("tickets summary")> <!--- add header row ---> <cfset spreadsheetaddrow(s, "ticketid,date raised,summary,raised by,assignedto,status,last updated date, time spent, ticket type, last updated comment, details")> <!--- format header ---> <cfset spreadsheetformatrow(s, #format1#, 1)> <cfset spreadsheetaddrows(s, maintickets)> <cfset spreadsheetformatcolumn(s, {textwrap=true}, 10)> <cfset spreadsheetformatcolumn(s, {textwrap=true}, 3)> <cfloop from="1" to="#maintickets.recordcount#" index="i"> <cfset k = + 1> <cfset spreadsheetsetcellformula(s, 'hyperlink("[tickets summary]ticketid_#maintickets.ticketid#!a1","click here")',#k#,11)> <cfset spreadsheetformatcell(s, {bold=true, color='blue', bottomborder='dotted'}, #k#, 11)> </cfloop> <cfif maintickets.recordcount> <cfoutput query="maintickets"> <cfquery datasource="#request.dsn#" name="fetchtickets"> select s.ticketid,s.ticketnumber,cast(s.dateraised varchar),s.summary,s.raisedby,s.assignedto, st.status ,cast(s.lastupdateddate varchar),s.timespent,stt.tickettype,s.lastupdatedcomment supportticketshistory s inner join supportstatustype st on st.statusid = s.status inner join supporttickettype stt on stt.tickettypeid = s.tickettype s.ticketnumber = <cfqueryparam cfsqltype="cf_sql_numeric" value="#maintickets.ticketid#"> </cfquery> <!--- add query ---> <cfif fetchtickets.recordcount> <cfset spreadsheetcreatesheet(s, 'ticketid_#ticketid#')> <cfset spreadsheetsetactivesheet(s, 'ticketid_#ticketid#')> <!--- add header row ---> <cfset spreadsheetaddrow(s, "ticketid,ticket number,date raised,summary,raised by,assignedto,status,last updated date, time spent, ticket type, last updated comment")> <!--- format header ---> <cfset spreadsheetformatrow(s, #format1#, 1)> <cfset spreadsheetaddrows(s, fetchtickets)> <cfset spreadsheetformatcolumn(s, {textwrap=true}, 11)> <cfset spreadsheetsetactivesheetnumber(s, 1)> <cfset ielements = valuelist(maintickets.ticketid)> <cfquery datasource="#request.dsn#" name="getattachments"> select attach_filename,attach_filesize,attach_time,supportticketid support_attachments supportticketid = #val(fetchtickets.ticketnumber)# </cfquery> <cfquery datasource="#request.dsn#" name="getchkattachments"> select support_attach_filename,support_attach_filesize,support_attach_time, support_supporttkthistoryid,support_supportticketid support_attach_history support_supportticketid = #val(fetchtickets.ticketnumber)#and support_supporttkthistoryid in (select ss.ticketid supportticketshistory ss ss.ticketnumber = #val(fetchtickets.ticketnumber)#) </cfquery> <!--- handle attachments ticket in zip format ---> <cfset currentdirectory = getdirectoryfrompath(gettemplatepath()) & getattachments.supportticketid> <cfif !directoryexists(currentdirectory)> <cfdirectory action="create" directory="#currentdirectory#"> </cfif> <cfset currentdirectory2 = getdirectoryfrompath(gettemplatepath()) & getchkattachments.support_supporttkthistoryid> <cfif !directoryexists(currentdirectory2)> <cfdirectory action="create" directory="#currentdirectory2#"> </cfif> <cfif getattachments.recordcount> <cfloop query="getattachments"> <cffile action="copy" source="#expandpath('attachments/#getattachments.attach_filename#')#" destination="#currentdirectory#\"> </cfloop> </cfif> <cfif getchkattachments.recordcount> <cfloop query="getchkattachments"> <cffile action="copy" source="#expandpath('attachments/#getchkattachments.support_attach_filename#')#" destination="#currentdirectory2#\"> </cfloop> </cfif> <!--- handle attachments ticket in zip format ---> <cfset spreadsheetwrite(s, filename, true)> <cfset dest2 = gettempdirectory() & "/" & "tickets" & ".zip"> <cfzip action="zip" file="#dest2#"> <cfdirectory action="list" directory="#currentdirectory#/" name="listroot"> <cfdirectory action="list" directory="#currentdirectory2#/" name="listroot2"> <cfset lstfiles = valuelist(listroot.name)> <cfset lstfiles2 = valuelist(listroot2.name)> <cfloop list="#lstfiles#" index="k"> <cfzipparam source="#currentdirectory#/#k#" recurse="yes" filter="*"/> </cfloop> <cfloop list="#lstfiles2#" index="kk"> <cfzipparam source="#currentdirectory2#/#kk#" recurse="yes" filter="*"/> </cfloop> </cfzip> </cfif> </cfoutput> </cfif> <cfheader name="content-disposition" value="attachment;filename=#listfirst(filename,'.')#.zip"> <cfcontent file="#dest2#" type="application/zip" deletefile="true" reset="true">
i sorted out here way have done it.
<cfquery datasource="#request.dsn#" name="maintickets"> select s.ticketid,cast(s.dateraised varchar) dateraised,s.summary,s.raisedby,s.assignedto, st.status ,cast(s.lastupdateddate varchar),cast(s.timespent float) timespent,stt.tickettype,s.lastupdatedcomment supporttickets s inner join supportstatustype st on st.statusid = s.status inner join supporttickettype stt on stt.tickettypeid = s.tickettype s.ticketid in (<cfqueryparam cfsqltype="cf_sql_numeric" value="#url.ticketid#" list="yes">) </cfquery> <cfset filename = "detailed_ticket_summary" & dateformat(now(),'mm_dd_yyyy') & "." & "xls"> <cfset s = spreadsheetnew("tickets summary")> <!--- add header row ---> <cfset spreadsheetaddrow(s, "ticketid,date raised,summary,raised by,assignedto,status,last updated date, time spent, ticket type, last updated comment, details")> <!--- format header ---> <cfset spreadsheetformatrow(s,#format1#,1)> <cfset spreadsheetaddrows(s, maintickets)> <cfset spreadsheetformatcolumn(s,{textwrap=true},10)> <cfset spreadsheetformatcolumn(s,{textwrap=true},3)> <cfloop from="1" to="#maintickets.recordcount#" index="i"> <cfset k = i+1> <cfset spreadsheetsetcellformula(s, 'hyperlink("[tickets summary]ticketid_#maintickets.ticketid#!a1","click here")',#k#,11)> <cfset spreadsheetformatcell(s,{bold=true,color='blue',bottomborder='dotted'},#k#,11)> </cfloop> <cfif maintickets.recordcount> <cfoutput query="maintickets"> <cfquery datasource="#request.dsn#" name="fetchtickets"> select s.ticketid,s.ticketnumber,cast(s.dateraised varchar),s.summary,s.raisedby,s.assignedto, st.status ,cast(s.lastupdateddate varchar),s.timespent,stt.tickettype,s.lastupdatedcomment supportticketshistory s inner join supportstatustype st on st.statusid = s.status inner join supporttickettype stt on stt.tickettypeid = s.tickettype s.ticketnumber = <cfqueryparam cfsqltype="cf_sql_numeric" value="#maintickets.ticketid#"> </cfquery> <!--- add query ---> <cfset temp = getdirectoryfrompath(gettemplatepath()) & 'temp'> <cfif !directoryexists(temp)> <cfdirectory action="create" directory="#temp#"> </cfif> <cfif fetchtickets.recordcount> <cfset spreadsheetcreatesheet(s , 'ticketid_#ticketid#')> <cfset spreadsheetsetactivesheet(s , 'ticketid_#ticketid#')> <!--- add header row ---> <cfset spreadsheetaddrow(s, "ticketid,ticket number,date raised,summary,raised by,assignedto,status,last updated date, time spent, ticket type, last updated comment")> <!--- format header ---> <cfset spreadsheetformatrow(s,#format1#,1)> <cfset spreadsheetaddrows(s , fetchtickets)> <cfset spreadsheetformatcolumn(s,{textwrap=true},11)> <cfset spreadsheetsetactivesheetnumber(s, 1)> <cfset ielements = valuelist(maintickets.ticketid)> <cfquery datasource="#request.dsn#" name="getattachments"> select attach_filename,attach_filesize,attach_time,supportticketid support_attachments supportticketid = #val(fetchtickets.ticketnumber)# </cfquery> <cfquery datasource="#request.dsn#" name="getchkattachments"> select support_attach_filename,support_attach_filesize,support_attach_time, support_supporttkthistoryid,support_supportticketid support_attach_history support_supportticketid = #val(fetchtickets.ticketnumber)# , support_supporttkthistoryid in (select ss.ticketid supportticketshistory ss ss.ticketnumber = #val(fetchtickets.ticketnumber)#) </cfquery> <cfif getattachments.recordcount> <!--- handle attachments ticket in zip format ---> <cfset currentdirectory = "mainticketid_" & "number_" & getattachments.supportticketid & "_attachments"> <cfdump var="#temp#\#currentdirectory#"> <cfif !directoryexists("#temp#\#currentdirectory#")> <cfdirectory action="create" directory="#temp#\#currentdirectory#"> </cfif> <cfdump var="#currentdirectory#"> <cfif getattachments.recordcount> <cfloop query="getattachments"> <cffile action="copy" source="#expandpath('attachments/#getattachments.attach_filename#')#" destination="#temp#\#currentdirectory#\"> </cfloop> </cfif> </cfif> <cfif getchkattachments.recordcount> <cfset currentdirectory2 = "mainticket_" & getchkattachments.support_supportticketid & "_updated_child_" & getchkattachments.support_supporttkthistoryid & "_attachments"> <cfif !directoryexists("#temp#\#currentdirectory2#")> <cfdirectory action="create" directory="#temp#\#currentdirectory2#"> </cfif> <cfif getchkattachments.recordcount> <cfloop query="getchkattachments"> <cffile action="copy" source="#expandpath('attachments/#getchkattachments.support_attach_filename#')#" destination="#temp#\#currentdirectory2#\"> </cfloop> </cfif> </cfif> <!--- handle attachments ticket in zip format ---> <cfset spreadsheetwrite(s, filename, true)> <cfset dest2 = gettempdirectory() & "/" & "tickets" & ".zip"> <cfzip action="zip" file="#dest2#" overwrite="true"> <cfzipparam source="#temp#"/> <cfzipparam source="#filename#"/> </cfzip> </cfif> </cfoutput> </cfif> <cfdirectory action="delete" directory="#temp#" recurse="yes"> <cfheader name="content-disposition" value="attachment;filename=#listfirst(filename,'.')#.zip"> <cfcontent file="#dest2#" type="application/zip" deletefile="true" reset="true"> this can instead how nest cfzip functionality
Comments
Post a Comment