Wiki2GoEditor 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/Wiki2Go_install_editor.rb +13 -0
- data/fckeditor/editor/_source/classes/fckcontextmenu.js +134 -0
- data/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js +46 -0
- data/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js +58 -0
- data/fckeditor/editor/_source/classes/fckdomrange.js +452 -0
- data/fckeditor/editor/_source/classes/fckdomrange_gecko.js +71 -0
- data/fckeditor/editor/_source/classes/fckdomrange_ie.js +149 -0
- data/fckeditor/editor/_source/classes/fckeditingarea.js +253 -0
- data/fckeditor/editor/_source/classes/fckelementpath.js +66 -0
- data/fckeditor/editor/_source/classes/fckenterkey.js +556 -0
- data/fckeditor/editor/_source/classes/fckevents.js +53 -0
- data/fckeditor/editor/_source/classes/fckicon.js +98 -0
- data/fckeditor/editor/_source/classes/fckiecleanup.js +68 -0
- data/fckeditor/editor/_source/classes/fckimagepreloader.js +68 -0
- data/fckeditor/editor/_source/classes/fckkeystrokehandler.js +136 -0
- data/fckeditor/editor/_source/classes/fckmenublock.js +143 -0
- data/fckeditor/editor/_source/classes/fckmenublockpanel.js +54 -0
- data/fckeditor/editor/_source/classes/fckmenuitem.js +160 -0
- data/fckeditor/editor/_source/classes/fckpanel.js +303 -0
- data/fckeditor/editor/_source/classes/fckplugin.js +56 -0
- data/fckeditor/editor/_source/classes/fckspecialcombo.js +363 -0
- data/fckeditor/editor/_source/classes/fckstyledef.js +59 -0
- data/fckeditor/editor/_source/classes/fckstyledef_gecko.js +119 -0
- data/fckeditor/editor/_source/classes/fckstyledef_ie.js +142 -0
- data/fckeditor/editor/_source/classes/fckstylesloader.js +88 -0
- data/fckeditor/editor/_source/classes/fcktoolbar.js +120 -0
- data/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js +36 -0
- data/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js +38 -0
- data/fckeditor/editor/_source/classes/fcktoolbarbutton.js +74 -0
- data/fckeditor/editor/_source/classes/fcktoolbarbuttonui.js +222 -0
- data/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js +114 -0
- data/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js +47 -0
- data/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js +52 -0
- data/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js +91 -0
- data/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js +134 -0
- data/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js +111 -0
- data/fckeditor/editor/_source/classes/fckw3crange.js +448 -0
- data/fckeditor/editor/_source/classes/fckxml_gecko.js +87 -0
- data/fckeditor/editor/_source/classes/fckxml_ie.js +90 -0
- data/fckeditor/editor/_source/commandclasses/fck_othercommands.js +380 -0
- data/fckeditor/editor/_source/commandclasses/fckfitwindow.js +169 -0
- data/fckeditor/editor/_source/commandclasses/fcknamedcommand.js +37 -0
- data/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js +38 -0
- data/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js +40 -0
- data/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js +39 -0
- data/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js +67 -0
- data/fckeditor/editor/_source/commandclasses/fckstylecommand.js +99 -0
- data/fckeditor/editor/_source/commandclasses/fcktablecommand.js +71 -0
- data/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js +175 -0
- data/fckeditor/editor/_source/fckconstants.js +52 -0
- data/fckeditor/editor/_source/fckeditorapi.js +161 -0
- data/fckeditor/editor/_source/fckjscoreextensions.js +152 -0
- data/fckeditor/editor/_source/fckscriptloader.js +108 -0
- data/fckeditor/editor/_source/internals/fck.js +859 -0
- data/fckeditor/editor/_source/internals/fck_contextmenu.js +307 -0
- data/fckeditor/editor/_source/internals/fck_gecko.js +254 -0
- data/fckeditor/editor/_source/internals/fck_ie.js +383 -0
- data/fckeditor/editor/_source/internals/fckbrowserinfo.js +48 -0
- data/fckeditor/editor/_source/internals/fckcodeformatter.js +100 -0
- data/fckeditor/editor/_source/internals/fckcommands.js +132 -0
- data/fckeditor/editor/_source/internals/fckconfig.js +199 -0
- data/fckeditor/editor/_source/internals/fckdebug.js +56 -0
- data/fckeditor/editor/_source/internals/fckdialog.js +38 -0
- data/fckeditor/editor/_source/internals/fckdialog_gecko.js +103 -0
- data/fckeditor/editor/_source/internals/fckdialog_ie.js +48 -0
- data/fckeditor/editor/_source/internals/fckdocumentprocessor.js +243 -0
- data/fckeditor/editor/_source/internals/fckdomtools.js +294 -0
- data/fckeditor/editor/_source/internals/fcklanguagemanager.js +161 -0
- data/fckeditor/editor/_source/internals/fcklisthandler.js +152 -0
- data/fckeditor/editor/_source/internals/fcklistslib.js +60 -0
- data/fckeditor/editor/_source/internals/fckplugins.js +46 -0
- data/fckeditor/editor/_source/internals/fckregexlib.js +95 -0
- data/fckeditor/editor/_source/internals/fckselection.js +24 -0
- data/fckeditor/editor/_source/internals/fckselection_gecko.js +151 -0
- data/fckeditor/editor/_source/internals/fckselection_ie.js +158 -0
- data/fckeditor/editor/_source/internals/fcktablehandler.js +385 -0
- data/fckeditor/editor/_source/internals/fcktablehandler_gecko.js +57 -0
- data/fckeditor/editor/_source/internals/fcktablehandler_ie.js +58 -0
- data/fckeditor/editor/_source/internals/fcktoolbaritems.js +121 -0
- data/fckeditor/editor/_source/internals/fcktoolbarset.js +357 -0
- data/fckeditor/editor/_source/internals/fcktools.js +225 -0
- data/fckeditor/editor/_source/internals/fcktools_gecko.js +235 -0
- data/fckeditor/editor/_source/internals/fcktools_ie.js +214 -0
- data/fckeditor/editor/_source/internals/fckundo_gecko.js +27 -0
- data/fckeditor/editor/_source/internals/fckundo_ie.js +123 -0
- data/fckeditor/editor/_source/internals/fckurlparams.js +39 -0
- data/fckeditor/editor/_source/internals/fckxhtml.js +466 -0
- data/fckeditor/editor/_source/internals/fckxhtml_gecko.js +66 -0
- data/fckeditor/editor/_source/internals/fckxhtml_ie.js +194 -0
- data/fckeditor/editor/_source/internals/fckxhtmlentities.js +345 -0
- data/fckeditor/editor/css/behaviors/disablehandles.htc +15 -0
- data/fckeditor/editor/css/behaviors/showtableborders.htc +36 -0
- data/fckeditor/editor/css/fck_editorarea.css +91 -0
- data/fckeditor/editor/css/fck_internal.css +111 -0
- data/fckeditor/editor/css/fck_showtableborders_gecko.css +42 -0
- data/fckeditor/editor/css/images/fck_anchor.gif +0 -0
- data/fckeditor/editor/css/images/fck_flashlogo.gif +0 -0
- data/fckeditor/editor/css/images/fck_hiddenfield.gif +0 -0
- data/fckeditor/editor/css/images/fck_pagebreak.gif +0 -0
- data/fckeditor/editor/dialog/common/fck_dialog_common.css +83 -0
- data/fckeditor/editor/dialog/common/fck_dialog_common.js +154 -0
- data/fckeditor/editor/dialog/common/fcknumericfield.htc +24 -0
- data/fckeditor/editor/dialog/common/images/locked.gif +0 -0
- data/fckeditor/editor/dialog/common/images/reset.gif +0 -0
- data/fckeditor/editor/dialog/common/images/unlocked.gif +0 -0
- data/fckeditor/editor/dialog/common/moz-bindings.xml +30 -0
- data/fckeditor/editor/dialog/fck_about.html +155 -0
- data/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif +0 -0
- data/fckeditor/editor/dialog/fck_about/logo_fredck.gif +0 -0
- data/fckeditor/editor/dialog/fck_anchor.html +227 -0
- data/fckeditor/editor/dialog/fck_button.html +107 -0
- data/fckeditor/editor/dialog/fck_checkbox.html +107 -0
- data/fckeditor/editor/dialog/fck_colorselector.html +171 -0
- data/fckeditor/editor/dialog/fck_docprops.html +600 -0
- data/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html +113 -0
- data/fckeditor/editor/dialog/fck_find.html +173 -0
- data/fckeditor/editor/dialog/fck_flash.html +146 -0
- data/fckeditor/editor/dialog/fck_flash/fck_flash.js +288 -0
- data/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html +46 -0
- data/fckeditor/editor/dialog/fck_form.html +105 -0
- data/fckeditor/editor/dialog/fck_hiddenfield.html +116 -0
- data/fckeditor/editor/dialog/fck_image.html +252 -0
- data/fckeditor/editor/dialog/fck_image/fck_image.js +486 -0
- data/fckeditor/editor/dialog/fck_image/fck_image_preview.html +66 -0
- data/fckeditor/editor/dialog/fck_link.html +293 -0
- data/fckeditor/editor/dialog/fck_link/fck_link.js +664 -0
- data/fckeditor/editor/dialog/fck_listprop.html +116 -0
- data/fckeditor/editor/dialog/fck_paste.html +285 -0
- data/fckeditor/editor/dialog/fck_radiobutton.html +107 -0
- data/fckeditor/editor/dialog/fck_replace.html +156 -0
- data/fckeditor/editor/dialog/fck_select.html +176 -0
- data/fckeditor/editor/dialog/fck_select/fck_select.js +169 -0
- data/fckeditor/editor/dialog/fck_smiley.html +105 -0
- data/fckeditor/editor/dialog/fck_source.html +65 -0
- data/fckeditor/editor/dialog/fck_specialchar.html +113 -0
- data/fckeditor/editor/dialog/fck_spellerpages.html +64 -0
- data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html +0 -0
- data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js +87 -0
- data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html +153 -0
- data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm +174 -0
- data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php +196 -0
- data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl +180 -0
- data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js +462 -0
- data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html +71 -0
- data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css +49 -0
- data/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js +272 -0
- data/fckeditor/editor/dialog/fck_table.html +286 -0
- data/fckeditor/editor/dialog/fck_tablecell.html +255 -0
- data/fckeditor/editor/dialog/fck_template.html +242 -0
- data/fckeditor/editor/dialog/fck_template/images/template1.gif +0 -0
- data/fckeditor/editor/dialog/fck_template/images/template2.gif +0 -0
- data/fckeditor/editor/dialog/fck_template/images/template3.gif +0 -0
- data/fckeditor/editor/dialog/fck_textarea.html +94 -0
- data/fckeditor/editor/dialog/fck_textfield.html +139 -0
- data/fckeditor/editor/fckdebug.html +153 -0
- data/fckeditor/editor/fckdialog.html +324 -0
- data/fckeditor/editor/fckeditor.html +227 -0
- data/fckeditor/editor/fckeditor.original.html +319 -0
- data/fckeditor/editor/filemanager/browser/default/browser.css +88 -0
- data/fckeditor/editor/filemanager/browser/default/browser.html +154 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/asp/basexml.asp +62 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/asp/class_upload.asp +234 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/asp/commands.asp +183 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/asp/config.asp +49 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp +124 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/asp/io.asp +89 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/asp/util.asp +55 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx +30 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/cfm/config.cfm +99 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/cfm/connector.cfm +363 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/lasso/config.lasso +65 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/lasso/connector.lasso +249 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/perl/basexml.pl +63 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/perl/commands.pl +158 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/perl/connector.cgi +137 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/perl/io.pl +131 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/perl/upload_fck.pl +667 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/perl/util.pl +60 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/php/basexml.php +75 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/php/commands.php +222 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/php/config.php +56 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php +113 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/php/io.php +101 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/php/util.php +41 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/py/connector.py +785 -0
- data/fckeditor/editor/filemanager/browser/default/connectors/test.html +180 -0
- data/fckeditor/editor/filemanager/browser/default/frmactualfolder.html +67 -0
- data/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html +113 -0
- data/fckeditor/editor/filemanager/browser/default/frmfolders.html +196 -0
- data/fckeditor/editor/filemanager/browser/default/frmresourceslist.html +160 -0
- data/fckeditor/editor/filemanager/browser/default/frmresourcetype.html +65 -0
- data/fckeditor/editor/filemanager/browser/default/frmupload.html +113 -0
- data/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/Folder.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/Folder32.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/png.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/html.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/js.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/png.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/images/spacer.gif +0 -0
- data/fckeditor/editor/filemanager/browser/default/js/common.js +55 -0
- data/fckeditor/editor/filemanager/browser/default/js/fckxml.js +130 -0
- data/fckeditor/editor/filemanager/upload/asp/class_upload.asp +234 -0
- data/fckeditor/editor/filemanager/upload/asp/config.asp +52 -0
- data/fckeditor/editor/filemanager/upload/asp/io.asp +29 -0
- data/fckeditor/editor/filemanager/upload/asp/upload.asp +121 -0
- data/fckeditor/editor/filemanager/upload/aspx/upload.aspx +30 -0
- data/fckeditor/editor/filemanager/upload/cfm/config.cfm +98 -0
- data/fckeditor/editor/filemanager/upload/cfm/upload.cfm +168 -0
- data/fckeditor/editor/filemanager/upload/lasso/config.lasso +65 -0
- data/fckeditor/editor/filemanager/upload/lasso/upload.lasso +157 -0
- data/fckeditor/editor/filemanager/upload/php/config.php +56 -0
- data/fckeditor/editor/filemanager/upload/php/upload.php +124 -0
- data/fckeditor/editor/filemanager/upload/php/util.php +40 -0
- data/fckeditor/editor/filemanager/upload/test.html +133 -0
- data/fckeditor/editor/images/anchor.gif +0 -0
- data/fckeditor/editor/images/arrow_ltr.gif +0 -0
- data/fckeditor/editor/images/arrow_rtl.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/angel_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/angry_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/broken_heart.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/cake.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/confused_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/cry_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/devil_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/embaressed_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/envelope.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/heart.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/kiss.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/lightbulb.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/omg_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/regular_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/sad_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/shades_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/teeth_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/thumbs_down.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/thumbs_up.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/tounge_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif +0 -0
- data/fckeditor/editor/images/smiley/msn/wink_smile.gif +0 -0
- data/fckeditor/editor/images/spacer.gif +0 -0
- data/fckeditor/editor/js/fckeditorcode_gecko.js +98 -0
- data/fckeditor/editor/js/fckeditorcode_ie.js +99 -0
- data/fckeditor/editor/lang/_getfontformat.html +85 -0
- data/fckeditor/editor/lang/_translationstatus.txt +76 -0
- data/fckeditor/editor/lang/af.js +504 -0
- data/fckeditor/editor/lang/ar.js +504 -0
- data/fckeditor/editor/lang/bg.js +504 -0
- data/fckeditor/editor/lang/bn.js +504 -0
- data/fckeditor/editor/lang/bs.js +504 -0
- data/fckeditor/editor/lang/ca.js +504 -0
- data/fckeditor/editor/lang/cs.js +504 -0
- data/fckeditor/editor/lang/da.js +504 -0
- data/fckeditor/editor/lang/de.js +504 -0
- data/fckeditor/editor/lang/el.js +504 -0
- data/fckeditor/editor/lang/en-au.js +504 -0
- data/fckeditor/editor/lang/en-ca.js +504 -0
- data/fckeditor/editor/lang/en-uk.js +504 -0
- data/fckeditor/editor/lang/en.js +504 -0
- data/fckeditor/editor/lang/eo.js +504 -0
- data/fckeditor/editor/lang/es.js +504 -0
- data/fckeditor/editor/lang/et.js +504 -0
- data/fckeditor/editor/lang/eu.js +505 -0
- data/fckeditor/editor/lang/fa.js +504 -0
- data/fckeditor/editor/lang/fi.js +504 -0
- data/fckeditor/editor/lang/fo.js +504 -0
- data/fckeditor/editor/lang/fr.js +504 -0
- data/fckeditor/editor/lang/gl.js +504 -0
- data/fckeditor/editor/lang/he.js +504 -0
- data/fckeditor/editor/lang/hi.js +504 -0
- data/fckeditor/editor/lang/hr.js +504 -0
- data/fckeditor/editor/lang/hu.js +504 -0
- data/fckeditor/editor/lang/it.js +504 -0
- data/fckeditor/editor/lang/ja.js +504 -0
- data/fckeditor/editor/lang/km.js +504 -0
- data/fckeditor/editor/lang/ko.js +504 -0
- data/fckeditor/editor/lang/lt.js +504 -0
- data/fckeditor/editor/lang/lv.js +504 -0
- data/fckeditor/editor/lang/mn.js +504 -0
- data/fckeditor/editor/lang/ms.js +504 -0
- data/fckeditor/editor/lang/nb.js +504 -0
- data/fckeditor/editor/lang/nl.js +504 -0
- data/fckeditor/editor/lang/no.js +504 -0
- data/fckeditor/editor/lang/pl.js +504 -0
- data/fckeditor/editor/lang/pt-br.js +504 -0
- data/fckeditor/editor/lang/pt.js +504 -0
- data/fckeditor/editor/lang/ro.js +504 -0
- data/fckeditor/editor/lang/ru.js +504 -0
- data/fckeditor/editor/lang/sk.js +504 -0
- data/fckeditor/editor/lang/sl.js +504 -0
- data/fckeditor/editor/lang/sr-latn.js +504 -0
- data/fckeditor/editor/lang/sr.js +504 -0
- data/fckeditor/editor/lang/sv.js +504 -0
- data/fckeditor/editor/lang/th.js +504 -0
- data/fckeditor/editor/lang/tr.js +504 -0
- data/fckeditor/editor/lang/uk.js +504 -0
- data/fckeditor/editor/lang/vi.js +504 -0
- data/fckeditor/editor/lang/zh-cn.js +504 -0
- data/fckeditor/editor/lang/zh.js +504 -0
- data/fckeditor/editor/plugins/autogrow/fckplugin.js +92 -0
- data/fckeditor/editor/plugins/placeholder/fck_placeholder.html +100 -0
- data/fckeditor/editor/plugins/placeholder/fckplugin.js +187 -0
- data/fckeditor/editor/plugins/placeholder/lang/de.js +27 -0
- data/fckeditor/editor/plugins/placeholder/lang/en.js +27 -0
- data/fckeditor/editor/plugins/placeholder/lang/fr.js +27 -0
- data/fckeditor/editor/plugins/placeholder/lang/it.js +27 -0
- data/fckeditor/editor/plugins/placeholder/lang/pl.js +27 -0
- data/fckeditor/editor/plugins/placeholder/placeholder.gif +0 -0
- data/fckeditor/editor/plugins/simplecommands/fckplugin.js +29 -0
- data/fckeditor/editor/plugins/tablecommands/fckplugin.js +32 -0
- data/fckeditor/editor/skins/_fckviewstrips.html +121 -0
- data/fckeditor/editor/skins/default/fck_dialog.css +137 -0
- data/fckeditor/editor/skins/default/fck_editor.css +464 -0
- data/fckeditor/editor/skins/default/fck_strip.gif +0 -0
- data/fckeditor/editor/skins/default/images/toolbar.arrowright.gif +0 -0
- data/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif +0 -0
- data/fckeditor/editor/skins/default/images/toolbar.collapse.gif +0 -0
- data/fckeditor/editor/skins/default/images/toolbar.end.gif +0 -0
- data/fckeditor/editor/skins/default/images/toolbar.expand.gif +0 -0
- data/fckeditor/editor/skins/default/images/toolbar.separator.gif +0 -0
- data/fckeditor/editor/skins/default/images/toolbar.start.gif +0 -0
- data/fckeditor/editor/skins/office2003/fck_dialog.css +138 -0
- data/fckeditor/editor/skins/office2003/fck_editor.css +476 -0
- data/fckeditor/editor/skins/office2003/fck_strip.gif +0 -0
- data/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif +0 -0
- data/fckeditor/editor/skins/office2003/images/toolbar.bg.gif +0 -0
- data/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif +0 -0
- data/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif +0 -0
- data/fckeditor/editor/skins/office2003/images/toolbar.end.gif +0 -0
- data/fckeditor/editor/skins/office2003/images/toolbar.expand.gif +0 -0
- data/fckeditor/editor/skins/office2003/images/toolbar.separator.gif +0 -0
- data/fckeditor/editor/skins/office2003/images/toolbar.start.gif +0 -0
- data/fckeditor/editor/skins/silver/fck_dialog.css +141 -0
- data/fckeditor/editor/skins/silver/fck_editor.css +473 -0
- data/fckeditor/editor/skins/silver/fck_strip.gif +0 -0
- data/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif +0 -0
- data/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif +0 -0
- data/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif +0 -0
- data/fckeditor/editor/skins/silver/images/toolbar.collapse.gif +0 -0
- data/fckeditor/editor/skins/silver/images/toolbar.end.gif +0 -0
- data/fckeditor/editor/skins/silver/images/toolbar.expand.gif +0 -0
- data/fckeditor/editor/skins/silver/images/toolbar.separator.gif +0 -0
- data/fckeditor/editor/skins/silver/images/toolbar.start.gif +0 -0
- data/fckeditor/fckconfig.js +224 -0
- data/fckeditor/fckeditor.js +214 -0
- data/fckeditor/fckstyles.xml +53 -0
- data/fckeditor/fcktemplates.xml +103 -0
- data/lib/Wiki2GoEditor/Install/editor.rb +39 -0
- data/test/test_install.rb +40 -0
- metadata +517 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/*
|
|
3
|
+
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
|
4
|
+
* Copyright (C) 2003-2007 Frederico Caldeira Knabben
|
|
5
|
+
*
|
|
6
|
+
* == BEGIN LICENSE ==
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the terms of any of the following licenses at your
|
|
9
|
+
* choice:
|
|
10
|
+
*
|
|
11
|
+
* - GNU General Public License Version 2 or later (the "GPL")
|
|
12
|
+
* http://www.gnu.org/licenses/gpl.html
|
|
13
|
+
*
|
|
14
|
+
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
|
15
|
+
* http://www.gnu.org/licenses/lgpl.html
|
|
16
|
+
*
|
|
17
|
+
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
|
18
|
+
* http://www.mozilla.org/MPL/MPL-1.1.html
|
|
19
|
+
*
|
|
20
|
+
* == END LICENSE ==
|
|
21
|
+
*
|
|
22
|
+
* This is the File Manager Connector for PHP.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
function GetUrlFromPath( $resourceType, $folderPath )
|
|
26
|
+
{
|
|
27
|
+
if ( $resourceType == '' )
|
|
28
|
+
return RemoveFromEnd( $GLOBALS["UserFilesPath"], '/' ) . $folderPath ;
|
|
29
|
+
else
|
|
30
|
+
return $GLOBALS["UserFilesPath"] . strtolower( $resourceType ) . $folderPath ;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function RemoveExtension( $fileName )
|
|
34
|
+
{
|
|
35
|
+
return substr( $fileName, 0, strrpos( $fileName, '.' ) ) ;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function ServerMapFolder( $resourceType, $folderPath )
|
|
39
|
+
{
|
|
40
|
+
// Get the resource type directory.
|
|
41
|
+
$sResourceTypePath = $GLOBALS["UserFilesDirectory"] . strtolower( $resourceType ) . '/' ;
|
|
42
|
+
|
|
43
|
+
// Ensure that the directory exists.
|
|
44
|
+
CreateServerFolder( $sResourceTypePath ) ;
|
|
45
|
+
|
|
46
|
+
// Return the resource type directory combined with the required path.
|
|
47
|
+
return $sResourceTypePath . RemoveFromStart( $folderPath, '/' ) ;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function GetParentFolder( $folderPath )
|
|
51
|
+
{
|
|
52
|
+
$sPattern = "-[/\\\\][^/\\\\]+[/\\\\]?$-" ;
|
|
53
|
+
return preg_replace( $sPattern, '', $folderPath ) ;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function CreateServerFolder( $folderPath )
|
|
57
|
+
{
|
|
58
|
+
$sParent = GetParentFolder( $folderPath ) ;
|
|
59
|
+
|
|
60
|
+
// Check if the parent exists, or create it.
|
|
61
|
+
if ( !file_exists( $sParent ) )
|
|
62
|
+
{
|
|
63
|
+
$sErrorMsg = CreateServerFolder( $sParent ) ;
|
|
64
|
+
if ( $sErrorMsg != '' )
|
|
65
|
+
return $sErrorMsg ;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if ( !file_exists( $folderPath ) )
|
|
69
|
+
{
|
|
70
|
+
// Turn off all error reporting.
|
|
71
|
+
error_reporting( 0 ) ;
|
|
72
|
+
// Enable error tracking to catch the error.
|
|
73
|
+
ini_set( 'track_errors', '1' ) ;
|
|
74
|
+
|
|
75
|
+
// To create the folder with 0777 permissions, we need to set umask to zero.
|
|
76
|
+
$oldumask = umask(0) ;
|
|
77
|
+
mkdir( $folderPath, 0777 ) ;
|
|
78
|
+
umask( $oldumask ) ;
|
|
79
|
+
|
|
80
|
+
$sErrorMsg = $php_errormsg ;
|
|
81
|
+
|
|
82
|
+
// Restore the configurations.
|
|
83
|
+
ini_restore( 'track_errors' ) ;
|
|
84
|
+
ini_restore( 'error_reporting' ) ;
|
|
85
|
+
|
|
86
|
+
return $sErrorMsg ;
|
|
87
|
+
}
|
|
88
|
+
else
|
|
89
|
+
return '' ;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function GetRootPath()
|
|
93
|
+
{
|
|
94
|
+
$sRealPath = realpath( './' ) ;
|
|
95
|
+
|
|
96
|
+
$sSelfPath = $_SERVER['PHP_SELF'] ;
|
|
97
|
+
$sSelfPath = substr( $sSelfPath, 0, strrpos( $sSelfPath, '/' ) ) ;
|
|
98
|
+
|
|
99
|
+
return substr( $sRealPath, 0, strlen( $sRealPath ) - strlen( $sSelfPath ) ) ;
|
|
100
|
+
}
|
|
101
|
+
?>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/*
|
|
3
|
+
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
|
4
|
+
* Copyright (C) 2003-2007 Frederico Caldeira Knabben
|
|
5
|
+
*
|
|
6
|
+
* == BEGIN LICENSE ==
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the terms of any of the following licenses at your
|
|
9
|
+
* choice:
|
|
10
|
+
*
|
|
11
|
+
* - GNU General Public License Version 2 or later (the "GPL")
|
|
12
|
+
* http://www.gnu.org/licenses/gpl.html
|
|
13
|
+
*
|
|
14
|
+
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
|
15
|
+
* http://www.gnu.org/licenses/lgpl.html
|
|
16
|
+
*
|
|
17
|
+
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
|
18
|
+
* http://www.mozilla.org/MPL/MPL-1.1.html
|
|
19
|
+
*
|
|
20
|
+
* == END LICENSE ==
|
|
21
|
+
*
|
|
22
|
+
* Utility functions for the File Manager Connector for PHP.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
function RemoveFromStart( $sourceString, $charToRemove )
|
|
26
|
+
{
|
|
27
|
+
$sPattern = '|^' . $charToRemove . '+|' ;
|
|
28
|
+
return preg_replace( $sPattern, '', $sourceString ) ;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function RemoveFromEnd( $sourceString, $charToRemove )
|
|
32
|
+
{
|
|
33
|
+
$sPattern = '|' . $charToRemove . '+$|' ;
|
|
34
|
+
return preg_replace( $sPattern, '', $sourceString ) ;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function ConvertToXmlAttribute( $value )
|
|
38
|
+
{
|
|
39
|
+
return utf8_encode( htmlspecialchars( $value ) ) ;
|
|
40
|
+
}
|
|
41
|
+
?>
|
|
@@ -0,0 +1,785 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
|
5
|
+
Copyright (C) 2003-2007 Frederico Caldeira Knabben
|
|
6
|
+
|
|
7
|
+
== BEGIN LICENSE ==
|
|
8
|
+
|
|
9
|
+
Licensed under the terms of any of the following licenses at your
|
|
10
|
+
choice:
|
|
11
|
+
|
|
12
|
+
- GNU General Public License Version 2 or later (the "GPL")
|
|
13
|
+
http://www.gnu.org/licenses/gpl.html
|
|
14
|
+
|
|
15
|
+
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
|
16
|
+
http://www.gnu.org/licenses/lgpl.html
|
|
17
|
+
|
|
18
|
+
- Mozilla Public License Version 1.1 or later (the "MPL")
|
|
19
|
+
http://www.mozilla.org/MPL/MPL-1.1.html
|
|
20
|
+
|
|
21
|
+
== END LICENSE ==
|
|
22
|
+
|
|
23
|
+
Connector for Python.
|
|
24
|
+
|
|
25
|
+
Tested With:
|
|
26
|
+
Standard:
|
|
27
|
+
Python 2.3.3
|
|
28
|
+
Zope:
|
|
29
|
+
Zope Version: (Zope 2.8.1-final, python 2.3.5, linux2)
|
|
30
|
+
Python Version: 2.3.5 (#4, Mar 10 2005, 01:40:25)
|
|
31
|
+
[GCC 3.3.3 20040412 (Red Hat Linux 3.3.3-7)]
|
|
32
|
+
System Platform: linux2
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
"""
|
|
36
|
+
Author Notes (04 December 2005):
|
|
37
|
+
This module has gone through quite a few phases of change. Obviously,
|
|
38
|
+
I am only supporting that part of the code that I use. Initially
|
|
39
|
+
I had the upload directory as a part of zope (ie. uploading files
|
|
40
|
+
directly into Zope), before realising that there were too many
|
|
41
|
+
complex intricacies within Zope to deal with. Zope is one ugly piece
|
|
42
|
+
of code. So I decided to complement Zope by an Apache server (which
|
|
43
|
+
I had running anyway, and doing nothing). So I mapped all uploads
|
|
44
|
+
from an arbitrary server directory to an arbitrary web directory.
|
|
45
|
+
All the FCKeditor uploading occurred this way, and I didn't have to
|
|
46
|
+
stuff around with fiddling with Zope objects and the like (which are
|
|
47
|
+
terribly complex and something you don't want to do - trust me).
|
|
48
|
+
|
|
49
|
+
Maybe a Zope expert can touch up the Zope components. In the end,
|
|
50
|
+
I had FCKeditor loaded in Zope (probably a bad idea as well), and
|
|
51
|
+
I replaced the connector.py with an alias to a server module.
|
|
52
|
+
Right now, all Zope components will simple remain as is because
|
|
53
|
+
I've had enough of Zope.
|
|
54
|
+
|
|
55
|
+
See notes right at the end of this file for how I aliased out of Zope.
|
|
56
|
+
|
|
57
|
+
Anyway, most of you probably wont use Zope, so things are pretty
|
|
58
|
+
simple in that regard.
|
|
59
|
+
|
|
60
|
+
Typically, SERVER_DIR is the root of WEB_DIR (not necessarily).
|
|
61
|
+
Most definitely, SERVER_USERFILES_DIR points to WEB_USERFILES_DIR.
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
import cgi
|
|
65
|
+
import re
|
|
66
|
+
import os
|
|
67
|
+
import string
|
|
68
|
+
|
|
69
|
+
"""
|
|
70
|
+
escape
|
|
71
|
+
|
|
72
|
+
Converts the special characters '<', '>', and '&'.
|
|
73
|
+
|
|
74
|
+
RFC 1866 specifies that these characters be represented
|
|
75
|
+
in HTML as < > and & respectively. In Python
|
|
76
|
+
1.5 we use the new string.replace() function for speed.
|
|
77
|
+
"""
|
|
78
|
+
def escape(text, replace=string.replace):
|
|
79
|
+
text = replace(text, '&', '&') # must be done 1st
|
|
80
|
+
text = replace(text, '<', '<')
|
|
81
|
+
text = replace(text, '>', '>')
|
|
82
|
+
text = replace(text, '"', '"')
|
|
83
|
+
return text
|
|
84
|
+
|
|
85
|
+
"""
|
|
86
|
+
getFCKeditorConnector
|
|
87
|
+
|
|
88
|
+
Creates a new instance of an FCKeditorConnector, and runs it
|
|
89
|
+
"""
|
|
90
|
+
def getFCKeditorConnector(context=None):
|
|
91
|
+
# Called from Zope. Passes the context through
|
|
92
|
+
connector = FCKeditorConnector(context=context)
|
|
93
|
+
return connector.run()
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
"""
|
|
97
|
+
FCKeditorRequest
|
|
98
|
+
|
|
99
|
+
A wrapper around the request object
|
|
100
|
+
Can handle normal CGI request, or a Zope request
|
|
101
|
+
Extend as required
|
|
102
|
+
"""
|
|
103
|
+
class FCKeditorRequest(object):
|
|
104
|
+
def __init__(self, context=None):
|
|
105
|
+
if (context is not None):
|
|
106
|
+
r = context.REQUEST
|
|
107
|
+
else:
|
|
108
|
+
r = cgi.FieldStorage()
|
|
109
|
+
self.context = context
|
|
110
|
+
self.request = r
|
|
111
|
+
|
|
112
|
+
def isZope(self):
|
|
113
|
+
if (self.context is not None):
|
|
114
|
+
return True
|
|
115
|
+
return False
|
|
116
|
+
|
|
117
|
+
def has_key(self, key):
|
|
118
|
+
return self.request.has_key(key)
|
|
119
|
+
|
|
120
|
+
def get(self, key, default=None):
|
|
121
|
+
value = None
|
|
122
|
+
if (self.isZope()):
|
|
123
|
+
value = self.request.get(key, default)
|
|
124
|
+
else:
|
|
125
|
+
if key in self.request.keys():
|
|
126
|
+
value = self.request[key].value
|
|
127
|
+
else:
|
|
128
|
+
value = default
|
|
129
|
+
return value
|
|
130
|
+
|
|
131
|
+
"""
|
|
132
|
+
FCKeditorConnector
|
|
133
|
+
|
|
134
|
+
The connector class
|
|
135
|
+
"""
|
|
136
|
+
class FCKeditorConnector(object):
|
|
137
|
+
# Configuration for FCKEditor
|
|
138
|
+
# can point to another server here, if linked correctly
|
|
139
|
+
#WEB_HOST = "http://127.0.0.1/"
|
|
140
|
+
WEB_HOST = ""
|
|
141
|
+
SERVER_DIR = "/var/www/html/"
|
|
142
|
+
|
|
143
|
+
WEB_USERFILES_FOLDER = WEB_HOST + "upload/"
|
|
144
|
+
SERVER_USERFILES_FOLDER = SERVER_DIR + "upload/"
|
|
145
|
+
|
|
146
|
+
# Allow access (Zope)
|
|
147
|
+
__allow_access_to_unprotected_subobjects__ = 1
|
|
148
|
+
# Class Attributes
|
|
149
|
+
parentFolderRe = re.compile("[\/][^\/]+[\/]?$")
|
|
150
|
+
|
|
151
|
+
"""
|
|
152
|
+
Constructor
|
|
153
|
+
"""
|
|
154
|
+
def __init__(self, context=None):
|
|
155
|
+
# The given root path will NOT be shown to the user
|
|
156
|
+
# Only the userFilesPath will be shown
|
|
157
|
+
|
|
158
|
+
# Instance Attributes
|
|
159
|
+
self.context = context
|
|
160
|
+
self.request = FCKeditorRequest(context=context)
|
|
161
|
+
self.rootPath = self.SERVER_DIR
|
|
162
|
+
self.userFilesFolder = self.SERVER_USERFILES_FOLDER
|
|
163
|
+
self.webUserFilesFolder = self.WEB_USERFILES_FOLDER
|
|
164
|
+
|
|
165
|
+
# Enables / Disables the connector
|
|
166
|
+
self.enabled = False # Set to True to enable this connector
|
|
167
|
+
|
|
168
|
+
# These are instance variables
|
|
169
|
+
self.zopeRootContext = None
|
|
170
|
+
self.zopeUploadContext = None
|
|
171
|
+
|
|
172
|
+
# Copied from php module =)
|
|
173
|
+
self.allowedExtensions = {
|
|
174
|
+
"File": None,
|
|
175
|
+
"Image": None,
|
|
176
|
+
"Flash": None,
|
|
177
|
+
"Media": None
|
|
178
|
+
}
|
|
179
|
+
self.deniedExtensions = {
|
|
180
|
+
"File": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ],
|
|
181
|
+
"Image": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ],
|
|
182
|
+
"Flash": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ],
|
|
183
|
+
"Media": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ]
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
"""
|
|
187
|
+
Zope specific functions
|
|
188
|
+
"""
|
|
189
|
+
def isZope(self):
|
|
190
|
+
# The context object is the zope object
|
|
191
|
+
if (self.context is not None):
|
|
192
|
+
return True
|
|
193
|
+
return False
|
|
194
|
+
|
|
195
|
+
def getZopeRootContext(self):
|
|
196
|
+
if self.zopeRootContext is None:
|
|
197
|
+
self.zopeRootContext = self.context.getPhysicalRoot()
|
|
198
|
+
return self.zopeRootContext
|
|
199
|
+
|
|
200
|
+
def getZopeUploadContext(self):
|
|
201
|
+
if self.zopeUploadContext is None:
|
|
202
|
+
folderNames = self.userFilesFolder.split("/")
|
|
203
|
+
c = self.getZopeRootContext()
|
|
204
|
+
for folderName in folderNames:
|
|
205
|
+
if (folderName <> ""):
|
|
206
|
+
c = c[folderName]
|
|
207
|
+
self.zopeUploadContext = c
|
|
208
|
+
return self.zopeUploadContext
|
|
209
|
+
|
|
210
|
+
"""
|
|
211
|
+
Generic manipulation functions
|
|
212
|
+
"""
|
|
213
|
+
def getUserFilesFolder(self):
|
|
214
|
+
return self.userFilesFolder
|
|
215
|
+
|
|
216
|
+
def getWebUserFilesFolder(self):
|
|
217
|
+
return self.webUserFilesFolder
|
|
218
|
+
|
|
219
|
+
def getAllowedExtensions(self, resourceType):
|
|
220
|
+
return self.allowedExtensions[resourceType]
|
|
221
|
+
|
|
222
|
+
def getDeniedExtensions(self, resourceType):
|
|
223
|
+
return self.deniedExtensions[resourceType]
|
|
224
|
+
|
|
225
|
+
def removeFromStart(self, string, char):
|
|
226
|
+
return string.lstrip(char)
|
|
227
|
+
|
|
228
|
+
def removeFromEnd(self, string, char):
|
|
229
|
+
return string.rstrip(char)
|
|
230
|
+
|
|
231
|
+
def convertToXmlAttribute(self, value):
|
|
232
|
+
if (value is None):
|
|
233
|
+
value = ""
|
|
234
|
+
return escape(value)
|
|
235
|
+
|
|
236
|
+
def convertToPath(self, path):
|
|
237
|
+
if (path[-1] <> "/"):
|
|
238
|
+
return path + "/"
|
|
239
|
+
else:
|
|
240
|
+
return path
|
|
241
|
+
|
|
242
|
+
def getUrlFromPath(self, resourceType, path):
|
|
243
|
+
if (resourceType is None) or (resourceType == ''):
|
|
244
|
+
url = "%s%s" % (
|
|
245
|
+
self.removeFromEnd(self.getUserFilesFolder(), '/'),
|
|
246
|
+
path
|
|
247
|
+
)
|
|
248
|
+
else:
|
|
249
|
+
url = "%s%s%s" % (
|
|
250
|
+
self.getUserFilesFolder(),
|
|
251
|
+
resourceType,
|
|
252
|
+
path
|
|
253
|
+
)
|
|
254
|
+
return url
|
|
255
|
+
|
|
256
|
+
def getWebUrlFromPath(self, resourceType, path):
|
|
257
|
+
if (resourceType is None) or (resourceType == ''):
|
|
258
|
+
url = "%s%s" % (
|
|
259
|
+
self.removeFromEnd(self.getWebUserFilesFolder(), '/'),
|
|
260
|
+
path
|
|
261
|
+
)
|
|
262
|
+
else:
|
|
263
|
+
url = "%s%s%s" % (
|
|
264
|
+
self.getWebUserFilesFolder(),
|
|
265
|
+
resourceType,
|
|
266
|
+
path
|
|
267
|
+
)
|
|
268
|
+
return url
|
|
269
|
+
|
|
270
|
+
def removeExtension(self, fileName):
|
|
271
|
+
index = fileName.rindex(".")
|
|
272
|
+
newFileName = fileName[0:index]
|
|
273
|
+
return newFileName
|
|
274
|
+
|
|
275
|
+
def getExtension(self, fileName):
|
|
276
|
+
index = fileName.rindex(".") + 1
|
|
277
|
+
fileExtension = fileName[index:]
|
|
278
|
+
return fileExtension
|
|
279
|
+
|
|
280
|
+
def getParentFolder(self, folderPath):
|
|
281
|
+
parentFolderPath = self.parentFolderRe.sub('', folderPath)
|
|
282
|
+
return parentFolderPath
|
|
283
|
+
|
|
284
|
+
"""
|
|
285
|
+
serverMapFolder
|
|
286
|
+
|
|
287
|
+
Purpose: works out the folder map on the server
|
|
288
|
+
"""
|
|
289
|
+
def serverMapFolder(self, resourceType, folderPath):
|
|
290
|
+
# Get the resource type directory
|
|
291
|
+
resourceTypeFolder = "%s%s/" % (
|
|
292
|
+
self.getUserFilesFolder(),
|
|
293
|
+
resourceType
|
|
294
|
+
)
|
|
295
|
+
# Ensure that the directory exists
|
|
296
|
+
self.createServerFolder(resourceTypeFolder)
|
|
297
|
+
|
|
298
|
+
# Return the resource type directory combined with the
|
|
299
|
+
# required path
|
|
300
|
+
return "%s%s" % (
|
|
301
|
+
resourceTypeFolder,
|
|
302
|
+
self.removeFromStart(folderPath, '/')
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
"""
|
|
306
|
+
createServerFolder
|
|
307
|
+
|
|
308
|
+
Purpose: physically creates a folder on the server
|
|
309
|
+
"""
|
|
310
|
+
def createServerFolder(self, folderPath):
|
|
311
|
+
# Check if the parent exists
|
|
312
|
+
parentFolderPath = self.getParentFolder(folderPath)
|
|
313
|
+
if not(os.path.exists(parentFolderPath)):
|
|
314
|
+
errorMsg = self.createServerFolder(parentFolderPath)
|
|
315
|
+
if errorMsg is not None:
|
|
316
|
+
return errorMsg
|
|
317
|
+
# Check if this exists
|
|
318
|
+
if not(os.path.exists(folderPath)):
|
|
319
|
+
os.mkdir(folderPath)
|
|
320
|
+
os.chmod(folderPath, 0755)
|
|
321
|
+
errorMsg = None
|
|
322
|
+
else:
|
|
323
|
+
if os.path.isdir(folderPath):
|
|
324
|
+
errorMsg = None
|
|
325
|
+
else:
|
|
326
|
+
raise "createServerFolder: Non-folder of same name already exists"
|
|
327
|
+
return errorMsg
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
"""
|
|
331
|
+
getRootPath
|
|
332
|
+
|
|
333
|
+
Purpose: returns the root path on the server
|
|
334
|
+
"""
|
|
335
|
+
def getRootPath(self):
|
|
336
|
+
return self.rootPath
|
|
337
|
+
|
|
338
|
+
"""
|
|
339
|
+
setXmlHeaders
|
|
340
|
+
|
|
341
|
+
Purpose: to prepare the headers for the xml to return
|
|
342
|
+
"""
|
|
343
|
+
def setXmlHeaders(self):
|
|
344
|
+
#now = self.context.BS_get_now()
|
|
345
|
+
#yesterday = now - 1
|
|
346
|
+
self.setHeader("Content-Type", "text/xml")
|
|
347
|
+
#self.setHeader("Expires", yesterday)
|
|
348
|
+
#self.setHeader("Last-Modified", now)
|
|
349
|
+
#self.setHeader("Cache-Control", "no-store, no-cache, must-revalidate")
|
|
350
|
+
self.printHeaders()
|
|
351
|
+
return
|
|
352
|
+
|
|
353
|
+
def setHeader(self, key, value):
|
|
354
|
+
if (self.isZope()):
|
|
355
|
+
self.context.REQUEST.RESPONSE.setHeader(key, value)
|
|
356
|
+
else:
|
|
357
|
+
print "%s: %s" % (key, value)
|
|
358
|
+
return
|
|
359
|
+
|
|
360
|
+
def printHeaders(self):
|
|
361
|
+
# For non-Zope requests, we need to print an empty line
|
|
362
|
+
# to denote the end of headers
|
|
363
|
+
if (not(self.isZope())):
|
|
364
|
+
print ""
|
|
365
|
+
|
|
366
|
+
"""
|
|
367
|
+
createXmlFooter
|
|
368
|
+
|
|
369
|
+
Purpose: returns the xml header
|
|
370
|
+
"""
|
|
371
|
+
def createXmlHeader(self, command, resourceType, currentFolder):
|
|
372
|
+
self.setXmlHeaders()
|
|
373
|
+
s = ""
|
|
374
|
+
# Create the XML document header
|
|
375
|
+
s += """<?xml version="1.0" encoding="utf-8" ?>"""
|
|
376
|
+
# Create the main connector node
|
|
377
|
+
s += """<Connector command="%s" resourceType="%s">""" % (
|
|
378
|
+
command,
|
|
379
|
+
resourceType
|
|
380
|
+
)
|
|
381
|
+
# Add the current folder node
|
|
382
|
+
s += """<CurrentFolder path="%s" url="%s" />""" % (
|
|
383
|
+
self.convertToXmlAttribute(currentFolder),
|
|
384
|
+
self.convertToXmlAttribute(
|
|
385
|
+
self.getWebUrlFromPath(
|
|
386
|
+
resourceType,
|
|
387
|
+
currentFolder
|
|
388
|
+
)
|
|
389
|
+
),
|
|
390
|
+
)
|
|
391
|
+
return s
|
|
392
|
+
|
|
393
|
+
"""
|
|
394
|
+
createXmlFooter
|
|
395
|
+
|
|
396
|
+
Purpose: returns the xml footer
|
|
397
|
+
"""
|
|
398
|
+
def createXmlFooter(self):
|
|
399
|
+
s = """</Connector>"""
|
|
400
|
+
return s
|
|
401
|
+
|
|
402
|
+
"""
|
|
403
|
+
sendError
|
|
404
|
+
|
|
405
|
+
Purpose: in the event of an error, return an xml based error
|
|
406
|
+
"""
|
|
407
|
+
def sendError(self, number, text):
|
|
408
|
+
self.setXmlHeaders()
|
|
409
|
+
s = ""
|
|
410
|
+
# Create the XML document header
|
|
411
|
+
s += """<?xml version="1.0" encoding="utf-8" ?>"""
|
|
412
|
+
s += """<Connector>"""
|
|
413
|
+
s += """<Error number="%s" text="%s" />""" % (number, text)
|
|
414
|
+
s += """</Connector>"""
|
|
415
|
+
return s
|
|
416
|
+
|
|
417
|
+
"""
|
|
418
|
+
getFolders
|
|
419
|
+
|
|
420
|
+
Purpose: command to recieve a list of folders
|
|
421
|
+
"""
|
|
422
|
+
def getFolders(self, resourceType, currentFolder):
|
|
423
|
+
if (self.isZope()):
|
|
424
|
+
return self.getZopeFolders(resourceType, currentFolder)
|
|
425
|
+
else:
|
|
426
|
+
return self.getNonZopeFolders(resourceType, currentFolder)
|
|
427
|
+
|
|
428
|
+
def getZopeFolders(self, resourceType, currentFolder):
|
|
429
|
+
# Open the folders node
|
|
430
|
+
s = ""
|
|
431
|
+
s += """<Folders>"""
|
|
432
|
+
zopeFolder = self.findZopeFolder(resourceType, currentFolder)
|
|
433
|
+
for (name, o) in zopeFolder.objectItems(["Folder"]):
|
|
434
|
+
s += """<Folder name="%s" />""" % (
|
|
435
|
+
self.convertToXmlAttribute(name)
|
|
436
|
+
)
|
|
437
|
+
# Close the folders node
|
|
438
|
+
s += """</Folders>"""
|
|
439
|
+
return s
|
|
440
|
+
|
|
441
|
+
def getNonZopeFolders(self, resourceType, currentFolder):
|
|
442
|
+
# Map the virtual path to our local server
|
|
443
|
+
serverPath = self.serverMapFolder(resourceType, currentFolder)
|
|
444
|
+
# Open the folders node
|
|
445
|
+
s = ""
|
|
446
|
+
s += """<Folders>"""
|
|
447
|
+
for someObject in os.listdir(serverPath):
|
|
448
|
+
someObjectPath = os.path.join(serverPath, someObject)
|
|
449
|
+
if os.path.isdir(someObjectPath):
|
|
450
|
+
s += """<Folder name="%s" />""" % (
|
|
451
|
+
self.convertToXmlAttribute(someObject)
|
|
452
|
+
)
|
|
453
|
+
# Close the folders node
|
|
454
|
+
s += """</Folders>"""
|
|
455
|
+
return s
|
|
456
|
+
|
|
457
|
+
"""
|
|
458
|
+
getFoldersAndFiles
|
|
459
|
+
|
|
460
|
+
Purpose: command to recieve a list of folders and files
|
|
461
|
+
"""
|
|
462
|
+
def getFoldersAndFiles(self, resourceType, currentFolder):
|
|
463
|
+
if (self.isZope()):
|
|
464
|
+
return self.getZopeFoldersAndFiles(resourceType, currentFolder)
|
|
465
|
+
else:
|
|
466
|
+
return self.getNonZopeFoldersAndFiles(resourceType, currentFolder)
|
|
467
|
+
|
|
468
|
+
def getNonZopeFoldersAndFiles(self, resourceType, currentFolder):
|
|
469
|
+
# Map the virtual path to our local server
|
|
470
|
+
serverPath = self.serverMapFolder(resourceType, currentFolder)
|
|
471
|
+
# Open the folders / files node
|
|
472
|
+
folders = """<Folders>"""
|
|
473
|
+
files = """<Files>"""
|
|
474
|
+
for someObject in os.listdir(serverPath):
|
|
475
|
+
someObjectPath = os.path.join(serverPath, someObject)
|
|
476
|
+
if os.path.isdir(someObjectPath):
|
|
477
|
+
folders += """<Folder name="%s" />""" % (
|
|
478
|
+
self.convertToXmlAttribute(someObject)
|
|
479
|
+
)
|
|
480
|
+
elif os.path.isfile(someObjectPath):
|
|
481
|
+
size = os.path.getsize(someObjectPath)
|
|
482
|
+
files += """<File name="%s" size="%s" />""" % (
|
|
483
|
+
self.convertToXmlAttribute(someObject),
|
|
484
|
+
os.path.getsize(someObjectPath)
|
|
485
|
+
)
|
|
486
|
+
# Close the folders / files node
|
|
487
|
+
folders += """</Folders>"""
|
|
488
|
+
files += """</Files>"""
|
|
489
|
+
# Return it
|
|
490
|
+
s = folders + files
|
|
491
|
+
return s
|
|
492
|
+
|
|
493
|
+
def getZopeFoldersAndFiles(self, resourceType, currentFolder):
|
|
494
|
+
folders = self.getZopeFolders(resourceType, currentFolder)
|
|
495
|
+
files = self.getZopeFiles(resourceType, currentFolder)
|
|
496
|
+
s = folders + files
|
|
497
|
+
return s
|
|
498
|
+
|
|
499
|
+
def getZopeFiles(self, resourceType, currentFolder):
|
|
500
|
+
# Open the files node
|
|
501
|
+
s = ""
|
|
502
|
+
s += """<Files>"""
|
|
503
|
+
zopeFolder = self.findZopeFolder(resourceType, currentFolder)
|
|
504
|
+
for (name, o) in zopeFolder.objectItems(["File","Image"]):
|
|
505
|
+
s += """<File name="%s" size="%s" />""" % (
|
|
506
|
+
self.convertToXmlAttribute(name),
|
|
507
|
+
((o.get_size() / 1024) + 1)
|
|
508
|
+
)
|
|
509
|
+
# Close the files node
|
|
510
|
+
s += """</Files>"""
|
|
511
|
+
return s
|
|
512
|
+
|
|
513
|
+
def findZopeFolder(self, resourceType, folderName):
|
|
514
|
+
# returns the context of the resource / folder
|
|
515
|
+
zopeFolder = self.getZopeUploadContext()
|
|
516
|
+
folderName = self.removeFromStart(folderName, "/")
|
|
517
|
+
folderName = self.removeFromEnd(folderName, "/")
|
|
518
|
+
if (resourceType <> ""):
|
|
519
|
+
try:
|
|
520
|
+
zopeFolder = zopeFolder[resourceType]
|
|
521
|
+
except:
|
|
522
|
+
zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=resourceType, title=resourceType)
|
|
523
|
+
zopeFolder = zopeFolder[resourceType]
|
|
524
|
+
if (folderName <> ""):
|
|
525
|
+
folderNames = folderName.split("/")
|
|
526
|
+
for folderName in folderNames:
|
|
527
|
+
zopeFolder = zopeFolder[folderName]
|
|
528
|
+
return zopeFolder
|
|
529
|
+
|
|
530
|
+
"""
|
|
531
|
+
createFolder
|
|
532
|
+
|
|
533
|
+
Purpose: command to create a new folder
|
|
534
|
+
"""
|
|
535
|
+
def createFolder(self, resourceType, currentFolder):
|
|
536
|
+
if (self.isZope()):
|
|
537
|
+
return self.createZopeFolder(resourceType, currentFolder)
|
|
538
|
+
else:
|
|
539
|
+
return self.createNonZopeFolder(resourceType, currentFolder)
|
|
540
|
+
|
|
541
|
+
def createZopeFolder(self, resourceType, currentFolder):
|
|
542
|
+
# Find out where we are
|
|
543
|
+
zopeFolder = self.findZopeFolder(resourceType, currentFolder)
|
|
544
|
+
errorNo = 0
|
|
545
|
+
errorMsg = ""
|
|
546
|
+
if self.request.has_key("NewFolderName"):
|
|
547
|
+
newFolder = self.request.get("NewFolderName", None)
|
|
548
|
+
zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=newFolder, title=newFolder)
|
|
549
|
+
else:
|
|
550
|
+
errorNo = 102
|
|
551
|
+
error = """<Error number="%s" originalDescription="%s" />""" % (
|
|
552
|
+
errorNo,
|
|
553
|
+
self.convertToXmlAttribute(errorMsg)
|
|
554
|
+
)
|
|
555
|
+
return error
|
|
556
|
+
|
|
557
|
+
def createNonZopeFolder(self, resourceType, currentFolder):
|
|
558
|
+
errorNo = 0
|
|
559
|
+
errorMsg = ""
|
|
560
|
+
if self.request.has_key("NewFolderName"):
|
|
561
|
+
newFolder = self.request.get("NewFolderName", None)
|
|
562
|
+
currentFolderPath = self.serverMapFolder(
|
|
563
|
+
resourceType,
|
|
564
|
+
currentFolder
|
|
565
|
+
)
|
|
566
|
+
try:
|
|
567
|
+
newFolderPath = currentFolderPath + newFolder
|
|
568
|
+
errorMsg = self.createServerFolder(newFolderPath)
|
|
569
|
+
if (errorMsg is not None):
|
|
570
|
+
errorNo = 110
|
|
571
|
+
except:
|
|
572
|
+
errorNo = 103
|
|
573
|
+
else:
|
|
574
|
+
errorNo = 102
|
|
575
|
+
error = """<Error number="%s" originalDescription="%s" />""" % (
|
|
576
|
+
errorNo,
|
|
577
|
+
self.convertToXmlAttribute(errorMsg)
|
|
578
|
+
)
|
|
579
|
+
return error
|
|
580
|
+
|
|
581
|
+
"""
|
|
582
|
+
getFileName
|
|
583
|
+
|
|
584
|
+
Purpose: helper function to extrapolate the filename
|
|
585
|
+
"""
|
|
586
|
+
def getFileName(self, filename):
|
|
587
|
+
for splitChar in ["/", "\\"]:
|
|
588
|
+
array = filename.split(splitChar)
|
|
589
|
+
if (len(array) > 1):
|
|
590
|
+
filename = array[-1]
|
|
591
|
+
return filename
|
|
592
|
+
|
|
593
|
+
"""
|
|
594
|
+
fileUpload
|
|
595
|
+
|
|
596
|
+
Purpose: command to upload files to server
|
|
597
|
+
"""
|
|
598
|
+
def fileUpload(self, resourceType, currentFolder):
|
|
599
|
+
if (self.isZope()):
|
|
600
|
+
return self.zopeFileUpload(resourceType, currentFolder)
|
|
601
|
+
else:
|
|
602
|
+
return self.nonZopeFileUpload(resourceType, currentFolder)
|
|
603
|
+
|
|
604
|
+
def zopeFileUpload(self, resourceType, currentFolder, count=None):
|
|
605
|
+
zopeFolder = self.findZopeFolder(resourceType, currentFolder)
|
|
606
|
+
file = self.request.get("NewFile", None)
|
|
607
|
+
fileName = self.getFileName(file.filename)
|
|
608
|
+
fileNameOnly = self.removeExtension(fileName)
|
|
609
|
+
fileExtension = self.getExtension(fileName).lower()
|
|
610
|
+
if (count):
|
|
611
|
+
nid = "%s.%s.%s" % (fileNameOnly, count, fileExtension)
|
|
612
|
+
else:
|
|
613
|
+
nid = fileName
|
|
614
|
+
title = nid
|
|
615
|
+
try:
|
|
616
|
+
zopeFolder.manage_addProduct['OFSP'].manage_addFile(
|
|
617
|
+
id=nid,
|
|
618
|
+
title=title,
|
|
619
|
+
file=file.read()
|
|
620
|
+
)
|
|
621
|
+
except:
|
|
622
|
+
if (count):
|
|
623
|
+
count += 1
|
|
624
|
+
else:
|
|
625
|
+
count = 1
|
|
626
|
+
self.zopeFileUpload(resourceType, currentFolder, count)
|
|
627
|
+
return
|
|
628
|
+
|
|
629
|
+
def nonZopeFileUpload(self, resourceType, currentFolder):
|
|
630
|
+
errorNo = 0
|
|
631
|
+
errorMsg = ""
|
|
632
|
+
if self.request.has_key("NewFile"):
|
|
633
|
+
# newFile has all the contents we need
|
|
634
|
+
newFile = self.request.get("NewFile", "")
|
|
635
|
+
# Get the file name
|
|
636
|
+
newFileName = newFile.filename
|
|
637
|
+
newFileNameOnly = self.removeExtension(newFileName)
|
|
638
|
+
newFileExtension = self.getExtension(newFileName).lower()
|
|
639
|
+
allowedExtensions = self.getAllowedExtensions(resourceType)
|
|
640
|
+
deniedExtensions = self.getDeniedExtensions(resourceType)
|
|
641
|
+
if (allowedExtensions is not None):
|
|
642
|
+
# Check for allowed
|
|
643
|
+
isAllowed = False
|
|
644
|
+
if (newFileExtension in allowedExtensions):
|
|
645
|
+
isAllowed = True
|
|
646
|
+
elif (deniedExtensions is not None):
|
|
647
|
+
# Check for denied
|
|
648
|
+
isAllowed = True
|
|
649
|
+
if (newFileExtension in deniedExtensions):
|
|
650
|
+
isAllowed = False
|
|
651
|
+
else:
|
|
652
|
+
# No extension limitations
|
|
653
|
+
isAllowed = True
|
|
654
|
+
|
|
655
|
+
if (isAllowed):
|
|
656
|
+
if (self.isZope()):
|
|
657
|
+
# Upload into zope
|
|
658
|
+
self.zopeFileUpload(resourceType, currentFolder)
|
|
659
|
+
else:
|
|
660
|
+
# Upload to operating system
|
|
661
|
+
# Map the virtual path to the local server path
|
|
662
|
+
currentFolderPath = self.serverMapFolder(
|
|
663
|
+
resourceType,
|
|
664
|
+
currentFolder
|
|
665
|
+
)
|
|
666
|
+
i = 0
|
|
667
|
+
while (True):
|
|
668
|
+
newFilePath = "%s%s" % (
|
|
669
|
+
currentFolderPath,
|
|
670
|
+
newFileName
|
|
671
|
+
)
|
|
672
|
+
if os.path.exists(newFilePath):
|
|
673
|
+
i += 1
|
|
674
|
+
newFilePath = "%s%s(%s).%s" % (
|
|
675
|
+
currentFolderPath,
|
|
676
|
+
newFileNameOnly,
|
|
677
|
+
i,
|
|
678
|
+
newFileExtension
|
|
679
|
+
)
|
|
680
|
+
errorNo = 201
|
|
681
|
+
break
|
|
682
|
+
else:
|
|
683
|
+
fileHandle = open(newFilePath,'w')
|
|
684
|
+
linecount = 0
|
|
685
|
+
while (1):
|
|
686
|
+
#line = newFile.file.readline()
|
|
687
|
+
line = newFile.readline()
|
|
688
|
+
if not line: break
|
|
689
|
+
fileHandle.write("%s" % line)
|
|
690
|
+
linecount += 1
|
|
691
|
+
os.chmod(newFilePath, 0777)
|
|
692
|
+
break
|
|
693
|
+
else:
|
|
694
|
+
newFileName = "Extension not allowed"
|
|
695
|
+
errorNo = 203
|
|
696
|
+
else:
|
|
697
|
+
newFileName = "No File"
|
|
698
|
+
errorNo = 202
|
|
699
|
+
|
|
700
|
+
string = """
|
|
701
|
+
<script type="text/javascript">
|
|
702
|
+
window.parent.frames["frmUpload"].OnUploadCompleted(%s,"%s");
|
|
703
|
+
</script>
|
|
704
|
+
""" % (
|
|
705
|
+
errorNo,
|
|
706
|
+
newFileName.replace('"',"'")
|
|
707
|
+
)
|
|
708
|
+
return string
|
|
709
|
+
|
|
710
|
+
def run(self):
|
|
711
|
+
s = ""
|
|
712
|
+
try:
|
|
713
|
+
# Check if this is disabled
|
|
714
|
+
if not(self.enabled):
|
|
715
|
+
return self.sendError(1, "This connector is disabled. Please check the connector configurations and try again")
|
|
716
|
+
# Make sure we have valid inputs
|
|
717
|
+
if not(
|
|
718
|
+
(self.request.has_key("Command")) and
|
|
719
|
+
(self.request.has_key("Type")) and
|
|
720
|
+
(self.request.has_key("CurrentFolder"))
|
|
721
|
+
):
|
|
722
|
+
return
|
|
723
|
+
# Get command
|
|
724
|
+
command = self.request.get("Command", None)
|
|
725
|
+
# Get resource type
|
|
726
|
+
resourceType = self.request.get("Type", None)
|
|
727
|
+
# folder syntax must start and end with "/"
|
|
728
|
+
currentFolder = self.request.get("CurrentFolder", None)
|
|
729
|
+
if (currentFolder[-1] <> "/"):
|
|
730
|
+
currentFolder += "/"
|
|
731
|
+
if (currentFolder[0] <> "/"):
|
|
732
|
+
currentFolder = "/" + currentFolder
|
|
733
|
+
# Check for invalid paths
|
|
734
|
+
if (".." in currentFolder):
|
|
735
|
+
return self.sendError(102, "")
|
|
736
|
+
# File upload doesn't have to return XML, so intercept
|
|
737
|
+
# her:e
|
|
738
|
+
if (command == "FileUpload"):
|
|
739
|
+
return self.fileUpload(resourceType, currentFolder)
|
|
740
|
+
# Begin XML
|
|
741
|
+
s += self.createXmlHeader(command, resourceType, currentFolder)
|
|
742
|
+
# Execute the command
|
|
743
|
+
if (command == "GetFolders"):
|
|
744
|
+
f = self.getFolders
|
|
745
|
+
elif (command == "GetFoldersAndFiles"):
|
|
746
|
+
f = self.getFoldersAndFiles
|
|
747
|
+
elif (command == "CreateFolder"):
|
|
748
|
+
f = self.createFolder
|
|
749
|
+
else:
|
|
750
|
+
f = None
|
|
751
|
+
if (f is not None):
|
|
752
|
+
s += f(resourceType, currentFolder)
|
|
753
|
+
s += self.createXmlFooter()
|
|
754
|
+
except Exception, e:
|
|
755
|
+
s = "ERROR: %s" % e
|
|
756
|
+
return s
|
|
757
|
+
|
|
758
|
+
# Running from command line
|
|
759
|
+
if __name__ == '__main__':
|
|
760
|
+
# To test the output, uncomment the standard headers
|
|
761
|
+
#print "Content-Type: text/html"
|
|
762
|
+
#print ""
|
|
763
|
+
print getFCKeditorConnector()
|
|
764
|
+
|
|
765
|
+
"""
|
|
766
|
+
Running from zope, you will need to modify this connector.
|
|
767
|
+
If you have uploaded the FCKeditor into Zope (like me), you need to
|
|
768
|
+
move this connector out of Zope, and replace the "connector" with an
|
|
769
|
+
alias as below. The key to it is to pass the Zope context in, as
|
|
770
|
+
we then have a like to the Zope context.
|
|
771
|
+
|
|
772
|
+
## Script (Python) "connector.py"
|
|
773
|
+
##bind container=container
|
|
774
|
+
##bind context=context
|
|
775
|
+
##bind namespace=
|
|
776
|
+
##bind script=script
|
|
777
|
+
##bind subpath=traverse_subpath
|
|
778
|
+
##parameters=*args, **kws
|
|
779
|
+
##title=ALIAS
|
|
780
|
+
##
|
|
781
|
+
import Products.connector as connector
|
|
782
|
+
return connector.getFCKeditorConnector(context=context).run()
|
|
783
|
+
"""
|
|
784
|
+
|
|
785
|
+
|