letodms-3.4.2+dfsg/0000755000175000017500000000000012075023002014575 5ustar franciscofranciscoletodms-3.4.2+dfsg/delete_all_contents.sql0000644000175000017500000002050512040235101021324 0ustar franciscofrancisco-- this delete all the db content except users -- mysql -uroot -ppassword mydms < delete_all_contents.sql -- -- Table structure for table `tblACLs` -- DROP TABLE `tblACLs`; CREATE TABLE `tblACLs` ( `id` int(11) NOT NULL auto_increment, `target` int(11) NOT NULL default '0', `targetType` tinyint(4) NOT NULL default '0', `userID` int(11) NOT NULL default '-1', `groupID` int(11) NOT NULL default '-1', `mode` tinyint(4) NOT NULL default '0', PRIMARY KEY (`id`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentApproveLog` -- DROP TABLE `tblDocumentApproveLog`; CREATE TABLE `tblDocumentApproveLog` ( `approveLogID` int(11) NOT NULL auto_increment, `approveID` int(11) NOT NULL default '0', `status` tinyint(4) NOT NULL default '0', `comment` text NOT NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`approveLogID`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentApprovers` -- DROP TABLE `tblDocumentApprovers`; CREATE TABLE `tblDocumentApprovers` ( `approveID` int(11) NOT NULL auto_increment, `documentID` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL default '0', `type` tinyint(4) NOT NULL default '0', `required` int(11) NOT NULL default '0', PRIMARY KEY (`approveID`), UNIQUE KEY `documentID` (`documentID`,`version`,`type`,`required`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentContent` -- DROP TABLE `tblDocumentContent`; CREATE TABLE `tblDocumentContent` ( `document` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL auto_increment, `comment` text, `date` int(12) default NULL, `createdBy` int(11) default NULL, `dir` varchar(255) NOT NULL default '', `orgFileName` varchar(150) NOT NULL default '', `fileType` varchar(10) NOT NULL default '', `mimeType` varchar(70) NOT NULL default '', PRIMARY KEY (`document`,`version`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentLinks` -- DROP TABLE `tblDocumentLinks`; CREATE TABLE `tblDocumentLinks` ( `id` int(11) NOT NULL auto_increment, `document` int(11) NOT NULL default '0', `target` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', `public` tinyint(1) NOT NULL default '0', PRIMARY KEY (`id`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentFiles` -- DROP TABLE `tblDocumentFiles`; CREATE TABLE `tblDocumentFiles` ( `id` int(11) NOT NULL auto_increment, `document` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', `comment` text, `name` varchar(150) default NULL, `date` int(12) default NULL, `dir` varchar(255) NOT NULL default '', `orgFileName` varchar(150) NOT NULL default '', `fileType` varchar(10) NOT NULL default '', `mimeType` varchar(70) NOT NULL default '', PRIMARY KEY (`id`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentLocks` -- DROP TABLE `tblDocumentLocks`; CREATE TABLE `tblDocumentLocks` ( `document` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`document`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentReviewLog` -- DROP TABLE `tblDocumentReviewLog`; CREATE TABLE `tblDocumentReviewLog` ( `reviewLogID` int(11) NOT NULL auto_increment, `reviewID` int(11) NOT NULL default '0', `status` tinyint(4) NOT NULL default '0', `comment` text NOT NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`reviewLogID`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentReviewers` -- DROP TABLE `tblDocumentReviewers`; CREATE TABLE `tblDocumentReviewers` ( `reviewID` int(11) NOT NULL auto_increment, `documentID` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL default '0', `type` tinyint(4) NOT NULL default '0', `required` int(11) NOT NULL default '0', PRIMARY KEY (`reviewID`), UNIQUE KEY `documentID` (`documentID`,`version`,`type`,`required`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentStatus` -- DROP TABLE `tblDocumentStatus`; CREATE TABLE `tblDocumentStatus` ( `statusID` int(11) NOT NULL auto_increment, `documentID` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`statusID`), UNIQUE KEY `documentID` (`documentID`,`version`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentStatusLog` -- DROP TABLE `tblDocumentStatusLog`; CREATE TABLE `tblDocumentStatusLog` ( `statusLogID` int(11) NOT NULL auto_increment, `statusID` int(11) NOT NULL default '0', `status` tinyint(4) NOT NULL default '0', `comment` text NOT NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`statusLogID`), KEY `statusID` (`statusID`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblDocuments` -- DROP TABLE `tblDocuments`; CREATE TABLE `tblDocuments` ( `id` int(11) NOT NULL auto_increment, `name` varchar(150) default NULL, `comment` text, `date` int(12) default NULL, `expires` int(12) default NULL, `owner` int(11) default NULL, `folder` int(11) default NULL, `folderList` text NOT NULL, `inheritAccess` tinyint(1) NOT NULL default '1', `defaultAccess` tinyint(4) NOT NULL default '0', `locked` int(11) NOT NULL default '-1', `keywords` text NOT NULL, `sequence` double NOT NULL default '0', PRIMARY KEY (`id`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblFolders` -- DROP TABLE `tblFolders`; CREATE TABLE `tblFolders` ( `id` int(11) NOT NULL auto_increment, `name` varchar(70) default NULL, `parent` int(11) default NULL, `comment` text, `owner` int(11) default NULL, `inheritAccess` tinyint(1) NOT NULL default '1', `defaultAccess` tinyint(4) NOT NULL default '0', `sequence` double NOT NULL default '0', PRIMARY KEY (`id`), KEY `parent` (`parent`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblKeywordCategories` -- DROP TABLE `tblKeywordCategories`; CREATE TABLE `tblKeywordCategories` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL default '', `owner` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblKeywords` -- DROP TABLE `tblKeywords`; CREATE TABLE `tblKeywords` ( `id` int(11) NOT NULL auto_increment, `category` int(11) NOT NULL default '0', `keywords` text NOT NULL, PRIMARY KEY (`id`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblNotify` -- DROP TABLE `tblNotify`; CREATE TABLE `tblNotify` ( `target` int(11) NOT NULL default '0', `targetType` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '-1', `groupID` int(11) NOT NULL default '-1', PRIMARY KEY (`target`,`targetType`,`userID`,`groupID`) ) ; -- -------------------------------------------------------- -- -- Table structure for table `tblSessions` -- DROP TABLE `tblSessions`; CREATE TABLE `tblSessions` ( `id` varchar(50) NOT NULL default '', `userID` int(11) NOT NULL default '0', `lastAccess` int(11) NOT NULL default '0', `theme` varchar(30) NOT NULL default '', `language` varchar(30) NOT NULL default '', PRIMARY KEY (`id`) ) ; -- -------------------------------------------------------- -- -- Initial content for database -- INSERT INTO tblFolders VALUES (1, 'DMS', 0, 'DMS root', 1, 0, 2, 0); letodms-3.4.2+dfsg/CHANGELOG0000644000175000017500000013134512075012704016025 0ustar franciscofrancisco-------------------------------------------------------------------------------- Changes in version 3.4.2 -------------------------------------------------------------------------------- - fixed database update script (second trial) - fixed jumploader upload - updated dutch language file - fixed list on MyDocuments page -------------------------------------------------------------------------------- Changes in version 3.4.1 -------------------------------------------------------------------------------- - fixed database update script - check if full text index is available before added new document - minor translation settings -------------------------------------------------------------------------------- Changes in version 3.4.0 -------------------------------------------------------------------------------- - check for password strength - passwords can expire after a given number of days - prevent passwords from being reused - user can be disabled after n login failures - added autocompletion to document chooser - do not list documents in search result which cannot be accessed by the user - more database constraints and transaction management - documents, folders and document content can have user defined attributes - update of swedish language (Thanks to Thorsten M.) - update of french language (Thanks to Yves) -------------------------------------------------------------------------------- Changes in version 3.3.11 -------------------------------------------------------------------------------- - fixed output of status in full text search result - do not allow to insert categories with an empty name -------------------------------------------------------------------------------- Changes in version 3.3.10 -------------------------------------------------------------------------------- - fixed stupid error in addDocumentCategory -------------------------------------------------------------------------------- Changes in version 3.3.9 -------------------------------------------------------------------------------- - more security fixes for preventing XSS - minor fix in spanish translation - do not show document on mydocuments page twice -------------------------------------------------------------------------------- Changes in version 3.3.8 -------------------------------------------------------------------------------- - more security fixes for preventing CSRF, XSS and sql injection attacks - fixed search for special chars (e.g. german umlaute) in fulltext search -------------------------------------------------------------------------------- Changes in version 3.3.7 -------------------------------------------------------------------------------- - major security update which fixeѕ lots of possible XSS and CSRF attacks - comment is no longer needed when adding a user, email is now required (this time it is really changed) -------------------------------------------------------------------------------- Changes in version 3.3.6 -------------------------------------------------------------------------------- - fixed deletion of files over WebDAV for some clients - updated russian language - comment is no longer needed when adding a user, email is now required - added debug mode in DBAccess class - list of users/groups on 'Edit Access' page does not contain users/groups which are already on the acl - if a document/folder has access rights based on a group, then the highest access right will be used (not the one first assigned) - added configuration of path to stop words file - fixed creation of database dump file -------------------------------------------------------------------------------- Changes in version 3.3.5 -------------------------------------------------------------------------------- - extend the php include path with ADOdb path much earlier. This fixeѕ problems with Log.php if installed in the same as ADOdb. -------------------------------------------------------------------------------- Changes in version 3.3.4 -------------------------------------------------------------------------------- - fixed another issue of incorrect document access if masDirID != 0 - updated README - use common way to check for configuration file -------------------------------------------------------------------------------- Changes in version 3.3.3 -------------------------------------------------------------------------------- - fixed incorrect document access if masDirID != 0 - added swedish translation (thanks to Thorsten Michelfelder) -------------------------------------------------------------------------------- Changes in version 3.3.2 -------------------------------------------------------------------------------- - minor bugfixes -------------------------------------------------------------------------------- Changes in version 3.3.1 -------------------------------------------------------------------------------- - added missing check for access right in webdav server - update.sql creates table tblUserPasswordRequest - minor changes in language files - fixed link to login page on password forgotten page -------------------------------------------------------------------------------- Changes in version 3.3.0 -------------------------------------------------------------------------------- - all data is saved into the database without prior modification - smoother installation process with less manual interaction - support multi level content directory to overcome the limitations of recent filesystems - better approval/review workflow - do not allow any operation on a document if is locked (unless you are the owner) - searching for folders (run the new consistency check function!) - initial consistency check of database with repair function - group managers are allowed to remove and delete users from their group - withdraw rights from a group if the group access is set to none - added password forgotten function -------------------------------------------------------------------------------- Changes in version 3.2.2 -------------------------------------------------------------------------------- - fixed unallowed access on documents and folders -------------------------------------------------------------------------------- Changes in version 3.2.1 -------------------------------------------------------------------------------- - large file upload with jumploader can be turned off -------------------------------------------------------------------------------- Changes in version 3.2.0 -------------------------------------------------------------------------------- - select keywords from list in advanced search form - support for full text index lucene - much better support for uploading several files at once and huge files - put configuration into xml file - added installation script -------------------------------------------------------------------------------- Changes in version 3.0.1 -------------------------------------------------------------------------------- - Fixed license in package.xml - Removed some php short tags - updated czech translation (Thanks to Radek Žufan Tichý ) - do not ask for a filename if _strictFormCheck is set to false - do not erase file selection fields if a new document is added - fixed problems with expiry system -------------------------------------------------------------------------------- Changes in version 3.0.0 -------------------------------------------------------------------------------- Major reorganisation of code Split LetoDMS into a core module, webdav server, and the known web application -------------------------------------------------------------------------------- Changes in version 2.0.1 -------------------------------------------------------------------------------- ADDED A GRAPHIC LOGO The user can personalize it changing the image in styles/logo.png Reviewed the style to accomplish with the logo New settings' flag "_expandFolderTree" to start with the navigation tree hidden, expanded or expanded at the first level The tree status (hide/show) will be preserved through folder actions The witdh of open/closed tree can be defined using CSS (in "clean" CSS style "tree-open" and "tree-closed" ) DIFFERENT COMMENTS FOR DOCUMENT AND VERSION Creating a document user can insert a different comment for version and for entire document. If the version comment is leaved empty the document comment will be used for both Added a warning about the maximum upload file size in the upload pages (add document and add files). The size is a server setting and does not depend by letoDMS Better allignment in the view document page (Thanks to alekseyn). Better allignment in the view document version page. Note: the allignement is simply suggested setting width in table columns, thus can be modified by very long strings. Now checking none between keywords,name and comment in search form means searching all. That's a more logical way (same as behaviour of status checks) Added a settings var for default calendar view (week,month or year) Simplified the "Related documents" table: now the public yes/no is visible only to the user tha can edit it Removed a small bug with calendar function inclusion (thanks to c8900219) Bugfixed the control of empty document names (thanks to turkeburgr) Fixed a compatiblity bug in log management page (removed the unused readlink function) Restyled the warnings appearance in clean style Fixed a bug with empty vars on user management Fixed a small bug when trying to download deleted files from folder view Fixed a smal bug with logging on version removing (Thanks to larppaxyz) Reviewed print css according to folder tree and logo In print view the status was hide by css. Fixed EXPERIMENTAL: review the LDAP autentication by Doudoux. The old code is leaved commented in op.Login.php and in inc.Settings.php. the submit review/approval has moved in the reviewer/approvers list -------------------------------------------------------------------------------- Changes in version 2.0.0 -------------------------------------------------------------------------------- ADDED MULTIPLE DOCUMENT INCLUSION in "Add document" page there's a new switch to add multiple files for every file a new document will be created in the folder the size limit depends on server settings if multiple file are added: - the file name is used to name the document - expiration, reviewers, approvers, comment, etc will be the same for every document ADDED HUMAN-READABLE OPTION ON ARCHIVE CREATION: with a flag in the "archive creation" tool the archive can be created using DMS paths and original file names. The archive contains only the last version of every file. Clearly a human readable archive cannot be used to restore a server backup but they are handyer for external uses. ADDED A SIDEBAR WITH TREE VIEW on the folder browsing the feature is optional an there's a new settings flag var $_enableFolderTree = true; The sidebar shows only folders (a complete tree wich includes document would be very heavy on most installation) ADDED A SHARED CALENDAR for DMS users - there'a new menu item ("calendar") to access the calendar - the starting view is current week - calendar has 3 view : year, month and week - every event has start/end time (only date), user, creation and date, name and comment - no hour/minute management (is not intent as personal/daily calendar) - events can be added and viewed by everyone (are public) - the event can be edit and delete by the user who insert it or by administrators - the feature is optional (can be deactivated in inc.Settings) ADDED A SIMPLE DB DUMP UTILITY in the Admin-Tools/Backup tools - the feature should complete the backup utilities toolkit - THE DB DUMP IS EXPERIMENTAL AND MUST BE TESTED WITH YOUR DB - The created will require an empty existing db to restore data (content only) IMPROVED THE DOCUMENT SEARCH FOR DOCUMENT STATUS now one can search all document rejected, expired, obsolete, ecc. reordered and restyled search form and result list Beautyfied e-mail messages The document expiration date (if any) is now showed near the status lined up the reviewer approvers table in view document and document details fixed a bug with group notify list administration reverse alphabetical order (newer first) for log list, backup list, dump list minor bugfix in versioning file creation/notification list editing added confirmation page for user/group deletion improve some log lines in user/group management minor bugfix in myDocuments view Now when editing a user the password can be leaved unchanged (if nothing is inserted the password will not be changed) Completed (not translated) some languages files fixed some bug with user deletion (there were some tables not updated) Fixed a bug with the time picker improved the folder chooser dialog Now the "view on line" works regardless to the case of the extension string (the extension can be upper, lower or mixed case) Same bugfix for the icon used in folder/document view Removed the javascript hide/show for reviewers/approvers list (buggy with some browser) Resolved a bug with hidden user flag Improved the log view page Reordered document action casistics (lock/unlock, permissiones, ecc.) Removed the js source folder and file (not used) Added new features description to the on-line help On update operation the mandatory users/reviwers where not used: fixed Bugfix again on View online function Bugfix in personal keyword list editing Removed a lot of php notice (viable only on some servers with php Notice enabled) Removed a bug with direcotry creation and safe_mod activated Reordered the theme folders Fixed a not define accessmode in document chooser -------------------------------------------------------------------------------- Changes in version 1.9 -------------------------------------------------------------------------------- This is a first major release with a lot of changes, then some new features can contain new bugs. The DB require a small change: update.sql is included in the folder UPDATE-v1.9 ADDED THE MANDATORY REVIEWERS AND APPROVERS LIST (per user): Administrator can associate to every user one or more users as mandatory reviewer/approver. Every document inserted by that user will be forced to be reviewed/approved by the users in that list. Note that if document is not readable by the mandatory approver/reviewer then the appoval/review will not be required (for example will not be required for private documents). ADDED A LOGGING SYSTEM: - works with plain files - administrator tools includes a page to view/download/delete log files - log files are rotated with a time parameter in settings ($_logFileRotation) The logging system is an experimental feature and must be carefully tested in large multiuser environments. There are two new parameters in inc.Settings to enable. USERS CAN NOW BE HIDDEN FROM USERS LISTS viewed by all (there's a "hide" checkbox in user manager page) this function works with the "user view" list shown to all users clearly if "$_enableUsersView = false" in configuration the option is useless Restyled and improve the notify management: - the new personal administration is included in "myAccount" menu of every user - ADDED RECURSIVE INCLUSION (folder with all subfolders and/or all documents) Viewonline now works (but should be tested again with different platforms) Owner of a document is now emailed if someone else rename/move/update the document When a document is reviewed/approved the mail is now correclty sent to the document updater (the user who update the version) not necessarly to the owner. ADDED SWITCH BETWEEN ALPHABETICAL OR ORIGINAL ORDER in the folder view clicking on the "name" column header The archive includes an older version of adodb working with MySQL-4 The downloadable text file with versioning infos is now updated immediatly before download Bugfixed the create_table.sql Removed a bug in english language file Removed last references to the old name "myDMS" Restyled and improved the "backup tools" page Bugfixed the datechooser (was limited to 2010) ADDED THE EDITABLE "MANAGER" FLAG TO GROUP MEMBER now one (or more) user can be flagged as "manager" group member Currently group notification are editable only by group managers but the flag will be required for future use IMPROVED THE GROUP/USER MANAGEMENT PAGES - operation are ordered in a more clear way - the "add new" operation uses the hide/show javascript - now the page refresh immediatly when new data are saved Restyled and improve the "edit access permission" pages Improved the keyword category editing - operation are ordered in a more clear way - the "add new" operation uses the hide/show javascript - now the page refresh immediatly when new data are saved - the keyword category operation has been removed from administration personal account menu (the operation has gone in administration tool's menu because administrator edits the global keywords categories) Improved Keword chooser Added quick installation instruction on the README file THE USER IMAGES ARE NOW OPTIONAL (the implementation is poor and doesn't work on every system, then can be disabled) ------------------------------------------------------------------- Changes in version 1.8.3 ------------------------------------------------------------------- Improved portuguese (thanks to Pedro.broggini), slovak (thanks to deb00t) and german (thanks to Vault) languages translations. Resolved some minor bugs (undefined variables) in inc.Class document and inc.ClassUI Bugfixed UPDATE script - added update instruction in README file Resolved a bug on ViewOnline feature (thanks to doudoux) ------------------------------------------------------------------- Changes in version 1.8.2 ------------------------------------------------------------------- The link in revision/approval request email now is for the ViewDocument Fix a bug in big backup file creation Review ad reorganized the ViewFolder page: removed Reviewers/Approvers list and added directory contents (file and subfolder count) and comments Added directory dimension and content in out.Statistics Now thwe initial version number of a new document can be set (you can start a document with a version > 1) Some mail are corrected The various input field has been enlarged (using clean style) ------------------------------------------------------------------- Changes in version 1.8.1 ------------------------------------------------------------------- REDESIGNED THE ORGANIZATION OF DATA FOLDER Now the data folder (where files are located) has a more efficient organization: data_dir / id / version.filetype This scheme makes backups much more intuitive (the folder name corresponds to the id of the document, all versions and attached files are in the same folder. - Removed no longer needed tdbDirPath and tdlPathList - Removed no longer needed free path lookup functions - Modified sql create_tables.sql for changes to the DB in accordance with the new organization WARNING: This change makes the version incompatible with existing archives/DB but is required by the all thennew features (read ahead) The "UPDATE" folder contais two script for updating existing installations To update an existing archive: - Backup all (including DB) - Install the new DMS version - Install the "UPDATE" folder containing two files update.php and update.sql - Log in as administrator - Manually invoke the script (http://indirizzo/UPDATE/update.php - Remove the folder "UPDATE" If everything works well the old content has ben renamed "old" and can be removed (eg via ftp) ADDITIONAL FILES Added the ability to upload additional files associated to a document (as attachments) these files are not versioned and are designed as accessories to the document (Eg the PDF version or reductions in the image). The files are associated with the document, not to version. NOTE: To add attachments the user must have write permission on the document The attachment can be removed by the user who added it or having total permissions BACKUP Added some useful tools for backing up files and folders (real files, not the DB). Especially useful for working with entire folders which, being virtual, can not easily be backupped via ftp. There are three operations designed to be eventually applied in sequence. Data Backup versioning: Create for each document in a DMS folder a file containing the main versioning informations This allows you to make backup copies of which also contain information from the DB. This is meant to be performed before the creation of an archive, After creating the file versioning file can be viewed from out.ViewDocument Creating Archives: Creates a tar.gz file containing all files related to a specific DMS folder. The file is created in settings->_contentDir The file is constructed so that it can be unpacked again in the settings->_contentDir to restore removed files. In the page is presented the list of existing backup files which you can downloaded or delete Deleting files: you can delete from the server all the files related to a specific DMS folder and all its subfolders. By doing this you can free space on the server without removing the version information saved in the database that will be available for regular consultation. Having a backup deleted files can easily be restored when needed. All backups operations can be performed on the entire archive or only on a DMS folder. All backups operations are accessible only to administrators. OTHER FEATURES Added the possibility to change a approval/review already done. The editing is possible at any moment only to the user who made it. The time is retained (so you can understand subsequent amendments). The document status is updated automatically following a change. The editing is only possible on the latest version of the document. If a document expire date is set editing is only possible within that time Added delete_all_contents script. Cleaning DB tool for test use Proper content of some e-mail Added general information to the statistic page: - No. of documents - No. of folders - No. of files in every document - Number of total files - Total size of the archive Fixed the view of system notify list The comments related to the update opration (versione comment) are now editable Adjusted out.DefaultKeywords now equal to out.UserDefaultKeyword Added function formatted_size (view size in Bytes / Kb / Mb / Gb) in inc.Utils and applied where necessary Fixed a bug on documents cancellation (was not removed the corresponding list of notification) The files in data folder can be removed without cause errors in the DMS. When a file is not effectively present in out.ViewDocument displays a warning "file removed" and, of course, is no longer given the option to download. This feature can be used to free up space on the server, removing old files, while leaving available the corresponding version information. Fixed the view in out.AddSubFolder.php (default font size) Added icons for openoffice.org mime-type Added icons for some types of extensions (bz, dot, docx, etc.). Added (in inc.settings) option to disable the user administrator as a reviewer / approver (not listed) Remove the untranslated instructions "die" (replaced by UI:: exitError) Proper control permissions for internal links (related document): - The guest user can not add links - Users without write permission can only add links private - Add link publici the user must have write permission - To cancel link should be the user that added or have permission to total ------------------------------------------------------------------- Changes in version 1.8 ------------------------------------------------------------------- The reviewer/approver can edit his review/approval after having submitted it. Only the user whom effectivly submitted the review/approval can edit it, even if he was required as group member. The document status will be updated autmatically according with the modified submission. The edit is possible only on the last version of a document (there's no reason to edit a old version). If expiration date is set the edit is possible (obviously) only within that date. Account menu has been reviewed. Two new pages containing general views of groups and users are integrated in the account menu. The feature can be disabled in inc.Settings.php. The email notification can be completely disabled in inc.Settings.php. Every users can leave empty his e-mail field to not receive e-mail even if strictFormCheck is on. Fix of two redirection bugs after deleting documents or folders. The notification list is now integrated in the myDocument page/menu. The general tree view has been enhance. Fix of some e-mail composition errors. Fix of some italian translation errors. The owner is no longer automatically added to the notification list of a document. The notification lists should not be modified automatically (if not required the notification are annoying) ------------------------------------------------------------------- Changes in version 1.7.3 ------------------------------------------------------------------- - removed vulnerability lang/theme at login (TODO: referuri in op.Login.php) - completed translation calls - a print css added - added "warning" and "error" styles - new css clean e hc (high contrast for visually impaired folks) - guest login must be default false - reorderer the first level menu - reordered personal document navigation - reorderd personal account navigation - out.info is now linked to administrator only and access protected - added permission control on root folder (no inheritance) - removed "remove" and "move" commands for root folder - reorganized permission pages - added disclaimer note (shown on every page) with setting flag and translation - where possible ALL the operation feedback are removed (where no errors the page return immedatly to the contents) - added and exitError function in ClassUI and review ALL pages to comply - syled the out.KeywordChooser page - deleted inc.OutUtils - deleted op.NotifyMailer (not used) - added a "legend" to out.Statistics ------------------------------------------------------------------- Changes in version 1.7.2 ------------------------------------------------------------------- - Style Sheet modifications to improve IE6 compatibility, contributed by Juan Lago (thanks Juan!). This fixes some placement issues with elements that have the position attribute set to "absolute". - The div elements that are used to clear floats have been fixed so that they have zero height in IE6. It is not enough to specify "height: 0"; one must also set "font-size:0" otherwise IE6 will set the height of the element to match the standard font size. - UI layout improvements. Various changes to the user interface to improve the page flow and allow for further expansion in the future. The context menu bar has been separated from the page heading into its own container underneath the title. It's a more logical place to present the menu, and will allow for the easy addition of further sub-headings in the future without compromising the page flow. - The last dependency on the original theme system has been eliminated with the introduction of updated chooser dialogues for selecting files and folders. These dialogues have the new themes and the code has been revamped, replacing the old table structures with unordered lists. - LDAP update. A minor change to the LDAP authentication code to allow for the use of URIs to identify the server name (e.g. ldaps://host.com). Also, the LDAP version is set to 3 in order to support secure connections. - New language translations for Czech and Slovak. Contributed by SF user helix84 (thanks!). ------------------------------------------------------------------- Changes in version 1.7.1 ------------------------------------------------------------------- - Re-vamped Notification system allows users to receive an email when a document or folder is changed. This is a new, event-based mechanism that notifies the user as soon as the change has been made and replaces the cron mechanism originally developed. Any user that has read access to a document or folder can subscribe to be notified of changes. Users that have been assigned as reviewers or approvers for a document are automatically added to the notification system for that document. A new page has been created for users to assist with the management of their notification subscriptions. This can be found in the "My Account" section under "Notification List". - The test used to identify HTTPS connections has been improved so that it correctly identifies IIS servers that have ISAPI enabled but are not using HTTPS protocol. ------------------------------------------------------------------- Changes in version 1.7.0 ------------------------------------------------------------------- - Fixes to CSS display bugs. Minor updates to the display. - Improved handling of character escape sequences. - Review / Approve dates added to folder views and search results. - New file system directory management code to accommodate limitations in the underlying filesystem which restrict the number of files that MyDMS can store. MyDMS now uses a nested directory structure to store files, rather than a flat one. However, note that individual files are still stored one per directory in order to preserve compatibility with older versions of MyDMS. For details of the problem and the solution implemented, please refer to: http://mydms.sf.net/2007/08/15/new-file-system-storage-structure/ - Hungarian translation. - And as a bonus, there is a Drupal theme compatible with MyDMS. ------------------------------------------------------------------- Changes in version 1.6.1 ------------------------------------------------------------------- - Theme and language choice are now saved as user attributes between sessions. Read update-1.6.1.txt for changes to database schema. - Link to document review / approval page from out.ViewDocument.php. - French translation. - Brazilian Portuguese translation. - Traditional Chinese translation. - Relaxation of criteria for selecting reviewers / approvers. Users now only require read access to be eligible reviewers or approvers. - Documents are now displayed in the correct sequence in the folder view. - Documents can be downloaded directly from the folder view by clicking their icon. - Document icons in the folder view now reflect the document type. - Empty passwords are not accepted, even when JS is disabled in the browser. - New restricted access mode rejects login from users who are not entered into the internal database, even if LDAP authentication was successful. ------------------------------------------------------------------- Changes in version 1.6.0 ------------------------------------------------------------------- - Introduction of a document workflow system that manages the life-cycle of a document, including review and approval stages. Details: Document Class: Created new methods: Document::addIndReviewer() Document::addGrpReviewer() Document::addIndApprover() Document::addGrpApprover() Changes to: Document::addContent() New Class: Email. out.AddDocument.php op.AddDocument.php Changes to allow selection of reviewers and approvers. Group Class: Changes to: Group::getUsers() -- query optimised New Methods: Group::getReviewStatus() Group::getApprovalStatus() User Class: New Methods: User::getReviewStatus() User::getApprovalStatus() Class Folder: Changes to: Folder::addDocument() -- accept reviewers, approvers as parameters. New Class: AddContentResultSet. Database: Document version field changed from TINYINT to unsigned SMALLINT throughout database. `tblGroupMembers`: `id` field removed as it is unnecessary. Created a primary of `groupID`, `userID`. DocumentContent Class: Created new methods: DocumentContent::getStatus() DocumentContent::getReviewStatus() DocumentContent::getApprovalStatus() DocumentContent::delIndReviewer() DocumentContent::delGrpReviewer() DocumentContent::delIndApprover() DocumentContent::delGrpApprover() out.ViewDocument.php op.ViewDocument.php Changes to incorporate display of workflow status. Links to allow user to change status of a document revision. out.UpdateDocument.php op.UpdateDocument.php Changes to allow selection of reviewers and approvers. out.Login.php op.Login.php redirect user to originally requested URL upon successful login. out.ReviewDocument.php op.ReviewDocument.php out.ApproveDocument.php op.ApproveDocument.php Created to enable users to review and approve documents. out.OverrideContentStatus.php op.OverrideContentStatus.php Allows document owner or site administrator to override the status of a document. out.SetReviewersApprovers.php op.SetReviewersApprovers.php Allows document owner or site administrator to re-assign reviewers and approvers to a document revision that is pending review or approval. out.ActionSummary.php Lists all the documents owned by current user that are pending review or approval. Lists all documents that are awaiting review or approval by the user. Search page now allows user to search for documents pending review or approval. Search results display overall document status. - Admin user cannot be deleted, and admin privilege cannot be removed from the admin user. Previously, both actions were possible. - Users can be assigned administrative privileges in the User Manager. - Deleting document revisions or the document itself notifies all affected users by email, deletes entries from all status logs. ------------------------------------------------------------------- Changes in version 1.5.1 ------------------------------------------------------------------- - Fixed a bug in the keyword editing code which was preventing users from adding default keywords into global keyword categories. ------------------------------------------------------------------- Changes in version 1.5.0 ------------------------------------------------------------------- - Optimised search. Improved the performance of the search function by placing more of the work on the database and by applying indexes to some of the tables. Sub-folder searches are also dramatically improved due to the incorporation of a folderList field in the tblDocuments table. - Optimised display. New compact theme significantly reduces the page load times. This is the default theme. The original is still available as a selection. - Changed file download headers such that downloading works with IE over SSL. - Changed all instances of $HTTP_COOKIES_VARS, which has been deprecated, to $_COOKIE. - Replaced all short open tags (all documents there should be two lists: one (the current) with the user's document, and another with the user's updated document (that's because one user could have updated a document not owned by himself) letodms-3.4.2+dfsg/drop-tables-innodb.sql0000644000175000017500000000264512040235101021005 0ustar franciscofranciscoDROP TABLE IF EXISTS `tblACLs`; DROP TABLE IF EXISTS `tblDocumentApproveLog`; DROP TABLE IF EXISTS `tblDocumentApprovers`; DROP TABLE IF EXISTS `tblDocumentReviewLog`; DROP TABLE IF EXISTS `tblDocumentReviewers`; DROP TABLE IF EXISTS `tblDocumentStatusLog`; DROP TABLE IF EXISTS `tblDocumentStatus`; DROP TABLE IF EXISTS `tblDocumentAttributes`; DROP TABLE IF EXISTS `tblDocumentContentAttributes`; DROP TABLE IF EXISTS `tblDocumentContent`; DROP TABLE IF EXISTS `tblDocumentLinks`; DROP TABLE IF EXISTS `tblDocumentFiles`; DROP TABLE IF EXISTS `tblDocumentLocks`; DROP TABLE IF EXISTS `tblDocumentCategory`; DROP TABLE IF EXISTS `tblDocuments`; DROP TABLE IF EXISTS `tblFolderAttributes`; DROP TABLE IF EXISTS `tblFolders`; DROP TABLE IF EXISTS `tblAttributeDefinitions`; DROP TABLE IF EXISTS `tblGroupMembers`; DROP TABLE IF EXISTS `tblGroups`; DROP TABLE IF EXISTS `tblKeywords`; DROP TABLE IF EXISTS `tblKeywordCategories`; DROP TABLE IF EXISTS `tblCategory`; DROP TABLE IF EXISTS `tblNotify`; DROP TABLE IF EXISTS `tblSessions`; DROP TABLE IF EXISTS `tblUserImages`; DROP TABLE IF EXISTS `tblUserPasswordRequest`; DROP TABLE IF EXISTS `tblUserPasswordHistory`; DROP TABLE IF EXISTS `tblUsers`; DROP TABLE IF EXISTS `tblDirPath`; DROP TABLE IF EXISTS `tblPathList`; DROP TABLE IF EXISTS `tblMandatoryReviewers`; DROP TABLE IF EXISTS `tblMandatoryApprovers`; DROP TABLE IF EXISTS `tblEvents`; DROP TABLE IF EXISTS `tblVersion`;letodms-3.4.2+dfsg/LICENSE0000644000175000017500000004362112040235101015605 0ustar franciscofrancisco GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy 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., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. letodms-3.4.2+dfsg/install/0000755000175000017500000000000012075022752016256 5ustar franciscofranciscoletodms-3.4.2+dfsg/install/create_tables-innodb.sql0000644000175000017500000004557512055211555023062 0ustar franciscofrancisco-- -- Table structure for table `tblACLs` -- CREATE TABLE `tblACLs` ( `id` int(11) NOT NULL auto_increment, `target` int(11) NOT NULL default '0', `targetType` tinyint(4) NOT NULL default '0', `userID` int(11) NOT NULL default '-1', `groupID` int(11) NOT NULL default '-1', `mode` tinyint(4) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblCategory` -- CREATE TABLE `tblCategory` ( `id` int(11) NOT NULL auto_increment, `name` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblAttributeDefinitions` -- CREATE TABLE `tblAttributeDefinitions` ( `id` int(11) NOT NULL auto_increment, `name` varchar(100) default NULL, `objtype` tinyint(4) NOT NULL default '0', `type` tinyint(4) NOT NULL default '0', `multiple` tinyint(4) NOT NULL default '0', `minvalues` int(11) NOT NULL default '0', `maxvalues` int(11) NOT NULL default '0', `valueset` text default NULL, UNIQUE(`name`), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblUsers` -- CREATE TABLE `tblUsers` ( `id` int(11) NOT NULL auto_increment, `login` varchar(50) default NULL, `pwd` varchar(50) default NULL, `fullName` varchar(100) default NULL, `email` varchar(70) default NULL, `language` varchar(32) NOT NULL, `theme` varchar(32) NOT NULL, `comment` text NOT NULL, `role` smallint(1) NOT NULL default '0', `hidden` smallint(1) NOT NULL default '0', `pwdExpiration` datetime NOT NULL default '0000-00-00 00:00:00', `loginfailures` tinyint(4) NOT NULL default '0', `disabled` smallint(1) NOT NULL default '0', PRIMARY KEY (`id`), UNIQUE (`login`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblUserPasswordRequest` -- CREATE TABLE `tblUserPasswordRequest` ( `id` int(11) NOT NULL auto_increment, `userID` int(11) NOT NULL default '0', `hash` varchar(50) default NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`), CONSTRAINT `tblUserPasswordRequest_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblUserPasswordHistory` -- CREATE TABLE `tblUserPasswordHistory` ( `id` int(11) NOT NULL auto_increment, `userID` int(11) NOT NULL default '0', `pwd` varchar(50) default NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`), CONSTRAINT `tblUserPasswordHistory_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblUserImages` -- CREATE TABLE `tblUserImages` ( `id` int(11) NOT NULL auto_increment, `userID` int(11) NOT NULL default '0', `image` blob NOT NULL, `mimeType` varchar(10) NOT NULL default '', PRIMARY KEY (`id`), CONSTRAINT `tblUserImages_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblFolders` -- CREATE TABLE `tblFolders` ( `id` int(11) NOT NULL auto_increment, `name` varchar(70) default NULL, `parent` int(11) default NULL, `folderList` text NOT NULL, `comment` text, `date` int(12) default NULL, `owner` int(11) default NULL, `inheritAccess` tinyint(1) NOT NULL default '1', `defaultAccess` tinyint(4) NOT NULL default '0', `sequence` double NOT NULL default '0', PRIMARY KEY (`id`), KEY `parent` (`parent`), CONSTRAINT `tblFolders_owner` FOREIGN KEY (`owner`) REFERENCES `tblUsers` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblFolderAttributes` -- CREATE TABLE `tblFolderAttributes` ( `id` int(11) NOT NULL auto_increment, `folder` int(11) default NULL, `attrdef` int(11) default NULL, `value` text default NULL, PRIMARY KEY (`id`), UNIQUE (folder, attrdef), CONSTRAINT `tblFolderAttributes_folder` FOREIGN KEY (`folder`) REFERENCES `tblFolders` (`id`) ON DELETE CASCADE, CONSTRAINT `tblFolderAttributes_attrdef` FOREIGN KEY (`attrdef`) REFERENCES `tblAttributeDefinitions` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocuments` -- CREATE TABLE `tblDocuments` ( `id` int(11) NOT NULL auto_increment, `name` varchar(150) default NULL, `comment` text, `date` int(12) default NULL, `expires` int(12) default NULL, `owner` int(11) default NULL, `folder` int(11) default NULL, `folderList` text NOT NULL, `inheritAccess` tinyint(1) NOT NULL default '1', `defaultAccess` tinyint(4) NOT NULL default '0', `locked` int(11) NOT NULL default '-1', `keywords` text NOT NULL, `sequence` double NOT NULL default '0', PRIMARY KEY (`id`), CONSTRAINT `tblDocuments_folder` FOREIGN KEY (`folder`) REFERENCES `tblFolders` (`id`), CONSTRAINT `tblDocuments_owner` FOREIGN KEY (`owner`) REFERENCES `tblUsers` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentAttributes` -- CREATE TABLE `tblDocumentAttributes` ( `id` int(11) NOT NULL auto_increment, `document` int(11) default NULL, `attrdef` int(11) default NULL, `value` text default NULL, PRIMARY KEY (`id`), UNIQUE (document, attrdef), CONSTRAINT `tblDocumentAttributes_document` FOREIGN KEY (`document`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, CONSTRAINT `tblDocumentAttributes_attrdef` FOREIGN KEY (`attrdef`) REFERENCES `tblAttributeDefinitions` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentApprovers` -- CREATE TABLE `tblDocumentApprovers` ( `approveID` int(11) NOT NULL auto_increment, `documentID` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL default '0', `type` tinyint(4) NOT NULL default '0', `required` int(11) NOT NULL default '0', PRIMARY KEY (`approveID`), UNIQUE KEY `documentID` (`documentID`,`version`,`type`,`required`), CONSTRAINT `tblDocumentApprovers_document` FOREIGN KEY (`documentID`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentApproveLog` -- CREATE TABLE `tblDocumentApproveLog` ( `approveLogID` int(11) NOT NULL auto_increment, `approveID` int(11) NOT NULL default '0', `status` tinyint(4) NOT NULL default '0', `comment` text NOT NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`approveLogID`), CONSTRAINT `tblDocumentApproveLog_approve` FOREIGN KEY (`approveID`) REFERENCES `tblDocumentApprovers` (`approveID`) ON DELETE CASCADE, CONSTRAINT `tblDocumentApproveLog_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentContent` -- CREATE TABLE `tblDocumentContent` ( `id` int(11) NOT NULL auto_increment, `document` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL, `comment` text, `date` int(12) default NULL, `createdBy` int(11) default NULL, `dir` varchar(255) NOT NULL default '', `orgFileName` varchar(150) NOT NULL default '', `fileType` varchar(10) NOT NULL default '', `mimeType` varchar(100) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE (`document`, `version`), CONSTRAINT `tblDocumentContent_document` FOREIGN KEY (`document`) REFERENCES `tblDocuments` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentContentAttributes` -- CREATE TABLE `tblDocumentContentAttributes` ( `id` int(11) NOT NULL auto_increment, `content` int(11) default NULL, `attrdef` int(11) default NULL, `value` text default NULL, PRIMARY KEY (`id`), UNIQUE (content, attrdef), CONSTRAINT `tblDocumentContentAttributes_document` FOREIGN KEY (`content`) REFERENCES `tblDocumentContent` (`id`) ON DELETE CASCADE, CONSTRAINT `tblDocumentContentAttributes_attrdef` FOREIGN KEY (`attrdef`) REFERENCES `tblAttributeDefinitions` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentLinks` -- CREATE TABLE `tblDocumentLinks` ( `id` int(11) NOT NULL auto_increment, `document` int(11) NOT NULL default '0', `target` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', `public` tinyint(1) NOT NULL default '0', PRIMARY KEY (`id`), CONSTRAINT `tblDocumentLinks_document` FOREIGN KEY (`document`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, CONSTRAINT `tblDocumentLinks_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentFiles` -- CREATE TABLE `tblDocumentFiles` ( `id` int(11) NOT NULL auto_increment, `document` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', `comment` text, `name` varchar(150) default NULL, `date` int(12) default NULL, `dir` varchar(255) NOT NULL default '', `orgFileName` varchar(150) NOT NULL default '', `fileType` varchar(10) NOT NULL default '', `mimeType` varchar(100) NOT NULL default '', PRIMARY KEY (`id`), CONSTRAINT `tblDocumentFiles_document` FOREIGN KEY (`document`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, CONSTRAINT `tblDocumentFiles_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentLocks` -- CREATE TABLE `tblDocumentLocks` ( `document` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`document`), CONSTRAINT `tblDocumentLocks_document` FOREIGN KEY (`document`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, CONSTRAINT `tblDocumentLocks_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentReviewers` -- CREATE TABLE `tblDocumentReviewers` ( `reviewID` int(11) NOT NULL auto_increment, `documentID` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL default '0', `type` tinyint(4) NOT NULL default '0', `required` int(11) NOT NULL default '0', PRIMARY KEY (`reviewID`), UNIQUE KEY `documentID` (`documentID`,`version`,`type`,`required`), CONSTRAINT `tblDocumentReviewers_document` FOREIGN KEY (`documentID`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentReviewLog` -- CREATE TABLE `tblDocumentReviewLog` ( `reviewLogID` int(11) NOT NULL auto_increment, `reviewID` int(11) NOT NULL default '0', `status` tinyint(4) NOT NULL default '0', `comment` text NOT NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`reviewLogID`), CONSTRAINT `tblDocumentReviewLog_review` FOREIGN KEY (`reviewID`) REFERENCES `tblDocumentReviewers` (`reviewID`) ON DELETE CASCADE, CONSTRAINT `tblDocumentReviewLog_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentStatus` -- CREATE TABLE `tblDocumentStatus` ( `statusID` int(11) NOT NULL auto_increment, `documentID` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`statusID`), UNIQUE KEY `documentID` (`documentID`,`version`), CONSTRAINT `tblDocumentStatus_document` FOREIGN KEY (`documentID`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentStatusLog` -- CREATE TABLE `tblDocumentStatusLog` ( `statusLogID` int(11) NOT NULL auto_increment, `statusID` int(11) NOT NULL default '0', `status` tinyint(4) NOT NULL default '0', `comment` text NOT NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`statusLogID`), KEY `statusID` (`statusID`), CONSTRAINT `tblDocumentStatusLog_status` FOREIGN KEY (`statusID`) REFERENCES `tblDocumentStatus` (`statusID`) ON DELETE CASCADE, CONSTRAINT `tblDocumentStatusLog_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblGroups` -- CREATE TABLE `tblGroups` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) default NULL, `comment` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblGroupMembers` -- CREATE TABLE `tblGroupMembers` ( `groupID` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', `manager` smallint(1) NOT NULL default '0', UNIQUE (`groupID`,`userID`), CONSTRAINT `tblGroupMembers_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, CONSTRAINT `tblGroupMembers_group` FOREIGN KEY (`groupID`) REFERENCES `tblGroups` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblKeywordCategories` -- CREATE TABLE `tblKeywordCategories` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL default '', `owner` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblKeywords` -- CREATE TABLE `tblKeywords` ( `id` int(11) NOT NULL auto_increment, `category` int(11) NOT NULL default '0', `keywords` text NOT NULL, PRIMARY KEY (`id`), CONSTRAINT `tblKeywords_category` FOREIGN KEY (`category`) REFERENCES `tblKeywordCategories` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentCategory` -- CREATE TABLE `tblDocumentCategory` ( `categoryID` int(11) NOT NULL default 0, `documentID` int(11) NOT NULL default 0, CONSTRAINT `tblDocumentCategory_category` FOREIGN KEY (`categoryID`) REFERENCES `tblCategory` (`id`) ON DELETE CASCADE, CONSTRAINT `tblDocumentCategory_document` FOREIGN KEY (`documentID`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblNotify` -- CREATE TABLE `tblNotify` ( `target` int(11) NOT NULL default '0', `targetType` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '-1', `groupID` int(11) NOT NULL default '-1', PRIMARY KEY (`target`,`targetType`,`userID`,`groupID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblSessions` -- CREATE TABLE `tblSessions` ( `id` varchar(50) NOT NULL default '', `userID` int(11) NOT NULL default '0', `lastAccess` int(11) NOT NULL default '0', `theme` varchar(30) NOT NULL default '', `language` varchar(30) NOT NULL default '', PRIMARY KEY (`id`), CONSTRAINT `tblSessions_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- dirID is the current target content subdirectory. The last file loaded -- into MyDMS will be physically stored here. Is updated every time a new -- file is uploaded. -- -- dirPath is a essentially a foreign key from tblPathList, referencing the -- parent directory path for dirID, relative to MyDMS's _contentDir. -- CREATE TABLE `tblDirPath` ( `dirID` int(11) NOT NULL auto_increment, `dirPath` varchar(255) NOT NULL, PRIMARY KEY (`dirID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- CREATE TABLE `tblPathList` ( `id` int(11) NOT NULL auto_increment, `parentPath` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for mandatory reviewers -- CREATE TABLE `tblMandatoryReviewers` ( `userID` int(11) NOT NULL default '0', `reviewerUserID` int(11) NOT NULL default '0', `reviewerGroupID` int(11) NOT NULL default '0', PRIMARY KEY (`userID`,`reviewerUserID`,`reviewerGroupID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Table structure for mandatory approvers -- CREATE TABLE `tblMandatoryApprovers` ( `userID` int(11) NOT NULL default '0', `approverUserID` int(11) NOT NULL default '0', `approverGroupID` int(11) NOT NULL default '0', PRIMARY KEY (`userID`,`approverUserID`,`approverGroupID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Table structure for events (calendar) -- CREATE TABLE `tblEvents` ( `id` int(11) NOT NULL auto_increment, `name` varchar(150) default NULL, `comment` text, `start` int(12) default NULL, `stop` int(12) default NULL, `date` int(12) default NULL, `userID` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Table structure for version -- CREATE TABLE `tblVersion` ( `date` datetime, `major` smallint, `minor` smallint, `subminor` smallint ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Initial content for database -- INSERT INTO tblUsers VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'address@server.com', '', '', '', 1, 0, '', 0, 0); INSERT INTO tblUsers VALUES (2, 'guest', NULL, 'Guest User', NULL, '', '', '', 2, 0, '', 0, 0); INSERT INTO tblFolders VALUES (1, 'DMS', 0, '', 'DMS root', UNIX_TIMESTAMP(), 1, 0, 2, 0); INSERT INTO tblVersion VALUES (NOW(), 3, 4, 0); INSERT INTO tblCategory VALUES (0, ''); letodms-3.4.2+dfsg/install/update-3.4.0/0000755000175000017500000000000012064674777020222 5ustar franciscofranciscoletodms-3.4.2+dfsg/install/update-3.4.0/update.txt0000644000175000017500000000047712040235101022215 0ustar franciscofranciscoRelease information for 3.4.0 ------------------------------------- This release contains various database changes which can all be done within the automatic upgrade process. Besides some new tables the most noteable change is the addition of a new primary id field to the document content table (tblDocumentContent). letodms-3.4.2+dfsg/install/update-3.4.0/update.sql0000644000175000017500000001453312064674474022225 0ustar franciscofrancisco-- This file will be read by the letodms update script -- place empty lines in between sql commands you would like to -- be executed separately -- put -- in front of a line if it is a comment like this line DROP PROCEDURE IF EXISTS DROPFK; -- uncomment the following if run in mysql client -- DELIMITER $$ ; CREATE PROCEDURE DROPFK ( IN parm_table_name VARCHAR(100), IN parm_key_name VARCHAR(100) ) BEGIN SET @table_name = parm_table_name; SET @key_name = parm_key_name; SET @sql_text = concat('ALTER TABLE ',@table_name,' DROP FOREIGN KEY ',@key_name); IF EXISTS (SELECT NULL FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = DATABASE() AND CONSTRAINT_NAME = parm_key_name) THEN PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt; END IF; END -- place a $$ after the last END if run the file in mysql client -- uncomment the following if run in mysql client -- DELIMITER ; $$ START TRANSACTION; ALTER TABLE tblACLs ENGINE=InnoDB; ALTER TABLE tblCategory ENGINE=InnoDB; ALTER TABLE tblUsers ENGINE=InnoDB; ALTER TABLE tblUserPasswordRequest ENGINE=InnoDB; ALTER TABLE tblUserImages ENGINE=InnoDB; ALTER TABLE tblFolders ENGINE=InnoDB; ALTER TABLE tblDocuments ENGINE=InnoDB; ALTER TABLE tblDocumentApprovers ENGINE=InnoDB; ALTER TABLE tblDocumentApproveLog ENGINE=InnoDB; ALTER TABLE tblDocumentContent ENGINE=InnoDB; ALTER TABLE tblDocumentLinks ENGINE=InnoDB; ALTER TABLE tblDocumentFiles ENGINE=InnoDB; ALTER TABLE tblDocumentLocks ENGINE=InnoDB; ALTER TABLE tblDocumentReviewers ENGINE=InnoDB; ALTER TABLE tblDocumentReviewLog ENGINE=InnoDB; ALTER TABLE tblDocumentStatus ENGINE=InnoDB; ALTER TABLE tblDocumentStatusLog ENGINE=InnoDB; ALTER TABLE tblGroups ENGINE=InnoDB; ALTER TABLE tblGroupMembers ENGINE=InnoDB; ALTER TABLE tblKeywordCategories ENGINE=InnoDB; ALTER TABLE tblKeywords ENGINE=InnoDB; ALTER TABLE tblDocumentCategory ENGINE=InnoDB; ALTER TABLE tblNotify ENGINE=InnoDB; ALTER TABLE tblSessions ENGINE=InnoDB; ALTER TABLE tblMandatoryReviewers ENGINE=InnoDB; ALTER TABLE tblMandatoryApprovers ENGINE=InnoDB; ALTER TABLE tblEvents ENGINE=InnoDB; ALTER TABLE tblVersion ENGINE=InnoDB; CALL DROPFK('tblFolders', 'tblFolders_owner'); ALTER TABLE tblFolders ADD CONSTRAINT `tblFolders_owner` FOREIGN KEY (`owner`) REFERENCES `tblUsers` (`id`); CALL DROPFK('tblDocuments', 'tblDocuments_owner'); ALTER TABLE tblDocuments ADD CONSTRAINT `tblDocuments_owner` FOREIGN KEY (`owner`) REFERENCES `tblUsers` (`id`); CALL DROPFK('tblDocuments', 'tblDocuments_folder'); ALTER TABLE tblDocuments ADD CONSTRAINT `tblDocuments_folder` FOREIGN KEY (`folder`) REFERENCES `tblFolders` (`id`); CALL DROPFK('tblDocumentContent', 'tblDocumentDocument_document'); ALTER TABLE tblDocumentContent ADD CONSTRAINT `tblDocumentContent_document` FOREIGN KEY (`document`) REFERENCES `tblDocuments` (`id`); CALL DROPFK('tblDocumentLinks', 'tblDocumentLinks_user'); ALTER TABLE tblDocumentLinks ADD CONSTRAINT `tblDocumentLinks_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`); CALL DROPFK('tblDocumentFiles', 'tblDocumentFiles_user'); ALTER TABLE tblDocumentFiles ADD CONSTRAINT `tblDocumentFiles_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`); ALTER TABLE tblGroupMembers DROP PRIMARY KEY; ALTER TABLE tblGroupMembers ADD UNIQUE(`groupID`,`userID`); ALTER TABLE tblGroupMembers ADD CONSTRAINT `tblGroupMembers_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE; ALTER TABLE tblGroupMembers ADD CONSTRAINT `tblGroupMembers_group` FOREIGN KEY (`groupID`) REFERENCES `tblGroups` (`id`) ON DELETE CASCADE; CREATE TABLE `tblAttributeDefinitions` ( `id` int(11) NOT NULL auto_increment, `name` varchar(100) default NULL, `objtype` tinyint(4) NOT NULL default '0', `type` tinyint(4) NOT NULL default '0', `multiple` tinyint(4) NOT NULL default '0', `minvalues` int(11) NOT NULL default '0', `maxvalues` int(11) NOT NULL default '0', `valueset` text default NULL, UNIQUE(`name`), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `tblFolderAttributes` ( `id` int(11) NOT NULL auto_increment, `folder` int(11) default NULL, `attrdef` int(11) default NULL, `value` text default NULL, PRIMARY KEY (`id`), UNIQUE (folder, attrdef), CONSTRAINT `tblFolderAttributes_folder` FOREIGN KEY (`folder`) REFERENCES `tblFolders` (`id`) ON DELETE CASCADE, CONSTRAINT `tblFolderAttributes_attrdef` FOREIGN KEY (`attrdef`) REFERENCES `tblAttributeDefinitions` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `tblDocumentAttributes` ( `id` int(11) NOT NULL auto_increment, `document` int(11) default NULL, `attrdef` int(11) default NULL, `value` text default NULL, PRIMARY KEY (`id`), UNIQUE (document, attrdef), CONSTRAINT `tblDocumentAttributes_document` FOREIGN KEY (`document`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, CONSTRAINT `tblDocumentAttributes_attrdef` FOREIGN KEY (`attrdef`) REFERENCES `tblAttributeDefinitions` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE tblDocumentContent ADD COLUMN `id` int(11) NOT NULL auto_increment PRIMARY KEY FIRST; CREATE TABLE `tblDocumentContentAttributes` ( `id` int(11) NOT NULL auto_increment, `content` int(11) default NULL, `attrdef` int(11) default NULL, `value` text default NULL, PRIMARY KEY (`id`), UNIQUE (content, attrdef), CONSTRAINT `tblDocumentContentAttributes_document` FOREIGN KEY (`content`) REFERENCES `tblDocumentContent` (`id`) ON DELETE CASCADE, CONSTRAINT `tblDocumentContentAttributes_attrdef` FOREIGN KEY (`attrdef`) REFERENCES `tblAttributeDefinitions` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `tblUserPasswordHistory` ( `id` int(11) NOT NULL auto_increment, `userID` int(11) NOT NULL default '0', `pwd` varchar(50) default NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`), CONSTRAINT `tblUserPasswordHistory_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE tblUsers ADD COLUMN `pwdExpiration` datetime NOT NULL default '0000-00-00 00:00:00'; ALTER TABLE tblUsers ADD COLUMN `loginfailures` tinyint(4) NOT NULL default '0'; ALTER TABLE tblUsers ADD COLUMN `disabled` smallint(4) NOT NULL default '0'; ALTER TABLE tblUsers ADD UNIQUE(`login`); UPDATE tblVersion set date=NOW(), major=3, minor=4, subminor=0; COMMIT; DROP PROCEDURE IF EXISTS DROPFK; letodms-3.4.2+dfsg/install/update-3.4.0/update.php0000644000175000017500000000006612040235101022157 0ustar franciscofranciscoNo further update required.

"; ?> letodms-3.4.2+dfsg/install/update-1.8.1/0000755000175000017500000000000012040235101020165 5ustar franciscofranciscoletodms-3.4.2+dfsg/install/update-1.8.1/update.sql0000644000175000017500000000156012040235101022172 0ustar franciscofrancisco-- mysql -uroot -ppassword mydms < update.sql -- this script must be executed when updating form a version < 1.8.1 -- -------------------------------------------------------- -- -- New table for document-related files -- CREATE TABLE `tblDocumentFiles` ( `id` int(11) NOT NULL auto_increment, `document` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', `comment` text, `name` varchar(150) default NULL, `date` int(12) default NULL, `dir` varchar(255) NOT NULL default '', `orgFileName` varchar(150) NOT NULL default '', `fileType` varchar(10) NOT NULL default '', `mimeType` varchar(70) NOT NULL default '', PRIMARY KEY (`id`) ) ; -- -------------------------------------------------------- -- -- Not longer required by new filesystem structure -- DROP TABLE `tblDirPath`; DROP TABLE `tblPathList`; letodms-3.4.2+dfsg/install/update-1.8.1/update.php0000644000175000017500000000716712040235101022173 0ustar franciscofrancisco"; if (!$user->isAdmin()) { print "ERROR: You must be administrator to execute the update"; die; } function update_content() { GLOBAL $db,$settings; // create temp folder if (!makedir($settings->_contentDir."/temp")) return false; // for all contents $queryStr = "SELECT * FROM tblDocumentContent"; $contents = $db->getResultArray($queryStr); if (is_bool($contents)&&!$contents) return false; for ($i=0;$i_contentDir."/temp/".$contents[$i]["document"])) return false; // move every content in temp/documentID/version.fileType $source = $settings->_contentDir."/".$contents[$i]["dir"]."/data".$contents[$i]["fileType"]; $target = $settings->_contentDir."/temp/".$contents[$i]["document"]."/".$contents[$i]["version"].$contents[$i]["fileType"]; if (!copyFile($source, $target)) return false; } // change directory if (!renameDir($settings->_contentDir."/".$settings->_contentOffsetDir,$settings->_contentDir."/old")) return false; if (!renameDir($settings->_contentDir."/temp",$settings->_contentDir."/".$settings->_contentOffsetDir)) return false; return true; } function update_db() { GLOBAL $db,$settings; // for all contents $queryStr = "SELECT * FROM tblDocumentContent"; $contents = $db->getResultArray($queryStr); if (is_bool($contents)&&!$contents) return false; for ($i=0;$i_contentOffsetDir."/".$contents[$i]["document"]."/' WHERE document = ".$contents[$i]["document"]; if (!$db->getResult($queryStr)) return false; } // run the update-2.0.sql $fd = fopen ("update.sql", "r"); if (is_bool($fd)&&!$fd) return false; $queryStr = fread($fd, filesize("update.sql")); if (is_bool($queryStr)&&!$queryStr) return false; fclose ($fd); if (!$db->getResult($queryStr)) return false; return true; } print "Updating ...please wait
"; if (!update_content()) { print "ERROR: An error occurred during the directory reordering"; die; } if (!update_db()) { print "ERROR: An error occurred during the DB update"; print "
Please try to execute the update.sql manually"; die; } print "Update done
"; print ""; ?> letodms-3.4.2+dfsg/install/update-3.2.0/0000755000175000017500000000000012040235101020160 5ustar franciscofranciscoletodms-3.4.2+dfsg/install/update-3.2.0/update.sql0000644000175000017500000000006412040235101022163 0ustar franciscofranciscoUPDATE tblVersion set major=3, minor=2, subminor=0; letodms-3.4.2+dfsg/install/create_tables.sql0000644000175000017500000003615612040235657021611 0ustar franciscofrancisco-- -- Table structure for table `tblACLs` -- CREATE TABLE `tblACLs` ( `id` int(11) NOT NULL auto_increment, `target` int(11) NOT NULL default '0', `targetType` tinyint(4) NOT NULL default '0', `userID` int(11) NOT NULL default '-1', `groupID` int(11) NOT NULL default '-1', `mode` tinyint(4) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblAttributeDefinitions` -- CREATE TABLE `tblAttributeDefinitions` ( `id` int(11) NOT NULL auto_increment, `name` varchar(100) default NULL, `objtype` tinyint(4) NOT NULL default '0', `type` tinyint(4) NOT NULL default '0', `multiple` tinyint(4) NOT NULL default '0', `minvalues` int(11) NOT NULL default '0', `maxvalues` int(11) NOT NULL default '0', `valueset` text default NULL, UNIQUE(`name`), PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblUsers` -- CREATE TABLE `tblUsers` ( `id` int(11) NOT NULL auto_increment, `login` varchar(50) default NULL, `pwd` varchar(50) default NULL, `fullName` varchar(100) default NULL, `email` varchar(70) default NULL, `language` varchar(32) NOT NULL, `theme` varchar(32) NOT NULL, `comment` text NOT NULL, `role` smallint(1) NOT NULL default '0', `hidden` smallint(1) NOT NULL default '0', `pwdExpiration` datetime NOT NULL default '0000-00-00 00:00:00', `loginfailures` tinyint(4) NOT NULL default '0', `disabled` smallint(1) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblUserPasswordRequest` -- CREATE TABLE `tblUserPasswordRequest` ( `id` int(11) NOT NULL auto_increment, `userID` int(11) NOT NULL default '0', `hash` varchar(50) default NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblUserPasswordHistory` -- CREATE TABLE `tblUserPasswordHistory` ( `id` int(11) NOT NULL auto_increment, `userID` int(11) NOT NULL default '0', `pwd` varchar(50) default NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblUserImages` -- CREATE TABLE `tblUserImages` ( `id` int(11) NOT NULL auto_increment, `userID` int(11) NOT NULL default '0', `image` blob NOT NULL, `mimeType` varchar(10) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblFolders` -- CREATE TABLE `tblFolders` ( `id` int(11) NOT NULL auto_increment, `name` varchar(70) default NULL, `parent` int(11) default NULL, `folderList` text NOT NULL, `comment` text, `date` int(12) default NULL, `owner` int(11) default NULL, `inheritAccess` tinyint(1) NOT NULL default '1', `defaultAccess` tinyint(4) NOT NULL default '0', `sequence` double NOT NULL default '0', PRIMARY KEY (`id`), KEY `parent` (`parent`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblFolderAttributes` -- CREATE TABLE `tblFolderAttributes` ( `id` int(11) NOT NULL auto_increment, `folder` int(11) default NULL, `attrdef` int(11) default NULL, `value` text default NULL, UNIQUE (folder, attrdef), PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocuments` -- CREATE TABLE `tblDocuments` ( `id` int(11) NOT NULL auto_increment, `name` varchar(150) default NULL, `comment` text, `date` int(12) default NULL, `expires` int(12) default NULL, `owner` int(11) default NULL, `folder` int(11) default NULL, `folderList` text NOT NULL, `inheritAccess` tinyint(1) NOT NULL default '1', `defaultAccess` tinyint(4) NOT NULL default '0', `locked` int(11) NOT NULL default '-1', `keywords` text NOT NULL, `sequence` double NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentAttributes` -- CREATE TABLE `tblDocumentAttributes` ( `id` int(11) NOT NULL auto_increment, `document` int(11) default NULL, `attrdef` int(11) default NULL, `value` text default NULL, UNIQUE (document, attrdef), PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentApprovers` -- CREATE TABLE `tblDocumentApprovers` ( `approveID` int(11) NOT NULL auto_increment, `documentID` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL default '0', `type` tinyint(4) NOT NULL default '0', `required` int(11) NOT NULL default '0', PRIMARY KEY (`approveID`), UNIQUE KEY `documentID` (`documentID`,`version`,`type`,`required`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentApproveLog` -- CREATE TABLE `tblDocumentApproveLog` ( `approveLogID` int(11) NOT NULL auto_increment, `approveID` int(11) NOT NULL default '0', `status` tinyint(4) NOT NULL default '0', `comment` text NOT NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`approveLogID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentContent` -- CREATE TABLE `tblDocumentContent` ( `id` int(11) NOT NULL auto_increment, `document` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL, `comment` text, `date` int(12) default NULL, `createdBy` int(11) default NULL, `dir` varchar(255) NOT NULL default '', `orgFileName` varchar(150) NOT NULL default '', `fileType` varchar(10) NOT NULL default '', `mimeType` varchar(100) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE (`document`,`version`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentContentAttributes` -- CREATE TABLE `tblDocumentContentAttributes` ( `id` int(11) NOT NULL auto_increment, `content` int(11) default NULL, `attrdef` int(11) default NULL, `value` text default NULL, PRIMARY KEY (`id`), UNIQUE (content, attrdef) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentLinks` -- CREATE TABLE `tblDocumentLinks` ( `id` int(11) NOT NULL auto_increment, `document` int(11) NOT NULL default '0', `target` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', `public` tinyint(1) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentFiles` -- CREATE TABLE `tblDocumentFiles` ( `id` int(11) NOT NULL auto_increment, `document` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', `comment` text, `name` varchar(150) default NULL, `date` int(12) default NULL, `dir` varchar(255) NOT NULL default '', `orgFileName` varchar(150) NOT NULL default '', `fileType` varchar(10) NOT NULL default '', `mimeType` varchar(100) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentLocks` -- CREATE TABLE `tblDocumentLocks` ( `document` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`document`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentReviewLog` -- CREATE TABLE `tblDocumentReviewLog` ( `reviewLogID` int(11) NOT NULL auto_increment, `reviewID` int(11) NOT NULL default '0', `status` tinyint(4) NOT NULL default '0', `comment` text NOT NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`reviewLogID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentReviewers` -- CREATE TABLE `tblDocumentReviewers` ( `reviewID` int(11) NOT NULL auto_increment, `documentID` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL default '0', `type` tinyint(4) NOT NULL default '0', `required` int(11) NOT NULL default '0', PRIMARY KEY (`reviewID`), UNIQUE KEY `documentID` (`documentID`,`version`,`type`,`required`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentStatus` -- CREATE TABLE `tblDocumentStatus` ( `statusID` int(11) NOT NULL auto_increment, `documentID` int(11) NOT NULL default '0', `version` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`statusID`), UNIQUE KEY `documentID` (`documentID`,`version`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentStatusLog` -- CREATE TABLE `tblDocumentStatusLog` ( `statusLogID` int(11) NOT NULL auto_increment, `statusID` int(11) NOT NULL default '0', `status` tinyint(4) NOT NULL default '0', `comment` text NOT NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', `userID` int(11) NOT NULL default '0', PRIMARY KEY (`statusLogID`), KEY `statusID` (`statusID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblGroupMembers` -- CREATE TABLE `tblGroupMembers` ( `groupID` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '0', `manager` smallint(1) NOT NULL default '0', PRIMARY KEY (`groupID`,`userID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblGroups` -- CREATE TABLE `tblGroups` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) default NULL, `comment` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblKeywordCategories` -- CREATE TABLE `tblKeywordCategories` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL default '', `owner` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblKeywords` -- CREATE TABLE `tblKeywords` ( `id` int(11) NOT NULL auto_increment, `category` int(11) NOT NULL default '0', `keywords` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblCategory` -- CREATE TABLE `tblCategory` ( `id` int(11) NOT NULL auto_increment, `name` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblDocumentCategory` -- CREATE TABLE `tblDocumentCategory` ( `categoryID` int(11) NOT NULL default 0, `documentID` int(11) NOT NULL default 0 ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblNotify` -- CREATE TABLE `tblNotify` ( `target` int(11) NOT NULL default '0', `targetType` int(11) NOT NULL default '0', `userID` int(11) NOT NULL default '-1', `groupID` int(11) NOT NULL default '-1', PRIMARY KEY (`target`,`targetType`,`userID`,`groupID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tblSessions` -- CREATE TABLE `tblSessions` ( `id` varchar(50) NOT NULL default '', `userID` int(11) NOT NULL default '0', `lastAccess` int(11) NOT NULL default '0', `theme` varchar(30) NOT NULL default '', `language` varchar(30) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- dirID is the current target content subdirectory. The last file loaded -- into MyDMS will be physically stored here. Is updated every time a new -- file is uploaded. -- -- dirPath is a essentially a foreign key from tblPathList, referencing the -- parent directory path for dirID, relative to MyDMS's _contentDir. -- CREATE TABLE `tblDirPath` ( `dirID` int(11) NOT NULL auto_increment, `dirPath` varchar(255) NOT NULL, PRIMARY KEY (`dirPath`,`dirID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- CREATE TABLE `tblPathList` ( `id` int(11) NOT NULL auto_increment, `parentPath` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for mandatory reviewers -- CREATE TABLE `tblMandatoryReviewers` ( `userID` int(11) NOT NULL default '0', `reviewerUserID` int(11) NOT NULL default '0', `reviewerGroupID` int(11) NOT NULL default '0', PRIMARY KEY (`userID`,`reviewerUserID`,`reviewerGroupID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Table structure for mandatory approvers -- CREATE TABLE `tblMandatoryApprovers` ( `userID` int(11) NOT NULL default '0', `approverUserID` int(11) NOT NULL default '0', `approverGroupID` int(11) NOT NULL default '0', PRIMARY KEY (`userID`,`approverUserID`,`approverGroupID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Table structure for events (calendar) -- CREATE TABLE `tblEvents` ( `id` int(11) NOT NULL auto_increment, `name` varchar(150) default NULL, `comment` text, `start` int(12) default NULL, `stop` int(12) default NULL, `date` int(12) default NULL, `userID` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Table structure for version -- CREATE TABLE `tblVersion` ( `date` datetime, `major` smallint, `minor` smallint, `subminor` smallint ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Initial content for database -- INSERT INTO tblUsers VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'address@server.com', '', '', '', 1, 0, '', 0, 0); INSERT INTO tblUsers VALUES (2, 'guest', NULL, 'Guest User', NULL, '', '', '', 2, 0, '', 0, 0); INSERT INTO tblFolders VALUES (1, 'DMS', 0, '', 'DMS root', UNIX_TIMESTAMP(), 1, 0, 2, 0); INSERT INTO tblVersion VALUES (NOW(), 3, 4, 0); INSERT INTO tblCategory VALUES (0, ''); letodms-3.4.2+dfsg/install/update-3.0.0/0000755000175000017500000000000012054504715020175 5ustar franciscofranciscoletodms-3.4.2+dfsg/install/update-3.0.0/update.sql0000644000175000017500000000076412040235101022170 0ustar franciscofranciscoALTER TABLE tblUsers ADD COLUMN `role` smallint(1) NOT NULL default '0' AFTER `isAdmin`; UPDATE tblUsers SET `role` = 1 WHERE `isAdmin` = 1; UPDATE tblUsers SET `role` = 2 WHERE `id` = 2; ALTER TABLE tblUsers DROP COLUMN isAdmin; ALTER TABLE tblFolders ADD COLUMN `date` int(12) default NULL AFTER `comment`; CREATE TABLE `tblVersion` ( `date` datetime, `major` smallint, `minor` smallint, `subminor` smallint ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO tblVersion VALUES (NOW(), 3, 0, 0); letodms-3.4.2+dfsg/install/update-1.9.0/0000755000175000017500000000000012040235101020165 5ustar franciscofranciscoletodms-3.4.2+dfsg/install/update-1.9.0/update.sql0000644000175000017500000000202312040235101022165 0ustar franciscofrancisco-- mysql -uyouruser -pyourpassword yourdb < update.sql -- this script must be executed when updating form a version < 1.9 -- -------------------------------------------------------- -- -- New field for hidden users -- ALTER TABLE `tblUsers` ADD `hidden` smallint(1) NOT NULL default '0' ; -- -- New field for group manager permission -- ALTER TABLE `tblGroupMembers` ADD `manager` smallint(1) NOT NULL default '0' ; -- -- Table structure for mandatory reviewers -- CREATE TABLE `tblMandatoryReviewers` ( `userID` int(11) NOT NULL default '0', `reviewerUserID` int(11) NOT NULL default '0', `reviewerGroupID` int(11) NOT NULL default '0', PRIMARY KEY (`userID`,`reviewerUserID`,`reviewerGroupID`) ) ; -- -- Table structure for mandatory approvers -- CREATE TABLE `tblMandatoryApprovers` ( `userID` int(11) NOT NULL default '0', `approverUserID` int(11) NOT NULL default '0', `approverGroupID` int(11) NOT NULL default '0', PRIMARY KEY (`userID`,`approverUserID`,`approverGroupID`) ) ; letodms-3.4.2+dfsg/install/update-1.9.0/update.php0000644000175000017500000000403112040235101022156 0ustar franciscofrancisco"; if (!$user->isAdmin()) { print "ERROR: You must be administrator to execute the update"; die; } function update_db() { global $db; $fd = fopen ("update.sql", "r"); if (is_bool($fd)&&!$fd) return false; $queryStr = fread($fd, filesize("update.sql")); if (is_bool($queryStr)&&!$queryStr) return false; fclose ($fd); if (!$db->getResult($queryStr)) return false; return true; } print "Updating ...please wait
"; print "
";

if (!update_db()) {

	print "
"; print "ERROR: An error occurred during the DB update"; print "
Please try to execute the update.sql manually"; die; }else print "Update done
"; print ""; ?> letodms-3.4.2+dfsg/install/index.php0000644000175000017500000000117312040235101020062 0ustar franciscofrancisco_rootDir = $rootDir.'/'; include("../inc/inc.Language.php"); include("../inc/inc.ClassUI.php"); UI::htmlStartPage("INSTALL"); UI::contentHeading("letoDMS Installation..."); UI::contentContainerStart(); echo "

".getMLText('settings_install_welcome_title')."

"; echo "
".getMLText('settings_install_welcome_text')."
"; echo '

' . getMLText("settings_start_install") . '

'; UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/install/install.php0000644000175000017500000003502312075022752020440 0ustar franciscofrancisco"; print "Error
"; print $error; print ""; } /* }}} */ function printWarning($error) { /* {{{ */ print "
"; print "Warning
"; print $error; print "
"; } /* }}} */ function printCheckError($resCheck) { /* {{{ */ $hasError = false; foreach($resCheck as $keyRes => $paramRes) { if(isset($paramRes['type']) && $paramRes['type'] == 'error') $hasError = true; $errorMes = getMLText("settings_$keyRes"). " : " . getMLText("settings_".$paramRes["status"]); if (isset($paramRes["currentvalue"])) $errorMes .= "
=> " . getMLText("settings_currentvalue") . " : " . $paramRes["currentvalue"]; if (isset($paramRes["suggestionvalue"])) $errorMes .= "
=> " . getMLText("settings_suggestionvalue") . " : " . $paramRes["suggestionvalue"]; if (isset($paramRes["suggestion"])) $errorMes .= "
=> " . getMLText("settings_".$paramRes["suggestion"]); if (isset($paramRes["systemerror"])) $errorMes .= "
=> " . $paramRes["systemerror"]; if(isset($paramRes['type']) && $paramRes['type'] == 'error') printError($errorMes); else printWarning($errorMes); } return $hasError; } /* }}} */ /** * Load default settings + set */ define("LETODMS_INSTALL", "on"); define("LETODMS_VERSION", "3.4.2"); require_once('../inc/inc.ClassSettings.php'); $configDir = Settings::getConfigDir(); /** * Check if ENABLE_INSTALL_TOOL exists in config dir */ if (!$configDir) { echo "Fatal error! I could not even find a configuration directory."; exit; } if (!file_exists($configDir."/ENABLE_INSTALL_TOOL")) { echo "For installation of LetoDMS, you must create the file conf/ENABLE_INSTALL_TOOL"; exit; } if (!file_exists($configDir."/settings.xml")) { if(!copy("settings.xml.template_install", $configDir."/settings.xml")) { echo "Could not create initial configuration file from template. Check directory permission of conf/."; exit; } } // Set folders settings $settings = new Settings(); $settings->load($configDir."/settings.xml"); $rootDir = realpath (".."); $rootDir = str_replace ("\\", "/" , $rootDir) . "/"; $installPath = realpath ("install.php"); $installPath = str_replace ("\\", "/" , $installPath); $tmpToDel = str_replace ($rootDir, "" , $installPath); $httpRoot = str_replace ($tmpToDel, "" , $_SERVER["REQUEST_URI"]); do { $httpRoot = str_replace ("//", "/" , $httpRoot, $count); } while ($count<>0); if(!$settings->_rootDir) $settings->_rootDir = $rootDir; //$settings->_coreDir = $settings->_rootDir; //$settings->_luceneClassDir = $settings->_rootDir; //$settings->_ADOdbPath = $settings->_rootDir; if(!$settings->_contentDir) { $settings->_contentDir = $settings->_rootDir . 'data/'; $settings->_luceneDir = $settings->_rootDir . 'data/lucene/'; $settings->_stagingDir = $settings->_rootDir . 'data/staging/'; } $settings->_httpRoot = $httpRoot; if(isset($settings->_ADOdbPath)) ini_set('include_path', $settings->_ADOdbPath. PATH_SEPARATOR .ini_get('include_path')); /** * Include GUI + Language */ include("../inc/inc.Language.php"); include("../inc/inc.ClassUI.php"); UI::htmlStartPage("INSTALL"); UI::contentHeading("letoDMS Installation for version ".LETODMS_VERSION); UI::contentContainerStart(); /** * Show phpinfo */ if (isset($_GET['phpinfo'])) { echo '' . getMLText("back") . ''; phpinfo(); UI::contentContainerEnd(); UI::htmlEndPage(); exit(); } /** * check if ENABLE_INSTALL_TOOL shall be removed */ if (isset($_GET['disableinstall'])) { /* {{{ */ if(file_exists($configDir."/ENABLE_INSTALL_TOOL")) { if(unlink($configDir."/ENABLE_INSTALL_TOOL")) { echo getMLText("settings_install_disabled"); echo "

"; echo '' . getMLText("settings_more_settings") .''; } else { echo getMLText("settings_cannot_disable"); echo "

"; echo '' . getMLText("back") . ''; } } else { echo getMLText("settings_cannot_disable"); echo "

"; echo '' . getMLText("back") . ''; } UI::contentContainerEnd(); UI::htmlEndPage(); exit(); } /* }}} */ /** * Check System */ if (printCheckError( $settings->checkSystem())) { /* {{{ */ if (function_exists("apache_get_version")) { echo "
Apache version: " . apache_get_version(); } echo "
PHP version: " . phpversion(); echo "
PHP include path: " . ini_get('include_path'); echo '
'; echo '
'; echo '' . getMLText("refresh") . ''; echo ' - '; echo '' . getMLText("version_info") . ''; exit; } /* }}} */ if (isset($_POST["action"])) $action=$_POST["action"]; else if (isset($_GET["action"])) $action=$_GET["action"]; else $action=NULL; //var_dump($settings); if ($action=="setSettings") { /** * Get Parameters */ $settings->_rootDir = $_POST["rootDir"]; $settings->_httpRoot = $_POST["httpRoot"]; $settings->_contentDir = $_POST["contentDir"]; $settings->_luceneDir = $_POST["luceneDir"]; $settings->_stagingDir = $_POST["stagingDir"]; $settings->_ADOdbPath = $_POST["ADOdbPath"]; $settings->_dbDriver = $_POST["dbDriver"]; $settings->_dbHostname = $_POST["dbHostname"]; $settings->_dbDatabase = $_POST["dbDatabase"]; $settings->_dbUser = $_POST["dbUser"]; $settings->_dbPass = $_POST["dbPass"]; $settings->_coreDir = $_POST["coreDir"]; $settings->_luceneClassDir = $_POST["luceneClassDir"]; /** * Check Parameters, require version 3.3.x */ $hasError = printCheckError( $settings->check(substr(str_replace('.', '', LETODMS_VERSION), 0,2))); if (!$hasError) { // Create database if (isset($_POST["createDatabase"])) { $createOK = false; $errorMsg = ""; require_once($settings->_ADOdbPath."adodb/adodb.inc.php"); $connTmp = ADONewConnection($settings->_dbDriver); if ($connTmp) { $connTmp->Connect($settings->_dbHostname, $settings->_dbUser, $settings->_dbPass, $settings->_dbDatabase); if ($connTmp->IsConnected()) { // read SQL file if ($settings->_dbDriver=="mysql") $queries = file_get_contents("create_tables-innodb.sql"); else $queries = file_get_contents("create_tables.sql"); // generate SQL query $queries = explode(";", $queries); // execute queries foreach($queries as $query) { // var_dump($query); $query = trim($query); if (!empty($query)) { $connTmp->Execute($query); if ($connTmp->ErrorNo()<>0) { $errorMsg .= $connTmp->ErrorMsg() . "
"; } } } // error ? if (empty($errorMsg)) $createOK = true; } else { $errorMsg = $connTmp->ErrorMsg(); } $connTmp->Disconnect(); } // Show error if (!$createOK) { echo $errorMsg; $hasError = true; } } // create database if (!$hasError) { // Save settings $settings->save(); $needsupdate = false; require_once($settings->_ADOdbPath."adodb/adodb.inc.php"); $connTmp = ADONewConnection($settings->_dbDriver); if ($connTmp) { $connTmp->Connect($settings->_dbHostname, $settings->_dbUser, $settings->_dbPass, $settings->_dbDatabase); if ($connTmp->IsConnected()) { $res = $connTmp->Execute('select * from tblVersion'); if($rec = $res->FetchRow()) { $updatedirs = array(); $d = dir("."); while (false !== ($entry = $d->read())) { if(preg_match('/update-([0-9.]*)/', $entry, $matches)) { $updatedirs[] = $matches[1]; } } $d->close(); echo "Your current database schema has version ".$rec['major'].'.'.$rec['minor'].'.'.$rec['subminor']."

"; if($updatedirs) { foreach($updatedirs as $updatedir) { if($updatedir > $rec['major'].'.'.$rec['minor'].'.'.$rec['subminor']) { $needsupdate = true; print "

Database update to version ".$updatedir." needed

"; if(file_exists('update-'.$updatedir.'/update.txt')) { print "

Please read the comments on updating this version. Read now

"; } if(file_exists('update-'.$updatedir.'/update.php')) { print "

Afterwards run the update script.

"; } } } } else { print "

Your current database is up to date.

"; } } } } // Show Web page if(!$needsupdate) { echo getMLText("settings_install_success"); echo "

"; echo getMLText("settings_delete_install_folder"); echo "

"; echo '' . getMLText("settings_disable_install") . ''; echo "

"; echo '' . getMLText("settings_more_settings") .''; } } } // Back link echo '
'; echo '
'; echo '' . getMLText("back") . ''; } else { /** * Set parameters */ ?>
"> "> "> "> "> "> "> "> "> "> "> "> ">
:
:
:
:
:
:
:
:
:
:
:
:
:
:
" />
_printDisclaimer = false; $settings->_footNote = false; // end of the page UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/install/update-2.0.1/0000755000175000017500000000000012040235101020156 5ustar franciscofranciscoletodms-3.4.2+dfsg/install/update-2.0.1/update.sql0000644000175000017500000000102012040235101022152 0ustar franciscofrancisco-- mysql -uyouruser -pyourpassword yourdb < update.sql -- this script must be executed when updating form a version < 2.0 -- -------------------------------------------------------- -- -- Table structure for events (calendar) -- CREATE TABLE `tblEvents` ( `id` int(11) NOT NULL auto_increment, `name` varchar(150) default NULL, `comment` text, `start` int(12) default NULL, `stop` int(12) default NULL, `date` int(12) default NULL, `userID` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ; letodms-3.4.2+dfsg/install/update-2.0.1/update.php0000644000175000017500000000403112040235101022147 0ustar franciscofrancisco"; if (!$user->isAdmin()) { print "ERROR: You must be administrator to execute the update"; die; } function update_db() { global $db; $fd = fopen ("update.sql", "r"); if (is_bool($fd)&&!$fd) return false; $queryStr = fread($fd, filesize("update.sql")); if (is_bool($queryStr)&&!$queryStr) return false; fclose ($fd); if (!$db->getResult($queryStr)) return false; return true; } print "Updating ...please wait
"; print "
";

if (!update_db()) {

	print "
"; print "ERROR: An error occurred during the DB update"; print "
Please try to execute the update.sql manually"; die; }else print "Update done
"; print ""; ?> letodms-3.4.2+dfsg/install/update-3.3.0/0000755000175000017500000000000012057326250020177 5ustar franciscofranciscoletodms-3.4.2+dfsg/install/update-3.3.0/update.txt0000644000175000017500000000707512040235101022215 0ustar franciscofranciscoRelease information for 3.3.0 ------------------------------------- This release contains various improvements which require your manual interaction during an upgrade from an earlier version. You should definitely make a backup of your database and possibly your content folder. Folder search ------------- The new folder search has introduced a new database field which has to be initially filled. Without that field searching for subfolders in a folder will not work. See below. Data conversion --------------- The conversion of strings like names and comments of documents and folders, when saved in the database, has been completely droped. The conversion was originally done for security reasons, both to prevent sql injections and cross side scripting. Basically any field data that could do any harm, was replaced by 'harmless' chars. Ampersands, semi colons, quotes, etc., they all have been replaced by their html entity or masked by a backslash. The output of those fields on html pages was not decoded anymore, but any other application that accessed the database had to decode the data. The new approach with less impact on the data keeps the data unmodified when saving it in the database without opening new security wholes. Protection against cross side scripting is done when the data is placed on a html page. As a consequence the complete database has to be searched for those previously converted strings and converted back into the original value. The conversion is done right after the database update during the installation and upgrade process. Content directory ----------------- Each document in LetoDMS is associated with a directory in the file system. Consequently, there is a limitation of documents set by the maximum number of subdirectories in a directory of the filesystem. The currently most used filesystem on Linux (ext3) supports only 31998 directories. In order to overcome this limitation another level of directories has been put inbetween the content directory and the document directory numbered from 1 to maxDirID. This allows a theorethical maximum of square(maxDirID) documents. The path to the document folder consists of the new path id and the document id (/). The path id is derived from the document id by the formula floor(docid/maxDirID) + 1 Hence, all documents with an id from 1 to maxDirID have the path '1/'. The limiting factor of this schema is the number of document ids. It cannot be higher than square(maxDirID). If you intend to switch to the new multi level content directory format, you will have to set maxDirID to a value > 0 (possibly 31998) and create one or more new directories starting with name '1' below the content dir and move all document directories into it. How many new directories are needed depends on the maximum document id already used. If the maximum document id is <= maxDirID, then you will only need one directory named '1'. If the maximum document id is <= 2*maxDirID you will need another directory named '2'. If you have already a document with id 1 (or 2, 3, 4, ...), you must choose a different name for your new sub directory and rename to 1 (or 2, 3, 4, ...) after all document directories have been moved. If you want to keep the current content directory structure set maxDirID to 0. Make sure the maxDirID remains unchanged for a content directory. After finishing update ---------------------- Once you are done with the update, log in as administrator and make an object check in the admin tools. This will fill the new database field needed for the folder search and fill it with the appropriate value. letodms-3.4.2+dfsg/install/update-3.3.0/update.sql0000644000175000017500000000075612040235101022174 0ustar franciscofranciscoCREATE TABLE `tblUserPasswordRequest` ( `id` int(11) NOT NULL auto_increment, `userID` int(11) NOT NULL default '0', `hash` varchar(50) default NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8; UPDATE tblVersion set major=3, minor=3, subminor=7; ALTER TABLE tblDocumentContent MODIFY mimeType varchar(100); ALTER TABLE tblDocumentFiles MODIFY mimeType varchar(100); ALTER TABLE tblFolders ADD COLUMN `folderList` text NOT NULL; letodms-3.4.2+dfsg/install/update-3.3.0/update.php0000644000175000017500000001052612040235101022160 0ustar franciscofrancisco'id', 'fields'=>array('name', 'comment', 'keywords')); $arr['tblDocumentFiles'] = array('key'=>'id', 'fields'=>array('name', 'comment', 'mimeType')); $arr['tblFolders'] = array('key'=>'id', 'fields'=>array('name', 'comment')); $arr['tblUsers'] = array('key'=>'id', 'fields'=>array('fullName', 'comment')); $arr['tblGroups'] = array('key'=>'id', 'fields'=>array('name', 'comment')); $arr['tblKeywords'] = array('key'=>'id', 'fields'=>array('keywords')); $arr['tblKeywordCategories'] = array('key'=>'id', 'fields'=>array('name')); $arr['tblCategory'] = array('key'=>'id', 'fields'=>array('name')); $arr['tblEvents'] = array('key'=>'id', 'fields'=>array('name', 'comment')); $arr['tblDocumentApproveLog'] = array('key'=>'approveLogId', 'fields'=>array('comment')); $arr['tblDocumentStatusLog'] = array('key'=>'statusLogId', 'fields'=>array('comment')); $arr['tblDocumentReviewLog'] = array('key'=>'reviewLogId', 'fields'=>array('comment')); $arr['tblDocumentContent'] = array('keys'=>array('document', 'version'), 'fields'=>array('comment', 'mimeType')); $allupdates = array(); echo "\n"; echo "\n"; foreach($arr as $tblname => $schema) { if(isset($schema['key'])) $queryStr = "SELECT ".$schema['key'].", `".implode('`,`', $schema['fields'])."` FROM ".$tblname; elseif(isset($schema['keys'])) $queryStr = "SELECT ".implode(',', $schema['keys']).", `".implode('`,`', $schema['fields'])."` FROM ".$tblname; $res = $db->Execute($queryStr); $recs = $res->GetArray(); foreach($recs as $rec) { foreach($schema['fields'] as $field) { if($rec[$field] !== mydmsDecodeString($rec[$field])) { $updateSql = "UPDATE ".$tblname." SET `".$field."`=".$db->qstr(mydmsDecodeString($rec[$field]))." where "; if(isset($schema['key'])) $updateSql .= $schema['key']."=".$rec[$schema['key']]; elseif(isset($schema['keys'])) { $where = array(); foreach($schema['keys'] as $key) { $where[] = $key."=".$rec[$key]; } $updateSql .= implode(' AND ', $where); } $allupdates[] = $updateSql; echo "\n"; if($doupdate) { $res = $db->Execute($updateSql); if(!$res) { $errormsg = 'Could not execute update statement'; echo "\n"; } else { $errormsg = 'Object updated'; echo "\n"; } } } } } } echo "
TableFieldOld ValueNew ValueUpdate statement
".$tblname."".$field."".htmlspecialchars($rec[$field])."".htmlspecialchars(mydmsDecodeString($rec[$field]))."
".htmlspecialchars($updateSql)."
".$errormsg."
".$errormsg."
\n"; if($allupdates) { echo "Summary of all updates
\n"; echo "
".implode("
", $allupdates)."
"; } return true; } /* }}} */ if(isset($_GET['doupdate']) && $_GET['doupdate'] == 1) $doupdate = 1; else $doupdate = 0; $doupdate = 1; if (!check($doupdate)) { print "

Update failed

"; } if(!$doupdate) { print "

If the above update statements look ok, either execute them in your prefered mysql client or click on the link below.

"; print "Execute update
\n"; } ?> letodms-3.4.2+dfsg/install/settings.xml.template_install0000644000175000017500000002365212046503420024202 0ustar franciscofrancisco pdftotext -nopgbrk %s - | sed -e 's/ [a-zA-Z0-9.]\{1\} / /g' -e 's/[0-9.]//g' catdoc %s ssconvert -T Gnumeric_stf:stf_csv -S %s fd://1 id3 -l -R %s | egrep '(Title|Artist|Album)' | sed 's/^[^:]*: //g' id3 -l -R %s | egrep '(Title|Artist|Album)' | sed 's/^[^:]*: //g' cat %s letodms-3.4.2+dfsg/install/update.php0000644000175000017500000000633012064674616020265 0ustar franciscofranciscoload($configDir."/settings.xml"); /** * Check if ENABLE_INSTALL_TOOL exists in config dir */ if (!file_exists($configDir."/ENABLE_INSTALL_TOOL")) { echo "For installation of LetoDMS, you must create the file conf/ENABLE_INSTALL_TOOL"; exit; } require_once("../inc/inc.Language.php"); require_once("../inc/inc.ClassUI.php"); UI::htmlStartPage('Database update'); UI::contentHeading("letoDMS Installation for version ".$_GET['version']); UI::contentContainerStart(); require_once($settings->_ADOdbPath."adodb/adodb.inc.php"); $db = ADONewConnection($settings->_dbDriver); if ($db) { $db->Connect($settings->_dbHostname, $settings->_dbUser, $settings->_dbPass, $settings->_dbDatabase); if (!$db->IsConnected()) { die; } } $errorMsg = ''; $res = $db->Execute('select * from tblVersion'); if($rec = $res->FetchRow()) { if($_GET['version'] > $rec['major'].'.'.$rec['minor'].'.'.$rec['subminor']) { // $queries = file_get_contents('update-'.$_GET['version'].'/update.sql'); // $queries = explode(";", $queries); $queries = file('update-'.$_GET['version'].'/update.sql'); // execute queries if($queries) { echo "

Updating database schema

"; $sqlquery = ""; foreach($queries as $query) { $query = trim($query); /* check if comment or empty line */ if(substr($query, 0, 2) == "--" || $query == "") { if($sqlquery) { echo $sqlquery."
"; $db->Execute($sqlquery); if ($db->ErrorNo()<>0) { $errorMsg .= $db->ErrorMsg() . "
"; } $sqlquery = ""; } } else { $sqlquery .= " ".$query; } } /* run the last query */ if($sqlquery) { echo $sqlquery."
"; $db->Execute($sqlquery); if ($db->ErrorNo()<>0) { $errorMsg .= $db->ErrorMsg() . "
"; } $sqlquery = ""; } } } else { echo "

Database schema already up to date.

"; } if(!$errorMsg) { echo "

Running update script

"; include('update-'.$_GET['version'].'/update.php'); } else { echo $errorMsg; } echo "

Go back to installation.

"; } else { echo "

Could not determine database schema version.

"; } UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/install/update-3.1.0/0000755000175000017500000000000012054504725020177 5ustar franciscofranciscoletodms-3.4.2+dfsg/install/update-3.1.0/update.sql0000644000175000017500000000054112040235101022162 0ustar franciscofranciscoCREATE TABLE `tblCategory` ( `id` int(11) NOT NULL auto_increment, `name` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO tblCategory VALUES (0, ''); CREATE TABLE `tblDocumentCategory` ( `categoryID` int(11) NOT NULL default 0, `documentID` int(11) NOT NULL default 0 ) ENGINE=MyISAM DEFAULT CHARSET=utf8; letodms-3.4.2+dfsg/out/0000755000175000017500000000000012710425270015415 5ustar franciscofranciscoletodms-3.4.2+dfsg/out/out.IndexInfo.php0000644000175000017500000000447212057072151020626 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } $v = new LetoDMS_Version; UI::htmlStartPage(getMLText('fulltext_info')); UI::globalNavigation(); UI::pageNavigation(getMLText('fulltext_info')); UI::contentContainerStart(); if($settings->_enableFullSearch) { if(!empty($settings->_luceneClassDir)) require_once($settings->_luceneClassDir.'/Lucene.php'); else require_once('LetoDMS/Lucene.php'); $index = LetoDMS_Lucene_Indexer::open($settings->_luceneDir); if(!$index) { printMLText("no_fulltextindex"); UI::contentContainerEnd(); UI::htmlEndPage(); exit; } $numDocs = $index->count(); echo "
";
	for ($id = 0; $id < $numDocs; $id++) {
		if (!$index->isDeleted($id)) {
			$hit = $index->getDocument($id);
			echo $hit->document_id.": ".htmlspecialchars($hit->title)."\n";
		}
	}
	echo "
"; $terms = $index->terms(); echo "

".count($terms)." Terms

"; echo "
";
	foreach($terms as $term) {
		echo htmlspecialchars($term->field).":".htmlspecialchars($term->text)."\n";
	}
	echo "
"; } else { printMLText("fulltextsearch_disabled"); } UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.Settings.php0000644000175000017500000006035512040235103020533 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } /* Set an encryption key if is not set */ if(!trim($settings->_encryptionKey)) $settings->_encryptionKey = md5(uniqid()); UI::htmlStartPage(getMLText("admin_tools")); UI::globalNavigation(); UI::pageNavigation(getMLText("admin_tools"), "admin_tools"); UI::contentHeading(getMLText("settings")); UI::contentContainerStart(); ?>
_configFilePath)) { echo "

".getMLText("settings_notwritable")."

"; } else { ?> " />
+
"> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> ">
:
:
: _printDisclaimer) echo "checked" ?> />
:
:
: _strictFormCheck) echo "checked" ?> />
:
: _enableConverting) echo "checked" ?> />
: _enableEmail) echo "checked" ?> />
: _enableUsersView) echo "checked" ?> />
: _enableFullSearch) echo "checked" ?> />
:
: _enableFolderTree) echo "checked" ?> />
:
:
: _enableCalendar) echo "checked" ?> />
:
:

+
"> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> "> ">
:
:
:
:
:
: _logFileEnable) echo "checked" ?> />
:
: _enableLargeFileUpload) echo "checked" ?> />
:
: _enableGuestLogin) echo "checked" ?> />
: _restricted) echo "checked" ?> />
: _enableUserImage) echo "checked" ?> />
: _disableSelfEdit) echo "checked" ?> />
: _enablePasswordForgotten) echo "checked" ?> />
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

