Index: openacs-4/packages/contacts/tcl/contact-message-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/tcl/contact-message-procs.tcl,v
diff -u -r1.28 -r1.29
--- openacs-4/packages/contacts/tcl/contact-message-procs.tcl 22 Mar 2006 13:20:29 -0000 1.28
+++ openacs-4/packages/contacts/tcl/contact-message-procs.tcl 9 Apr 2006 16:40:51 -0000 1.29
@@ -10,7 +10,6 @@
namespace eval contact:: {}
namespace eval contact::message:: {}
namespace eval contact::signature:: {}
-namespace eval contact::oo:: {}
ad_proc -public contact::signature::get {
{-signature_id:required}
@@ -316,235 +315,3 @@
return $text
}
-ad_proc -public contact::oo::convert {
- {-content}
-} {
- Returns a string which we can insert into the content.xml file
-} {
- regsub -all -nocase "
" $content "" content
- regsub -all -nocase "
" $content "" content
- regsub -all -nocase " " $content " " content
- regsub -all -nocase "
" $content "" content
- regsub -all -nocase "a href=" $content "text:a xlink:type=\"simple\" xlink:href=" content
- regsub -all -nocase "/a" $content "/text:a" content
- return [string trim $content]
-}
-
-ad_proc -public contact::oo::import_oo_pdf {
- -oo_file:required
- {-printer_name "pdfconv"}
- {-title ""}
- {-item_id ""}
- {-parent_id ""}
- {-no_import:boolean}
-} {
- Imports an OpenOffice file (.sxw / .odt) as a PDF file into the content repository. If item_id is specified a new revision of that item is created, else a new item is created.
-
- @param oo_file The full path to the OpenOffice file that containst the data to be exported as PDF.
- @param printer_name The name of the printer that is assigned as the PDF converter. Defaults to "pdfconv".
- @param title Title which will be used for the resulting content item and file name if none was given in the item
- @param item_id The item_id of the content item to which the content should be associated.
- @param parent_id Needed to set the parent of this object
- @param no_import If this flag is specified the location of the generated PDF will be returned, but the pdf will not be stored in the content repository
- @return item_id of the revision that contains the file
- @return file location of the file if "no_import" has been specified.
-} {
- # This exec command is missing all the good things about openacs
- # Add the parameter to whatever package you put this procedure in.
- set oowriter_bin [parameter::get -parameter "OOWriterBin" -default "/opt/openoffice.org2.0/program/swriter"]
-
- set status [catch {exec -- /bin/sh [acs_package_root_dir contacts]/bin/convert.sh $oo_file } result]
-
- if { $status == 0 } {
-
- # The command succeeded, and wrote nothing to stderr.
- # $result contains what it wrote to stdout, unless you
- # redirected it
-
- } elseif { [string equal $::errorCode NONE] } {
-
- # The command exited with a normal status, but wrote something
- # to stderr, which is included in $result.
-
- } else {
-
- switch -exact -- [lindex $::errorCode 0] {
-
- CHILDKILLED {
- foreach { - pid sigName msg } $::errorCode break
-
- # A child process, whose process ID was $pid,
- # died on a signal named $sigName. A human-
- # readable message appears in $msg.
-
- }
-
- CHILDSTATUS {
-
- foreach { - pid code } $::errorCode break
-
- # A child process, whose process ID was $pid,
- # exited with a non-zero exit status, $code.
-
- }
-
- CHILDSUSP {
-
- foreach { - pid sigName msg } $::errorCode break
-
- # A child process, whose process ID was $pid,
- # has been suspended because of a signal named
- # $sigName. A human-readable description of the
- # signal appears in $msg.
-
- }
-
- POSIX {
-
- foreach { - errName msg } $::errorCode break
-
- # One of the kernel calls to launch the command
- # failed. The error code is in $errName, and a
- # human-readable message is in $msg.
-
- }
-
- }
- }
-
- # Strip the extension.
- set pdf_filename "[file rootname $oo_file].pdf"
- set mime_type "application/pdf"
- if {![file exists $pdf_filename]} {
- ###############
- # this is a fix to use the oo file if pdf file could not be generated
- ###############
- set pdf_filename $oo_file
- set mime_type "application/odt"
- } else {
- ns_unlink $oo_file
- }
-
- if {$no_import_p} {
- return [list $mime_type $pdf_filename]
- }
-
- set pdf_filesize [file size $pdf_filename]
-
- set file_name [file tail $pdf_filename]
- if {$title eq ""} {
- set title $file_name
- }
-
- if {[exists_and_not_null $item_id]} {
- set parent_id [get_parent -item_id $item_id]
-
- set revision_id [cr_import_content \
- -title $title \
- -item_id $item_id \
- $parent_id \
- $pdf_filename \
- $pdf_filesize \
- $mime_type \
- $file_name ]
- } else {
- set revision_id [cr_import_content \
- -title $title \
- $parent_id \
- $pdf_filename \
- $pdf_filesize \
- $mime_type \
- $file_name ]
- }
-
- ns_unlink $pdf_filename
-
- content::item::set_live_revision -revision_id $revision_id
- return [content::revision::item_id -revision_id $revision_id]
-}
-
-ad_proc -public contact::oo::change_content {
- -path:required
- -document_filename:required
- -contents:required
-} {
- Takes the provided contents and places them in the content.xml file of the sxw file, effectivly changing the content of the file.
-
- @param path Path to the file containing the content
- @param document_filename The open-office file whose contents will be changed.
- @param contents This is a list of key-values (to be used as an array) of filenames and contents
- to be replaced in the oo-file.
- @return The path to the new file.
-} {
- # Create a temporary directory
- set dir [ns_tmpnam]
- ns_mkdir $dir
-
- array set content_array $contents
- foreach filename [array names content_array] {
- # Save the content to a file.
- set file [open "${dir}/$filename" w]
- fconfigure $file -encoding utf-8
- puts $file $content_array($filename)
- flush $file
- close $file
- }
-
- # copy the document
- ns_cp "${path}/$document_filename" "${dir}/$document_filename"
-
- # Replace old content in document with new content
- # The zip command should replace the content.xml in the zipfile which
- # happens to be the OpenOffice File.
- foreach filename [array names content_array] {
- exec zip -j "${dir}/$document_filename" "${dir}/$filename"
- }
-
- # copy odt file
- set new_file "[ns_tmpnam].odt"
- ns_cp "${dir}/$document_filename" $new_file
-
- # delete other tmpfiles
- ns_unlink "${dir}/$document_filename"
- foreach filename [array names content_array] {
- ns_unlink "${dir}/$filename"
- }
- ns_rmdir $dir
-
- return $new_file
-}
-
-
-
-
-
-
-
-
-ad_proc -public -callback contacts::redirect -impl contactspdfs {
- {-party_id ""}
- {-action ""}
-} {
- redirect the contact to the correct pdf stuff
-} {
-
- set url [ad_conn url]
- if { [regexp "^[ad_conn package_url]pdfs/" $url match] } {
- # this is a pdf url
- set filename [lindex [ad_conn urlv] end]
- if { ![regexp "^contacts_.*?_[ad_conn user_id](.*).pdf$" $filename match] || ![file exists "/tmp/${filename}"] } {
- ad_return_error "No Permission" "You do not have permission to view this file, or the temporary file has been deleted."
- } else {
- ns_returnfile 200 "application/pdf" "/tmp/${filename}"
- # now that we have displayed the file we can delete it
- # if a user does not click on the display link
- # the file will remain in the /tmp/ folder until its
- # cleared. We may want to sweep the /tmp/ directory
- # every now and then to delete stale files.
- file delete "/tmp/${filename}"
-
- }
- }
-
-}
-
Index: openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl,v
diff -u -r1.33 -r1.34
--- openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl 7 Apr 2006 08:24:40 -0000 1.33
+++ openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl 9 Apr 2006 16:40:51 -0000 1.34
@@ -723,3 +723,31 @@
}
+
+ad_proc -public -callback contacts::redirect -impl contactspdfs {
+ {-party_id ""}
+ {-action ""}
+} {
+ redirect the contact to the correct pdf stuff
+} {
+
+ set url [ad_conn url]
+ if { [regexp "^[ad_conn package_url]pdfs/" $url match] } {
+ # this is a pdf url
+ set filename [lindex [ad_conn urlv] end]
+ if { ![regexp "^contacts_.*?_[ad_conn user_id](.*).pdf$" $filename match] || ![file exists "/tmp/${filename}"] } {
+ ad_return_error "No Permission" "You do not have permission to view this file, or the temporary file has been deleted."
+ } else {
+ ns_returnfile 200 "application/pdf" "/tmp/${filename}"
+ # now that we have displayed the file we can delete it
+ # if a user does not click on the display link
+ # the file will remain in the /tmp/ folder until its
+ # cleared. We may want to sweep the /tmp/ directory
+ # every now and then to delete stale files.
+ file delete "/tmp/${filename}"
+
+ }
+ }
+
+}
+
Index: openacs-4/packages/contacts/tcl/oo-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/tcl/oo-procs.tcl,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/contacts/tcl/oo-procs.tcl 9 Apr 2006 16:40:51 -0000 1.1
@@ -0,0 +1,229 @@
+ad_library {
+
+ Support procs for the contacts package with regards to OpenOffice
+
+ Before you can make use of these functions, OpenOffice 2.0 needs to be installed in your system.
+ Additionally you need ghostscript and the msttftcorefonts (so your users wont complain about wrong verdana fonts)
+ Not to forget "vncserver" and "x11fonts".
+
+ Once this is done, call "spadmin" as the user running the AOLserver and configure a printer for PDF
+ printing. Ideally you would call the printer "pdfconv", though you can specify any other name as well.
+
+ Once spadmin has started, choose to create a PDF Konverter and make use of the Adobe Distiller and
+ choose the following command:
+ /usr/bin/gs -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile="(OUTFILE)" -
+
+ and the target directory /tmp/. Call the printer "pdfconv". Once done, click on fonts, choose "Add fonts"
+ and search in /usr/share. Add all fonts you find there.
+
+ Last but not least make sure that you have the "vncserver" running for your user and that ../bin/convert.sh reflects your
+ environment
+
+ @author Malte Sussdorff
+ @creation-date 2006-04-18
+}
+
+namespace eval contact::oo:: {}
+
+ad_proc -public contact::oo::convert {
+ {-content}
+} {
+ Returns a string which we can insert into the content.xml file
+
+ This is a replacement procedure which should hopefully deal with at least the breaks
+ links and paragraphs.
+} {
+ regsub -all -nocase "
" $content "" content
+ regsub -all -nocase "" $content "" content
+ regsub -all -nocase " " $content " " content
+ regsub -all -nocase "
" $content "" content
+ regsub -all -nocase "a href=" $content "text:a xlink:type=\"simple\" xlink:href=" content
+ regsub -all -nocase "/a" $content "/text:a" content
+ return [string trim $content]
+}
+
+
+ad_proc -public contact::oo::import_oo_pdf {
+ -oo_file:required
+ {-printer_name "pdfconv"}
+ {-title ""}
+ {-item_id ""}
+ {-parent_id ""}
+ {-no_import:boolean}
+} {
+ Imports an OpenOffice file (.sxw / .odt) as a PDF file into the content repository. If item_id is specified a new revision of that item is created, else a new item is created.
+
+ @param oo_file The full path to the OpenOffice file that containst the data to be exported as PDF.
+ @param printer_name The name of the printer that is assigned as the PDF converter. Defaults to "pdfconv".
+ @param title Title which will be used for the resulting content item and file name if none was given in the item
+ @param item_id The item_id of the content item to which the content should be associated.
+ @param parent_id Needed to set the parent of this object
+ @param no_import If this flag is specified the location of the generated PDF will be returned, but the pdf will not be stored in the content repository
+ @return item_id of the revision that contains the file
+ @return file location of the file if "no_import" has been specified.
+} {
+ # This exec command is missing all the good things about openacs
+ # Add the parameter to whatever package you put this procedure in.
+ set oowriter_bin [parameter::get -parameter "OOWriterBin" -default "/opt/openoffice.org2.0/program/swriter"]
+
+ set status [catch {exec -- /bin/sh [acs_package_root_dir contacts]/bin/convert.sh $oo_file } result]
+
+ if { $status == 0 } {
+
+ # The command succeeded, and wrote nothing to stderr.
+ # $result contains what it wrote to stdout, unless you
+ # redirected it
+
+ } elseif { [string equal $::errorCode NONE] } {
+
+ # The command exited with a normal status, but wrote something
+ # to stderr, which is included in $result.
+
+ } else {
+
+ switch -exact -- [lindex $::errorCode 0] {
+
+ CHILDKILLED {
+ foreach { - pid sigName msg } $::errorCode break
+
+ # A child process, whose process ID was $pid,
+ # died on a signal named $sigName. A human-
+ # readable message appears in $msg.
+
+ }
+
+ CHILDSTATUS {
+
+ foreach { - pid code } $::errorCode break
+
+ # A child process, whose process ID was $pid,
+ # exited with a non-zero exit status, $code.
+
+ }
+
+ CHILDSUSP {
+
+ foreach { - pid sigName msg } $::errorCode break
+
+ # A child process, whose process ID was $pid,
+ # has been suspended because of a signal named
+ # $sigName. A human-readable description of the
+ # signal appears in $msg.
+
+ }
+
+ POSIX {
+
+ foreach { - errName msg } $::errorCode break
+
+ # One of the kernel calls to launch the command
+ # failed. The error code is in $errName, and a
+ # human-readable message is in $msg.
+
+ }
+
+ }
+ }
+
+ # Strip the extension.
+ set pdf_filename "[file rootname $oo_file].pdf"
+ set mime_type "application/pdf"
+ if {![file exists $pdf_filename]} {
+ ###############
+ # this is a fix to use the oo file if pdf file could not be generated
+ ###############
+ set pdf_filename $oo_file
+ set mime_type "application/odt"
+ } else {
+# ns_unlink $oo_file
+ }
+
+ if {$no_import_p} {
+ return [list $mime_type $pdf_filename]
+ }
+
+ set pdf_filesize [file size $pdf_filename]
+
+ set file_name [file tail $pdf_filename]
+ if {$title eq ""} {
+ set title $file_name
+ }
+
+ if {[exists_and_not_null $item_id]} {
+ set parent_id [get_parent -item_id $item_id]
+
+ set revision_id [cr_import_content \
+ -title $title \
+ -item_id $item_id \
+ $parent_id \
+ $pdf_filename \
+ $pdf_filesize \
+ $mime_type \
+ $file_name ]
+ } else {
+ set revision_id [cr_import_content \
+ -title $title \
+ $parent_id \
+ $pdf_filename \
+ $pdf_filesize \
+ $mime_type \
+ $file_name ]
+ }
+
+ ns_unlink $pdf_filename
+
+ content::item::set_live_revision -revision_id $revision_id
+ return [content::revision::item_id -revision_id $revision_id]
+}
+
+ad_proc -public contact::oo::change_content {
+ -path:required
+ -document_filename:required
+ -contents:required
+} {
+ Takes the provided contents and places them in the content.xml file of the sxw file, effectivly changing the content of the file.
+
+ @param path Path to the file containing the content
+ @param document_filename The open-office file whose contents will be changed.
+ @param contents This is a list of key-values (to be used as an array) of filenames and contents
+ to be replaced in the oo-file.
+ @return The path to the new file.
+} {
+ # Create a temporary directory
+ set dir [ns_tmpnam]
+ ns_mkdir $dir
+
+ array set content_array $contents
+ foreach filename [array names content_array] {
+ # Save the content to a file.
+ set file [open "${dir}/$filename" w]
+ fconfigure $file -encoding utf-8
+ puts $file $content_array($filename)
+ flush $file
+ close $file
+ }
+
+ # copy the document
+ ns_cp "${path}/$document_filename" "${dir}/$document_filename"
+
+ # Replace old content in document with new content
+ # The zip command should replace the content.xml in the zipfile which
+ # happens to be the OpenOffice File.
+ foreach filename [array names content_array] {
+ exec zip -j "${dir}/$document_filename" "${dir}/$filename"
+ }
+
+ # copy odt file
+ set new_file "[ns_tmpnam].odt"
+ ns_cp "${dir}/$document_filename" $new_file
+
+ # delete other tmpfiles
+ ns_unlink "${dir}/$document_filename"
+ foreach filename [array names content_array] {
+ ns_unlink "${dir}/$filename"
+ }
+ ns_rmdir $dir
+
+ return $new_file
+}
+