cvsimport
This commit is contained in:
commit
16127edc37
@ -5,4 +5,17 @@ DEB Package tools
|
||||
|
||||
This directory contains files used by makepack-dolibarr.pl
|
||||
script to build a package, ready to be distributed,
|
||||
with format .DEB (for Debian, Ubuntu, ...).
|
||||
with format .DEB (for Debian, Ubuntu, ...).
|
||||
|
||||
# This is standard command to work on Debian packaging:
|
||||
#
|
||||
# lintian package To test a package
|
||||
#
|
||||
# dpkg -l List all packages
|
||||
# dpkg -b To build package
|
||||
# dpkg -c package.deb List content of package
|
||||
# dpkg -I package.deb Give informations on package
|
||||
# dpkg -i package.deb Install a package
|
||||
#
|
||||
# dpkg -L packagename List content of installed package
|
||||
# dpkg --purge Remove config files and interactive saved answers
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
Alias /dolibarr /usr/share/dolibarr/htdocs
|
||||
</IfModule>
|
||||
|
||||
# You can also use phpLDAPadmin as a VirtualHost
|
||||
# You can also use dolibarr as a VirtualHost
|
||||
# <VirtualHost *:*>
|
||||
# ServerName mydolibarrhostname.com
|
||||
# ServerAdmin root@example.com
|
||||
@ -13,7 +13,10 @@ Alias /dolibarr /usr/share/dolibarr/htdocs
|
||||
# CustomLog logs/ldap.example.com-access.log common
|
||||
# </VirtualHost>
|
||||
|
||||
<Directory /usr/share/dolibarr/htdocs>
|
||||
# Directory for web pages
|
||||
<DirectoryMatch /usr/share/dolibarr>
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
DirectoryIndex index.php
|
||||
Options +FollowSymLinks +Indexes
|
||||
|
||||
@ -53,10 +56,23 @@ Alias /dolibarr /usr/share/dolibarr/htdocs
|
||||
#ExpiresByType application/x-javascript A2592000
|
||||
#ExpiresByType application/javascript A2592000
|
||||
|
||||
</Directory>
|
||||
</DirectoryMatch>
|
||||
|
||||
<Directory /usr/share/dolibarr/htdocs/public/>
|
||||
# Directory for public pages
|
||||
<DirectoryMatch /usr/share/dolibarr/htdocs/public>
|
||||
AllowOverride All
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
</Directory>
|
||||
</DirectoryMatch>
|
||||
|
||||
# Directory for data files
|
||||
<DirectoryMatch /usr/share/dolibarr/documents>
|
||||
AllowOverride All
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
</DirectoryMatch>
|
||||
<DirectoryMatch /var/lib/dolibarr>
|
||||
AllowOverride All
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
</DirectoryMatch>
|
||||
|
||||
4
build/deb/changelog
Normal file
4
build/deb/changelog
Normal file
@ -0,0 +1,4 @@
|
||||
dolibarr 3.1.0 unstable; urgency=low
|
||||
* New 3.1.0 release
|
||||
More information into /usr/share/dolibarr/ChangeLog file.
|
||||
-- maintainer Laurent Destailleur <eldy@users.sourceforge.net> 2011-07-09
|
||||
@ -1,15 +1,6 @@
|
||||
#!/bin/sh
|
||||
# Debian install package run: config, preinst, prerm, postinst, postrm
|
||||
#
|
||||
# dpkg -l list all packages
|
||||
# dpkg -b is to build package
|
||||
# dpkg -c package.deb list content of package
|
||||
# dpkg -I package.deb give informations on package
|
||||
# dpkg -i package.deb install a package
|
||||
#
|
||||
# dpkg -L packagename list content of installed package
|
||||
# dpkg --purge remove interactive saved answers
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
|
||||
@ -3,36 +3,39 @@ Version: __VERSION__
|
||||
Architecture: all
|
||||
Maintainer: Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
Essential: no
|
||||
Installed-Size: 31200
|
||||
Depends: apache2, libapache2-mod-php5, php5, php5-cgi, php5-curl, php5-gd, php5-ldap, php5-mysql, mysql-server, perl
|
||||
Installed-Size: 61200
|
||||
Depends: apache2, libapache2-mod-php5, php5, php5-cli, php5-cgi, php5-curl, php5-gd, php5-ldap, php5-mysql, mysql-server, perl
|
||||
Section: web
|
||||
Priority: optional
|
||||
Recommends: mozilla | netscape
|
||||
Recommends: firefox
|
||||
Homepage: http://www.dolibarr.org
|
||||
Description: Dolibarr ERP & CRM
|
||||
Dolibarr ERP/CRM is an open source/free software for
|
||||
small and medium companies, foundations or freelances. It includes
|
||||
different features for Enterprise Resource Planning (ERP) and Customer
|
||||
Relationship Management (CRM) but also other features for different
|
||||
activities.
|
||||
Description: Easy to use ERP & CRM software to manage your activity.
|
||||
Dolibarr ERP & CRM is an easy to use open source/free software for small
|
||||
and medium companies, foundations or freelances. It includes different
|
||||
features for Enterprise Resource Planning (ERP) and Customer Relationship
|
||||
Management (CRM) but also for different other activities.
|
||||
It's a web software you can install as a standalone program or on any web
|
||||
hosting provider to use it from anywhere with any web browser.
|
||||
Dolibarr was designed to provide only features you need and be easy to use.
|
||||
.
|
||||
Dolibarr features are activated by modules. Most common modules are:
|
||||
Only features you need are visible, depending on which module were activated.
|
||||
Most common used modules are:
|
||||
.
|
||||
* Products and services catalog
|
||||
* Stock management
|
||||
* Bank accounts management
|
||||
* Customers, Suppliers or Prospects directory
|
||||
* Contacts directory
|
||||
* Orders management
|
||||
* Commercial proposals management
|
||||
* Invoices management
|
||||
* Products and services catalog
|
||||
* Stock management
|
||||
* Foundations members management
|
||||
* Bank accounts management
|
||||
* Point of Sale
|
||||
* Payments management
|
||||
* Commercial actions management
|
||||
* Contracts management
|
||||
* Standing orders management
|
||||
* Shipping management
|
||||
* Foundations members management
|
||||
* Donations management
|
||||
* Bookmarks management
|
||||
* Mass Emailings
|
||||
@ -40,4 +43,7 @@ Description: Dolibarr ERP & CRM
|
||||
* Data export and import tools
|
||||
* LDAP connectivity
|
||||
* PDF exports
|
||||
* And a lot of other modules
|
||||
* And a lot of more modules...
|
||||
.
|
||||
You can also add third parties external modules or develop yours.
|
||||
|
||||
4
build/deb/copyright
Normal file
4
build/deb/copyright
Normal file
@ -0,0 +1,4 @@
|
||||
Copyright 2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
|
||||
This software is distributed under GPL v2 licence.
|
||||
See file /usr/share/common-licenses/GPL-2
|
||||
@ -3,15 +3,20 @@
|
||||
# It must be saved into directory /usr/share/applications
|
||||
Version=1.0
|
||||
Encoding=UTF-8
|
||||
Name=Dolibarr ERP/CRM
|
||||
GenericName=Dolibarr ERP/CRM
|
||||
Comment=The easy to use manager for small and medium enterprises or foundations
|
||||
# xdg-open use default bowser to open url (exo-open for xfde, gnome-open for gnome, ...)
|
||||
Exec=xdg-open http://localhost/dolibarr
|
||||
Name=Dolibarr ERP & CRM
|
||||
Name[fr]=Dolibarr ERP & CRM
|
||||
GenericName=Dolibarr ERP & CRM
|
||||
Comment=The easy to use manager (ERP & CRM) for small and medium enterprises or foundations
|
||||
Comment[fr]=L'ERP & CRM simple pour la gestion des PME et associations
|
||||
# Command to open an URL
|
||||
# For Fedora: xdg-open
|
||||
# For Debian/Ubuntu: x-www-browser
|
||||
# (exo-open for xfde, gnome-open for gnome, ...)
|
||||
Exec=x-www-browser http://localhost/dolibarr
|
||||
Icon=dolibarr
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Category=Application;Office;
|
||||
Categories=Office
|
||||
StartupNotify=true
|
||||
InitialPreference=5
|
||||
#NoDisplay=true
|
||||
|
||||
@ -4,11 +4,13 @@
|
||||
// This file must be present into htdocs/install directory
|
||||
// during install process to be used.
|
||||
//
|
||||
// $Id: install.forced.php.install,v 1.5 2011/06/26 11:41:50 eldy Exp $
|
||||
// $Id: install.forced.php.install,v 1.7 2011/07/09 15:48:19 eldy Exp $
|
||||
//
|
||||
|
||||
$force_install_noedit=1;
|
||||
$force_install_message='KeepDefaultValuesDeb';
|
||||
$force_install_main_data_root='/usr/share/dolibarr/documents';
|
||||
#$force_install_main_data_root='/var/lib/dolibarr';
|
||||
$force_install_type='mysqli';
|
||||
$force_install_dbserver='localhost';
|
||||
$force_install_port='3306';
|
||||
|
||||
@ -49,26 +49,28 @@ case "$1" in
|
||||
cat $fileorig | sed -e 's/__SUPERUSERLOGIN__/'$superuserlogin'/g' | sed -e 's/__SUPERUSERPASSWORD__/'$superuserpassword'/g' > $config
|
||||
fi
|
||||
|
||||
# Create /var/lib/dolibarr/documents
|
||||
mkdir -p /var/lib/dolibarr/documents
|
||||
chown -R www-data.www-data /var/lib/dolibarr/documents;
|
||||
chmod -R 775 /var/lib/dolibarr/documents;
|
||||
chmod -R g+s /var/lib/dolibarr/documents;
|
||||
# Create document directory
|
||||
#docdir='/var/lib/dolibarr/documents'
|
||||
docdir='/usr/share/dolibarr/documents'
|
||||
mkdir -p $docdir
|
||||
chown -R www-data:www-data $docdir
|
||||
chmod -R 775 $docdir
|
||||
chmod -R g+s $docdir
|
||||
|
||||
# Create an empty conf.php with permission to web server
|
||||
if [ ! -f /usr/share/dolibarr/htdocs/conf/conf.php ]
|
||||
then
|
||||
echo Create empty file /usr/share/dolibarr/htdocs/conf/conf.php
|
||||
touch /usr/share/dolibarr/htdocs/conf/conf.php
|
||||
chown -R www-data.www-data /usr/share/dolibarr/htdocs/conf/conf.php;
|
||||
chmod -R 750 /usr/share/dolibarr/htdocs/conf/conf.php;
|
||||
chown -R www-data:www-data /usr/share/dolibarr/htdocs/conf/conf.php
|
||||
chmod -R 750 /usr/share/dolibarr/htdocs/conf/conf.php
|
||||
fi
|
||||
|
||||
#db_reset "dolibarr/webserver"
|
||||
|
||||
# Get the web server type (use db_get for interactive mode).
|
||||
# db_get "dolibarr/webserver" # Read value for webserver.
|
||||
# webserver="$RET"
|
||||
#db_get "dolibarr/webserver" # Read value for webserver.
|
||||
#webserver="$RET"
|
||||
|
||||
case $webserver in
|
||||
Apache) webservers="apache2" ;;
|
||||
@ -81,23 +83,10 @@ case "$1" in
|
||||
for server in $webservers ; do
|
||||
echo Complete config of server $server
|
||||
|
||||
# Add info for PHP (obsolete)
|
||||
#typestr='application/x-httpd-php'
|
||||
#extension='.php'
|
||||
#. /usr/share/wwwconfig-common/apache-addtype_all.sh
|
||||
|
||||
# Enable PHP module (obsolete)
|
||||
#. /usr/share/wwwconfig-common/apache-php.sh
|
||||
#echo Result of enabling PHP modules: $status
|
||||
|
||||
# Detect webuser and webgroup
|
||||
webuser=
|
||||
webgroup=
|
||||
|
||||
# Search in httpd.conf (obsolete)
|
||||
#. /usr/share/wwwconfig-common/apache-run.get
|
||||
#echo Web user.group found is $webuser.$webgroup
|
||||
|
||||
if [ -z "$webuser" ] ; then
|
||||
webuser=www-data
|
||||
fi
|
||||
@ -111,30 +100,14 @@ case "$1" in
|
||||
# That may lead to problems if apache & apache-ssl do
|
||||
# not have the same user/group.
|
||||
#
|
||||
chown -R $webuser.$webgroup /usr/share/dolibarr
|
||||
chown -R $webuser:$webgroup /usr/share/dolibarr
|
||||
|
||||
# Put content of conf file into apache httpd.conf main file (/etc/apache2/httpd.conf)
|
||||
#includefile="/etc/dolibarr/apache.conf"
|
||||
#. /usr/share/dolibarr/build/deb/apache-include_all.sh
|
||||
#test "$status" = "uncomment" -o "$status" = "include" && restart="$server $restart"
|
||||
|
||||
# Add link to config file
|
||||
echo Setup web server $server to add dolibarr config file
|
||||
ln -fs /etc/dolibarr/apache.conf /etc/apache2/conf.d
|
||||
ln -fs /etc/dolibarr/apache.conf /etc/apache2/conf.d/dolibarr.conf
|
||||
|
||||
# (useless)
|
||||
#for index in index.php; do
|
||||
# . /usr/share/wwwconfig-common/apache-index_all.sh
|
||||
# test "$status" = "added" && restart="$server $restart"
|
||||
#done
|
||||
done
|
||||
|
||||
# Copy icon file
|
||||
#echo "Copy icon file"
|
||||
#fileorig="/usr/share/dolibarr/doc/images/dolibarr.xpm"
|
||||
#target="/usr/share/pixmaps/"
|
||||
#cp -f $fileorig $target
|
||||
|
||||
#echo "Install menu entry"
|
||||
# This one is for Gnome ubuntu
|
||||
#fileorig="/usr/share/dolibarr/build/deb/dolibarr.desktop"
|
||||
@ -157,22 +130,17 @@ case "$1" in
|
||||
|
||||
# Restart servers
|
||||
servers="apache2-ssl apache2 mysql"
|
||||
if [ -f /usr/share/wwwconfig-common/restart.sh ] ;
|
||||
then
|
||||
echo Restart web servers running /usr/share/wwwconfig-common/restart.sh
|
||||
. /usr/share/wwwconfig-common/restart.sh
|
||||
else
|
||||
# Another way to restart
|
||||
for server in $servers ; do
|
||||
echo Restart web server $server
|
||||
if [ -x /usr/sbin/invoke-rc.d ]; then
|
||||
# This on works with Debian (5.05,...) and Ubuntu (9.10,10.04,...)
|
||||
invoke-rc.d $server reload || true
|
||||
else
|
||||
/etc/init.d/$server reload || true
|
||||
fi
|
||||
done
|
||||
fi
|
||||
# Another way to restart
|
||||
for server in $servers ; do
|
||||
if [ -x /usr/sbin/invoke-rc.d ]; then
|
||||
echo Restart web server $server using invoke-rc.d
|
||||
# This works with Debian (5.05,...) and Ubuntu (9.10,10.04,...)
|
||||
invoke-rc.d $server reload || true
|
||||
else
|
||||
echo Restart web server $server using $server reload
|
||||
/etc/init.d/$server reload || true
|
||||
fi
|
||||
done
|
||||
|
||||
echo ----------
|
||||
echo "Call Dolibarr page http://localhost/dolibarr/ to complete the installation and use Dolibarr."
|
||||
|
||||
@ -72,10 +72,6 @@ case "$1" in
|
||||
echo postrm Mysql superuser found to use is $superuserlogin
|
||||
dbadmin="$superuserlogin"
|
||||
dbadmpass="$superuserpassword"
|
||||
#db_get "dolibarr/db/admin/name"
|
||||
#dbadmin="$RET"
|
||||
#db_get "dolibarr/db/admin/password"
|
||||
#dbadmpass="$RET"
|
||||
dbtype="mysql"
|
||||
|
||||
# To delete a mysql user (disabled)
|
||||
@ -149,30 +145,6 @@ case "$1" in
|
||||
|
||||
# Remove include files
|
||||
for server in $webservers ; do
|
||||
|
||||
# Old usage
|
||||
#export conffile="/etc/$server/httpd.conf"
|
||||
#export error=""
|
||||
#echo "postrm conffile=$conffile"
|
||||
#if [ -f $conffile ] ;
|
||||
#then
|
||||
# if [ -s $conffile ] ;
|
||||
# then
|
||||
# echo postrm remove dolibarr include from /etc/dolibarr/apache.conf
|
||||
# # We disable set -e to avoid premature end of script if error
|
||||
# set +e
|
||||
# GREP="Include[[:space:]]\+$includefile\b"
|
||||
# if grep -e "$GREP" $conffile > /dev/null 2>&1; then
|
||||
# log="${log}Include of $includefile found in $conffile file, purging."
|
||||
# status=purge
|
||||
# grep -v -e "$GREP" < $conffile > $conffile.purg
|
||||
# mv $conffile.purg $conffile
|
||||
# fi
|
||||
# # We restore blocking errors
|
||||
# set -e
|
||||
# fi
|
||||
#fi
|
||||
|
||||
# New usage
|
||||
export conffile="/etc/$server/conf.d/dolibarr.conf"
|
||||
if [ -f $conffile ] ;
|
||||
@ -189,25 +161,18 @@ case "$1" in
|
||||
rm -rf /etc/dolibarr
|
||||
|
||||
# Restart servers
|
||||
servers="apache2-ssl apache2 mysql"
|
||||
if [ -f /usr/share/wwwconfig-common/restart.sh ] ;
|
||||
then
|
||||
. /usr/share/wwwconfig-common/restart.sh
|
||||
else
|
||||
# Another way to restart
|
||||
for server in $servers ; do
|
||||
# We disable blocking errors
|
||||
set +e
|
||||
echo "Restart server $server if exists"
|
||||
if [ -x /usr/sbin/invoke-rc.d ]; then
|
||||
invoke-rc.d $server reload || true
|
||||
else
|
||||
/etc/init.d/$server reload || true
|
||||
fi
|
||||
# We restore blocking errors
|
||||
set -e
|
||||
done
|
||||
fi
|
||||
for server in $servers ; do
|
||||
# We disable blocking errors
|
||||
set +e
|
||||
echo "Restart server $server if exists"
|
||||
if [ -x /usr/sbin/invoke-rc.d ]; then
|
||||
invoke-rc.d $server reload || true
|
||||
else
|
||||
/etc/init.d/$server reload || true
|
||||
fi
|
||||
# We restore blocking errors
|
||||
set -e
|
||||
done
|
||||
|
||||
# Remove file and conf file
|
||||
for dir in /usr/share/dolibarr ; do
|
||||
|
||||
100
build/deb/rules
100
build/deb/rules
@ -1,100 +1,4 @@
|
||||
#!/usr/bin/make -f
|
||||
# Sample debian/rules that uses debhelper.
|
||||
# GNU copyright 1997 to 1999 by Joey Hess.
|
||||
#
|
||||
# This script is not used. The script used to build the root
|
||||
# for making Debian pakcage is build/makepack-dolibarr.pl
|
||||
# Sample debian/rules
|
||||
#
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
# This is the debhelper compatability version to use.
|
||||
export DH_COMPAT=3
|
||||
|
||||
configure: configure-stamp
|
||||
configure-stamp:
|
||||
dh_testdir
|
||||
# Add here commands to configure the package.
|
||||
|
||||
touch configure-stamp
|
||||
|
||||
build: configure-stamp build-stamp
|
||||
build-stamp:
|
||||
dh_testdir
|
||||
|
||||
# Add here commands to compile the package.
|
||||
|
||||
touch build-stamp
|
||||
|
||||
clean:
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
rm -f build-stamp configure-stamp
|
||||
|
||||
# Add here commands to clean up after the build process.
|
||||
|
||||
dh_clean
|
||||
|
||||
install: build
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_clean -k
|
||||
dh_installdirs
|
||||
|
||||
@# Add here commands to install the package into debian/dolibarr
|
||||
|
||||
install --mode=644 -D --group=www-data --owner=www-data \
|
||||
DEBIAN/apache.conf \
|
||||
debian/dolibarr/etc/dolibarr/apache.conf
|
||||
|
||||
mkdir -p debian/dolibarr/usr/share/dolibarr
|
||||
cp -rp htdocs/* debian/dolibarr/usr/share/dolibarr/htdocs
|
||||
mkdir -p debian/dolibarr/usr/share/dolibarr/documents
|
||||
chmod -R 644 debian/dolibarr/usr/share/dolibarr
|
||||
|
||||
find debian/dolibarr/usr/share/dolibarr -type d | xargs chmod 755
|
||||
|
||||
find debian/dolibarr \( -name CVS -o -name .cvsignore \) | xargs rm -fr
|
||||
|
||||
mkdir -p debian/dolibarr/usr/lib/dolibarr
|
||||
cp -rp scripts/* debian/dolibarr/usr/lib/dolibarr
|
||||
|
||||
# Build architecture-independent files here.
|
||||
binary-indep: build install
|
||||
# We have nothing to do by default.
|
||||
|
||||
# Build architecture-dependent files here.
|
||||
binary-arch: build install
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
# dh_movefiles
|
||||
|
||||
dh_installdebconf
|
||||
dh_installdocs
|
||||
# dh_installexamples
|
||||
# dh_installmenu
|
||||
# dh_installlogrotate
|
||||
# dh_installemacsen
|
||||
# dh_installpam
|
||||
# dh_installmime
|
||||
# dh_installinit
|
||||
# dh_installcron
|
||||
dh_installman
|
||||
# dh_installinfo
|
||||
# dh_undocumented
|
||||
# dh_installchangelogs
|
||||
dh_link
|
||||
dh_strip
|
||||
dh_compress
|
||||
dh_fixperms
|
||||
# dh_makeshlibs
|
||||
dh_installdeb
|
||||
# dh_perl
|
||||
# dh_shlibdeps
|
||||
dh_gencontrol
|
||||
dh_md5sums
|
||||
dh_builddeb
|
||||
|
||||
binary: binary-indep binary-arch
|
||||
.PHONY: build clean binary-indep binary-arch binary install configure
|
||||
# This script is not used, so is empty.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
Template: dolibarr/configuration/note
|
||||
Type: note
|
||||
Description: Package configuration note.
|
||||
Description: Package configuration note
|
||||
Dolibarr can be and should be configured entirely via web, so, in the
|
||||
following configuration steps, I'm going to prompt you for the passwords that
|
||||
Dolibarr uses for web configuration and some default values for the
|
||||
@ -15,19 +15,13 @@ Description: Package configuration note.
|
||||
Template: dolibarr/webserver
|
||||
Type: select
|
||||
Choices: Apache, Apache-ssl, Both, None
|
||||
Description: Which Web Server are you running?
|
||||
Description: Which Web Server are you running ?
|
||||
Dolibarr supports any web server with PHP capabilities, but this
|
||||
configuration process only supports Apache and Apache-SSL.
|
||||
|
||||
Template: dolibarr/db/setup/skip
|
||||
Type: boolean
|
||||
Default: false
|
||||
Description: DB setup skipped.
|
||||
DB setup will be skipped.
|
||||
|
||||
Template: dolibarr/db
|
||||
Type: text
|
||||
Description: Dolibarr DB setup NOTE.
|
||||
Description: Dolibarr DB setup note
|
||||
Now you should specify the DBMS settings. You must provide the host name on
|
||||
which the DBMS server is installed, the type (i.e. MySql), the DB name, the DBMS administrator user-name, etc.
|
||||
|
||||
@ -71,7 +65,7 @@ Description: Please, retype the password to access the DB:
|
||||
|
||||
Template: dolibarr/db/user/password/mismatch
|
||||
Type: text
|
||||
Description: Passwords mismatch.
|
||||
Description: Passwords mismatch
|
||||
The DB access passwords you inserted mismatch. Please, try again.
|
||||
|
||||
Template: dolibarr/db/admin/name
|
||||
@ -97,6 +91,15 @@ Template: dolibarr/postrm
|
||||
Type: boolean
|
||||
Default: true
|
||||
Description: Delete database ?
|
||||
Do I have to delete also the Dolibarr MySQL database and all its datas
|
||||
(datas subjected to this quetion are the Dolibarr DBMS account and all
|
||||
Delete the Dolibarr MySQL database and all its datas (datas related
|
||||
to this quetion are the Dolibarr DBMS account and all
|
||||
Dolibarr tables) ?
|
||||
|
||||
Template: dolibarr/postrmfile
|
||||
Type: boolean
|
||||
Default: true
|
||||
Description: Delete attached files ?
|
||||
Delete also all uploaded and generated files (datas related
|
||||
to this quetion are all files found into /usr/share/dolibarr/documents,
|
||||
uploaded or generated when using Dolibarr) ?
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# \file build/makepack-dolibarr.pl
|
||||
# \brief Dolibarr package builder (tgz, zip, rpm, deb, exe, aps)
|
||||
# \version $Id: makepack-dolibarr.pl,v 1.105 2011/06/26 11:41:50 eldy Exp $
|
||||
# \version $Id: makepack-dolibarr.pl,v 1.109 2011/07/11 11:09:02 eldy Exp $
|
||||
# \author (c)2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
@ -48,7 +48,7 @@ if (-d "/usr/src/RPM") {
|
||||
|
||||
|
||||
use vars qw/ $REVISION $VERSION /;
|
||||
$REVISION='$Revision: 1.105 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1;
|
||||
$REVISION='$Revision: 1.109 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1;
|
||||
$VERSION="1.0 (build $REVISION)";
|
||||
|
||||
|
||||
@ -98,7 +98,7 @@ if (! $TEMP || ! -d $TEMP) {
|
||||
$BUILDROOT="$TEMP/buildroot";
|
||||
|
||||
|
||||
my $copyalreadydone=0;
|
||||
my $copyalreadydone=0; # Use - before number of choice to avoid copy
|
||||
my $batch=0;
|
||||
|
||||
for (0..@ARGV-1) {
|
||||
@ -262,6 +262,7 @@ if ($nboftargetok) {
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.old`;
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.postgres`;
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf*sav*`;
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/install/install.lock`;
|
||||
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT/documents`;
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT/document`;
|
||||
@ -277,9 +278,13 @@ if ($nboftargetok) {
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT/Thumbs.db $BUILDROOT/$PROJECT/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/*/Thumbs.db`;
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT/CVS* $BUILDROOT/$PROJECT/*/CVS* $BUILDROOT/$PROJECT/*/*/CVS* $BUILDROOT/$PROJECT/*/*/*/CVS* $BUILDROOT/$PROJECT/*/*/*/*/CVS* $BUILDROOT/$PROJECT/*/*/*/*/*/CVS*`;
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT/.cvsignore $BUILDROOT/$PROJECT/*/.cvsignore $BUILDROOT/$PROJECT/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/*/.cvsignore`;
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpexcel/PHPExcel/Shared/PDF/fonts/utils/freetype6.dll`;
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpexcel/PHPExcel/Shared/PDF/fonts/utils/zlib1.dll`;
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/php_writeexcel/php.bmp`;
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/php_writeexcel/php.bmp`;
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/phpexcel/PHPExcel/Shared/PDF/fonts/utils/freetype6.dll`;
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/phpexcel/PHPExcel/Shared/PDF/fonts/utils/zlib1.dll`;
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/phpexcel/PHPExcel/Shared/PDF/fonts/utils/pfm2afm`;
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/phpexcel/PHPExcel/Shared/PDF/fonts/utils/ttf2ufm`;
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/utils/pfm2afm`;
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/utils/ttf2ufm`;
|
||||
}
|
||||
|
||||
# Build package for each target
|
||||
@ -402,7 +407,7 @@ if ($nboftargetok) {
|
||||
$ret=`$cmd`;
|
||||
|
||||
print "Remove other files\n";
|
||||
$ret=`rm -f $BUILDROOT/$FILENAMETGZ2/*.dll $BUILDROOT/$FILENAMETGZ2/*/*.dll $BUILDROOT/$FILENAMETGZ2/*/*/*.dll $BUILDROOT/$FILENAMETGZ2/*/*/*/*.dll $BUILDROOT/$FILENAMETGZ2/*/*/*/*/*.dll $BUILDROOT/$FILENAMETGZ2/*/*/*/*/*/*.dll $BUILDROOT/$FILENAMETGZ2/*/*/*/*/*/*/*.dll`;
|
||||
$ret=`rm -f $BUILDROOT/$FILENAMETGZ2/htdocs/includes/barcode/php-barcode/genbarcode/genbarcode`;
|
||||
|
||||
print "Compress $FILENAMETGZ2 into $FILENAMETGZ2.tgz...\n";
|
||||
$ret=`tar --exclude-from "$SOURCE/build/tgz/tar_exclude.txt" --directory "$BUILDROOT" -czvf "$BUILDROOT/$FILENAMETGZ2.tgz" $FILENAMETGZ2`;
|
||||
@ -436,11 +441,11 @@ if ($nboftargetok) {
|
||||
|
||||
if ($target eq 'DEB') {
|
||||
$newbuild = $BUILD;
|
||||
$newbuild =~ s/(dev|alpha)/0/gi; # dev
|
||||
$newbuild =~ s/beta/1/gi; # beta
|
||||
$newbuild =~ s/rc./2/gi; # rc
|
||||
if ($newbuild !~ /-/) { $newbuild.='-3'; } # finale
|
||||
# now newbuild is 0-0 or 0-3 for example
|
||||
$newbuild =~ s/(dev|alpha)/1/gi; # dev
|
||||
$newbuild =~ s/beta/2/gi; # beta
|
||||
$newbuild =~ s/rc./3/gi; # rc
|
||||
if ($newbuild !~ /-/) { $newbuild.='-4'; } # finale
|
||||
# now newbuild is 0-1 or 0-4 for example
|
||||
print "Version is $MAJOR.$MINOR.$newbuild\n";
|
||||
|
||||
print "Remove target $FILENAMEDEB.deb...\n";
|
||||
@ -453,7 +458,6 @@ if ($nboftargetok) {
|
||||
print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT\n";
|
||||
$cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT\"";
|
||||
$ret=`$cmd`;
|
||||
|
||||
print "Create directory $BUILDROOT/$PROJECT.tmp/DEBIAN\n";
|
||||
$ret=`mkdir "$BUILDROOT/$PROJECT.tmp/DEBIAN"`;
|
||||
print "Copy $SOURCE/build/deb/* to $BUILDROOT/$PROJECT.tmp/DEBIAN\n";
|
||||
@ -475,6 +479,7 @@ if ($nboftargetok) {
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/doc/tshirt`;
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/doc/rollup`;
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/test`;
|
||||
$ret=`rm -f $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/htdocs/includes/barcode/php-barcode/genbarcode/genbarcode`;
|
||||
# To remove once stable
|
||||
$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/htdocs/htdocs/theme/bureau2crea`;
|
||||
|
||||
@ -493,29 +498,45 @@ if ($nboftargetok) {
|
||||
$ret=`mkdir -p "$BUILDROOT/$PROJECT.tmp/usr/share/applications"`;
|
||||
print "Copy desktop file into $BUILDROOT/$PROJECT.tmp/usr/share/applications/dolibarr.desktop\n";
|
||||
$ret=`cp "$SOURCE/build/deb/dolibarr.desktop" "$BUILDROOT/$PROJECT.tmp/usr/share/applications/dolibarr.desktop"`;
|
||||
|
||||
|
||||
print "Create directory $BUILDROOT/$PROJECT.tmp/usr/share/pixmaps\n";
|
||||
$ret=`mkdir -p "$BUILDROOT/$PROJECT.tmp/usr/share/pixmaps"`;
|
||||
print "Copy pixmap file into $BUILDROOT/$PROJECT.tmp/usr/share/pixmaps/dolibarr.xpm\n";
|
||||
$ret=`cp "$SOURCE/doc/images/dolibarr.xpm" "$BUILDROOT/$PROJECT.tmp/usr/share/pixmaps/dolibarr.xpm"`;
|
||||
|
||||
print "Create directory $BUILDROOT/$PROJECT.tmp/usr/share/doc/$PROJECT\n";
|
||||
$ret=`mkdir -p "$BUILDROOT/$PROJECT.tmp/usr/share/doc/$PROJECT"`;
|
||||
|
||||
print "Copy README file into $BUILDROOT/$PROJECT.tmp/DEBIAN\n";
|
||||
$ret=`cp "$SOURCE/README" "$BUILDROOT/$PROJECT.tmp/DEBIAN/README"`;
|
||||
$ret=`cp "$SOURCE/README" "$BUILDROOT/$PROJECT.tmp/usr/share/doc/$PROJECT/README"`;
|
||||
|
||||
print "Copy copyright file into $BUILDROOT/$PROJECT.tmp/DEBIAN\n";
|
||||
$ret=`cp "$SOURCE/COPYRIGHT" "$BUILDROOT/$PROJECT.tmp/DEBIAN/copyright"`;
|
||||
print "Copy copyright file into $BUILDROOT/$PROJECT.tmp/usr/share/doc/$PROJECT/copyright\n";
|
||||
$ret=`cp "$BUILDROOT/$PROJECT.tmp/DEBIAN/copyright" "$BUILDROOT/$PROJECT.tmp/usr/share/doc/$PROJECT/copyright"`;
|
||||
|
||||
print "Create directory $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/documents\n";
|
||||
$ret=`mkdir -p "$BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/documents"`;
|
||||
#$ret=`gzip -9 -c $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/ChangeLog > $BUILDROOT/$PROJECT.tmp/usr/share/doc/$PROJECT/changelog.Debian.gz`;
|
||||
$ret=`gzip -9 -c $BUILDROOT/$PROJECT.tmp/DEBIAN/changelog > $BUILDROOT/$PROJECT.tmp/usr/share/doc/$PROJECT/changelog.Debian.gz`;
|
||||
|
||||
print "Set permissions/owners on files/dir\n";
|
||||
print "Set owners on files/dir\n";
|
||||
$ret=`chown -R root.root $BUILDROOT/$PROJECT.tmp`;
|
||||
$ret=`chown -R www-data.www-data $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/documents`;
|
||||
$ret=`chmod -R 555 $BUILDROOT/$PROJECT.tmp`;
|
||||
$ret=`chmod 755 $BUILDROOT/$PROJECT.tmp`;
|
||||
$ret=`chmod -R 755 $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/documents`;
|
||||
$ret=`chmod -R 755 $BUILDROOT/$PROJECT.tmp/DEBIAN`;
|
||||
|
||||
print "Set permissions on files/dir\n";
|
||||
$ret=`chmod -R 755 $BUILDROOT/$PROJECT.tmp`;
|
||||
$cmd="find $BUILDROOT/$PROJECT.tmp -type f -exec chmod 644 {} \\; ";
|
||||
$ret=`$cmd`;
|
||||
$cmd="find $BUILDROOT/$PROJECT.tmp/DEBIAN -type f -exec chmod 755 {} \\; ";
|
||||
$ret=`$cmd`;
|
||||
$ret=`chmod 644 $BUILDROOT/$PROJECT.tmp/DEBIAN/control`;
|
||||
$ret=`chmod 644 $BUILDROOT/$PROJECT.tmp/DEBIAN/templates`;
|
||||
$cmd="find $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/build -name *.php -type f -exec chmod 755 {} \\; ";
|
||||
$ret=`$cmd`;
|
||||
#$cmd="find $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/build -name *.pl -type f -exec chmod 755 {} \\; ";
|
||||
#$ret=`$cmd`;
|
||||
$cmd="find $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/dev -name *.php -type f -exec chmod 755 {} \\; ";
|
||||
$ret=`$cmd`;
|
||||
$cmd="find $BUILDROOT/$PROJECT.tmp/usr/share/$PROJECT/scripts -name *.php -type f -exec chmod 755 {} \\; ";
|
||||
$ret=`$cmd`;
|
||||
|
||||
print "Go to directory $BUILDROOT\n";
|
||||
$olddir=getcwd();
|
||||
chdir("$BUILDROOT");
|
||||
|
||||
@ -4,9 +4,9 @@
|
||||
<CompanyName />
|
||||
<Program_Info>
|
||||
<Program_Name>DoliWamp</Program_Name>
|
||||
<Program_Version>3.0.0</Program_Version>
|
||||
<Program_Release_Month>01</Program_Release_Month>
|
||||
<Program_Release_Day>16</Program_Release_Day>
|
||||
<Program_Version>3.1.0</Program_Version>
|
||||
<Program_Release_Month>07</Program_Release_Month>
|
||||
<Program_Release_Day>09</Program_Release_Day>
|
||||
<Program_Release_Year>2011</Program_Release_Year>
|
||||
<Program_Cost_Dollars />
|
||||
<Program_Cost_Other_Code />
|
||||
@ -14,7 +14,7 @@
|
||||
<Program_Type>Freeware</Program_Type>
|
||||
<Program_Release_Status>Major Update</Program_Release_Status>
|
||||
<Program_Install_Support>Install and Uninstall</Program_Install_Support>
|
||||
<Program_OS_Support>Win2000,Win7 x32,Win7 x64,Win98,WinOther,WinServer,WinVista,WinVista x64,WinXP</Program_OS_Support>
|
||||
<Program_OS_Support>Win2000,Win7 x32,Win7 x64,Win98,WinOther,WinServer,WinVista,WinVista x64,WinXP,Other</Program_OS_Support>
|
||||
<Program_Language>English,Arabic,Catalan,Chinese,Dutch,Finnish,French,German,Icelandic,Italian,Norwegian,Polish,Portuguese,Romanian,Russian,Slovenian,Spanish,Swedish,Turkish</Program_Language>
|
||||
<Program_Change_Info>http://www.dolibarr.org</Program_Change_Info>
|
||||
<Program_Specific_Category>Business</Program_Specific_Category>
|
||||
@ -42,16 +42,25 @@
|
||||
<Char_Desc_80>DoliWamp, the easy to use Dolibarr for Windows to manage your company,foundation</Char_Desc_80>
|
||||
<Char_Desc_250>DoliWamp is the Dolibarr ERP/CRM for Windows, the easy to use open source software to manage your activity (invoices, customers, suppliers, contracts, agenda, emailings...) and any other things a small or mid-sized business or a foundation needs.</Char_Desc_250>
|
||||
<Char_Desc_450>DoliWamp is the Dolibarr ERP/CRM autoinstaller for Windows users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. Dolibarr ERP/CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations.</Char_Desc_450>
|
||||
<Char_Desc_2000>DoliWamp is the Dolibarr ERP/CRM for Windows.
|
||||
|
||||
Dolibarr ERP & CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations (You can manage or follow contacts, invoices, orders, commercial proposals, products, stock management, agenda, mass emailings, members of a foundation, bank accounts...).
|
||||
|
||||
It's an OpenSource project, based on a WAMP, MAMP or LAMP server (Apache, Mysql, PHP for all Operating Systems). Dolibarr differs from other ERP or CRM softwares (like OpenAguila, OpenBravo, OpenERP, Neogia, Compiere, etc) because everything was made to be more simple: Simple to install, Simple to use, Simple to develop.
|
||||
|
||||
DoliWamp is the auto-installer for Windows users with no technical knowledge to install Dolibarr ERP/CRM and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file.
|
||||
|
||||
</Char_Desc_2000>
|
||||
<Char_Desc_2000>DoliWamp is the Dolibarr ERP/CRM for Windows. Dolibarr ERP & CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations (You can manage or follow contacts, invoices, orders, commercial proposals, products, stock management, agenda, mass emailings, members of a foundation, bank accounts...). Based on a WAMP, MAMP or LAMP server (Apache, Mysql, PHP for all Operating Systems), you can install it as a standalone program or use it from anywhere with any web browser. Dolibarr is an OpenSource project. It differs from other ERP or CRM softwares (like OpenAguila, OpenBravo, OpenERP, Neogia, Compiere, etc) because everything was made to be more simple: Simple to install, Simple to use, Simple to develop.
|
||||
DoliWamp is the auto-installer for Windows users with no technical knowledge to install Dolibarr ERP/CRM and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file.</Char_Desc_2000>
|
||||
</English>
|
||||
<French>
|
||||
<Keywords>doliwamp, dolibarr, erp, crm, factures, devis, facturation, commandes, compta, trésorerie, stocks, produits, agenda, comptes bancaires, associations, entreprises, PME, TPE</Keywords>
|
||||
<Char_Desc_45>DoliWamp, Dolibarr ERP/CRM pour Windows</Char_Desc_45>
|
||||
<Char_Desc_80>DoliWamp, la distribution de Dolibarr pour gérer votre entreprise ou association</Char_Desc_80>
|
||||
<Char_Desc_250>DoliWamp est la version spécialisée pour Windows de Dolibarr ERP-CRM, le logiciel simple et OpenSource pour gérer votre activité (factures, devis, facturation, commandes, compta, trésorerie, stocks, produits, agenda, comptes bancaires, associations)</Char_Desc_250>
|
||||
<Char_Desc_450>DoliWamp est la version spécialisée pour Windows de Dolibarr ERP-CRM, le logiciel simple et OpenSource pour gérer votre activité (factures, devis, facturation, commandes, compta, trésorerie, stocks, produits, agenda, comptes bancaires, associations)</Char_Desc_450>
|
||||
<Char_Desc_2000>DoliWamp est la version spécialisée pour Windows de Dolibarr ERP-CRM, le logiciel simple et OpenSource pour gérer votre activité (factures, devis, facturation, commandes, compta, trésorerie, stocks, produits, agenda, comptes bancaires, associations)</Char_Desc_2000>
|
||||
</French>
|
||||
<Italian>
|
||||
<Keywords>doliwamp, dolibarr, erp, crm, gestionale, medie imprese, fondazioni</Keywords>
|
||||
<Char_Desc_45>DoliWamp, Dolibarr ERP/CRM per Windows</Char_Desc_45>
|
||||
<Char_Desc_80>Gestionale open source e gratuito per piccole e medie imprese, fondazioni</Char_Desc_80>
|
||||
<Char_Desc_250>Dolibarr è un a gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività.</Char_Desc_250>
|
||||
<Char_Desc_450>Dolibarr è un programma gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività. Dolibar è progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare.</Char_Desc_450>
|
||||
<Char_Desc_2000>Dolibarr è un programma gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività. Dolibar è progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare. Dolibar è completamente web-based, progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare.</Char_Desc_2000>
|
||||
</Italian>
|
||||
</Program_Descriptions>
|
||||
<Web_Info>
|
||||
<Application_URLs>
|
||||
@ -72,11 +81,6 @@ DoliWamp is the auto-installer for Windows users with no technical knowledge to
|
||||
<Distribution_Permissions>GNU GPL</Distribution_Permissions>
|
||||
<EULA>GNU GPL</EULA>
|
||||
</Permissions>
|
||||
<ASP>
|
||||
<ASP_FORM>Y</ASP_FORM>
|
||||
<ASP_Member>N</ASP_Member>
|
||||
<ASP_Member_Number />
|
||||
</ASP>
|
||||
<Affiliates>
|
||||
<Affiliates_FORM>Y</Affiliates_FORM>
|
||||
<Affiliates_VERSION>1.4</Affiliates_VERSION>
|
||||
@ -183,4 +187,9 @@ DoliWamp is the auto-installer for Windows users with no technical knowledge to
|
||||
<Affiliates_Yaskifo_Product_ID />
|
||||
<Affiliates_Yaskifo_Maximum_Commission_Rate />
|
||||
</Affiliates>
|
||||
<ASP>
|
||||
<ASP_FORM>Y</ASP_FORM>
|
||||
<ASP_Member>N</ASP_Member>
|
||||
<ASP_Member_Number />
|
||||
</ASP>
|
||||
</PADGEN_PML>
|
||||
|
||||
@ -1,31 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<PADGEN_CML>
|
||||
<AppVerInfo>PADGen 3.0.1.38</AppVerInfo>
|
||||
<Company_Info>
|
||||
<Company_Name>Dolibarr team</Company_Name>
|
||||
<Address_1>61 Boulevard Vauban</Address_1>
|
||||
<Address_2 />
|
||||
<City_Town>Montigny-le-Bretonneux</City_Town>
|
||||
<State_Province />
|
||||
<Zip_Postal_Code>78180</Zip_Postal_Code>
|
||||
<Country>FRANCE</Country>
|
||||
<Company_WebSite_URL>http://www.dolibarr.org</Company_WebSite_URL>
|
||||
<Contact_Info>
|
||||
<Author_First_Name>Dolibarr team</Author_First_Name>
|
||||
<Author_Last_Name>Dolibarr team</Author_Last_Name>
|
||||
<Author_Email>dolibarr-dev@nongnu.org</Author_Email>
|
||||
<Contact_First_Name>Dolibarr team</Contact_First_Name>
|
||||
<Contact_Last_Name>Dolibarr team</Contact_Last_Name>
|
||||
<Contact_Email>dolibarr-dev@nongnu.org</Contact_Email>
|
||||
</Contact_Info>
|
||||
<Support_Info>
|
||||
<Sales_Email>dolibarr-dev@nongnu.org</Sales_Email>
|
||||
<Support_Email>dolibarr-dev@nongnu.org</Support_Email>
|
||||
<General_Email>dolibarr-dev@nongnu.org</General_Email>
|
||||
<Sales_Phone />
|
||||
<Support_Phone />
|
||||
<General_Phone />
|
||||
<Fax_Phone />
|
||||
</Support_Info>
|
||||
</Company_Info>
|
||||
</PADGEN_CML>
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<PADGEN_CML>
|
||||
<AppVerInfo>PADGen 3.1.1.47</AppVerInfo>
|
||||
<Company_Info>
|
||||
<Company_Name>Dolibarr team</Company_Name>
|
||||
<Address_1>11 rue raymond Queneau</Address_1>
|
||||
<Address_2 />
|
||||
<City_Town>Rueil Malmaison</City_Town>
|
||||
<State_Province />
|
||||
<Zip_Postal_Code>92500</Zip_Postal_Code>
|
||||
<Country>FRANCE</Country>
|
||||
<Company_WebSite_URL>http://www.dolibarr.org</Company_WebSite_URL>
|
||||
<Contact_Info>
|
||||
<Author_First_Name>Dolibarr team</Author_First_Name>
|
||||
<Author_Last_Name>Dolibarr team</Author_Last_Name>
|
||||
<Author_Email>dolibarr-dev@nongnu.org</Author_Email>
|
||||
<Contact_First_Name>Dolibarr team</Contact_First_Name>
|
||||
<Contact_Last_Name>Dolibarr team</Contact_Last_Name>
|
||||
<Contact_Email>dolibarr-dev@nongnu.org</Contact_Email>
|
||||
</Contact_Info>
|
||||
<Support_Info>
|
||||
<Sales_Email>dolibarr-dev@nongnu.org</Sales_Email>
|
||||
<Support_Email>dolibarr-dev@nongnu.org</Support_Email>
|
||||
<General_Email>dolibarr-dev@nongnu.org</General_Email>
|
||||
<Sales_Phone />
|
||||
<Support_Phone />
|
||||
<General_Phone />
|
||||
<Fax_Phone />
|
||||
</Support_Info>
|
||||
</Company_Info>
|
||||
</PADGEN_CML>
|
||||
|
||||
@ -4,9 +4,9 @@
|
||||
<CompanyName />
|
||||
<Program_Info>
|
||||
<Program_Name>Dolibarr</Program_Name>
|
||||
<Program_Version>3.0.0</Program_Version>
|
||||
<Program_Release_Month>01</Program_Release_Month>
|
||||
<Program_Release_Day>16</Program_Release_Day>
|
||||
<Program_Version>3.1..0</Program_Version>
|
||||
<Program_Release_Month>07</Program_Release_Month>
|
||||
<Program_Release_Day>09</Program_Release_Day>
|
||||
<Program_Release_Year>2011</Program_Release_Year>
|
||||
<Program_Cost_Dollars />
|
||||
<Program_Cost_Other_Code />
|
||||
@ -38,28 +38,36 @@
|
||||
<Program_Descriptions>
|
||||
<English>
|
||||
<Keywords>dolibarr, erp, crm, invoices, commercial proposals, orders, accounting, stock, products, agenda, bank, business, company, foundation, management, sme, doliwamp</Keywords>
|
||||
<Char_Desc_45>Dolibarr ERP/CRM</Char_Desc_45>
|
||||
<Char_Desc_80>Dolibarr ERP/CRM, the easy to use open source software to manage your activity</Char_Desc_80>
|
||||
<Char_Desc_250>Dolibarr ERP/CRM, the easy to use open source software to manage your activity (invoices, customers, suppliers, contracts, agenda, emailings...) and any other things a small or mid-sized business or a foundation needs to follow.</Char_Desc_250>
|
||||
<Char_Desc_450>Dolibarr ERP/CRM is a software built by modules addition (you enable only features you need), to manage small or medium companies, freelancers or foundations. We can say Dolibarr is an ERP or CRM. Dolibarr is also available with an auto-installer for Windows users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. See DoliWamp software for this.</Char_Desc_450>
|
||||
<Char_Desc_2000>Dolibarr ERP/CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations. We can say Dolibarr is an ERP or CRM (or both depending on activated modules).
|
||||
|
||||
|
||||
|
||||
It's an OpenSource project base on a WAMP, MAMP or LAMP server (Apache, Mysql, PHP for all Operating Systems). Dolibarr differs from other ERP or CRM softwares (like OpenAguila, OpenBravo, OpenERP, Neogia, Compiere, etc) because everything was made to be more simple:
|
||||
|
||||
|
||||
|
||||
* Simple to install
|
||||
|
||||
* Simple to use
|
||||
|
||||
* Simple to develop
|
||||
|
||||
|
||||
|
||||
<Char_Desc_45>Dolibarr ERP & CRM</Char_Desc_45>
|
||||
<Char_Desc_80>Dolibarr ERP & CRM, the easy to use open source software to manage your activity</Char_Desc_80>
|
||||
<Char_Desc_250>Dolibarr ERP & CRM, the easy to use open source software to manage your activity (invoices, customers, suppliers, contracts, agenda, emailings...) and any other things a small or mid-sized business or a foundation needs to follow.</Char_Desc_250>
|
||||
<Char_Desc_450>Dolibarr ERP & CRM is a software built by modules addition (you enable only features you need), to manage small or medium companies, freelancers or foundations. We can say Dolibarr is an ERP or CRM. Dolibarr is also available with an auto-installer for Windows users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. See DoliWamp software for this.</Char_Desc_450>
|
||||
<Char_Desc_2000>Dolibarr ERP & CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations. We can say Dolibarr is an ERP or CRM (or both depending on activated modules). It's an OpenSource project base on a WAMP, MAMP or LAMP server (Apache, Mysql, PHP for all Operating Systems). Dolibarr differs from other ERP or CRM softwares (like OpenAguila, OpenBravo, OpenERP, Neogia, Compiere, etc) because everything was made to be more simple:
|
||||
Simple to install
|
||||
Simple to use
|
||||
Simple to develop
|
||||
Note that Dolibarr is also available with an auto-installer for Windows or Ubuntu users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. This version is called DoliWamp (for Windows) or DoliBuntu (for Ubuntu/Debian).</Char_Desc_2000>
|
||||
</English>
|
||||
<Italian>
|
||||
<Keywords>erp, crm, gestionale, medie imprese, fondazioni</Keywords>
|
||||
<Char_Desc_45>Gestionale open source e gratuito</Char_Desc_45>
|
||||
<Char_Desc_80>Gestionale open source e gratuito per piccole e medie imprese, fondazioni</Char_Desc_80>
|
||||
<Char_Desc_250>Dolibarr è un a gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività.</Char_Desc_250>
|
||||
<Char_Desc_450>Dolibarr è un programma gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività. Dolibar è progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare.</Char_Desc_450>
|
||||
<Char_Desc_2000>Dolibarr è un programma gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività. Dolibar è progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare. Dolibar è completamente web-based, progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare.</Char_Desc_2000>
|
||||
</Italian>
|
||||
<French>
|
||||
<Keywords>dolibarr, erp, crm, invoices, commercial proposals, orders, accounting, stock, products, agenda, bank, business, company, foundation, management, sme, doliwamp</Keywords>
|
||||
<Char_Desc_45>Dolibarr ERP & CRM</Char_Desc_45>
|
||||
<Char_Desc_80>Dolibarr ERP & CRM, le gestionnaire simple pour gérer votre activité</Char_Desc_80>
|
||||
<Char_Desc_250>Dolibarr ERP & CRM, le logiciel simple et OpenSource pour gérer votre activité (factures, devis, facturation, commandes, compta, trésorerie, stocks, produits, agenda, comptes bancaires, associations)</Char_Desc_250>
|
||||
<Char_Desc_450>Dolibarr ERP/CRM est un logiciel modulaire (on n'active que les fonctions que l'on désire) de gestions de TPE/PME, d'indépendants, d'entrepreneurs ou d'associations. En terme plus techniques, c'est un ERP et CRM. C'est un projet OpenSource qui s'exécute au sein d'un serveur Web et peut donc être accessible depuis n'importe quel lieu disposant d'une connexion Internet (Projet basé sur un serveur WAMP, MAMP ou LAMP: Apache, MySQL, PHP).</Char_Desc_450>
|
||||
<Char_Desc_2000>Dolibarr ERP/CRM est un logiciel modulaire (on n'active que les fonctions que l'on désire) de gestions de TPE/PME, d'indépendants, d'entrepreneurs ou d'associations. En terme plus techniques, c'est un ERP et CRM. C'est un projet OpenSource qui s'exécute au sein d'un serveur Web et peut donc être accessible depuis n'importe quel lieu disposant d'une connexion Internet (Projet basé sur un serveur WAMP, MAMP ou LAMP: Apache, MySQL, PHP). Dolibarr vient compléter les offres déjà nombreuses de logiciels de cette catégorie (comme OpenBravo, OpenERP, SugarCRM, Neogia, Compiere, etc.) mais se démarque par le fait qu'ici tout est fait pour offrir de la simplicité (règle des 3 S):
|
||||
Simple pour l'installation (avec au choix des installeurs clé en main pour ceux qui ignorent comment installer un serveur Web, ou une installation manuelle)
|
||||
Simple pour l'utilisation (fonctions modulaires pour ne pas surcharger les menus, informations claires à la saisie)
|
||||
Simple pour le développement (pas de frameworks lourds).
|
||||
Dolibarr intègre en effet sa propre architecture (design patterns) permettant à tout développeur d'être tout de suite opérationnel sans connaissances particulières autre que le PHP. </Char_Desc_2000>
|
||||
</French>
|
||||
</Program_Descriptions>
|
||||
<Web_Info>
|
||||
<Application_URLs>
|
||||
@ -80,11 +88,6 @@ Note that Dolibarr is also available with an auto-installer for Windows or Ubunt
|
||||
<Distribution_Permissions>GNU GPL</Distribution_Permissions>
|
||||
<EULA>GNU GPL</EULA>
|
||||
</Permissions>
|
||||
<ASP>
|
||||
<ASP_FORM>Y</ASP_FORM>
|
||||
<ASP_Member>N</ASP_Member>
|
||||
<ASP_Member_Number />
|
||||
</ASP>
|
||||
<Affiliates>
|
||||
<Affiliates_FORM>Y</Affiliates_FORM>
|
||||
<Affiliates_VERSION>1.4</Affiliates_VERSION>
|
||||
@ -191,4 +194,9 @@ Note that Dolibarr is also available with an auto-installer for Windows or Ubunt
|
||||
<Affiliates_Yaskifo_Product_ID />
|
||||
<Affiliates_Yaskifo_Maximum_Commission_Rate />
|
||||
</Affiliates>
|
||||
<ASP>
|
||||
<ASP_FORM>Y</ASP_FORM>
|
||||
<ASP_Member>N</ASP_Member>
|
||||
<ASP_Member_Number />
|
||||
</ASP>
|
||||
</PADGEN_PML>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" ?>
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<XML_DIZ_INFO>
|
||||
<MASTER_PAD_VERSION_INFO>
|
||||
<MASTER_PAD_VERSION>3.11</MASTER_PAD_VERSION>
|
||||
@ -7,11 +7,11 @@
|
||||
</MASTER_PAD_VERSION_INFO>
|
||||
<Company_Info>
|
||||
<Company_Name>Dolibarr team</Company_Name>
|
||||
<Address_1>61 Boulevard Vauban</Address_1>
|
||||
<Address_1>11 rue raymond Queneau</Address_1>
|
||||
<Address_2 />
|
||||
<City_Town>Montigny-le-Bretonneux</City_Town>
|
||||
<City_Town>Rueil Malmaison</City_Town>
|
||||
<State_Province />
|
||||
<Zip_Postal_Code>78180</Zip_Postal_Code>
|
||||
<Zip_Postal_Code>92500</Zip_Postal_Code>
|
||||
<Country>FRANCE</Country>
|
||||
<Company_WebSite_URL>http://www.dolibarr.org</Company_WebSite_URL>
|
||||
<Contact_Info>
|
||||
@ -34,9 +34,9 @@
|
||||
</Company_Info>
|
||||
<Program_Info>
|
||||
<Program_Name>Dolibarr</Program_Name>
|
||||
<Program_Version>3.0.0</Program_Version>
|
||||
<Program_Release_Month>01</Program_Release_Month>
|
||||
<Program_Release_Day>16</Program_Release_Day>
|
||||
<Program_Version>3.1..0</Program_Version>
|
||||
<Program_Release_Month>07</Program_Release_Month>
|
||||
<Program_Release_Day>09</Program_Release_Day>
|
||||
<Program_Release_Year>2011</Program_Release_Year>
|
||||
<Program_Cost_Dollars />
|
||||
<Program_Cost_Other_Code />
|
||||
@ -68,44 +68,36 @@
|
||||
<Program_Descriptions>
|
||||
<English>
|
||||
<Keywords>dolibarr, erp, crm, invoices, commercial proposals, orders, accounting, stock, products, agenda, bank, business, company, foundation, management, sme, doliwamp</Keywords>
|
||||
<Char_Desc_45>Dolibarr ERP/CRM</Char_Desc_45>
|
||||
<Char_Desc_80>Dolibarr ERP/CRM, the easy to use open source software to manage your activity</Char_Desc_80>
|
||||
<Char_Desc_250>Dolibarr ERP/CRM, the easy to use open source software to manage your activity (invoices, customers, suppliers, contracts, agenda, emailings...) and any other things a small or mid-sized business or a foundation needs to follow.</Char_Desc_250>
|
||||
<Char_Desc_450>Dolibarr ERP/CRM is a software built by modules addition (you enable only features you need), to manage small or medium companies, freelancers or foundations. We can say Dolibarr is an ERP or CRM. Dolibarr is also available with an auto-installer for Windows users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. See DoliWamp software for this.</Char_Desc_450>
|
||||
<Char_Desc_2000>Dolibarr ERP/CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations. We can say Dolibarr is an ERP or CRM (or both depending on activated modules).
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
It's an OpenSource project base on a WAMP, MAMP or LAMP server (Apache, Mysql, PHP for all Operating Systems). Dolibarr differs from other ERP or CRM softwares (like OpenAguila, OpenBravo, OpenERP, Neogia, Compiere, etc) because everything was made to be more simple:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
* Simple to install
|
||||
|
||||
|
||||
|
||||
* Simple to use
|
||||
|
||||
|
||||
|
||||
* Simple to develop
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<Char_Desc_45>Dolibarr ERP & CRM</Char_Desc_45>
|
||||
<Char_Desc_80>Dolibarr ERP & CRM, the easy to use open source software to manage your activity</Char_Desc_80>
|
||||
<Char_Desc_250>Dolibarr ERP & CRM, the easy to use open source software to manage your activity (invoices, customers, suppliers, contracts, agenda, emailings...) and any other things a small or mid-sized business or a foundation needs to follow.</Char_Desc_250>
|
||||
<Char_Desc_450>Dolibarr ERP & CRM is a software built by modules addition (you enable only features you need), to manage small or medium companies, freelancers or foundations. We can say Dolibarr is an ERP or CRM. Dolibarr is also available with an auto-installer for Windows users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. See DoliWamp software for this.</Char_Desc_450>
|
||||
<Char_Desc_2000>Dolibarr ERP & CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations. We can say Dolibarr is an ERP or CRM (or both depending on activated modules). It's an OpenSource project base on a WAMP, MAMP or LAMP server (Apache, Mysql, PHP for all Operating Systems). Dolibarr differs from other ERP or CRM softwares (like OpenAguila, OpenBravo, OpenERP, Neogia, Compiere, etc) because everything was made to be more simple:
|
||||
Simple to install
|
||||
Simple to use
|
||||
Simple to develop
|
||||
Note that Dolibarr is also available with an auto-installer for Windows or Ubuntu users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. This version is called DoliWamp (for Windows) or DoliBuntu (for Ubuntu/Debian).</Char_Desc_2000>
|
||||
</English>
|
||||
<French>
|
||||
<Keywords>dolibarr, erp, crm, invoices, commercial proposals, orders, accounting, stock, products, agenda, bank, business, company, foundation, management, sme, doliwamp</Keywords>
|
||||
<Char_Desc_45>Dolibarr ERP & CRM</Char_Desc_45>
|
||||
<Char_Desc_80>Dolibarr ERP & CRM, le gestionnaire simple pour gérer votre activité</Char_Desc_80>
|
||||
<Char_Desc_250>Dolibarr ERP & CRM, le logiciel simple et OpenSource pour gérer votre activité (factures, devis, facturation, commandes, compta, trésorerie, stocks, produits, agenda, comptes bancaires, associations)</Char_Desc_250>
|
||||
<Char_Desc_450>Dolibarr ERP/CRM est un logiciel modulaire (on n'active que les fonctions que l'on désire) de gestions de TPE/PME, d'indépendants, d'entrepreneurs ou d'associations. En terme plus techniques, c'est un ERP et CRM. C'est un projet OpenSource qui s'exécute au sein d'un serveur Web et peut donc être accessible depuis n'importe quel lieu disposant d'une connexion Internet (Projet basé sur un serveur WAMP, MAMP ou LAMP: Apache, MySQL, PHP).</Char_Desc_450>
|
||||
<Char_Desc_2000>Dolibarr ERP/CRM est un logiciel modulaire (on n'active que les fonctions que l'on désire) de gestions de TPE/PME, d'indépendants, d'entrepreneurs ou d'associations. En terme plus techniques, c'est un ERP et CRM. C'est un projet OpenSource qui s'exécute au sein d'un serveur Web et peut donc être accessible depuis n'importe quel lieu disposant d'une connexion Internet (Projet basé sur un serveur WAMP, MAMP ou LAMP: Apache, MySQL, PHP). Dolibarr vient compléter les offres déjà nombreuses de logiciels de cette catégorie (comme OpenBravo, OpenERP, SugarCRM, Neogia, Compiere, etc.) mais se démarque par le fait qu'ici tout est fait pour offrir de la simplicité (règle des 3 S):
|
||||
Simple pour l'installation (avec au choix des installeurs clé en main pour ceux qui ignorent comment installer un serveur Web, ou une installation manuelle)
|
||||
Simple pour l'utilisation (fonctions modulaires pour ne pas surcharger les menus, informations claires à la saisie)
|
||||
Simple pour le développement (pas de frameworks lourds).
|
||||
Dolibarr intègre en effet sa propre architecture (design patterns) permettant à tout développeur d'être tout de suite opérationnel sans connaissances particulières autre que le PHP. </Char_Desc_2000>
|
||||
</French>
|
||||
<Italian>
|
||||
<Keywords>erp, crm, gestionale, medie imprese, fondazioni</Keywords>
|
||||
<Char_Desc_45>Gestionale open source e gratuito</Char_Desc_45>
|
||||
<Char_Desc_80>Gestionale open source e gratuito per piccole e medie imprese, fondazioni</Char_Desc_80>
|
||||
<Char_Desc_250>Dolibarr è un a gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività.</Char_Desc_250>
|
||||
<Char_Desc_450>Dolibarr è un programma gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività. Dolibar è progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare.</Char_Desc_450>
|
||||
<Char_Desc_2000>Dolibarr è un programma gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività. Dolibar è progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare. Dolibar è completamente web-based, progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare.</Char_Desc_2000>
|
||||
</Italian>
|
||||
</Program_Descriptions>
|
||||
<Web_Info>
|
||||
<Application_URLs>
|
||||
@ -126,11 +118,6 @@ Note that Dolibarr is also available with an auto-installer for Windows or Ubunt
|
||||
<Distribution_Permissions>GNU GPL</Distribution_Permissions>
|
||||
<EULA>GNU GPL</EULA>
|
||||
</Permissions>
|
||||
<ASP>
|
||||
<ASP_FORM>Y</ASP_FORM>
|
||||
<ASP_Member>N</ASP_Member>
|
||||
<ASP_Member_Number />
|
||||
</ASP>
|
||||
<Affiliates>
|
||||
<Affiliates_FORM>Y</Affiliates_FORM>
|
||||
<Affiliates_VERSION>1.4</Affiliates_VERSION>
|
||||
@ -237,4 +224,9 @@ Note that Dolibarr is also available with an auto-installer for Windows or Ubunt
|
||||
<Affiliates_Yaskifo_Product_ID />
|
||||
<Affiliates_Yaskifo_Maximum_Commission_Rate />
|
||||
</Affiliates>
|
||||
<ASP>
|
||||
<ASP_FORM>Y</ASP_FORM>
|
||||
<ASP_Member>N</ASP_Member>
|
||||
<ASP_Member_Number />
|
||||
</ASP>
|
||||
</XML_DIZ_INFO>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" ?>
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<XML_DIZ_INFO>
|
||||
<MASTER_PAD_VERSION_INFO>
|
||||
<MASTER_PAD_VERSION>3.11</MASTER_PAD_VERSION>
|
||||
@ -34,9 +34,9 @@
|
||||
</Company_Info>
|
||||
<Program_Info>
|
||||
<Program_Name>DoliWamp</Program_Name>
|
||||
<Program_Version>3.0.0</Program_Version>
|
||||
<Program_Release_Month>01</Program_Release_Month>
|
||||
<Program_Release_Day>16</Program_Release_Day>
|
||||
<Program_Version>3.1.0</Program_Version>
|
||||
<Program_Release_Month>07</Program_Release_Month>
|
||||
<Program_Release_Day>09</Program_Release_Day>
|
||||
<Program_Release_Year>2011</Program_Release_Year>
|
||||
<Program_Cost_Dollars />
|
||||
<Program_Cost_Other_Code />
|
||||
@ -44,7 +44,7 @@
|
||||
<Program_Type>Freeware</Program_Type>
|
||||
<Program_Release_Status>Major Update</Program_Release_Status>
|
||||
<Program_Install_Support>Install and Uninstall</Program_Install_Support>
|
||||
<Program_OS_Support>Win2000,Win7 x32,Win7 x64,Win98,WinOther,WinServer,WinVista,WinVista x64,WinXP</Program_OS_Support>
|
||||
<Program_OS_Support>Win2000,Win7 x32,Win7 x64,Win98,WinOther,WinServer,WinVista,WinVista x64,WinXP,Other</Program_OS_Support>
|
||||
<Program_Language>English,Arabic,Catalan,Chinese,Dutch,Finnish,French,German,Icelandic,Italian,Norwegian,Polish,Portuguese,Romanian,Russian,Slovenian,Spanish,Swedish,Turkish</Program_Language>
|
||||
<Program_Change_Info>http://www.dolibarr.org</Program_Change_Info>
|
||||
<Program_Specific_Category>Business</Program_Specific_Category>
|
||||
@ -72,16 +72,25 @@
|
||||
<Char_Desc_80>DoliWamp, the easy to use Dolibarr for Windows to manage your company,foundation</Char_Desc_80>
|
||||
<Char_Desc_250>DoliWamp is the Dolibarr ERP/CRM for Windows, the easy to use open source software to manage your activity (invoices, customers, suppliers, contracts, agenda, emailings...) and any other things a small or mid-sized business or a foundation needs.</Char_Desc_250>
|
||||
<Char_Desc_450>DoliWamp is the Dolibarr ERP/CRM autoinstaller for Windows users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. Dolibarr ERP/CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations.</Char_Desc_450>
|
||||
<Char_Desc_2000>DoliWamp is the Dolibarr ERP/CRM for Windows.
|
||||
|
||||
Dolibarr ERP & CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations (You can manage or follow contacts, invoices, orders, commercial proposals, products, stock management, agenda, mass emailings, members of a foundation, bank accounts...).
|
||||
|
||||
It's an OpenSource project, based on a WAMP, MAMP or LAMP server (Apache, Mysql, PHP for all Operating Systems). Dolibarr differs from other ERP or CRM softwares (like OpenAguila, OpenBravo, OpenERP, Neogia, Compiere, etc) because everything was made to be more simple: Simple to install, Simple to use, Simple to develop.
|
||||
|
||||
DoliWamp is the auto-installer for Windows users with no technical knowledge to install Dolibarr ERP/CRM and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file.
|
||||
|
||||
</Char_Desc_2000>
|
||||
<Char_Desc_2000>DoliWamp is the Dolibarr ERP/CRM for Windows. Dolibarr ERP & CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations (You can manage or follow contacts, invoices, orders, commercial proposals, products, stock management, agenda, mass emailings, members of a foundation, bank accounts...). Based on a WAMP, MAMP or LAMP server (Apache, Mysql, PHP for all Operating Systems), you can install it as a standalone program or use it from anywhere with any web browser. Dolibarr is an OpenSource project. It differs from other ERP or CRM softwares (like OpenAguila, OpenBravo, OpenERP, Neogia, Compiere, etc) because everything was made to be more simple: Simple to install, Simple to use, Simple to develop.
|
||||
DoliWamp is the auto-installer for Windows users with no technical knowledge to install Dolibarr ERP/CRM and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file.</Char_Desc_2000>
|
||||
</English>
|
||||
<French>
|
||||
<Keywords>doliwamp, dolibarr, erp, crm, factures, devis, facturation, commandes, compta, trésorerie, stocks, produits, agenda, comptes bancaires, associations, entreprises, PME, TPE</Keywords>
|
||||
<Char_Desc_45>DoliWamp, Dolibarr ERP/CRM pour Windows</Char_Desc_45>
|
||||
<Char_Desc_80>DoliWamp, la distribution de Dolibarr pour gérer votre entreprise ou association</Char_Desc_80>
|
||||
<Char_Desc_250>DoliWamp est la version spécialisée pour Windows de Dolibarr ERP-CRM, le logiciel simple et OpenSource pour gérer votre activité (factures, devis, facturation, commandes, compta, trésorerie, stocks, produits, agenda, comptes bancaires, associations)</Char_Desc_250>
|
||||
<Char_Desc_450>DoliWamp est la version spécialisée pour Windows de Dolibarr ERP-CRM, le logiciel simple et OpenSource pour gérer votre activité (factures, devis, facturation, commandes, compta, trésorerie, stocks, produits, agenda, comptes bancaires, associations)</Char_Desc_450>
|
||||
<Char_Desc_2000>DoliWamp est la version spécialisée pour Windows de Dolibarr ERP-CRM, le logiciel simple et OpenSource pour gérer votre activité (factures, devis, facturation, commandes, compta, trésorerie, stocks, produits, agenda, comptes bancaires, associations)</Char_Desc_2000>
|
||||
</French>
|
||||
<Italian>
|
||||
<Keywords>doliwamp, dolibarr, erp, crm, gestionale, medie imprese, fondazioni</Keywords>
|
||||
<Char_Desc_45>DoliWamp, Dolibarr ERP/CRM per Windows</Char_Desc_45>
|
||||
<Char_Desc_80>Gestionale open source e gratuito per piccole e medie imprese, fondazioni</Char_Desc_80>
|
||||
<Char_Desc_250>Dolibarr è un a gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività.</Char_Desc_250>
|
||||
<Char_Desc_450>Dolibarr è un programma gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività. Dolibar è progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare.</Char_Desc_450>
|
||||
<Char_Desc_2000>Dolibarr è un programma gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti. Include varie funzionalità per Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori attività. Dolibar è progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare. Dolibar è completamente web-based, progettato per poter fornire solo ciò di cui hai bisogno ed essere facile da usare.</Char_Desc_2000>
|
||||
</Italian>
|
||||
</Program_Descriptions>
|
||||
<Web_Info>
|
||||
<Application_URLs>
|
||||
@ -102,11 +111,6 @@ DoliWamp is the auto-installer for Windows users with no technical knowledge to
|
||||
<Distribution_Permissions>GNU GPL</Distribution_Permissions>
|
||||
<EULA>GNU GPL</EULA>
|
||||
</Permissions>
|
||||
<ASP>
|
||||
<ASP_FORM>Y</ASP_FORM>
|
||||
<ASP_Member>N</ASP_Member>
|
||||
<ASP_Member_Number />
|
||||
</ASP>
|
||||
<Affiliates>
|
||||
<Affiliates_FORM>Y</Affiliates_FORM>
|
||||
<Affiliates_VERSION>1.4</Affiliates_VERSION>
|
||||
@ -213,4 +217,9 @@ DoliWamp is the auto-installer for Windows users with no technical knowledge to
|
||||
<Affiliates_Yaskifo_Product_ID />
|
||||
<Affiliates_Yaskifo_Maximum_Commission_Rate />
|
||||
</Affiliates>
|
||||
<ASP>
|
||||
<ASP_FORM>Y</ASP_FORM>
|
||||
<ASP_Member>N</ASP_Member>
|
||||
<ASP_Member_Number />
|
||||
</ASP>
|
||||
</XML_DIZ_INFO>
|
||||
|
||||
@ -5,4 +5,20 @@ RPM Package tools
|
||||
|
||||
This directory contains files used by makepack-dolibarr.pl
|
||||
script to build a package, ready to be distributed,
|
||||
with format RPM (for Redhat, Mandriva, ...).
|
||||
with format RPM (for Redhat, Mandriva, ...).
|
||||
|
||||
|
||||
# This is standard command to work on Debian packaging:
|
||||
#
|
||||
# On Fedora
|
||||
# rpm -i --test dolibarr-...rpm To list dependencies of RPM
|
||||
# yum install dolibarr-...rpm To install package and dependencies
|
||||
# yum erase dolibarr To remove package
|
||||
#
|
||||
# On OpenSuse
|
||||
# yast --install dolibarr-...rpm To install package and dependencies
|
||||
# yast --remove dolibarr To remove package
|
||||
#
|
||||
# On Mageia (after su - root)
|
||||
# urpmi dolibarr-...rpm To install package and dependencies
|
||||
# urpme dolibarr To remove package
|
||||
26
build/rpm/dolibarr.desktop
Executable file
26
build/rpm/dolibarr.desktop
Executable file
@ -0,0 +1,26 @@
|
||||
[Desktop Entry]
|
||||
# This file is used to add Ubuntu menu entry
|
||||
# It must be saved into directory /usr/share/applications
|
||||
Version=1.0
|
||||
Encoding=UTF-8
|
||||
Name=Dolibarr ERP & CRM
|
||||
Name[fr]=Dolibarr ERP & CRM
|
||||
Name[it]=Dolibarr ERP & CRM
|
||||
GenericName=Dolibarr ERP & CRM
|
||||
Comment=The easy to use manager (ERP & CRM) for small and medium enterprises or foundations
|
||||
Comment[fr]=L'ERP & CRM simple pour la gestion des TPE, PME, associations et auto-entrepreneurs
|
||||
Comment[it]=Programma gestionale open source e gratuito per piccole e medie imprese, fondazioni e liberi professionisti
|
||||
Comment[es]=Software para gestión de PYMES, profesionales independientes, auto emprendedores ó asociaciones
|
||||
# Command to open an URL
|
||||
# For Fedora: xdg-open
|
||||
# For Debian/Ubuntu: x-www-browser
|
||||
# (exo-open for xfde, gnome-open for gnome, ...)
|
||||
Exec=xdg-open http://localhost/dolibarr
|
||||
Icon=dolibarr
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Office
|
||||
StartupNotify=true
|
||||
InitialPreference=5
|
||||
#NoDisplay=true
|
||||
#OnlyShowIn=GNOME
|
||||
@ -19,31 +19,67 @@ Packager: Laurent Destailleur (Eldy) <eldy@users.sourceforge.net>
|
||||
Vendor: Dolibarr dev team
|
||||
|
||||
URL: http://www.%{name}.org
|
||||
#Source: http://sourceforge.net/projects/%{name}/files/Dolibarr%20ERP-CRM/%{version}/%{name}-%{version}.tgz/download
|
||||
Source: /usr/src/RPM/SOURCES/%{name}-%{version}.tgz
|
||||
#BuildArch: noarch
|
||||
#BuildArchitectures: noarch
|
||||
BuildRoot: /tmp/%{name}-buildroot
|
||||
#Icon: dolibarr_logo1.gif
|
||||
|
||||
# For Mandrake
|
||||
# For Mandriva-Mageia
|
||||
Group: Networking/WWW
|
||||
# For all other distrib
|
||||
Group: Applications/Internet
|
||||
|
||||
# Requires can use lua to be defined dynamically (but still at build time)
|
||||
# %{lua: if posix.access("/aaa") then print("Requires: bidon1 mysql-server mysql httpd php php-cli php-gd php-ldap php-imap php-mysql") end }
|
||||
|
||||
# Requires for Fedora-Redhat
|
||||
Requires: mysql-server mysql httpd php php-cli php-gd php-ldap php-imap php-mysql
|
||||
AutoReqProv: yes
|
||||
# Requires for OpenSuse
|
||||
#Requires: mysql-community-server mysql-community-server-client apache2 apache2-mod_php5 php5 php5-gd php5-ldap php5-imap php5-mysql php5-openssl
|
||||
# Requires for Mandriva-Mageia
|
||||
#Requires: mysql mysql-client apache-base apache-mod_php php-cgi php-cli php-bz2 php-gd php-ldap php-imap php-mysqli php-openssl
|
||||
|
||||
#Requires(pre):
|
||||
#Requires(postun):
|
||||
|
||||
# Set yes to build test package, no for release (this disable need of /usr/bin/php not found by OpenSuse)
|
||||
AutoReqProv: no
|
||||
|
||||
|
||||
%description
|
||||
Dolibarr ERP & CRM
|
||||
Dolibarr ERP & CRM is an easy to use open source/free software for small
|
||||
and medium companies, foundations or freelances. It includes different
|
||||
features for Enterprise Resource Planning (ERP) and Customer Relationship
|
||||
Management (CRM) but also for different other activities.
|
||||
Dolibarr was designed to provide only features you need and be easy to
|
||||
use.
|
||||
|
||||
%description -l es
|
||||
Dolibarr ERP y CRM es un software open source/gratis para pequeñas y
|
||||
medianas empresas, asociaciones o autónomos. Incluye diferentes
|
||||
funcionalidades para la Planificación de Recursos Empresariales (ERP) y
|
||||
Gestión de la Relación con los Clientes (CRM) así como para para otras
|
||||
diferentes actividades. Dolibarr ha sido diseñado para suministrarle
|
||||
solamente las funcionalidades que necesita y haciendo hincapié en su
|
||||
facilidad de uso.
|
||||
|
||||
%description -l fr
|
||||
Dolibarr ERP & CRM est un logiciel de gestion de PME/PMI, autoentrepreneurs,
|
||||
artisans ou associations. Il permet de gérer vos clients, prospect,
|
||||
fournisseurs, devis, factures, comptes bancaires, agenda, campagne emailings
|
||||
et bien d'autres choses dans une interface pensée pour la simplicité.
|
||||
|
||||
%description -l it
|
||||
Dolibarr è un programma gestionale open source e gratuito per piccole e medie
|
||||
imprese, fondazioni e liberi professionisti. Include varie funzionalità per
|
||||
Enterprise Resource Planning e gestione dei clienti (CRM), ma anche ulteriori
|
||||
attività. Dolibar è progettato per poter fornire solo ciò di cui hai bisogno
|
||||
ed essere facile da usare.
|
||||
Dolibar è completamente web-based, progettato per poter fornire solo ciò di
|
||||
cui hai bisogno ed essere facile da usare.
|
||||
|
||||
|
||||
|
||||
#---- prep
|
||||
%prep
|
||||
@ -64,14 +100,17 @@ mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/build
|
||||
mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/doc
|
||||
mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/htdocs
|
||||
mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/scripts
|
||||
#mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/dolibarr
|
||||
#mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/cron.daily
|
||||
|
||||
install -m 444 README $RPM_BUILD_ROOT/var/www/dolibarr/README
|
||||
mkdir -p $RPM_BUILD_ROOT%{_datadir}/pixmaps
|
||||
cp doc/images/dolibarr_48x48.png $RPM_BUILD_ROOT%{_datadir}/pixmaps/dolibarr.png
|
||||
mkdir -p $RPM_BUILD_ROOT%{_datadir}/applications
|
||||
cp build/rpm/dolibarr.desktop $RPM_BUILD_ROOT/%{_datadir}/applications/dolibarr.desktop
|
||||
|
||||
install -m 444 README $RPM_BUILD_ROOT/var/www/dolibarr/README
|
||||
install -m 444 COPYRIGHT $RPM_BUILD_ROOT/var/www/dolibarr/COPYRIGHT
|
||||
cp -pr build $RPM_BUILD_ROOT/var/www/dolibarr
|
||||
cp -pr doc $RPM_BUILD_ROOT/var/www/dolibarr
|
||||
cp -pr htdocs $RPM_BUILD_ROOT/var/www/dolibarr
|
||||
cp -pr build $RPM_BUILD_ROOT/var/www/dolibarr
|
||||
cp -pr doc $RPM_BUILD_ROOT/var/www/dolibarr
|
||||
cp -pr htdocs $RPM_BUILD_ROOT/var/www/dolibarr
|
||||
cp -pr scripts $RPM_BUILD_ROOT/var/www/dolibarr
|
||||
|
||||
|
||||
@ -89,6 +128,8 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%dir /var/www/dolibarr/build
|
||||
%dir /var/www/dolibarr/htdocs
|
||||
%dir /var/www/dolibarr/scripts
|
||||
%_datadir/pixmaps/*
|
||||
%_datadir/applications/%{name}.desktop
|
||||
/var/www/dolibarr/build/*
|
||||
/var/www/dolibarr/htdocs/*
|
||||
/var/www/dolibarr/scripts/*
|
||||
@ -96,8 +137,10 @@ rm -rf $RPM_BUILD_ROOT
|
||||
/var/www/dolibarr/COPYRIGHT
|
||||
#%config /var/www/dolibarr/htdocs/conf/conf.php
|
||||
|
||||
|
||||
#---- post (after install)
|
||||
%post
|
||||
%update_menus
|
||||
|
||||
# Dolibarr files are stored into /var/www
|
||||
export targetdir='/var/www/dolibarr'
|
||||
@ -135,30 +178,59 @@ if [ ! -f %{_sysconfdir}/dolibarr/apache.conf ]; then
|
||||
chmod go-w %{_sysconfdir}/dolibarr/apache.conf
|
||||
fi
|
||||
|
||||
# Create a config link %{_sysconfdir}/httpd/conf.d/dolibarr.conf
|
||||
if [ ! -f %{_sysconfdir}/httpd/conf.d/dolibarr.conf ]; then
|
||||
echo Create dolibarr web server config link %{_sysconfdir}/httpd/conf.d/dolibarr.conf
|
||||
ln -fs /etc/dolibarr/apache.conf %{_sysconfdir}/httpd/conf.d/dolibarr.conf
|
||||
|
||||
# Detect OS
|
||||
os='unknown';
|
||||
if [ -d %{_sysconfdir}/httpd/conf.d ]; then
|
||||
export os='fedora-redhat';
|
||||
export conffile="%{_sysconfdir}/httpd/conf.d/dolibarr.conf"
|
||||
export apacheuser='apache';
|
||||
export apachegroup='apache';
|
||||
fi
|
||||
if [ -d %{_sysconfdir}/apache2/conf.d -a `grep ^wwwrun /etc/passwd | wc -l` -ge 1 ]; then
|
||||
export os='opensuse';
|
||||
export conffile="%{_sysconfdir}/apache2/conf.d/dolibarr.conf"
|
||||
export apacheuser='wwwrun';
|
||||
export apachegroup='www';
|
||||
fi
|
||||
if [ -d %{_sysconfdir}/httpd/conf.d -a `grep -i "^mageia\|mandriva" /etc/issue | wc -l` -ge 1 ]; then
|
||||
export os='mageia-mandriva';
|
||||
export conffile="%{_sysconfdir}/httpd/conf.d/dolibarr.conf"
|
||||
export apacheuser='apache';
|
||||
export apachegroup='apache';
|
||||
fi
|
||||
if [ -d %{_sysconfdir}/apache2/conf.d -a `grep ^www-data /etc/passwd | wc -l` -ge 1 ]; then
|
||||
export os='ubuntu-debian';
|
||||
export conffile="%{_sysconfdir}/apache2/conf.d/dolibarr.conf"
|
||||
export apacheuser='www-data';
|
||||
export apachegroup='www-data';
|
||||
fi
|
||||
echo OS detected: $os
|
||||
|
||||
# Create a config link dolibarr.conf for Fedora or Redhat
|
||||
if [ ! -f $conffile ]; then
|
||||
echo Create dolibarr web server config link $conffile
|
||||
ln -fs /etc/dolibarr/apache.conf $conffile
|
||||
fi
|
||||
|
||||
# Set permissions
|
||||
echo Set permission on $targetdir
|
||||
chown -R apache.apache $targetdir
|
||||
echo Set permission to $apacheuser:$apachegroup on $targetdir
|
||||
chown -R $apacheuser:$apachegroup $targetdir
|
||||
chmod -R a-w $targetdir
|
||||
|
||||
echo Set permission on $docdir
|
||||
chown -R apache.apache $docdir
|
||||
echo Set permission to $apacheuser:$apachegroup on $docdir
|
||||
chown -R $apacheuser:$apachegroup $docdir
|
||||
chmod -R o-w $docdir
|
||||
|
||||
# Create empty conf.php file for web installer
|
||||
if [ ! -s $targetdir/htdocs/conf/conf.php ]; then
|
||||
echo Create empty Dolibarr conf.php file
|
||||
touch $targetdir/htdocs/conf/conf.php
|
||||
chown apache.apache $targetdir/htdocs/conf/conf.php
|
||||
chown $apacheuser:$apachegroup $targetdir/htdocs/conf/conf.php
|
||||
chmod ug+rw $targetdir/htdocs/conf/conf.php
|
||||
fi
|
||||
|
||||
if [ -s /usr/bin/chcon ]; then
|
||||
if [ "x$os" = "xfedora-redhat" -a -s /usr/bin/chcon ]; then
|
||||
echo Set SELinux permissions
|
||||
# Warning: chcon seems not cumulative
|
||||
#chcon -R -h -t httpd_sys_content_t $targetdir
|
||||
@ -173,6 +245,9 @@ echo Restart web server
|
||||
if [ -f %{_sysconfdir}/init.d/httpd ]; then
|
||||
%{_sysconfdir}/init.d/httpd restart
|
||||
fi
|
||||
if [ -f %{_sysconfdir}/init.d/apache2 ]; then
|
||||
%{_sysconfdir}/init.d/apache2 restart
|
||||
fi
|
||||
|
||||
# Show result
|
||||
echo
|
||||
@ -187,13 +262,41 @@ echo
|
||||
|
||||
#---- postun (after uninstall)
|
||||
%postun
|
||||
%clean_menus
|
||||
|
||||
# Detect OS
|
||||
os='unknown';
|
||||
if [ -d %{_sysconfdir}/httpd/conf.d ]; then
|
||||
export os='fedora-redhat';
|
||||
export conffile="%{_sysconfdir}/httpd/conf.d/dolibarr.conf"
|
||||
export apacheuser='apache';
|
||||
export apachegroup='apache';
|
||||
fi
|
||||
if [ -d %{_sysconfdir}/apache2/conf.d -a `grep ^wwwrun /etc/passwd | wc -l` -ge 1 ]; then
|
||||
export os='opensuse';
|
||||
export conffile="%{_sysconfdir}/apache2/conf.d/dolibarr.conf"
|
||||
export apacheuser='wwwrun';
|
||||
export apachegroup='www';
|
||||
fi
|
||||
if [ -d %{_sysconfdir}/httpd/conf.d -a `grep -i "^mageia\|mandriva" /etc/issue | wc -l` -ge 1 ]; then
|
||||
export os='mageia-mandriva';
|
||||
export conffile="%{_sysconfdir}/httpd/conf.d/dolibarr.conf"
|
||||
export apacheuser='apache';
|
||||
export apachegroup='apache';
|
||||
fi
|
||||
if [ -d %{_sysconfdir}/apache2/conf.d -a `grep ^www-data /etc/passwd | wc -l` -ge 1 ]; then
|
||||
export os='ubuntu-debian';
|
||||
export conffile="%{_sysconfdir}/apache2/conf.d/dolibarr.conf"
|
||||
export apacheuser='www-data';
|
||||
export apachegroup='www-data';
|
||||
fi
|
||||
echo OS detected: $os
|
||||
|
||||
# Dolibarr files are stored into /var/www
|
||||
export targetdir='/var/www/dolibarr'
|
||||
# Dolibarr uploaded files and generated documents are stored into /usr/share/dolibarr/documents
|
||||
export docdir='/usr/share/dolibarr/documents'
|
||||
|
||||
export conffile="%{_sysconfdir}/httpd/conf.d/dolibarr.conf"
|
||||
if [ -f $conffile ] ;
|
||||
then
|
||||
echo Delete apache config file for Dolibarr
|
||||
@ -208,11 +311,17 @@ then
|
||||
if [ -f %{_sysconfdir}/init.d/httpd ]; then
|
||||
%{_sysconfdir}/init.d/httpd restart
|
||||
fi
|
||||
if [ -f %{_sysconfdir}/init.d/apache2 ]; then
|
||||
%{_sysconfdir}/init.d/apache2 restart
|
||||
fi
|
||||
fi
|
||||
|
||||
# Removed dirs after apache restart
|
||||
echo Removed remaining dirs
|
||||
rm -rf /etc/dolibarr
|
||||
rm -rf $targetdir/htdocs/conf
|
||||
rm -rf $targetdir/htdocs/install
|
||||
|
||||
rmdir $targetdir/doc >/dev/null 2>&1
|
||||
rmdir $targetdir/htdocs >/dev/null 2>&1
|
||||
|
||||
%changelog
|
||||
|
||||
@ -1,28 +1,79 @@
|
||||
Alias /dolibarr /var/www/dolibarr/htdocs
|
||||
# Apache config file for Dolibarr
|
||||
|
||||
<DirectoryMatch /var/www/dolibarr/>
|
||||
<IfModule mod_alias.c>
|
||||
Alias /dolibarr /var/www/dolibarr/htdocs
|
||||
</IfModule>
|
||||
|
||||
# You can also use dolibarr as a VirtualHost
|
||||
# <VirtualHost *:*>
|
||||
# ServerName mydolibarrhostname.com
|
||||
# ServerAdmin root@example.com
|
||||
# DocumentRoot /usr/share/dolibarr/
|
||||
# ErrorLog logs/ldap.example.com-error.log
|
||||
# CustomLog logs/ldap.example.com-access.log common
|
||||
# </VirtualHost>
|
||||
|
||||
# Directory for web pages
|
||||
<DirectoryMatch /var/www/dolibarr>
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
DirectoryIndex index.php
|
||||
Options +FollowSymLinks +Indexes
|
||||
|
||||
ErrorDocument 401 /public/error-401.html
|
||||
ErrorDocument 401 /public/error-401.php
|
||||
ErrorDocument 404 /public/error-404.php
|
||||
|
||||
<IfModule mod_php4.c>
|
||||
php_flag magic_quotes_gpc Off
|
||||
php_flag register_globals Off
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_php5.c>
|
||||
php_flag magic_quotes_gpc Off
|
||||
php_flag register_globals Off
|
||||
</IfModule>
|
||||
|
||||
|
||||
# OPTIMIZE: To use gzip compressed files (for Dolibarr already compressed files).
|
||||
# Note that constant MAIN_OPTIMIZE_SPEED must have a value with bit 0 set.
|
||||
#AddType text/javascript .jgz
|
||||
#AddEncoding gzip .jgz
|
||||
|
||||
# OPTIMIZE: To use gzip compression (on the fly).
|
||||
# Note that you must also enable the module mod_deflate.
|
||||
# You can also set this with constant MAIN_OPTIMIZE_SPEED and bit 2 set.
|
||||
#TODO
|
||||
|
||||
# OPTIMIZE: To use cache on static pages (A259200 = 1 month).
|
||||
# Note that you must also enable the module mod_expires.
|
||||
#ExpiresActive On
|
||||
#ExpiresByType image/x-icon A2592000
|
||||
#ExpiresByType image/gif A2592000
|
||||
#ExpiresByType image/png A2592000
|
||||
#ExpiresByType image/jpeg A2592000
|
||||
#ExpiresByType text/css A2592000
|
||||
#ExpiresByType text/javascript A2592000
|
||||
#ExpiresByType application/x-javascript A2592000
|
||||
#ExpiresByType application/javascript A2592000
|
||||
|
||||
</DirectoryMatch>
|
||||
|
||||
<DirectoryMatch /var/www/dolibarr/public/>
|
||||
# Directory for public pages
|
||||
<DirectoryMatch /var/www/dolibarr/public>
|
||||
AllowOverride All
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
</DirectoryMatch>
|
||||
|
||||
<DirectoryMatch /var/www/dolibarr/theme/>
|
||||
# Directory for data files
|
||||
<DirectoryMatch /usr/share/dolibarr/documents>
|
||||
AllowOverride All
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
</DirectoryMatch>
|
||||
<DirectoryMatch /var/www/dolibarr/documents>
|
||||
AllowOverride All
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
</DirectoryMatch>
|
||||
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
@ -22,7 +23,7 @@
|
||||
/**
|
||||
\file htdocs/dev/generate-commande.php
|
||||
\brief Script de generation de donnees aleatoires pour les commandes
|
||||
\version $Id$
|
||||
\version $Id: generate-commande.php,v 1.17 2011/07/09 14:11:40 eldy Exp $
|
||||
*/
|
||||
|
||||
// Test si mode batch
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
<?PHP
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -21,7 +22,7 @@
|
||||
/**
|
||||
* \file htdocs/dev/generate-facture.php
|
||||
* \brief Script de generation de donnees aleatoires pour les factures
|
||||
* \version $Id$
|
||||
* \version $Id: generate-facture.php,v 1.14 2011/07/09 14:11:40 eldy Exp $
|
||||
*/
|
||||
|
||||
// Test si mode batch
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
@ -22,7 +23,7 @@
|
||||
/**
|
||||
* \file htdocs/dev/generate-produit.php
|
||||
* \brief Script de generation de donnees aleatoires pour les produits
|
||||
* \version $Id$
|
||||
* \version $Id: generate-produit.php,v 1.16 2011/07/09 14:11:40 eldy Exp $
|
||||
*/
|
||||
|
||||
// Test si mode batch
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
<?PHP
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2007 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
@ -22,7 +23,7 @@
|
||||
/**
|
||||
* \file htdocs/dev/generate-propale.php
|
||||
* \brief Script de generation de donnees aleatoires pour les propales
|
||||
* \version $Id$
|
||||
* \version $Id: generate-propale.php,v 1.15 2011/07/09 14:11:40 eldy Exp $
|
||||
*/
|
||||
|
||||
// Test si mode batch
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2006-2010 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
@ -22,7 +23,7 @@
|
||||
/**
|
||||
* \file htdocs/dev/generate-societe.php
|
||||
* \brief Script de generation de donnees aleatoires pour les societes
|
||||
* \version $Id$
|
||||
* \version $Id: generate-societe.php,v 1.16 2011/07/09 14:11:40 eldy Exp $
|
||||
*/
|
||||
|
||||
// Test si mode batch
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
<?PHP
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -19,7 +20,7 @@
|
||||
/**
|
||||
* \file dev/samples/manage_order.php
|
||||
* \brief This file is an example for a command line script
|
||||
* \version $Id$
|
||||
* \version $Id: create_invoice.php,v 1.5 2011/07/09 14:11:41 eldy Exp $
|
||||
* \author Put author name here
|
||||
* \remarks Put here some comments
|
||||
*/
|
||||
@ -35,7 +36,7 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
|
||||
}
|
||||
|
||||
// Global variables
|
||||
$version='$Revision$';
|
||||
$version='$Revision: 1.5 $';
|
||||
$error=0;
|
||||
|
||||
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
<?PHP
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -19,7 +20,7 @@
|
||||
/**
|
||||
* \file dev/samples/manage_order.php
|
||||
* \brief This file is an example for a command line script
|
||||
* \version $Id$
|
||||
* \version $Id: create_order.php,v 1.9 2011/07/09 14:11:41 eldy Exp $
|
||||
* \author Put author name here
|
||||
* \remarks Put here some comments
|
||||
*/
|
||||
@ -35,7 +36,7 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
|
||||
}
|
||||
|
||||
// Global variables
|
||||
$version='$Revision$';
|
||||
$version='$Revision: 1.9 $';
|
||||
$error=0;
|
||||
|
||||
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
<?PHP
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -19,7 +20,7 @@
|
||||
/**
|
||||
* \file dev/samples/create_product.php
|
||||
* \brief This file is an example for a command line script
|
||||
* \version $Id$
|
||||
* \version $Id: create_product.php,v 1.8 2011/07/09 14:11:41 eldy Exp $
|
||||
* \author Put author name here
|
||||
* \remarks Put here some comments
|
||||
*/
|
||||
@ -35,7 +36,7 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
|
||||
}
|
||||
|
||||
// Global variables
|
||||
$version='$Revision$';
|
||||
$version='$Revision: 1.8 $';
|
||||
$error=0;
|
||||
|
||||
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2008-2010 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
@ -20,7 +21,7 @@
|
||||
* \file dev/skeletons/build_class_from_table.php
|
||||
* \ingroup core
|
||||
* \brief Create a complete class file from a table in database
|
||||
* \version $Id$
|
||||
* \version $Id: build_class_from_table.php,v 1.32 2011/07/09 14:11:40 eldy Exp $
|
||||
*/
|
||||
|
||||
$sapi_type = php_sapi_name();
|
||||
@ -38,7 +39,7 @@ require_once($path."../../htdocs/master.inc.php");
|
||||
// After this $db is a defined handler to database.
|
||||
|
||||
// Main
|
||||
$version='$Revision$';
|
||||
$version='$Revision: 1.32 $';
|
||||
@set_time_limit(0);
|
||||
$error=0;
|
||||
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
@ -20,7 +21,7 @@
|
||||
* \file dev/skeletons/build_webservice_from_class.php
|
||||
* \ingroup core
|
||||
* \brief Create a complete webservice file from CRUD functions of a PHP class
|
||||
* \version $Id$
|
||||
* \version $Id: build_webservice_from_class.php,v 1.6 2011/07/09 14:11:40 eldy Exp $
|
||||
*/
|
||||
|
||||
$sapi_type = php_sapi_name();
|
||||
@ -38,7 +39,7 @@ require_once($path."../../htdocs/master.inc.php");
|
||||
// After this $db is a defined handler to database.
|
||||
|
||||
// Main
|
||||
$version='$Revision$';
|
||||
$version='$Revision: 1.6 $';
|
||||
@set_time_limit(0);
|
||||
$error=0;
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2007-2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
/* Copyright (C) 2007-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) ---Put here your own copyright and developer email---
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -21,7 +22,7 @@
|
||||
* \file dev/skeletons/skeleton_script.php
|
||||
* \ingroup mymodule othermodule1 othermodule2
|
||||
* \brief This file is an example for a command line script
|
||||
* \version $Id$
|
||||
* \version $Id: skeleton_script.php,v 1.27 2011/07/09 14:11:41 eldy Exp $
|
||||
* \author Put author name here
|
||||
* \remarks Put here some comments
|
||||
*/
|
||||
@ -37,7 +38,7 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
|
||||
}
|
||||
|
||||
// Global variables
|
||||
$version='$Revision$';
|
||||
$version='$Revision: 1.27 $';
|
||||
$error=0;
|
||||
|
||||
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
<?PHP
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
/* Copyright (C) 2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -20,7 +21,7 @@
|
||||
* \file dev/translation/autotranslator.php
|
||||
* \ingroup mymodule othermodule1 othermodule2
|
||||
* \brief This file is an example for a command line script
|
||||
* \version $Id: autotranslator.php,v 1.11 2011/06/26 18:52:49 eldy Exp $
|
||||
* \version $Id: autotranslator.php,v 1.12 2011/07/09 14:11:41 eldy Exp $
|
||||
* \author Put author name here
|
||||
* \remarks Put here some comments
|
||||
*/
|
||||
@ -44,7 +45,7 @@ require_once($path.'../../htdocs/lib/files.lib.php');
|
||||
$langs->load("main");
|
||||
|
||||
// Global variables
|
||||
$version='$Revision: 1.11 $';
|
||||
$version='$Revision: 1.12 $';
|
||||
$error=0;
|
||||
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
/**
|
||||
* \file htdocs/admin/mails.php
|
||||
* \brief Page to setup emails sending
|
||||
* \version $Id: mails.php,v 1.70 2011/07/02 16:48:31 eldy Exp $
|
||||
* \version $Id: mails.php,v 1.73 2011/07/10 20:03:39 eldy Exp $
|
||||
*/
|
||||
|
||||
require("../main.inc.php");
|
||||
@ -61,9 +61,9 @@ if (isset($_POST["action"]) && $_POST["action"] == 'update' && empty($_POST["can
|
||||
if (isset($_POST["MAIN_MAIL_SMTPS_ID"])) dolibarr_set_const($db, "MAIN_MAIL_SMTPS_ID", $_POST["MAIN_MAIL_SMTPS_ID"],'chaine',0,'',0);
|
||||
if (isset($_POST["MAIN_MAIL_SMTPS_PW"])) dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW", $_POST["MAIN_MAIL_SMTPS_PW"],'chaine',0,'',0);
|
||||
if (isset($_POST["MAIN_MAIL_EMAIL_TLS"])) dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS", $_POST["MAIN_MAIL_EMAIL_TLS"],'chaine',0,'',0);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_EMAIL_INLINE_IMAGES", $_POST["MAIN_MAIL_EMAIL_INLINE_IMAGES"],'chaine',0,'',0);
|
||||
|
||||
dolibarr_set_const($db, "MAIN_MAIL_EMAIL_FROM", $_POST["MAIN_MAIL_EMAIL_FROM"],'chaine',0,'',$conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_ERRORS_TO", $_POST["MAIN_MAIL_ERRORS_TO"],'chaine',0,'',$conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_AUTOCOPY_TO", $_POST["MAIN_MAIL_AUTOCOPY_TO"],'chaine',0,'',$conf->entity);
|
||||
|
||||
Header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
|
||||
@ -80,7 +80,7 @@ if ($_POST['addfile'] || $_POST['addfilehtml'])
|
||||
|
||||
// Set tmp user directory
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir = $vardir.'/temp';
|
||||
|
||||
if (create_exdir($upload_dir) >= 0)
|
||||
{
|
||||
@ -127,7 +127,7 @@ if (! empty($_POST['removedfile']) || ! empty($_POST['removedfilehtml']))
|
||||
{
|
||||
// Set tmp user directory
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir = $vardir.'/temp';
|
||||
|
||||
$keytodelete=isset($_POST['removedfile'])?$_POST['removedfile']:$_POST['removedfilehtml'];
|
||||
$keytodelete--;
|
||||
@ -283,8 +283,6 @@ if (isset($_GET["action"]) && $_GET["action"] == 'edit')
|
||||
jQuery(".drag").hide();
|
||||
jQuery("#MAIN_MAIL_EMAIL_TLS").val(0);
|
||||
jQuery("#MAIN_MAIL_EMAIL_TLS").attr(\'disabled\', \'disabled\');
|
||||
jQuery("#MAIN_MAIL_EMAIL_INLINE_IMAGES").val('.$conf->global->MAIN_MAIL_EMAIL_INLINE_IMAGES.');
|
||||
jQuery("#MAIN_MAIL_EMAIL_INLINE_IMAGES").removeAttr(\'disabled\');
|
||||
';
|
||||
if ($linuxlike)
|
||||
{
|
||||
@ -300,8 +298,6 @@ if (isset($_GET["action"]) && $_GET["action"] == 'edit')
|
||||
jQuery("#MAIN_MAIL_EMAIL_TLS").removeAttr(\'disabled\');
|
||||
jQuery("#MAIN_MAIL_SMTP_SERVER").removeAttr(\'disabled\');
|
||||
jQuery("#MAIN_MAIL_SMTP_PORT").removeAttr(\'disabled\');
|
||||
jQuery("#MAIN_MAIL_EMAIL_INLINE_IMAGES").val(0);
|
||||
jQuery("#MAIN_MAIL_EMAIL_INLINE_IMAGES").attr(\'disabled\', \'disabled\');
|
||||
}
|
||||
}
|
||||
initfields();
|
||||
@ -463,15 +459,6 @@ if (isset($_GET["action"]) && $_GET["action"] == 'edit')
|
||||
else print yn(0).' ('.$langs->trans("NotSupported").')';
|
||||
print '</td></tr>';
|
||||
|
||||
// Inline images
|
||||
if ($conf->global->MAIN_FEATURES_LEVEL > 0)
|
||||
{
|
||||
$var=!$var;
|
||||
print '<tr '.$bcnd[$var].'><td>'.$langs->trans("MAIN_MAIL_EMAIL_INLINE_IMAGES").'</td><td>';
|
||||
print $html->selectyesno('MAIN_MAIL_EMAIL_INLINE_IMAGES',$conf->global->MAIN_MAIL_EMAIL_INLINE_IMAGES,1);
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
// Separator
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td colspan="2"> </td></tr>';
|
||||
@ -482,6 +469,12 @@ if (isset($_GET["action"]) && $_GET["action"] == 'edit')
|
||||
print '<td><input class="flat" name="MAIN_MAIL_EMAIL_FROM" size="32" value="' . $conf->global->MAIN_MAIL_EMAIL_FROM;
|
||||
print '"></td></tr>';
|
||||
|
||||
// From
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td>'.$langs->trans("MAIN_MAIL_ERRORS_TO").'</td>';
|
||||
print '<td><input class="flat" name="MAIN_MAIL_ERRORS_TO" size="32" value="' . $conf->global->MAIN_MAIL_ERRORS_TO;
|
||||
print '"></td></tr>';
|
||||
|
||||
// Autocopy to
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td>'.$langs->trans("MAIN_MAIL_AUTOCOPY_TO").'</td>';
|
||||
@ -571,15 +564,6 @@ else
|
||||
else print yn(0).' ('.$langs->trans("NotSupported").')';
|
||||
print '</td></tr>';
|
||||
|
||||
// Inline images
|
||||
if ($conf->global->MAIN_FEATURES_LEVEL > 0)
|
||||
{
|
||||
$var=!$var;
|
||||
print '<tr '.$bcnd[$var].'><td>'.$langs->trans("MAIN_MAIL_EMAIL_INLINE_IMAGES").'</td><td>';
|
||||
print yn($conf->global->MAIN_MAIL_EMAIL_INLINE_IMAGES,1,0);
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
// Separator
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td colspan="2"> </td></tr>';
|
||||
@ -591,6 +575,13 @@ else
|
||||
if (!empty($conf->global->MAIN_MAIL_EMAIL_FROM) && ! isValidEmail($conf->global->MAIN_MAIL_EMAIL_FROM)) print img_warning($langs->trans("ErrorBadEMail"));
|
||||
print '</td></tr>';
|
||||
|
||||
// Errors To
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td>'.$langs->trans("MAIN_MAIL_ERRORS_TO").'</td>';
|
||||
print '<td>'.$conf->global->MAIN_MAIL_ERRORS_TO;
|
||||
if (!empty($conf->global->MAIN_MAIL_ERRORS_TO) && ! isValidEmail($conf->global->MAIN_MAIL_ERRORS_TO)) print img_warning($langs->trans("ErrorBadEMail"));
|
||||
print '</td></tr>';
|
||||
|
||||
// Autocopy to
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td>'.$langs->trans("MAIN_MAIL_AUTOCOPY_TO").'</td>';
|
||||
@ -746,5 +737,5 @@ else
|
||||
|
||||
$db->close();
|
||||
|
||||
llxFooter('$Date: 2011/07/02 16:48:31 $ - $Revision: 1.70 $');
|
||||
llxFooter('$Date: 2011/07/10 20:03:39 $ - $Revision: 1.73 $');
|
||||
?>
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
* \file htdocs/comm/mailing/fiche.php
|
||||
* \ingroup mailing
|
||||
* \brief Fiche mailing, onglet general
|
||||
* \version $Id: fiche.php,v 1.121 2011/07/02 16:48:32 eldy Exp $
|
||||
* \version $Id: fiche.php,v 1.122 2011/07/10 13:33:53 eldy Exp $
|
||||
*/
|
||||
|
||||
require("../../main.inc.php");
|
||||
@ -617,7 +617,7 @@ if ($_GET["action"] == 'create')
|
||||
print '<table class="border" width="100%">';
|
||||
print '<tr><td width="25%" class="fieldrequired">'.$langs->trans("MailTitle").'</td><td><input class="flat" name="titre" size="40" value="'.$_POST['titre'].'"></td></tr>';
|
||||
print '<tr><td width="25%" class="fieldrequired">'.$langs->trans("MailFrom").'</td><td><input class="flat" name="from" size="40" value="'.$conf->global->MAILING_EMAIL_FROM.'"></td></tr>';
|
||||
print '<tr><td width="25%">'.$langs->trans("MailErrorsTo").'</td><td><input class="flat" name="errorsto" size="40" value="'.$conf->global->MAILING_EMAIL_ERRORSTO.'"></td></tr>';
|
||||
print '<tr><td width="25%">'.$langs->trans("MailErrorsTo").'</td><td><input class="flat" name="errorsto" size="40" value="'.(!empty($conf->global->MAILING_EMAIL_ERRORSTO)?$conf->global->MAILING_EMAIL_ERRORSTO:$conf->global->MAIN_MAIL_ERRORS_TO).'"></td></tr>';
|
||||
print '</table>';
|
||||
print '</br><br>';
|
||||
|
||||
@ -1073,5 +1073,5 @@ else
|
||||
|
||||
$db->close();
|
||||
|
||||
llxFooter('$Date: 2011/07/02 16:48:32 $ - $Revision: 1.121 $');
|
||||
llxFooter('$Date: 2011/07/10 13:33:53 $ - $Revision: 1.122 $');
|
||||
?>
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
* \file htdocs/comm/propal.php
|
||||
* \ingroup propale
|
||||
* \brief Page of commercial proposals card and list
|
||||
* \version $Id: propal.php,v 1.609 2011/07/07 21:32:22 eldy Exp $
|
||||
* \version $Id: propal.php,v 1.610 2011/07/10 20:03:41 eldy Exp $
|
||||
*/
|
||||
|
||||
require("../main.inc.php");
|
||||
@ -427,9 +427,9 @@ if ($_POST['addfile'])
|
||||
|
||||
// Set tmp user directory TODO Use a dedicated directory for temp mails files
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_add_file_process($upload_dir,0,0);
|
||||
$mesg=dol_add_file_process($upload_dir_tmp,0,0);
|
||||
|
||||
$action='presend';
|
||||
$_POST["action"]='presend';
|
||||
@ -444,7 +444,7 @@ if (! empty($_POST['removedfile']))
|
||||
|
||||
// Set tmp user directory
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_remove_file_process($_POST['removedfile'],0);
|
||||
|
||||
@ -1291,7 +1291,7 @@ if ($id > 0 || ! empty($ref))
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
// adresse de livraison
|
||||
// Delivery address (deprecated)
|
||||
if ($conf->global->PROPALE_ADD_DELIVERY_ADDRESS)
|
||||
{
|
||||
print '<tr><td>';
|
||||
@ -1335,7 +1335,7 @@ if ($id > 0 || ! empty($ref))
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
// Origine de la demande
|
||||
// Origin of demand
|
||||
print '<tr><td>';
|
||||
print '<table class="nobordernopadding" width="100%"><tr><td>';
|
||||
print $langs->trans('Source');
|
||||
@ -1975,6 +1975,6 @@ else
|
||||
}
|
||||
$db->close();
|
||||
|
||||
llxFooter('$Date: 2011/07/07 21:32:22 $ - $Revision: 1.609 $');
|
||||
llxFooter('$Date: 2011/07/10 20:03:41 $ - $Revision: 1.610 $');
|
||||
|
||||
?>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
* \file htdocs/commande/class/commande.class.php
|
||||
* \ingroup commande
|
||||
* \brief Fichier des classes de commandes
|
||||
* \version $Id: commande.class.php,v 1.118 2011/07/04 10:35:49 hregis Exp $
|
||||
* \version $Id: commande.class.php,v 1.119 2011/07/12 07:17:11 eldy Exp $
|
||||
*/
|
||||
require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
|
||||
require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php");
|
||||
@ -259,7 +259,7 @@ class Commande extends CommonObject
|
||||
if (! $error)
|
||||
{
|
||||
$this->oldref='';
|
||||
|
||||
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
{
|
||||
@ -276,7 +276,7 @@ class Commande extends CommonObject
|
||||
if (@rename($dirsource, $dirdest))
|
||||
{
|
||||
$this->oldref = $comref;
|
||||
|
||||
|
||||
dol_syslog("Rename ok");
|
||||
// Suppression ancien fichier PDF dans nouveau rep
|
||||
dol_delete_file($conf->commande->dir_output.'/'.$snum.'/'.$comref.'.*');
|
||||
@ -733,7 +733,7 @@ class Commande extends CommonObject
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (! $notrigger)
|
||||
{
|
||||
// Appel des triggers
|
||||
@ -3050,6 +3050,7 @@ class OrderLine
|
||||
if (empty($this->tva_tx)) $this->tva_tx=0;
|
||||
if (empty($this->localtax1_tx)) $this->localtax1_tx=0;
|
||||
if (empty($this->localtax2_tx)) $this->localtax2_tx=0;
|
||||
if (empty($this->qty)) $this->qty=0;
|
||||
if (empty($this->total_localtax1)) $this->total_localtax1=0;
|
||||
if (empty($this->total_localtax2)) $this->total_localtax2=0;
|
||||
if (empty($this->marque_tx)) $this->marque_tx=0;
|
||||
@ -3065,10 +3066,10 @@ class OrderLine
|
||||
// Mise a jour ligne en base
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."commandedet SET";
|
||||
$sql.= " description='".$this->db->escape($this->desc)."'";
|
||||
$sql.= " , tva_tx='".price2num($this->tva_tx)."'";
|
||||
$sql.= " , tva_tx=".price2num($this->tva_tx);
|
||||
$sql.= " , localtax1_tx=".price2num($this->localtax1_tx);
|
||||
$sql.= " , localtax2_tx=".price2num($this->localtax2_tx);
|
||||
$sql.= " , qty='".price2num($this->qty)."'";
|
||||
$sql.= " , qty=".price2num($this->qty);
|
||||
$sql.= " , subprice=".price2num($this->subprice)."";
|
||||
$sql.= " , remise_percent=".price2num($this->remise_percent)."";
|
||||
$sql.= " , price=".price2num($this->price).""; // TODO A virer
|
||||
@ -3080,8 +3081,8 @@ class OrderLine
|
||||
$sql.= " , total_tva=".price2num($this->total_tva)."";
|
||||
$sql.= " , total_ttc=".price2num($this->total_ttc)."";
|
||||
}
|
||||
$sql.= " , total_localtax1='".price2num($this->total_localtax1)."'";
|
||||
$sql.= " , total_localtax2='".price2num($this->total_localtax2)."'";
|
||||
$sql.= " , total_localtax1=".price2num($this->total_localtax1);
|
||||
$sql.= " , total_localtax2=".price2num($this->total_localtax2);
|
||||
$sql.= " , info_bits=".$this->info_bits;
|
||||
if ($this->date_start) { $sql.= " , date_start='".$this->db->idate($this->date_start)."'"; }
|
||||
else { $sql.=' , date_start=null'; }
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
* \file htdocs/commande/fiche.php
|
||||
* \ingroup commande
|
||||
* \brief Page to show customer order
|
||||
* \version $Id: fiche.php,v 1.524 2011/07/07 21:32:21 eldy Exp $
|
||||
* \version $Id: fiche.php,v 1.525 2011/07/10 20:03:41 eldy Exp $
|
||||
*/
|
||||
|
||||
require("../main.inc.php");
|
||||
@ -931,7 +931,7 @@ if ($action == 'remove_file')
|
||||
{
|
||||
require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php");
|
||||
|
||||
$upload_dir = $conf->commande->dir_output . "/";
|
||||
$upload_dir = $conf->commande->dir_output;
|
||||
$file = $upload_dir . '/' . $_GET['file'];
|
||||
dol_delete_file($file);
|
||||
$mesg = '<div class="ok">'.$langs->trans("FileWasRemoved").'</div>';
|
||||
@ -947,9 +947,9 @@ if ($_POST['addfile'])
|
||||
|
||||
// Set tmp user directory TODO Use a dedicated directory for temp mails files
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_add_file_process($upload_dir,0,0);
|
||||
$mesg=dol_add_file_process($upload_dir_tmp,0,0);
|
||||
|
||||
$action ='presend';
|
||||
}
|
||||
@ -963,7 +963,7 @@ if (! empty($_POST['removedfile']))
|
||||
|
||||
// Set tmp user directory
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_remove_file_process($_POST['removedfile'],0);
|
||||
|
||||
@ -2134,5 +2134,5 @@ else
|
||||
|
||||
$db->close();
|
||||
|
||||
llxFooter('$Date: 2011/07/07 21:32:21 $ - $Revision: 1.524 $');
|
||||
llxFooter('$Date: 2011/07/10 20:03:41 $ - $Revision: 1.525 $');
|
||||
?>
|
||||
|
||||
@ -22,8 +22,8 @@
|
||||
* \version ajaxpayment.php,v 1.0
|
||||
*/
|
||||
|
||||
if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1');
|
||||
if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1');
|
||||
//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1');
|
||||
//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1');
|
||||
if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1');
|
||||
//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1');
|
||||
if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK','1');
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
* \file htdocs/compta/facture.php
|
||||
* \ingroup facture
|
||||
* \brief Page to create/see an invoice
|
||||
* \version $Id: facture.php,v 1.847 2011/07/08 10:22:14 hregis Exp $
|
||||
* \version $Id: facture.php,v 1.848 2011/07/10 20:03:40 eldy Exp $
|
||||
*/
|
||||
|
||||
require('../main.inc.php');
|
||||
@ -1191,9 +1191,9 @@ if ($_POST['addfile'])
|
||||
|
||||
// Set tmp user directory
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_add_file_process($upload_dir,0,0);
|
||||
$mesg=dol_add_file_process($upload_dir_tmp,0,0);
|
||||
|
||||
$action='presend';
|
||||
}
|
||||
@ -1207,7 +1207,7 @@ if (! empty($_POST['removedfile']))
|
||||
|
||||
// Set tmp user directory
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_remove_file_process($_POST['removedfile'],0);
|
||||
|
||||
@ -3241,5 +3241,5 @@ else
|
||||
|
||||
$db->close();
|
||||
|
||||
llxFooter('$Date: 2011/07/08 10:22:14 $ - $Revision: 1.847 $');
|
||||
llxFooter('$Date: 2011/07/10 20:03:40 $ - $Revision: 1.848 $');
|
||||
?>
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
* \file htdocs/compta/paiement.php
|
||||
* \ingroup compta
|
||||
* \brief Page to create a payment
|
||||
* \version $Id: paiement.php,v 1.109 2011/07/04 16:39:48 cdelambert Exp $
|
||||
* \version $Id: paiement.php,v 1.110 2011/07/11 09:32:35 cdelambert Exp $
|
||||
*/
|
||||
|
||||
require('../main.inc.php');
|
||||
@ -272,14 +272,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
|
||||
jQuery(\'.fieldrequireddyn\').removeClass(\'fieldrequired\');
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>'."\n";
|
||||
}
|
||||
|
||||
if (! empty($conf->global->MAIN_JS_ON_PAYMENT))
|
||||
{
|
||||
print "\n".'<script type="text/javascript" language="javascript">';
|
||||
print 'jQuery(document).ready(function () {
|
||||
|
||||
function elemToJson(selector)
|
||||
{
|
||||
var subJson = {};
|
||||
@ -345,7 +338,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
|
||||
</script>'."\n";
|
||||
}
|
||||
|
||||
print '<form name="add_paiement" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||
print '<form id="payment_form" name="add_paiement" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
print '<input type="hidden" name="action" value="add_paiement">';
|
||||
print '<input type="hidden" name="facid" value="'.$facture->id.'">';
|
||||
@ -367,18 +360,18 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
|
||||
print '<td>'.$langs->trans('Comments').'</td></tr>';
|
||||
|
||||
$rowspan=5;
|
||||
if (! empty($conf->global->MAIN_JS_ON_PAYMENT)) $rowspan++;
|
||||
if ($conf->use_javascript_ajax) $rowspan++;
|
||||
|
||||
// Payment mode
|
||||
print '<tr><td><span class="fieldrequired">'.$langs->trans('PaymentMode').'</span></td><td>';
|
||||
$html->select_types_paiements((GETPOST('paiementcode')?GETPOST('paiementcode'):$facture->mode_reglement_code),'paiementcode','',2);
|
||||
print "</td>\n";
|
||||
print '<td rowspan="'.$rowspan.'" valign="top">';
|
||||
print '<textarea name="comment" wrap="soft" cols="60" rows="'.ROWS_5.'">'.(empty($_POST['comment'])?'':$_POST['comment']).'</textarea></td>';
|
||||
print '<textarea name="comment" wrap="soft" cols="60" rows="'.ROWS_4.'">'.(empty($_POST['comment'])?'':$_POST['comment']).'</textarea></td>';
|
||||
print '</tr>';
|
||||
|
||||
// Payment amount
|
||||
if (! empty($conf->global->MAIN_JS_ON_PAYMENT))
|
||||
if ($conf->use_javascript_ajax)
|
||||
{
|
||||
print '<tr><td><span class="fieldrequired">'.$langs->trans('AmountPayment').'</span></td>';
|
||||
print '<td>';
|
||||
@ -519,7 +512,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
|
||||
|
||||
if ($action != 'add_paiement')
|
||||
{
|
||||
if (! empty($conf->global->MAIN_JS_ON_PAYMENT))
|
||||
if ($conf->use_javascript_ajax)
|
||||
{
|
||||
print img_picto($langs->trans('AddRemind'),'rightarrow.png','id="'.$objp->facid.'" "');
|
||||
}
|
||||
@ -678,5 +671,5 @@ if (! GETPOST('action'))
|
||||
|
||||
$db->close();
|
||||
|
||||
llxFooter('$Date: 2011/07/04 16:39:48 $ - $Revision: 1.109 $');
|
||||
llxFooter('$Date: 2011/07/11 09:32:35 $ - $Revision: 1.110 $');
|
||||
?>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
* \file htdocs/contact/class/contact.class.php
|
||||
* \ingroup societe
|
||||
* \brief File of contacts class
|
||||
* \version $Id: contact.class.php,v 1.30 2011/07/04 09:36:29 eldy Exp $
|
||||
* \version $Id: contact.class.php,v 1.31 2011/07/10 16:50:40 eldy Exp $
|
||||
*/
|
||||
require_once(DOL_DOCUMENT_ROOT ."/core/class/commonobject.class.php");
|
||||
|
||||
@ -42,15 +42,16 @@ class Contact extends CommonObject
|
||||
var $table_element='socpeople';
|
||||
|
||||
var $id;
|
||||
var $civilite_id;
|
||||
var $name;
|
||||
var $nom;
|
||||
var $civilite_id; // In fact we stor civility_code
|
||||
var $lastname;
|
||||
var $name; // TODO deprecated
|
||||
var $nom; // TODO deprecated
|
||||
var $firstname;
|
||||
var $prenom;
|
||||
var $prenom; // TODO deprecated
|
||||
var $address;
|
||||
var $cp; // TODO deprecated
|
||||
var $cp; // TODO deprecated
|
||||
var $zip;
|
||||
var $ville; // TODO deprecated
|
||||
var $ville; // TODO deprecated
|
||||
var $town;
|
||||
|
||||
var $fk_departement; // Id of department
|
||||
|
||||
59
htdocs/core/ajaxsecurity.php
Normal file
59
htdocs/core/ajaxsecurity.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
/* Copyright (C) 2011 Regis Houssin <regis@dolibarr.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/ajaxsecurity.php
|
||||
* \brief File for return security data
|
||||
* \version $Id: ajaxsecurity.php,v 1.1 2011/07/09 08:05:08 hregis Exp $
|
||||
*/
|
||||
|
||||
if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Disables token renewal
|
||||
if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1');
|
||||
if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1');
|
||||
if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
|
||||
if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1');
|
||||
if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1');
|
||||
|
||||
require('../main.inc.php');
|
||||
require_once(DOL_DOCUMENT_ROOT."/lib/security.lib.php");
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
// Ajout directives pour resoudre bug IE
|
||||
//header('Cache-Control: Public, must-revalidate');
|
||||
//header('Pragma: public');
|
||||
|
||||
//top_htmlhead("", "", 1); // Replaced with top_httphead. An ajax page does not need html header.
|
||||
top_httphead();
|
||||
|
||||
//print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
|
||||
|
||||
// Registering the location of boxes
|
||||
if(isset($_GET['action']) && ! empty($_GET['action']))
|
||||
{
|
||||
if ($_GET['action'] == 'getrandompassword' && $user->admin)
|
||||
{
|
||||
$generic = $_GET['generic'];
|
||||
echo getRandomPassword($generic);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@ -22,7 +22,7 @@
|
||||
* \file htdocs/core/class/commonobject.class.php
|
||||
* \ingroup core
|
||||
* \brief File of parent class of all other business classes (invoices, contracts, proposals, orders, ...)
|
||||
* \version $Id: commonobject.class.php,v 1.144 2011/07/04 09:36:29 eldy Exp $
|
||||
* \version $Id: commonobject.class.php,v 1.145 2011/07/10 16:50:40 eldy Exp $
|
||||
*/
|
||||
|
||||
|
||||
@ -264,10 +264,10 @@ class CommonObject
|
||||
|
||||
/**
|
||||
* Get array of all contacts for an object
|
||||
* @param statut Status of lines to get (-1=all)
|
||||
* @param source Source of contact: external or thirdparty (llx_socpeople) or internal (llx_user)
|
||||
* @param list 0:all, 1:just id
|
||||
* @return array Array of contacts
|
||||
* @param statut int Status of lines to get (-1=all)
|
||||
* @param source string Source of contact: external or thirdparty (llx_socpeople) or internal (llx_user)
|
||||
* @param int list 0:Return array contains all properties, 1:Return array contains just id
|
||||
* @return array Array of contacts
|
||||
*/
|
||||
function liste_contact($statut=-1,$source='external',$list=0)
|
||||
{
|
||||
@ -278,7 +278,7 @@ class CommonObject
|
||||
$sql = "SELECT ec.rowid, ec.statut, ec.fk_socpeople as id";
|
||||
if ($source == 'internal') $sql.=", '-1' as socid";
|
||||
if ($source == 'external' || $source == 'thirdparty') $sql.=", t.fk_soc as socid";
|
||||
$sql.= ", t.name as nom, t.firstname";
|
||||
$sql.= ", t.civilite as civility, t.name as lastname, t.firstname, t.email";
|
||||
$sql.= ", tc.source, tc.element, tc.code, tc.libelle";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact tc";
|
||||
$sql.= ", ".MAIN_DB_PREFIX."element_contact ec";
|
||||
@ -307,7 +307,9 @@ class CommonObject
|
||||
{
|
||||
$transkey="TypeContact_".$obj->element."_".$obj->source."_".$obj->code;
|
||||
$libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle);
|
||||
$tab[$i]=array('source'=>$obj->source,'socid'=>$obj->socid,'id'=>$obj->id,'nom'=>$obj->nom, 'firstname'=>$obj->firstname,
|
||||
$tab[$i]=array('source'=>$obj->source,'socid'=>$obj->socid,'id'=>$obj->id,
|
||||
'nom'=>$obj->lastname, // For backward compatibility
|
||||
'civility'=>$obj->civility, 'lastname'=>$obj->lastname, 'firstname'=>$obj->firstname, 'email'=>$obj->email,
|
||||
'rowid'=>$obj->rowid,'code'=>$obj->code,'libelle'=>$libelle_type,'status'=>$obj->statut);
|
||||
}
|
||||
else
|
||||
@ -329,9 +331,10 @@ class CommonObject
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Le detail d'un contact
|
||||
* \param rowid L'identifiant du contact
|
||||
* \return object L'objet construit par DoliDb.fetch_object
|
||||
* Return fetch cursor of a contact
|
||||
* FIXME We should never return an open db cursor
|
||||
* @param rowid L'identifiant du contact
|
||||
* @return object L'objet construit par DoliDb.fetch_object
|
||||
*/
|
||||
function detail_contact($rowid)
|
||||
{
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
* \ingroup core
|
||||
* \brief Fichier de la classe de stockage de la config courante
|
||||
* \remarks La config est stockee dans le fichier conf/conf.php
|
||||
* \version $Id: conf.class.php,v 1.59 2011/07/01 23:06:06 eldy Exp $
|
||||
* \version $Id: conf.class.php,v 1.60 2011/07/09 05:28:42 hregis Exp $
|
||||
*/
|
||||
|
||||
|
||||
@ -363,7 +363,6 @@ class Conf
|
||||
// Defini MAIN_GRAPH_LIBRARY
|
||||
if (empty($this->global->MAIN_GRAPH_LIBRARY)) $this->global->MAIN_GRAPH_LIBRARY = 'artichow';
|
||||
|
||||
if (! isset($this->global->MAIN_MAIL_EMAIL_INLINE_IMAGES)) $this->global->MAIN_MAIL_EMAIL_INLINE_IMAGES=1;
|
||||
if (! isset($this->global->FCKEDITOR_EDITORNAME)) $this->global->FCKEDITOR_EDITORNAME='ckeditor'; // fckeditor to switch
|
||||
|
||||
// Format for date (used by default when not found or searched in lang)
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
* \file htdocs/core/class/html.form.class.php
|
||||
* \ingroup core
|
||||
* \brief File of class with all html predefined components
|
||||
* \version $Id: html.form.class.php,v 1.186 2011/07/04 11:33:22 eldy Exp $
|
||||
* \version $Id: html.form.class.php,v 1.188 2011/07/10 17:28:09 hregis Exp $
|
||||
*/
|
||||
|
||||
|
||||
@ -876,7 +876,7 @@ class Form
|
||||
$selected_input_value=$product->ref;
|
||||
}
|
||||
// mode=1 means customers products
|
||||
print ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT.'/product/ajaxproducts.php', 'outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=1&status='.$status.'&finished='.$finished, $conf->global->PRODUIT_USE_SEARCH_TO_SELECT);
|
||||
print ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT.'/product/ajaxproducts.php', 'htmlname='.$htmlname.'&outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=1&status='.$status.'&finished='.$finished, $conf->global->PRODUIT_USE_SEARCH_TO_SELECT);
|
||||
if (! $hidelabel) print $langs->trans("RefOrLabel").' : ';
|
||||
print '<input type="text" size="20" name="search_'.$htmlname.'" id="search_'.$htmlname.'" value="'.$selected_input_value.'" />';
|
||||
print '<br>';
|
||||
@ -1117,7 +1117,7 @@ class Form
|
||||
if ($conf->global->PRODUIT_USE_SEARCH_TO_SELECT)
|
||||
{
|
||||
// mode=2 means suppliers products
|
||||
print ajax_autocompleter('', $htmlname, DOL_URL_ROOT.'/product/ajaxproducts.php', 'outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=2&status='.$status.'&finished='.$finished, $conf->global->PRODUIT_USE_SEARCH_TO_SELECT);
|
||||
print ajax_autocompleter('', $htmlname, DOL_URL_ROOT.'/product/ajaxproducts.php', 'htmlname='.$htmlname.'&outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=2&status='.$status.'&finished='.$finished, $conf->global->PRODUIT_USE_SEARCH_TO_SELECT);
|
||||
print $langs->trans("RefOrLabel").' : <input type="text" size="16" name="search_'.$htmlname.'" id="search_'.$htmlname.'">';
|
||||
print '<br>';
|
||||
}
|
||||
@ -3146,7 +3146,7 @@ class Form
|
||||
* @param key_in_label 1 pour afficher la key dans la valeur "[key] value"
|
||||
* @param value_as_key 1 to use value as key
|
||||
* @param option Valeur de l'option en fonction du type choisi
|
||||
* @param translate Traduire la valeur
|
||||
* @param translate Translate and encode value
|
||||
* @param maxlen Length maximum for labels
|
||||
* @param disabled Html select box is disabled
|
||||
* @return string HTML select string
|
||||
@ -3178,13 +3178,13 @@ class Form
|
||||
if ($key_in_label)
|
||||
{
|
||||
$newval=($translate?$langs->trans($value):$value);
|
||||
$selectOptionValue = $key.' - '.($maxlen?dol_trunc($newval,$maxlen):$newval);
|
||||
$selectOptionValue = dol_htmlentitiesbr($key.' - '.($maxlen?dol_trunc($newval,$maxlen):$newval));
|
||||
$out.=$selectOptionValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
$newval=($translate?$langs->trans($value):$value);
|
||||
$selectOptionValue = ($maxlen?dol_trunc($newval,$maxlen):$newval);
|
||||
$selectOptionValue = dol_htmlentitiesbr($maxlen?dol_trunc($newval,$maxlen):$newval);
|
||||
if ($value == '' || $value == '-') { $selectOptionValue=' '; }
|
||||
$out.=$selectOptionValue;
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
* \file htdocs/core/class/html.formfile.class.php
|
||||
* \ingroup core
|
||||
* \brief File of class to offer components to list and upload files
|
||||
* \version $Id: html.formfile.class.php,v 1.46 2011/07/06 21:12:34 eldy Exp $
|
||||
* \version $Id: html.formfile.class.php,v 1.47 2011/07/10 21:17:14 eldy Exp $
|
||||
*/
|
||||
|
||||
|
||||
@ -185,6 +185,7 @@ class FormFile
|
||||
|
||||
global $langs,$bc,$conf;
|
||||
|
||||
$forname='builddoc';
|
||||
$out='';
|
||||
$var=true;
|
||||
|
||||
@ -386,7 +387,7 @@ class FormFile
|
||||
$buttonlabeltoshow=$buttonlabel;
|
||||
if (empty($buttonlabel)) $buttonlabel=$langs->trans('Generate');
|
||||
|
||||
if (empty($noform)) $out.= '<form action="'.$urlsource.(empty($conf->global->MAIN_JUMP_TAG)?'':'#builddoc').'" method="post">';
|
||||
if (empty($noform)) $out.= '<form action="'.$urlsource.(empty($conf->global->MAIN_JUMP_TAG)?'':'#builddoc').'" name="'.$forname.'" method="post">';
|
||||
$out.= '<input type="hidden" name="action" value="builddoc">';
|
||||
$out.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
|
||||
@ -436,8 +437,7 @@ class FormFile
|
||||
|
||||
// Button
|
||||
$out.= '<td align="center" colspan="'.($delallowed?'2':'1').'" class="formdocbutton">';
|
||||
$out.= '<input class="button" ';
|
||||
//print ((is_array($modellist) && sizeof($modellist))?'':' disabled="true"') // Always allow button "Generate" (even if no model activated)
|
||||
$out.= '<input class="button" id="'.$forname.'_generatebutton"';
|
||||
$out.= ' type="submit" value="'.$buttonlabel.'"';
|
||||
if (! $allowgenifempty && ! is_array($modellist) && empty($modellist)) $out.= ' disabled="true"';
|
||||
$out.= '>';
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
<?PHP
|
||||
/* Copyright (C) 2005-2010 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
/* Copyright (C) 2005-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005-2011 Regis Houssin <regis@dolibarr.fr>
|
||||
* Copyright (C) 2010-2011 Juanjo Menent <jmenent@2byte.es>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -21,7 +22,7 @@
|
||||
* \file htdocs/core/class/html.formmail.class.php
|
||||
* \ingroup core
|
||||
* \brief Fichier de la classe permettant la generation du formulaire html d'envoi de mail unitaire
|
||||
* \version $Id: html.formmail.class.php,v 1.28 2011/07/07 15:54:03 simnandez Exp $
|
||||
* \version $Id: html.formmail.class.php,v 1.31 2011/07/10 20:03:41 eldy Exp $
|
||||
*/
|
||||
require_once(DOL_DOCUMENT_ROOT ."/core/class/html.form.class.php");
|
||||
|
||||
@ -123,9 +124,9 @@ class FormMail
|
||||
/**
|
||||
* Add a file into the list of attached files (stored in SECTION array)
|
||||
*
|
||||
* @param $path
|
||||
* @param $file
|
||||
* @param $type
|
||||
* @param string $path Full absolute path on filesystem of file, including file name
|
||||
* @param string $file Only filename
|
||||
* @param string $type Mime type
|
||||
*/
|
||||
function add_attached_files($path,$file,$type)
|
||||
{
|
||||
@ -309,17 +310,18 @@ class FormMail
|
||||
if ($this->witherrorsto)
|
||||
{
|
||||
//if (! $this->errorstomail) $this->errorstomail=$this->frommail;
|
||||
$errorstomail = (! empty($conf->global->MAIN_MAIL_ERRORS_TO) ? $conf->global->MAIN_MAIL_ERRORS_TO : $this->errorstomail);
|
||||
if ($this->witherrorstoreadonly)
|
||||
{
|
||||
$out.= '<input type="hidden" id="errorstomail" name="errorstomail" value="'.$this->errorstomail.'" />';
|
||||
$out.= '<input type="hidden" id="errorstomail" name="errorstomail" value="'.$errorstomail.'" />';
|
||||
$out.= '<tr><td>'.$langs->trans("MailErrorsTo").'</td><td>';
|
||||
$out.= $this->errorstomail;
|
||||
$out.= $errorstomail;
|
||||
$out.= "</td></tr>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$out.= '<tr><td>'.$langs->trans("MailErrorsTo").'</td><td>';
|
||||
$out.= '<input size="30" id="errorstomail" name="errorstomail" value="'.$this->errorstomail.'" />';
|
||||
$out.= '<input size="30" id="errorstomail" name="errorstomail" value="'.$errorstomail.'" />';
|
||||
$out.= "</td></tr>\n";
|
||||
}
|
||||
}
|
||||
@ -503,14 +505,27 @@ class FormMail
|
||||
$out.= '<tr>';
|
||||
$out.= '<td width="180">'.$langs->trans("MailFile").'</td>';
|
||||
$out.= '<td>';
|
||||
//print '<table class="nobordernopadding" width="100%"><tr><td>';
|
||||
// FIXME Trick to have param removedfile containing nb of image to delete. But this does not works without javascript
|
||||
$out.= '<input type="hidden" class="removedfilehidden" name="removedfile" value="">'."\n";
|
||||
$out.= '<script type="text/javascript" language="javascript">';
|
||||
$out.= 'jQuery(document).ready(function () {';
|
||||
$out.= ' jQuery(".removedfile").click(function() {';
|
||||
$out.= ' jQuery(".removedfilehidden").val(jQuery(this).val());';
|
||||
$out.= ' });';
|
||||
$out.= '})';
|
||||
$out.= '</script>'."\n";
|
||||
if (sizeof($listofpaths))
|
||||
{
|
||||
foreach($listofpaths as $key => $val)
|
||||
{
|
||||
$out.= img_mime($listofnames[$key]).' '.$listofnames[$key];
|
||||
if (! $this->withfilereadonly) $out.= ' <input type="image" style="border: 0px;" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/delete.png" value="'.($key+1).'" id="removedfile" name="removedfile" />';
|
||||
$out.= '<br>';
|
||||
$out.= '<div id="attachfile_'.$key.'">';
|
||||
$out.= img_mime($listofnames[$key]).' '.$listofnames[$key];
|
||||
if (! $this->withfilereadonly)
|
||||
{
|
||||
$out.= ' <input type="image" style="border: 0px;" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/delete.png" value="'.($key+1).'" class="removedfile" id="removedfile_'.$key.'" name="removedfile_'.$key.'" />';
|
||||
//$out.= ' <a href="'.$_SERVER["PHP_SELF"].'?removedfile='.($key+1).' id="removedfile_'.$key.'">'.img_delete($langs->trans("Delete").'</a>';
|
||||
}
|
||||
$out.= '<br /></div>';
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -519,11 +534,9 @@ class FormMail
|
||||
}
|
||||
if ($this->withfile == 2) // Can add other files
|
||||
{
|
||||
//print '<td><td align="right">';
|
||||
$out.= '<input type="file" class="flat" id="addedfile" name="addedfile" value="'.$langs->trans("Upload").'" />';
|
||||
$out.= ' ';
|
||||
$out.= '<input type="submit" class="button" id="'.$addfileaction.'" name="'.$addfileaction.'" value="'.$langs->trans("MailingAddFile").'" />';
|
||||
//print '</td></tr></table>';
|
||||
}
|
||||
$out.= "</td></tr>\n";
|
||||
}
|
||||
@ -543,7 +556,7 @@ class FormMail
|
||||
if ($this->param["models"]=='invoice_supplier_send') { $defaultmessage=$langs->transnoentities("PredefinedMailContentSendSupplierInvoice"); }
|
||||
if ($this->param["models"]=='shipping_send') { $defaultmessage=$langs->transnoentities("PredefinedMailContentSendShipping"); }
|
||||
if ($this->param["models"]=='fichinter_send') { $defaultmessage=$langs->transnoentities("PredefinedMailContentSendFichInter"); }
|
||||
|
||||
|
||||
if ($conf->paypal->enabled && $conf->global->PAYPAL_ADD_PAYMENT_URL)
|
||||
{
|
||||
require_once(DOL_DOCUMENT_ROOT."/paypal/lib/paypal.lib.php");
|
||||
|
||||
@ -15,11 +15,12 @@
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* $Id: ajaxfileupload.tpl.php,v 1.9 2011/07/08 14:00:08 hregis Exp $
|
||||
* $Id: ajaxfileupload.tpl.php,v 1.10 2011/07/10 13:39:34 eldy Exp $
|
||||
*/
|
||||
?>
|
||||
|
||||
<!-- START TEMPLATE FILE UPLOAD -->
|
||||
<!-- Warning id on script is not W3C compliant and is reported as error by phpcs but it is required by jfilepload plugin -->
|
||||
<script id="template-upload" type="text/x-jquery-tmpl">
|
||||
<tr class="template-upload{{if error}} ui-state-error{{/if}}">
|
||||
<td class="name">${name}</td>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* \file htdocs/document.php
|
||||
* \brief Wrapper to download data files
|
||||
* \version $Id: document.php,v 1.121 2011/06/28 13:42:06 hregis Exp $
|
||||
* \version $Id: document.php,v 1.122 2011/07/09 00:15:16 eldy Exp $
|
||||
* \remarks Call of this wrapper is made with URL:
|
||||
* document.php?modulepart=repfichierconcerne&file=pathrelatifdufichier
|
||||
*/
|
||||
@ -41,7 +41,11 @@ if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1');
|
||||
if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1');
|
||||
if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
|
||||
|
||||
// C'est un wrapper, donc header vierge
|
||||
/**
|
||||
* Wrapper, donc header vierge
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
function llxHeader() { }
|
||||
|
||||
require("./main.inc.php"); // Load $user and permissions
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
* \file htdocs/expedition/fiche.php
|
||||
* \ingroup expedition
|
||||
* \brief Fiche descriptive d'une expedition
|
||||
* \version $Id: fiche.php,v 1.209 2011/07/07 21:32:19 eldy Exp $
|
||||
* \version $Id: fiche.php,v 1.210 2011/07/10 20:03:39 eldy Exp $
|
||||
*/
|
||||
|
||||
require("../main.inc.php");
|
||||
@ -291,9 +291,9 @@ if ($_POST['addfile'])
|
||||
|
||||
// Set tmp user directory TODO Use a dedicated directory for temp mails files
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_add_file_process($upload_dir,0,0);
|
||||
$mesg=dol_add_file_process($upload_dir_tmp,0,0);
|
||||
|
||||
$action ='presend';
|
||||
}
|
||||
@ -307,7 +307,7 @@ if (! empty($_POST['removedfile']))
|
||||
|
||||
// Set tmp user directory
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_remove_file_process($_POST['removedfile'],0);
|
||||
|
||||
@ -1381,5 +1381,5 @@ else
|
||||
|
||||
$db->close();
|
||||
|
||||
llxFooter('$Date: 2011/07/07 21:32:19 $ - $Revision: 1.209 $');
|
||||
llxFooter('$Date: 2011/07/10 20:03:39 $ - $Revision: 1.210 $');
|
||||
?>
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
/** \file htdocs/fichinter/class/fichinter.class.php
|
||||
* \ingroup ficheinter
|
||||
* \brief Fichier de la classe des gestion des fiches interventions
|
||||
* \version $Id: fichinter.class.php,v 1.20 2011/07/08 09:18:54 simnandez Exp $
|
||||
* \version $Id: fichinter.class.php,v 1.21 2011/07/10 13:48:25 eldy Exp $
|
||||
*/
|
||||
|
||||
require_once(DOL_DOCUMENT_ROOT ."/core/class/commonobject.class.php");
|
||||
@ -63,12 +63,10 @@ class Fichinter extends CommonObject
|
||||
/**
|
||||
* Class constructor
|
||||
* @param DB Data base handler access
|
||||
* @param socid Id society
|
||||
*/
|
||||
function Fichinter($DB, $socid="")
|
||||
function Fichinter($DB)
|
||||
{
|
||||
$this->db = $DB ;
|
||||
$this->socid = $socid;
|
||||
$this->products = array();
|
||||
$this->fk_project = 0;
|
||||
$this->statut = 0;
|
||||
@ -298,7 +296,7 @@ class Fichinter extends CommonObject
|
||||
/**
|
||||
* Validate a intervention
|
||||
* @param user User that validate
|
||||
* @param outputdir
|
||||
* @param outputdir
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function setValid($user, $outputdir)
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
* \file htdocs/fichinter/fiche.php
|
||||
* \brief Fichier fiche intervention
|
||||
* \ingroup ficheinter
|
||||
* \version $Id: fiche.php,v 1.170 2011/07/07 22:02:48 eldy Exp $
|
||||
* \version $Id: fiche.php,v 1.171 2011/07/10 20:03:39 eldy Exp $
|
||||
*/
|
||||
|
||||
require("../main.inc.php");
|
||||
@ -444,6 +444,39 @@ if ($action == 'down' && $user->rights->ficheinter->creer)
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Add file in email form
|
||||
*/
|
||||
if ($_POST['addfile'])
|
||||
{
|
||||
require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php");
|
||||
|
||||
// Set tmp user directory TODO Use a dedicated directory for temp mails files
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_add_file_process($upload_dir_tmp,0,0);
|
||||
|
||||
$action='presend';
|
||||
}
|
||||
|
||||
/*
|
||||
* Remove file in email form
|
||||
*/
|
||||
if (! empty($_POST['removedfile']))
|
||||
{
|
||||
require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php");
|
||||
|
||||
// Set tmp user directory
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_remove_file_process($_POST['removedfile'],0);
|
||||
|
||||
$action='presend';
|
||||
}
|
||||
|
||||
/*
|
||||
* Send mail
|
||||
*/
|
||||
@ -1148,7 +1181,7 @@ elseif ($fichinterid)
|
||||
$formmail = new FormMail($db);
|
||||
$formmail->fromtype = 'user';
|
||||
$formmail->fromid = $user->id;
|
||||
$formmail->fromname = $user->fullname;
|
||||
$formmail->fromname = $user->getFullName($langs);
|
||||
$formmail->frommail = $user->email;
|
||||
$formmail->withfrom=1;
|
||||
$formmail->withto=empty($_POST["sendto"])?1:$_POST["sendto"];
|
||||
@ -1158,7 +1191,7 @@ elseif ($fichinterid)
|
||||
$formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC;
|
||||
$formmail->withtocccsocid=0;
|
||||
$formmail->withtopic=$langs->trans('SendInterventionRef','__FICHINTERREF__');
|
||||
$formmail->withfile=1;
|
||||
$formmail->withfile=2;
|
||||
$formmail->withbody=1;
|
||||
$formmail->withdeliveryreceipt=1;
|
||||
$formmail->withcancel=1;
|
||||
@ -1186,5 +1219,5 @@ elseif ($fichinterid)
|
||||
|
||||
$db->close();
|
||||
|
||||
llxFooter('$Date: 2011/07/07 22:02:48 $ - $Revision: 1.170 $');
|
||||
llxFooter('$Date: 2011/07/10 20:03:39 $ - $Revision: 1.171 $');
|
||||
?>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
* \file htdocs/fourn/commande/fiche.php
|
||||
* \ingroup supplier, order
|
||||
* \brief Card supplier order
|
||||
* \version $Id: fiche.php,v 1.231 2011/07/07 21:32:21 eldy Exp $
|
||||
* \version $Id: fiche.php,v 1.232 2011/07/10 20:03:40 eldy Exp $
|
||||
*/
|
||||
|
||||
require("../../main.inc.php");
|
||||
@ -578,9 +578,9 @@ if ($_POST['addfile'])
|
||||
|
||||
// Set tmp user directory TODO Use a dedicated directory for temp mails files
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_add_file_process($upload_dir,0,0);
|
||||
$mesg=dol_add_file_process($upload_dir_tmp,0,0);
|
||||
|
||||
$action='presend';
|
||||
}
|
||||
@ -594,7 +594,7 @@ if (! empty($_POST['removedfile']))
|
||||
|
||||
// Set tmp user directory
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_remove_file_process($_POST['removedfile'],0);
|
||||
|
||||
@ -1545,5 +1545,5 @@ if ($id > 0 || ! empty($ref))
|
||||
|
||||
$db->close();
|
||||
|
||||
llxFooter('$Date: 2011/07/07 21:32:21 $ - $Revision: 1.231 $');
|
||||
llxFooter('$Date: 2011/07/10 20:03:40 $ - $Revision: 1.232 $');
|
||||
?>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
* \file htdocs/fourn/facture/fiche.php
|
||||
* \ingroup facture, fournisseur
|
||||
* \brief Page for supplier invoice card (view, edit, validate)
|
||||
* \version $Id: fiche.php,v 1.260 2011/07/07 21:32:19 eldy Exp $
|
||||
* \version $Id: fiche.php,v 1.261 2011/07/10 20:03:39 eldy Exp $
|
||||
*/
|
||||
|
||||
require("../../main.inc.php");
|
||||
@ -629,9 +629,9 @@ if ($_POST['addfile'])
|
||||
|
||||
// Set tmp user directory TODO Use a dedicated directory for temp mails files
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_add_file_process($upload_dir,0,0);
|
||||
$mesg=dol_add_file_process($upload_dir_tmp,0,0);
|
||||
|
||||
$_GET["action"]='presend';
|
||||
$_POST["action"]='presend';
|
||||
@ -646,7 +646,7 @@ if (! empty($_POST['removedfile']))
|
||||
|
||||
// Set tmp user directory
|
||||
$vardir=$conf->user->dir_output."/".$user->id;
|
||||
$upload_dir = $vardir.'/temp/';
|
||||
$upload_dir_tmp = $vardir.'/temp';
|
||||
|
||||
$mesg=dol_remove_file_process($_POST['removedfile'],0);
|
||||
|
||||
@ -1916,5 +1916,5 @@ else
|
||||
|
||||
$db->close();
|
||||
|
||||
llxFooter('$Date: 2011/07/07 21:32:19 $ - $Revision: 1.260 $');
|
||||
llxFooter('$Date: 2011/07/10 20:03:39 $ - $Revision: 1.261 $');
|
||||
?>
|
||||
|
||||
@ -1,71 +0,0 @@
|
||||
<%
|
||||
' FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
' Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
'
|
||||
' == BEGIN LICENSE ==
|
||||
'
|
||||
' Licensed under the terms of any of the following licenses at your
|
||||
' choice:
|
||||
'
|
||||
' - GNU General Public License Version 2 or later (the "GPL")
|
||||
' http://www.gnu.org/licenses/gpl.html
|
||||
'
|
||||
' - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
' http://www.gnu.org/licenses/lgpl.html
|
||||
'
|
||||
' - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
' http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
'
|
||||
' == END LICENSE ==
|
||||
'
|
||||
' This file include the functions that create the base XML output.
|
||||
%>
|
||||
<%
|
||||
|
||||
Sub SetXmlHeaders()
|
||||
' Cleans the response buffer.
|
||||
Response.Clear()
|
||||
|
||||
' Prevent the browser from caching the result.
|
||||
Response.CacheControl = "no-cache"
|
||||
|
||||
' Set the response format.
|
||||
on error resume next
|
||||
' The CodePage property isn't supported in Windows 2000. #2604
|
||||
Response.CodePage = 65001
|
||||
on error goto 0
|
||||
|
||||
Response.CharSet = "UTF-8"
|
||||
Response.ContentType = "text/xml"
|
||||
End Sub
|
||||
|
||||
Sub CreateXmlHeader( command, resourceType, currentFolder, url )
|
||||
' Create the XML document header.
|
||||
Response.Write "<?xml version=""1.0"" encoding=""utf-8"" ?>"
|
||||
|
||||
' Create the main "Connector" node.
|
||||
Response.Write "<Connector command=""" & command & """ resourceType=""" & resourceType & """>"
|
||||
|
||||
' Add the current folder node.
|
||||
Response.Write "<CurrentFolder path=""" & ConvertToXmlAttribute( currentFolder ) & """ url=""" & ConvertToXmlAttribute( url ) & """ />"
|
||||
End Sub
|
||||
|
||||
Sub CreateXmlFooter()
|
||||
Response.Write "</Connector>"
|
||||
End Sub
|
||||
|
||||
Sub SendError( number, text )
|
||||
SetXmlHeaders
|
||||
|
||||
' Create the XML document header.
|
||||
Response.Write "<?xml version=""1.0"" encoding=""utf-8"" ?>"
|
||||
|
||||
If text <> "" then
|
||||
Response.Write "<Connector><Error number=""" & number & """ text=""" & Server.HTMLEncode( text ) & """ /></Connector>"
|
||||
else
|
||||
Response.Write "<Connector><Error number=""" & number & """ /></Connector>"
|
||||
end if
|
||||
|
||||
Response.End
|
||||
End Sub
|
||||
%>
|
||||
@ -1,353 +0,0 @@
|
||||
<%
|
||||
' FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
' Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
'
|
||||
' == BEGIN LICENSE ==
|
||||
'
|
||||
' Licensed under the terms of any of the following licenses at your
|
||||
' choice:
|
||||
'
|
||||
' - GNU General Public License Version 2 or later (the "GPL")
|
||||
' http://www.gnu.org/licenses/gpl.html
|
||||
'
|
||||
' - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
' http://www.gnu.org/licenses/lgpl.html
|
||||
'
|
||||
' - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
' http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
'
|
||||
' == END LICENSE ==
|
||||
'
|
||||
' These are the classes used to handle ASP upload without using third
|
||||
' part components (OCX/DLL).
|
||||
%>
|
||||
<%
|
||||
'**********************************************
|
||||
' File: NetRube_Upload.asp
|
||||
' Version: NetRube Upload Class Version 2.3 Build 20070528
|
||||
' Author: NetRube
|
||||
' Email: NetRube@126.com
|
||||
' Date: 05/28/2007
|
||||
' Comments: The code for the Upload.
|
||||
' This can free usage, but please
|
||||
' not to delete this copyright information.
|
||||
' If you have a modification version,
|
||||
' Please send out a duplicate to me.
|
||||
'**********************************************
|
||||
' 文件名: NetRube_Upload.asp
|
||||
' 版本: NetRube Upload Class Version 2.3 Build 20070528
|
||||
' 作者: NetRube(网络乡巴佬)
|
||||
' 电子邮件: NetRube@126.com
|
||||
' 日期: 2007年05月28日
|
||||
' 声明: 文件上传类
|
||||
' 本上传类可以自由使用,但请保留此版权声明信息
|
||||
' 如果您对本上传类进行修改增强,
|
||||
' 请发送一份给俺。
|
||||
'**********************************************
|
||||
|
||||
Class NetRube_Upload
|
||||
|
||||
Public File, Form
|
||||
Private oSourceData
|
||||
Private nMaxSize, nErr, sAllowed, sDenied, sHtmlExtensions
|
||||
|
||||
Private Sub Class_Initialize
|
||||
nErr = 0
|
||||
nMaxSize = 1048576
|
||||
|
||||
Set File = Server.CreateObject("Scripting.Dictionary")
|
||||
File.CompareMode = 1
|
||||
Set Form = Server.CreateObject("Scripting.Dictionary")
|
||||
Form.CompareMode = 1
|
||||
|
||||
Set oSourceData = Server.CreateObject("ADODB.Stream")
|
||||
oSourceData.Type = 1
|
||||
oSourceData.Mode = 3
|
||||
oSourceData.Open
|
||||
End Sub
|
||||
|
||||
Private Sub Class_Terminate
|
||||
Form.RemoveAll
|
||||
Set Form = Nothing
|
||||
File.RemoveAll
|
||||
Set File = Nothing
|
||||
|
||||
oSourceData.Close
|
||||
Set oSourceData = Nothing
|
||||
End Sub
|
||||
|
||||
Public Property Get Version
|
||||
Version = "NetRube Upload Class Version 2.3 Build 20070528"
|
||||
End Property
|
||||
|
||||
Public Property Get ErrNum
|
||||
ErrNum = nErr
|
||||
End Property
|
||||
|
||||
Public Property Let MaxSize(nSize)
|
||||
nMaxSize = nSize
|
||||
End Property
|
||||
|
||||
Public Property Let Allowed(sExt)
|
||||
sAllowed = sExt
|
||||
End Property
|
||||
|
||||
Public Property Let Denied(sExt)
|
||||
sDenied = sExt
|
||||
End Property
|
||||
|
||||
Public Property Let HtmlExtensions(sExt)
|
||||
sHtmlExtensions = sExt
|
||||
End Property
|
||||
|
||||
Public Sub GetData
|
||||
Dim aCType
|
||||
aCType = Split(Request.ServerVariables("HTTP_CONTENT_TYPE"), ";")
|
||||
if ( uBound(aCType) < 0 ) then
|
||||
nErr = 1
|
||||
Exit Sub
|
||||
end if
|
||||
If aCType(0) <> "multipart/form-data" Then
|
||||
nErr = 1
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim nTotalSize
|
||||
nTotalSize = Request.TotalBytes
|
||||
If nTotalSize < 1 Then
|
||||
nErr = 2
|
||||
Exit Sub
|
||||
End If
|
||||
If nMaxSize > 0 And nTotalSize > nMaxSize Then
|
||||
nErr = 3
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
'Thankful long(yrl031715@163.com)
|
||||
'Fix upload large file.
|
||||
'**********************************************
|
||||
' 修正作者:long
|
||||
' 联系邮件: yrl031715@163.com
|
||||
' 修正时间:2007年5月6日
|
||||
' 修正说明:由于iis6的Content-Length 头信息中包含的请求长度超过了 AspMaxRequestEntityAllowed 的值(默认200K), IIS 将返回一个 403 错误信息.
|
||||
' 直接导致在iis6下调试FCKeditor上传功能时,一旦文件超过200K,上传文件时文件管理器失去响应,受此影响,文件的快速上传功能也存在在缺陷。
|
||||
' 在参考 宝玉 的 Asp无组件上传带进度条 演示程序后作出如下修改,以修正在iis6下的错误。
|
||||
|
||||
Dim nTotalBytes, nPartBytes, ReadBytes
|
||||
ReadBytes = 0
|
||||
nTotalBytes = Request.TotalBytes
|
||||
'循环分块读取
|
||||
Do While ReadBytes < nTotalBytes
|
||||
'分块读取
|
||||
nPartBytes = 64 * 1024 '分成每块64k
|
||||
If nPartBytes + ReadBytes > nTotalBytes Then
|
||||
nPartBytes = nTotalBytes - ReadBytes
|
||||
End If
|
||||
oSourceData.Write Request.BinaryRead(nPartBytes)
|
||||
ReadBytes = ReadBytes + nPartBytes
|
||||
Loop
|
||||
'**********************************************
|
||||
oSourceData.Position = 0
|
||||
|
||||
Dim oTotalData, oFormStream, sFormHeader, sFormName, bCrLf, nBoundLen, nFormStart, nFormEnd, nPosStart, nPosEnd, sBoundary
|
||||
|
||||
oTotalData = oSourceData.Read
|
||||
bCrLf = ChrB(13) & ChrB(10)
|
||||
sBoundary = MidB(oTotalData, 1, InStrB(1, oTotalData, bCrLf) - 1)
|
||||
nBoundLen = LenB(sBoundary) + 2
|
||||
nFormStart = nBoundLen
|
||||
|
||||
Set oFormStream = Server.CreateObject("ADODB.Stream")
|
||||
|
||||
Do While (nFormStart + 2) < nTotalSize
|
||||
nFormEnd = InStrB(nFormStart, oTotalData, bCrLf & bCrLf) + 3
|
||||
|
||||
With oFormStream
|
||||
.Type = 1
|
||||
.Mode = 3
|
||||
.Open
|
||||
oSourceData.Position = nFormStart
|
||||
oSourceData.CopyTo oFormStream, nFormEnd - nFormStart
|
||||
.Position = 0
|
||||
.Type = 2
|
||||
.CharSet = "UTF-8"
|
||||
sFormHeader = .ReadText
|
||||
.Close
|
||||
End With
|
||||
|
||||
nFormStart = InStrB(nFormEnd, oTotalData, sBoundary) - 1
|
||||
nPosStart = InStr(22, sFormHeader, " name=", 1) + 7
|
||||
nPosEnd = InStr(nPosStart, sFormHeader, """")
|
||||
sFormName = Mid(sFormHeader, nPosStart, nPosEnd - nPosStart)
|
||||
|
||||
If InStr(45, sFormHeader, " filename=", 1) > 0 Then
|
||||
Set File(sFormName) = New NetRube_FileInfo
|
||||
File(sFormName).FormName = sFormName
|
||||
File(sFormName).Start = nFormEnd
|
||||
File(sFormName).Size = nFormStart - nFormEnd - 2
|
||||
nPosStart = InStr(nPosEnd, sFormHeader, " filename=", 1) + 11
|
||||
nPosEnd = InStr(nPosStart, sFormHeader, """")
|
||||
File(sFormName).ClientPath = Mid(sFormHeader, nPosStart, nPosEnd - nPosStart)
|
||||
File(sFormName).Name = Mid(File(sFormName).ClientPath, InStrRev(File(sFormName).ClientPath, "\") + 1)
|
||||
File(sFormName).Ext = LCase(Mid(File(sFormName).Name, InStrRev(File(sFormName).Name, ".") + 1))
|
||||
nPosStart = InStr(nPosEnd, sFormHeader, "Content-Type: ", 1) + 14
|
||||
nPosEnd = InStr(nPosStart, sFormHeader, vbCr)
|
||||
File(sFormName).MIME = Mid(sFormHeader, nPosStart, nPosEnd - nPosStart)
|
||||
Else
|
||||
With oFormStream
|
||||
.Type = 1
|
||||
.Mode = 3
|
||||
.Open
|
||||
oSourceData.Position = nFormEnd
|
||||
oSourceData.CopyTo oFormStream, nFormStart - nFormEnd - 2
|
||||
.Position = 0
|
||||
.Type = 2
|
||||
.CharSet = "UTF-8"
|
||||
Form(sFormName) = .ReadText
|
||||
.Close
|
||||
End With
|
||||
End If
|
||||
|
||||
nFormStart = nFormStart + nBoundLen
|
||||
Loop
|
||||
|
||||
oTotalData = ""
|
||||
Set oFormStream = Nothing
|
||||
End Sub
|
||||
|
||||
Public Sub SaveAs(sItem, sFileName)
|
||||
If File(sItem).Size < 1 Then
|
||||
nErr = 2
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
If Not IsAllowed(File(sItem).Ext) Then
|
||||
nErr = 4
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
If InStr( LCase( sFileName ), "::$data" ) > 0 Then
|
||||
nErr = 4
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim sFileExt, iFileSize
|
||||
sFileExt = File(sItem).Ext
|
||||
iFileSize = File(sItem).Size
|
||||
|
||||
' Check XSS.
|
||||
If Not IsHtmlExtension( sFileExt ) Then
|
||||
' Calculate the size of data to load (max 1Kb).
|
||||
Dim iXSSSize
|
||||
iXSSSize = iFileSize
|
||||
|
||||
If iXSSSize > 1024 Then
|
||||
iXSSSize = 1024
|
||||
End If
|
||||
|
||||
' Read the data.
|
||||
Dim sData
|
||||
oSourceData.Position = File(sItem).Start
|
||||
sData = oSourceData.Read( iXSSSize ) ' Byte Array
|
||||
sData = ByteArray2Text( sData ) ' String
|
||||
|
||||
' Sniff HTML data.
|
||||
If SniffHtml( sData ) Then
|
||||
nErr = 4
|
||||
Exit Sub
|
||||
End If
|
||||
End If
|
||||
|
||||
Dim oFileStream
|
||||
Set oFileStream = Server.CreateObject("ADODB.Stream")
|
||||
With oFileStream
|
||||
.Type = 1
|
||||
.Mode = 3
|
||||
.Open
|
||||
oSourceData.Position = File(sItem).Start
|
||||
oSourceData.CopyTo oFileStream, File(sItem).Size
|
||||
.Position = 0
|
||||
.SaveToFile sFileName, 2
|
||||
.Close
|
||||
End With
|
||||
Set oFileStream = Nothing
|
||||
End Sub
|
||||
|
||||
Private Function IsAllowed(sExt)
|
||||
Dim oRE
|
||||
Set oRE = New RegExp
|
||||
oRE.IgnoreCase = True
|
||||
oRE.Global = True
|
||||
|
||||
If sDenied = "" Then
|
||||
oRE.Pattern = sAllowed
|
||||
IsAllowed = (sAllowed = "") Or oRE.Test(sExt)
|
||||
Else
|
||||
oRE.Pattern = sDenied
|
||||
IsAllowed = Not oRE.Test(sExt)
|
||||
End If
|
||||
|
||||
Set oRE = Nothing
|
||||
End Function
|
||||
|
||||
Private Function IsHtmlExtension( sExt )
|
||||
If sHtmlExtensions = "" Then
|
||||
Exit Function
|
||||
End If
|
||||
|
||||
Dim oRE
|
||||
Set oRE = New RegExp
|
||||
oRE.IgnoreCase = True
|
||||
oRE.Global = True
|
||||
oRE.Pattern = sHtmlExtensions
|
||||
|
||||
IsHtmlExtension = oRE.Test(sExt)
|
||||
|
||||
Set oRE = Nothing
|
||||
End Function
|
||||
|
||||
Private Function SniffHtml( sData )
|
||||
|
||||
Dim oRE
|
||||
Set oRE = New RegExp
|
||||
oRE.IgnoreCase = True
|
||||
oRE.Global = True
|
||||
|
||||
Dim aPatterns
|
||||
aPatterns = Array( "<!DOCTYPE\W*X?HTML", "<(body|head|html|img|pre|script|table|title)", "type\s*=\s*[\'""]?\s*(?:\w*/)?(?:ecma|java)", "(?:href|src|data)\s*=\s*[\'""]?\s*(?:ecma|java)script:", "url\s*\(\s*[\'""]?\s*(?:ecma|java)script:" )
|
||||
|
||||
Dim i
|
||||
For i = 0 to UBound( aPatterns )
|
||||
oRE.Pattern = aPatterns( i )
|
||||
If oRE.Test( sData ) Then
|
||||
SniffHtml = True
|
||||
Exit Function
|
||||
End If
|
||||
Next
|
||||
|
||||
SniffHtml = False
|
||||
|
||||
End Function
|
||||
|
||||
' Thanks to http://www.ericphelps.com/q193998/index.htm
|
||||
Private Function ByteArray2Text(varByteArray)
|
||||
Dim strData, strBuffer, lngCounter
|
||||
strData = ""
|
||||
strBuffer = ""
|
||||
For lngCounter = 0 to UBound(varByteArray)
|
||||
strBuffer = strBuffer & Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1)))
|
||||
'Keep strBuffer at 1k bytes maximum
|
||||
If lngCounter Mod 1024 = 0 Then
|
||||
strData = strData & strBuffer
|
||||
strBuffer = ""
|
||||
End If
|
||||
Next
|
||||
ByteArray2Text = strData & strBuffer
|
||||
End Function
|
||||
|
||||
End Class
|
||||
|
||||
Class NetRube_FileInfo
|
||||
Dim FormName, ClientPath, Path, Name, Ext, Content, Size, MIME, Start
|
||||
End Class
|
||||
%>
|
||||
@ -1,202 +0,0 @@
|
||||
<%
|
||||
' FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
' Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
'
|
||||
' == BEGIN LICENSE ==
|
||||
'
|
||||
' Licensed under the terms of any of the following licenses at your
|
||||
' choice:
|
||||
'
|
||||
' - GNU General Public License Version 2 or later (the "GPL")
|
||||
' http://www.gnu.org/licenses/gpl.html
|
||||
'
|
||||
' - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
' http://www.gnu.org/licenses/lgpl.html
|
||||
'
|
||||
' - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
' http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
'
|
||||
' == END LICENSE ==
|
||||
'
|
||||
' This file include the functions that handle the Command requests
|
||||
' in the ASP Connector.
|
||||
%>
|
||||
<%
|
||||
Sub GetFolders( resourceType, currentFolder )
|
||||
' Map the virtual path to the local server path.
|
||||
Dim sServerDir
|
||||
sServerDir = ServerMapFolder( resourceType, currentFolder, "GetFolders" )
|
||||
|
||||
' Open the "Folders" node.
|
||||
Response.Write "<Folders>"
|
||||
|
||||
Dim oFSO, oCurrentFolder, oFolders, oFolder
|
||||
Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )
|
||||
if not (oFSO.FolderExists( sServerDir ) ) then
|
||||
Set oFSO = Nothing
|
||||
SendError 102, currentFolder
|
||||
end if
|
||||
|
||||
Set oCurrentFolder = oFSO.GetFolder( sServerDir )
|
||||
Set oFolders = oCurrentFolder.SubFolders
|
||||
|
||||
For Each oFolder in oFolders
|
||||
Response.Write "<Folder name=""" & ConvertToXmlAttribute( oFolder.name ) & """ />"
|
||||
Next
|
||||
|
||||
Set oFSO = Nothing
|
||||
|
||||
' Close the "Folders" node.
|
||||
Response.Write "</Folders>"
|
||||
End Sub
|
||||
|
||||
Sub GetFoldersAndFiles( resourceType, currentFolder )
|
||||
' Map the virtual path to the local server path.
|
||||
Dim sServerDir
|
||||
sServerDir = ServerMapFolder( resourceType, currentFolder, "GetFoldersAndFiles" )
|
||||
|
||||
Dim oFSO, oCurrentFolder, oFolders, oFolder, oFiles, oFile
|
||||
Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )
|
||||
if not (oFSO.FolderExists( sServerDir ) ) then
|
||||
Set oFSO = Nothing
|
||||
SendError 102, currentFolder
|
||||
end if
|
||||
|
||||
Set oCurrentFolder = oFSO.GetFolder( sServerDir )
|
||||
Set oFolders = oCurrentFolder.SubFolders
|
||||
Set oFiles = oCurrentFolder.Files
|
||||
|
||||
' Open the "Folders" node.
|
||||
Response.Write "<Folders>"
|
||||
|
||||
For Each oFolder in oFolders
|
||||
Response.Write "<Folder name=""" & ConvertToXmlAttribute( oFolder.name ) & """ />"
|
||||
Next
|
||||
|
||||
' Close the "Folders" node.
|
||||
Response.Write "</Folders>"
|
||||
|
||||
' Open the "Files" node.
|
||||
Response.Write "<Files>"
|
||||
|
||||
For Each oFile in oFiles
|
||||
Dim iFileSize
|
||||
iFileSize = Round( oFile.size / 1024 )
|
||||
If ( iFileSize < 1 AND oFile.size <> 0 ) Then iFileSize = 1
|
||||
|
||||
Response.Write "<File name=""" & ConvertToXmlAttribute( oFile.name ) & """ size=""" & iFileSize & """ />"
|
||||
Next
|
||||
|
||||
' Close the "Files" node.
|
||||
Response.Write "</Files>"
|
||||
End Sub
|
||||
|
||||
Sub CreateFolder( resourceType, currentFolder )
|
||||
Dim sErrorNumber
|
||||
|
||||
Dim sNewFolderName
|
||||
sNewFolderName = Request.QueryString( "NewFolderName" )
|
||||
sNewFolderName = SanitizeFolderName( sNewFolderName )
|
||||
|
||||
If ( sNewFolderName = "" OR InStr( 1, sNewFolderName, ".." ) > 0 ) Then
|
||||
sErrorNumber = "102"
|
||||
Else
|
||||
' Map the virtual path to the local server path of the current folder.
|
||||
Dim sServerDir
|
||||
sServerDir = ServerMapFolder( resourceType, CombineLocalPaths(currentFolder, sNewFolderName), "CreateFolder" )
|
||||
|
||||
On Error Resume Next
|
||||
|
||||
CreateServerFolder sServerDir
|
||||
|
||||
Dim iErrNumber, sErrDescription
|
||||
iErrNumber = err.number
|
||||
sErrDescription = err.Description
|
||||
|
||||
On Error Goto 0
|
||||
|
||||
Select Case iErrNumber
|
||||
Case 0
|
||||
sErrorNumber = "0"
|
||||
Case 52
|
||||
sErrorNumber = "102" ' Invalid Folder Name.
|
||||
Case 70
|
||||
sErrorNumber = "103" ' Security Error.
|
||||
Case 76
|
||||
sErrorNumber = "102" ' Path too long.
|
||||
Case Else
|
||||
sErrorNumber = "110"
|
||||
End Select
|
||||
End If
|
||||
|
||||
' Create the "Error" node.
|
||||
Response.Write "<Error number=""" & sErrorNumber & """ />"
|
||||
End Sub
|
||||
|
||||
Sub FileUpload( resourceType, currentFolder, sCommand )
|
||||
Dim oUploader
|
||||
Set oUploader = New NetRube_Upload
|
||||
oUploader.MaxSize = 0
|
||||
oUploader.Allowed = ConfigAllowedExtensions.Item( resourceType )
|
||||
oUploader.Denied = ConfigDeniedExtensions.Item( resourceType )
|
||||
oUploader.HtmlExtensions = ConfigHtmlExtensions
|
||||
oUploader.GetData
|
||||
|
||||
Dim sErrorNumber
|
||||
sErrorNumber = "0"
|
||||
|
||||
Dim sFileName, sOriginalFileName, sExtension
|
||||
sFileName = ""
|
||||
|
||||
If oUploader.ErrNum > 0 Then
|
||||
sErrorNumber = "202"
|
||||
Else
|
||||
' Map the virtual path to the local server path.
|
||||
Dim sServerDir
|
||||
sServerDir = ServerMapFolder( resourceType, currentFolder, sCommand )
|
||||
|
||||
Dim oFSO
|
||||
Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )
|
||||
if not (oFSO.FolderExists( sServerDir ) ) then
|
||||
sErrorNumber = "102"
|
||||
else
|
||||
' Get the uploaded file name.
|
||||
sFileName = oUploader.File( "NewFile" ).Name
|
||||
sExtension = oUploader.File( "NewFile" ).Ext
|
||||
sFileName = SanitizeFileName( sFileName )
|
||||
sOriginalFileName = sFileName
|
||||
|
||||
Dim iCounter
|
||||
iCounter = 0
|
||||
|
||||
Do While ( True )
|
||||
Dim sFilePath
|
||||
sFilePath = CombineLocalPaths(sServerDir, sFileName)
|
||||
|
||||
If ( oFSO.FileExists( sFilePath ) ) Then
|
||||
iCounter = iCounter + 1
|
||||
sFileName = RemoveExtension( sOriginalFileName ) & "(" & iCounter & ")." & sExtension
|
||||
sErrorNumber = "201"
|
||||
Else
|
||||
oUploader.SaveAs "NewFile", sFilePath
|
||||
If oUploader.ErrNum > 0 Then sErrorNumber = "202"
|
||||
Exit Do
|
||||
End If
|
||||
Loop
|
||||
end if
|
||||
End If
|
||||
|
||||
Set oUploader = Nothing
|
||||
|
||||
dim sFileUrl
|
||||
sFileUrl = CombinePaths( GetResourceTypePath( resourceType, sCommand ) , currentFolder )
|
||||
sFileUrl = CombinePaths( sFileUrl, sFileName )
|
||||
|
||||
If ( sErrorNumber = "0" or sErrorNumber = "201" ) then
|
||||
SendUploadResults sErrorNumber, sFileUrl, sFileName, ""
|
||||
Else
|
||||
SendUploadResults sErrorNumber, "", "", ""
|
||||
End If
|
||||
End Sub
|
||||
|
||||
%>
|
||||
@ -1,128 +0,0 @@
|
||||
<%
|
||||
' FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
' Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
'
|
||||
' == BEGIN LICENSE ==
|
||||
'
|
||||
' Licensed under the terms of any of the following licenses at your
|
||||
' choice:
|
||||
'
|
||||
' - GNU General Public License Version 2 or later (the "GPL")
|
||||
' http://www.gnu.org/licenses/gpl.html
|
||||
'
|
||||
' - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
' http://www.gnu.org/licenses/lgpl.html
|
||||
'
|
||||
' - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
' http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
'
|
||||
' == END LICENSE ==
|
||||
'
|
||||
' Configuration file for the File Manager Connector for ASP.
|
||||
%>
|
||||
<%
|
||||
|
||||
' SECURITY: You must explicitly enable this "connector" (set it to "True").
|
||||
' WARNING: don't just set "ConfigIsEnabled = true", you must be sure that only
|
||||
' authenticated users can access this file or use some kind of session checking.
|
||||
Dim ConfigIsEnabled
|
||||
ConfigIsEnabled = False
|
||||
|
||||
' Path to user files relative to the document root.
|
||||
' This setting is preserved only for backward compatibility.
|
||||
' You should look at the settings for each resource type to get the full potential
|
||||
Dim ConfigUserFilesPath
|
||||
ConfigUserFilesPath = "/userfiles/"
|
||||
|
||||
' Due to security issues with Apache modules, it is recommended to leave the
|
||||
' following setting enabled.
|
||||
Dim ConfigForceSingleExtension
|
||||
ConfigForceSingleExtension = true
|
||||
|
||||
' What the user can do with this connector
|
||||
Dim ConfigAllowedCommands
|
||||
ConfigAllowedCommands = "QuickUpload|FileUpload|GetFolders|GetFoldersAndFiles|CreateFolder"
|
||||
|
||||
' Allowed Resource Types
|
||||
Dim ConfigAllowedTypes
|
||||
ConfigAllowedTypes = "File|Image|Flash|Media"
|
||||
|
||||
' For security, HTML is allowed in the first Kb of data for files having the
|
||||
' following extensions only.
|
||||
Dim ConfigHtmlExtensions
|
||||
ConfigHtmlExtensions = "html|htm|xml|xsd|txt|js"
|
||||
'
|
||||
' Configuration settings for each Resource Type
|
||||
'
|
||||
' - AllowedExtensions: the possible extensions that can be allowed.
|
||||
' If it is empty then any file type can be uploaded.
|
||||
'
|
||||
' - DeniedExtensions: The extensions that won't be allowed.
|
||||
' If it is empty then no restrictions are done here.
|
||||
'
|
||||
' For a file to be uploaded it has to fulfill both the AllowedExtensions
|
||||
' and DeniedExtensions (that's it: not being denied) conditions.
|
||||
'
|
||||
' - FileTypesPath: the virtual folder relative to the document root where
|
||||
' these resources will be located.
|
||||
' Attention: It must start and end with a slash: '/'
|
||||
'
|
||||
' - FileTypesAbsolutePath: the physical path to the above folder. It must be
|
||||
' an absolute path.
|
||||
' If it's an empty string then it will be autocalculated.
|
||||
' Useful if you are using a virtual directory, symbolic link or alias.
|
||||
' Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
|
||||
' Attention: The above 'FileTypesPath' must point to the same directory.
|
||||
' Attention: It must end with a slash: '/'
|
||||
'
|
||||
' - QuickUploadPath: the virtual folder relative to the document root where
|
||||
' these resources will be uploaded using the Upload tab in the resources
|
||||
' dialogs.
|
||||
' Attention: It must start and end with a slash: '/'
|
||||
'
|
||||
' - QuickUploadAbsolutePath: the physical path to the above folder. It must be
|
||||
' an absolute path.
|
||||
' If it's an empty string then it will be autocalculated.
|
||||
' Useful if you are using a virtual directory, symbolic link or alias.
|
||||
' Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
|
||||
' Attention: The above 'QuickUploadPath' must point to the same directory.
|
||||
' Attention: It must end with a slash: '/'
|
||||
'
|
||||
|
||||
Dim ConfigAllowedExtensions, ConfigDeniedExtensions, ConfigFileTypesPath, ConfigFileTypesAbsolutePath, ConfigQuickUploadPath, ConfigQuickUploadAbsolutePath
|
||||
Set ConfigAllowedExtensions = CreateObject( "Scripting.Dictionary" )
|
||||
Set ConfigDeniedExtensions = CreateObject( "Scripting.Dictionary" )
|
||||
Set ConfigFileTypesPath = CreateObject( "Scripting.Dictionary" )
|
||||
Set ConfigFileTypesAbsolutePath = CreateObject( "Scripting.Dictionary" )
|
||||
Set ConfigQuickUploadPath = CreateObject( "Scripting.Dictionary" )
|
||||
Set ConfigQuickUploadAbsolutePath = CreateObject( "Scripting.Dictionary" )
|
||||
|
||||
ConfigAllowedExtensions.Add "File", "7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip"
|
||||
ConfigDeniedExtensions.Add "File", ""
|
||||
ConfigFileTypesPath.Add "File", ConfigUserFilesPath & "file/"
|
||||
ConfigFileTypesAbsolutePath.Add "File", ""
|
||||
ConfigQuickUploadPath.Add "File", ConfigUserFilesPath
|
||||
ConfigQuickUploadAbsolutePath.Add "File", ""
|
||||
|
||||
ConfigAllowedExtensions.Add "Image", "bmp|gif|jpeg|jpg|png"
|
||||
ConfigDeniedExtensions.Add "Image", ""
|
||||
ConfigFileTypesPath.Add "Image", ConfigUserFilesPath & "image/"
|
||||
ConfigFileTypesAbsolutePath.Add "Image", ""
|
||||
ConfigQuickUploadPath.Add "Image", ConfigUserFilesPath
|
||||
ConfigQuickUploadAbsolutePath.Add "Image", ""
|
||||
|
||||
ConfigAllowedExtensions.Add "Flash", "swf|flv"
|
||||
ConfigDeniedExtensions.Add "Flash", ""
|
||||
ConfigFileTypesPath.Add "Flash", ConfigUserFilesPath & "flash/"
|
||||
ConfigFileTypesAbsolutePath.Add "Flash", ""
|
||||
ConfigQuickUploadPath.Add "Flash", ConfigUserFilesPath
|
||||
ConfigQuickUploadAbsolutePath.Add "Flash", ""
|
||||
|
||||
ConfigAllowedExtensions.Add "Media", "aiff|asf|avi|bmp|fla|flv|gif|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|png|qt|ram|rm|rmi|rmvb|swf|tif|tiff|wav|wma|wmv"
|
||||
ConfigDeniedExtensions.Add "Media", ""
|
||||
ConfigFileTypesPath.Add "Media", ConfigUserFilesPath & "media/"
|
||||
ConfigFileTypesAbsolutePath.Add "Media", ""
|
||||
ConfigQuickUploadPath.Add "Media", ConfigUserFilesPath
|
||||
ConfigQuickUploadAbsolutePath.Add "Media", ""
|
||||
|
||||
%>
|
||||
@ -1,88 +0,0 @@
|
||||
<%@ CodePage=65001 Language="VBScript"%>
|
||||
<%
|
||||
Option Explicit
|
||||
Response.Buffer = True
|
||||
%>
|
||||
<%
|
||||
' FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
' Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
'
|
||||
' == BEGIN LICENSE ==
|
||||
'
|
||||
' Licensed under the terms of any of the following licenses at your
|
||||
' choice:
|
||||
'
|
||||
' - GNU General Public License Version 2 or later (the "GPL")
|
||||
' http://www.gnu.org/licenses/gpl.html
|
||||
'
|
||||
' - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
' http://www.gnu.org/licenses/lgpl.html
|
||||
'
|
||||
' - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
' http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
'
|
||||
' == END LICENSE ==
|
||||
'
|
||||
' This is the File Manager Connector for ASP.
|
||||
%>
|
||||
<!--#include file="config.asp"-->
|
||||
<!--#include file="util.asp"-->
|
||||
<!--#include file="io.asp"-->
|
||||
<!--#include file="basexml.asp"-->
|
||||
<!--#include file="commands.asp"-->
|
||||
<!--#include file="class_upload.asp"-->
|
||||
<%
|
||||
|
||||
If ( ConfigIsEnabled = False ) Then
|
||||
SendError 1, "This connector is disabled. Please check the ""editor/filemanager/connectors/asp/config.asp"" file"
|
||||
End If
|
||||
|
||||
DoResponse
|
||||
|
||||
Sub DoResponse()
|
||||
Dim sCommand, sResourceType, sCurrentFolder
|
||||
|
||||
' Get the main request information.
|
||||
sCommand = Request.QueryString("Command")
|
||||
|
||||
sResourceType = Request.QueryString("Type")
|
||||
If ( sResourceType = "" ) Then sResourceType = "File"
|
||||
|
||||
sCurrentFolder = GetCurrentFolder()
|
||||
|
||||
' Check if it is an allowed command
|
||||
if ( Not IsAllowedCommand( sCommand ) ) then
|
||||
SendError 1, "The """ & sCommand & """ command isn't allowed"
|
||||
end if
|
||||
|
||||
' Check if it is an allowed resource type.
|
||||
if ( Not IsAllowedType( sResourceType ) ) Then
|
||||
SendError 1, "Invalid type specified"
|
||||
end if
|
||||
|
||||
' File Upload doesn't have to Return XML, so it must be intercepted before anything.
|
||||
If ( sCommand = "FileUpload" ) Then
|
||||
FileUpload sResourceType, sCurrentFolder, sCommand
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
SetXmlHeaders
|
||||
|
||||
CreateXmlHeader sCommand, sResourceType, sCurrentFolder, GetUrlFromPath( sResourceType, sCurrentFolder, sCommand)
|
||||
|
||||
' Execute the required command.
|
||||
Select Case sCommand
|
||||
Case "GetFolders"
|
||||
GetFolders sResourceType, sCurrentFolder
|
||||
Case "GetFoldersAndFiles"
|
||||
GetFoldersAndFiles sResourceType, sCurrentFolder
|
||||
Case "CreateFolder"
|
||||
CreateFolder sResourceType, sCurrentFolder
|
||||
End Select
|
||||
|
||||
CreateXmlFooter
|
||||
|
||||
Response.End
|
||||
End Sub
|
||||
|
||||
%>
|
||||
@ -1,247 +0,0 @@
|
||||
<%
|
||||
' FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
' Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
'
|
||||
' == BEGIN LICENSE ==
|
||||
'
|
||||
' Licensed under the terms of any of the following licenses at your
|
||||
' choice:
|
||||
'
|
||||
' - GNU General Public License Version 2 or later (the "GPL")
|
||||
' http://www.gnu.org/licenses/gpl.html
|
||||
'
|
||||
' - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
' http://www.gnu.org/licenses/lgpl.html
|
||||
'
|
||||
' - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
' http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
'
|
||||
' == END LICENSE ==
|
||||
'
|
||||
' This file include IO specific functions used by the ASP Connector.
|
||||
%>
|
||||
<%
|
||||
function CombinePaths( sBasePath, sFolder)
|
||||
sFolder = replace(sFolder, "\", "/")
|
||||
CombinePaths = RemoveFromEnd( sBasePath, "/" ) & "/" & RemoveFromStart( sFolder, "/" )
|
||||
end function
|
||||
|
||||
function CombineLocalPaths( sBasePath, sFolder)
|
||||
sFolder = replace(sFolder, "/", "\")
|
||||
' The RemoveFrom* functions use RegExp, so we must escape the \
|
||||
CombineLocalPaths = RemoveFromEnd( sBasePath, "\\" ) & "\" & RemoveFromStart( sFolder, "\\" )
|
||||
end function
|
||||
|
||||
Function GetResourceTypePath( resourceType, sCommand )
|
||||
if ( sCommand = "QuickUpload") then
|
||||
GetResourceTypePath = ConfigQuickUploadPath.Item( resourceType )
|
||||
else
|
||||
GetResourceTypePath = ConfigFileTypesPath.Item( resourceType )
|
||||
end if
|
||||
end Function
|
||||
|
||||
Function GetResourceTypeDirectory( resourceType, sCommand )
|
||||
if ( sCommand = "QuickUpload") then
|
||||
|
||||
if ( ConfigQuickUploadAbsolutePath.Item( resourceType ) <> "" ) then
|
||||
GetResourceTypeDirectory = ConfigQuickUploadAbsolutePath.Item( resourceType )
|
||||
else
|
||||
' Map the "UserFiles" path to a local directory.
|
||||
GetResourceTypeDirectory = Server.MapPath( ConfigQuickUploadPath.Item( resourceType ) )
|
||||
end if
|
||||
else
|
||||
if ( ConfigFileTypesAbsolutePath.Item( resourceType ) <> "" ) then
|
||||
GetResourceTypeDirectory = ConfigFileTypesAbsolutePath.Item( resourceType )
|
||||
else
|
||||
' Map the "UserFiles" path to a local directory.
|
||||
GetResourceTypeDirectory = Server.MapPath( ConfigFileTypesPath.Item( resourceType ) )
|
||||
end if
|
||||
end if
|
||||
end Function
|
||||
|
||||
Function GetUrlFromPath( resourceType, folderPath, sCommand )
|
||||
GetUrlFromPath = CombinePaths( GetResourceTypePath( resourceType, sCommand ), folderPath )
|
||||
End Function
|
||||
|
||||
Function RemoveExtension( fileName )
|
||||
RemoveExtension = Left( fileName, InStrRev( fileName, "." ) - 1 )
|
||||
End Function
|
||||
|
||||
Function ServerMapFolder( resourceType, folderPath, sCommand )
|
||||
Dim sResourceTypePath
|
||||
' Get the resource type directory.
|
||||
sResourceTypePath = GetResourceTypeDirectory( resourceType, sCommand )
|
||||
|
||||
' Ensure that the directory exists.
|
||||
CreateServerFolder sResourceTypePath
|
||||
|
||||
' Return the resource type directory combined with the required path.
|
||||
ServerMapFolder = CombineLocalPaths( sResourceTypePath, folderPath )
|
||||
End Function
|
||||
|
||||
Sub CreateServerFolder( folderPath )
|
||||
Dim oFSO
|
||||
Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )
|
||||
|
||||
Dim sParent
|
||||
sParent = oFSO.GetParentFolderName( folderPath )
|
||||
|
||||
' If folderPath is a network path (\\server\folder\) then sParent is an empty string.
|
||||
' Get out.
|
||||
if (sParent = "") then exit sub
|
||||
|
||||
' Check if the parent exists, or create it.
|
||||
If ( NOT oFSO.FolderExists( sParent ) ) Then CreateServerFolder( sParent )
|
||||
|
||||
If ( oFSO.FolderExists( folderPath ) = False ) Then
|
||||
On Error resume next
|
||||
oFSO.CreateFolder( folderPath )
|
||||
|
||||
if err.number<>0 then
|
||||
dim sErrorNumber
|
||||
Dim iErrNumber, sErrDescription
|
||||
iErrNumber = err.number
|
||||
sErrDescription = err.Description
|
||||
|
||||
On Error Goto 0
|
||||
|
||||
Select Case iErrNumber
|
||||
Case 52
|
||||
sErrorNumber = "102" ' Invalid Folder Name.
|
||||
Case 70
|
||||
sErrorNumber = "103" ' Security Error.
|
||||
Case 76
|
||||
sErrorNumber = "102" ' Path too long.
|
||||
Case Else
|
||||
sErrorNumber = "110"
|
||||
End Select
|
||||
|
||||
SendError sErrorNumber, "CreateServerFolder(" & folderPath & ") : " & sErrDescription
|
||||
end if
|
||||
|
||||
End If
|
||||
|
||||
Set oFSO = Nothing
|
||||
End Sub
|
||||
|
||||
Function IsAllowedExt( extension, resourceType )
|
||||
Dim oRE
|
||||
Set oRE = New RegExp
|
||||
oRE.IgnoreCase = True
|
||||
oRE.Global = True
|
||||
|
||||
Dim sAllowed, sDenied
|
||||
sAllowed = ConfigAllowedExtensions.Item( resourceType )
|
||||
sDenied = ConfigDeniedExtensions.Item( resourceType )
|
||||
|
||||
IsAllowedExt = True
|
||||
|
||||
If sDenied <> "" Then
|
||||
oRE.Pattern = sDenied
|
||||
IsAllowedExt = Not oRE.Test( extension )
|
||||
End If
|
||||
|
||||
If IsAllowedExt And sAllowed <> "" Then
|
||||
oRE.Pattern = sAllowed
|
||||
IsAllowedExt = oRE.Test( extension )
|
||||
End If
|
||||
|
||||
Set oRE = Nothing
|
||||
End Function
|
||||
|
||||
Function IsAllowedType( resourceType )
|
||||
Dim oRE
|
||||
Set oRE = New RegExp
|
||||
oRE.IgnoreCase = False
|
||||
oRE.Global = True
|
||||
oRE.Pattern = "^(" & ConfigAllowedTypes & ")$"
|
||||
|
||||
IsAllowedType = oRE.Test( resourceType )
|
||||
|
||||
Set oRE = Nothing
|
||||
End Function
|
||||
|
||||
Function IsAllowedCommand( sCommand )
|
||||
Dim oRE
|
||||
Set oRE = New RegExp
|
||||
oRE.IgnoreCase = True
|
||||
oRE.Global = True
|
||||
oRE.Pattern = "^(" & ConfigAllowedCommands & ")$"
|
||||
|
||||
IsAllowedCommand = oRE.Test( sCommand )
|
||||
|
||||
Set oRE = Nothing
|
||||
End Function
|
||||
|
||||
function GetCurrentFolder()
|
||||
dim sCurrentFolder
|
||||
dim oRegex
|
||||
|
||||
sCurrentFolder = Request.QueryString("CurrentFolder")
|
||||
If ( sCurrentFolder = "" ) Then sCurrentFolder = "/"
|
||||
|
||||
' Check the current folder syntax (must begin and start with a slash).
|
||||
If ( Right( sCurrentFolder, 1 ) <> "/" ) Then sCurrentFolder = sCurrentFolder & "/"
|
||||
If ( Left( sCurrentFolder, 1 ) <> "/" ) Then sCurrentFolder = "/" & sCurrentFolder
|
||||
|
||||
' Check for invalid folder paths (..)
|
||||
If ( InStr( 1, sCurrentFolder, ".." ) <> 0 OR InStr( 1, sCurrentFolder, "\" ) <> 0) Then
|
||||
SendError 102, ""
|
||||
End If
|
||||
|
||||
Set oRegex = New RegExp
|
||||
oRegex.Global = True
|
||||
oRegex.Pattern = "(/\.)|(//)|([\\:\*\?\""\<\>\|]|[\u0000-\u001F]|\u007F)"
|
||||
|
||||
if (oRegex.Test(sCurrentFolder)) Then
|
||||
SendError 102, ""
|
||||
End If
|
||||
|
||||
GetCurrentFolder = sCurrentFolder
|
||||
end function
|
||||
|
||||
' Do a cleanup of the folder name to avoid possible problems
|
||||
function SanitizeFolderName( sNewFolderName )
|
||||
Dim oRegex
|
||||
Set oRegex = New RegExp
|
||||
oRegex.Global = True
|
||||
|
||||
' remove . \ / | : ? * " < > and control characters
|
||||
oRegex.Pattern = "(\.|\\|\/|\||:|\?|\*|""|\<|\>|[\u0000-\u001F]|\u007F)"
|
||||
SanitizeFolderName = oRegex.Replace( sNewFolderName, "_" )
|
||||
|
||||
Set oRegex = Nothing
|
||||
end function
|
||||
|
||||
' Do a cleanup of the file name to avoid possible problems
|
||||
function SanitizeFileName( sNewFileName )
|
||||
Dim oRegex
|
||||
Set oRegex = New RegExp
|
||||
oRegex.Global = True
|
||||
|
||||
if ( ConfigForceSingleExtension = True ) then
|
||||
oRegex.Pattern = "\.(?![^.]*$)"
|
||||
sNewFileName = oRegex.Replace( sNewFileName, "_" )
|
||||
end if
|
||||
|
||||
' remove \ / | : ? * " < > and control characters
|
||||
oRegex.Pattern = "(\\|\/|\||:|\?|\*|""|\<|\>|[\u0000-\u001F]|\u007F)"
|
||||
SanitizeFileName = oRegex.Replace( sNewFileName, "_" )
|
||||
|
||||
Set oRegex = Nothing
|
||||
end function
|
||||
|
||||
' This is the function that sends the results of the uploading process.
|
||||
Sub SendUploadResults( errorNumber, fileUrl, fileName, customMsg )
|
||||
Response.Clear
|
||||
Response.Write "<script type=""text/javascript"">"
|
||||
' Minified version of the document.domain automatic fix script (#1919).
|
||||
' The original script can be found at _dev/domain_fix_template.js
|
||||
Response.Write "(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();"
|
||||
|
||||
Response.Write "window.parent.OnUploadCompleted(" & errorNumber & ",""" & Replace( fileUrl, """", "\""" ) & """,""" & Replace( fileName, """", "\""" ) & """,""" & Replace( customMsg , """", "\""" ) & """) ;"
|
||||
Response.Write "</script>"
|
||||
Response.End
|
||||
End Sub
|
||||
|
||||
%>
|
||||
@ -1,65 +0,0 @@
|
||||
<%@ CodePage=65001 Language="VBScript"%>
|
||||
<%
|
||||
Option Explicit
|
||||
Response.Buffer = True
|
||||
%>
|
||||
<%
|
||||
' FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
' Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
'
|
||||
' == BEGIN LICENSE ==
|
||||
'
|
||||
' Licensed under the terms of any of the following licenses at your
|
||||
' choice:
|
||||
'
|
||||
' - GNU General Public License Version 2 or later (the "GPL")
|
||||
' http://www.gnu.org/licenses/gpl.html
|
||||
'
|
||||
' - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
' http://www.gnu.org/licenses/lgpl.html
|
||||
'
|
||||
' - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
' http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
'
|
||||
' == END LICENSE ==
|
||||
'
|
||||
' This is the "File Uploader" for ASP.
|
||||
%>
|
||||
<!--#include file="config.asp"-->
|
||||
<!--#include file="util.asp"-->
|
||||
<!--#include file="io.asp"-->
|
||||
<!--#include file="commands.asp"-->
|
||||
<!--#include file="class_upload.asp"-->
|
||||
<%
|
||||
|
||||
Sub SendError( number, text )
|
||||
SendUploadResults number, "", "", text
|
||||
End Sub
|
||||
|
||||
' Check if this uploader has been enabled.
|
||||
If ( ConfigIsEnabled = False ) Then
|
||||
SendUploadResults "1", "", "", "This file uploader is disabled. Please check the ""editor/filemanager/connectors/asp/config.asp"" file"
|
||||
End If
|
||||
|
||||
Dim sCommand, sResourceType, sCurrentFolder
|
||||
|
||||
sCommand = "QuickUpload"
|
||||
|
||||
sResourceType = Request.QueryString("Type")
|
||||
If ( sResourceType = "" ) Then sResourceType = "File"
|
||||
|
||||
sCurrentFolder = "/"
|
||||
|
||||
' Is Upload enabled?
|
||||
if ( Not IsAllowedCommand( sCommand ) ) then
|
||||
SendUploadResults "1", "", "", "The """ & sCommand & """ command isn't allowed"
|
||||
end if
|
||||
|
||||
' Check if it is an allowed resource type.
|
||||
if ( Not IsAllowedType( sResourceType ) ) Then
|
||||
SendUploadResults "1", "", "", "The " & sResourceType & " resource type isn't allowed"
|
||||
end if
|
||||
|
||||
FileUpload sResourceType, sCurrentFolder, sCommand
|
||||
|
||||
%>
|
||||
@ -1,55 +0,0 @@
|
||||
<%
|
||||
' FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
' Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
'
|
||||
' == BEGIN LICENSE ==
|
||||
'
|
||||
' Licensed under the terms of any of the following licenses at your
|
||||
' choice:
|
||||
'
|
||||
' - GNU General Public License Version 2 or later (the "GPL")
|
||||
' http://www.gnu.org/licenses/gpl.html
|
||||
'
|
||||
' - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
' http://www.gnu.org/licenses/lgpl.html
|
||||
'
|
||||
' - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
' http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
'
|
||||
' == END LICENSE ==
|
||||
'
|
||||
' This file include generic functions used by the ASP Connector.
|
||||
%>
|
||||
<%
|
||||
Function RemoveFromStart( sourceString, charToRemove )
|
||||
Dim oRegex
|
||||
Set oRegex = New RegExp
|
||||
oRegex.Pattern = "^" & charToRemove & "+"
|
||||
|
||||
RemoveFromStart = oRegex.Replace( sourceString, "" )
|
||||
End Function
|
||||
|
||||
Function RemoveFromEnd( sourceString, charToRemove )
|
||||
Dim oRegex
|
||||
Set oRegex = New RegExp
|
||||
oRegex.Pattern = charToRemove & "+$"
|
||||
|
||||
RemoveFromEnd = oRegex.Replace( sourceString, "" )
|
||||
End Function
|
||||
|
||||
Function ConvertToXmlAttribute( value )
|
||||
ConvertToXmlAttribute = Replace( value, "&", "&" )
|
||||
End Function
|
||||
|
||||
Function InArray( value, sourceArray )
|
||||
Dim i
|
||||
For i = 0 to UBound( sourceArray )
|
||||
If sourceArray(i) = value Then
|
||||
InArray = True
|
||||
Exit Function
|
||||
End If
|
||||
Next
|
||||
InArray = False
|
||||
End Function
|
||||
|
||||
%>
|
||||
@ -1,98 +0,0 @@
|
||||
<%@ Control Language="C#" EnableViewState="false" AutoEventWireup="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Config" %>
|
||||
<%--
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* Configuration file for the File Browser Connector for ASP.NET.
|
||||
--%>
|
||||
<script runat="server">
|
||||
|
||||
/**
|
||||
* This function must check the user session to be sure that he/she is
|
||||
* authorized to upload and access files in the File Browser.
|
||||
*/
|
||||
private bool CheckAuthentication()
|
||||
{
|
||||
// WARNING : DO NOT simply return "true". By doing so, you are allowing
|
||||
// "anyone" to upload and list the files in your server. You must implement
|
||||
// some kind of session validation here. Even something very simple as...
|
||||
//
|
||||
// return ( Session[ "IsAuthorized" ] != null && (bool)Session[ "IsAuthorized" ] == true );
|
||||
//
|
||||
// ... where Session[ "IsAuthorized" ] is set to "true" as soon as the
|
||||
// user logs in your system.
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void SetConfig()
|
||||
{
|
||||
// SECURITY: You must explicitly enable this "connector". (Set it to "true").
|
||||
Enabled = CheckAuthentication();
|
||||
|
||||
// URL path to user files.
|
||||
UserFilesPath = "/userfiles/";
|
||||
|
||||
// The connector tries to resolve the above UserFilesPath automatically.
|
||||
// Use the following setting it you prefer to explicitely specify the
|
||||
// absolute path. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
|
||||
// Attention: The above 'UserFilesPath' URL must point to the same directory.
|
||||
UserFilesAbsolutePath = "";
|
||||
|
||||
// Due to security issues with Apache modules, it is recommended to leave the
|
||||
// following setting enabled.
|
||||
ForceSingleExtension = true;
|
||||
|
||||
// Allowed Resource Types
|
||||
AllowedTypes = new string[] { "File", "Image", "Flash", "Media" };
|
||||
|
||||
// For security, HTML is allowed in the first Kb of data for files having the
|
||||
// following extensions only.
|
||||
HtmlExtensions = new string[] { "html", "htm", "xml", "xsd", "txt", "js" };
|
||||
|
||||
TypeConfig[ "File" ].AllowedExtensions = new string[] { "7z", "aiff", "asf", "avi", "bmp", "csv", "doc", "fla", "flv", "gif", "gz", "gzip", "jpeg", "jpg", "mid", "mov", "mp3", "mp4", "mpc", "mpeg", "mpg", "ods", "odt", "pdf", "png", "ppt", "pxd", "qt", "ram", "rar", "rm", "rmi", "rmvb", "rtf", "sdc", "sitd", "swf", "sxc", "sxw", "tar", "tgz", "tif", "tiff", "txt", "vsd", "wav", "wma", "wmv", "xls", "xml", "zip" };
|
||||
TypeConfig[ "File" ].DeniedExtensions = new string[] { };
|
||||
TypeConfig[ "File" ].FilesPath = "%UserFilesPath%file/";
|
||||
TypeConfig[ "File" ].FilesAbsolutePath = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%file/" );
|
||||
TypeConfig[ "File" ].QuickUploadPath = "%UserFilesPath%";
|
||||
TypeConfig[ "File" ].QuickUploadAbsolutePath = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );
|
||||
|
||||
TypeConfig[ "Image" ].AllowedExtensions = new string[] { "bmp", "gif", "jpeg", "jpg", "png" };
|
||||
TypeConfig[ "Image" ].DeniedExtensions = new string[] { };
|
||||
TypeConfig[ "Image" ].FilesPath = "%UserFilesPath%image/";
|
||||
TypeConfig[ "Image" ].FilesAbsolutePath = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%image/" );
|
||||
TypeConfig[ "Image" ].QuickUploadPath = "%UserFilesPath%";
|
||||
TypeConfig[ "Image" ].QuickUploadAbsolutePath = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );
|
||||
|
||||
TypeConfig[ "Flash" ].AllowedExtensions = new string[] { "swf", "flv" };
|
||||
TypeConfig[ "Flash" ].DeniedExtensions = new string[] { };
|
||||
TypeConfig[ "Flash" ].FilesPath = "%UserFilesPath%flash/";
|
||||
TypeConfig[ "Flash" ].FilesAbsolutePath = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%flash/" );
|
||||
TypeConfig[ "Flash" ].QuickUploadPath = "%UserFilesPath%";
|
||||
TypeConfig[ "Flash" ].QuickUploadAbsolutePath = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );
|
||||
|
||||
TypeConfig[ "Media" ].AllowedExtensions = new string[] { "aiff", "asf", "avi", "bmp", "fla", "flv", "gif", "jpeg", "jpg", "mid", "mov", "mp3", "mp4", "mpc", "mpeg", "mpg", "png", "qt", "ram", "rm", "rmi", "rmvb", "swf", "tif", "tiff", "wav", "wma", "wmv" };
|
||||
TypeConfig[ "Media" ].DeniedExtensions = new string[] { };
|
||||
TypeConfig[ "Media" ].FilesPath = "%UserFilesPath%media/";
|
||||
TypeConfig[ "Media" ].FilesAbsolutePath = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%media/" );
|
||||
TypeConfig[ "Media" ].QuickUploadPath = "%UserFilesPath%";
|
||||
TypeConfig[ "Media" ].QuickUploadAbsolutePath = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );
|
||||
}
|
||||
|
||||
</script>
|
||||
@ -1,32 +0,0 @@
|
||||
<%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Connector" AutoEventWireup="false" %>
|
||||
<%@ Register Src="config.ascx" TagName="Config" TagPrefix="FCKeditor" %>
|
||||
<%--
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* This is the File Browser Connector for ASP.NET.
|
||||
*
|
||||
* The code of this page if included in the FCKeditor.Net package,
|
||||
* in the FredCK.FCKeditorV2.dll assembly file. So to use it you must
|
||||
* include that DLL in your "bin" directory.
|
||||
*
|
||||
* To download the FCKeditor.Net package, go to our official web site:
|
||||
* http://www.fckeditor.net
|
||||
--%>
|
||||
<FCKeditor:Config id="Config" runat="server"></FCKeditor:Config>
|
||||
@ -1,32 +0,0 @@
|
||||
<%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Uploader" AutoEventWireup="false" %>
|
||||
<%@ Register Src="config.ascx" TagName="Config" TagPrefix="FCKeditor" %>
|
||||
<%--
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* This is the Uploader for ASP.NET.
|
||||
*
|
||||
* The code of this page if included in the FCKeditor.Net package,
|
||||
* in the FredCK.FCKeditorV2.dll assemblyfile. So to use it you must
|
||||
* include that DLL in your "bin" directory.
|
||||
*
|
||||
* To download the FCKeditor.Net package, go to our official web site:
|
||||
* http://www.fckeditor.net
|
||||
--%>
|
||||
<FCKeditor:Config id="Config" runat="server"></FCKeditor:Config>
|
||||
@ -1,273 +0,0 @@
|
||||
<cfcomponent name="ImageObject">
|
||||
<!---
|
||||
ImageObject.cfc written by Rick Root (rick@webworksllc.com)
|
||||
|
||||
Related Web Sites:
|
||||
- http://www.opensourcecf.com/imagecfc (home page)
|
||||
|
||||
|
||||
This is an object oriented interface to the original
|
||||
ImageCFC.
|
||||
|
||||
Example Code:
|
||||
|
||||
io = createObject("component","ImageObject");
|
||||
io.setOption("defaultJpegCompression",95);
|
||||
io.init("#ExpandPath(".")#/emily.jpg");
|
||||
io.scaleWidth(500);
|
||||
io.save("#ExpandPath(".")#/imagex1.jpg");
|
||||
|
||||
io.flipHorizontal();
|
||||
io.save("#ExpandPath(".")#/imagex2.jpg");
|
||||
io.revert();
|
||||
io.filterFastBlur(2,5);
|
||||
io.save("#ExpandPath(".")#/imagex3.jpg");
|
||||
io.revert();
|
||||
io.filterPosterize(32);
|
||||
io.save("#ExpandPath(".")#/imagex4.jpg");
|
||||
|
||||
|
||||
LICENSE
|
||||
-------
|
||||
Copyright (c) 2006, Rick Root <rick@webworksllc.com>
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or
|
||||
without modification, are permitted provided that the
|
||||
following conditions are met:
|
||||
|
||||
- Redistributions of source code must retain the above
|
||||
copyright notice, this list of conditions and the
|
||||
following disclaimer.
|
||||
- Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the
|
||||
following disclaimer in the documentation and/or other
|
||||
materials provided with the distribution.
|
||||
- Neither the name of the Webworks, LLC. nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
--->
|
||||
|
||||
<cfset variables.img = "">
|
||||
<cfset variables.revertimg = "">
|
||||
<cfset variables.imageCFC = createObject("component","image")>
|
||||
<cfset variables.imageInfo = structNew()>
|
||||
<cfset variables.imageInfo.width = 0>
|
||||
<cfset variables.imageInfo.height = 0>
|
||||
<cfset variables.imageInfo.colorModel = "">
|
||||
<cfset variables.imageInfo.colorspace = "">
|
||||
<cfset variables.imageInfo.objColorModel = "">
|
||||
<cfset variables.imageInfo.objColorspace = "">
|
||||
<cfset variables.imageInfo.sampleModel = "">
|
||||
<cfset variables.imageInfo.imageType = 0>
|
||||
<cfset variables.imageInfo.misc = "">
|
||||
<cfset variables.imageInfo.canModify = false>
|
||||
<cfset variables.imageCFC.setOption("throwonerror",true)>
|
||||
|
||||
<!---
|
||||
|
||||
init(filename) Initialize object from a file.
|
||||
init(width, height) Initialize with a blank image
|
||||
init(bufferedImage) Initiailize with an existing object
|
||||
--->
|
||||
<cffunction name="init" access="public" output="false" returnType="void">
|
||||
<cfargument name="arg1" type="any" required="yes">
|
||||
<cfargument name="arg2" type="any" required="no">
|
||||
|
||||
<cfif isDefined("arg2") and isNumeric(arg1) and isNumeric(arg2)>
|
||||
<cfset arg1 = javacast("int",int(arg1))>
|
||||
<cfset arg2 = javacast("int",int(arg2))>
|
||||
<cfset variables.img = createObject("java","java.awt.image.BufferedImage")>
|
||||
<cfset variables.img.init(arg1,arg2,variables.img.TYPE_INT_RGB)>
|
||||
<cfelseif arg1.getClass().getName() eq "java.awt.image.BufferedImage">
|
||||
<cfset variables.img = arg1>
|
||||
<cfelseif isSimpleValue(arg1) and len(arg1) gt 0>
|
||||
<cfset imageResults = variables.imageCFC.readImage(arg1, "no")>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfelse>
|
||||
<cfthrow message="Object Instantiation Error" detail="You have attempted to initialize ooimage.cfc with invalid arguments. Please consult the documentation for correct initialization arguments.">
|
||||
</cfif>
|
||||
<cfif variables.revertimg eq "">
|
||||
<cfset variables.revertimg = variables.img>
|
||||
</cfif>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
<cfreturn>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="flipHorizontal" access="public" output="true" returnType="void" hint="Flip an image horizontally.">
|
||||
<cfset var imageResults = imageCFC.flipHorizontal(variables.img,"","")>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="getImageInfo" access="public" output="true" returntype="struct" hint="Returns image information.">
|
||||
<cfreturn variables.imageInfo>
|
||||
</cffunction>
|
||||
<cffunction name="getImageObject" access="public" output="true" returntype="struct" hint="Returns a java Buffered Image Object.">
|
||||
<cfreturn variables.img>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="flipVertical" access="public" output="true" returntype="void" hint="Flop an image vertically.">
|
||||
<cfset var imageResults = imageCFC.flipVertical(variables.img,"","")>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="scaleWidth" access="public" output="true" returntype="void" hint="Scale an image to a specific width.">
|
||||
<cfargument name="newWidth" required="yes" type="numeric">
|
||||
<cfset var imageResults = imageCFC.scaleWidth(variables.img,"","", newWidth)>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="scaleHeight" access="public" output="true" returntype="void" hint="Scale an image to a specific height.">
|
||||
<cfargument name="newHeight" required="yes" type="numeric">
|
||||
<cfset var imageResults = imageCFC.scaleHeight(variables.img,"","", newHeight)>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="resize" access="public" output="true" returntype="void" hint="Resize an image to a specific width and height.">
|
||||
<cfargument name="newWidth" required="yes" type="numeric">
|
||||
<cfargument name="newHeight" required="yes" type="numeric">
|
||||
<cfargument name="preserveAspect" required="no" type="boolean" default="FALSE">
|
||||
<cfargument name="cropToExact" required="no" type="boolean" default="FALSE">
|
||||
|
||||
<cfset var imageResults = imageCFC.resize(variables.img,"","",newWidth,newHeight,preserveAspect,cropToExact)>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="crop" access="public" output="true" returntype="void" hint="Crop an image.">
|
||||
<cfargument name="fromX" required="yes" type="numeric">
|
||||
<cfargument name="fromY" required="yes" type="numeric">
|
||||
<cfargument name="newWidth" required="yes" type="numeric">
|
||||
<cfargument name="newHeight" required="yes" type="numeric">
|
||||
<cfset var imageResults = imageCFC.crop(variables.img,"","",fromX,fromY,newWidth,newHeight)>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="rotate" access="public" output="true" returntype="void" hint="Rotate an image (+/-)90, (+/-)180, or (+/-)270 degrees.">
|
||||
<cfargument name="degrees" required="yes" type="numeric">
|
||||
<cfset var imageResults = imageCFC.rotate(variables.img,"","",degrees)>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="setOption" access="public" output="true" returnType="void" hint="Sets values for allowed CFC options.">
|
||||
<cfargument name="key" type="string" required="yes">
|
||||
<cfargument name="val" type="string" required="yes">
|
||||
<cfif lcase(trim(key)) eq "throwonerror">
|
||||
<cfthrow message="Option Configuration Error" detail="You cannot set the throwOnError option when using ImageObject.cfc">
|
||||
</cfif>
|
||||
<cfset imageCFC.setOption(key, val)>
|
||||
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="getOption" access="public" output="true" returnType="any" hint="Returns the current value for the specified CFC option.">
|
||||
<cfargument name="key" type="string" required="yes">
|
||||
<cfreturn imageCFC.getOption(key)>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="filterFastBlur" access="public" output="true" returntype="void" hint="Internal method used for flipping and flopping images.">
|
||||
<cfargument name="blurAmount" required="yes" type="numeric">
|
||||
<cfargument name="iterations" required="yes" type="numeric">
|
||||
<cfset var imageResults = imageCFC.filterFastBlur(variables.img,"","",blurAmount,iterations)>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="filterSharpen" access="public" output="true" returntype="void" hint="Internal method used for flipping and flopping images.">
|
||||
<cfset var imageResults = imageCFC.filterSharpen(variables.img,"","")>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
|
||||
</cffunction>
|
||||
|
||||
|
||||
<cffunction name="filterPosterize" access="public" output="true" returntype="void" hint="Internal method used for flipping and flopping images.">
|
||||
<cfargument name="amount" required="yes" type="string">
|
||||
<cfset var imageResults = imageCFC.filterPosterize(variables.img,"","",amount)>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
</cffunction>
|
||||
|
||||
|
||||
<cffunction name="addText" access="public" output="true" returntype="void" hint="Add text to an image.">
|
||||
<cfargument name="x" required="yes" type="numeric">
|
||||
<cfargument name="y" required="yes" type="numeric">
|
||||
<cfargument name="fontDetails" required="yes" type="struct">
|
||||
<cfargument name="content" required="yes" type="String">
|
||||
<cfset var imageResults = imageCFC.addText(variables.img,"","",x,y,fontDetails,content)>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="watermark" access="public" output="false" returnType="void">
|
||||
<cfargument name="wmImage" required="yes" type="Any">
|
||||
<cfargument name="alpha" required="yes" type="numeric">
|
||||
<cfargument name="placeAtX" required="yes" type="numeric">
|
||||
<cfargument name="placeAtY" required="yes" type="numeric">
|
||||
|
||||
<cfset var imageResults = "">
|
||||
<cfif isSimpleValue(wmImage)>
|
||||
<!--- filename or URL --->
|
||||
<cfset imageResults = imageCFC.watermark(variables.img,"","",wmImage,alpha,placeAtX,placeAtY)>
|
||||
<cfelse>
|
||||
<!--- must be a java object --->
|
||||
<cfset imageResults = imageCFC.watermark(variables.img,wmImage,"","",alpha,placeAtX,placeAtY)>
|
||||
</cfif>
|
||||
<cfset variables.revertimg = variables.img>
|
||||
<cfset variables.img = imageResults.img>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="save" access="public" output="false" returnType="void">
|
||||
<cfargument name="filename" type="string" required="no">
|
||||
<cfargument name="jpegCompression" type="numeric" required="no">
|
||||
<cfif isDefined("arguments.jpegCompression") and isNumeric(arguments.jpegCompression)>
|
||||
<cfset imageCFC.writeImage(filename,variables.img,jpegCompression)>
|
||||
<cfelse>
|
||||
<cfset imageCFC.writeImage(filename,variables.img)>
|
||||
</cfif>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="revert" access="public" output="true" returntype="void" hint="Undo the previous manipulation.">
|
||||
<cfset variables.img = variables.revertimg>
|
||||
<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
|
||||
</cffunction>
|
||||
|
||||
</cfcomponent>
|
||||
@ -1,336 +0,0 @@
|
||||
<cfsetting enablecfoutputonly="yes" showdebugoutput="no">
|
||||
<!---
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* File Browser connector for ColdFusion 5.
|
||||
* (based on the original CF connector by Hendrik Kramer - hk@lwd.de)
|
||||
*
|
||||
* Note:
|
||||
* FCKeditor requires that the connector responds with UTF-8 encoded XML.
|
||||
* As ColdFusion 5 does not fully support UTF-8 encoding, we force ASCII
|
||||
* file and folder names in this connector to allow CF5 send a UTF-8
|
||||
* encoded response - code points under 127 in UTF-8 are stored using a
|
||||
* single byte, using the same encoding as ASCII, which is damn handy.
|
||||
* This is all grand for the English speakers, like meself, but I dunno
|
||||
* how others are gonna take to it. Well, the previous version of this
|
||||
* connector already did this with file names and nobody seemed to mind,
|
||||
* so fingers-crossed nobody will mind their folder names being munged too.
|
||||
*
|
||||
--->
|
||||
|
||||
<!--- disable connector for ColdFusion > CF5 --->
|
||||
<cfif Left(SERVER.COLDFUSION.PRODUCTVERSION,Find(",",SERVER.COLDFUSION.PRODUCTVERSION)-1) gt 5>
|
||||
<cfabort>
|
||||
</cfif>
|
||||
|
||||
<cfparam name="url.command">
|
||||
<cfparam name="url.type">
|
||||
<cfparam name="url.currentFolder">
|
||||
<!--- note: no serverPath url parameter - see config.cfm if you need to set the serverPath manually --->
|
||||
|
||||
<cfinclude template="config.cfm">
|
||||
<cfset REQUEST.Config = Config>
|
||||
|
||||
<cfscript>
|
||||
userFilesPath = config.userFilesPath;
|
||||
|
||||
if ( userFilesPath eq "" )
|
||||
{
|
||||
userFilesPath = "/userfiles/";
|
||||
}
|
||||
|
||||
// make sure the user files path is correctly formatted
|
||||
userFilesPath = replace(userFilesPath, "\", "/", "ALL");
|
||||
userFilesPath = replace(userFilesPath, '//', '/', 'ALL');
|
||||
if ( right(userFilesPath,1) NEQ "/" )
|
||||
{
|
||||
userFilesPath = userFilesPath & "/";
|
||||
}
|
||||
if ( left(userFilesPath,1) NEQ "/" )
|
||||
{
|
||||
userFilesPath = "/" & userFilesPath;
|
||||
}
|
||||
|
||||
// make sure the current folder is correctly formatted
|
||||
url.currentFolder = replace(url.currentFolder, "\", "/", "ALL");
|
||||
url.currentFolder = replace(url.currentFolder, '//', '/', 'ALL');
|
||||
if ( right(url.currentFolder,1) neq "/" )
|
||||
{
|
||||
url.currentFolder = url.currentFolder & "/";
|
||||
}
|
||||
if ( left(url.currentFolder,1) neq "/" )
|
||||
{
|
||||
url.currentFolder = "/" & url.currentFolder;
|
||||
}
|
||||
|
||||
if ( find("/",getBaseTemplatePath()) neq 0 )
|
||||
{
|
||||
fs = "/";
|
||||
}
|
||||
else
|
||||
{
|
||||
fs = "\";
|
||||
}
|
||||
|
||||
// Get the base physical path to the web root for this application. The code to determine the path automatically assumes that
|
||||
// the "FCKeditor" directory in the http request path is directly off the web root for the application and that it's not a
|
||||
// virtual directory or a symbolic link / junction. Use the serverPath config setting to force a physical path if necessary.
|
||||
if ( len(config.serverPath) )
|
||||
{
|
||||
serverPath = config.serverPath;
|
||||
|
||||
if ( right(serverPath,1) neq fs )
|
||||
{
|
||||
serverPath = serverPath & fs;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
serverPath = replaceNoCase(getBaseTemplatePath(),replace(cgi.script_name,"/",fs,"all"),"") & replace(userFilesPath,"/",fs,"all");
|
||||
}
|
||||
|
||||
rootPath = left( serverPath, Len(serverPath) - Len(userFilesPath) ) ;
|
||||
xmlContent = ""; // append to this string to build content
|
||||
invalidName = false;
|
||||
</cfscript>
|
||||
|
||||
|
||||
<cfif not config.enabled>
|
||||
|
||||
<cfset xmlContent = "<Error number=""1"" text=""This connector is disabled. Please check the 'editor/filemanager/connectors/cfm/config.cfm' file"" />">
|
||||
|
||||
<cfelseif find("..",url.currentFolder) or find("\",url.currentFolder) or REFind('(/\.)|(//)|[[:cntrl:]]|([\\:\*\?\"<>])', url.currentFolder)>
|
||||
|
||||
<cfset invalidName = true>
|
||||
<cfset xmlContent = "<Error number=""102"" />">
|
||||
|
||||
<cfelseif isDefined("Config.ConfigAllowedCommands") and not ListFind(Config.ConfigAllowedCommands, url.command)>
|
||||
|
||||
<cfset invalidName = true>
|
||||
<cfset xmlContent = '<Error number="1" text="The "' & HTMLEditFormat(url.command) & '" command isn''t allowed" />'>
|
||||
|
||||
<cfelseif isDefined("Config.ConfigAllowedTypes") and not ListFind(Config.ConfigAllowedTypes, url.type)>
|
||||
|
||||
<cfset invalidName = true>
|
||||
<cfset xmlContent = '<Error number="1" text="Invalid type specified" />'>
|
||||
|
||||
</cfif>
|
||||
|
||||
<cfset resourceTypeUrl = "">
|
||||
<cfif not len(xmlContent)>
|
||||
<cfset resourceTypeUrl = rereplace( replace( Config.FileTypesPath[url.type], fs, "/", "all"), "/$", "") >
|
||||
|
||||
<cfif isDefined( "Config.FileTypesAbsolutePath" )
|
||||
and structkeyexists( Config.FileTypesAbsolutePath, url.type )
|
||||
and Len( Config.FileTypesAbsolutePath[url.type] )>
|
||||
|
||||
<cfset userFilesServerPath = Config.FileTypesAbsolutePath[url.type] & url.currentFolder>
|
||||
<cfelse>
|
||||
<cftry>
|
||||
<cfset userFilesServerPath = expandpath( resourceTypeUrl ) & url.currentFolder>
|
||||
<!--- Catch: Parameter 1 of function ExpandPath must be a relative path --->
|
||||
<cfcatch type="any">
|
||||
<cfset userFilesServerPath = rootPath & Config.FileTypesPath[url.type] & url.currentFolder>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
</cfif>
|
||||
|
||||
<cfset userFilesServerPath = replace( userFilesServerPath, "/", fs, "all" ) >
|
||||
<!--- get rid of double directory separators --->
|
||||
<cfset userFilesServerPath = replace( userFilesServerPath, fs & fs, fs, "all") >
|
||||
|
||||
<cfset resourceTypeDirectory = left( userFilesServerPath, Len(userFilesServerPath) - Len(url.currentFolder) )>
|
||||
</cfif>
|
||||
|
||||
<cfif not len(xmlContent) and not directoryexists(resourceTypeDirectory)>
|
||||
<!--- create directories in physical path if they don't already exist --->
|
||||
<cfset currentPath = "">
|
||||
<cftry>
|
||||
<cfloop list="#resourceTypeDirectory#" index="name" delimiters="#fs#">
|
||||
<cfif currentPath eq "" and fs eq "\">
|
||||
<!--- Without checking this, we would have in Windows \C:\ --->
|
||||
<cfif not directoryExists(name)>
|
||||
<cfdirectory action="create" directory="#name#" mode="755">
|
||||
</cfif>
|
||||
<cfelse>
|
||||
<cfif not directoryExists(currentPath & fs & name)>
|
||||
<cfdirectory action="create" directory="#currentPath##fs##name#" mode="755">
|
||||
</cfif>
|
||||
</cfif>
|
||||
|
||||
<cfif fs eq "\" and currentPath eq "">
|
||||
<cfset currentPath = name>
|
||||
<cfelse>
|
||||
<cfset currentPath = currentPath & fs & name>
|
||||
</cfif>
|
||||
</cfloop>
|
||||
|
||||
<cfcatch type="any">
|
||||
|
||||
<!--- this should only occur as a result of a permissions problem --->
|
||||
<cfset xmlContent = "<Error number=""103"" />">
|
||||
|
||||
</cfcatch>
|
||||
|
||||
</cftry>
|
||||
</cfif>
|
||||
|
||||
<cfif not len(xmlContent)>
|
||||
|
||||
<!--- no errors thus far - run command --->
|
||||
|
||||
<!--- we need to know the physical path to the current folder for all commands --->
|
||||
<cfset currentFolderPath = userFilesServerPath>
|
||||
|
||||
<cfswitch expression="#url.command#">
|
||||
|
||||
<cfcase value="FileUpload">
|
||||
<cfset REQUEST.config_included = true>
|
||||
<cfinclude template="cf5_upload.cfm">
|
||||
<cfabort>
|
||||
</cfcase>
|
||||
|
||||
|
||||
<cfcase value="GetFolders">
|
||||
|
||||
<!--- Sort directories first, name ascending --->
|
||||
<cfdirectory
|
||||
action="list"
|
||||
directory="#currentFolderPath#"
|
||||
name="qDir"
|
||||
sort="type,name">
|
||||
|
||||
<cfscript>
|
||||
i=1;
|
||||
folders = "";
|
||||
while( i lte qDir.recordCount ) {
|
||||
if( not compareNoCase( qDir.type[i], "FILE" ))
|
||||
break;
|
||||
if( not listFind(".,..", qDir.name[i]) )
|
||||
folders = folders & '<Folder name="#HTMLEditFormat( qDir.name[i] )#" />';
|
||||
i=i+1;
|
||||
}
|
||||
|
||||
xmlContent = xmlContent & '<Folders>' & folders & '</Folders>';
|
||||
</cfscript>
|
||||
|
||||
</cfcase>
|
||||
|
||||
|
||||
<cfcase value="GetFoldersAndFiles">
|
||||
|
||||
<!--- Sort directories first, name ascending --->
|
||||
<cfdirectory
|
||||
action="list"
|
||||
directory="#currentFolderPath#"
|
||||
name="qDir"
|
||||
sort="type,name">
|
||||
|
||||
<cfscript>
|
||||
i=1;
|
||||
folders = "";
|
||||
files = "";
|
||||
while( i lte qDir.recordCount ) {
|
||||
if( not compareNoCase( qDir.type[i], "DIR" ) and not listFind(".,..", qDir.name[i]) ) {
|
||||
folders = folders & '<Folder name="#HTMLEditFormat(qDir.name[i])#" />';
|
||||
} else if( not compareNoCase( qDir.type[i], "FILE" ) ) {
|
||||
fileSizeKB = round(qDir.size[i] / 1024);
|
||||
files = files & '<File name="#HTMLEditFormat(qDir.name[i])#" size="#IIf( fileSizeKB GT 0, DE( fileSizeKB ), 1)#" />';
|
||||
}
|
||||
i=i+1;
|
||||
}
|
||||
|
||||
xmlContent = xmlContent & '<Folders>' & folders & '</Folders>';
|
||||
xmlContent = xmlContent & '<Files>' & files & '</Files>';
|
||||
</cfscript>
|
||||
|
||||
</cfcase>
|
||||
|
||||
|
||||
<cfcase value="CreateFolder">
|
||||
|
||||
<cfparam name="url.newFolderName" default="">
|
||||
|
||||
<cfscript>
|
||||
newFolderName = url.newFolderName;
|
||||
if( reFind("[^A-Za-z0-9_\-\.]", newFolderName) ) {
|
||||
// Munge folder name same way as we do the filename
|
||||
// This means folder names are always US-ASCII so we don't have to worry about CF5 and UTF-8
|
||||
newFolderName = reReplace(newFolderName, "[^A-Za-z0-9\-\.]", "_", "all");
|
||||
newFolderName = reReplace(newFolderName, "_{2,}", "_", "all");
|
||||
newFolderName = reReplace(newFolderName, "([^_]+)_+$", "\1", "all");
|
||||
newFolderName = reReplace(newFolderName, "$_([^_]+)$", "\1", "all");
|
||||
newFolderName = reReplace(newFolderName, '\.+', "_", "all" );
|
||||
}
|
||||
</cfscript>
|
||||
|
||||
<cfif not len(newFolderName) or len(newFolderName) gt 255>
|
||||
<cfset errorNumber = 102>
|
||||
<cfelseif directoryExists(currentFolderPath & newFolderName)>
|
||||
<cfset errorNumber = 101>
|
||||
<cfelseif reFind("^\.\.",newFolderName)>
|
||||
<cfset errorNumber = 102>
|
||||
<cfelse>
|
||||
<cfset errorNumber = 0>
|
||||
|
||||
<cftry>
|
||||
<cfdirectory
|
||||
action="create"
|
||||
directory="#currentFolderPath##newFolderName#"
|
||||
mode="755">
|
||||
<cfcatch>
|
||||
<!---
|
||||
un-resolvable error numbers in ColdFusion:
|
||||
* 102 : Invalid folder name.
|
||||
* 103 : You have no permissions to create the folder.
|
||||
--->
|
||||
<cfset errorNumber = 110>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
</cfif>
|
||||
|
||||
<cfset xmlContent = xmlContent & '<Error number="#errorNumber#" />'>
|
||||
|
||||
</cfcase>
|
||||
|
||||
<cfdefaultcase>
|
||||
<cfthrow type="fckeditor.connector" message="Illegal command: #url.command#">
|
||||
</cfdefaultcase>
|
||||
|
||||
</cfswitch>
|
||||
</cfif>
|
||||
|
||||
<cfscript>
|
||||
xmlHeader = '<?xml version="1.0" encoding="utf-8" ?>';
|
||||
if (invalidName) {
|
||||
xmlHeader = xmlHeader & '<Connector>';
|
||||
}
|
||||
else {
|
||||
xmlHeader = xmlHeader & '<Connector command="#url.command#" resourceType="#url.type#">';
|
||||
xmlHeader = xmlHeader & '<CurrentFolder path="#url.currentFolder#" url="#resourceTypeUrl##url.currentFolder#" />';
|
||||
}
|
||||
xmlFooter = '</Connector>';
|
||||
</cfscript>
|
||||
|
||||
<cfheader name="Expires" value="#GetHttpTimeString(Now())#">
|
||||
<cfheader name="Pragma" value="no-cache">
|
||||
<cfheader name="Cache-Control" value="no-cache, no-store, must-revalidate">
|
||||
<cfcontent reset="true" type="text/xml; charset=UTF-8">
|
||||
<cfoutput>#xmlHeader##xmlContent##xmlFooter#</cfoutput>
|
||||
@ -1,324 +0,0 @@
|
||||
<cfsetting enablecfoutputonly="Yes">
|
||||
<!---
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* This is the "File Uploader" for ColdFusion 5.
|
||||
* Based on connector.cfm by Mark Woods (mark@thickpaddy.com)
|
||||
*
|
||||
* Note:
|
||||
* FCKeditor requires that the connector responds with UTF-8 encoded XML.
|
||||
* As ColdFusion 5 does not fully support UTF-8 encoding, we force ASCII
|
||||
* file and folder names in this connector to allow CF5 send a UTF-8
|
||||
* encoded response - code points under 127 in UTF-8 are stored using a
|
||||
* single byte, using the same encoding as ASCII, which is damn handy.
|
||||
* This is all grand for the English speakers, like meself, but I dunno
|
||||
* how others are gonna take to it. Well, the previous version of this
|
||||
* connector already did this with file names and nobody seemed to mind,
|
||||
* so fingers-crossed nobody will mind their folder names being munged too.
|
||||
*
|
||||
--->
|
||||
|
||||
<!--- disable connector for ColdFusion > CF5 --->
|
||||
<cfif Left(SERVER.COLDFUSION.PRODUCTVERSION,Find(",",SERVER.COLDFUSION.PRODUCTVERSION)-1) gt 5>
|
||||
<cfabort>
|
||||
</cfif>
|
||||
|
||||
<cfparam name="url.command" default="QuickUpload">
|
||||
<cfparam name="url.type" default="File">
|
||||
<cfparam name="url.currentFolder" default="/">
|
||||
|
||||
<cfif find( "/", getBaseTemplatePath() ) >
|
||||
<cfset REQUEST.Fs = "/">
|
||||
<cfelse>
|
||||
<cfset REQUEST.Fs = "\">
|
||||
</cfif>
|
||||
|
||||
<cfif url.command eq "QuickUpload">
|
||||
<cfset url.currentFolder = "/">
|
||||
</cfif>
|
||||
|
||||
<cfif not isDefined("REQUEST.config_included") or isDefined("URL.config_included")>
|
||||
<cfinclude template="config.cfm">
|
||||
</cfif>
|
||||
|
||||
<cfscript>
|
||||
function SendUploadResults(errorNumber, fileUrl, fileName, customMsg)
|
||||
{
|
||||
WriteOutput('<script type="text/javascript">');
|
||||
// Minified version of the document.domain automatic fix script (#1919).
|
||||
// The original script can be found at _dev/domain_fix_template.js
|
||||
WriteOutput("(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();");
|
||||
WriteOutput('window.parent.OnUploadCompleted(' & errorNumber & ', "' & JSStringFormat(fileUrl) & '", "' & JSStringFormat(fileName) & '", "' & JSStringFormat(customMsg) & '");' );
|
||||
WriteOutput('</script>');
|
||||
}
|
||||
</cfscript>
|
||||
|
||||
<cfif NOT config.enabled>
|
||||
<cfset SendUploadResults(1, "", "", "This file uploader is disabled. Please check the ""editor/filemanager/connectors/cfm/config.cfm"" file")>
|
||||
<cfabort>
|
||||
</cfif>
|
||||
|
||||
<cfif isDefined("Config.ConfigAllowedCommands") and not ListFind(Config.ConfigAllowedCommands, url.command)>
|
||||
<cfset SendUploadResults(1, "", "", "The """ & url.command & """ command isn't allowed")>
|
||||
<cfabort>
|
||||
</cfif>
|
||||
|
||||
<cfif isDefined("Config.ConfigAllowedTypes") and not ListFind(Config.ConfigAllowedTypes, url.type)>
|
||||
<cfset SendUploadResults(1, "", "", "The """ & url.type & """ type isn't allowed")>
|
||||
<cfabort>
|
||||
</cfif>
|
||||
|
||||
<cfif find( "..", url.currentFolder) or find( "\", url.currentFolder)>
|
||||
<cfset SendUploadResults(102, "", "", "")>
|
||||
<cfabort>
|
||||
</cfif>
|
||||
|
||||
<cfif REFind('(/\.)|(//)|[[:cntrl:]]|([\\:\*\?\"<>])', url.currentFolder)>
|
||||
<cfset SendUploadResults(102, "", "", "")>
|
||||
<cfabort>
|
||||
</cfif>
|
||||
|
||||
|
||||
<cfscript>
|
||||
userFilesPath = config.userFilesPath;
|
||||
|
||||
if ( userFilesPath eq "" ) {
|
||||
userFilesPath = "/userfiles/";
|
||||
}
|
||||
|
||||
// make sure the user files path is correctly formatted
|
||||
userFilesPath = replace(userFilesPath, "\", "/", "ALL");
|
||||
userFilesPath = replace(userFilesPath, '//', '/', 'ALL');
|
||||
if ( right(userFilesPath,1) NEQ "/" ) {
|
||||
userFilesPath = userFilesPath & "/";
|
||||
}
|
||||
if ( left(userFilesPath,1) NEQ "/" ) {
|
||||
userFilesPath = "/" & userFilesPath;
|
||||
}
|
||||
|
||||
// make sure the current folder is correctly formatted
|
||||
url.currentFolder = replace(url.currentFolder, "\", "/", "ALL");
|
||||
url.currentFolder = replace(url.currentFolder, '//', '/', 'ALL');
|
||||
if ( right(url.currentFolder,1) neq "/" ) {
|
||||
url.currentFolder = url.currentFolder & "/";
|
||||
}
|
||||
if ( left(url.currentFolder,1) neq "/" ) {
|
||||
url.currentFolder = "/" & url.currentFolder;
|
||||
}
|
||||
|
||||
if (find("/",getBaseTemplatePath())) {
|
||||
fs = "/";
|
||||
} else {
|
||||
fs = "\";
|
||||
}
|
||||
|
||||
// Get the base physical path to the web root for this application. The code to determine the path automatically assumes that
|
||||
// the "FCKeditor" directory in the http request path is directly off the web root for the application and that it's not a
|
||||
// virtual directory or a symbolic link / junction. Use the serverPath config setting to force a physical path if necessary.
|
||||
if ( len(config.serverPath) ) {
|
||||
serverPath = config.serverPath;
|
||||
|
||||
if ( right(serverPath,1) neq fs ) {
|
||||
serverPath = serverPath & fs;
|
||||
}
|
||||
} else {
|
||||
serverPath = replaceNoCase(getBaseTemplatePath(),replace(cgi.script_name,"/",fs,"all"),"") & replace(userFilesPath,"/",fs,"all");
|
||||
}
|
||||
|
||||
rootPath = left( serverPath, Len(serverPath) - Len(userFilesPath) ) ;
|
||||
</cfscript>
|
||||
<cfif url.command eq "QuickUpload">
|
||||
<cfset resourceTypeUrl = rereplace( replace( Config.QuickUploadPath[url.type], fs, "/", "all"), "/$", "") >
|
||||
<cfif isDefined( "Config.QuickUploadAbsolutePath" )
|
||||
and structkeyexists( Config.QuickUploadAbsolutePath, url.type )
|
||||
and Len( Config.QuickUploadAbsolutePath[url.type] )>
|
||||
<cfset userFilesServerPath = Config.QuickUploadAbsolutePath[url.type] & url.currentFolder>
|
||||
<cfelse>
|
||||
<cftry>
|
||||
<cfset userFilesServerPath = expandpath( resourceTypeUrl ) & url.currentFolder>
|
||||
<!--- Catch: Parameter 1 of function ExpandPath must be a relative path --->
|
||||
<cfcatch type="any">
|
||||
<cfset userFilesServerPath = rootPath & Config.QuickUploadPath[url.type] & url.currentFolder>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
</cfif>
|
||||
<cfelseif url.command eq "FileUpload">
|
||||
<cfset resourceTypeUrl = rereplace( replace( Config.FileTypesPath[url.type], fs, "/", "all"), "/$", "") >
|
||||
<cfif isDefined( "Config.FileTypesAbsolutePath" )
|
||||
and structkeyexists( Config.FileTypesAbsolutePath, url.type )
|
||||
and Len( Config.FileTypesAbsolutePath[url.type] )>
|
||||
<cfset userFilesServerPath = Config.FileTypesAbsolutePath[url.type] & url.currentFolder>
|
||||
<cfelse>
|
||||
<cftry>
|
||||
<cfset userFilesServerPath = expandpath( resourceTypeUrl ) & url.currentFolder>
|
||||
<!--- Catch: Parameter 1 of function ExpandPath must be a relative path --->
|
||||
<cfcatch type="any">
|
||||
<cfset userFilesServerPath = rootPath & Config.FileTypesPath[url.type] & url.currentFolder>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
</cfif>
|
||||
</cfif>
|
||||
|
||||
<cfset userFilesServerPath = replace( userFilesServerPath, "/", fs, "all" ) >
|
||||
<!--- get rid of double directory separators --->
|
||||
<cfset userFilesServerPath = replace( userFilesServerPath, fs & fs, fs, "all") >
|
||||
|
||||
<!--- create resource type directory if not exists --->
|
||||
<cfset resourceTypeDirectory = left( userFilesServerPath, Len(userFilesServerPath) - Len(url.currentFolder) )>
|
||||
|
||||
<cfif not directoryexists( resourceTypeDirectory )>
|
||||
|
||||
<cfset currentPath = "">
|
||||
<cftry>
|
||||
<cfloop list="#resourceTypeDirectory#" index="name" delimiters="#fs#">
|
||||
<cfif currentPath eq "" and fs eq "\">
|
||||
<!--- Without checking this, we would have in Windows \C:\ --->
|
||||
<cfif not directoryExists(name)>
|
||||
<cfdirectory action="create" directory="#name#" mode="755">
|
||||
</cfif>
|
||||
<cfelse>
|
||||
<cfif not directoryExists(currentPath & fs & name)>
|
||||
<cfdirectory action="create" directory="#currentPath##fs##name#" mode="755">
|
||||
</cfif>
|
||||
</cfif>
|
||||
|
||||
<cfif fs eq "\" and currentPath eq "">
|
||||
<cfset currentPath = name>
|
||||
<cfelse>
|
||||
<cfset currentPath = currentPath & fs & name>
|
||||
</cfif>
|
||||
</cfloop>
|
||||
|
||||
<cfcatch type="any">
|
||||
|
||||
<!--- this should only occur as a result of a permissions problem --->
|
||||
<cfset SendUploadResults(103, "", "", "")>
|
||||
<cfabort>
|
||||
|
||||
</cfcatch>
|
||||
|
||||
</cftry>
|
||||
</cfif>
|
||||
|
||||
<cfset currentFolderPath = userFilesServerPath>
|
||||
<cfset resourceType = url.type>
|
||||
|
||||
<cfset fileName = "">
|
||||
<cfset fileExt = "">
|
||||
|
||||
<!--- Can be overwritten. The last value will be sent with the result --->
|
||||
<cfset customMsg = "">
|
||||
|
||||
<cftry>
|
||||
<cfif isDefined( "REQUEST.Config.TempDirectory" )>
|
||||
<cfset sTempDir = REQUEST.Config.TempDirectory>
|
||||
<cfelse>
|
||||
<cfset sTempDir = GetTempDirectory()>
|
||||
</cfif>
|
||||
|
||||
<!--- first upload the file with an unique filename --->
|
||||
<cffile action="upload"
|
||||
fileField="NewFile"
|
||||
destination="#sTempDir#"
|
||||
nameConflict="makeunique"
|
||||
mode="644"
|
||||
attributes="normal">
|
||||
|
||||
<cfif cffile.fileSize EQ 0>
|
||||
<cffile action="delete" file="#cffile.ServerDirectory##fs##cffile.ServerFile#">
|
||||
<cfthrow>
|
||||
</cfif>
|
||||
|
||||
<cfset sTempFilePath = CFFILE.ServerDirectory & REQUEST.fs & CFFILE.ServerFile>
|
||||
<cfset lAllowedExtensions = config.allowedExtensions[#resourceType#]>
|
||||
<cfset lDeniedExtensions = config.deniedExtensions[#resourceType#]>
|
||||
|
||||
<cfif ( len(lAllowedExtensions) and not listFindNoCase(lAllowedExtensions,cffile.ServerFileExt) )
|
||||
or ( len(lDeniedExtensions) and listFindNoCase(lDeniedExtensions,cffile.ServerFileExt) )>
|
||||
<cfset errorNumber = "202">
|
||||
<cffile action="delete" file="#cffile.ServerDirectory##fs##cffile.ServerFile#">
|
||||
<cfelse>
|
||||
<cfscript>
|
||||
errorNumber = 0;
|
||||
fileName = cffile.ClientFileName ;
|
||||
fileExt = cffile.ServerFileExt ;
|
||||
fileExisted = false ;
|
||||
|
||||
// munge filename for html download. Only a-z, 0-9, _, - and . are allowed
|
||||
if( reFind("[^A-Za-z0-9_\-\.]", fileName) ) {
|
||||
fileName = reReplace(fileName, "[^A-Za-z0-9\-\.]", "_", "ALL");
|
||||
fileName = reReplace(fileName, "_{2,}", "_", "ALL");
|
||||
fileName = reReplace(fileName, "([^_]+)_+$", "\1", "ALL");
|
||||
fileName = reReplace(fileName, "$_([^_]+)$", "\1", "ALL");
|
||||
}
|
||||
|
||||
// remove additional dots from file name
|
||||
if( isDefined("Config.ForceSingleExtension") and Config.ForceSingleExtension )
|
||||
fileName = replace( fileName, '.', "_", "all" ) ;
|
||||
|
||||
// When the original filename already exists, add numbers (0), (1), (2), ... at the end of the filename.
|
||||
counter = 0;
|
||||
tmpFileName = fileName;
|
||||
while( fileExists("#currentFolderPath##fileName#.#fileExt#") ) {
|
||||
fileExisted = true ;
|
||||
counter = counter + 1 ;
|
||||
fileName = tmpFileName & '(#counter#)' ;
|
||||
}
|
||||
</cfscript>
|
||||
|
||||
<cfset destination = currentFolderPath & fileName & "." & fileExt>
|
||||
<cfif fileExisted>
|
||||
<cfset errorNumber = "201">
|
||||
</cfif>
|
||||
|
||||
<cftry>
|
||||
<cffile action="copy" source="#sTempFilePath#" destination="#destination#" mode="755">
|
||||
<cfcatch type="any">
|
||||
<cfset errorNumber = 102>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
<cftry>
|
||||
<cffile action="delete" file="#sTempFilePath#">
|
||||
<cfcatch type="any">
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
</cfif>
|
||||
|
||||
<cfcatch type="any">
|
||||
|
||||
<cfset errorNumber = "1">
|
||||
<cfset customMsg = cfcatch.message >
|
||||
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfif errorNumber EQ 0>
|
||||
<!--- file was uploaded succesfully --->
|
||||
<cfset SendUploadResults(errorNumber, '#resourceTypeUrl##url.currentFolder##fileName#.#fileExt#', replace( fileName & "." & fileExt, "'", "\'", "ALL"), "")>
|
||||
<cfabort>
|
||||
<cfelseif errorNumber EQ 201>
|
||||
<!--- file was changed (201), submit the new filename --->
|
||||
<cfset SendUploadResults(errorNumber, '#resourceTypeUrl##url.currentFolder##fileName#.#fileExt#', replace( fileName & "." & fileExt, "'", "\'", "ALL"), customMsg)>
|
||||
<cfabort>
|
||||
<cfelse>
|
||||
<!--- An error occured(202). Submit only the error code and a message (if available). --->
|
||||
<cfset SendUploadResults(errorNumber, '', '', customMsg)>
|
||||
<cfabort>
|
||||
</cfif>
|
||||
@ -1,72 +0,0 @@
|
||||
<cfsetting enablecfoutputonly="Yes">
|
||||
<!---
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* This file include the functions that create the base XML output by the ColdFusion Connector (MX 6.0 and above).
|
||||
--->
|
||||
|
||||
<cffunction name="SetXmlHeaders" returntype="void">
|
||||
<cfheader name="Expires" value="#GetHttpTimeString(Now())#">
|
||||
<cfheader name="Pragma" value="no-cache">
|
||||
<cfheader name="Cache-Control" value="no-cache, no-store, must-revalidate">
|
||||
<cfcontent reset="true" type="text/xml; charset=UTF-8">
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="CreateXmlHeader" returntype="void" output="true">
|
||||
<cfargument name="command" required="true">
|
||||
<cfargument name="resourceType" required="true">
|
||||
<cfargument name="currentFolder" required="true">
|
||||
|
||||
<cfset SetXmlHeaders()>
|
||||
<cfoutput><?xml version="1.0" encoding="utf-8" ?></cfoutput>
|
||||
<cfoutput><Connector command="#ARGUMENTS.command#" resourceType="#ARGUMENTS.resourceType#"></cfoutput>
|
||||
<cfoutput><CurrentFolder path="#HTMLEditFormat(ARGUMENTS.currentFolder)#" url="#HTMLEditFormat( GetUrlFromPath( resourceType, currentFolder, command ) )#" /></cfoutput>
|
||||
<cfset REQUEST.HeaderSent = true>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="CreateXmlFooter" returntype="void" output="true">
|
||||
<cfoutput></Connector></cfoutput>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="SendError" returntype="void" output="true">
|
||||
<cfargument name="number" required="true" type="Numeric">
|
||||
<cfargument name="text" required="true">
|
||||
<cfif isDefined("REQUEST.HeaderSent") and REQUEST.HeaderSent>
|
||||
<cfset SendErrorNode( ARGUMENTS.number, ARGUMENTS.text )>
|
||||
<cfset CreateXmlFooter() >
|
||||
<cfelse>
|
||||
<cfset SetXmlHeaders()>
|
||||
<cfoutput><?xml version="1.0" encoding="utf-8" ?></cfoutput>
|
||||
<cfoutput><Connector></cfoutput>
|
||||
<cfset SendErrorNode( ARGUMENTS.number, ARGUMENTS.text )>
|
||||
<cfset CreateXmlFooter() >
|
||||
</cfif>
|
||||
<cfabort>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="SendErrorNode" returntype="void" output="true">
|
||||
<cfargument name="number" required="true" type="Numeric">
|
||||
<cfargument name="text" required="true">
|
||||
<cfif Len(ARGUMENTS.text)>
|
||||
<cfoutput><Error number="#ARGUMENTS.number#" text="#htmleditformat(ARGUMENTS.text)#" /></cfoutput>
|
||||
<cfelse>
|
||||
<cfoutput><Error number="#ARGUMENTS.number#" /></cfoutput>
|
||||
</cfif>
|
||||
</cffunction>
|
||||
@ -1,240 +0,0 @@
|
||||
<cfsetting enablecfoutputonly="Yes">
|
||||
<!---
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* This file include the functions that handle the Command requests
|
||||
* in the ColdFusion Connector (MX 6.0 and above).
|
||||
--->
|
||||
|
||||
<cffunction name="FCKeditorFileUpload" returntype="void" output="true">
|
||||
<cfargument name="resourceType" type="string" required="yes" default="">
|
||||
<cfargument name="currentFolder" type="string" required="yes" default="">
|
||||
<cfargument name="sCommand" type="string" required="yes" default="">
|
||||
|
||||
<cfset var sFileName = "">
|
||||
<cfset var sFilePart = "">
|
||||
<cfset var sFileExt = "">
|
||||
<cfset var sFileUrl = "">
|
||||
<cfset var sTempDir = "">
|
||||
<cfset var sTempFilePath = "">
|
||||
<cfset var errorNumber = 0>
|
||||
<cfset var customMsg = "">
|
||||
<cfset var counter = 0>
|
||||
<cfset var destination = "">
|
||||
|
||||
<cftry>
|
||||
<cfif isDefined( "REQUEST.Config.TempDirectory" )>
|
||||
<cfset sTempDir = REQUEST.Config.TempDirectory>
|
||||
<cfelse>
|
||||
<cfset sTempDir = GetTempDirectory()>
|
||||
</cfif>
|
||||
<cfif NOT DirectoryExists (sTempDir)>
|
||||
<cfthrow message="Invalid temporary directory: #sTempDir#">
|
||||
</cfif>
|
||||
|
||||
<cffile action="UPLOAD" filefield="NewFile" destination="#sTempDir#" nameconflict="makeunique" mode="0755" />
|
||||
<cfset sTempFilePath = CFFILE.ServerDirectory & REQUEST.fs & CFFILE.ServerFile>
|
||||
|
||||
<!--- Map the virtual path to the local server path. --->
|
||||
<cfset sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, ARGUMENTS.sCommand) >
|
||||
<!--- Get the uploaded file name. --->
|
||||
<cfset sFileName = SanitizeFileName( CFFILE.ClientFile ) >
|
||||
<cfset sOriginalFileName = sFileName >
|
||||
|
||||
<cfif isDefined( "REQUEST.Config.SecureImageUploads" ) and REQUEST.Config.SecureImageUploads>
|
||||
<cfif not IsImageValid( sTempFilePath, CFFILE.ClientFileExt )>
|
||||
<cftry>
|
||||
<cffile action="delete" file="#sTempFilePath#">
|
||||
<cfcatch type="any">
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
<cfthrow errorcode="202" type="fckeditor">
|
||||
</cfif>
|
||||
</cfif>
|
||||
|
||||
<cfif isDefined( "REQUEST.Config.HtmlExtensions" ) and not listFindNoCase( REQUEST.Config.HtmlExtensions, CFFILE.ClientFileExt )>
|
||||
<cfif DetectHtml( sTempFilePath )>
|
||||
<cftry>
|
||||
<cffile action="delete" file="#sTempFilePath#">
|
||||
<cfcatch type="any">
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
<cfthrow errorcode="202" type="fckeditor">
|
||||
</cfif>
|
||||
</cfif>
|
||||
|
||||
<cfif not IsAllowedExt( CFFILE.ClientFileExt, ARGUMENTS.resourceType )>
|
||||
<cftry>
|
||||
<cffile action="delete" file="#sTempFilePath#">
|
||||
<cfcatch type="any">
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
<cfthrow errorcode="202" type="fckeditor">
|
||||
</cfif>
|
||||
|
||||
<!--- When the original filename already exists, add numbers (0), (1), (2), ... at the end of the filename. --->
|
||||
<cfscript>
|
||||
sFileExt = GetExtension( sFileName ) ;
|
||||
sFilePart = RemoveExtension( sFileName );
|
||||
while( fileExists( sServerDir & sFileName ) )
|
||||
{
|
||||
counter = counter + 1;
|
||||
sFileName = sFilePart & '(#counter#).' & CFFILE.ClientFileExt;
|
||||
errorNumber = 201;
|
||||
}
|
||||
</cfscript>
|
||||
|
||||
<cfset destination = sServerDir & sFileName>
|
||||
|
||||
<cflock name="#destination#" timeout="30" type="Exclusive">
|
||||
<cftry>
|
||||
<cffile action="move" source="#sTempFilePath#" destination="#destination#" mode="755">
|
||||
<!--- omit CF 6.1 error during moving uploaded file, just copy that file instead of moving --->
|
||||
<cfcatch type="any">
|
||||
<cftry>
|
||||
<cffile action="copy" source="#sTempFilePath#" destination="#destination#" mode="755">
|
||||
<cfcatch type="any">
|
||||
<cfset errorNumber = 102>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
<cftry>
|
||||
<cffile action="delete" file="#sTempFilePath#">
|
||||
<cfcatch type="any">
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
</cflock>
|
||||
|
||||
<cfset sFileUrl = CombinePaths( GetResourceTypePath( ARGUMENTS.resourceType, sCommand ) , ARGUMENTS.currentFolder ) >
|
||||
<cfset sFileUrl = CombinePaths( sFileUrl , sFileName ) >
|
||||
|
||||
<cfcatch type="fckeditor">
|
||||
<cfset errorNumber = CFCATCH.ErrorCode>
|
||||
</cfcatch>
|
||||
|
||||
<cfcatch type="any">
|
||||
<cfset errorNumber = "1">
|
||||
<cfset customMsg = CFCATCH.Message >
|
||||
</cfcatch>
|
||||
|
||||
</cftry>
|
||||
|
||||
<cfset SendUploadResults( errorNumber, sFileUrl, sFileName, customMsg ) >
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="GetFolders" returntype="void" output="true">
|
||||
<cfargument name="resourceType" type="String" required="true">
|
||||
<cfargument name="currentFolder" type="String" required="true">
|
||||
|
||||
<cfset var i = 1>
|
||||
<cfset var folders = "">
|
||||
<!--- Map the virtual path to the local server path --->
|
||||
<cfset var sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, "GetFolders" ) >
|
||||
|
||||
<!--- Sort directories first, name ascending --->
|
||||
<cfdirectory action="list" directory="#sServerDir#" name="qDir" sort="type,name">
|
||||
<cfscript>
|
||||
while( i lte qDir.recordCount )
|
||||
{
|
||||
if( compareNoCase( qDir.type[i], "FILE" ) and not listFind( ".,..", qDir.name[i] ) )
|
||||
{
|
||||
folders = folders & '<Folder name="#HTMLEditFormat( qDir.name[i] )#" />' ;
|
||||
}
|
||||
i = i + 1;
|
||||
}
|
||||
</cfscript>
|
||||
<cfoutput><Folders>#folders#</Folders></cfoutput>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="GetFoldersAndfiles" returntype="void" output="true">
|
||||
<cfargument name="resourceType" type="String" required="true">
|
||||
<cfargument name="currentFolder" type="String" required="true">
|
||||
|
||||
<cfset var i = 1>
|
||||
<cfset var folders = "">
|
||||
<cfset var files = "">
|
||||
<!--- Map the virtual path to the local server path --->
|
||||
<cfset var sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, "GetFolders" ) >
|
||||
|
||||
<!--- Sort directories first, name ascending --->
|
||||
<cfdirectory action="list" directory="#sServerDir#" name="qDir" sort="type,name">
|
||||
<cfscript>
|
||||
while( i lte qDir.recordCount )
|
||||
{
|
||||
if( not compareNoCase( qDir.type[i], "DIR" ) and not listFind( ".,..", qDir.name[i] ) )
|
||||
{
|
||||
folders = folders & '<Folder name="#HTMLEditFormat(qDir.name[i])#" />' ;
|
||||
}
|
||||
else if( not compareNoCase( qDir.type[i], "FILE" ) )
|
||||
{
|
||||
fileSizeKB = round(qDir.size[i] / 1024) ;
|
||||
files = files & '<File name="#HTMLEditFormat(qDir.name[i])#" size="#IIf( fileSizeKB GT 0, DE( fileSizeKB ), 1)#" />' ;
|
||||
}
|
||||
i = i + 1 ;
|
||||
}
|
||||
</cfscript>
|
||||
<cfoutput><Folders>#folders#</Folders></cfoutput>
|
||||
<cfoutput><Files>#files#</Files></cfoutput>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="CreateFolder" returntype="void" output="true">
|
||||
<cfargument name="resourceType" required="true" type="string">
|
||||
<cfargument name="currentFolder" required="true" type="string">
|
||||
|
||||
<cfset var sNewFolderName = url.newFolderName >
|
||||
<cfset var sServerDir = "" >
|
||||
<cfset var errorNumber = 0>
|
||||
<cfset var sErrorMsg = "">
|
||||
<cfset var currentFolderPath = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, 'CreateFolder' )>
|
||||
|
||||
<cfparam name="url.newFolderName" default="">
|
||||
|
||||
<cfscript>
|
||||
sNewFolderName = SanitizeFolderName( sNewFolderName ) ;
|
||||
</cfscript>
|
||||
|
||||
<cfif not len( sNewFolderName ) or len( sNewFolderName ) gt 255>
|
||||
<cfset errorNumber = 102>
|
||||
<cfelseif directoryExists( currentFolderPath & sNewFolderName )>
|
||||
<cfset errorNumber = 101>
|
||||
<cfelseif find( "..", sNewFolderName )>
|
||||
<cfset errorNumber = 103>
|
||||
<cfelse>
|
||||
<cfset errorNumber = 0>
|
||||
|
||||
<!--- Map the virtual path to the local server path of the current folder. --->
|
||||
<cfset sServerDir = currentFolderPath & sNewFolderName >
|
||||
|
||||
<cftry>
|
||||
<cfdirectory action="create" directory="#currentFolderPath##sNewFolderName#" mode="755">
|
||||
<cfcatch type="any">
|
||||
<!---
|
||||
un-resolvable error numbers in ColdFusion:
|
||||
* 102 : Invalid folder name.
|
||||
* 103 : You have no permissions to create the folder.
|
||||
--->
|
||||
<cfset errorNumber = 110>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
</cfif>
|
||||
|
||||
<cfoutput><Error number="#errorNumber#" /></cfoutput>
|
||||
</cffunction>
|
||||
@ -1,89 +0,0 @@
|
||||
<cfsetting enablecfoutputonly="yes" showdebugoutput="no">
|
||||
<!---
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* File Browser connector for ColdFusion (MX 6.0 and above).
|
||||
* (based on the original CF connector by Hendrik Kramer - hk@lwd.de)
|
||||
*
|
||||
--->
|
||||
|
||||
<cfparam name="url.command">
|
||||
<cfparam name="url.type">
|
||||
<cfparam name="url.currentFolder">
|
||||
|
||||
<!--- note: no serverPath url parameter - see config.cfm if you need to set the serverPath manually --->
|
||||
|
||||
<cfinclude template="config.cfm">
|
||||
<cfinclude template="cf_util.cfm">
|
||||
<cfinclude template="cf_io.cfm">
|
||||
<cfinclude template="cf_basexml.cfm">
|
||||
<cfinclude template="cf_commands.cfm">
|
||||
|
||||
<cfif not Config.Enabled>
|
||||
<cfset SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/connectors/cfm/config.cfm" file' )>
|
||||
</cfif>
|
||||
|
||||
<cfset REQUEST.Config = Config>
|
||||
<cfif find( "/", getBaseTemplatePath() ) >
|
||||
<cfset REQUEST.Fs = "/">
|
||||
<cfelse>
|
||||
<cfset REQUEST.Fs = "\">
|
||||
</cfif>
|
||||
|
||||
<cfset DoResponse() >
|
||||
|
||||
<cffunction name="DoResponse" output="true" returntype="void">
|
||||
|
||||
<!--- Get the main request informaiton. --->
|
||||
<cfset var sCommand = "#URL.Command#" >
|
||||
<cfset var sResourceType = URL.Type >
|
||||
<cfset var sCurrentFolder = GetCurrentFolder() >
|
||||
|
||||
<!--- Check if it is an allowed command --->
|
||||
<cfif not IsAllowedCommand( sCommand ) >
|
||||
<cfset SendError( 1, "The """ & sCommand & """ command isn't allowed" ) >
|
||||
</cfif>
|
||||
|
||||
<!--- Check if it is an allowed type. --->
|
||||
<cfif not IsAllowedType( sResourceType ) >
|
||||
<cfset SendError( 1, 'Invalid type specified' ) >
|
||||
</cfif>
|
||||
|
||||
<!--- File Upload doesn't have to Return XML, so it must be intercepted before anything. --->
|
||||
<cfif sCommand eq "FileUpload">
|
||||
<cfset FCKeditorFileUpload( sResourceType, sCurrentFolder, sCommand )>
|
||||
<cfabort>
|
||||
</cfif>
|
||||
|
||||
<cfset CreateXmlHeader( sCommand, sResourceType, sCurrentFolder )>
|
||||
|
||||
<!--- Execute the required command. --->
|
||||
<cfif sCommand eq "GetFolders">
|
||||
<cfset GetFolders( sResourceType, sCurrentFolder ) >
|
||||
<cfelseif sCommand eq "GetFoldersAndFiles">
|
||||
<cfset GetFoldersAndFiles( sResourceType, sCurrentFolder ) >
|
||||
<cfelseif sCommand eq "CreateFolder">
|
||||
<cfset CreateFolder( sResourceType, sCurrentFolder ) >
|
||||
</cfif>
|
||||
|
||||
<cfset CreateXmlFooter()>
|
||||
|
||||
<cfexit>
|
||||
</cffunction>
|
||||
@ -1,299 +0,0 @@
|
||||
<cfsetting enablecfoutputonly="Yes">
|
||||
<!---
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* This file include IO specific functions used by the ColdFusion Connector (MX 6.0 and above).
|
||||
*
|
||||
--->
|
||||
|
||||
<cffunction name="CombinePaths" returntype="String" output="true">
|
||||
<cfargument name="sBasePath" required="true">
|
||||
<cfargument name="sFolder" required="true">
|
||||
<cfset sBasePath = RemoveFromEnd( sBasePath, "/" )>
|
||||
<cfset sBasePath = RemoveFromEnd( sBasePath, "\" )>
|
||||
<cfreturn sBasePath & "/" & RemoveFromStart( ARGUMENTS.sFolder, '/' )>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="GetResourceTypePath" returntype="String" output="false">
|
||||
<cfargument name="resourceType" required="true">
|
||||
<cfargument name="sCommand" required="true">
|
||||
|
||||
<cfif ARGUMENTS.sCommand eq "QuickUpload">
|
||||
<cfreturn REQUEST.Config['QuickUploadPath'][ARGUMENTS.resourceType]>
|
||||
<cfelse>
|
||||
<cfreturn REQUEST.Config['FileTypesPath'][ARGUMENTS.resourceType]>
|
||||
</cfif>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="GetResourceTypeDirectory" returntype="String" output="false">
|
||||
<cfargument name="resourceType" required="true">
|
||||
<cfargument name="sCommand" required="true">
|
||||
|
||||
<cfif ARGUMENTS.sCommand eq "QuickUpload">
|
||||
<cfif isDefined( "REQUEST.Config.QuickUploadAbsolutePath" )
|
||||
and structkeyexists( REQUEST.Config.QuickUploadAbsolutePath, ARGUMENTS.resourceType )
|
||||
and Len( REQUEST.Config.QuickUploadAbsolutePath[ARGUMENTS.resourceType] )>
|
||||
<cfreturn REQUEST.Config.QuickUploadAbsolutePath[ARGUMENTS.resourceType]>
|
||||
</cfif>
|
||||
|
||||
<cfreturn expandpath( REQUEST.Config.QuickUploadPath[ARGUMENTS.resourceType] )>
|
||||
<cfelse>
|
||||
<cfif isDefined( "REQUEST.Config.FileTypesAbsolutePath" )
|
||||
and structkeyexists( REQUEST.Config.FileTypesAbsolutePath, ARGUMENTS.resourceType )
|
||||
and Len( REQUEST.Config.FileTypesAbsolutePath[ARGUMENTS.resourceType] )>
|
||||
<cfreturn REQUEST.Config.FileTypesAbsolutePath[ARGUMENTS.resourceType]>
|
||||
</cfif>
|
||||
|
||||
<cfreturn expandpath( REQUEST.Config.FileTypesPath[ARGUMENTS.resourceType] )>
|
||||
</cfif>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="GetUrlFromPath" returntype="String" output="false">
|
||||
<cfargument name="resourceType" required="true">
|
||||
<cfargument name="folderPath" required="true">
|
||||
<cfargument name="sCommand" required="true">
|
||||
|
||||
<cfreturn CombinePaths( GetResourceTypePath( ARGUMENTS.resourceType, ARGUMENTS.sCommand ), ARGUMENTS.folderPath )>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="RemoveExtension" output="false" returntype="String">
|
||||
<cfargument name="fileName" required="true">
|
||||
<cfset var pos = find( ".", reverse ( ARGUMENTS.fileName ) )>
|
||||
|
||||
<cfreturn mid( ARGUMENTS.fileName, 1, Len( ARGUMENTS.fileName ) - pos ) >
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="GetExtension" output="false" returntype="String">
|
||||
<cfargument name="fileName" required="true">
|
||||
<cfset var pos = find( ".", reverse ( ARGUMENTS.fileName ) )>
|
||||
|
||||
<cfif not pos>
|
||||
<cfreturn "">
|
||||
</cfif>
|
||||
|
||||
<cfreturn mid( ARGUMENTS.fileName, pos, Len( ARGUMENTS.fileName ) - pos ) >
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="ServerMapFolder" returntype="String" output="false">
|
||||
<cfargument name="resourceType" required="true">
|
||||
<cfargument name="folderPath" required="true">
|
||||
<cfargument name="sCommand" required="true">
|
||||
|
||||
<!--- Get the resource type directory. --->
|
||||
<cfset var sResourceTypePath = GetResourceTypeDirectory( ARGUMENTS.resourceType, ARGUMENTS.sCommand ) >
|
||||
<!--- Ensure that the directory exists. --->
|
||||
<cfset var sErrorMsg = CreateServerFolder( sResourceTypePath ) >
|
||||
|
||||
<cfif sErrorMsg neq ''>
|
||||
<cfset SendError( 1, 'Error creating folder "' & sResourceTypePath & '" (' & sErrorMsg & ')' )>
|
||||
</cfif>
|
||||
|
||||
<!--- Return the resource type directory combined with the required path. --->
|
||||
<cfreturn CombinePaths( sResourceTypePath , ARGUMENTS.folderPath )>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="GetParentFolder" returntype="string" output="false">
|
||||
<cfargument name="folderPath" required="true">
|
||||
|
||||
<cfreturn rereplace(ARGUMENTS.folderPath, "[/\\\\][^/\\\\]+[/\\\\]?$", "")>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="CreateServerFolder" returntype="String" output="false">
|
||||
<cfargument name="folderPath">
|
||||
|
||||
<!--- Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms --->
|
||||
<cfset folderPath = rereplace(ARGUMENTS.folderPath, "//+", "/", "all")>
|
||||
|
||||
<cfif directoryexists(ARGUMENTS.folderPath) or fileexists(ARGUMENTS.folderPath)>
|
||||
<cfreturn "">
|
||||
<cfelse>
|
||||
<cftry>
|
||||
<cfdirectory action="create" mode="0755" directory="#ARGUMENTS.folderPath#">
|
||||
<cfcatch type="any">
|
||||
<cfreturn CFCATCH.Message>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
</cfif>
|
||||
|
||||
<cfreturn "">
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="IsAllowedExt" returntype="boolean" output="false">
|
||||
<cfargument name="sExtension" required="true">
|
||||
<cfargument name="resourceType" required="true">
|
||||
|
||||
<cfif isDefined( "REQUEST.Config.AllowedExtensions." & ARGUMENTS.resourceType )
|
||||
and listLen( REQUEST.Config.AllowedExtensions[ARGUMENTS.resourceType] )
|
||||
and not listFindNoCase( REQUEST.Config.AllowedExtensions[ARGUMENTS.resourceType], ARGUMENTS.sExtension )>
|
||||
<cfreturn false>
|
||||
</cfif>
|
||||
|
||||
<cfif isDefined( "REQUEST.Config.DeniedExtensions." & ARGUMENTS.resourceType )
|
||||
and listLen( REQUEST.Config.DeniedExtensions[ARGUMENTS.resourceType] )
|
||||
and listFindNoCase( REQUEST.Config.DeniedExtensions[ARGUMENTS.resourceType], ARGUMENTS.sExtension )>
|
||||
<cfreturn false>
|
||||
</cfif>
|
||||
|
||||
<cfreturn true>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="IsAllowedType" returntype="boolean" output="false">
|
||||
<cfargument name="resourceType">
|
||||
|
||||
<cfif not listFindNoCase( REQUEST.Config.ConfigAllowedTypes, ARGUMENTS.resourceType )>
|
||||
<cfreturn false>
|
||||
</cfif>
|
||||
|
||||
<cfreturn true>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="IsAllowedCommand" returntype="boolean" output="true">
|
||||
<cfargument name="sCommand" required="true" type="String">
|
||||
|
||||
<cfif not listFindNoCase( REQUEST.Config.ConfigAllowedCommands, ARGUMENTS.sCommand )>
|
||||
<cfreturn false>
|
||||
</cfif>
|
||||
|
||||
<cfreturn true>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="GetCurrentFolder" returntype="String" output="true">
|
||||
<cfset var sCurrentFolder = "/">
|
||||
|
||||
<cfif isDefined( "URL.CurrentFolder" )>
|
||||
<cfset sCurrentFolder = URL.CurrentFolder>
|
||||
</cfif>
|
||||
|
||||
<!--- Check the current folder syntax (must begin and start with a slash). --->
|
||||
<cfif not refind( "/$", sCurrentFolder)>
|
||||
<cfset sCurrentFolder = sCurrentFolder & "/">
|
||||
</cfif>
|
||||
|
||||
<cfif not refind( "^/", sCurrentFolder )>
|
||||
<cfset sCurrentFolder = "/" & sCurrentFolder>
|
||||
</cfif>
|
||||
|
||||
<!--- Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms --->
|
||||
<cfset sCurrentFolder = rereplace( sCurrentFolder, "//+", "/", "all" )>
|
||||
|
||||
<cfif find( "..", sCurrentFolder) or find( "\", sCurrentFolder) or REFind('(/\.)|(//)|[[:cntrl:]]|([\\:\*\?\"<>])', sCurrentFolder)>
|
||||
<cfif URL.Command eq "FileUpload" or URL.Command eq "QuickUpload">
|
||||
<cfset SendUploadResults( 102, "", "", "") >
|
||||
<cfelse>
|
||||
<cfset SendError( 102, "" )>
|
||||
</cfif>
|
||||
</cfif>
|
||||
|
||||
<cfreturn sCurrentFolder>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="SanitizeFolderName" returntype="String" output="false">
|
||||
<cfargument name="sNewFolderName" required="true">
|
||||
|
||||
<!--- Do a cleanup of the folder name to avoid possible problems --->
|
||||
<!--- Remove . \ / | : ? * " < > and control characters --->
|
||||
<cfset sNewFolderName = rereplace( sNewFolderName, '\.+|\\+|\/+|\|+|\:+|\?+|\*+|"+|<+|>+|[[:cntrl:]]+', "_", "all" )>
|
||||
|
||||
<cfreturn sNewFolderName>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="BinaryFileRead" returntype="String" output="true">
|
||||
<cfargument name="fileName" required="true" type="string">
|
||||
<cfargument name="bytes" required="true" type="Numeric">
|
||||
|
||||
<cfscript>
|
||||
var chunk = "";
|
||||
var fileReaderClass = "";
|
||||
var fileReader = "";
|
||||
var file = "";
|
||||
var done = false;
|
||||
var counter = 0;
|
||||
var byteArray = "";
|
||||
|
||||
if( not fileExists( ARGUMENTS.fileName ) )
|
||||
{
|
||||
return "" ;
|
||||
}
|
||||
|
||||
if (REQUEST.CFVersion gte 8)
|
||||
{
|
||||
file = FileOpen( ARGUMENTS.fileName, "readbinary" ) ;
|
||||
byteArray = FileRead( file, 1024 ) ;
|
||||
chunk = toString( toBinary( toBase64( byteArray ) ) ) ;
|
||||
FileClose( file ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
fileReaderClass = createObject("java", "java.io.FileInputStream");
|
||||
fileReader = fileReaderClass.init(fileName);
|
||||
|
||||
while(not done)
|
||||
{
|
||||
char = fileReader.read();
|
||||
counter = counter + 1;
|
||||
if ( char eq -1 or counter eq ARGUMENTS.bytes)
|
||||
{
|
||||
done = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
chunk = chunk & chr(char) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
</cfscript>
|
||||
|
||||
<cfreturn chunk>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="SendUploadResults" returntype="String" output="true">
|
||||
<cfargument name="errorNumber" required="true" type="Numeric">
|
||||
<cfargument name="fileUrl" required="false" type="String" default="">
|
||||
<cfargument name="fileName" required="false" type="String" default="">
|
||||
<cfargument name="customMsg" required="false" type="String" default="">
|
||||
|
||||
<cfif errorNumber and errorNumber neq 201>
|
||||
<cfset fileUrl = "">
|
||||
<cfset fileName = "">
|
||||
</cfif>
|
||||
<!--- Minified version of the document.domain automatic fix script (#1919).
|
||||
The original script can be found at _dev/domain_fix_template.js --->
|
||||
<cfoutput>
|
||||
<script type="text/javascript">
|
||||
(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
|
||||
window.parent.OnUploadCompleted( #errorNumber#, "#JSStringFormat(fileUrl)#", "#JSStringFormat(fileName)#", "#JSStringFormat(customMsg)#" );
|
||||
</script>
|
||||
</cfoutput>
|
||||
<cfabort>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="SanitizeFileName" returntype="String" output="false">
|
||||
<cfargument name="sNewFileName" required="true">
|
||||
|
||||
<cfif isDefined("REQUEST.Config.ForceSingleExtension") and REQUEST.Config.ForceSingleExtension>
|
||||
<cfset sNewFileName = rereplace( sNewFileName, '\.(?![^.]*$)', "_", "all" )>
|
||||
</cfif>
|
||||
|
||||
<!--- Do a cleanup of the file name to avoid possible problems --->
|
||||
<!--- Remove \ / | : ? * " < > and control characters --->
|
||||
<cfset sNewFileName = rereplace( sNewFileName, '\\[.]+|\\+|\/+|\|+|\:+|\?+|\*+|"+|<+|>+|[[:cntrl:]]+', "_", "all" )>
|
||||
|
||||
<cfreturn sNewFileName>
|
||||
</cffunction>
|
||||
@ -1,71 +0,0 @@
|
||||
<cfsetting enablecfoutputonly="yes" showdebugoutput="no">
|
||||
<!---
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* File Browser connector for ColdFusion (MX 6.0 and above).
|
||||
* (based on the original CF connector by Hendrik Kramer - hk@lwd.de)
|
||||
--->
|
||||
|
||||
<cfparam name="url.type" default="File">
|
||||
|
||||
<!--- note: no serverPath url parameter - see config.cfm if you need to set the serverPath manually --->
|
||||
|
||||
<cfinclude template="config.cfm">
|
||||
<cfinclude template="cf_util.cfm">
|
||||
<cfinclude template="cf_io.cfm">
|
||||
<cfinclude template="cf_commands.cfm">
|
||||
|
||||
<cffunction name="SendError" returntype="void" output="true">
|
||||
<cfargument name="number" required="true" type="Numeric">
|
||||
<cfargument name="text" required="true">
|
||||
<cfreturn SendUploadResults( "#ARGUMENTS.number#", "", "", "#ARGUMENTS.text#" )>
|
||||
</cffunction>
|
||||
|
||||
<cfset REQUEST.Config = Config>
|
||||
<cfif find( "/", getBaseTemplatePath() ) >
|
||||
<cfset REQUEST.Fs = "/">
|
||||
<cfelse>
|
||||
<cfset REQUEST.Fs = "\">
|
||||
</cfif>
|
||||
|
||||
<cfif not Config.Enabled>
|
||||
<cfset SendUploadResults( '1', '', '', 'This file uploader is disabled. Please check the "editor/filemanager/connectors/cfm/config.cfm" file' )>
|
||||
</cfif>
|
||||
|
||||
<cfset sCommand = 'QuickUpload'>
|
||||
<cfset sType = "File">
|
||||
|
||||
<cfif isDefined( "URL.Type" )>
|
||||
<cfset sType = URL.Type>
|
||||
</cfif>
|
||||
|
||||
<cfset sCurrentFolder = "/">
|
||||
|
||||
<!--- Is enabled the upload? --->
|
||||
<cfif not IsAllowedCommand( sCommand )>
|
||||
<cfset SendUploadResults( "1", "", "", "The """ & sCommand & """ command isn't allowed" )>
|
||||
</cfif>
|
||||
|
||||
<!--- Check if it is an allowed type. --->
|
||||
<cfif not IsAllowedType( sType )>
|
||||
<cfset SendUploadResults( "1", "", "", "Invalid type specified" ) >
|
||||
</cfif>
|
||||
|
||||
<cfset FCKeditorFileUpload( sType, sCurrentFolder, sCommand )>
|
||||
@ -1,131 +0,0 @@
|
||||
<cfsetting enablecfoutputonly="Yes">
|
||||
<!---
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* This file include generic functions used by the ColdFusion Connector (MX 6.0 and above).
|
||||
--->
|
||||
|
||||
<cffunction name="RemoveFromStart" output="false" returntype="String">
|
||||
<cfargument name="sourceString" type="String">
|
||||
<cfargument name="charToRemove" type="String">
|
||||
|
||||
<cfif left(ARGUMENTS.sourceString, 1) eq ARGUMENTS.charToRemove>
|
||||
<cfreturn mid( ARGUMENTS.sourceString, 2, len(ARGUMENTS.sourceString) -1 )>
|
||||
</cfif>
|
||||
|
||||
<cfreturn ARGUMENTS.sourceString>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="RemoveFromEnd" output="false" returntype="String">
|
||||
<cfargument name="sourceString" type="String">
|
||||
<cfargument name="charToRemove" type="String">
|
||||
|
||||
<cfif right(ARGUMENTS.sourceString, 1) eq ARGUMENTS.charToRemove>
|
||||
<cfreturn mid( ARGUMENTS.sourceString, 1, len(ARGUMENTS.sourceString) -1 )>
|
||||
</cfif>
|
||||
|
||||
<cfreturn ARGUMENTS.sourceString>
|
||||
</cffunction>
|
||||
|
||||
<!---
|
||||
Check file content.
|
||||
Currently this function validates only image files.
|
||||
Returns false if file is invalid.
|
||||
detectionLevel:
|
||||
0 = none
|
||||
1 = check image size for images,
|
||||
2 = use DetectHtml for images
|
||||
---->
|
||||
<cffunction name="IsImageValid" returntype="boolean" output="true">
|
||||
<cfargument name="filePath" required="true" type="String">
|
||||
<cfargument name="extension" required="true" type="String">
|
||||
|
||||
<cfset var imageCFC = "">
|
||||
<cfset var imageInfo = "">
|
||||
|
||||
<cfif not ListFindNoCase("gif,jpeg,jpg,png,swf,psd,bmp,iff,tiff,tif,swc,jpc,jp2,jpx,jb2,xmb,wbmp", ARGUMENTS.extension)>
|
||||
<cfreturn true>
|
||||
</cfif>
|
||||
|
||||
<cftry>
|
||||
<cfif REQUEST.CFVersion gte 8>
|
||||
<cfset objImage = ImageRead(ARGUMENTS.filePath) >
|
||||
<cfset imageInfo = ImageInfo(objImage)>
|
||||
<!--- <cfimage action="info" source="#ARGUMENTS.filePath#" structName="imageInfo" /> --->
|
||||
<cfelse>
|
||||
<cfset imageCFC = createObject("component", "image")>
|
||||
<cfset imageInfo = imageCFC.getImageInfo("", ARGUMENTS.filePath)>
|
||||
</cfif>
|
||||
|
||||
<cfif imageInfo.height lte 0 or imageInfo.width lte 0>
|
||||
<cfreturn false>
|
||||
</cfif>
|
||||
<cfcatch type="any">
|
||||
<cfreturn false>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfreturn true>
|
||||
</cffunction>
|
||||
|
||||
<!---
|
||||
Detect HTML in the first KB to prevent against potential security issue with
|
||||
IE/Safari/Opera file type auto detection bug.
|
||||
Returns true if file contain insecure HTML code at the beginning.
|
||||
--->
|
||||
<cffunction name="DetectHtml" output="false" returntype="boolean">
|
||||
<cfargument name="filePath" required="true" type="String">
|
||||
|
||||
<cfset var tags = "<body,<head,<html,<img,<pre,<script,<table,<title">
|
||||
<cfset var chunk = lcase( Trim( BinaryFileRead( ARGUMENTS.filePath, 1024 ) ) )>
|
||||
|
||||
<cfif not Len(chunk)>
|
||||
<cfreturn false>
|
||||
</cfif>
|
||||
|
||||
<cfif refind('<!doctype\W*x?html', chunk)>
|
||||
<cfreturn true>
|
||||
</cfif>
|
||||
|
||||
<cfloop index = "tag" list = "#tags#">
|
||||
<cfif find( tag, chunk )>
|
||||
<cfreturn true>
|
||||
</cfif>
|
||||
</cfloop>
|
||||
|
||||
<!--- type = javascript --->
|
||||
<cfif refind('type\s*=\s*[''"]?\s*(?:\w*/)?(?:ecma|java)', chunk)>
|
||||
<cfreturn true>
|
||||
</cfif> >
|
||||
|
||||
<!--- href = javascript --->
|
||||
<!--- src = javascript --->
|
||||
<!--- data = javascript --->
|
||||
<cfif refind('(?:href|src|data)\s*=\s*[\''"]?\s*(?:ecma|java)script:', chunk)>
|
||||
<cfreturn true>
|
||||
</cfif>
|
||||
|
||||
<!--- url(javascript --->
|
||||
<cfif refind('url\s*\(\s*[\''"]?\s*(?:ecma|java)script:', chunk)>
|
||||
<cfreturn true>
|
||||
</cfif>
|
||||
|
||||
<cfreturn false>
|
||||
</cffunction>
|
||||
@ -1,150 +0,0 @@
|
||||
<cfsetting enablecfoutputonly="Yes">
|
||||
<!---
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* Configuration file for the ColdFusion Connector (all versions).
|
||||
--->
|
||||
|
||||
<cfscript>
|
||||
Config = StructNew() ;
|
||||
|
||||
// SECURITY: You must explicitly enable this "connector". (Set enabled to "true")
|
||||
Config.Enabled = false ;
|
||||
|
||||
// Path to uploaded files relative to the document root.
|
||||
Config.UserFilesPath = "/userfiles/" ;
|
||||
|
||||
// Use this to force the server path if FCKeditor is not running directly off
|
||||
// the root of the application or the FCKeditor directory in the URL is a virtual directory
|
||||
// or a symbolic link / junction
|
||||
// Example: C:\inetpub\wwwroot\myDocs\
|
||||
Config.ServerPath = "" ;
|
||||
|
||||
// Due to security issues with Apache modules, it is recommended to leave the
|
||||
// following setting enabled.
|
||||
Config.ForceSingleExtension = true ;
|
||||
|
||||
// Perform additional checks for image files - if set to true, validate image size
|
||||
// (This feature works in MX 6.0 and above)
|
||||
Config.SecureImageUploads = true;
|
||||
|
||||
// What the user can do with this connector
|
||||
Config.ConfigAllowedCommands = "QuickUpload,FileUpload,GetFolders,GetFoldersAndFiles,CreateFolder" ;
|
||||
|
||||
//Allowed Resource Types
|
||||
Config.ConfigAllowedTypes = "File,Image,Flash,Media" ;
|
||||
|
||||
// For security, HTML is allowed in the first Kb of data for files having the
|
||||
// following extensions only.
|
||||
// (This feature works in MX 6.0 and above))
|
||||
Config.HtmlExtensions = "html,htm,xml,xsd,txt,js" ;
|
||||
|
||||
//Due to known issues with GetTempDirectory function, it is
|
||||
//recommended to set this vairiable to a valid directory
|
||||
//instead of using the GetTempDirectory function
|
||||
//(used by MX 6.0 and above)
|
||||
Config.TempDirectory = GetTempDirectory();
|
||||
</cfscript>
|
||||
|
||||
<cftry>
|
||||
<!--- code to maintain backwards compatibility with previous version of cfm connector --->
|
||||
<cfif isDefined("application.userFilesPath")>
|
||||
<cflock scope="application" type="readonly" timeout="20">
|
||||
<cfset config.userFilesPath = application.userFilesPath>
|
||||
</cflock>
|
||||
</cfif>
|
||||
|
||||
<!--- catch potential "The requested scope application has not been enabled" exception --->
|
||||
<cfcatch type="any">
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfscript>
|
||||
// Configuration settings for each Resource Type
|
||||
//
|
||||
// - AllowedExtensions: the possible extensions that can be allowed.
|
||||
// If it is empty then any file type can be uploaded.
|
||||
// - DeniedExtensions: The extensions that won't be allowed.
|
||||
// If it is empty then no restrictions are done here.
|
||||
//
|
||||
// For a file to be uploaded it has to fulfill both the AllowedExtensions
|
||||
// and DeniedExtensions (that's it: not being denied) conditions.
|
||||
//
|
||||
// - FileTypesPath: the virtual folder relative to the document root where
|
||||
// these resources will be located.
|
||||
// Attention: It must start and end with a slash: '/'
|
||||
//
|
||||
// - FileTypesAbsolutePath: the physical path to the above folder. It must be
|
||||
// an absolute path.
|
||||
// If it's an empty string then it will be autocalculated.
|
||||
// Usefull if you are using a virtual directory, symbolic link or alias.
|
||||
// Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
|
||||
// Attention: The above 'FileTypesPath' must point to the same directory.
|
||||
// Attention: It must end with a slash: '/'
|
||||
//
|
||||
//
|
||||
// - QuickUploadPath: the virtual folder relative to the document root where
|
||||
// these resources will be uploaded using the Upload tab in the resources
|
||||
// dialogs.
|
||||
// Attention: It must start and end with a slash: '/'
|
||||
//
|
||||
// - QuickUploadAbsolutePath: the physical path to the above folder. It must be
|
||||
// an absolute path.
|
||||
// If it's an empty string then it will be autocalculated.
|
||||
// Usefull if you are using a virtual directory, symbolic link or alias.
|
||||
// Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
|
||||
// Attention: The above 'QuickUploadPath' must point to the same directory.
|
||||
// Attention: It must end with a slash: '/'
|
||||
|
||||
Config.AllowedExtensions = StructNew() ;
|
||||
Config.DeniedExtensions = StructNew() ;
|
||||
Config.FileTypesPath = StructNew() ;
|
||||
Config.FileTypesAbsolutePath = StructNew() ;
|
||||
Config.QuickUploadPath = StructNew() ;
|
||||
Config.QuickUploadAbsolutePath = StructNew() ;
|
||||
|
||||
Config.AllowedExtensions["File"] = "7z,aiff,asf,avi,bmp,csv,doc,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xml,zip" ;
|
||||
Config.DeniedExtensions["File"] = "" ;
|
||||
Config.FileTypesPath["File"] = Config.UserFilesPath & 'file/' ;
|
||||
Config.FileTypesAbsolutePath["File"] = iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'file/') ) ;
|
||||
Config.QuickUploadPath["File"] = Config.FileTypesPath["File"] ;
|
||||
Config.QuickUploadAbsolutePath["File"] = Config.FileTypesAbsolutePath["File"] ;
|
||||
|
||||
Config.AllowedExtensions["Image"] = "bmp,gif,jpeg,jpg,png" ;
|
||||
Config.DeniedExtensions["Image"] = "" ;
|
||||
Config.FileTypesPath["Image"] = Config.UserFilesPath & 'image/' ;
|
||||
Config.FileTypesAbsolutePath["Image"] = iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'image/') ) ;
|
||||
Config.QuickUploadPath["Image"] = Config.FileTypesPath["Image"] ;
|
||||
Config.QuickUploadAbsolutePath["Image"] = Config.FileTypesAbsolutePath["Image"] ;
|
||||
|
||||
Config.AllowedExtensions["Flash"] = "swf,flv" ;
|
||||
Config.DeniedExtensions["Flash"] = "" ;
|
||||
Config.FileTypesPath["Flash"] = Config.UserFilesPath & 'flash/' ;
|
||||
Config.FileTypesAbsolutePath["Flash"] = iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'flash/') ) ;
|
||||
Config.QuickUploadPath["Flash"] = Config.FileTypesPath["Flash"] ;
|
||||
Config.QuickUploadAbsolutePath["Flash"] = Config.FileTypesAbsolutePath["Flash"] ;
|
||||
|
||||
Config.AllowedExtensions["Media"] = "aiff,asf,avi,bmp,fla,flv,gif,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,png,qt,ram,rm,rmi,rmvb,swf,tif,tiff,wav,wma,wmv" ;
|
||||
Config.DeniedExtensions["Media"] = "" ;
|
||||
Config.FileTypesPath["Media"] = Config.UserFilesPath & 'media/' ;
|
||||
Config.FileTypesAbsolutePath["Media"] = iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'media/') ) ;
|
||||
Config.QuickUploadPath["Media"] = Config.FileTypesPath["Media"] ;
|
||||
Config.QuickUploadAbsolutePath["Media"] = Config.FileTypesAbsolutePath["Media"] ;
|
||||
</cfscript>
|
||||
@ -1,32 +0,0 @@
|
||||
<cfsetting enablecfoutputonly="Yes">
|
||||
<!---
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* File Browser connector for ColdFusion (all versions).
|
||||
*
|
||||
--->
|
||||
|
||||
<cfset REQUEST.CFVersion = Left( SERVER.COLDFUSION.PRODUCTVERSION, Find( ",", SERVER.COLDFUSION.PRODUCTVERSION ) - 1 )>
|
||||
<cfif REQUEST.CFVersion lte 5>
|
||||
<cfinclude template="cf5_connector.cfm">
|
||||
<cfelse>
|
||||
<cfinclude template="cf_connector.cfm">
|
||||
</cfif>
|
||||
<cfabort>
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,31 +0,0 @@
|
||||
<cfsetting enablecfoutputonly="Yes">
|
||||
<!---
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* This is the "File Uploader" for ColdFusion (all versions).
|
||||
*
|
||||
--->
|
||||
|
||||
<cfset REQUEST.CFVersion = Left( SERVER.COLDFUSION.PRODUCTVERSION, Find( ",", SERVER.COLDFUSION.PRODUCTVERSION ) - 1 )>
|
||||
<cfif REQUEST.CFVersion lte 5>
|
||||
<cfinclude template="cf5_upload.cfm">
|
||||
<cfelse>
|
||||
<cfinclude template="cf_upload.cfm">
|
||||
</cfif>
|
||||
@ -1,65 +0,0 @@
|
||||
[//lasso
|
||||
/*
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* Configuration file for the File Manager Connector for Lasso.
|
||||
*/
|
||||
|
||||
/*.....................................................................
|
||||
The connector uses the file tags, which require authentication. Enter a
|
||||
valid username and password from Lasso admin for a group with file tags
|
||||
permissions for uploads and the path you define in UserFilesPath below.
|
||||
*/
|
||||
|
||||
var('connection') = array(
|
||||
-username='xxxxxxxx',
|
||||
-password='xxxxxxxx'
|
||||
);
|
||||
|
||||
|
||||
/*.....................................................................
|
||||
Set the base path for files that users can upload and browse (relative
|
||||
to server root).
|
||||
|
||||
Set which file extensions are allowed and/or denied for each file type.
|
||||
*/
|
||||
var('config') = map(
|
||||
'Enabled' = false,
|
||||
'UserFilesPath' = '/userfiles/',
|
||||
'Subdirectories' = map(
|
||||
'File' = 'File/',
|
||||
'Image' = 'Image/',
|
||||
'Flash' = 'Flash/',
|
||||
'Media' = 'Media/'
|
||||
),
|
||||
'AllowedExtensions' = map(
|
||||
'File' = array('7z','aiff','asf','avi','bmp','csv','doc','fla','flv','gif','gz','gzip','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','ods','odt','pdf','png','ppt','pxd','qt','ram','rar','rm','rmi','rmvb','rtf','sdc','sitd','swf','sxc','sxw','tar','tgz','tif','tiff','txt','vsd','wav','wma','wmv','xls','xml','zip'),
|
||||
'Image' = array('bmp','gif','jpeg','jpg','png'),
|
||||
'Flash' = array('swf','flv'),
|
||||
'Media' = array('aiff','asf','avi','bmp','fla','flv','gif','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','png','qt','ram','rm','rmi','rmvb','swf','tif','tiff','wav','wma','wmv')
|
||||
),
|
||||
'DeniedExtensions' = map(
|
||||
'File' = array(),
|
||||
'Image' = array(),
|
||||
'Flash' = array(),
|
||||
'Media' = array()
|
||||
)
|
||||
);
|
||||
]
|
||||
@ -1,330 +0,0 @@
|
||||
[//lasso
|
||||
/*
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* This is the File Manager Connector for Lasso.
|
||||
*/
|
||||
|
||||
/*.....................................................................
|
||||
Include global configuration. See config.lasso for details.
|
||||
*/
|
||||
include('config.lasso');
|
||||
|
||||
|
||||
/*.....................................................................
|
||||
Translate current date/time to GMT for custom header.
|
||||
*/
|
||||
var('headerDate') = date_localtogmt(date)->format('%a, %d %b %Y %T GMT');
|
||||
|
||||
|
||||
/*.....................................................................
|
||||
Convert query string parameters to variables and initialize output.
|
||||
*/
|
||||
var(
|
||||
'Command' = (Encode_HTML: action_param('Command')),
|
||||
'Type' = (Encode_HTML: action_param('Type')),
|
||||
'CurrentFolder' = action_param('CurrentFolder'),
|
||||
'ServerPath' = action_param('ServerPath'),
|
||||
'NewFolderName' = action_param('NewFolderName'),
|
||||
'NewFile' = null,
|
||||
'NewFileName' = string,
|
||||
'OrigFilePath' = string,
|
||||
'NewFilePath' = string,
|
||||
'commandData' = string,
|
||||
'folders' = '\t<Folders>\n',
|
||||
'files' = '\t<Files>\n',
|
||||
'errorNumber' = integer,
|
||||
'responseType' = 'xml',
|
||||
'uploadResult' = '0'
|
||||
);
|
||||
|
||||
/*.....................................................................
|
||||
Custom tag sets the HTML response.
|
||||
*/
|
||||
|
||||
define_tag(
|
||||
'htmlreply',
|
||||
-namespace='fck_',
|
||||
-priority='replace',
|
||||
-required='uploadResult',
|
||||
-optional='NewFilePath',
|
||||
-type='string',
|
||||
-description='Sets the HTML response for the FCKEditor File Upload feature.'
|
||||
);
|
||||
$__html_reply__ = '\
|
||||
<script type="text/javascript">
|
||||
(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\\.|$)/,\'\');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
|
||||
';
|
||||
if($uploadResult == '0' || $uploadResult == '201');
|
||||
$__html_reply__ = $__html_reply__ + '\
|
||||
window.parent.OnUploadCompleted(' + $uploadResult + ',"' + $NewFilePath + '","' + $NewFilePath->split('/')->last + '");
|
||||
</script>
|
||||
';
|
||||
else;
|
||||
$__html_reply__ = $__html_reply__ + '\
|
||||
window.parent.OnUploadCompleted(' + $uploadResult + ',"","");
|
||||
</script>
|
||||
';
|
||||
/if;
|
||||
/define_tag;
|
||||
|
||||
|
||||
/*.....................................................................
|
||||
Calculate the path to the current folder.
|
||||
*/
|
||||
$ServerPath == '' ? $ServerPath = $config->find('UserFilesPath');
|
||||
|
||||
var('currentFolderURL' = $ServerPath
|
||||
+ $config->find('Subdirectories')->find(action_param('Type'))
|
||||
+ $CurrentFolder
|
||||
);
|
||||
|
||||
$currentFolderURL = string_replace($currentFolderURL, -find='//', -replace='/');
|
||||
|
||||
if (!$config->find('Subdirectories')->find(action_param('Type')));
|
||||
if($Command == 'FileUpload');
|
||||
$responseType = 'html';
|
||||
$uploadResult = '1';
|
||||
fck_htmlreply(
|
||||
-uploadResult=$uploadResult
|
||||
);
|
||||
else;
|
||||
$errorNumber = 1;
|
||||
$commandData += '<Error number="' + $errorNumber + '" text="Invalid type specified" />\n';
|
||||
/if;
|
||||
else if($CurrentFolder->(Find: '..') || (String_FindRegExp: $CurrentFolder, -Find='(/\\.)|(//)|[\\\\:\\*\\?\\""\\<\\>\\|]|\\000|[\u007F]|[\u0001-\u001F]'));
|
||||
if($Command == 'FileUpload');
|
||||
$responseType = 'html';
|
||||
$uploadResult = '102';
|
||||
fck_htmlreply(
|
||||
-uploadResult=$uploadResult
|
||||
);
|
||||
else;
|
||||
$errorNumber = 102;
|
||||
$commandData += '<Error number="' + $errorNumber + '" />\n';
|
||||
/if;
|
||||
else;
|
||||
|
||||
/*.....................................................................
|
||||
Build the appropriate response per the 'Command' parameter. Wrap the
|
||||
entire process in an inline for file tag permissions.
|
||||
*/
|
||||
if($config->find('Enabled'));
|
||||
inline($connection);
|
||||
select($Command);
|
||||
/*.............................................................
|
||||
List all subdirectories in the 'Current Folder' directory.
|
||||
*/
|
||||
case('GetFolders');
|
||||
$commandData += '\t<Folders>\n';
|
||||
|
||||
iterate(file_listdirectory($currentFolderURL), local('this'));
|
||||
#this->endswith('/') ? $commandData += '\t\t<Folder name="' + #this->removetrailing('/')& + '" />\n';
|
||||
/iterate;
|
||||
|
||||
$commandData += '\t</Folders>\n';
|
||||
|
||||
|
||||
/*.............................................................
|
||||
List both files and folders in the 'Current Folder' directory.
|
||||
Include the file sizes in kilobytes.
|
||||
*/
|
||||
case('GetFoldersAndFiles');
|
||||
iterate(file_listdirectory($currentFolderURL), local('this'));
|
||||
if(#this->endswith('/'));
|
||||
$folders += '\t\t<Folder name="' + #this->removetrailing('/')& + '" />\n';
|
||||
else;
|
||||
local('size') = file_getsize($currentFolderURL + #this);
|
||||
if($size>0);
|
||||
$size = $size/1024;
|
||||
if ($size==0);
|
||||
$size = 1;
|
||||
/if;
|
||||
/if;
|
||||
$files += '\t\t<File name="' + #this + '" size="' + #size + '" />\n';
|
||||
/if;
|
||||
/iterate;
|
||||
|
||||
$folders += '\t</Folders>\n';
|
||||
$files += '\t</Files>\n';
|
||||
|
||||
$commandData += $folders + $files;
|
||||
|
||||
|
||||
/*.............................................................
|
||||
Create a directory 'NewFolderName' within the 'Current Folder.'
|
||||
*/
|
||||
case('CreateFolder');
|
||||
$NewFolderName = (String_ReplaceRegExp: $NewFolderName, -find='\\.|\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|\\000|[\u007F]|[\u0001-\u001F]', -replace='_');
|
||||
var('newFolder' = $currentFolderURL + $NewFolderName + '/');
|
||||
file_create($newFolder);
|
||||
|
||||
|
||||
/*.........................................................
|
||||
Map Lasso's file error codes to FCKEditor's error codes.
|
||||
*/
|
||||
select(file_currenterror( -errorcode));
|
||||
case(0);
|
||||
$errorNumber = 0;
|
||||
case( -9983);
|
||||
$errorNumber = 101;
|
||||
case( -9976);
|
||||
$errorNumber = 102;
|
||||
case( -9977);
|
||||
$errorNumber = 102;
|
||||
case( -9961);
|
||||
$errorNumber = 103;
|
||||
case;
|
||||
$errorNumber = 110;
|
||||
/select;
|
||||
|
||||
$commandData += '<Error number="' + $errorNumber + '" />\n';
|
||||
|
||||
|
||||
/*.............................................................
|
||||
Process an uploaded file.
|
||||
*/
|
||||
case('FileUpload');
|
||||
/*.........................................................
|
||||
This is the only command that returns an HTML response.
|
||||
*/
|
||||
$responseType = 'html';
|
||||
|
||||
|
||||
/*.........................................................
|
||||
Was a file actually uploaded?
|
||||
*/
|
||||
if(file_uploads->size);
|
||||
$NewFile = file_uploads->get(1);
|
||||
else;
|
||||
$uploadResult = '202';
|
||||
/if;
|
||||
|
||||
if($uploadResult == '0');
|
||||
/*.....................................................
|
||||
Split the file's extension from the filename in order
|
||||
to follow the API's naming convention for duplicate
|
||||
files. (Test.txt, Test(1).txt, Test(2).txt, etc.)
|
||||
*/
|
||||
$NewFileName = $NewFile->find('OrigName');
|
||||
$NewFileName = (String_ReplaceRegExp: $NewFileName, -find='\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|\\000|[\u007F]|[\u0001-\u001F]', -replace='_');
|
||||
$NewFileName = (String_ReplaceRegExp: $NewFileName, -find='\\.(?![^.]*$)', -replace='_');
|
||||
$OrigFilePath = $currentFolderURL + $NewFileName;
|
||||
$NewFilePath = $OrigFilePath;
|
||||
local('fileExtension') = '.' + $NewFile->find('OrigExtension');
|
||||
#fileExtension = (String_ReplaceRegExp: #fileExtension, -find='\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|\\000|[\u007F]|[\u0001-\u001F]', -replace='_');
|
||||
local('shortFileName') = $NewFileName->removetrailing(#fileExtension)&;
|
||||
|
||||
|
||||
/*.....................................................
|
||||
Make sure the file extension is allowed.
|
||||
*/
|
||||
local('allowedExt') = $config->find('AllowedExtensions')->find($Type);
|
||||
local('deniedExt') = $config->find('DeniedExtensions')->find($Type);
|
||||
if($allowedExt->Size > 0 && $allowedExt !>> $NewFile->find('OrigExtension'));
|
||||
$uploadResult = '202';
|
||||
else($deniedExt->Size > 0 && $deniedExt >> $NewFile->find('OrigExtension'));
|
||||
$uploadResult = '202';
|
||||
else;
|
||||
/*.................................................
|
||||
Rename the target path until it is unique.
|
||||
*/
|
||||
while(file_exists($NewFilePath));
|
||||
$NewFilePath = $currentFolderURL + #shortFileName + '(' + loop_count + ')' + #fileExtension;
|
||||
/while;
|
||||
|
||||
|
||||
/*.................................................
|
||||
Copy the uploaded file to its final location.
|
||||
*/
|
||||
file_copy($NewFile->find('path'), $NewFilePath);
|
||||
|
||||
|
||||
/*.................................................
|
||||
Set the error code for the response. Note whether
|
||||
the file had to be renamed.
|
||||
*/
|
||||
select(file_currenterror( -errorcode));
|
||||
case(0);
|
||||
$OrigFilePath != $NewFilePath ? $uploadResult = 201;
|
||||
case;
|
||||
$uploadResult = file_currenterror( -errorcode);
|
||||
/select;
|
||||
/if;
|
||||
/if;
|
||||
fck_htmlreply(
|
||||
-uploadResult=$uploadResult,
|
||||
-NewFilePath=$NewFilePath
|
||||
);
|
||||
case;
|
||||
$errorNumber = 1;
|
||||
$commandData += '<Error number="' + $errorNumber + '" text="Command isn\'t allowed" />\n';
|
||||
/select;
|
||||
/inline;
|
||||
else;
|
||||
$errorNumber = 1;
|
||||
$commandData += '<Error number="' + $errorNumber + '" text="This file uploader is disabled. Please check the editor/filemanager/upload/lasso/config.lasso file." />\n';
|
||||
/if;
|
||||
/if;
|
||||
|
||||
/*.....................................................................
|
||||
Send a custom header for xml responses.
|
||||
*/
|
||||
if($responseType == 'xml');
|
||||
header;
|
||||
]
|
||||
HTTP/1.0 200 OK
|
||||
Date: [$headerDate]
|
||||
Server: Lasso Professional [lasso_version( -lassoversion)]
|
||||
Expires: Mon, 26 Jul 1997 05:00:00 GMT
|
||||
Last-Modified: [$headerDate]
|
||||
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
|
||||
Pragma: no-cache
|
||||
Keep-Alive: timeout=15, max=98
|
||||
Connection: Keep-Alive
|
||||
Content-Type: text/xml; charset=utf-8
|
||||
[//lasso
|
||||
/header;
|
||||
|
||||
/*
|
||||
Set the content type encoding for Lasso.
|
||||
*/
|
||||
content_type('text/xml; charset=utf-8');
|
||||
|
||||
/*
|
||||
Wrap the response as XML and output.
|
||||
*/
|
||||
$__html_reply__ = '\
|
||||
<?xml version="1.0" encoding="utf-8" ?>';
|
||||
|
||||
if($errorNumber != '102');
|
||||
$__html_reply__ += '<Connector command="' + (Encode_HTML: $Command) + '" resourceType="' + (Encode_HTML: $Type) + '">';
|
||||
else;
|
||||
$__html_reply__ += '<Connector>';
|
||||
/if;
|
||||
|
||||
if($errorNumber != '102');
|
||||
$__html_reply__ += '<CurrentFolder path="' + (Encode_HTML: $CurrentFolder) + '" url="' + (Encode_HTML: $currentFolderURL) + '" />';
|
||||
/if;
|
||||
|
||||
$__html_reply__ += $commandData + '
|
||||
</Connector>';
|
||||
/if;
|
||||
]
|
||||
@ -1,178 +0,0 @@
|
||||
[//lasso
|
||||
/*
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* This is the "File Uploader" for Lasso.
|
||||
*/
|
||||
|
||||
/*.....................................................................
|
||||
Include global configuration. See config.lasso for details.
|
||||
*/
|
||||
include('config.lasso');
|
||||
|
||||
|
||||
/*.....................................................................
|
||||
Convert query string parameters to variables and initialize output.
|
||||
*/
|
||||
var(
|
||||
'Type' = (Encode_HTML: action_param('Type')),
|
||||
'CurrentFolder' = "/",
|
||||
'ServerPath' = action_param('ServerPath'),
|
||||
'NewFile' = null,
|
||||
'NewFileName' = string,
|
||||
'OrigFilePath' = string,
|
||||
'NewFilePath' = string,
|
||||
'errorNumber' = 0,
|
||||
'customMsg' = ''
|
||||
);
|
||||
|
||||
$Type == '' ? $Type = 'File';
|
||||
|
||||
|
||||
/*.....................................................................
|
||||
Calculate the path to the current folder.
|
||||
*/
|
||||
$ServerPath == '' ? $ServerPath = $config->find('UserFilesPath');
|
||||
|
||||
var('currentFolderURL' = $ServerPath
|
||||
+ $config->find('Subdirectories')->find(action_param('Type'))
|
||||
+ $CurrentFolder
|
||||
);
|
||||
|
||||
$currentFolderURL = string_replace($currentFolderURL, -find='//', -replace='/');
|
||||
|
||||
/*.....................................................................
|
||||
Custom tag sets the HTML response.
|
||||
*/
|
||||
|
||||
define_tag(
|
||||
'sendresults',
|
||||
-namespace='fck_',
|
||||
-priority='replace',
|
||||
-required='errorNumber',
|
||||
-type='integer',
|
||||
-optional='fileUrl',
|
||||
-type='string',
|
||||
-optional='fileName',
|
||||
-type='string',
|
||||
-optional='customMsg',
|
||||
-type='string',
|
||||
-description='Sets the HTML response for the FCKEditor Quick Upload feature.'
|
||||
);
|
||||
|
||||
$__html_reply__ = '<script type="text/javascript">';
|
||||
|
||||
// Minified version of the document.domain automatic fix script (#1919).
|
||||
// The original script can be found at _dev/domain_fix_template.js
|
||||
// Note: in Lasso replace \ with \\
|
||||
$__html_reply__ = $__html_reply__ + "(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();";
|
||||
|
||||
$__html_reply__ = $__html_reply__ + '\
|
||||
window.parent.OnUploadCompleted(' + #errorNumber + ',"'
|
||||
+ string_replace((Encode_HTML: #fileUrl), -find='"', -replace='\\"') + '","'
|
||||
+ string_replace((Encode_HTML: #fileUrl->split('/')->last), -find='"', -replace='\\"') + '","'
|
||||
+ string_replace((Encode_HTML: #customMsg), -find='"', -replace='\\"') + '");
|
||||
</script>
|
||||
';
|
||||
/define_tag;
|
||||
|
||||
if($CurrentFolder->(Find: '..') || (String_FindRegExp: $CurrentFolder, -Find='(/\\.)|(//)|[\\\\:\\*\\?\\""\\<\\>\\|]|\\000|[\u007F]|[\u0001-\u001F]'));
|
||||
$errorNumber = 102;
|
||||
/if;
|
||||
|
||||
if($config->find('Enabled'));
|
||||
/*.................................................................
|
||||
Process an uploaded file.
|
||||
*/
|
||||
inline($connection);
|
||||
/*.............................................................
|
||||
Was a file actually uploaded?
|
||||
*/
|
||||
if($errorNumber != '102');
|
||||
file_uploads->size ? $NewFile = file_uploads->get(1) | $errorNumber = 202;
|
||||
/if;
|
||||
|
||||
if($errorNumber == 0);
|
||||
/*.........................................................
|
||||
Split the file's extension from the filename in order
|
||||
to follow the API's naming convention for duplicate
|
||||
files. (Test.txt, Test(1).txt, Test(2).txt, etc.)
|
||||
*/
|
||||
$NewFileName = $NewFile->find('OrigName');
|
||||
$NewFileName = (String_ReplaceRegExp: $NewFileName, -find='\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|\\000|[\u007F]|[\u0001-\u001F]', -replace='_');
|
||||
$NewFileName = (String_ReplaceRegExp: $NewFileName, -find='\\.(?![^.]*$)', -replace='_');
|
||||
$OrigFilePath = $currentFolderURL + $NewFileName;
|
||||
$NewFilePath = $OrigFilePath;
|
||||
local('fileExtension') = '.' + $NewFile->find('OrigExtension');
|
||||
local('shortFileName') = $NewFileName->removetrailing(#fileExtension)&;
|
||||
|
||||
|
||||
/*.........................................................
|
||||
Make sure the file extension is allowed.
|
||||
*/
|
||||
|
||||
local('allowedExt') = $config->find('AllowedExtensions')->find($Type);
|
||||
local('deniedExt') = $config->find('DeniedExtensions')->find($Type);
|
||||
if($allowedExt->Size > 0 && $allowedExt !>> $NewFile->find('OrigExtension'));
|
||||
$errorNumber = 202;
|
||||
else($deniedExt->Size > 0 && $deniedExt >> $NewFile->find('OrigExtension'));
|
||||
$errorNumber = 202;
|
||||
else;
|
||||
/*.....................................................
|
||||
Rename the target path until it is unique.
|
||||
*/
|
||||
while(file_exists($NewFilePath));
|
||||
$NewFileName = #shortFileName + '(' + loop_count + ')' + #fileExtension;
|
||||
$NewFilePath = $currentFolderURL + $NewFileName;
|
||||
/while;
|
||||
|
||||
|
||||
/*.....................................................
|
||||
Copy the uploaded file to its final location.
|
||||
*/
|
||||
file_copy($NewFile->find('path'), $NewFilePath);
|
||||
|
||||
|
||||
/*.....................................................
|
||||
Set the error code for the response.
|
||||
*/
|
||||
select(file_currenterror( -errorcode));
|
||||
case(0);
|
||||
$OrigFilePath != $NewFilePath ? $errorNumber = 201;
|
||||
case;
|
||||
$errorNumber = 202;
|
||||
/select;
|
||||
/if;
|
||||
/if;
|
||||
if ($errorNumber != 0 && $errorNumber != 201);
|
||||
$NewFilePath = "";
|
||||
/if;
|
||||
/inline;
|
||||
else;
|
||||
$errorNumber = 1;
|
||||
$customMsg = 'This file uploader is disabled. Please check the "editor/filemanager/upload/lasso/config.lasso" file.';
|
||||
/if;
|
||||
|
||||
fck_sendresults(
|
||||
-errorNumber=$errorNumber,
|
||||
-fileUrl=$NewFilePath,
|
||||
-customMsg=$customMsg
|
||||
);
|
||||
]
|
||||
@ -1,68 +0,0 @@
|
||||
#####
|
||||
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
# Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
#
|
||||
# == BEGIN LICENSE ==
|
||||
#
|
||||
# Licensed under the terms of any of the following licenses at your
|
||||
# choice:
|
||||
#
|
||||
# - GNU General Public License Version 2 or later (the "GPL")
|
||||
# http://www.gnu.org/licenses/gpl.html
|
||||
#
|
||||
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
# http://www.gnu.org/licenses/lgpl.html
|
||||
#
|
||||
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
#
|
||||
# == END LICENSE ==
|
||||
#
|
||||
# This is the File Manager Connector for Perl.
|
||||
#####
|
||||
|
||||
sub CreateXmlHeader
|
||||
{
|
||||
local($command,$resourceType,$currentFolder) = @_;
|
||||
|
||||
# Create the XML document header.
|
||||
print '<?xml version="1.0" encoding="utf-8" ?>';
|
||||
|
||||
# Create the main "Connector" node.
|
||||
print '<Connector command="' . $command . '" resourceType="' . $resourceType . '">';
|
||||
|
||||
# Add the current folder node.
|
||||
print '<CurrentFolder path="' . ConvertToXmlAttribute($currentFolder) . '" url="' . ConvertToXmlAttribute(GetUrlFromPath($resourceType,$currentFolder)) . '" />';
|
||||
}
|
||||
|
||||
sub CreateXmlFooter
|
||||
{
|
||||
print '</Connector>';
|
||||
}
|
||||
|
||||
sub SendError
|
||||
{
|
||||
local( $number, $text ) = @_;
|
||||
|
||||
print << "_HTML_HEAD_";
|
||||
Content-Type:text/xml; charset=utf-8
|
||||
Pragma: no-cache
|
||||
Cache-Control: no-cache
|
||||
Expires: Thu, 01 Dec 1994 16:00:00 GMT
|
||||
|
||||
_HTML_HEAD_
|
||||
|
||||
# Create the XML document header
|
||||
print '<?xml version="1.0" encoding="utf-8" ?>' ;
|
||||
|
||||
if ($text) {
|
||||
print '<Connector><Error number="' . $number . '" text="' . &specialchar_cnv( $text ) . '" /></Connector>' ;
|
||||
}
|
||||
else {
|
||||
print '<Connector><Error number="' . $number . '" /></Connector>' ;
|
||||
}
|
||||
|
||||
exit ;
|
||||
}
|
||||
|
||||
1;
|
||||
@ -1,200 +0,0 @@
|
||||
#####
|
||||
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
# Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
#
|
||||
# == BEGIN LICENSE ==
|
||||
#
|
||||
# Licensed under the terms of any of the following licenses at your
|
||||
# choice:
|
||||
#
|
||||
# - GNU General Public License Version 2 or later (the "GPL")
|
||||
# http://www.gnu.org/licenses/gpl.html
|
||||
#
|
||||
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
# http://www.gnu.org/licenses/lgpl.html
|
||||
#
|
||||
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
#
|
||||
# == END LICENSE ==
|
||||
#
|
||||
# This is the File Manager Connector for Perl.
|
||||
#####
|
||||
|
||||
sub GetFolders
|
||||
{
|
||||
|
||||
local($resourceType, $currentFolder) = @_;
|
||||
|
||||
# Map the virtual path to the local server path.
|
||||
$sServerDir = &ServerMapFolder($resourceType, $currentFolder);
|
||||
print "<Folders>"; # Open the "Folders" node.
|
||||
|
||||
opendir(DIR,"$sServerDir");
|
||||
@files = grep(!/^\.\.?$/,readdir(DIR));
|
||||
closedir(DIR);
|
||||
|
||||
foreach $sFile (@files) {
|
||||
if($sFile != '.' && $sFile != '..' && (-d "$sServerDir$sFile")) {
|
||||
$cnv_filename = &ConvertToXmlAttribute($sFile);
|
||||
print '<Folder name="' . $cnv_filename . '" />';
|
||||
}
|
||||
}
|
||||
print "</Folders>"; # Close the "Folders" node.
|
||||
}
|
||||
|
||||
sub GetFoldersAndFiles
|
||||
{
|
||||
|
||||
local($resourceType, $currentFolder) = @_;
|
||||
# Map the virtual path to the local server path.
|
||||
$sServerDir = &ServerMapFolder($resourceType,$currentFolder);
|
||||
|
||||
# Initialize the output buffers for "Folders" and "Files".
|
||||
$sFolders = '<Folders>';
|
||||
$sFiles = '<Files>';
|
||||
|
||||
opendir(DIR,"$sServerDir");
|
||||
@files = grep(!/^\.\.?$/,readdir(DIR));
|
||||
closedir(DIR);
|
||||
|
||||
foreach $sFile (@files) {
|
||||
if($sFile ne '.' && $sFile ne '..') {
|
||||
if(-d "$sServerDir$sFile") {
|
||||
$cnv_filename = &ConvertToXmlAttribute($sFile);
|
||||
$sFolders .= '<Folder name="' . $cnv_filename . '" />' ;
|
||||
} else {
|
||||
($iFileSize,$refdate,$filedate,$fileperm) = (stat("$sServerDir$sFile"))[7,8,9,2];
|
||||
if($iFileSize > 0) {
|
||||
$iFileSize = int($iFileSize / 1024);
|
||||
if($iFileSize < 1) {
|
||||
$iFileSize = 1;
|
||||
}
|
||||
}
|
||||
$cnv_filename = &ConvertToXmlAttribute($sFile);
|
||||
$sFiles .= '<File name="' . $cnv_filename . '" size="' . $iFileSize . '" />' ;
|
||||
}
|
||||
}
|
||||
}
|
||||
print $sFolders ;
|
||||
print '</Folders>'; # Close the "Folders" node.
|
||||
print $sFiles ;
|
||||
print '</Files>'; # Close the "Files" node.
|
||||
}
|
||||
|
||||
sub CreateFolder
|
||||
{
|
||||
|
||||
local($resourceType, $currentFolder) = @_;
|
||||
$sErrorNumber = '0' ;
|
||||
$sErrorMsg = '' ;
|
||||
|
||||
if($FORM{'NewFolderName'} ne "") {
|
||||
$sNewFolderName = $FORM{'NewFolderName'};
|
||||
$sNewFolderName =~ s/\.|\\|\/|\||\:|\?|\*|\"|<|>|[[:cntrl:]]/_/g;
|
||||
# Map the virtual path to the local server path of the current folder.
|
||||
$sServerDir = &ServerMapFolder($resourceType, $currentFolder);
|
||||
if(-w $sServerDir) {
|
||||
$sServerDir .= $sNewFolderName;
|
||||
$sErrorMsg = &CreateServerFolder($sServerDir);
|
||||
if($sErrorMsg == 0) {
|
||||
$sErrorNumber = '0';
|
||||
} elsif($sErrorMsg eq 'Invalid argument' || $sErrorMsg eq 'No such file or directory') {
|
||||
$sErrorNumber = '102'; #// Path too long.
|
||||
} else {
|
||||
$sErrorNumber = '110';
|
||||
}
|
||||
} else {
|
||||
$sErrorNumber = '103';
|
||||
}
|
||||
} else {
|
||||
$sErrorNumber = '102' ;
|
||||
}
|
||||
# Create the "Error" node.
|
||||
$cnv_errmsg = &ConvertToXmlAttribute($sErrorMsg);
|
||||
print '<Error number="' . $sErrorNumber . '" />';
|
||||
}
|
||||
|
||||
sub FileUpload
|
||||
{
|
||||
eval("use File::Copy;");
|
||||
|
||||
local($resourceType, $currentFolder) = @_;
|
||||
$allowedExtensions = $allowedExtensions{$resourceType};
|
||||
|
||||
$sErrorNumber = '0' ;
|
||||
$sFileName = '' ;
|
||||
if($new_fname) {
|
||||
# Map the virtual path to the local server path.
|
||||
$sServerDir = &ServerMapFolder($resourceType,$currentFolder);
|
||||
|
||||
# Get the uploaded file name.
|
||||
$sFileName = $new_fname;
|
||||
$sFileName =~ s/\\|\/|\||\:|\?|\*|\"|<|>|[[:cntrl:]]/_/g;
|
||||
$sFileName =~ s/\.(?![^.]*$)/_/g;
|
||||
|
||||
$ext = '';
|
||||
if($sFileName =~ /([^\\\/]*)\.(.*)$/) {
|
||||
$ext = $2;
|
||||
}
|
||||
|
||||
$allowedRegex = qr/^($allowedExtensions)$/i;
|
||||
if (!($ext =~ $allowedRegex)) {
|
||||
SendUploadResults('202', '', '', '');
|
||||
}
|
||||
|
||||
$sOriginalFileName = $sFileName;
|
||||
|
||||
$iCounter = 0;
|
||||
while(1) {
|
||||
$sFilePath = $sServerDir . $sFileName;
|
||||
if(-e $sFilePath) {
|
||||
$iCounter++ ;
|
||||
($path,$BaseName,$ext) = &RemoveExtension($sOriginalFileName);
|
||||
$sFileName = $BaseName . '(' . $iCounter . ').' . $ext;
|
||||
$sErrorNumber = '201';
|
||||
} else {
|
||||
copy("$img_dir/$new_fname","$sFilePath");
|
||||
if (defined $CHMOD_ON_UPLOAD) {
|
||||
if ($CHMOD_ON_UPLOAD) {
|
||||
umask(000);
|
||||
chmod($CHMOD_ON_UPLOAD,$sFilePath);
|
||||
}
|
||||
}
|
||||
else {
|
||||
umask(000);
|
||||
chmod(0777,$sFilePath);
|
||||
}
|
||||
unlink("$img_dir/$new_fname");
|
||||
last;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$sErrorNumber = '202' ;
|
||||
}
|
||||
$sFileName =~ s/"/\\"/g;
|
||||
|
||||
SendUploadResults($sErrorNumber, $GLOBALS{'UserFilesPath'}.$resourceType.$currentFolder.$sFileName, $sFileName, '');
|
||||
}
|
||||
|
||||
sub SendUploadResults
|
||||
{
|
||||
|
||||
local($sErrorNumber, $sFileUrl, $sFileName, $customMsg) = @_;
|
||||
|
||||
# Minified version of the document.domain automatic fix script (#1919).
|
||||
# The original script can be found at _dev/domain_fix_template.js
|
||||
# Note: in Perl replace \ with \\ and $ with \$
|
||||
print <<EOF;
|
||||
Content-type: text/html
|
||||
|
||||
<script type="text/javascript">
|
||||
(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\\.|\$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
|
||||
|
||||
EOF
|
||||
print 'window.parent.OnUploadCompleted(' . $sErrorNumber . ',"' . JS_cnv($sFileUrl) . '","' . JS_cnv($sFileName) . '","' . JS_cnv($customMsg) . '") ;';
|
||||
print '</script>';
|
||||
exit ;
|
||||
}
|
||||
|
||||
1;
|
||||
@ -1,39 +0,0 @@
|
||||
#####
|
||||
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
# Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
#
|
||||
# == BEGIN LICENSE ==
|
||||
#
|
||||
# Licensed under the terms of any of the following licenses at your
|
||||
# choice:
|
||||
#
|
||||
# - GNU General Public License Version 2 or later (the "GPL")
|
||||
# http://www.gnu.org/licenses/gpl.html
|
||||
#
|
||||
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
# http://www.gnu.org/licenses/lgpl.html
|
||||
#
|
||||
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
#
|
||||
# == END LICENSE ==
|
||||
#
|
||||
# This is the File Manager Connector for Perl.
|
||||
#####
|
||||
|
||||
##
|
||||
# SECURITY: REMOVE/COMMENT THE FOLLOWING LINE TO ENABLE THIS CONNECTOR.
|
||||
##
|
||||
&SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/connectors/perl/config.cgi" file' ) ;
|
||||
|
||||
$GLOBALS{'UserFilesPath'} = '/userfiles/';
|
||||
|
||||
# Map the "UserFiles" path to a local directory.
|
||||
$rootpath = &GetRootPath();
|
||||
$GLOBALS{'UserFilesDirectory'} = $rootpath . $GLOBALS{'UserFilesPath'};
|
||||
|
||||
%allowedExtensions = ("File", "7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip",
|
||||
"Image", "bmp|gif|jpeg|jpg|png",
|
||||
"Flash", "swf|flv",
|
||||
"Media", "aiff|asf|avi|bmp|fla|flv|gif|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|png|qt|ram|rm|rmi|rmvb|swf|tif|tiff|wav|wma|wmv"
|
||||
);
|
||||
@ -1,129 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
#####
|
||||
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
# Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
#
|
||||
# == BEGIN LICENSE ==
|
||||
#
|
||||
# Licensed under the terms of any of the following licenses at your
|
||||
# choice:
|
||||
#
|
||||
# - GNU General Public License Version 2 or later (the "GPL")
|
||||
# http://www.gnu.org/licenses/gpl.html
|
||||
#
|
||||
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
# http://www.gnu.org/licenses/lgpl.html
|
||||
#
|
||||
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
#
|
||||
# == END LICENSE ==
|
||||
#
|
||||
# This is the File Manager Connector for Perl.
|
||||
#####
|
||||
|
||||
##
|
||||
# ATTENTION: To enable this connector, look for the "SECURITY" comment in config.pl.
|
||||
##
|
||||
|
||||
## START: Hack for Windows (Not important to understand the editor code... Perl specific).
|
||||
if(Windows_check()) {
|
||||
chdir(GetScriptPath($0));
|
||||
}
|
||||
|
||||
sub Windows_check
|
||||
{
|
||||
# IIS,PWS(NT/95)
|
||||
$www_server_os = $^O;
|
||||
# Win98 & NT(SP4)
|
||||
if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
|
||||
# AnHTTPd/Omni/IIS
|
||||
if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
|
||||
# Win Apache
|
||||
if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
|
||||
if($www_server_os=~ /win/i) { return(1); }
|
||||
return(0);
|
||||
}
|
||||
|
||||
sub GetScriptPath {
|
||||
local($path) = @_;
|
||||
if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
|
||||
$path;
|
||||
}
|
||||
## END: Hack for IIS
|
||||
|
||||
require 'util.pl';
|
||||
require 'io.pl';
|
||||
require 'basexml.pl';
|
||||
require 'commands.pl';
|
||||
require 'upload_fck.pl';
|
||||
require 'config.pl';
|
||||
|
||||
&read_input();
|
||||
&DoResponse();
|
||||
|
||||
sub DoResponse
|
||||
{
|
||||
|
||||
if($FORM{'Command'} eq "" || $FORM{'Type'} eq "" || $FORM{'CurrentFolder'} eq "") {
|
||||
return ;
|
||||
}
|
||||
# Get the main request informaiton.
|
||||
$sCommand = &specialchar_cnv($FORM{'Command'});
|
||||
$sResourceType = &specialchar_cnv($FORM{'Type'});
|
||||
$sCurrentFolder = $FORM{'CurrentFolder'};
|
||||
|
||||
if ( !($sCommand =~ /^(FileUpload|GetFolders|GetFoldersAndFiles|CreateFolder)$/) ) {
|
||||
SendError( 1, "Command not allowed" ) ;
|
||||
}
|
||||
|
||||
if ( !($sResourceType =~ /^(File|Image|Flash|Media)$/) ) {
|
||||
SendError( 1, "Invalid type specified" ) ;
|
||||
}
|
||||
|
||||
# Check the current folder syntax (must begin and start with a slash).
|
||||
if(!($sCurrentFolder =~ /\/$/)) {
|
||||
$sCurrentFolder .= '/';
|
||||
}
|
||||
if(!($sCurrentFolder =~ /^\//)) {
|
||||
$sCurrentFolder = '/' . $sCurrentFolder;
|
||||
}
|
||||
|
||||
# Check for invalid folder paths (..)
|
||||
if ( $sCurrentFolder =~ /(?:\.\.|\\)/ ) {
|
||||
SendError( 102, "" ) ;
|
||||
}
|
||||
if ( $sCurrentFolder =~ /(\/\.)|[[:cntrl:]]|(\/\/)|(\\\\)|([\:\*\?\"\<\>\|])/ ) {
|
||||
SendError( 102, "" ) ;
|
||||
}
|
||||
|
||||
# File Upload doesn't have to Return XML, so it must be intercepted before anything.
|
||||
if($sCommand eq 'FileUpload') {
|
||||
FileUpload($sResourceType,$sCurrentFolder);
|
||||
return ;
|
||||
}
|
||||
|
||||
print << "_HTML_HEAD_";
|
||||
Content-Type:text/xml; charset=utf-8
|
||||
Pragma: no-cache
|
||||
Cache-Control: no-cache
|
||||
Expires: Thu, 01 Dec 1994 16:00:00 GMT
|
||||
|
||||
_HTML_HEAD_
|
||||
|
||||
&CreateXmlHeader($sCommand,$sResourceType,$sCurrentFolder);
|
||||
|
||||
# Execute the required command.
|
||||
if($sCommand eq 'GetFolders') {
|
||||
&GetFolders($sResourceType,$sCurrentFolder);
|
||||
} elsif($sCommand eq 'GetFoldersAndFiles') {
|
||||
&GetFoldersAndFiles($sResourceType,$sCurrentFolder);
|
||||
} elsif($sCommand eq 'CreateFolder') {
|
||||
&CreateFolder($sResourceType,$sCurrentFolder);
|
||||
}
|
||||
|
||||
&CreateXmlFooter();
|
||||
|
||||
exit ;
|
||||
}
|
||||
@ -1,141 +0,0 @@
|
||||
#####
|
||||
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
# Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
#
|
||||
# == BEGIN LICENSE ==
|
||||
#
|
||||
# Licensed under the terms of any of the following licenses at your
|
||||
# choice:
|
||||
#
|
||||
# - GNU General Public License Version 2 or later (the "GPL")
|
||||
# http://www.gnu.org/licenses/gpl.html
|
||||
#
|
||||
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
# http://www.gnu.org/licenses/lgpl.html
|
||||
#
|
||||
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
#
|
||||
# == END LICENSE ==
|
||||
#
|
||||
# This is the File Manager Connector for Perl.
|
||||
#####
|
||||
|
||||
sub GetUrlFromPath
|
||||
{
|
||||
local($resourceType, $folderPath) = @_;
|
||||
|
||||
if($resourceType eq '') {
|
||||
$rmpath = &RemoveFromEnd($GLOBALS{'UserFilesPath'},'/');
|
||||
return("$rmpath$folderPath");
|
||||
} else {
|
||||
return("$GLOBALS{'UserFilesPath'}$resourceType$folderPath");
|
||||
}
|
||||
}
|
||||
|
||||
sub RemoveExtension
|
||||
{
|
||||
local($fileName) = @_;
|
||||
local($path, $base, $ext);
|
||||
if($fileName !~ /\./) {
|
||||
$fileName .= '.';
|
||||
}
|
||||
if($fileName =~ /([^\\\/]*)\.(.*)$/) {
|
||||
$base = $1;
|
||||
$ext = $2;
|
||||
if($fileName =~ /(.*)$base\.$ext$/) {
|
||||
$path = $1;
|
||||
}
|
||||
}
|
||||
return($path,$base,$ext);
|
||||
|
||||
}
|
||||
|
||||
sub ServerMapFolder
|
||||
{
|
||||
local($resourceType,$folderPath) = @_;
|
||||
|
||||
# Get the resource type directory.
|
||||
$sResourceTypePath = $GLOBALS{'UserFilesDirectory'} . $resourceType . '/';
|
||||
|
||||
# Ensure that the directory exists.
|
||||
&CreateServerFolder($sResourceTypePath);
|
||||
|
||||
# Return the resource type directory combined with the required path.
|
||||
$rmpath = &RemoveFromStart($folderPath,'/');
|
||||
return("$sResourceTypePath$rmpath");
|
||||
}
|
||||
|
||||
sub GetParentFolder
|
||||
{
|
||||
local($folderPath) = @_;
|
||||
|
||||
$folderPath =~ s/[\/][^\/]+[\/]?$//g;
|
||||
return $folderPath;
|
||||
}
|
||||
|
||||
sub CreateServerFolder
|
||||
{
|
||||
local($folderPath) = @_;
|
||||
|
||||
$sParent = &GetParentFolder($folderPath);
|
||||
# Check if the parent exists, or create it.
|
||||
if(!(-e $sParent)) {
|
||||
$sErrorMsg = &CreateServerFolder($sParent);
|
||||
if($sErrorMsg == 1) {
|
||||
return(1);
|
||||
}
|
||||
}
|
||||
if(!(-e $folderPath)) {
|
||||
if (defined $CHMOD_ON_FOLDER_CREATE && !$CHMOD_ON_FOLDER_CREATE) {
|
||||
mkdir("$folderPath");
|
||||
}
|
||||
else {
|
||||
umask(000);
|
||||
if (defined $CHMOD_ON_FOLDER_CREATE) {
|
||||
mkdir("$folderPath",$CHMOD_ON_FOLDER_CREATE);
|
||||
}
|
||||
else {
|
||||
mkdir("$folderPath",0777);
|
||||
}
|
||||
}
|
||||
|
||||
return(0);
|
||||
} else {
|
||||
return(1);
|
||||
}
|
||||
}
|
||||
|
||||
sub GetRootPath
|
||||
{
|
||||
#use Cwd;
|
||||
|
||||
# my $dir = getcwd;
|
||||
# print $dir;
|
||||
# $dir =~ s/$ENV{'DOCUMENT_ROOT'}//g;
|
||||
# print $dir;
|
||||
# return($dir);
|
||||
|
||||
# $wk = $0;
|
||||
# $wk =~ s/\/connector\.cgi//g;
|
||||
# if($wk) {
|
||||
# $current_dir = $wk;
|
||||
# } else {
|
||||
# $current_dir = `pwd`;
|
||||
# }
|
||||
# return($current_dir);
|
||||
use Cwd;
|
||||
|
||||
if($ENV{'DOCUMENT_ROOT'}) {
|
||||
$dir = $ENV{'DOCUMENT_ROOT'};
|
||||
} else {
|
||||
my $dir = getcwd;
|
||||
$workdir =~ s/\/connector\.cgi//g;
|
||||
$dir =~ s/$workdir//g;
|
||||
}
|
||||
return($dir);
|
||||
|
||||
|
||||
|
||||
}
|
||||
1;
|
||||
@ -1,87 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
#####
|
||||
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
# Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
#
|
||||
# == BEGIN LICENSE ==
|
||||
#
|
||||
# Licensed under the terms of any of the following licenses at your
|
||||
# choice:
|
||||
#
|
||||
# - GNU General Public License Version 2 or later (the "GPL")
|
||||
# http://www.gnu.org/licenses/gpl.html
|
||||
#
|
||||
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
# http://www.gnu.org/licenses/lgpl.html
|
||||
#
|
||||
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
#
|
||||
# == END LICENSE ==
|
||||
#
|
||||
# This is the File Manager Connector for Perl.
|
||||
#####
|
||||
|
||||
##
|
||||
# ATTENTION: To enable this connector, look for the "SECURITY" comment in config.pl.
|
||||
##
|
||||
|
||||
## START: Hack for Windows (Not important to understand the editor code... Perl specific).
|
||||
if(Windows_check()) {
|
||||
chdir(GetScriptPath($0));
|
||||
}
|
||||
|
||||
sub Windows_check
|
||||
{
|
||||
# IIS,PWS(NT/95)
|
||||
$www_server_os = $^O;
|
||||
# Win98 & NT(SP4)
|
||||
if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
|
||||
# AnHTTPd/Omni/IIS
|
||||
if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
|
||||
# Win Apache
|
||||
if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
|
||||
if($www_server_os=~ /win/i) { return(1); }
|
||||
return(0);
|
||||
}
|
||||
|
||||
sub GetScriptPath {
|
||||
local($path) = @_;
|
||||
if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
|
||||
$path;
|
||||
}
|
||||
## END: Hack for IIS
|
||||
|
||||
require 'util.pl';
|
||||
require 'io.pl';
|
||||
require 'basexml.pl';
|
||||
require 'commands.pl';
|
||||
require 'upload_fck.pl';
|
||||
require 'config.pl';
|
||||
|
||||
&read_input();
|
||||
&DoResponse();
|
||||
|
||||
sub DoResponse
|
||||
{
|
||||
# Get the main request information.
|
||||
$sCommand = 'FileUpload';
|
||||
$sResourceType = &specialchar_cnv($FORM{'Type'});
|
||||
$sCurrentFolder = "/";
|
||||
|
||||
if ($sResourceType eq '') {
|
||||
$sResourceType = 'File' ;
|
||||
}
|
||||
|
||||
if ( !($sResourceType =~ /^(File|Image|Flash|Media)$/) ) {
|
||||
SendError( 1, "Invalid type specified" ) ;
|
||||
}
|
||||
|
||||
# File Upload doesn't have to Return XML, so it must be intercepted before anything.
|
||||
if($sCommand eq 'FileUpload') {
|
||||
FileUpload($sResourceType,$sCurrentFolder);
|
||||
return ;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,686 +0,0 @@
|
||||
#####
|
||||
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
# Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
#
|
||||
# == BEGIN LICENSE ==
|
||||
#
|
||||
# Licensed under the terms of any of the following licenses at your
|
||||
# choice:
|
||||
#
|
||||
# - GNU General Public License Version 2 or later (the "GPL")
|
||||
# http://www.gnu.org/licenses/gpl.html
|
||||
#
|
||||
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
# http://www.gnu.org/licenses/lgpl.html
|
||||
#
|
||||
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
#
|
||||
# == END LICENSE ==
|
||||
#
|
||||
# This is the File Manager Connector for Perl.
|
||||
#####
|
||||
|
||||
# image data save dir
|
||||
$img_dir = './temp/';
|
||||
|
||||
|
||||
# File size max(unit KB)
|
||||
$MAX_CONTENT_SIZE = 30000;
|
||||
|
||||
# After file is uploaded, sometimes it is required to change its permissions
|
||||
# so that it was possible to access it at the later time.
|
||||
# If possible, it is recommended to set more restrictive permissions, like 0755.
|
||||
# Set to 0 to disable this feature.
|
||||
$CHMOD_ON_UPLOAD = 0777;
|
||||
|
||||
# See comments above.
|
||||
# Used when creating folders that does not exist.
|
||||
$CHMOD_ON_FOLDER_CREATE = 0755;
|
||||
|
||||
# Filelock (1=use,0=not use)
|
||||
$PM{'flock'} = '1';
|
||||
|
||||
|
||||
# upload Content-Type list
|
||||
my %UPLOAD_CONTENT_TYPE_LIST = (
|
||||
'image/(x-)?png' => 'png', # PNG image
|
||||
'image/p?jpe?g' => 'jpg', # JPEG image
|
||||
'image/gif' => 'gif', # GIF image
|
||||
'image/x-xbitmap' => 'xbm', # XBM image
|
||||
|
||||
'image/(x-(MS-)?)?bmp' => 'bmp', # Windows BMP image
|
||||
'image/pict' => 'pict', # Macintosh PICT image
|
||||
'image/tiff' => 'tif', # TIFF image
|
||||
'application/pdf' => 'pdf', # PDF image
|
||||
'application/x-shockwave-flash' => 'swf', # Shockwave Flash
|
||||
|
||||
'video/(x-)?msvideo' => 'avi', # Microsoft Video
|
||||
'video/quicktime' => 'mov', # QuickTime Video
|
||||
'video/mpeg' => 'mpeg', # MPEG Video
|
||||
'video/x-mpeg2' => 'mpv2', # MPEG2 Video
|
||||
|
||||
'audio/(x-)?midi?' => 'mid', # MIDI Audio
|
||||
'audio/(x-)?wav' => 'wav', # WAV Audio
|
||||
'audio/basic' => 'au', # ULAW Audio
|
||||
'audio/mpeg' => 'mpga', # MPEG Audio
|
||||
|
||||
'application/(x-)?zip(-compressed)?' => 'zip', # ZIP Compress
|
||||
|
||||
'text/html' => 'html', # HTML
|
||||
'text/plain' => 'txt', # TEXT
|
||||
'(?:application|text)/(?:rtf|richtext)' => 'rtf', # RichText
|
||||
|
||||
'application/msword' => 'doc', # Microsoft Word
|
||||
'application/vnd.ms-excel' => 'xls', # Microsoft Excel
|
||||
|
||||
''
|
||||
);
|
||||
|
||||
# Upload is permitted.
|
||||
# A regular expression is possible.
|
||||
my %UPLOAD_EXT_LIST = (
|
||||
'png' => 'PNG image',
|
||||
'p?jpe?g|jpe|jfif|pjp' => 'JPEG image',
|
||||
'gif' => 'GIF image',
|
||||
'xbm' => 'XBM image',
|
||||
|
||||
'bmp|dib|rle' => 'Windows BMP image',
|
||||
'pi?ct' => 'Macintosh PICT image',
|
||||
'tiff?' => 'TIFF image',
|
||||
'pdf' => 'PDF image',
|
||||
'swf' => 'Shockwave Flash',
|
||||
|
||||
'avi' => 'Microsoft Video',
|
||||
'moo?v|qt' => 'QuickTime Video',
|
||||
'm(p(e?gv?|e|v)|1v)' => 'MPEG Video',
|
||||
'mp(v2|2v)' => 'MPEG2 Video',
|
||||
|
||||
'midi?|kar|smf|rmi|mff' => 'MIDI Audio',
|
||||
'wav' => 'WAVE Audio',
|
||||
'au|snd' => 'ULAW Audio',
|
||||
'mp(e?ga|2|a|3)|abs' => 'MPEG Audio',
|
||||
|
||||
'zip' => 'ZIP Compress',
|
||||
'lzh' => 'LZH Compress',
|
||||
'cab' => 'CAB Compress',
|
||||
|
||||
'd?html?' => 'HTML',
|
||||
'rtf|rtx' => 'RichText',
|
||||
'txt|text' => 'Text',
|
||||
|
||||
''
|
||||
);
|
||||
|
||||
|
||||
# sjis or euc
|
||||
my $CHARCODE = 'sjis';
|
||||
|
||||
$TRANS_2BYTE_CODE = 0;
|
||||
|
||||
##############################################################################
|
||||
# Summary
|
||||
#
|
||||
# Form Read input
|
||||
#
|
||||
# Parameters
|
||||
# Returns
|
||||
# Memo
|
||||
##############################################################################
|
||||
sub read_input
|
||||
{
|
||||
eval("use File::Copy;");
|
||||
eval("use File::Path;");
|
||||
|
||||
my ($FORM) = @_;
|
||||
|
||||
if (defined $CHMOD_ON_FOLDER_CREATE && !$CHMOD_ON_FOLDER_CREATE) {
|
||||
mkdir("$img_dir");
|
||||
}
|
||||
else {
|
||||
umask(000);
|
||||
if (defined $CHMOD_ON_FOLDER_CREATE) {
|
||||
mkdir("$img_dir",$CHMOD_ON_FOLDER_CREATE);
|
||||
}
|
||||
else {
|
||||
mkdir("$img_dir",0777);
|
||||
}
|
||||
}
|
||||
|
||||
undef $img_data_exists;
|
||||
undef @NEWFNAMES;
|
||||
undef @NEWFNAME_DATA;
|
||||
|
||||
if($ENV{'CONTENT_LENGTH'} > 10000000 || $ENV{'CONTENT_LENGTH'} > $MAX_CONTENT_SIZE * 1024) {
|
||||
&upload_error(
|
||||
'Size Error',
|
||||
sprintf(
|
||||
"Transmitting size is too large.MAX <strong>%d KB</strong> Now Size <strong>%d KB</strong>(<strong>%d bytes</strong> Over)",
|
||||
$MAX_CONTENT_SIZE,
|
||||
int($ENV{'CONTENT_LENGTH'} / 1024),
|
||||
$ENV{'CONTENT_LENGTH'} - $MAX_CONTENT_SIZE * 1024
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
my $Buffer;
|
||||
if($ENV{'CONTENT_TYPE'} =~ /multipart\/form-data/) {
|
||||
# METHOD POST only
|
||||
return unless($ENV{'CONTENT_LENGTH'});
|
||||
|
||||
binmode(STDIN);
|
||||
# STDIN A pause character is detected.'(MacIE3.0 boundary of $ENV{'CONTENT_TYPE'} cannot be trusted.)
|
||||
my $Boundary = <STDIN>;
|
||||
$Boundary =~ s/\x0D\x0A//;
|
||||
$Boundary = quotemeta($Boundary);
|
||||
while(<STDIN>) {
|
||||
if(/^\s*Content-Disposition:/i) {
|
||||
my($name,$ContentType,$FileName);
|
||||
# form data get
|
||||
if(/\bname="([^"]+)"/i || /\bname=([^\s:;]+)/i) {
|
||||
$name = $1;
|
||||
$name =~ tr/+/ /;
|
||||
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
|
||||
&Encode(\$name);
|
||||
}
|
||||
if(/\bfilename="([^"]*)"/i || /\bfilename=([^\s:;]*)/i) {
|
||||
$FileName = $1 || 'unknown';
|
||||
}
|
||||
# head read
|
||||
while(<STDIN>) {
|
||||
last if(! /\w/);
|
||||
if(/^\s*Content-Type:\s*"([^"]+)"/i || /^\s*Content-Type:\s*([^\s:;]+)/i) {
|
||||
$ContentType = $1;
|
||||
}
|
||||
}
|
||||
# body read
|
||||
$value = "";
|
||||
while(<STDIN>) {
|
||||
last if(/^$Boundary/o);
|
||||
$value .= $_;
|
||||
};
|
||||
$lastline = $_;
|
||||
$value =~s /\x0D\x0A$//;
|
||||
if($value ne '') {
|
||||
if($FileName || $ContentType) {
|
||||
$img_data_exists = 1;
|
||||
(
|
||||
$FileName, #
|
||||
$Ext, #
|
||||
$Length, #
|
||||
$ImageWidth, #
|
||||
$ImageHeight, #
|
||||
$ContentName #
|
||||
) = &CheckContentType(\$value,$FileName,$ContentType);
|
||||
|
||||
$FORM{$name} = $FileName;
|
||||
$new_fname = $FileName;
|
||||
push(@NEWFNAME_DATA,"$FileName\t$Ext\t$Length\t$ImageWidth\t$ImageHeight\t$ContentName");
|
||||
|
||||
# Multi-upload correspondence
|
||||
push(@NEWFNAMES,$new_fname);
|
||||
open(OUT,">$img_dir/$new_fname");
|
||||
binmode(OUT);
|
||||
eval "flock(OUT,2);" if($PM{'flock'} == 1);
|
||||
print OUT $value;
|
||||
eval "flock(OUT,8);" if($PM{'flock'} == 1);
|
||||
close(OUT);
|
||||
|
||||
} elsif($name) {
|
||||
$value =~ tr/+/ /;
|
||||
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
|
||||
&Encode(\$value,'trans');
|
||||
$FORM{$name} .= "\0" if(defined($FORM{$name}));
|
||||
$FORM{$name} .= $value;
|
||||
}
|
||||
}
|
||||
};
|
||||
last if($lastline =~ /^$Boundary\-\-/o);
|
||||
}
|
||||
} elsif($ENV{'CONTENT_LENGTH'}) {
|
||||
read(STDIN,$Buffer,$ENV{'CONTENT_LENGTH'});
|
||||
}
|
||||
foreach(split(/&/,$Buffer),split(/&/,$ENV{'QUERY_STRING'})) {
|
||||
my($name, $value) = split(/=/);
|
||||
$name =~ tr/+/ /;
|
||||
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
|
||||
$value =~ tr/+/ /;
|
||||
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
|
||||
|
||||
&Encode(\$name);
|
||||
&Encode(\$value,'trans');
|
||||
$FORM{$name} .= "\0" if(defined($FORM{$name}));
|
||||
$FORM{$name} .= $value;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
# Summary
|
||||
#
|
||||
# CheckContentType
|
||||
#
|
||||
# Parameters
|
||||
# Returns
|
||||
# Memo
|
||||
##############################################################################
|
||||
sub CheckContentType
|
||||
{
|
||||
|
||||
my($DATA,$FileName,$ContentType) = @_;
|
||||
my($Ext,$ImageWidth,$ImageHeight,$ContentName,$Infomation);
|
||||
my $DataLength = length($$DATA);
|
||||
|
||||
# An unknown file type
|
||||
|
||||
$_ = $ContentType;
|
||||
my $UnknownType = (
|
||||
!$_
|
||||
|| /^application\/(x-)?macbinary$/i
|
||||
|| /^application\/applefile$/i
|
||||
|| /^application\/octet-stream$/i
|
||||
|| /^text\/plane$/i
|
||||
|| /^x-unknown-content-type/i
|
||||
);
|
||||
|
||||
# MacBinary(Mac Unnecessary data are deleted.)
|
||||
if($UnknownType || $ENV{'HTTP_USER_AGENT'} =~ /Macintosh|Mac_/) {
|
||||
if($DataLength > 128 && !unpack("C",substr($$DATA,0,1)) && !unpack("C",substr($$DATA,74,1)) && !unpack("C",substr($$DATA,82,1)) ) {
|
||||
my $MacBinary_ForkLength = unpack("N", substr($$DATA, 83, 4)); # ForkLength Get
|
||||
my $MacBinary_FileName = quotemeta(substr($$DATA, 2, unpack("C",substr($$DATA, 1, 1))));
|
||||
if($MacBinary_FileName && $MacBinary_ForkLength && $DataLength >= $MacBinary_ForkLength + 128
|
||||
&& ($FileName =~ /$MacBinary_FileName/i || substr($$DATA,102,4) eq 'mBIN')) { # DATA TOP 128byte MacBinary!!
|
||||
$$DATA = substr($$DATA,128,$MacBinary_ForkLength);
|
||||
my $ResourceLength = $DataLength - $MacBinary_ForkLength - 128;
|
||||
$DataLength = $MacBinary_ForkLength;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# A file name is changed into EUC.
|
||||
# &jcode::convert(\$FileName,'euc',$FormCodeDefault);
|
||||
# &jcode::h2z_euc(\$FileName);
|
||||
$FileName =~ s/^.*\\//; # Windows, Mac
|
||||
$FileName =~ s/^.*\///; # UNIX
|
||||
$FileName =~ s/&/&/g;
|
||||
$FileName =~ s/"/"/g;
|
||||
$FileName =~ s/</</g;
|
||||
$FileName =~ s/>/>/g;
|
||||
#
|
||||
# if($CHARCODE ne 'euc') {
|
||||
# &jcode::convert(\$FileName,$CHARCODE,'euc');
|
||||
# }
|
||||
|
||||
# An extension is extracted and it changes into a small letter.
|
||||
my $FileExt;
|
||||
if($FileName =~ /\.(\w+)$/) {
|
||||
$FileExt = $1;
|
||||
$FileExt =~ tr/A-Z/a-z/;
|
||||
}
|
||||
|
||||
# Executable file detection (ban on upload)
|
||||
if($$DATA =~ /^MZ/) {
|
||||
$Ext = 'exe';
|
||||
}
|
||||
# text
|
||||
if(!$Ext && ($UnknownType || $ContentType =~ /^text\//i || $ContentType =~ /^application\/(?:rtf|richtext)$/i || $ContentType =~ /^image\/x-xbitmap$/i)
|
||||
&& ! $$DATA =~ /[\000-\006\177\377]/) {
|
||||
# $$DATA =~ s/\x0D\x0A/\n/g;
|
||||
# $$DATA =~ tr/\x0D\x0A/\n\n/;
|
||||
#
|
||||
# if(
|
||||
# $$DATA =~ /<\s*SCRIPT(?:.|\n)*?>/i
|
||||
# || $$DATA =~ /<\s*(?:.|\n)*?\bONLOAD\s*=(?:.|\n)*?>/i
|
||||
# || $$DATA =~ /<\s*(?:.|\n)*?\bONCLICK\s*=(?:.|\n)*?>/i
|
||||
# ) {
|
||||
# $Infomation = '(JavaScript contains)';
|
||||
# }
|
||||
# if($$DATA =~ /<\s*TABLE(?:.|\n)*?>/i
|
||||
# || $$DATA =~ /<\s*BLINK(?:.|\n)*?>/i
|
||||
# || $$DATA =~ /<\s*MARQUEE(?:.|\n)*?>/i
|
||||
# || $$DATA =~ /<\s*OBJECT(?:.|\n)*?>/i
|
||||
# || $$DATA =~ /<\s*EMBED(?:.|\n)*?>/i
|
||||
# || $$DATA =~ /<\s*FRAME(?:.|\n)*?>/i
|
||||
# || $$DATA =~ /<\s*APPLET(?:.|\n)*?>/i
|
||||
# || $$DATA =~ /<\s*FORM(?:.|\n)*?>/i
|
||||
# || $$DATA =~ /<\s*(?:.|\n)*?\bSRC\s*=(?:.|\n)*?>/i
|
||||
# || $$DATA =~ /<\s*(?:.|\n)*?\bDYNSRC\s*=(?:.|\n)*?>/i
|
||||
# ) {
|
||||
# $Infomation = '(the HTML tag which is not safe is included)';
|
||||
# }
|
||||
|
||||
if($FileExt =~ /^txt$/i || $FileExt =~ /^cgi$/i || $FileExt =~ /^pl$/i) { # Text File
|
||||
$Ext = 'txt';
|
||||
} elsif($ContentType =~ /^text\/html$/i || $FileExt =~ /html?/i || $$DATA =~ /<\s*HTML(?:.|\n)*?>/i) { # HTML File
|
||||
$Ext = 'html';
|
||||
} elsif($ContentType =~ /^image\/x-xbitmap$/i || $FileExt =~ /^xbm$/i) { # XBM(x-BitMap) Image
|
||||
my $XbmName = $1;
|
||||
my ($XbmWidth, $XbmHeight);
|
||||
if($$DATA =~ /\#define\s*$XbmName\_width\s*(\d+)/i) {
|
||||
$XbmWidth = $1;
|
||||
}
|
||||
if($$DATA =~ /\#define\s*$XbmName\_height\s*(\d+)/i) {
|
||||
$XbmHeight = $1;
|
||||
}
|
||||
if($XbmWidth && $XbmHeight) {
|
||||
$Ext = 'xbm';
|
||||
$ImageWidth = $XbmWidth;
|
||||
$ImageHeight = $XbmHeight;
|
||||
}
|
||||
} else { #
|
||||
$Ext = 'txt';
|
||||
}
|
||||
}
|
||||
|
||||
# image
|
||||
if(!$Ext && ($UnknownType || $ContentType =~ /^image\//i)) {
|
||||
# PNG
|
||||
if($$DATA =~ /^\x89PNG\x0D\x0A\x1A\x0A/) {
|
||||
if(substr($$DATA, 12, 4) eq 'IHDR') {
|
||||
$Ext = 'png';
|
||||
($ImageWidth, $ImageHeight) = unpack("N2", substr($$DATA, 16, 8));
|
||||
}
|
||||
} elsif($$DATA =~ /^GIF8(?:9|7)a/) { # GIF89a(modified), GIF89a, GIF87a
|
||||
$Ext = 'gif';
|
||||
($ImageWidth, $ImageHeight) = unpack("v2", substr($$DATA, 6, 4));
|
||||
} elsif($$DATA =~ /^II\x2a\x00\x08\x00\x00\x00/ || $$DATA =~ /^MM\x00\x2a\x00\x00\x00\x08/) { # TIFF
|
||||
$Ext = 'tif';
|
||||
} elsif($$DATA =~ /^BM/) { # BMP
|
||||
$Ext = 'bmp';
|
||||
} elsif($$DATA =~ /^\xFF\xD8\xFF/ || $$DATA =~ /JFIF/) { # JPEG
|
||||
my $HeaderPoint = index($$DATA, "\xFF\xD8\xFF", 0);
|
||||
my $Point = $HeaderPoint + 2;
|
||||
while($Point < $DataLength) {
|
||||
my($Maker, $MakerType, $MakerLength) = unpack("C2n",substr($$DATA,$Point,4));
|
||||
if($Maker != 0xFF || $MakerType == 0xd9 || $MakerType == 0xda) {
|
||||
last;
|
||||
} elsif($MakerType >= 0xC0 && $MakerType <= 0xC3) {
|
||||
$Ext = 'jpg';
|
||||
($ImageHeight, $ImageWidth) = unpack("n2", substr($$DATA, $Point + 5, 4));
|
||||
if($HeaderPoint > 0) {
|
||||
$$DATA = substr($$DATA, $HeaderPoint);
|
||||
$DataLength = length($$DATA);
|
||||
}
|
||||
last;
|
||||
} else {
|
||||
$Point += $MakerLength + 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# audio
|
||||
if(!$Ext && ($UnknownType || $ContentType =~ /^audio\//i)) {
|
||||
# MIDI Audio
|
||||
if($$DATA =~ /^MThd/) {
|
||||
$Ext = 'mid';
|
||||
} elsif($$DATA =~ /^\x2esnd/) { # ULAW Audio
|
||||
$Ext = 'au';
|
||||
} elsif($$DATA =~ /^RIFF/ || $$DATA =~ /^ID3/ && $$DATA =~ /RIFF/) {
|
||||
my $HeaderPoint = index($$DATA, "RIFF", 0);
|
||||
$_ = substr($$DATA, $HeaderPoint + 8, 8);
|
||||
if(/^WAVEfmt $/) {
|
||||
# WAVE
|
||||
if(unpack("V",substr($$DATA, $HeaderPoint + 16, 4)) == 16) {
|
||||
$Ext = 'wav';
|
||||
} else { # RIFF WAVE MP3
|
||||
$Ext = 'mp3';
|
||||
}
|
||||
} elsif(/^RMIDdata$/) { # RIFF MIDI
|
||||
$Ext = 'rmi';
|
||||
} elsif(/^RMP3data$/) { # RIFF MP3
|
||||
$Ext = 'rmp';
|
||||
}
|
||||
if($ContentType =~ /^audio\//i) {
|
||||
$Infomation .= '(RIFF '. substr($$DATA, $HeaderPoint + 8, 4). ')';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# a binary file
|
||||
unless ($Ext) {
|
||||
# PDF image
|
||||
if($$DATA =~ /^\%PDF/) {
|
||||
# Picture size is not measured.
|
||||
$Ext = 'pdf';
|
||||
} elsif($$DATA =~ /^FWS/) { # Shockwave Flash
|
||||
$Ext = 'swf';
|
||||
} elsif($$DATA =~ /^RIFF/ || $$DATA =~ /^ID3/ && $$DATA =~ /RIFF/) {
|
||||
my $HeaderPoint = index($$DATA, "RIFF", 0);
|
||||
$_ = substr($$DATA,$HeaderPoint + 8, 8);
|
||||
# AVI
|
||||
if(/^AVI LIST$/) {
|
||||
$Ext = 'avi';
|
||||
}
|
||||
if($ContentType =~ /^video\//i) {
|
||||
$Infomation .= '(RIFF '. substr($$DATA, $HeaderPoint + 8, 4). ')';
|
||||
}
|
||||
} elsif($$DATA =~ /^PK/) { # ZIP Compress File
|
||||
$Ext = 'zip';
|
||||
} elsif($$DATA =~ /^MSCF/) { # CAB Compress File
|
||||
$Ext = 'cab';
|
||||
} elsif($$DATA =~ /^Rar\!/) { # RAR Compress File
|
||||
$Ext = 'rar';
|
||||
} elsif(substr($$DATA, 2, 5) =~ /^\-lh(\d+|d)\-$/) { # LHA Compress File
|
||||
$Infomation .= "(lh$1)";
|
||||
$Ext = 'lzh';
|
||||
} elsif(substr($$DATA, 325, 25) eq "Apple Video Media Handler" || substr($$DATA, 325, 30) eq "Apple \x83\x72\x83\x66\x83\x49\x81\x45\x83\x81\x83\x66\x83\x42\x83\x41\x83\x6E\x83\x93\x83\x68\x83\x89") {
|
||||
# QuickTime
|
||||
$Ext = 'mov';
|
||||
}
|
||||
}
|
||||
|
||||
# Header analysis failure
|
||||
unless ($Ext) {
|
||||
# It will be followed if it applies for the MIME type from the browser.
|
||||
foreach (keys %UPLOAD_CONTENT_TYPE_LIST) {
|
||||
next unless ($_);
|
||||
if($ContentType =~ /^$_$/i) {
|
||||
$Ext = $UPLOAD_CONTENT_TYPE_LIST{$_};
|
||||
$ContentName = &CheckContentExt($Ext);
|
||||
if(
|
||||
grep {$_ eq $Ext;} (
|
||||
'png',
|
||||
'gif',
|
||||
'jpg',
|
||||
'xbm',
|
||||
'tif',
|
||||
'bmp',
|
||||
'pdf',
|
||||
'swf',
|
||||
'mov',
|
||||
'zip',
|
||||
'cab',
|
||||
'lzh',
|
||||
'rar',
|
||||
'mid',
|
||||
'rmi',
|
||||
'au',
|
||||
'wav',
|
||||
'avi',
|
||||
'exe'
|
||||
)
|
||||
) {
|
||||
$Infomation .= ' / Header analysis failure';
|
||||
}
|
||||
if($Ext ne $FileExt && &CheckContentExt($FileExt) eq $ContentName) {
|
||||
$Ext = $FileExt;
|
||||
}
|
||||
last;
|
||||
}
|
||||
}
|
||||
# a MIME type is unknown--It judges from an extension.
|
||||
unless ($Ext) {
|
||||
$ContentName = &CheckContentExt($FileExt);
|
||||
if($ContentName) {
|
||||
$Ext = $FileExt;
|
||||
$Infomation .= ' / MIME type is unknown('. $ContentType. ')';
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# $ContentName = &CheckContentExt($Ext) unless($ContentName);
|
||||
# if($Ext && $ContentName) {
|
||||
# $ContentName .= $Infomation;
|
||||
# } else {
|
||||
# &upload_error(
|
||||
# 'Extension Error',
|
||||
# "$FileName A not corresponding extension ($Ext)<BR>The extension which can be responded ". join(',', sort values(%UPLOAD_EXT_LIST))
|
||||
# );
|
||||
# }
|
||||
|
||||
# # SSI Tag Deletion
|
||||
# if($Ext =~ /.?html?/ && $$DATA =~ /<\!/) {
|
||||
# foreach (
|
||||
# 'config',
|
||||
# 'echo',
|
||||
# 'exec',
|
||||
# 'flastmod',
|
||||
# 'fsize',
|
||||
# 'include'
|
||||
# ) {
|
||||
# $$DATA =~ s/\#\s*$_/\&\#35\;$_/ig
|
||||
# }
|
||||
# }
|
||||
|
||||
return (
|
||||
$FileName,
|
||||
$Ext,
|
||||
int($DataLength / 1024 + 1),
|
||||
$ImageWidth,
|
||||
$ImageHeight,
|
||||
$ContentName
|
||||
);
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
# Summary
|
||||
#
|
||||
# Extension discernment
|
||||
#
|
||||
# Parameters
|
||||
# Returns
|
||||
# Memo
|
||||
##############################################################################
|
||||
|
||||
sub CheckContentExt
|
||||
{
|
||||
|
||||
my($Ext) = @_;
|
||||
my $ContentName;
|
||||
foreach (keys %UPLOAD_EXT_LIST) {
|
||||
next unless ($_);
|
||||
if($_ && $Ext =~ /^$_$/) {
|
||||
$ContentName = $UPLOAD_EXT_LIST{$_};
|
||||
last;
|
||||
}
|
||||
}
|
||||
return $ContentName;
|
||||
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
# Summary
|
||||
#
|
||||
# Form decode
|
||||
#
|
||||
# Parameters
|
||||
# Returns
|
||||
# Memo
|
||||
##############################################################################
|
||||
sub Encode
|
||||
{
|
||||
|
||||
my($value,$Trans) = @_;
|
||||
|
||||
# my $FormCode = &jcode::getcode($value) || $FormCodeDefault;
|
||||
# $FormCodeDefault ||= $FormCode;
|
||||
#
|
||||
# if($Trans && $TRANS_2BYTE_CODE) {
|
||||
# if($FormCode ne 'euc') {
|
||||
# &jcode::convert($value, 'euc', $FormCode);
|
||||
# }
|
||||
# &jcode::tr(
|
||||
# $value,
|
||||
# "\xA3\xB0-\xA3\xB9\xA3\xC1-\xA3\xDA\xA3\xE1-\xA3\xFA",
|
||||
# '0-9A-Za-z'
|
||||
# );
|
||||
# if($CHARCODE ne 'euc') {
|
||||
# &jcode::convert($value,$CHARCODE,'euc');
|
||||
# }
|
||||
# } else {
|
||||
# if($CHARCODE ne $FormCode) {
|
||||
# &jcode::convert($value,$CHARCODE,$FormCode);
|
||||
# }
|
||||
# }
|
||||
# if($CHARCODE eq 'euc') {
|
||||
# &jcode::h2z_euc($value);
|
||||
# } elsif($CHARCODE eq 'sjis') {
|
||||
# &jcode::h2z_sjis($value);
|
||||
# }
|
||||
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
# Summary
|
||||
#
|
||||
# Error Msg
|
||||
#
|
||||
# Parameters
|
||||
# Returns
|
||||
# Memo
|
||||
##############################################################################
|
||||
|
||||
sub upload_error
|
||||
{
|
||||
|
||||
local($error_message) = $_[0];
|
||||
local($error_message2) = $_[1];
|
||||
|
||||
print "Content-type: text/html\n\n";
|
||||
print<<EOF;
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>Error Message</TITLE></HEAD>
|
||||
<BODY>
|
||||
<table border="1" cellspacing="10" cellpadding="10">
|
||||
<TR bgcolor="#0000B0">
|
||||
<TD bgcolor="#0000B0" NOWRAP><font size="-1" color="white"><B>Error Message</B></font></TD>
|
||||
</TR>
|
||||
</table>
|
||||
<UL>
|
||||
<H4> $error_message </H4>
|
||||
$error_message2 <BR>
|
||||
</UL>
|
||||
</BODY>
|
||||
</HTML>
|
||||
EOF
|
||||
&rm_tmp_uploaded_files; # Image Temporary deletion
|
||||
exit;
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
# Summary
|
||||
#
|
||||
# Image Temporary deletion
|
||||
#
|
||||
# Parameters
|
||||
# Returns
|
||||
# Memo
|
||||
##############################################################################
|
||||
|
||||
sub rm_tmp_uploaded_files
|
||||
{
|
||||
if($img_data_exists == 1){
|
||||
sleep 1;
|
||||
foreach $fname_list(@NEWFNAMES) {
|
||||
if(-e "$img_dir/$fname_list") {
|
||||
unlink("$img_dir/$fname_list");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
1;
|
||||
@ -1,66 +0,0 @@
|
||||
#####
|
||||
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
# Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
#
|
||||
# == BEGIN LICENSE ==
|
||||
#
|
||||
# Licensed under the terms of any of the following licenses at your
|
||||
# choice:
|
||||
#
|
||||
# - GNU General Public License Version 2 or later (the "GPL")
|
||||
# http://www.gnu.org/licenses/gpl.html
|
||||
#
|
||||
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
# http://www.gnu.org/licenses/lgpl.html
|
||||
#
|
||||
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
#
|
||||
# == END LICENSE ==
|
||||
#
|
||||
# This is the File Manager Connector for Perl.
|
||||
#####
|
||||
|
||||
sub RemoveFromStart
|
||||
{
|
||||
local($sourceString, $charToRemove) = @_;
|
||||
$sPattern = '^' . $charToRemove . '+' ;
|
||||
$sourceString =~ s/^$charToRemove+//g;
|
||||
return $sourceString;
|
||||
}
|
||||
|
||||
sub RemoveFromEnd
|
||||
{
|
||||
local($sourceString, $charToRemove) = @_;
|
||||
$sPattern = $charToRemove . '+$' ;
|
||||
$sourceString =~ s/$charToRemove+$//g;
|
||||
return $sourceString;
|
||||
}
|
||||
|
||||
sub ConvertToXmlAttribute
|
||||
{
|
||||
local($value) = @_;
|
||||
return(&specialchar_cnv($value));
|
||||
}
|
||||
|
||||
sub specialchar_cnv
|
||||
{
|
||||
local($ch) = @_;
|
||||
|
||||
$ch =~ s/&/&/g; # &
|
||||
$ch =~ s/\"/"/g; #"
|
||||
$ch =~ s/\'/'/g; # '
|
||||
$ch =~ s/</</g; # <
|
||||
$ch =~ s/>/>/g; # >
|
||||
return($ch);
|
||||
}
|
||||
|
||||
sub JS_cnv
|
||||
{
|
||||
local($ch) = @_;
|
||||
|
||||
$ch =~ s/\"/\\\"/g; #"
|
||||
return($ch);
|
||||
}
|
||||
|
||||
1;
|
||||
@ -1,146 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
* Configuration file for the File Manager Connector for Python
|
||||
"""
|
||||
|
||||
# INSTALLATION NOTE: You must set up your server environment accordingly to run
|
||||
# python scripts. This connector requires Python 2.4 or greater.
|
||||
#
|
||||
# Supported operation modes:
|
||||
# * WSGI (recommended): You'll need apache + mod_python + modpython_gateway
|
||||
# or any web server capable of the WSGI python standard
|
||||
# * Plain Old CGI: Any server capable of running standard python scripts
|
||||
# (although mod_python is recommended for performance)
|
||||
# This was the previous connector version operation mode
|
||||
#
|
||||
# If you're using Apache web server, replace the htaccess.txt to to .htaccess,
|
||||
# and set the proper options and paths.
|
||||
# For WSGI and mod_python, you may need to download modpython_gateway from:
|
||||
# http://projects.amor.org/misc/svn/modpython_gateway.py and copy it in this
|
||||
# directory.
|
||||
|
||||
|
||||
# SECURITY: You must explicitly enable this "connector". (Set it to "True").
|
||||
# WARNING: don't just set "ConfigIsEnabled = True", you must be sure that only
|
||||
# authenticated users can access this file or use some kind of session checking.
|
||||
Enabled = False
|
||||
|
||||
# Path to user files relative to the document root.
|
||||
UserFilesPath = '/userfiles/'
|
||||
|
||||
# Fill the following value it you prefer to specify the absolute path for the
|
||||
# user files directory. Useful if you are using a virtual directory, symbolic
|
||||
# link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
|
||||
# Attention: The above 'UserFilesPath' must point to the same directory.
|
||||
# WARNING: GetRootPath may not work in virtual or mod_python configurations, and
|
||||
# may not be thread safe. Use this configuration parameter instead.
|
||||
UserFilesAbsolutePath = ''
|
||||
|
||||
# Due to security issues with Apache modules, it is recommended to leave the
|
||||
# following setting enabled.
|
||||
ForceSingleExtension = True
|
||||
|
||||
# What the user can do with this connector
|
||||
ConfigAllowedCommands = [ 'QuickUpload', 'FileUpload', 'GetFolders', 'GetFoldersAndFiles', 'CreateFolder' ]
|
||||
|
||||
# Allowed Resource Types
|
||||
ConfigAllowedTypes = ['File', 'Image', 'Flash', 'Media']
|
||||
|
||||
# After file is uploaded, sometimes it is required to change its permissions
|
||||
# so that it was possible to access it at the later time.
|
||||
# If possible, it is recommended to set more restrictive permissions, like 0755.
|
||||
# Set to 0 to disable this feature.
|
||||
# Note: not needed on Windows-based servers.
|
||||
ChmodOnUpload = 0755
|
||||
|
||||
# See comments above.
|
||||
# Used when creating folders that does not exist.
|
||||
ChmodOnFolderCreate = 0755
|
||||
|
||||
# Do not touch this 3 lines, see "Configuration settings for each Resource Type"
|
||||
AllowedExtensions = {}; DeniedExtensions = {};
|
||||
FileTypesPath = {}; FileTypesAbsolutePath = {};
|
||||
QuickUploadPath = {}; QuickUploadAbsolutePath = {};
|
||||
|
||||
# Configuration settings for each Resource Type
|
||||
#
|
||||
# - AllowedExtensions: the possible extensions that can be allowed.
|
||||
# If it is empty then any file type can be uploaded.
|
||||
# - DeniedExtensions: The extensions that won't be allowed.
|
||||
# If it is empty then no restrictions are done here.
|
||||
#
|
||||
# For a file to be uploaded it has to fulfill both the AllowedExtensions
|
||||
# and DeniedExtensions (that's it: not being denied) conditions.
|
||||
#
|
||||
# - FileTypesPath: the virtual folder relative to the document root where
|
||||
# these resources will be located.
|
||||
# Attention: It must start and end with a slash: '/'
|
||||
#
|
||||
# - FileTypesAbsolutePath: the physical path to the above folder. It must be
|
||||
# an absolute path.
|
||||
# If it's an empty string then it will be autocalculated.
|
||||
# Useful if you are using a virtual directory, symbolic link or alias.
|
||||
# Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
|
||||
# Attention: The above 'FileTypesPath' must point to the same directory.
|
||||
# Attention: It must end with a slash: '/'
|
||||
#
|
||||
#
|
||||
# - QuickUploadPath: the virtual folder relative to the document root where
|
||||
# these resources will be uploaded using the Upload tab in the resources
|
||||
# dialogs.
|
||||
# Attention: It must start and end with a slash: '/'
|
||||
#
|
||||
# - QuickUploadAbsolutePath: the physical path to the above folder. It must be
|
||||
# an absolute path.
|
||||
# If it's an empty string then it will be autocalculated.
|
||||
# Useful if you are using a virtual directory, symbolic link or alias.
|
||||
# Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
|
||||
# Attention: The above 'QuickUploadPath' must point to the same directory.
|
||||
# Attention: It must end with a slash: '/'
|
||||
|
||||
AllowedExtensions['File'] = ['7z','aiff','asf','avi','bmp','csv','doc','fla','flv','gif','gz','gzip','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','ods','odt','pdf','png','ppt','pxd','qt','ram','rar','rm','rmi','rmvb','rtf','sdc','sitd','swf','sxc','sxw','tar','tgz','tif','tiff','txt','vsd','wav','wma','wmv','xls','xml','zip']
|
||||
DeniedExtensions['File'] = []
|
||||
FileTypesPath['File'] = UserFilesPath + 'file/'
|
||||
FileTypesAbsolutePath['File'] = (not UserFilesAbsolutePath == '') and (UserFilesAbsolutePath + 'file/') or ''
|
||||
QuickUploadPath['File'] = FileTypesPath['File']
|
||||
QuickUploadAbsolutePath['File'] = FileTypesAbsolutePath['File']
|
||||
|
||||
AllowedExtensions['Image'] = ['bmp','gif','jpeg','jpg','png']
|
||||
DeniedExtensions['Image'] = []
|
||||
FileTypesPath['Image'] = UserFilesPath + 'image/'
|
||||
FileTypesAbsolutePath['Image'] = (not UserFilesAbsolutePath == '') and UserFilesAbsolutePath + 'image/' or ''
|
||||
QuickUploadPath['Image'] = FileTypesPath['Image']
|
||||
QuickUploadAbsolutePath['Image']= FileTypesAbsolutePath['Image']
|
||||
|
||||
AllowedExtensions['Flash'] = ['swf','flv']
|
||||
DeniedExtensions['Flash'] = []
|
||||
FileTypesPath['Flash'] = UserFilesPath + 'flash/'
|
||||
FileTypesAbsolutePath['Flash'] = ( not UserFilesAbsolutePath == '') and UserFilesAbsolutePath + 'flash/' or ''
|
||||
QuickUploadPath['Flash'] = FileTypesPath['Flash']
|
||||
QuickUploadAbsolutePath['Flash']= FileTypesAbsolutePath['Flash']
|
||||
|
||||
AllowedExtensions['Media'] = ['aiff','asf','avi','bmp','fla', 'flv','gif','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','png','qt','ram','rm','rmi','rmvb','swf','tif','tiff','wav','wma','wmv']
|
||||
DeniedExtensions['Media'] = []
|
||||
FileTypesPath['Media'] = UserFilesPath + 'media/'
|
||||
FileTypesAbsolutePath['Media'] = ( not UserFilesAbsolutePath == '') and UserFilesAbsolutePath + 'media/' or ''
|
||||
QuickUploadPath['Media'] = FileTypesPath['Media']
|
||||
QuickUploadAbsolutePath['Media']= FileTypesAbsolutePath['Media']
|
||||
@ -1,121 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
|
||||
== BEGIN LICENSE ==
|
||||
|
||||
Licensed under the terms of any of the following licenses at your
|
||||
choice:
|
||||
|
||||
- GNU General Public License Version 2 or later (the "GPL")
|
||||
http://www.gnu.org/licenses/gpl.html
|
||||
|
||||
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
http://www.gnu.org/licenses/lgpl.html
|
||||
|
||||
- Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
|
||||
== END LICENSE ==
|
||||
|
||||
Connector for Python (CGI and WSGI).
|
||||
|
||||
See config.py for configuration settings
|
||||
|
||||
"""
|
||||
import os
|
||||
|
||||
from fckutil import *
|
||||
from fckcommands import * # default command's implementation
|
||||
from fckoutput import * # base http, xml and html output mixins
|
||||
from fckconnector import FCKeditorConnectorBase # import base connector
|
||||
import config as Config
|
||||
|
||||
class FCKeditorConnector( FCKeditorConnectorBase,
|
||||
GetFoldersCommandMixin,
|
||||
GetFoldersAndFilesCommandMixin,
|
||||
CreateFolderCommandMixin,
|
||||
UploadFileCommandMixin,
|
||||
BaseHttpMixin, BaseXmlMixin, BaseHtmlMixin ):
|
||||
"The Standard connector class."
|
||||
def doResponse(self):
|
||||
"Main function. Process the request, set headers and return a string as response."
|
||||
s = ""
|
||||
# Check if this connector is disabled
|
||||
if not(Config.Enabled):
|
||||
return self.sendError(1, "This connector is disabled. Please check the connector configurations in \"editor/filemanager/connectors/py/config.py\" and try again.")
|
||||
# Make sure we have valid inputs
|
||||
for key in ("Command","Type","CurrentFolder"):
|
||||
if not self.request.has_key (key):
|
||||
return
|
||||
# Get command, resource type and current folder
|
||||
command = self.request.get("Command")
|
||||
resourceType = self.request.get("Type")
|
||||
currentFolder = getCurrentFolder(self.request.get("CurrentFolder"))
|
||||
# Check for invalid paths
|
||||
if currentFolder is None:
|
||||
if (command == "FileUpload"):
|
||||
return self.sendUploadResults( errorNo = 102, customMsg = "" )
|
||||
else:
|
||||
return self.sendError(102, "")
|
||||
|
||||
# Check if it is an allowed command
|
||||
if ( not command in Config.ConfigAllowedCommands ):
|
||||
return self.sendError( 1, 'The %s command isn\'t allowed' % command )
|
||||
|
||||
if ( not resourceType in Config.ConfigAllowedTypes ):
|
||||
return self.sendError( 1, 'Invalid type specified' )
|
||||
|
||||
# Setup paths
|
||||
if command == "QuickUpload":
|
||||
self.userFilesFolder = Config.QuickUploadAbsolutePath[resourceType]
|
||||
self.webUserFilesFolder = Config.QuickUploadPath[resourceType]
|
||||
else:
|
||||
self.userFilesFolder = Config.FileTypesAbsolutePath[resourceType]
|
||||
self.webUserFilesFolder = Config.FileTypesPath[resourceType]
|
||||
|
||||
if not self.userFilesFolder: # no absolute path given (dangerous...)
|
||||
self.userFilesFolder = mapServerPath(self.environ,
|
||||
self.webUserFilesFolder)
|
||||
# Ensure that the directory exists.
|
||||
if not os.path.exists(self.userFilesFolder):
|
||||
try:
|
||||
self.createServerFolder( self.userFilesFolder )
|
||||
except:
|
||||
return self.sendError(1, "This connector couldn\'t access to local user\'s files directories. Please check the UserFilesAbsolutePath in \"editor/filemanager/connectors/py/config.py\" and try again. ")
|
||||
|
||||
# File upload doesn't have to return XML, so intercept here
|
||||
if (command == "FileUpload"):
|
||||
return self.uploadFile(resourceType, currentFolder)
|
||||
|
||||
# Create Url
|
||||
url = combinePaths( self.webUserFilesFolder, currentFolder )
|
||||
|
||||
# Begin XML
|
||||
s += self.createXmlHeader(command, resourceType, currentFolder, url)
|
||||
# Execute the command
|
||||
selector = {"GetFolders": self.getFolders,
|
||||
"GetFoldersAndFiles": self.getFoldersAndFiles,
|
||||
"CreateFolder": self.createFolder,
|
||||
}
|
||||
s += selector[command](resourceType, currentFolder)
|
||||
s += self.createXmlFooter()
|
||||
return s
|
||||
|
||||
# Running from command line (plain old CGI)
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
# Create a Connector Instance
|
||||
conn = FCKeditorConnector()
|
||||
data = conn.doResponse()
|
||||
for header in conn.headers:
|
||||
print '%s: %s' % header
|
||||
print
|
||||
print data
|
||||
except:
|
||||
print "Content-Type: text/plain"
|
||||
print
|
||||
import cgi
|
||||
cgi.print_exception()
|
||||
@ -1,202 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
|
||||
== BEGIN LICENSE ==
|
||||
|
||||
Licensed under the terms of any of the following licenses at your
|
||||
choice:
|
||||
|
||||
- GNU General Public License Version 2 or later (the "GPL")
|
||||
http://www.gnu.org/licenses/gpl.html
|
||||
|
||||
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
http://www.gnu.org/licenses/lgpl.html
|
||||
|
||||
- Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
|
||||
== END LICENSE ==
|
||||
|
||||
Connector for Python (CGI and WSGI).
|
||||
|
||||
"""
|
||||
|
||||
import os
|
||||
try: # Windows needs stdio set for binary mode for file upload to work.
|
||||
import msvcrt
|
||||
msvcrt.setmode (0, os.O_BINARY) # stdin = 0
|
||||
msvcrt.setmode (1, os.O_BINARY) # stdout = 1
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
from fckutil import *
|
||||
from fckoutput import *
|
||||
import config as Config
|
||||
|
||||
class GetFoldersCommandMixin (object):
|
||||
def getFolders(self, resourceType, currentFolder):
|
||||
"""
|
||||
Purpose: command to recieve a list of folders
|
||||
"""
|
||||
# Map the virtual path to our local server
|
||||
serverPath = mapServerFolder(self.userFilesFolder,currentFolder)
|
||||
s = """<Folders>""" # Open the folders node
|
||||
for someObject in os.listdir(serverPath):
|
||||
someObjectPath = mapServerFolder(serverPath, someObject)
|
||||
if os.path.isdir(someObjectPath):
|
||||
s += """<Folder name="%s" />""" % (
|
||||
convertToXmlAttribute(someObject)
|
||||
)
|
||||
s += """</Folders>""" # Close the folders node
|
||||
return s
|
||||
|
||||
class GetFoldersAndFilesCommandMixin (object):
|
||||
def getFoldersAndFiles(self, resourceType, currentFolder):
|
||||
"""
|
||||
Purpose: command to recieve a list of folders and files
|
||||
"""
|
||||
# Map the virtual path to our local server
|
||||
serverPath = mapServerFolder(self.userFilesFolder,currentFolder)
|
||||
# Open the folders / files node
|
||||
folders = """<Folders>"""
|
||||
files = """<Files>"""
|
||||
for someObject in os.listdir(serverPath):
|
||||
someObjectPath = mapServerFolder(serverPath, someObject)
|
||||
if os.path.isdir(someObjectPath):
|
||||
folders += """<Folder name="%s" />""" % (
|
||||
convertToXmlAttribute(someObject)
|
||||
)
|
||||
elif os.path.isfile(someObjectPath):
|
||||
size = os.path.getsize(someObjectPath)
|
||||
if size > 0:
|
||||
size = round(size/1024)
|
||||
if size < 1:
|
||||
size = 1
|
||||
files += """<File name="%s" size="%d" />""" % (
|
||||
convertToXmlAttribute(someObject),
|
||||
size
|
||||
)
|
||||
# Close the folders / files node
|
||||
folders += """</Folders>"""
|
||||
files += """</Files>"""
|
||||
return folders + files
|
||||
|
||||
class CreateFolderCommandMixin (object):
|
||||
def createFolder(self, resourceType, currentFolder):
|
||||
"""
|
||||
Purpose: command to create a new folder
|
||||
"""
|
||||
errorNo = 0; errorMsg ='';
|
||||
if self.request.has_key("NewFolderName"):
|
||||
newFolder = self.request.get("NewFolderName", None)
|
||||
newFolder = sanitizeFolderName (newFolder)
|
||||
try:
|
||||
newFolderPath = mapServerFolder(self.userFilesFolder, combinePaths(currentFolder, newFolder))
|
||||
self.createServerFolder(newFolderPath)
|
||||
except Exception, e:
|
||||
errorMsg = str(e).decode('iso-8859-1').encode('utf-8') # warning with encodigns!!!
|
||||
if hasattr(e,'errno'):
|
||||
if e.errno==17: #file already exists
|
||||
errorNo=0
|
||||
elif e.errno==13: # permission denied
|
||||
errorNo = 103
|
||||
elif e.errno==36 or e.errno==2 or e.errno==22: # filename too long / no such file / invalid name
|
||||
errorNo = 102
|
||||
else:
|
||||
errorNo = 110
|
||||
else:
|
||||
errorNo = 102
|
||||
return self.sendErrorNode ( errorNo, errorMsg )
|
||||
|
||||
def createServerFolder(self, folderPath):
|
||||
"Purpose: physically creates a folder on the server"
|
||||
# No need to check if the parent exists, just create all hierachy
|
||||
|
||||
try:
|
||||
permissions = Config.ChmodOnFolderCreate
|
||||
if not permissions:
|
||||
os.makedirs(folderPath)
|
||||
except AttributeError: #ChmodOnFolderCreate undefined
|
||||
permissions = 0755
|
||||
|
||||
if permissions:
|
||||
oldumask = os.umask(0)
|
||||
os.makedirs(folderPath,mode=0755)
|
||||
os.umask( oldumask )
|
||||
|
||||
class UploadFileCommandMixin (object):
|
||||
def uploadFile(self, resourceType, currentFolder):
|
||||
"""
|
||||
Purpose: command to upload files to server (same as FileUpload)
|
||||
"""
|
||||
errorNo = 0
|
||||
if self.request.has_key("NewFile"):
|
||||
# newFile has all the contents we need
|
||||
newFile = self.request.get("NewFile", "")
|
||||
# Get the file name
|
||||
newFileName = newFile.filename
|
||||
newFileName = sanitizeFileName( newFileName )
|
||||
newFileNameOnly = removeExtension(newFileName)
|
||||
newFileExtension = getExtension(newFileName).lower()
|
||||
allowedExtensions = Config.AllowedExtensions[resourceType]
|
||||
deniedExtensions = Config.DeniedExtensions[resourceType]
|
||||
|
||||
if (allowedExtensions):
|
||||
# Check for allowed
|
||||
isAllowed = False
|
||||
if (newFileExtension in allowedExtensions):
|
||||
isAllowed = True
|
||||
elif (deniedExtensions):
|
||||
# Check for denied
|
||||
isAllowed = True
|
||||
if (newFileExtension in deniedExtensions):
|
||||
isAllowed = False
|
||||
else:
|
||||
# No extension limitations
|
||||
isAllowed = True
|
||||
|
||||
if (isAllowed):
|
||||
# Upload to operating system
|
||||
# Map the virtual path to the local server path
|
||||
currentFolderPath = mapServerFolder(self.userFilesFolder, currentFolder)
|
||||
i = 0
|
||||
while (True):
|
||||
newFilePath = os.path.join (currentFolderPath,newFileName)
|
||||
if os.path.exists(newFilePath):
|
||||
i += 1
|
||||
newFileName = "%s(%d).%s" % (
|
||||
newFileNameOnly, i, newFileExtension
|
||||
)
|
||||
errorNo= 201 # file renamed
|
||||
else:
|
||||
# Read file contents and write to the desired path (similar to php's move_uploaded_file)
|
||||
fout = file(newFilePath, 'wb')
|
||||
while (True):
|
||||
chunk = newFile.file.read(100000)
|
||||
if not chunk: break
|
||||
fout.write (chunk)
|
||||
fout.close()
|
||||
|
||||
if os.path.exists ( newFilePath ):
|
||||
doChmod = False
|
||||
try:
|
||||
doChmod = Config.ChmodOnUpload
|
||||
permissions = Config.ChmodOnUpload
|
||||
except AttributeError: #ChmodOnUpload undefined
|
||||
doChmod = True
|
||||
permissions = 0755
|
||||
if ( doChmod ):
|
||||
oldumask = os.umask(0)
|
||||
os.chmod( newFilePath, permissions )
|
||||
os.umask( oldumask )
|
||||
|
||||
newFileUrl = combinePaths(self.webUserFilesFolder, currentFolder) + newFileName
|
||||
|
||||
return self.sendUploadResults( errorNo , newFileUrl, newFileName )
|
||||
else:
|
||||
return self.sendUploadResults( errorNo = 202, customMsg = "" )
|
||||
else:
|
||||
return self.sendUploadResults( errorNo = 202, customMsg = "No File" )
|
||||
@ -1,90 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
|
||||
== BEGIN LICENSE ==
|
||||
|
||||
Licensed under the terms of any of the following licenses at your
|
||||
choice:
|
||||
|
||||
- GNU General Public License Version 2 or later (the "GPL")
|
||||
http://www.gnu.org/licenses/gpl.html
|
||||
|
||||
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
http://www.gnu.org/licenses/lgpl.html
|
||||
|
||||
- Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
|
||||
== END LICENSE ==
|
||||
|
||||
Base Connector for Python (CGI and WSGI).
|
||||
|
||||
See config.py for configuration settings
|
||||
|
||||
"""
|
||||
import cgi, os
|
||||
|
||||
from fckutil import *
|
||||
from fckcommands import * # default command's implementation
|
||||
from fckoutput import * # base http, xml and html output mixins
|
||||
import config as Config
|
||||
|
||||
class FCKeditorConnectorBase( object ):
|
||||
"The base connector class. Subclass it to extend functionality (see Zope example)"
|
||||
|
||||
def __init__(self, environ=None):
|
||||
"Constructor: Here you should parse request fields, initialize variables, etc."
|
||||
self.request = FCKeditorRequest(environ) # Parse request
|
||||
self.headers = [] # Clean Headers
|
||||
if environ:
|
||||
self.environ = environ
|
||||
else:
|
||||
self.environ = os.environ
|
||||
|
||||
# local functions
|
||||
|
||||
def setHeader(self, key, value):
|
||||
self.headers.append ((key, value))
|
||||
return
|
||||
|
||||
class FCKeditorRequest(object):
|
||||
"A wrapper around the request object"
|
||||
def __init__(self, environ):
|
||||
if environ: # WSGI
|
||||
self.request = cgi.FieldStorage(fp=environ['wsgi.input'],
|
||||
environ=environ,
|
||||
keep_blank_values=1)
|
||||
self.environ = environ
|
||||
else: # plain old cgi
|
||||
self.environ = os.environ
|
||||
self.request = cgi.FieldStorage()
|
||||
if 'REQUEST_METHOD' in self.environ and 'QUERY_STRING' in self.environ:
|
||||
if self.environ['REQUEST_METHOD'].upper()=='POST':
|
||||
# we are in a POST, but GET query_string exists
|
||||
# cgi parses by default POST data, so parse GET QUERY_STRING too
|
||||
self.get_request = cgi.FieldStorage(fp=None,
|
||||
environ={
|
||||
'REQUEST_METHOD':'GET',
|
||||
'QUERY_STRING':self.environ['QUERY_STRING'],
|
||||
},
|
||||
)
|
||||
else:
|
||||
self.get_request={}
|
||||
|
||||
def has_key(self, key):
|
||||
return self.request.has_key(key) or self.get_request.has_key(key)
|
||||
|
||||
def get(self, key, default=None):
|
||||
if key in self.request.keys():
|
||||
field = self.request[key]
|
||||
elif key in self.get_request.keys():
|
||||
field = self.get_request[key]
|
||||
else:
|
||||
return default
|
||||
if hasattr(field,"filename") and field.filename: #file upload, do not convert return value
|
||||
return field
|
||||
else:
|
||||
return field.value
|
||||
@ -1,119 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
|
||||
== BEGIN LICENSE ==
|
||||
|
||||
Licensed under the terms of any of the following licenses at your
|
||||
choice:
|
||||
|
||||
- GNU General Public License Version 2 or later (the "GPL")
|
||||
http://www.gnu.org/licenses/gpl.html
|
||||
|
||||
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
http://www.gnu.org/licenses/lgpl.html
|
||||
|
||||
- Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
|
||||
== END LICENSE ==
|
||||
|
||||
Connector for Python (CGI and WSGI).
|
||||
|
||||
"""
|
||||
|
||||
from time import gmtime, strftime
|
||||
import string
|
||||
|
||||
def escape(text, replace=string.replace):
|
||||
"""
|
||||
Converts the special characters '<', '>', and '&'.
|
||||
|
||||
RFC 1866 specifies that these characters be represented
|
||||
in HTML as < > and & respectively. In Python
|
||||
1.5 we use the new string.replace() function for speed.
|
||||
"""
|
||||
text = replace(text, '&', '&') # must be done 1st
|
||||
text = replace(text, '<', '<')
|
||||
text = replace(text, '>', '>')
|
||||
text = replace(text, '"', '"')
|
||||
return text
|
||||
|
||||
def convertToXmlAttribute(value):
|
||||
if (value is None):
|
||||
value = ""
|
||||
return escape(value)
|
||||
|
||||
class BaseHttpMixin(object):
|
||||
def setHttpHeaders(self, content_type='text/xml'):
|
||||
"Purpose: to prepare the headers for the xml to return"
|
||||
# Prevent the browser from caching the result.
|
||||
# Date in the past
|
||||
self.setHeader('Expires','Mon, 26 Jul 1997 05:00:00 GMT')
|
||||
# always modified
|
||||
self.setHeader('Last-Modified',strftime("%a, %d %b %Y %H:%M:%S GMT", gmtime()))
|
||||
# HTTP/1.1
|
||||
self.setHeader('Cache-Control','no-store, no-cache, must-revalidate')
|
||||
self.setHeader('Cache-Control','post-check=0, pre-check=0')
|
||||
# HTTP/1.0
|
||||
self.setHeader('Pragma','no-cache')
|
||||
|
||||
# Set the response format.
|
||||
self.setHeader( 'Content-Type', content_type + '; charset=utf-8' )
|
||||
return
|
||||
|
||||
class BaseXmlMixin(object):
|
||||
def createXmlHeader(self, command, resourceType, currentFolder, url):
|
||||
"Purpose: returns the xml header"
|
||||
self.setHttpHeaders()
|
||||
# Create the XML document header
|
||||
s = """<?xml version="1.0" encoding="utf-8" ?>"""
|
||||
# Create the main connector node
|
||||
s += """<Connector command="%s" resourceType="%s">""" % (
|
||||
command,
|
||||
resourceType
|
||||
)
|
||||
# Add the current folder node
|
||||
s += """<CurrentFolder path="%s" url="%s" />""" % (
|
||||
convertToXmlAttribute(currentFolder),
|
||||
convertToXmlAttribute(url),
|
||||
)
|
||||
return s
|
||||
|
||||
def createXmlFooter(self):
|
||||
"Purpose: returns the xml footer"
|
||||
return """</Connector>"""
|
||||
|
||||
def sendError(self, number, text):
|
||||
"Purpose: in the event of an error, return an xml based error"
|
||||
self.setHttpHeaders()
|
||||
return ("""<?xml version="1.0" encoding="utf-8" ?>""" +
|
||||
"""<Connector>""" +
|
||||
self.sendErrorNode (number, text) +
|
||||
"""</Connector>""" )
|
||||
|
||||
def sendErrorNode(self, number, text):
|
||||
if number != 1:
|
||||
return """<Error number="%s" />""" % (number)
|
||||
else:
|
||||
return """<Error number="%s" text="%s" />""" % (number, convertToXmlAttribute(text))
|
||||
|
||||
class BaseHtmlMixin(object):
|
||||
def sendUploadResults( self, errorNo = 0, fileUrl = '', fileName = '', customMsg = '' ):
|
||||
self.setHttpHeaders("text/html")
|
||||
"This is the function that sends the results of the uploading process"
|
||||
|
||||
"Minified version of the document.domain automatic fix script (#1919)."
|
||||
"The original script can be found at _dev/domain_fix_template.js"
|
||||
return """<script type="text/javascript">
|
||||
(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
|
||||
|
||||
window.parent.OnUploadCompleted(%(errorNumber)s,"%(fileUrl)s","%(fileName)s","%(customMsg)s");
|
||||
</script>""" % {
|
||||
'errorNumber': errorNo,
|
||||
'fileUrl': fileUrl.replace ('"', '\\"'),
|
||||
'fileName': fileName.replace ( '"', '\\"' ) ,
|
||||
'customMsg': customMsg.replace ( '"', '\\"' ),
|
||||
}
|
||||
@ -1,130 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
|
||||
== BEGIN LICENSE ==
|
||||
|
||||
Licensed under the terms of any of the following licenses at your
|
||||
choice:
|
||||
|
||||
- GNU General Public License Version 2 or later (the "GPL")
|
||||
http://www.gnu.org/licenses/gpl.html
|
||||
|
||||
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
http://www.gnu.org/licenses/lgpl.html
|
||||
|
||||
- Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
|
||||
== END LICENSE ==
|
||||
|
||||
Utility functions for the File Manager Connector for Python
|
||||
|
||||
"""
|
||||
|
||||
import string, re
|
||||
import os
|
||||
import config as Config
|
||||
|
||||
# Generic manipulation functions
|
||||
|
||||
def removeExtension(fileName):
|
||||
index = fileName.rindex(".")
|
||||
newFileName = fileName[0:index]
|
||||
return newFileName
|
||||
|
||||
def getExtension(fileName):
|
||||
index = fileName.rindex(".") + 1
|
||||
fileExtension = fileName[index:]
|
||||
return fileExtension
|
||||
|
||||
def removeFromStart(string, char):
|
||||
return string.lstrip(char)
|
||||
|
||||
def removeFromEnd(string, char):
|
||||
return string.rstrip(char)
|
||||
|
||||
# Path functions
|
||||
|
||||
def combinePaths( basePath, folder ):
|
||||
return removeFromEnd( basePath, '/' ) + '/' + removeFromStart( folder, '/' )
|
||||
|
||||
def getFileName(filename):
|
||||
" Purpose: helper function to extrapolate the filename "
|
||||
for splitChar in ["/", "\\"]:
|
||||
array = filename.split(splitChar)
|
||||
if (len(array) > 1):
|
||||
filename = array[-1]
|
||||
return filename
|
||||
|
||||
def sanitizeFolderName( newFolderName ):
|
||||
"Do a cleanup of the folder name to avoid possible problems"
|
||||
# Remove . \ / | : ? * " < > and control characters
|
||||
return re.sub( '\\.|\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[\x00-\x1f\x7f-\x9f]', '_', newFolderName )
|
||||
|
||||
def sanitizeFileName( newFileName ):
|
||||
"Do a cleanup of the file name to avoid possible problems"
|
||||
# Replace dots in the name with underscores (only one dot can be there... security issue).
|
||||
if ( Config.ForceSingleExtension ): # remove dots
|
||||
newFileName = re.sub ( '\\.(?![^.]*$)', '_', newFileName ) ;
|
||||
newFileName = newFileName.replace('\\','/') # convert windows to unix path
|
||||
newFileName = os.path.basename (newFileName) # strip directories
|
||||
# Remove \ / | : ? *
|
||||
return re.sub ( '\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[\x00-\x1f\x7f-\x9f]/', '_', newFileName )
|
||||
|
||||
def getCurrentFolder(currentFolder):
|
||||
if not currentFolder:
|
||||
currentFolder = '/'
|
||||
|
||||
# Check the current folder syntax (must begin and end with a slash).
|
||||
if (currentFolder[-1] <> "/"):
|
||||
currentFolder += "/"
|
||||
if (currentFolder[0] <> "/"):
|
||||
currentFolder = "/" + currentFolder
|
||||
|
||||
# Ensure the folder path has no double-slashes
|
||||
while '//' in currentFolder:
|
||||
currentFolder = currentFolder.replace('//','/')
|
||||
|
||||
# Check for invalid folder paths (..)
|
||||
if '..' in currentFolder or '\\' in currentFolder:
|
||||
return None
|
||||
|
||||
# Check for invalid folder paths (..)
|
||||
if re.search( '(/\\.)|(//)|([\\\\:\\*\\?\\""\\<\\>\\|]|[\x00-\x1F]|[\x7f-\x9f])', currentFolder ):
|
||||
return None
|
||||
|
||||
return currentFolder
|
||||
|
||||
def mapServerPath( environ, url):
|
||||
" Emulate the asp Server.mapPath function. Given an url path return the physical directory that it corresponds to "
|
||||
# This isn't correct but for the moment there's no other solution
|
||||
# If this script is under a virtual directory or symlink it will detect the problem and stop
|
||||
return combinePaths( getRootPath(environ), url )
|
||||
|
||||
def mapServerFolder(resourceTypePath, folderPath):
|
||||
return combinePaths ( resourceTypePath , folderPath )
|
||||
|
||||
def getRootPath(environ):
|
||||
"Purpose: returns the root path on the server"
|
||||
# WARNING: this may not be thread safe, and doesn't work w/ VirtualServer/mod_python
|
||||
# Use Config.UserFilesAbsolutePath instead
|
||||
|
||||
if environ.has_key('DOCUMENT_ROOT'):
|
||||
return environ['DOCUMENT_ROOT']
|
||||
else:
|
||||
realPath = os.path.realpath( './' )
|
||||
selfPath = environ['SCRIPT_FILENAME']
|
||||
selfPath = selfPath [ : selfPath.rfind( '/' ) ]
|
||||
selfPath = selfPath.replace( '/', os.path.sep)
|
||||
|
||||
position = realPath.find(selfPath)
|
||||
|
||||
# This can check only that this script isn't run from a virtual dir
|
||||
# But it avoids the problems that arise if it isn't checked
|
||||
raise realPath
|
||||
if ( position < 0 or position <> len(realPath) - len(selfPath) or realPath[ : position ]==''):
|
||||
raise Exception('Sorry, can\'t map "UserFilesPath" to a physical path. You must set the "UserFilesAbsolutePath" value in "editor/filemanager/connectors/py/config.py".')
|
||||
return realPath[ : position ]
|
||||
@ -1,23 +0,0 @@
|
||||
# replace the name of this file to .htaccess (if using apache),
|
||||
# and set the proper options and paths according your enviroment
|
||||
|
||||
Allow from all
|
||||
|
||||
# If using mod_python uncomment this:
|
||||
PythonPath "[r'C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\fckeditor\editor\filemanager\connectors\py'] + sys.path"
|
||||
|
||||
|
||||
# Recomended: WSGI application running with mod_python and modpython_gateway
|
||||
SetHandler python-program
|
||||
PythonHandler modpython_gateway::handler
|
||||
PythonOption wsgi.application wsgi::App
|
||||
|
||||
|
||||
# Emulated CGI with mod_python and cgihandler
|
||||
#AddHandler mod_python .py
|
||||
#PythonHandler mod_python.cgihandler
|
||||
|
||||
|
||||
# Plain old CGI
|
||||
#Options +ExecCGI
|
||||
#AddHandler cgi-script py
|
||||
@ -1,88 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
|
||||
== BEGIN LICENSE ==
|
||||
|
||||
Licensed under the terms of any of the following licenses at your
|
||||
choice:
|
||||
|
||||
- GNU General Public License Version 2 or later (the "GPL")
|
||||
http://www.gnu.org/licenses/gpl.html
|
||||
|
||||
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
http://www.gnu.org/licenses/lgpl.html
|
||||
|
||||
- Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
|
||||
== END LICENSE ==
|
||||
|
||||
This is the "File Uploader" for Python
|
||||
|
||||
"""
|
||||
import os
|
||||
|
||||
from fckutil import *
|
||||
from fckcommands import * # default command's implementation
|
||||
from fckconnector import FCKeditorConnectorBase # import base connector
|
||||
import config as Config
|
||||
|
||||
class FCKeditorQuickUpload( FCKeditorConnectorBase,
|
||||
UploadFileCommandMixin,
|
||||
BaseHttpMixin, BaseHtmlMixin):
|
||||
def doResponse(self):
|
||||
"Main function. Process the request, set headers and return a string as response."
|
||||
# Check if this connector is disabled
|
||||
if not(Config.Enabled):
|
||||
return self.sendUploadResults(1, "This file uploader is disabled. Please check the \"editor/filemanager/connectors/py/config.py\"")
|
||||
command = 'QuickUpload'
|
||||
# The file type (from the QueryString, by default 'File').
|
||||
resourceType = self.request.get('Type','File')
|
||||
currentFolder = "/"
|
||||
# Check for invalid paths
|
||||
if currentFolder is None:
|
||||
return self.sendUploadResults(102, '', '', "")
|
||||
|
||||
# Check if it is an allowed command
|
||||
if ( not command in Config.ConfigAllowedCommands ):
|
||||
return self.sendUploadResults( 1, '', '', 'The %s command isn\'t allowed' % command )
|
||||
|
||||
if ( not resourceType in Config.ConfigAllowedTypes ):
|
||||
return self.sendUploadResults( 1, '', '', 'Invalid type specified' )
|
||||
|
||||
# Setup paths
|
||||
self.userFilesFolder = Config.QuickUploadAbsolutePath[resourceType]
|
||||
self.webUserFilesFolder = Config.QuickUploadPath[resourceType]
|
||||
if not self.userFilesFolder: # no absolute path given (dangerous...)
|
||||
self.userFilesFolder = mapServerPath(self.environ,
|
||||
self.webUserFilesFolder)
|
||||
|
||||
# Ensure that the directory exists.
|
||||
if not os.path.exists(self.userFilesFolder):
|
||||
try:
|
||||
self.createServerFoldercreateServerFolder( self.userFilesFolder )
|
||||
except:
|
||||
return self.sendError(1, "This connector couldn\'t access to local user\'s files directories. Please check the UserFilesAbsolutePath in \"editor/filemanager/connectors/py/config.py\" and try again. ")
|
||||
|
||||
# File upload doesn't have to return XML, so intercept here
|
||||
return self.uploadFile(resourceType, currentFolder)
|
||||
|
||||
# Running from command line (plain old CGI)
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
# Create a Connector Instance
|
||||
conn = FCKeditorQuickUpload()
|
||||
data = conn.doResponse()
|
||||
for header in conn.headers:
|
||||
if not header is None:
|
||||
print '%s: %s' % header
|
||||
print
|
||||
print data
|
||||
except:
|
||||
print "Content-Type: text/plain"
|
||||
print
|
||||
import cgi
|
||||
cgi.print_exception()
|
||||
@ -1,58 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||
Copyright (C) 2003-2010 Frederico Caldeira Knabben
|
||||
|
||||
== BEGIN LICENSE ==
|
||||
|
||||
Licensed under the terms of any of the following licenses at your
|
||||
choice:
|
||||
|
||||
- GNU General Public License Version 2 or later (the "GPL")
|
||||
http://www.gnu.org/licenses/gpl.html
|
||||
|
||||
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
http://www.gnu.org/licenses/lgpl.html
|
||||
|
||||
- Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
|
||||
== END LICENSE ==
|
||||
|
||||
Connector/QuickUpload for Python (WSGI wrapper).
|
||||
|
||||
See config.py for configuration settings
|
||||
|
||||
"""
|
||||
|
||||
from connector import FCKeditorConnector
|
||||
from upload import FCKeditorQuickUpload
|
||||
|
||||
import cgitb
|
||||
from cStringIO import StringIO
|
||||
|
||||
# Running from WSGI capable server (recomended)
|
||||
def App(environ, start_response):
|
||||
"WSGI entry point. Run the connector"
|
||||
if environ['SCRIPT_NAME'].endswith("connector.py"):
|
||||
conn = FCKeditorConnector(environ)
|
||||
elif environ['SCRIPT_NAME'].endswith("upload.py"):
|
||||
conn = FCKeditorQuickUpload(environ)
|
||||
else:
|
||||
start_response ("200 Ok", [('Content-Type','text/html')])
|
||||
yield "Unknown page requested: "
|
||||
yield environ['SCRIPT_NAME']
|
||||
return
|
||||
try:
|
||||
# run the connector
|
||||
data = conn.doResponse()
|
||||
# Start WSGI response:
|
||||
start_response ("200 Ok", conn.headers)
|
||||
# Send response text
|
||||
yield data
|
||||
except:
|
||||
start_response("500 Internal Server Error",[("Content-type","text/html")])
|
||||
file = StringIO()
|
||||
cgitb.Hook(file = file).handle()
|
||||
yield file.getvalue()
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user