+
letodms-3.4.2+dfsg/out/out.RemoveUser.php0000644000175000017500000000537212040235103021025 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } if (!isset($_GET["userid"]) || !is_numeric($_GET["userid"]) || intval($_GET["userid"])<1) { UI::exitError(getMLText("rm_user"),getMLText("invalid_user_id")); } $userid = intval($_GET["userid"]); $currUser = $dms->getUser($userid); if ($userid==$user->getID()) { UI::exitError(getMLText("rm_user"),getMLText("access_denied")); } if (!is_object($currUser)) { UI::exitError(getMLText("rm_user"),getMLText("invalid_user_id")); } UI::htmlStartPage(getMLText("admin_tools")); UI::globalNavigation(); UI::pageNavigation(getMLText("admin_tools"), "admin_tools"); UI::contentHeading(getMLText("rm_user")); UI::contentContainerStart(); ?>

htmlspecialchars($currUser->getFullName())));?>

:

">

letodms-3.4.2+dfsg/out/out.FolderNotify.php0000644000175000017500000001436412040235103021336 0ustar franciscofrancisco getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderid = intval($_GET["folderid"]); $folder = $dms->getFolder($folderid); if (!is_object($folder)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderPathHTML = getFolderPathHTML($folder, true); if ($folder->getAccessMode($user) < M_READ) { UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("access_denied")); } $notifyList = $folder->getNotifyList(); UI::htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName())))); UI::globalNavigation($folder); UI::pageNavigation($folderPathHTML, "view_folder", $folder); ?> \n"; if (empty($notifyList["users"]) && empty($notifyList["groups"])) { print "".getMLText("empty_notify_list").""; } else { foreach ($notifyList["users"] as $userNotify) { print ""; print ""; print "" . htmlspecialchars($userNotify->getFullName()) . ""; if ($user->isAdmin() || $user->getID() == $userNotify->getID()) { print ""; print "
\n"; echo createHiddenFieldWithKey('foldernotify')."\n"; print "\n"; print "\n"; print "getID()."\">\n"; print "".getMLText("delete")." "; print "
\n"; print ""; }else print ""; print ""; $userNotifyIDs[] = $userNotify->getID(); } foreach ($notifyList["groups"] as $groupNotify) { print ""; print ""; print "" . htmlspecialchars($groupNotify->getName()) . ""; if ($user->isAdmin() || $groupNotify->isMember($user,true)) { print ""; print "
\n"; echo createHiddenFieldWithKey('foldernotify')."\n"; print "\n"; print "\n"; print "getID()."\">\n"; print "".getMLText("delete")." "; print "
\n"; print ""; }else print ""; print ""; $groupNotifyIDs[] = $groupNotify->getID(); } } print "\n"; ?>
:
:
">
letodms-3.4.2+dfsg/out/out.AddMultiDocument.php0000644000175000017500000000557412040235103022137 0ustar franciscofrancisco_enableLargeFileUpload) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("access_denied")); } if (!isset($_GET["folderid"]) || !is_numeric($_GET["folderid"]) || intval($_GET["folderid"])<1) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderid = $_GET["folderid"]; $folder = $dms->getFolder($folderid); if (!is_object($folder)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderPathHTML = getFolderPathHTML($folder, true); if ($folder->getAccessMode($user) < M_READWRITE) { UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName())))); UI::globalNavigation($folder); UI::pageNavigation($folderPathHTML, "view_folder", $folder); ?> getApproversList(); UI::printUploadApplet('../op/op.AddMultiDocument.php', array('folderid'=>$folderid)); UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.ChangePassword.php0000644000175000017500000000554112051433772021655 0ustar franciscofrancisco
0) { echo ""; } if (isset($_REQUEST["hash"]) && strlen($_REQUEST["hash"])>0) { echo ""; } ?>
 
">

letodms-3.4.2+dfsg/out/out.SetReviewersApprovers.php0000644000175000017500000002600312040235103023254 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = intval($_GET["documentid"]); $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if ($document->getAccessMode($user) < M_ALL) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } if (!isset($_GET["version"]) || !is_numeric($_GET["version"]) || intval($_GET["version"]<1)) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } $version = $_GET["version"]; $content = $document->getContentByVersion($version); $overallStatus = $content->getStatus(); if (!is_object($content)) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } // control for document state if ($overallStatus["status"]==S_REJECTED || $overallStatus["status"]==S_OBSOLETE ) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("cannot_assign_invalid_state")); } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); UI::contentHeading(getMLText("change_assignments")); // Retrieve a list of all users and groups that have review / approve privileges. $docAccess = $document->getApproversList(); // Retrieve list of currently assigned reviewers and approvers, along with // their latest status. $reviewStatus = $content->getReviewStatus(); $approvalStatus = $content->getApprovalStatus(); // Index the review results for easy cross-reference with the Approvers List. $reviewIndex = array("i"=>array(), "g"=>array()); foreach ($reviewStatus as $i=>$rs) { if ($rs["type"]==0) { $reviewIndex["i"][$rs["required"]] = array("status"=>$rs["status"], "idx"=>$i); } else if ($rs["type"]==1) { $reviewIndex["g"][$rs["required"]] = array("status"=>$rs["status"], "idx"=>$i); } } // Index the approval results for easy cross-reference with the Approvers List. $approvalIndex = array("i"=>array(), "g"=>array()); foreach ($approvalStatus as $i=>$rs) { if ($rs["type"]==0) { $approvalIndex["i"][$rs["required"]] = array("status"=>$rs["status"], "idx"=>$i); } else if ($rs["type"]==1) { $approvalIndex["g"][$rs["required"]] = array("status"=>$rs["status"], "idx"=>$i); } } ?>
:
    getMandatoryReviewers(); foreach ($docAccess["users"] as $usr) { $mandatory=false; foreach ($res as $r) if ($r['reviewerUserID']==$usr->getID()) $mandatory=true; if ($mandatory){ print "
  • ". htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName())." <".$usr->getEmail().">"; print ""; }else if (isset($reviewIndex["i"][$usr->getID()])) { switch ($reviewIndex["i"][$usr->getID()]["status"]) { case 0: print "
  • ".htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()); break; case -2: print "
  • ".htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()); break; default: print "
  • ".htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()); break; } } else { print "
  • ". htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()); } } ?>
:
    getID()) $mandatory=true; if ($mandatory){ print "
  • ".htmlspecialchars($group->getName()); print ""; }else if (isset($reviewIndex["g"][$group->getID()])) { switch ($reviewIndex["g"][$group->getID()]["status"]) { case 0: print "
  • ".htmlspecialchars($group->getName()); break; case -2: print "
  • ".htmlspecialchars($group->getName()); break; default: print "
  • ".htmlspecialchars($group->getName()); break; } } else { print "
  • ".htmlspecialchars($group->getName()); } } ?>
:
    getMandatoryApprovers(); foreach ($docAccess["users"] as $usr) { $mandatory=false; foreach ($res as $r) if ($r['approverUserID']==$usr->getID()) $mandatory=true; if ($mandatory){ print "
  • ". htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName())." <".$usr->getEmail().">"; print ""; }else if (isset($approvalIndex["i"][$usr->getID()])) { switch ($approvalIndex["i"][$usr->getID()]["status"]) { case 0: print "
  • ".htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()); break; case -2: print "
  • ".htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()); break; default: print "
  • ".htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()); break; } } else { print "
  • ". htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()); } } ?>
:
    getID()) $mandatory=true; if ($mandatory){ print "
  • ".htmlspecialchars($group->getName()); print ""; }else if (isset($approvalIndex["g"][$group->getID()])) { switch ($approvalIndex["g"][$group->getID()]["status"]) { case 0: print "
  • ".htmlspecialchars($group->getName()); break; case -2: print "
  • ".htmlspecialchars($group->getName()); break; default: print "
  • ".htmlspecialchars($group->getName()); break; } } else { print "
  • ".htmlspecialchars($group->getName()); } } ?>

">

letodms-3.4.2+dfsg/out/out.Statistic.php0000644000175000017500000001477212040235103020704 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } UI::htmlStartPage(getMLText("folders_and_documents_statistic")); UI::globalNavigation(); UI::pageNavigation(getMLText("admin_tools"), "admin_tools"); ?> inheritsAccess() ? "black" : getAccessColor($folder->getDefaultAccess()); print "
  • "; print "getID()."\">".htmlspecialchars($folder->getName()) .""; $owner = $folder->getOwner(); $color = getAccessColor(M_ALL); print " [".htmlspecialchars($owner->getFullName())."] "; if (! $folder->inheritsAccess()) printAccessList($folder); $subFolders = $folder->getSubFolders(); $documents = $folder->getDocuments(); print "
      "; foreach ($subFolders as $sub) $folder_size += printFolder($sub); foreach ($documents as $document){ $doc_count++; $folder_size += printDocument($document); } print "
    "; print "".formatted_size($folder_size).", ".$doc_count." ".getMLText("documents")."\n"; print "
  • "; return $folder_size; } function printDocument($document) { global $document_count, $file_count, $storage_size, $dms; $document_count++; $local_file_count=0; $folder_size=0; if (file_exists($dms->contentDir.$document->getDir())) { $handle = opendir($dms->contentDir.$document->getDir()); while ($entry = readdir($handle) ) { if (is_dir($dms->contentDir.$document->getDir().$entry)) continue; else{ $local_file_count++; $folder_size += filesize($dms->contentDir.$document->getDir().$entry); } } closedir($handle); } $storage_size += $folder_size; $color = $document->inheritsAccess() ? "black" : getAccessColor($document->getDefaultAccess()); print "
  • "; print "getID()."\">".htmlspecialchars($document->getName()).""; $owner = $document->getOwner(); $color = getAccessColor(M_ALL); print " [".htmlspecialchars($owner->getFullName())."] "; if (! $document->inheritsAccess()) printAccessList($document); print "".formatted_size($folder_size).", ".$local_file_count." ".getMLText("files")."\n"; print "
  • "; $file_count += $local_file_count; return $folder_size; } function printAccessList($obj) { $accessList = $obj->getAccessList(); if (count($accessList["users"]) == 0 && count($accessList["groups"]) == 0) return; print " ("; for ($i = 0; $i < count($accessList["groups"]); $i++) { $group = $accessList["groups"][$i]->getGroup(); $color = getAccessColor($accessList["groups"][$i]->getMode()); print "".htmlspecialchars($group->getName()).""; if ($i+1 < count($accessList["groups"]) || count($accessList["users"]) > 0) print ", "; } for ($i = 0; $i < count($accessList["users"]); $i++) { $user = $accessList["users"][$i]->getUser(); $color = getAccessColor($accessList["users"][$i]->getMode()); print "".htmlspecialchars($user->getFullName()).""; if ($i+1 < count($accessList["users"])) print ", "; } print ")"; } UI::contentHeading(getMLText("folders_and_documents_statistic")); UI::contentContainerStart(); print ""; print ""; print "
    \n"; print "
      \n"; print "
    • ".getMLText("access_inheritance")."
    • "; print "
    • ".getMLText("access_mode_all")."
    • "; print "
    • ".getMLText("access_mode_readwrite")."
    • "; print "
    • ".getMLText("access_mode_read")."
    • "; print "
    • ".getMLText("access_mode_none")."
    • "; print "
    \n"; print "
    \n"; print "
      \n"; printFolder($dms->getFolder($settings->_rootFolderID)); print "
    \n"; print "
    "; print "
      \n"; print "
    • ".getMLText("folders").": ".$folder_count."
    • \n"; print "
    • ".getMLText("documents").": ".$document_count."
    • \n"; print "
    • ".getMLText("files").": ".$file_count."
    • \n"; print "
    • ".getMLText("storage_size").": ".formatted_size($storage_size)."
    • \n"; print "
    \n"; print "
    \n"; UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.AddSubFolder.php0000644000175000017500000000760212040235103021225 0ustar franciscofrancisco getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderid = $_GET["folderid"]; $folder = $dms->getFolder($folderid); if (!is_object($folder)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderPathHTML = getFolderPathHTML($folder, true); if ($folder->getAccessMode($user) < M_READWRITE) { UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("access_denied")); } ?> htmlspecialchars($folder->getName())))); UI::globalNavigation($folder); UI::pageNavigation($folderPathHTML, "view_folder", $folder); UI::contentHeading(getMLText("add_subfolder")); UI::contentContainerStart(); ?>
    getAllAttributeDefinitions(array(LetoDMS_Core_AttributeDefinition::objtype_folder, LetoDMS_Core_AttributeDefinition::objtype_all)); if($attrdefs) { foreach($attrdefs as $attrdef) { ?>
    :
    :
    : getSubFolders());?>
    getName()); ?>

    ">
    letodms-3.4.2+dfsg/out/out.ObjectCheck.php0000644000175000017500000001357512040235103021101 0ustar franciscofranciscogetFolderList(); /* Check the folder */ if($folderList != $path) { print "\n"; $needsrepair = true; print "getID()."\">"; print "getID()."\">"; $tmppath = $folder->getPath(); for ($i = 1; $i < count($tmppath); $i++) { print "/".htmlspecialchars($tmppath[$i]->getName()); } print $foldername; print ""; $owner = $folder->getOwner(); print "".htmlspecialchars($owner->getFullName()).""; print "Folderlist is '".$folderList."', should be '".$path."'"; if($repair) { $folder->repair(); print "Repaired\n"; } else { print "\n"; } print "\n"; } } $subfolders = $folder->getSubFolders(); foreach($subfolders as $subfolder) { tree($subfolder, $indent.' ', $path.$folder->getId().':'); } $path .= $folder->getId().':'; $documents = $folder->getDocuments(); foreach($documents as $document) { /* Check the folder list of the document */ $folderList = $document->getFolderList(); if($folderList != $path) { print "\n"; $needsrepair = true; $lc = $document->getLatestContent(); print "getID()."\">getFileType())."\" title=\"".$lc->getMimeType()."\">"; print "getID()."\">/"; $folder = $document->getFolder(); $tmppath = $folder->getPath(); for ($i = 1; $i < count($tmppath); $i++) { print htmlspecialchars($tmppath[$i]->getName())."/"; } print htmlspecialchars($document->getName()); print ""; $owner = $document->getOwner(); print "".htmlspecialchars($owner->getFullName()).""; print "Folderlist is '".$folderList."', should be '".$path."'"; if($repair) { $document->repair(); print "Repaired\n"; } else { print "\n"; } print "\n"; } /* Check if the content is available */ $versions = $document->getContent(); foreach($versions as $version) { $filepath = $dms->contentDir . $version->getPath(); if(!file_exists($filepath)) { print "\n"; print "getID()."\">getFileType())."\" title=\"".$version->getMimeType()."\">"; print "getID()."\">/"; $folder = $document->getFolder(); $tmppath = $folder->getPath(); for ($i = 1; $i < count($tmppath); $i++) { print htmlspecialchars($tmppath[$i]->getName())."/"; } print htmlspecialchars($document->getName()); print ""; $owner = $document->getOwner(); print "".htmlspecialchars($owner->getFullName()).""; print "Document content of version ".$version->getVersion()." is missing ('".$path."')"; if($repair) { print "Cannot repaired\n"; } else { print "\n"; } print "\n"; } } } } /* }}} */ if (!$user->isAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } $v = new LetoDMS_Version; UI::htmlStartPage(getMLText("admin_tools")); UI::globalNavigation(); UI::pageNavigation(getMLText("admin_tools"), "admin_tools"); UI::contentHeading(getMLText("objectcheck")); UI::contentContainerStart(); if(isset($_GET['repair']) && $_GET['repair'] == 1) { $repair = 1; echo "

    ".getMLText('repairing_objects')."

    "; } else { $repair = 0; } $folder = $dms->getFolder($settings->_rootFolderID); print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; $needsrepair = false; tree($folder, $repair); print "
    ".getMLText("name")."".getMLText("owner")."".getMLText("error")."
    \n"; if($needsrepair && $repair == 0) { echo '

    '.getMLText('do_object_repair').'

    '; } UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.RemoveGroup.php0000644000175000017500000000436012040235103021177 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } if (!isset($_GET["groupid"]) || !is_numeric($_GET["groupid"]) || intval($_GET["groupid"])<1) { UI::exitError(getMLText("rm_group"),getMLText("invalid_user_id")); } $groupid = intval($_GET["groupid"]); $currGroup = $dms->getGroup($groupid); if (!is_object($currGroup)) { UI::exitError(getMLText("rm_group"),getMLText("invalid_group_id")); } UI::htmlStartPage(getMLText("admin_tools")); UI::globalNavigation(); UI::pageNavigation(getMLText("admin_tools"), "admin_tools"); UI::contentHeading(getMLText("rm_group")); UI::contentContainerStart(); ?>

    htmlspecialchars($currGroup->getName())));?>

    ">

    letodms-3.4.2+dfsg/out/out.RemoveArchive.php0000644000175000017500000000370512040235103021466 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } if (!isset($_GET["arkname"]) || !file_exists($settings->_contentDir.$_GET["arkname"]) ) { UI::exitError(getMLText("admin_tools"),getMLText("unknown_id")); } $arkname = $_GET["arkname"]; UI::htmlStartPage(getMLText("backup_tools")); UI::globalNavigation(); UI::pageNavigation(getMLText("admin_tools"), "admin_tools"); UI::contentHeading(getMLText("backup_remove")); UI::contentContainerStart(); ?>

    sanitizeString($arkname)));?>

    ">
    letodms-3.4.2+dfsg/out/out.EditComment.php0000644000175000017500000000663612040235103021145 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = $_GET["documentid"]; $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; $versionid = $_GET["version"]; $version = $document->getContentByVersion($versionid); if (!is_object($version)) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); ?>
    :

    ">
    letodms-3.4.2+dfsg/out/out.UserImage.php0000644000175000017500000000261712040235103020611 0ustar franciscofranciscogetUser($userid); if (!$myUser->hasImage()) UI::exitError(getMLText("user_image"),getMLText("no_user_image")); if($resArr = $myUser->getImage()) { header("ContentType: " . $resArr["mimeType"]); print base64_decode($resArr["image"]); } exit; ?> letodms-3.4.2+dfsg/out/out.KeywordChooser.php0000644000175000017500000001334612040235103021700 0ustar franciscofranciscogetAllUsers(); $userids = array($user->getID()); foreach($allusers as $u) { if($u->isAdmin()) $userids[] = $u->getId(); } $categories = $dms->getAllKeywordCategories($userids); if($_GET['target']) { $target = sanitizeString($_GET['target']); } else { $target = 'form1'; } UI::htmlStartPage(getMLText("use_default_keywords")); ?>
    getOwner(); if (!$owner->isAdmin()) continue; ?> getOwner(); if ($owner->isAdmin()) continue; ?>
    :

    :

    :


    ">    ">
    letodms-3.4.2+dfsg/out/out.GroupView.php0000644000175000017500000000707312040235103020660 0ustar franciscofranciscoisGuest()) { UI::exitError(getMLText("my_account"),getMLText("access_denied")); } if (!$settings->_enableUsersView) { UI::exitError(getMLText("my_account"),getMLText("access_denied")); } $allUsers = $dms->getAllUsers(); if (is_bool($allUsers)) { UI::exitError(getMLText("my_account"),getMLText("internal_error")); } $groups = $dms->getAllGroups(); if (is_bool($groups)) { UI::exitError(getMLText("admin_tools"),getMLText("internal_error")); } UI::htmlStartPage(getMLText("my_account")); UI::globalNavigation(); UI::pageNavigation(getMLText("my_account"), "my_account"); UI::contentHeading(getMLText("groups")); UI::contentContainerStart(); echo "
      \n"; $users = $dms->getAllUsers(); foreach ($groups as $group){ $members = $group->getUsers(); $managers = $group->getManagers(); $ismanager = false; /* set to true if current user is manager */ echo "
    • ".htmlspecialchars($group->getName()); if($group->getComment()) echo " : ".htmlspecialchars($group->getComment()); foreach($managers as $manager) if($manager->getId() == $user->getId()) { echo " : you are the manager of this group"; $ismanager = true; } echo "
    • "; echo "
        \n"; $memberids = array(); foreach ($members as $member) { $memberids[] = $member->getId(); echo "
      • ".htmlspecialchars($member->getFullName()); if ($member->getEmail()!="") echo " (getEmail())."\">".htmlspecialchars($member->getEmail()).")"; foreach($managers as $manager) if($manager->getId() == $member->getId()) echo ", ".getMLText("manager"); if($ismanager) { echo ' '.getMLText("rm_user").''; } echo "
      • "; } if($ismanager) { echo "
      • ".getMLText("add_user_to_group").":"; echo "
        "; echo "getId()."\" />"; echo ""; echo "
        "; echo "
      • "; } echo "
      \n"; } echo "
    \n"; UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.DocumentNotify.php0000644000175000017500000001375112040235103021700 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = $_GET["documentid"]; $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if ($document->getAccessMode($user) < M_READ) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } $notifyList = $document->getNotifyList(); UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); ?> \n"; if ((count($notifyList["users"]) == 0) && (count($notifyList["groups"]) == 0)) { print "".getMLText("empty_notify_list").""; } else { foreach ($notifyList["users"] as $userNotify) { print ""; print ""; print "" . htmlspecialchars($userNotify->getLogin() . " - " . $userNotify->getFullName()) . ""; if ($user->isAdmin() || $user->getID() == $userNotify->getID()) { print "getID()."\">".getMLText("delete").""; }else print ""; print ""; $userNotifyIDs[] = $userNotify->getID(); } foreach ($notifyList["groups"] as $groupNotify) { print ""; print ""; print "" . htmlspecialchars($groupNotify->getName()) . ""; if ($user->isAdmin() || $groupNotify->isMember($user,true)) { print "getID()."\">".getMLText("delete").""; }else print ""; print ""; $groupNotifyIDs[] = $groupNotify->getID(); } } print "\n"; ?>
    :
    :
    ">
    letodms-3.4.2+dfsg/out/out.RemoveLog.php0000644000175000017500000000363412040235103020627 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } if (!isset($_GET["logname"]) || !file_exists($settings->_contentDir.$_GET["logname"]) ) { UI::exitError(getMLText("admin_tools"),getMLText("unknown_id")); } $logname = sanitizeString($_GET["logname"]); UI::htmlStartPage(getMLText("backup_tools")); UI::globalNavigation(); UI::pageNavigation(getMLText("admin_tools"), "admin_tools"); UI::contentHeading(getMLText("rm_file")); UI::contentContainerStart(); ?>

    $logname));?>

    ">
    letodms-3.4.2+dfsg/out/out.EditUserData.php0000644000175000017500000001040412040235103021237 0ustar franciscofranciscoisGuest()) { UI::exitError(getMLText("edit_user_details"),getMLText("access_denied")); } if (!$user->isAdmin() && ($settings->_disableSelfEdit)) { UI::exitError(getMLText("edit_user_details"),getMLText("access_denied")); } UI::htmlStartPage(getMLText("edit_user_details")); UI::globalNavigation(); UI::pageNavigation(getMLText("my_account"), "my_account"); ?>
    _enableUserImage){ ?>
    :
    :
     
    :
    :
    :
    :
    : hasImage()) print "_httpRoot . "out/out.UserImage.php?userid=".$user->getId()."\">"; else printMLText("no_user_image"); ?>
    :
    ">
    letodms-3.4.2+dfsg/out/out.PasswordForgotten.php0000644000175000017500000000405512040235103022420 0ustar franciscofrancisco
    0) { echo ""; } ?>

    ">

    letodms-3.4.2+dfsg/out/out.AddFile.php0000644000175000017500000000734612040235103020224 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = $_GET["documentid"]; $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if ($document->getAccessMode($user) < M_READWRITE) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); ?>

    :
    :
    :

    ">

    letodms-3.4.2+dfsg/out/out.DocumentChooser.php0000644000175000017500000001202012040235103022016 0ustar franciscofranciscogetSubFolders(), $user, M_READ); $documents = LetoDMS_Core_DMS::filterAccess($folder->getDocuments(), $user, M_READ); if ($level+1 < count($path)) $nextFolderID = $path[$level+1]->getID(); else $nextFolderID = -1; if ($level == 0) { print "
      \n"; } print "
    • \n"; print " 0) UI::printImgPath("minus.png"); else UI::printImgPath("blank.png"); print "\" border=0>\n"; if ($folder->getAccessMode($user) >= M_READ) { print "".htmlspecialchars($folder->getName())."\n"; } else print "".htmlspecialchars($folder->getName())."\n"; print "
    • \n"; print "\n"; if ($level == 0) { print "
    \n"; } } UI::htmlStartPage(getMLText("choose_target_document")); UI::globalBanner(); UI::pageNavigation(getMLText("choose_target_document")); ?> getFolder($folderid); echo ""; UI::contentContainerStart(); echo "
    "; UI::contentContainerEnd(); UI::contentContainerStart(); printTree($folder->getPath()); UI::contentContainerEnd(); ?> letodms-3.4.2+dfsg/out/out.SearchForm.php0000644000175000017500000002040512037447211020767 0ustar franciscofrancisco_rootFolderID; $folder = $dms->getFolder($folderid); } else { $folderid = $_GET["folderid"]; $folder = $dms->getFolder($folderid); } if (!is_object($folder)) { UI::exitError(getMLText("search"),getMLText("invalid_folder_id")); } $folderPathHTML = getFolderPathHTML($folder, true); UI::htmlStartPage(getMLText("search")); UI::globalNavigation($folder); UI::pageNavigation($folderPathHTML, "", $folder); ?> _enableFullSearch) { ?>

    getAllAttributeDefinitions(array(LetoDMS_Core_AttributeDefinition::objtype_document, LetoDMS_Core_AttributeDefinition::objtype_documentcontent/*, LetoDMS_Core_AttributeDefinition::objtype_all*/)); if($attrdefs) { foreach($attrdefs as $attrdef) { ?> \n\n"; echo "\n\n"; */ ?>
    :
    :
    • ()
    getName()); ?>
    :
    ()
    :
    ()
    :
    :
    :
    ".getMLText("last_update").":"; printMLText("between"); print "  "; UI::printDateChooser(-1, "updatestart"); print "  "; printMLText("and"); print "  "; UI::printDateChooser(-1, "updateend"); echo "
    ">
    _enableFullSearch) { ?>

    :
    :
    :
    ">
    letodms-3.4.2+dfsg/out/out.ForcePasswordChange.php0000644000175000017500000000465612040235103022624 0ustar franciscofrancisco * @copyright Copyright (C) 2012 Uwe Steinmann * @version Release: @package_version@ */ include("../inc/inc.Settings.php"); include("../inc/inc.DBInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); UI::htmlStartPage(getMLText("sign_in"), "login"); UI::globalBanner(); echo "

    ".getMLText('password_expiration')."

    "; echo "

    ".getMLText('password_expiration_text')."

    "; UI::contentContainerStart(); ?>
    :
    :
     
    :
    ">
    " . getMLText("logout") . "\n"; print "

    "; print implode(' | ', $tmpfoot); print "

    \n"; UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.ReviewSummary.php0000644000175000017500000001620612040235103021546 0ustar franciscofranciscoisGuest()) { UI::exitError(getMLText("my_documents"),getMLText("access_denied")); } if (!$db->createTemporaryTable("ttstatid")) { UI::exitError(getMLText("review_summary"),getMLText("internal_error_exit")); } UI::htmlStartPage(getMLText("my_documents")); UI::globalNavigation(); UI::pageNavigation(getMLText("my_documents"), "my_documents"); UI::contentHeading(getMLText("review_summary")); UI::contentContainerStart(); // TODO: verificare scadenza // Get document list for the current user. $reviewStatus = $user->getReviewStatus(); // reverse order $reviewStatus["indstatus"]=array_reverse($reviewStatus["indstatus"],true); $reviewStatus["grpstatus"]=array_reverse($reviewStatus["grpstatus"],true); // Create a comma separated list of all the documentIDs whose information is // required. $dList = array(); foreach ($reviewStatus["indstatus"] as $st) { if (!in_array($st["documentID"], $dList)) { $dList[] = $st["documentID"]; } } foreach ($reviewStatus["grpstatus"] as $st) { if (!in_array($st["documentID"], $dList)) { $dList[] = $st["documentID"]; } } $docCSV = ""; foreach ($dList as $d) { $docCSV .= (strlen($docCSV)==0 ? "" : ", ")."'".$d."'"; } if (strlen($docCSV)>0) { $queryStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`, ". "`tblDocumentStatus`.*, `tblDocumentStatusLog`.`status`, ". "`tblDocumentStatusLog`.`comment` AS `statusComment`, `tblDocumentStatusLog`.`date` as `statusDate`, ". "`tblDocumentStatusLog`.`userID`, `oTbl`.`fullName` AS `ownerName`, `sTbl`.`fullName` AS `statusName` ". "FROM `tblDocumentStatus` ". "LEFT JOIN `tblDocumentStatusLog` USING (`statusID`) ". "LEFT JOIN `ttstatid` on `ttstatid`.`maxLogID` = `tblDocumentStatusLog`.`statusLogID` ". "LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentStatus`.`documentID` ". "LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` ". "LEFT JOIN `tblUsers` AS `oTbl` on `oTbl`.`id` = `tblDocuments`.`owner` ". "LEFT JOIN `tblUsers` AS `sTbl` on `sTbl`.`id` = `tblDocumentStatusLog`.`userID` ". "WHERE `ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` ". "AND `tblDocuments`.`id` IN (" . $docCSV . ") ". "ORDER BY `sequence`"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) { UI::exitError(getMLText("review_summary"),getMLText("internal_error_exit")); } // Create an array to hold all of these results, and index the array by // document id. This makes it easier to retrieve document ID information // later on and saves us having to repeatedly poll the database every time // new document information is required. $docIdx = array(); foreach ($resArr as $res) { // verify expiry if ( $res["expires"] && time()>$res["expires"]+24*60*60 ){ if ( $res["status"]==S_DRAFT_APP || $res["status"]==S_DRAFT_REV ){ $res["status"]=S_EXPIRED; } } $docIdx[$res["id"]][$res["version"]] = $res; } } $printheader=true; $iRev = array(); foreach ($reviewStatus["indstatus"] as $st) { if (isset($docIdx[$st["documentID"]][$st["version"]])) { if ($printheader){ print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; $printheader=false; } print "\n"; print ""; print ""; print ""; print ""; print ""; print ""; print "\n"; } if ($st["status"]!=-2) { $iRev[] = $st["documentID"]; } } if (!$printheader) { echo "\n
    ".getMLText("name")."".getMLText("owner")."".getMLText("status")."".getMLText("version")."".getMLText("last_update")."".getMLText("expires")."
    ".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["name"])."".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["ownerName"])."".getOverallStatusText($docIdx[$st["documentID"]][$st["version"]]["status"])."".$st["version"]."".$st["date"]." ". htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["statusName"]) ."".(!$docIdx[$st["documentID"]][$st["version"]]["expires"] ? "-":getReadableDate($docIdx[$st["documentID"]][$st["version"]]["expires"]))."
    "; }else{ printMLText("empty_notify_list"); } UI::contentContainerEnd(); UI::contentHeading(getMLText("group_review_summary")); UI::contentContainerStart(); $printheader=true; foreach ($reviewStatus["grpstatus"] as $st) { if (!in_array($st["documentID"], $iRev) && isset($docIdx[$st["documentID"]][$st["version"]])) { if ($printheader){ print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; $printheader=false; } print "\n"; print ""; print ""; print ""; print ""; print ""; print ""; print "\n"; } } if (!$printheader) { echo "\n
    ".getMLText("name")."".getMLText("owner")."".getMLText("status")."".getMLText("version")."".getMLText("last_update")."".getMLText("expires")."
    ".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["name"])."".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["ownerName"])."".getOverallStatusText($docIdx[$st["documentID"]][$st["version"]]["status"])."".$st["version"]."".$st["date"]." ". htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["statusName"]) ."".(!$docIdx[$st["documentID"]][$st["version"]]["expires"] ? "-":getReadableDate($docIdx[$st["documentID"]][$st["version"]]["expires"]))."
    "; }else{ printMLText("empty_notify_list"); } UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.EditAttributes.php0000644000175000017500000000623112040235103021660 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = $_GET["documentid"]; $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; $versionid = $_GET["version"]; $version = $document->getContentByVersion($versionid); if (!is_object($version)) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); UI::contentHeading(getMLText("edit_attributes")); UI::contentContainerStart(); ?>
    getAllAttributeDefinitions(array(LetoDMS_Core_AttributeDefinition::objtype_documentcontent, LetoDMS_Core_AttributeDefinition::objtype_all)); if($attrdefs) { foreach($attrdefs as $attrdef) { ?>
    getName()); ?> getAttributeValue($attrdef)) ?>

    ">
    letodms-3.4.2+dfsg/out/out.RemoveDocumentFile.php0000644000175000017500000000637012040235103022464 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = intval($_GET["documentid"]); $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if (!isset($_GET["fileid"]) || !is_numeric($_GET["fileid"]) || intval($_GET["fileid"])<1) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_file_id")); } $fileid = $_GET["fileid"]; $file = $document->getDocumentFile($fileid); if (!is_object($file)) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_file_id")); } if (($document->getAccessMode($user) < M_ALL)&&($user->getID()!=$file->getUserID())) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); UI::contentHeading(getMLText("rm_file")); UI::contentContainerStart(); ?>

    htmlspecialchars($document->getName()), "name" => htmlspecialchars($file->getName())));?>

    ">
    letodms-3.4.2+dfsg/out/out.FolderChooser.php0000644000175000017500000000505612040235103021466 0ustar franciscofrancisco _rootFolderID); UI::contentContainerEnd(); ?> letodms-3.4.2+dfsg/out/out.MyAccount.php0000644000175000017500000000504412040235103020627 0ustar franciscofranciscoisGuest()) { UI::exitError(getMLText("my_account"),getMLText("access_denied")); } UI::htmlStartPage(getMLText("my_account")); UI::globalNavigation(); UI::pageNavigation(getMLText("my_account"), "my_account"); UI::contentHeading(getMLText("user_info")); UI::contentContainerStart(); print "\n"; if ($settings->_enableUserImage){ print "\n"; print "\n"; print "\n"; } print "\n"; print "\n"; print "\n"; print "\n\n"; print "\n"; print "\n"; print "\n\n"; print "\n"; print "\n"; print "\n\n"; print "\n"; print "\n"; print "\n"; if($settings->_passwordExpiration > 0) { print "\n"; print "\n"; print "\n"; print "\n"; } print "
    ".($user->hasImage() ? "_httpRoot . "out/out.UserImage.php?userid=".$user->getId()."\">" : getMLText("no_user_image"))."
    ".getMLText("name")." : ".htmlspecialchars($user->getFullName()).($user->isAdmin() ? " (".getMLText("admin").")" : "")."
    ".getMLText("user_login")." : ".$user->getLogin()."
    ".getMLText("email")." : ".htmlspecialchars($user->getEmail())."
    ".getMLText("comment")." : ".htmlspecialchars($user->getComment())."
    ".getMLText("password_expiration")." : ".htmlspecialchars($user->getPwdExpiration())."
    \n"; UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.ApproveDocument.php0000644000175000017500000001675712047217655022100 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = $_GET["documentid"]; $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if ($document->getAccessMode($user) < M_READ) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } if (!isset($_GET["version"]) || !is_numeric($_GET["version"]) || intval($_GET["version"])<1) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } $version = $_GET["version"]; $content = $document->getContentByVersion($version); if (!is_object($content)) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } // operation is admitted only for last deocument version $latestContent = $document->getLatestContent(); if ($latestContent->getVersion()!=$version) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } // verify if document has expired if ($document->hasExpired()){ UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } $approvals = $latestContent->getApprovalStatus(); if(!$approvals) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("no_action")); } foreach($approvals as $approval) { if($approval['approveID'] == $_GET['approveid']) { $approvalStatus = $approval; break; } } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); UI::contentHeading(getMLText("submit_approval")); ?> "; print "".getMLText("status").""; print "".getMLText("comment").""; print "".getMLText("last_update").""; print ""; print ""; printApprovalStatusText($approvalStatus["status"]); print ""; print "".htmlspecialchars($approvalStatus["comment"]).""; $indUser = $dms->getUser($approvalStatus["userID"]); print "".$approvalStatus["date"]." - ". $indUser->getFullname() .""; print "
    \n"; } ?>
    :
    :
    "; print "".getMLText("status").""; print "".getMLText("comment").""; print "".getMLText("last_update").""; print ""; print ""; printApprovalStatusText($approvalStatus["status"]); print ""; print "".htmlspecialchars($approvalStatus["comment"]).""; $indUser = $dms->getUser($approvalStatus["userID"]); print "".$approvalStatus["date"]." - ". htmlspecialchars($indUser->getFullname()) .""; print "
    \n"; } ?>
    :
    :
    letodms-3.4.2+dfsg/out/out.AddEvent.php0000644000175000017500000000503112040235103020413 0ustar franciscofranciscoisGuest()) { UI::exitError(getMLText("edit_event"),getMLText("access_denied")); } UI::htmlStartPage(getMLText("calendar")); UI::globalNavigation(); UI::pageNavigation(getMLText("calendar"), "calendar"); UI::contentHeading(getMLText("add_event")); UI::contentContainerStart(); ?>
    :
    :
    :
    :

    ">
    letodms-3.4.2+dfsg/out/out.ViewFolder.php0000644000175000017500000001474212040235103021000 0ustar franciscofrancisco_rootFolderID; } else { $folderid = intval($_GET["folderid"]); } $folder = $dms->getFolder($folderid); if (!is_object($folder)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $showtree=showtree(); if (isset($_GET["orderby"]) && strlen($_GET["orderby"])==1 ) { $orderby=$_GET["orderby"]; }else $orderby=""; $folderPathHTML = getFolderPathHTML($folder); if ($folder->getAccessMode($user) < M_READ) { UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName())))); UI::globalNavigation($folder); UI::pageNavigation($folderPathHTML, "view_folder", $folder); if ($settings->_enableFolderTree) UI::printTreeNavigation($folderid,$showtree); UI::contentHeading(getMLText("folder_infos")); $owner = $folder->getOwner(); UI::contentContainerStart(); print "\n\n". "\n". "\n\n\n". "\n". "\n\n"; $attributes = $folder->getAttributes(); if($attributes) { foreach($attributes as $attribute) { $attrdef = $attribute->getAttributeDefinition(); ?> \n"; UI::contentContainerEnd(); UI::contentHeading(getMLText("folder_contents")); UI::contentContainerStart(); $subFolders = $folder->getSubFolders($orderby); $subFolders = LetoDMS_Core_DMS::filterAccess($subFolders, $user, M_READ); $documents = $folder->getDocuments($orderby); $documents = LetoDMS_Core_DMS::filterAccess($documents, $user, M_READ); if ((count($subFolders) > 0)||(count($documents) > 0)){ print "
    ".getMLText("owner").":getEmail())."\">".htmlspecialchars($owner->getFullName())."". "
    ".getMLText("comment").":".htmlspecialchars($folder->getComment())."
    getName()); ?>: getValue()); ?>
    "; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; } else printMLText("empty_notify_list"); foreach($subFolders as $subFolder) { $owner = $subFolder->getOwner(); $comment = $subFolder->getComment(); if (strlen($comment) > 50) $comment = substr($comment, 0, 47) . "..."; $subsub = $subFolder->getSubFolders(); $subsub = LetoDMS_Core_DMS::filterAccess($subsub, $user, M_READ); $subdoc = $subFolder->getDocuments(); $subdoc = LetoDMS_Core_DMS::filterAccess($subdoc, $user, M_READ); print ""; // print ""; print "\n"; print "\n"; print ""; print ""; print ""; print ""; print "\n"; } foreach($documents as $document) { $owner = $document->getOwner(); $comment = $document->getComment(); if (strlen($comment) > 50) $comment = substr($comment, 0, 47) . "..."; $docID = $document->getID(); $latestContent = $document->getLatestContent(); $version = $latestContent->getVersion(); $status = $latestContent->getStatus(); print ""; if (file_exists($dms->contentDir . $latestContent->getPath())) print ""; else print ""; print "\n"; print ""; print ""; print ""; print ""; print "\n"; } if ((count($subFolders) > 0)||(count($documents) > 0)) echo "\n
    ".getMLText("name")."".getMLText("owner")."".getMLText("status")."".getMLText("version")."".getMLText("comment")."
    getID()."&showtree=".$showtree."\">getID()."&showtree=".$showtree."\">" . htmlspecialchars($subFolder->getName()) . "".htmlspecialchars($owner->getFullName())."".count($subsub)." ".getMLText("folders").", ".count($subdoc)." ".getMLText("documents")."".htmlspecialchars($comment)."
    getFileType())."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">getFileType())."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">" . htmlspecialchars($document->getName()) . "".htmlspecialchars($owner->getFullName()).""; if ( $document->isLocked() ) { print "getLockingUser()->getFullName())."\"> "; } print getOverallStatusText($status["status"])."".$version."".htmlspecialchars($comment)."
    \n"; UI::contentContainerEnd(); if ($settings->_enableFolderTree) print ""; UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.DefaultKeywords.php0000644000175000017500000001546412040235103022050 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } UI::htmlStartPage(getMLText("admin_tools")); UI::globalNavigation(); UI::pageNavigation(getMLText("admin_tools"), "admin_tools"); $categories = $dms->getAllUserKeywordCategories($user->getID()); ?> getOwner(); if ((!$user->isAdmin()) && ($owner->getID() != $user->getID())) continue; print "
    :    getID()."\" style=\"display : none;\">"; ?>
    " type="submit" title="">
    :
      ">
    : getKeywordLists(); if (count($lists) == 0) print getMLText("no_default_keywords"); else foreach ($lists as $list) { ?>
    "> "> " style="border: 0px;">
    "> " style="border: 0px;">

    ">
    letodms-3.4.2+dfsg/out/out.Calendar.php0000644000175000017500000001577712040235103020454 0ustar franciscofrancisco "; print " "; print " "; printYearTable($year); UI::contentContainerEnd(); }else if ($mode=="m"){ if (!isset($dayNamesLong)) generateCalendarArrays(); if (!isset($monthNames)) generateCalendarArrays(); UI::contentHeading(getMLText("month_view")." : ".$monthNames[$month-1]. " ".$year); UI::contentContainerStart(); print " "; print " "; print " "; $days=getDaysInMonth($month, $year); $today = getdate(time()); $events = getEventsInInterval(mktime(0,0,0, $month, 1, $year), mktime(23,59,59, $month, $days, $year)); echo "\n"; for ($i=1; $i<=$days; $i++){ // separate weeks $date = getdate(mktime(12, 0, 0, $month, $i, $year)); if (($date["wday"]==$settings->_firstDayOfWeek) && ($i!=1)) echo "\n"; // highlight today $class = ($year == $today["year"] && $month == $today["mon"] && $i == $today["mday"]) ? "todayHeader" : "header"; echo ""; echo ""; echo ""; if ($class=="todayHeader") $class="today"; else $class=""; $xdate=mktime(0, 0, 0, $month, $i, $year); foreach ($events as $event){ if (($event["start"]<=$xdate)&&($event["stop"]>=$xdate)){ if (strlen($event['name']) > 25) $event['name'] = substr($event['name'], 0, 22) . "..."; print ""; }else{ print ""; } } echo "\n"; } echo "
     
    ".$i."".$dayNamesLong[$date["wday"]]."".htmlspecialchars($event['name'])." 
    \n"; UI::contentContainerEnd(); }else{ if (!isset($dayNamesLong)) generateCalendarArrays(); if (!isset($monthNames)) generateCalendarArrays(); // get the week interval - TODO: $GET $datestart=getdate(mktime(0,0,0,$month,$day,$year)); while($datestart["wday"]!=$settings->_firstDayOfWeek){ $datestart=getdate(mktime(0,0,0,$datestart["mon"],$datestart["mday"]-1,$datestart["year"])); } $datestop=getdate(mktime(23,59,59,$month,$day,$year)); if ($datestop["wday"]==$settings->_firstDayOfWeek){ $datestop=getdate(mktime(23,59,59,$datestop["mon"],$datestop["mday"]+1,$datestop["year"])); } while($datestop["wday"]!=$settings->_firstDayOfWeek){ $datestop=getdate(mktime(23,59,59,$datestop["mon"],$datestop["mday"]+1,$datestop["year"])); } $datestop=getdate(mktime(23,59,59,$datestop["mon"],$datestop["mday"]-1,$datestop["year"])); $starttime=mktime(0,0,0,$datestart["mon"],$datestart["mday"],$datestart["year"]); $stoptime=mktime(23,59,59,$datestop["mon"],$datestop["mday"],$datestop["year"]); $today = getdate(time()); $events = getEventsInInterval($starttime,$stoptime); UI::contentHeading(getMLText("week_view")." : ".getReadableDate(mktime(12, 0, 0, $month, $day, $year))); UI::contentContainerStart(); print " "; print " "; print " "; echo "\n"; for ($i=$starttime; $i<$stoptime; $i += 86400){ $date = getdate($i); // for daylight saving time TODO: could be better if ( ($i!=$starttime) && ($prev_day==$date["mday"]) ){ $i += 3600; $date = getdate($i); } // highlight today $class = ($date["year"] == $today["year"] && $date["mon"] == $today["mon"] && $date["mday"] == $today["mday"]) ? "todayHeader" : "header"; echo ""; echo ""; echo ""; if ($class=="todayHeader") $class="today"; else $class=""; foreach ($events as $event){ if (($event["start"]<=$i)&&($event["stop"]>=$i)){ print ""; }else{ print ""; } } echo "\n"; $prev_day=$date["mday"]; } echo "
    ".getReadableDate($i)."".$dayNamesLong[$date["wday"]]."".htmlspecialchars($event['name'])." 
    \n"; UI::contentContainerEnd(); } UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.GroupMgr.php0000644000175000017500000001732012040235103020467 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } $allUsers = $dms->getAllUsers($settings->_sortUsersInList); if (is_bool($allUsers)) { UI::exitError(getMLText("admin_tools"),getMLText("internal_error")); } $groups = $dms->getAllGroups(); if (is_bool($groups)) { UI::exitError(getMLText("admin_tools"),getMLText("internal_error")); } UI::htmlStartPage(getMLText("admin_tools")); UI::globalNavigation(); UI::pageNavigation(getMLText("admin_tools"), "admin_tools"); ?> getID()."\" style=\"display : none;\">"; UI::contentSubHeading(getMLText("group")." : ".htmlspecialchars($group->getName())); ?>
    :   
    :
    :
    ">
    getUsers(); if (count($members) == 0) print ""; else { foreach ($members as $member) { print ""; print ""; print ""; print ""; print ""; } } ?>
    ".getMLText("no_group_members")."
    " . htmlspecialchars($member->getFullName()) . "" . ($group->isMember($member,true)?getMLText("manager"):" ") . "
      "; print "
    • getID()."\" />getID()."\" />".createHiddenFieldWithKey('rmmember')."
      "; print "
    • getID()."\" />getID()."\" />".createHiddenFieldWithKey('tmanager')."
      "; print "
    ">
    letodms-3.4.2+dfsg/out/out.ManageNotify.php0000644000175000017500000001473712040235103021317 0ustar franciscofranciscoisGuest()) { UI::exitError(getMLText("my_account"),getMLText("access_denied")); } // Get list of subscriptions for documents or folders for user or groups function getNotificationList($as_group, $folders) { global $user,$db; // First, get the list of groups of which the user is a member. if ($as_group){ $groups = $user->getGroups(); if (count($groups)==0) return NULL; $grpList = ""; foreach ($groups as $group) { $grpList .= (strlen($grpList)==0 ? "" : ", ") . $group->getID(); } $queryStr = "SELECT `tblNotify`.* FROM `tblNotify` ". "WHERE `tblNotify`.`groupID` IN (". $grpList .")"; } else { $queryStr = "SELECT `tblNotify`.* FROM `tblNotify` ". "WHERE `tblNotify`.`userID` = '". $user->getID()."'" ; } $resArr = $db->getResultArray($queryStr); $ret=array(); foreach ($resArr as $res){ if (($res["targetType"] == T_DOCUMENT)&&(!$folders)) $ret[]=$res["target"]; if (($res["targetType"] == T_FOLDER)&&($folders)) $ret[]=$res["target"]; } return $ret; } function printFolderNotificationList($ret,$deleteaction=true) { global $dms; if (count($ret)==0) { printMLText("empty_notify_list"); } else { print ""; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n"; foreach($ret as $ID) { $fld = $dms->getFolder($ID); if (is_object($fld)) { $owner = $fld->getOwner(); print ""; print ""; print "\n"; print ""; print ""; } } print "
    ".getMLText("name")."".getMLText("owner")."".getMLText("actions")."
    " . htmlspecialchars($fld->getName()) . "".htmlspecialchars($owner->getFullName())."
    "; } } function printDocumentNotificationList($ret,$deleteaction=true) { global $dms; if (count($ret)==0) { printMLText("empty_notify_list"); } else { print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n"; foreach ($ret as $ID) { $doc = $dms->getDocument($ID); if (is_object($doc)) { $owner = $doc->getOwner(); $latest = $doc->getLatestContent(); $status = $latest->getStatus(); print "\n"; print ""; print "\n"; print ""; print ""; print ""; print "\n"; } } print "
    ".getMLText("name")."".getMLText("owner")."".getMLText("status")."".getMLText("version")."".getMLText("actions")."
    " . htmlspecialchars($doc->getName()) . "".htmlspecialchars($owner->getFullName())."".getOverallStatusText($status["status"])."".$latest->getVersion()."
    "; } } UI::htmlStartPage(getMLText("my_account")); UI::globalNavigation(); UI::pageNavigation(getMLText("my_account"), "my_account"); UI::contentHeading(getMLText("edit_existing_notify")); UI::contentContainerStart(); print "
    "; UI::contentSubHeading(getMLText("choose_target_folder")); UI::printFolderChooser("form1",M_READ); print ""; print getMLText("include_subdirectories"); print ""; print getMLText("include_documents"); print "  "; print "
    "; print "
    "; UI::contentSubHeading(getMLText("choose_target_document")); UI::printDocumentChooser("form2"); print "  "; print "
    "; UI::contentContainerEnd(); // // Display the results. // UI::contentHeading(getMLText("edit_folder_notify")); UI::contentContainerStart(); UI::contentSubHeading(getMLText("user")); $ret=getNotificationList(false,true); printFolderNotificationList($ret); UI::contentSubHeading(getMLText("group")); $ret=getNotificationList(true,true); printFolderNotificationList($ret,false); UI::contentContainerEnd(); UI::contentHeading(getMLText("edit_document_notify")); UI::contentContainerStart(); UI::contentSubHeading(getMLText("user")); $ret=getNotificationList(false,false); printDocumentNotificationList($ret); UI::contentSubHeading(getMLText("group")); $ret=getNotificationList(true,false); printDocumentNotificationList($ret,false); UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.Indexer.php0000644000175000017500000001072212057073326020341 0ustar franciscofranciscogetName())."\n"; $subfolders = $folder->getSubFolders(); foreach($subfolders as $subfolder) { tree($subfolder, $indent.' '); } $documents = $folder->getDocuments(); foreach($documents as $document) { echo $indent." ".$document->getId().":".htmlspecialchars($document->getName())." "; /* If the document wasn't indexed before then just add it */ if(!($hits = $index->find('document_id:'.$document->getId()))) { $index->addDocument(new LetoDMS_Lucene_IndexedDocument($dms, $document, $settings->_convcmd ? $settings->_convcmd : null)); echo "(document added)"; } else { $hit = $hits[0]; /* Check if the attribute created is set or has a value older * than the lasted content. Documents without such an attribute * where added when a new document was added to the dms. In such * a case the document content wasn't indexed. */ try { $created = (int) $hit->getDocument()->getFieldValue('created'); } catch (Zend_Search_Lucene_Exception $e) { $created = 0; } $content = $document->getLatestContent(); if($created >= $content->getDate()) { echo $indent."(document unchanged)"; } else { if($index->delete($hit->id)) { $index->addDocument(new LetoDMS_Lucene_IndexedDocument($dms, $document, $settings->_convcmd ? $settings->_convcmd : null)); } echo $indent."(document updated)"; } } echo "\n"; } } /* }}} */ if (!$user->isAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } $v = new LetoDMS_Version; UI::htmlStartPage($v->banner()); UI::globalNavigation(); UI::pageNavigation($v->banner()); UI::contentContainerStart(); if($settings->_enableFullSearch) { if(!empty($settings->_luceneClassDir)) require_once($settings->_luceneClassDir.'/Lucene.php'); else require_once('LetoDMS/Lucene.php'); if(isset($_GET['create']) && $_GET['create'] == 1) { if(isset($_GET['confirm']) && $_GET['confirm'] == 1) { echo "

    Recreating index

    "; $index = LetoDMS_Lucene_Indexer::create($settings->_luceneDir); LetoDMS_Lucene_Indexer::init($settings->_stopWordsFile); } else { echo '

    '.getMLText('create_fulltext_index_warning').'

    '; echo ''.getMLText('confirm_create_fulltext_index').''; UI::contentContainerEnd(); UI::htmlEndPage(); exit; } } else { $index = LetoDMS_Lucene_Indexer::open($settings->_luceneDir); if(!$index) { printMLText("no_fulltextindex"); UI::contentContainerEnd(); UI::htmlEndPage(); exit; } echo "

    Updating index

    "; LetoDMS_Lucene_Indexer::init($settings->_stopWordsFile); } /* $analyzer = new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive(); if($settings->_stopWordsFile && file_exists($settings->_stopWordsFile)) { $stopWordsFilter = new Zend_Search_Lucene_Analysis_TokenFilter_StopWords(); $stopWordsFilter->loadFromFile($settings->_stopWordsFile); $analyzer->addFilter($stopWordsFilter); } Zend_Search_Lucene_Analysis_Analyzer::setDefault($analyzer); */ $folder = $dms->getFolder($settings->_rootFolderID); echo "
    ";
    	tree($folder);
    	echo "
    "; $index->commit(); } else { printMLText("fulltextsearch_disabled"); } UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.DocumentVersionDetail.php0000644000175000017500000002546712040235103023207 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = $_GET["documentid"]; $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if ($document->getAccessMode($user) < M_READ) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } if (!isset($_GET["version"]) || !is_numeric($_GET["version"]) || intval($_GET["version"])<1) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } $version = $_GET["version"]; $version = $document->getContentByVersion($version); if (!is_object($version)) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } // if version is last got out.ViewDocument $latestContent = $document->getLatestContent(); if ($latestContent->getVersion()==$version->getVersion()) { header("Location:../out/out.ViewDocument.php?documentid=".$documentid); } $status = $version->getStatus(); $reviewStatus = $version->getReviewStatus(); $approvalStatus = $version->getApprovalStatus(); UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); UI::contentHeading(getMLText("document_infos")); UI::contentContainerStart(); ?> isLocked()) { $lockingUser = $document->getLockingUser(); ?>
    : getOwner(); print "getEmail()."\">".htmlspecialchars($owner->getFullName()).""; ?>
    : getComment());?>
    : getDate()); ?>
    : getKeywords());?>
    : $lockingUser->getEmail(), "username" => htmlspecialchars($lockingUser->getFullName())));?>
    contentDir . $version->getPath()); UI::contentHeading(getMLText("details_version", array ("version" => $version->getVersion()))); UI::contentContainerStart(); print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print ""; print ""; print ""; print "\n
    ".getMLText("version")."".getMLText("file")."".getMLText("comment")."".getMLText("status")."
    ".$version->getVersion()."
      \n"; print "
    • ".$version->getOriginalFileName()."
    • \n"; if ($file_exists) print "
    • ". formatted_size(filesize($dms->contentDir . $version->getPath())) ." ".htmlspecialchars($version->getMimeType())."
    • "; else print "
    • ".getMLText("document_deleted")."
    • "; $updatingUser = $version->getUser(); print "
    • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."
    • "; print "
    • ".getLongReadableDate($version->getDate())."
    • "; print "
    ".htmlspecialchars($version->getComment())."".getOverallStatusText($status["status"]).""; //if (($document->getAccessMode($user) >= M_READWRITE)) { print ""; } else { print " "; } echo "
    \n"; print "\n"; if (is_array($reviewStatus) && count($reviewStatus)>0) { print "\n"; print "\n"; print "\n"; print "\n"; print ""; print "\n"; print "\n"; foreach ($reviewStatus as $r) { $required = null; switch ($r["type"]) { case 0: // Reviewer is an individual. $required = $dms->getUser($r["required"]); if (!is_object($required)) { $reqName = getMLText("unknown_user")." '".$r["required"]."'"; } else { $reqName = htmlspecialchars($required->getFullName()); } break; case 1: // Reviewer is a group. $required = $dms->getGroup($r["required"]); if (!is_object($required)) { $reqName = getMLText("unknown_group")." '".$r["required"]."'"; } else { $reqName = htmlspecialchars($required->getName()); } break; } print "\n"; print "\n"; print ""; print "\n"; print "\n"; print "\n"; } } if (is_array($approvalStatus) && count($approvalStatus)>0) { print "\n"; print "\n"; print "\n"; print "\n"; print ""; print "\n"; print "\n"; foreach ($approvalStatus as $a) { $required = null; switch ($a["type"]) { case 0: // Approver is an individual. $required = $dms->getUser($a["required"]); if (!is_object($required)) { $reqName = getMLText("unknown_user")." '".$r["required"]."'"; } else { $reqName = htmlspecialchars($required->getFullName()); } break; case 1: // Approver is a group. $required = $dms->getGroup($a["required"]); if (!is_object($required)) { $reqName = getMLText("unknown_group")." '".$r["required"]."'"; } else { $reqName = htmlspecialchars($required->getName()); } break; } print "\n"; print "\n"; print ""; print "\n"; print "\n"; print "\n"; } } print "
    \n"; UI::contentSubHeading(getMLText("reviewers")); print "
    ".getMLText("name")."".getMLText("last_update")."".getMLText("comment")."".getMLText("status")."
    ".$reqName."
    • ".$r["date"]."
    • "; $updateUser = $dms->getUser($r["userID"]); print "
    • ".(is_object($updateUser) ? $updateUser->getFullName() : "unknown user id '".$r["userID"]."'")."
    ".$r["comment"]."".getReviewStatusText($r["status"])."
    \n"; UI::contentSubHeading(getMLText("approvers")); print "
    ".getMLText("name")."".getMLText("last_update")."".getMLText("comment")."".getMLText("status")."
    ".$reqName."
    • ".$a["date"]."
    • "; $updateUser = $dms->getUser($a["userID"]); print "
    • ".(is_object($updateUser) ? htmlspecialchars($updateUser->getFullName()) : "unknown user id '".$a["userID"]."'")."
    ".$a["comment"]."".getApprovalStatusText($a["status"])."
    \n"; UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.RemoveFolder.php0000644000175000017500000000542712040235103021323 0ustar franciscofrancisco getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderid = $_GET["folderid"]; $folder = $dms->getFolder($folderid); if (!is_object($folder)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderPathHTML = getFolderPathHTML($folder, true); if ($folderid == $settings->_rootFolderID || !$folder->getParent()) { UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("cannot_rm_root")); } if ($folder->getAccessMode($user) < M_ALL) { UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName())))); UI::globalNavigation($folder); UI::pageNavigation($folderPathHTML, "view_folder", $folder); UI::contentHeading(getMLText("rm_folder")); UI::contentContainerStart(); ?>

    htmlspecialchars($folder->getName())));?>

    ">

    letodms-3.4.2+dfsg/out/out.Login.php0000644000175000017500000000764012040235103020001 0ustar franciscofrancisco
    0) { $refer=$_GET["referuri"]; } else if (isset($_POST["referuri"]) && strlen($_POST["referuri"])>0) { $refer=$_POST["referuri"]; } if (isset($refer) && strlen($refer)>0) { echo ""; } ?>
    "; print "
    "; print "
    ">
    _enableGuestLogin) $tmpfoot[] = "" . getMLText("guest_login") . "\n"; if ($settings->_enablePasswordForgotten) $tmpfoot[] = "" . getMLText("password_forgotten") . "\n"; if($tmpfoot) { print "

    "; print implode(' | ', $tmpfoot); print "

    \n"; } ?> letodms-3.4.2+dfsg/out/out.ApprovalSummary.php0000644000175000017500000001627012040235103022072 0ustar franciscofranciscoisGuest()) { UI::exitError(getMLText("my_documents"),getMLText("access_denied")); } if (!$db->createTemporaryTable("ttstatid")) { UI::exitError(getMLText("approval_summary"),getMLText("internal_error_exit")); } UI::htmlStartPage(getMLText("approval_summary")); UI::globalNavigation(); UI::pageNavigation(getMLText("my_documents"), "my_documents"); UI::contentHeading(getMLText("approval_summary")); UI::contentContainerStart(); // TODO: verificare scadenza // Get document list for the current user. $approvalStatus = $user->getApprovalStatus(); // reverse order $approvalStatus["indstatus"]=array_reverse($approvalStatus["indstatus"],true); $approvalStatus["grpstatus"]=array_reverse($approvalStatus["grpstatus"],true); // Create a comma separated list of all the documentIDs whose information is // required. $dList = array(); foreach ($approvalStatus["indstatus"] as $st) { if (!in_array($st["documentID"], $dList)) { $dList[] = $st["documentID"]; } } foreach ($approvalStatus["grpstatus"] as $st) { if (!in_array($st["documentID"], $dList)) { $dList[] = $st["documentID"]; } } $docCSV = ""; foreach ($dList as $d) { $docCSV .= (strlen($docCSV)==0 ? "" : ", ")."'".$d."'"; } if (strlen($docCSV)>0) { $queryStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`, ". "`tblDocumentStatus`.*, `tblDocumentStatusLog`.`status`, ". "`tblDocumentStatusLog`.`comment` AS `statusComment`, `tblDocumentStatusLog`.`date` as `statusDate`, ". "`tblDocumentStatusLog`.`userID`, `oTbl`.`fullName` AS `ownerName`, `sTbl`.`fullName` AS `statusName` ". "FROM `tblDocumentStatus` ". "LEFT JOIN `tblDocumentStatusLog` USING (`statusID`) ". "LEFT JOIN `ttstatid` on `ttstatid`.`maxLogID` = `tblDocumentStatusLog`.`statusLogID` ". "LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentStatus`.`documentID` ". "LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` ". "LEFT JOIN `tblUsers` AS `oTbl` on `oTbl`.`id` = `tblDocuments`.`owner` ". "LEFT JOIN `tblUsers` AS `sTbl` on `sTbl`.`id` = `tblDocumentStatusLog`.`userID` ". "WHERE `ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` ". "AND `tblDocuments`.`id` IN (" . $docCSV . ") ". "ORDER BY `statusDate` DESC"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) { UI::exitError(getMLText("approval_summary"),getMLText("internal_error_exit")); } // Create an array to hold all of these results, and index the array by // document id. This makes it easier to retrieve document ID information // later on and saves us having to repeatedly poll the database every time // new document information is required. $docIdx = array(); foreach ($resArr as $res) { // verify expiry if ( $res["expires"] && time()>$res["expires"]+24*60*60 ){ if ( $res["status"]==S_DRAFT_APP || $res["status"]==S_DRAFT_REV ){ $res["status"]=S_EXPIRED; } } $docIdx[$res["id"]][$res["version"]] = $res; } } $iRev = array(); $printheader = true; foreach ($approvalStatus["indstatus"] as $st) { if (isset($docIdx[$st["documentID"]][$st["version"]])) { if ($printheader){ print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; $printheader = false; } print "\n"; print ""; print ""; print ""; print ""; print ""; print ""; print "\n"; } if ($st["status"]!=-2) { $iRev[] = $st["documentID"]; } } if (!$printheader) { echo "\n
    ".getMLText("name")."".getMLText("owner")."".getMLText("status")."".getMLText("version")."".getMLText("last_update")."".getMLText("expires")."
    ".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["name"])."".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["ownerName"])."".getOverallStatusText($docIdx[$st["documentID"]][$st["version"]]["status"])."".$st["version"]."".$st["date"]." ". htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["statusName"]) ."".(!$docIdx[$st["documentID"]][$st["version"]]["expires"] ? "-":getReadableDate($docIdx[$st["documentID"]][$st["version"]]["expires"]))."
    \n"; }else{ printMLText("no_approval_needed"); } UI::contentContainerEnd(); UI::contentHeading(getMLText("group_approval_summary")); UI::contentContainerStart(); $printheader = true; foreach ($approvalStatus["grpstatus"] as $st) { if (!in_array($st["documentID"], $iRev) && isset($docIdx[$st["documentID"]][$st["version"]])) { if ($printheader){ print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; $printheader = false; } print "\n"; print ""; print ""; print ""; print ""; print ""; print ""; print "\n"; } } if (!$printheader) { echo "\n
    ".getMLText("name")."".getMLText("owner")."".getMLText("status")."".getMLText("version")."".getMLText("last_update")."".getMLText("expires")."
    ".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["name"])."".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["ownerName"])."".getOverallStatusText($docIdx[$st["documentID"]][$st["version"]]["status"])."".$st["version"]."".$st["date"]." ". htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["statusName"]) ."".(!$docIdx[$st["documentID"]][$st["version"]]["expires"] ? "-":getReadableDate($docIdx[$st["documentID"]][$st["version"]]["expires"]))."
    \n"; }else{ printMLText("empty_notify_list"); } UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.ReviewDocument.php0000644000175000017500000001673712047216757021725 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = intval($_GET["documentid"]); $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if ($document->getAccessMode($user) < M_READ) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } if (!isset($_GET["version"]) || !is_numeric($_GET["version"]) || intval($_GET["version"])<1) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } $version = $_GET["version"]; $content = $document->getContentByVersion($version); if (!is_object($content)) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } // operation is admitted only for last deocument version $latestContent = $document->getLatestContent(); if ($latestContent->getVersion()!=$version) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); } // verify if document has expired if ($document->hasExpired()){ UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } $reviews = $latestContent->getReviewStatus(); if(!$reviews) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("no_action")); } foreach($reviews as $review) { if($review['reviewID'] == $_GET['reviewid']) { $reviewStatus = $review; break; } } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); UI::contentHeading(getMLText("submit_review")); ?> "; print "".getMLText("status").""; print "".getMLText("comment").""; print "".getMLText("last_update").""; print ""; print ""; printReviewStatusText($reviewStatus["status"]); print ""; print "".htmlspecialchars($reviewStatus["comment"]).""; $indUser = $dms->getUser($reviewStatus["userID"]); print "".$reviewStatus["date"]." - ". htmlspecialchars($indUser->getFullname()) .""; print "
    "; } ?>
    :
    "; print "".getMLText("status").""; print "".getMLText("comment").""; print "".getMLText("last_update").""; print ""; print ""; printReviewStatusText($reviewStatus["status"]); print ""; print "".htmlspecialchars($reviewStatus["comment"]).""; $indUser = $dms->getUser($reviewStatus["userID"]); print "".$reviewStatus["date"]." - ". htmlspecialchars($indUser->getFullname()) .""; print "
    \n"; } ?>
    :
    :
    '/>
    letodms-3.4.2+dfsg/out/out.SetExpires.php0000644000175000017500000000572112040235103021022 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = intval($_GET["documentid"]); $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if ($document->getAccessMode($user) < M_READWRITE) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); UI::contentHeading(getMLText("set_expiry")); UI::contentContainerStart(); ?>
    : expires()?"":"checked") ?> >
    expires()?"checked":"") ?> >expires()?$document->getExpires():-1), "exp");?>

    ">

    letodms-3.4.2+dfsg/out/out.CategoryChooser.php0000644000175000017500000000511312040235103022022 0ustar franciscofrancisco getDocumentCategories(); $selcatsarr = explode(',', $selcats); ?>
    :
    ">   
    letodms-3.4.2+dfsg/out/out.MoveFolder.php0000644000175000017500000000556112040235103020773 0ustar franciscofrancisco getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderid = intval($_GET["folderid"]); $folder = $dms->getFolder($folderid); if (!is_object($folder)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderPathHTML = getFolderPathHTML($folder, true); if ($folderid == $settings->_rootFolderID || !$folder->getParent()) { UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("cannot_move_root")); } if ($folder->getAccessMode($user) < M_READWRITE) { UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName())))); UI::globalNavigation($folder); UI::pageNavigation($folderPathHTML, "view_folder", $folder); UI::contentHeading(getMLText("move_folder")); UI::contentContainerStart(); ?>
    : getID());?>
    ">
    letodms-3.4.2+dfsg/out/out.DocumentAccess.php0000644000175000017500000002503212040235103021624 0ustar franciscofrancisco\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\n"; } if (!isset($_GET["documentid"]) || !is_numeric($_GET["documentid"]) || intval($_GET["documentid"])<1) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = $_GET["documentid"]; $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if ($document->getAccessMode($user) < M_ALL) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); ?> getAllUsers($settings->_sortUsersInList); UI::contentHeading(getMLText("edit_document_access")); UI::contentContainerStart(); if ($user->isAdmin()) { UI::contentSubHeading(getMLText("set_owner")); ?>
    : ">
    inheritsAccess()) { printMLText("inherits_access_msg"); ?>

    ">
    ">

    ">
    getAccessList(); UI::contentSubHeading(getMLText("default_access")); ?>
    getDefaultAccess()); ?> ">
    "; /* memorїze users with access rights */ $memusers = array(); foreach ($accessList["users"] as $userAccess) { $userObj = $userAccess->getUser(); $memusers[] = $userObj->getID(); print "\n"; print "\n"; print "". htmlspecialchars($userObj->getFullName()) . "\n"; print "\n"; print "
    \n"; printAccessModeSelection($userAccess->getMode()); print "\n"; print "\n"; echo createHiddenFieldWithKey('documentaccess')."\n"; print "\n"; print "\n"; print "getID()."\">\n"; print "".getMLText("save")." "; print "\n"; print "
    \n"; print "\n"; print "
    \n"; echo createHiddenFieldWithKey('documentaccess')."\n"; print "\n"; print "\n"; print "getID()."\">\n"; print "".getMLText("delete")." "; print "
    \n"; print "\n"; print "\n"; } /* memorize groups with access rights */ $memgroups = array(); foreach ($accessList["groups"] as $groupAccess) { $groupObj = $groupAccess->getGroup(); $memgroups[] = $groupObj->getID(); $mode = $groupAccess->getMode(); print ""; print ""; print "". htmlspecialchars($groupObj->getName()) . ""; print "
    "; print ""; printAccessModeSelection($groupAccess->getMode()); print "\n"; print "\n"; echo createHiddenFieldWithKey('documentaccess')."\n"; print ""; print ""; print "getID()."\">"; print "".getMLText("save")." "; print "\n"; print "
    "; print "\n"; print "
    \n"; echo createHiddenFieldWithKey('documentaccess')."\n"; print "\n"; print "\n"; print "getID()."\">\n"; print "".getMLText("delete")." "; print "
    "; print "
    \n"; print "\n"; } print "
    "; } ?>
    :
    :
    :
    ">
    letodms-3.4.2+dfsg/out/out.AttributeMgr.php0000644000175000017500000002214312046372746021362 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } $attrdefs = $dms->getAllAttributeDefinitions(); UI::htmlStartPage(getMLText("admin_tools")); ?> getID()."\" style=\"display : none;\">"; ?>
    :   
    isUsed()) { ?>
    " type="submit">

    :
    :
    :
    :
    :
    :
    :
    ">
    letodms-3.4.2+dfsg/out/out.MoveDocument.php0000644000175000017500000000530312040235103021330 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = intval($_GET["documentid"]); $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if ($document->getAccessMode($user) < M_READWRITE) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); UI::contentHeading(getMLText("move_document")); UI::contentContainerStart(); ?>
    :

    ">
    letodms-3.4.2+dfsg/out/styles.css0000644000175000017500000000612012040235103017437 0ustar franciscofrancisco/* a { text-decoration: none; } a:hover { text-decoration: underline; } .titlebar { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12pt; color : White; font-weight: bold; } .header1 { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 11pt; font-style : italic; color : #000080; } .foldertree { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .foldertree_selectable { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: blue; } .foldertree_inpath { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; font-style: italic; } .foldertree_active { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 9pt; color: black; font-weight: bold; } .path { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .editfolder { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .editdocument { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .infos { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .filelist { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .subfolderlist { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .linklist { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .boxHeader { color : White; font-style : italic; font-size : 11pt; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; } .pageHeader { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13pt; font-weight: bold; color: #000080; } .inputDescription { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; font-style: italic; } .notifylist { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .inheritAccess { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .accessList { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .defaultAccess { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .msgLocked { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .standardText { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black; } .groupMembers { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt; color: black;*/ letodms-3.4.2+dfsg/out/out.UpdateDocument2.php0000644000175000017500000000670712040235103021737 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } if(!$settings->_enableLargeFileUpload) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); } $documentid = intval($_GET["documentid"]); $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if ($document->getAccessMode($user) < M_READWRITE) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); UI::contentHeading(getMLText("update_document") . ": " . htmlspecialchars($document->getName())); UI::contentContainerStart(); if ($document->isLocked()) { $lockingUser = $document->getLockingUser(); print "
    "; printMLText("update_locked_msg", array("username" => htmlspecialchars($lockingUser->getFullName()), "email" => htmlspecialchars($lockingUser->getEmail()))); if ($lockingUser->getID() == $user->getID()) printMLText("unlock_cause_locking_user"); else if ($document->getAccessMode($user) == M_ALL) printMLText("unlock_cause_access_mode_all"); else { printMLText("no_update_cause_locked"); print "
    "; UI::contentContainerEnd(); UI::htmlEndPage(); exit; } print "
    "; } // Retrieve a list of all users and groups that have review / approve // privileges. $docAccess = $document->getApproversList(); UI::printUploadApplet('../op/op.UpdateDocument2.php', array('folderid'=>$folder->getId(), 'documentid'=>$document->getId()), 1, array('version_comment'=>1)); UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.RemoveDocument.php0000644000175000017500000000534712040235103021667 0ustar franciscofrancisco getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = intval($_GET["documentid"]); $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()).""; if ($document->getAccessMode($user) < M_ALL) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); UI::contentHeading(getMLText("rm_document")); UI::contentContainerStart(); ?>

    htmlspecialchars($document->getName())));?>

    ">

    letodms-3.4.2+dfsg/out/out.MyDocuments.php0000644000175000017500000005304312075010264021205 0ustar franciscofranciscoisGuest()) { UI::exitError(getMLText("my_documents"),getMLText("access_denied")); } // Check to see if the user wants to see only those documents that are still // in the review / approve stages. $showInProcess = false; if (isset($_GET["inProcess"]) && strlen($_GET["inProcess"])>0 && $_GET["inProcess"]!=0) { $showInProcess = true; } $orderby='n'; if (isset($_GET["orderby"]) && strlen($_GET["orderby"])==1 ) { $orderby=$_GET["orderby"]; } UI::htmlStartPage(getMLText("my_documents")); UI::globalNavigation(); UI::pageNavigation(getMLText("my_documents"), "my_documents"); if ($showInProcess){ if (!$db->createTemporaryTable("ttstatid") || !$db->createTemporaryTable("ttcontentid")) { UI::contentHeading(getMLText("warning")); UI::contentContainer(getMLText("internal_error_exit")); UI::htmlEndPage(); exit; } // Get document list for the current user. $reviewStatus = $user->getReviewStatus(); $approvalStatus = $user->getApprovalStatus(); // Create a comma separated list of all the documentIDs whose information is // required. $dList = array(); foreach ($reviewStatus["indstatus"] as $st) { if (!in_array($st["documentID"], $dList)) { $dList[] = $st["documentID"]; } } foreach ($reviewStatus["grpstatus"] as $st) { if (!in_array($st["documentID"], $dList)) { $dList[] = $st["documentID"]; } } foreach ($approvalStatus["indstatus"] as $st) { if (!in_array($st["documentID"], $dList)) { $dList[] = $st["documentID"]; } } foreach ($approvalStatus["grpstatus"] as $st) { if (!in_array($st["documentID"], $dList)) { $dList[] = $st["documentID"]; } } $docCSV = ""; foreach ($dList as $d) { $docCSV .= (strlen($docCSV)==0 ? "" : ", ")."'".$d."'"; } if (strlen($docCSV)>0) { // Get the document information. $queryStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`, ". "`tblDocumentContent`.`version`, `tblDocumentStatus`.*, `tblDocumentStatusLog`.`status`, ". "`tblDocumentStatusLog`.`comment` AS `statusComment`, `tblDocumentStatusLog`.`date` as `statusDate`, ". "`tblDocumentStatusLog`.`userID`, `oTbl`.`fullName` AS `ownerName`, `sTbl`.`fullName` AS `statusName` ". "FROM `tblDocumentContent` ". "LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentContent`.`document` ". "LEFT JOIN `tblDocumentStatus` ON `tblDocumentStatus`.`documentID` = `tblDocumentContent`.`document` ". "LEFT JOIN `tblDocumentStatusLog` ON `tblDocumentStatusLog`.`statusID` = `tblDocumentStatus`.`statusID` ". "LEFT JOIN `ttstatid` ON `ttstatid`.`maxLogID` = `tblDocumentStatusLog`.`statusLogID` ". "LEFT JOIN `ttcontentid` ON `ttcontentid`.`maxVersion` = `tblDocumentStatus`.`version` AND `ttcontentid`.`document` = `tblDocumentStatus`.`documentID` ". "LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` ". "LEFT JOIN `tblUsers` AS `oTbl` on `oTbl`.`id` = `tblDocuments`.`owner` ". "LEFT JOIN `tblUsers` AS `sTbl` on `sTbl`.`id` = `tblDocumentStatusLog`.`userID` ". "WHERE `ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` ". "AND `ttcontentid`.`maxVersion` = `tblDocumentContent`.`version` ". "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_DRAFT_APP.", ".S_EXPIRED.") ". "AND `tblDocuments`.`id` IN (" . $docCSV . ") ". "ORDER BY `statusDate` DESC"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) { UI::contentHeading(getMLText("warning")); UI::contentContainer(getMLText("internal_error_exit")); UI::htmlEndPage(); exit; } // Create an array to hold all of these results, and index the array by // document id. This makes it easier to retrieve document ID information // later on and saves us having to repeatedly poll the database every time // new document information is required. $docIdx = array(); foreach ($resArr as $res) { // verify expiry if ( $res["expires"] && time()>$res["expires"]+24*60*60 ){ if ( $res["status"]==S_DRAFT_APP || $res["status"]==S_DRAFT_REV ){ $res["status"]=S_EXPIRED; } } $docIdx[$res["id"]][$res["version"]] = $res; } // List the documents where a review has been requested. UI::contentHeading(getMLText("documents_to_review")); UI::contentContainerStart(); $printheader=true; $iRev = array(); $dList = array(); foreach ($reviewStatus["indstatus"] as $st) { if ( $st["status"]==0 && isset($docIdx[$st["documentID"]][$st["version"]]) && !in_array($st["documentID"], $dList) ) { $dList[] = $st["documentID"]; if ($printheader){ print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; $printheader=false; } print "\n"; print ""; print ""; print ""; print ""; print "".(!$docIdx[$st["documentID"]][$st["version"]]["expires"] ? "-":getReadableDate($docIdx[$st["documentID"]][$st["version"]]["expires"])).""; print "\n"; } } foreach ($reviewStatus["grpstatus"] as $st) { if (!in_array($st["documentID"], $iRev) && $st["status"]==0 && isset($docIdx[$st["documentID"]][$st["version"]]) && !in_array($st["documentID"], $dList) && $docIdx[$st["documentID"]][$st["version"]]['owner'] != $user->getId()) { $dList[] = $st["documentID"]; if ($printheader){ print "
    ".getMLText("name")."".getMLText("owner")."".getMLText("version")."".getMLText("last_update")."".getMLText("expires")."
    ".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["name"])."".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["ownerName"])."".$st["version"]."".$st["date"]." ". htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["statusName"]) ."
    "; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; $printheader=false; } print "\n"; print ""; print ""; print ""; print ""; print "".(!$docIdx[$st["documentID"]][$st["version"]]["expires"] ? "-":getReadableDate($docIdx[$st["documentID"]][$st["version"]]["expires"])).""; print "\n"; } } if (!$printheader){ echo "\n
    ".getMLText("name")."".getMLText("owner")."".getMLText("version")."".getMLText("last_update")."".getMLText("expires")."
    ".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["name"])."".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["ownerName"])."".$st["version"]."".$st["date"]." ". htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["statusName"])."
    "; }else{ printMLText("no_docs_to_review"); } UI::contentContainerEnd(); // List the documents where an approval has been requested. UI::contentHeading(getMLText("documents_to_approve")); UI::contentContainerStart(); $printheader=true; foreach ($approvalStatus["indstatus"] as $st) { if ( $st["status"]==0 && isset($docIdx[$st["documentID"]][$st["version"]])) { if ($printheader){ print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; $printheader=false; } print "\n"; print ""; print ""; print ""; print ""; print "".(!$docIdx[$st["documentID"]][$st["version"]]["expires"] ? "-":getReadableDate($docIdx[$st["documentID"]][$st["version"]]["expires"])).""; print "\n"; } } foreach ($approvalStatus["grpstatus"] as $st) { if (!in_array($st["documentID"], $iRev) && $st["status"]==0 && isset($docIdx[$st["documentID"]][$st["version"]]) && $docIdx[$st["documentID"]][$st["version"]]['owner'] != $user->getId()) { if ($printheader){ print "
    ".getMLText("name")."".getMLText("owner")."".getMLText("version")."".getMLText("last_update")."".getMLText("expires")."
    ".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["name"])."".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["ownerName"])."".$st["version"]."".$st["date"]." ". htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["statusName"])."
    "; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; $printheader=false; } print "\n"; print ""; print ""; print ""; print ""; print "".(!$docIdx[$st["documentID"]][$st["version"]]["expires"] ? "-":getReadableDate($docIdx[$st["documentID"]][$st["version"]]["expires"])).""; print "\n"; } } if (!$printheader){ echo "\n
    ".getMLText("name")."".getMLText("owner")."".getMLText("version")."".getMLText("last_update")."".getMLText("expires")."
    ".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["name"])."".htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["ownerName"])."".$st["version"]."".$st["date"]." ". htmlspecialchars($docIdx[$st["documentID"]][$st["version"]]["statusName"])."
    \n"; }else{ printMLText("no_docs_to_approve"); } UI::contentContainerEnd(); } else { UI::contentHeading(getMLText("documents_to_review")); UI::contentContainerStart(); printMLText("no_review_needed"); UI::contentContainerEnd(); UI::contentHeading(getMLText("documents_to_approve")); UI::contentContainerStart(); printMLText("no_approval_needed"); UI::contentContainerEnd(); } // Get list of documents owned by current user that are pending review or // pending approval. $queryStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`, ". "`tblDocumentContent`.`version`, `tblDocumentStatus`.*, `tblDocumentStatusLog`.`status`, ". "`tblDocumentStatusLog`.`comment` AS `statusComment`, `tblDocumentStatusLog`.`date` as `statusDate`, ". "`tblDocumentStatusLog`.`userID`, `oTbl`.`fullName` AS `ownerName`, `sTbl`.`fullName` AS `statusName` ". "FROM `tblDocumentContent` ". "LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentContent`.`document` ". "LEFT JOIN `tblDocumentStatus` ON `tblDocumentStatus`.`documentID` = `tblDocumentContent`.`document` ". "LEFT JOIN `tblDocumentStatusLog` ON `tblDocumentStatusLog`.`statusID` = `tblDocumentStatus`.`statusID` ". "LEFT JOIN `ttstatid` ON `ttstatid`.`maxLogID` = `tblDocumentStatusLog`.`statusLogID` ". "LEFT JOIN `ttcontentid` ON `ttcontentid`.`maxVersion` = `tblDocumentStatus`.`version` AND `ttcontentid`.`document` = `tblDocumentStatus`.`documentID` ". "LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` ". "LEFT JOIN `tblUsers` AS `oTbl` on `oTbl`.`id` = `tblDocuments`.`owner` ". "LEFT JOIN `tblUsers` AS `sTbl` on `sTbl`.`id` = `tblDocumentStatusLog`.`userID` ". "WHERE `ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` ". "AND `ttcontentid`.`maxVersion` = `tblDocumentContent`.`version` ". "AND `tblDocuments`.`owner` = '".$user->getID()."' ". "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_DRAFT_APP.") ". "ORDER BY `statusDate` DESC"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) { UI::contentHeading(getMLText("warning")); UI::contentContainer("Internal error. Unable to complete request. Exiting."); UI::htmlEndPage(); exit; } UI::contentHeading(getMLText("documents_user_requiring_attention")); UI::contentContainerStart(); if (count($resArr)>0) { print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; foreach ($resArr as $res) { // verify expiry if ( $res["expires"] && time()>$res["expires"]+24*60*60 ){ if ( $res["status"]==S_DRAFT_APP || $res["status"]==S_DRAFT_REV ){ $res["status"]=S_EXPIRED; } } print "\n"; print "\n"; print ""; print ""; print ""; print ""; print "\n"; } print "
    ".getMLText("name")."".getMLText("status")."".getMLText("version")."".getMLText("last_update")."".getMLText("expires")."
    " . htmlspecialchars($res["name"]) . "".getOverallStatusText($res["status"])."".$res["version"]."".$res["statusDate"]." ".htmlspecialchars($res["statusName"])."".(!$res["expires"] ? "-":getReadableDate($res["expires"]))."
    "; } else printMLText("no_docs_to_look_at"); UI::contentContainerEnd(); // Get list of documents locked by current user $queryStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`, ". "`tblDocumentContent`.`version`, `tblDocumentStatus`.*, `tblDocumentStatusLog`.`status`, ". "`tblDocumentStatusLog`.`comment` AS `statusComment`, `tblDocumentStatusLog`.`date` as `statusDate`, ". "`tblDocumentStatusLog`.`userID`, `oTbl`.`fullName` AS `ownerName`, `sTbl`.`fullName` AS `statusName` ". "FROM `tblDocumentContent` ". "LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentContent`.`document` ". "LEFT JOIN `tblDocumentStatus` ON `tblDocumentStatus`.`documentID` = `tblDocumentContent`.`document` ". "LEFT JOIN `tblDocumentStatusLog` ON `tblDocumentStatusLog`.`statusID` = `tblDocumentStatus`.`statusID` ". "LEFT JOIN `ttstatid` ON `ttstatid`.`maxLogID` = `tblDocumentStatusLog`.`statusLogID` ". "LEFT JOIN `ttcontentid` ON `ttcontentid`.`maxVersion` = `tblDocumentStatus`.`version` AND `ttcontentid`.`document` = `tblDocumentStatus`.`documentID` ". "LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` ". "LEFT JOIN `tblUsers` AS `oTbl` on `oTbl`.`id` = `tblDocuments`.`owner` ". "LEFT JOIN `tblUsers` AS `sTbl` on `sTbl`.`id` = `tblDocumentStatusLog`.`userID` ". "WHERE `ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` ". "AND `ttcontentid`.`maxVersion` = `tblDocumentContent`.`version` ". "AND `tblDocumentLocks`.`userID` = '".$user->getID()."' ". "ORDER BY `statusDate` DESC"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) { UI::contentHeading(getMLText("warning")); UI::contentContainer("Internal error. Unable to complete request. Exiting."); UI::htmlEndPage(); exit; } UI::contentHeading(getMLText("documents_locked_by_you")); UI::contentContainerStart(); if (count($resArr)>0) { print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; foreach ($resArr as $res) { // verify expiry if ( $res["expires"] && time()>$res["expires"]+24*60*60 ){ if ( $res["status"]==S_DRAFT_APP || $res["status"]==S_DRAFT_REV ){ $res["status"]=S_EXPIRED; } } print "\n"; print "\n"; print ""; print ""; print ""; print ""; print "\n"; } print "
    ".getMLText("name")."".getMLText("status")."".getMLText("version")."".getMLText("last_update")."".getMLText("expires")."
    " . htmlspecialchars($res["name"]) . "".getOverallStatusText($res["status"])."".$res["version"]."".$res["statusDate"]." ".htmlspecialchars($res["statusName"])."".(!$res["expires"] ? "-":getReadableDate($res["expires"]))."
    "; } else printMLText("no_docs_locked"); UI::contentContainerEnd(); } else { // Get list of documents owned by current user if (!$db->createTemporaryTable("ttstatid")) { UI::contentHeading(getMLText("warning")); UI::contentContainer(getMLText("internal_error_exit")); UI::htmlEndPage(); exit; } if (!$db->createTemporaryTable("ttcontentid")) { UI::contentHeading(getMLText("warning")); UI::contentContainer(getMLText("internal_error_exit")); UI::htmlEndPage(); exit; } $queryStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`, ". "`tblDocumentContent`.`version`, `tblDocumentStatus`.*, `tblDocumentStatusLog`.`status`, ". "`tblDocumentStatusLog`.`comment` AS `statusComment`, `tblDocumentStatusLog`.`date` as `statusDate`, ". "`tblDocumentStatusLog`.`userID`, `oTbl`.`fullName` AS `ownerName`, `sTbl`.`fullName` AS `statusName` ". "FROM `tblDocumentContent` ". "LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentContent`.`document` ". "LEFT JOIN `tblDocumentStatus` ON `tblDocumentStatus`.`documentID` = `tblDocumentContent`.`document` ". "LEFT JOIN `tblDocumentStatusLog` ON `tblDocumentStatusLog`.`statusID` = `tblDocumentStatus`.`statusID` ". "LEFT JOIN `ttstatid` ON `ttstatid`.`maxLogID` = `tblDocumentStatusLog`.`statusLogID` ". "LEFT JOIN `ttcontentid` ON `ttcontentid`.`maxVersion` = `tblDocumentStatus`.`version` AND `ttcontentid`.`document` = `tblDocumentStatus`.`documentID` ". "LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` ". "LEFT JOIN `tblUsers` AS `oTbl` on `oTbl`.`id` = `tblDocuments`.`owner` ". "LEFT JOIN `tblUsers` AS `sTbl` on `sTbl`.`id` = `tblDocumentStatusLog`.`userID` ". "WHERE `ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` ". "AND `ttcontentid`.`maxVersion` = `tblDocumentContent`.`version` ". "AND `tblDocuments`.`owner` = '".$user->getID()."' "; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; else $queryStr .= "ORDER BY `name`"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) { UI::contentHeading(getMLText("warning")); UI::contentContainer(getMLText("internal_error_exit")); UI::htmlEndPage(); exit; } UI::contentHeading(getMLText("all_documents")); UI::contentContainerStart(); if (count($resArr)>0) { print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; foreach ($resArr as $res) { // verify expiry if ( $res["expires"] && time()>$res["expires"]+24*60*60 ){ if ( $res["status"]==S_DRAFT_APP || $res["status"]==S_DRAFT_REV ){ $res["status"]=S_EXPIRED; } } print "\n"; print "\n"; print ""; print ""; print ""; //print ""; print ""; print "\n"; } print "
    ".getMLText("name")."".getMLText("status")."".getMLText("version")."".getMLText("last_update")."".getMLText("expires")."
    " . htmlspecialchars($res["name"]) . "".getOverallStatusText($res["status"])."".$res["version"]."".$res["statusDate"]." ". htmlspecialchars($res["statusName"])."".(!$res["expires"] ? getMLText("does_not_expire"):getReadableDate($res["expires"]))."".(!$res["expires"] ? "-":getReadableDate($res["expires"]))."
    "; } else printMLText("empty_notify_list"); UI::contentContainerEnd(); } UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/out.ViewDocument.php0000644000175000017500000005457012041426733021362 0ustar franciscofranciscoisPublic() || ($link->_userID == $user->getID()) || $user->isAdmin()) array_push($tmp, $link); return $tmp; } /* }}} */ if (!isset($_GET["documentid"]) || !is_numeric($_GET["documentid"]) || intval($_GET["documentid"])<1) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $documentid = intval($_GET["documentid"]); $document = $dms->getDocument($documentid); if (!is_object($document)) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $folder = $document->getFolder(); $docPathHTML = getFolderPathHTML($folder, true). " / ".htmlspecialchars($document->getName()); if ($document->getAccessMode($user) < M_READ) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } if ($document->verifyLastestContentExpriry()){ header("Location:../out/out.ViewDocument.php?documentid=".$documentid); } /* Create object for checking access to certain operations */ $accessop = new LetoDMS_AccessOperation($document, $user, $settings); UI::htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); UI::globalNavigation($folder); UI::pageNavigation($docPathHTML, "view_document"); UI::contentHeading(getMLText("document_infos")); UI::contentContainerStart(); ?> isLocked()) { $lockingUser = $document->getLockingUser(); ?> getAttributes(); if($attributes) { foreach($attributes as $attribute) { $attrdef = $attribute->getAttributeDefinition(); ?>
    $lockingUser->getEmail(), "username" => htmlspecialchars($lockingUser->getFullName())));?>
    : getOwner(); print "getEmail()."\">".htmlspecialchars($owner->getFullName()).""; ?>
    : getComment());?>
    : getDate()); ?>
    : getKeywords());?>
    : getCategories(); $ct = array(); foreach($cats as $cat) $ct[] = htmlspecialchars($cat->getName()); echo implode(', ', $ct); ?>
    getName()); ?>: getValue()); ?>
    getContent(); if(!$latestContent = $document->getLatestContent()) { UI::contentHeading(getMLText("current_version")); UI::contentContainerStart(); print getMLText('document_content_missing'); UI::contentContainerEnd(); UI::htmlEndPage(); exit; } $status = $latestContent->getStatus(); $reviewStatus = $latestContent->getReviewStatus(); $approvalStatus = $latestContent->getApprovalStatus(); // verify if file exists $file_exists=file_exists($dms->contentDir . $latestContent->getPath()); UI::contentHeading(getMLText("current_version")); UI::contentContainerStart(); print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print ""; print ""; print ""; print "\n
    ".getMLText("version")."".getMLText("file")."".getMLText("comment")."".getMLText("status")."
    ".$latestContent->getVersion()."
      \n"; print "
    • ".$latestContent->getOriginalFileName() ."
    • \n"; if ($file_exists) print "
    • ". formatted_size(filesize($dms->contentDir . $latestContent->getPath())) ." ".htmlspecialchars($latestContent->getMimeType())."
    • "; else print "
    • ".getMLText("document_deleted")."
    • "; $updatingUser = $latestContent->getUser(); print "
    • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."
    • "; print "
    • ".getLongReadableDate($latestContent->getDate())."
    • "; print "
    \n"; print "
      \n"; $attributes = $latestContent->getAttributes(); if($attributes) { foreach($attributes as $attribute) { $attrdef = $attribute->getAttributeDefinition(); print "
    • ".htmlspecialchars($attrdef->getName()).": ".htmlspecialchars($attribute->getValue())."
    • \n"; } } print "
    \n"; print "
    ".htmlspecialchars($latestContent->getComment())."".getOverallStatusText($status["status"]); if ( $status["status"]==S_DRAFT_REV || $status["status"]==S_DRAFT_APP || $status["status"]==S_EXPIRED ){ print "
    hasExpired()?" class=\"warning\" ":"").">".(!$document->getExpires() ? getMLText("does_not_expire") : getMLText("expires").": ".getReadableDate($document->getExpires())).""; } print "
    "; print ""; echo "
    \n"; print "\n"; if (is_array($reviewStatus) && count($reviewStatus)>0) { print ""; print "\n"; print "\n"; print "\n"; print ""; print "\n"; print "\n"; print "\n"; foreach ($reviewStatus as $r) { $required = null; $is_reviewer = false; switch ($r["type"]) { case 0: // Reviewer is an individual. $required = $dms->getUser($r["required"]); if (!is_object($required)) { $reqName = getMLText("unknown_user")." '".$r["required"]."'"; } else { $reqName = htmlspecialchars($required->getFullName()); } if($r["required"] == $user->getId()) $is_reviewer = true; break; case 1: // Reviewer is a group. $required = $dms->getGroup($r["required"]); if (!is_object($required)) { $reqName = getMLText("unknown_group")." '".$r["required"]."'"; } else { $reqName = "".htmlspecialchars($required->getName()).""; } if($required->isMember($user) && ($user->getId() != $owner->getId())) $is_reviewer = true; break; } print "\n"; print "\n"; print ""; print "\n"; print "\n"; print "\n"; print "\n\n"; } } if (is_array($approvalStatus) && count($approvalStatus)>0) { print ""; print "\n"; print "\n"; print "\n"; print ""; print "\n"; print "\n"; print "\n"; foreach ($approvalStatus as $a) { $required = null; $is_approver = false; switch ($a["type"]) { case 0: // Approver is an individual. $required = $dms->getUser($a["required"]); if (!is_object($required)) { $reqName = getMLText("unknown_user")." '".$r["required"]."'"; } else { $reqName = htmlspecialchars($required->getFullName()); } if($a["required"] == $user->getId()) $is_approver = true; break; case 1: // Approver is a group. $required = $dms->getGroup($a["required"]); if (!is_object($required)) { $reqName = getMLText("unknown_group")." '".$r["required"]."'"; } else { $reqName = "".htmlspecialchars($required->getName()).""; } if($required->isMember($user) && ($user->getId() != $owner->getId())) $is_approver = true; break; } print "\n"; print "\n"; print ""; print "\n"; print "\n"; print "\n"; print "\n\n"; } } print "
    \n"; UI::contentSubHeading(getMLText("reviewers")); print "
    ".getMLText("name")."".getMLText("last_update")."".getMLText("comment")."".getMLText("status")."
    ".$reqName."
    • ".$r["date"]."
    • "; /* $updateUser is the user who has done the review */ $updateUser = $dms->getUser($r["userID"]); print "
    • ".(is_object($updateUser) ? htmlspecialchars($updateUser->getFullName()) : "unknown user id '".$r["userID"]."'")."
    ".htmlspecialchars($r["comment"])."".getReviewStatusText($r["status"])."
    \n"; UI::contentSubHeading(getMLText("approvers")); print "
    ".getMLText("name")."".getMLText("last_update")."".getMLText("comment")."".getMLText("status")."
    ".$reqName."
    • ".$a["date"]."
    • "; /* $updateUser is the user who has done the approval */ $updateUser = $dms->getUser($a["userID"]); print "
    • ".(is_object($updateUser) ? htmlspecialchars($updateUser->getFullName()) : "unknown user id '".$a["userID"]."'")."
    ".htmlspecialchars($a["comment"])."".getApprovalStatusText($a["status"])."
    \n"; UI::contentContainerEnd(); UI::contentHeading(getMLText("previous_versions")); UI::contentContainerStart(); if (count($versions)>1) { print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; for ($i = count($versions)-2; $i >= 0; $i--) { $version = $versions[$i]; $vstat = $version->getStatus(); // verify if file exists $file_exists=file_exists($dms->contentDir . $version->getPath()); print "\n"; print "\n"; print "\n"; print ""; print ""; print "\n\n"; } print "\n
    ".getMLText("version")."".getMLText("file")."".getMLText("comment")."".getMLText("status")."
    ".$version->getVersion()."
      \n"; print "
    • ".$version->getOriginalFileName()."
    • \n"; if ($file_exists) print "
    • ". formatted_size(filesize($dms->contentDir . $version->getPath())) ." ".htmlspecialchars($version->getMimeType())."
    • "; else print "
    • ".getMLText("document_deleted")."
    • "; $updatingUser = $version->getUser(); print "
    • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."
    • "; print "
    • ".getLongReadableDate($version->getDate())."
    • "; print "
    \n"; print "
      \n"; $attributes = $version->getAttributes(); if($attributes) { foreach($attributes as $attribute) { $attrdef = $attribute->getAttributeDefinition(); print "
    • ".htmlspecialchars($attrdef->getName()).": ".htmlspecialchars($attribute->getValue())."
    • \n"; } } print "
    \n"; print "
    ".htmlspecialchars($version->getComment())."".getOverallStatusText($vstat["status"]).""; print ""; print "
    \n"; } else printMLText("no_previous_versions"); UI::contentContainerEnd(); UI::contentHeading(getMLText("linked_files")); UI::contentContainerStart(); $files = $document->getDocumentFiles(); if (count($files) > 0) { print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; foreach($files as $file) { $file_exists=file_exists($dms->contentDir . $file->getPath()); $responsibleUser = $file->getUser(); print ""; print ""; print ""; print ""; print ""; } print "\n
    ".getMLText("file")."".getMLText("comment")."
      \n"; print "
    • ".$file->getOriginalFileName() ."
    • \n"; if ($file_exists) print "
    • ". filesize($dms->contentDir . $file->getPath()) ." bytes ".htmlspecialchars($file->getMimeType())."
    • "; else print "
    • ".htmlspecialchars($file->getMimeType())." - ".getMLText("document_deleted")."
    • "; print "
    • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($responsibleUser->getFullName())."
    • "; print "
    • ".getLongReadableDate($file->getDate())."
    • "; print "
    ".htmlspecialchars($file->getComment()).""; if (($document->getAccessMode($user) == M_ALL)||($file->getUserID()==$user->getID())) print "
    getID()."\" />
    "; print "
    \n"; } else printMLText("no_attached_files"); if ($document->getAccessMode($user) >= M_READWRITE){ print "
    "; print "\n"; } UI::contentContainerEnd(); UI::contentHeading(getMLText("linked_documents")); UI::contentContainerStart(); $links = $document->getDocumentLinks(); $links = filterDocumentLinks($user, $links); if (count($links) > 0) { print ""; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n\n"; foreach($links as $link) { $responsibleUser = $link->getUser(); $targetDoc = $link->getTarget(); print ""; print ""; print ""; print ""; print ""; print ""; } print "\n
    ".getMLText("comment")."".getMLText("document_link_by")."
    getID()."\" class=\"linklist\">".htmlspecialchars($targetDoc->getName())."".htmlspecialchars($targetDoc->getComment())."".htmlspecialchars($responsibleUser->getFullName()); if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL )) print "
    ".getMLText("document_link_public").":".(($link->isPublic()) ? getMLText("yes") : getMLText("no")); print "
    "; if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL )) print "
    ".createHiddenFieldWithKey('removedocumentlink')."getID()."\" />
    "; print "
    \n"; } else printMLText("no_linked_files"); if (!$user->isGuest()){ ?>
    getAccessMode($user) >= M_READWRITE) { print ""; print ""; } ?>
    :
    ".getMLText("document_link_public")."
      "; print "
    • " . getMLText("yes")."
    • "; print "
    • " . getMLText("no")."
    • "; print "
    ">
    letodms-3.4.2+dfsg/out/out.EditFolder.php0000644000175000017500000000773512040235103020757 0ustar franciscofrancisco getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderid = $_GET["folderid"]; $folder = $dms->getFolder($folderid); if (!is_object($folder)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } $folderPathHTML = getFolderPathHTML($folder, true); if ($folder->getAccessMode($user) < M_READWRITE) { UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("access_denied")); } UI::htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName())))); UI::globalNavigation($folder); UI::pageNavigation($folderPathHTML, "view_folder", $folder); ?>
    getID() == $settings->_rootFolderID) ? false : $folder->getParent(); if ($parent && $parent->getAccessMode($user) > M_READ) { print ""; print ""; print "\n"; } ?> getAllAttributeDefinitions(array(LetoDMS_Core_AttributeDefinition::objtype_folder, LetoDMS_Core_AttributeDefinition::objtype_all)); if($attrdefs) { foreach($attrdefs as $attrdef) { ?>
    :
    :
    " . getMLText("sequence") . ":"; UI::printSequenceChooser($parent->getSubFolders(), $folder->getID()); print "
    getName()); ?> getAttributeValue($attrdef)) ?>
    ">
    letodms-3.4.2+dfsg/out/out.RemoveEvent.php0000644000175000017500000000412312040235103021161 0ustar franciscofranciscogetID()!=$event["userID"])&&(!$user->isAdmin())){ UI::exitError(getMLText("edit_event"),getMLText("access_denied")); } UI::htmlStartPage(getMLText("calendar")); UI::globalNavigation(); UI::pageNavigation(getMLText("calendar"), "calendar"); UI::contentHeading(getMLText("edit_event")); UI::contentContainerStart(); ?>
    ">

    htmlspecialchars($event["name"])));?>

    ">
    letodms-3.4.2+dfsg/out/out.UserDefaultKeywords.php0000644000175000017500000001361012040235103022676 0ustar franciscofranciscoisGuest()) { UI::exitError(getMLText("edit_default_keywords"),getMLText("access_denied")); } $categories = $dms->getAllUserKeywordCategories($user->getID()); UI::htmlStartPage(getMLText("edit_default_keywords")); UI::globalNavigation(); UI::pageNavigation(getMLText("my_account"), "my_account"); ?>
    :    getOwner(); if ($owner->getID() != $user->getID()) continue; print "getID()."\" style=\"display : none;\">"; ?> ">
    :
    getID()?>"> ">
    : getKeywordLists(); if (count($lists) == 0) print getMLText("no_default_keywords"); else foreach ($lists as $list) { ?>
    getID().".".$list["id"]?>"> "> "> " border="0"> &action=removekeywords">" border=0>

    ">
    letodms-3.4.2+dfsg/out/out.UsrView.php0000644000175000017500000000505212040235103020330 0ustar franciscofranciscoisGuest()) { UI::exitError(getMLText("my_account"),getMLText("access_denied")); } if (!$settings->_enableUsersView) { UI::exitError(getMLText("my_account"),getMLText("access_denied")); } $users = $dms->getAllUsers(); if (is_bool($users)) { UI::exitError(getMLText("my_account"),getMLText("internal_error")); } UI::htmlStartPage(getMLText("my_account")); UI::globalNavigation(); UI::pageNavigation(getMLText("my_account"), "my_account"); UI::contentHeading(getMLText("users")); UI::contentContainerStart(); echo "\n"; echo "\n\n"; echo "\n"; echo "\n"; echo "\n"; if ($settings->_enableUserImage) echo "\n"; echo "\n\n"; foreach ($users as $currUser) { if ($currUser->isGuest()) continue; if ($currUser->isHidden()=="1") continue; echo "\n"; print ""; print ""; print ""; if ($settings->_enableUserImage){ print ""; } echo "\n"; } echo "
    ".getMLText("name")."".getMLText("email")."".getMLText("comment")."".getMLText("user_image")."
    ".htmlspecialchars($currUser->getFullName())."getEmail())."\">".htmlspecialchars($currUser->getEmail())."".htmlspecialchars($currUser->getComment()).""; if ($currUser->hasImage()) print "_httpRoot . "out/out.UserImage.php?userid=".$currUser->getId()."\">"; else printMLText("no_user_image"); print "
    \n"; UI::contentContainerEnd(); UI::htmlEndPage(); ?> letodms-3.4.2+dfsg/out/images/0000755000175000017500000000000012040235103016650 5ustar franciscofranciscoletodms-3.4.2+dfsg/out/images/download_header.gif0000644000175000017500000000241712040235103022462 0ustar franciscofranciscoGIF89a{!!))1199BBJJRRZZcckkss{{{{ƄƌƌΔΜΜ֥֭֭޵޽޽,{H*\ȰÇ#JHŋ3jȱǏ !qXY!8 J4 @@@lИfD >ҁHB́ < q$'H(0` a"D`+ZMx*Aق&n8 <PB.=t` `3v |;Ñ +Lfᬄxjn%}<(I[B .@%,PN={ݙ $@C1hAhP8Ѐg0Up @V@@ @@ PUX1 I@A\A, W҅@8 /##%r0(*wdu"4\0&D<)Y WY D[ m ]lM4JmVly@M'&ֈ ^nUG%ߢ駠*ꨤr; letodms-3.4.2+dfsg/out/images/right_last.gif0000644000175000017500000000152612040235103021503 0ustar franciscofranciscoGIF89a,:(Lp!C(`Ń+fadž1ɑ(S\ɲ˗0Y; letodms-3.4.2+dfsg/out/images/dummy.gif0000644000175000017500000000144012040235103020471 0ustar franciscofranciscoGIF89a,; letodms-3.4.2+dfsg/out/images/line_vert_edit.gif0000644000175000017500000000161712040235103022340 0ustar franciscofranciscoGIF89a-,-sHP*\ȰBtH"ÈZHC>(Qȓ$K\ʐ-Ms&L.mV"ϞqzQ(ѠsUs)SNG&iVB0SKK4 ; letodms-3.4.2+dfsg/out/images/file.gif0000644000175000017500000000163512040235103020263 0ustar franciscofranciscoGIF89a!!!)))111999BBBJJJRRRZZZccckkksss{{{ƽcZZ911c99kck)!kc1ƄsJ)!19J1)c9)cB1ƽ9)ƽkcZBkZ!)!91ֽƽ焄{kkcƵZZRccZ{sscccJ{Bss9JJ119R)1J!Bc1))Z!Bֽƽ!)!)9)19199s{cB9s)1Bk)9Rsc9RkcRJ9{9BJRcsJc{!BJRc{ksJkcZJ9)sRkc)Bc!JR)BJJZs1s猭!1s)cεBRsRJRc)Rޜ֌c{{sk9ZBskssc{Js!Jքcsc{ksckcsBZRsckJR{k{csZkZkRc{JZBR9J1B)s{ksZcRZ9B9B19)1)1!)!{{ZZcRRc{{ޭ11BkkRRRR11cJJ99{BBBBZZBB11!!!!11{!(,yQH:XȐaB"JBT!J诤'ɂ"GFb%A+UFtR#Ǒ5QO3eҴP#ѝLƜ1(R#)FE`Z%hلh; letodms-3.4.2+dfsg/out/images/c.png0000644000175000017500000000107112040235103017577 0ustar franciscofranciscoPNG  IHDR aPLTE%%%)))+++333444888:::<<<===>>>@@@FFFLLLMMMRRRTTTUUUVVVWWWXXX\\\___```bbbdddeeefffgggjjjkkkmmmnnnxxxyyyeRtRNS@fbKGDH pHYs  tIME 8tEXtCommentCreated with The GIMPd%nIDATc`II1qtWt m?MYYF>S~[+` )7Q1w怠 ?_e c Sad 7vg``Uv6&c*aH\EUUe zXzIENDB`letodms-3.4.2+dfsg/out/images/right_in_plus.gif0000644000175000017500000000157112040235103022211 0ustar franciscofranciscoGIF89a!,U H*\ȰÇ pPD(Ǎ=E#1LE)vD`Kရ9HѣH; letodms-3.4.2+dfsg/out/images/folder_closed.gif0000644000175000017500000000160412040235103022144 0ustar franciscofranciscoGIF89a!!!)))111999BBBJJJRRRZZZccckkksss{{{ƽcZZ911c99kck)!kc1ƄsJ)!19J1)c9)cB1ƽ9)ƽkcZBkZ!)!91ֽƽ焄{kkcƵZZRccZ{sscccJ{Bss9JJ119R)1J!Bc1))Z!Bֽƽ!)!)9)19199s{cB9s)1Bk)9Rsc9RkcRJ9{9BJRcsJc{!BJRc{ksJkcZJ9)sRkc)Bc!JR)BJJZs1s猭!1s)cεBRsRJRc)Rޜ֌c{{sk9ZBskssc{Js!Jքcsc{ksckcsBZRsckJR{k{csZkZkRc{JZBR9J1B)s{ksZcRZ9B9B19)1)1!)!{{ZZcRRc{{ޭ11BkkRRRR11cJJ99{BBBBZZBB11!!!!11{!(,`QHX6|D+V80ƍ#~џő/<2ĕ,Ss@H3Ь)3' CZtgPU҉OJE; letodms-3.4.2+dfsg/out/images/down.gif0000644000175000017500000000151712040235103020312 0ustar franciscofranciscoGIF89a,3(Lp!C(`Ń+fadž'1aI#-; letodms-3.4.2+dfsg/out/images/plus.png0000644000175000017500000000035512040235103020344 0ustar franciscofranciscoPNG  IHDR o? sRGBbKGD pHYs  tIME 76F:tEXtComment̖XIDAT(A 0 g$ UN0PwHHz# }si%5]>POYpUZ_{X>IENDB` letodms-3.4.2+dfsg/out/images/usericon.gif0000644000175000017500000000154012040235103021166 0ustar franciscofranciscoGIF89a!,<HX0BBdPbĊ lF1Z$F 9(Ic,; letodms-3.4.2+dfsg/out/images/to_down.gif0000644000175000017500000000156712040235103021021 0ustar franciscofranciscoGIF89a,[ H*\ȰC `8E&"pF;8X1ŏKxQA&Q `#BiqdC2|CC&yt); letodms-3.4.2+dfsg/out/images/groupicon.gif0000644000175000017500000000155212040235103021347 0ustar franciscofranciscoGIF89a!,FH&?$p6r&"!%:-Ti,i=F8kIENDB` letodms-3.4.2+dfsg/out/images/line_vert.gif0000644000175000017500000000157412040235103021335 0ustar franciscofranciscoGIF89a-,-`H0*\Ȱ@J"ŋ-bP#Ǐ =)rǒ&7Lyq%ˉ._v<(c̚ o Is'E> :gѝGq&TfӗOYF; letodms-3.4.2+dfsg/out/images/infos.gif0000644000175000017500000000254012040235103020456 0ustar franciscofranciscoGIF89a{!!))1199BBJJRRZZcckkss{{ƌƔΜΥֵ֭޽,{H*\ȰÇ#JHŋ3jȱǏ CpH 1,X0%Ml.ys=)6phP 8a *t! . dC >af80  N4* Y6+اQV Lծ@ ̀@ :L60…8x .'a̚*Af 3hѤVY` Ekx<nb V?\|a{h;A F`AĻ ^u 0:!p@@tci =(6 L5 $Ѓ tRV.D9@Ԁ~ |![0J@<g0@:b_WrM QuH:0P-9y0q@A00kkWgɡm)hUZG(A%A!v`U@o 0)z @!N P`jF:YB deWt) Jj:^k `JR 1L$3[ݓx Յ%8` ˜D'‚VkoJYB4j bzGIENDB`letodms-3.4.2+dfsg/out/images/save.gif0000644000175000017500000000164012040235103020276 0ustar franciscofranciscoGIF89a!!!)))))JJJJRRRZZZcckkss{{{!!,|'H XpB48 E  8 NH#8xJ'St`͛ 8@"p'*M3"FUˑOF})T\[@+\;0 ; letodms-3.4.2+dfsg/out/images/icons/0000755000175000017500000000000012040235103017763 5ustar franciscofranciscoletodms-3.4.2+dfsg/out/images/icons/image.png0000644000175000017500000000414112040235103021553 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGD pHYs  #utIME4q|IDATx_l?7w7w^I/p4njȡUSJR[Y)j?T!U-}Byy>7(⡼KEߢ*i?\B6:^smT~hgwf>; ^ݓ:Qt?jcǎ}XV@xx' YFi<' [׮-sb3g{q}qĉK0NAvbjVŝ6;RUΝ;#Okޱ΍P … ߿$^zwyҍf [Pk-EQERPTÐ0 ns{n>쟏;C ዓ{c>~3WɗYHrTݓ,vߺ+uZkj/2_G}>^YDž/q5[Em_+xqrϟ~Ϸf*'g_pK\QYp*fip./pÇ#"A@ل dlljF1N<vx}>ynȴFsPoH6m5CTʩǽ_'xϓ)+++aXhɉ]3";s]Ğ쑿Ha弞*:֒uK$2s$#⩩h`@ԬaU4h4k9҈ v!dR(rbrڜ-ҧ&ms*AVV55fuͺ*a|&MuļJ3ҬLGfg1͉rLHt>X[ZJҩb-pR p!Ԫ&ЛRۇ=lGKi/<}Q1$#U&mc3ˌnoq!yRA!E"1`CD Kp/n/3qql*HYYÖͨ TS]Usw\piLDԓ/Ӽvɸ4 h>456O{p+At&o JYq(@DT07?8` 2xIENDB` letodms-3.4.2+dfsg/out/images/icons/default.png0000644000175000017500000000217712040235103022124 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGDF@ pHYs  @AtIME l:IDATxOT?w/1HPD č,MܑrWX01`F"_AsNgڙ$t{?|紎_Esex666>ڀ޵N0 DMF NC#...X__{gg . j,//9̈gspp;;;0 E" C&&&㭅Z+++lmmO_f;OVh4Z-Y]] I# C&V h+vB0#*%yU36{{{j*\5 3cmm gvvz 1gGsuK8H1isCצW՟0;P/u`@gF@[LzAmg|D<<lԨW|BQˍĽTĘ[&ͩ3> A\ja@sI|B CĉSPg8!a%oBEǝf}ӘjV0kjՒ #2bfg4Q Ƙ$`81DK` R0D>f%A^W5"xO ^`\cUwرI"Ƙst|;/ 2YLd"g$ K P;GwMQiTFBhHUJchwlI~Fʴ?y/# i!$sݳjzCI#snk UYdROJθ"tͪ!%.ʹЕHWx[f|ϙ78O˖oFnqjAOH|}^ uAĢ Z%mF"jD8@Ԓl ҹ `Q71ǥYĘf}ug%AF ?apBe!L\!!?Qh3NIENDB` letodms-3.4.2+dfsg/out/images/icons/source_java.png0000644000175000017500000000421512040235103022774 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGD pHYs  #utIME8 IDATx_h3{WV:ݘmjQ*Dq[m 5B[h  u Ӈ<LZh~(%lSC-ʺӍHcm\vawMW_rYn>_] ?z}rri` w#6βnRVBI$#>lvԩ{kw:sG?v7z5ŋ\|GySNw  m"* _VYXXĉϊ;v|xYXX`Ϟ=o *bA`6qw `ii+Wl fb5wj @__j]vOP㿝.pmsEŭIT[W?d[76pMn\F9<>dڠwoCO1*p?r Ԝ{M"@kE3n" 24CųHQLҌQYY Q'1IR0 >>sx%ijֆϜnsh3#MD5iB&RJ *Ѐ00:B&Jԧ3KTȯ@SoSzRJ(*P9r8Y"՟Ey sN*x,+**̋꒜!6]ؘNS_d 4tr<p.hL#??m۶qĉ]VZϧ 2ҥKs gŊtvvRTTDAA. MGG׋6oތ}ɓ xX?EUUyG0~LիWYr%~χ\~7 "I9NA211sa, UUU!@O|`(Zzi $|-;#H$b Yl E0)f5.D/=A7l6***Y@OOJʢ$(-.Fa^\k^=hL$\`.lv[hyÁnO%qzrMAȇM$QJC8'[?6M&뀔)g!Y%_,ІY ,YYY Պjeڵ[~tuu6E H?Zk3(%l&@w  %H)SPb~LQ223Y)C=ŖcbNE۷#`׮Տ錯H-.BJŐr 9NWiƩS2!"F4$z$4Xk~!uuorB6 !ؿ@D9[Zá2fE1[DswF/ﶶC Aaω%ؖc{=L(8E'?9ٳ=!$ǏŐTfߺ% :M7oޤ9`immmюnv~?XUUeoE4MX B!n@4n߾MKˑ%ݠlܨJ =]3::=DwYJKK@ \v5kj }BK gl6MOϏmY|>/JܨkGNAII~())# RRRfBp4p4qb/6ղcGc|\Bd\NzR~%y.9tp(e$xbD"Gd@  2<&e,Zs?'}8!ּY{N xYDSljoُй@t˿F-(IENDB`letodms-3.4.2+dfsg/out/images/icons/source_cpp.png0000644000175000017500000000264312040235103022640 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGD pHYs  d_tIME@IDATx]lTEw]nKiJ| &Z5%R&U%11@>4i &ƗݕDLEƒ/ј4&@@?nw?ٙ;9sΌA|񇢔TTrǟ*0|"E M#@m&&'}СCp=0La"Zhii;ODܹez:ccc477gd\)n*XFٺu+3Y^0 6EEE555l޲h4JKK 8ƦMτBEp8n^/hh2yxW%`0(^doooxppP`e6=B455ڵkIgY D={PSS隣Z;0+lld;}ʦ r/1@dVۃ{g0koR~oޛy~ob?"Zk\m*&?hz?/<@>􋝆:B'OX\\%3g^ ]]]ێJϟѣGtvv288l c RE"d2eEXjYȶV~̲㴶ra"]]];vlG000P7ٳgQJ es]ӧOs5&&&q.\j2 c3YYYuEɓ'ǁ?>>.о12A޻wfajjdH444`A_|w.lD)ŕ+WHuIӃRfgghP(,ԩSf JŸx>!N9<###P**\z{~g6+?07@K8{plީ f/[KK RX#bͤZG25 d*s][hg 1Xx_G,14l_ PLOO,{;16%Dփ%W-͑N_^揟R1C|~:gh +D2Eꗦ__^^@r)MH3tkB C?g%Us΍[ƾw~ݭsa7|:  J* ;w.<55lVn1vx2YBA2mȥK:Cx?=M)q{= zc$ݭ+@ (*~QR{vC].A!#Z;M,՘#nFUy|㟘ʖH4rz: h„M Kib,Zx1 vD!(Fa霿`c9FiUSDz.koz[WeU"P@?bޑW Q6 LovIENDB` letodms-3.4.2+dfsg/out/images/icons/ooo_formula.png0000644000175000017500000000156412040235103023020 0ustar franciscofranciscoPNG  IHDR szzbKGD)IDATx͗=LSa{-?&$$.E*$$0Aascč+ܹ800 ƟE]5 &V-m^kOr}s{νˮMMMMޮfM4,T*R)D"ρK_ (|`~)\ 3MS%!|XkSm8T+6(eFV%((=M+K\=h,rW0GVM3ӞƿDd ]5W/5 (@IENDB` letodms-3.4.2+dfsg/out/images/icons/document.png0000644000175000017500000000276712040235103022323 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGD pHYs  d_tIME+ "#sIDATx_l.^VADJ%R"-i)/Q:O(BCT/HfM%%>RHn)mvamݝ{9}]5Hso|݀&u?36|Eׇg=' 闚 \.ST(޺יy````P( ̮95̌0 +2998W\aǎ i`U0VRL 6yfX,sN*mbtuu#P,޽)Y\###˂w g/0^5 axL\rd)B1:6a=tvlls6OA3;&yΎvffi6c 1".TP&UUJ9@YɐI5vEKQX̓*f!>dӖIsYF~iF̢T0u } a"2@2bfSLLb³ @ })3d VÎ֝a9h]H/ wobF F|2}ZB@xW#Bq F+vO~z[gfj_#т 45Ʋ0udQ[/F}ӣ8LQ"q}4iث??D<0r5yL-vbVT@ޞDK/5ɛ}/$58w?ɒl5Qb$-U=s a܅Q3Ԥ."J`ҴqRJ0uJ{F^o3c4aGJDl1uԥ gׂL3?L-y5.-[o#42u-'ّlQ $bĉ:Ҿ>ȒFs"au2 jQtֳ wD*\@,وRʊ9 jQcE5 {j@כ 2eBo-_+,r}wD(GzWIENDB` letodms-3.4.2+dfsg/out/images/icons/source_c.png0000644000175000017500000000253212040235103022275 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGD pHYs  d_tIMEH-IDATx]h\Uwf7Iw! /XZ JUhԖ6F- l@[""61Xӄvj6{9ݯ4{;gα"_~hQڸTuQ S)N}5 F /[͍l6b~~yӧO?JRB%0Ձx l1&&&&JjR~`s4J&a޽q9`j1kRXz_n|B!ZZZؽgL_b2\aKRE'djSQcȈ$HrI$bYa?tLNN###`c9dͭ>"0&7k˧sL9]1zXFko݈^)'sE7C ZC(]DDH&}'1)I×=A mu c4`@#*zO"F;06"ph͍86w`vgM|92%z/Ҿ"UZ+qm ͈1FagLр\WG"O~ ((؆/_At<Jo況8N6rũɚL&GN(".×?#e2N']]Om pYQ .S<l?F3S>oɗ&Te⳵l]x}Ak?5#2u]ҚotֈT 熊G)+@fҸȺKq//n]@~Ar__۷Y-_508^W-Α|F\?+O~ zi#oƀ3% JavNa[c`3PɄVLD>ZDj^@+Z~ùoAD pzAIENDB` letodms-3.4.2+dfsg/out/images/icons/pdf.png0000644000175000017500000000452312040235103021246 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGD pHYs  #utIME"3)IDATxmlSv4!DQFH)&v:+TMihnؠT2 Q)0&.ct--  [V\bkvl{;Y[Rutts氟;}<_Z̳5pwW_}I` "ǿ>bRDq%J%:;;swn fn!踥rL6$gΜ,_ݻw_n d>f`Fhj"p}v+Ŝ-Srf)BMM uuuF&GydN/9J%J!0 "L`^0sSk^.G~O*brruB:SSS\xq^0sפFJ܁nv 0ht<̹sH&r9|GVpҥ`vIgg,yFJI:ȑ#.0:0E)r>P(O_qJL<ӬYv֯_OWW/^Ķmm۶of^8L\BШY:;D80B$Z TX,Fcc#|/!DC7 61M l֮/$iYX(C)hjǴ #%CQ:Výl9Xo V_phte\,Y *s\s{Y$]A1W`2Gϓ]]7'|hV p" 3pc!H"i)"#K6lx?R)|G}}=\>,bǏ322B0$Hpp8hep8D>ү(!JN*^---Z 4IJ4%+B,cOq?q5.X P G.}utzȪ*7nlbt,x41 bH[[pz[3/4CWm6H+*|ֈ dƯ*oCok> uGMй2 E0hLB&EU \ΑkM.mD4B-!)`&!;@XN@T(jBEf#өʛNCCw.i Bᕑ)   "%BgOd۶ k r4\t/_ɝc2HUQ( (xgUT < p r-}#QBxH"]!+)WQI~.|/ELBn:{y^pf>/V!9xKIENDB` letodms-3.4.2+dfsg/out/images/icons/gz.png0000644000175000017500000000427112040235103021115 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGDF G,0 pHYs  @AtIME+ۏ}5IDATxm\UΝ;o;3&VF)Z-I X b$R]5+H M& h@RHkӵPmvovg33wf6>=s<;M-`iRHUoYkVN  Wwеd9VoBc T*Qɞ͒D8q+Ʌ`f^@k@OOς 2FG8v'O `A{>Fm bq2 WwtP(`hsH y\AC8mFI\|9B6lpI{& #d:̧15Zk{? L&) ̉FAf8M(p˲rq"Ocl۶mN8]KϙUTuJ)zr;9n轙kpg㸮m @##fر#GL̬ywY>]r 2ʁs;A{<=[~L" c66mbppt:MGGR,ioo.`rN{9){ 91"tRz xc/kƾ}/3<< D^zQ>̍s|,#g'ʟgzjJr3p@-{_rJ̞ݿە2Rp0YtPxޕ+X~ ^;ȷ>A4Í2]"i5Ɖ'J"@f6es?Ww?!setd"HKeQkޅ ,ܰǢ8%8XjYY-J コ mUSR)A%v(?K-(E)L Flj"U,^T*88B!*\\n oaM"ATd"~ ?+)Rǭ!@z$1⩥. ;_el, H}% ?q  Ϋ+"-1ci6cA*[u3wNknD Bz8BB 0ڇ1,8^.M_;ˮ޿Rr]8t->\]Zy0Kjp0dC#@"Yy,ᷧN->Hf( @ ZIRhUFC P릊Rvs:(+>!]U$1T  Z@ )b|E\H\W* 9dVթ&d1(C1^9tvLYwxv"F&a2X=A>'ND/P)R`xN0^lQڒ^QhӘ^\\^qGu1n}dL3lwL3WNpoYV^{˞%2~:TQ"ՎGf/ >le$c9 IENDB` letodms-3.4.2+dfsg/out/images/icons/html.png0000644000175000017500000000555512040235103021447 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGD pHYs  tIME5 6 IDATxylu3Eq,; pl.EI2M6@ZAPQ b5i S) KZ=-efbJxy\{_-ėjY[mϷo?gy&u7^ J+UF^hP. ow<soؾ}]ָKRfz:0ccc rY0■֦:r3-+ݒjD}K<}|G*`m&Ίlr̎;ؿ?,a;@i6+ [JBJtc+B@^J5JJțip&o@\fڵ0ֺi4*hZVF+ ZUgn=yGӷ7ZֱoB`YdrXK/KbF6Sy[&ό_J[#l'?L7W'5\ckDWg'ebYB*ׯ_0}0Atܸ >n}^96lZ2f _P;2FlͶ1RO5 ֎i _g``T.={7:-# L3n*Ɖq}xpqrQ F߸}E%fV};?xinꅇW˞$nqt(BfzB5C~UMlܰ0_cTMO059K@X`_:7|x[`٦9wxس ]1wJ|:o~fB$`h2WIb$5^=#& $Md}$-ءMg47@0JrV-|ce3)림qh+پk#9{,3h ĢQdl7mirܭ?9X}0ғL]&olaLrq+,c, oX Kњa&nh?>5nW+&R8Zd2A8G w؋/H;e.ME=V. ý+}PBD'&}lLIe|pyͩdBH^T*I2YՅ9VdR8%7ّ8I`,>AѮsK 6Hԁ x1r ۀ77L蠤##Z-7d hGBSǙR!naADش㯸dcyH5DƮ29 ׬u:dZg5 6X>g໾ qgߧGI7eW8R3f/AV}=pж^.B\"}<tpgPJ ZfcN|WpvŘkr^8AIjPs3Ȗ߅SDi\^ D.ʗ^dO(\Pr9if!/Ys %02QWF\UBRȫ&&&1i@-HPqZm 7.6f%4 4u> *"~&xApXKTKEɶLLbJtZ&Р}VK_J#AA8coŷ#XFSJ_u9ӓנV|5Jkfն?>;IY6<bI;t!LNE PJs :7~Ch-d2|avr}utjJ&Q)6}&%YNKev` \dgě >tСҞ={j} g BJ²Ltt"J,!L L!J- A`ioVOVݷSwHV4`m lĶ l2BkG+vw!dVxBJh R=_Dڰ hÐX2@+!K/5/TA~s3 ,1v)}[E+ڽ % $Z{+V[NHk_ ?G0;wڻi/ۂ0d?T{_/4Pk+$P?`#CIENDB` letodms-3.4.2+dfsg/out/images/icons/log.png0000644000175000017500000000412612040235103021255 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGD pHYs  tIME"IDATx}U3ܻVWVD+B%6Bj֘&ƍ4fن6M!MeM#M6i FZ|,.){f}ǹ{w/9w3>ϙcNg5RB//&.ru: P(P,ɟ?ϙ3-x'._ rkSU$…<#4@Tj5S[9v<+Wd͚5c300 VyR,2y8fռXkihh  Y|y熇 zIMOPQ+d߁ap˛466裏+}صk/"\Q3qUUUsN6mڄi@x?wW𬿿vhkk+ƍ9pt5Usan݊$x 3_3)iY@3,Zaݺu477ʂ hii?tww od.ݡ:+}G i1T-[0>6Q3 2q#.L㜻U d Z4S0iuSA~?d"L)ESSJuM'Ʃii.GOC*!ԥ;W$# :;m 7?LNC|\@M\$ @.{ @WWottиP N\ѫlgN]PͶoGwۗPUBTg  Y Ũjj9Iض 3q=o<7+]l϶mο{wM7ӳƖ$(sjILS#sdR5Ki* ro٩uCvh5@gi&>xܵ66a BpH?xශwb@W^XJz`i=_:AI*)Ւ# l >Wң]G\9IJeXr-OIš%EJ5PZPLD]m# LM?._%6-@TJ?nZdѕvJ 0LL 1W**!cx[xb27a1@M9p CZ(8N{vv$-@wrKzl׮2<<`۶m}FsoEk0ZO38ŋfۗ c)%BH)gn@ @4c޼yT-X@:fݺuٳ 5bxBڵkIӤi&''q]!, 4D"Hֲq#`ϝ;Gζ z˖-: ꎎ=00t6՞i)<[nnnn{р*nl@{}!v??m7oOy饗XaBmf2M … 9pmm?"24xoǶmK,#8@`ѢE[oҒ9M43ϰk ,YRCSS3TTTPYYI??8zdXRw/'8},DQBuuu\p2,X@<gΜ9dYǻw [lotu14tKp<#?5J.LSS8ó>455/S^^NYYr=$u=DU Jwާvgg'ms ,d\.%KСt]j QYYz:0M," QRRP8N9tRg@g$9w3X|9K.4-._lܸż|'=zLf#GoZۻYt)`l6Ԕd>_rh% .R.Df4NN7`e$--O,$7eZ!JJ Gjd\U\r*t /fUՑḺc'8{,UUUD""x~R hmh(-(6 9t: @oo/˗/Ry/%x_q)N86ZZZB@ $JQR``Ä`(.ق +Aww7EJ @4$`llh4ʲeضM*rRZyTBcP8Ӹ4ʣ>J,cժUCJd.O.'qsSܸquQJ199Iuu5UFGGYf J Rh顔eY25M$$nHb'xj/ZRd|2xT*י%ZD(VCq ;߿k}X,ɏR^~^qΜ9AVh!Z6J5ZW2o7hZ|nc5"a~x|xKdkɖ$$vmƲ,6Hֶm<%ltzm/"ĉ\wu(0Mq>VMuuu( ضC,HscHDԩSԬy؎e[ݐLz VQR-V/ǝwɦM.g(-C+Ipݕ7'w3f1esT2VQ-S*H QqQ.]:̹>ahIKIccEN$уOfL|<{=wcru=j&]"@㇊Zo~^zkײe˖eFK2ı4&DDScìd<} qJ c*5 *bMQ(G#;LEICc R(%1KDJ>z|Fw^!===̙N|8]8]9U8=pf4:s}m۶Q*) 5"0CcmcfWa֜/2@ @hښH5!m$mn#xjǷPQ [hNEBSg[Dq1gkz߾}" CG]˺y91ni,O4zwBk`Q+Wu/O-&";C[X,02\*M(B " %?ȹ?@i3uikk%nĩx쇓akk maaKBo'K,!"w@E*Jєc5Z7ApA~̂Esh_J˼4~X@<ـ6&&FǩxvǧRft7)SX ϝ@LO2)СCo' CyT;m5>|RL!_"/0f^.޹gskQ}ϐ³~k"`[_)F&aiiLMO1??,@__ߣd2 ,G<tuu맪dYH%ɂ- IYȈǵx\1+ǎȈb1ZLXx߿§յ433Ν; ?ƍq`]۰pxԨj.v*˂56Ֆ_~uw'UT}5"d}6FTlq0䢰LLF@TEW" /]||z%,ؽb0g DbͳTd+gш:4Ʈ]q' ycqpI,߈KB 4uӔ#Mh(q/" ـW؊|"tHi(hT}pO¾KdJr54~UL|yrr#@tIr4Ķm .HWWo( `hh9Zo;lۖEIRre~@k׮Q 0q8p={|>ŋ#?*s X,֚T*EKKKՆupND, 4Ih B9st:ʥK "Ӊh"%H$dY$ r?-UϱaX1Bs\)ɤE&իy"@ׁ@4 Hթ_6"X,G:bffL&ý{6|5F?2ܮ87WJẮ7WJ!"h+ihh'H4ܹs Ɂ*VJ} uE2 -Zfvx w~@+ e kI\-!҂^XYd嶋/C_;͛7" 4d[!7HfT:8hBc7~ fkPp^ Ʋ{G[)'SZph4֕C@)5O)jE)i%i^'&p˧TZsPZXWzy^G .HHt:G0-8Ɋ J/pjG)-7.]jbb-LγW C\D4ɤEQ TCK)PZscZ:yk5l\uFi)gV jBkkXrh]:Jo09>NcU0r>p(;uZpDp /͋DOPʥä#`8+ԗ+o)$w%Ef|_s5"! ۳`=ŝѷYӧ>\awh5J$/}Bše2ıo~F(C+hykK(&8an+_J[p*-xopjѱQv :vk7mMffɲy|O9}s|}Z9ڋ4޿{,ɧqlEhOV^8‘#tvvesmr7?>2 "[W8ry>Mrۓ0355*WKvyym}y[垰Sװ'r0 +/֧(klj{3"h1fpt:MTX S cPJ+/rKR.QJrr̕+W3oکRȦGY۱֥8W5v~d2ضeYСC9sfxj6Yw=Y?>]qqk'k?{ɆM,>}{~J*"b6;wdYZZZhnnrLss[#)b]rD8 scn"ERz [Mpk_/?E* _F:7K 6X&c#n ]6jZc/cJR&!E] [X[,ԩ'RqKcDc 4fKh%b@NkϮvu/V} ׍L6K:! ob? k,D1R@{hRj8 "@ϪUmfɌL`Sss|rѰE:R\b4wA#pp\$qBj.K,"8 "H_PS( ፗ ,I%bȪ IN%)I.qܚG* Yڼ:CCy@y)%PX6DT0tAf#jbjrQ|78C<&-Ο=A0'D!j.5(I Ä R " e$qF/^ HE.:F!!ݐ 8Cu 1G)eyA*0qxϊm78Ƶ96n\_&p(z~|GyD-Qq)R1n1uWo[wPr͍'] _Oo }ny͟sI'c4eRc"! Z[R2(L7lH%fe}a M4%"nh*Ai(m76(C+NWH)0FQ\/YXR (dIi)%=?;S)m LnI!epn!W!&@;-0IENDB` letodms-3.4.2+dfsg/out/images/icons/txt.png0000644000175000017500000000424112040235103021311 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGD pHYs  #utIME 1@IDATx[l\}.3o` 85!.]P)%PPyHy(jD)BJK** } U$T!$* mՈ{h Cq'dm|xf{aL NvIKs̞>uQ\ya1Ơ-rS6HK3wXJq X|.t:M&!9;[vܙV>7OGχTW,g$MK<q`E?۸U g萯}uuu4דL&`Ϟ=*Z)߻ 0v4Xbi7sʨe&$lݺ0A?ümD(,TUUL&. sX #x7=E׹G@Rr 籰ٳ|fs)%1捥2Ldh### Kٻw/;w,ʌJTX YP7[י:ˇ?\1TQñ}vX,F4eaaX,ݻwSJuCUT@!&\~5wLbjp. dff0 $FgfvqJ#۷-gd['Ar} ߋZU e-~#DW]ƺu멬Z_RͷB~5WE*P 9}B" _ SD@z= +.p ;W,ѹϖ2"TVD*~kj$ |>fi!1 %2v/ȼdfnj7FDS+0Yjkfs+8!*)- _J<B( ;عDڈ5AYJF1AC$P]]EUE?@W_ق % ɻd >&g,dø`GΖp,kX&AXs (]ZZ|zR đ$'/)B YA\AL+Vs:[ٮxPLk,ʀ'ƨ!KG1AJ#g6ܮћ; шܽ1NPBYjh6# NYϤe||ɑ!HkdPsrmNV! Z S܆#H1wN| /SuW<F:M+ː8k8}iB^ 8o~ق1T4"Bi;oyMD%".tŃko ϯdFaM:Cк5M[AzzCsvDee)2TgsvǏכq( /hVq FJ0ATU#3KYX 9z8"c'Bl@(TzóR Z˫p?b 4 }$SSLk~2ȮݏX+AnyF{^ClP ""_sFVgy忢<.6ĪT#]+FgLN;V TrΓ 8"R,Y `-X͟=wz3GxW@Yk㼀[wt6eOLDϒͧ;#b0s'&_;Gger߇pyy472?wUDž u]RS @$e\]h =Ҁ}Yr ΂Xl-kEO)1kstUS7x̪o90".8.!G9NOZQh&Rp`ΥŃȭ`2S U/^$2") JN"߭`4Kвd+X q轘reb ÄIENDB` letodms-3.4.2+dfsg/out/images/icons/midi.png0000644000175000017500000000342112040235103021413 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGD pHYs  #utIME:$IIDATxmlT{޵^Ȁ]C*8J. URYQU[HQUT$+B@ŏUm E#5R(ԄE쵱k/z̜~a7Gg9sg-`=?}E(m.uνwvww?,f<f{]H}2dii7odzz Ώz{{3+:::ّ#GmχmXJs'D+W022Byy9XLooN<)ru2??/J)1ƈZdrrRξ߿_.\ hTj(xRڶMII l}QMMMFBy}o tuu1<ga>A|&㷦 | h^4#R)Rfg(SUQF0ZqڿB5IkkkOii I"F-gaҴy}KAGK)J$Z,D }bҤ bvD;vlRZP$pYxsÞ#=4OҥKTTThmm{߿xGg"M dϞ=zLivɖ-[# 288o!FӾ;V18Khy0e(ٓ`Nq!X 1rFGGhhhqA ed=Ҥe޽XE7_@(v&C`߸d͔&Hzckhh`?m[ ?~U27J§7Sb?hQ^fdAC*Pq&i 1j9Dk{~('Kr ԑ4n4hDkK =V8F%]D Cgquު{@kk+/^̲|y@=9-?M@eD4X<ʡb1x!Dkqt413_+ȟWz}h]qmnn.Ȉ7額lXWEqƲ <wNbT b6X#J˗=4g߽Ց 7nn=yYIb}vZV ?u ފ/L,דW~v4IݫO*g 144tE[?-iz]eh>a_6-Aܯ& 's_}UXF!*Qv(@ZxOzP(܃C& :!gHO@1Ub]h0Rd3- nˀRJ81NLYfX bx,q g T7tecۖw?Lґ-\|mn2`҇j_+̤Yj $\+L@h?'IENDB` letodms-3.4.2+dfsg/out/images/icons/source_py.png0000644000175000017500000000450612040235103022506 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGD pHYs  #utIMEğ@IDATx}l[yN^ICC2ӆ6ȪUPTX`Lb# `iҍI(ʴnDS%R Kr~W$0l|EQr~?{pr())᪥KI$ZniVovuX{{̘H$ sQiy1+M+mmmҶ׭['#{oolmm.9f`jjj:O )/K,^x&wAɳOӜOʹH)gN?EAJȉ!)%Yh9H)mg̶/~\.NEQPݻw;~b9 v<𱓌!}k,{ @ݭ u/!V S۫־ C:F+tcPPXLw9m >SBU h(~T2 xgTV0]$P7rcmW٣;11.t7%b_bi[9L_p뮮F~~u`C44TSsX0/ni^ŋM*D +sB!SYzq @PVRu-G^j{x.qG>>k{* P o04]|"w!"mz9 /n.P=긵a ?y|IAUd2JʨРko"L>F4͋i /ma||)W.SBZ)\pk.GNQH/$NF?767]X'Cb'N?XTF"39vf/0J# m#LC E6yo67>K8,ḫYZy^s/ %SdTʖo{dPUzzӕb{ BJ,SB H'rʆ;|>0*AˉȖAKX6ePDIFd2u@C204|ghNyyy(V̩xR#h+bldzCӷmE9eQQ.2X6J"ChB`1N|qN|M)gSD sW?c$A_8E,/zɖ6IENDB` letodms-3.4.2+dfsg/out/images/icons/sound.png0000644000175000017500000000400412040235103021617 0ustar franciscofranciscoPNG  IHDR"":G gAMA abKGDՐ pHYs  #utIME&CQpIDATx]W|D(`l RikĆVp&rm)7+i1 ҈Ҩ @֕@[Į3Nj2n$39/yFHc]ײsֹ 8p`7By@8F٤jQܹs{:r`q@ooD4Mwƭ[ q5l‘#GƀaRAAXr%_ZZ֭[yƀ˹K}$I²eذq#Z^vܹ(VDDrZ$AH2ouZYa}F`{eN:vn߾ Ƙyꌌ̃9x {Yrif!~234skrUV4Msٴiv 1fadߧxSrbʊ+Zce߿>0$7E5|<0<$~֯_OX$"<ӹ[lD%[X(2pz@= ĐU{a1|b˱RVZ-ҴC()$$ʋ(KIؕo" ݩEʏb1nA+k7B ~ Y˗ٶmr .$ QG`L κb SR\hP+HemPJ嘚f %VŹvI\⋣eZZ,A*OwO# }瑦)iͩ###J%Ygq6Y)V:0<&7ۨИ|5ZKdYݻw9{<¡D@l۾.mf<%NC/"U׷x^vY>(MS9y#5aBa;d8gV:cE\sL Ls6.]jw199ѣG)E$qD.I\Qg;-4%^h0r@T*sd'8v1W)((={O[nRJ>:tH+i˗x{U8 )R*޽[eaaADD$K}}]ܚ2dhnn*z땪*ijjJ `۶ض-HDܹKAAX&e! i_:4 BP~286j@DzQJ!"RQqd+++C)PDRR?R hqq~?p[  @4 ˲O&##jzzzXf OOOt#ej˿Oss3׮7wۺhV` (lǶ}euc|c61‚i iS "tttB)E]ݛtvvqϘ ۥ)=xol۠_)پ)7E^7(t<%%սo߼:mLBdl }?Xm 1lXus| KYqE N,ݴ/-݆k:?`+;Ĝ  GLdيRW@K"O(6-T R85MF^A[7>!kC72~OcGR+K!S}ENZt4^U±(uiyAôw8vc*Xߑ?"7ӹԮjض_xܠ3^d3>5Scp/d#o-..'.I kLؕ6&X$tʩ+L|u&cs&S dS,,P1m~4ҿJ[E ˲t݄MLnP7y>7]"p]۽ؚsc#LO!"Kvg`_Z=&(<{ݛ`-L=`|vsؖ10p A\:E], vҎ*|>JK]A߽ :O^ ˕(SlM#jİ[$[y!b0x?\TT/**&@ a y0",;aLUq4`fp\.G}4'YUk>N466NK{{{ls/ hhhjB~d֭$H2Mp,!J҅W>QJ͸H$9E0/^%Xj TnP+%L4a^,J"aq"̯&L(GDR#7Kk @ϏHG*uH$br9y]K|qQ5dƧ=z{.|lR8eYS@˯;9z(Ѵ7+ @}EؖE"'VX{_{w8yϓkNrtxwX5)i|Ellgkctx3sڗp;p te.U` 8rN=$`@]x,T*ymB)` ߲ˈE#loa!S.Ub'x͑ga,?ŝwgxЮdmv6hsϖn*r8={|5( p+1FJwEk׮?Dh۾C,<\(]ݯ_"1+x/=fdxT p P(+cd|m1X`!X,]ݯp}K;c]Bр 8Nr&-RJH$'qcH -Z8e[c%;pq,/hpڶ)~|3O︊$Xg;r)_ekL^ Tc}SM YrY\&xps/?c` ך7̿ST~73Md8̛_,5ö0}|Ė{V疍i?NaVI6FY?;^ee<+bSav?vC9Qntk+ XJ8VwcYRL&8]d"_X51}h mѸ4(|С1"^cێ|wy/6kaYe4Nk뗵O3ZcA)gY@tpovc<;ﻺp{s%lQ8X"zEǻz6(L^&nXϒoe`p1I"C_12: D^2( }LB#+lud:H1f!t1T8"mY` b 'c*Ÿul'$"8xDJEDGgHig s@\6( >e#@7ˉy\IENDB` letodms-3.4.2+dfsg/out/images/icons/ooo_presentation.png0000644000175000017500000000266612040235103024072 0ustar franciscofranciscoPNG  IHDR szzbKGDkIDATx͗kWu.~B-e!ZH/d-aYKZ% *EiMoɝX~[R*B bL$VLYgwgӋn6dMB_8 ˞9ssD2fƍD"֒dN˗_~'`u_ڶm<< }\z=zԤR`%d^poFFFÇɓ' HkYsMkͣGhllcǎonn,_\ ˲PJ399uٱcXv'@|$bAmcpB@(Vc_CD"`R sNYf e!  !GRʚBpYzzzf_Zk6mjeppӧOT% iiiX(Yim0Obc,{!Hj*4lq+\`h mS6ħӵtyܢS |N02R<{?{?(bROVʞ[Jv!b < ͅI0WIa3n}{@Iђ[ٜ/TSq?g}UMk%;x AT#G`V?O17Js5W&!Y)Yzz;w"! /s߼颋t"{nhnnf֭ݻײ۱N}!&$Tqֻ/x{[̜gZ+&Źsj6GQ2_'E 0%qR݁DJQW!dӖbX,V/&tAD<'011y(53(Ͽm%.^ۖηm qH$[ݼ uKeYD"MM beaPa4afy5 y&\םvH), uq]!ku(Dl,kZ*iiYΊI'*vD%wK \Dd)mcWz0|>ύ CU!ciPJTi<,k^jܹsgAxo:%;eLK;6P&ܥ|)- & ? I@X y*kIENDB`letodms-3.4.2+dfsg/out/images/path_right.gif0000644000175000017500000000160012040235103021465 0ustar franciscofranciscoGIF89a*,*dH*\P$Ŋ-FX CHRG(,y2%ȕ,]IeJ1eysgM>y ѦJ?"r)O9Ɣʒjɀ; letodms-3.4.2+dfsg/out/images/lock.png0000644000175000017500000000133412040235103020307 0ustar franciscofranciscoPNG  IHDRVΎWsRGBbKGD pHYs  tIME  _\IDAT8ˍOQ;3UA.A˗T &=6PLC6P@iC @  ÇTVX00B^ ^8`B >d80 † ÅeTH! %νP. = X`@OT @ :'a ZP90Z` #@0UK݀Bg6@,܌r'@0c4@ݿ+- в'=?=A\XXZN]Ayp@@<@'f@w@+6-FW*X#pQeAuT! W;vc8vpr6dsl8qL@PY@t%AFWQ 9P|}WwSZ%mPҡ֓ Ty hp ALi5\R*pOAV *무j ; letodms-3.4.2+dfsg/out/images/m.png0000644000175000017500000000045112040235103017612 0ustar franciscofranciscoPNG  IHDR a3PLTE888:::IIIUUUnetRNS@fbKGDH pHYs  tIME  pwtEXtCommentCreated with The GIMPd%nFIDATUQ QR,V&ޗ;"(!AKPۧ[Qw%MHw {i0IENDB`letodms-3.4.2+dfsg/out/images/right.gif0000644000175000017500000000153612040235103020461 0ustar franciscofranciscoGIF89a,B(Lp!C(`Ń+faG'I#%Ĕ*WtqM ; letodms-3.4.2+dfsg/out/images/del.gif0000644000175000017500000000156312040235103020110 0ustar franciscofranciscoGIF89aȀwww̙ff___3333㲲33f@@@ffffff̙!,OH @  D a).Dƅ#~"I:n2c˖$LhXA M)PL: $Y0 ; letodms-3.4.2+dfsg/out/images/folder_opened.gif0000644000175000017500000000164012040235103022145 0ustar franciscofranciscoGIF89a!!!)))111999BBBJJJRRRZZZccckkksss{{{ƽcZZ911c99kck)!kc1ƄsJ)!19J1)c9)cB1ƽ9)ƽkcZBkZ!)!91ֽƽ焄{kkcƵZZRccZ{sscccJ{Bss9JJ119R)1J!Bc1))Z!Bֽƽ!)!)9)19199s{cB9s)1Bk)9Rsc9RkcRJ9{9BJRcsJc{!BJRc{ksJkcZJ9)sRkc)Bc!JR)BJJZs1s猭!1s)cεBRsRJRc)Rޜ֌c{{sk9ZBskssc{Js!Jքcsc{ksckcsBZRsckJR{k{csZkZkRc{JZBR9J1B)s{ksZcRZ9B9B19)1)1!)!{{ZZcRRc{{ޭ11BkkRRRR11cJJ99{BBBBZZBB11!!!!11{!(,|QH:Hx !A N"F nCDR_Eb8? IƜf˗wJ\iIBi2̡+otT)ş>Ui3kΪPc+HhӚX0 ; letodms-3.4.2+dfsg/out/images/minus.png0000644000175000017500000000033512040235103020512 0ustar franciscofranciscoPNG  IHDR o? sRGBbKGD pHYs  tIME pKj\IDAT( 0 -{ăo' BhJҸZJ6AS'1H<1l.݉3'w+[5GIENDB` letodms-3.4.2+dfsg/out/images/right_in_to_down.gif0000644000175000017500000000156712040235103022704 0ustar franciscofranciscoGIF89a,[ H*\ȰÇ pPD(Ǎ=z Pǁ&( E)$ %Ƀ0E*PM2:sPG& q; letodms-3.4.2+dfsg/out/images/view.gif0000644000175000017500000000026712040235103020316 0ustar franciscofranciscoGIF89aBk{{{{{{{ƽ,kI3kv50`8u*4AdpjoP |d(, de,a!]ILE"Q>ղB08tehe .0A\dЁf@CQVkرerc 5̀@@@0B8 0C)\&|@,2f͜O&XأV 9!.PR` |}AO ߀~ZIx$W@ 7@x !}HPd5aA,DyW_e8ݸ#A,} D@%if)Y}Wm@ PPX5Pg%9X][HG%t)|TlVDUؗ]U@fTrRjꩨ; letodms-3.4.2+dfsg/out/images/path_left.gif0000644000175000017500000000161712040235103021312 0ustar franciscofranciscoGIF89a5,5sH@*\ȰaC JHqD3>Ǐhɓ$S.<ңH*[3L/k2΍<[tPEMtRM*'UCVuͮ2u1 ; letodms-3.4.2+dfsg/out/out.Categories.php0000644000175000017500000001046712037453315021034 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } UI::htmlStartPage(getMLText("admin_tools")); UI::globalNavigation(); UI::pageNavigation(getMLText("admin_tools"), "admin_tools"); $categories = $dms->getDocumentCategories(); ?> getID()."\" style=\"display : none;\">"; ?>
    :   
    isUsed()) { ?>
    " type="submit">

    :
      ">
    letodms-3.4.2+dfsg/out/out.RemoveDump.php0000644000175000017500000000370112040235103021006 0ustar franciscofranciscoisAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } if (!isset($_GET["dumpname"]) || !file_exists($settings->_contentDir.$_GET["dumpname"]) ) { UI::exitError(getMLText("admin_tools"),getMLText("unknown_id")); } $dumpname = $_GET["dumpname"]; UI::htmlStartPage(getMLText("backup_tools")); UI::globalNavigation(); UI::pageNavigation(getMLText("admin_tools"), "admin_tools"); UI::contentHeading(getMLText("dump_remove")); UI::contentContainerStart(); ?>

    sanitizeString($dumpname)));?>

    ">
    letodms-3.4.2+dfsg/out/out.FolderAccess.php0000644000175000017500000002432512040235103021265 0ustar franciscofrancisco\n"; print "\t