Compare commits

...

2077 Commits

Author SHA1 Message Date
Frank Karlitschek 526e704c9f 4.0.7
and remove some ^M while at it
2012-08-14 20:07:58 +02:00
Lukas Reschke 4682846d3e Disable user enumeration 2012-08-14 17:19:20 +02:00
Michael Gapczynski 95ef80e6db Check blacklist when renaming files 2012-08-13 01:29:32 +02:00
Lukas Reschke 4fd069b479 Also check some other files 2012-08-13 01:26:28 +02:00
Lukas Reschke 2024d424cd Disable listing of all users 2012-08-13 01:22:53 +02:00
Jakob Sack 6d94455540 Fix OC_Connector_Sabre_Locks for SQLite 2012-08-12 09:06:46 +02:00
Lukas Reschke 2871896d54 Check if webfinger is enabled 2012-08-10 16:38:32 +02:00
Michael Gapczynski e9a63900de Don't return file handle if the mode supports writing and the file is not writable
Conflicts:
	apps/files_sharing/sharedstorage.php
2012-08-10 09:46:44 -04:00
Lukas Reschke baab13ae13 Validate cookie to prevent auth bypasses. 2012-08-10 15:23:04 +02:00
Lukas Reschke 5192eecce2 Added XSRF check 2012-08-10 00:11:04 +02:00
Lukas Reschke 7581d55428 Missed an "echo" 2012-08-09 22:17:52 +02:00
Lukas Reschke aae17d4ae8 Sanitize user input 2012-08-09 22:14:48 +02:00
Thomas Tanghus a366ba4c0c Fix for broken Mail App in OSX Mountain Lion. https://mail.kde.org/pipermail/owncloud/2012-August/004649.html 2012-08-09 17:22:56 +02:00
Bjoern Schiessle 2cfc7f7454 fix for bug 879 - add parent directory to file cache if it does not exist yet.
For example this can happen if the sync client is used before the user created the root directory (e.g. through web login).
2012-08-08 11:47:23 +02:00
Arthur Schiwon e9e84b5c3b Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-08-05 21:17:39 +02:00
Georg Ehrke c32a99b14c fix label for versioning in admin settings 2012-08-04 18:50:05 +02:00
Bart Visscher 758ae42df0 Calendar: remove double html encoding 2012-08-03 16:26:05 +02:00
Bart Visscher 0970a3c60e Contacts: Fix no active Addressbooks 2012-08-03 16:11:10 +02:00
Arthur Schiwon 6b78ca1a5a LDAP: sanitize base, user and group trees. fixes oc-1302 2012-08-03 15:51:25 +02:00
Arthur Schiwon e899c9989e Show Login-Button when user+pw are autocompleted, fixes oc-1068 2012-08-03 13:16:25 +02:00
Frank Karlitschek aa60771736 4.0.6 2012-07-31 10:13:10 +02:00
Arthur Schiwon b523366acd LDAP: don't die on unexpected collisions, handle empty display-name attributes properly 2012-07-30 17:30:11 +02:00
Michael Gapczynski b9bd54bd98 Add additional error handling for emailing private links 2012-07-30 10:07:20 -04:00
Michael Gapczynski dab708b625 Correction for 'Fix group detection for sharing in case username contains '@', fix for oc-1270' 2012-07-30 10:07:20 -04:00
Michael Gapczynski 519eb39422 Remove delete tipsy if file is deleted, fixes bug oc-958 2012-07-30 10:07:19 -04:00
Michael Gapczynski 3e183b2eea Set filter to empty if not set by Ampache client
Conflicts:
	apps/media/lib_ampache.php
2012-07-30 10:07:19 -04:00
Michael Gapczynski d07b8448d1 Set the user id when authenticating user for Ampache, fixes bug oc-219 2012-07-30 10:07:19 -04:00
Michael Gapczynski 7d17c59a51 Fix group detection for sharing in case username contains '@', fix for oc-1270 2012-07-30 10:07:19 -04:00
Michael Gapczynski f378415377 Only call mkdir() if the root folder does not exist for FTP external storage 2012-07-30 10:07:19 -04:00
Michael Gapczynski 6b83470c96 Fix incorrect copy/paste for file_put_contents() 2012-07-30 10:07:19 -04:00
Michael Gapczynski 93c75f46e5 Forgot data parameter for file_put_contents() streams pre proxies 2012-07-30 10:07:19 -04:00
Michael Gapczynski ea18d70c60 Run pre and post proxies for file_put_contents() streams
Conflicts:
	lib/filesystemview.php
2012-07-30 10:07:19 -04:00
Michael Gapczynski 41a74e3dd2 Check if size isset, try to fix used space calculation again, fixs bug oc-1331
Conflicts:
	settings/personal.php
2012-07-30 10:07:19 -04:00
Michael Gapczynski 164fc1c981 Fix used space calculation if shared folder does not exist, fixes bug oc-1331
Conflicts:
	settings/personal.php
2012-07-30 10:07:19 -04:00
Michael Gapczynski f328f53ec1 Fix filesystem hash, no longer using basicOperation()
Conflicts:
	lib/filesystemview.php
2012-07-30 10:07:19 -04:00
Michael Gapczynski 099b16350f Delete old session files, suggested by Torben Nehmer, see bug oc-736 2012-07-30 10:07:19 -04:00
Michael Gapczynski 89027545a0 Check if user is already logged in for DAV auth, instead of logging in and creating new sessions for every request 2012-07-30 10:07:18 -04:00
Thomas Tanghus 01f25119d5 Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-07-30 12:28:40 +02:00
Thomas Tanghus f91783e9ab Fix errors when no addressbook. 2012-07-30 12:28:10 +02:00
Georg Ehrke d8aca0c78e apply fix suggested in oc-1132 - bugfix for oc-1132 2012-07-26 18:40:12 +02:00
Georg Ehrke 4e62e121a6 mark OCP\App::register as deprecated 2012-07-26 15:12:57 +02:00
Georg Ehrke 8cff0d997f convert through caldav transmitted rgba calendarcolor to rgb 2012-07-26 14:48:00 +02:00
Lukas Reschke 12dfe5868a Updated style 2012-07-26 01:38:46 +02:00
Lukas Reschke 95936024bc Updated packages 2012-07-26 01:12:58 +02:00
Lukas Reschke 9605e1926c Check for admin user 2012-07-26 00:06:51 +02:00
Lukas Reschke 85a410d7a3 Remove unused files 2012-07-26 00:04:12 +02:00
Arthur Schiwon 3c9919e475 LDAP: check if php-ldap is installed. If not, give an error output. FIX: blank Users page when the module is not installed. 2012-07-25 18:21:16 +02:00
Georg Ehrke 9b0870bb91 add some calendar sharing hooks in stable4 - bugfix for oc-1325 2012-07-25 17:02:24 +02:00
Bjoern Schiessle 73734c98e0 - remove namespace from file property name (webdav)
- update script to fix broken properties in the database
2012-07-23 11:00:37 +02:00
Lukas Reschke 93579d88dc CSRF checks 2012-07-20 20:39:20 +02:00
Lukas Reschke 38271ded75 Added CSRF checks 2012-07-20 20:12:36 +02:00
Robin Appelman e52ab59b40 Revert "use readfile() instead iof fopen() for file download over webdav."
This reverts commit 9af74a9c80.
2012-07-19 18:13:10 +02:00
Frank Karlitschek 10bf36a6ae 4.0.5 2012-07-19 09:10:18 +02:00
Bjoern Schiessle 3895e3a5ae remember username and provide autocomplete feature 2012-07-18 12:26:10 +02:00
Arthur Schiwon 0bd7d14b7a Sharing: offer an option to allow sharing with everyone, i.e. do not check group memberships 2012-07-17 14:09:01 +02:00
Thomas Tanghus 9326f4f535 Added hooks for postCreateUser to add default address book and calendar. Fixes oc-1265. 2012-07-17 10:45:15 +02:00
Thomas Tanghus f4a8c233cf Added hook for postCreateUser. Probably fix for oc-1265.
Conflicts:

	apps/calendar/appinfo/app.php
2012-07-17 10:35:46 +02:00
Thomas Tanghus eb2a15d58f Format birthday as BDAY;VALUE=DATE:YYYY-MM-DD. Fixes oc-1276. 2012-07-16 23:36:11 +02:00
Thomas Tanghus 47d50fc424 Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-07-16 21:22:07 +02:00
Thomas Tanghus d64300251b Corrected javascript definition. 2012-07-16 21:21:37 +02:00
Georg Ehrke d4e2cb6e62 fix encoding fail in calendar app - bugfix for oc-1194 2012-07-16 19:53:19 +02:00
Thomas Tanghus 225726c8d9 latin1 => utf8. I thought I did this a month ago? 2012-07-16 01:41:45 +02:00
Bjoern Schiessle 50eef9a71c update script to fix fscache 2012-07-13 15:17:36 +02:00
Bjoern Schiessle 80ed5412f1 if the '/Shared' was the modified directory, than scan it. 2012-07-13 11:57:14 +02:00
Michael Gapczynski 7b2ec41477 Revert santizing toaddress, because PHPMailer now throws exceptions
Conflicts:
	apps/files_sharing/ajax/email.php
2012-07-11 19:38:57 -04:00
Michael Gapczynski 632fc6ec61 Fix log write() parameters in wrong order 2012-07-11 19:38:57 -04:00
Lukas Reschke ac5abc5603 Handling exceptions 2012-07-11 19:38:57 -04:00
Michael Gapczynski e887fd7ba8 Catch exceptions from PHPMailer 2012-07-11 19:38:57 -04:00
Michael Gapczynski ebcf5bce3c Sanitize toaddress for emailing private links
Conflicts:
	apps/files_sharing/ajax/email.php
2012-07-11 19:38:56 -04:00
Michael Gapczynski 71491612e3 Move line counter so we only count lines towards the offset that are equal or above the log level 2012-07-11 19:38:56 -04:00
Michael Gapczynski bc3462f022 Improvements and bug fix for log reading, fixes bug oc-982 2012-07-11 19:38:56 -04:00
Lukas Reschke d203fa2c50 Sanitizing file names 2012-07-11 19:15:11 +02:00
Bjoern Schiessle 9af74a9c80 use readfile() instead iof fopen() for file download over webdav.
fopen() didn't work for large files on some servers while readfile()
seems to work for all files on all configurations.
2012-07-11 12:04:20 +02:00
Robin Appelman b470869114 when checking for updates in the filecache, explicitly state that we are querying a folder 2012-07-10 14:42:15 +02:00
Robin Appelman 71f9a6c093 dont throw errors when opening a dir using fopen over the smb streamwrapper 2012-07-10 14:40:25 +02:00
Robin Appelman b8a6ffe261 fix statcache for filenames containing non-alphanumeric characters in smb streamwrapper 2012-07-10 14:21:50 +02:00
Robin Appelman 7f57591ef1 suppress error when using is_dir on non directory in smb backend 2012-07-10 14:20:30 +02:00
Robin Appelman aeed130b3a improve caching smb results a bit 2012-07-10 14:20:19 +02:00
Robin Appelman 8a902d8f65 improve filecache support for smb 2012-07-10 14:20:11 +02:00
Robin Appelman a1fefea66f split share and root config for smb backend, also sanitize config a bit more 2012-07-10 14:19:51 +02:00
Robin Appelman 8fcce55e76 share code between smb and ftp filestorage backends 2012-07-10 14:19:40 +02:00
Robin Appelman 539e4a1813 smb filestorage backend 2012-07-10 14:19:31 +02:00
Thomas Tanghus 197086a952 Make it possible to import files using CR as eol. 2012-07-08 18:34:00 +02:00
Thomas Tanghus 747b7fbbfe Set the loading class on the property being changed, not on its container. Now on all the places relevant ;-) 2012-07-08 16:17:10 +02:00
Thomas Tanghus d730d3edd4 Set the loading class on the property being changed, not on its container. 2012-07-08 16:10:12 +02:00
Thomas Tanghus 25b95a9ec7 Improve checking for active addressbooks and creating default addressbook. 2012-07-08 15:41:38 +02:00
Thomas Tanghus 554cb2d3ab Add missing requesttoken. 2012-07-08 14:48:49 +02:00
Thomas Tanghus 47f96e2d5e Missing semi-colon. 2012-07-08 14:42:33 +02:00
Thomas Tanghus 746eef0d5c Format error response correctly. 2012-07-08 14:31:40 +02:00
Michael Gapczynski 0045e64041 Fix time formatting for minutes, prepend 0 if minutes is less than 10 2012-07-06 16:49:15 -04:00
Thomas Tanghus b11b6afbb9 Hopefully fix for drag'n'drop import in oc-813. 2012-07-05 00:25:38 +02:00
Thomas Tanghus 5fb9b3e965 Disable expires header on thumbnail and photo. 2012-07-04 15:32:41 +02:00
Thomas Tanghus f72a11f852 Moved action buttons down to the add field menu. Fixes oc-1155. 2012-07-04 13:49:39 +02:00
Lukas Reschke 0465129eba Remove the forced download§ 2012-07-02 12:19:48 +02:00
Lukas Reschke 47bad20132 Restoring stable4... 2012-07-02 10:47:45 +02:00
Lukas Reschke e29681e233 Applying the fix 2012-07-02 10:29:04 +02:00
Lukas Reschke 5223724809 Wrong file - Sorry! 2012-07-02 10:28:11 +02:00
Lukas Reschke 4235ce0b63 Merge branch 'stable4' of gitorious.org:owncloud/owncloud into stable4 2012-07-02 10:22:33 +02:00
Lukas Reschke 134d5d93c8 Don't display error messages 2012-07-02 10:21:38 +02:00
Georg Ehrke 8b5cae3c6c fix a small PHP fail 2012-07-01 21:50:53 +02:00
Michael Gapczynski bf93dd4661 Don't reload the page after sending private link to email address 2012-07-01 11:53:29 -04:00
Michael Gapczynski ffadbfcef3 Prevent duplicate group showing in multiselect that added the group 2012-07-01 11:36:57 -04:00
Michael Gapczynski dd7d34a40e Prevent adding a duplicate to a multiselect 2012-07-01 11:36:44 -04:00
Michael Gapczynski 949cab7ea1 Add new group to other user's group select forms 2012-07-01 11:36:31 -04:00
Michael Gapczynski 5121c262e2 Revert "bugfix for #1098 (assigning a group to a user, the group appears incrementally many times the more you assign it)"
This reverts commit 265d7e50f5.
2012-07-01 11:35:58 -04:00
Lukas Reschke fa7d4c2b39 Disable mimesniffing 2012-07-01 13:53:06 +02:00
Michael Gapczynski 9c083d3519 Fix setting custom quota size for users, bug fix for oc-1128 2012-06-28 21:26:39 -04:00
Michael Gapczynski 45e964c7aa Return login errors for PostgreSQL setup 2012-06-27 20:25:46 -04:00
Michael Gapczynski 895d5707ee Don't overwrite fake directory stream for Shared storage 2012-06-27 12:09:11 -04:00
Bjoern Schiessle c0e86489c9 no reason to strip tags at this point 2012-06-27 17:56:00 +02:00
Bjoern Schiessle 7af76e36e1 enable highlighting of address in OSM. 2012-06-27 11:41:52 +02:00
Frank Karlitschek d163fe02cd 4.0.4 2012-06-26 21:51:32 +02:00
Georg Ehrke ae00f40b97 add OC_Calendar_Object::createUID() 2012-06-26 15:21:41 +02:00
Bjoern Schiessle 265d7e50f5 bugfix for #1098 (assigning a group to a user, the group appears incrementally many times the more you assign it) 2012-06-26 12:54:09 +02:00
Bjoern Schiessle 595ff468f5 typo in js statement fixed 2012-06-26 10:36:33 +02:00
Arthur Schiwon a72eddeef7 LDAP: compare base trees case insensitively 2012-06-25 20:54:21 +02:00
Thomas Tanghus b1f3364eee Maybe fix out of memory..? 2012-06-25 19:42:38 +02:00
Thomas Tanghus 2ad93849ab Idiot proof dialog ;-) 2012-06-25 19:33:51 +02:00
Thomas Tanghus ad5aa5ac15 Try to conserve some memory. Should fix oc-1106 for stable4. 2012-06-25 17:16:34 +02:00
Thomas Tanghus 42a5cd21b9 Missing requesttoken. 2012-06-25 17:15:33 +02:00
Thomas Tanghus ddf321d534 Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-06-25 16:22:19 +02:00
Thomas Tanghus 56ed8ba70b Select which address book to add a contact to. Fixes oc-1071. 2012-06-25 16:21:29 +02:00
Arthur Schiwon 594e19bddc LDAP: always sanitize DN and DN-containing attributes 2012-06-25 13:22:49 +02:00
Bjoern Schiessle 85ac75b4f4 xss vulnerability fixed 2012-06-25 12:38:11 +02:00
Bjoern Schiessle 0083dbb3ce Only delete existing thumbnails (bug #1100) 2012-06-25 10:11:06 +02:00
Brice Maron 6da926f1c3 Resolve scanning issue case comparison of songs 2012-06-24 15:58:51 +00:00
Brice Maron 5b908209de Correct seq name in media songs fix oc-589 2012-06-24 15:12:05 +00:00
Frank Karlitschek ac358ed1b3 4.0.3a
Two important fixes after 4.0.3
2012-06-24 11:38:54 +02:00
Georg Ehrke a12557ca4d another fix for oc-1044 2012-06-24 09:42:14 +02:00
Robin Appelman 44e36ecf49 fix 'files' entries showing up in Files before the users files are scanned properly 2012-06-23 23:42:54 +02:00
Robin Appelman f1e4c845ce fix duplicates showing up in the filecache 2012-06-23 23:32:44 +02:00
Tom Needham 1c0e72cd5a Text editor: Waste less space for line numbers 2012-06-23 14:43:52 +00:00
Frank Karlitschek a8868fa007 work with non existing apps directory. thanks toAntonio for the hint 2012-06-23 16:20:31 +02:00
Tom Needham b591c83008 Text Editor: fix editor positioning 2012-06-22 16:20:09 +00:00
Bart Visscher 60f558cdbb Fix initialization of OC_Filesystem setup from DAV 2012-06-22 17:20:10 +02:00
Bjoern Schiessle e943f6c0c8 log messages are looking nicer if they are not escaped. (xss prevention happens on another place) 2012-06-22 16:53:45 +02:00
Bjoern Schiessle b6c862b32f use sanitizeHTML() function
Conflicts:

	apps/gallery/lib/tiles.php
2012-06-22 14:03:05 +02:00
Arthur Schiwon e5171da300 remove unnecessary closing PHP tag 2012-06-22 12:50:49 +02:00
Arthur Schiwon 0d9534eb4b LDAP: cheaper userExists() implementation 2012-06-22 12:43:09 +02:00
Bjoern Schiessle 65c14e21ce date don't change correctly in the view list (bug #973) fixed 2012-06-22 11:32:57 +02:00
Brice Maron e5d458c068 Correct File cache error with postgresql 2012-06-22 10:46:49 +02:00
Frank Karlitschek ca6339c480 4.0.3 2012-06-22 09:25:41 +02:00
Thomas Tanghus d72b85684f Only search for VEVENTs. 2012-06-21 20:53:50 +02:00
Bart Visscher 9045557258 Tasks: Add delete action 2012-06-21 20:18:12 +02:00
Bart Visscher d75b5cfdd2 Tasks: Use list label for ordering by list 2012-06-21 20:18:08 +02:00
Bart Visscher dda56c5e3d Tasks: Fix position of the summary input 2012-06-21 20:17:49 +02:00
Bart Visscher bae592d69b Prefer requested app before redirecting to default page 2012-06-21 20:15:23 +02:00
Bart Visscher a7e427a3cc Remember result of OC_User::isLoggedIn, can be very expensive to check 2012-06-21 20:14:53 +02:00
Bart Visscher 8aa7ed39a5 Only check for apps owncloud version requirment when there is a new owncloud version 2012-06-21 20:13:30 +02:00
Robin Appelman 46ad51cbe2 dont change the encryption key during the test case 2012-06-21 18:53:52 +02:00
Robin Appelman bd8b921de4 only use 1 fsview when initializing encryption 2012-06-21 18:36:16 +02:00
Robin Appelman da9107fe69 fix saved file size for uploaded files 2012-06-21 18:07:56 +02:00
Robin Appelman 7b4cb44af8 truncate decrypted files based on size 2012-06-21 17:51:54 +02:00
Georg Ehrke 096f5598b4 fix calendar 2012-06-21 16:23:13 +02:00
Georg Ehrke 288c5e7581 fix a PHP Notice 2012-06-21 15:20:53 +02:00
Frank Karlitschek 5212fa3fa7 check if the data directory is accessible via http. Show a big security warning if yes 2012-06-21 14:18:43 +02:00
Bjoern Schiessle 3b4d2a971a check if user is allowed to edit bookmarks 2012-06-21 12:29:50 +02:00
Georg Ehrke 37ed3b5bd2 make edit event form work with DateTime Property UTC 2012-06-21 11:35:58 +02:00
Georg Ehrke 43674b1759 fix mimetype for cdr files - bugfix for oc 559 2012-06-21 09:58:04 +02:00
Michael Gapczynski 6524f6ad30 Only call OC_FileCache::get('/Shared') if it exists in the file cache, prevents premature addition of the Shared folder to the file cache 2012-06-20 19:24:45 -04:00
Robin Appelman e43d02fadb fix encrypted flags not being saved correctly 2012-06-20 20:18:42 +02:00
Robin Appelman 9ba467d629 fix encryption for binary files 2012-06-20 20:18:42 +02:00
Robin Appelman 0f2600e9ea add binary test case for encryption 2012-06-20 20:18:41 +02:00
Robin Appelman e3f1507374 use absolute path for file proxies 2012-06-20 20:18:41 +02:00
Arthur Schiwon d0dbc8beab make bookmarks bookmarklet work again, kudos to Victor Dubiniuk 2012-06-20 20:04:41 +02:00
Bjoern Schiessle 5cc75ad818 Merge branch 'stable4' of gitorious.org:owncloud/owncloud into stable4 2012-06-20 17:08:48 +02:00
Bjoern Schiessle e71dffcdf0 no need to escape the title 2012-06-20 17:01:07 +02:00
Bjoern Schiessle 8e427d80d3 use sanitizeHTML() function 2012-06-20 17:00:55 +02:00
Bjoern Schiessle 0e61b5457b use new sanitizeHTML() function 2012-06-20 17:00:33 +02:00
Bjoern Schiessle 902c649dad use new sanitize HTML function backported
Conflicts:

	lib/template.php
2012-06-20 16:59:51 +02:00
Bjoern Schiessle d9607df26f backport of sanitizeHTML() function 2012-06-20 16:43:31 +02:00
Arthur Schiwon a7f0811829 bookmarks: make read later-button draggable again, fixes oc-944 2012-06-20 16:31:22 +02:00
Arthur Schiwon 0289f442a8 forgotten $, incorrect subtract 2012-06-20 12:41:30 +02:00
Robin Appelman c4d1363419 don't show other users file if the filesystem is not index already 2012-06-20 11:35:45 +02:00
Bart Visscher 311c2bc0d3 Calendar: Write-close session to enable parallel events.php requests 2012-06-19 23:18:26 +02:00
Bart Visscher 0524f6fd3c Fix webdav property name compare 2012-06-19 23:18:07 +02:00
Bart Visscher 2d4e1b45ce Load app before running update script 2012-06-19 23:17:40 +02:00
Bart Visscher c260db0e9a Tasks: Fix resizing of the content part 2012-06-19 23:17:14 +02:00
Bart Visscher 0d43d6402d Tasks: Use POST for ajax calls that change data 2012-06-19 23:17:00 +02:00
Bart Visscher cff1b6e699 Don't use substr to get first char of string 2012-06-19 23:16:17 +02:00
Bart Visscher bb649dd0d5 Smarter code for OC_FileProxy
Conflicts:

	lib/fileproxy.php
2012-06-19 23:15:33 +02:00
Bart Visscher 598a090db4 Add cache for getStorage and getInternalPath functions.
These are called for almost every file operation.
2012-06-19 23:13:24 +02:00
Bart Visscher e728635c8a Add stat cache to OC_Connector_Sabre_Node and OC_Connector_Sabre_File
Speeds up access of directories with large number of files.
2012-06-19 23:13:21 +02:00
Bart Visscher 4d627d66a1 Add help texts to config options in config.sample.php 2012-06-19 23:11:54 +02:00
Bart Visscher 98bc916016 Make check for writable apps dir configurable
Conflicts:

	config/config.sample.php
2012-06-19 23:11:14 +02:00
Thomas Mueller 637f8398ba fixes oc-668 2012-06-19 22:37:25 +02:00
Bjoern Schiessle 1b142a1155 quota calculation fixed 2012-06-19 09:36:50 +02:00
Arthur Schiwon 244920aeb0 LDAP: only map users within the User Base Tree 2012-06-19 01:15:58 +02:00
Victor Dubiniuk db7542b640 Reverting 249190c89b. Fixed in master 2012-06-19 00:56:48 +03:00
Victor Dubiniuk 249190c89b Fix mime-type detection 2012-06-19 00:20:33 +03:00
Brice Maron b31962fdc2 Hide image with no source (avoid placeholder img) 2012-06-18 20:15:20 +00:00
Bjoern Schiessle 92bb59c95d fixed broken function call 2012-06-18 17:30:21 +02:00
Bjoern Schiessle 814cab97cf ignore "Shared"-directory when calculating free space
Conflicts:

	lib/fileproxy/quota.php
2012-06-18 17:27:42 +02:00
Bjoern Schiessle ca41f2e96a don't add the "Shared"-directory size to users quota 2012-06-18 15:38:38 +02:00
Bjoern Schiessle 9d0cfacd67 escape log messages to avoid possible js execution 2012-06-18 09:43:56 +02:00
Thomas Tanghus d8048414aa Removed erroneous value attributes. Partial fix for oc-1029. 2012-06-18 00:39:38 +02:00
Tom Needham 8d67ca09b5 user_migrate: remove old code 2012-06-17 12:07:16 +00:00
Thomas Tanghus 33ab91710f PDF Viewer: Double encode link. 2012-06-16 19:49:57 +02:00
Thomas Tanghus 707660b35f files_imageviewer: Double encode paths. Fixes oc-1016. 2012-06-16 18:57:51 +02:00
Georg Ehrke fc632b5795 fix merge conflicts 2012-06-16 09:48:07 +02:00
Georg Ehrke cbe5449f47 remove a closing php tag in calendar 2012-06-16 09:40:32 +02:00
Michael Gapczynski ec3033a5dd Check for '\' as well when searching for parent folders, because Windows returns '\' for dirname() 2012-06-15 19:34:25 -04:00
Tom Needham c1744d2eb6 Move user import to personal settings. Fix user migration between servers. 2012-06-15 23:17:31 +00:00
Bjoern Schiessle 0074062b53 fixed xss vulnerability 2012-06-15 16:16:00 +02:00
Thomas Tanghus 5c6a7172ca Files: Double encode download links. Fix for oc-1016. 2012-06-15 15:58:10 +02:00
Bjoern Schiessle f9c34942e1 applied merge request #128: fixed some sorting and display issues with gallery app.
This also fix bug #872 for the new gallery
2012-06-15 10:46:29 +02:00
Arthur Schiwon b025ff8de3 reverting 8c7fa15aaf, differs between OC3 and 4 2012-06-14 18:33:00 +02:00
Thomas Tanghus 3b58c7a407 Remove debug statements. 2012-06-14 18:03:50 +02:00
Thomas Tanghus b6ee4c458b Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-06-14 18:00:45 +02:00
Thomas Tanghus 5b1a14f9ea Contacts: Implement CSRF prevention. 2012-06-14 18:00:13 +02:00
Bjoern Schiessle 60bd2562d8 fixed bug #996: first picture in folder is repeated in the last position behaving like a directory 2012-06-14 15:16:13 +02:00
Bjoern Schiessle df4737f52a prevent xss attacks also if some javascript ends up in the alt-tag 2012-06-14 14:19:12 +02:00
Thomas Tanghus 3e143601fe Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-06-14 13:53:05 +02:00
Thomas Tanghus 625cd822c3 Backport CSRF prevention. 2012-06-14 13:52:22 +02:00
Bjoern Schiessle cd759aee00 fixed xss vulnerability in un-packed version of jquery.fancybox and repack it 2012-06-14 13:45:33 +02:00
Bjoern Schiessle 544f97f034 debugging output removed 2012-06-14 13:19:11 +02:00
Bjoern Schiessle 4a47fa255d xss vulnerability fixed for fancybox image viewer 2012-06-14 13:18:59 +02:00
Bjoern Schiessle b0420ee8be suppress warning if /dev/urandom is not readable (bug #997) 2012-06-14 13:18:50 +02:00
Georg Ehrke f9af0ef703 fix another ui bug of calendar 2012-06-13 22:21:23 +02:00
Georg Ehrke 92a11011b1 another ui fix 2012-06-13 22:15:12 +02:00
Georg Ehrke 4ff11308a3 fix a ui bug for calendar sharing 2012-06-13 22:13:24 +02:00
Georg Ehrke e543ec6eb6 show username of the body who shares in the summary 2012-06-13 22:07:30 +02:00
Thomas Tanghus 3e339f3d66 Remove check for encryption. 2012-06-13 19:04:47 +02:00
Thomas Tanghus 9e7c28835b Allow same host redirects (/somepath). 2012-06-13 18:32:07 +02:00
Thomas Tanghus f589df7366 Redirect HTTP Auth requests to REQUEST_URI. Partial fix for http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-874 2012-06-13 18:31:36 +02:00
Bjoern Schiessle 48ee265170 urlencode link fort password reset (bug #970) 2012-06-13 17:26:30 +02:00
Michael Gapczynski 7868b25dcc Fix incorrect creation of filesystem for user@group in data folder during shares 2012-06-12 21:34:35 -04:00
Georg Ehrke 48116cf9ab increase version of calendar app to force db upgrade 2012-06-12 19:54:07 +02:00
Georg Ehrke d54fc6dfd4 increase possible size of uri in database - fix oc-140 2012-06-12 19:54:07 +02:00
Bjoern Schiessle 635a2f8ec9 Label the delete operation "unshare" for files in the "Shared" folder to reduce
confusion about the operation.
2012-06-12 16:32:00 +02:00
Bjoern Schiessle ef6b6ac230 block slashes only for new files and new folders but not for file upload from url (bug #964) 2012-06-12 14:16:09 +02:00
Thomas Tanghus cee9d400c0 Contacts: Final (for now) fix to encoding probs on import. 2012-06-12 12:33:37 +02:00
Arthur Schiwon b70226b493 Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-06-12 11:57:36 +02:00
Bjoern Schiessle 4501407283 committed patch (bug #967) to add missing translations for file actions 2012-06-12 11:41:13 +02:00
Bjoern Schiessle 107c2de25d applied patch provided by bug #966 to fix broken user specific quota settings 2012-06-12 11:22:25 +02:00
Thomas Tanghus 2473348c5d Add .vimrc to .gitignore. 2012-06-11 22:53:20 +02:00
Thomas Tanghus 210b71502b Fix copy/paste error. 2012-06-11 22:18:14 +02:00
Thomas Tanghus e0a5e3e992 Fix js for missing address fields. 2012-06-11 22:15:56 +02:00
Thomas Tanghus c75a7966de Contacts: Fix encoding errors, import errors, developer headache, paint cute kittens and pink clouds ;-) 2012-06-11 22:15:31 +02:00
Arthur Schiwon 266c5238c9 LDAP: offer config option for Group Display Name attribute 2012-06-11 16:50:54 +02:00
Thomas Tanghus 74eece2620 Contacts: Fix NOTE also on add, not just save. 2012-06-11 12:56:41 +02:00
Arthur Schiwon c110308c1e Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-06-11 12:14:10 +02:00
Arthur Schiwon 7f5e8e39c4 ldap: check array for emptiness, not nullness 2012-06-11 12:13:55 +02:00
Lukas Reschke 6da717b644 Merge branch 'stable4' of gitorious.org:owncloud/owncloud into stable4
Backport for sanitized user data.
2012-06-11 11:57:36 +02:00
Lukas Reschke d294373f47 Sanitzing user input 2012-06-11 11:56:54 +02:00
Lukas Reschke f8337c9d72 Using POST instead of GET. 2012-06-11 11:56:11 +02:00
Lukas Reschke cc653a8a40 Sanitize user input 2012-06-11 11:54:45 +02:00
Lukas Reschke 8f09299e24 Sanitizing user input 2012-06-11 11:54:03 +02:00
Bart Visscher f2216dc9d2 Gallery: Fix database creation on update, also only from version less then 0.5 2012-06-11 11:20:51 +02:00
Thomas Tanghus a21fd725d6 Categories: Turned the debugging down a bit. 2012-06-11 03:07:20 +02:00
Thomas Tanghus c898a8a6c9 Contacts: 11th hour fix for invalid VCARD from CardDAV. 2012-06-10 20:54:52 +02:00
Thomas Tanghus cdac0eae46 Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-06-10 20:47:35 +02:00
Frank Karlitschek cfea28101a 4.0.2 2012-06-10 20:31:31 +02:00
Frank Karlitschek 6a44d02898 XSS-- 2012-06-10 19:54:04 +02:00
Bartek Przybylski 3970be3d7f fix variable name and undefined index notice 2012-06-10 17:25:19 +02:00
Bartek Przybylski 31d48d4ba4 adding missing file 2012-06-10 13:20:49 +02:00
Bartek Przybylski de6b683b50 fix first time image loading error 2012-06-10 13:19:22 +02:00
Bartek Przybylski 2dca0926b0 gallery: removing search provider for now 2012-06-10 13:19:17 +02:00
Bartek Przybylski f1250a3867 add function in filesystem to strip webroot 2012-06-10 13:19:10 +02:00
Bartek Przybylski e7d1af48fb handle encrypted images files in oc_image 2012-06-10 13:19:05 +02:00
Bartek Przybylski 7ee722e0da removing app access check, fix title for links in tiles 2012-06-10 13:18:55 +02:00
Bartek Przybylski e073cd756c tabs for spaces, fix array key name 2012-06-10 13:18:47 +02:00
Bartek Przybylski f6c07094c2 hide share button until sharing wont be fixed 2012-06-10 13:18:41 +02:00
Bartek Przybylski 1853a83874 adding navigation bar to gallery 2012-06-10 13:18:36 +02:00
Bartek Przybylski fe64e625ff remove old code 2012-06-10 13:18:30 +02:00
Bartek Przybylski f0f9269161 adding missing file 2012-06-10 13:18:17 +02:00
Bartek Przybylski 6682c60866 pictures: update script and removal some all stuff 2012-06-10 13:17:23 +02:00
Bartek Przybylski 9c1cc15c8d adding title when fancybox is displayed 2012-06-10 13:16:19 +02:00
Bartek Przybylski c932f93a40 replace spaces with tabs, use const and linkTo instead of static path 2012-06-10 13:16:12 +02:00
Bartek Przybylski 276aefba81 hack for file download 2012-06-10 13:16:06 +02:00
Bartek Przybylski 71b4cddd52 removing test image 2012-06-10 13:16:00 +02:00
Bartek Przybylski c67de113c6 aviod incorrect image size returning in gallery listing 2012-06-10 13:15:51 +02:00
Bartek Przybylski 63c02fd595 use fancybox to display image preview 2012-06-10 13:15:45 +02:00
Bartek Przybylski 7aff5eae6c navigate on galleries 2012-06-10 13:15:39 +02:00
Bartek Przybylski 2b80102909 new db scheme 2012-06-10 13:15:32 +02:00
Bartek Przybylski 9b2b5e0f6d git status 2012-06-10 13:15:23 +02:00
Thomas Tanghus 746994c2be Fixed merge conflict. 2012-06-10 12:59:36 +02:00
Frank Karlitschek be6848a549 let´s put the files_odfviewer application into the stable4 branch for convinience. We release it as part of ownCloud 4.0.x anyways. 2012-06-09 23:18:56 +02:00
Frank Karlitschek 689c8f5f09 paging not yet implemented. increasing pagesize to 100 as a temporary quickfix 2012-06-09 22:02:29 +02:00
Frank Karlitschek 061938cbb5 finally fix the updater. next is an automatic updater. but this is a bit more tricky. 2012-06-09 17:56:23 +02:00
Georg Ehrke 642e7ce110 fix another XSS 2012-06-09 16:44:48 +02:00
Georg Ehrke f955f6a685 fix XSS in Calendar 2012-06-09 16:36:01 +02:00
Georg Ehrke ff4b175622 increase height of event dialog 2012-06-09 15:40:27 +02:00
Georg Ehrke 009fbd89b4 fix creation of monthly repeated events 2012-06-09 15:40:27 +02:00
Thomas Tanghus 815eb2591a Changed preferences configvalue to clob. Fixes several bugs e.g. oc-825 and oc-743. 2012-06-09 15:37:57 +02:00
Robin Appelman 8f616ecf76 fix potential xss in multiselect 2012-06-09 15:08:05 +02:00
Thomas Tanghus 0f454215e7 Code cleanup. 2012-06-09 15:04:08 +02:00
Thomas Tanghus 83caaa6d3f Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-06-09 15:02:38 +02:00
Thomas Tanghus 59d16c5f9a Contacts: Use POST instead of GET. 2012-06-09 15:02:23 +02:00
Robin Appelman 6e1ca36207 fix infinite redirect during setup for windows hosts 2012-06-09 14:38:50 +02:00
Georg Ehrke cf1c3635ff fix loading of OC::$REQUESTEDAPP if WTFE the app parameter is given but empty aka /?app 2012-06-08 22:32:58 +02:00
Thomas Tanghus 23533a763a Don't fix bugs not present in this branch ;-) 2012-06-08 20:44:58 +02:00
Thomas Tanghus 5eb5d23ac1 Contacts: Closed stupid XSS hole. Thanks AnybodyElse ;-)
Conflicts:

	apps/contacts/ajax/uploadphoto.php
2012-06-08 20:43:42 +02:00
Bjoern Schiessle eb192ff4f3 code cleanup from previous commit 2012-06-08 16:31:12 +02:00
Bjoern Schiessle cf1430df45 Merge branch 'stable4' of gitorious.org:owncloud/owncloud into stable4 2012-06-08 16:27:07 +02:00
Bjoern Schiessle 0722ff6e32 fix for bug #872: Folders not holding any images are ignored, even if they hold subfolders with images 2012-06-08 16:24:31 +02:00
Arthur Schiwon 0dc371f579 typo in var 2012-06-08 14:58:07 +02:00
Frank Karlitschek a7a861b2c6 backport the password salting fix.
a salt is generated during setup and used to salt the user password hases in the database backend
2012-06-08 12:42:35 +02:00
Arthur Schiwon 8c7fa15aaf Sharing, fix: connect to hooks from the correct classes 2012-06-08 11:58:00 +02:00
Bjoern Schiessle 4a15cf28a9 fixed broken lines in user table
Conflicts:

	settings/css/settings.css
2012-06-08 11:44:04 +02:00
Arthur Schiwon 0f68276921 LDAP: cache the results, reduce LDAP searches 2012-06-07 18:56:06 +02:00
Arthur Schiwon 4beabe23e7 ldap: enable the destructor 2012-06-07 18:15:11 +02:00
Michael Gapczynski d28e0f4d5b Remove old internal mail call for password reset, fixes bug oc-934
Conflicts:
	core/lostpassword/index.php
2012-06-07 09:36:23 -04:00
Arthur Schiwon f3f3c791ba ldap: correct query condition and determining of success 2012-06-07 13:40:26 +02:00
Arthur Schiwon 691f00eb39 ldap: check index carefully, can be 0 2012-06-07 13:40:16 +02:00
Thomas Tanghus 9266f4da99 Migration: Fixed wrong download URL: http://forum.owncloud.org/viewtopic.php?f=4&t=2511 2012-06-07 13:10:19 +02:00
Thomas Tanghus de6d550cce Calendar: Added more explicit sync links and fixed indentation. 2012-06-07 12:22:25 +02:00
Thomas Tanghus 3d48bf18d3 Contacts: Import upload button was obscured on Android browser. 2012-06-07 10:58:15 +02:00
Bjoern Schiessle bb07c20bf4 fixed var name, $filename should be $foldername 2012-06-06 18:11:23 +02:00
Arthur Schiwon 48ccfa42d3 LDPA: don't drop legal whitespaces when sanitizing DN. Fixes oc-914 2012-06-06 12:31:22 +02:00
Thomas Tanghus 517bd28940 Corrected typos. 2012-06-06 11:49:45 +02:00
Michael Gapczynski 826a439c15 Supress any warnings if log file does not exist 2012-06-05 18:42:16 -04:00
Robin Appelman f1b10fcc93 update translations 2012-06-06 00:29:44 +02:00
Robin Appelman 063c9accb6 prevent creating files with a / the name 2012-06-06 00:04:02 +02:00
Bjoern Schiessle 3a5076d646 show pictures in folder with special characters, e.g. '+' 2012-06-05 17:58:23 +02:00
Frank Karlitschek 4bc7387d7c fi login for hosts running n port 80 2012-06-05 15:28:00 +02:00
Arthur Schiwon 769d94ab26 linkTo instead of hard links in Files and Files_Archive. Hope that makes sense. 2012-06-05 14:14:26 +02:00
Frank Karlitschek 5c9325bbe0 CLI is no availabe in stable4 2012-06-05 14:10:50 +02:00
Frank Karlitschek d3bb01b598 more reliable host detection for reverse proxy scenarios 2012-06-05 12:53:48 +02:00
Bjoern Schiessle 44260a552c xss vulnerability fixed 2012-06-05 10:49:36 +02:00
Bjoern Schiessle e817504569 xss vulnerability fixed 2012-06-05 10:49:26 +02:00
Arthur Schiwon ae2bcf968d Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-06-04 21:33:02 +02:00
Arthur Schiwon 454f81fb15 load authentication apps before checking wether user exists. fixes oc-910 2012-06-04 21:31:35 +02:00
Arthur Schiwon 773f3cf973 make it possible to load apps seperately. needed to fix oc-910 without breaking oc-863 2012-06-04 21:30:58 +02:00
Tom Needham daa4d2cd84 Validate email on save 2012-06-04 18:44:55 +00:00
Robin Appelman b117a1e3ec update file paths in filecache when the parent is renamed 2012-06-04 18:12:25 +02:00
Bjoern Schiessle 4bc88ef59d prevent xss attacks by manipulating image file names 2012-06-04 18:11:17 +02:00
Bjoern Schiessle d5566d0267 prevent xss attacks by manipulating text file names 2012-06-04 18:11:08 +02:00
Bjoern Schiessle ca64a4080f don't allow user to delete Shared dir via webdav and sync client (bug #774) 2012-06-04 18:08:51 +02:00
Bjoern Schiessle 7fbe306990 no move (rename) operation for "Shared" directory 2012-06-04 14:00:35 +02:00
Bjoern Schiessle c8f670dfab Don't allow user to delete, rename and re-share the "Shared" directory 2012-06-04 14:00:35 +02:00
Arthur Schiwon 8983c6dd6b commited a bit too much before 2012-06-04 13:27:55 +02:00
Thomas Tanghus d657263403 Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-06-04 13:13:53 +02:00
Thomas Tanghus 74ac2ac63a Contacts: When editing photo on a newly created contact the name in the contact list was cleared. 2012-06-04 13:13:43 +02:00
Arthur Schiwon 8554525ebe Merge branch 'stable4' of git://gitorious.org/owncloud/owncloud into stable4 2012-06-04 13:04:37 +02:00
Arthur Schiwon b48228ae3d LDAP: link to documentation on settings page 2012-06-04 13:04:18 +02:00
Frank Karlitschek 64fe06710a add deprecated warning 2012-06-04 12:49:33 +02:00
Frank Karlitschek 300f6894e0 4.0.1 2012-06-03 21:06:07 +02:00
Michael Gapczynski 0145c65bf3 Verify user exists when checking if logged in, fix for bug oc-863 2012-06-02 20:09:44 -04:00
Michael Gapczynski 4db5481ad5 Improve efficiency of retrieving log file entries 2012-06-01 14:42:14 -04:00
Frank Karlitschek 52b3305892 add a pdo check 2012-06-01 20:01:23 +02:00
Frank Karlitschek 3ef944521e add check if apps folder is writable. needed to install 3rd party apps 2012-06-01 19:52:45 +02:00
Frank Karlitschek 60b8e172d5 prevent a division by zero problem 2012-06-01 16:49:14 +02:00
Frank Karlitschek 2c97f4788b Merge branch 'stable4' of gitorious.org:owncloud/owncloud into stable4 2012-06-01 16:34:52 +02:00
Frank Karlitschek aa9824d35b fix proper error reporting 2012-06-01 16:33:24 +02:00
Arthur Schiwon 34464b1f8b LDAP group backend: Set configured true when it is... fixe oc-887 2012-06-01 16:02:04 +02:00
Frank Karlitschek aa88ec81c7 sort users and groups. fixes oc-779 2012-06-01 14:21:24 +02:00
Arthur Schiwon 86279bc192 LDAP group backend: If a group filter is not configured, do not do anything. Fixes oc-867 2012-06-01 14:05:08 +02:00
Frank Karlitschek 0468f53f73 switch magic quotes off.
they are evil and deprecated
2012-06-01 12:42:50 +02:00
Frank Karlitschek 1b34bda76b fix oc-874 2012-06-01 12:16:04 +02:00
Frank Karlitschek e44f9ab46e correctly detect https 2012-06-01 11:47:14 +02:00
Frank Karlitschek 8ed13e627e don´t do warnings.
Not sure if this start_session call is really needed here.
2012-06-01 11:08:40 +02:00
Frank Karlitschek 0d2d613f59 added a serverProtocol function that correctly returns the used protocol even if the ssl connection is terminated at a reverse_proxy or at a load balancer 2012-06-01 11:06:49 +02:00
Frank Karlitschek 670022cc8a fix the breadcrumb 2012-05-31 21:43:07 +02:00
Frank Karlitschek 3a6341c880 fix oc-780 2012-05-31 21:27:46 +02:00
Frank Karlitschek c3ccdbaa79 more fixes 2012-05-31 21:14:46 +02:00
Frank Karlitschek d56966f14f someone broke this completely. Hope it works again. Please check your apache error log and turn php notices on if you work on ajax call 2012-05-31 20:45:39 +02:00
Frank Karlitschek 739c5488a5 Merge branch 'stable4' of gitorious.org:owncloud/owncloud into stable4 2012-05-31 20:17:30 +02:00
Frank Karlitschek 5d425a9f79 use our own serverHost call so that ownCloud works with reverse proxy servers 2012-05-31 20:16:44 +02:00
Georg Ehrke 0059535140 fix potential XSS 2012-05-31 20:03:15 +02:00
Arthur Schiwon 7ec3e37199 LDAP: make queries compatible also with PostgreSQL 2012-05-31 13:06:27 +02:00
Robin Appelman f4577bf00c fix for pgsql database migration 2012-05-31 00:01:03 +02:00
Arthur Schiwon 449b9b92f0 LDAP: fix wrong value for input type 2012-05-30 22:37:00 +02:00
Arthur Schiwon 93849916bb LDAP: support for 'member' as group-member-association 2012-05-30 22:36:48 +02:00
Frank Karlitschek 4dc7ed139b don´t hardcode /tmp 2012-05-30 14:18:47 +02:00
Frank Karlitschek c1f7d320e8 mark as 4.0.1 pre 2012-05-29 22:18:07 +02:00
Michael Gapczynski 1d983c28aa Restrict requested app to apps directory 2012-05-29 12:35:52 -04:00
Thomas Tanghus 6515c5c1e7 Contacts: NOTE wasn't saved properly. 2012-05-29 16:45:52 +02:00
Georg Ehrke 1c1ed52867 fix status
of timezone detection
2012-05-29 13:14:36 +02:00
Brice Maron d1f0261b5d Correct typo in last_insert_id for calendar and pg fix #oc-731 2012-05-28 20:57:52 +00:00
Brice Maron 2f8412defc Set table prefix if not set in postgresql install 2012-05-28 20:56:21 +00:00
Thomas Tanghus cf113409ad Contacts: Fix XSS. 2012-05-28 14:41:48 +02:00
Thomas Tanghus 53da328aa1 Contacts: Double check XSS. 2012-05-28 12:56:56 +02:00
Thomas Tanghus 8bd6d862b8 Please don't tell me I did that :-P 2012-05-28 12:52:18 +02:00
Georg Ehrke 5b7ef90d3a add urlencode for caldav link 2012-05-28 10:50:10 +02:00
Robin Appelman 3db5fb891c allow longer paths for gallery 2012-05-26 21:54:49 +02:00
Frank Karlitschek 54c421f384 check during ownCloud upgrade if all the installed apps are compatible with the new ownCloud version. Disable them if not 2012-05-26 20:40:12 +02:00
Georg Ehrke 1645f77aad fix share for users with a point within their name 2012-05-26 15:41:32 +02:00
Brice Maron 2774ff1ad8 Add HEAD request management for files ajax/download.php 2012-05-25 11:19:38 +02:00
Michael Gapczynski d8ca4f78cf Fix private link sharing via email, fix for bug oc-750 2012-05-23 19:36:39 -04:00
Frank Karlitschek f97f1b4266 use UTC instead of Berlin as default 2012-05-24 00:47:03 +02:00
Brice Maron 20e9903396 Correct small style problem with task app fix #oc-689 2012-05-23 22:36:36 +00:00
Frank Karlitschek 647888eea2 add a ldap encryption warning 2012-05-22 12:35:28 +02:00
Thomas Tanghus 54a3717005 Contacts: Backport XSS fix. 2012-05-21 21:49:35 +02:00
Robin Appelman 3775c0d8b2 dont throw errors when apps dont have types configured 2012-05-20 18:52:44 +02:00
Robin Appelman 3b4c47c52e files app is always enabled 2012-05-20 18:52:27 +02:00
Frank Karlitschek d7c09d8bb5 add a warning 2012-05-20 10:59:37 +02:00
Frank Karlitschek 8a0dc774bc 4 2012-05-19 18:20:23 +02:00
Michael Gapczynski 5a48ade933 Make sure sharing and versions dropdowns come down in the same location for all files 2012-05-19 11:24:23 -04:00
Georg Ehrke d4072c82dd some fixes for contacts, gallery and openid 2012-05-19 15:22:21 +02:00
Georg Ehrke 07fa8da278 fix for calendar 2012-05-19 15:05:58 +02:00
Frank Karlitschek 7e49a33d64 getStorage belongs to files not to apps. 2012-05-19 10:44:08 +02:00
Frank Karlitschek 08f7d4c552 document the public classes a bit more 2012-05-19 10:36:57 +02:00
Michael Gapczynski 35bd601215 Fix check for when to store a new version of a file 2012-05-18 22:27:43 -04:00
Michael Gapczynski f750da1802 Fix revert link on history page of file versions 2012-05-18 22:07:48 -04:00
Michael Gapczynski 89f5701d1a Fix versioning of shared files 2012-05-18 22:07:48 -04:00
Robin Appelman a2cc772aa5 dont run update scripts for apps that arent enabled 2012-05-19 02:00:46 +02:00
Robin Appelman b096fd9ed8 log upgrades 2012-05-19 01:55:20 +02:00
Robin Appelman df64b9b0e9 strict standards fixes for sqlite3 2012-05-19 01:39:41 +02:00
Michael Gapczynski 90cbc32c77 Fix redirect after login, prevent open redirects 2012-05-18 16:56:48 -04:00
Frank Karlitschek e03b5ff665 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-18 21:16:03 +02:00
Frank Karlitschek fdbe0c9734 don´t claim that already downloaded 3rd party apps are internal apps 2012-05-18 21:14:07 +02:00
Frank Karlitschek 0df376d472 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-18 18:25:31 +02:00
Frank Karlitschek 16224e5e8b "fopen(" interferes with our own classes.
remove it for now and let´s fix this later
2012-05-18 18:22:37 +02:00
Arthur Schiwon c1bb8139a0 LDAP: we're 0.2 now 2012-05-18 18:00:30 +02:00
Arthur Schiwon bae954a797 LDAP: only check once for name conflicts on update. Set a value on install as well 2012-05-18 18:00:30 +02:00
Thomas Tanghus 7922338050 Contacts: Added MS opacity mumbo-jumbo that I can't test myself to file form fields. 2012-05-18 17:39:19 +02:00
Arthur Schiwon e606213fa0 make upload work with IE again 2012-05-18 17:07:00 +02:00
Arthur Schiwon 0c7efc234b LDAP: update meta info 2012-05-18 17:07:00 +02:00
Michael Gapczynski ea7456a06a Forgot to actually call remove on the history dropdown 2012-05-18 10:53:58 -04:00
Michael Gapczynski fcb4d2aaee Remove the history dropdown before creating a new one 2012-05-18 10:42:49 -04:00
Michael Gapczynski 122d1efecf Don't show the select form in the history dropdown if a file has no other versions 2012-05-18 10:39:43 -04:00
Michiel de Jong fc536c3491 add htmlentities() call into login form 2012-05-18 16:12:49 +02:00
Frank Karlitschek 9e73524168 mark the apps as part of the shipped package and increase the requirement to ownCloud 4 2012-05-18 16:06:57 +02:00
Frank Karlitschek 2d3c709163 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-18 15:56:15 +02:00
Frank Karlitschek db77dc91bc only try to install apps that are compatible with oC4 2012-05-18 15:54:36 +02:00
Frank Karlitschek 2e9115efe0 increase to RC2 2012-05-18 15:54:17 +02:00
Michiel de Jong a6ff909911 this code looks wrong to me but i'm putting it back while we find out what the right code should look like 2012-05-18 15:39:28 +02:00
Michiel de Jong 1a874b4c56 make redirect safe by restricting it to current host 2012-05-18 15:32:41 +02:00
Michiel de Jong 9b5e8a2c63 fix redirect to desired page after login 2012-05-18 15:11:01 +02:00
Arthur Schiwon ea33b4aaa1 LDAP: don't make us of global constants (completing, was removed with latest additions to update.php) 2012-05-18 12:55:38 +02:00
Arthur Schiwon 253f101b39 LDAP: check wether applying naming rule would end up in conflicts on update, if so don't do it 2012-05-18 12:55:37 +02:00
Georg Ehrke 73a72054a3 fix call of all versions page 2012-05-18 12:00:35 +02:00
Michael Gapczynski b7aee58ef9 Hooks aren't working across different users' filesystems, so update the mtime of the Shared folder for all shared item events 2012-05-17 21:26:55 -04:00
Robin Appelman 48505c5626 improve tar archive backend 2012-05-18 01:54:59 +02:00
Michael Gapczynski 5b42325b01 History dropdown clean-up 2012-05-17 18:57:52 -04:00
Tom Needham 74d49920f2 Close history dropdown on success. Avoids confusion. 2012-05-17 21:22:48 +00:00
Tom Needham 0aac70aaf1 Revert google webfont removal. Sadly this causes havoc with the editor! 2012-05-17 20:23:43 +00:00
Michael Gapczynski fbe0d0d4fd Fix private links inside folders 2012-05-17 16:12:33 -04:00
Georg Ehrke b35c6b57a9 allow loading of css files even if a user isn't logged in 2012-05-17 21:56:33 +02:00
Georg Ehrke 6146b6a131 fix paths to images and set height for calendar management dialog 2012-05-17 21:51:38 +02:00
Michael Gapczynski 57d41bb1f8 Merge branch 'merge-requests/115' 2012-05-17 15:39:39 -04:00
Michael Gapczynski cbfbbe672c Merge commit 'refs/merge-requests/115' of git://gitorious.org/owncloud/owncloud into merge-requests/115
Conflicts:
	apps/files/templates/index.php
2012-05-17 15:38:28 -04:00
Michiel de Jong 2cc0515161 no use for double quotes here 2012-05-17 21:03:06 +02:00
Michiel de Jong f998ed331a removing dead code 2012-05-17 21:01:42 +02:00
Michiel de Jong 3e454d3459 oops! was hardcoding my test domain inadvertently 2012-05-17 21:00:11 +02:00
Arthur Schiwon 7a7c301d7d LDAP: follow user- and groupname char limitations for LDAP display names
WARNING: may affect existing installations if display names included unallowed characters. Allowed are only a-zA-Z0-9._-@ This fix is however needed, because names with unallowed characters may cause conflicts
2012-05-17 17:17:40 +02:00
Arthur Schiwon 57cf0ae3d1 LDAP: remove unnecessary debug output 2012-05-17 17:17:40 +02:00
Arthur Schiwon 38c56388c1 LDAP: Fix case sensitivity issues with display name attribute 2012-05-17 17:17:40 +02:00
Thomas Tanghus b9cd0ecc8a Contacts: wrong name was set on initial load. 2012-05-17 16:46:39 +02:00
Michael Gapczynski cf181e88bb Try to setup a user's filesystem if the user hasn't logged in before and is shared a file 2012-05-17 09:24:54 -04:00
Thomas Tanghus 2f1e601809 Contacts: Disable in-app import if encryption is enabled, and make an attempt of supporting IE uploads too. Can't test it though... 2012-05-17 14:31:04 +02:00
Robin Appelman bfdb374a2c allow reverting file from history dropdown 2012-05-17 02:16:33 +02:00
Robin Appelman 4ccfd27fa2 fix versioning for movable apps 2012-05-17 01:53:23 +02:00
Robin Appelman c1ba4deb72 when scanning a folder that is a mountpoint, use the root of the mount for checking if a folder is writable instead of the folder 2012-05-17 01:47:58 +02:00
Robin Appelman 58adeaa80a only check our own input fields when determining to show the login button
fixes a problem with browser plugins adding hidden inputs
2012-05-17 01:17:44 +02:00
Robin Appelman aac9629e88 add support for custom ports for mysql/pgsql by adding :portnumber to the database host 2012-05-17 01:06:22 +02:00
Robin Appelman 5fe7200a7f update documentation of oc_user::checkpassword 2012-05-17 00:57:43 +02:00
Robin Appelman 2c99924f7d make sure the group exists in the backend before adding a user to it 2012-05-17 00:47:43 +02:00
Robin Appelman ac8bfc218e update translations 2012-05-17 00:36:21 +02:00
Thomas Tanghus d216678481 Contacts: removed check for empty FN field because Chrome/Chromium barfed. 2012-05-16 23:45:43 +02:00
Georg Ehrke 9e83c3f823 add caldav and carddav files in their old place for backward compatibility - add rewriterule for caldav and carddav 2012-05-16 21:05:15 +02:00
Bart Visscher b39f01fce6 Comment spelling fix 2012-05-16 18:52:40 +02:00
Bart Visscher 5d72681d10 Better place to check caching headers 2012-05-16 18:52:40 +02:00
Arthur Schiwon ab18a0bfe8 ldap: unique index names for the database, fixes non-creating of indexes for the second table and potential issues in the app 2012-05-16 18:11:42 +02:00
Michiel de Jong eceed497b1 fix paths in apps/remoteStorage/ajax/revokeToken.php 2012-05-16 18:08:50 +02:00
Arthur Schiwon fbc2892083 try to remove deprecated files from /files on update 2012-05-16 15:59:36 +02:00
Michael Gapczynski c04074692e Fix incorrect toaddress being passed for emailing private links 2012-05-15 19:05:26 -04:00
Thomas Tanghus 0f66870470 Contacts: Corrected i18n call. 2012-05-15 18:49:38 +02:00
Michael Gapczynski b619821f4a Create a new OC_Share object instead of manually inserting rows when adding a user to a group share, prevents a couple of potential bugs 2012-05-15 12:03:20 -04:00
Michael Gapczynski 6673375eeb No multiple file sharing in this next release, sharing UI isn't ready for it :( 2012-05-15 11:45:59 -04:00
Michael Gapczynski 7b92c27777 Check if a file is encrypted before sharing (encrypted files cannot be shared) 2012-05-15 11:29:02 -04:00
Arthur Schiwon 01b366df80 avoid corrupt ZIP files on lighttpd, should fix oc-467 2012-05-15 11:57:24 +02:00
Arthur Schiwon 35effbcd3f LDAP: convert all DNs to lowercase so to make comparisons and everything work 2012-05-15 11:12:29 +02:00
Michael Gapczynski 568b6a7f56 Make only writable files draggable 2012-05-14 20:41:06 -04:00
Michael Gapczynski a3b06e9658 Check if a private link points to a folder or file and change text accordingly 2012-05-14 20:21:31 -04:00
Michael Gapczynski cda9dcc7aa Fix private link emailing and clean up file name displayed in email 2012-05-14 20:21:31 -04:00
Michael Gapczynski 5cf42b88af Replace all %2F with a / in private link 2012-05-14 20:21:31 -04:00
Thomas Mueller 583dce5276 removing executable bit - again 2012-05-15 00:52:00 +02:00
Brice Maron 97e8ff6801 Switch enable button only when app is really installed or uninstalled 2012-05-14 21:52:40 +00:00
Michael Gapczynski d4271ed9df Use original source when resharing a file, fixes bug oc-210 2012-05-14 17:31:03 -04:00
Thomas Mueller 954d4e5200 No need to keep the 'source files' in here, because the latest 'git master' release can be pulled
from http://mozilla.github.com/pdf.js/build/pdf.js

README added to document the fact stated above
update.sh added for easy update of pdfjs

CAUTION:
Don't update before OC4! API has been changed and we need to adopt files_pdfviewer
2012-05-14 23:21:29 +02:00
Robin Appelman 8b1bc322ff remove simpletests internet test cases due to xss issues 2012-05-14 23:12:16 +02:00
Robin Appelman 6779f28af4 cache app types during install or update 2012-05-14 22:49:31 +02:00
Michael Gapczynski e03c5f39a8 Call is_writable explicitly on folders for readonly check 2012-05-14 16:31:00 -04:00
Thomas Tanghus e74f4b406f Remove logging. 2012-05-14 17:50:24 +02:00
Thomas Tanghus 9b3d8660eb Contacts: Had forgotten to call local function. 2012-05-14 17:49:33 +02:00
Thomas Tanghus de850dfa52 Contacts: Fix layout in contacts list that I had broken in an earlier fix :-P 2012-05-14 17:49:33 +02:00
Michiel de Jong 4c6d11e223 move auth.css and remoteStorage-big.png to assets folders From where they can be included 2012-05-14 17:05:35 +02:00
Georg Ehrke 18c8896b3c better user permission check for files in ajax/calendar/ 2012-05-14 15:59:06 +02:00
Georg Ehrke 84827ff992 some fixes for calendar's export.php 2012-05-14 15:52:24 +02:00
Georg Ehrke 3f86fd5193 remove redirects in htaccess to improve compatibility with desktop client 2012-05-14 15:42:16 +02:00
Georg Ehrke 9c8eb104b6 check user permissions in calendar's changepermission.php 2012-05-14 15:42:16 +02:00
Georg Ehrke 55eb318265 check user permissions in calendar's unshare.php 2012-05-14 15:42:16 +02:00
Thomas Mueller bda2dbec1f Prevent Clickjacking by adding additional headers:
header('X-Frame-Options: Sameorigin');
                header('X-XSS-Protection: 1; mode=block');
                header('X-Content-Type-Options: nosniff');

Thanks to Lukas Reschke for reporting this issue (and many more).
2012-05-14 15:34:28 +02:00
Arthur Schiwon 0c8740c1d5 LDAP: and don't forget the else part 2012-05-14 13:13:08 +02:00
Arthur Schiwon 82cfb3e0f5 LDAP: don't store agent password in plain text 2012-05-14 12:58:58 +02:00
Arthur Schiwon 2e34673989 LDAP: no whitespaces after the , in the DNs, resolves conflicts with some servers 2012-05-14 12:25:33 +02:00
Thomas Tanghus 1f2b37c08b Contacts: Photo upload handlers wern't being loaded for new contacts.
Name conflict with two FileUploads :-P
2012-05-14 11:08:00 +02:00
Klaas Freitag 3514ec5947 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-14 10:52:25 +02:00
Klaas Freitag 1fc74ea174 Add ctmp extension to blacklist to make sync test files not versioned. 2012-05-14 10:51:41 +02:00
Thomas Tanghus 40f91d9f7c Contacts: The proper DOM wasn't loaded after import and thumbnails weren't being updated. 2012-05-14 10:13:45 +02:00
Michael Gapczynski 6d37f9b951 Remove scroll to bookmarks_menu, no longer existent and the bookmark controls are always visible at the top anyways 2012-05-13 21:10:27 -04:00
Robin Appelman e7c106d91e selective app loading for remote/public 2012-05-14 00:28:28 +02:00
Robin Appelman 0fb90fa875 set public handeler in info,xml for sharing 2012-05-14 00:28:27 +02:00
Thomas Tanghus 4e1e978b89 Contacts: Forgot one file for the import fix. 2012-05-13 23:27:14 +02:00
Thomas Tanghus 9295f49553 Contacts: Add error checking and reporting to import from files app. 2012-05-13 23:27:14 +02:00
Michael Gapczynski 1629c77eb5 Validate bookmark inputs, fixes bug oc-636 2012-05-13 16:58:47 -04:00
Tom Needham 90518e8d2a Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-13 20:50:19 +00:00
Tom Needham b80b8656eb Third time lucky fixing google font include 2012-05-13 20:49:54 +00:00
Michael Gapczynski 8a42d159f7 Variable not declared in media app, fixes bug oc-633. Thanks to die3lustigen2. 2012-05-13 16:45:03 -04:00
Tom Needham ddb8d1460b Revert "Remove google webfont include"
This reverts commit 30d31fecd9.
2012-05-13 20:43:20 +00:00
Tom Needham 2e2eccc879 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-13 20:19:25 +00:00
Tom Needham 21dfe9dc5e Fixed keyboard shortcut for saving files. Thanks adlr in #ace! 2012-05-13 20:19:20 +00:00
Michael Gapczynski 198b73ddd1 Sanitize search queries, thanks to Lukas Reschke 2012-05-13 15:57:46 -04:00
Georg Ehrke 3ce6eca40a fix fail in previous commit 2012-05-13 21:46:34 +02:00
Georg Ehrke 3327aabe4d fix remote.php for servers which doesn't support PATH_INFO 2012-05-13 21:46:34 +02:00
Tom Needham 82d3fe2e1c Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-13 19:42:00 +00:00
Tom Needham 30d31fecd9 Remove google webfont include 2012-05-13 19:41:41 +00:00
Tom Needham 78ecfc89a7 Fix breadcrumb path 2012-05-13 19:33:42 +00:00
Michael Gapczynski a332c39472 Check if path_info is empty as well, fixes bug oc-632. Thanks to die3lustigen2. 2012-05-13 15:26:30 -04:00
Robin Appelman 6b6477a90a fix getting the db scheme from existing database 2012-05-13 21:22:08 +02:00
Robin Appelman 8d475debe0 additional logging when db upgrade fails 2012-05-13 21:21:39 +02:00
Robin Appelman 68fd5a5d58 some mdb2 pgsql fixes 2012-05-13 20:56:25 +02:00
Robin Appelman 1a2ab2ef68 prevent user creation with empty password 2012-05-13 20:53:56 +02:00
Robin Appelman 77e2387d94 more MDB2 updates 2012-05-13 20:53:55 +02:00
Georg Ehrke ddf0903ace add post user delete hook for calendar sharing 2012-05-13 20:03:52 +02:00
Robin Appelman ee0294bbb1 update translations 2012-05-13 20:00:34 +02:00
Thomas Tanghus 3926e2d4f3 VCategories: Made a small check for categories that seems to resolv the problems in Calender. Also reverts the changes from 9e6221b229. 2012-05-13 15:07:07 +02:00
Georg Ehrke 5ac10a9c0e hide share tab for new events, because you can't share an event that haven't got an id yet 2012-05-13 12:28:28 +02:00
Georg Ehrke f45411f79d fix another php notice 2012-05-13 12:25:26 +02:00
Georg Ehrke 85cc34fd05 fix another php notice 2012-05-13 12:14:08 +02:00
Georg Ehrke f6dc158d51 fix php notice and displaying of events 2012-05-13 12:02:36 +02:00
Thomas Tanghus 9e6221b229 VCategories: Suppress error messages stemming from import from file app. 2012-05-13 09:16:53 +02:00
Thomas Tanghus 56bd3f1220 Revert "Edited combobox to adhere to coding standards and added a dblclick handler."
This reverts commit 19b55d3fce.
2012-05-13 06:22:15 +02:00
Thomas Tanghus 996020d82b Revert "Contacts: Change placeholder text to avoid confusion. No, JanC, I won't change it back again ;-)"
This reverts commit a36a8faad4.

Moved it to unstable branch for now.
2012-05-13 06:22:15 +02:00
Frank Karlitschek af77ce9a9b This is RC now 2012-05-13 05:11:10 +02:00
Thomas Mueller 546ae30421 non-minified version added 2012-05-12 20:56:29 +02:00
Thomas Mueller 51cb1c9ffa fixing file headers with copyright 2012-05-12 20:46:07 +02:00
Thomas Tanghus 19b55d3fce Edited combobox to adhere to coding standards and added a dblclick handler. 2012-05-12 13:43:34 +02:00
Thomas Tanghus a36a8faad4 Contacts: Change placeholder text to avoid confusion. No, JanC, I won't change it back again ;-) 2012-05-12 13:43:33 +02:00
Bartek Przybylski ab9927d5fc oc-627, calling base function instead of loading too much useless functions 2012-05-12 13:25:04 +02:00
Michael Gapczynski b4e7c05959 Encoded slashes (%2F) don't look pretty in our private link urls 2012-05-11 20:58:21 -04:00
Michael Gapczynski faebee5f25 Turn async off when fetching users to make sure the users get removed from the select form 2012-05-11 20:39:48 -04:00
Robin Appelman 9eb91a111d update to jquery 1.7.2 2012-05-12 00:37:19 +02:00
Robin Appelman d07512c82d fix gallery previous not showing 2012-05-12 00:37:19 +02:00
Bart Visscher 20499e336b Remove duplicate line 2012-05-11 22:13:05 +02:00
Brice Maron 5b7c69f978 Change sqlite escaping of identifier to double quote. Fixing some issues 2012-05-11 19:45:53 +00:00
Bart Visscher 919681f3e6 Make processed css files cachable 2012-05-11 21:33:02 +02:00
Robin Appelman 847832ae77 also set remote/public paths on installing apps 2012-05-11 20:58:23 +02:00
Robin Appelman d12021e3c4 fix sqlite3 driver against updated MDB2 2012-05-11 20:56:02 +02:00
Robin Appelman cf3940425f don't do the initial scanning of the users home folder trough the update system 2012-05-11 20:49:19 +02:00
Robin Appelman 0622fa79ba add temporary filestorage backend for testing purposed 2012-05-11 20:33:56 +02:00
Robin Appelman b40f9670ae allow clearing hooks and fileproxies 2012-05-11 20:33:56 +02:00
Robin Appelman 736739bbbd load remote and public paths from info.xml during upgrade instead of setting them every time 2012-05-11 20:33:56 +02:00
Robin Appelman d2bd78c41a update MDB2 and XML_Parser 2012-05-11 20:33:56 +02:00
Arthur Schiwon 3c2af95108 LDAP: offer only ownCloud-enabled users for sharing 2012-05-11 19:21:13 +02:00
Thomas Tanghus 8e5240d579 Contacts: Make the structured name dialog modal to avoid confusion. 2012-05-11 18:21:55 +02:00
Thomas Tanghus 646a4bd635 Contacts: Clone event handlers as well. 2012-05-11 18:21:55 +02:00
Thomas Tanghus 08e0b6cf5e Contacts: Also strip parameters. 2012-05-11 18:21:55 +02:00
Sam Tuke d98d72aa99 improved url generation - made use of OC.linkTo() for linking to versions history page 2012-05-11 17:13:58 +01:00
Michiel de Jong c99d7dd94f the ',last' breaks all other rewrite rules and is also not there in the committed .htaccess, so removing it. anybody know why it was there? 2012-05-11 17:59:21 +02:00
Robin Appelman 9c2f105164 update PEAR to 1.9.4 2012-05-11 17:57:55 +02:00
Michiel de Jong 347ce2aafa match setup script to .htaccess from repo 2012-05-11 17:30:27 +02:00
Michiel de Jong f0362dbf58 register public.php?service=host-meta 2012-05-11 17:25:32 +02:00
Michiel de Jong 4462b26160 oops, typo in lib/setup.php 2012-05-11 17:09:10 +02:00
Michiel de Jong 2dff357a4e add new htaccess things into setup script too 2012-05-11 17:06:04 +02:00
Michiel de Jong 9469c9947f fix warning 'unknown var appsDir' 2012-05-11 16:59:44 +02:00
Georg Ehrke 232788396d some changes for login 2012-05-11 16:43:45 +02:00
Arthur Schiwon 7efa7171e3 LDAP: wrong assumptions for case (in)sensitivity, implement far better solution 2012-05-11 15:42:57 +02:00
Michiel de Jong 3fd2e0d2ce correct host-meta mime type 2012-05-11 15:27:11 +02:00
Michiel de Jong 4c02a82f6c move lrdd to jrd 2012-05-11 15:26:45 +02:00
Michiel de Jong b133f22d7f move host-meta to JRD because I can't work out how to deal with ampersands in XRD 2012-05-11 15:21:45 +02:00
Michiel de Jong a95c1b8082 fix auth dialog includes 2012-05-11 15:21:45 +02:00
Jan-Christoph Borchardt 00e1d174a9 fixed settings text not being clickable 2012-05-11 12:24:49 +00:00
Sam Tuke e98305fa65 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-11 13:18:51 +01:00
Sam Tuke 03fad97764 fixed some include path issues
imroved wording of history page revert instructions
cleaned up js call to ajax getVersions.php
2012-05-11 13:17:37 +01:00
Georg Ehrke 8f2217ca2e make default app choosable 2012-05-11 13:56:52 +02:00
Michiel de Jong 61d535984d clean up auth dialog 2012-05-11 11:05:44 +02:00
Michiel de Jong 2e309aae97 announce OAuth2 implicit grant end-point the new way 2012-05-11 10:52:37 +02:00
Michiel de Jong 02cee2c562 trying to fix /.well-known/host-meta 2012-05-11 10:47:42 +02:00
Michiel de Jong 0c7f0aa3fa attempt to align the webfinger app with new public.php routing 2012-05-11 10:26:30 +02:00
Michael Gapczynski 59a2616105 Fix music file action i.e. click to play, make OC.filePath act like OC_Helper::linkTo() for index.php links 2012-05-10 23:04:27 -04:00
Michael Gapczynski 20d9a8b6a1 Fix accidental creation of duplicate files because of extra / in search results 2012-05-10 22:04:05 -04:00
Michael Gapczynski a3f250bfe6 Fix text files for search results 2012-05-10 21:44:04 -04:00
Michael Gapczynski 0c86f8a61e Fix image previews for search results 2012-05-10 21:36:17 -04:00
Michael Gapczynski daff3aa667 Prevent overwriting of private link status 2012-05-10 21:06:45 -04:00
Michael Gapczynski 60103d9b94 Only mount shared storage after a user has logged in, fixes shared folder not appearing for some WebDAV clients and sync client 2012-05-10 19:56:41 -04:00
Thomas Tanghus e5840e1fe2 Contacts: Hack to add structured name from formatted name. 2012-05-11 01:14:11 +02:00
Thomas Tanghus aa51639271 Contacts: Fix check for version. 2012-05-11 01:14:11 +02:00
Thomas Tanghus 78c11700f9 Added some margin. 2012-05-11 01:14:11 +02:00
Tom Needham 709b0a1ddc Check if app is enabled before exporting its data 2012-05-10 23:06:53 +00:00
Brice Maron 4094f6f8e0 Correct undef variable mistake from prev commit 2012-05-10 19:51:03 +00:00
Jan-Christoph Borchardt d1e5a56bc6 fixing upload icon color 2012-05-10 21:40:22 +02:00
Brice Maron ffe5ef2268 Correct calendar loading when calendar are from hooks. fix oc-619 2012-05-10 19:36:30 +00:00
Thomas Tanghus 7bc6e86969 Contacts: Fix some regressions from last commit. 2012-05-10 20:44:12 +02:00
Tom Needham bf93b9e98a Make select_all checkbox more central 2012-05-10 18:08:46 +00:00
Jan-Christoph Borchardt 20f8137ca0 upload button goes MJ 2012-05-10 20:05:30 +02:00
Georg Ehrke a69c53caef remove empty line in .htaccess 2012-05-10 18:14:59 +02:00
Michael Gapczynski de95bf62a2 Prevent any null bytes related exploits, thanks to Lukas Reschke 2012-05-10 11:44:06 -04:00
Michael Gapczynski 3c6c8ecab0 Make email private link submit on enter as well 2012-05-10 11:44:06 -04:00
Thomas Tanghus 2c6740b0c7 Some UI and code restructering according to usability tests: https://mail.kde.org/pipermail/owncloud/2012-May/003194.html 2012-05-10 16:53:25 +02:00
Thomas Tanghus ddd991a59e Minor css fix. 2012-05-10 16:42:10 +02:00
Michael Gapczynski d9fbdae758 Prevent XSS exploit by checking if path-info is set, thanks to Lukas Reschke 2012-05-10 10:26:12 -04:00
Jan-Christoph Borchardt e3f452cf53 larger clickable area for new button 2012-05-10 14:08:08 +00:00
Jan-Christoph Borchardt 2ae37b32d4 fixing background for clicked new button 2012-05-10 13:44:30 +00:00
Jan-Christoph Borchardt 8fc565821f reduced text shadow brightness 2012-05-10 13:37:48 +00:00
Jan-Christoph Borchardt 46b1f35107 highlight the files new and upload button all the time 2012-05-10 13:34:44 +00:00
Sam Tuke b055ebc1fc added documentation to OCP namespace 2012-05-10 14:19:17 +01:00
Arthur Schiwon 7a5028317d LDAP: don't fall over case insensitive LDAP attribute name 2012-05-10 12:59:20 +02:00
Vitaly Kuznetsov 6f981738bb Fix some non-utf8-friendly htmlentities (resulting in wrong display of utf8-encoded directory names for example) 2012-05-10 09:10:53 +00:00
Bart Visscher a9d7c67bf2 The log message is not always shown in html
The log message can also be logged with syslog, here we don't want to have html-entities. Also the log messages through json are displayed as text not html.
2012-05-10 09:13:09 +02:00
Bart Visscher 94803dc222 Gallery: No short tags 2012-05-10 09:04:10 +02:00
Bart Visscher 2062ebacef Gallery: Show thumbnails after document is ready 2012-05-10 09:04:10 +02:00
Michael Gapczynski 798e6aa40b Merge commit 'refs/merge-requests/100' of git://gitorious.org/owncloud/owncloud into merge-requests/100 2012-05-09 17:50:14 -04:00
Michael Gapczynski 93c0e8b3bf Fix unsharing files also deleting private link, bug fix for oc-251 2012-05-09 17:38:35 -04:00
Brice Maron de6aa0f88c Use a clean uri param constructor to get files 2012-05-09 21:35:59 +00:00
Michael Gapczynski 98cd98e2e5 Skip over users that have already been shared with when sharing with a group 2012-05-09 17:16:31 -04:00
Michael Gapczynski d4636f4b86 Fix renaming of shared files if target already exists, bug fix for oc-81 2012-05-09 17:01:46 -04:00
Michael Gapczynski 2e826fa82a Go back to updating mtime of shared folder to invoke a file cache rescan 2012-05-09 16:20:38 -04:00
Robin Appelman 3e57e76c48 fix creating the shared folder when the user home folder is not in the root mount 2012-05-09 20:36:08 +02:00
Robin Appelman 03f66c6351 also scan new folders when checking for updates
it might cause long load times but seems the best for now
2012-05-09 20:35:12 +02:00
Michael Gapczynski 14b240a3f4 Still trying to fix some sharing use cases 2012-05-09 13:51:52 -04:00
Georg Ehrke a589a700e1 revert 000d7ba975 2012-05-09 18:34:44 +02:00
Georg Ehrke bc60b8d87a fix bug in public api 2012-05-09 18:33:40 +02:00
Georg Ehrke 99db3c01ee fix bug in events.php 2012-05-09 17:36:48 +02:00
Michiel de Jong 890c57bad5 fix requires in apps/remoteStorage/ajax/revoke.php 2012-05-09 15:40:39 +02:00
Michiel de Jong 4de182c7af bearer token should be the whole thing, not the http basic pass 2012-05-09 15:28:30 +02:00
Michiel de Jong 9d443e021d new requires in WebDAV.php 2012-05-09 15:28:30 +02:00
Michiel de Jong 2cf5bb6849 new requires now necessary 2012-05-09 15:28:30 +02:00
Michiel de Jong 7d090a45d2 attempt at reusing access tokens 2012-05-09 15:28:30 +02:00
Michael Gapczynski 63cc1ccacd Sanitize group in togglegroups 2012-05-09 09:23:19 -04:00
Philipp Roggan bba434ca37 fixed typo in lib/public/util.php:106 (varname to ) 2012-05-09 15:17:40 +02:00
Robin Appelman 588b51d88a update translations 2012-05-09 12:41:01 +02:00
Georg Ehrke 000d7ba975 fix bug in calendar 2012-05-09 11:53:16 +02:00
Arthur Schiwon eb7e2d7d35 Sharing: even if a user has more groups in common, he should appear only once in the dropdown list 2012-05-09 11:35:36 +02:00
Brice Maron fae1ce4ea7 Correct file move by dropping on folder 2012-05-08 22:07:14 +00:00
Arthur Schiwon c1490239e5 LDAP group: support for memberUid, fix for oc-594 2012-05-08 23:49:33 +02:00
Michael Gapczynski 051442bc76 Sanitize redirect urls 2012-05-08 17:41:50 -04:00
Tom Needham 7dcf38c40f Better checking of ajax paramters and better logging 2012-05-08 19:48:28 +00:00
Tom Needham 9c47346373 Protect admin from evil log messages 2012-05-08 19:41:31 +00:00
Brice Maron 41d0308806 Change label for saving bookmark button 2012-05-08 19:04:06 +00:00
Bart Visscher 4f88fadbc1 Add remote for media/tomahawk.php 2012-05-08 18:40:40 +02:00
Bart Visscher da1da8197e Calendar: Resize content after creating calendar layout
The calendar can be higher than the window, this corrects for the scrollbar
2012-05-08 18:40:40 +02:00
Brice Maron fa4a52260f Try to correct query string url for search in bookmark 2012-05-08 16:22:35 +00:00
Georg Ehrke 52717d2a1b remove comments 2012-05-08 17:07:50 +02:00
Michael Gapczynski f6df71b74d Set Content-Disposition to attachment for shared private links 2012-05-08 10:27:02 -04:00
Arthur Schiwon 9dee2a6b2c LDAP: settings for group filter, fixes oc-587 2012-05-08 14:44:29 +02:00
Arthur Schiwon c067cfc3b5 , not . 2012-05-08 14:09:38 +02:00
Arthur Schiwon d01db3a807 LDAP: make sure, configuration is read when a public method needs it 2012-05-08 14:02:16 +02:00
Arthur Schiwon 5dee914ed2 LDAP: sqlite compatibility 2012-05-08 13:56:07 +02:00
Arthur Schiwon 251a6d1a9f LDAP: write to log in case bind fails. 2012-05-08 12:04:52 +02:00
Georg Ehrke cdf5d4e231 fix for previous commit 2012-05-08 08:49:14 +02:00
Georg Ehrke 0ce1cbdd14 fix calendar vulnerability 2012-05-08 08:46:27 +02:00
Brice Maron 010b97febd Avoid touch operation when unshare public link 2012-05-07 22:37:18 +00:00
Brice Maron 9921ca11b5 Add protection for non-authorized char in installation form 2012-05-07 22:12:30 +00:00
Brice Maron 5962a0d4ac Enhance user creation (avoid create+delete row), clear create user form after action 2012-05-07 21:27:03 +00:00
Frank Karlitschek 43978abd80 increase to 4 beta 2012-05-07 22:58:22 +02:00
Frank Karlitschek 10d291d6b3 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-07 22:56:34 +02:00
Frank Karlitschek 40b823bc8b some more docu fixes 2012-05-07 22:55:44 +02:00
Bart Visscher 4dbc2093c6 Create a function for linking to remote.php 2012-05-07 21:47:14 +02:00
Georg Ehrke 9b5e0bebef fix path for ampache in settings 2012-05-07 20:47:32 +02:00
Georg Ehrke 5b7cefb1e5 make ampache work with remote.php 2012-05-07 20:26:09 +02:00
Arthur Schiwon 5a1ea62437 LDAP: Fall back to Base DN if user/group base settings are blanked 2012-05-07 18:38:02 +02:00
Michael Gapczynski bf8b3b0696 Forgot to set token variable 2012-05-07 12:36:29 -04:00
Michael Gapczynski 52d113b9e1 Prevent extra '/' from being added to url if app is not defined 2012-05-07 12:35:02 -04:00
Brice Maron da4688d804 Reorder code to avoid race condition in user creation 2012-05-07 16:08:35 +00:00
Arthur Schiwon e9c7ecf22d applying coding guideline 2012-05-07 17:35:23 +02:00
Arthur Schiwon 0ff5ab65be applying coding guideline 2012-05-07 17:35:23 +02:00
Simon Birnbach df6b15445d Fix bug on browsers like rekonq which stopped execution of javascript 2012-05-07 17:35:23 +02:00
Michael Gapczynski e0a5f976e7 Fix bug oc-542, encode urls for private links 2012-05-07 11:30:36 -04:00
Michael Gapczynski 71423ec566 Fix bug oc-402, check if token is set for a private link 2012-05-07 10:47:55 -04:00
Michael Gapczynski b9033d3b78 Only load sharing statuses if in files app 2012-05-07 10:47:55 -04:00
Georg Ehrke f28d71bb9c fix gallery sharing 2012-05-07 16:46:35 +02:00
Georg Ehrke ef073a148f make calendar compatible with public.php 2012-05-07 15:48:41 +02:00
Georg Ehrke 936c8ba1cc improve remote.php and create public.php 2012-05-07 15:39:17 +02:00
Georg Ehrke 5904d5cf50 Merge branch 'remote.php' 2012-05-07 15:07:16 +02:00
Georg Ehrke d032345191 fix validation of getfile parameter - i hate this bloody merge conflicts 2012-05-07 13:23:55 +02:00
Georg Ehrke 1138df0f4b fix webdav, bloody merge conflicts 2012-05-07 12:47:34 +02:00
Georg Ehrke 6bdbcc1f49 fix path of carddav in addressbook management 2012-05-07 12:18:58 +02:00
Georg Ehrke b125caaaf6 fix path of caldav in calendar management 2012-05-07 12:16:25 +02:00
Georg Ehrke e33b12a375 fix path of webdav 2012-05-07 12:07:39 +02:00
Georg Ehrke ef10603c26 fix pathes in calendar and contacts 2012-05-07 12:02:20 +02:00
Georg Ehrke 9bdd00c0f2 update htaccess file and remove remote folder 2012-05-07 11:54:42 +02:00
Georg Ehrke 46fe2e3e2a fix merge conflicts 2012-05-07 11:47:14 +02:00
Georg Ehrke 7d2a68fc31 make carddav work with remote.php 2012-05-07 11:24:19 +02:00
Georg Ehrke 5a264040d4 fix remote.php 2012-05-07 11:24:00 +02:00
Florian Hülsmann 8534373f2f better invalid webfinger URI handling 2012-05-07 11:15:24 +02:00
Michiel de Jong 3a184e2e1d whitespace correction in webfinger.php 2012-05-07 09:51:37 +02:00
Michiel de Jong c4e47953ac require base lib and deal with malformed user addresses in webfinger.php 2012-05-07 09:46:15 +02:00
Michiel de Jong 5155f589fd prevent xss in webfinger 2012-05-07 09:26:54 +02:00
Thomas Tanghus cde60dba0f Fix typo. 2012-05-07 04:46:09 +02:00
Thomas Tanghus 65b9850e53 Code cleanup. 2012-05-07 04:46:09 +02:00
Michael Gapczynski 471cad7d90 Remove manual file cache insertions of shared files, update mtime of shared folder 2012-05-06 20:14:29 -04:00
Michael Gapczynski aa0c3ddcfe Fix updateFolder() in OC_FileCache 2012-05-06 20:11:10 -04:00
Michael Gapczynski 41179a1456 Fix feedback for sharing errors 2012-05-06 19:06:24 -04:00
Michael Gapczynski e0db22cc07 Provide feedback when user creation fails 2012-05-06 18:04:48 -04:00
Brice Maron 333345d201 Add php-pdo to soft depend check 2012-05-06 21:42:33 +00:00
Brice Maron fe8b10a922 Add php-xml as dependency for core fix oc-364 2012-05-06 21:38:35 +00:00
Frank Karlitschek d2b0de614e fix an XSS bug 2012-05-06 23:06:38 +02:00
Frank Karlitschek 1945cd6946 ported the oc_template class 2012-05-06 23:00:36 +02:00
Frank Karlitschek 5d55c709dd some more documentation cleanups. much more is needed.
And greeting from the Atlanta airport. ;-)
2012-05-06 22:02:16 +02:00
Frank Karlitschek 2edf59c026 first part of documentation update. lot´s more to come 2012-05-06 21:46:39 +02:00
Thomas Tanghus 2488cdb8a1 Calendar: Fixed image paths. 2012-05-06 19:19:16 +02:00
Thomas Tanghus 5bf69cace1 Contacts: Re-added some styling that got lost in a revert. 2012-05-06 19:19:15 +02:00
Brice Maron 9dbc6b5158 Correct wrong DB quotes for calendar share functions 2012-05-06 15:41:14 +00:00
Daniel 35177e00c0 Merge commit 'refs/merge-requests/109' of git://gitorious.org/owncloud/owncloud into merge-requests/109 2012-05-06 16:13:13 +02:00
Thomas Tanghus bede32be24 Contacts: Fix for Android browser again, again. 2012-05-06 13:51:16 +02:00
Thomas Tanghus c1019a6e98 Contacts: Resized Add button. Now how do I add a gradient? ;-) 2012-05-06 13:51:16 +02:00
Thomas Tanghus 400ade063c Revert Android positioning 'fix'.
This reverts commit 20f1c1e6ca and 93ae945414.
2012-05-06 13:51:16 +02:00
Thomas Tanghus f2ec68d40c Revert "Contacts: Fix for leftcontent positioning in Android browser."
This reverts commit 93ae945414.
2012-05-06 13:51:16 +02:00
Bart Visscher f69f764e8b Working remote.php with webdav and caldav 2012-05-06 00:12:51 +02:00
Georg Ehrke c996600786 push changes 2012-05-05 22:54:14 +02:00
Georg Ehrke 6c2fc0cbe8 fix writing of webdav.php 2012-05-05 20:43:11 +02:00
Georg Ehrke 6330fdad08 fix path of webdav 2012-05-05 19:02:13 +02:00
Georg Ehrke aa4f01fbcc fix pathes for cal andcarddav 2012-05-05 18:58:58 +02:00
Georg Ehrke 4b4c3c3f3a remove debug messages 2012-05-05 18:58:58 +02:00
Bart Visscher 24a8451b2e Tasks: Fix addtask for <5.4 php version 2012-05-05 18:48:24 +02:00
Georg Ehrke 101406eba7 fix writing in remote folder 2012-05-05 18:29:26 +02:00
Bart Visscher 2facf509cc Merge branch 'tasks' for Tasks app 2012-05-05 18:26:13 +02:00
Bart Visscher 2092caf6d3 Tasks: Fix add task action 2012-05-05 18:16:14 +02:00
Thomas Müller d46bea8867 fixing file headers with copy right 2012-05-05 18:13:40 +02:00
Robin Appelman c0e67fa24a fix opening encrypted files from the browser 2012-05-05 16:49:48 +02:00
Robin Appelman 70cb053e6b improve cryptstream fro writing non-chunksized data 2012-05-05 16:49:48 +02:00
Robin Appelman d875191777 only emit the filesystem hooks once when creating a new file 2012-05-05 16:49:48 +02:00
Florian Hülsmann 4a7591d0ab Custom icons for contacts app 2012-05-05 16:31:58 +02:00
Thomas Tanghus 74a0df335a Contacts: Make editable fields more discoverable. Align group field vertically #pixelpushing 2012-05-05 15:23:48 +02:00
Thomas Tanghus 2580d8540d Dialogs: Clean indentation. Add some missing brackets. 2012-05-05 13:49:47 +02:00
Thomas Tanghus eda42cece9 Contacts: Don't try to render invalid properties. 2012-05-05 13:49:47 +02:00
Thomas Tanghus f9aadfff7a Contacts: Set min-width on note to make it render correctly. 2012-05-05 13:49:47 +02:00
Frank Karlitschek 9bcc5c11a8 porting the hooks and starting with the templates 2012-05-05 10:18:45 +02:00
Brice Maron 4a89eb77c1 Escape strings for DB and User creation at setup. Fix oc-124 2012-05-04 22:54:55 +00:00
Thomas Tanghus 2c264f836c Contacts: Better checks for GD library. 2012-05-04 23:53:29 +02:00
Bart Visscher d0b7b01737 Tasks: Some styling 2012-05-04 20:57:37 +02:00
Bart Visscher a004759230 Tasks: Really correct icon 2012-05-04 20:44:11 +02:00
Bart Visscher 19d2b94837 Tasks: More updates to public API 2012-05-04 20:20:37 +02:00
Thomas Tanghus 76b8d06284 Add missing file. 2012-05-04 20:17:15 +02:00
Thomas Tanghus d9592ddcb0 Tried to make settings/apps more keyboard/screenreader friendly. 2012-05-04 17:56:00 +02:00
Bart Visscher 1fef13b0c0 Calendar: Use array_merge to join event arrays 2012-05-04 17:34:13 +02:00
Bart Visscher eae21f3269 Tasks: Fix ajax calls in javascript 2012-05-04 17:27:10 +02:00
Bart Visscher 0006b432f5 Tasks: Update for movable apps 2012-05-04 17:20:24 +02:00
Bart Visscher 439467746a Tasks: Update to new public API 2012-05-04 17:19:25 +02:00
Bart Visscher 1e47156226 Merge branch 'master' into tasks 2012-05-04 17:04:11 +02:00
Thomas Tanghus 01da64caf7 Contacts: Changed the Add property button to not fixed and use plain button. 2012-05-04 16:36:45 +02:00
Thomas Tanghus 248eae2d0f Contacts: Improve NOTE UI. Cleanup markup. 2012-05-04 15:47:55 +02:00
Arthur Schiwon 907fa9d85b LDAP: check first, if requested attribute exists 2012-05-04 14:13:23 +02:00
Arthur Schiwon 716c5a3c8e LDAP: use the correct attribute for the display name 2012-05-04 14:02:04 +02:00
Arthur Schiwon 231eec7325 LDAP: also those functions were not meant to be static 2012-05-04 13:48:55 +02:00
Arthur Schiwon 6c670cb82d LDAP: more cleanup 2012-05-04 13:48:18 +02:00
Arthur Schiwon 333e8986f6 LDAP: copyright stuff 2012-05-04 13:26:07 +02:00
Arthur Schiwon def59755ad LDAP: cleanup 2012-05-04 13:26:07 +02:00
Arthur Schiwon adb32ad347 LDAP: checkPassword ain't static 2012-05-04 13:26:07 +02:00
Arthur Schiwon 594221a467 LDAP: make oc_user_ldap::checkPassword make use of central OC_LDAP 2012-05-04 13:26:07 +02:00
Arthur Schiwon 3499783ea5 remove debug info 2012-05-04 13:26:07 +02:00
Arthur Schiwon 7aad40ca4d LDAP: make oc_user_ldap::userExists make use of central OC_LDAP 2012-05-04 13:26:07 +02:00
Arthur Schiwon 6f982d2e20 LDAP: make oc_user_ldap::getUsers make use of central OC_LDAP 2012-05-04 13:26:07 +02:00
Arthur Schiwon 7a06e144ec LDAP: central function for user and group list retrieval (will replace retrieveList from group part) 2012-05-04 13:26:07 +02:00
Thomas Tanghus 2296521a2e Changed $APPROOT to $APPSROOT as in https://gitorious.org/owncloud/owncloud/merge_requests/116 2012-05-04 11:16:29 +02:00
Frank Karlitschek eab4a05d78 implement missing getusers call 2012-05-04 11:13:07 +02:00
Thomas Tanghus 27da29525a Made the global settings icon accessable via keyboard.
Bug http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-561
2012-05-04 09:53:36 +02:00
Thomas Tanghus 8d1754041e VCategories: Check if any categories are selected before json call. Add Close button. Remove log calls. 2012-05-04 01:33:47 +02:00
Thomas Tanghus e61e40c23d Contacts: Hack around malformed BDAY. 2012-05-04 01:27:59 +02:00
Thomas Tanghus bde5b4a7ff Contacts: Don't load event handlers more than once, or you're asking for trouble :-P 2012-05-04 00:13:35 +02:00
Thomas Tanghus a4a3d62a55 Check for callback in OC.dialogs.alert. 2012-05-04 00:13:35 +02:00
Bart Visscher 07ff1e723a Calendar: Fix repeating events 2012-05-03 23:33:44 +02:00
Bart Visscher 89c8316f8f Merge branch 'master' of git://gitorious.org/owncloud/owncloud 2012-05-03 23:26:43 +02:00
Bart Visscher 077ea94f71 Merge commit 'refs/merge-requests/89' of git://gitorious.org/owncloud/owncloud
Conflicts:
	apps/calendar/ajax/events.php
2012-05-03 23:18:43 +02:00
Robin Appelman 3d6909f372 add mount config to gitignore 2012-05-03 23:17:03 +02:00
Robin Appelman a22a79cddd fix filecache for postgresql 2012-05-03 23:17:03 +02:00
Arthur Schiwon 76a60a2fc3 ups, we don't have a CSS file therefore 2012-05-03 23:03:05 +02:00
Robin Appelman 9e03ea4a28 ensure the files app is always loaded 2012-05-03 20:47:18 +02:00
Bart Visscher b62a8ba0f8 Better regex for old apps rewrite rule 2012-05-03 17:33:57 +02:00
Bart Visscher b6ea57c8b6 Bookmarks: Move delete code to Bookmarks class, also change to use id 2012-05-03 17:33:57 +02:00
Thomas Tanghus 8076b1e12d Contacts: Remove some logging. 2012-05-03 16:01:40 +02:00
Thomas Tanghus a89231ac1d Contacts: Clean up tipsies. 2012-05-03 16:01:40 +02:00
Thomas Tanghus 5be9084c73 Contacts: Fixed paths in import. 2012-05-03 16:01:40 +02:00
Thomas Tanghus cbee0d3128 Contacts: Fix paths and improve markup and css in address book overview. 2012-05-03 16:01:40 +02:00
Frank Karlitschek 55194e0343 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-03 13:07:28 +02:00
Frank Karlitschek 97a8af7f25 ported oc_db 2012-05-03 13:06:08 +02:00
Bartek Przybylski 5611e6c9d3 fix incorrect dialog computing in ff 2012-05-03 12:32:37 +02:00
Frank Karlitschek f85d076a4e Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-03 12:26:28 +02:00
Frank Karlitschek 43caa3b3b9 ported oc_json 2012-05-03 12:23:29 +02:00
Bartek Przybylski 8feb7dd9d9 fix filepicker in webkit 2012-05-03 12:09:59 +02:00
Thomas Tanghus 375ba98645 Contacts: Move gif used by jquery.Jcrop and make style sheet use %webroot% path. 2012-05-03 11:15:44 +02:00
Thomas Tanghus 15be032740 Contacts: Improve loading contact. 2012-05-03 11:15:44 +02:00
Thomas Tanghus 6cc9f600d2 Contacts: Don't resize profile picture if it's not too big. 2012-05-03 11:15:44 +02:00
Frank Karlitschek 351740601a port oc_response 2012-05-03 10:46:27 +02:00
Michael Gapczynski 80dff77b65 Fix private links 2012-05-02 19:24:43 -04:00
Robin Appelman e5ef3e1340 move archive library to core so we can properly depend on it 2012-05-02 23:48:23 +02:00
Robin Appelman 0b51c53443 run none of the extranal storage tests on default 2012-05-02 23:44:00 +02:00
Robin Appelman 4ba527625f don't try to register file actions when we're not in the files app 2012-05-02 23:26:57 +02:00
Bart Visscher 47081a2471 Gallery: Update version for database update 2012-05-02 21:36:34 +02:00
Bart Visscher f7e410147f Contacts: check for malformed VCards in calendar hook 2012-05-02 21:36:33 +02:00
Bart Visscher ec98ecff05 Catch old app paths, change them to new form 2012-05-02 21:36:33 +02:00
Michael Gapczynski 31d623f426 Fix log viewing bug 2012-05-02 15:26:42 -04:00
Michael Gapczynski 6d37b8567b Refactoring and upload support for Google Drive backend 2012-05-02 14:41:57 -04:00
Frank Karlitschek 4fe90f62f4 port checkAppEnabled 2012-05-02 19:08:37 +02:00
Frank Karlitschek eec7c3833c fix install 2012-05-02 19:02:41 +02:00
Frank Karlitschek 10bbbc8cd2 new checkAppEnabled call 2012-05-02 18:54:31 +02:00
Bart Visscher 71f9b1968e Tasks: Make it possible to close the details area 2012-05-02 17:28:19 +02:00
Georg Ehrke 33c343ed11 add require_once('../lib/base.php'); to webdav.php 2012-05-02 16:47:25 +02:00
Georg Ehrke da03d05700 create folder 'remote' for the remote services like caldav, carddav and webdav 2012-05-02 16:41:23 +02:00
Georg Ehrke c536e930f4 add appswebroot to the guest template 2012-05-02 16:41:23 +02:00
Frank Karlitschek 82a61e2e1a port oc_preferences 2012-05-02 15:54:34 +02:00
Frank Karlitschek ff66600bc0 port appconfig 2012-05-02 14:11:29 +02:00
Frank Karlitschek 8e99475886 first part of the config stuff 2012-05-02 13:28:56 +02:00
Frank Karlitschek 8c7f854671 move all the files stuff into a files class 2012-05-02 12:54:31 +02:00
Thomas Tanghus f1830866a3 Contacts: Removed styling and (most) js from template. Started making app more keyboard/screenreader friendly. General cleanup in code and markup. 2012-05-02 12:10:44 +02:00
Thomas Tanghus 72256abf34 Contacts: Trying to improve PHOTO handling a bit. 2012-05-02 11:44:00 +02:00
Arthur Schiwon 6750998984 files is not internal any more, part II 2012-05-02 11:26:22 +02:00
Arthur Schiwon d71600213a files is not internal any more 2012-05-02 11:14:11 +02:00
Arthur Schiwon c9eaffd336 send downloadfile piece by piece. saves RAM and is better suited for large files. 2012-05-02 11:02:13 +02:00
Thomas Müller 8ed8d9cd91 fixing namespace 2012-05-02 00:55:26 +02:00
Frank Karlitschek 2fe646dcec ported the oc_app calls 2012-05-02 00:50:26 +02:00
Frank Karlitschek c94f39b488 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-02 00:24:24 +02:00
Frank Karlitschek 93b63cf375 ported the rest of the OC_Helper calls 2012-05-02 00:20:45 +02:00
unknown 98e0db15a2 correction of bug oc-393 in using owncloud V2, V3, V4 with android browser :
JSON.parse(null) results in 'Uncaught illegal access' and not 'null' (see google for details)

solved

Signed-off-by: bourgeoa
2012-05-01 23:46:51 +02:00
Frank Karlitschek e48f511606 port linkto and serverHost 2012-05-01 23:19:39 +02:00
Frank Karlitschek 31e32e3c10 ported checkLoggedIn and checkAdmin 2012-05-01 22:59:38 +02:00
Frank Karlitschek e2fb094693 some more porting 2012-05-01 21:07:08 +02:00
Frank Karlitschek ab58471904 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-01 20:07:36 +02:00
Frank Karlitschek 1a2bbd2ee4 ported addSyript and other small stuff 2012-05-01 20:03:41 +02:00
Michael Gapczynski 20f3875f1b Change default from address to sharing-noreply@server for emailing private links 2012-05-01 13:06:17 -04:00
Frank Karlitschek 254b8b9506 porting of OC_User to public API complete.
What better thing to do during a long train ride than refactoring ;-)
2012-05-01 19:04:20 +02:00
Frank Karlitschek 70cea18cce ported getUser 2012-05-01 18:50:31 +02:00
Frank Karlitschek dc7cdda5cc Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-05-01 18:48:04 +02:00
Frank Karlitschek 5bf69237b2 ported isLoggedIn 2012-05-01 18:46:15 +02:00
Georg Ehrke 7b548837df create remote directory 2012-05-01 18:22:54 +02:00
Frank Karlitschek d0554bef06 finish porting of the LOG calls or the apps to the public api 2012-05-01 17:38:27 +02:00
Marvin Thomas Rabe 7ded9cf520 Checks if config folder is writable on begin of the installation. 2012-05-01 16:35:46 +02:00
Arthur Schiwon d3ce2cacd6 OC_User: handle success properly 2012-05-01 14:40:56 +02:00
Frank Karlitschek 3f9ac6405a port some of the log call to the new public api
more to come
2012-05-01 14:29:34 +02:00
Arthur Schiwon 8a69116e94 OC_User: don't say password changed when it is not true 2012-05-01 13:40:01 +02:00
Arthur Schiwon 51b6aab436 LDAP: remove Notices on settings 2012-05-01 12:25:17 +02:00
Arthur Schiwon 54854b2e3d LDAP: decent behaviour and log message when there is no connection to the LDAP server 2012-05-01 12:17:33 +02:00
Bartek Przybylski 11314c81d9 add/remove handlers 2012-05-01 10:07:48 +02:00
Frank Karlitschek e8ec999090 port to use the new public api 2012-05-01 09:49:22 +02:00
Frank Karlitschek 0195d5b439 some more work on the public API 2012-05-01 09:39:12 +02:00
Frank Karlitschek e409e7cd4c forgot a file 2012-05-01 09:38:10 +02:00
Thomas Müller 5193ddd7d7 fixing syntax error 2012-04-30 21:55:25 +02:00
Georg Ehrke 8a3d41c043 fix a PHP Notice 2012-04-30 21:46:33 +02:00
Georg Ehrke 6c908a4cd0 fix path in calendars geo.js 2012-04-30 21:18:54 +02:00
Frank Karlitschek f425b80deb one todo less 2012-04-30 19:21:29 +02:00
Frank Karlitschek b20b30b6fe Implement a basic versioning configuration. Only a on/off switch for now.
I changed my mind about the more complex configuration options. We go with good default for now and don´t expose all the technical options to the users.
They can still override in the config file if it´s really really needed and they know what they are doing
2012-04-30 19:18:00 +02:00
Frank Karlitschek 04c6582af1 load the files app in a way that doesn´t break oC3 configurations 2012-04-30 13:58:48 +02:00
Frank Karlitschek e1268cd5f4 we require php 5.3 now. so please notify the user if an old version is in use 2012-04-30 13:28:31 +02:00
Frank Karlitschek 051cb7d96b show the username in the title. good idea. 2012-04-30 13:08:32 +02:00
Frank Karlitschek f0701f75a9 tiny typo 2012-04-30 13:08:08 +02:00
Thomas Mueller 07f2e316e4 removing executable bit from various files 2012-04-30 12:05:57 +02:00
Thomas Tanghus 9c520c70a8 Various file path fixes. 2012-04-30 01:48:01 +02:00
Thomas Tanghus a8b6fdd396 Contacts: Small css tweaks. 2012-04-30 01:01:24 +02:00
Thomas Tanghus 0bccd9c18c Contacts: Forgot to add the import template. 2012-04-29 23:26:14 +02:00
Thomas Tanghus f6fefe9a36 Contacts: Ensure TYPE parameters on email aren't deleted on edit. They are still not shown in the UI.
Remove an obsolute file and did some cleanup.
2012-04-29 22:12:27 +02:00
Thomas Tanghus 023479b1e2 Contacts: removed unused method and ajax file. 2012-04-29 22:12:27 +02:00
Thomas Tanghus 163344243b jquery.combobox: Added 'showButton' option 2012-04-29 22:12:27 +02:00
Frank Karlitschek c7e7767f58 don´t hardcode files app. we have no a standard info.xml in files 2012-04-29 21:27:02 +02:00
Frank Karlitschek b862c49ae6 enable by default. at least during oC4 testing 2012-04-29 21:18:28 +02:00
Frank Karlitschek 0d0129221b add a info.xml to files 2012-04-29 21:17:22 +02:00
Frank Karlitschek b5db852438 add files to blacklist. Should be always on 2012-04-29 21:16:41 +02:00
Robin Appelman 4d3ef9a824 improve rescanning folders 2012-04-29 16:11:17 +02:00
Robin Appelman 84bd83b1dc fix file deletion 2012-04-29 16:09:41 +02:00
Robin Appelman e3adbcb7d5 remove non existing files from the cache when rescanning a folder 2012-04-29 15:09:47 +02:00
Robin Appelman 09a5c59cca only install shipped apps on setup that should be enabled by default 2012-04-29 14:38:56 +02:00
Daniel f0f1adb994 bugfix for oc-346 2012-04-29 01:11:40 +02:00
NIEK Antoine c6f034a5d2 Support "songs" ampache API action for proper rhythmbox support 2012-04-29 00:47:57 +02:00
Jan-Christoph Borchardt afeb9d9cbf moving the file actions properly 2012-04-28 23:11:48 +02:00
Georg Ehrke bef701c448 add version file to files app 2012-04-28 13:35:05 +02:00
Georg Ehrke 2e77df91e9 add apps/inc.php to .gitignore 2012-04-28 13:18:17 +02:00
Georg Ehrke 7eb7492360 some fixes for sharing 2012-04-27 23:14:53 +02:00
Bartek Przybylski 72c0d6968e fix duplicated entries on upload 2012-04-27 22:48:27 +02:00
Georg Ehrke 3aedbc5f95 remove debug message 2012-04-27 22:22:58 +02:00
Georg Ehrke 06e9ac8591 fix parsing of app parameter and fix external app 2012-04-27 22:22:03 +02:00
Bart Visscher 6e7f5ec4ce Tasks: Add input to edit the task location 2012-04-27 20:26:12 +02:00
Bart Visscher c627657fc6 Tasks: Fix the display of the list of tasks 2012-04-27 17:48:08 +02:00
Georg Ehrke 657d02371c fix login 2012-04-27 14:55:26 +02:00
Sam Tuke a1b309a42a Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-27 13:23:58 +01:00
Georg Ehrke 0aaf6d16a5 Merge branch 'master' into movable_apps_2 2012-04-27 14:22:12 +02:00
Sam Tuke 80c850d018 added revert attempt outcome messages, removed contextual ajax revert button for now as it's not functional, improved readaibility of scripts 2012-04-27 13:19:16 +01:00
Thomas Tanghus 768041b6cb Contacts: Added convinience method for notifications. 2012-04-27 10:35:31 +02:00
Thomas Tanghus 18c11ec81b jquery.combobox: Added 'editable' option and cleaned up a bit. 2012-04-27 10:35:31 +02:00
Thomas Tanghus 1384fdfe01 Contacts: Updated first run page. 2012-04-27 10:35:31 +02:00
Georg Ehrke 993d655aad Merge branch 'master' into movable_apps_2 2012-04-27 10:30:50 +02:00
Georg Ehrke 1b935a22ce add old webdav file 2012-04-27 10:23:29 +02:00
Frank Karlitschek ee0cb68f5e some csrf fixes. needs testing 2012-04-27 01:18:21 +02:00
Frank Karlitschek 74b5e22a68 some more csrf fixes 2012-04-26 23:17:46 +02:00
Georg Ehrke f7fb4a54c9 ampache should work now 2012-04-26 22:00:37 +02:00
Georg Ehrke 5483c1be42 hide fails 2012-04-26 21:58:43 +02:00
Georg Ehrke 5fda0e4b3b make *DAV work with movable apps 2012-04-26 21:56:29 +02:00
Georg Ehrke 6930af4c0f Merge branch 'master' into movable_apps_2 2012-04-26 21:27:22 +02:00
Georg Ehrke 78b2da583d move files to the correct place 2012-04-26 21:24:41 +02:00
Georg Ehrke 6039dd0fe8 remove merge conflicts fail 2012-04-26 21:23:38 +02:00
Sam Tuke d96e962fc1 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-26 18:45:59 +01:00
Sam Tuke 18a024e251 started implementing ajax file rollback 2012-04-26 18:45:17 +01:00
Frank Karlitschek 6bdefef31e csrf protection 2012-04-26 19:35:33 +02:00
Georg Ehrke 2b10371bde fix merge conflicts 2012-04-26 18:08:49 +02:00
Georg Ehrke 40f95ffdf3 fix security check for the path of the requested file 2012-04-26 17:55:00 +02:00
Sam Tuke c693ee2adb added available version names to files dropdown menu via new ajax script 2012-04-26 16:48:43 +01:00
Georg Ehrke 0249a72cab fix downloading of files in files app 2012-04-26 17:35:12 +02:00
Frank Karlitschek 1277962183 a lot of users have problems with big files. So add an explicit button to the documentation 2012-04-26 16:53:18 +02:00
Michael Gapczynski 754844f5c9 Add ability to send private links from sharing via email 2012-04-26 10:33:24 -04:00
Sam Tuke 6312067ab5 improved styling, called css file in history.php 2012-04-26 14:32:29 +01:00
Georg Ehrke ebd82ee772 fixes for media app 2012-04-26 15:23:17 +02:00
Georg Ehrke 2c92a79b5d fixes for contacts app 2012-04-26 15:20:01 +02:00
Georg Ehrke ebcaa46482 fix loading of css files that are core related 2012-04-26 15:19:27 +02:00
Sam Tuke b19fae392b linked more button to history page 2012-04-26 13:54:38 +01:00
Georg Ehrke 3f64eb25ab some fixes fore movable apps 2012-04-26 14:52:55 +02:00
Sam Tuke 02c1127de3 changed function name to avoid clash with sharing dropdown 2012-04-26 13:41:22 +01:00
Thomas Tanghus 4bb1a2c2d6 Contacts: Some js cleanup. 2012-04-26 10:38:39 +02:00
Thomas Tanghus 5dbf362623 Contacts: Added import with with file picker. 2012-04-26 03:21:52 +02:00
Michael Gapczynski c20abfef38 Fix a counting mistake 2012-04-25 19:30:58 -04:00
Arthur Schiwon 249e0c1ee2 bring fileactions to the right position again 2012-04-26 01:03:01 +02:00
Michael Gapczynski 32de47d1d9 Update sharing when users are removed, added to groups, and removed from groups 2012-04-25 18:18:58 -04:00
Arthur Schiwon de135e3b9b resolve merge conflicts 2012-04-26 00:14:21 +02:00
Robin Appelman 9d91e53027 fix problem with filescanning 2012-04-25 22:42:00 +02:00
Georg Ehrke b75f680b8e gallery app seems to work now :) 2012-04-25 21:20:30 +02:00
Georg Ehrke 1a913ac282 bookmarks app seems to work now :) 2012-04-25 21:20:06 +02:00
Michael Gapczynski 6895c54a3f Fix javascript checkbox toggle for resharing 2012-04-25 14:37:14 -04:00
Arthur Schiwon cbba469990 LDAP rewrite, use unique LDAP user and group identifiers on LDAP side as well as fancy (unqiue as far as users a know from LDAP) names on the ownCloud side. It's done via mapping of owncloud names and LDAP identifiers.
some performance enhancements: faster searching for users and groups in their specific subtrees. Reading instead of searching were possible.

thanks for the feedback of Kevin van Kuik
2012-04-25 20:35:30 +02:00
Arthur Schiwon 0933b5e7ab use uniquemember instead of deprecated memberuid to identify LDAP group members. Attention: not every method is adjusted yet, so it breaks some things. 2012-04-25 20:35:30 +02:00
Arthur Schiwon a82d709f87 don't forget new JS file 2012-04-25 20:35:30 +02:00
Arthur Schiwon e1cd690a7c LDPA: group settings into basic and advanced to look less crowded. Still needs some love. Looks different to the other admin settings, though. 2012-04-25 20:35:29 +02:00
Sam Tuke c00762b49b added dropdown js menu for file versions, improved readability of history.php 2012-04-25 17:37:45 +01:00
Michael Gapczynski 7d9587bab3 Forgot to remove error log messages... 2012-04-25 11:54:16 -04:00
Michael Gapczynski b369adbd94 Allow admin to disable resharing of files 2012-04-25 11:51:30 -04:00
Sam Tuke a3dff248a1 fixed path to history script 2012-04-25 14:27:55 +01:00
Sam Tuke 02a65f30ec added history buttons 2012-04-25 14:01:03 +01:00
Sam Tuke 8ae1430090 added script and loaded it for adding history button 2012-04-25 13:56:43 +01:00
Sam Tuke 81f549baee made code a little more readable 2012-04-25 13:51:08 +01:00
Thomas Tanghus 4795295fb1 Contacts: Fixed some file paths. 2012-04-25 10:44:27 +02:00
Georg Ehrke d76552a009 Merge branch 'sabredav_1.6' 2012-04-25 10:39:31 +02:00
Jernej Virag e459309511 Fixed escaping of filename when determining MIME type 2012-04-25 10:33:52 +02:00
Thomas Tanghus 20f1c1e6ca Forgot to fix one file... 2012-05-06 00:39:01 +02:00
Bart Visscher 6c554d0ffa Calendar: Fix calendar export link 2012-05-06 00:35:49 +02:00
Thomas Tanghus 93ae945414 Contacts: Fix for leftcontent positioning in Android browser. 2012-05-06 00:34:08 +02:00
Thomas Tanghus 2953f4d11a Contacts: Removed redundant styles. 2012-05-06 00:34:07 +02:00
Frank Karlitschek b462795be2 added a nice API to get the installes Apps with names, urls and icon from the outside.
This is useful for some nice upcoming desktop and mobile integration
2012-05-05 23:42:38 +02:00
Michael Gapczynski 565e02d061 Add back removed groups to the select form correctly 2012-05-05 17:10:07 -04:00
Bart Visscher d854e4a144 Calendar: fix return of insert id 2012-05-05 22:32:55 +02:00
Bart Visscher f991948a71 Fix loading by apptype in webdav 2012-05-05 21:58:10 +02:00
Michael Gapczynski ef9511c713 Refactor sharing UI; bug fixes, code clean-up, and more efficient with less ajax calls 2012-05-05 15:18:14 -04:00
Michael Gapczynski d764585d8b Remove blind effect for email private link in drop down 2012-05-05 14:57:25 -04:00
Georg Ehrke 03f81fdd88 fix js fail in media player 2012-04-25 10:27:17 +02:00
Georg Ehrke 323b19a4a0 some fixes in contacts javascript files 2012-04-25 10:17:54 +02:00
Georg Ehrke 476043ecb9 add a proper 404 2012-04-25 10:17:20 +02:00
Georg Ehrke 60c0827ba3 Merge branch 'master' into movable_apps 2012-04-25 09:23:01 +02:00
Georg Ehrke 9ee2bb9719 fix js fail in media player 2012-04-25 09:22:19 +02:00
Robin Appelman 5b70e2fb25 some performance improvements to the openstack swift backend 2012-04-25 00:12:12 +02:00
Robin Appelman 5c3ea14819 fix mimetypes of encrypted files 2012-04-25 00:12:12 +02:00
Robin Appelman cc2bfd313d minor filecache improvements 2012-04-25 00:12:12 +02:00
Robin Appelman 9015c46e31 emit the correct hooks for file_put_contents and some readfile improvements 2012-04-25 00:12:12 +02:00
Robin Appelman 60b924c954 initial mount configuration work 2012-04-25 00:12:12 +02:00
Robin Appelman fa502e160d allow manually scanning of specific directories 2012-04-25 00:12:12 +02:00
Georg Ehrke f17eea506a fix merge conflicts 2012-04-24 21:59:56 +02:00
Georg Ehrke d6346b5b0b fix OC.filePath in main js 2012-04-24 21:54:09 +02:00
Georg Ehrke a85d49833b fix position of Semicolon 2012-04-24 21:52:44 +02:00
Georg Ehrke fb84d0aff8 fix php fail 2012-04-24 21:37:19 +02:00
Georg Ehrke 9b29bc96de remove debug message 2012-04-24 21:36:54 +02:00
Georg Ehrke 684007bbae fix pathes in contacts 2012-04-24 21:33:34 +02:00
Georg Ehrke 0b06eff3a0 another fix for linkto function 2012-04-24 20:17:00 +02:00
Georg Ehrke 29b9e27078 fix linkto function in OC_Helper 2012-04-24 20:14:42 +02:00
Frank Karlitschek 9b134b0636 move granite also to apps-playground because it´s not stable yet and is no longer used 2012-04-24 15:41:54 +02:00
Frank Karlitschek a3d0a74d03 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-24 15:38:36 +02:00
Frank Karlitschek 69a2173fdb non working app. moved to the apps-playground repository 2012-04-24 14:00:44 +02:00
Thomas Tanghus b824425186 Added loading indicator. 2012-04-24 11:38:11 +02:00
Thomas Tanghus 988f98fc6f Contacts: Check that UIDs really are unique on import. Better solution would be to suggest to merge contacts, but that will have to wait to OC5 ;-) 2012-04-24 11:35:56 +02:00
Thomas Tanghus 22f4acadc0 Contacts: In app import (for Chrome and Firefox only) 2012-04-24 01:44:07 +02:00
Thomas Tanghus b8da5c5262 Contacts: Tried to format NOTE field a bit. Needs to be improved more though. 2012-04-24 01:44:07 +02:00
Thomas Tanghus 6848b069c9 OC_App::getStorage() failed if app dir didn't exist. 2012-04-24 01:44:07 +02:00
Thomas Tanghus dfc94cbe84 Contacts: In app import. Cleanup still needed. 2012-04-24 01:44:07 +02:00
Thomas Tanghus 0cd9570277 Applied patches by Nicolas progweb at free.fr - https://mail.kde.org/pipermail/owncloud/2012-April/002900.html 2012-04-24 01:44:07 +02:00
Frank Karlitschek 4ea927a798 wrote a new versioning app over the weekend. Basic functionality to far but it works (TM) and has all the needed features (TM) for ownCloud 4. Userinterface integration and small improvements still missing. 2012-04-23 23:54:49 +02:00
Bart Visscher b704ff1bc7 Tasks: Simple add task action 2012-04-23 22:13:35 +02:00
Georg Ehrke fd47fbe176 fix contacts app a bit 2012-04-23 20:42:52 +02:00
Georg Ehrke 9092692b8e make calendar work with movable apps 2012-04-23 20:32:55 +02:00
Georg Ehrke 95c220a246 remove debug code in lib base 2012-04-23 20:31:03 +02:00
Georg Ehrke 10eea3f464 fix pathes of shared calendars 2012-04-23 20:13:55 +02:00
Georg Ehrke 19109afa79 fix bug in lib base 2012-04-23 20:11:21 +02:00
Georg Ehrke d1110c62ef fix file path in apps/media/ajax/api.php 2012-04-23 20:01:48 +02:00
Georg Ehrke 42a570788b Merge branch 'master' into movable_apps 2012-04-23 19:56:07 +02:00
Bart Visscher 728e6a6bf9 Tasks: Simple categories input 2012-04-23 18:28:44 +02:00
Georg Ehrke 6d92ebca45 use native functions of php to parse the string into the Var 2012-04-23 17:09:28 +02:00
Georg Ehrke 9226cb7a6a rename var file to getfile to prevent fails in files app 2012-04-23 16:36:24 +02:00
Georg Ehrke aaedb23f05 fix bug in lib/helper.php and fix file upload 2012-04-23 16:28:37 +02:00
Georg Ehrke 3b9d283245 fix path in apps/files/templats/index.php 2012-04-23 16:25:07 +02:00
Georg Ehrke c0df15367f fix style.css of the files app 2012-04-23 16:18:15 +02:00
Georg Ehrke 08fe6bdb27 fix path in /apps/files/js/timezone.php 2012-04-23 16:17:35 +02:00
Frank Karlitschek f5c9fe9ece first step to an public api of ownCloud for the apps. In the future they shouldn´t call internall classes, functions or session variables because this will change and break in upcoming versions. Apps should only call this public interface that we will kepp stable over different releases. The namespace is OCP for ownCloud public. This is just the first step. more coming soon 2012-04-23 15:50:30 +02:00
Jan-Christoph Borchardt 1b29fc3fb2 fixing multiselect overflow, issue 341 2012-04-23 14:29:11 +02:00
Jan-Christoph Borchardt 3ba9a9e6a8 adding proper copyright and license notice to the style files 2012-04-23 14:19:03 +02:00
Arthur Schiwon 912c87eeda LDAP: optimize LDAP requests for users and groups. Settings are still to do, though. 2012-04-23 13:04:58 +02:00
Georg Ehrke 1b084cc120 Merge branch 'master' into movable_apps 2012-04-23 13:03:50 +02:00
Arthur Schiwon 6ee7dc5f59 only retrieve requested attributes 2012-04-23 12:32:17 +02:00
Arthur Schiwon fffbf26159 don't forget to declare class properties 2012-04-23 11:22:11 +02:00
Thomas Tanghus 82ba2151d1 Wrong app check. 2012-04-23 10:52:13 +02:00
Thomas Tanghus 8f2e9caf96 Contacts: Tipsyfied photo toolbar. 2012-04-23 10:52:13 +02:00
Robin Appelman d17eba19c1 fix image viewer 2012-04-22 21:27:20 +02:00
Robin Appelman c5b31b001a add the option to disable file encryption while still being able to decrypt existing files 2012-04-22 21:27:20 +02:00
Georg Ehrke 44fa4433bc move files of fullcalendar 1.5.3 2012-04-22 21:18:40 +02:00
Georg Ehrke c77fa42143 add new files of fullcalendar 1.5.3 2012-04-22 21:18:40 +02:00
Georg Ehrke 43ee5cf224 remove old fullcalendar files 2012-04-22 21:18:40 +02:00
Thomas Tanghus e8f062dc93 Contacts:
- Added overlay toolbar to contact photo with 'Delete current', 'Edit current', 'Load from OC_Filesystem' and 'Upload' options.
- Made action icons translucent instead of hiding them.
2012-04-22 20:47:24 +02:00
Thomas Tanghus 8a6cb23170 Contacts: Clear cache for contact photo and thumbnail when it has been changed. 2012-04-22 20:47:24 +02:00
Georg Ehrke e888f4d9bc Merge branch 'master' into sabredav_1.6 2012-04-22 13:20:50 +02:00
Georg Ehrke 4c2cf35050 fix merge conflicts 2012-04-22 13:19:12 +02:00
Georg Ehrke 1bba445642 hide alarm and attendees tab 2012-04-22 13:15:24 +02:00
Thomas Tanghus f08cfcecec Personal settings: Emphasized labels etc, mono-spaced generated paths and moved text formatting to style sheet. 2012-04-22 03:59:28 +02:00
Thomas Tanghus 24aff287cf Link to icon was absolute. 2012-04-22 03:39:59 +02:00
Thomas Tanghus f85aaf1f58 Contacts: Added bg color and shadow to controls. I suck at CSS... 2012-04-22 02:32:51 +02:00
Thomas Tanghus 80ddf37bb7 Missing double quote. 2012-04-22 02:09:13 +02:00
Thomas Tanghus 651de1e588 Contacts: Fix error on photo crop. 2012-04-22 01:50:46 +02:00
Thomas Tanghus 9e3242d05e Contacts: Changed layout as discussed with JanC. Still WiP. 2012-04-22 00:44:53 +02:00
Thomas Tanghus 56e064bd09 Don't trigger unnecessary change events. 2012-04-22 00:44:53 +02:00
Thomas Tanghus 16fc4dfd1a Contacts: Fixed contact photo drag'n'drop upload - again... 2012-04-22 00:44:53 +02:00
Thomas Tanghus a34631f84e Contacts: Add check for empty FN field. 2012-04-22 00:44:53 +02:00
Frank Karlitschek 69f3b5e2d2 make the button a bit more consistent to the other ownCloud interface 2012-04-21 23:34:24 +02:00
Frank Karlitschek c6144535a8 document the log settings 2012-04-21 23:30:14 +02:00
Georg Ehrke e2f64394f3 update to SabreDav 1.6.2 2012-04-21 23:24:39 +02:00
Georg Ehrke a0a80e74c2 remove old sabredav files 2012-04-21 23:23:46 +02:00
Frank Karlitschek 260c48c29a cleanup the admin page layout mess a bit. Still a lot to improve in the future :-) 2012-04-21 23:23:02 +02:00
Georg Ehrke 0918fc7d91 fix merge conflicts 2012-04-21 23:21:50 +02:00
Frank Karlitschek 80950f2e1c make field completely visible 2012-04-21 23:10:35 +02:00
Frank Karlitschek ff3b199cc8 use less space 2012-04-21 23:08:52 +02:00
Frank Karlitschek 1a49497899 structure the information a bit more so that is easier readable 2012-04-21 22:55:18 +02:00
Frank Karlitschek fd54791952 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-21 22:50:30 +02:00
Frank Karlitschek a86d89f5ca Add a static code checker for evil patterns in apps.
Disabled by default for now.
We will check for private api calls here later once the public api is in place
2012-04-21 22:47:56 +02:00
Georg Ehrke 74e5402711 fix a php notice 2012-04-21 22:27:19 +02:00
Georg Ehrke e29ae46609 fix merge conflicts 2012-04-21 22:12:31 +02:00
Frank Karlitschek 6bfe2289be improve the app installer.
show a label if an app is an internal app or a third party app from the app store.
show a preview image of the app if available
2012-04-21 15:30:58 +02:00
Frank Karlitschek ef80ad1d48 add a link to the desktop and mobile clients download. 2012-04-21 00:33:24 +02:00
Frank Karlitschek d1fe3c2314 add a button to open the online documentation 2012-04-21 00:18:47 +02:00
Bart Visscher acea156a3d Tasks: Save description field 2012-04-20 23:37:42 +02:00
Bart Visscher 3d68732657 Tasks: Due date without time support added 2012-04-20 22:56:59 +02:00
Georg Ehrke 711aa229b8 Merge branch 'master' into movable_apps 2012-04-20 22:41:39 +02:00
Georg Ehrke 12ef2f5054 modify OC.filepath for movable apps 2012-04-20 22:35:12 +02:00
Georg Ehrke c3d78cf77a remove require once lib base in files scan.php 2012-04-20 22:34:13 +02:00
Georg Ehrke 99a473bd62 support file calls with parameter 2012-04-20 22:33:30 +02:00
Frank Karlitschek 0f5864d864 support searching the knowledge base 2012-04-20 21:49:57 +02:00
Frank Karlitschek c3cb000cb2 add phpmailer to 3rdparty 2012-04-20 20:53:36 +02:00
Frank Karlitschek 2fbc92bd4b new OC_Mail class to handle all mail sending. The benefit is that is way mor flexible than the standard mail command. can be configured to use a remote smtp relay for example. also port the lostpassword code 2012-04-20 20:49:35 +02:00
Bart Visscher 1384be4bff Tasks: Task summary is always text, at it as suchs 2012-04-20 18:19:10 +02:00
Bart Visscher 70ba428222 Tasks: Make gettasks more robust against malformed VTODO data 2012-04-20 18:18:07 +02:00
Bart Visscher c75bbb59a9 Tasks: Add due property handling 2012-04-20 18:16:39 +02:00
Georg Ehrke 2e85313701 optimize code 2012-04-19 22:26:36 +02:00
Georg Ehrke 909282c81e remove parameters in file var before call require once 2012-04-19 22:25:21 +02:00
Georg Ehrke 3aeea0c196 Merge branch 'merge-requests/105' 2012-04-19 20:31:24 +02:00
Georg Ehrke 3706bbec1b Merge commit 'refs/merge-requests/105' of git://gitorious.org/owncloud/owncloud into merge-requests/105 2012-04-19 20:30:58 +02:00
Georg Ehrke 85019887df add loading of files 2012-04-19 16:44:49 +02:00
Jan-Christoph Borchardt 9abb70245a showing the file extensions more visible by default. I still think it's shitty design, but I get worse nightmares over thinking that showing file extensions would become a configuration option. 2012-04-19 16:41:37 +02:00
Robin Appelman 5cefd34660 emulate touch with custom mtime for swift backend 2012-04-19 00:25:47 +02:00
Robin Appelman 9a707e10bf add SWIFT (openstack object storage) storage backend 2012-04-18 20:54:28 +02:00
Robin Appelman aceda02887 check if removed folders are really gone 2012-04-18 20:54:28 +02:00
Robin Appelman bdb3962b8d add function to get mimetype from string 2012-04-18 20:54:28 +02:00
Robin Appelman d1ad4dc8d6 add test cases for cryptstream 2012-04-18 20:54:28 +02:00
Robin Appelman b39c3d4c4e make use of the fact that stream_read will always read 8192 bytes for encryption stream
https://bugs.php.net/bug.php?id=21641
2012-04-18 20:54:28 +02:00
Robin Appelman 26e9a0dd13 bugfixes for encryption library and test cases 2012-04-18 20:54:28 +02:00
Georg Ehrke 3fb91a7411 restore require once command for non app files 2012-04-18 17:49:50 +02:00
Georg Ehrke b44bc9f4b2 remove require once lib base in some more files 2012-04-18 17:42:11 +02:00
Bart Visscher 921fc59d8f Tasks: Add "more" block containing description 2012-04-18 17:28:16 +02:00
Georg Ehrke 45de7ad221 move files to app folder 2012-04-18 17:27:34 +02:00
Georg Ehrke dfc92675e0 make menu work with movable apps 2012-04-18 17:25:44 +02:00
Georg Ehrke eb29c577c2 Merge branch 'master' into movable_apps 2012-04-18 12:20:09 +02:00
Georg Ehrke cf492a9649 Merge branch 'master' into calendar_sharing 2012-04-18 11:51:59 +02:00
Georg Ehrke de71842888 implement shared calendar activation on server side 2012-04-18 11:50:12 +02:00
Georg Ehrke 8959e0af3d implement shared calendar activation on js-side 2012-04-18 11:39:00 +02:00
Georg Ehrke 7402543d3e resotre old templates/part.choosecalendar.rowfields.php - i hate merge conflicts 2012-04-18 09:53:54 +02:00
Georg Ehrke 3e0e6e35f4 open app thru index.php 2012-04-18 08:20:51 +02:00
Georg Ehrke 69ee0efc0b remove the require_once lib base from all (or nearly all) files 2012-04-17 19:31:29 +02:00
Arthur Schiwon 57b8ff890c check if PHP mod GD is installed 2012-04-17 19:09:41 +02:00
Arthur Schiwon d24abc3b9d check if PHP mod JSON is installed 2012-04-17 19:06:45 +02:00
Robin Appelman 4dabd0fb9c test data for archives 2012-04-17 18:04:06 +02:00
Bart Visscher 6ba30cb713 Tasks: Clicking task summary opens input for edit 2012-04-17 17:32:21 +02:00
Jan-Christoph Borchardt d8761d7edd upload arrow has full opacity, button is highlighted for new users and empty folders 2012-04-17 14:29:02 +02:00
Arthur Schiwon 66018b89b2 LDAP: don't forget to unbind 2012-04-16 18:03:02 +02:00
Arthur Schiwon 86192c2f8d checked, works for me 2012-04-16 17:31:39 +02:00
Arthur Schiwon 9cd5221d47 group ldap: check configuration 2012-04-16 17:28:58 +02:00
Arthur Schiwon ed54de1bbf group LDAP: implement groupExists function, needed for Sharing 2012-04-16 16:23:00 +02:00
Bart Visscher 8afeb0fedb Tasks: Implement task lists overview 2012-04-16 15:34:14 +02:00
Arthur Schiwon 320fde9eec OC_Group does expect object, not string 2012-04-16 15:09:38 +02:00
Arthur Schiwon 899c7631d5 minor code beautification 2012-04-16 15:09:38 +02:00
Arthur Schiwon e1948c651b use the right attribute for member retrieval 2012-04-16 15:09:38 +02:00
Arthur Schiwon 02f4e78f3e a string be a string 2012-04-16 15:09:38 +02:00
Robin Appelman c3187e9388 dont show action text for folders bold 2012-04-16 13:14:41 +02:00
Robin Appelman 6af808edc9 fix delete button not always disapearing 2012-04-16 13:11:41 +02:00
Robin Appelman cfd0140e2f fix 2 potential xss problems 2012-04-16 12:59:38 +02:00
Jan-Christoph Borchardt 3c182bdb35 adding sticker logo jpg 2012-04-16 12:57:17 +02:00
Jan-Christoph Borchardt 961c239ee4 improving leftcontent display, increasing item height 2012-04-16 12:52:48 +02:00
Robin Appelman e59c87ee36 reload log after changing log level 2012-04-16 12:27:21 +02:00
Robin Appelman 5720bd296d merge log into admin 2012-04-16 12:21:48 +02:00
Jan-Christoph Borchardt 70d0103a67 updated logos and icons 2012-04-16 11:34:16 +02:00
Robin Appelman 464c751f30 fix creating unique filenames 2012-04-16 10:58:40 +02:00
Robin Appelman fa97c59f95 fix group backend 2012-04-16 10:36:21 +02:00
Robin Appelman b61f6438ba return user specific paths from oc_filecache::getpath 2012-04-16 10:06:52 +02:00
Simon Birnbach 965a8ba2c6 Fixed cancelling of uploads and wrong merge conflict resolution 2012-04-15 23:52:36 +02:00
Georg Ehrke 77cefdedb8 Merge branch 'master' into sabredav_1.6 2012-04-15 22:28:11 +02:00
Georg Ehrke dc18e65b46 fix merge conflicts 2012-04-15 22:26:55 +02:00
Jan-Christoph Borchardt 1281809300 improving file actions also for multiselect 2012-04-15 17:49:54 +02:00
Jan-Christoph Borchardt e5cda3abcd tooltip for delete shows up to the left 2012-04-15 17:49:54 +02:00
Jan-Christoph Borchardt 2dfab65a33 fixing file action positioning 2012-04-15 17:49:54 +02:00
Robin Appelman 8ecddb5bc3 create a new filename when the uploaded file already exist 2012-04-15 17:34:53 +02:00
Bart Visscher 74ba09f95c Fix password is being saved even if not changed
Fixes: http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-303
2012-04-15 17:11:03 +02:00
Bart Visscher 68b1ae1a36 OC_Group_Backend.php misses function groupexists
Fix http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-182
2012-04-15 17:11:03 +02:00
Bart Visscher ea99e1184d Add well-known redirects to htaccess
Fixes:
http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-232
http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-445
2012-04-15 17:11:03 +02:00
Tom Needham b0e68d039c Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-15 15:09:54 +00:00
Tom Needham 712e25bb02 Update ace 2012-04-15 15:09:37 +00:00
Thomas Müller a0d917fe98 fixing oc-375 - a number is appended tp the filename 2012-04-15 17:00:49 +02:00
Jakob Sack 0b426b5e64 Display correct URL in caldav and carddav paths 2012-04-15 16:50:45 +02:00
Jakob Sack 9b1d6246a9 Remove useless, unmaintained dav.php 2012-04-15 16:50:44 +02:00
Simon Birnbach 8e27b725ba Fixed cancelling upload of same file to folder and subfolder 2012-04-15 16:47:53 +02:00
Robin Appelman 9ac65c51f5 dont try to view psd files 2012-04-15 16:26:08 +02:00
Robin Appelman c0bdad5893 dont allow draging files to the current directory 2012-04-15 16:06:55 +02:00
Robin Appelman dae34edf4f fix filecache rename hook 2012-04-15 16:06:55 +02:00
Tom Needham fef3434bdf Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-15 14:02:13 +00:00
Tom Needham 738601f4fe Remove google web font 2012-04-15 14:01:59 +00:00
Thomas Müller 679ddc0e32 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-15 16:01:06 +02:00
Simon Birnbach a384fcb99f Merge git://gitorious.org/owncloud/owncloud
Conflicts:
	files/css/files.css
	files/js/files.js
2012-04-15 15:59:57 +02:00
Thomas Müller f36d31f74d pdfjs updated from github 2012-04-15 15:59:31 +02:00
Arthur Schiwon 80f4c4f923 Bookmarks: handle input with & and ?, fixes oc-201 2012-04-15 15:53:40 +02:00
Robin Appelman 75a4e46872 do no offer 'undo delete' on opera
opera lacks the onunload to make it work
2012-04-15 15:48:19 +02:00
Tom Needham 9ee3eb1412 remove unused css 2012-04-15 13:44:43 +00:00
Tom Needham cdf9f8c42a Force Files app to top of app menu 2012-04-15 13:41:22 +00:00
Bart Visscher 947d2e5705 Tasks: Mark task as complete when checking the checkbox 2012-04-15 15:39:49 +02:00
Bart Visscher 19d81068f6 Tasks: Code cleanup 2012-04-15 15:38:44 +02:00
Robin Appelman b3bd4bc384 sanity check on language selection 2012-04-15 15:35:20 +02:00
Robin Appelman b3ae2208b1 clean the collection view after rescanning 2012-04-15 15:19:30 +02:00
Robin Appelman cf3bb08dfb enable archive support on default 2012-04-15 15:19:30 +02:00
Robin Appelman 9ee931e790 only run archive tests if the test data is available 2012-04-15 15:19:30 +02:00
Robin Appelman 71cdfdcec8 only run tests of enabled apps 2012-04-15 15:19:30 +02:00
Arthur Schiwon 819af69972 group LDAP: simple basic tests 2012-04-15 14:50:03 +02:00
Arthur Schiwon 0a46c7a393 group LDAP: usersInGroup not getUsersInGroup
offer static readonly properties
2012-04-15 14:50:03 +02:00
Arthur Schiwon 2a03db6065 don't forget changes in lib_ldap for last commit 2012-04-15 14:50:03 +02:00
Arthur Schiwon 8a6fa65ed6 group LDAP: implemented getUsersInGroup() 2012-04-15 14:50:03 +02:00
Arthur Schiwon b480071946 group LDAP: implemented getUserGroups() 2012-04-15 14:50:03 +02:00
Arthur Schiwon 0912f40ebe typo 2012-04-15 14:50:03 +02:00
Arthur Schiwon 54a9fd2e6a group LDAP: implemented inGroup() 2012-04-15 14:50:03 +02:00
Jan-Christoph Borchardt 1f91224f9e fixing opacity and fading, also for IE 2012-04-15 14:37:42 +02:00
Georg Ehrke 8ddea7e95c Merge branch 'master' into calendar_sharing 2012-04-15 14:28:31 +02:00
Jan-Christoph Borchardt 897261daf4 display file actions perfectly 2012-04-15 14:15:11 +02:00
Jan-Christoph Borchardt 38cb716a57 increasing the file row height a bit 2012-04-15 13:34:31 +02:00
Jan-Christoph Borchardt 7ddd043427 renamed extention to extension, also now only showing lowercase 2012-04-15 13:34:30 +02:00
Jan-Christoph Borchardt d32799e4bf show text for file actions 2012-04-15 13:34:30 +02:00
Jan-Christoph Borchardt 5868199e85 fixed settings hover, now whole row sensitive and fading not jerky 2012-04-15 13:34:30 +02:00
Robin Appelman b669c846b0 add span around fileactions 2012-04-15 13:25:31 +02:00
Georg Ehrke e292b1fcdb fix merge conflicts 2012-04-15 12:43:07 +02:00
Robin Appelman a6a8e2c553 add public api to get the file id from the cache 2012-04-15 11:44:04 +02:00
Robin Appelman c5b8a3eb94 fix installing shipped apps 2012-04-15 11:05:55 +02:00
Daniel fd16784bcc fix bug where users could use wildcards in username to login
e.g. user Peter could probably login using username Pet%
fixed same problem in the migration script
2012-04-15 10:30:22 +02:00
Bartek Przybylski f241615693 fix getAppVersion error 2012-04-15 00:05:28 +02:00
Jan-Christoph Borchardt ba5e60e2e4 firefighting Robin-breakage 2012-04-14 19:05:01 +02:00
Robin Appelman 4410f15dd8 don't rely on the old version in info.xml anymore 2012-04-14 19:01:59 +02:00
Jan-Christoph Borchardt fbb314ef4b Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-14 18:56:55 +02:00
Jan-Christoph Borchardt f16cfbab5e improved installation instructions 2012-04-14 18:44:32 +02:00
Jan-Christoph Borchardt 85cb171cb8 improved updater wording 2012-04-14 18:41:09 +02:00
Bart Visscher 3b71e46cf7 Contact: Don't use non core class in appinfo/app.php 2012-04-14 18:34:59 +02:00
Bart Visscher 402c6da968 Typo fix (breif->brief) 2012-04-14 18:31:42 +02:00
Bart Visscher 4976daca7a Fix default database type string 2012-04-14 18:31:41 +02:00
Bart Visscher 30498fd6f8 Use offset function to position block elements 2012-04-14 18:31:41 +02:00
Arthur Schiwon 29bb5d27e4 few pieces of documentation 2012-04-14 18:26:51 +02:00
Robin Appelman 8113a43252 typo 2012-04-14 18:09:42 +02:00
Arthur Schiwon 19243b3e91 give back expected result types as long as logic is not there yet 2012-04-14 18:08:40 +02:00
Arthur Schiwon e160acefe3 test for ldap group backend 2012-04-14 18:08:40 +02:00
Arthur Schiwon 61a43419a5 starting to create the ldap group backend (with some inspiration from Yoann Gini) and preparing an general LDAP class 2012-04-14 18:08:40 +02:00
Robin Appelman dec139716e cache app types in the db 2012-04-14 17:53:02 +02:00
Robin Appelman 5608867edc use the correct array indexes... 2012-04-14 17:52:49 +02:00
Jan-Christoph Borchardt a0a5668d1e increase opacity of search field and logout icon 2012-04-14 17:20:50 +02:00
Robin Appelman b1bcc60d83 reuse OC_L10N objects 2012-04-14 16:44:15 +02:00
Robin Appelman 721311c909 some minor optimizations 2012-04-14 16:29:11 +02:00
Robin Appelman 926b2b78fe keep version numbers in their own files for faster reading 2012-04-14 16:29:11 +02:00
Robin Appelman bfdbdd9b20 remove outdated file 2012-04-14 16:29:11 +02:00
Bart Visscher 029e1aced7 Tasks: Update to use new categories interface 2012-04-14 14:55:37 +02:00
Tom Needham 44c34115a4 Remove go to line 2012-04-14 12:49:31 +00:00
Tom Needham c069aa62a4 Fix annoying error in log 2012-04-14 12:31:48 +00:00
Bart Visscher 7d1880078c Merge branch 'master' into tasks 2012-04-14 13:47:56 +02:00
Tom Needham 9b1c881ca8 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-14 11:18:25 +00:00
Robin Appelman 386663ddb6 swap enable and dissable error messages 2012-04-14 13:16:37 +02:00
Robin Appelman d8864d4f4b show error when installing an app has failed 2012-04-14 12:57:10 +02:00
Robin Appelman d3bf013761 prevent users with the same name but different casing from being created 2012-04-14 12:57:10 +02:00
Bart Visscher 5c55b9c5ac Sharing: Add a filename after public share link
We don't do anythink with the name, but it is nice to know the file the
link point to.
2012-04-14 12:45:32 +02:00
Bart Visscher 524bd2e75f Sharing: Don't get share icon for undefined filename 2012-04-14 12:45:32 +02:00
Bart Visscher 7504ceb6f2 Sharing: Define missing template vars 2012-04-14 12:45:32 +02:00
Robin Appelman 137dce87fc remove outdated code 2012-04-14 11:42:11 +02:00
Robin Appelman 3babb8c22c improve flexibility of search providers a bit 2012-04-14 11:29:54 +02:00
Arthur Schiwon 8ed4606685 LDAP: don't keep possibly outdated passwords 2012-04-14 11:08:50 +02:00
Robin Appelman d8e54acbf3 test cases for user backends 2012-04-14 10:43:28 +02:00
Georg Ehrke e256ac8791 fix unsharing of events 2012-04-13 21:49:24 -04:00
Georg Ehrke c65adc12d5 add chosen script to calendar 2012-04-13 21:29:51 -04:00
Georg Ehrke 5d4c546693 fix public sharing of calendars 2012-04-13 17:36:47 -04:00
Georg Ehrke ea3499a712 fix class name 2012-04-13 17:26:34 -04:00
Georg Ehrke 1e0364baa8 check permission check in share function 2012-04-13 17:16:28 -04:00
Arthur Schiwon 9ef34cd831 typo 2012-04-13 23:02:42 +02:00
Arthur Schiwon 74f0bebfc8 don't fail on missing extension 2012-04-13 23:02:42 +02:00
Arthur Schiwon b9bdad5165 make sure temporary files are being removed, fixes oc-450 2012-04-13 23:02:42 +02:00
Georg Ehrke 77a9e343aa Merge branch 'master' into sabredav_1.6 2012-04-13 16:42:10 -04:00
Georg Ehrke afcb0aee40 fix merge conflicts 2012-04-13 16:40:10 -04:00
Georg Ehrke 02dc343209 fix address of public shared calendars 2012-04-13 16:26:06 -04:00
Georg Ehrke 854eaff34f hide share tab in shared events 2012-04-13 16:20:19 -04:00
Tom Needham 0aaaefbb4b Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-13 20:10:35 +00:00
Tom Needham 1165b358b4 Update language string 2012-04-13 20:09:04 +00:00
Bart Visscher b9f9228a22 Contacts: Save the category list update when updating/adding contact 2012-04-13 21:13:58 +02:00
Bart Visscher 4c52007996 Calendar: Update category list when updating/adding event 2012-04-13 21:13:58 +02:00
Bart Visscher 471e735b0c Calendar: Document active parameter in allCalendars 2012-04-13 21:13:58 +02:00
Bart Visscher 7cf7d5c3dd Calendar: Also set repeat options when editing a non repeating event 2012-04-13 21:13:58 +02:00
Bart Visscher 28e0d64ede Calendar: Fix saving of Categories in an event 2012-04-13 21:13:58 +02:00
Bart Visscher f9b7ed3a1f Calendar: Implement rescan of Categories 2012-04-13 21:13:58 +02:00
Bart Visscher b8466d362e Fix rescan "File not Found" error handling in oc-vcategories.js 2012-04-13 21:13:58 +02:00
Thomas Tanghus 6aee6dae6b VCategories css is now in styles.css 2012-04-13 18:50:40 +02:00
Thomas Tanghus b654121b50 Contacts: Better error reporting. 2012-04-13 18:50:40 +02:00
Robin Appelman 6066ea3170 only run tests for files_external when asked for explicitly 2012-04-13 18:49:50 +02:00
Robin Appelman 8686667b10 some idexes for the media player tables 2012-04-13 18:49:50 +02:00
Jan-Christoph Borchardt eea0d2e096 fixing delete tooltip 2012-04-13 18:28:17 +02:00
Jan-Christoph Borchardt add9673ad6 merging tanghus category CSS 2012-04-13 17:23:56 +02:00
Jan-Christoph Borchardt 31df4c00ec adding tipsy tooltips for file actions 2012-04-13 17:22:23 +02:00
Arthur Schiwon b95f561bf2 file settings: let people set no more than upper boundary for file uploads, but they should can really go up to the limit 2012-04-13 11:25:38 +02:00
Arthur Schiwon 1bd27891e2 make upload size settings work probably. do not replace whole .htaccess, only replace what is needed. Consistent, human readable input on admin settings page. 2012-04-13 10:43:44 +02:00
Georg Ehrke df2e788a1c fix calendarid in eventform and validation of calendarid 2012-04-12 23:15:19 -04:00
Georg Ehrke a7908ba76b fix bugs in share class 2012-04-12 22:11:48 -04:00
Robin Appelman 1d8fdf52d5 allow multiply group backends 2012-04-13 01:59:05 +02:00
Bart Visscher e9c1f8b4e6 Contacts: No need to sort the categories anymore 2012-04-12 23:10:49 +02:00
Bart Visscher 43ba23430d Contacts: Change "category" to "group" in UI 2012-04-12 23:10:49 +02:00
Bart Visscher 78189e2247 Contacts: update category list when the categories change 2012-04-12 23:10:49 +02:00
Bart Visscher 9165b5c28e Use the same category input and management as the contacts app 2012-04-12 23:10:49 +02:00
Bart Visscher 69d584331d OC_VCategories: sort categories in natural order using usort
Use usort to sort, so that the json encoding is an array.
2012-04-12 23:10:49 +02:00
Bart Visscher b2011bd0a0 Remove unused function getCategoryOptions from OC_Calendar_Object 2012-04-12 23:10:49 +02:00
Bart Visscher 5fa90cd214 Contacts: Also initialize org var in updateValuesFromAdd 2012-04-12 23:10:49 +02:00
Bart Visscher 86edc0da31 Contacts: add space before parameter 2012-04-12 23:10:49 +02:00
Bart Visscher fa853102e4 Contacts: Move use of OC_Contacts_App::$categories to inside of OC_Contacts_App
This is in preparation of making $categories protected and initialized
with default categories.
2012-04-12 23:10:49 +02:00
Bart Visscher bc81179163 Fix categories delete fallback when there is no app specific ajax categories delete function 2012-04-12 23:10:49 +02:00
Bart Visscher 815649dbd7 Implement default categories in OC_VCategories 2012-04-12 23:10:49 +02:00
Frank Karlitschek 56bc2c4591 add a title attribute to the logout button 2012-04-12 20:34:56 +02:00
Frank Karlitschek 48f99fe661 off by default. great tool for developers but confusing for users. 2012-04-12 20:23:45 +02:00
Arthur Schiwon 1ade37305f always display config values
don't change values unintentionally
2012-04-12 20:17:52 +02:00
Florian Preinstorfer b86f2069ff Fix a session fixation vulnerability
- regenerate the session for every successful login
- properly destroy a session

Further information can be found on:
https://en.wikipedia.org/wiki/session_fixation
2012-04-12 19:15:38 +02:00
unknown 2f3c0a6d80 wrong defaultValue definition in OC.AppConfig.getValue
done
2012-04-12 19:14:25 +02:00
Deepak Mittal bd262eaac0 Fixed OC-261 by modifying js files in apps/media/ 2012-04-12 17:56:53 +02:00
Grundik 7e7de25710 UTF8 locale by default 2012-04-12 17:54:20 +02:00
Daniele E. Domenichelli d9aa31fd92 Use OC_Helper::serverHost() in openid settings 2012-04-12 17:51:17 +02:00
Daniele E. Domenichelli 156bdae2fe Use OC_Helper::serverHost() in OC_Helper::linkToAbsolute() 2012-04-12 17:51:17 +02:00
Daniele E. Domenichelli 7b5395675d Add method OC_Helper::serverHost()
This method returns the server host, even if the website uses one or
more reverse proxies.
2012-04-12 17:51:17 +02:00
Robin Appelman 0466437fa7 tests for oc_filesystem 2012-04-12 15:55:56 +02:00
Robin Appelman 8cea656ad7 upgrade getid3 2012-04-12 15:54:08 +02:00
Georg Ehrke 0f16935763 fix bugs and optimize OC_Calendar_Object Class 2012-04-11 10:21:45 -04:00
Frank Karlitschek 637db92e60 increase version to show that we are not the same as stable 2012-04-11 09:20:28 +02:00
Georg Ehrke 613e15035e Merge branch 'master' into sabredav_1.6 2012-04-10 22:44:13 -04:00
Georg Ehrke ac2d14101c Merge branch 'master' into calendar_sharing 2012-04-10 20:10:07 -04:00
Georg Ehrke 64d3301523 make shared events editable and add (empty) classes for alarm and attendees 2012-04-10 16:03:38 -04:00
Bart Visscher 9f547a1b39 VCategories: fix function names to coding standard 2012-04-10 21:53:51 +02:00
Bart Visscher 2dfa02a346 Contacts: fix function names to coding standard 2012-04-10 21:53:36 +02:00
Bart Visscher 3f6e971571 Contacts: Don't lowercase categories value when saving 2012-04-10 21:19:39 +02:00
Bart Visscher fd72556fd1 Contacts: Make part.no_contacts.php translatable 2012-04-10 21:15:38 +02:00
Bart Visscher 17af1ba893 Silence error for missing appinfo info file 2012-04-10 21:04:35 +02:00
Georg Ehrke eaa649cfb2 fix bug in share lib of calendar 2012-04-10 11:18:02 -04:00
Frank Karlitschek 07719045db Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-10 15:05:59 +02:00
Frank Karlitschek 47f94548ce don´t enable by default. still broken 2012-04-10 15:05:33 +02:00
Arthur Schiwon 0c56f82db5 fix: drag'n'drop actions with files containing special chars, fixes oc-420 2012-04-10 13:53:27 +02:00
Frank Karlitschek 6cf3f10d35 fix includes 2012-04-09 22:51:53 +02:00
Frank Karlitschek b0894b3148 Add Craigs granite library to 3rdparty and files_versioning. Still not working and lots ot stuff to do. 2012-04-09 22:10:29 +02:00
Thomas Tanghus 4fda6af725 Contacts: Fix for not being able to add contact to empty/non-existant address book. 2012-04-09 16:30:58 +02:00
Thomas Tanghus 9c247ce874 Removed padding. 2012-04-09 16:30:58 +02:00
Thomas Tanghus 53091551d8 Re-added file I had accidentally removed earlier :-P 2012-04-09 16:30:58 +02:00
Tom Needham 8e188cd96f Copy over all file app data for imported user 2012-04-08 19:16:03 +00:00
Tom Needham ecc596534a Decode json response for admin exports 2012-04-08 19:08:17 +00:00
Tom Needham e5ebbacc9e Fix sqlite version detection 2012-04-08 18:52:31 +00:00
Georg Ehrke 9294a95438 fix view of single shared events 2012-04-07 22:54:38 -04:00
Georg Ehrke 960553f9c4 fix path and class name 2012-04-07 22:45:44 -04:00
Georg Ehrke 5a4237a31d make dropdown menu work with single event sharing 2012-04-07 22:41:24 -04:00
Georg Ehrke 97d216c94d add dropdown to eventform 2012-04-07 22:40:20 -04:00
Georg Ehrke 4d884c3849 clean up events.php of calendar 2012-04-07 22:39:37 -04:00
Georg Ehrke e940152bce fix bugs in share lib of calendar 2012-04-07 22:39:02 -04:00
Georg Ehrke eef9a1e7ed add access check to ajax files 2012-04-07 22:37:26 -04:00
Georg Ehrke e18c0d54f6 add output functions and access function to app.php of calendar 2012-04-07 22:35:29 -04:00
Tom Needham 5e314e8eff Emit hooks for user creation 2012-04-07 22:00:32 +00:00
Tom Needham c0869887cf Return JSON for import and export methods of OC_Migrate 2012-04-07 21:55:16 +00:00
Tom Needham 9edf45a324 Merge branch 'master' into migration 2012-04-07 17:31:30 +00:00
Tom Needham d2886f2020 Hide instance import as it eats data 2012-04-07 17:27:09 +00:00
Tom Needham 00449cdf37 rename admin_export -> admin_migrate 2012-04-07 17:23:25 +00:00
Tom Needham 23d39f7ef0 Display errors on import 2012-04-07 16:13:18 +00:00
Thomas Tanghus d1ae6512cc Contacts: Misc. cleanup tweaks. 2012-04-07 16:03:43 +02:00
Thomas Tanghus b71cf1a4f9 Fix bug oc-413: PHP fatal error in contacts page when no contacts in ownCloud. 2012-04-07 16:03:43 +02:00
Tom Needham 660951dc64 Add some filetypes 2012-04-07 13:32:00 +00:00
Tom Needham 42e110b49c Update url 2012-04-07 13:07:44 +00:00
Tom Needham a098c7c685 Give editor focus after saving 2012-04-06 21:38:38 +00:00
Tom Needham 22466010fc Provide undo when closing editor with unsaved changes 2012-04-06 21:37:28 +00:00
Tom Needham 2fe0716cb4 Show nice errors 2012-04-06 20:52:41 +00:00
Bartek Przybylski 96c99125da mimetype filter for filepicker 2012-04-05 23:18:44 +02:00
Bartek Przybylski fe3d3be399 filepicker loading style fixup 2012-04-05 22:25:58 +02:00
Bartek Przybylski 5b4a303672 loading screen for filepicker 2012-04-05 21:29:54 +02:00
Florian Hülsmann 8a2c5dda6d Merge commit 'refs/merge-requests/102' of git://gitorious.org/owncloud/owncloud into merge-requests/102 2012-04-04 21:36:50 +02:00
Tom Needham 85f9869f69 Make the token really random 2012-04-04 13:18:02 +00:00
Arthur Schiwon 60e3b563e2 webdav needs to load authentication apps 2012-04-04 12:41:32 +02:00
Tom Needham acdce2b1e0 Check blacklist before saving to filesystem 2012-04-03 22:31:34 +00:00
Tom Needham 95c2ac5d58 Dont typecast variables as integers 2012-04-03 21:14:55 +00:00
Bartek Przybylski cd05dfb943 adding icons to filepicker 2012-04-03 22:18:03 +02:00
Thomas Tanghus dd4e577f6d Contacts: l11n for geo autocomplete. Not sure if it works though. 2012-04-03 08:13:10 +02:00
Thomas Tanghus fc555b48ec Contacts: Added autocomplete using geonames.org. 2012-04-03 07:29:47 +02:00
Thomas Tanghus b3f107ddda Contacts: First work on cleaner design. 2012-04-03 03:29:12 +02:00
Thomas Tanghus 896bff5748 Contacts: rescan categories on load if there are none. 2012-04-03 03:29:12 +02:00
Florian Hülsmann bd9fa658de merged from upstream 2012-04-02 23:54:18 +02:00
Bartek Przybylski ff5dbc52b8 multiselect handle for filepicker 2012-04-02 21:32:35 +02:00
Tom Needham 9f9b448161 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-04-02 17:44:24 +00:00
Tom Needham adc9d906e4 confirm close when there are unsaved changes 2012-04-02 17:44:15 +00:00
Bartek Przybylski f21d6d4f9f dialogs filepicker first draft 2012-04-02 19:39:24 +02:00
Tom Needham dc499c5b4e add * to filename when changes have been made 2012-04-02 17:27:06 +00:00
Tom Needham d0cb99e347 use OC_Dialogs instead of alert() 2012-04-02 16:35:11 +00:00
Florian Hülsmann 2cb741adff Merge branch 'master' of gitorious.org:~cbix/owncloud/cbix-owncloud 2012-04-02 17:13:21 +02:00
Florian Hülsmann 33c1fa6e28 webfinger protocol compatible + minor changes 2012-04-02 17:12:52 +02:00
Georg Ehrke 72a43b3929 revert 0fd8b1a044 2012-04-02 08:32:27 -04:00
Florian Hülsmann 3e150ff548 webfinger protocol compatible + minor changes 2012-04-02 06:31:00 +02:00
Michael Gapczynski ff4b0c4d7f Move writable check into local filestorage so shared files can be renamed 2012-04-01 13:30:41 -04:00
Robin Appelman cce59df2ae the core apps don't have types 2012-04-01 19:22:23 +02:00
Robin Appelman 39e8981bc2 oc_db is not pdo
also pgsql does not like double quotes
2012-04-01 17:32:13 +02:00
Frank Karlitschek b758725bf7 Try to configure php to enable big file uploads.
This doesn´t work always depending on the webserver and php configuration.
Let´s try to overwrite some defaults anyways
2012-04-01 17:02:32 +02:00
Frank Karlitschek 1b8a644c31 update outdated README 2012-04-01 16:06:08 +02:00
Frank Karlitschek 6545e48787 Show the different editions to the user. Used in the status call, on the personal settings page and in the updater to update to the next available version from the same edition. 2012-04-01 11:20:12 +02:00
Michael Gapczynski 6bb48b2731 Check file handle exists before trying to read file 2012-04-01 02:38:26 -04:00
Scott Shambarger d896c19011 cal import should group events by uid, export should have correct newlines, fix for oc-384 2012-03-31 20:16:42 -07:00
Tom Needham eba6a65908 try to use transactions to replace db 2012-04-01 00:25:47 +00:00
Tom Needham ffbd72bbcf Fix user app data export 2012-04-01 00:07:39 +00:00
Tom Needham a248cc73e6 Merge branch 'master' into migration 2012-03-31 23:56:16 +00:00
Tom Needham daf742c086 Fix owncloud log 2012-03-31 23:55:41 +00:00
Tom Needham ce89ff15aa Remove db tmp file after export creation 2012-03-31 23:20:08 +00:00
Robin Appelman d01b78a4b4 prevent an possible xss exploit 2012-04-01 00:55:49 +02:00
Tom Needham 3e84d85482 remove debug 2012-03-31 22:50:57 +00:00
Tom Needham aba3182a7d Fix loading image after export failure 2012-03-31 22:47:38 +00:00
Tom Needham f7d8a8c571 Merge branch 'master' into migration 2012-03-31 22:44:50 +00:00
Tom Needham d20eea9761 Use ajax to download file, OC_Dialogs for errors 2012-03-31 22:41:43 +00:00
Bartek Przybylski 4e327295c6 adding callback when ok click on alert dialog 2012-04-01 00:30:52 +02:00
Georg Ehrke 0fd8b1a044 fix events.php for rewritten OC_Caledar_App class 2012-03-31 16:16:34 -04:00
Georg Ehrke ca2c7001c4 remove unused code in OC_Calendar_App class 2012-03-31 16:15:04 -04:00
Georg Ehrke 70237f7ecc rewrite OC_Calendar_APP class 2012-03-31 16:13:04 -04:00
Georg Ehrke 10fc51dc92 add public sharing fir calendars and events - add function in Share class 2012-03-31 16:12:27 -04:00
Georg Ehrke cf26f8a6a7 add public sharing for calendars and events 2012-03-31 17:32:43 +01:00
Georg Ehrke 4b3f074309 add new parameters to export file 2012-03-31 17:27:30 +01:00
Robin Appelman 2f68b08491 fix eventsource for ie 2012-03-31 16:40:42 +02:00
Robin Appelman ebc7a6a0a6 dont send to much when scanning large folders 2012-03-31 16:28:22 +02:00
Robin Appelman 9d2f8aa717 send more progress updates when scanning large folders 2012-03-31 16:24:53 +02:00
Robin Appelman b72d7f1ab3 make sure output buffering is dissabled when using eventsource 2012-03-31 16:20:32 +02:00
Robin Appelman ad495a9218 fix potential problem when using multiply eventsource's 2012-03-31 16:10:29 +02:00
Georg Ehrke 1f8cf2d8f2 fix name of constants 2012-03-31 13:37:44 +02:00
Georg Ehrke a88305b4cb remove share tab from read only event dialog 2012-03-31 13:11:30 +02:00
Florian Hülsmann f9f91a08b4 webfinger reimplementation started 2012-03-31 02:42:41 +02:00
Bart Visscher 71b70bb05f Fix HTML, misspelled span close tag 2012-03-30 23:41:54 +02:00
Bart Visscher 20fc23c82b Move logfile determination to init function 2012-03-30 23:41:54 +02:00
Bart Visscher 3300d6ea53 checkUpgrade has to be after template initialization
The error path of checkUpgrade uses the template
2012-03-30 23:41:54 +02:00
Bart Visscher a7438189f3 Move more from base init to separate functions 2012-03-30 23:41:53 +02:00
Bart Visscher 3a4521a012 Add support for logging to syslog 2012-03-30 23:41:53 +02:00
Bartek Przybylski 6b704a780d select field added to oc.dialogs.form, gallery ported to use it 2012-03-30 22:50:57 +02:00
Florian Hülsmann 5161758921 create static host-meta instead of symlink and .htaccess 2012-03-30 21:35:09 +02:00
Bartek Przybylski 6abb2cb92e fix sharing nested galleries 2012-03-30 21:14:01 +02:00
Robin Appelman 65eee1f69d clean pre-path_hash fscache entries 2012-03-30 19:44:49 +02:00
Georg Ehrke ef1e359c7c Merge branch 'master' into sabredav_1.6 2012-03-30 18:48:30 +02:00
Georg Ehrke e3203f87ff Merge branch 'master' into calendar_sharing 2012-03-30 18:42:09 +02:00
Jan-Christoph Borchardt 284955573c clarifying remoteStorage description 2012-03-30 18:18:37 +02:00
Jan-Christoph Borchardt dde5660915 renamed Gallery to Pictures, still needs to be changed in the code to also reflect in the path 2012-03-30 18:18:37 +02:00
Jan-Christoph Borchardt 011132feb3 renaming remote storage support to External storage support to clear up naming conflict 2012-03-30 18:18:37 +02:00
Robin Appelman 7552390031 add path_hash to the filesystem cache 2012-03-30 18:12:33 +02:00
Robin Appelman 523fdda399 add the option to only load apps of a specific type 2012-03-30 14:39:07 +02:00
Robin Appelman a07c6b1a2e optimizations for loadApps 2012-03-30 14:08:18 +02:00
Robin Appelman 7bc9fa765c optimizations for updateApps 2012-03-30 14:08:18 +02:00
Georg Ehrke 90286353e2 Merge branch 'master' into sabredav_1.6 2012-03-29 23:20:03 +02:00
Georg Ehrke d15959d573 Merge branch 'master' into calendar_sharing 2012-03-29 23:19:31 +02:00
Bartek Przybylski f74d11c0c3 fix gallery sharing when root is not / 2012-03-29 20:45:21 +02:00
Arthur Schiwon 45a3d84748 checkobx opacity on files page for IE8 2012-03-29 18:32:25 +02:00
Arthur Schiwon af75ecf9da make checkboxes on files page work with IE8 () 2012-03-29 18:32:25 +02:00
Arthur Schiwon e2fd0bbf02 IE 8: fix appeareance of checkboxes on login and files pages 2012-03-29 18:32:25 +02:00
Thomas Tanghus 4b3282b325 Contacts: Removed obsolete code. 2012-03-29 15:36:04 +02:00
Thomas Tanghus 11f7eeb63a Improve actions on delete. 2012-03-29 15:25:24 +02:00
Thomas Tanghus b559952806 Cleanup stylesheet. 2012-03-29 15:25:24 +02:00
Tom Needham 73eca66a89 Fix comments 2012-03-29 10:17:08 +00:00
Michael Gapczynski 5fef9dfc22 Make users only able to share with users in groups they belong to 2012-03-28 21:18:17 -04:00
Robin Appelman 60ba5508a4 add support for installing apps from a subfolder in the zip/tgz file 2012-03-29 00:11:29 +02:00
Robin Appelman d6a9af3138 add support for installing apps from tgz 2012-03-29 00:07:28 +02:00
Robin Appelman 72882beb0d enble browsing tar files in the web interface 2012-03-28 23:53:51 +02:00
Robin Appelman 1b6fe4f65e stricter tests for archive backends and make sure we make the tests 2012-03-28 23:47:44 +02:00
Robin Appelman c26e003462 add tar backend for OC_Archive
also handles bz2/gz compression
2012-03-28 23:47:44 +02:00
Robin Appelman e57de98bbe add extract all option to OC_Archive 2012-03-28 23:47:44 +02:00
Robin Appelman d8e9db207f add tempory folder utility to OC_Helper 2012-03-28 23:47:44 +02:00
Robin Appelman f42897344f allow running a single test or group of tests 2012-03-28 23:47:44 +02:00
Georg Ehrke 08b4f996d3 add backslash r to the newline var 2012-03-28 17:06:16 +02:00
Georg Ehrke e5c009599d remove check for variable which was set one line above - bugfix for oc-324 2012-03-28 16:38:42 +02:00
Georg Ehrke 0d16f177cb add scrollbar to the music list - bugfix for oc-301 2012-03-28 16:21:54 +02:00
Florian Hülsmann 34a0128ddf whitespace indentation fix 2012-03-28 16:12:34 +02:00
Florian Hülsmann bcda46eda3 webfinger installation creates symlink in document root 2012-03-28 16:07:50 +02:00
Tom Needham bd4fd76bfb Fix bookmarks migration provider 2012-03-27 21:35:29 +00:00
Tom Needham ef33219e4f import method returns each apps' import status 2012-03-27 21:21:14 +00:00
Tom Needham 31d268fe92 check for sqlite 2012-03-27 20:55:53 +00:00
Tom Needham 553f4533c0 look for migrate.php in appinfo folder 2012-03-27 20:45:37 +00:00
Tom Needham b201e51528 Stop error on export 2012-03-27 20:43:44 +00:00
Tom Needham c8acd4a594 Merge branch 'master' into migration 2012-03-27 20:19:38 +00:00
Simon Birnbach 4e89a0faf6 Added uploading to folder and cancellable downloads 2012-03-27 21:38:55 +02:00
Georg Ehrke 536a3ecb42 Merge branch 'master' into sabredav_1.6 2012-03-27 20:54:16 +02:00
Georg Ehrke ede0a675bc Merge branch 'master' into calendar_sharing 2012-03-27 20:53:40 +02:00
Thomas Tanghus cb2dd97509 Trigger autocomplete wo button. 2012-03-27 12:30:20 +02:00
Thomas Tanghus fa165498cc Improvements in adding/deleting properties. 2012-03-27 12:30:20 +02:00
Thomas Tanghus ff038f8766 Contacts: Update contact list thumbnail when deleting PHOTO. 2012-03-27 12:30:20 +02:00
Thomas Tanghus 0a07e5fdaa Added some documentation. 2012-03-27 12:30:20 +02:00
Georg Ehrke ff75d65d7e Merge branch 'master' into calendar_sharing 2012-03-27 09:29:16 +02:00
Georg Ehrke c384e3ba4f fix width of dropdown to select monthdays - bugfix oc-354 2012-03-27 09:24:55 +02:00
Arthur Schiwon c92fc9bf65 return path of tmp file like filestorage/common does. Fixes broken folder-/multifile-download. 2012-03-27 02:24:52 +02:00
Arthur Schiwon 24bc639222 Do not use always the same name for download-zip to avoid collisions. 2012-03-27 01:19:34 +02:00
Arthur Schiwon bcef775d6b Overwrite Download-ZIP if it already exists. We do not want to show alien content. 2012-03-27 01:18:38 +02:00
Robin Appelman 266699ddf9 fix square images not getting proper thumbnails 2012-03-27 00:42:15 +02:00
Robin Appelman 128d446f39 fix timestamps when viewing logs 2012-03-27 00:21:31 +02:00
Robin Appelman eb3ec05f88 fix gallery scan when an image cant be loaded 2012-03-26 23:56:07 +02:00
Robin Appelman 73c6db5c8e crop and resize in a single step when creating thumbnail
also so more explicit memory cleanup
2012-03-26 23:53:48 +02:00
Robin Appelman 3f881f1ca5 memory cleanup in gallery 2012-03-26 22:40:38 +02:00
Robin Appelman 0ba9332358 some more memory cleanup in OC_Image 2012-03-26 22:33:37 +02:00
Robin Appelman 0c19e44a61 some more memory cleanup in OC_Image 2012-03-26 22:28:51 +02:00
Thomas Tanghus 60a939dfcf Small change and muting debug. 2012-03-26 22:26:06 +02:00
Thomas Tanghus 0da988a1bb Check for empty value.
Added missing classes on action icons.
2012-03-26 22:08:03 +02:00
Bart Visscher ee31bc7995 Contacts: Fix saveproperty for categories 2012-03-26 21:47:37 +02:00
Georg Ehrke a867bcab46 Merge branch 'master' into calendar_sharing 2012-03-26 21:46:40 +02:00
Georg Ehrke 31e20d2283 added some authors to the Authors file 2012-03-26 21:46:10 +02:00
Thomas Tanghus 6ff89dcf72 Removed obsolete code. 2012-03-26 19:13:48 +02:00
Georg Ehrke f479105f5e optimize choosecalendar dialog for shared calendars 2012-03-26 16:01:55 +02:00
Georg Ehrke 10ef01b04b fix displayed username of person who shares 2012-03-26 15:44:24 +02:00
Georg Ehrke 8b9d439841 Calendar: fix address for import file 2012-03-26 15:37:47 +02:00
Georg Ehrke 179bf15daf fix group sql generator in calendar's share lib 2012-03-26 15:30:04 +02:00
Georg Ehrke 71b32f7ad4 add read only 'form' for shared events 2012-03-26 15:24:43 +02:00
Georg Ehrke 96dd008f5e Merge branch 'master' into calendar_sharing 2012-03-26 09:50:39 +02:00
Georg Ehrke b7a5ae38c5 fix sql command in calendar's share lib 2012-03-26 09:48:58 +02:00
Thomas Tanghus 102cf150b3 Fixed error in OC_Contacts_VCard::addFromDAVData as pointed out by Guillaume ZITTA 2012-03-26 02:04:34 +02:00
Georg Ehrke ec40f69c9e add error 403 site 2012-03-25 14:16:39 +02:00
Georg Ehrke ac0c5ba6da Merge branch 'master' into sabredav_1.6 2012-03-25 14:02:40 +02:00
Georg Ehrke 19c101a660 fix merge conflicts 2012-03-25 14:02:02 +02:00
Michael Gapczynski 34c08b3165 Add test for Google Docs storage backend, tester needs to token and token secret to config 2012-03-24 15:46:28 -04:00
Michael Gapczynski d139e3c3cd Move Google Docs storage backend to files_remote app 2012-03-24 15:28:05 -04:00
Bartek Przybylski c23090b43c spaces to tabs in bookmarks 2012-03-24 19:55:44 +01:00
Bartek Przybylski a3125f164e bookmarks tag placement & list width fix 2012-03-24 19:55:43 +01:00
Michael Gapczynski 26fcb35a89 Implement fopen() for Google Docs storage backend 2012-03-24 14:50:17 -04:00
Bartek Przybylski 826cb2c650 fix sharing address construction in opera and firefox 2012-03-24 19:26:53 +01:00
Bartek Przybylski be60b451eb fix albums thumbnails preview for opera 2012-03-24 19:21:36 +01:00
Bartek Przybylski afcf965498 fixup: sharing gallery for loggedin users fail 2012-03-24 18:40:27 +01:00
Bartek Przybylski cbdcb68c2b gallery sharing, experimental version 2012-03-24 18:35:42 +01:00
Robin Appelman e0cbefc727 webdav storage backend 2012-03-23 18:55:26 +01:00
Robin Appelman 109d806617 make sure we can load OC_Config when we need it 2012-03-23 18:55:26 +01:00
Georg Ehrke 0e11cc9f6f fix previous made bug and fix oc bug - oc-139 2012-03-23 17:27:52 +01:00
Georg Ehrke ac8362e34a check if the title of an event is null - bugfix for oc-139 2012-03-23 17:09:51 +01:00
Georg Ehrke b63b377c4d Bookmarks: make link text click clickable too - bugfix for oc-131 2012-03-23 16:58:48 +01:00
Georg Ehrke 45b320d674 use unnamed as title for a bookmark if no title was entered and curl fails 2012-03-23 16:54:15 +01:00
Frank Karlitschek 7cad6ccce0 don´t show ugly error message 2012-03-23 16:48:16 +01:00
Frank Karlitschek a191b75c31 make it possible to connect to other ocs appstores and other ocs knowledgebase servers.
also make it possible to switch the app store and the knowledgebase off completely.
2012-03-23 15:52:41 +01:00
Nils Jansen 7ed8f39744 as preperation for the sgf viewer app i added a file icon for .sgf files (saved go games), and an according mimetype. 2012-03-23 13:34:07 +01:00
Georg Ehrke 37963fee28 Merge branch 'master' into calendar_sharing 2012-03-22 20:40:20 +01:00
Georg Ehrke 8e8c4a8edc Merge branch 'master' into sabredav_1.6 2012-03-22 20:40:04 +01:00
Robin Appelman 82b54938e3 ftp storage backend 2012-03-22 19:56:19 +01:00
Robin Appelman 0a93d4eccf loosen tests for mtime and ctime a bit 2012-03-22 19:54:24 +01:00
Georg Ehrke 5b03de9a66 fix comments in crypt lib 2012-03-21 17:43:09 +01:00
Tom Needham 892343c7c1 Fix instance import 2012-03-21 16:30:59 +00:00
Arthur Schiwon d91bc9b317 use placeholder in template file 2012-03-21 13:10:02 +01:00
Arthur Schiwon 7c815054c7 Config file is more appropriate here
adjust default value
2012-03-21 13:05:15 +01:00
Georg Ehrke 61166c1002 Merge branch 'master' into calendar_sharing 2012-03-21 09:43:29 +01:00
Georg Ehrke 8f8d486f35 Merge branch 'master' into sabredav_1.6 2012-03-21 09:42:53 +01:00
Tom Needham 07d7138df0 Register admin pane 2012-03-20 20:34:20 +00:00
Tom Needham 0fa5e196ef Try to use old uid when importing 2012-03-20 20:32:01 +00:00
Tom Needham 514c9ad8e7 Added unified import method. 2012-03-20 20:19:21 +00:00
Georg Ehrke 19bbb61b20 fix spelling fail in texteditor's style.css 2012-03-20 19:48:08 +01:00
Georg Ehrke 89c39b47bc add microsoft office mimetypes to the fixlist - bugfix for oc-357 2012-03-20 18:46:56 +01:00
Bart Visscher 632b3cbbbb Cleanup the template code for redundant code 2012-03-19 21:56:55 +01:00
Bart Visscher 3d8a09b147 Split the init function in lib/base.php a bit 2012-03-19 21:56:55 +01:00
Tom Needham 145d6f3566 Add OC_Migration_Content class to help app devs. Restructure OC_Migrate. 2012-03-19 20:44:20 +00:00
Georg Ehrke fa104fee17 fix mimetype detection 2012-03-19 12:42:33 +01:00
Arthur Schiwon b13ab2b17e enable admin to turn off ZIP downloads
user interface offers multi-file/folder downloads only if available

make function name more clear
2012-03-19 11:56:02 +01:00
Georg Ehrke 194211500b register text/x-vcard as a fileaction for vcard import 2012-03-19 09:58:44 +01:00
Georg Ehrke 9848bc33e5 Merge branch 'master' into sabredav_1.6 2012-03-19 09:14:15 +01:00
Georg Ehrke 03120959e9 add a proper email address for lostpassword service - bugfix for oc-178 2012-03-19 09:09:18 +01:00
Georg Ehrke 33b06c4484 Merge branch 'master' into sabredav_1.6 2012-03-19 08:33:36 +01:00
Georg Ehrke ddb7197c9c Merge branch 'master' into calendar_sharing 2012-03-18 00:53:02 +01:00
Bartek Przybylski de09883d86 creating and retrive thumbnails for intermediate galleries 2012-03-17 23:41:10 +01:00
Simon Birnbach b1a33110fc Added global progressbar for all uploads 2012-03-17 22:20:39 +01:00
Tom Needham 77f6872ea4 Shorten export zip names 2012-03-17 17:45:39 +00:00
Tom Needham bc085c3ff4 Create new user, create new data dir, copy files, import app data 2012-03-17 16:25:14 +00:00
Tom Needham 247b25e7a9 Fix structure of export zip 2012-03-17 15:01:08 +00:00
Tom Needham 5234e66bab Add exportinfo to user exports. 2012-03-17 13:53:00 +00:00
Tom Needham 27bf34f7be Move user import to the admin 2012-03-17 13:30:58 +00:00
Georg Ehrke eaa1074ccb Merge branch 'master' into calendar_sharing 2012-03-17 13:59:00 +01:00
Simon Birnbach 38072e1900 Fixed upload of undeleted file and size information 2012-03-17 13:56:33 +01:00
Tom Needham 7ba8dbb920 Don't truncate users email 2012-03-17 12:51:11 +00:00
Tom Needham 122f7e4c2f Dont truncate the time format 2012-03-17 12:41:16 +00:00
Bartek Przybylski 8e22823501 bredcrumb fix 2012-03-17 13:30:45 +01:00
Georg Ehrke de49652536 Merge branch 'master' into calendar_sharing 2012-03-17 00:00:04 +01:00
Tom Needham 222bb2303f Added prototype of user import 2012-03-16 22:54:37 +00:00
Tom Needham 5332c319a2 Migration info is an object. Other fixes 2012-03-16 22:50:35 +00:00
Tom Needham c442a06a02 Fix export for admin and users. Added 3 admin export types 2012-03-16 21:09:36 +00:00
Simon Birnbach 9377b75350 Support for legacy browsers 2012-03-16 19:58:28 +01:00
Arthur Schiwon 3267d91bda it may take time for zip file download, so give a message 2012-03-16 16:25:41 +01:00
Arthur Schiwon a77edf88c6 check if selected files for zip archive are not too large
offer config option
2012-03-16 16:25:15 +01:00
Arthur Schiwon cfc41942e4 make Files settings work 2012-03-16 16:00:12 +01:00
Georg Ehrke 27218f85cb Merge branch 'master' into calendar_sharing 2012-03-16 12:17:58 +01:00
Simon Birnbach b949619d04 coding guidelines 2012-03-16 00:11:50 +01:00
Simon Birnbach 45c9f1978e Initial version of drag&drop file upload support 2012-03-16 00:03:23 +01:00
Tom Needham 50233d075c Improve admin_export ui and move system export cde to OC_Migrate 2012-03-15 20:52:43 +00:00
Bartek Przybylski 0fadbee699 fix adding photo to incorrect gallery 2012-03-15 00:09:06 +01:00
Bartek Przybylski 193e93e4a9 creating intermediate galleries 2012-03-14 22:28:55 +01:00
Tom Needham c9be325af2 Fix zip creation. Add param to cleanUp() method. Add defaults to createExportFile() method. 2012-03-14 16:43:06 +00:00
Tom Needham a310a81053 move zip creation inside OC_Migrate 2012-03-13 23:09:43 +00:00
Tom Needham 5a50144a16 typo :/ 2012-03-13 21:29:31 +00:00
Tom Needham fa8b66ca4f Add getApps() method to return apps supporting migration 2012-03-13 21:28:53 +00:00
Tom Needham a919a136c4 Finish import function for bookmarks 2012-03-13 21:24:07 +00:00
Tom Needham cd2f75fdad Use data dir from config.php 2012-03-13 17:27:47 +00:00
Tom Needham 0f3eebbbd9 added cleanUp() method to OC_Migrate 2012-03-13 17:18:42 +00:00
Tom Needham 7e3b35a57c fix structure of user export zip 2012-03-13 17:08:20 +00:00
Tom Needham 111af7fed5 json encode the output 2012-03-13 17:04:49 +00:00
Tom Needham 4d5646a59f Find migrate.php even for disabled apps. Improve ui for user and admin migrations 2012-03-13 16:21:17 +00:00
Thomas Tanghus 4a91c6dbed Make PHOTO deletable. 2012-03-13 14:56:03 +01:00
Thomas Tanghus 9e83f0247f Added sync path for iOS/OS X. 2012-03-13 14:28:38 +01:00
Thomas Tanghus 6b01d7be9a Fixed NOTE property UI. 2012-03-13 02:55:17 +01:00
Thomas Tanghus dd0daa6e33 Cleanup in Contacts. 2012-03-13 00:55:15 +01:00
Tom Needham d108bdc7c7 Improved import function. Added param to connectDB() to load the db from the import 2012-03-12 21:41:32 +00:00
Thomas Tanghus 551b4443e1 Force load profile pic after edit hack. 2012-03-12 21:56:28 +01:00
Thomas Tanghus 60fe9dda5d Remember categories when they have changed. 2012-03-12 21:55:54 +01:00
Tom Needham 1cdb4396a4 Fix copyRows() return value. Generate app info and oc info on return 2012-03-12 18:40:14 +00:00
Thomas Tanghus 3efa5f17f2 Rename... 2012-03-12 16:47:29 +01:00
Thomas Tanghus c55d2af6b3 More modifications for using jquery.multiple_autocomplete. 2012-03-12 16:44:16 +01:00
Thomas Tanghus 2b8125f4ba Small fix to jquery.multiple_autocomplete. 2012-03-12 15:30:52 +01:00
Thomas Tanghus d36d317bb2 Contacts: Modifications for using categories. 2012-03-12 14:13:03 +01:00
Thomas Tanghus 03eb5197b6 Added category editor for apps using OC_VObjects. 2012-03-12 14:13:03 +01:00
Tom Needham 9c032ecc33 Fix return value of export 2012-03-11 22:20:01 +00:00
Tom Needham a2d7e9c6e8 Merge returns from insertData() 2012-03-11 22:13:50 +00:00
Tom Needham fa5a5649c6 Fix copyRows() and sqlite connection 2012-03-11 22:09:16 +00:00
Robin Appelman a85a10b378 oc_db isn't pdo 2012-03-11 21:48:52 +01:00
Bartek Przybylski 618f92b3fb fix thumbnail generation 2012-03-11 20:00:50 +01:00
Bartek Przybylski d5959872e1 disabling file handlers in gallery for now 2012-03-11 19:17:51 +01:00
Bartek Przybylski 4b8ff4d910 media scanner fix 2012-03-11 17:29:21 +01:00
Bartek Przybylski f6075cc1fe gallery migration to events system 2012-03-11 16:49:42 +01:00
Tom Needham 92221e98de spaces to tabs 2012-03-11 12:03:41 +00:00
Tom Needham d712d7f52c Lots of fixes, improve copyRows() method and update settings page. 2012-03-10 18:18:58 +00:00
Tom Needham 3ca76d24a9 Add OC_Migrate::copyRows() method 2012-03-10 15:52:38 +00:00
Tom Needham dc3dd272f7 Text editor will now wrap text based on window size 2012-03-10 14:32:57 +00:00
Tom Needham 1aaf008020 fix character encoding bug oc-278 2012-03-10 14:06:30 +00:00
Tom Needham 3f507898d0 update file extensions in editor 2012-03-10 14:00:57 +00:00
Tom Needham c3dfcc5b21 First basic implementation of migration.db. 2012-03-09 23:33:11 +00:00
Bartek Przybylski b4ffaa9498 spaces to tabs replacement 2012-03-09 16:47:53 +01:00
Bartek Przybylski ca9b4e467f filescan by mimetype scan 2012-03-09 16:45:57 +01:00
Bartek Przybylski 84d6c53970 filecache search comparition fix 2012-03-09 16:28:26 +01:00
Thomas Tanghus 2582fe1c89 Yet a missing file :-P 2012-03-09 13:56:20 +01:00
Thomas Tanghus 98bf8cfeb6 Added missing template. 2012-03-09 12:11:52 +01:00
Thomas Tanghus 2cbd281637 Merge branch 'vcategories' 2012-03-09 10:29:58 +01:00
Thomas Tanghus 8228a554a4 Temporarily disabled multi_autoselect. 2012-03-09 10:29:00 +01:00
Thomas Tanghus bc5d9f5868 Parses malformed N fields a bit more tolerantly. Thanks to nibbler for the patch :-) 2012-03-09 07:39:35 +01:00
Thomas Tanghus 8495e1a63e Add missing file. 2012-03-09 07:39:35 +01:00
Bart Visscher f8b62d49ee Tasks: Ordering of the task list 2012-03-08 22:27:29 +01:00
Bart Visscher d1b2c10422 Tasks: Update task list when adding or updating tasks 2012-03-08 22:26:54 +01:00
Robin Appelman 700a120c22 fix write hook for gallery 2012-03-08 15:47:49 +01:00
Thomas Tanghus a33a62bf60 Merge branch 'vcategories' of gitorious.org:owncloud/owncloud into vcategories
Conflicts:
	apps/contacts/lib/vcard.php
	apps/contacts/templates/part.contact.php
2012-03-08 02:55:48 +01:00
Thomas Tanghus ae7aab2d6e Merge gitorious.org:owncloud/owncloud into vcategories
Conflicts:
	apps/contacts/ajax/saveproperty.php
	apps/contacts/lib/vcard.php
2012-03-07 23:38:44 +01:00
Thomas Tanghus 91d85e9b16 Use OC.dialogs. 2012-03-07 22:57:37 +01:00
Bart Visscher 340320625e Contacts: Add UI for categories 2012-03-07 21:50:55 +01:00
Bart Visscher 9908adb320 Merge branch 'master' into vcategories
Conflicts:
	apps/contacts/lib/vcard.php
2012-03-07 21:49:46 +01:00
Bart Visscher d8cfe77ba5 Contacts: small fixes and cleanups 2012-03-07 21:46:42 +01:00
Bart Visscher 9599548203 Contacts: change card parameter type of VCard::edit and VCard::add
changed to OC_VObject
2012-03-07 21:46:42 +01:00
Bart Visscher ab760578f8 Allow overflow of rightcontent area 2012-03-07 21:46:42 +01:00
Bart Visscher 97ab706a6a Contacts: No random token for contactphoto 2012-03-07 21:46:42 +01:00
Bart Visscher 46aa011ef9 Contacts: Add Organisation as Name property choice 2012-03-07 21:46:41 +01:00
Bart Visscher 9ccf46d350 Contacts: convert class attribute selectors to class selectors 2012-03-07 21:46:41 +01:00
Robin Appelman 018f0c4b72 add option to add file from url 2012-03-07 21:43:44 +01:00
Thomas Tanghus 57c4d39b1e Fix conflict. 2012-03-07 20:57:05 +01:00
Robin Appelman cf5d63f0ab some js cleanup for gallary
also tabs no spaces
2012-03-07 18:58:10 +01:00
Robin Appelman d8d2939668 dont use numRows and fix some of the gallary hooks 2012-03-07 17:31:01 +01:00
Thomas Tanghus 75323b86d1 Contacts: UI updates and ajax methods for categories. 2012-03-07 16:39:56 +01:00
Robin Appelman 1d88ab57ec dont open the album when clicking the remove/rename button 2012-03-07 16:28:57 +01:00
Robin Appelman 41817db2e2 no rounded borders for album decoration 2012-03-07 16:27:51 +01:00
Robin Appelman a4543175ce make gallary work with archives 2012-03-07 16:24:49 +01:00
Robin Appelman 9f01533710 fix for webdav when having additional storage backends mounted 2012-03-07 15:44:46 +01:00
rok fb88bdba69 Ability to save an arbitrary number of external sites 2012-03-07 14:59:19 +01:00
Bartek Przybylski 0a78849391 multilevel gallery 2012-03-04 18:28:41 +01:00
Georg Ehrke c40668e3a9 Merge branch 'master' into calendar_sharing 2012-03-04 10:10:19 +01:00
Bartek Przybylski c411826fe5 moving gallery op to one file, migrate gallery dialogs to oc dialogs 2012-03-04 00:35:37 +01:00
Robin Appelman f06858689f revert an accidental change 2012-03-03 22:12:17 +01:00
Robin Appelman af214d9dcd change gallary scanning to support gallaries inside archives 2012-03-03 22:04:34 +01:00
Robin Appelman a5df3f8ea7 allow transparent opening of zip files from the web interface 2012-03-03 21:23:35 +01:00
Robin Appelman 72947e46d1 small improvement for is_dir 2012-03-03 21:23:35 +01:00
Robin Appelman bb97cbbb0c fix commong filestorage for files without extention 2012-03-03 21:23:35 +01:00
Robin Appelman 0f54084305 also delete childs of folders from the cache 2012-03-03 21:23:35 +01:00
Robin Appelman 2e365658c8 better handeling of files that can behave like folder (e.g. archives) 2012-03-03 21:23:35 +01:00
Tom Needham 691103acd5 Use json for migration data 2012-03-03 17:30:21 +00:00
Tom Needham 34f05ba180 Udpdate bookmarks migration provider. App version included in export. 2012-03-03 14:35:17 +00:00
Georg Ehrke f2dcab50b5 fix merge conflicts 2012-03-03 15:06:51 +01:00
Georg Ehrke 4c45483ad3 make calendar compatible with php 5.2 - works for me with PHP 5.2.12 2012-03-03 14:30:52 +01:00
Tom Needham 188a304625 Replace db on import. Update user_migration export function. 2012-03-03 13:26:01 +00:00
Tom Needham 6906988b4e Update bookmarks migration provider. 2012-03-03 13:22:45 +00:00
Robin Appelman 23b64cd9ce remove the archive after a testcase is done 2012-03-03 01:37:00 +01:00
Robin Appelman 042878a5a9 add archive library and a storage provider on top of the archive library
only zip backend is implemented atm
2012-03-03 00:57:52 +01:00
Robin Appelman c609b30841 fix the filestorage test a bit 2012-03-03 00:57:52 +01:00
Robin Appelman 1794ad353d fix file_get_content on empty files for filestorage common 2012-03-03 00:57:52 +01:00
Tom Needham 86fed4c226 Update database.xml locations. Fix dbexport.xml. 2012-03-02 22:19:06 +00:00
Tom Needham 8188a9f51b change <create> value in db export 2012-03-02 21:54:44 +00:00
Tom Needham 9c79de4aa0 removed duplicate function 2012-03-02 21:47:20 +00:00
Tom Needham 45ef2ecf52 Fix merge conflict 2012-03-02 21:35:48 +00:00
Jakob Sack 3e84f170e7 The tables "principals" and "principalgroups" are obsolete 2012-03-02 21:07:37 +01:00
Jakob Sack 1865659ce1 Fix missing bracket 2012-03-02 21:01:44 +01:00
Jakob Sack 90e2962c91 Remove the link between the principals table and the sabre principals connector. 2012-03-02 20:37:49 +01:00
Jakob Sack 503e5cada3 Add /dav.php, a single location bundling all *DAV-operations. 2012-03-02 20:25:20 +01:00
Robin Appelman 48fe85d9bd add streamwrapper that provides a callback on stream close 2012-03-02 18:42:57 +01:00
Robin Appelman e8afe4f158 add search implementation to filestorage common 2012-03-02 18:42:57 +01:00
Robin Appelman 4daedda35a only test enabled apps 2012-03-02 18:42:57 +01:00
Robin Appelman b621431c11 don't try to seach apps in hidden folders 2012-03-02 18:42:57 +01:00
Robin Appelman 3b9ce95fc3 allow apps to ship test cases 2012-03-02 18:42:57 +01:00
Bart Visscher d1dcd7893c Search: Change provider registration to class name, for lazy loading of search providers 2012-03-01 22:59:35 +01:00
Bart Visscher 8c7b13db70 Files: Fix wrong attribute name in OC_Search_Provider_File 2012-03-01 22:59:35 +01:00
Bart Visscher 3d3190309f Simplify stripping the last part off WEBROOT and SERVERROOT for 3rdparty and app dir 2012-03-01 22:59:35 +01:00
Michiel de Jong 1471d8f710 remoteStorage app version 0.5 2012-03-01 20:58:14 +00:00
Michiel de Jong e10402c61b remoteStorage app version 0.5 2012-03-01 20:55:20 +00:00
Michiel de Jong 5d8d7ef2a1 remoteStorage app version 0.5 2012-03-01 20:55:12 +00:00
Bart Visscher 5dcd9e20d0 Small cleanups 2012-03-01 21:00:23 +01:00
Bart Visscher ec2f49833d Calendar: Don't request edit form for readonly events 2012-03-01 21:00:23 +01:00
Bart Visscher f914cd0144 Implement showing Birthdays of contacts in the calendar 2012-03-01 21:00:22 +01:00
Bart Visscher fe3bcb5fe2 Calendar: fix bug in creating DTEND from DTSTART 2012-03-01 21:00:22 +01:00
Bart Visscher 642ccd27ab Bookmarks: fix loading and displaying of the bookmarks 2012-03-01 20:57:11 +01:00
Tom Needham 33c5b3a2ef Added replaceDB method in lib/db.php 2012-03-01 19:41:14 +00:00
Robin Appelman 6ecbaf0041 load streamwrappers earlier 2012-03-01 18:44:33 +01:00
Frank Karlitschek 0b4607321f Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-03-01 15:21:12 +01:00
Frank Karlitschek d29a02a65a undo the change of the webroot detection. seams to be buggy 2012-03-01 15:19:44 +01:00
Arthur Schiwon fa6ad6ba68 LDAP: set also quota, when there is no explicit default value 2012-03-01 14:31:06 +01:00
Arthur Schiwon b192f86d84 LDPA: fix setting variables and add missing ones to the array 2012-03-01 14:21:38 +01:00
Arthur Schiwon eb8ffd9315 LDAP fix: set user quota, if attribute is provided 2012-03-01 14:18:28 +01:00
Robin Appelman f193e474c1 add test cases for stat and touch 2012-02-29 23:47:53 +01:00
Robin Appelman e76e4e7540 add touch() to all storage backands, and make parameter optional 2012-02-29 23:44:05 +01:00
Robin Appelman b23b5aae7f remove debug output 2012-02-29 23:17:49 +01:00
Michael Gapczynski baffa03fa5 Fix opendir for folders aka Google Docs collections 2012-02-29 13:18:33 -05:00
Arthur Schiwon f040ce044c consider changed/new setting variables for user_ldap 2012-02-29 13:03:44 +01:00
Arthur Schiwon 3c72a7c934 make ldap settings a little bit less ugly 2012-02-29 12:57:11 +01:00
Michael Gapczynski 02f15e9a03 More work on Google Docs storage backend 2012-02-28 19:16:52 -05:00
Bartek Przybylski 2754cac21f dialogs library for apps 2012-02-28 23:02:30 +01:00
Arthur Schiwon ea15c17149 typo in function call 2012-02-28 21:04:56 +01:00
Frank Karlitschek 0a9b0ee382 change the detection of the webroot. it is simpler now and also works for app directories outside the owncloud folder. works for me and hopefully for everybody else too 2012-02-28 18:21:23 +01:00
Robin Appelman a829ce69c5 make sure the streamwrappers are registered early 2012-02-28 17:25:15 +01:00
Frank Karlitschek 5e9d268c21 never try to load an non existing template,css,img.
do propper checking, error reporting and motivate the developerto fix it ;-)
2012-02-28 16:14:12 +01:00
Arthur Schiwon de642697bb make LDAP filter for user list configurable 2012-02-28 14:12:53 +01:00
Robin Appelman d1c3aa3112 add test case for getLocalFile 2012-02-28 12:06:34 +01:00
Robin Appelman de37bafa5c use in-memory files for the datase scheme during installation 2012-02-28 11:39:39 +01:00
Robin Appelman 3e0bb3e7c4 use temporary file managment 2012-02-28 11:33:59 +01:00
Robin Appelman a76ff563d6 fix temporary file creation 2012-02-28 11:32:45 +01:00
Robin Appelman 7ec1c0703d fix testcase runner 2012-02-28 11:16:58 +01:00
Robin Appelman 273d7fb4fd fix copy/paste error in common filestorage 2012-02-28 11:16:41 +01:00
Robin Appelman 77b51f03e3 add temporary file managment 2012-02-28 11:16:19 +01:00
Alessandro Cosentino 76d7ce4b52 Merge branch 'master' of git://gitorious.org/owncloud/owncloud 2012-02-27 18:24:45 -05:00
Alessandro Cosentino 630cee0ef2 bookmarklets should not look like buttons 2012-02-27 18:20:40 -05:00
Michael Gapczynski d190ebee48 Initial work on Google Docs storage backend 2012-02-27 15:00:17 -05:00
Frank Karlitschek 5943af17e7 spaces -> tabs
Thanks to Jakob for reminding me
2012-02-27 18:01:43 +01:00
Robin Appelman 63a088c2b1 more tests for filestorage 2012-02-27 12:20:47 +01:00
Robin Appelman d8d4420f22 some cleanup in filestorage 2012-02-27 12:20:37 +01:00
Robin Appelman cef230c141 extend filestorage common and provide test implementation 2012-02-27 12:04:42 +01:00
Robin Appelman 4eb9a69bd8 fix test case for filestorage
file storage no longer needs to implement file_put_contents for streams
2012-02-27 12:01:06 +01:00
Robin Appelman e2721fc93c make OC_FileStorage abstract 2012-02-27 11:28:11 +01:00
Robin Appelman 5eca0e4f29 remove accidendally added file 2012-02-26 23:31:09 +01:00
Roland van Laar 2a351f4456 Fixed off by one bug. List length is 1 larger than the index of the last
element.
2012-02-26 22:09:21 +01:00
Georg Ehrke aae0d990ca fix baseUri of the Carddav server 2012-02-26 21:46:20 +01:00
Georg Ehrke 089c24e650 fix baseUri of the Caldav server 2012-02-26 21:44:35 +01:00
Georg Ehrke 8c09330959 add missing parameter to addEventListener function - bugfix for oc-225 2012-02-26 21:29:52 +01:00
Georg Ehrke 04c9cc6034 give users the possibility to choose between monday and sunday as first day of the week 2012-02-26 21:23:20 +01:00
Frank Karlitschek a501d4b61e change back to 32bit. autoincrement doesn´t work with sqlite otherwise 2012-02-26 19:13:14 +01:00
Frank Karlitschek ab96fa67c8 first part of the abstraction work of the apps folder. more to come 2012-02-26 18:26:41 +01:00
Robin Appelman 8148480cfe dont enable encryption on default 2012-02-26 16:49:57 +01:00
Robin Appelman 01fcc080bb dont set the encryption flag for existing non-encrypted files 2012-02-26 15:56:47 +01:00
Robin Appelman 857535403c add more valid fopen modes 2012-02-26 15:32:58 +01:00
Robin Appelman ff0a542e48 always set encrypted flag when overwriting a file we should encrypt 2012-02-26 15:32:45 +01:00
Robin Appelman d4d09b06f8 merge master into encryption 2012-02-26 14:21:06 +01:00
Robin Appelman 3d0d47957e improved humanFileSize for js 2012-02-26 14:12:50 +01:00
Robin Appelman 62cd89da14 improved password hashing based one phpass
old passwords are automatically upgraded on login
2012-02-26 14:12:50 +01:00
Georg Ehrke 89865cb8a0 stop using 3rdparty services for timezone detection 2012-02-26 13:45:51 +01:00
Georg Ehrke 92c7b2717d add OC_Geo class 2012-02-26 13:45:20 +01:00
Robin Appelman 6c501f90bb hopefully a fix for webroot detection 2012-02-26 04:09:48 +01:00
Robin Appelman 0af31a5328 missed one is_writeable 2012-02-26 03:56:45 +01:00
Robin Appelman c8c3b8a63e chunked implementation for readfile
prevents memory issues when downloading large files
2012-02-26 03:54:21 +01:00
Robin Appelman 0b19af5e10 application/ogg is music to 2012-02-26 03:42:48 +01:00
Robin Appelman fe0832746b intval() of a number seems unnecessary
and it could cause 32bit integer overflow issues
2012-02-26 03:31:04 +01:00
Robin Appelman ff9111847f additional error codes for file upload 2012-02-26 03:24:00 +01:00
Robin Appelman a5e892505e more robust png fallback 2012-02-26 03:10:29 +01:00
Robin Appelman 797e921b9a improve log browsing 2012-02-26 03:10:29 +01:00
Michiel de Jong a7d7597d55 fix type error in dir creation for categories 2012-02-25 23:15:31 +00:00
Michiel de Jong 42735429da bump up version and update license 2012-02-25 22:03:14 +00:00
Michiel de Jong 28650191c3 bump up version and update license 2012-02-25 22:01:04 +00:00
Michiel de Jong 820f2f27f6 security hardening in remoteStorage app 2012-02-25 21:59:58 +00:00
Michiel de Jong a1d03de666 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-02-25 21:58:59 +00:00
Bartek Przybylski 8fe5251029 unicode chars in gallery name fix 2012-02-25 20:38:22 +01:00
Robin Appelman 4f627c428e some more error reporting during filesystem scan 2012-02-25 20:27:16 +01:00
Georg Ehrke bfb67286c8 fix merge conflicts 2012-02-25 16:54:27 +01:00
Robin Appelman dda79a90cf don't limit ourselfs to 32bit integers 2012-02-25 16:51:59 +01:00
Robin Appelman ea8f71a19c Merge branch 'master' into encryption 2012-02-25 16:36:58 +01:00
Robin Appelman 8b93a9a237 add javascript bindings for OC_AppConfig 2012-02-25 16:35:40 +01:00
Robin Appelman 862f824d64 some multiselect improvements 2012-02-25 16:35:40 +01:00
Georg Ehrke 097ce76fc4 Merge branch 'master' into sabredav_1.6 2012-02-25 16:29:32 +01:00
Georg Ehrke 0d2f1688e4 add empty methods updatePrincipal and searchPrincipals and change method getPrincipalByPath to work with sabredav 1.6 2012-02-25 16:26:47 +01:00
Bartek Przybylski 3cf81cadd5 gallery thumbnail creation fix 2012-02-25 10:03:58 +01:00
Georg Ehrke cc15852386 replace Sabre_DAV_Exception_FileNotFound with Sabre_DAV_Exception_NotFound 2012-02-25 09:35:35 +01:00
Robin Appelman 7988541476 cleanup pdfviewer app name 2012-02-24 23:54:38 +01:00
Robin Appelman 66f4f06dd9 if a deleted file is uploaded, finish the delete first
otherwise the upload will fail because the file still exists on the server, the old file will be deleted and neither the old or new file will be left
2012-02-24 23:54:38 +01:00
Robin Appelman 11cb45bd43 slight change to select style 2012-02-24 23:54:38 +01:00
Robin Appelman 9dcf29ff51 fix bug in group mangement 2012-02-24 23:54:38 +01:00
Robin Appelman 0d3181b6d1 add configure option for default quota 2012-02-24 23:54:38 +01:00
Robin Appelman 4230e217af new config widget for user quota 2012-02-24 23:54:38 +01:00
Robin Appelman 9f5bce81b0 add a default user quota 2012-02-24 23:54:38 +01:00
Robin Appelman e039015ca1 prevent errors when a user backends gives an invalid result 2012-02-24 23:54:38 +01:00
Georg Ehrke 1d1dfcbc1a replace Sabre_VObject_Element_DateTime with Sabre_VObject_Property_DateTime 2012-02-24 22:20:40 +01:00
Georg Ehrke e082d473bb Merge branch 'master' into sabredav_1.6 2012-02-24 18:51:38 +01:00
Arthur Schiwon ca874a3ad7 remove limit from configvalue for long config values 2012-02-24 14:18:09 +01:00
Marvin Thomas Rabe 9df193f051 Calendar selection only available if there are more than one. 2012-02-23 22:28:14 +01:00
Marvin Thomas Rabe 7c738a1384 Sharing dropdown width fixed. 2012-02-23 22:28:13 +01:00
Georg Ehrke eae32e05c9 Merge branch 'master' into sabredav_1.6 2012-02-23 22:12:00 +01:00
Georg Ehrke b1fb325d48 rename updatecalendar to update 2012-02-23 22:07:31 +01:00
Georg Ehrke f285790fa1 change links in the event form for the new ajax folders 2012-02-23 22:07:08 +01:00
Georg Ehrke 319e93f7fb change pathes in calendar/templates/* files to make them work with the new folder structure in /calendar/ajax 2012-02-23 22:06:43 +01:00
Georg Ehrke cfa284bfa8 update js files for new ajax pathes 2012-02-23 22:06:16 +01:00
Georg Ehrke 8cd1027214 better var name in changeview.php 2012-02-23 22:00:46 +01:00
Georg Ehrke b7de1850a0 add moved files to clean up ajax folder 2012-02-23 21:58:39 +01:00
Georg Ehrke e188b96596 remove old ajax files 2012-02-23 21:58:01 +01:00
Bart Visscher 8f9c852325 Add filtering on category, priority and location 2012-02-23 21:11:31 +01:00
Marvin Thomas Rabe ce4fe9e7cb Editor fixed. 2012-02-23 20:36:20 +01:00
Bartek Przybylski a02d5d1a3d log typo fix 2012-02-23 19:29:11 +01:00
Georg Ehrke 3e756407a0 check if the tempfile was created successfully 2012-02-23 18:23:09 +01:00
Georg Ehrke 95fe159914 make lib/vobject.php work with sabredav 1.6 2012-02-23 17:20:03 +01:00
Frank Karlitschek a62e109e8c make the location of the 3rdparty folder flexible.
It´s automatically search in the owncloud folder and in the parent folder.
override with an option in config.php is also possible
2012-02-23 15:37:38 +01:00
Marvin Thomas Rabe 196d619689 Little bookmark improvement 2012-02-22 23:58:38 +01:00
Marvin Thomas Rabe 358fd1c024 Changed text 2012-02-22 23:53:54 +01:00
Marvin Thomas Rabe 77493e8d70 Changed bookmarklet to read later widget 2012-02-22 23:52:56 +01:00
Marvin Thomas Rabe 996e6cf419 No bookmarks message will now show up if all bookmarks are delted 2012-02-22 23:28:36 +01:00
Marvin Thomas Rabe 3988ec2813 Updated bookmark form 2012-02-22 23:22:17 +01:00
Marvin Thomas Rabe 5387820a3b changed look of bookmarklet 2012-02-22 23:08:50 +01:00
Alessandro Cosentino 70f9936651 sharing code between the two bookmarklets 2012-02-22 16:38:05 -05:00
Robin Appelman 814bc2fd2b make encryption filetype blacklist configurable 2012-02-22 22:20:46 +01:00
Robin Appelman 2e05bd69f5 add javascript bindings for OC_AppConfig 2012-02-22 22:20:11 +01:00
Bart Visscher c768751c23 Display more information in the task list 2012-02-22 22:06:06 +01:00
Robin Appelman 8bfc73c188 some multiselect improvements 2012-02-22 21:38:15 +01:00
Bart Visscher f3ebd29661 Fix updating task for new calendar API 2012-02-22 21:15:57 +01:00
Bart Visscher 18bac944b4 Change loading of tasks to ajax call 2012-02-22 20:21:27 +01:00
Bart Visscher 92db4f8be0 Update edittaskform for new calendar API 2012-02-22 20:12:54 +01:00
Bart Visscher 7f754c02f3 Change code from using OC_Tasks_VTodo to OC_Tasks_App 2012-02-22 20:11:38 +01:00
Michiel de Jong 3f87c2cedb correct header Content-Type: application/xrd+xml 2012-02-22 19:05:41 +00:00
Michiel de Jong 9850820b42 BearerAuth and multiple tokens support in remoteStorage app 2012-02-22 18:05:52 +00:00
Michiel de Jong 6c6b570ff1 avoid notice in error log from user_webfinger app 2012-02-22 18:04:21 +00:00
Marvin Thomas Rabe fd72f2bd29 Removed redundant code. 2012-02-22 16:04:32 +01:00
Marvin Thomas Rabe e2d6bf4c63 Bookmarklet Window closes itself after submit. 2012-02-22 16:04:32 +01:00
Marvin Thomas Rabe d9914664f6 Text editor display error fixed. 2012-02-22 16:04:31 +01:00
Marvin Thomas Rabe b3f3b8c23f UI problems solved. Bookmarks app updated. 2012-02-22 16:04:31 +01:00
Robin Appelman ed0c99ef14 make sure we always have the encryption key unlocked 2012-02-22 15:18:22 +01:00
Robin Appelman 1a9ded981b Merge branch 'master' into enc 2012-02-22 14:26:52 +01:00
Thomas Tanghus faf6055baa Translate and fix copy/paste error. 2012-02-22 14:19:23 +01:00
Bart Visscher 499ec15c26 Add icon for tasks app 2012-02-22 13:32:04 +01:00
Bart Visscher 4af22bfb7a Merge branch 'master' into tasks 2012-02-22 11:56:24 +01:00
Georg Ehrke 9460c9e907 remove old import.php 2012-02-22 11:53:28 +01:00
Thomas Tanghus 9794e7e427 Fix merge conflict. 2012-02-22 11:20:57 +01:00
Georg Ehrke cff0ac2bf9 better permission check in resize.php 2012-02-22 10:42:33 +01:00
Georg Ehrke 0ae088a50a add getowner function to OC_Calendar_Object 2012-02-22 10:42:01 +01:00
Georg Ehrke 48f42176cd add is_editing_allowed function to OC_Calendar_Share 2012-02-22 10:41:16 +01:00
Georg Ehrke d20b8399c3 clean up sql commands in OC_Calendar_Share 2012-02-22 10:20:58 +01:00
Thomas Tanghus c5c843bfef Improved upgrading VCARD v. 2.1 => 3.0. Improved import of malformed cards. Remove duplicate code. 2012-02-21 23:22:06 +01:00
Thomas Tanghus e0c92662f8 JS fix on address book creation. 2012-02-21 23:22:06 +01:00
Thomas Tanghus a79f5d40de Remove my FIXME comments when I've fixed it :-P 2012-02-21 23:22:06 +01:00
Robin Appelman c20319d377 fix incorrect information in the filecache when using encryption 2012-02-21 20:48:49 +01:00
Robin Appelman d9c7e4c333 proper mimetypes for encrypted files 2012-02-21 20:48:48 +01:00
Robin Appelman 325858e9e2 add stream wrapper for in-memory files and dont use global variables for the fakedir stream wrapper 2012-02-21 20:48:48 +01:00
Robin Appelman c121a1a1e7 implement file_put_contents with stream data using fopen 2012-02-21 20:48:48 +01:00
Robin Appelman 6a8364c3ff rework the way file_put_contents is handeled 2012-02-21 20:48:48 +01:00
Robin Appelman 95459d068e non existing files can never be updated 2012-02-21 20:48:48 +01:00
Robin Appelman 1cffeefa06 move implementation of from/toTmpFile from the file storage to the filesystem 2012-02-21 20:48:48 +01:00
Robin Appelman 6658f51098 provide early file system when using webdav 2012-02-21 20:48:48 +01:00
Robin Appelman b3a974d8bb only trigger hooks for the default filesystem view 2012-02-21 20:48:48 +01:00
Robin Appelman 501678f981 always mount the root filesystem, sometimes we need the filesystem when not logged in 2012-02-21 20:48:48 +01:00
Robin Appelman f1cbb9effc initial integration of encryption 2012-02-21 20:48:48 +01:00
Robin Appelman e53e7990c4 improve get_temp_dir() implementation 2012-02-21 20:48:48 +01:00
Robin Appelman fd4b30ac6f no post hooks for fopen 2012-02-21 20:48:48 +01:00
Robin Appelman e9af218562 use streams instead of temporary files for cross-storage copy and rename 2012-02-21 20:48:48 +01:00
Robin Appelman e2b4954176 simple file encryption wip 2012-02-21 20:48:48 +01:00
Robin Appelman 82394f9527 add option to dissable fileproxies 2012-02-21 20:48:47 +01:00
Robin Appelman 3d67cd51c2 encryption proxy wip 2012-02-21 20:48:47 +01:00
Robin Appelman abc749feeb make documentation reflect reality a bit better 2012-02-21 20:48:47 +01:00
Robin Appelman b6ed61eab2 pass paramters to file proxies by reference so they can be modified 2012-02-21 20:48:47 +01:00
Bart Visscher d3e6ea6ac0 Bookmarks: uses the core action icons 2012-02-21 20:28:24 +01:00
Georg Ehrke 3d8d6d718b add 'permissions' as a sql condition in allSharedwithuser 2012-02-21 20:10:52 +01:00
Bart Visscher 86d2927c02 Calendar: Correct calendarcolor format for ical color property 2012-02-21 20:10:40 +01:00
Bart Visscher 987845c312 Move the redirect_url from linkTo function to the checkLoggedIn function 2012-02-21 20:09:24 +01:00
Georg Ehrke 236d2aa5b8 rename updatecalendar to update 2012-02-21 19:42:48 +01:00
Georg Ehrke e227a65f66 Merge remote-tracking branch 'origin/calendar_sharing' into calendar_sharing 2012-02-21 19:36:42 +01:00
Georg Ehrke 70a369e16d change links in the event form for the new ajax folders 2012-02-21 19:16:14 +01:00
Marvin Thomas Rabe 21f8d0992f Added missing files 2012-02-21 18:29:49 +01:00
Alessandro Cosentino 36b7d819e5 restore redirect after checkLoggedIn 2012-02-21 10:22:17 -05:00
Thomas Tanghus be948a9baa Check for empty value in ctor and being conservative about configvalue name ;-) 2012-02-21 09:53:03 +01:00
Thomas Tanghus 7c7031df44 Forgot to assign param. 2012-02-21 00:02:27 +01:00
Thomas Tanghus c691c9d24c Merge branch 'vcategories' of gitorious.org:owncloud/owncloud into vcategories 2012-02-20 23:43:59 +01:00
Thomas Tanghus 7a49c8e59c Merge gitorious.org:owncloud/owncloud into vcategories 2012-02-20 23:42:06 +01:00
Thomas Mueller 6540bda238 some icons for filetypes have been added.
for licensing information please have look at core/img/filetypes/readme-2.txt
2012-02-20 22:33:38 +01:00
Bart Visscher 77ab89a7cb Review changes of OC_VCategory 2012-02-20 22:32:57 +01:00
VicDeo d5f7a39936 Contact list scroll fix 2012-02-20 23:54:23 +03:00
Thomas Tanghus ffdfe8257b Contacts: Fix adding/updating address book with empty name. 2012-02-20 15:24:54 +01:00
Thomas Tanghus 456ada01fa Contacts: Apply strip_tags on compound values. 2012-02-20 14:36:21 +01:00
Thomas Tanghus 12bcbcdc62 Update ctag in deleteFromDAVData. 2012-02-20 14:24:10 +01:00
Thomas Tanghus 8ed4262393 Merge gitorious.org:owncloud/owncloud into vcategories 2012-02-20 13:18:22 +01:00
Thomas Tanghus 430ccef09c Added OC_VCategories::rescan() 2012-02-20 13:16:51 +01:00
Georg Ehrke 0ae2e250f5 change pathes in calendar/templates/* files to make them work with the new folder structure in /calendar/ajax 2012-02-20 11:52:19 +01:00
Georg Ehrke a069d83f44 fix unexspected T-String in calendars index.php 2012-02-20 11:46:10 +01:00
Georg Ehrke ec7ed3c882 add rw and r to events.php 2012-02-20 11:35:19 +01:00
Georg Ehrke 619c62e681 change parameter names for shared calendars 2012-02-20 11:31:41 +01:00
Georg Ehrke 548a2e6263 add readonly calendar to the eventsources 2012-02-20 11:28:20 +01:00
Georg Ehrke 3efa69bc84 update js files for new ajax pathes 2012-02-20 11:27:25 +01:00
Georg Ehrke 1cf7fc261f better var name in changeview.php 2012-02-20 11:26:43 +01:00
Georg Ehrke 8dff0fb58d add moved files to clean up ajax folder 2012-02-20 11:26:22 +01:00
Georg Ehrke ceb0016bdc remove old ajax files 2012-02-20 11:25:42 +01:00
Arthur Schiwon 30d524b426 load apps before logout so that logout-hook works 2012-02-20 11:21:46 +01:00
Arthur Schiwon 7ff4e40b20 Combing LDAP backend with LDAP extended backend 2012-02-20 10:39:55 +01:00
Alessandro Cosentino 490c9db15d Added bookmarklet for browser. Inspired by Google Bookmarks 2012-02-19 20:18:27 -05:00
Thomas Tanghus c62673d360 Added public static OC_VCategories object to OC_Contacts_App.
Parse cards for new categories in add and edit methods.
2012-02-19 23:32:09 +01:00
Florian Pritz 9d2379742b apps/calendar: update ctag after deleteFromDAVData
Without this clients won't see the update because they compare ctags
before fetching the actual calendar to reduce traffic.

Signed-off-by: Florian Pritz <bluewind@xinu.at>
2012-02-19 21:42:47 +01:00
Thomas Tanghus 8a1b671fdd Switch from using separate db table to use OC_Preferences.
There is a limitation in that the the configvalue field in the preferences table is a varchar(255).
2012-02-19 17:00:07 +01:00
Thomas Tanghus adec09b075 Merge gitorious.org:owncloud/owncloud into vcategories 2012-02-19 13:11:13 +01:00
Michael Gapczynski 87627c7a50 Fix overwriting of internal sharing for shared folders - bug oc-260 2012-02-18 19:30:54 -05:00
Tom Needham 71a2241aee Fixed call to OC_User. Thanks Burillo on IRC 2012-02-18 23:53:10 +00:00
Thomas Tanghus 2ee2f87efe Strip tags on address on client side. 2012-02-18 11:49:31 +01:00
Thomas Tanghus 868cf6bb83 Avoid errors from missing GD library. 2012-02-18 11:49:31 +01:00
Thomas Tanghus 96612c506e Removed obsolete commented code and made minor speed improvements.
Added stub function for loading categories.
2012-02-18 11:49:31 +01:00
Thomas Tanghus 71aa36c3f1 ETags must be quoted. 2012-02-18 11:49:31 +01:00
Thomas Tanghus 0203f55fbf Added first draft of OC_VCategories. 2012-02-18 11:45:36 +01:00
Thomas Tanghus a3e58157ee Strip tags on address on client side. 2012-02-18 11:42:58 +01:00
Georg Ehrke d8734cee02 fix sql command 2012-02-18 11:21:07 +01:00
Michael Gapczynski 6f1ed85f0b Temporary fix for sharing files 2012-02-17 21:56:20 -05:00
Bart Visscher 1fa05894d5 Move config.php writable test to update path
This should make it possible to use owncloud with a read-only config.php
2012-02-17 22:10:03 +01:00
Bart Visscher 45cff7b737 Move storing "last updated at" time to the app config
This way the config.php file is not changed every time you go to the
personal page. Step to make it possible to have a read-only config.php
most of the time
2012-02-17 22:10:03 +01:00
Bart Visscher bd7227bb93 Spelling fix hint text 2012-02-17 22:10:02 +01:00
Bart Visscher 6bbd67c3c6 Calendar: only update default view when it really changed 2012-02-17 22:10:02 +01:00
Bart Visscher 539fd7240c Calendar: optimize sending calendar events, also enabled caching of result 2012-02-17 22:09:31 +01:00
Bart Visscher a33b757b19 Calendar: Add default repeat values when editing a non-repeating event 2012-02-17 22:09:22 +01:00
Bart Visscher dab5531474 Bookmarks: Fix image urls in bookmarks.js 2012-02-17 22:07:15 +01:00
Bart Visscher e8b69d45a3 Fixup use of OC_Helper::linkTo function 2012-02-17 22:07:14 +01:00
Bart Visscher f47444e1f7 Use separate function to make absolute urls 2012-02-17 22:07:14 +01:00
Bart Visscher 5f3c549227 Contacts: Add removed app enabled check 2012-02-17 22:07:14 +01:00
Bart Visscher f54c767d72 Fix parameter of OC_Response::sendFile 2012-02-17 22:07:13 +01:00
Bart Visscher bcbebe390b Document OC_Response 2012-02-17 22:07:13 +01:00
Georg Ehrke 011bc1e764 fix unsharing of groups 2012-02-17 21:19:04 +01:00
Thomas Tanghus 6e35d50cbb Avoid errors from missing GD library. 2012-02-17 19:04:12 +01:00
Henning Becker 62da0bae43 Handle event exceptions in calendar app. Execeptions to recurring events are not shown anymore. 2012-02-17 14:32:02 +01:00
Georg Ehrke a3b8d54576 Merge branch 'master' into calendar_sharing 2012-02-17 14:14:53 +01:00
Thomas Tanghus 98b2d2db3d Removed obsolete commented code and made minor speed improvements.
Added stub function for loading categories.
2012-02-17 09:35:18 +01:00
Thomas Tanghus 496c1581d7 ETags must be quoted. 2012-02-16 23:24:23 +01:00
Thomas Tanghus 86893ea78c UI tweaks for name selector combobox. 2012-02-16 10:38:00 +01:00
Thomas Tanghus 0e2531ba57 Added method for loading from file handle. 2012-02-16 10:38:00 +01:00
Thomas Tanghus fa7fabf024 Minor tweaks 2012-02-16 10:38:00 +01:00
Robin Appelman 20553c1afe Revert "remove the 3rdparty files. everything is now in https://gitorious.org/owncloud/3rdparty"
This reverts commit dccdeca258.
2012-02-16 09:44:49 +01:00
Robin Appelman 19827b8b35 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-02-16 09:42:30 +01:00
Frank Karlitschek dccdeca258 remove the 3rdparty files. everything is now in https://gitorious.org/owncloud/3rdparty 2012-02-15 20:40:37 +01:00
Robin Appelman c2fb5fed02 use cached size for getting the size of a moved file 2012-02-15 14:43:06 +01:00
Tom Needham e6b835bea8 Update breadcrumb css on close 2012-02-14 21:55:51 +00:00
Tom Needham aec6a3c32f Fix editing shared files and file opening bug. Fixes oc-209 and oc-195 2012-02-14 21:49:51 +00:00
Frank Karlitschek 127c0c7033 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-02-14 16:34:33 +01:00
Frank Karlitschek d53ed4b40b make it possible to override every image and logo with a new version from within a theme. I think we have a very cool theming here. *self-praise* 2012-02-14 16:32:38 +01:00
Thomas Tanghus 31dab0372d Added some fixes for what to show when address books are (de)selected, all contacts deleted etc. Still need some cleaning up. 2012-02-14 13:57:11 +01:00
Thomas Tanghus ae426ad115 Added some check for when addinf deleting contacts. 2012-02-14 10:36:22 +01:00
Klaas Freitag 064f87680b Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-02-14 10:01:20 +01:00
Klaas Freitag 60a03580ff allow to set a files mtime through a PROPPATCH request on resource
'lastmodified'. Needed for syncing algorithms.
2012-02-14 09:59:54 +01:00
Thomas Tanghus f7161bb48b Added some error checking as mentioned in http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-227 2012-02-14 02:15:21 +01:00
Thomas Tanghus dc20900e10 Modify check for missing UID. 2012-02-14 01:56:38 +01:00
Thomas Tanghus 53503148f3 Use proper index file. 2012-02-14 01:47:18 +01:00
Thomas Tanghus 4446854f75 Don't try to load a profile picture for contacts the doesn't have any. 2012-02-14 01:11:21 +01:00
Thomas Tanghus 07c422d81d Removed superfluous debug. 2012-02-14 01:02:01 +01:00
Thomas Tanghus 3adaacc0ce Added OC_Contacts_VCard::moveToAddressBook 2012-02-14 01:00:41 +01:00
Thomas Tanghus 024405e4f1 Added function for later testing. 2012-02-14 01:00:41 +01:00
Robin Appelman 3c52ac7af3 make local filestorage comply with test cases 2012-02-14 01:00:41 +01:00
Robin Appelman bfa18fde19 dummy data for tests cases 2012-02-14 01:00:41 +01:00
Robin Appelman 7323b52560 some additional test cases for file storage backends 2012-02-14 01:00:41 +01:00
Bart Visscher a37bd93222 External: Use OC_Util::checkLoggedIn 2012-02-14 00:13:04 +01:00
Bart Visscher 777804fac2 Gallery: remove unused cover.php 2012-02-14 00:12:22 +01:00
Bart Visscher 525306c1e2 Replace Expires and caching headers by OC_Response functions 2012-02-13 23:48:05 +01:00
Bart Visscher 29fc82c364 Send gallery album thumbnail with OC_Response::sendFile 2012-02-13 23:35:37 +01:00
Bart Visscher 594dcf13f2 Contacts+OC_Respone: Move enableCaching out of setEtagHeader and setLastModifiedHeader 2012-02-13 22:47:31 +01:00
Bart Visscher 0fd5252cfc OC_Image: Move Content-Type header to show function 2012-02-13 22:41:05 +01:00
Bart Visscher 169ddc5b0b Gallery: Only get local file when generating photo thumbnail 2012-02-13 22:39:30 +01:00
Bart Visscher e137020f67 Gallery: Use OC_Respone::enableCaching for (album)thumbnails 2012-02-13 22:38:34 +01:00
Bart Visscher 363fdc40b8 OC_Response: Set Expire and Cache-Control headers in enableCaching 2012-02-13 22:37:27 +01:00
Bart Visscher 7208abf618 OC_Response: fix var name bugs 2012-02-13 22:35:48 +01:00
Bart Visscher e084386770 Gallery: Move login check to beginning of galleryOp.php 2012-02-13 22:33:52 +01:00
Bart Visscher e402896001 Gallery: Remove autoloaded includes from galleryOp.php 2012-02-13 22:33:48 +01:00
Georg Ehrke 01827e9340 Merge branch 'master' into calendar_sharing 2012-02-13 17:08:52 +01:00
Georg Ehrke d10f4f071d Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-02-13 17:07:24 +01:00
Robin Appelman d6aa5ac7e8 make local filestorage comply with test cases 2012-02-13 10:27:00 +01:00
Robin Appelman 31ea39360c dummy data for tests cases 2012-02-13 10:26:40 +01:00
Robin Appelman 3030f13d5f some additional test cases for file storage backends 2012-02-13 10:25:45 +01:00
Georg Ehrke 40d343e2af fix oc-bug 239 - & => &amp; 2012-02-12 22:34:10 +01:00
Bart Visscher a25bda8e41 Add application name to title 2012-02-12 21:56:01 +01:00
Bart Visscher 5c816c0cc9 Contacts: Optimize thumbnail cache handling a bit 2012-02-12 20:40:52 +01:00
Bart Visscher 125cf79a37 OC_Response: add setExpiresHeader function 2012-02-12 20:40:52 +01:00
Bart Visscher 45bb6f5fd4 OC_Response: add redirect function 2012-02-12 20:40:52 +01:00
Bart Visscher ee7931f457 Contacts: Add missing parameter 2012-02-12 20:40:52 +01:00
Robin Appelman 3579446930 use SimpleTest for unit testing
includes some tests for storage providers, more to come
2012-02-12 18:07:58 +01:00
Bart Visscher 0917bdecdd Contacts: Move response caching to OC_Response 2012-02-12 17:21:33 +01:00
Tom Needham a0bb6079c5 Add description to texteditor info.xml -fix oc-234 2012-02-12 15:42:05 +00:00
Bart Visscher f5385e4a63 Contacts: Add id to vars with id in them 2012-02-12 16:12:46 +01:00
Bart Visscher 623afb69b6 Contacts: cleanup OC_L10N usage 2012-02-12 16:11:41 +01:00
Bart Visscher 39f342d595 Contacts: Move debug logging of $_POST to after access checks 2012-02-12 15:58:55 +01:00
Bart Visscher 6eb1427ac0 Contacts: Document usage of OC_Contacts_App::getAddressbook
Remove redundant access checks and add comments to the calls to
OC_Contacts_App::getAddressbook that are access checks
2012-02-12 15:55:36 +01:00
Bart Visscher b77132edbe Contacts: Save last-modified time in REV property if not set 2012-02-12 15:14:25 +01:00
Bart Visscher 6bd0aad117 Contacts: Fix adding N property in getContactVCard 2012-02-12 15:14:24 +01:00
Bart Visscher facd4cbe17 Contacts: Cleanup photo and thumbnail code 2012-02-12 15:14:24 +01:00
Bart Visscher 3eff161bbf OC_Image: Use valid function instead of checking the resource 2012-02-12 15:14:24 +01:00
Bart Visscher 90d189a8b3 Access check fix in contacts/ajax/activation.php
plus small cleanup
2012-02-12 15:14:24 +01:00
Bart Visscher 8f3da6ee9b Small coding style update
Fixup OC_Contacts_App
2012-02-12 15:14:23 +01:00
Bart Visscher 1a74f0a18c Improve logging in OC_Contacts_App
Add logging to errors paths in getAddressbook and getContactObject.
2012-02-12 15:14:23 +01:00
Bart Visscher c4ee924869 Cleanup OC_Contacts_Addressbook::find usage
Use OC_Contacts_App::getAddressbook($id) instead of OC_Contacts_Addressbook::find($id), it contains access checks.
2012-02-12 15:14:23 +01:00
Bart Visscher 192b8906a3 Add copyright to OC_Connector_Sabre_Principal 2012-02-12 15:14:23 +01:00
Georg Ehrke c9db88aa3b Merge branch 'master' into calendar_sharing 2012-02-12 10:46:34 +01:00
Georg Ehrke 73038156cc check userrights in events.php 2012-02-12 10:40:57 +01:00
Frank Karlitschek 95e7be4aec Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-02-12 00:02:14 +01:00
Frank Karlitschek 5408a26234 add a README 2012-02-12 00:01:46 +01:00
Michael Gapczynski 6929652e14 Redirect to installer if not installed 2012-02-11 17:37:47 -05:00
Frank Karlitschek 26a5c13906 Merge branch 'master' of gitorious.org:owncloud/owncloud 2012-02-11 23:26:42 +01:00
Frank Karlitschek 340b6bf3ad add themeing support and support for autoselection of mobile/tablet and standalone css/jss files and templates 2012-02-11 23:25:35 +01:00
Bart Visscher b5418173e5 Derive the user principles from the owncloud users
The code for updating the principles table is still there. To make it easier to
revert this commit if that is necessary.
2012-02-11 21:09:51 +01:00
Georg Ehrke 1bd3b65069 Revert "initial project import from KDevelop"
This reverts commit 1a0c273a20.
2012-02-11 14:04:44 +01:00
Georg Ehrke db23ec5c1c show shared calendars 2012-02-11 14:02:51 +01:00
Georg Ehrke 66ac6c232c fix sharing calendar manager 2012-02-11 13:30:15 +01:00
Tom Needham 20b9678789 replace database name and table prefix with default values 2012-02-10 20:23:28 +00:00
Georg Ehrke 1a0c273a20 initial project import from KDevelop 2012-02-10 20:04:49 +01:00
Stefan Göckeritz d9db6e73d8 bugfix for oc-236 2012-02-10 19:40:18 +01:00
Georg Ehrke a8b7ae515c Merge branch 'master' into calendar_sharing 2012-02-10 19:36:00 +01:00
Thomas Tanghus 1d6b4f8f3c Merge branch 'tanghus_contacts' 2012-02-10 16:44:06 +01:00
Thomas Tanghus b4924ed1e5 Variable wasn't reset. 2012-02-10 16:43:40 +01:00
Thomas Tanghus fd9ce6da35 Merge gitorious.org:owncloud/owncloud into tanghus_contacts 2012-02-10 16:42:45 +01:00
Thomas Tanghus c95e8a1fc5 Added custom combobox widget. 2012-02-10 16:40:40 +01:00
Tom Needham 2f80df1f9e Merge branch 'master' of gitorious.org:owncloud/owncloud into migration 2012-02-10 15:24:26 +00:00
Klaas Freitag 85853f9ec2 - Added the ability to change a files mtime via webdavs propset.
- Added some minor debug help to fscache
2012-02-10 11:30:38 +01:00
Bart Visscher 9379c3e128 Gallery: remove unset call, not needed anymore 2012-02-09 22:47:05 +01:00
Bart Visscher 8684e847b0 OC_Image: change static vars to object vars 2012-02-09 22:44:26 +01:00
Robin Appelman b4d84bd9bb dont try to remove buffers, can cause trouble with strict warnings 2012-02-09 19:53:02 +01:00
Robin Appelman c4864b4a54 don't use PDO::inTransaction 2012-02-09 19:53:02 +01:00
Thomas Tanghus 25f1263c11 Merge gitorious.org:owncloud/owncloud into tanghus_contacts 2012-02-09 19:07:54 +01:00
Thomas Tanghus ff53b0c209 Keep js data structure in sync on changes.
More checks for missing properties.
2012-02-09 19:04:07 +01:00
Robin Appelman 25381ac5b1 fix filecache with MDB2 2012-02-08 21:39:09 +01:00
Robin Appelman 398fbe7b82 use fetchRow instead of fetch 2012-02-08 21:26:45 +01:00
Bart Visscher 88b2391d2b Fix wrong var name in sharedstorage.php 2012-02-08 21:12:31 +01:00
Bart Visscher 7cd1a302d3 Gallery: Add caching headers to album thumbnail sending 2012-02-08 21:12:31 +01:00
Bart Visscher 158360c09b Gallery: use thumbnails of images for the album thumbnail
The thumbnails were already generated in this function, but now we save them
for displaying of the album.
2012-02-08 21:12:31 +01:00
Bart Visscher 43d2266f5c Add caching to gallery thumbnail generation 2012-02-08 21:12:30 +01:00
Bart Visscher eb5de4d4f7 Change gallery thumbnail generation to OC_Image 2012-02-08 21:12:30 +01:00
Bart Visscher 7c03b612d2 OC-41: [Calendar] Date format not translatable 2012-02-08 21:12:30 +01:00
Robin Appelman 24748ee10f add convinience function to get filesystem view for app storage 2012-02-08 21:01:09 +01:00
Robin Appelman c4a6b99814 use oc_filecache and oc_eventsource for music scanning 2012-02-08 17:30:16 +01:00
Robin Appelman bcebfbfbe2 bugfix in searching files by mimetype 2012-02-08 17:29:54 +01:00
Georg Ehrke 9fd07ee10d Merge branch 'master' into calendar 2012-02-08 17:13:50 +01:00
Robin Appelman 36d696c30d dont load pdfview for ie 2012-02-08 16:28:59 +01:00
Robin Appelman 5f7727629a Merge branch 'filesystem' 2012-02-08 15:50:58 +01:00
Thomas Tanghus 25faa40bd0 More @£#¤ conflicts
Merge branch 'temp' into tanghus_contacts
2012-02-08 09:36:16 +01:00
Thomas Tanghus f4a586a52c Fix merge conflicts 2012-02-08 09:18:58 +01:00
Thomas Tanghus c191ef6459 Added files for new contact editor/viewer. 2012-02-08 09:14:10 +01:00
Thomas Tanghus 0c5eb542bd Fixed broken "Add new" contact.
Possible fix for cards with missing 'FN' property added through DAV.
Misc. UI cleanups.
2012-02-08 08:47:03 +01:00
Thomas Tanghus 6112cdc7e8 Hide container for emails/phones/adresses if there are none. 2012-02-08 08:47:03 +01:00
Thomas Tanghus 9f1370a6d1 Updated copyrights.
Element menu didn't update.
2012-02-08 08:47:03 +01:00
Thomas Tanghus c0c6b5310e Added files for new contact editor/viewer. 2012-02-08 08:47:03 +01:00
Thomas Tanghus 3e9a69b9b7 Merge branch 'tanghus_contacts' of gitorious.org:owncloud/owncloud into tanghus_contacts
Conflicts:
	apps/contacts/ajax/contactdetails.php
	apps/contacts/js/contacts.js
2012-02-08 08:33:51 +01:00
Thomas Tanghus 424c64c0eb Don't import cards that can't be parsed by Sabre, but log it instead.
Fix missing 'N' or 'FN' fields on import.
2012-02-08 07:59:39 +01:00
Thomas Tanghus 249e46c5b7 Some fixes for malformed VCards. 2012-02-08 07:59:39 +01:00
Thomas Tanghus 4db661ba9d Fixed broken "Add new" contact.
Possible fix for cards with missing 'FN' property added through DAV.
Misc. UI cleanups.
2012-02-08 07:59:39 +01:00
Thomas Tanghus 23396721e4 Hide container for emails/phones/adresses if there are none. 2012-02-08 07:59:39 +01:00
Thomas Tanghus 1e4444f25b Updated copyrights.
Element menu didn't update.
2012-02-08 07:59:39 +01:00
Thomas Tanghus 90a830baba Added files for new contact editor/viewer. 2012-02-08 07:59:39 +01:00
Georg Ehrke cdf1cf82ba merge 64a617b2a1 into master 2012-02-07 22:49:23 +01:00
Robin Appelman e50dfbc228 fix filecache when creating a new folder 2012-02-06 19:33:37 +01:00
Thomas Tanghus 2cebfb50a4 Fixed broken "Add new" contact.
Possible fix for cards with missing 'FN' property added through DAV.
Misc. UI cleanups.
2012-02-06 14:18:40 +01:00
Thomas Tanghus 5962e66b6d Hide container for emails/phones/adresses if there are none. 2012-02-06 08:15:23 +01:00
Thomas Tanghus bc79951f33 Updated copyrights.
Element menu didn't update.
2012-02-06 08:04:06 +01:00
Thomas Tanghus 3af427fa54 Added files for new contact editor/viewer. 2012-02-06 07:32:57 +01:00
Thomas Tanghus 89616d81f0 Modification for adding photos. 2012-02-06 07:24:39 +01:00
Tom Needham 960dd750c9 Added dbexport to export output. Initial import code. 2012-02-05 23:00:38 +00:00
Robin Appelman 9f3388ecbc store writable flag for files 2012-02-05 14:04:10 +01:00
Robin Appelman 30673e4786 writable not writeable 2012-02-05 14:03:44 +01:00
Georg Ehrke 89073970d3 change comments in import.php 2012-02-05 12:13:53 +01:00
Georg Ehrke 8337eaa1ec add import function for contacts 2012-02-05 12:13:53 +01:00
Robin Appelman 25e777ef5e watch for changes outside owncloud to the files 2012-02-05 03:06:33 +01:00
Robin Appelman 90c4666b12 fix bug in transactions with PDO 2012-02-05 01:24:06 +01:00
Robin Appelman 0bb48d814b fix bug in transactions with PDO 2012-02-05 01:23:41 +01:00
Robin Appelman 7c00aedc37 some improvements in file scanning 2012-02-05 01:23:04 +01:00
Robin Appelman 36bc1a2102 Merge branch 'master' into filesystem 2012-02-05 01:22:29 +01:00
Tom Needham 493ba20734 Updated readme url for install instructions 2012-02-04 23:40:47 +00:00
Georg Ehrke 55be59e738 Merge branch 'master' into calendar 2012-02-04 21:34:38 +01:00
Georg Ehrke 5e08d1bb40 Merge branch 'calendar' of gitorious.org:owncloud/owncloud into calendar 2012-02-04 21:27:18 +01:00
Georg Ehrke b810380d56 add sharing management for calendars 2012-02-04 21:23:31 +01:00
Bartek Przybylski cfc710e768 preferences store fix 2012-02-04 20:15:55 +01:00
Bartek Przybylski f6a27dfa28 stripping root from gallery name 2012-02-04 15:35:58 +01:00
Bartek Przybylski f1672d7d10 handling special chars in dirnames 2012-02-04 11:02:13 +01:00
Bartek Przybylski 5a106d1036 gallery: fix FS hooks 2012-02-04 10:30:32 +01:00
Tom Needham 24c79c5bce Updated Migrate_provider bookmakr implementation 2012-02-03 22:41:39 +00:00
Tom Needham 1133eaa679 load bookmarks provider class 2012-02-03 21:28:58 +00:00
Tom Needham ee88ded463 more commenting out for debugging, added logging commands 2012-02-03 21:00:12 +00:00
Tom Needham 0bbc9ade7d fix syntax, add logging, debug xml output instead of zip 2012-02-03 20:48:32 +00:00
Bartek Przybylski 8df0650658 gallery settings, defining scan root and shor order 2012-02-03 21:38:44 +01:00
Bartek Przybylski ee01d1a81d removing console error in safari for bookmarks 2012-02-03 21:37:09 +01:00
Tom Needham 5507db9b15 Initial migration code, and basic export for bookmarks 2012-02-03 20:32:06 +00:00
Georg Ehrke ab31a890b6 use strip_tags for calendar names 2012-02-02 21:23:41 +01:00
Robin Appelman 05d76dcd67 allow the usage of the filecache outside of the users home folder 2012-02-02 19:04:13 +01:00
Georg Ehrke bfa69c3e59 add a label calendar to the settings page - bugfix for oc-157 2012-02-02 18:37:06 +01:00
Thomas Tanghus 6225b5ec86 More in-/output sanitation, 2012-02-02 17:54:30 +01:00
Thomas Tanghus 66b96e4440 Sanitize in- and output. 2012-02-02 17:54:30 +01:00
Georg Ehrke f81ac81550 fix merge conflicts 2012-02-02 17:48:29 +01:00
Robin Appelman 7b9fb84fe9 Merge branch 'master' into filesystem 2012-02-02 17:30:54 +01:00
Georg Ehrke 92b8f32386 Calendar: Bugfix: better input validation 2012-02-02 15:01:05 +01:00
Georg Ehrke 91b705cc4f remove debug file 2012-02-02 12:37:58 +01:00
Georg Ehrke f870f9efcf validate parameters in changeview.php 2012-02-02 12:18:29 +01:00
Georg Ehrke 9e5172f75c Merge branch 'master' into calendar 2012-02-02 12:12:48 +01:00
Bartek Przybylski f198296576 gallery works in safari now 2012-02-01 22:15:46 +01:00
Marvin Thomas Rabe f999fbf81a Bookmark layout updated 2012-02-01 22:02:06 +01:00
Marvin Thomas Rabe bbd10a3c94 Bookmark layout updated 2012-02-01 21:19:31 +01:00
Marvin Thomas Rabe e4faea8f90 Fixed upload button display error 2012-02-01 20:58:04 +01:00
Robin Appelman d514b1d92d Merge branch 'master' into filesystem 2012-02-01 15:57:32 +01:00
David Iwanowitsch 6583d30e26 fix javascript 2012-02-01 15:40:59 +01:00
David Iwanowitsch e229a6adec Added searchprovider for bookmarks, initial l10n support for bookmark plugin
moved some code from updateList.php to bookmarks.php, to make it reusable
2012-02-01 15:40:59 +01:00
Robin Appelman 0124809a42 prevent sharing from making aditional http requests while scanning
additional requests to the server can block feedback of scannning depending on server configuration
2012-02-01 15:33:12 +01:00
Robin Appelman a69d3c3346 only show what folder we are scanning to save bandwith 2012-02-01 15:25:00 +01:00
Thomas Schmidt 4145e3b265 pre-select current language, sort available languages 2012-02-01 12:00:38 +01:00
Georg Ehrke 39d312861a add active to the db structure of shared calendars 2012-01-31 22:33:39 +01:00
Georg Ehrke 2b8ec1cad0 Calendar: fix html of import dialog 2012-01-31 22:03:08 +01:00
Georg Ehrke 153467dbe0 add share as a tab 2012-01-31 21:39:40 +01:00
Georg Ehrke 7b82d153c7 Merge branch 'master' into calendar 2012-01-31 21:35:08 +01:00
Georg Ehrke 3a5d3dfd97 increase version number to force db upgrade 2012-01-31 21:33:50 +01:00
Georg Ehrke 32bff22dc7 change db structure of calendar for sharing calendars 2012-01-31 21:26:09 +01:00
Georg Ehrke 64a617b2a1 fix all day with one day to much - bugfix for oc-126 2012-01-31 20:46:27 +01:00
Thomas Tanghus 1f718d31e1 Merge branch 'tanghus_contacts' 2012-01-31 19:35:11 +01:00
Thomas Tanghus 6c340416d9 Resize profile picture if bigger than 200px on either x or y.
Bolded text on message box.
2012-01-31 19:32:24 +01:00
Thomas Tanghus 3f1486534f - Fixed http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-93
Property was added multiple times.
- Fixed http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-8
  "Missing "N" field: Contacts app not compatible with vcard 3.0 format"
- Almost sure I've fixed http://bugs.owncloud.org/thebuggenie/owncloud/issues/oc-27
  "Full name in Contacts app doesn't sync to iOS 5 contacts" because it is caused by oc-8
2012-01-31 19:30:56 +01:00
Thomas Tanghus db1f77e4f5 Some reminders in the code of what I have to change post OC3.0 2012-01-31 19:30:56 +01:00
Georg Ehrke 149bbeb260 make tab names translatable 2012-01-31 17:15:25 +01:00
Georg Ehrke f91702d7b5 Merge branch 'master' into calendar 2012-01-31 17:03:48 +01:00
Georg Ehrke c72c4dd412 add alarm as a tab 2012-01-31 16:59:34 +01:00
Georg Ehrke 4c1fb4c282 fix style of the tabs 2012-01-31 16:49:21 +01:00
Robin Appelman 12681e92b0 Merge branch 'master' into filesystem 2012-01-31 16:36:29 +01:00
Robin Appelman fdf3df3de5 add option to send get data along with an eventsource request 2012-01-31 16:35:47 +01:00
Robin Appelman 371b4642bb proper file sorting 2012-01-31 16:33:47 +01:00
Robin Appelman f1c5dce75c dont try to use something that isn't there 2012-01-31 16:33:36 +01:00
Robin Appelman c46f701771 use filesystem cache for searching 2012-01-31 16:12:49 +01:00
Robin Appelman df67c35017 some fixes to scanning 2012-01-31 16:12:38 +01:00
Robin Appelman 7ff86cfebe provide live feedback while scanning files 2012-01-31 13:56:58 +01:00
Robin Appelman 803f86e0fc dont try to use the filesystem when it isnt setup yet 2012-01-31 12:44:01 +01:00
Georg Ehrke 538618df62 Merge branch 'master' into calendar 2012-01-31 11:58:40 +01:00
Georg Ehrke fc70c7094a add tabs for repeating and attendees in the event form 2012-01-31 11:57:09 +01:00
Georg Ehrke 217151eb9c add textfield style declaration 2012-01-31 11:50:45 +01:00
Robin Appelman ffecc3e434 start of proper feedback during filessytem scan 2012-01-30 23:32:55 +01:00
Robin Appelman 8543e79713 add option to send get data along with an eventsource request 2012-01-30 23:26:01 +01:00
Robin Appelman 1191b57b34 Merge branch 'master' into filesystem 2012-01-30 23:20:47 +01:00
Robin Appelman 6a1121ab2e provide server side close option for EventStream 2012-01-30 23:19:58 +01:00
Michael Gapczynski e0f655fb70 Sharing app needs to be loaded for public link of file in Shared folder - fixes bug 113 2012-01-30 16:49:24 -05:00
Frank Karlitschek 0ba315912b fix outdated README file 2012-01-30 22:05:31 +01:00
Robin Appelman 4522d19b4c merge master into filesystem 2012-01-30 20:29:33 +01:00
Robin Appelman 45038af948 provide small wrapper around server side events and provide a fallback for IE 2012-01-30 20:21:16 +01:00
Bartek Przybylski 5574b87e9b new gallery look and feel 2012-01-30 19:36:33 +01:00
Robin Appelman 3552626358 Merge branch 'master' into filesystem 2012-01-20 00:48:03 +01:00
Robin Appelman 11c848b221 initial work on filesystemview 2012-01-20 00:48:00 +01:00
Robin Appelman a1dfe16d0a postgresql needs contraint names to be unque across the database, not only the table 2012-01-16 14:36:47 +01:00
Robin Appelman d7ed456f96 forgot to merge something 2012-01-16 14:36:11 +01:00
Robin Appelman 96e2f15d8a merge master into filesystem 2012-01-16 03:06:11 +01:00
Robin Appelman ccc43f0ea0 merge master into filesystem 2012-01-08 18:01:33 +01:00
Robin Appelman 799a7db638 Merge branch 'filesystem' of gitorious.org:owncloud/owncloud into filesystem 2012-01-08 01:57:14 +01:00
Robin Appelman d1edc360d9 merge master into filesystem 2012-01-08 01:53:40 +01:00
Robin Appelman 8f8985c3e5 Merge branch 'database' 2012-01-08 01:45:18 +01:00
Michael Gapczynski a22b5feda6 Initial commit of common filestorage 2012-01-01 17:05:22 -05:00
Michael Gapczynski 7250dc4e98 Fix updateApp() and add extra check to updateApps() 2012-01-01 16:58:51 -05:00
Robin Appelman 3844fb0e4c also use fscache when getting used space for webdav 2011-12-14 01:19:23 +01:00
Robin Appelman 835d6a9b6e save quota in human readable format (42 MB), should prevent some of the overflow related problems 2011-12-14 01:16:14 +01:00
Robin Appelman a9e94a34c9 use fscache for getting used space 2011-12-14 01:15:07 +01:00
Robin Appelman c67c933d3f Merge branch 'database' into filesystem 2011-12-11 23:57:53 +01:00
Robin Appelman 9fdd1bafdc Merge branch 'master' into filesystem 2011-12-11 23:42:22 +01:00
Robin Appelman efecb694ef make filesize parsing case insensitive 2011-12-11 23:33:24 +01:00
Robin Appelman bd65c18f21 also update the data attribute holding the quota 2011-12-11 23:32:57 +01:00
Robin Appelman b41ca8bacb after editing a user quota, set the value of the quota field to how the server parsed the input, not the user input
this way the user can see when an invalid input is given
2011-12-11 23:23:59 +01:00
Robin Appelman a8148fa94a update apps when their version number increases 2011-12-11 22:08:01 +01:00
Robin Appelman 7f1bb5fd78 Merge branch 'master' into database 2011-12-11 22:00:17 +01:00
Bart Visscher 76c37792cb WIP 2011-12-09 21:41:21 +01:00
Bart Visscher 487c23e27f Merge branch 'master' into tasks 2011-12-08 20:06:26 +01:00
Bart Visscher 5e4f28ea21 Tasks: Fix php warnings with empty tasks list 2011-12-02 21:33:30 +01:00
Bart Visscher 9c5306d9b1 Merge branch 'master' into tasks 2011-12-02 21:25:23 +01:00
Robin Appelman 153029a170 increase version to trigger database upgrade 2011-11-26 01:26:01 +01:00
Robin Appelman a8e4d2946a Merge branch 'database' into filesystem 2011-11-26 01:25:08 +01:00
Robin Appelman 98dc0882cb fix errors during database migration 2011-11-15 16:08:08 +01:00
Robin Appelman 916c72b40b set the installed version after updating the database 2011-11-15 15:59:01 +01:00
Robin Appelman 9686c5b6aa fixes in the sqlite manager driver 2011-11-15 15:58:12 +01:00
Robin Appelman b2f1429b75 automatically upgrade the main database on version number increase (doesnt work with sqlite for now) 2011-11-13 16:16:21 +01:00
Robin Appelman aa7c5a971c small fix in sqlite3 driver 2011-11-13 16:08:47 +01:00
Robin Appelman 486a31bfa3 minor changes to mysql setup 2011-11-13 16:06:29 +01:00
Robin Appelman bf40691ace some fixes in the sqlite3 driver 2011-11-12 18:06:07 +01:00
Robin Appelman 024f4375b6 keep encrypted and versioned flag in fscache 2011-11-12 01:00:04 +01:00
Robin Appelman b2f2a87745 use cache for searching files 2011-11-10 23:50:43 +01:00
Robin Appelman 5a8235eca0 use force parameter 2011-11-10 16:54:45 +01:00
Robin Appelman 7543ffa3b1 always load the filecache 2011-11-10 16:53:08 +01:00
Robin Appelman 524e3686a0 tell the user when the files are being scanned 2011-11-10 16:40:09 +01:00
Robin Appelman 5a6aba1e11 provide caching for file metadata 2011-11-09 18:41:57 +01:00
Robin Appelman 5cc6635eb8 remove OC_Filesystem::fromUploadedFile 2011-11-08 22:36:05 +01:00
Robin Appelman ca6c500799 remove OC_Filesystem::fileatime 2011-11-08 22:26:03 +01:00
Robin Appelman ec015a2e68 remove the need to register storage providers, pass the classname during mounting instead 2011-11-08 22:21:25 +01:00
Robin Appelman 878fc1d197 remove outdated remote storage prototype 2011-11-08 22:18:41 +01:00
Bart Visscher c30aa4ddeb Start using OC_JSON in tasks app 2011-10-06 21:21:38 +02:00
Bart Visscher 16ee08385e Merge branch 'master' into tasks 2011-10-06 15:37:20 +02:00
Bart Visscher 0dd5fd5cd3 Mark form field with error message 2011-09-20 21:25:28 +02:00
Bart Visscher 8826aa8056 Add basic fields to tasks app 2011-09-17 21:55:06 +02:00
Bart Visscher 78863696b7 First version of tasks app 2011-09-17 21:55:06 +02:00
2286 changed files with 377308 additions and 106568 deletions
+5
View File
@@ -2,6 +2,8 @@
data
owncloud
config/config.php
config/mount.php
apps/inc.php
# just sane ignores
.*.sw[po]
@@ -38,6 +40,9 @@ nbproject
# Cloud9IDE
.settings.xml
# vim ex mode
.vimrc
# Mac OS
.DS_Store
Regular → Executable
+14 -4
View File
@@ -1,12 +1,22 @@
ErrorDocument 403 /core/templates/403.php
ErrorDocument 404 /core/templates/404.php
<IfModule mod_php5.c>
php_value upload_max_filesize 512M
php_value post_max_size 512M
php_value upload_max_filesize 513M
php_value post_max_size 513M
php_value memory_limit 512M
SetEnv htaccessWorking true
<IfModule env_module>
SetEnv htaccessWorking true
</IfModule>
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule ^.well-known/host-meta /public.php?service=host-meta [QSA,L]
RewriteRule ^.well-known/carddav /remote.php/carddav/ [R]
RewriteRule ^.well-known/caldav /remote.php/caldav/ [R]
RewriteRule ^apps/calendar/caldav.php remote.php/caldav/ [QSA,L]
RewriteRule ^apps/contacts/carddav.php remote.php/carddav/ [QSA,L]
RewriteRule ^apps/([^/]*)/(.*\.(css|php))$ index.php?app=$1&getfile=$2 [QSA,L]
RewriteRule ^remote/(.*) remote.php [QSA,L]
</IfModule>
Options -Indexes
+1954
View File
File diff suppressed because it is too large Load Diff
+586 -315
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -42,7 +42,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: Date.php,v 1.10 2006/03/01 12:15:32 lsmith Exp $
// $Id$
//
/**
+65 -47
View File
@@ -42,9 +42,9 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: Common.php,v 1.139 2008/12/04 11:50:42 afz Exp $
// $Id$
require_once('MDB2/LOB.php');
require_once 'MDB2/LOB.php';
/**
* @package MDB2
@@ -100,7 +100,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
function getValidTypes()
{
$types = $this->valid_default_values;
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -145,7 +145,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
$types = is_array($types) ? $types : array($types);
foreach ($types as $key => $type) {
if (!isset($this->valid_default_values[$type])) {
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -209,7 +209,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
return fopen('MDB2LOB://'.$lob_index.'@'.$this->db_index, 'r+');
}
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -232,10 +232,10 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function convertResult($value, $type, $rtrim = true)
{
if (is_null($value)) {
if (null === $value) {
return null;
}
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -263,7 +263,11 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function convertResultRow($types, $row, $rtrim = true)
{
$types = $this->_sortResultFieldTypes(array_keys($row), $types);
//$types = $this->_sortResultFieldTypes(array_keys($row), $types);
$keys = array_keys($row);
if (is_int($keys[0])) {
$types = $this->_sortResultFieldTypes($keys, $types);
}
foreach ($row as $key => $value) {
if (empty($types[$key])) {
continue;
@@ -313,7 +317,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
if (count($types)) {
reset($types);
foreach (array_keys($sorted_types) as $k) {
if (is_null($sorted_types[$k])) {
if (null === $sorted_types[$k]) {
$sorted_types[$k] = current($types);
next($types);
}
@@ -338,7 +342,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function getDeclaration($type, $name, $field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -387,7 +391,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function getTypeDeclaration($field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -453,7 +457,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function _getDeclaration($name, $field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -501,17 +505,17 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
$default = '';
if (array_key_exists('default', $field)) {
if ($field['default'] === '') {
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$valid_default_values = $this->getValidTypes();
$field['default'] = $valid_default_values[$field['type']];
if ($field['default'] === ''&& ($db->options['portability'] & MDB2_PORTABILITY_EMPTY_TO_NULL)) {
if ($field['default'] === '' && ($db->options['portability'] & MDB2_PORTABILITY_EMPTY_TO_NULL)) {
$field['default'] = ' ';
}
}
if (!is_null($field['default'])) {
if (null !== $field['default']) {
$default = ' DEFAULT ' . $this->quote($field['default'], $field['type']);
}
}
@@ -524,7 +528,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
// }}}
// {{{ _getCharsetFieldDeclaration()
/**
* Obtain DBMS specific SQL code portion needed to set the CHARACTER SET
* of a field declaration to be used in statements like CREATE TABLE.
@@ -583,7 +587,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
function _getIntegerDeclaration($name, $field)
{
if (!empty($field['unsigned'])) {
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -651,7 +655,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function _getCLOBDeclaration($name, $field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -687,7 +691,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function _getBLOBDeclaration($name, $field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -875,7 +879,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
$type = !empty($current['type']) ? $current['type'] : null;
if (!method_exists($this, "_compare{$type}Definition")) {
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1114,12 +1118,12 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function quote($value, $type = null, $quote = true, $escape_wildcards = false)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
if (is_null($value)
if ((null === $value)
|| ($value === '' && $db->options['portability'] & MDB2_PORTABILITY_EMPTY_TO_NULL)
) {
if (!$quote) {
@@ -1128,7 +1132,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
return 'NULL';
}
if (is_null($type)) {
if (null === $type) {
switch (gettype($value)) {
case 'integer':
$type = 'integer';
@@ -1218,7 +1222,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
return $value;
}
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1247,14 +1251,14 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
$close = false;
if (preg_match('/^(\w+:\/\/)(.*)$/', $value, $match)) {
$close = true;
if ($match[1] == 'file://') {
if (strtolower($match[1]) == 'file://') {
$value = $match[2];
}
$value = @fopen($value, 'r');
}
if (is_resource($value)) {
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1288,9 +1292,15 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function _quoteLOB($value, $quote, $escape_wildcards)
{
$value = $this->_readFile($value);
if (PEAR::isError($value)) {
return $value;
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
if ($db->options['lob_allow_url_include']) {
$value = $this->_readFile($value);
if (PEAR::isError($value)) {
return $value;
}
}
return $this->_quoteText($value, $quote, $escape_wildcards);
}
@@ -1369,11 +1379,11 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
function _quoteDate($value, $quote, $escape_wildcards)
{
if ($value === 'CURRENT_DATE') {
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
if (isset($db->function) && is_a($db->function, 'MDB2_Driver_Function_Common')) {
if (isset($db->function) && is_object($this->function) && is_a($db->function, 'MDB2_Driver_Function_Common')) {
return $db->function->now('date');
}
return 'CURRENT_DATE';
@@ -1398,11 +1408,11 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
function _quoteTimestamp($value, $quote, $escape_wildcards)
{
if ($value === 'CURRENT_TIMESTAMP') {
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
if (isset($db->function) && is_a($db->function, 'MDB2_Driver_Function_Common')) {
if (isset($db->function) && is_object($this->function) && is_a($db->function, 'MDB2_Driver_Function_Common')) {
return $db->function->now('timestamp');
}
return 'CURRENT_TIMESTAMP';
@@ -1427,11 +1437,11 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
function _quoteTime($value, $quote, $escape_wildcards)
{
if ($value === 'CURRENT_TIME') {
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
if (isset($db->function) && is_a($db->function, 'MDB2_Driver_Function_Common')) {
if (isset($db->function) && is_object($this->function) && is_a($db->function, 'MDB2_Driver_Function_Common')) {
return $db->function->now('time');
}
return 'CURRENT_TIME';
@@ -1517,7 +1527,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function writeLOBToFile($lob, $file)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1554,7 +1564,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function _retrieveLOB(&$lob)
{
if (is_null($lob['value'])) {
if (null === $lob['value']) {
$lob['value'] = $lob['resource'];
}
$lob['loaded'] = true;
@@ -1681,27 +1691,38 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function matchPattern($pattern, $operator = null, $field = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$match = '';
if (!is_null($operator)) {
if (null !== $operator) {
$operator = strtoupper($operator);
switch ($operator) {
// case insensitive
case 'ILIKE':
if (is_null($field)) {
if (null === $field) {
return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'case insensitive LIKE matching requires passing the field name', __FUNCTION__);
}
$db->loadModule('Function', null, true);
$match = $db->function->lower($field).' LIKE ';
break;
case 'NOT ILIKE':
if (null === $field) {
return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'case insensitive NOT ILIKE matching requires passing the field name', __FUNCTION__);
}
$db->loadModule('Function', null, true);
$match = $db->function->lower($field).' NOT LIKE ';
break;
// case sensitive
case 'LIKE':
$match = is_null($field) ? 'LIKE ' : $field.' LIKE ';
$match = (null === $field) ? 'LIKE ' : ($field.' LIKE ');
break;
case 'NOT LIKE':
$match = (null === $field) ? 'NOT LIKE ' : ($field.' NOT LIKE ');
break;
default:
return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
@@ -1713,9 +1734,6 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
if ($key % 2) {
$match.= $value;
} else {
if ($operator === 'ILIKE') {
$value = strtolower($value);
}
$escaped = $db->escape($value);
if (PEAR::isError($escaped)) {
return $escaped;
@@ -1755,7 +1773,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function mapNativeDatatype($field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1784,7 +1802,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function _mapNativeDatatype($field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1805,7 +1823,7 @@ class MDB2_Driver_Datatype_Common extends MDB2_Module_Common
*/
function mapPrepareDatatype($type)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
+59 -10
View File
@@ -43,10 +43,10 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: mysql.php,v 1.65 2008/02/22 19:23:49 quipo Exp $
// $Id$
//
require_once('MDB2/Driver/Datatype/Common.php');
require_once 'MDB2/Driver/Datatype/Common.php';
/**
* MDB2 MySQL driver
@@ -88,6 +88,35 @@ class MDB2_Driver_Datatype_mysql extends MDB2_Driver_Datatype_Common
return 'COLLATE '.$collation;
}
// }}}
// {{{ getDeclaration()
/**
* Obtain DBMS specific SQL code portion needed to declare
* of the given type
*
* @param string $type type to which the value should be converted to
* @param string $name name the field to be declared.
* @param string $field definition of the field
*
* @return string DBMS-specific SQL code portion that should be used to
* declare the specified field.
* @access public
*/
function getDeclaration($type, $name, $field)
{
// MySQL DDL syntax forbids combining NOT NULL with DEFAULT NULL.
// To get a default of NULL for NOT NULL columns, omit it.
if ( isset($field['notnull'])
&& !empty($field['notnull'])
&& array_key_exists('default', $field) // do not use isset() here!
&& null === $field['default']
) {
unset($field['default']);
}
return parent::getDeclaration($type, $name, $field);
}
// }}}
// {{{ getTypeDeclaration()
@@ -116,7 +145,7 @@ class MDB2_Driver_Datatype_mysql extends MDB2_Driver_Datatype_Common
*/
function getTypeDeclaration($field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -179,7 +208,15 @@ class MDB2_Driver_Datatype_mysql extends MDB2_Driver_Datatype_Common
case 'timestamp':
return 'DATETIME';
case 'float':
return 'DOUBLE';
$l = '';
if (!empty($field['length'])) {
$l = '(' . $field['length'];
if (!empty($field['scale'])) {
$l .= ',' . $field['scale'];
}
$l .= ')';
}
return 'DOUBLE' . $l;
case 'decimal':
$length = !empty($field['length']) ? $field['length'] : 18;
$scale = !empty($field['scale']) ? $field['scale'] : $db->options['decimal_places'];
@@ -219,7 +256,7 @@ class MDB2_Driver_Datatype_mysql extends MDB2_Driver_Datatype_Common
*/
function _getIntegerDeclaration($name, $field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -236,6 +273,9 @@ class MDB2_Driver_Datatype_mysql extends MDB2_Driver_Datatype_Common
$notnull = empty($field['notnull']) ? '' : ' NOT NULL';
$unsigned = empty($field['unsigned']) ? '' : ' UNSIGNED';
if (empty($default) && empty($notnull)) {
$default = ' DEFAULT NULL';
}
$name = $db->quoteIdentifier($name, true);
return $name.' '.$this->getTypeDeclaration($field).$unsigned.$default.$notnull.$autoinc;
}
@@ -308,7 +348,7 @@ class MDB2_Driver_Datatype_mysql extends MDB2_Driver_Datatype_Common
*/
function _getDecimalDeclaration($name, $field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -346,24 +386,30 @@ class MDB2_Driver_Datatype_mysql extends MDB2_Driver_Datatype_Common
*/
function matchPattern($pattern, $operator = null, $field = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$match = '';
if (!is_null($operator)) {
$field = is_null($field) ? '' : $field.' ';
if (null !== $operator) {
$field = (null === $field) ? '' : $field.' ';
$operator = strtoupper($operator);
switch ($operator) {
// case insensitive
case 'ILIKE':
$match = $field.'LIKE ';
break;
case 'NOT ILIKE':
$match = $field.'NOT LIKE ';
break;
// case sensitive
case 'LIKE':
$match = $field.'LIKE BINARY ';
break;
case 'NOT LIKE':
$match = $field.'NOT LIKE BINARY ';
break;
default:
return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'not a supported operator type:'. $operator, __FUNCTION__);
@@ -504,6 +550,9 @@ class MDB2_Driver_Datatype_mysql extends MDB2_Driver_Datatype_Common
case 'real':
$type[] = 'float';
$unsigned = preg_match('/ unsigned/i', $field['type']);
if ($decimal !== false) {
$length = $length.','.$decimal;
}
break;
case 'unknown':
case 'decimal':
@@ -531,7 +580,7 @@ class MDB2_Driver_Datatype_mysql extends MDB2_Driver_Datatype_Common
$length = null;
break;
default:
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
+40 -15
View File
@@ -42,9 +42,9 @@
// | Author: Paul Cooper <pgc@ucecom.com> |
// +----------------------------------------------------------------------+
//
// $Id: pgsql.php,v 1.93 2008/08/28 20:32:57 afz Exp $
// $Id$
require_once('MDB2/Driver/Datatype/Common.php');
require_once 'MDB2/Driver/Datatype/Common.php';
/**
* MDB2 PostGreSQL driver
@@ -68,7 +68,7 @@ class MDB2_Driver_Datatype_pgsql extends MDB2_Driver_Datatype_Common
*/
function _baseConvertResult($value, $type, $rtrim = true)
{
if (is_null($value)) {
if (null === $value) {
return null;
}
switch ($type) {
@@ -117,7 +117,7 @@ class MDB2_Driver_Datatype_pgsql extends MDB2_Driver_Datatype_Common
*/
function getTypeDeclaration($field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -198,7 +198,7 @@ class MDB2_Driver_Datatype_pgsql extends MDB2_Driver_Datatype_Common
*/
function _getIntegerDeclaration($name, $field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -219,6 +219,9 @@ class MDB2_Driver_Datatype_pgsql extends MDB2_Driver_Datatype_Common
}
$notnull = empty($field['notnull']) ? '' : ' NOT NULL';
if (empty($default) && empty($notnull)) {
$default = ' DEFAULT NULL';
}
$name = $db->quoteIdentifier($name, true);
return $name.' '.$this->getTypeDeclaration($field).$default.$notnull;
}
@@ -239,6 +242,16 @@ class MDB2_Driver_Datatype_pgsql extends MDB2_Driver_Datatype_Common
*/
function _quoteCLOB($value, $quote, $escape_wildcards)
{
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
if ($db->options['lob_allow_url_include']) {
$value = $this->_readFile($value);
if (PEAR::isError($value)) {
return $value;
}
}
return $this->_quoteText($value, $quote, $escape_wildcards);
}
@@ -261,11 +274,17 @@ class MDB2_Driver_Datatype_pgsql extends MDB2_Driver_Datatype_Common
if (!$quote) {
return $value;
}
if (version_compare(PHP_VERSION, '5.2.0RC6', '>=')) {
$db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
if ($db->options['lob_allow_url_include']) {
$value = $this->_readFile($value);
if (PEAR::isError($value)) {
return $value;
}
}
if (version_compare(PHP_VERSION, '5.2.0RC6', '>=')) {
$connection = $db->getConnection();
if (PEAR::isError($connection)) {
return $connection;
@@ -317,24 +336,30 @@ class MDB2_Driver_Datatype_pgsql extends MDB2_Driver_Datatype_Common
*/
function matchPattern($pattern, $operator = null, $field = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$match = '';
if (!is_null($operator)) {
$field = is_null($field) ? '' : $field.' ';
if (null !== $operator) {
$field = (null === $field) ? '' : $field.' ';
$operator = strtoupper($operator);
switch ($operator) {
// case insensitive
case 'ILIKE':
$match = $field.'ILIKE ';
break;
case 'NOT ILIKE':
$match = $field.'NOT ILIKE ';
break;
// case sensitive
case 'LIKE':
$match = $field.'LIKE ';
break;
case 'NOT LIKE':
$match = $field.'NOT LIKE ';
break;
default:
return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'not a supported operator type:'. $operator, __FUNCTION__);
@@ -366,7 +391,7 @@ class MDB2_Driver_Datatype_pgsql extends MDB2_Driver_Datatype_Common
*/
function patternEscapeString()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -492,7 +517,7 @@ class MDB2_Driver_Datatype_pgsql extends MDB2_Driver_Datatype_Common
$length = null;
break;
default:
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -519,7 +544,7 @@ class MDB2_Driver_Datatype_pgsql extends MDB2_Driver_Datatype_Common
*/
function mapPrepareDatatype($type)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
+17 -8
View File
@@ -43,10 +43,10 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: sqlite.php,v 1.67 2008/02/22 19:58:06 quipo Exp $
// $Id$
//
require_once('MDB2/Driver/Datatype/Common.php');
require_once 'MDB2/Driver/Datatype/Common.php';
/**
* MDB2 SQLite driver
@@ -101,7 +101,7 @@ class MDB2_Driver_Datatype_sqlite extends MDB2_Driver_Datatype_Common
*/
function getTypeDeclaration($field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -199,7 +199,7 @@ class MDB2_Driver_Datatype_sqlite extends MDB2_Driver_Datatype_Common
*/
function _getIntegerDeclaration($name, $field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -216,6 +216,9 @@ class MDB2_Driver_Datatype_sqlite extends MDB2_Driver_Datatype_Common
$notnull = empty($field['notnull']) ? '' : ' NOT NULL';
$unsigned = empty($field['unsigned']) ? '' : ' UNSIGNED';
if (empty($default) && empty($notnull)) {
$default = ' DEFAULT NULL';
}
$name = $db->quoteIdentifier($name, true);
return $name.' '.$this->getTypeDeclaration($field).$unsigned.$default.$notnull.$autoinc;
}
@@ -237,24 +240,30 @@ class MDB2_Driver_Datatype_sqlite extends MDB2_Driver_Datatype_Common
*/
function matchPattern($pattern, $operator = null, $field = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$match = '';
if (!is_null($operator)) {
$field = is_null($field) ? '' : $field.' ';
if (null !== $operator) {
$field = (null === $field) ? '' : $field.' ';
$operator = strtoupper($operator);
switch ($operator) {
// case insensitive
case 'ILIKE':
$match = $field.'LIKE ';
break;
case 'NOT ILIKE':
$match = $field.'NOT LIKE ';
break;
// case sensitive
case 'LIKE':
$match = $field.'LIKE ';
break;
case 'NOT LIKE':
$match = $field.'NOT LIKE ';
break;
default:
return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'not a supported operator type:'. $operator, __FUNCTION__);
@@ -388,7 +397,7 @@ class MDB2_Driver_Datatype_sqlite extends MDB2_Driver_Datatype_Common
$length = null;
break;
default:
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
+9 -9
View File
@@ -42,7 +42,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: Common.php,v 1.21 2008/02/17 18:51:39 quipo Exp $
// $Id$
//
/**
@@ -78,14 +78,14 @@ class MDB2_Driver_Function_Common extends MDB2_Module_Common
* @return mixed a result handle or MDB2_OK on success, a MDB2 error on failure
* @access public
*/
function &executeStoredProc($name, $params = null, $types = null, $result_class = true, $result_wrap_class = false)
function executeStoredProc($name, $params = null, $types = null, $result_class = true, $result_wrap_class = false)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$error =& $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
$error = $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'method not implemented', __FUNCTION__);
return $error;
}
@@ -145,12 +145,12 @@ class MDB2_Driver_Function_Common extends MDB2_Module_Common
*/
function unixtimestamp($expression)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$error =& $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
$error = $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'method not implemented', __FUNCTION__);
return $error;
}
@@ -166,7 +166,7 @@ class MDB2_Driver_Function_Common extends MDB2_Module_Common
*/
function substring($value, $position = 1, $length = null)
{
if (!is_null($length)) {
if (null !== $length) {
return "SUBSTRING($value FROM $position FOR $length)";
}
return "SUBSTRING($value FROM $position)";
@@ -278,12 +278,12 @@ class MDB2_Driver_Function_Common extends MDB2_Module_Common
*/
function guid()
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$error =& $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
$error = $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'method not implemented', __FUNCTION__);
return $error;
}
+4 -4
View File
@@ -42,10 +42,10 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: mysql.php,v 1.12 2008/02/17 18:54:08 quipo Exp $
// $Id$
//
require_once('MDB2/Driver/Function/Common.php');
require_once 'MDB2/Driver/Function/Common.php';
/**
* MDB2 MySQL driver for the function modules
@@ -71,9 +71,9 @@ class MDB2_Driver_Function_mysql extends MDB2_Driver_Function_Common
* @return mixed a result handle or MDB2_OK on success, a MDB2 error on failure
* @access public
*/
function &executeStoredProc($name, $params = null, $types = null, $result_class = true, $result_wrap_class = false)
function executeStoredProc($name, $params = null, $types = null, $result_class = true, $result_wrap_class = false)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
+21 -4
View File
@@ -42,9 +42,9 @@
// | Author: Paul Cooper <pgc@ucecom.com> |
// +----------------------------------------------------------------------+
//
// $Id: pgsql.php,v 1.11 2008/11/09 19:46:50 quipo Exp $
// $Id$
require_once('MDB2/Driver/Function/Common.php');
require_once 'MDB2/Driver/Function/Common.php';
/**
* MDB2 MySQL driver for the function modules
@@ -69,9 +69,9 @@ class MDB2_Driver_Function_pgsql extends MDB2_Driver_Function_Common
* @return mixed a result handle or MDB2_OK on success, a MDB2 error on failure
* @access public
*/
function &executeStoredProc($name, $params = null, $types = null, $result_class = true, $result_wrap_class = false)
function executeStoredProc($name, $params = null, $types = null, $result_class = true, $result_wrap_class = false)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -96,6 +96,23 @@ class MDB2_Driver_Function_pgsql extends MDB2_Driver_Function_Common
return 'EXTRACT(EPOCH FROM DATE_TRUNC(\'seconds\', CAST ((' . $expression . ') AS TIMESTAMP)))';
}
// }}}
// {{{ substring()
/**
* return string to call a function to get a substring inside an SQL statement
*
* @return string to call a function to get a substring
* @access public
*/
function substring($value, $position = 1, $length = null)
{
if (null !== $length) {
return "SUBSTRING(CAST($value AS VARCHAR) FROM $position FOR $length)";
}
return "SUBSTRING(CAST($value AS VARCHAR) FROM $position)";
}
// }}}
// {{{ random()
+7 -7
View File
@@ -42,10 +42,10 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: sqlite.php,v 1.10 2008/02/17 18:54:08 quipo Exp $
// $Id$
//
require_once('MDB2/Driver/Function/Common.php');
require_once 'MDB2/Driver/Function/Common.php';
/**
* MDB2 SQLite driver for the function modules
@@ -116,10 +116,10 @@ class MDB2_Driver_Function_sqlite extends MDB2_Driver_Function_Common
*/
function substring($value, $position = 1, $length = null)
{
if (!is_null($length)) {
return "substr($value,$position,$length)";
if (null !== $length) {
return "substr($value, $position, $length)";
}
return "substr($value,$position,length($value))";
return "substr($value, $position, length($value))";
}
// }}}
@@ -147,12 +147,12 @@ class MDB2_Driver_Function_sqlite extends MDB2_Driver_Function_Common
*/
function replace($str, $from_str, $to_str)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$error =& $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
$error = $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'method not implemented', __FUNCTION__);
return $error;
}
+61 -37
View File
@@ -43,7 +43,7 @@
// | Lorenzo Alberton <l.alberton@quipo.it> |
// +----------------------------------------------------------------------+
//
// $Id: Common.php,v 1.72 2009/01/14 15:00:40 quipo Exp $
// $Id$
//
/**
@@ -108,7 +108,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function getFieldDeclarationList($fields)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -140,7 +140,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function _fixSequenceName($sqn, $check = false)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -168,7 +168,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function _fixIndexName($idx)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -195,7 +195,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function createDatabase($database, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -218,7 +218,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function alterDatabase($database, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -239,7 +239,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function dropDatabase($database)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -263,7 +263,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function _getCreateTableQuery($name, $fields, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -356,7 +356,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
if (PEAR::isError($query)) {
return $query;
}
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -379,13 +379,17 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function dropTable($name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$name = $db->quoteIdentifier($name, true);
return $db->exec("DROP TABLE $name");
$result = $db->exec("DROP TABLE $name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -401,13 +405,17 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function truncateTable($name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$name = $db->quoteIdentifier($name, true);
return $db->exec("DELETE FROM $name");
$result = $db->exec("DELETE FROM $name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -429,7 +437,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function vacuum($table = null, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -533,7 +541,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function alterTable($name, $changes, $check)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -553,7 +561,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function listDatabases()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -573,7 +581,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function listUsers()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -596,7 +604,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function listViews($database = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -617,7 +625,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function listTableViews($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -638,7 +646,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function listTableTriggers($table = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -658,7 +666,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function listFunctions()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -681,7 +689,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function listTables($database = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -702,7 +710,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function listTableFields($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -748,7 +756,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function createIndex($table, $name, $definition)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -761,7 +769,11 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
$fields[] = $db->quoteIdentifier($field, true);
}
$query .= ' ('. implode(', ', $fields) . ')';
return $db->exec($query);
$result = $db->exec($query);
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -777,13 +789,17 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function dropIndex($table, $name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$name = $db->quoteIdentifier($db->getIndexName($name), true);
return $db->exec("DROP INDEX $name");
$result = $db->exec("DROP INDEX $name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -798,7 +814,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function listTableIndexes($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -867,7 +883,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function createConstraint($table, $name, $definition)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -895,7 +911,11 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
$query .= ' ('. implode(', ', $referenced_fields) . ')';
$query .= $this->_getAdvancedFKOptions($definition);
}
return $db->exec($query);
$result = $db->exec($query);
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -912,14 +932,18 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function dropConstraint($table, $name, $primary = false)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$table = $db->quoteIdentifier($table, true);
$name = $db->quoteIdentifier($db->getIndexName($name), true);
return $db->exec("ALTER TABLE $table DROP CONSTRAINT $name");
$result = $db->exec("ALTER TABLE $table DROP CONSTRAINT $name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -934,7 +958,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function listTableConstraints($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -956,7 +980,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function createSequence($seq_name, $start = 1)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -977,7 +1001,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function dropSequence($name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1000,7 +1024,7 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
*/
function listSequences($database = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1011,4 +1035,4 @@ class MDB2_Driver_Manager_Common extends MDB2_Module_Common
// }}}
}
?>
?>
+91 -52
View File
@@ -42,10 +42,10 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: mysql.php,v 1.113 2008/11/23 20:30:29 quipo Exp $
// $Id$
//
require_once('MDB2/Driver/Manager/Common.php');
require_once 'MDB2/Driver/Manager/Common.php';
/**
* MDB2 MySQL driver for the management modules
@@ -71,7 +71,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function createDatabase($name, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -101,7 +101,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function alterDatabase($name, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -128,7 +128,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function dropDatabase($name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -204,7 +204,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function createTable($name, $fields, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -222,7 +222,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
$autoincrement = $fieldname;
}
}
if (!is_null($autoincrement) && count($pk_fields) > 1) {
if ((null !== $autoincrement) && count($pk_fields) > 1) {
$options['primary'] = $pk_fields;
} else {
// the PK constraint is on max one field => OK
@@ -235,7 +235,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
return $query;
}
if (!is_null($autoincrement)) {
if (null !== $autoincrement) {
// we have to remove the PK clause added by _getIntegerDeclaration()
$query = str_replace('AUTO_INCREMENT PRIMARY KEY', 'AUTO_INCREMENT', $query);
}
@@ -285,7 +285,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function dropTable($name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -321,13 +321,17 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function truncateTable($name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$name = $db->quoteIdentifier($name, true);
return $db->exec("TRUNCATE TABLE $name");
$result = $db->exec("TRUNCATE TABLE $name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -349,7 +353,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function vacuum($table = null, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -374,7 +378,10 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
return $result;
}
if (!empty($options['analyze'])) {
return $db->exec('ANALYZE TABLE '.$table);
$result = $db->exec('ANALYZE TABLE '.$table);
if (MDB2::isError($result)) {
return $result;
}
}
return MDB2_OK;
}
@@ -474,7 +481,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function alterTable($name, $changes, $check)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -561,7 +568,11 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
}
$name = $db->quoteIdentifier($name, true);
return $db->exec("ALTER TABLE $name $query");
$result = $db->exec("ALTER TABLE $name $query");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -575,7 +586,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function listDatabases()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -601,7 +612,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function listUsers()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -620,7 +631,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function listFunctions()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -653,13 +664,13 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function listTableTriggers($table = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$query = 'SHOW TRIGGERS';
if (!is_null($table)) {
if (null !== $table) {
$table = $db->quote($table, 'text');
$query .= " LIKE $table";
}
@@ -685,13 +696,13 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function listTables($database = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$query = "SHOW /*!50002 FULL*/ TABLES";
if (!is_null($database)) {
if (null !== $database) {
$query .= " FROM $database";
}
$query.= "/*!50002 WHERE Table_type = 'BASE TABLE'*/";
@@ -725,13 +736,13 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function listViews($database = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$query = 'SHOW FULL TABLES';
if (!is_null($database)) {
if (null !== $database) {
$query.= " FROM $database";
}
$query.= " WHERE Table_type = 'VIEW'";
@@ -759,7 +770,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function listTableFields($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -815,7 +826,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function createIndex($table, $name, $definition)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -832,7 +843,11 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
}
}
$query .= ' ('. implode(', ', $fields) . ')';
return $db->exec($query);
$result = $db->exec($query);
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -848,14 +863,18 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function dropIndex($table, $name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$table = $db->quoteIdentifier($table, true);
$name = $db->quoteIdentifier($db->getIndexName($name), true);
return $db->exec("DROP INDEX $name ON $table");
$result = $db->exec("DROP INDEX $name ON $table");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -870,7 +889,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function listTableIndexes($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -934,7 +953,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function createConstraint($table, $name, $definition)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1008,14 +1027,18 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function dropConstraint($table, $name, $primary = false)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
if ($primary || strtolower($name) == 'primary') {
$query = 'ALTER TABLE '. $db->quoteIdentifier($table, true) .' DROP PRIMARY KEY';
return $db->exec($query);
$result = $db->exec($query);
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
//is it a FK constraint? If so, also delete the associated triggers
@@ -1031,13 +1054,21 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
$table = $db->quoteIdentifier($table, true);
$name = $db->quoteIdentifier($db->getIndexName($name), true);
$query = "ALTER TABLE $table DROP FOREIGN KEY $name";
return $db->exec($query);
$result = $db->exec($query);
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
$table = $db->quoteIdentifier($table, true);
$name = $db->quoteIdentifier($db->getIndexName($name), true);
$query = "ALTER TABLE $table DROP INDEX $name";
return $db->exec($query);
$result = $db->exec($query);
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -1058,7 +1089,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function _createFKTriggers($table, $foreign_keys)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1103,10 +1134,14 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
for ($i=0; $i<count($referenced_fields); $i++) {
$conditions2[] = 'NEW.'.$referenced_fields[$i] .' <> OLD.'.$referenced_fields[$i];
}
$restrict_action .= implode(' AND ', $conditions).') IS NOT NULL'
.' AND (' .implode(' OR ', $conditions2) .')'
.' THEN CALL %s_ON_TABLE_'.$table.'_VIOLATES_FOREIGN_KEY_CONSTRAINT();'
.' END IF;';
$restrict_action .= implode(' AND ', $conditions).') IS NOT NULL';
$restrict_action2 = empty($conditions2) ? '' : ' AND (' .implode(' OR ', $conditions2) .')';
$restrict_action3 = ' THEN CALL %s_ON_TABLE_'.$table.'_VIOLATES_FOREIGN_KEY_CONSTRAINT();'
.' END IF;';
$restrict_action_update = $restrict_action . $restrict_action2 . $restrict_action3;
$restrict_action_delete = $restrict_action . $restrict_action3; // There is no NEW row in on DELETE trigger
$cascade_action_update = 'UPDATE '.$table_quoted.' SET '.implode(', ', $new_values) .' WHERE '.implode(' AND ', $conditions). ';';
$cascade_action_delete = 'DELETE FROM '.$table_quoted.' WHERE '.implode(' AND ', $conditions). ';';
@@ -1137,9 +1172,9 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
} elseif ('SET DEFAULT' == $fkdef['onupdate']) {
$sql_update = sprintf($query, $trigger_names['pk_update'], 'BEFORE UPDATE', 'update') . $setdefault_action;
} elseif ('NO ACTION' == $fkdef['onupdate']) {
$sql_update = sprintf($query.$restrict_action, $trigger_names['pk_update'], 'AFTER UPDATE', 'update');
$sql_update = sprintf($query.$restrict_action_update, $trigger_names['pk_update'], 'AFTER UPDATE', 'update');
} elseif ('RESTRICT' == $fkdef['onupdate']) {
$sql_update = sprintf($query.$restrict_action, $trigger_names['pk_update'], 'BEFORE UPDATE', 'update');
$sql_update = sprintf($query.$restrict_action_update, $trigger_names['pk_update'], 'BEFORE UPDATE', 'update');
}
if ('CASCADE' == $fkdef['ondelete']) {
$sql_delete = sprintf($query, $trigger_names['pk_delete'], 'BEFORE DELETE', 'delete') . $cascade_action_delete;
@@ -1148,9 +1183,9 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
} elseif ('SET DEFAULT' == $fkdef['ondelete']) {
$sql_delete = sprintf($query, $trigger_names['pk_delete'], 'BEFORE DELETE', 'delete') . $setdefault_action;
} elseif ('NO ACTION' == $fkdef['ondelete']) {
$sql_delete = sprintf($query.$restrict_action, $trigger_names['pk_delete'], 'AFTER DELETE', 'delete');
$sql_delete = sprintf($query.$restrict_action_delete, $trigger_names['pk_delete'], 'AFTER DELETE', 'delete');
} elseif ('RESTRICT' == $fkdef['ondelete']) {
$sql_delete = sprintf($query.$restrict_action, $trigger_names['pk_delete'], 'BEFORE DELETE', 'delete');
$sql_delete = sprintf($query.$restrict_action_delete, $trigger_names['pk_delete'], 'BEFORE DELETE', 'delete');
}
$sql_update .= ' SET FOREIGN_KEY_CHECKS = 1; END;';
$sql_delete .= ' SET FOREIGN_KEY_CHECKS = 1; END;';
@@ -1198,7 +1233,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function _dropFKTriggers($table, $fkname, $referenced_table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1232,7 +1267,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function listTableConstraints($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1307,7 +1342,7 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function createSequence($seq_name, $start = 1, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1380,13 +1415,17 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function dropSequence($seq_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$sequence_name = $db->quoteIdentifier($db->getSequenceName($seq_name), true);
return $db->exec("DROP TABLE $sequence_name");
$result = $db->exec("DROP TABLE $sequence_name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -1401,13 +1440,13 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
*/
function listSequences($database = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$query = "SHOW TABLES";
if (!is_null($database)) {
if (null !== $database) {
$query .= " FROM $database";
}
$table_names = $db->queryCol($query);
@@ -1429,4 +1468,4 @@ class MDB2_Driver_Manager_mysql extends MDB2_Driver_Manager_Common
// }}}
}
?>
?>
+64 -34
View File
@@ -42,9 +42,9 @@
// | Author: Paul Cooper <pgc@ucecom.com> |
// +----------------------------------------------------------------------+
//
// $Id: pgsql.php,v 1.87 2008/11/29 14:09:59 afz Exp $
// $Id$
require_once('MDB2/Driver/Manager/Common.php');
require_once 'MDB2/Driver/Manager/Common.php';
/**
* MDB2 MySQL driver for the management modules
@@ -68,7 +68,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function createDatabase($name, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -95,18 +95,24 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function alterDatabase($name, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$query = 'ALTER DATABASE '. $db->quoteIdentifier($name, true);
$query = '';
if (!empty($options['name'])) {
$query .= ' RENAME TO ' . $options['name'];
}
if (!empty($options['owner'])) {
$query .= ' OWNER TO ' . $options['owner'];
}
if (empty($query)) {
return MDB2_OK;
}
$query = 'ALTER DATABASE '. $db->quoteIdentifier($name, true) . $query;
return $db->standaloneQuery($query, null, true);
}
@@ -122,7 +128,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function dropDatabase($name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -181,13 +187,17 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function truncateTable($name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$name = $db->quoteIdentifier($name, true);
return $db->exec("TRUNCATE TABLE $name");
$result = $db->exec("TRUNCATE TABLE $name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -209,7 +219,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function vacuum($table = null, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -228,7 +238,11 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
if (!empty($table)) {
$query .= ' '.$db->quoteIdentifier($table, true);
}
return $db->exec($query);
$result = $db->exec($query);
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -326,7 +340,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function alterTable($name, $changes, $check)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -412,7 +426,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
return $result;
}
}
if (!empty($field['definition']['notnull'])) {
if (array_key_exists('notnull', $field['definition'])) {
$query = "ALTER $field_name ".($field['definition']['notnull'] ? 'SET' : 'DROP').' NOT NULL';
$result = $db->exec("ALTER TABLE $name $query");
if (PEAR::isError($result)) {
@@ -444,7 +458,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listDatabases()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -477,7 +491,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listUsers()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -504,7 +518,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listViews($database = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -535,7 +549,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listTableViews($table)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -563,7 +577,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listFunctions()
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -602,7 +616,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listTableTriggers($table = null)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -611,9 +625,9 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
FROM pg_trigger trg,
pg_class tbl
WHERE trg.tgrelid = tbl.oid';
if (!is_null($table)) {
if (null !== $table) {
$table = $db->quote(strtoupper($table), 'text');
$query .= " AND tbl.relname = $table";
$query .= " AND UPPER(tbl.relname) = $table";
}
$result = $db->queryCol($query);
if (PEAR::isError($result)) {
@@ -636,7 +650,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listTables($database = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -683,7 +697,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listTableFields($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -695,7 +709,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
$table = $db->quoteIdentifier($schema, true) . '.' .$table;
}
$db->setLimit(1);
$result2 = $db->query("SELECT * FROM $table LIMIT 1");
$result2 = $db->query("SELECT * FROM $table");
if (PEAR::isError($result2)) {
return $result2;
}
@@ -719,7 +733,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listTableIndexes($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -772,7 +786,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function dropConstraint($table, $name, $primary = false)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -798,11 +812,19 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
}
if (in_array($name, $unique)) {
return $db->exec('DROP INDEX '.$db->quoteIdentifier($name, true));
$result = $db->exec('DROP INDEX '.$db->quoteIdentifier($name, true));
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
$idxname = $db->getIndexName($name);
if (in_array($idxname, $unique)) {
return $db->exec('DROP INDEX '.$db->quoteIdentifier($idxname, true));
$result = $db->exec('DROP INDEX '.$db->quoteIdentifier($idxname, true));
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
return $db->raiseError(MDB2_ERROR_NOT_FOUND, null, null,
$name . ' is not an existing constraint for table ' . $table, __FUNCTION__);
@@ -820,7 +842,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listTableConstraints($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -885,14 +907,18 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function createSequence($seq_name, $start = 1)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$sequence_name = $db->quoteIdentifier($db->getSequenceName($seq_name), true);
return $db->exec("CREATE SEQUENCE $sequence_name INCREMENT 1".
$result = $db->exec("CREATE SEQUENCE $sequence_name INCREMENT 1".
($start < 1 ? " MINVALUE $start" : '')." START $start");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -907,13 +933,17 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function dropSequence($seq_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$sequence_name = $db->quoteIdentifier($db->getSequenceName($seq_name), true);
return $db->exec("DROP SEQUENCE $sequence_name");
$result = $db->exec("DROP SEQUENCE $sequence_name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -927,7 +957,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listSequences($database = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -948,4 +978,4 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
return $result;
}
}
?>
?>
+71 -47
View File
@@ -43,10 +43,10 @@
// | Lorenzo Alberton <l.alberton@quipo.it> |
// +----------------------------------------------------------------------+
//
// $Id: sqlite.php,v 1.76 2008/05/31 11:48:48 quipo Exp $
// $Id$
//
require_once('MDB2/Driver/Manager/Common.php');
require_once 'MDB2/Driver/Manager/Common.php';
/**
* MDB2 SQLite driver for the management modules
@@ -71,8 +71,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function createDatabase($name, $options = array())
{
$datadir=OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -83,8 +82,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
'database already exists', __FUNCTION__);
}
$php_errormsg = '';
$database_file="$datadir/$database_file.db";
$handle = sqlite_open($database_file, $db->dsn['mode'], $php_errormsg);
$handle = @sqlite_open($database_file, $db->dsn['mode'], $php_errormsg);
if (!$handle) {
return $db->raiseError(MDB2_ERROR_CANNOT_CREATE, null, null,
(isset($php_errormsg) ? $php_errormsg : 'could not create the database file'), __FUNCTION__);
@@ -109,7 +107,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function dropDatabase($name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -176,7 +174,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function _getCreateTableQuery($name, $fields, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -238,7 +236,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
}
// create triggers to enforce FOREIGN KEY constraints
if (!empty($options['foreign_keys'])) {
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -386,7 +384,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function dropTable($name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -407,7 +405,11 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
}
$name = $db->quoteIdentifier($name, true);
return $db->exec("DROP TABLE $name");
$result = $db->exec("DROP TABLE $name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -429,7 +431,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function vacuum($table = null, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -438,7 +440,11 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
if (!empty($table)) {
$query .= ' '.$db->quoteIdentifier($table, true);
}
return $db->exec($query);
$result = $db->exec($query);
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -536,7 +542,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function alterTable($name, $changes, $check, $options = array())
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -600,7 +606,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
}
$constraints = array_flip($constraints);
foreach ($constraints as $constraint => $value) {
if (!empty($definition['primary'])) {
if (!empty($definition['primary'])) {
if (!array_key_exists('primary', $options)) {
$options['primary'] = $definition['fields'];
//remove from the $constraint array, it's already handled by createTable()
@@ -682,16 +688,14 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
}
foreach ($constraints as $constraint => $definition) {
if(empty($definition['primary']) and empty($definition['foreign'])){
$this->createConstraint($name_new, $constraint, $definition);
}
$this->createConstraint($name_new, $constraint, $definition);
}
if (!empty($select_fields) && !empty($data)) {
$query = 'INSERT INTO '.$db->quoteIdentifier($name_new, true);
$query.= '('.implode(', ', array_slice(array_keys($fields), 0, count($select_fields))).')';
$query.=' VALUES (?'.str_repeat(', ?', (count($select_fields) - 1)).')';
$stmt =$db->prepare($query, null, MDB2_PREPARE_MANIP);
$stmt = $db->prepare($query, null, MDB2_PREPARE_MANIP);
if (PEAR::isError($stmt)) {
return $stmt;
}
@@ -716,7 +720,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function listDatabases()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -736,7 +740,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function listUsers()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -754,9 +758,9 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
* @return mixed array of view names on success, a MDB2 error on failure
* @access public
*/
function listViews($dummy=null)
function listViews()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -784,7 +788,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function listTableViews($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -818,9 +822,9 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
* @return mixed array of table names on success, a MDB2 error on failure
* @access public
*/
function listTables($dummy=null)
function listTables()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -854,7 +858,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function listTableFields($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -902,13 +906,13 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function listTableTriggers($table = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$query = "SELECT name FROM sqlite_master WHERE type='trigger' AND sql NOT NULL";
if (!is_null($table)) {
if (null !== $table) {
if ($db->options['portability'] & MDB2_PORTABILITY_FIX_CASE) {
$query.= ' AND LOWER(tbl_name)='.$db->quote(strtolower($table), 'text');
} else {
@@ -962,17 +966,17 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function createIndex($table, $name, $definition)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$table = $db->quoteIdentifier($table, true);
$name = $db->getIndexName($name);
$name = $db->quoteIdentifier($db->getIndexName($name), true);
$query = "CREATE INDEX $name ON $table";
$fields = array();
foreach ($definition['fields'] as $field_name => $field) {
$field_string = $field_name;
$field_string = $db->quoteIdentifier($field_name, true);
if (!empty($field['sorting'])) {
switch ($field['sorting']) {
case 'ascending':
@@ -986,7 +990,11 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
$fields[] = $field_string;
}
$query .= ' ('.implode(', ', $fields) . ')';
return $db->exec($query);
$result = $db->exec($query);
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -1002,13 +1010,17 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function dropIndex($table, $name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$name = $db->getIndexName($name);
return $db->exec("DROP INDEX $name");
$result = $db->exec("DROP INDEX $name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -1023,7 +1035,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function listTableIndexes($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1084,7 +1096,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function createConstraint($table, $name, $definition)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1116,7 +1128,11 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
$fields[] = $field_string;
}
$query .= ' ('.implode(', ', $fields) . ')';
return $db->exec($query);
$result = $db->exec($query);
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -1137,7 +1153,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
return $this->alterTable($table, array(), false, array('primary' => null));
}
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1156,7 +1172,11 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
}
$name = $db->getIndexName($name);
return $db->exec("DROP INDEX $name");
$result = $db->exec("DROP INDEX $name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -1174,7 +1194,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function _dropFKTriggers($table, $fkname, $referenced_table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1208,7 +1228,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function listTableConstraints($table)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1278,7 +1298,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function createSequence($seq_name, $start = 1)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -1319,13 +1339,17 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
*/
function dropSequence($seq_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$sequence_name = $db->quoteIdentifier($db->getSequenceName($seq_name), true);
return $db->exec("DROP TABLE $sequence_name");
$result = $db->exec("DROP TABLE $sequence_name");
if (MDB2::isError($result)) {
return $result;
}
return MDB2_OK;
}
// }}}
@@ -1337,9 +1361,9 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
* @return mixed array of sequence names on success, a MDB2 error on failure
* @access public
*/
function listSequences($dummy=null)
function listSequences()
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
+1 -1
View File
@@ -42,7 +42,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: Common.php,v 1.2 2007/09/09 13:47:36 quipo Exp $
// $Id$
//
/**
+1 -1
View File
@@ -42,7 +42,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: mysql.php,v 1.9 2006/06/18 21:59:05 lsmith Exp $
// $Id$
//
require_once 'MDB2/Driver/Native/Common.php';
+2 -2
View File
@@ -42,7 +42,7 @@
// | Author: Paul Cooper <pgc@ucecom.com> |
// +----------------------------------------------------------------------+
//
// $Id: pgsql.php,v 1.12 2006/07/15 13:07:15 lsmith Exp $
// $Id$
require_once 'MDB2/Driver/Native/Common.php';
@@ -67,7 +67,7 @@ class MDB2_Driver_Native_pgsql extends MDB2_Driver_Native_Common
*/
function deleteOID($OID)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
+1 -1
View File
@@ -42,7 +42,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: sqlite.php,v 1.9 2006/06/18 21:59:05 lsmith Exp $
// $Id$
//
require_once 'MDB2/Driver/Native/Common.php';
+7 -7
View File
@@ -42,7 +42,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: Common.php,v 1.43 2009/01/14 15:01:21 quipo Exp $
// $Id$
//
/**
@@ -107,7 +107,7 @@ class MDB2_Driver_Reverse_Common extends MDB2_Module_Common
*/
function getTableFieldDefinition($table, $field)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -141,7 +141,7 @@ class MDB2_Driver_Reverse_Common extends MDB2_Module_Common
*/
function getTableIndexDefinition($table, $index)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -193,7 +193,7 @@ class MDB2_Driver_Reverse_Common extends MDB2_Module_Common
*/
function getTableConstraintDefinition($table, $index)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -220,7 +220,7 @@ class MDB2_Driver_Reverse_Common extends MDB2_Module_Common
*/
function getSequenceDefinition($sequence)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -273,7 +273,7 @@ class MDB2_Driver_Reverse_Common extends MDB2_Module_Common
*/
function getTriggerDefinition($trigger)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -407,7 +407,7 @@ class MDB2_Driver_Reverse_Common extends MDB2_Module_Common
*/
function tableInfo($result, $mode = null)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
+40 -30
View File
@@ -42,10 +42,10 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: mysql.php,v 1.80 2008/03/26 21:15:37 quipo Exp $
// $Id$
//
require_once('MDB2/Driver/Reverse/Common.php');
require_once 'MDB2/Driver/Reverse/Common.php';
/**
* MDB2 MySQL driver for the schema reverse engineering module
@@ -69,7 +69,7 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
*/
function getTableFieldDefinition($table_name, $field_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -113,13 +113,21 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
$default = false;
if (array_key_exists('default', $column)) {
$default = $column['default'];
if (is_null($default) && $notnull) {
if ((null === $default) && $notnull) {
$default = '';
}
}
$definition[0] = array(
'notnull' => $notnull,
'nativetype' => preg_replace('/^([a-z]+)[^a-z].*/i', '\\1', $column['type'])
);
$autoincrement = false;
if (!empty($column['extra']) && $column['extra'] == 'auto_increment') {
$autoincrement = true;
if (!empty($column['extra'])) {
if ($column['extra'] == 'auto_increment') {
$autoincrement = true;
} else {
$definition[0]['extra'] = $column['extra'];
}
}
$collate = null;
if (!empty($column['collation'])) {
@@ -127,17 +135,13 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
$charset = preg_replace('/(.+?)(_.+)?/', '$1', $collate);
}
$definition[0] = array(
'notnull' => $notnull,
'nativetype' => preg_replace('/^([a-z]+)[^a-z].*/i', '\\1', $column['type'])
);
if (!is_null($length)) {
if (null !== $length) {
$definition[0]['length'] = $length;
}
if (!is_null($unsigned)) {
if (null !== $unsigned) {
$definition[0]['unsigned'] = $unsigned;
}
if (!is_null($fixed)) {
if (null !== $fixed) {
$definition[0]['fixed'] = $fixed;
}
if ($default !== false) {
@@ -146,7 +150,7 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
if ($autoincrement !== false) {
$definition[0]['autoincrement'] = $autoincrement;
}
if (!is_null($collate)) {
if (null !== $collate) {
$definition[0]['collate'] = $collate;
$definition[0]['charset'] = $charset;
}
@@ -181,7 +185,7 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
*/
function getTableIndexDefinition($table_name, $index_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -192,7 +196,7 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
$query = "SHOW INDEX FROM $table /*!50002 WHERE Key_name = %s */";
$index_name_mdb2 = $db->getIndexName($index_name);
$result = $db->queryRow(sprintf($query, $db->quote($index_name_mdb2)));
if (!PEAR::isError($result) && !is_null($result)) {
if (!PEAR::isError($result) && (null !== $result)) {
// apply 'idxname_format' only if the query succeeded, otherwise
// fallback to the given $index_name, without transformation
$index_name = $index_name_mdb2;
@@ -256,7 +260,7 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
*/
function getTableConstraintDefinition($table_name, $constraint_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -269,7 +273,7 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
if (strtolower($constraint_name) != 'primary') {
$constraint_name_mdb2 = $db->getIndexName($constraint_name);
$result = $db->queryRow(sprintf($query, $db->quote($constraint_name_mdb2)));
if (!PEAR::isError($result) && !is_null($result)) {
if (!PEAR::isError($result) && (null !== $result)) {
// apply 'idxname_format' only if the query succeeded, otherwise
// fallback to the given $index_name, without transformation
$constraint_name = $constraint_name_mdb2;
@@ -356,10 +360,16 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
*/
function _getTableFKConstraintDefinition($table, $constraint_name, $definition)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
//Use INFORMATION_SCHEMA instead?
//SELECT *
// FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
// WHERE CONSTRAINT_SCHEMA = '$dbname'
// AND TABLE_NAME = '$table'
// AND CONSTRAINT_NAME = '$constraint_name';
$query = 'SHOW CREATE TABLE '. $db->escape($table);
$constraint = $db->queryOne($query, 'text', 1);
if (!PEAR::isError($constraint) && !empty($constraint)) {
@@ -372,10 +382,10 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
}
$constraint_name_original = $constraint_name;
$constraint_name = $db->getIndexName($constraint_name);
$pattern = '/\bCONSTRAINT\s+'.$constraint_name.'\s+FOREIGN KEY\s+\(([^\)]+)\) \bREFERENCES\b ([^ ]+) \(([^\)]+)\)/i';
$pattern = '/\bCONSTRAINT\s+'.$constraint_name.'\s+FOREIGN KEY\s+\(([^\)]+)\) \bREFERENCES\b ([^\s]+) \(([^\)]+)\)(?: ON DELETE ([^\s]+))?(?: ON UPDATE ([^\s]+))?/i';
if (!preg_match($pattern, str_replace('`', '', $constraint), $matches)) {
//fallback to original constraint name
$pattern = '/\bCONSTRAINT\s+'.$constraint_name_original.'\s+FOREIGN KEY\s+\(([^\)]+)\) \bREFERENCES\b ([^ ]+) \(([^\)]+)\)/i';
$pattern = '/\bCONSTRAINT\s+'.$constraint_name_original.'\s+FOREIGN KEY\s+\(([^\)]+)\) \bREFERENCES\b ([^\s]+) \(([^\)]+)\)(?: ON DELETE ([^\s]+))?(?: ON UPDATE ([^\s]+))?/i';
}
if (preg_match($pattern, str_replace('`', '', $constraint), $matches)) {
$definition['foreign'] = true;
@@ -397,8 +407,8 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
'position' => $colpos++
);
}
$definition['onupdate'] = 'NO ACTION';
$definition['ondelete'] = 'NO ACTION';
$definition['ondelete'] = empty($matches[4]) ? 'RESTRICT' : strtoupper($matches[4]);
$definition['onupdate'] = empty($matches[5]) ? 'RESTRICT' : strtoupper($matches[5]);
$definition['match'] = 'SIMPLE';
return $definition;
}
@@ -424,7 +434,7 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
*/
function getTriggerDefinition($trigger)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -476,7 +486,7 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
return parent::tableInfo($result, $mode);
}
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -506,11 +516,11 @@ class MDB2_Driver_Reverse_mysql extends MDB2_Driver_Reverse_Common
$db->loadModule('Datatype', null, true);
for ($i = 0; $i < $count; $i++) {
$res[$i] = array(
'table' => $case_func(@mysql_field_table($resource, $i)),
'name' => $case_func(@mysql_field_name($resource, $i)),
'type' => @mysql_field_type($resource, $i),
'length' => @mysql_field_len($resource, $i),
'flags' => @mysql_field_flags($resource, $i),
'table' => $case_func(@mysql_field_table($resource, $i)),
'name' => $case_func(@mysql_field_name($resource, $i)),
'type' => @mysql_field_type($resource, $i),
'length' => @mysql_field_len($resource, $i),
'flags' => @mysql_field_flags($resource, $i),
);
if ($res[$i]['type'] == 'string') {
$res[$i]['type'] = 'char';
+12 -11
View File
@@ -43,9 +43,9 @@
// | Lorenzo Alberton <l.alberton@quipo.it> |
// +----------------------------------------------------------------------+
//
// $Id: pgsql.php,v 1.75 2008/08/22 16:36:20 quipo Exp $
// $Id$
require_once('MDB2/Driver/Reverse/Common.php');
require_once 'MDB2/Driver/Reverse/Common.php';
/**
* MDB2 PostGreSQL driver for the schema reverse engineering module
@@ -69,7 +69,7 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
*/
function getTableFieldDefinition($table_name, $field_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -143,11 +143,12 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
}
$default = null;
if ($column['atthasdef'] === 't'
&& strpos($column['default'], 'NULL') !== 0
&& !preg_match("/nextval\('([^']+)'/", $column['default'])
) {
$pattern = '/^\'(.*)\'::[\w ]+$/i';
$default = $column['default'];#substr($column['adsrc'], 1, -1);
if (is_null($default) && $notnull) {
if ((null === $default) && $notnull) {
$default = '';
} elseif (!empty($default) && preg_match($pattern, $default)) {
//remove data type cast
@@ -159,13 +160,13 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
$autoincrement = true;
}
$definition[0] = array('notnull' => $notnull, 'nativetype' => $column['type']);
if (!is_null($length)) {
if (null !== $length) {
$definition[0]['length'] = $length;
}
if (!is_null($unsigned)) {
if (null !== $unsigned) {
$definition[0]['unsigned'] = $unsigned;
}
if (!is_null($fixed)) {
if (null !== $fixed) {
$definition[0]['fixed'] = $fixed;
}
if ($default !== false) {
@@ -198,7 +199,7 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
*/
function getTableIndexDefinition($table_name, $index_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -256,7 +257,7 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
*/
function getTableConstraintDefinition($table_name, $constraint_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -443,7 +444,7 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
*/
function getTriggerDefinition($trigger)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -517,7 +518,7 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
return parent::tableInfo($result, $mode);
}
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
+18 -16
View File
@@ -43,10 +43,10 @@
// | Lorenzo Alberton <l.alberton@quipo.it> |
// +----------------------------------------------------------------------+
//
// $Id: sqlite.php,v 1.80 2008/05/03 10:30:14 quipo Exp $
// $Id$
//
require_once('MDB2/Driver/Reverse/Common.php');
require_once 'MDB2/Driver/Reverse/Common.php';
/**
* MDB2 SQlite driver for the schema reverse engineering module
@@ -78,7 +78,7 @@ class MDB2_Driver_Reverse_sqlite extends MDB2_Driver_Reverse_Common
*/
function _getTableColumns($sql)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -95,7 +95,7 @@ class MDB2_Driver_Reverse_sqlite extends MDB2_Driver_Reverse_Common
return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'unexpected empty table column definition list', __FUNCTION__);
}
$regexp = '/^\s*([^\s]+) +(CHAR|VARCHAR|VARCHAR2|TEXT|BOOLEAN|SMALLINT|INT|INTEGER|DECIMAL|BIGINT|DOUBLE|FLOAT|DATETIME|DATE|TIME|LONGTEXT|LONGBLOB)( ?\(([1-9][0-9]*)(:([1-9][0-9]*))?\))?( NULL| NOT NULL)?( UNSIGNED)?( NULL| NOT NULL)?( PRIMARY KEY)?( DEFAULT (\'[^\']*\'|[^ ]+))?( NULL| NOT NULL)?( PRIMARY KEY)?(\s*\-\-.*)?$/i';
$regexp = '/^\s*([^\s]+) +(CHAR|VARCHAR|VARCHAR2|TEXT|BOOLEAN|SMALLINT|INT|INTEGER|DECIMAL|TINYINT|BIGINT|DOUBLE|FLOAT|DATETIME|DATE|TIME|LONGTEXT|LONGBLOB)( ?\(([1-9][0-9]*)(:([1-9][0-9]*))?\))?( NULL| NOT NULL)?( UNSIGNED)?( NULL| NOT NULL)?( PRIMARY KEY)?( DEFAULT (\'[^\']*\'|[^ ]+))?( NULL| NOT NULL)?( PRIMARY KEY)?(\s*\-\-.*)?$/i';
$regexp2 = '/^\s*([^ ]+) +(PRIMARY|UNIQUE|CHECK)$/i';
for ($i=0, $j=0; $i<$count; ++$i) {
if (!preg_match($regexp, trim($column_sql[$i]), $matches)) {
@@ -128,6 +128,8 @@ class MDB2_Driver_Reverse_sqlite extends MDB2_Driver_Reverse_Common
$default = null;
}
$columns[$j]['default'] = $default;
} else {
$columns[$j]['default'] = null;
}
if (isset($matches[7]) && strlen($matches[7])) {
$columns[$j]['notnull'] = ($matches[7] === ' NOT NULL');
@@ -156,11 +158,11 @@ class MDB2_Driver_Reverse_sqlite extends MDB2_Driver_Reverse_Common
*/
function getTableFieldDefinition($table_name, $field_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
list($schema, $table) = $this->splitTableSchema($table_name);
$result = $db->loadModule('Datatype', null, true);
@@ -201,7 +203,7 @@ class MDB2_Driver_Reverse_sqlite extends MDB2_Driver_Reverse_Common
$default = false;
if (array_key_exists('default', $column)) {
$default = $column['default'];
if (is_null($default) && $notnull) {
if ((null === $default) && $notnull) {
$default = '';
}
}
@@ -214,13 +216,13 @@ class MDB2_Driver_Reverse_sqlite extends MDB2_Driver_Reverse_Common
'notnull' => $notnull,
'nativetype' => preg_replace('/^([a-z]+)[^a-z].*/i', '\\1', $column['type'])
);
if (!is_null($length)) {
if (null !== $length) {
$definition[0]['length'] = $length;
}
if (!is_null($unsigned)) {
if (null !== $unsigned) {
$definition[0]['unsigned'] = $unsigned;
}
if (!is_null($fixed)) {
if (null !== $fixed) {
$definition[0]['fixed'] = $fixed;
}
if ($default !== false) {
@@ -258,11 +260,11 @@ class MDB2_Driver_Reverse_sqlite extends MDB2_Driver_Reverse_Common
*/
function getTableIndexDefinition($table_name, $index_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
list($schema, $table) = $this->splitTableSchema($table_name);
$query = "SELECT sql FROM sqlite_master WHERE type='index' AND ";
@@ -341,11 +343,11 @@ class MDB2_Driver_Reverse_sqlite extends MDB2_Driver_Reverse_Common
*/
function getTableConstraintDefinition($table_name, $constraint_name)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
list($schema, $table) = $this->splitTableSchema($table_name);
$query = "SELECT sql FROM sqlite_master WHERE type='index' AND ";
@@ -532,7 +534,7 @@ class MDB2_Driver_Reverse_sqlite extends MDB2_Driver_Reverse_Common
*/
function getTriggerDefinition($trigger)
{
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -596,7 +598,7 @@ class MDB2_Driver_Reverse_sqlite extends MDB2_Driver_Reverse_Common
return parent::tableInfo($result, $mode);
}
$db =$this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
+87 -58
View File
@@ -43,7 +43,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: mysql.php,v 1.214 2008/11/16 21:45:08 quipo Exp $
// $Id$
//
/**
@@ -57,21 +57,30 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
{
// {{{ properties
var $string_quoting = array('start' => "'", 'end' => "'", 'escape' => '\\', 'escape_pattern' => '\\');
public $string_quoting = array(
'start' => "'",
'end' => "'",
'escape' => '\\',
'escape_pattern' => '\\',
);
var $identifier_quoting = array('start' => '`', 'end' => '`', 'escape' => '`');
public $identifier_quoting = array(
'start' => '`',
'end' => '`',
'escape' => '`',
);
var $sql_comments = array(
public $sql_comments = array(
array('start' => '-- ', 'end' => "\n", 'escape' => false),
array('start' => '#', 'end' => "\n", 'escape' => false),
array('start' => '/*', 'end' => '*/', 'escape' => false),
);
var $server_capabilities_checked = false;
protected $server_capabilities_checked = false;
var $start_transaction = false;
protected $start_transaction = false;
var $varchar_max_length = 255;
protected $varchar_max_length = 255;
// }}}
// {{{ constructor
@@ -117,7 +126,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
// }}}
// {{{ _reCheckSupportedOptions()
/**
* If the user changes certain options, other capabilities may depend
* on the new settings, so we need to check them (again).
@@ -338,7 +347,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
register_shutdown_function('MDB2_closeOpenTransactions');
}
$query = $this->start_transaction ? 'START TRANSACTION' : 'SET AUTOCOMMIT = 0';
$result =& $this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
if (PEAR::isError($result)) {
return $result;
}
@@ -385,13 +394,13 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
'transactions are not supported', __FUNCTION__);
}
$result =& $this->_doQuery('COMMIT', true);
$result = $this->_doQuery('COMMIT', true);
if (PEAR::isError($result)) {
return $result;
}
if (!$this->start_transaction) {
$query = 'SET AUTOCOMMIT = 1';
$result =& $this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
if (PEAR::isError($result)) {
return $result;
}
@@ -431,13 +440,13 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
}
$query = 'ROLLBACK';
$result =& $this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
if (PEAR::isError($result)) {
return $result;
}
if (!$this->start_transaction) {
$query = 'SET AUTOCOMMIT = 1';
$result =& $this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
if (PEAR::isError($result)) {
return $result;
}
@@ -457,12 +466,16 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
* READ COMMITTED (prevents dirty reads)
* REPEATABLE READ (prevents nonrepeatable reads)
* SERIALIZABLE (prevents phantom reads)
* @param array some transaction options:
* 'wait' => 'WAIT' | 'NO WAIT'
* 'rw' => 'READ WRITE' | 'READ ONLY'
*
* @return mixed MDB2_OK on success, a MDB2 error on failure
*
* @access public
* @since 2.1.1
*/
static function setTransactionIsolation($isolation, $options = array())
function setTransactionIsolation($isolation, $options = array())
{
$this->debug('Setting transaction isolation level', __FUNCTION__, array('is_manip' => true));
if (!$this->supports('transactions')) {
@@ -501,14 +514,14 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
}
$params = array();
if ($this->dsn['protocol'] && $this->dsn['protocol'] == 'unix') {
$params[0] = ':' . $this->dsn['socket'];
$unix = ($this->dsn['protocol'] && $this->dsn['protocol'] == 'unix');
if (empty($this->dsn['hostspec'])) {
$this->dsn['hostspec'] = $unix ? '' : 'localhost';
}
if ($this->dsn['hostspec']) {
$params[0] = $this->dsn['hostspec'] . ($this->dsn['port'] ? ':' . $this->dsn['port'] : '');
} else {
$params[0] = $this->dsn['hostspec'] ? $this->dsn['hostspec']
: 'localhost';
if ($this->dsn['port']) {
$params[0].= ':' . $this->dsn['port'];
}
$params[0] = ':' . $this->dsn['socket'];
}
$params[] = $username ? $username : null;
$params[] = $password ? $password : null;
@@ -626,7 +639,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
$client_info = mysql_get_client_info();
if (function_exists('mysql_set_charset') && version_compare($client_info, '5.0.6')) {
if (!$result = mysql_set_charset($charset, $connection)) {
$err =& $this->raiseError(null, null, null,
$err = $this->raiseError(null, null, null,
'Could not set client character set', __FUNCTION__);
return $err;
}
@@ -634,7 +647,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
}
$query = "SET NAMES '".mysql_real_escape_string($charset, $connection)."'";
if (!is_null($collation)) {
$query .= " COLLATE '".mysqli_real_escape_string($connection, $collation)."'";
$query .= " COLLATE '".mysql_real_escape_string($collation, $connection)."'";
}
return $this->_doQuery($query, true, $connection);
}
@@ -709,7 +722,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
// }}}
// {{{ standaloneQuery()
/**
/**
* execute a query as DBA
*
* @param string $query the SQL query
@@ -719,7 +732,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
* @return mixed MDB2_OK on success, a MDB2 error on failure
* @access public
*/
function &standaloneQuery($query, $types = null, $is_manip = false)
function standaloneQuery($query, $types = null, $is_manip = false)
{
$user = $this->options['DBA_username']? $this->options['DBA_username'] : $this->dsn['username'];
$pass = $this->options['DBA_password']? $this->options['DBA_password'] : $this->dsn['password'];
@@ -732,8 +745,8 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
$limit = $this->limit;
$this->offset = $this->limit = 0;
$query = $this->_modifyQuery($query, $is_manip, $limit, $offset);
$result =& $this->_doQuery($query, $is_manip, $connection, $this->database_name);
$result = $this->_doQuery($query, $is_manip, $connection, $this->database_name);
if (!PEAR::isError($result)) {
$result = $this->_affectedRows($connection, $result);
}
@@ -754,7 +767,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
* @return result or error object
* @access protected
*/
function &_doQuery($query, $is_manip = false, $connection = null, $database_name = null)
function _doQuery($query, $is_manip = false, $connection = null, $database_name = null)
{
$this->last_query = $query;
$result = $this->debug($query, 'query', array('is_manip' => $is_manip, 'when' => 'pre'));
@@ -793,8 +806,8 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
$function = $this->options['result_buffering']
? 'mysql_query' : 'mysql_unbuffered_query';
$result = @$function($query, $connection);
if (!$result) {
$err =& $this->raiseError(null, null, null,
if (!$result && 0 !== mysql_errno($connection)) {
$err = $this->raiseError(null, null, null,
'Could not execute statement', __FUNCTION__);
return $err;
}
@@ -945,7 +958,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
$this->supported['triggers'] = false;
$this->start_transaction = false;
$this->varchar_max_length = 255;
$server_info = $this->getServerVersion();
if (is_array($server_info)) {
$server_version = $server_info['major'].'.'.$server_info['minor'].'.'.$server_info['patch'];
@@ -983,7 +996,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
// {{{ function _skipUserDefinedVariable($query, $position)
/**
* Utility method, used by prepare() to avoid misinterpreting MySQL user
* Utility method, used by prepare() to avoid misinterpreting MySQL user
* defined variables (SELECT @x:=5) for placeholders.
* Check if the placeholder is a false positive, i.e. if it is an user defined
* variable instead. If so, skip it and advance the position, otherwise
@@ -1032,13 +1045,18 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
* @access public
* @see bindParam, execute
*/
function &prepare($query, $types = null, $result_types = null, $lobs = array())
function prepare($query, $types = null, $result_types = null, $lobs = array())
{
// connect to get server capabilities (http://pear.php.net/bugs/16147)
$connection = $this->getConnection();
if (PEAR::isError($connection)) {
return $connection;
}
if ($this->options['emulate_prepared']
|| $this->supported['prepared_statements'] !== true
) {
$obj =& parent::prepare($query, $types, $result_types, $lobs);
return $obj;
return parent::prepare($query, $types, $result_types, $lobs);
}
$is_manip = ($result_types === MDB2_PREPARE_MANIP);
$offset = $this->offset;
@@ -1072,7 +1090,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
if (is_null($placeholder_type)) {
$placeholder_type_guess = $query[$p_position];
}
$new_pos = $this->_skipDelimitedStrings($query, $position, $p_position);
if (PEAR::isError($new_pos)) {
return $new_pos;
@@ -1081,7 +1099,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
$position = $new_pos;
continue; //evaluate again starting from the new position
}
//make sure this is not part of an user defined variable
$new_pos = $this->_skipUserDefinedVariable($query, $position);
if ($new_pos != $position) {
@@ -1098,7 +1116,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
$regexp = '/^.{'.($position+1).'}('.$this->options['bindname_format'].').*$/s';
$parameter = preg_replace($regexp, '\\1', $query);
if ($parameter === '') {
$err =& $this->raiseError(MDB2_ERROR_SYNTAX, null, null,
$err = $this->raiseError(MDB2_ERROR_SYNTAX, null, null,
'named parameter name must match "bindname_format" option', __FUNCTION__);
return $err;
}
@@ -1112,15 +1130,12 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
$position = $p_position;
}
}
$connection = $this->getConnection();
if (PEAR::isError($connection)) {
return $connection;
}
static $prep_statement_counter = 1;
$statement_name = sprintf($this->options['statement_format'], $this->phptype, $prep_statement_counter++ . sha1(microtime() + mt_rand()));
$statement_name = substr(strtolower($statement_name), 0, $this->options['max_identifiers_length']);
$query = "PREPARE $statement_name FROM ".$this->quote($query, 'text');
$statement =& $this->_doQuery($query, true, $connection);
$statement = $this->_doQuery($query, true, $connection);
if (PEAR::isError($statement)) {
return $statement;
}
@@ -1240,7 +1255,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
$table = $this->quoteIdentifier($table, true);
$query = "REPLACE INTO $table ($query) VALUES ($values)";
$result =& $this->_doQuery($query, true, $connection);
$result = $this->_doQuery($query, true, $connection);
if (PEAR::isError($result)) {
return $result;
}
@@ -1268,7 +1283,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
$query = "INSERT INTO $sequence_name ($seqcol_name) VALUES (NULL)";
$this->pushErrorHandling(PEAR_ERROR_RETURN);
$this->expectError(MDB2_ERROR_NOSUCHTABLE);
$result =& $this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
$this->popExpect();
$this->popErrorHandling();
if (PEAR::isError($result)) {
@@ -1287,7 +1302,7 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
$value = $this->lastInsertID();
if (is_numeric($value)) {
$query = "DELETE FROM $sequence_name WHERE $seqcol_name < $value";
$result =& $this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
if (PEAR::isError($result)) {
$this->warnings[] = 'nextID: could not delete previous sequence table values from '.$seq_name;
}
@@ -1310,7 +1325,8 @@ class MDB2_Driver_mysql extends MDB2_Driver_Common
function lastInsertID($table = null, $field = null)
{
// not using mysql_insert_id() due to http://pear.php.net/bugs/bug.php?id=8051
return $this->queryOne('SELECT LAST_INSERT_ID()', 'integer');
// not casting to integer to handle BIGINT http://pear.php.net/bugs/bug.php?id=17650
return $this->queryOne('SELECT LAST_INSERT_ID()');
}
// }}}
@@ -1352,7 +1368,7 @@ class MDB2_Result_mysql extends MDB2_Result_Common
* @return int data array on success, a MDB2 error on failure
* @access public
*/
function &fetchRow($fetchmode = MDB2_FETCHMODE_DEFAULT, $rownum = null)
function fetchRow($fetchmode = MDB2_FETCHMODE_DEFAULT, $rownum = null)
{
if (!is_null($rownum)) {
$seek = $this->seek($rownum);
@@ -1363,7 +1379,9 @@ class MDB2_Result_mysql extends MDB2_Result_Common
if ($fetchmode == MDB2_FETCHMODE_DEFAULT) {
$fetchmode = $this->db->fetchmode;
}
if ($fetchmode & MDB2_FETCHMODE_ASSOC) {
if ( $fetchmode == MDB2_FETCHMODE_ASSOC
|| $fetchmode == MDB2_FETCHMODE_OBJECT
) {
$row = @mysql_fetch_assoc($this->result);
if (is_array($row)
&& $this->db->options['portability'] & MDB2_PORTABILITY_FIX_CASE
@@ -1376,12 +1394,11 @@ class MDB2_Result_mysql extends MDB2_Result_Common
if (!$row) {
if ($this->result === false) {
$err =& $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
$err = $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
return $err;
}
$null = null;
return $null;
return null;
}
$mode = $this->db->options['portability'] & MDB2_PORTABILITY_EMPTY_TO_NULL;
$rtrim = false;
@@ -1395,8 +1412,16 @@ class MDB2_Result_mysql extends MDB2_Result_Common
if ($mode) {
$this->db->_fixResultArrayValues($row, $mode);
}
if (!empty($this->types)) {
if ( ( $fetchmode != MDB2_FETCHMODE_ASSOC
&& $fetchmode != MDB2_FETCHMODE_OBJECT)
&& !empty($this->types)
) {
$row = $this->db->datatype->convertResultRow($this->types, $row, $rtrim);
} elseif (($fetchmode == MDB2_FETCHMODE_ASSOC
|| $fetchmode == MDB2_FETCHMODE_OBJECT)
&& !empty($this->types_assoc)
) {
$row = $this->db->datatype->convertResultRow($this->types_assoc, $row, $rtrim);
}
if (!empty($this->values)) {
$this->_assignBindColumns($row);
@@ -1406,7 +1431,8 @@ class MDB2_Result_mysql extends MDB2_Result_Common
if ($object_class == 'stdClass') {
$row = (object) $row;
} else {
$row = new $object_class($row);
$rowObj = new $object_class($row);
$row = $rowObj;
}
}
++$this->rownum;
@@ -1568,6 +1594,8 @@ class MDB2_BufferedResult_mysql extends MDB2_Result_mysql
}
return $rows;
}
// }}}
}
/**
@@ -1591,10 +1619,10 @@ class MDB2_Statement_mysql extends MDB2_Statement_Common
* a MDB2 error on failure
* @access private
*/
function &_execute($result_class = true, $result_wrap_class = false)
function _execute($result_class = true, $result_wrap_class = true)
{
if (is_null($this->statement)) {
$result =& parent::_execute($result_class, $result_wrap_class);
$result = parent::_execute($result_class, $result_wrap_class);
return $result;
}
$this->db->last_query = $this->query;
@@ -1617,6 +1645,7 @@ class MDB2_Statement_mysql extends MDB2_Statement_Common
return $this->db->raiseError(MDB2_ERROR_NOT_FOUND, null, null,
'Unable to bind to missing placeholder: '.$parameter, __FUNCTION__);
}
$close = false;
$value = $this->values[$parameter];
$type = array_key_exists($parameter, $this->types) ? $this->types[$parameter] : null;
if (is_resource($value) || $type == 'clob' || $type == 'blob' && $this->db->options['lob_allow_url_include']) {
@@ -1661,7 +1690,7 @@ class MDB2_Statement_mysql extends MDB2_Statement_Common
return $affected_rows;
}
$result =& $this->db->_wrapResult($result, $this->result_types,
$result = $this->db->_wrapResult($result, $this->result_types,
$result_class, $result_wrap_class, $this->limit, $this->offset);
$this->db->debug($this->query, 'execute', array('is_manip' => $this->is_manip, 'when' => 'post', 'result' => $result));
return $result;
@@ -1697,4 +1726,4 @@ class MDB2_Statement_mysql extends MDB2_Statement_Common
return $result;
}
}
?>
?>
+132 -68
View File
@@ -43,7 +43,7 @@
// | Author: Paul Cooper <pgc@ucecom.com> |
// +----------------------------------------------------------------------+
//
// $Id: pgsql.php,v 1.203 2008/11/29 14:04:46 afz Exp $
// $Id$
/**
* MDB2 PostGreSQL driver
@@ -236,21 +236,22 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
function beginTransaction($savepoint = null)
{
$this->debug('Starting transaction/savepoint', __FUNCTION__, array('is_manip' => true, 'savepoint' => $savepoint));
if (!is_null($savepoint)) {
if (null !== $savepoint) {
if (!$this->in_transaction) {
return $this->raiseError(MDB2_ERROR_INVALID, null, null,
'savepoint cannot be released when changes are auto committed', __FUNCTION__);
}
$query = 'SAVEPOINT '.$savepoint;
return $this->_doQuery($query, true);
} elseif ($this->in_transaction) {
}
if ($this->in_transaction) {
return MDB2_OK; //nothing to do
}
if (!$this->destructor_registered && $this->opened_persistent) {
$this->destructor_registered = true;
register_shutdown_function('MDB2_closeOpenTransactions');
}
$result =& $this->_doQuery('BEGIN', true);
$result = $this->_doQuery('BEGIN', true);
if (PEAR::isError($result)) {
return $result;
}
@@ -279,12 +280,12 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
return $this->raiseError(MDB2_ERROR_INVALID, null, null,
'commit/release savepoint cannot be done changes are auto committed', __FUNCTION__);
}
if (!is_null($savepoint)) {
if (null !== $savepoint) {
$query = 'RELEASE SAVEPOINT '.$savepoint;
return $this->_doQuery($query, true);
}
$result =& $this->_doQuery('COMMIT', true);
$result = $this->_doQuery('COMMIT', true);
if (PEAR::isError($result)) {
return $result;
}
@@ -313,13 +314,13 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
return $this->raiseError(MDB2_ERROR_INVALID, null, null,
'rollback cannot be done changes are auto committed', __FUNCTION__);
}
if (!is_null($savepoint)) {
if (null !== $savepoint) {
$query = 'ROLLBACK TO SAVEPOINT '.$savepoint;
return $this->_doQuery($query, true);
}
$query = 'ROLLBACK';
$result =& $this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
if (PEAR::isError($result)) {
return $result;
}
@@ -338,12 +339,16 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
* READ COMMITTED (prevents dirty reads)
* REPEATABLE READ (prevents nonrepeatable reads)
* SERIALIZABLE (prevents phantom reads)
* @param array some transaction options:
* 'wait' => 'WAIT' | 'NO WAIT'
* 'rw' => 'READ WRITE' | 'READ ONLY'
*
* @return mixed MDB2_OK on success, a MDB2 error on failure
*
* @access public
* @since 2.1.1
*/
static function setTransactionIsolation($isolation, $options = array())
function setTransactionIsolation($isolation, $options = array())
{
$this->debug('Setting transaction isolation level', __FUNCTION__, array('is_manip' => true));
switch ($isolation) {
@@ -376,7 +381,7 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
return $this->raiseError(MDB2_ERROR_NOT_FOUND, null, null,
'extension '.$this->phptype.' is not compiled into PHP', __FUNCTION__);
}
if ($database_name == '') {
$database_name = 'template1';
}
@@ -452,6 +457,29 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
}
}
// Enable extra compatibility settings on 8.2 and later
if (function_exists('pg_parameter_status')) {
$version = pg_parameter_status($connection, 'server_version');
if ($version == false) {
return $this->raiseError(null, null, null,
'Unable to retrieve server version', __FUNCTION__);
}
$version = explode ('.', $version);
if ( $version['0'] > 8
|| ($version['0'] == 8 && $version['1'] >= 2)
) {
if (!@pg_query($connection, "SET SESSION STANDARD_CONFORMING_STRINGS = OFF")) {
return $this->raiseError(null, null, null,
'Unable to set standard_conforming_strings to off', __FUNCTION__);
}
if (!@pg_query($connection, "SET SESSION ESCAPE_STRING_WARNING = OFF")) {
return $this->raiseError(null, null, null,
'Unable to set escape_string_warning to off', __FUNCTION__);
}
}
}
return $connection;
}
@@ -509,7 +537,7 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
*/
function setCharset($charset, $connection = null)
{
if (is_null($connection)) {
if (null === $connection) {
$connection = $this->getConnection();
if (PEAR::isError($connection)) {
return $connection;
@@ -595,7 +623,7 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
// }}}
// {{{ standaloneQuery()
/**
/**
* execute a query as DBA
*
* @param string $query the SQL query
@@ -605,7 +633,7 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
* @return mixed MDB2_OK on success, a MDB2 error on failure
* @access public
*/
function &standaloneQuery($query, $types = null, $is_manip = false)
function standaloneQuery($query, $types = null, $is_manip = false)
{
$user = $this->options['DBA_username']? $this->options['DBA_username'] : $this->dsn['username'];
$pass = $this->options['DBA_password']? $this->options['DBA_password'] : $this->dsn['password'];
@@ -619,12 +647,12 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
$this->offset = $this->limit = 0;
$query = $this->_modifyQuery($query, $is_manip, $limit, $offset);
$result =& $this->_doQuery($query, $is_manip, $connection, $this->database_name);
$result = $this->_doQuery($query, $is_manip, $connection, $this->database_name);
if (!PEAR::isError($result)) {
if ($is_manip) {
$result = $this->_affectedRows($connection, $result);
} else {
$result =& $this->_wrapResult($result, $types, true, false, $limit, $offset);
$result = $this->_wrapResult($result, $types, true, true, $limit, $offset);
}
}
@@ -644,7 +672,7 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
* @return result or error object
* @access protected
*/
function &_doQuery($query, $is_manip = false, $connection = null, $database_name = null)
function _doQuery($query, $is_manip = false, $connection = null, $database_name = null)
{
$this->last_query = $query;
$result = $this->debug($query, 'query', array('is_manip' => $is_manip, 'when' => 'pre'));
@@ -659,7 +687,7 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
return $result;
}
if (is_null($connection)) {
if (null === $connection) {
$connection = $this->getConnection();
if (PEAR::isError($connection)) {
return $connection;
@@ -669,12 +697,12 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
$function = $this->options['multi_query'] ? 'pg_send_query' : 'pg_query';
$result = @$function($connection, $query);
if (!$result) {
$err =& $this->raiseError(null, null, null,
$err = $this->raiseError(null, null, null,
'Could not execute statement', __FUNCTION__);
return $err;
} elseif ($this->options['multi_query']) {
if (!($result = @pg_get_result($connection))) {
$err =& $this->raiseError(null, null, null,
$err = $this->raiseError(null, null, null,
'Could not get the first result from a multi query', __FUNCTION__);
return $err;
}
@@ -697,7 +725,7 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
*/
function _affectedRows($connection, $result = null)
{
if (is_null($connection)) {
if (null === $connection) {
$connection = $this->getConnection();
if (PEAR::isError($connection)) {
return $connection;
@@ -736,10 +764,10 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
}
return $query;
}
// }}}
// {{{ _modifyManipQuery()
/**
* Changes a manip query string for various DBMS specific reasons
*
@@ -841,11 +869,10 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
* @access public
* @see bindParam, execute
*/
function &prepare($query, $types = null, $result_types = null, $lobs = array())
function prepare($query, $types = null, $result_types = null, $lobs = array())
{
if ($this->options['emulate_prepared']) {
$obj =& parent::prepare($query, $types, $result_types, $lobs);
return $obj;
return parent::prepare($query, $types, $result_types, $lobs);
}
$is_manip = ($result_types === MDB2_PREPARE_MANIP);
$offset = $this->offset;
@@ -885,10 +912,10 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
} else {
break;
}
if (is_null($placeholder_type)) {
if (null === $placeholder_type) {
$placeholder_type_guess = $query[$p_position];
}
$new_pos = $this->_skipDelimitedStrings($query, $position, $p_position);
if (PEAR::isError($new_pos)) {
return $new_pos;
@@ -899,7 +926,7 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
}
if ($query[$position] == $placeholder_type_guess) {
if (is_null($placeholder_type)) {
if (null === $placeholder_type) {
$placeholder_type = $query[$p_position];
$question = $colon = $placeholder_type;
if (!empty($types) && is_array($types)) {
@@ -916,7 +943,7 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
$regexp = '/^.{'.($position+1).'}('.$this->options['bindname_format'].').*$/s';
$param = preg_replace($regexp, '\\1', $query);
if ($param === '') {
$err =& $this->raiseError(MDB2_ERROR_SYNTAX, null, null,
$err = $this->raiseError(MDB2_ERROR_SYNTAX, null, null,
'named parameter name must match "bindname_format" option', __FUNCTION__);
return $err;
}
@@ -932,17 +959,18 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
$pgtypes[] = 'text';
}
}
if (($key_parameter = array_search($name, $positions))) {
$next_parameter = 1;
foreach ($positions as $key => $value) {
if ($key_parameter == $key) {
break;
}
++$next_parameter;
}
if (($key_parameter = array_search($name, $positions)) !== false) {
//$next_parameter = 1;
$parameter = $key_parameter + 1;
//foreach ($positions as $key => $value) {
// if ($key_parameter == $key) {
// break;
// }
// ++$next_parameter;
//}
} else {
++$parameter;
$next_parameter = $parameter;
//$next_parameter = $parameter;
$positions[] = $name;
}
$query = substr_replace($query, '$'.$parameter, $position, $length);
@@ -958,10 +986,10 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
static $prep_statement_counter = 1;
$statement_name = sprintf($this->options['statement_format'], $this->phptype, $prep_statement_counter++ . sha1(microtime() + mt_rand()));
$statement_name = substr(strtolower($statement_name), 0, $this->options['max_identifiers_length']);
if ($pgtypes === false) {
if (false === $pgtypes) {
$result = @pg_prepare($connection, $statement_name, $query);
if (!$result) {
$err =& $this->raiseError(null, null, null,
$err = $this->raiseError(null, null, null,
'Unable to create prepared statement handle', __FUNCTION__);
return $err;
}
@@ -971,7 +999,7 @@ class MDB2_Driver_pgsql extends MDB2_Driver_Common
$types_string = ' ('.implode(', ', $pgtypes).') ';
}
$query = 'PREPARE '.$statement_name.$types_string.' AS '.$query;
$statement =& $this->_doQuery($query, true, $connection);
$statement = $this->_doQuery($query, true, $connection);
if (PEAR::isError($statement)) {
return $statement;
}
@@ -1140,9 +1168,9 @@ class MDB2_Result_pgsql extends MDB2_Result_Common
* @return int data array on success, a MDB2 error on failure
* @access public
*/
function &fetchRow($fetchmode = MDB2_FETCHMODE_DEFAULT, $rownum = null)
function fetchRow($fetchmode = MDB2_FETCHMODE_DEFAULT, $rownum = null)
{
if (!is_null($rownum)) {
if (null !== $rownum) {
$seek = $this->seek($rownum);
if (PEAR::isError($seek)) {
return $seek;
@@ -1151,7 +1179,9 @@ class MDB2_Result_pgsql extends MDB2_Result_Common
if ($fetchmode == MDB2_FETCHMODE_DEFAULT) {
$fetchmode = $this->db->fetchmode;
}
if ($fetchmode & MDB2_FETCHMODE_ASSOC) {
if ( $fetchmode == MDB2_FETCHMODE_ASSOC
|| $fetchmode == MDB2_FETCHMODE_OBJECT
) {
$row = @pg_fetch_array($this->result, null, PGSQL_ASSOC);
if (is_array($row)
&& $this->db->options['portability'] & MDB2_PORTABILITY_FIX_CASE
@@ -1162,13 +1192,12 @@ class MDB2_Result_pgsql extends MDB2_Result_Common
$row = @pg_fetch_row($this->result);
}
if (!$row) {
if ($this->result === false) {
$err =& $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
if (false === $this->result) {
$err = $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
return $err;
}
$null = null;
return $null;
return null;
}
$mode = $this->db->options['portability'] & MDB2_PORTABILITY_EMPTY_TO_NULL;
$rtrim = false;
@@ -1182,8 +1211,16 @@ class MDB2_Result_pgsql extends MDB2_Result_Common
if ($mode) {
$this->db->_fixResultArrayValues($row, $mode);
}
if (!empty($this->types)) {
if ( ( $fetchmode != MDB2_FETCHMODE_ASSOC
&& $fetchmode != MDB2_FETCHMODE_OBJECT)
&& !empty($this->types)
) {
$row = $this->db->datatype->convertResultRow($this->types, $row, $rtrim);
} elseif (($fetchmode == MDB2_FETCHMODE_ASSOC
|| $fetchmode == MDB2_FETCHMODE_OBJECT)
&& !empty($this->types_assoc)
) {
$row = $this->db->datatype->convertResultRow($this->types_assoc, $row, $rtrim);
}
if (!empty($this->values)) {
$this->_assignBindColumns($row);
@@ -1193,7 +1230,8 @@ class MDB2_Result_pgsql extends MDB2_Result_Common
if ($object_class == 'stdClass') {
$row = (object) $row;
} else {
$row = new $object_class($row);
$rowObj = new $object_class($row);
$row = $rowObj;
}
}
++$this->rownum;
@@ -1242,11 +1280,12 @@ class MDB2_Result_pgsql extends MDB2_Result_Common
function numCols()
{
$cols = @pg_num_fields($this->result);
if (is_null($cols)) {
if ($this->result === false) {
if (null === $cols) {
if (false === $this->result) {
return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
} elseif (is_null($this->result)) {
}
if (null === $this->result) {
return count($this->types);
}
return $this->db->raiseError(null, null, null,
@@ -1290,7 +1329,7 @@ class MDB2_Result_pgsql extends MDB2_Result_Common
{
if (is_resource($this->result) && $this->db->connection) {
$free = @pg_free_result($this->result);
if ($free === false) {
if (false === $free) {
return $this->db->raiseError(null, null, null,
'Could not free result', __FUNCTION__);
}
@@ -1321,10 +1360,11 @@ class MDB2_BufferedResult_pgsql extends MDB2_Result_pgsql
function seek($rownum = 0)
{
if ($this->rownum != ($rownum - 1) && !@pg_result_seek($this->result, $rownum)) {
if ($this->result === false) {
if (false === $this->result) {
return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
} elseif (is_null($this->result)) {
}
if (null === $this->result) {
return MDB2_OK;
}
return $this->db->raiseError(MDB2_ERROR_INVALID, null, null,
@@ -1364,11 +1404,12 @@ class MDB2_BufferedResult_pgsql extends MDB2_Result_pgsql
function numRows()
{
$rows = @pg_num_rows($this->result);
if (is_null($rows)) {
if ($this->result === false) {
if (null === $rows) {
if (false === $this->result) {
return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
} elseif (is_null($this->result)) {
}
if (null === $this->result) {
return 0;
}
return $this->db->raiseError(null, null, null,
@@ -1399,11 +1440,10 @@ class MDB2_Statement_pgsql extends MDB2_Statement_Common
* a MDB2 error on failure
* @access private
*/
function &_execute($result_class = true, $result_wrap_class = false)
function _execute($result_class = true, $result_wrap_class = true)
{
if (is_null($this->statement)) {
$result =& parent::_execute($result_class, $result_wrap_class);
return $result;
if (null === $this->statement) {
return parent::_execute($result_class, $result_wrap_class);
}
$this->db->last_query = $this->query;
$this->db->debug($this->query, 'execute', array('is_manip' => $this->is_manip, 'when' => 'pre', 'parameters' => $this->values));
@@ -1464,7 +1504,7 @@ class MDB2_Statement_pgsql extends MDB2_Statement_Common
if (!$query) {
$result = @pg_execute($connection, $this->statement, $parameters);
if (!$result) {
$err =& $this->db->raiseError(null, null, null,
$err = $this->db->raiseError(null, null, null,
'Unable to execute statement', __FUNCTION__);
return $err;
}
@@ -1480,7 +1520,7 @@ class MDB2_Statement_pgsql extends MDB2_Statement_Common
return $affected_rows;
}
$result =& $this->db->_wrapResult($result, $this->result_types,
$result = $this->db->_wrapResult($result, $this->result_types,
$result_class, $result_wrap_class, $this->limit, $this->offset);
$this->db->debug($this->query, 'execute', array('is_manip' => $this->is_manip, 'when' => 'post', 'result' => $result));
return $result;
@@ -1497,13 +1537,13 @@ class MDB2_Statement_pgsql extends MDB2_Statement_Common
*/
function free()
{
if (is_null($this->positions)) {
if (null === $this->positions) {
return $this->db->raiseError(MDB2_ERROR, null, null,
'Prepared statement has already been freed', __FUNCTION__);
}
$result = MDB2_OK;
if (!is_null($this->statement)) {
if (null !== $this->statement) {
$connection = $this->db->getConnection();
if (PEAR::isError($connection)) {
return $connection;
@@ -1515,5 +1555,29 @@ class MDB2_Statement_pgsql extends MDB2_Statement_Common
parent::free();
return $result;
}
/**
* drop an existing table
*
* @param string $name name of the table that should be dropped
* @return mixed MDB2_OK on success, a MDB2 error on failure
* @access public
*/
function dropTable($name)
{
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
$name = $db->quoteIdentifier($name, true);
$result = $db->exec("DROP TABLE $name");
if (PEAR::isError($result)) {
$result = $db->exec("DROP TABLE $name CASCADE");
}
return $result;
}
}
?>
?>
+58 -42
View File
@@ -43,7 +43,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: sqlite.php,v 1.165 2008/11/30 14:28:01 afz Exp $
// $Id$
//
/**
@@ -126,12 +126,12 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
}
$native_msg = $this->_lasterror
? html_entity_decode($this->_lasterror) : @sqlite_error_string($native_code);
// PHP 5.2+ prepends the function name to $php_errormsg, so we need
// this hack to work around it, per bug #9599.
$native_msg = preg_replace('/^sqlite[a-z_]+\(\)[^:]*: /', '', $native_msg);
if (is_null($error)) {
if (null === $error) {
static $error_regexps;
if (empty($error_regexps)) {
$error_regexps = array(
@@ -142,6 +142,7 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
'/is not unique/' => MDB2_ERROR_CONSTRAINT,
'/columns .* are not unique/i' => MDB2_ERROR_CONSTRAINT,
'/uniqueness constraint failed/' => MDB2_ERROR_CONSTRAINT,
'/violates .*constraint/' => MDB2_ERROR_CONSTRAINT,
'/may not be NULL/' => MDB2_ERROR_CONSTRAINT_NOT_NULL,
'/^no such column:/' => MDB2_ERROR_NOSUCHFIELD,
'/no column named/' => MDB2_ERROR_NOSUCHFIELD,
@@ -194,10 +195,11 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
function beginTransaction($savepoint = null)
{
$this->debug('Starting transaction/savepoint', __FUNCTION__, array('is_manip' => true, 'savepoint' => $savepoint));
if (!is_null($savepoint)) {
if (null !== $savepoint) {
return $this->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'savepoints are not supported', __FUNCTION__);
} elseif ($this->in_transaction) {
}
if ($this->in_transaction) {
return MDB2_OK; //nothing to do
}
if (!$this->destructor_registered && $this->opened_persistent) {
@@ -205,7 +207,7 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
register_shutdown_function('MDB2_closeOpenTransactions');
}
$query = 'BEGIN TRANSACTION '.$this->options['base_transaction_name'];
$result =$this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
if (PEAR::isError($result)) {
return $result;
}
@@ -234,13 +236,13 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
return $this->raiseError(MDB2_ERROR_INVALID, null, null,
'commit/release savepoint cannot be done changes are auto committed', __FUNCTION__);
}
if (!is_null($savepoint)) {
if (null !== $savepoint) {
return $this->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'savepoints are not supported', __FUNCTION__);
}
$query = 'COMMIT TRANSACTION '.$this->options['base_transaction_name'];
$result =$this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
if (PEAR::isError($result)) {
return $result;
}
@@ -269,13 +271,13 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
return $this->raiseError(MDB2_ERROR_INVALID, null, null,
'rollback cannot be done changes are auto committed', __FUNCTION__);
}
if (!is_null($savepoint)) {
if (null !== $savepoint) {
return $this->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'savepoints are not supported', __FUNCTION__);
}
$query = 'ROLLBACK TRANSACTION '.$this->options['base_transaction_name'];
$result =$this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
if (PEAR::isError($result)) {
return $result;
}
@@ -294,12 +296,16 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
* READ COMMITTED (prevents dirty reads)
* REPEATABLE READ (prevents nonrepeatable reads)
* SERIALIZABLE (prevents phantom reads)
* @param array some transaction options:
* 'wait' => 'WAIT' | 'NO WAIT'
* 'rw' => 'READ WRITE' | 'READ ONLY'
*
* @return mixed MDB2_OK on success, a MDB2 error on failure
*
* @access public
* @since 2.1.1
*/
static function setTransactionIsolation($isolation,$options=array())
function setTransactionIsolation($isolation, $options = array())
{
$this->debug('Setting transaction isolation level', __FUNCTION__, array('is_manip' => true));
switch ($isolation) {
@@ -347,7 +353,6 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
**/
function connect()
{
$datadir=OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
$database_file = $this->_getDatabaseFile($this->database_name);
if (is_resource($this->connection)) {
//if (count(array_diff($this->connected_dsn, $this->dsn)) == 0
@@ -371,9 +376,6 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
}
if ($database_file !== ':memory:') {
if(!strpos($database_file,'.db')){
$database_file="$datadir/$database_file.db";
}
if (!file_exists($database_file)) {
if (!touch($database_file)) {
return $this->raiseError(MDB2_ERROR_NOT_FOUND, null, null,
@@ -409,9 +411,7 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
$php_errormsg = '';
if (version_compare('5.1.0', PHP_VERSION, '>')) {
@ini_set('track_errors', true);
echo 1;
$connection = @$connect_function($database_file);
echo 2;
@ini_restore('track_errors');
} else {
$connection = @$connect_function($database_file, 0666, $php_errormsg);
@@ -505,7 +505,7 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
* @return result or error object
* @access protected
*/
function &_doQuery($query, $is_manip = false, $connection = null, $database_name = null)
function _doQuery($query, $is_manip = false, $connection = null, $database_name = null)
{
$this->last_query = $query;
$result = $this->debug($query, 'query', array('is_manip' => $is_manip, 'when' => 'pre'));
@@ -520,7 +520,7 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
return $result;
}
if (is_null($connection)) {
if (null === $connection) {
$connection = $this->getConnection();
if (PEAR::isError($connection)) {
return $connection;
@@ -544,7 +544,11 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
$this->_lasterror = $php_errormsg;
if (!$result) {
$err =$this->raiseError(null, null, null,
$code = null;
if (0 === strpos($this->_lasterror, 'no such table')) {
$code = MDB2_ERROR_NOSUCHTABLE;
}
$err = $this->raiseError($code, null, null,
'Could not execute statement', __FUNCTION__);
return $err;
}
@@ -566,7 +570,7 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
*/
function _affectedRows($connection, $result = null)
{
if (is_null($connection)) {
if (null === $connection) {
$connection = $this->getConnection();
if (PEAR::isError($connection)) {
return $connection;
@@ -759,7 +763,7 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
$table = $this->quoteIdentifier($table, true);
$query = "REPLACE INTO $table ($query) VALUES ($values)";
$result =$this->_doQuery($query, true, $connection);
$result = $this->_doQuery($query, true, $connection);
if (PEAR::isError($result)) {
return $result;
}
@@ -787,7 +791,7 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
$query = "INSERT INTO $sequence_name ($seqcol_name) VALUES (NULL)";
$this->pushErrorHandling(PEAR_ERROR_RETURN);
$this->expectError(MDB2_ERROR_NOSUCHTABLE);
$result =$this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
$this->popExpect();
$this->popErrorHandling();
if (PEAR::isError($result)) {
@@ -806,7 +810,7 @@ class MDB2_Driver_sqlite extends MDB2_Driver_Common
$value = $this->lastInsertID();
if (is_numeric($value)) {
$query = "DELETE FROM $sequence_name WHERE $seqcol_name < $value";
$result =$this->_doQuery($query, true);
$result = $this->_doQuery($query, true);
if (PEAR::isError($result)) {
$this->warnings[] = 'nextID: could not delete previous sequence table values from '.$seq_name;
}
@@ -879,9 +883,9 @@ class MDB2_Result_sqlite extends MDB2_Result_Common
* @return int data array on success, a MDB2 error on failure
* @access public
*/
function &fetchRow($fetchmode = MDB2_FETCHMODE_DEFAULT, $rownum = null)
function fetchRow($fetchmode = MDB2_FETCHMODE_DEFAULT, $rownum = null)
{
if (!is_null($rownum)) {
if (null !== $rownum) {
$seek = $this->seek($rownum);
if (PEAR::isError($seek)) {
return $seek;
@@ -890,7 +894,9 @@ class MDB2_Result_sqlite extends MDB2_Result_Common
if ($fetchmode == MDB2_FETCHMODE_DEFAULT) {
$fetchmode = $this->db->fetchmode;
}
if ($fetchmode & MDB2_FETCHMODE_ASSOC) {
if ( $fetchmode == MDB2_FETCHMODE_ASSOC
|| $fetchmode == MDB2_FETCHMODE_OBJECT
) {
$row = @sqlite_fetch_array($this->result, SQLITE_ASSOC);
if (is_array($row)
&& $this->db->options['portability'] & MDB2_PORTABILITY_FIX_CASE
@@ -901,13 +907,12 @@ class MDB2_Result_sqlite extends MDB2_Result_Common
$row = @sqlite_fetch_array($this->result, SQLITE_NUM);
}
if (!$row) {
if ($this->result === false) {
$err =$this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
if (false === $this->result) {
$err = $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
return $err;
}
$null = null;
return $null;
return null;
}
$mode = $this->db->options['portability'] & MDB2_PORTABILITY_EMPTY_TO_NULL;
$rtrim = false;
@@ -921,8 +926,16 @@ class MDB2_Result_sqlite extends MDB2_Result_Common
if ($mode) {
$this->db->_fixResultArrayValues($row, $mode);
}
if (!empty($this->types)) {
if ( ( $fetchmode != MDB2_FETCHMODE_ASSOC
&& $fetchmode != MDB2_FETCHMODE_OBJECT)
&& !empty($this->types)
) {
$row = $this->db->datatype->convertResultRow($this->types, $row, $rtrim);
} elseif (($fetchmode == MDB2_FETCHMODE_ASSOC
|| $fetchmode == MDB2_FETCHMODE_OBJECT)
&& !empty($this->types_assoc)
) {
$row = $this->db->datatype->convertResultRow($this->types_assoc, $row, $rtrim);
}
if (!empty($this->values)) {
$this->_assignBindColumns($row);
@@ -932,7 +945,8 @@ class MDB2_Result_sqlite extends MDB2_Result_Common
if ($object_class == 'stdClass') {
$row = (object) $row;
} else {
$row = new $object_class($row);
$rowObj = new $object_class($row);
$row = $rowObj;
}
}
++$this->rownum;
@@ -981,11 +995,12 @@ class MDB2_Result_sqlite extends MDB2_Result_Common
function numCols()
{
$cols = @sqlite_num_fields($this->result);
if (is_null($cols)) {
if ($this->result === false) {
if (null === $cols) {
if (false === $this->result) {
return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
} elseif (is_null($this->result)) {
}
if (null === $this->result) {
return count($this->types);
}
return $this->db->raiseError(null, null, null,
@@ -1016,10 +1031,11 @@ class MDB2_BufferedResult_sqlite extends MDB2_Result_sqlite
function seek($rownum = 0)
{
if (!@sqlite_seek($this->result, $rownum)) {
if ($this->result === false) {
if (false === $this->result) {
return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
} elseif (is_null($this->result)) {
}
if (null === $this->result) {
return MDB2_OK;
}
return $this->db->raiseError(MDB2_ERROR_INVALID, null, null,
@@ -1059,11 +1075,12 @@ class MDB2_BufferedResult_sqlite extends MDB2_Result_sqlite
function numRows()
{
$rows = @sqlite_num_rows($this->result);
if (is_null($rows)) {
if ($this->result === false) {
if (null === $rows) {
if (false === $this->result) {
return $this->db->raiseError(MDB2_ERROR_NEED_MORE_DATA, null, null,
'resultset has already been freed', __FUNCTION__);
} elseif (is_null($this->result)) {
}
if (null === $this->result) {
return 0;
}
return $this->db->raiseError(null, null, null,
@@ -1084,5 +1101,4 @@ class MDB2_Statement_sqlite extends MDB2_Statement_Common
{
}
?>
+23 -21
View File
@@ -42,7 +42,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: Extended.php,v 1.60 2007/11/28 19:49:34 quipo Exp $
// $Id$
/**
* @package MDB2
@@ -96,7 +96,7 @@ class MDB2_Extended extends MDB2_Module_Common
if (PEAR::isError($query)) {
return $query;
}
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -134,7 +134,7 @@ class MDB2_Extended extends MDB2_Module_Common
* @see autoPrepare
* @access public
*/
function &autoExecute($table, $fields_values, $mode = MDB2_AUTOQUERY_INSERT,
function autoExecute($table, $fields_values, $mode = MDB2_AUTOQUERY_INSERT,
$where = false, $types = null, $result_class = true, $result_types = MDB2_PREPARE_MANIP)
{
$fields_values = (array)$fields_values;
@@ -153,12 +153,12 @@ class MDB2_Extended extends MDB2_Module_Common
if (empty($params)) {
$query = $this->buildManipSQL($table, $keys, $mode, $where);
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
if ($mode == MDB2_AUTOQUERY_SELECT) {
$result =& $db->query($query, $result_types, $result_class);
$result = $db->query($query, $result_types, $result_class);
} else {
$result = $db->exec($query);
}
@@ -167,7 +167,7 @@ class MDB2_Extended extends MDB2_Module_Common
if (PEAR::isError($stmt)) {
return $stmt;
}
$result =& $stmt->execute($params, $result_class);
$result = $stmt->execute($params, $result_class);
$stmt->free();
}
return $result;
@@ -199,7 +199,7 @@ class MDB2_Extended extends MDB2_Module_Common
*/
function buildManipSQL($table, $table_fields, $mode, $where = false)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -214,7 +214,7 @@ class MDB2_Extended extends MDB2_Module_Common
}
}
if ($where !== false && !is_null($where)) {
if ((false !== $where) && (null !== $where)) {
if (is_array($where)) {
$where = implode(' AND ', $where);
}
@@ -270,10 +270,10 @@ class MDB2_Extended extends MDB2_Module_Common
* @return MDB2_Result|MDB2_Error result set on success, a MDB2 error on failure
* @access public
*/
function &limitQuery($query, $types, $limit, $offset = 0, $result_class = true,
function limitQuery($query, $types, $limit, $offset = 0, $result_class = true,
$result_wrap_class = false)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -282,8 +282,7 @@ class MDB2_Extended extends MDB2_Module_Common
if (PEAR::isError($result)) {
return $result;
}
$result =& $db->query($query, $types, $result_class, $result_wrap_class);
return $result;
return $db->query($query, $types, $result_class, $result_wrap_class);
}
// }}}
@@ -302,7 +301,7 @@ class MDB2_Extended extends MDB2_Module_Common
*/
function execParam($query, $params = array(), $param_types = null)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -346,7 +345,7 @@ class MDB2_Extended extends MDB2_Module_Common
function getOne($query, $type = null, $params = array(),
$param_types = null, $colnum = 0)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -393,7 +392,7 @@ class MDB2_Extended extends MDB2_Module_Common
function getRow($query, $types = null, $params = array(),
$param_types = null, $fetchmode = MDB2_FETCHMODE_DEFAULT)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -439,7 +438,7 @@ class MDB2_Extended extends MDB2_Module_Common
function getCol($query, $type = null, $params = array(),
$param_types = null, $colnum = 0)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -495,7 +494,7 @@ class MDB2_Extended extends MDB2_Module_Common
$param_types = null, $fetchmode = MDB2_FETCHMODE_DEFAULT,
$rekey = false, $force_array = false, $group = false)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -600,7 +599,7 @@ class MDB2_Extended extends MDB2_Module_Common
function getAssoc($query, $types = null, $params = array(), $param_types = null,
$fetchmode = MDB2_FETCHMODE_DEFAULT, $force_array = false, $group = false)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -644,8 +643,11 @@ class MDB2_Extended extends MDB2_Module_Common
* @access public
* @see prepare(), execute()
*/
function executeMultiple(&$stmt, $params = null)
function executeMultiple($stmt, $params = null)
{
if (MDB2::isError($stmt)) {
return $stmt;
}
for ($i = 0, $j = count($params); $i < $j; $i++) {
$result = $stmt->execute($params[$i]);
if (PEAR::isError($result)) {
@@ -672,7 +674,7 @@ class MDB2_Extended extends MDB2_Module_Common
*/
function getBeforeID($table, $field = null, $ondemand = true, $quote = true)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -705,7 +707,7 @@ class MDB2_Extended extends MDB2_Module_Common
*/
function getAfterID($id, $table, $field = null)
{
$db =& $this->getDBInstance();
$db = $this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
+6 -3
View File
@@ -42,7 +42,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: Iterator.php,v 1.22 2006/05/06 14:03:41 lsmith Exp $
// $Id$
/**
* PHP5 Iterator
@@ -54,6 +54,9 @@
class MDB2_Iterator implements Iterator
{
protected $fetchmode;
/**
* @var MDB2_Result_Common
*/
protected $result;
protected $row;
@@ -62,7 +65,7 @@ class MDB2_Iterator implements Iterator
/**
* Constructor
*/
public function __construct($result, $fetchmode = MDB2_FETCHMODE_DEFAULT)
public function __construct(MDB2_Result_Common $result, $fetchmode = MDB2_FETCHMODE_DEFAULT)
{
$this->result = $result;
$this->fetchmode = $fetchmode;
@@ -112,7 +115,7 @@ class MDB2_Iterator implements Iterator
*/
public function current()
{
if (is_null($this->row)) {
if (null === $this->row) {
$row = $this->result->fetchRow($this->fetchmode);
if (PEAR::isError($row)) {
$row = false;
+2 -2
View File
@@ -42,7 +42,7 @@
// | Author: Lukas Smith <smith@pooteeweet.org> |
// +----------------------------------------------------------------------+
//
// $Id: LOB.php,v 1.34 2006/10/25 11:52:21 lsmith Exp $
// $Id$
/**
* @package MDB2
@@ -50,7 +50,7 @@
* @author Lukas Smith <smith@pooteeweet.org>
*/
require_once('MDB2.php');
require_once 'MDB2.php';
/**
* MDB2_LOB: user land stream wrapper implementation for LOB support
+82 -48
View File
@@ -1,8 +1,6 @@
<?php
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* PHP version 4, 5
*
* Copyright (c) 1998-2008 Manuel Lemos, Tomas V.V.Cox,
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
@@ -39,19 +37,18 @@
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* Author: Lukas Smith <smith@pooteeweet.org>
* Author: Igor Feghali <ifeghali@php.net>
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author Lukas Smith <smith@pooteeweet.org>
* @author Igor Feghali <ifeghali@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version CVS: $Id: Schema.php,v 1.132 2009/02/22 21:43:22 ifeghali Exp $
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
// require_once('MDB2.php');
require_once 'MDB2.php';
define('MDB2_SCHEMA_DUMP_ALL', 0);
define('MDB2_SCHEMA_DUMP_STRUCTURE', 1);
@@ -96,7 +93,7 @@ class MDB2_Schema extends PEAR
'parser' => 'MDB2_Schema_Parser',
'writer' => 'MDB2_Schema_Writer',
'validate' => 'MDB2_Schema_Validate',
'drop_missing_tables' => false
'drop_obsolete_objects' => false
);
// }}}
@@ -237,9 +234,10 @@ class MDB2_Schema extends PEAR
* @access public
* @see MDB2::parseDSN
*/
static function factory(&$db, $options = array())
static function &factory(&$db, $options = array())
{
$obj =new MDB2_Schema();
$obj = new MDB2_Schema();
$result = $obj->connect($db, $options);
if (PEAR::isError($result)) {
return $result;
@@ -280,15 +278,17 @@ class MDB2_Schema extends PEAR
}
}
}
$this->disconnect();
if (!MDB2::isConnection($db)) {
$db =MDB2::factory($db, $db_options);
$db = MDB2::factory($db, $db_options);
}
if (PEAR::isError($db)) {
return $db;
}
$this->db =& $db;
$this->db = $db;
$this->db->loadModule('Datatype');
$this->db->loadModule('Manager');
$this->db->loadModule('Reverse');
@@ -377,7 +377,7 @@ class MDB2_Schema extends PEAR
$dtd_file = $this->options['dtd_file'];
if ($dtd_file) {
include_once 'XML/DTD/XmlValidator.php';
$dtd =new XML_DTD_XmlValidator;
$dtd = new XML_DTD_XmlValidator;
if (!$dtd->isValid($dtd_file, $input_file)) {
return $this->raiseError(MDB2_SCHEMA_ERROR_PARSE, null, null, $dtd->getMessage());
}
@@ -390,7 +390,16 @@ class MDB2_Schema extends PEAR
return $result;
}
$parser =new $class_name($variables, $fail_on_invalid_names, $structure, $this->options['valid_types'], $this->options['force_defaults']);
$max_identifiers_length = null;
if (isset($this->db->options['max_identifiers_length'])) {
$max_identifiers_length = $this->db->options['max_identifiers_length'];
}
$parser = new $class_name($variables, $fail_on_invalid_names, $structure,
$this->options['valid_types'], $this->options['force_defaults'],
$max_identifiers_length
);
$result = $parser->setInputFile($input_file);
if (PEAR::isError($result)) {
return $result;
@@ -425,6 +434,7 @@ class MDB2_Schema extends PEAR
return $this->raiseError(MDB2_SCHEMA_ERROR_INVALID, null, null,
'it was not specified a valid database name');
}
$class_name = $this->options['validate'];
$result = MDB2::loadClass($class_name, $this->db->getOption('debug'));
@@ -432,7 +442,17 @@ class MDB2_Schema extends PEAR
return $result;
}
$val =new $class_name($this->options['fail_on_invalid_names'], $this->options['valid_types'], $this->options['force_defaults']);
$max_identifiers_length = null;
if (isset($this->db->options['max_identifiers_length'])) {
$max_identifiers_length = $this->db->options['max_identifiers_length'];
}
$val = new $class_name(
$this->options['fail_on_invalid_names'],
$this->options['valid_types'],
$this->options['force_defaults'],
$max_identifiers_length
);
$database_definition = array(
'name' => $database,
@@ -466,7 +486,7 @@ class MDB2_Schema extends PEAR
'initialization' => array()
);
$table_definition =& $database_definition['tables'][$table_name];
$table_definition = $database_definition['tables'][$table_name];
foreach ($fields as $field_name) {
$definition = $this->db->reverse->getTableFieldDefinition($table_name, $field_name);
if (PEAR::isError($definition)) {
@@ -624,6 +644,7 @@ class MDB2_Schema extends PEAR
if (PEAR::isError($result)) {
return $result;
}
$database_definition['tables'][$table_name]=$table_definition;
}
@@ -1338,15 +1359,15 @@ class MDB2_Schema extends PEAR
if ($dbExists) {
$this->db->debug('Database already exists: ' . $db_name, __FUNCTION__);
// if (!empty($dbOptions)) {
// $errorcodes = array(MDB2_ERROR_UNSUPPORTED, MDB2_ERROR_NO_PERMISSION);
// $this->db->expectError($errorcodes);
// $result = $this->db->manager->alterDatabase($db_name, $dbOptions);
// $this->db->popExpect();
// if (PEAR::isError($result) && !MDB2::isError($result, $errorcodes)) {
// return $result;
// }
// }
if (!empty($dbOptions)) {
$errorcodes = array(MDB2_ERROR_UNSUPPORTED, MDB2_ERROR_NO_PERMISSION);
$this->db->expectError($errorcodes);
$result = $this->db->manager->alterDatabase($db_name, $dbOptions);
$this->db->popExpect();
if (PEAR::isError($result) && !MDB2::isError($result, $errorcodes)) {
return $result;
}
}
$create = false;
} else {
$this->db->expectError(MDB2_ERROR_UNSUPPORTED);
@@ -1451,16 +1472,17 @@ class MDB2_Schema extends PEAR
$changes['tables'] = MDB2_Schema::arrayMergeClobber($changes['tables'], $change);
}
}
if (!empty($previous_definition['tables'])
&& is_array($previous_definition['tables'])) {
foreach ($previous_definition['tables'] as $table_name => $table) {
if (empty($defined_tables[$table_name])) {
$changes['tables']['remove'][$table_name] = true;
}
}
if (!empty($previous_definition['tables'])
&& is_array($previous_definition['tables'])
) {
foreach ($previous_definition['tables'] as $table_name => $table) {
if (empty($defined_tables[$table_name])) {
$changes['tables']['remove'][$table_name] = true;
}
}
}
if (!empty($current_definition['sequences']) && is_array($current_definition['sequences'])) {
$changes['sequences'] = $defined_sequences = array();
foreach ($current_definition['sequences'] as $sequence_name => $sequence) {
@@ -1480,14 +1502,17 @@ class MDB2_Schema extends PEAR
$changes['sequences'] = MDB2_Schema::arrayMergeClobber($changes['sequences'], $change);
}
}
if (!empty($previous_definition['sequences']) && is_array($previous_definition['sequences'])) {
foreach ($previous_definition['sequences'] as $sequence_name => $sequence) {
if (empty($defined_sequences[$sequence_name])) {
$changes['sequences']['remove'][$sequence_name] = true;
}
}
if (!empty($previous_definition['sequences'])
&& is_array($previous_definition['sequences'])
) {
foreach ($previous_definition['sequences'] as $sequence_name => $sequence) {
if (empty($defined_sequences[$sequence_name])) {
$changes['sequences']['remove'][$sequence_name] = true;
}
}
}
return $changes;
}
@@ -2018,9 +2043,10 @@ class MDB2_Schema extends PEAR
}
}
if ($this->options['drop_missing_tables']
if ($this->options['drop_obsolete_objects']
&& !empty($changes['remove'])
&& is_array($changes['remove'])) {
&& is_array($changes['remove'])
) {
foreach ($changes['remove'] as $table_name => $table) {
$result = $this->db->manager->dropTable($table_name);
if (PEAR::isError($result)) {
@@ -2101,7 +2127,10 @@ class MDB2_Schema extends PEAR
}
}
if (!empty($changes['remove']) && is_array($changes['remove'])) {
if ($this->options['drop_obsolete_objects']
&& !empty($changes['remove'])
&& is_array($changes['remove'])
) {
foreach ($changes['remove'] as $sequence_name => $sequence) {
$result = $this->db->manager->dropSequence($sequence_name);
if (PEAR::isError($result)) {
@@ -2228,7 +2257,7 @@ class MDB2_Schema extends PEAR
}
if (!empty($changes['tables']['remove']) && is_array($changes['tables']['remove'])) {
if ($this->options['drop_missing_tables']) {
if ($this->options['drop_obsolete_objects']) {
foreach ($changes['tables']['remove'] as $table_name => $table) {
$this->db->debug("$table_name:", __FUNCTION__);
$this->db->debug("\tRemoved table '$table_name'", __FUNCTION__);
@@ -2334,9 +2363,15 @@ class MDB2_Schema extends PEAR
}
}
if (!empty($changes['sequences']['remove']) && is_array($changes['sequences']['remove'])) {
foreach ($changes['sequences']['remove'] as $sequence_name => $sequence) {
$this->db->debug("$sequence_name:", __FUNCTION__);
$this->db->debug("\tAdded sequence '$sequence_name'", __FUNCTION__);
if ($this->options['drop_obsolete_objects']) {
foreach ($changes['sequences']['remove'] as $sequence_name => $sequence) {
$this->db->debug("$sequence_name:", __FUNCTION__);
$this->db->debug("\tRemoved sequence '$sequence_name'", __FUNCTION__);
}
} else {
foreach ($changes['sequences']['remove'] as $sequence_name => $sequence) {
$this->db->debug("\tObsolete sequence '$sequence_name' left as is", __FUNCTION__);
}
}
}
if (!empty($changes['sequences']['change']) && is_array($changes['sequences']['change'])) {
@@ -2692,9 +2727,9 @@ class MDB2_Schema extends PEAR
* @access public
* @see PEAR_Error
*/
function raiseError($code = null, $mode = null, $options = null, $userinfo = null,$a=null,$b=null,$c=null)
static function &raiseError($code = null, $mode = null, $options = null, $userinfo = null, $dummy1 = null, $dummy2 = null, $dummy3 = false)
{
$err =PEAR::raiseError(null, $code, $mode, $options,
$err = PEAR::raiseError(null, $code, $mode, $options,
$userinfo, 'MDB2_Schema_Error', true);
return $err;
}
@@ -2760,4 +2795,3 @@ class MDB2_Schema_Error extends PEAR_Error
$mode, $level, $debuginfo);
}
}
?>
+113 -22
View File
@@ -1,8 +1,6 @@
<?php
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* PHP versions 4 and 5
*
* Copyright (c) 1998-2008 Manuel Lemos, Tomas V.V.Cox,
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
@@ -39,23 +37,19 @@
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* Author: Christian Dickmann <dickmann@php.net>
* Author: Igor Feghali <ifeghali@php.net>
*
* $Id: Parser.php,v 1.68 2008/11/30 03:34:00 clockwerx Exp $
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author Christian Dickmann <dickmann@php.net>
* @author Igor Feghali <ifeghali@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version CVS: $Id: Parser.php,v 1.68 2008/11/30 03:34:00 clockwerx Exp $
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
require_once('XML/Parser.php');
require_once('MDB2/Schema/Validate.php');
require_once 'XML/Parser.php';
require_once 'MDB2/Schema/Validate.php';
/**
* Parses an XML schema file
@@ -114,20 +108,83 @@ class MDB2_Schema_Parser extends XML_Parser
var $val;
/**
* PHP 5 constructor
*
* @param array $variables mixed array with user defined schema
* variables
* @param bool $fail_on_invalid_names array with reserved words per RDBMS
* @param array $structure multi dimensional array with
* database schema and data
* @param array $valid_types information of all valid fields
* types
* @param bool $force_defaults if true sets a default value to
* field when not explicit
* @param int $max_identifiers_length maximum allowed size for entities
* name
*
* @return void
*
* @access public
* @static
*/
function __construct($variables, $fail_on_invalid_names = true,
$structure = false, $valid_types = array(),
$force_defaults = true)
{
$structure = false, $valid_types = array(), $force_defaults = true,
$max_identifiers_length = null
) {
// force ISO-8859-1 due to different defaults for PHP4 and PHP5
// todo: this probably needs to be investigated some more andcleaned up
parent::__construct('ISO-8859-1');
$this->variables = $variables;
$this->structure = $structure;
$this->val =new MDB2_Schema_Validate($fail_on_invalid_names, $valid_types, $force_defaults);
$this->val = new MDB2_Schema_Validate(
$fail_on_invalid_names,
$valid_types,
$force_defaults,
$max_identifiers_length
);
}
function startHandler($xp, $element, $attribs)
/**
* PHP 4 compatible constructor
*
* @param array $variables mixed array with user defined schema
* variables
* @param bool $fail_on_invalid_names array with reserved words per RDBMS
* @param array $structure multi dimensional array with
* database schema and data
* @param array $valid_types information of all valid fields
* types
* @param bool $force_defaults if true sets a default value to
* field when not explicit
* @param int $max_identifiers_length maximum allowed size for entities
* name
*
* @return void
*
* @access public
* @static
*/
function MDB2_Schema_Parser($variables, $fail_on_invalid_names = true,
$structure = false, $valid_types = array(), $force_defaults = true,
$max_identifiers_length = null
) {
$this->__construct($variables, $fail_on_invalid_names, $structure, $valid_types, $force_defaults);
}
/**
* Triggered when reading a XML open tag <element>
*
* @param resource $xp xml parser resource
* @param string $element element name
* @param array $attribs attributes
*
* @return void
* @access private
* @static
*/
function startHandler($xp, $element, &$attribs)
{
if (strtolower($element) == 'variable') {
$this->var_mode = true;
@@ -328,12 +385,21 @@ class MDB2_Schema_Parser extends XML_Parser
'start' => '',
'description' => '',
'comments' => '',
'on' => array('table' => '', 'field' => '')
);
break;
}
}
/**
* Triggered when reading a XML close tag </element>
*
* @param resource $xp xml parser resource
* @param string $element element name
*
* @return void
* @access private
* @static
*/
function endHandler($xp, $element)
{
if (strtolower($element) == 'variable') {
@@ -496,7 +562,21 @@ class MDB2_Schema_Parser extends XML_Parser
$this->element = implode('-', $this->elements);
}
function raiseError($msg = null, $xmlecode = 0, $xp = null, $ecode = MDB2_SCHEMA_ERROR_PARSE,$a=null,$b=null,$c=null)
/**
* Pushes a MDB2_Schema_Error into stack and returns it
*
* @param string $msg textual message
* @param int $xmlecode PHP's XML parser error code
* @param resource $xp xml parser resource
* @param int $ecode MDB2_Schema's error code
*
* @return object
* @access private
* @static
*/
static function &raiseError($msg = null, $xmlecode = 0, $xp = null, $ecode = MDB2_SCHEMA_ERROR_PARSE, $userinfo = null,
$error_class = null,
$skipmsg = false)
{
if (is_null($this->error)) {
$error = '';
@@ -523,11 +603,21 @@ class MDB2_Schema_Parser extends XML_Parser
$error .= "\n";
$this->error =& MDB2_Schema::raiseError($ecode, null, null, $error);
$this->error = MDB2_Schema::raiseError($ecode, null, null, $error);
}
return $this->error;
}
/**
* Triggered when reading data in a XML element (text between tags)
*
* @param resource $xp xml parser resource
* @param string $data text
*
* @return void
* @access private
* @static
*/
function cdataHandler($xp, $data)
{
if ($this->var_mode == true) {
@@ -799,6 +889,9 @@ class MDB2_Schema_Parser extends XML_Parser
case 'database-sequence-comments':
$this->sequence['comments'] .= $data;
break;
case 'database-sequence-on':
$this->sequence['on'] = array('table' => '', 'field' => '');
break;
case 'database-sequence-on-table':
$this->sequence['on']['table'] .= $data;
break;
@@ -808,5 +901,3 @@ class MDB2_Schema_Parser extends XML_Parser
}
}
}
?>
+226 -21
View File
@@ -1,8 +1,6 @@
<?php
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* PHP versions 4 and 5
*
* Copyright (c) 1998-2008 Manuel Lemos, Tomas V.V.Cox,
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
@@ -39,13 +37,13 @@
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* Author: Igor Feghali <ifeghali@php.net>
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author Igor Feghali <ifeghali@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version CVS: $Id: Parser2.php,v 1.12 2008/11/30 03:34:00 clockwerx Exp $
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
@@ -100,8 +98,30 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
var $init = array();
function __construct($variables, $fail_on_invalid_names = true, $structure = false, $valid_types = array(), $force_defaults = true)
{
/**
* PHP 5 constructor
*
* @param array $variables mixed array with user defined schema
* variables
* @param bool $fail_on_invalid_names array with reserved words per RDBMS
* @param array $structure multi dimensional array with
* database schema and data
* @param array $valid_types information of all valid fields
* types
* @param bool $force_defaults if true sets a default value to
* field when not explicit
* @param int $max_identifiers_length maximum allowed size for entities
* name
*
* @return void
*
* @access public
* @static
*/
function __construct($variables, $fail_on_invalid_names = true,
$structure = false, $valid_types = array(), $force_defaults = true,
$max_identifiers_length = null
) {
// force ISO-8859-1 due to different defaults for PHP4 and PHP5
// todo: this probably needs to be investigated some more and cleaned up
$this->options['encoding'] = 'ISO-8859-1';
@@ -119,15 +139,44 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
$this->variables = $variables;
$this->structure = $structure;
$this->val =& new MDB2_Schema_Validate($fail_on_invalid_names, $valid_types, $force_defaults);
$this->val = new MDB2_Schema_Validate($fail_on_invalid_names, $valid_types, $force_defaults);
parent::XML_Unserializer($this->options);
}
function MDB2_Schema_Parser2($variables, $fail_on_invalid_names = true, $structure = false, $valid_types = array(), $force_defaults = true)
{
/**
* PHP 4 compatible constructor
*
* @param array $variables mixed array with user defined schema
* variables
* @param bool $fail_on_invalid_names array with reserved words per RDBMS
* @param array $structure multi dimensional array with
* database schema and data
* @param array $valid_types information of all valid fields
* types
* @param bool $force_defaults if true sets a default value to
* field when not explicit
* @param int $max_identifiers_length maximum allowed size for entities
* name
*
* @return void
*
* @access public
* @static
*/
function MDB2_Schema_Parser2($variables, $fail_on_invalid_names = true,
$structure = false, $valid_types = array(), $force_defaults = true,
$max_identifiers_length = null
) {
$this->__construct($variables, $fail_on_invalid_names, $structure, $valid_types, $force_defaults);
}
/**
* Main method. Parses XML Schema File.
*
* @return bool|error object
*
* @access public
*/
function parse()
{
$result = $this->unserialize($this->filename, true);
@@ -140,18 +189,33 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
}
}
/**
* Do the necessary stuff to set the input XML schema file
*
* @param string $filename full path to schema file
*
* @return boolean MDB2_OK on success
*
* @access public
*/
function setInputFile($filename)
{
$this->filename = $filename;
return MDB2_OK;
}
function renameKey(&$arr, $oKey, $nKey)
{
$arr[$nKey] = &$arr[$oKey];
unset($arr[$oKey]);
}
/**
* Enforce the default values for mandatory keys and ensure everything goes
* always in the same order (simulates the behaviour of the original
* parser). Works at database level.
*
* @param array $database multi dimensional array with database definition
* and data.
*
* @return bool|error MDB2_OK on success or error object
*
* @access private
*/
function fixDatabaseKeys($database)
{
$this->database_definition = array(
@@ -204,6 +268,18 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
return MDB2_OK;
}
/**
* Enforce the default values for mandatory keys and ensure everything goes
* always in the same order (simulates the behaviour of the original
* parser). Works at table level.
*
* @param array $table multi dimensional array with table definition
* and data.
*
* @return bool|error MDB2_OK on success or error object
*
* @access private
*/
function fixTableKeys($table)
{
$this->table = array(
@@ -279,6 +355,17 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
return MDB2_OK;
}
/**
* Enforce the default values for mandatory keys and ensure everything goes
* always in the same order (simulates the behaviour of the original
* parser). Works at table field level.
*
* @param array $field array with table field definition
*
* @return bool|error MDB2_OK on success or error object
*
* @access private
*/
function fixTableFieldKeys($field)
{
$this->field = array();
@@ -328,6 +415,17 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
return MDB2_OK;
}
/**
* Enforce the default values for mandatory keys and ensure everything goes
* always in the same order (simulates the behaviour of the original
* parser). Works at table index level.
*
* @param array $index array with table index definition
*
* @return bool|error MDB2_OK on success or error object
*
* @access private
*/
function fixTableIndexKeys($index)
{
$this->index = array(
@@ -389,6 +487,17 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
return MDB2_OK;
}
/**
* Enforce the default values for mandatory keys and ensure everything goes
* always in the same order (simulates the behaviour of the original
* parser). Works at table constraint level.
*
* @param array $constraint array with table index definition
*
* @return bool|error MDB2_OK on success or error object
*
* @access private
*/
function fixTableConstraintKeys($constraint)
{
$this->constraint = array(
@@ -468,6 +577,18 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
return MDB2_OK;
}
/**
* Enforce the default values for mandatory keys and ensure everything goes
* always in the same order (simulates the behaviour of the original
* parser). Works at table data level.
*
* @param array $element multi dimensional array with query definition
* @param string $type whether its a insert|update|delete query
*
* @return bool|error MDB2_OK on success or error object
*
* @access private
*/
function fixTableInitializationKeys($element, $type = '')
{
if (!empty($element['select']) && is_array($element['select'])) {
@@ -480,6 +601,43 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
$this->table['initialization'][] = array( 'type' => $type, 'data' => $this->init );
}
/**
* Enforce the default values for mandatory keys and ensure everything goes
* always in the same order (simulates the behaviour of the original
* parser). Works deeper at the table initialization level (data). At this
* point we are look at one of the below:
*
* <insert>
* {field}+
* </insert>
*
* <select> (this is a select extracted off a insert-select query)
* <table/>
* {field}+
* <where>
* {expression}
* </where>?
* </select>
*
* <update>
* {field}+
* <where>
* {expression}
* </where>?
* </update>
*
* <delete>
* <where>
* {expression}
* </where>
* </delete>
*
* @param array $element multi dimensional array with query definition
*
* @return bool|error MDB2_OK on success or error object
*
* @access private
*/
function fixTableInitializationDataKeys($element)
{
$this->init = array();
@@ -505,6 +663,22 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
}
}
/**
* Recursively diggs into an "expression" element. According to our
* documentation an "expression" element is of the kind:
*
* <expression>
* <null/> or <value/> or <column/> or {function} or {expression}
* <operator/>
* <null/> or <value/> or <column/> or {function} or {expression}
* </expression>
*
* @param array &$arr reference to current element definition
*
* @return void
*
* @access private
*/
function setExpression(&$arr)
{
$element = each($arr);
@@ -555,6 +729,30 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
}
}
/**
* Enforce the default values for mandatory keys and ensure everything goes
* always in the same order (simulates the behaviour of the original
* parser). Works at database sequences level. A "sequence" element looks
* like:
*
* <sequence>
* <name/>
* <was/>?
* <start/>?
* <description/>?
* <comments/>?
* <on>
* <table/>
* <field/>
* </on>?
* </sequence>
*
* @param array $sequence multi dimensional array with sequence definition
*
* @return bool|error MDB2_OK on success or error object
*
* @access private
*/
function fixSequenceKeys($sequence)
{
$this->sequence = array(
@@ -562,7 +760,6 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
'start' => '',
'description' => '',
'comments' => '',
'on' => array('table' => '', 'field' => '')
);
if (!empty($sequence['name'])) {
@@ -610,15 +807,23 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
return MDB2_OK;
}
/**
* Pushes a MDB2_Schema_Error into stack and returns it
*
* @param string $msg textual message
* @param int $ecode MDB2_Schema's error code
*
* @return object
* @access private
* @static
*/
function &raiseError($msg = null, $ecode = MDB2_SCHEMA_ERROR_PARSE)
{
if (is_null($this->error)) {
$error = 'Parser error: '.$msg."\n";
$this->error =& MDB2_Schema::raiseError($ecode, null, null, $error);
$this->error = MDB2_Schema::raiseError($ecode, null, null, $error);
}
return $this->error;
}
}
?>
+48 -47
View File
@@ -1,49 +1,51 @@
<?php
// {{{ Disclaimer, Licence, copyrights
// +----------------------------------------------------------------------+
// | PHP versions 4 and 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1998-2006 Manuel Lemos, Tomas V.V.Cox, |
// | Stig. S. Bakken, Lukas Smith |
// | All rights reserved. |
// +----------------------------------------------------------------------+
// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB |
// | API as well as database abstraction for PHP applications. |
// | This LICENSE is in the BSD license style. |
// | |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | are met: |
// | |
// | Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | |
// | Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution. |
// | |
// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken, |
// | Lukas Smith nor the names of his contributors may be used to endorse |
// | or promote products derived from this software without specific prior|
// | written permission. |
// | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
// | OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// | POSSIBILITY OF SUCH DAMAGE. |
// +----------------------------------------------------------------------+
// | Author: Lorenzo Alberton <l.alberton@quipo.it> |
// +----------------------------------------------------------------------+
//
// }}}
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
* MDB2_Schema enables users to maintain RDBMS independant schema files
* in XML that can be used to manipulate both data and database schemas
* This LICENSE is in the BSD license style.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken,
* Lukas Smith, Igor Feghali nor the names of his contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author Lorenzo Alberton <l.alberton@quipo.it>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
// {{{ $GLOBALS['_MDB2_Schema_Reserved']['ibase']
/**
* Has a list of reserved words of Interbase/Firebird
@@ -433,4 +435,3 @@ $GLOBALS['_MDB2_Schema_Reserved']['ibase'] = array(
'ZONE',
);
// }}}
?>
+49 -47
View File
@@ -1,48 +1,52 @@
<?php
// {{{ Disclaimer, Licence, copyrights
// +----------------------------------------------------------------------+
// | PHP versions 4 and 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1998-2006 Manuel Lemos, Tomas V.V.Cox, |
// | Stig. S. Bakken, Lukas Smith |
// | All rights reserved. |
// +----------------------------------------------------------------------+
// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB |
// | API as well as database abstraction for PHP applications. |
// | This LICENSE is in the BSD license style. |
// | |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | are met: |
// | |
// | Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | |
// | Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution. |
// | |
// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken, |
// | Lukas Smith nor the names of his contributors may be used to endorse |
// | or promote products derived from this software without specific prior|
// | written permission. |
// | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
// | OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// | POSSIBILITY OF SUCH DAMAGE. |
// +----------------------------------------------------------------------+
// | Author: David Coallier <davidc@php.net> |
// +----------------------------------------------------------------------+
// }}}
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
* MDB2_Schema enables users to maintain RDBMS independant schema files
* in XML that can be used to manipulate both data and database schemas
* This LICENSE is in the BSD license style.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken,
* Lukas Smith, Igor Feghali nor the names of his contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author David Coallier <davidc@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
// {{{ $GLOBALS['_MDB2_Schema_Reserved']['mssql']
/**
* Has a list of all the reserved words for mssql.
@@ -254,5 +258,3 @@ $GLOBALS['_MDB2_Schema_Reserved']['mssql'] = array(
'SELECT',
);
//}}}
?>
+49 -48
View File
@@ -1,50 +1,52 @@
<?php
// {{{ Disclaimer, Licence, copyrights
// +----------------------------------------------------------------------+
// | PHP versions 4 and 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1998-2006 Manuel Lemos, Tomas V.V.Cox, |
// | Stig. S. Bakken, Lukas Smith |
// | All rights reserved. |
// +----------------------------------------------------------------------+
// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB |
// | API as well as database abstraction for PHP applications. |
// | This LICENSE is in the BSD license style. |
// | |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | are met: |
// | |
// | Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | |
// | Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution. |
// | |
// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken, |
// | Lukas Smith nor the names of his contributors may be used to endorse |
// | or promote products derived from this software without specific prior|
// | written permission. |
// | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
// | OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// | POSSIBILITY OF SUCH DAMAGE. |
// +----------------------------------------------------------------------+
// | Author: David Coallier <davidc@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: mysql.php,v 1.3 2006/03/01 12:16:40 lsmith Exp $
// }}}
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
* MDB2_Schema enables users to maintain RDBMS independant schema files
* in XML that can be used to manipulate both data and database schemas
* This LICENSE is in the BSD license style.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken,
* Lukas Smith, Igor Feghali nor the names of his contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author David Coallier <davidc@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
// {{{ $GLOBALS['_MDB2_Schema_Reserved']['mysql']
/**
* Has a list of reserved words of mysql
@@ -281,4 +283,3 @@ $GLOBALS['_MDB2_Schema_Reserved']['mysql'] = array(
'ZEROFILL',
);
// }}}
?>
+49 -47
View File
@@ -1,48 +1,52 @@
<?php
// {{{ Disclaimer, Licence, copyrights
// +----------------------------------------------------------------------+
// | PHP versions 4 and 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1998-2006 Manuel Lemos, Tomas V.V.Cox, |
// | Stig. S. Bakken, Lukas Smith |
// | All rights reserved. |
// +----------------------------------------------------------------------+
// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB |
// | API as well as database abstraction for PHP applications. |
// | This LICENSE is in the BSD license style. |
// | |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | are met: |
// | |
// | Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | |
// | Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution. |
// | |
// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken, |
// | Lukas Smith nor the names of his contributors may be used to endorse |
// | or promote products derived from this software without specific prior|
// | written permission. |
// | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
// | OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// | POSSIBILITY OF SUCH DAMAGE. |
// +----------------------------------------------------------------------+
// | Author: David Coallier <davidc@php.net> |
// +----------------------------------------------------------------------+
// }}}
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
* MDB2_Schema enables users to maintain RDBMS independant schema files
* in XML that can be used to manipulate both data and database schemas
* This LICENSE is in the BSD license style.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken,
* Lukas Smith, Igor Feghali nor the names of his contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author David Coallier <davidc@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
// {{{ $GLOBALS['_MDB2_Schema_Reserved']['oci8']
/**
* Has a list of all the reserved words for oracle.
@@ -167,5 +171,3 @@ $GLOBALS['_MDB2_Schema_Reserved']['oci8'] = array(
'WITH',
);
// }}}
?>
+49 -48
View File
@@ -1,49 +1,52 @@
<?php
// {{{ Disclaimer, Licence, copyrights
// +----------------------------------------------------------------------+
// | PHP versions 4 and 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1998-2006 Manuel Lemos, Tomas V.V.Cox, |
// | Stig. S. Bakken, Lukas Smith |
// | All rights reserved. |
// +----------------------------------------------------------------------+
// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB |
// | API as well as database abstraction for PHP applications. |
// | This LICENSE is in the BSD license style. |
// | |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | are met: |
// | |
// | Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | |
// | Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution. |
// | |
// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken, |
// | Lukas Smith nor the names of his contributors may be used to endorse |
// | or promote products derived from this software without specific prior|
// | written permission. |
// | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
// | OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// | POSSIBILITY OF SUCH DAMAGE. |
// +----------------------------------------------------------------------+
// | Author: Marcelo Santos Araujo <msaraujo@php.net> |
// +----------------------------------------------------------------------+
//
// }}}
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
* MDB2_Schema enables users to maintain RDBMS independant schema files
* in XML that can be used to manipulate both data and database schemas
* This LICENSE is in the BSD license style.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken,
* Lukas Smith, Igor Feghali nor the names of his contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author Marcelo Santos Araujo <msaraujo@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
// {{{ $GLOBALS['_MDB2_Schema_Reserved']['pgsql']
/**
* Has a list of reserved words of pgsql
@@ -143,5 +146,3 @@ $GLOBALS['_MDB2_Schema_Reserved']['pgsql'] = array(
'WHERE'
);
// }}}
?>
+47 -24
View File
@@ -1,8 +1,6 @@
<?php
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* PHP versions 4 and 5
*
* Copyright (c) 1998-2008 Manuel Lemos, Tomas V.V.Cox,
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
@@ -39,14 +37,13 @@
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* Author: Christian Weiske <cweiske@php.net>
* $Id: Tool.php,v 1.6 2008/12/13 00:26:07 clockwerx Exp $
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author Christian Weiske <cweiske@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version CVS: $Id: Tool.php,v 1.6 2008/12/13 00:26:07 clockwerx Exp $
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
@@ -152,7 +149,9 @@ class MDB2_Schema_Tool
case '--init':
return 'init';
default:
throw new MDB2_Schema_Tool_ParameterException("Unknown mode \"$arg\"");
throw new MDB2_Schema_Tool_ParameterException(
"Unknown mode \"$arg\""
);
}
}//protected function getAction(&$args)
@@ -179,7 +178,8 @@ class MDB2_Schema_Tool
*/
protected function doHelp()
{
self::toStdErr(<<<EOH
self::toStdErr(
<<<EOH
Usage: mdb2_schematool mode parameters
Works with database schemas
@@ -205,7 +205,8 @@ EOH
*/
protected function doHelpDump()
{
self::toStdErr( <<<EOH
self::toStdErr(
<<<EOH
Usage: mdb2_schematool dump [all|data|schema] [-p] DSN
Dumps a database schema to stdout
@@ -216,7 +217,8 @@ DSN: Data source name in the form of
driver://user:password@host/database
User and password may be omitted.
Using -p reads password from stdin which is more secure than passing it in the parameter.
Using -p reads password from stdin which is more secure than passing it in the
parameter.
EOH
);
@@ -231,7 +233,8 @@ EOH
*/
protected function doHelpInit()
{
self::toStdErr( <<<EOH
self::toStdErr(
<<<EOH
Usage: mdb2_schematool init source [-p] destination
Initializes a database with data
@@ -244,7 +247,8 @@ DSN: Data source name in the form of
driver://user:password@host/database
User and password may be omitted.
Using -p reads password from stdin which is more secure than passing it in the parameter.
Using -p reads password from stdin which is more secure than passing it in the
parameter.
EOH
);
@@ -259,7 +263,8 @@ EOH
*/
protected function doHelpLoad()
{
self::toStdErr( <<<EOH
self::toStdErr(
<<<EOH
Usage: mdb2_schematool load [-p] source [-p] destination
Loads a database schema from source to destination
@@ -272,7 +277,8 @@ DSN: Data source name in the form of
driver://user:password@host/database
User and password may be omitted.
Using -p reads password from stdin which is more secure than passing it in the parameter.
Using -p reads password from stdin which is more secure than passing it in the
parameter.
EOH
);
@@ -334,7 +340,9 @@ EOH
protected function getFileOrDsn(&$args)
{
if (count($args) == 0) {
throw new MDB2_Schema_Tool_ParameterException('File or DSN expected');
throw new MDB2_Schema_Tool_ParameterException(
'File or DSN expected'
);
}
$arg = array_shift($args);
@@ -450,7 +458,8 @@ EOH
list($type, $dsn) = $this->getFileOrDsn($args);
if ($type == 'file') {
throw new MDB2_Schema_Tool_ParameterException(
'Dumping a schema file as a schema file does not make much sense'
'Dumping a schema file as a schema file does not make much ' .
'sense'
);
}
@@ -503,8 +512,14 @@ EOH
$definition = $schemaDest->parseDatabaseDefinitionFile($dsnSource);
$where = 'loading schema file';
} else {
$schemaSource = MDB2_Schema::factory($dsnSource, $this->getSchemaOptions());
$this->throwExceptionOnError($schemaSource, 'connecting to source database');
$schemaSource = MDB2_Schema::factory(
$dsnSource,
$this->getSchemaOptions()
);
$this->throwExceptionOnError(
$schemaSource,
'connecting to source database'
);
$definition = $schemaSource->getDefinitionFromDatabase();
$where = 'loading definition from database';
@@ -514,7 +529,11 @@ EOH
//create destination database from definition
$simulate = false;
$op = $schemaDest->createDatabase($definition, array(), $simulate);
$op = $schemaDest->createDatabase(
$definition,
array(),
$simulate
);
$this->throwExceptionOnError($op, 'creating the database');
}//protected function doLoad($args)
@@ -545,10 +564,16 @@ EOH
}
$schemaDest = MDB2_Schema::factory($dsnDest, $this->getSchemaOptions());
$this->throwExceptionOnError($schemaDest, 'connecting to destination database');
$this->throwExceptionOnError(
$schemaDest,
'connecting to destination database'
);
$definition = $schemaDest->getDefinitionFromDatabase();
$this->throwExceptionOnError($definition, 'loading definition from database');
$this->throwExceptionOnError(
$definition,
'loading definition from database'
);
$op = $schemaDest->writeInitialization($dsnSource, $definition);
$this->throwExceptionOnError($op, 'initializing database');
@@ -556,5 +581,3 @@ EOH
}//class MDB2_Schema_Tool
?>
+59 -4
View File
@@ -1,6 +1,61 @@
<?php
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
* MDB2_Schema enables users to maintain RDBMS independant schema files
* in XML that can be used to manipulate both data and database schemas
* This LICENSE is in the BSD license style.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken,
* Lukas Smith, Igor Feghali nor the names of his contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author Christian Weiske <cweiske@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
/**
* To be implemented yet
*
* @category Database
* @package MDB2_Schema
* @author Christian Weiske <cweiske@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @link http://pear.php.net/packages/MDB2_Schema
*/
class MDB2_Schema_Tool_ParameterException extends Exception
{}
?>
{
}
+187 -78
View File
@@ -1,8 +1,6 @@
<?php
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* PHP versions 4 and 5
*
* Copyright (c) 1998-2008 Manuel Lemos, Tomas V.V.Cox,
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
@@ -39,15 +37,14 @@
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* Author: Christian Dickmann <dickmann@php.net>
* Author: Igor Feghali <ifeghali@php.net>
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author Christian Dickmann <dickmann@php.net>
* @author Igor Feghali <ifeghali@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version CVS: $Id: Validate.php,v 1.42 2008/11/30 03:34:00 clockwerx Exp $
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
@@ -70,11 +67,30 @@ class MDB2_Schema_Validate
var $force_defaults = true;
var $max_identifiers_length = null;
// }}}
// {{{ constructor
function __construct($fail_on_invalid_names = true, $valid_types = array(), $force_defaults = true)
{
/**
* PHP 5 constructor
*
* @param bool $fail_on_invalid_names array with reserved words per RDBMS
* @param array $valid_types information of all valid fields
* types
* @param bool $force_defaults if true sets a default value to
* field when not explicit
* @param int $max_identifiers_length maximum allowed size for entities
* name
*
* @return void
*
* @access public
* @static
*/
function __construct($fail_on_invalid_names = true, $valid_types = array(),
$force_defaults = true, $max_identifiers_length = null
) {
if (empty($GLOBALS['_MDB2_Schema_Reserved'])) {
$GLOBALS['_MDB2_Schema_Reserved'] = array();
}
@@ -87,16 +103,49 @@ class MDB2_Schema_Validate
} else {
$this->fail_on_invalid_names = array();
}
$this->valid_types = $valid_types;
$this->force_defaults = $force_defaults;
$this->valid_types = $valid_types;
$this->force_defaults = $force_defaults;
$this->max_identifiers_length = $max_identifiers_length;
}
/**
* PHP 4 compatible constructor
*
* @param bool $fail_on_invalid_names array with reserved words per RDBMS
* @param array $valid_types information of all valid fields
* types
* @param bool $force_defaults if true sets a default value to
* field when not explicit
* @param int $max_identifiers_length maximum allowed size for entities
* name
*
* @return void
*
* @access public
* @static
*/
function MDB2_Schema_Validate($fail_on_invalid_names = true, $valid_types = array(),
$force_defaults = true, $max_identifiers_length = null
) {
$this->__construct($fail_on_invalid_names, $valid_types, $force_defaults);
}
// }}}
// {{{ raiseError()
/**
* Pushes a MDB2_Schema_Error into stack and returns it
*
* @param int $ecode MDB2_Schema's error code
* @param string $msg textual message
*
* @return object
* @access private
* @static
*/
function &raiseError($ecode, $msg = null)
{
$error =& MDB2_Schema::raiseError($ecode, null, null, $msg);
$error = MDB2_Schema::raiseError($ecode, null, null, $msg);
return $error;
}
@@ -171,27 +220,18 @@ class MDB2_Schema_Validate
*/
function validateTable($tables, &$table, $table_name)
{
/* Have we got a name? */
if (!$table_name) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'a table has to have a name');
}
/* Table name duplicated? */
if (is_array($tables) && isset($tables[$table_name])) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'table "'.$table_name.'" already exists');
}
/* Table name reserved? */
if (is_array($this->fail_on_invalid_names)) {
$name = strtoupper($table_name);
foreach ($this->fail_on_invalid_names as $rdbms) {
if (in_array($name, $GLOBALS['_MDB2_Schema_Reserved'][$rdbms])) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'table name "'.$table_name.'" is a reserved word in: '.$rdbms);
}
}
/**
* Valid name ?
*/
$result = $this->validateIdentifier($table_name, 'table');
if (PEAR::isError($result)) {
return $result;
}
/* Was */
@@ -284,10 +324,12 @@ class MDB2_Schema_Validate
*/
function validateField($fields, &$field, $field_name)
{
/* Have we got a name? */
if (!$field_name) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'field name missing');
/**
* Valid name ?
*/
$result = $this->validateIdentifier($field_name, 'field');
if (PEAR::isError($result)) {
return $result;
}
/* Field name duplicated? */
@@ -296,17 +338,6 @@ class MDB2_Schema_Validate
'field "'.$field_name.'" already exists');
}
/* Field name reserverd? */
if (is_array($this->fail_on_invalid_names)) {
$name = strtoupper($field_name);
foreach ($this->fail_on_invalid_names as $rdbms) {
if (in_array($name, $GLOBALS['_MDB2_Schema_Reserved'][$rdbms])) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'field name "'.$field_name.'" is a reserved word in: '.$rdbms);
}
}
}
/* Type check */
if (empty($field['type'])) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
@@ -417,10 +448,14 @@ class MDB2_Schema_Validate
*/
function validateIndex($table_indexes, &$index, $index_name)
{
if (!$index_name) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'an index has to have a name');
/**
* Valid name ?
*/
$result = $this->validateIdentifier($index_name, 'index');
if (PEAR::isError($result)) {
return $result;
}
if (is_array($table_indexes) && isset($table_indexes[$index_name])) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'index "'.$index_name.'" already exists');
@@ -465,14 +500,18 @@ class MDB2_Schema_Validate
*/
function validateIndexField($index_fields, &$field, $field_name)
{
/**
* Valid name ?
*/
$result = $this->validateIdentifier($field_name, 'index field');
if (PEAR::isError($result)) {
return $result;
}
if (is_array($index_fields) && isset($index_fields[$field_name])) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'index field "'.$field_name.'" already exists');
}
if (!$field_name) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'the index-field-name is required');
}
if (empty($field['sorting'])) {
$field['sorting'] = 'ascending';
} elseif ($field['sorting'] !== 'ascending' && $field['sorting'] !== 'descending') {
@@ -501,10 +540,14 @@ class MDB2_Schema_Validate
*/
function validateConstraint($table_constraints, &$constraint, $constraint_name)
{
if (!$constraint_name) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'a foreign key has to have a name');
/**
* Valid name ?
*/
$result = $this->validateIdentifier($constraint_name, 'foreign key');
if (PEAR::isError($result)) {
return $result;
}
if (is_array($table_constraints) && isset($table_constraints[$constraint_name])) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'foreign key "'.$constraint_name.'" already exists');
@@ -550,10 +593,14 @@ class MDB2_Schema_Validate
*/
function validateConstraintField($constraint_fields, $field_name)
{
if (!$field_name) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'empty value for foreign-field');
/**
* Valid name ?
*/
$result = $this->validateIdentifier($field_name, 'foreign key field');
if (PEAR::isError($result)) {
return $result;
}
if (is_array($constraint_fields) && isset($constraint_fields[$field_name])) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'foreign field "'.$field_name.'" already exists');
@@ -577,10 +624,14 @@ class MDB2_Schema_Validate
*/
function validateConstraintReferencedField($referenced_fields, $field_name)
{
if (!$field_name) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'empty value for referenced foreign-field');
/**
* Valid name ?
*/
$result = $this->validateIdentifier($field_name, 'referenced foreign field');
if (PEAR::isError($result)) {
return $result;
}
if (is_array($referenced_fields) && isset($referenced_fields[$field_name])) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'foreign field "'.$field_name.'" already referenced');
@@ -607,9 +658,12 @@ class MDB2_Schema_Validate
*/
function validateSequence($sequences, &$sequence, $sequence_name)
{
if (!$sequence_name) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'a sequence has to have a name');
/**
* Valid name ?
*/
$result = $this->validateIdentifier($sequence_name, 'sequence');
if (PEAR::isError($result)) {
return $result;
}
if (is_array($sequences) && isset($sequences[$sequence_name])) {
@@ -656,21 +710,17 @@ class MDB2_Schema_Validate
*/
function validateDatabase(&$database)
{
/* Have we got a name? */
if (!is_array($database) || !isset($database['name']) || !$database['name']) {
if (!is_array($database)) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'a database has to have a name');
'something wrong went with database definition');
}
/* Database name reserved? */
if (is_array($this->fail_on_invalid_names)) {
$name = strtoupper($database['name']);
foreach ($this->fail_on_invalid_names as $rdbms) {
if (in_array($name, $GLOBALS['_MDB2_Schema_Reserved'][$rdbms])) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'database name "'.$database['name'].'" is a reserved word in: '.$rdbms);
}
}
/**
* Valid name ?
*/
$result = $this->validateIdentifier($database['name'], 'database');
if (PEAR::isError($result)) {
return $result;
}
/* Create */
@@ -793,9 +843,12 @@ class MDB2_Schema_Validate
*/
function validateDataField($table_fields, $instruction_fields, &$field)
{
if (!$field['name']) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
'field-name has to be specified');
/**
* Valid name ?
*/
$result = $this->validateIdentifier($field['name'], 'field');
if (PEAR::isError($result)) {
return $result;
}
if (is_array($instruction_fields) && isset($instruction_fields[$field['name']])) {
@@ -912,6 +965,62 @@ class MDB2_Schema_Validate
}
return MDB2_OK;
}
}
?>
// }}}
// {{{ validateIdentifier()
/**
* Checks whether a given identifier is valid for current driver.
*
* @param string $id identifier to check
* @param string $type whether identifier represents a table name, index, etc.
*
* @return bool|error object
*
* @access public
*/
function validateIdentifier($id, $type)
{
$max_length = $this->max_identifiers_length;
$cur_length = strlen($id);
/**
* Have we got a name?
*/
if (!$id) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
"a $type has to have a name");
}
/**
* Supported length ?
*/
if ($max_length !== null
&& $cur_length > $max_length
) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
"$type name '$id' is too long for current driver");
} elseif ($cur_length > 30) {
// FIXME: find a way to issue a warning in MDB2_Schema object
/* $this->warnings[] = "$type name '$id' might not be
portable to other drivers"; */
}
/**
* Reserved ?
*/
if (is_array($this->fail_on_invalid_names)) {
$name = strtoupper($id);
foreach ($this->fail_on_invalid_names as $rdbms) {
if (in_array($name, $GLOBALS['_MDB2_Schema_Reserved'][$rdbms])) {
return $this->raiseError(MDB2_SCHEMA_ERROR_VALIDATE,
"$type name '$id' is a reserved word in: $rdbms");
}
}
}
return MDB2_OK;
}
// }}}
}
+39 -18
View File
@@ -1,8 +1,6 @@
<?php
<?php /* vim: se et ts=4 sw=4 sts=4 fdm=marker tw=80: */
/**
* PHP versions 4 and 5
*
* Copyright (c) 1998-2008 Manuel Lemos, Tomas V.V.Cox,
* Copyright (c) 1998-2010 Manuel Lemos, Tomas V.V.Cox,
* Stig. S. Bakken, Lukas Smith, Igor Feghali
* All rights reserved.
*
@@ -39,15 +37,14 @@
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* Author: Lukas Smith <smith@pooteeweet.org>
* Author: Igor Feghali <ifeghali@php.net>
* PHP version 5
*
* @category Database
* @package MDB2_Schema
* @author Lukas Smith <smith@pooteeweet.org>
* @author Igor Feghali <ifeghali@php.net>
* @license BSD http://www.opensource.org/licenses/bsd-license.php
* @version CVS: $Id: Writer.php,v 1.40 2008/11/30 03:34:00 clockwerx Exp $
* @version SVN: $Id$
* @link http://pear.php.net/packages/MDB2_Schema
*/
@@ -69,11 +66,33 @@ class MDB2_Schema_Writer
// }}}
// {{{ constructor
/**
* PHP 5 constructor
*
* @param array $valid_types information of all valid fields
* types
*
* @return void
*
* @access public
* @static
*/
function __construct($valid_types = array())
{
$this->valid_types = $valid_types;
}
/**
* PHP 4 compatible constructor
*
* @param array $valid_types information of all valid fields
* types
*
* @return void
*
* @access public
* @static
*/
function MDB2_Schema_Writer($valid_types = array())
{
$this->__construct($valid_types);
@@ -87,15 +106,18 @@ class MDB2_Schema_Writer
* callbacks etc. Basically a wrapper for PEAR::raiseError
* without the message string.
*
* @param int|PEAR_Error $code integer error code or and PEAR_Error instance
* @param int $mode error mode, see PEAR_Error docs
* error level (E_USER_NOTICE etc). If error mode is
* PEAR_ERROR_CALLBACK, this is the callback function,
* either as a function name, or as an array of an
* object and method name. For other error modes this
* parameter is ignored.
* @param string $options Extra debug information. Defaults to the last
* query and native error code.
* @param int|PEAR_Error $code integer error code or and PEAR_Error
* instance
* @param int $mode error mode, see PEAR_Error docs error
* level (E_USER_NOTICE etc). If error mode
* is PEAR_ERROR_CALLBACK, this is the
* callback function, either as a function
* name, or as an array of an object and
* method name. For other error modes this
* parameter is ignored.
* @param string $options Extra debug information. Defaults to the
* last query and native error code.
* @param string $userinfo User-friendly error message
*
* @return object a PEAR error object
* @access public
@@ -103,7 +125,7 @@ class MDB2_Schema_Writer
*/
function &raiseError($code = null, $mode = null, $options = null, $userinfo = null)
{
$error =& MDB2_Schema::raiseError($code, $mode, $options, $userinfo);
$error = MDB2_Schema::raiseError($code, $mode, $options, $userinfo);
return $error;
}
@@ -578,4 +600,3 @@ class MDB2_Schema_Writer
// }}}
}
?>
+338
View File
@@ -0,0 +1,338 @@
<?php
/**
* The OS_Guess class
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Gregory Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Guess.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since PEAR 0.1
*/
// {{{ uname examples
// php_uname() without args returns the same as 'uname -a', or a PHP-custom
// string for Windows.
// PHP versions prior to 4.3 return the uname of the host where PHP was built,
// as of 4.3 it returns the uname of the host running the PHP code.
//
// PC RedHat Linux 7.1:
// Linux host.example.com 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686 unknown
//
// PC Debian Potato:
// Linux host 2.4.17 #2 SMP Tue Feb 12 15:10:04 CET 2002 i686 unknown
//
// PC FreeBSD 3.3:
// FreeBSD host.example.com 3.3-STABLE FreeBSD 3.3-STABLE #0: Mon Feb 21 00:42:31 CET 2000 root@example.com:/usr/src/sys/compile/CONFIG i386
//
// PC FreeBSD 4.3:
// FreeBSD host.example.com 4.3-RELEASE FreeBSD 4.3-RELEASE #1: Mon Jun 25 11:19:43 EDT 2001 root@example.com:/usr/src/sys/compile/CONFIG i386
//
// PC FreeBSD 4.5:
// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb 6 23:59:23 CET 2002 root@example.com:/usr/src/sys/compile/CONFIG i386
//
// PC FreeBSD 4.5 w/uname from GNU shellutils:
// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb i386 unknown
//
// HP 9000/712 HP-UX 10:
// HP-UX iq B.10.10 A 9000/712 2008429113 two-user license
//
// HP 9000/712 HP-UX 10 w/uname from GNU shellutils:
// HP-UX host B.10.10 A 9000/712 unknown
//
// IBM RS6000/550 AIX 4.3:
// AIX host 3 4 000003531C00
//
// AIX 4.3 w/uname from GNU shellutils:
// AIX host 3 4 000003531C00 unknown
//
// SGI Onyx IRIX 6.5 w/uname from GNU shellutils:
// IRIX64 host 6.5 01091820 IP19 mips
//
// SGI Onyx IRIX 6.5:
// IRIX64 host 6.5 01091820 IP19
//
// SparcStation 20 Solaris 8 w/uname from GNU shellutils:
// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc
//
// SparcStation 20 Solaris 8:
// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc SUNW,SPARCstation-20
//
// Mac OS X (Darwin)
// Darwin home-eden.local 7.5.0 Darwin Kernel Version 7.5.0: Thu Aug 5 19:26:16 PDT 2004; root:xnu/xnu-517.7.21.obj~3/RELEASE_PPC Power Macintosh
//
// Mac OS X early versions
//
// }}}
/* TODO:
* - define endianness, to allow matchSignature("bigend") etc.
*/
/**
* Retrieves information about the current operating system
*
* This class uses php_uname() to grok information about the current OS
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Gregory Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 0.1
*/
class OS_Guess
{
var $sysname;
var $nodename;
var $cpu;
var $release;
var $extra;
function OS_Guess($uname = null)
{
list($this->sysname,
$this->release,
$this->cpu,
$this->extra,
$this->nodename) = $this->parseSignature($uname);
}
function parseSignature($uname = null)
{
static $sysmap = array(
'HP-UX' => 'hpux',
'IRIX64' => 'irix',
);
static $cpumap = array(
'i586' => 'i386',
'i686' => 'i386',
'ppc' => 'powerpc',
);
if ($uname === null) {
$uname = php_uname();
}
$parts = preg_split('/\s+/', trim($uname));
$n = count($parts);
$release = $machine = $cpu = '';
$sysname = $parts[0];
$nodename = $parts[1];
$cpu = $parts[$n-1];
$extra = '';
if ($cpu == 'unknown') {
$cpu = $parts[$n - 2];
}
switch ($sysname) {
case 'AIX' :
$release = "$parts[3].$parts[2]";
break;
case 'Windows' :
switch ($parts[1]) {
case '95/98':
$release = '9x';
break;
default:
$release = $parts[1];
break;
}
$cpu = 'i386';
break;
case 'Linux' :
$extra = $this->_detectGlibcVersion();
// use only the first two digits from the kernel version
$release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]);
break;
case 'Mac' :
$sysname = 'darwin';
$nodename = $parts[2];
$release = $parts[3];
if ($cpu == 'Macintosh') {
if ($parts[$n - 2] == 'Power') {
$cpu = 'powerpc';
}
}
break;
case 'Darwin' :
if ($cpu == 'Macintosh') {
if ($parts[$n - 2] == 'Power') {
$cpu = 'powerpc';
}
}
$release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]);
break;
default:
$release = preg_replace('/-.*/', '', $parts[2]);
break;
}
if (isset($sysmap[$sysname])) {
$sysname = $sysmap[$sysname];
} else {
$sysname = strtolower($sysname);
}
if (isset($cpumap[$cpu])) {
$cpu = $cpumap[$cpu];
}
return array($sysname, $release, $cpu, $extra, $nodename);
}
function _detectGlibcVersion()
{
static $glibc = false;
if ($glibc !== false) {
return $glibc; // no need to run this multiple times
}
$major = $minor = 0;
include_once "System.php";
// Use glibc's <features.h> header file to
// get major and minor version number:
if (@file_exists('/usr/include/features.h') &&
@is_readable('/usr/include/features.h')) {
if (!@file_exists('/usr/bin/cpp') || !@is_executable('/usr/bin/cpp')) {
$features_file = fopen('/usr/include/features.h', 'rb');
while (!feof($features_file)) {
$line = fgets($features_file, 8192);
if (!$line || (strpos($line, '#define') === false)) {
continue;
}
if (strpos($line, '__GLIBC__')) {
// major version number #define __GLIBC__ version
$line = preg_split('/\s+/', $line);
$glibc_major = trim($line[2]);
if (isset($glibc_minor)) {
break;
}
continue;
}
if (strpos($line, '__GLIBC_MINOR__')) {
// got the minor version number
// #define __GLIBC_MINOR__ version
$line = preg_split('/\s+/', $line);
$glibc_minor = trim($line[2]);
if (isset($glibc_major)) {
break;
}
continue;
}
}
fclose($features_file);
if (!isset($glibc_major) || !isset($glibc_minor)) {
return $glibc = '';
}
return $glibc = 'glibc' . trim($glibc_major) . "." . trim($glibc_minor) ;
} // no cpp
$tmpfile = System::mktemp("glibctest");
$fp = fopen($tmpfile, "w");
fwrite($fp, "#include <features.h>\n__GLIBC__ __GLIBC_MINOR__\n");
fclose($fp);
$cpp = popen("/usr/bin/cpp $tmpfile", "r");
while ($line = fgets($cpp, 1024)) {
if ($line{0} == '#' || trim($line) == '') {
continue;
}
if (list($major, $minor) = explode(' ', trim($line))) {
break;
}
}
pclose($cpp);
unlink($tmpfile);
} // features.h
if (!($major && $minor) && @is_link('/lib/libc.so.6')) {
// Let's try reading the libc.so.6 symlink
if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib/libc.so.6')), $matches)) {
list($major, $minor) = explode('.', $matches[1]);
}
}
if (!($major && $minor)) {
return $glibc = '';
}
return $glibc = "glibc{$major}.{$minor}";
}
function getSignature()
{
if (empty($this->extra)) {
return "{$this->sysname}-{$this->release}-{$this->cpu}";
}
return "{$this->sysname}-{$this->release}-{$this->cpu}-{$this->extra}";
}
function getSysname()
{
return $this->sysname;
}
function getNodename()
{
return $this->nodename;
}
function getCpu()
{
return $this->cpu;
}
function getRelease()
{
return $this->release;
}
function getExtra()
{
return $this->extra;
}
function matchSignature($match)
{
$fragments = is_array($match) ? $match : explode('-', $match);
$n = count($fragments);
$matches = 0;
if ($n > 0) {
$matches += $this->_matchFragment($fragments[0], $this->sysname);
}
if ($n > 1) {
$matches += $this->_matchFragment($fragments[1], $this->release);
}
if ($n > 2) {
$matches += $this->_matchFragment($fragments[2], $this->cpu);
}
if ($n > 3) {
$matches += $this->_matchFragment($fragments[3], $this->extra);
}
return ($matches == $n);
}
function _matchFragment($fragment, $value)
{
if (strcspn($fragment, '*?') < strlen($fragment)) {
$reg = '/^' . str_replace(array('*', '?', '/'), array('.*', '.', '\\/'), $fragment) . '\\z/';
return preg_match($reg, $value);
}
return ($fragment == '*' || !strcasecmp($fragment, $value));
}
}
/*
* Local Variables:
* indent-tabs-mode: nil
* c-basic-offset: 4
* End:
*/
+27
View File
@@ -0,0 +1,27 @@
Copyright (c) 1997-2009,
Stig Bakken <ssb@php.net>,
Gregory Beaver <cellog@php.net>,
Helgi Þormar Þorbjörnsson <helgi@php.net>,
Tomas V.V.Cox <cox@idecnet.com>,
Martin Jansen <mj@php.net>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+216 -208
View File
@@ -1,26 +1,27 @@
<?php
//
// +--------------------------------------------------------------------+
// | PEAR, the PHP Extension and Application Repository |
// +--------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +--------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +--------------------------------------------------------------------+
// | Authors: Sterling Hughes <sterling@php.net> |
// | Stig Bakken <ssb@php.net> |
// | Tomas V.V.Cox <cox@idecnet.com> |
// +--------------------------------------------------------------------+
//
// $Id: PEAR.php,v 1.82.2.6 2005/01/01 05:24:51 cellog Exp $
//
/**
* PEAR, the PHP Extension and Application Repository
*
* PEAR class and PEAR_Error class
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Sterling Hughes <sterling@php.net>
* @author Stig Bakken <ssb@php.net>
* @author Tomas V.V.Cox <cox@idecnet.com>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2010 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: PEAR.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 0.1
*/
/**#@+
* ERROR constants
*/
define('PEAR_ERROR_RETURN', 1);
define('PEAR_ERROR_PRINT', 2);
define('PEAR_ERROR_TRIGGER', 4);
@@ -31,6 +32,7 @@ define('PEAR_ERROR_CALLBACK', 16);
* @deprecated
*/
define('PEAR_ERROR_EXCEPTION', 32);
/**#@-*/
define('PEAR_ZE2', (function_exists('version_compare') &&
version_compare(zend_version(), "2-dev", "ge")));
@@ -44,15 +46,6 @@ if (substr(PHP_OS, 0, 3) == 'WIN') {
define('PEAR_OS', 'Unix'); // blatant assumption
}
// instant backwards compatibility
if (!defined('PATH_SEPARATOR')) {
if (OS_WINDOWS) {
define('PATH_SEPARATOR', ';');
} else {
define('PATH_SEPARATOR', ':');
}
}
$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN;
$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE;
$GLOBALS['_PEAR_destructor_object_list'] = array();
@@ -78,14 +71,21 @@ $GLOBALS['_PEAR_error_handler_stack'] = array();
* IMPORTANT! To use the emulated destructors you need to create the
* objects by reference: $obj =& new PEAR_child;
*
* @since PHP 4.0.2
* @author Stig Bakken <ssb@php.net>
* @see http://pear.php.net/manual/
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Tomas V.V. Cox <cox@idecnet.com>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2006 The PHP Group
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @see PEAR_Error
* @since Class available since PHP 4.0.2
* @link http://pear.php.net/manual/en/core.pear.php#core.pear.pear
*/
class PEAR
{
// {{{ properties
/**
* Whether to enable internal debug messages.
*
@@ -136,10 +136,6 @@ class PEAR
*/
var $_expected_errors = array();
// }}}
// {{{ constructor
/**
* Constructor. Registers this object in
* $_PEAR_destructor_object_list for destructor emulation if a
@@ -156,9 +152,11 @@ class PEAR
if ($this->_debug) {
print "PEAR constructor called, class=$classname\n";
}
if ($error_class !== null) {
$this->_error_class = $error_class;
}
while ($classname && strcasecmp($classname, "pear")) {
$destructor = "_$classname";
if (method_exists($this, $destructor)) {
@@ -175,9 +173,6 @@ class PEAR
}
}
// }}}
// {{{ destructor
/**
* Destructor (the emulated type of...). Does nothing right now,
* but is included for forward compatibility, so subclass
@@ -195,9 +190,6 @@ class PEAR
}
}
// }}}
// {{{ getStaticProperty()
/**
* If you have a class that's mostly/entirely static, and you need static
* properties, you can use this method to simulate them. Eg. in your method(s)
@@ -213,12 +205,17 @@ class PEAR
function &getStaticProperty($class, $var)
{
static $properties;
if (!isset($properties[$class])) {
$properties[$class] = array();
}
if (!array_key_exists($var, $properties[$class])) {
$properties[$class][$var] = null;
}
return $properties[$class][$var];
}
// }}}
// {{{ registerShutdownFunc()
/**
* Use this function to register a shutdown method for static
* classes.
@@ -230,12 +227,15 @@ class PEAR
*/
function registerShutdownFunc($func, $args = array())
{
// if we are called statically, there is a potential
// that no shutdown func is registered. Bug #6445
if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
register_shutdown_function("_PEAR_call_destructors");
$GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
}
$GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
}
// }}}
// {{{ isError()
/**
* Tell whether a value is a PEAR error.
*
@@ -249,20 +249,18 @@ class PEAR
*/
static function isError($data, $code = null)
{
if ($data instanceof PEAR_Error) {
if (is_null($code)) {
return true;
} elseif (is_string($code)) {
return $data->getMessage() == $code;
} else {
return $data->getCode() == $code;
}
if (!is_a($data, 'PEAR_Error')) {
return false;
}
return false;
}
// }}}
// {{{ setErrorHandling()
if (is_null($code)) {
return true;
} elseif (is_string($code)) {
return $data->getMessage() == $code;
}
return $data->getCode() == $code;
}
/**
* Sets how errors generated by this object should be handled.
@@ -302,10 +300,9 @@ class PEAR
*
* @since PHP 4.0.5
*/
function setErrorHandling($mode = null, $options = null)
{
if (isset($this) && $this instanceof PEAR) {
if (isset($this) && is_a($this, 'PEAR')) {
$setmode = &$this->_default_error_mode;
$setoptions = &$this->_default_error_options;
} else {
@@ -340,9 +337,6 @@ class PEAR
}
}
// }}}
// {{{ expectError()
/**
* This method is used to tell which errors you expect to get.
* Expected errors are always returned with error mode
@@ -365,12 +359,9 @@ class PEAR
} else {
array_push($this->_expected_errors, array($code));
}
return sizeof($this->_expected_errors);
return count($this->_expected_errors);
}
// }}}
// {{{ popExpect()
/**
* This method pops one element off the expected error codes
* stack.
@@ -382,9 +373,6 @@ class PEAR
return array_pop($this->_expected_errors);
}
// }}}
// {{{ _checkDelExpect()
/**
* This method checks unsets an error code if available
*
@@ -396,8 +384,7 @@ class PEAR
function _checkDelExpect($error_code)
{
$deleted = false;
foreach ($this->_expected_errors AS $key => $error_array) {
foreach ($this->_expected_errors as $key => $error_array) {
if (in_array($error_code, $error_array)) {
unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
$deleted = true;
@@ -408,12 +395,10 @@ class PEAR
unset($this->_expected_errors[$key]);
}
}
return $deleted;
}
// }}}
// {{{ delExpect()
/**
* This method deletes all occurences of the specified element from
* the expected error codes stack.
@@ -426,34 +411,26 @@ class PEAR
function delExpect($error_code)
{
$deleted = false;
if ((is_array($error_code) && (0 != count($error_code)))) {
// $error_code is a non-empty array here;
// we walk through it trying to unset all
// values
foreach($error_code as $key => $error) {
if ($this->_checkDelExpect($error)) {
$deleted = true;
} else {
$deleted = false;
}
// $error_code is a non-empty array here; we walk through it trying
// to unset all values
foreach ($error_code as $key => $error) {
$deleted = $this->_checkDelExpect($error) ? true : false;
}
return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
} elseif (!empty($error_code)) {
// $error_code comes alone, trying to unset it
if ($this->_checkDelExpect($error_code)) {
return true;
} else {
return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
}
} else {
// $error_code is empty
return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
}
}
// }}}
// {{{ raiseError()
return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
}
// $error_code is empty
return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
}
/**
* This method is a wrapper that returns an instance of the
@@ -492,7 +469,7 @@ class PEAR
* @see PEAR::setErrorHandling
* @since PHP 4.0.5
*/
function raiseError($message = null,
static function &raiseError($message = null,
$code = null,
$mode = null,
$options = null,
@@ -509,13 +486,20 @@ class PEAR
$message = $message->getMessage();
}
if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
if (
isset($this) &&
isset($this->_expected_errors) &&
count($this->_expected_errors) > 0 &&
count($exp = end($this->_expected_errors))
) {
if ($exp[0] == "*" ||
(is_int(reset($exp)) && in_array($code, $exp)) ||
(is_string(reset($exp)) && in_array($message, $exp))) {
(is_string(reset($exp)) && in_array($message, $exp))
) {
$mode = PEAR_ERROR_RETURN;
}
}
// No mode given, try global ones
if ($mode === null) {
// Class error handler
@@ -536,38 +520,52 @@ class PEAR
} else {
$ec = 'PEAR_Error';
}
if ($skipmsg) {
return new $ec($code, $mode, $options, $userinfo);
} else {
return new $ec($message, $code, $mode, $options, $userinfo);
}
}
// }}}
// {{{ throwError()
if (intval(PHP_VERSION) < 5) {
// little non-eval hack to fix bug #12147
include 'PEAR/FixPHP5PEARWarnings.php';
return $a;
}
if ($skipmsg) {
$a = new $ec($code, $mode, $options, $userinfo);
} else {
$a = new $ec($message, $code, $mode, $options, $userinfo);
}
return $a;
}
/**
* Simpler form of raiseError with fewer options. In most cases
* message, code and userinfo are enough.
*
* @param string $message
* @param mixed $message a text error message or a PEAR error object
*
* @param int $code a numeric error code (it is up to your class
* to define these if you want to use codes)
*
* @param string $userinfo If you need to pass along for example debug
* information, this parameter is meant for that.
*
* @access public
* @return object a PEAR error object
* @see PEAR::raiseError
*/
function throwError($message = null,
$code = null,
$userinfo = null)
function &throwError($message = null, $code = null, $userinfo = null)
{
if (isset($this) && $this instanceof PEAR) {
return $this->raiseError($message, $code, null, null, $userinfo);
} else {
return PEAR::raiseError($message, $code, null, null, $userinfo);
if (isset($this) && is_a($this, 'PEAR')) {
$a = $this->raiseError($message, $code, null, null, $userinfo);
return $a;
}
$a = PEAR::raiseError($message, $code, null, null, $userinfo);
return $a;
}
// }}}
function staticPushErrorHandling($mode, $options = null)
{
$stack = &$GLOBALS['_PEAR_error_handler_stack'];
$stack = &$GLOBALS['_PEAR_error_handler_stack'];
$def_mode = &$GLOBALS['_PEAR_default_error_mode'];
$def_options = &$GLOBALS['_PEAR_default_error_options'];
$stack[] = array($def_mode, $def_options);
@@ -636,8 +634,6 @@ class PEAR
return true;
}
// {{{ pushErrorHandling()
/**
* Push a new error handler on top of the error handler options stack. With this
* you can easily override the actual error handler for some code and restore
@@ -653,7 +649,7 @@ class PEAR
function pushErrorHandling($mode, $options = null)
{
$stack = &$GLOBALS['_PEAR_error_handler_stack'];
if (isset($this) && $this instanceof PEAR) {
if (isset($this) && is_a($this, 'PEAR')) {
$def_mode = &$this->_default_error_mode;
$def_options = &$this->_default_error_options;
} else {
@@ -662,7 +658,7 @@ class PEAR
}
$stack[] = array($def_mode, $def_options);
if (isset($this) && $this instanceof PEAR) {
if (isset($this) && is_a($this, 'PEAR')) {
$this->setErrorHandling($mode, $options);
} else {
PEAR::setErrorHandling($mode, $options);
@@ -671,9 +667,6 @@ class PEAR
return true;
}
// }}}
// {{{ popErrorHandling()
/**
* Pop the last error handler used
*
@@ -687,7 +680,7 @@ class PEAR
array_pop($stack);
list($mode, $options) = $stack[sizeof($stack) - 1];
array_pop($stack);
if (isset($this) && $this instanceof PEAR) {
if (isset($this) && is_a($this, 'PEAR')) {
$this->setErrorHandling($mode, $options);
} else {
PEAR::setErrorHandling($mode, $options);
@@ -695,9 +688,6 @@ class PEAR
return true;
}
// }}}
// {{{ loadExtension()
/**
* OS independant PHP extension load. Remember to take care
* on the correct extension name for case sensitive OSes.
@@ -705,33 +695,40 @@ class PEAR
* @param string $ext The extension name
* @return bool Success or not on the dl() call
*/
function loadExtension($ext)
static function loadExtension($ext)
{
if (!extension_loaded($ext)) {
// if either returns true dl() will produce a FATAL error, stop that
if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
return false;
}
if (OS_WINDOWS) {
$suffix = '.dll';
} elseif (PHP_OS == 'HP-UX') {
$suffix = '.sl';
} elseif (PHP_OS == 'AIX') {
$suffix = '.a';
} elseif (PHP_OS == 'OSX') {
$suffix = '.bundle';
} else {
$suffix = '.so';
}
return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
if (extension_loaded($ext)) {
return true;
}
return true;
}
// }}}
// if either returns true dl() will produce a FATAL error, stop that
if (
function_exists('dl') === false ||
ini_get('enable_dl') != 1 ||
ini_get('safe_mode') == 1
) {
return false;
}
if (OS_WINDOWS) {
$suffix = '.dll';
} elseif (PHP_OS == 'HP-UX') {
$suffix = '.sl';
} elseif (PHP_OS == 'AIX') {
$suffix = '.a';
} elseif (PHP_OS == 'OSX') {
$suffix = '.bundle';
} else {
$suffix = '.so';
}
return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
}
}
// {{{ _PEAR_call_destructors()
if (PEAR_ZE2) {
include_once 'PEAR5.php';
}
function _PEAR_call_destructors()
{
@@ -740,9 +737,16 @@ function _PEAR_call_destructors()
sizeof($_PEAR_destructor_object_list))
{
reset($_PEAR_destructor_object_list);
if (@PEAR::getStaticProperty('PEAR', 'destructlifo')) {
if (PEAR_ZE2) {
$destructLifoExists = PEAR5::getStaticProperty('PEAR', 'destructlifo');
} else {
$destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo');
}
if ($destructLifoExists) {
$_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
}
while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
$classname = get_class($objref);
while ($classname) {
@@ -761,19 +765,36 @@ function _PEAR_call_destructors()
}
// Now call the shutdown functions
if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
if (
isset($GLOBALS['_PEAR_shutdown_funcs']) &&
is_array($GLOBALS['_PEAR_shutdown_funcs']) &&
!empty($GLOBALS['_PEAR_shutdown_funcs'])
) {
foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
call_user_func_array($value[0], $value[1]);
}
}
}
// }}}
/**
* Standard PEAR error class for PHP 4
*
* This class is supserseded by {@link PEAR_Exception} in PHP 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Tomas V.V. Cox <cox@idecnet.com>
* @author Gregory Beaver <cellog@php.net>
* @copyright 1997-2006 The PHP Group
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/manual/en/core.pear.pear-error.php
* @see PEAR::raiseError(), PEAR::throwError()
* @since Class available since PHP 4.0.2
*/
class PEAR_Error
{
// {{{ properties
var $error_message_prefix = '';
var $mode = PEAR_ERROR_RETURN;
var $level = E_USER_NOTICE;
@@ -782,9 +803,6 @@ class PEAR_Error
var $userinfo = '';
var $backtrace = null;
// }}}
// {{{ constructor
/**
* PEAR_Error constructor
*
@@ -815,11 +833,20 @@ class PEAR_Error
$this->code = $code;
$this->mode = $mode;
$this->userinfo = $userinfo;
if (function_exists("debug_backtrace")) {
if (@!PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) {
$this->backtrace = debug_backtrace();
if (PEAR_ZE2) {
$skiptrace = PEAR5::getStaticProperty('PEAR_Error', 'skiptrace');
} else {
$skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace');
}
if (!$skiptrace) {
$this->backtrace = debug_backtrace();
if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
unset($this->backtrace[0]['object']);
}
}
if ($mode & PEAR_ERROR_CALLBACK) {
$this->level = E_USER_NOTICE;
$this->callback = $options;
@@ -827,20 +854,25 @@ class PEAR_Error
if ($options === null) {
$options = E_USER_NOTICE;
}
$this->level = $options;
$this->callback = null;
}
if ($this->mode & PEAR_ERROR_PRINT) {
if (is_null($options) || is_int($options)) {
$format = "%s";
} else {
$format = $options;
}
printf($format, $this->getMessage());
}
if ($this->mode & PEAR_ERROR_TRIGGER) {
trigger_error($this->getMessage(), $this->level);
}
if ($this->mode & PEAR_ERROR_DIE) {
$msg = $this->getMessage();
if (is_null($options) || is_int($options)) {
@@ -853,47 +885,39 @@ class PEAR_Error
}
die(sprintf($format, $msg));
}
if ($this->mode & PEAR_ERROR_CALLBACK) {
if (is_callable($this->callback)) {
call_user_func($this->callback, $this);
}
if ($this->mode & PEAR_ERROR_CALLBACK && is_callable($this->callback)) {
call_user_func($this->callback, $this);
}
if ($this->mode & PEAR_ERROR_EXCEPTION) {
trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions", E_USER_WARNING);
eval('$e = new Exception($this->message, $this->code);$e->PEAR_Error = $this;throw($e);');
trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
eval('$e = new Exception($this->message, $this->code);throw($e);');
}
}
// }}}
// {{{ getMode()
/**
* Get the error mode from an error object.
*
* @return int error mode
* @access public
*/
function getMode() {
function getMode()
{
return $this->mode;
}
// }}}
// {{{ getCallback()
/**
* Get the callback function/method from an error object.
*
* @return mixed callback function or object/method array
* @access public
*/
function getCallback() {
function getCallback()
{
return $this->callback;
}
// }}}
// {{{ getMessage()
/**
* Get the error message from an error object.
*
@@ -905,10 +929,6 @@ class PEAR_Error
return ($this->error_message_prefix . $this->message);
}
// }}}
// {{{ getCode()
/**
* Get error code from an error object
*
@@ -920,9 +940,6 @@ class PEAR_Error
return $this->code;
}
// }}}
// {{{ getType()
/**
* Get the name of this error/exception.
*
@@ -934,9 +951,6 @@ class PEAR_Error
return get_class($this);
}
// }}}
// {{{ getUserInfo()
/**
* Get additional user-supplied information.
*
@@ -948,9 +962,6 @@ class PEAR_Error
return $this->userinfo;
}
// }}}
// {{{ getDebugInfo()
/**
* Get additional debug information supplied by the application.
*
@@ -962,9 +973,6 @@ class PEAR_Error
return $this->getUserInfo();
}
// }}}
// {{{ getBacktrace()
/**
* Get the call backtrace from where the error was generated.
* Supported with PHP 4.3.0 or newer.
@@ -975,15 +983,15 @@ class PEAR_Error
*/
function getBacktrace($frame = null)
{
if (defined('PEAR_IGNORE_BACKTRACE')) {
return null;
}
if ($frame === null) {
return $this->backtrace;
}
return $this->backtrace[$frame];
}
// }}}
// {{{ addUserInfo()
function addUserInfo($info)
{
if (empty($this->userinfo)) {
@@ -993,8 +1001,10 @@ class PEAR_Error
}
}
// }}}
// {{{ toString()
function __toString()
{
return $this->getMessage();
}
/**
* Make a string representation of this object.
@@ -1002,7 +1012,8 @@ class PEAR_Error
* @return string a string with an object summary
* @access public
*/
function toString() {
function toString()
{
$modes = array();
$levels = array(E_USER_NOTICE => 'notice',
E_USER_WARNING => 'warning',
@@ -1041,8 +1052,6 @@ class PEAR_Error
$this->error_message_prefix,
$this->userinfo);
}
// }}}
}
/*
@@ -1052,4 +1061,3 @@ class PEAR_Error
* c-basic-offset: 4
* End:
*/
?>
+30 -20
View File
@@ -1,29 +1,31 @@
<?php
/**
* Class auto-loader
*
* PHP versions 4
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Autoloader.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/manual/en/core.ppm.php#core.ppm.pear-autoloader
* @since File available since Release 0.1
* @deprecated File deprecated in Release 1.4.0a1
*/
// /* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Stig Bakken <ssb@php.net> |
// | |
// +----------------------------------------------------------------------+
//
// $Id: Autoloader.php,v 1.11 2004/02/27 02:21:29 cellog Exp $
if (!extension_loaded("overload")) {
// die hard without ext/overload
die("Rebuild PHP with the `overload' extension to use PEAR_Autoloader");
}
/**
* Include for PEAR_Error and PEAR classes
*/
require_once "PEAR.php";
/**
@@ -38,7 +40,15 @@ require_once "PEAR.php";
* methods, an instance of each class providing separated methods is
* stored and called every time the aggregated method is called.
*
* @author Stig Sæther Bakken <ssb@php.net>
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/manual/en/core.ppm.php#core.ppm.pear-autoloader
* @since File available since Release 0.1
* @deprecated File deprecated in Release 1.4.0a1
*/
class PEAR_Autoloader extends PEAR
{
@@ -134,7 +144,7 @@ class PEAR_Autoloader extends PEAR
$include_file = preg_replace('/[^a-z0-9]/i', '_', $classname);
include_once $include_file;
}
$obj =& new $classname;
$obj = new $classname;
$methods = get_class_methods($classname);
foreach ($methods as $method) {
// don't import priviate methods and constructors
+153 -90
View File
@@ -1,47 +1,60 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Stig Sæther Bakken <ssb@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: Builder.php,v 1.16.2.3 2005/02/17 17:55:01 cellog Exp $
/**
* PEAR_Builder for building PHP extensions (PECL packages)
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Builder.php 313024 2011-07-06 19:51:24Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 0.1
*
* TODO: log output parameters in PECL command line
* TODO: msdev path in configuration
*/
/**
* Needed for extending PEAR_Builder
*/
require_once 'PEAR/Common.php';
require_once 'PEAR/PackageFile.php';
/**
* Class to handle building (compiling) extensions.
*
* @author Stig Sæther Bakken <ssb@php.net>
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since PHP 4.0.2
* @see http://pear.php.net/manual/en/core.ppm.pear-builder.php
*/
class PEAR_Builder extends PEAR_Common
{
// {{{ properties
var $php_api_version = 0;
var $zend_module_api_no = 0;
var $zend_extension_api_no = 0;
var $extensions_built = array();
/**
* @var string Used for reporting when it is not possible to pass function
* via extra parameter, e.g. log, msdevCallback
*/
var $current_callback = null;
// used for msdev builds
var $_lastline = null;
var $_firstline = null;
// }}}
// {{{ constructor
/**
* PEAR_Builder constructor.
@@ -56,35 +69,48 @@ class PEAR_Builder extends PEAR_Common
$this->setFrontendObject($ui);
}
// }}}
// {{{ _build_win32()
/**
* Build an extension from source on windows.
* requires msdev
*/
function _build_win32($descfile, $callback = null)
{
if (PEAR::isError($info = $this->infoFromDescriptionFile($descfile))) {
return $info;
if (is_object($descfile)) {
$pkg = $descfile;
$descfile = $pkg->getPackageFile();
} else {
$pf = &new PEAR_PackageFile($this->config, $this->debug);
$pkg = &$pf->fromPackageFile($descfile, PEAR_VALIDATE_NORMAL);
if (PEAR::isError($pkg)) {
return $pkg;
}
}
$dir = dirname($descfile);
$old_cwd = getcwd();
if (!@chdir($dir)) {
if (!file_exists($dir) || !is_dir($dir) || !chdir($dir)) {
return $this->raiseError("could not chdir to $dir");
}
// packages that were in a .tar have the packagefile in this directory
$vdir = $pkg->getPackage() . '-' . $pkg->getVersion();
if (file_exists($dir) && is_dir($vdir)) {
if (!chdir($vdir)) {
return $this->raiseError("could not chdir to " . realpath($vdir));
}
$dir = getcwd();
}
$this->log(2, "building in $dir");
$dsp = $info['package'].'.dsp';
if (!@is_file("$dir/$dsp")) {
$dsp = $pkg->getPackage().'.dsp';
if (!file_exists("$dir/$dsp")) {
return $this->raiseError("The DSP $dsp does not exist.");
}
// XXX TODO: make release build type configurable
$command = 'msdev '.$dsp.' /MAKE "'.$info['package']. ' - Release"';
$command = 'msdev '.$dsp.' /MAKE "'.$pkg->getPackage(). ' - Release"';
$this->current_callback = $callback;
$err = $this->_runCommand($command, array(&$this, 'msdevCallback'));
if (PEAR::isError($err)) {
return $err;
@@ -93,12 +119,12 @@ class PEAR_Builder extends PEAR_Common
// figure out the build platform and type
$platform = 'Win32';
$buildtype = 'Release';
if (preg_match('/.*?'.$info['package'].'\s-\s(\w+)\s(.*?)-+/i',$this->_firstline,$matches)) {
if (preg_match('/.*?'.$pkg->getPackage().'\s-\s(\w+)\s(.*?)-+/i',$this->_firstline,$matches)) {
$platform = $matches[1];
$buildtype = $matches[2];
}
if (preg_match('/(.*)?\s-\s(\d+).*?(\d+)/',$this->_lastline,$matches)) {
if (preg_match('/(.*)?\s-\s(\d+).*?(\d+)/', $this->_lastline, $matches)) {
if ($matches[2]) {
// there were errors in the build
return $this->raiseError("There were errors during compilation.");
@@ -115,18 +141,19 @@ class PEAR_Builder extends PEAR_Common
// this regex depends on the build platform and type having been
// correctly identified above.
$regex ='/.*?!IF\s+"\$\(CFG\)"\s+==\s+("'.
$info['package'].'\s-\s'.
$pkg->getPackage().'\s-\s'.
$platform.'\s'.
$buildtype.'").*?'.
'\/out:"(.*?)"/is';
if ($dsptext && preg_match($regex,$dsptext,$matches)) {
if ($dsptext && preg_match($regex, $dsptext, $matches)) {
// what we get back is a relative path to the output file itself.
$outfile = realpath($matches[2]);
} else {
return $this->raiseError("Could not retrieve output information from $dsp.");
}
if (@copy($outfile, "$dir/$out")) {
// realpath returns false if the file doesn't exist
if ($outfile && copy($outfile, "$dir/$out")) {
$outfile = "$dir/$out";
}
@@ -147,10 +174,9 @@ class PEAR_Builder extends PEAR_Common
if (!$this->_firstline)
$this->_firstline = $data;
$this->_lastline = $data;
call_user_func($this->current_callback, $what, $data);
}
// }}}
// {{{ _harventInstDir
/**
* @param string
* @param string
@@ -191,16 +217,13 @@ class PEAR_Builder extends PEAR_Common
return $ret;
}
// }}}
// {{{ build()
/**
* Build an extension from source. Runs "phpize" in the source
* directory, but compiles in a temporary directory
* (/var/tmp/pear-build-USER/PACKAGE-VERSION).
* (TMPDIR/pear-build-USER/PACKAGE-VERSION).
*
* @param string $descfile path to XML package description file
* @param string|PEAR_PackageFile_v* $descfile path to XML package description file, or
* a PEAR_PackageFile object
*
* @param mixed $callback callback function used to report output,
* see PEAR_Builder::_runCommand for details
@@ -216,48 +239,97 @@ class PEAR_Builder extends PEAR_Common
* @access public
*
* @see PEAR_Builder::_runCommand
* @see PEAR_Common::infoFromDescriptionFile
*/
function build($descfile, $callback = null)
{
if (PEAR_OS == "Windows") {
return $this->_build_win32($descfile,$callback);
if (preg_match('/(\\/|\\\\|^)([^\\/\\\\]+)?php(.+)?$/',
$this->config->get('php_bin'), $matches)) {
if (isset($matches[2]) && strlen($matches[2]) &&
trim($matches[2]) != trim($this->config->get('php_prefix'))) {
$this->log(0, 'WARNING: php_bin ' . $this->config->get('php_bin') .
' appears to have a prefix ' . $matches[2] . ', but' .
' config variable php_prefix does not match');
}
if (isset($matches[3]) && strlen($matches[3]) &&
trim($matches[3]) != trim($this->config->get('php_suffix'))) {
$this->log(0, 'WARNING: php_bin ' . $this->config->get('php_bin') .
' appears to have a suffix ' . $matches[3] . ', but' .
' config variable php_suffix does not match');
}
}
$this->current_callback = $callback;
if (PEAR_OS == "Windows") {
return $this->_build_win32($descfile, $callback);
}
if (PEAR_OS != 'Unix') {
return $this->raiseError("building extensions not supported on this platform");
}
if (PEAR::isError($info = $this->infoFromDescriptionFile($descfile))) {
return $info;
if (is_object($descfile)) {
$pkg = $descfile;
$descfile = $pkg->getPackageFile();
if (is_a($pkg, 'PEAR_PackageFile_v1')) {
$dir = dirname($descfile);
} else {
$dir = $pkg->_config->get('temp_dir') . '/' . $pkg->getName();
// automatically delete at session end
$this->addTempFile($dir);
}
} else {
$pf = &new PEAR_PackageFile($this->config);
$pkg = &$pf->fromPackageFile($descfile, PEAR_VALIDATE_NORMAL);
if (PEAR::isError($pkg)) {
return $pkg;
}
$dir = dirname($descfile);
}
$dir = dirname($descfile);
// Find config. outside of normal path - e.g. config.m4
foreach (array_keys($pkg->getInstallationFileList()) as $item) {
if (stristr(basename($item), 'config.m4') && dirname($item) != '.') {
$dir .= DIRECTORY_SEPARATOR . dirname($item);
break;
}
}
$old_cwd = getcwd();
if (!@chdir($dir)) {
if (!file_exists($dir) || !is_dir($dir) || !chdir($dir)) {
return $this->raiseError("could not chdir to $dir");
}
$vdir = "$info[package]-$info[version]";
$vdir = $pkg->getPackage() . '-' . $pkg->getVersion();
if (is_dir($vdir)) {
chdir($vdir);
}
$dir = getcwd();
$this->log(2, "building in $dir");
$this->current_callback = $callback;
putenv('PATH=' . $this->config->get('bin_dir') . ':' . getenv('PATH'));
$err = $this->_runCommand("phpize", array(&$this, 'phpizeCallback'));
$err = $this->_runCommand($this->config->get('php_prefix')
. "phpize" .
$this->config->get('php_suffix'),
array(&$this, 'phpizeCallback'));
if (PEAR::isError($err)) {
return $err;
}
if (!$err) {
return $this->raiseError("`phpize' failed");
}
// {{{ start of interactive part
$configure_command = "$dir/configure";
if (isset($info['configure_options'])) {
foreach ($info['configure_options'] as $o) {
$configure_options = $pkg->getConfigureOptions();
if ($configure_options) {
foreach ($configure_options as $o) {
$default = array_key_exists('default', $o) ? $o['default'] : null;
list($r) = $this->ui->userDialog('build',
array($o['prompt']),
array('text'),
array(@$o['default']));
array($default));
if (substr($o['name'], 0, 5) == 'with-' &&
($r == 'yes' || $r == 'autodetect')) {
$configure_command .= " --$o[name]";
@@ -269,40 +341,41 @@ class PEAR_Builder extends PEAR_Common
// }}} end of interactive part
// FIXME make configurable
if(!$user=getenv('USER')){
if (!$user=getenv('USER')) {
$user='defaultuser';
}
$build_basedir = "/var/tmp/pear-build-$user";
$build_dir = "$build_basedir/$info[package]-$info[version]";
$inst_dir = "$build_basedir/install-$info[package]-$info[version]";
$tmpdir = $this->config->get('temp_dir');
$build_basedir = System::mktemp(' -t "' . $tmpdir . '" -d "pear-build-' . $user . '"');
$build_dir = "$build_basedir/$vdir";
$inst_dir = "$build_basedir/install-$vdir";
$this->log(1, "building in $build_dir");
if (is_dir($build_dir)) {
System::rm('-rf', $build_dir);
System::rm(array('-rf', $build_dir));
}
if (!System::mkDir(array('-p', $build_dir))) {
return $this->raiseError("could not create build dir: $build_dir");
}
$this->addTempFile($build_dir);
if (!System::mkDir(array('-p', $inst_dir))) {
return $this->raiseError("could not create temporary install dir: $inst_dir");
}
$this->addTempFile($inst_dir);
if (getenv('MAKE')) {
$make_command = getenv('MAKE');
} else {
$make_command = 'make';
}
$make_command = getenv('MAKE') ? getenv('MAKE') : 'make';
$to_run = array(
$configure_command,
$make_command,
"$make_command INSTALL_ROOT=\"$inst_dir\" install",
"find \"$inst_dir\" -ls"
"find \"$inst_dir\" | xargs ls -dils"
);
if (!@chdir($build_dir)) {
if (!file_exists($build_dir) || !is_dir($build_dir) || !chdir($build_dir)) {
return $this->raiseError("could not chdir to $build_dir");
}
putenv('PHP_PEAR_VERSION=@PEAR-VER@');
putenv('PHP_PEAR_VERSION=1.9.4');
foreach ($to_run as $cmd) {
$err = $this->_runCommand($cmd, $callback);
if (PEAR::isError($err)) {
@@ -319,15 +392,14 @@ class PEAR_Builder extends PEAR_Common
return $this->raiseError("no `modules' directory found");
}
$built_files = array();
$prefix = exec("php-config --prefix");
$prefix = exec($this->config->get('php_prefix')
. "php-config" .
$this->config->get('php_suffix') . " --prefix");
$this->_harvestInstDir($prefix, $inst_dir . DIRECTORY_SEPARATOR . $prefix, $built_files);
chdir($old_cwd);
return $built_files;
}
// }}}
// {{{ phpizeCallback()
/**
* Message callback function used when running the "phpize"
* program. Extracts the API numbers used. Ignores other message
@@ -361,9 +433,6 @@ class PEAR_Builder extends PEAR_Common
}
}
// }}}
// {{{ _runCommand()
/**
* Run an external command, using a message callback to report
* output. The command will be run through popen and output is
@@ -383,7 +452,7 @@ class PEAR_Builder extends PEAR_Common
function _runCommand($command, $callback = null)
{
$this->log(1, "running: $command");
$pp = @popen("$command 2>&1", "r");
$pp = popen("$command 2>&1", "r");
if (!$pp) {
return $this->raiseError("failed to run `$command'");
}
@@ -402,13 +471,11 @@ class PEAR_Builder extends PEAR_Common
if ($callback && isset($olddbg)) {
$callback[0]->debug = $olddbg;
}
$exitcode = @pclose($pp);
$exitcode = is_resource($pp) ? pclose($pp) : -1;
return ($exitcode == 0);
}
// }}}
// {{{ log()
function log($level, $msg)
{
if ($this->current_callback) {
@@ -419,8 +486,4 @@ class PEAR_Builder extends PEAR_Common
}
return PEAR_Common::log($level, $msg);
}
// }}}
}
?>
}
+1559
View File
File diff suppressed because it is too large Load Diff
+68
View File
@@ -0,0 +1,68 @@
<?php
/**
* PEAR_ChannelFile_Parser for parsing channel.xml
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Parser.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
/**
* base xml parser class
*/
require_once 'PEAR/XMLParser.php';
require_once 'PEAR/ChannelFile.php';
/**
* Parser for channel.xml
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
class PEAR_ChannelFile_Parser extends PEAR_XMLParser
{
var $_config;
var $_logger;
var $_registry;
function setConfig(&$c)
{
$this->_config = &$c;
$this->_registry = &$c->getRegistry();
}
function setLogger(&$l)
{
$this->_logger = &$l;
}
function parse($data, $file)
{
if (PEAR::isError($err = parent::parse($data, $file))) {
return $err;
}
$ret = new PEAR_ChannelFile;
$ret->setConfig($this->_config);
if (isset($this->_logger)) {
$ret->setLogger($this->_logger);
}
$ret->fromArray($this->_unserializedData);
// make sure the filelist is in the easy to read format needed
$ret->flattenFilelist();
$ret->setPackagefile($file, $archive);
return $ret;
}
}
+123 -107
View File
@@ -1,25 +1,26 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Stig Bakken <ssb@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: Command.php,v 1.24 2004/05/16 15:43:30 pajoye Exp $
/**
* PEAR_Command, command pattern class
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Command.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 0.1
*/
require_once "PEAR.php";
/**
* Needed for error handling
*/
require_once 'PEAR.php';
require_once 'PEAR/Frontend.php';
require_once 'PEAR/XMLParser.php';
/**
* List of commands and what classes they are implemented in.
@@ -27,6 +28,12 @@ require_once "PEAR.php";
*/
$GLOBALS['_PEAR_Command_commandlist'] = array();
/**
* List of commands and their descriptions
* @var array command => description
*/
$GLOBALS['_PEAR_Command_commanddesc'] = array();
/**
* List of shortcuts to common commands.
* @var array shortcut => command
@@ -39,18 +46,6 @@ $GLOBALS['_PEAR_Command_shortcuts'] = array();
*/
$GLOBALS['_PEAR_Command_objects'] = array();
/**
* Which user interface class is being used.
* @var string class name
*/
$GLOBALS['_PEAR_Command_uiclass'] = 'PEAR_Frontend_CLI';
/**
* Instance of $_PEAR_Command_uiclass.
* @var object
*/
$GLOBALS['_PEAR_Command_uiobject'] = null;
/**
* PEAR command class, a simple factory class for administrative
* commands.
@@ -93,6 +88,15 @@ $GLOBALS['_PEAR_Command_uiobject'] = null;
* - DON'T USE EXIT OR DIE! Always use pear errors. From static
* classes do PEAR::raiseError(), from other classes do
* $this->raiseError().
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 0.1
*/
class PEAR_Command
{
@@ -109,7 +113,7 @@ class PEAR_Command
* @access public
* @static
*/
function factory($command, &$config)
function &factory($command, &$config)
{
if (empty($GLOBALS['_PEAR_Command_commandlist'])) {
PEAR_Command::registerCommands();
@@ -118,13 +122,35 @@ class PEAR_Command
$command = $GLOBALS['_PEAR_Command_shortcuts'][$command];
}
if (!isset($GLOBALS['_PEAR_Command_commandlist'][$command])) {
return PEAR::raiseError("unknown command `$command'");
$a = PEAR::raiseError("unknown command `$command'");
return $a;
}
$class = $GLOBALS['_PEAR_Command_commandlist'][$command];
if (!class_exists($class)) {
require_once $GLOBALS['_PEAR_Command_objects'][$class];
}
if (!class_exists($class)) {
$a = PEAR::raiseError("unknown command `$command'");
return $a;
}
$ui = PEAR_Command::getFrontendObject();
$obj = new $class($ui, $config);
return $obj;
}
// }}}
// {{{ & getObject()
function &getObject($command)
{
$class = $GLOBALS['_PEAR_Command_commandlist'][$command];
if (!class_exists($class)) {
require_once $GLOBALS['_PEAR_Command_objects'][$class];
}
if (!class_exists($class)) {
return PEAR::raiseError("unknown command `$command'");
}
$ui =& PEAR_Command::getFrontendObject();
$ui = PEAR_Command::getFrontendObject();
$config = &PEAR_Config::singleton();
$obj = &new $class($ui, $config);
return $obj;
}
@@ -135,15 +161,13 @@ class PEAR_Command
/**
* Get instance of frontend object.
*
* @return object
* @return object|PEAR_Error
* @static
*/
function &getFrontendObject()
{
if (empty($GLOBALS['_PEAR_Command_uiobject'])) {
$GLOBALS['_PEAR_Command_uiobject'] = &new $GLOBALS['_PEAR_Command_uiclass'];
}
return $GLOBALS['_PEAR_Command_uiobject'];
$a = &PEAR_Frontend::singleton();
return $a;
}
// }}}
@@ -159,59 +183,13 @@ class PEAR_Command
*/
function &setFrontendClass($uiclass)
{
if (is_object($GLOBALS['_PEAR_Command_uiobject']) &&
is_a($GLOBALS['_PEAR_Command_uiobject'], $uiclass)) {
return $GLOBALS['_PEAR_Command_uiobject'];
}
if (!class_exists($uiclass)) {
$file = str_replace('_', '/', $uiclass) . '.php';
if (PEAR_Command::isIncludeable($file)) {
include_once $file;
}
}
if (class_exists($uiclass)) {
$obj = &new $uiclass;
// quick test to see if this class implements a few of the most
// important frontend methods
if (method_exists($obj, 'userConfirm')) {
$GLOBALS['_PEAR_Command_uiobject'] = &$obj;
$GLOBALS['_PEAR_Command_uiclass'] = $uiclass;
return $obj;
} else {
$err = PEAR::raiseError("not a frontend class: $uiclass");
return $err;
}
}
$err = PEAR::raiseError("no such class: $uiclass");
return $err;
$a = &PEAR_Frontend::setFrontendClass($uiclass);
return $a;
}
// }}}
// {{{ setFrontendType()
// }}}
// {{{ isIncludeable()
/**
* @param string $path relative or absolute include path
* @return boolean
* @static
*/
function isIncludeable($path)
{
if (file_exists($path) && is_readable($path)) {
return true;
}
$ipath = explode(PATH_SEPARATOR, ini_get('include_path'));
foreach ($ipath as $include) {
$test = realpath($include . DIRECTORY_SEPARATOR . $path);
if (file_exists($test) && is_readable($test)) {
return true;
}
}
return false;
}
/**
* Set current frontend.
*
@@ -249,9 +227,13 @@ class PEAR_Command
*/
function registerCommands($merge = false, $dir = null)
{
$parser = new PEAR_XMLParser;
if ($dir === null) {
$dir = dirname(__FILE__) . '/Command';
}
if (!is_dir($dir)) {
return PEAR::raiseError("registerCommands: opendir($dir) '$dir' does not exist or is not a directory");
}
$dp = @opendir($dir);
if (empty($dp)) {
return PEAR::raiseError("registerCommands: opendir($dir) failed");
@@ -259,27 +241,58 @@ class PEAR_Command
if (!$merge) {
$GLOBALS['_PEAR_Command_commandlist'] = array();
}
while ($entry = readdir($dp)) {
if ($entry{0} == '.' || substr($entry, -4) != '.php' || $entry == 'Common.php') {
while ($file = readdir($dp)) {
if ($file{0} == '.' || substr($file, -4) != '.xml') {
continue;
}
$class = "PEAR_Command_".substr($entry, 0, -4);
$file = "$dir/$entry";
include_once $file;
$f = substr($file, 0, -4);
$class = "PEAR_Command_" . $f;
// List of commands
if (empty($GLOBALS['_PEAR_Command_objects'][$class])) {
$GLOBALS['_PEAR_Command_objects'][$class] = &new $class($ui, $config);
$GLOBALS['_PEAR_Command_objects'][$class] = "$dir/" . $f . '.php';
}
$implements = $GLOBALS['_PEAR_Command_objects'][$class]->getCommands();
$parser->parse(file_get_contents("$dir/$file"));
$implements = $parser->getData();
foreach ($implements as $command => $desc) {
if ($command == 'attribs') {
continue;
}
if (isset($GLOBALS['_PEAR_Command_commandlist'][$command])) {
return PEAR::raiseError('Command "' . $command . '" already registered in ' .
'class "' . $GLOBALS['_PEAR_Command_commandlist'][$command] . '"');
}
$GLOBALS['_PEAR_Command_commandlist'][$command] = $class;
$GLOBALS['_PEAR_Command_commanddesc'][$command] = $desc;
}
$shortcuts = $GLOBALS['_PEAR_Command_objects'][$class]->getShortcuts();
foreach ($shortcuts as $shortcut => $command) {
$GLOBALS['_PEAR_Command_shortcuts'][$shortcut] = $command;
$GLOBALS['_PEAR_Command_commanddesc'][$command] = $desc['summary'];
if (isset($desc['shortcut'])) {
$shortcut = $desc['shortcut'];
if (isset($GLOBALS['_PEAR_Command_shortcuts'][$shortcut])) {
return PEAR::raiseError('Command shortcut "' . $shortcut . '" already ' .
'registered to command "' . $command . '" in class "' .
$GLOBALS['_PEAR_Command_commandlist'][$command] . '"');
}
$GLOBALS['_PEAR_Command_shortcuts'][$shortcut] = $command;
}
if (isset($desc['options']) && $desc['options']) {
foreach ($desc['options'] as $oname => $option) {
if (isset($option['shortopt']) && strlen($option['shortopt']) > 1) {
return PEAR::raiseError('Option "' . $oname . '" short option "' .
$option['shortopt'] . '" must be ' .
'only 1 character in Command "' . $command . '" in class "' .
$class . '"');
}
}
}
}
}
ksort($GLOBALS['_PEAR_Command_shortcuts']);
ksort($GLOBALS['_PEAR_Command_commandlist']);
@closedir($dp);
return true;
}
@@ -343,11 +356,13 @@ class PEAR_Command
if (empty($GLOBALS['_PEAR_Command_commandlist'])) {
PEAR_Command::registerCommands();
}
if (isset($GLOBALS['_PEAR_Command_shortcuts'][$command])) {
$command = $GLOBALS['_PEAR_Command_shortcuts'][$command];
}
if (!isset($GLOBALS['_PEAR_Command_commandlist'][$command])) {
return null;
}
$class = $GLOBALS['_PEAR_Command_commandlist'][$command];
$obj = &$GLOBALS['_PEAR_Command_objects'][$class];
$obj = &PEAR_Command::getObject($command);
return $obj->getGetoptArgs($command, $short_args, $long_args);
}
@@ -386,13 +401,14 @@ class PEAR_Command
function getHelp($command)
{
$cmds = PEAR_Command::getCommands();
if (isset($GLOBALS['_PEAR_Command_shortcuts'][$command])) {
$command = $GLOBALS['_PEAR_Command_shortcuts'][$command];
}
if (isset($cmds[$command])) {
$class = $cmds[$command];
return $GLOBALS['_PEAR_Command_objects'][$class]->getHelp($command);
$obj = &PEAR_Command::getObject($command);
return $obj->getHelp($command);
}
return false;
}
// }}}
}
?>
}
+45 -119
View File
@@ -1,43 +1,53 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Stig Bakken <ssb@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: Auth.php,v 1.15 2004/01/08 17:33:13 sniper Exp $
require_once "PEAR/Command/Common.php";
require_once "PEAR/Remote.php";
require_once "PEAR/Config.php";
/**
* PEAR_Command_Auth (login, logout commands)
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Auth.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 0.1
* @deprecated since 1.8.0alpha1
*/
/**
* PEAR commands for managing configuration data.
*
* base class
*/
class PEAR_Command_Auth extends PEAR_Command_Common
{
// {{{ properties
require_once 'PEAR/Command/Channels.php';
/**
* PEAR commands for login/logout
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 0.1
* @deprecated since 1.8.0alpha1
*/
class PEAR_Command_Auth extends PEAR_Command_Channels
{
var $commands = array(
'login' => array(
'summary' => 'Connects and authenticates to remote server',
'summary' => 'Connects and authenticates to remote server [Deprecated in favor of channel-login]',
'shortcut' => 'li',
'function' => 'doLogin',
'options' => array(),
'doc' => '
Log in to the remote server. To use remote functions in the installer
'doc' => '<channel name>
WARNING: This function is deprecated in favor of using channel-login
Log in to a remote channel server. If <channel name> is not supplied,
the default channel is used. To use remote functions in the installer
that require any kind of privileges, you need to log in first. The
username and password you enter here will be stored in your per-user
PEAR configuration (~/.pearrc on Unix-like systems). After logging
@@ -45,11 +55,13 @@ in, your username and password will be sent along in subsequent
operations on the remote server.',
),
'logout' => array(
'summary' => 'Logs out from the remote server',
'summary' => 'Logs out from the remote server [Deprecated in favor of channel-logout]',
'shortcut' => 'lo',
'function' => 'doLogout',
'options' => array(),
'doc' => '
WARNING: This function is deprecated in favor of using channel-logout
Logs out from the remote server. This command does not actually
connect to the remote server, it only deletes the stored username and
password from your user configuration.',
@@ -57,10 +69,6 @@ password from your user configuration.',
);
// }}}
// {{{ constructor
/**
* PEAR_Command_Auth constructor.
*
@@ -68,88 +76,6 @@ password from your user configuration.',
*/
function PEAR_Command_Auth(&$ui, &$config)
{
parent::PEAR_Command_Common($ui, $config);
parent::PEAR_Command_Channels($ui, $config);
}
// }}}
// {{{ doLogin()
/**
* Execute the 'login' command.
*
* @param string $command command name
*
* @param array $options option_name => value
*
* @param array $params list of additional parameters
*
* @return bool TRUE on success, FALSE for unknown commands, or
* a PEAR error on failure
*
* @access public
*/
function doLogin($command, $options, $params)
{
$server = $this->config->get('master_server');
$remote = new PEAR_Remote($this->config);
$username = $this->config->get('username');
if (empty($username)) {
$username = @$_ENV['USER'];
}
$this->ui->outputData("Logging in to $server.", $command);
list($username, $password) = $this->ui->userDialog(
$command,
array('Username', 'Password'),
array('text', 'password'),
array($username, '')
);
$username = trim($username);
$password = trim($password);
$this->config->set('username', $username);
$this->config->set('password', $password);
$remote->expectError(401);
$ok = $remote->call('logintest');
$remote->popExpect();
if ($ok === true) {
$this->ui->outputData("Logged in.", $command);
$this->config->store();
} else {
return $this->raiseError("Login failed!");
}
}
// }}}
// {{{ doLogout()
/**
* Execute the 'logout' command.
*
* @param string $command command name
*
* @param array $options option_name => value
*
* @param array $params list of additional parameters
*
* @return bool TRUE on success, FALSE for unknown commands, or
* a PEAR error on failure
*
* @access public
*/
function doLogout($command, $options, $params)
{
$server = $this->config->get('master_server');
$this->ui->outputData("Logging out from $server.", $command);
$this->config->remove('username');
$this->config->remove('password');
$this->config->store();
}
// }}}
}
?>
}
+30
View File
@@ -0,0 +1,30 @@
<commands version="1.0">
<login>
<summary>Connects and authenticates to remote server [Deprecated in favor of channel-login]</summary>
<function>doLogin</function>
<shortcut>li</shortcut>
<options />
<doc>&lt;channel name&gt;
WARNING: This function is deprecated in favor of using channel-login
Log in to a remote channel server. If &lt;channel name&gt; is not supplied,
the default channel is used. To use remote functions in the installer
that require any kind of privileges, you need to log in first. The
username and password you enter here will be stored in your per-user
PEAR configuration (~/.pearrc on Unix-like systems). After logging
in, your username and password will be sent along in subsequent
operations on the remote server.</doc>
</login>
<logout>
<summary>Logs out from the remote server [Deprecated in favor of channel-logout]</summary>
<function>doLogout</function>
<shortcut>lo</shortcut>
<options />
<doc>
WARNING: This function is deprecated in favor of using channel-logout
Logs out from the remote server. This command does not actually
connect to the remote server, it only deletes the stored username and
password from your user configuration.</doc>
</logout>
</commands>
+34 -38
View File
@@ -1,36 +1,42 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Stig Bakken <ssb@php.net> |
// | Tomas V.V.Cox <cox@idecnet.com> |
// | |
// +----------------------------------------------------------------------+
//
// $Id: Build.php,v 1.9 2004/01/08 17:33:13 sniper Exp $
/**
* PEAR_Command_Auth (build command)
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Tomas V.V.Cox <cox@idecnet.com>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Build.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 0.1
*/
require_once "PEAR/Command/Common.php";
require_once "PEAR/Builder.php";
/**
* base class
*/
require_once 'PEAR/Command/Common.php';
/**
* PEAR commands for building extensions.
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Tomas V.V.Cox <cox@idecnet.com>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 0.1
*/
class PEAR_Command_Build extends PEAR_Command_Common
{
// {{{ properties
var $commands = array(
'build' => array(
'summary' => 'Build an Extension From C Source',
@@ -42,10 +48,6 @@ Builds one or more extensions contained in a package.'
),
);
// }}}
// {{{ constructor
/**
* PEAR_Command_Build constructor.
*
@@ -56,27 +58,23 @@ Builds one or more extensions contained in a package.'
parent::PEAR_Command_Common($ui, $config);
}
// }}}
// {{{ doBuild()
function doBuild($command, $options, $params)
{
require_once 'PEAR/Builder.php';
if (sizeof($params) < 1) {
$params[0] = 'package.xml';
}
$builder = &new PEAR_Builder($this->ui);
$this->debug = $this->config->get('verbose');
$err = $builder->build($params[0], array(&$this, 'buildCallback'));
if (PEAR::isError($err)) {
return $err;
}
return true;
}
// }}}
// {{{ buildCallback()
function buildCallback($what, $data)
{
if (($what == 'cmdoutput' && $this->debug > 1) ||
@@ -84,6 +82,4 @@ Builds one or more extensions contained in a package.'
$this->ui->outputData(rtrim($data), 'build');
}
}
// }}}
}
}
+10
View File
@@ -0,0 +1,10 @@
<commands version="1.0">
<build>
<summary>Build an Extension From C Source</summary>
<function>doBuild</function>
<shortcut>b</shortcut>
<options />
<doc>[package.xml]
Builds one or more extensions contained in a package.</doc>
</build>
</commands>
+883
View File
@@ -0,0 +1,883 @@
<?php
// /* vim: set expandtab tabstop=4 shiftwidth=4: */
/**
* PEAR_Command_Channels (list-channels, update-channels, channel-delete, channel-add,
* channel-update, channel-info, channel-alias, channel-discover commands)
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Channels.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
/**
* base class
*/
require_once 'PEAR/Command/Common.php';
define('PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS', -500);
/**
* PEAR commands for managing channels.
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
class PEAR_Command_Channels extends PEAR_Command_Common
{
var $commands = array(
'list-channels' => array(
'summary' => 'List Available Channels',
'function' => 'doList',
'shortcut' => 'lc',
'options' => array(),
'doc' => '
List all available channels for installation.
',
),
'update-channels' => array(
'summary' => 'Update the Channel List',
'function' => 'doUpdateAll',
'shortcut' => 'uc',
'options' => array(),
'doc' => '
List all installed packages in all channels.
'
),
'channel-delete' => array(
'summary' => 'Remove a Channel From the List',
'function' => 'doDelete',
'shortcut' => 'cde',
'options' => array(),
'doc' => '<channel name>
Delete a channel from the registry. You may not
remove any channel that has installed packages.
'
),
'channel-add' => array(
'summary' => 'Add a Channel',
'function' => 'doAdd',
'shortcut' => 'ca',
'options' => array(),
'doc' => '<channel.xml>
Add a private channel to the channel list. Note that all
public channels should be synced using "update-channels".
Parameter may be either a local file or remote URL to a
channel.xml.
'
),
'channel-update' => array(
'summary' => 'Update an Existing Channel',
'function' => 'doUpdate',
'shortcut' => 'cu',
'options' => array(
'force' => array(
'shortopt' => 'f',
'doc' => 'will force download of new channel.xml if an existing channel name is used',
),
'channel' => array(
'shortopt' => 'c',
'arg' => 'CHANNEL',
'doc' => 'will force download of new channel.xml if an existing channel name is used',
),
),
'doc' => '[<channel.xml>|<channel name>]
Update a channel in the channel list directly. Note that all
public channels can be synced using "update-channels".
Parameter may be a local or remote channel.xml, or the name of
an existing channel.
'
),
'channel-info' => array(
'summary' => 'Retrieve Information on a Channel',
'function' => 'doInfo',
'shortcut' => 'ci',
'options' => array(),
'doc' => '<package>
List the files in an installed package.
'
),
'channel-alias' => array(
'summary' => 'Specify an alias to a channel name',
'function' => 'doAlias',
'shortcut' => 'cha',
'options' => array(),
'doc' => '<channel> <alias>
Specify a specific alias to use for a channel name.
The alias may not be an existing channel name or
alias.
'
),
'channel-discover' => array(
'summary' => 'Initialize a Channel from its server',
'function' => 'doDiscover',
'shortcut' => 'di',
'options' => array(),
'doc' => '[<channel.xml>|<channel name>]
Initialize a channel from its server and create a local channel.xml.
If <channel name> is in the format "<username>:<password>@<channel>" then
<username> and <password> will be set as the login username/password for
<channel>. Use caution when passing the username/password in this way, as
it may allow other users on your computer to briefly view your username/
password via the system\'s process list.
'
),
'channel-login' => array(
'summary' => 'Connects and authenticates to remote channel server',
'shortcut' => 'cli',
'function' => 'doLogin',
'options' => array(),
'doc' => '<channel name>
Log in to a remote channel server. If <channel name> is not supplied,
the default channel is used. To use remote functions in the installer
that require any kind of privileges, you need to log in first. The
username and password you enter here will be stored in your per-user
PEAR configuration (~/.pearrc on Unix-like systems). After logging
in, your username and password will be sent along in subsequent
operations on the remote server.',
),
'channel-logout' => array(
'summary' => 'Logs out from the remote channel server',
'shortcut' => 'clo',
'function' => 'doLogout',
'options' => array(),
'doc' => '<channel name>
Logs out from a remote channel server. If <channel name> is not supplied,
the default channel is used. This command does not actually connect to the
remote server, it only deletes the stored username and password from your user
configuration.',
),
);
/**
* PEAR_Command_Registry constructor.
*
* @access public
*/
function PEAR_Command_Channels(&$ui, &$config)
{
parent::PEAR_Command_Common($ui, $config);
}
function _sortChannels($a, $b)
{
return strnatcasecmp($a->getName(), $b->getName());
}
function doList($command, $options, $params)
{
$reg = &$this->config->getRegistry();
$registered = $reg->getChannels();
usort($registered, array(&$this, '_sortchannels'));
$i = $j = 0;
$data = array(
'caption' => 'Registered Channels:',
'border' => true,
'headline' => array('Channel', 'Alias', 'Summary')
);
foreach ($registered as $channel) {
$data['data'][] = array($channel->getName(),
$channel->getAlias(),
$channel->getSummary());
}
if (count($registered) === 0) {
$data = '(no registered channels)';
}
$this->ui->outputData($data, $command);
return true;
}
function doUpdateAll($command, $options, $params)
{
$reg = &$this->config->getRegistry();
$channels = $reg->getChannels();
$success = true;
foreach ($channels as $channel) {
if ($channel->getName() != '__uri') {
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$err = $this->doUpdate('channel-update',
$options,
array($channel->getName()));
if (PEAR::isError($err)) {
$this->ui->outputData($err->getMessage(), $command);
$success = false;
} else {
$success &= $err;
}
}
}
return $success;
}
function doInfo($command, $options, $params)
{
if (count($params) !== 1) {
return $this->raiseError("No channel specified");
}
$reg = &$this->config->getRegistry();
$channel = strtolower($params[0]);
if ($reg->channelExists($channel)) {
$chan = $reg->getChannel($channel);
if (PEAR::isError($chan)) {
return $this->raiseError($chan);
}
} else {
if (strpos($channel, '://')) {
$downloader = &$this->getDownloader();
$tmpdir = $this->config->get('temp_dir');
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$loc = $downloader->downloadHttp($channel, $this->ui, $tmpdir);
PEAR::staticPopErrorHandling();
if (PEAR::isError($loc)) {
return $this->raiseError('Cannot open "' . $channel .
'" (' . $loc->getMessage() . ')');
} else {
$contents = implode('', file($loc));
}
} else {
if (!file_exists($params[0])) {
return $this->raiseError('Unknown channel "' . $channel . '"');
}
$fp = fopen($params[0], 'r');
if (!$fp) {
return $this->raiseError('Cannot open "' . $params[0] . '"');
}
$contents = '';
while (!feof($fp)) {
$contents .= fread($fp, 1024);
}
fclose($fp);
}
if (!class_exists('PEAR_ChannelFile')) {
require_once 'PEAR/ChannelFile.php';
}
$chan = new PEAR_ChannelFile;
$chan->fromXmlString($contents);
$chan->validate();
if ($errs = $chan->getErrors(true)) {
foreach ($errs as $err) {
$this->ui->outputData($err['level'] . ': ' . $err['message']);
}
return $this->raiseError('Channel file "' . $params[0] . '" is not valid');
}
}
if (!$chan) {
return $this->raiseError('Serious error: Channel "' . $params[0] .
'" has a corrupted registry entry');
}
$channel = $chan->getName();
$caption = 'Channel ' . $channel . ' Information:';
$data1 = array(
'caption' => $caption,
'border' => true);
$data1['data']['server'] = array('Name and Server', $chan->getName());
if ($chan->getAlias() != $chan->getName()) {
$data1['data']['alias'] = array('Alias', $chan->getAlias());
}
$data1['data']['summary'] = array('Summary', $chan->getSummary());
$validate = $chan->getValidationPackage();
$data1['data']['vpackage'] = array('Validation Package Name', $validate['_content']);
$data1['data']['vpackageversion'] =
array('Validation Package Version', $validate['attribs']['version']);
$d = array();
$d['main'] = $data1;
$data['data'] = array();
$data['caption'] = 'Server Capabilities';
$data['headline'] = array('Type', 'Version/REST type', 'Function Name/REST base');
if ($chan->supportsREST()) {
if ($chan->supportsREST()) {
$funcs = $chan->getFunctions('rest');
if (!isset($funcs[0])) {
$funcs = array($funcs);
}
foreach ($funcs as $protocol) {
$data['data'][] = array('rest', $protocol['attribs']['type'],
$protocol['_content']);
}
}
} else {
$data['data'][] = array('No supported protocols');
}
$d['protocols'] = $data;
$data['data'] = array();
$mirrors = $chan->getMirrors();
if ($mirrors) {
$data['caption'] = 'Channel ' . $channel . ' Mirrors:';
unset($data['headline']);
foreach ($mirrors as $mirror) {
$data['data'][] = array($mirror['attribs']['host']);
$d['mirrors'] = $data;
}
foreach ($mirrors as $i => $mirror) {
$data['data'] = array();
$data['caption'] = 'Mirror ' . $mirror['attribs']['host'] . ' Capabilities';
$data['headline'] = array('Type', 'Version/REST type', 'Function Name/REST base');
if ($chan->supportsREST($mirror['attribs']['host'])) {
if ($chan->supportsREST($mirror['attribs']['host'])) {
$funcs = $chan->getFunctions('rest', $mirror['attribs']['host']);
if (!isset($funcs[0])) {
$funcs = array($funcs);
}
foreach ($funcs as $protocol) {
$data['data'][] = array('rest', $protocol['attribs']['type'],
$protocol['_content']);
}
}
} else {
$data['data'][] = array('No supported protocols');
}
$d['mirrorprotocols' . $i] = $data;
}
}
$this->ui->outputData($d, 'channel-info');
}
// }}}
function doDelete($command, $options, $params)
{
if (count($params) !== 1) {
return $this->raiseError('channel-delete: no channel specified');
}
$reg = &$this->config->getRegistry();
if (!$reg->channelExists($params[0])) {
return $this->raiseError('channel-delete: channel "' . $params[0] . '" does not exist');
}
$channel = $reg->channelName($params[0]);
if ($channel == 'pear.php.net') {
return $this->raiseError('Cannot delete the pear.php.net channel');
}
if ($channel == 'pecl.php.net') {
return $this->raiseError('Cannot delete the pecl.php.net channel');
}
if ($channel == 'doc.php.net') {
return $this->raiseError('Cannot delete the doc.php.net channel');
}
if ($channel == '__uri') {
return $this->raiseError('Cannot delete the __uri pseudo-channel');
}
if (PEAR::isError($err = $reg->listPackages($channel))) {
return $err;
}
if (count($err)) {
return $this->raiseError('Channel "' . $channel .
'" has installed packages, cannot delete');
}
if (!$reg->deleteChannel($channel)) {
return $this->raiseError('Channel "' . $channel . '" deletion failed');
} else {
$this->config->deleteChannel($channel);
$this->ui->outputData('Channel "' . $channel . '" deleted', $command);
}
}
function doAdd($command, $options, $params)
{
if (count($params) !== 1) {
return $this->raiseError('channel-add: no channel file specified');
}
if (strpos($params[0], '://')) {
$downloader = &$this->getDownloader();
$tmpdir = $this->config->get('temp_dir');
if (!file_exists($tmpdir)) {
require_once 'System.php';
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$err = System::mkdir(array('-p', $tmpdir));
PEAR::staticPopErrorHandling();
if (PEAR::isError($err)) {
return $this->raiseError('channel-add: temp_dir does not exist: "' .
$tmpdir .
'" - You can change this location with "pear config-set temp_dir"');
}
}
if (!is_writable($tmpdir)) {
return $this->raiseError('channel-add: temp_dir is not writable: "' .
$tmpdir .
'" - You can change this location with "pear config-set temp_dir"');
}
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$loc = $downloader->downloadHttp($params[0], $this->ui, $tmpdir, null, false);
PEAR::staticPopErrorHandling();
if (PEAR::isError($loc)) {
return $this->raiseError('channel-add: Cannot open "' . $params[0] .
'" (' . $loc->getMessage() . ')');
}
list($loc, $lastmodified) = $loc;
$contents = implode('', file($loc));
} else {
$lastmodified = $fp = false;
if (file_exists($params[0])) {
$fp = fopen($params[0], 'r');
}
if (!$fp) {
return $this->raiseError('channel-add: cannot open "' . $params[0] . '"');
}
$contents = '';
while (!feof($fp)) {
$contents .= fread($fp, 1024);
}
fclose($fp);
}
if (!class_exists('PEAR_ChannelFile')) {
require_once 'PEAR/ChannelFile.php';
}
$channel = new PEAR_ChannelFile;
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$result = $channel->fromXmlString($contents);
PEAR::staticPopErrorHandling();
if (!$result) {
$exit = false;
if (count($errors = $channel->getErrors(true))) {
foreach ($errors as $error) {
$this->ui->outputData(ucfirst($error['level'] . ': ' . $error['message']));
if (!$exit) {
$exit = $error['level'] == 'error' ? true : false;
}
}
if ($exit) {
return $this->raiseError('channel-add: invalid channel.xml file');
}
}
}
$reg = &$this->config->getRegistry();
if ($reg->channelExists($channel->getName())) {
return $this->raiseError('channel-add: Channel "' . $channel->getName() .
'" exists, use channel-update to update entry', PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS);
}
$ret = $reg->addChannel($channel, $lastmodified);
if (PEAR::isError($ret)) {
return $ret;
}
if (!$ret) {
return $this->raiseError('channel-add: adding Channel "' . $channel->getName() .
'" to registry failed');
}
$this->config->setChannels($reg->listChannels());
$this->config->writeConfigFile();
$this->ui->outputData('Adding Channel "' . $channel->getName() . '" succeeded', $command);
}
function doUpdate($command, $options, $params)
{
if (count($params) !== 1) {
return $this->raiseError("No channel file specified");
}
$tmpdir = $this->config->get('temp_dir');
if (!file_exists($tmpdir)) {
require_once 'System.php';
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$err = System::mkdir(array('-p', $tmpdir));
PEAR::staticPopErrorHandling();
if (PEAR::isError($err)) {
return $this->raiseError('channel-add: temp_dir does not exist: "' .
$tmpdir .
'" - You can change this location with "pear config-set temp_dir"');
}
}
if (!is_writable($tmpdir)) {
return $this->raiseError('channel-add: temp_dir is not writable: "' .
$tmpdir .
'" - You can change this location with "pear config-set temp_dir"');
}
$reg = &$this->config->getRegistry();
$lastmodified = false;
if ((!file_exists($params[0]) || is_dir($params[0]))
&& $reg->channelExists(strtolower($params[0]))) {
$c = $reg->getChannel(strtolower($params[0]));
if (PEAR::isError($c)) {
return $this->raiseError($c);
}
$this->ui->outputData("Updating channel \"$params[0]\"", $command);
$dl = &$this->getDownloader(array());
// if force is specified, use a timestamp of "1" to force retrieval
$lastmodified = isset($options['force']) ? false : $c->lastModified();
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$contents = $dl->downloadHttp('http://' . $c->getName() . '/channel.xml',
$this->ui, $tmpdir, null, $lastmodified);
PEAR::staticPopErrorHandling();
if (PEAR::isError($contents)) {
// Attempt to fall back to https
$this->ui->outputData("Channel \"$params[0]\" is not responding over http://, failed with message: " . $contents->getMessage());
$this->ui->outputData("Trying channel \"$params[0]\" over https:// instead");
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$contents = $dl->downloadHttp('https://' . $c->getName() . '/channel.xml',
$this->ui, $tmpdir, null, $lastmodified);
PEAR::staticPopErrorHandling();
if (PEAR::isError($contents)) {
return $this->raiseError('Cannot retrieve channel.xml for channel "' .
$c->getName() . '" (' . $contents->getMessage() . ')');
}
}
list($contents, $lastmodified) = $contents;
if (!$contents) {
$this->ui->outputData("Channel \"$params[0]\" is up to date");
return;
}
$contents = implode('', file($contents));
if (!class_exists('PEAR_ChannelFile')) {
require_once 'PEAR/ChannelFile.php';
}
$channel = new PEAR_ChannelFile;
$channel->fromXmlString($contents);
if (!$channel->getErrors()) {
// security check: is the downloaded file for the channel we got it from?
if (strtolower($channel->getName()) != strtolower($c->getName())) {
if (!isset($options['force'])) {
return $this->raiseError('ERROR: downloaded channel definition file' .
' for channel "' . $channel->getName() . '" from channel "' .
strtolower($c->getName()) . '"');
}
$this->ui->log(0, 'WARNING: downloaded channel definition file' .
' for channel "' . $channel->getName() . '" from channel "' .
strtolower($c->getName()) . '"');
}
}
} else {
if (strpos($params[0], '://')) {
$dl = &$this->getDownloader();
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$loc = $dl->downloadHttp($params[0],
$this->ui, $tmpdir, null, $lastmodified);
PEAR::staticPopErrorHandling();
if (PEAR::isError($loc)) {
return $this->raiseError("Cannot open " . $params[0] .
' (' . $loc->getMessage() . ')');
}
list($loc, $lastmodified) = $loc;
$contents = implode('', file($loc));
} else {
$fp = false;
if (file_exists($params[0])) {
$fp = fopen($params[0], 'r');
}
if (!$fp) {
return $this->raiseError("Cannot open " . $params[0]);
}
$contents = '';
while (!feof($fp)) {
$contents .= fread($fp, 1024);
}
fclose($fp);
}
if (!class_exists('PEAR_ChannelFile')) {
require_once 'PEAR/ChannelFile.php';
}
$channel = new PEAR_ChannelFile;
$channel->fromXmlString($contents);
}
$exit = false;
if (count($errors = $channel->getErrors(true))) {
foreach ($errors as $error) {
$this->ui->outputData(ucfirst($error['level'] . ': ' . $error['message']));
if (!$exit) {
$exit = $error['level'] == 'error' ? true : false;
}
}
if ($exit) {
return $this->raiseError('Invalid channel.xml file');
}
}
if (!$reg->channelExists($channel->getName())) {
return $this->raiseError('Error: Channel "' . $channel->getName() .
'" does not exist, use channel-add to add an entry');
}
$ret = $reg->updateChannel($channel, $lastmodified);
if (PEAR::isError($ret)) {
return $ret;
}
if (!$ret) {
return $this->raiseError('Updating Channel "' . $channel->getName() .
'" in registry failed');
}
$this->config->setChannels($reg->listChannels());
$this->config->writeConfigFile();
$this->ui->outputData('Update of Channel "' . $channel->getName() . '" succeeded');
}
function &getDownloader()
{
if (!class_exists('PEAR_Downloader')) {
require_once 'PEAR/Downloader.php';
}
$a = new PEAR_Downloader($this->ui, array(), $this->config);
return $a;
}
function doAlias($command, $options, $params)
{
if (count($params) === 1) {
return $this->raiseError('No channel alias specified');
}
if (count($params) !== 2 || (!empty($params[1]) && $params[1]{0} == '-')) {
return $this->raiseError(
'Invalid format, correct is: channel-alias channel alias');
}
$reg = &$this->config->getRegistry();
if (!$reg->channelExists($params[0], true)) {
$extra = '';
if ($reg->isAlias($params[0])) {
$extra = ' (use "channel-alias ' . $reg->channelName($params[0]) . ' ' .
strtolower($params[1]) . '")';
}
return $this->raiseError('"' . $params[0] . '" is not a valid channel' . $extra);
}
if ($reg->isAlias($params[1])) {
return $this->raiseError('Channel "' . $reg->channelName($params[1]) . '" is ' .
'already aliased to "' . strtolower($params[1]) . '", cannot re-alias');
}
$chan = &$reg->getChannel($params[0]);
if (PEAR::isError($chan)) {
return $this->raiseError('Corrupt registry? Error retrieving channel "' . $params[0] .
'" information (' . $chan->getMessage() . ')');
}
// make it a local alias
if (!$chan->setAlias(strtolower($params[1]), true)) {
return $this->raiseError('Alias "' . strtolower($params[1]) .
'" is not a valid channel alias');
}
$reg->updateChannel($chan);
$this->ui->outputData('Channel "' . $chan->getName() . '" aliased successfully to "' .
strtolower($params[1]) . '"');
}
/**
* The channel-discover command
*
* @param string $command command name
* @param array $options option_name => value
* @param array $params list of additional parameters.
* $params[0] should contain a string with either:
* - <channel name> or
* - <username>:<password>@<channel name>
* @return null|PEAR_Error
*/
function doDiscover($command, $options, $params)
{
if (count($params) !== 1) {
return $this->raiseError("No channel server specified");
}
// Look for the possible input format "<username>:<password>@<channel>"
if (preg_match('/^(.+):(.+)@(.+)\\z/', $params[0], $matches)) {
$username = $matches[1];
$password = $matches[2];
$channel = $matches[3];
} else {
$channel = $params[0];
}
$reg = &$this->config->getRegistry();
if ($reg->channelExists($channel)) {
if (!$reg->isAlias($channel)) {
return $this->raiseError("Channel \"$channel\" is already initialized", PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS);
}
return $this->raiseError("A channel alias named \"$channel\" " .
'already exists, aliasing channel "' . $reg->channelName($channel)
. '"');
}
$this->pushErrorHandling(PEAR_ERROR_RETURN);
$err = $this->doAdd($command, $options, array('http://' . $channel . '/channel.xml'));
$this->popErrorHandling();
if (PEAR::isError($err)) {
if ($err->getCode() === PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS) {
return $this->raiseError("Discovery of channel \"$channel\" failed (" .
$err->getMessage() . ')');
}
// Attempt fetch via https
$this->ui->outputData("Discovering channel $channel over http:// failed with message: " . $err->getMessage());
$this->ui->outputData("Trying to discover channel $channel over https:// instead");
$this->pushErrorHandling(PEAR_ERROR_RETURN);
$err = $this->doAdd($command, $options, array('https://' . $channel . '/channel.xml'));
$this->popErrorHandling();
if (PEAR::isError($err)) {
return $this->raiseError("Discovery of channel \"$channel\" failed (" .
$err->getMessage() . ')');
}
}
// Store username/password if they were given
// Arguably we should do a logintest on the channel here, but since
// that's awkward on a REST-based channel (even "pear login" doesn't
// do it for those), and XML-RPC is deprecated, it's fairly pointless.
if (isset($username)) {
$this->config->set('username', $username, 'user', $channel);
$this->config->set('password', $password, 'user', $channel);
$this->config->store();
$this->ui->outputData("Stored login for channel \"$channel\" using username \"$username\"", $command);
}
$this->ui->outputData("Discovery of channel \"$channel\" succeeded", $command);
}
/**
* Execute the 'login' command.
*
* @param string $command command name
* @param array $options option_name => value
* @param array $params list of additional parameters
*
* @return bool TRUE on success or
* a PEAR error on failure
*
* @access public
*/
function doLogin($command, $options, $params)
{
$reg = &$this->config->getRegistry();
// If a parameter is supplied, use that as the channel to log in to
$channel = isset($params[0]) ? $params[0] : $this->config->get('default_channel');
$chan = $reg->getChannel($channel);
if (PEAR::isError($chan)) {
return $this->raiseError($chan);
}
$server = $this->config->get('preferred_mirror', null, $channel);
$username = $this->config->get('username', null, $channel);
if (empty($username)) {
$username = isset($_ENV['USER']) ? $_ENV['USER'] : null;
}
$this->ui->outputData("Logging in to $server.", $command);
list($username, $password) = $this->ui->userDialog(
$command,
array('Username', 'Password'),
array('text', 'password'),
array($username, '')
);
$username = trim($username);
$password = trim($password);
$ourfile = $this->config->getConfFile('user');
if (!$ourfile) {
$ourfile = $this->config->getConfFile('system');
}
$this->config->set('username', $username, 'user', $channel);
$this->config->set('password', $password, 'user', $channel);
if ($chan->supportsREST()) {
$ok = true;
}
if ($ok !== true) {
return $this->raiseError('Login failed!');
}
$this->ui->outputData("Logged in.", $command);
// avoid changing any temporary settings changed with -d
$ourconfig = new PEAR_Config($ourfile, $ourfile);
$ourconfig->set('username', $username, 'user', $channel);
$ourconfig->set('password', $password, 'user', $channel);
$ourconfig->store();
return true;
}
/**
* Execute the 'logout' command.
*
* @param string $command command name
* @param array $options option_name => value
* @param array $params list of additional parameters
*
* @return bool TRUE on success or
* a PEAR error on failure
*
* @access public
*/
function doLogout($command, $options, $params)
{
$reg = &$this->config->getRegistry();
// If a parameter is supplied, use that as the channel to log in to
$channel = isset($params[0]) ? $params[0] : $this->config->get('default_channel');
$chan = $reg->getChannel($channel);
if (PEAR::isError($chan)) {
return $this->raiseError($chan);
}
$server = $this->config->get('preferred_mirror', null, $channel);
$this->ui->outputData("Logging out from $server.", $command);
$this->config->remove('username', 'user', $channel);
$this->config->remove('password', 'user', $channel);
$this->config->store();
return true;
}
}
+123
View File
@@ -0,0 +1,123 @@
<commands version="1.0">
<list-channels>
<summary>List Available Channels</summary>
<function>doList</function>
<shortcut>lc</shortcut>
<options />
<doc>
List all available channels for installation.
</doc>
</list-channels>
<update-channels>
<summary>Update the Channel List</summary>
<function>doUpdateAll</function>
<shortcut>uc</shortcut>
<options />
<doc>
List all installed packages in all channels.
</doc>
</update-channels>
<channel-delete>
<summary>Remove a Channel From the List</summary>
<function>doDelete</function>
<shortcut>cde</shortcut>
<options />
<doc>&lt;channel name&gt;
Delete a channel from the registry. You may not
remove any channel that has installed packages.
</doc>
</channel-delete>
<channel-add>
<summary>Add a Channel</summary>
<function>doAdd</function>
<shortcut>ca</shortcut>
<options />
<doc>&lt;channel.xml&gt;
Add a private channel to the channel list. Note that all
public channels should be synced using &quot;update-channels&quot;.
Parameter may be either a local file or remote URL to a
channel.xml.
</doc>
</channel-add>
<channel-update>
<summary>Update an Existing Channel</summary>
<function>doUpdate</function>
<shortcut>cu</shortcut>
<options>
<force>
<shortopt>f</shortopt>
<doc>will force download of new channel.xml if an existing channel name is used</doc>
</force>
<channel>
<shortopt>c</shortopt>
<doc>will force download of new channel.xml if an existing channel name is used</doc>
<arg>CHANNEL</arg>
</channel>
</options>
<doc>[&lt;channel.xml&gt;|&lt;channel name&gt;]
Update a channel in the channel list directly. Note that all
public channels can be synced using &quot;update-channels&quot;.
Parameter may be a local or remote channel.xml, or the name of
an existing channel.
</doc>
</channel-update>
<channel-info>
<summary>Retrieve Information on a Channel</summary>
<function>doInfo</function>
<shortcut>ci</shortcut>
<options />
<doc>&lt;package&gt;
List the files in an installed package.
</doc>
</channel-info>
<channel-alias>
<summary>Specify an alias to a channel name</summary>
<function>doAlias</function>
<shortcut>cha</shortcut>
<options />
<doc>&lt;channel&gt; &lt;alias&gt;
Specify a specific alias to use for a channel name.
The alias may not be an existing channel name or
alias.
</doc>
</channel-alias>
<channel-discover>
<summary>Initialize a Channel from its server</summary>
<function>doDiscover</function>
<shortcut>di</shortcut>
<options />
<doc>[&lt;channel.xml&gt;|&lt;channel name&gt;]
Initialize a channel from its server and create a local channel.xml.
If &lt;channel name&gt; is in the format &quot;&lt;username&gt;:&lt;password&gt;@&lt;channel&gt;&quot; then
&lt;username&gt; and &lt;password&gt; will be set as the login username/password for
&lt;channel&gt;. Use caution when passing the username/password in this way, as
it may allow other users on your computer to briefly view your username/
password via the system&#039;s process list.
</doc>
</channel-discover>
<channel-login>
<summary>Connects and authenticates to remote channel server</summary>
<function>doLogin</function>
<shortcut>cli</shortcut>
<options />
<doc>&lt;channel name&gt;
Log in to a remote channel server. If &lt;channel name&gt; is not supplied,
the default channel is used. To use remote functions in the installer
that require any kind of privileges, you need to log in first. The
username and password you enter here will be stored in your per-user
PEAR configuration (~/.pearrc on Unix-like systems). After logging
in, your username and password will be sent along in subsequent
operations on the remote server.</doc>
</channel-login>
<channel-logout>
<summary>Logs out from the remote channel server</summary>
<function>doLogout</function>
<shortcut>clo</shortcut>
<options />
<doc>&lt;channel name&gt;
Logs out from a remote channel server. If &lt;channel name&gt; is not supplied,
the default channel is used. This command does not actually connect to the
remote server, it only deletes the stored username and password from your user
configuration.</doc>
</channel-logout>
</commands>
+95 -71
View File
@@ -1,36 +1,52 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Stig Sæther Bakken <ssb@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: Common.php,v 1.24 2004/01/08 17:33:13 sniper Exp $
/**
* PEAR_Command_Common base class
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Common.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 0.1
*/
require_once "PEAR.php";
/**
* base class
*/
require_once 'PEAR.php';
/**
* PEAR commands base class
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 0.1
*/
class PEAR_Command_Common extends PEAR
{
// {{{ properties
/**
* PEAR_Config object used to pass user system and configuration
* on when executing commands
*
* @var object
* @var PEAR_Config
*/
var $config;
/**
* @var PEAR_Registry
* @access protected
*/
var $_registry;
/**
* User Interface object, for all interaction with the user.
@@ -50,7 +66,7 @@ class PEAR_Command_Common extends PEAR
var $_deps_type_trans = array(
'pkg' => 'package',
'extension' => 'extension',
'ext' => 'extension',
'php' => 'PHP',
'prog' => 'external program',
'ldlib' => 'external library for linking',
@@ -60,9 +76,6 @@ class PEAR_Command_Common extends PEAR
'sapi' => 'SAPI backend'
);
// }}}
// {{{ constructor
/**
* PEAR_Command_Common constructor.
*
@@ -75,10 +88,6 @@ class PEAR_Command_Common extends PEAR
$this->ui = &$ui;
}
// }}}
// {{{ getCommands()
/**
* Return a list of all the commands defined by this class.
* @return array list of commands
@@ -90,12 +99,10 @@ class PEAR_Command_Common extends PEAR
foreach (array_keys($this->commands) as $command) {
$ret[$command] = $this->commands[$command]['summary'];
}
return $ret;
}
// }}}
// {{{ getShortcuts()
/**
* Return a list of all the command shortcuts defined by this class.
* @return array shortcut => command
@@ -109,28 +116,34 @@ class PEAR_Command_Common extends PEAR
$ret[$this->commands[$command]['shortcut']] = $command;
}
}
return $ret;
}
// }}}
// {{{ getOptions()
function getOptions($command)
{
return @$this->commands[$command]['options'];
}
$shortcuts = $this->getShortcuts();
if (isset($shortcuts[$command])) {
$command = $shortcuts[$command];
}
// }}}
// {{{ getGetoptArgs()
if (isset($this->commands[$command]) &&
isset($this->commands[$command]['options'])) {
return $this->commands[$command]['options'];
}
return null;
}
function getGetoptArgs($command, &$short_args, &$long_args)
{
$short_args = "";
$short_args = '';
$long_args = array();
if (empty($this->commands[$command])) {
if (empty($this->commands[$command]) || empty($this->commands[$command]['options'])) {
return;
}
reset($this->commands[$command]);
reset($this->commands[$command]['options']);
while (list($option, $info) = each($this->commands[$command]['options'])) {
$larg = $sarg = '';
if (isset($info['arg'])) {
@@ -144,15 +157,15 @@ class PEAR_Command_Common extends PEAR
$arg = $info['arg'];
}
}
if (isset($info['shortopt'])) {
$short_args .= $info['shortopt'] . $sarg;
}
$long_args[] = $option . $larg;
}
}
// }}}
// {{{ getHelp()
/**
* Returns the help message for the given command
*
@@ -164,29 +177,38 @@ class PEAR_Command_Common extends PEAR
function getHelp($command)
{
$config = &PEAR_Config::singleton();
$help = @$this->commands[$command]['doc'];
if (!isset($this->commands[$command])) {
return "No such command \"$command\"";
}
$help = null;
if (isset($this->commands[$command]['doc'])) {
$help = $this->commands[$command]['doc'];
}
if (empty($help)) {
// XXX (cox) Fallback to summary if there is no doc (show both?)
if (!$help = @$this->commands[$command]['summary']) {
if (!isset($this->commands[$command]['summary'])) {
return "No help for command \"$command\"";
}
$help = $this->commands[$command]['summary'];
}
if (preg_match_all('/{config\s+([^\}]+)}/e', $help, $matches)) {
foreach($matches[0] as $k => $v) {
$help = preg_replace("/$v/", $config->get($matches[1][$k]), $help);
}
}
return array($help, $this->getHelpArgs($command));
}
// }}}
// {{{ getHelpArgs()
/**
* Returns the help for the accepted arguments of a command
*
* @param string $command
* @return string The help string
*/
* Returns the help for the accepted arguments of a command
*
* @param string $command
* @return string The help string
*/
function getHelpArgs($command)
{
if (isset($this->commands[$command]['options']) &&
@@ -195,7 +217,7 @@ class PEAR_Command_Common extends PEAR
$help = "Options:\n";
foreach ($this->commands[$command]['options'] as $k => $v) {
if (isset($v['arg'])) {
if ($v['arg']{0} == '(') {
if ($v['arg'][0] == '(') {
$arg = substr($v['arg'], 1, -1);
$sapp = " [$arg]";
$lapp = "[=$arg]";
@@ -206,44 +228,46 @@ class PEAR_Command_Common extends PEAR
} else {
$sapp = $lapp = "";
}
if (isset($v['shortopt'])) {
$s = $v['shortopt'];
@$help .= " -$s$sapp, --$k$lapp\n";
$help .= " -$s$sapp, --$k$lapp\n";
} else {
@$help .= " --$k$lapp\n";
$help .= " --$k$lapp\n";
}
$p = " ";
$doc = rtrim(str_replace("\n", "\n$p", $v['doc']));
$help .= " $doc\n";
}
return $help;
}
return null;
}
// }}}
// {{{ run()
function run($command, $options, $params)
{
$func = @$this->commands[$command]['function'];
if (empty($func)) {
if (empty($this->commands[$command]['function'])) {
// look for shortcuts
foreach (array_keys($this->commands) as $cmd) {
if (@$this->commands[$cmd]['shortcut'] == $command) {
$command = $cmd;
$func = @$this->commands[$command]['function'];
if (empty($func)) {
if (isset($this->commands[$cmd]['shortcut']) && $this->commands[$cmd]['shortcut'] == $command) {
if (empty($this->commands[$cmd]['function'])) {
return $this->raiseError("unknown command `$command'");
} else {
$func = $this->commands[$cmd]['function'];
}
$command = $cmd;
//$command = $this->commands[$cmd]['function'];
break;
}
}
} else {
$func = $this->commands[$command]['function'];
}
return $this->$func($command, $options, $params);
}
// }}}
}
?>
}
+266 -77
View File
@@ -1,74 +1,101 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Stig Bakken <ssb@php.net> |
// | Tomas V.V.Cox <cox@idecnet.com> |
// | |
// +----------------------------------------------------------------------+
//
// $Id: Config.php,v 1.27 2004/06/15 16:48:49 pajoye Exp $
/**
* PEAR_Command_Config (config-show, config-get, config-set, config-help, config-create commands)
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Config.php 313024 2011-07-06 19:51:24Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 0.1
*/
require_once "PEAR/Command/Common.php";
require_once "PEAR/Config.php";
/**
* base class
*/
require_once 'PEAR/Command/Common.php';
/**
* PEAR commands for managing configuration data.
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 0.1
*/
class PEAR_Command_Config extends PEAR_Command_Common
{
// {{{ properties
var $commands = array(
'config-show' => array(
'summary' => 'Show All Settings',
'function' => 'doConfigShow',
'shortcut' => 'csh',
'options' => array(),
'doc' => '
'options' => array(
'channel' => array(
'shortopt' => 'c',
'doc' => 'show configuration variables for another channel',
'arg' => 'CHAN',
),
),
'doc' => '[layer]
Displays all configuration values. An optional argument
may be used to tell which configuration layer to display. Valid
configuration layers are "user", "system" and "default".
configuration layers are "user", "system" and "default". To display
configurations for different channels, set the default_channel
configuration variable and run config-show again.
',
),
'config-get' => array(
'summary' => 'Show One Setting',
'function' => 'doConfigGet',
'shortcut' => 'cg',
'options' => array(),
'options' => array(
'channel' => array(
'shortopt' => 'c',
'doc' => 'show configuration variables for another channel',
'arg' => 'CHAN',
),
),
'doc' => '<parameter> [layer]
Displays the value of one configuration parameter. The
first argument is the name of the parameter, an optional second argument
may be used to tell which configuration layer to look in. Valid configuration
layers are "user", "system" and "default". If no layer is specified, a value
will be picked from the first layer that defines the parameter, in the order
just specified.
just specified. The configuration value will be retrieved for the channel
specified by the default_channel configuration variable.
',
),
'config-set' => array(
'summary' => 'Change Setting',
'function' => 'doConfigSet',
'shortcut' => 'cs',
'options' => array(),
'options' => array(
'channel' => array(
'shortopt' => 'c',
'doc' => 'show configuration variables for another channel',
'arg' => 'CHAN',
),
),
'doc' => '<parameter> <value> [layer]
Sets the value of one configuration parameter. The first argument is
the name of the parameter, the second argument is the new value. Some
parameters are subject to validation, and the command will fail with
an error message if the new value does not make sense. An optional
third argument may be used to specify in which layer to set the
configuration parameter. The default layer is "user".
configuration parameter. The default layer is "user". The
configuration value will be set for the current channel, which
is controlled by the default_channel configuration variable.
',
),
'config-help' => array(
@@ -81,11 +108,26 @@ Displays help for a configuration parameter. Without arguments it
displays help for all configuration parameters.
',
),
'config-create' => array(
'summary' => 'Create a Default configuration file',
'function' => 'doConfigCreate',
'shortcut' => 'coc',
'options' => array(
'windows' => array(
'shortopt' => 'w',
'doc' => 'create a config file for a windows install',
),
),
'doc' => '<root path> <filename>
Create a default configuration file with all directory configuration
variables set to subdirectories of <root path>, and save it as <filename>.
This is useful especially for creating a configuration file for a remote
PEAR installation (using the --remoteconfig option of install, upgrade,
and uninstall).
',
),
);
// }}}
// {{{ constructor
/**
* PEAR_Command_Config constructor.
*
@@ -96,94 +138,154 @@ displays help for all configuration parameters.
parent::PEAR_Command_Common($ui, $config);
}
// }}}
// {{{ doConfigShow()
function doConfigShow($command, $options, $params)
{
// $params[0] -> the layer
if ($error = $this->_checkLayer(@$params[0])) {
return $this->raiseError($error);
$layer = null;
if (is_array($params)) {
$layer = isset($params[0]) ? $params[0] : null;
}
// $params[0] -> the layer
if ($error = $this->_checkLayer($layer)) {
return $this->raiseError("config-show:$error");
}
$keys = $this->config->getKeys();
sort($keys);
$data = array('caption' => 'Configuration:');
$channel = isset($options['channel']) ? $options['channel'] :
$this->config->get('default_channel');
$reg = &$this->config->getRegistry();
if (!$reg->channelExists($channel)) {
return $this->raiseError('Channel "' . $channel . '" does not exist');
}
$channel = $reg->channelName($channel);
$data = array('caption' => 'Configuration (channel ' . $channel . '):');
foreach ($keys as $key) {
$type = $this->config->getType($key);
$value = $this->config->get($key, @$params[0]);
$value = $this->config->get($key, $layer, $channel);
if ($type == 'password' && $value) {
$value = '********';
}
if ($value === false) {
$value = 'false';
} elseif ($value === true) {
$value = 'true';
}
$data['data'][$this->config->getGroup($key)][] = array($this->config->getPrompt($key) , $key, $value);
}
foreach ($this->config->getLayers() as $layer) {
$data['data']['Config Files'][] = array(ucfirst($layer) . ' Configuration File', 'Filename' , $this->config->getConfFile($layer));
}
$this->ui->outputData($data, $command);
return true;
}
// }}}
// {{{ doConfigGet()
function doConfigGet($command, $options, $params)
{
// $params[0] -> the parameter
// $params[1] -> the layer
if ($error = $this->_checkLayer(@$params[1])) {
return $this->raiseError($error);
$args_cnt = is_array($params) ? count($params) : 0;
switch ($args_cnt) {
case 1:
$config_key = $params[0];
$layer = null;
break;
case 2:
$config_key = $params[0];
$layer = $params[1];
if ($error = $this->_checkLayer($layer)) {
return $this->raiseError("config-get:$error");
}
break;
case 0:
default:
return $this->raiseError("config-get expects 1 or 2 parameters");
}
if (sizeof($params) < 1 || sizeof($params) > 2) {
return $this->raiseError("config-get expects 1 or 2 parameters");
} elseif (sizeof($params) == 1) {
$this->ui->outputData($this->config->get($params[0]), $command);
} else {
$data = $this->config->get($params[0], $params[1]);
$this->ui->outputData($data, $command);
$reg = &$this->config->getRegistry();
$channel = isset($options['channel']) ? $options['channel'] : $this->config->get('default_channel');
if (!$reg->channelExists($channel)) {
return $this->raiseError('Channel "' . $channel . '" does not exist');
}
$channel = $reg->channelName($channel);
$this->ui->outputData($this->config->get($config_key, $layer, $channel), $command);
return true;
}
// }}}
// {{{ doConfigSet()
function doConfigSet($command, $options, $params)
{
// $param[0] -> a parameter to set
// $param[1] -> the value for the parameter
// $param[2] -> the layer
$failmsg = '';
if (sizeof($params) < 2 || sizeof($params) > 3) {
if (count($params) < 2 || count($params) > 3) {
$failmsg .= "config-set expects 2 or 3 parameters";
return PEAR::raiseError($failmsg);
}
if ($error = $this->_checkLayer(@$params[2])) {
if (isset($params[2]) && ($error = $this->_checkLayer($params[2]))) {
$failmsg .= $error;
return PEAR::raiseError($failmsg);
return PEAR::raiseError("config-set:$failmsg");
}
if (!call_user_func_array(array(&$this->config, 'set'), $params))
{
$failmsg = "config-set (" . implode(", ", $params) . ") failed";
$channel = isset($options['channel']) ? $options['channel'] : $this->config->get('default_channel');
$reg = &$this->config->getRegistry();
if (!$reg->channelExists($channel)) {
return $this->raiseError('Channel "' . $channel . '" does not exist');
}
$channel = $reg->channelName($channel);
if ($params[0] == 'default_channel' && !$reg->channelExists($params[1])) {
return $this->raiseError('Channel "' . $params[1] . '" does not exist');
}
if ($params[0] == 'preferred_mirror'
&& (
!$reg->mirrorExists($channel, $params[1]) &&
(!$reg->channelExists($params[1]) || $channel != $params[1])
)
) {
$msg = 'Channel Mirror "' . $params[1] . '" does not exist';
$msg .= ' in your registry for channel "' . $channel . '".';
$msg .= "\n" . 'Attempt to run "pear channel-update ' . $channel .'"';
$msg .= ' if you believe this mirror should exist as you may';
$msg .= ' have outdated channel information.';
return $this->raiseError($msg);
}
if (count($params) == 2) {
array_push($params, 'user');
$layer = 'user';
} else {
$this->config->store();
$layer = $params[2];
}
array_push($params, $channel);
if (!call_user_func_array(array(&$this->config, 'set'), $params)) {
array_pop($params);
$failmsg = "config-set (" . implode(", ", $params) . ") failed, channel $channel";
} else {
$this->config->store($layer);
}
if ($failmsg) {
return $this->raiseError($failmsg);
}
$this->ui->outputData('config-set succeeded', $command);
return true;
}
// }}}
// {{{ doConfigHelp()
function doConfigHelp($command, $options, $params)
{
if (empty($params)) {
$params = $this->config->getKeys();
}
$data['caption'] = "Config help" . ((count($params) == 1) ? " for $params[0]" : '');
$data['headline'] = array('Name', 'Type', 'Description');
$data['border'] = true;
@@ -194,13 +296,103 @@ displays help for all configuration parameters.
$docs = rtrim($docs) . "\nValid set: " .
implode(' ', $this->config->getSetValues($name));
}
$data['data'][] = array($name, $type, $docs);
}
$this->ui->outputData($data, $command);
}
// }}}
// {{{ _checkLayer()
function doConfigCreate($command, $options, $params)
{
if (count($params) != 2) {
return PEAR::raiseError('config-create: must have 2 parameters, root path and ' .
'filename to save as');
}
$root = $params[0];
// Clean up the DIRECTORY_SEPARATOR mess
$ds2 = DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR;
$root = preg_replace(array('!\\\\+!', '!/+!', "!$ds2+!"),
array('/', '/', '/'),
$root);
if ($root{0} != '/') {
if (!isset($options['windows'])) {
return PEAR::raiseError('Root directory must be an absolute path beginning ' .
'with "/", was: "' . $root . '"');
}
if (!preg_match('/^[A-Za-z]:/', $root)) {
return PEAR::raiseError('Root directory must be an absolute path beginning ' .
'with "\\" or "C:\\", was: "' . $root . '"');
}
}
$windows = isset($options['windows']);
if ($windows) {
$root = str_replace('/', '\\', $root);
}
if (!file_exists($params[1]) && !@touch($params[1])) {
return PEAR::raiseError('Could not create "' . $params[1] . '"');
}
$params[1] = realpath($params[1]);
$config = &new PEAR_Config($params[1], '#no#system#config#', false, false);
if ($root{strlen($root) - 1} == '/') {
$root = substr($root, 0, strlen($root) - 1);
}
$config->noRegistry();
$config->set('php_dir', $windows ? "$root\\pear\\php" : "$root/pear/php", 'user');
$config->set('data_dir', $windows ? "$root\\pear\\data" : "$root/pear/data");
$config->set('www_dir', $windows ? "$root\\pear\\www" : "$root/pear/www");
$config->set('cfg_dir', $windows ? "$root\\pear\\cfg" : "$root/pear/cfg");
$config->set('ext_dir', $windows ? "$root\\pear\\ext" : "$root/pear/ext");
$config->set('doc_dir', $windows ? "$root\\pear\\docs" : "$root/pear/docs");
$config->set('test_dir', $windows ? "$root\\pear\\tests" : "$root/pear/tests");
$config->set('cache_dir', $windows ? "$root\\pear\\cache" : "$root/pear/cache");
$config->set('download_dir', $windows ? "$root\\pear\\download" : "$root/pear/download");
$config->set('temp_dir', $windows ? "$root\\pear\\temp" : "$root/pear/temp");
$config->set('bin_dir', $windows ? "$root\\pear" : "$root/pear");
$config->writeConfigFile();
$this->_showConfig($config);
$this->ui->outputData('Successfully created default configuration file "' . $params[1] . '"',
$command);
}
function _showConfig(&$config)
{
$params = array('user');
$keys = $config->getKeys();
sort($keys);
$channel = 'pear.php.net';
$data = array('caption' => 'Configuration (channel ' . $channel . '):');
foreach ($keys as $key) {
$type = $config->getType($key);
$value = $config->get($key, 'user', $channel);
if ($type == 'password' && $value) {
$value = '********';
}
if ($value === false) {
$value = 'false';
} elseif ($value === true) {
$value = 'true';
}
$data['data'][$config->getGroup($key)][] =
array($config->getPrompt($key) , $key, $value);
}
foreach ($config->getLayers() as $layer) {
$data['data']['Config Files'][] =
array(ucfirst($layer) . ' Configuration File', 'Filename' ,
$config->getConfFile($layer));
}
$this->ui->outputData($data, 'config-show');
return true;
}
/**
* Checks if a layer is defined or not
@@ -216,10 +408,7 @@ displays help for all configuration parameters.
return " only the layers: \"" . implode('" or "', $layers) . "\" are supported";
}
}
return false;
}
// }}}
}
?>
}
+92
View File
@@ -0,0 +1,92 @@
<commands version="1.0">
<config-show>
<summary>Show All Settings</summary>
<function>doConfigShow</function>
<shortcut>csh</shortcut>
<options>
<channel>
<shortopt>c</shortopt>
<doc>show configuration variables for another channel</doc>
<arg>CHAN</arg>
</channel>
</options>
<doc>[layer]
Displays all configuration values. An optional argument
may be used to tell which configuration layer to display. Valid
configuration layers are &quot;user&quot;, &quot;system&quot; and &quot;default&quot;. To display
configurations for different channels, set the default_channel
configuration variable and run config-show again.
</doc>
</config-show>
<config-get>
<summary>Show One Setting</summary>
<function>doConfigGet</function>
<shortcut>cg</shortcut>
<options>
<channel>
<shortopt>c</shortopt>
<doc>show configuration variables for another channel</doc>
<arg>CHAN</arg>
</channel>
</options>
<doc>&lt;parameter&gt; [layer]
Displays the value of one configuration parameter. The
first argument is the name of the parameter, an optional second argument
may be used to tell which configuration layer to look in. Valid configuration
layers are &quot;user&quot;, &quot;system&quot; and &quot;default&quot;. If no layer is specified, a value
will be picked from the first layer that defines the parameter, in the order
just specified. The configuration value will be retrieved for the channel
specified by the default_channel configuration variable.
</doc>
</config-get>
<config-set>
<summary>Change Setting</summary>
<function>doConfigSet</function>
<shortcut>cs</shortcut>
<options>
<channel>
<shortopt>c</shortopt>
<doc>show configuration variables for another channel</doc>
<arg>CHAN</arg>
</channel>
</options>
<doc>&lt;parameter&gt; &lt;value&gt; [layer]
Sets the value of one configuration parameter. The first argument is
the name of the parameter, the second argument is the new value. Some
parameters are subject to validation, and the command will fail with
an error message if the new value does not make sense. An optional
third argument may be used to specify in which layer to set the
configuration parameter. The default layer is &quot;user&quot;. The
configuration value will be set for the current channel, which
is controlled by the default_channel configuration variable.
</doc>
</config-set>
<config-help>
<summary>Show Information About Setting</summary>
<function>doConfigHelp</function>
<shortcut>ch</shortcut>
<options />
<doc>[parameter]
Displays help for a configuration parameter. Without arguments it
displays help for all configuration parameters.
</doc>
</config-help>
<config-create>
<summary>Create a Default configuration file</summary>
<function>doConfigCreate</function>
<shortcut>coc</shortcut>
<options>
<windows>
<shortopt>w</shortopt>
<doc>create a config file for a windows install</doc>
</windows>
</options>
<doc>&lt;root path&gt; &lt;filename&gt;
Create a default configuration file with all directory configuration
variables set to subdirectories of &lt;root path&gt;, and save it as &lt;filename&gt;.
This is useful especially for creating a configuration file for a remote
PEAR installation (using the --remoteconfig option of install, upgrade,
and uninstall).
</doc>
</config-create>
</commands>
+970 -172
View File
File diff suppressed because it is too large Load Diff
+276
View File
@@ -0,0 +1,276 @@
<commands version="1.0">
<install>
<summary>Install Package</summary>
<function>doInstall</function>
<shortcut>i</shortcut>
<options>
<force>
<shortopt>f</shortopt>
<doc>will overwrite newer installed packages</doc>
</force>
<loose>
<shortopt>l</shortopt>
<doc>do not check for recommended dependency version</doc>
</loose>
<nodeps>
<shortopt>n</shortopt>
<doc>ignore dependencies, install anyway</doc>
</nodeps>
<register-only>
<shortopt>r</shortopt>
<doc>do not install files, only register the package as installed</doc>
</register-only>
<soft>
<shortopt>s</shortopt>
<doc>soft install, fail silently, or upgrade if already installed</doc>
</soft>
<nobuild>
<shortopt>B</shortopt>
<doc>don&#039;t build C extensions</doc>
</nobuild>
<nocompress>
<shortopt>Z</shortopt>
<doc>request uncompressed files when downloading</doc>
</nocompress>
<installroot>
<shortopt>R</shortopt>
<doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT), use packagingroot for RPM</doc>
<arg>DIR</arg>
</installroot>
<packagingroot>
<shortopt>P</shortopt>
<doc>root directory used when packaging files, like RPM packaging</doc>
<arg>DIR</arg>
</packagingroot>
<ignore-errors>
<shortopt></shortopt>
<doc>force install even if there were errors</doc>
</ignore-errors>
<alldeps>
<shortopt>a</shortopt>
<doc>install all required and optional dependencies</doc>
</alldeps>
<onlyreqdeps>
<shortopt>o</shortopt>
<doc>install all required dependencies</doc>
</onlyreqdeps>
<offline>
<shortopt>O</shortopt>
<doc>do not attempt to download any urls or contact channels</doc>
</offline>
<pretend>
<shortopt>p</shortopt>
<doc>Only list the packages that would be downloaded</doc>
</pretend>
</options>
<doc>[channel/]&lt;package&gt; ...
Installs one or more PEAR packages. You can specify a package to
install in four ways:
&quot;Package-1.0.tgz&quot; : installs from a local file
&quot;http://example.com/Package-1.0.tgz&quot; : installs from
anywhere on the net.
&quot;package.xml&quot; : installs the package described in
package.xml. Useful for testing, or for wrapping a PEAR package in
another package manager such as RPM.
&quot;Package[-version/state][.tar]&quot; : queries your default channel&#039;s server
({config master_server}) and downloads the newest package with
the preferred quality/state ({config preferred_state}).
To retrieve Package version 1.1, use &quot;Package-1.1,&quot; to retrieve
Package state beta, use &quot;Package-beta.&quot; To retrieve an uncompressed
file, append .tar (make sure there is no file by the same name first)
To download a package from another channel, prefix with the channel name like
&quot;channel/Package&quot;
More than one package may be specified at once. It is ok to mix these
four ways of specifying packages.
</doc>
</install>
<upgrade>
<summary>Upgrade Package</summary>
<function>doInstall</function>
<shortcut>up</shortcut>
<options>
<channel>
<shortopt>c</shortopt>
<doc>upgrade packages from a specific channel</doc>
<arg>CHAN</arg>
</channel>
<force>
<shortopt>f</shortopt>
<doc>overwrite newer installed packages</doc>
</force>
<loose>
<shortopt>l</shortopt>
<doc>do not check for recommended dependency version</doc>
</loose>
<nodeps>
<shortopt>n</shortopt>
<doc>ignore dependencies, upgrade anyway</doc>
</nodeps>
<register-only>
<shortopt>r</shortopt>
<doc>do not install files, only register the package as upgraded</doc>
</register-only>
<nobuild>
<shortopt>B</shortopt>
<doc>don&#039;t build C extensions</doc>
</nobuild>
<nocompress>
<shortopt>Z</shortopt>
<doc>request uncompressed files when downloading</doc>
</nocompress>
<installroot>
<shortopt>R</shortopt>
<doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT)</doc>
<arg>DIR</arg>
</installroot>
<ignore-errors>
<shortopt></shortopt>
<doc>force install even if there were errors</doc>
</ignore-errors>
<alldeps>
<shortopt>a</shortopt>
<doc>install all required and optional dependencies</doc>
</alldeps>
<onlyreqdeps>
<shortopt>o</shortopt>
<doc>install all required dependencies</doc>
</onlyreqdeps>
<offline>
<shortopt>O</shortopt>
<doc>do not attempt to download any urls or contact channels</doc>
</offline>
<pretend>
<shortopt>p</shortopt>
<doc>Only list the packages that would be downloaded</doc>
</pretend>
</options>
<doc>&lt;package&gt; ...
Upgrades one or more PEAR packages. See documentation for the
&quot;install&quot; command for ways to specify a package.
When upgrading, your package will be updated if the provided new
package has a higher version number (use the -f option if you need to
upgrade anyway).
More than one package may be specified at once.
</doc>
</upgrade>
<upgrade-all>
<summary>Upgrade All Packages [Deprecated in favor of calling upgrade with no parameters]</summary>
<function>doUpgradeAll</function>
<shortcut>ua</shortcut>
<options>
<channel>
<shortopt>c</shortopt>
<doc>upgrade packages from a specific channel</doc>
<arg>CHAN</arg>
</channel>
<nodeps>
<shortopt>n</shortopt>
<doc>ignore dependencies, upgrade anyway</doc>
</nodeps>
<register-only>
<shortopt>r</shortopt>
<doc>do not install files, only register the package as upgraded</doc>
</register-only>
<nobuild>
<shortopt>B</shortopt>
<doc>don&#039;t build C extensions</doc>
</nobuild>
<nocompress>
<shortopt>Z</shortopt>
<doc>request uncompressed files when downloading</doc>
</nocompress>
<installroot>
<shortopt>R</shortopt>
<doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT), use packagingroot for RPM</doc>
<arg>DIR</arg>
</installroot>
<ignore-errors>
<shortopt></shortopt>
<doc>force install even if there were errors</doc>
</ignore-errors>
<loose>
<shortopt></shortopt>
<doc>do not check for recommended dependency version</doc>
</loose>
</options>
<doc>
WARNING: This function is deprecated in favor of using the upgrade command with no params
Upgrades all packages that have a newer release available. Upgrades are
done only if there is a release available of the state specified in
&quot;preferred_state&quot; (currently {config preferred_state}), or a state considered
more stable.
</doc>
</upgrade-all>
<uninstall>
<summary>Un-install Package</summary>
<function>doUninstall</function>
<shortcut>un</shortcut>
<options>
<nodeps>
<shortopt>n</shortopt>
<doc>ignore dependencies, uninstall anyway</doc>
</nodeps>
<register-only>
<shortopt>r</shortopt>
<doc>do not remove files, only register the packages as not installed</doc>
</register-only>
<installroot>
<shortopt>R</shortopt>
<doc>root directory used when installing files (ala PHP&#039;s INSTALL_ROOT)</doc>
<arg>DIR</arg>
</installroot>
<ignore-errors>
<shortopt></shortopt>
<doc>force install even if there were errors</doc>
</ignore-errors>
<offline>
<shortopt>O</shortopt>
<doc>do not attempt to uninstall remotely</doc>
</offline>
</options>
<doc>[channel/]&lt;package&gt; ...
Uninstalls one or more PEAR packages. More than one package may be
specified at once. Prefix with channel name to uninstall from a
channel not in your default channel ({config default_channel})
</doc>
</uninstall>
<bundle>
<summary>Unpacks a Pecl Package</summary>
<function>doBundle</function>
<shortcut>bun</shortcut>
<options>
<destination>
<shortopt>d</shortopt>
<doc>Optional destination directory for unpacking (defaults to current path or &quot;ext&quot; if exists)</doc>
<arg>DIR</arg>
</destination>
<force>
<shortopt>f</shortopt>
<doc>Force the unpacking even if there were errors in the package</doc>
</force>
</options>
<doc>&lt;package&gt;
Unpacks a Pecl Package into the selected location. It will download the
package if needed.
</doc>
</bundle>
<run-scripts>
<summary>Run Post-Install Scripts bundled with a package</summary>
<function>doRunScripts</function>
<shortcut>rs</shortcut>
<options />
<doc>&lt;package&gt;
Run post-installation scripts in package &lt;package&gt;, if any exist.
</doc>
</run-scripts>
</commands>
+87 -49
View File
@@ -1,53 +1,58 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Alexander Merz <alexmerz@php.net> |
// | |
// +----------------------------------------------------------------------+
//
// $Id: Mirror.php,v 1.5 2004/03/18 12:23:57 mj Exp $
/**
* PEAR_Command_Mirror (download-all command)
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Alexander Merz <alexmerz@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Mirror.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.2.0
*/
require_once "PEAR/Command/Common.php";
require_once "PEAR/Command.php";
require_once "PEAR/Remote.php";
require_once "PEAR.php";
/**
* base class
*/
require_once 'PEAR/Command/Common.php';
/**
* PEAR commands for providing file mirrors
*
* @category pear
* @package PEAR
* @author Alexander Merz <alexmerz@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.2.0
*/
class PEAR_Command_Mirror extends PEAR_Command_Common
{
// {{{ properties
var $commands = array(
'download-all' => array(
'summary' => 'Downloads each available package from master_server',
'summary' => 'Downloads each available package from the default channel',
'function' => 'doDownloadAll',
'shortcut' => 'da',
'options' => array(),
'options' => array(
'channel' =>
array(
'shortopt' => 'c',
'doc' => 'specify a channel other than the default channel',
'arg' => 'CHAN',
),
),
'doc' => '
Requests a list of available packages from the package server
(master_server) and downloads them to current working directory'
Requests a list of available packages from the default channel ({config default_channel})
and downloads them to current working directory. Note: only
packages within preferred_state ({config preferred_state}) will be downloaded'
),
);
// }}}
// {{{ constructor
/**
* PEAR_Command_Mirror constructor.
*
@@ -60,9 +65,15 @@ class PEAR_Command_Mirror extends PEAR_Command_Common
parent::PEAR_Command_Common($ui, $config);
}
// }}}
/**
* For unit-testing
*/
function &factory($a)
{
$a = &PEAR_Command::factory($a, $this->config);
return $a;
}
// {{{ doDownloadAll()
/**
* retrieves a list of avaible Packages from master server
* and downloads them
@@ -72,30 +83,57 @@ class PEAR_Command_Mirror extends PEAR_Command_Common
* @param array $options the command options before the command
* @param array $params the stuff after the command name
* @return bool true if succesful
* @throw PEAR_Error
* @throw PEAR_Error
*/
function doDownloadAll($command, $options, $params)
{
$this->config->set("php_dir", ".");
$remote = &new PEAR_Remote($this->config);
$remoteInfo = $remote->call("package.listAll");
$savechannel = $this->config->get('default_channel');
$reg = &$this->config->getRegistry();
$channel = isset($options['channel']) ? $options['channel'] :
$this->config->get('default_channel');
if (!$reg->channelExists($channel)) {
$this->config->set('default_channel', $savechannel);
return $this->raiseError('Channel "' . $channel . '" does not exist');
}
$this->config->set('default_channel', $channel);
$this->ui->outputData('Using Channel ' . $this->config->get('default_channel'));
$chan = $reg->getChannel($channel);
if (PEAR::isError($chan)) {
return $this->raiseError($chan);
}
if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
$base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
$rest = &$this->config->getREST('1.0', array());
$remoteInfo = array_flip($rest->listPackages($base, $channel));
}
if (PEAR::isError($remoteInfo)) {
return $remoteInfo;
}
$cmd = &PEAR_Command::factory("download", $this->config);
$cmd = &$this->factory("download");
if (PEAR::isError($cmd)) {
return $cmd;
}
foreach ($remoteInfo as $pkgn => $pkg) {
/**
* Error handling not neccesary, because already done by
* the download command
*/
$cmd->run("download", array(), array($pkgn));
$this->ui->outputData('Using Preferred State of ' .
$this->config->get('preferred_state'));
$this->ui->outputData('Gathering release information, please wait...');
/**
* Error handling not necessary, because already done by
* the download command
*/
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$err = $cmd->run('download', array('downloadonly' => true), array_keys($remoteInfo));
PEAR::staticPopErrorHandling();
$this->config->set('default_channel', $savechannel);
if (PEAR::isError($err)) {
$this->ui->outputData($err->getMessage());
}
return true;
}
// }}}
}
}
+18
View File
@@ -0,0 +1,18 @@
<commands version="1.0">
<download-all>
<summary>Downloads each available package from the default channel</summary>
<function>doDownloadAll</function>
<shortcut>da</shortcut>
<options>
<channel>
<shortopt>c</shortopt>
<doc>specify a channel other than the default channel</doc>
<arg>CHAN</arg>
</channel>
</options>
<doc>
Requests a list of available packages from the default channel ({config default_channel})
and downloads them to current working directory. Note: only
packages within preferred_state ({config preferred_state}) will be downloaded</doc>
</download-all>
</commands>
+739 -434
View File
File diff suppressed because it is too large Load Diff
+237
View File
@@ -0,0 +1,237 @@
<commands version="1.0">
<package>
<summary>Build Package</summary>
<function>doPackage</function>
<shortcut>p</shortcut>
<options>
<nocompress>
<shortopt>Z</shortopt>
<doc>Do not gzip the package file</doc>
</nocompress>
<showname>
<shortopt>n</shortopt>
<doc>Print the name of the packaged file.</doc>
</showname>
</options>
<doc>[descfile] [descfile2]
Creates a PEAR package from its description file (usually called
package.xml). If a second packagefile is passed in, then
the packager will check to make sure that one is a package.xml
version 1.0, and the other is a package.xml version 2.0. The
package.xml version 1.0 will be saved as &quot;package.xml&quot; in the archive,
and the other as &quot;package2.xml&quot; in the archive&quot;
</doc>
</package>
<package-validate>
<summary>Validate Package Consistency</summary>
<function>doPackageValidate</function>
<shortcut>pv</shortcut>
<options />
<doc>
</doc>
</package-validate>
<cvsdiff>
<summary>Run a &quot;cvs diff&quot; for all files in a package</summary>
<function>doCvsDiff</function>
<shortcut>cd</shortcut>
<options>
<quiet>
<shortopt>q</shortopt>
<doc>Be quiet</doc>
</quiet>
<reallyquiet>
<shortopt>Q</shortopt>
<doc>Be really quiet</doc>
</reallyquiet>
<date>
<shortopt>D</shortopt>
<doc>Diff against revision of DATE</doc>
<arg>DATE</arg>
</date>
<release>
<shortopt>R</shortopt>
<doc>Diff against tag for package release REL</doc>
<arg>REL</arg>
</release>
<revision>
<shortopt>r</shortopt>
<doc>Diff against revision REV</doc>
<arg>REV</arg>
</revision>
<context>
<shortopt>c</shortopt>
<doc>Generate context diff</doc>
</context>
<unified>
<shortopt>u</shortopt>
<doc>Generate unified diff</doc>
</unified>
<ignore-case>
<shortopt>i</shortopt>
<doc>Ignore case, consider upper- and lower-case letters equivalent</doc>
</ignore-case>
<ignore-whitespace>
<shortopt>b</shortopt>
<doc>Ignore changes in amount of white space</doc>
</ignore-whitespace>
<ignore-blank-lines>
<shortopt>B</shortopt>
<doc>Ignore changes that insert or delete blank lines</doc>
</ignore-blank-lines>
<brief>
<shortopt></shortopt>
<doc>Report only whether the files differ, no details</doc>
</brief>
<dry-run>
<shortopt>n</shortopt>
<doc>Don&#039;t do anything, just pretend</doc>
</dry-run>
</options>
<doc>&lt;package.xml&gt;
Compares all the files in a package. Without any options, this
command will compare the current code with the last checked-in code.
Using the -r or -R option you may compare the current code with that
of a specific release.
</doc>
</cvsdiff>
<svntag>
<summary>Set SVN Release Tag</summary>
<function>doSvnTag</function>
<shortcut>sv</shortcut>
<options>
<quiet>
<shortopt>q</shortopt>
<doc>Be quiet</doc>
</quiet>
<slide>
<shortopt>F</shortopt>
<doc>Move (slide) tag if it exists</doc>
</slide>
<delete>
<shortopt>d</shortopt>
<doc>Remove tag</doc>
</delete>
<dry-run>
<shortopt>n</shortopt>
<doc>Don&#039;t do anything, just pretend</doc>
</dry-run>
</options>
<doc>&lt;package.xml&gt; [files...]
Sets a SVN tag on all files in a package. Use this command after you have
packaged a distribution tarball with the &quot;package&quot; command to tag what
revisions of what files were in that release. If need to fix something
after running svntag once, but before the tarball is released to the public,
use the &quot;slide&quot; option to move the release tag.
to include files (such as a second package.xml, or tests not included in the
release), pass them as additional parameters.
</doc>
</svntag>
<cvstag>
<summary>Set CVS Release Tag</summary>
<function>doCvsTag</function>
<shortcut>ct</shortcut>
<options>
<quiet>
<shortopt>q</shortopt>
<doc>Be quiet</doc>
</quiet>
<reallyquiet>
<shortopt>Q</shortopt>
<doc>Be really quiet</doc>
</reallyquiet>
<slide>
<shortopt>F</shortopt>
<doc>Move (slide) tag if it exists</doc>
</slide>
<delete>
<shortopt>d</shortopt>
<doc>Remove tag</doc>
</delete>
<dry-run>
<shortopt>n</shortopt>
<doc>Don&#039;t do anything, just pretend</doc>
</dry-run>
</options>
<doc>&lt;package.xml&gt; [files...]
Sets a CVS tag on all files in a package. Use this command after you have
packaged a distribution tarball with the &quot;package&quot; command to tag what
revisions of what files were in that release. If need to fix something
after running cvstag once, but before the tarball is released to the public,
use the &quot;slide&quot; option to move the release tag.
to include files (such as a second package.xml, or tests not included in the
release), pass them as additional parameters.
</doc>
</cvstag>
<package-dependencies>
<summary>Show package dependencies</summary>
<function>doPackageDependencies</function>
<shortcut>pd</shortcut>
<options />
<doc>&lt;package-file&gt; or &lt;package.xml&gt; or &lt;install-package-name&gt;
List all dependencies the package has.
Can take a tgz / tar file, package.xml or a package name of an installed package.</doc>
</package-dependencies>
<sign>
<summary>Sign a package distribution file</summary>
<function>doSign</function>
<shortcut>si</shortcut>
<options>
<verbose>
<shortopt>v</shortopt>
<doc>Display GnuPG output</doc>
</verbose>
</options>
<doc>&lt;package-file&gt;
Signs a package distribution (.tar or .tgz) file with GnuPG.</doc>
</sign>
<makerpm>
<summary>Builds an RPM spec file from a PEAR package</summary>
<function>doMakeRPM</function>
<shortcut>rpm</shortcut>
<options>
<spec-template>
<shortopt>t</shortopt>
<doc>Use FILE as RPM spec file template</doc>
<arg>FILE</arg>
</spec-template>
<rpm-pkgname>
<shortopt>p</shortopt>
<doc>Use FORMAT as format string for RPM package name, %s is replaced
by the PEAR package name, defaults to &quot;PEAR::%s&quot;.</doc>
<arg>FORMAT</arg>
</rpm-pkgname>
</options>
<doc>&lt;package-file&gt;
Creates an RPM .spec file for wrapping a PEAR package inside an RPM
package. Intended to be used from the SPECS directory, with the PEAR
package tarball in the SOURCES directory:
$ pear makerpm ../SOURCES/Net_Socket-1.0.tgz
Wrote RPM spec file PEAR::Net_Geo-1.0.spec
$ rpm -bb PEAR::Net_Socket-1.0.spec
...
Wrote: /usr/src/redhat/RPMS/i386/PEAR::Net_Socket-1.0-1.i386.rpm
</doc>
</makerpm>
<convert>
<summary>Convert a package.xml 1.0 to package.xml 2.0 format</summary>
<function>doConvert</function>
<shortcut>c2</shortcut>
<options>
<flat>
<shortopt>f</shortopt>
<doc>do not beautify the filelist.</doc>
</flat>
</options>
<doc>[descfile] [descfile2]
Converts a package.xml in 1.0 format into a package.xml
in 2.0 format. The new file will be named package2.xml by default,
and package.xml will be used as the old file by default.
This is not the most intelligent conversion, and should only be
used for automated conversion or learning the format.
</doc>
</convert>
</commands>
+421
View File
@@ -0,0 +1,421 @@
<?php
/**
* PEAR_Command_Pickle (pickle command)
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 2005-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Pickle.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.1
*/
/**
* base class
*/
require_once 'PEAR/Command/Common.php';
/**
* PEAR commands for login/logout
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 2005-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.1
*/
class PEAR_Command_Pickle extends PEAR_Command_Common
{
var $commands = array(
'pickle' => array(
'summary' => 'Build PECL Package',
'function' => 'doPackage',
'shortcut' => 'pi',
'options' => array(
'nocompress' => array(
'shortopt' => 'Z',
'doc' => 'Do not gzip the package file'
),
'showname' => array(
'shortopt' => 'n',
'doc' => 'Print the name of the packaged file.',
),
),
'doc' => '[descfile]
Creates a PECL package from its package2.xml file.
An automatic conversion will be made to a package.xml 1.0 and written out to
disk in the current directory as "package.xml". Note that
only simple package.xml 2.0 will be converted. package.xml 2.0 with:
- dependency types other than required/optional PECL package/ext/php/pearinstaller
- more than one extsrcrelease or zendextsrcrelease
- zendextbinrelease, extbinrelease, phprelease, or bundle release type
- dependency groups
- ignore tags in release filelist
- tasks other than replace
- custom roles
will cause pickle to fail, and output an error message. If your package2.xml
uses any of these features, you are best off using PEAR_PackageFileManager to
generate both package.xml.
'
),
);
/**
* PEAR_Command_Package constructor.
*
* @access public
*/
function PEAR_Command_Pickle(&$ui, &$config)
{
parent::PEAR_Command_Common($ui, $config);
}
/**
* For unit-testing ease
*
* @return PEAR_Packager
*/
function &getPackager()
{
if (!class_exists('PEAR_Packager')) {
require_once 'PEAR/Packager.php';
}
$a = &new PEAR_Packager;
return $a;
}
/**
* For unit-testing ease
*
* @param PEAR_Config $config
* @param bool $debug
* @param string|null $tmpdir
* @return PEAR_PackageFile
*/
function &getPackageFile($config, $debug = false)
{
if (!class_exists('PEAR_Common')) {
require_once 'PEAR/Common.php';
}
if (!class_exists('PEAR_PackageFile')) {
require_once 'PEAR/PackageFile.php';
}
$a = &new PEAR_PackageFile($config, $debug);
$common = new PEAR_Common;
$common->ui = $this->ui;
$a->setLogger($common);
return $a;
}
function doPackage($command, $options, $params)
{
$this->output = '';
$pkginfofile = isset($params[0]) ? $params[0] : 'package2.xml';
$packager = &$this->getPackager();
if (PEAR::isError($err = $this->_convertPackage($pkginfofile))) {
return $err;
}
$compress = empty($options['nocompress']) ? true : false;
$result = $packager->package($pkginfofile, $compress, 'package.xml');
if (PEAR::isError($result)) {
return $this->raiseError($result);
}
// Don't want output, only the package file name just created
if (isset($options['showname'])) {
$this->ui->outputData($result, $command);
}
return true;
}
function _convertPackage($packagexml)
{
$pkg = &$this->getPackageFile($this->config);
$pf2 = &$pkg->fromPackageFile($packagexml, PEAR_VALIDATE_NORMAL);
if (!is_a($pf2, 'PEAR_PackageFile_v2')) {
return $this->raiseError('Cannot process "' .
$packagexml . '", is not a package.xml 2.0');
}
require_once 'PEAR/PackageFile/v1.php';
$pf = new PEAR_PackageFile_v1;
$pf->setConfig($this->config);
if ($pf2->getPackageType() != 'extsrc' && $pf2->getPackageType() != 'zendextsrc') {
return $this->raiseError('Cannot safely convert "' . $packagexml .
'", is not an extension source package. Using a PEAR_PackageFileManager-based ' .
'script is an option');
}
if (is_array($pf2->getUsesRole())) {
return $this->raiseError('Cannot safely convert "' . $packagexml .
'", contains custom roles. Using a PEAR_PackageFileManager-based script or ' .
'the convert command is an option');
}
if (is_array($pf2->getUsesTask())) {
return $this->raiseError('Cannot safely convert "' . $packagexml .
'", contains custom tasks. Using a PEAR_PackageFileManager-based script or ' .
'the convert command is an option');
}
$deps = $pf2->getDependencies();
if (isset($deps['group'])) {
return $this->raiseError('Cannot safely convert "' . $packagexml .
'", contains dependency groups. Using a PEAR_PackageFileManager-based script ' .
'or the convert command is an option');
}
if (isset($deps['required']['subpackage']) ||
isset($deps['optional']['subpackage'])) {
return $this->raiseError('Cannot safely convert "' . $packagexml .
'", contains subpackage dependencies. Using a PEAR_PackageFileManager-based '.
'script is an option');
}
if (isset($deps['required']['os'])) {
return $this->raiseError('Cannot safely convert "' . $packagexml .
'", contains os dependencies. Using a PEAR_PackageFileManager-based '.
'script is an option');
}
if (isset($deps['required']['arch'])) {
return $this->raiseError('Cannot safely convert "' . $packagexml .
'", contains arch dependencies. Using a PEAR_PackageFileManager-based '.
'script is an option');
}
$pf->setPackage($pf2->getPackage());
$pf->setSummary($pf2->getSummary());
$pf->setDescription($pf2->getDescription());
foreach ($pf2->getMaintainers() as $maintainer) {
$pf->addMaintainer($maintainer['role'], $maintainer['handle'],
$maintainer['name'], $maintainer['email']);
}
$pf->setVersion($pf2->getVersion());
$pf->setDate($pf2->getDate());
$pf->setLicense($pf2->getLicense());
$pf->setState($pf2->getState());
$pf->setNotes($pf2->getNotes());
$pf->addPhpDep($deps['required']['php']['min'], 'ge');
if (isset($deps['required']['php']['max'])) {
$pf->addPhpDep($deps['required']['php']['max'], 'le');
}
if (isset($deps['required']['package'])) {
if (!isset($deps['required']['package'][0])) {
$deps['required']['package'] = array($deps['required']['package']);
}
foreach ($deps['required']['package'] as $dep) {
if (!isset($dep['channel'])) {
return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
' contains uri-based dependency on a package. Using a ' .
'PEAR_PackageFileManager-based script is an option');
}
if ($dep['channel'] != 'pear.php.net'
&& $dep['channel'] != 'pecl.php.net'
&& $dep['channel'] != 'doc.php.net') {
return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
' contains dependency on a non-standard channel package. Using a ' .
'PEAR_PackageFileManager-based script is an option');
}
if (isset($dep['conflicts'])) {
return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
' contains conflicts dependency. Using a ' .
'PEAR_PackageFileManager-based script is an option');
}
if (isset($dep['exclude'])) {
$this->ui->outputData('WARNING: exclude tags are ignored in conversion');
}
if (isset($dep['min'])) {
$pf->addPackageDep($dep['name'], $dep['min'], 'ge');
}
if (isset($dep['max'])) {
$pf->addPackageDep($dep['name'], $dep['max'], 'le');
}
}
}
if (isset($deps['required']['extension'])) {
if (!isset($deps['required']['extension'][0])) {
$deps['required']['extension'] = array($deps['required']['extension']);
}
foreach ($deps['required']['extension'] as $dep) {
if (isset($dep['conflicts'])) {
return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
' contains conflicts dependency. Using a ' .
'PEAR_PackageFileManager-based script is an option');
}
if (isset($dep['exclude'])) {
$this->ui->outputData('WARNING: exclude tags are ignored in conversion');
}
if (isset($dep['min'])) {
$pf->addExtensionDep($dep['name'], $dep['min'], 'ge');
}
if (isset($dep['max'])) {
$pf->addExtensionDep($dep['name'], $dep['max'], 'le');
}
}
}
if (isset($deps['optional']['package'])) {
if (!isset($deps['optional']['package'][0])) {
$deps['optional']['package'] = array($deps['optional']['package']);
}
foreach ($deps['optional']['package'] as $dep) {
if (!isset($dep['channel'])) {
return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
' contains uri-based dependency on a package. Using a ' .
'PEAR_PackageFileManager-based script is an option');
}
if ($dep['channel'] != 'pear.php.net'
&& $dep['channel'] != 'pecl.php.net'
&& $dep['channel'] != 'doc.php.net') {
return $this->raiseError('Cannot safely convert "' . $packagexml . '"' .
' contains dependency on a non-standard channel package. Using a ' .
'PEAR_PackageFileManager-based script is an option');
}
if (isset($dep['exclude'])) {
$this->ui->outputData('WARNING: exclude tags are ignored in conversion');
}
if (isset($dep['min'])) {
$pf->addPackageDep($dep['name'], $dep['min'], 'ge', 'yes');
}
if (isset($dep['max'])) {
$pf->addPackageDep($dep['name'], $dep['max'], 'le', 'yes');
}
}
}
if (isset($deps['optional']['extension'])) {
if (!isset($deps['optional']['extension'][0])) {
$deps['optional']['extension'] = array($deps['optional']['extension']);
}
foreach ($deps['optional']['extension'] as $dep) {
if (isset($dep['exclude'])) {
$this->ui->outputData('WARNING: exclude tags are ignored in conversion');
}
if (isset($dep['min'])) {
$pf->addExtensionDep($dep['name'], $dep['min'], 'ge', 'yes');
}
if (isset($dep['max'])) {
$pf->addExtensionDep($dep['name'], $dep['max'], 'le', 'yes');
}
}
}
$contents = $pf2->getContents();
$release = $pf2->getReleases();
if (isset($releases[0])) {
return $this->raiseError('Cannot safely process "' . $packagexml . '" contains '
. 'multiple extsrcrelease/zendextsrcrelease tags. Using a PEAR_PackageFileManager-based script ' .
'or the convert command is an option');
}
if ($configoptions = $pf2->getConfigureOptions()) {
foreach ($configoptions as $option) {
$default = isset($option['default']) ? $option['default'] : false;
$pf->addConfigureOption($option['name'], $option['prompt'], $default);
}
}
if (isset($release['filelist']['ignore'])) {
return $this->raiseError('Cannot safely process "' . $packagexml . '" contains '
. 'ignore tags. Using a PEAR_PackageFileManager-based script or the convert' .
' command is an option');
}
if (isset($release['filelist']['install']) &&
!isset($release['filelist']['install'][0])) {
$release['filelist']['install'] = array($release['filelist']['install']);
}
if (isset($contents['dir']['attribs']['baseinstalldir'])) {
$baseinstalldir = $contents['dir']['attribs']['baseinstalldir'];
} else {
$baseinstalldir = false;
}
if (!isset($contents['dir']['file'][0])) {
$contents['dir']['file'] = array($contents['dir']['file']);
}
foreach ($contents['dir']['file'] as $file) {
if ($baseinstalldir && !isset($file['attribs']['baseinstalldir'])) {
$file['attribs']['baseinstalldir'] = $baseinstalldir;
}
$processFile = $file;
unset($processFile['attribs']);
if (count($processFile)) {
foreach ($processFile as $name => $task) {
if ($name != $pf2->getTasksNs() . ':replace') {
return $this->raiseError('Cannot safely process "' . $packagexml .
'" contains tasks other than replace. Using a ' .
'PEAR_PackageFileManager-based script is an option.');
}
$file['attribs']['replace'][] = $task;
}
}
if (!in_array($file['attribs']['role'], PEAR_Common::getFileRoles())) {
return $this->raiseError('Cannot safely convert "' . $packagexml .
'", contains custom roles. Using a PEAR_PackageFileManager-based script ' .
'or the convert command is an option');
}
if (isset($release['filelist']['install'])) {
foreach ($release['filelist']['install'] as $installas) {
if ($installas['attribs']['name'] == $file['attribs']['name']) {
$file['attribs']['install-as'] = $installas['attribs']['as'];
}
}
}
$pf->addFile('/', $file['attribs']['name'], $file['attribs']);
}
if ($pf2->getChangeLog()) {
$this->ui->outputData('WARNING: changelog is not translated to package.xml ' .
'1.0, use PEAR_PackageFileManager-based script if you need changelog-' .
'translation for package.xml 1.0');
}
$gen = &$pf->getDefaultGenerator();
$gen->toPackageFile('.');
}
}
+36
View File
@@ -0,0 +1,36 @@
<commands version="1.0">
<pickle>
<summary>Build PECL Package</summary>
<function>doPackage</function>
<shortcut>pi</shortcut>
<options>
<nocompress>
<shortopt>Z</shortopt>
<doc>Do not gzip the package file</doc>
</nocompress>
<showname>
<shortopt>n</shortopt>
<doc>Print the name of the packaged file.</doc>
</showname>
</options>
<doc>[descfile]
Creates a PECL package from its package2.xml file.
An automatic conversion will be made to a package.xml 1.0 and written out to
disk in the current directory as &quot;package.xml&quot;. Note that
only simple package.xml 2.0 will be converted. package.xml 2.0 with:
- dependency types other than required/optional PECL package/ext/php/pearinstaller
- more than one extsrcrelease or zendextsrcrelease
- zendextbinrelease, extbinrelease, phprelease, or bundle release type
- dependency groups
- ignore tags in release filelist
- tasks other than replace
- custom roles
will cause pickle to fail, and output an error message. If your package2.xml
uses any of these features, you are best off using PEAR_PackageFileManager to
generate both package.xml.
</doc>
</pickle>
</commands>
+912 -118
View File
File diff suppressed because it is too large Load Diff
+58
View File
@@ -0,0 +1,58 @@
<commands version="1.0">
<list>
<summary>List Installed Packages In The Default Channel</summary>
<function>doList</function>
<shortcut>l</shortcut>
<options>
<channel>
<shortopt>c</shortopt>
<doc>list installed packages from this channel</doc>
<arg>CHAN</arg>
</channel>
<allchannels>
<shortopt>a</shortopt>
<doc>list installed packages from all channels</doc>
</allchannels>
<channelinfo>
<shortopt>i</shortopt>
<doc>output fully channel-aware data, even on failure</doc>
</channelinfo>
</options>
<doc>&lt;package&gt;
If invoked without parameters, this command lists the PEAR packages
installed in your php_dir ({config php_dir}). With a parameter, it
lists the files in a package.
</doc>
</list>
<list-files>
<summary>List Files In Installed Package</summary>
<function>doFileList</function>
<shortcut>fl</shortcut>
<options />
<doc>&lt;package&gt;
List the files in an installed package.
</doc>
</list-files>
<shell-test>
<summary>Shell Script Test</summary>
<function>doShellTest</function>
<shortcut>st</shortcut>
<options />
<doc>&lt;package&gt; [[relation] version]
Tests if a package is installed in the system. Will exit(1) if it is not.
&lt;relation&gt; The version comparison operator. One of:
&lt;, lt, &lt;=, le, &gt;, gt, &gt;=, ge, ==, =, eq, !=, &lt;&gt;, ne
&lt;version&gt; The version to compare with
</doc>
</shell-test>
<info>
<summary>Display information about a package</summary>
<function>doInfo</function>
<shortcut>in</shortcut>
<options />
<doc>&lt;package&gt;
Displays information about a package. The package argument may be a
local package file, an URL to a package file, or the name of an
installed package.</doc>
</info>
</commands>
+584 -209
View File
@@ -1,33 +1,42 @@
<?php
// /* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Stig Bakken <ssb@php.net> |
// | |
// +----------------------------------------------------------------------+
//
// $Id: Remote.php,v 1.39 2004/04/03 15:56:00 cellog Exp $
/**
* PEAR_Command_Remote (remote-info, list-upgrades, remote-list, search, list-all, download,
* clear-cache commands)
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Remote.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 0.1
*/
/**
* base class
*/
require_once 'PEAR/Command/Common.php';
require_once 'PEAR/Common.php';
require_once 'PEAR/Remote.php';
require_once 'PEAR/Registry.php';
require_once 'PEAR/REST.php';
/**
* PEAR commands for remote server querying
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 0.1
*/
class PEAR_Command_Remote extends PEAR_Command_Common
{
// {{{ command definitions
var $commands = array(
'remote-info' => array(
'summary' => 'Information About Remote Packages',
@@ -41,16 +50,29 @@ Get details on a package from the server.',
'summary' => 'List Available Upgrades',
'function' => 'doListUpgrades',
'shortcut' => 'lu',
'options' => array(),
'doc' => '
'options' => array(
'channelinfo' => array(
'shortopt' => 'i',
'doc' => 'output fully channel-aware data, even on failure',
),
),
'doc' => '[preferred_state]
List releases on the server of packages you have installed where
a newer version is available with the same release state (stable etc.).'
a newer version is available with the same release state (stable etc.)
or the state passed as the second parameter.'
),
'remote-list' => array(
'summary' => 'List Remote Packages',
'function' => 'doRemoteList',
'shortcut' => 'rl',
'options' => array(),
'options' => array(
'channel' =>
array(
'shortopt' => 'c',
'doc' => 'specify a channel other than the default channel',
'arg' => 'CHAN',
)
),
'doc' => '
Lists the packages available on the configured server along with the
latest stable release of each package.',
@@ -59,16 +81,44 @@ latest stable release of each package.',
'summary' => 'Search remote package database',
'function' => 'doSearch',
'shortcut' => 'sp',
'options' => array(),
'doc' => '
Lists all packages which match the search parameters (first param
is package name, second package info)',
'options' => array(
'channel' =>
array(
'shortopt' => 'c',
'doc' => 'specify a channel other than the default channel',
'arg' => 'CHAN',
),
'allchannels' => array(
'shortopt' => 'a',
'doc' => 'search packages from all known channels',
),
'channelinfo' => array(
'shortopt' => 'i',
'doc' => 'output fully channel-aware data, even on failure',
),
),
'doc' => '[packagename] [packageinfo]
Lists all packages which match the search parameters. The first
parameter is a fragment of a packagename. The default channel
will be used unless explicitly overridden. The second parameter
will be used to match any portion of the summary/description',
),
'list-all' => array(
'summary' => 'List All Packages',
'function' => 'doListAll',
'shortcut' => 'la',
'options' => array(),
'options' => array(
'channel' =>
array(
'shortopt' => 'c',
'doc' => 'specify a channel other than the default channel',
'arg' => 'CHAN',
),
'channelinfo' => array(
'shortopt' => 'i',
'doc' => 'output fully channel-aware data, even on failure',
),
),
'doc' => '
Lists the packages available on the configured server along with the
latest stable release of each package.',
@@ -83,26 +133,23 @@ latest stable release of each package.',
'doc' => 'download an uncompressed (.tar) file',
),
),
'doc' => '{package|package-version}
Download a package tarball. The file will be named as suggested by the
'doc' => '<package>...
Download package tarballs. The files will be named as suggested by the
server, for example if you download the DB package and the latest stable
version of DB is 1.2, the downloaded file will be DB-1.2.tgz.',
version of DB is 1.6.5, the downloaded file will be DB-1.6.5.tgz.',
),
'clear-cache' => array(
'summary' => 'Clear XML-RPC Cache',
'summary' => 'Clear Web Services Cache',
'function' => 'doClearCache',
'shortcut' => 'cc',
'options' => array(),
'doc' => '
Clear the XML-RPC cache. See also the cache_ttl configuration
Clear the REST cache. See also the cache_ttl configuration
parameter.
',
),
);
// }}}
// {{{ constructor
/**
* PEAR_Command_Remote constructor.
*
@@ -113,98 +160,216 @@ parameter.
parent::PEAR_Command_Common($ui, $config);
}
// }}}
// {{{ doRemoteInfo()
function _checkChannelForStatus($channel, $chan)
{
if (PEAR::isError($chan)) {
$this->raiseError($chan);
}
if (!is_a($chan, 'PEAR_ChannelFile')) {
return $this->raiseError('Internal corruption error: invalid channel "' .
$channel . '"');
}
$rest = new PEAR_REST($this->config);
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$mirror = $this->config->get('preferred_mirror', null,
$channel);
$a = $rest->downloadHttp('http://' . $channel .
'/channel.xml', $chan->lastModified());
PEAR::staticPopErrorHandling();
if (!PEAR::isError($a) && $a) {
$this->ui->outputData('WARNING: channel "' . $channel . '" has ' .
'updated its protocols, use "' . PEAR_RUNTYPE . ' channel-update ' . $channel .
'" to update');
}
}
function doRemoteInfo($command, $options, $params)
{
if (sizeof($params) != 1) {
return $this->raiseError("$command expects one param: the remote package name");
}
$r = new PEAR_Remote($this->config);
$info = $r->call('package.info', $params[0]);
$savechannel = $channel = $this->config->get('default_channel');
$reg = &$this->config->getRegistry();
$package = $params[0];
$parsed = $reg->parsePackageName($package, $channel);
if (PEAR::isError($parsed)) {
return $this->raiseError('Invalid package name "' . $package . '"');
}
$channel = $parsed['channel'];
$this->config->set('default_channel', $channel);
$chan = $reg->getChannel($channel);
if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) {
return $e;
}
$mirror = $this->config->get('preferred_mirror');
if ($chan->supportsREST($mirror) && $base = $chan->getBaseURL('REST1.0', $mirror)) {
$rest = &$this->config->getREST('1.0', array());
$info = $rest->packageInfo($base, $parsed['package'], $channel);
}
if (!isset($info)) {
return $this->raiseError('No supported protocol was found');
}
if (PEAR::isError($info)) {
$this->config->set('default_channel', $savechannel);
return $this->raiseError($info);
}
$reg = new PEAR_Registry($this->config->get('php_dir'));
$installed = $reg->packageInfo($info['name']);
if (!isset($info['name'])) {
return $this->raiseError('No remote package "' . $package . '" was found');
}
$installed = $reg->packageInfo($info['name'], null, $channel);
$info['installed'] = $installed['version'] ? $installed['version'] : '- no -';
if (is_array($info['installed'])) {
$info['installed'] = $info['installed']['release'];
}
$this->ui->outputData($info, $command);
$this->config->set('default_channel', $savechannel);
return true;
}
// }}}
// {{{ doRemoteList()
function doRemoteList($command, $options, $params)
{
$r = new PEAR_Remote($this->config);
$savechannel = $channel = $this->config->get('default_channel');
$reg = &$this->config->getRegistry();
if (isset($options['channel'])) {
$channel = $options['channel'];
if (!$reg->channelExists($channel)) {
return $this->raiseError('Channel "' . $channel . '" does not exist');
}
$this->config->set('default_channel', $channel);
}
$chan = $reg->getChannel($channel);
if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) {
return $e;
}
$list_options = false;
if ($this->config->get('preferred_state') == 'stable')
if ($this->config->get('preferred_state') == 'stable') {
$list_options = true;
$available = $r->call('package.listAll', $list_options);
}
$available = array();
if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
$base = $chan->getBaseURL('REST1.1', $this->config->get('preferred_mirror'))
) {
// use faster list-all if available
$rest = &$this->config->getREST('1.1', array());
$available = $rest->listAll($base, $list_options, true, false, false, $chan->getName());
} elseif ($chan->supportsREST($this->config->get('preferred_mirror')) &&
$base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
$rest = &$this->config->getREST('1.0', array());
$available = $rest->listAll($base, $list_options, true, false, false, $chan->getName());
}
if (PEAR::isError($available)) {
$this->config->set('default_channel', $savechannel);
return $this->raiseError($available);
}
$i = $j = 0;
$data = array(
'caption' => 'Available packages:',
'caption' => 'Channel ' . $channel . ' Available packages:',
'border' => true,
'headline' => array('Package', 'Version'),
'channel' => $channel
);
foreach ($available as $name => $info) {
$data['data'][] = array($name, isset($info['stable']) ? $info['stable'] : '-n/a-');
}
if (count($available)==0) {
$data = '(no packages installed yet)';
if (count($available) == 0) {
$data = '(no packages available yet)';
} else {
foreach ($available as $name => $info) {
$version = (isset($info['stable']) && $info['stable']) ? $info['stable'] : '-n/a-';
$data['data'][] = array($name, $version);
}
}
$this->ui->outputData($data, $command);
$this->config->set('default_channel', $savechannel);
return true;
}
// }}}
// {{{ doListAll()
function doListAll($command, $options, $params)
{
$r = new PEAR_Remote($this->config);
$reg = new PEAR_Registry($this->config->get('php_dir'));
$savechannel = $channel = $this->config->get('default_channel');
$reg = &$this->config->getRegistry();
if (isset($options['channel'])) {
$channel = $options['channel'];
if (!$reg->channelExists($channel)) {
return $this->raiseError("Channel \"$channel\" does not exist");
}
$this->config->set('default_channel', $channel);
}
$list_options = false;
if ($this->config->get('preferred_state') == 'stable')
if ($this->config->get('preferred_state') == 'stable') {
$list_options = true;
$available = $r->call('package.listAll', $list_options);
}
$chan = $reg->getChannel($channel);
if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) {
return $e;
}
if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
$base = $chan->getBaseURL('REST1.1', $this->config->get('preferred_mirror'))) {
// use faster list-all if available
$rest = &$this->config->getREST('1.1', array());
$available = $rest->listAll($base, $list_options, false, false, false, $chan->getName());
} elseif ($chan->supportsREST($this->config->get('preferred_mirror')) &&
$base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
$rest = &$this->config->getREST('1.0', array());
$available = $rest->listAll($base, $list_options, false, false, false, $chan->getName());
}
if (PEAR::isError($available)) {
return $this->raiseError($available);
}
if (!is_array($available)) {
return $this->raiseError('The package list could not be fetched from the remote server. Please try again. (Debug info: "'.$available.'")');
$this->config->set('default_channel', $savechannel);
return $this->raiseError('The package list could not be fetched from the remote server. Please try again. (Debug info: "' . $available->getMessage() . '")');
}
$data = array(
'caption' => 'All packages:',
'caption' => 'All packages [Channel ' . $channel . ']:',
'border' => true,
'headline' => array('Package', 'Latest', 'Local'),
'channel' => $channel,
);
$local_pkgs = $reg->listPackages();
foreach ($available as $name => $info) {
$installed = $reg->packageInfo($name);
$desc = $info['summary'];
if (isset($params[$name]))
$desc .= "\n\n".$info['description'];
if (isset($options['channelinfo'])) {
// add full channelinfo
$data['caption'] = 'Channel ' . $channel . ' All packages:';
$data['headline'] = array('Channel', 'Package', 'Latest', 'Local',
'Description', 'Dependencies');
}
$local_pkgs = $reg->listPackages($channel);
foreach ($available as $name => $info) {
$installed = $reg->packageInfo($name, null, $channel);
if (is_array($installed['version'])) {
$installed['version'] = $installed['version']['release'];
}
$desc = $info['summary'];
if (isset($params[$name])) {
$desc .= "\n\n".$info['description'];
}
if (isset($options['mode']))
{
if ($options['mode'] == 'installed' && !isset($installed['version']))
if ($options['mode'] == 'installed' && !isset($installed['version'])) {
continue;
if ($options['mode'] == 'notinstalled' && isset($installed['version']))
}
if ($options['mode'] == 'notinstalled' && isset($installed['version'])) {
continue;
}
if ($options['mode'] == 'upgrades'
&& (!isset($installed['version']) || $installed['version'] == $info['stable']))
{
&& (!isset($installed['version']) || version_compare($installed['version'],
$info['stable'], '>='))) {
continue;
}
}
@@ -213,112 +378,253 @@ parameter.
unset($local_pkgs[$pos]);
}
$data['data'][$info['category']][] = array(
$name,
@$info['stable'],
@$installed['version'],
@$desc,
@$info['deps'],
if (isset($info['stable']) && !$info['stable']) {
$info['stable'] = null;
}
if (isset($options['channelinfo'])) {
// add full channelinfo
if ($info['stable'] === $info['unstable']) {
$state = $info['state'];
} else {
$state = 'stable';
}
$latest = $info['stable'].' ('.$state.')';
$local = '';
if (isset($installed['version'])) {
$inst_state = $reg->packageInfo($name, 'release_state', $channel);
$local = $installed['version'].' ('.$inst_state.')';
}
$packageinfo = array(
$channel,
$name,
$latest,
$local,
isset($desc) ? $desc : null,
isset($info['deps']) ? $info['deps'] : null,
);
} else {
$packageinfo = array(
$reg->channelAlias($channel) . '/' . $name,
isset($info['stable']) ? $info['stable'] : null,
isset($installed['version']) ? $installed['version'] : null,
isset($desc) ? $desc : null,
isset($info['deps']) ? $info['deps'] : null,
);
}
$data['data'][$info['category']][] = $packageinfo;
}
if (isset($options['mode']) && in_array($options['mode'], array('notinstalled', 'upgrades'))) {
$this->config->set('default_channel', $savechannel);
$this->ui->outputData($data, $command);
return true;
}
foreach ($local_pkgs as $name) {
$info = $reg->packageInfo($name);
$info = &$reg->getPackage($name, $channel);
$data['data']['Local'][] = array(
$info['package'],
$reg->channelAlias($channel) . '/' . $info->getPackage(),
'',
$info['version'],
$info['summary'],
@$info['release_deps']
$info->getVersion(),
$info->getSummary(),
$info->getDeps()
);
}
$this->config->set('default_channel', $savechannel);
$this->ui->outputData($data, $command);
return true;
}
// }}}
// {{{ doSearch()
function doSearch($command, $options, $params)
{
if ((!isset($params[0]) || empty($params[0]))
&& (!isset($params[1]) || empty($params[1])))
{
return $this->raiseError('no valid search string supplied');
};
}
$channelinfo = isset($options['channelinfo']);
$reg = &$this->config->getRegistry();
if (isset($options['allchannels'])) {
// search all channels
unset($options['allchannels']);
$channels = $reg->getChannels();
$errors = array();
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
foreach ($channels as $channel) {
if ($channel->getName() != '__uri') {
$options['channel'] = $channel->getName();
$ret = $this->doSearch($command, $options, $params);
if (PEAR::isError($ret)) {
$errors[] = $ret;
}
}
}
PEAR::staticPopErrorHandling();
if (count($errors) !== 0) {
// for now, only give first error
return PEAR::raiseError($errors[0]);
}
return true;
}
$savechannel = $channel = $this->config->get('default_channel');
$package = strtolower($params[0]);
$summary = isset($params[1]) ? $params[1] : false;
if (isset($options['channel'])) {
$reg = &$this->config->getRegistry();
$channel = $options['channel'];
if (!$reg->channelExists($channel)) {
return $this->raiseError('Channel "' . $channel . '" does not exist');
}
$this->config->set('default_channel', $channel);
}
$chan = $reg->getChannel($channel);
if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) {
return $e;
}
if ($chan->supportsREST($this->config->get('preferred_mirror')) &&
$base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {
$rest = &$this->config->getREST('1.0', array());
$available = $rest->listAll($base, false, false, $package, $summary, $chan->getName());
}
$r = new PEAR_Remote($this->config);
$reg = new PEAR_Registry($this->config->get('php_dir'));
$available = $r->call('package.listAll', true, false);
if (PEAR::isError($available)) {
$this->config->set('default_channel', $savechannel);
return $this->raiseError($available);
}
$data = array(
'caption' => 'Matched packages:',
'border' => true,
'headline' => array('Package', 'Stable/(Latest)', 'Local'),
);
if (!$available && !$channelinfo) {
// clean exit when not found, no error !
$data = 'no packages found that match pattern "' . $package . '", for channel '.$channel.'.';
$this->ui->outputData($data);
$this->config->set('default_channel', $channel);
return true;
}
if ($channelinfo) {
$data = array(
'caption' => 'Matched packages, channel ' . $channel . ':',
'border' => true,
'headline' => array('Channel', 'Package', 'Stable/(Latest)', 'Local'),
'channel' => $channel
);
} else {
$data = array(
'caption' => 'Matched packages, channel ' . $channel . ':',
'border' => true,
'headline' => array('Package', 'Stable/(Latest)', 'Local'),
'channel' => $channel
);
}
if (!$available && $channelinfo) {
unset($data['headline']);
$data['data'] = 'No packages found that match pattern "' . $package . '".';
$available = array();
}
foreach ($available as $name => $info) {
$found = (!empty($params[0]) && stristr($name, $params[0]) !== false);
if (!$found && !(isset($params[1]) && !empty($params[1])
&& (stristr($info['summary'], $params[1]) !== false
|| stristr($info['description'], $params[1]) !== false)))
{
continue;
};
$installed = $reg->packageInfo($name);
$installed = $reg->packageInfo($name, null, $channel);
$desc = $info['summary'];
if (isset($params[$name]))
$desc .= "\n\n".$info['description'];
$unstable = '';
if ($info['unstable']) {
$unstable = '/(' . $info['unstable'] . $info['state'] . ')';
}
if (!isset($info['stable']) || !$info['stable']) {
$info['stable'] = 'none';
$version_remote = 'none';
} else {
if ($info['unstable']) {
$version_remote = $info['unstable'];
} else {
$version_remote = $info['stable'];
}
$version_remote .= ' ('.$info['state'].')';
}
$data['data'][$info['category']][] = array(
$name,
$info['stable'] . $unstable,
$installed['version'],
$desc,
$version = is_array($installed['version']) ? $installed['version']['release'] :
$installed['version'];
if ($channelinfo) {
$packageinfo = array(
$channel,
$name,
$version_remote,
$version,
$desc,
);
} else {
$packageinfo = array(
$name,
$version_remote,
$version,
$desc,
);
}
$data['data'][$info['category']][] = $packageinfo;
}
if (!isset($data['data'])) {
return $this->raiseError('no packages found');
}
$this->ui->outputData($data, $command);
$this->config->set('default_channel', $channel);
return true;
}
// }}}
// {{{ doDownload()
function &getDownloader($options)
{
if (!class_exists('PEAR_Downloader')) {
require_once 'PEAR/Downloader.php';
}
$a = &new PEAR_Downloader($this->ui, $options, $this->config);
return $a;
}
function doDownload($command, $options, $params)
{
//$params[0] -> The package to download
if (count($params) != 1) {
return PEAR::raiseError("download expects one argument: the package to download");
// make certain that dependencies are ignored
$options['downloadonly'] = 1;
// eliminate error messages for preferred_state-related errors
/* TODO: Should be an option, but until now download does respect
prefered state */
/* $options['ignorepreferred_state'] = 1; */
// eliminate error messages for preferred_state-related errors
$downloader = &$this->getDownloader($options);
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$e = $downloader->setDownloadDir(getcwd());
PEAR::staticPopErrorHandling();
if (PEAR::isError($e)) {
return $this->raiseError('Current directory is not writeable, cannot download');
}
$server = $this->config->get('master_server');
if (!ereg('^http://', $params[0])) {
$getoption = isset($options['nocompress'])&&$options['nocompress']==1?'?uncompress=on':'';
$pkgfile = "http://$server/get/$params[0]".$getoption;
} else {
$pkgfile = $params[0];
$errors = array();
$downloaded = array();
$err = $downloader->download($params);
if (PEAR::isError($err)) {
return $err;
}
$this->bytes_downloaded = 0;
$saved = PEAR_Common::downloadHttp($pkgfile, $this->ui, '.',
array(&$this, 'downloadCallback'));
if (PEAR::isError($saved)) {
return $this->raiseError($saved);
$errors = $downloader->getErrorMsgs();
if (count($errors)) {
foreach ($errors as $error) {
if ($error !== null) {
$this->ui->outputData($error);
}
}
return $this->raiseError("$command failed");
}
$fname = basename($saved);
$this->ui->outputData("File $fname downloaded ($this->bytes_downloaded bytes)", $command);
$downloaded = $downloader->getDownloadedPackages();
foreach ($downloaded as $pkg) {
$this->ui->outputData("File $pkg[file] downloaded", $command);
}
return true;
}
@@ -329,107 +635,176 @@ parameter.
}
}
// }}}
// {{{ doListUpgrades()
function doListUpgrades($command, $options, $params)
{
include_once "PEAR/Registry.php";
$remote = new PEAR_Remote($this->config);
if (empty($params[0])) {
$state = $this->config->get('preferred_state');
} else {
$state = $params[0];
require_once 'PEAR/Common.php';
if (isset($params[0]) && !is_array(PEAR_Common::betterStates($params[0]))) {
return $this->raiseError($params[0] . ' is not a valid state (stable/beta/alpha/devel/etc.) try "pear help list-upgrades"');
}
$caption = 'Available Upgrades';
if (empty($state) || $state == 'any') {
$latest = $remote->call("package.listLatestReleases");
} else {
$latest = $remote->call("package.listLatestReleases", $state);
$caption .= ' (' . implode(', ', PEAR_Common::betterStates($state, true)) . ')';
}
$caption .= ':';
if (PEAR::isError($latest)) {
return $latest;
}
$reg = new PEAR_Registry($this->config->get('php_dir'));
$inst = array_flip($reg->listPackages());
$data = array(
'caption' => $caption,
'border' => 1,
'headline' => array('Package', 'Local', 'Remote', 'Size'),
);
foreach ((array)$latest as $pkg => $info) {
$package = strtolower($pkg);
if (!isset($inst[$package])) {
// skip packages we don't have installed
$savechannel = $channel = $this->config->get('default_channel');
$reg = &$this->config->getRegistry();
foreach ($reg->listChannels() as $channel) {
$inst = array_flip($reg->listPackages($channel));
if (!count($inst)) {
continue;
}
extract($info);
$pkginfo = $reg->packageInfo($package);
$inst_version = $pkginfo['version'];
$inst_state = $pkginfo['release_state'];
if (version_compare("$version", "$inst_version", "le")) {
// installed version is up-to-date
if ($channel == '__uri') {
continue;
}
if ($filesize >= 20480) {
$filesize += 1024 - ($filesize % 1024);
$fs = sprintf("%dkB", $filesize / 1024);
} elseif ($filesize > 0) {
$filesize += 103 - ($filesize % 103);
$fs = sprintf("%.1fkB", $filesize / 1024.0);
$this->config->set('default_channel', $channel);
$state = empty($params[0]) ? $this->config->get('preferred_state') : $params[0];
$caption = $channel . ' Available Upgrades';
$chan = $reg->getChannel($channel);
if (PEAR::isError($e = $this->_checkChannelForStatus($channel, $chan))) {
return $e;
}
$latest = array();
$base2 = false;
$preferred_mirror = $this->config->get('preferred_mirror');
if ($chan->supportsREST($preferred_mirror) &&
(
//($base2 = $chan->getBaseURL('REST1.4', $preferred_mirror)) ||
($base = $chan->getBaseURL('REST1.0', $preferred_mirror))
)
) {
if ($base2) {
$rest = &$this->config->getREST('1.4', array());
$base = $base2;
} else {
$rest = &$this->config->getREST('1.0', array());
}
if (empty($state) || $state == 'any') {
$state = false;
} else {
$caption .= ' (' . implode(', ', PEAR_Common::betterStates($state, true)) . ')';
}
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$latest = $rest->listLatestUpgrades($base, $state, $inst, $channel, $reg);
PEAR::staticPopErrorHandling();
}
if (PEAR::isError($latest)) {
$this->ui->outputData($latest->getMessage());
continue;
}
$caption .= ':';
if (PEAR::isError($latest)) {
$this->config->set('default_channel', $savechannel);
return $latest;
}
$data = array(
'caption' => $caption,
'border' => 1,
'headline' => array('Channel', 'Package', 'Local', 'Remote', 'Size'),
'channel' => $channel
);
foreach ((array)$latest as $pkg => $info) {
$package = strtolower($pkg);
if (!isset($inst[$package])) {
// skip packages we don't have installed
continue;
}
extract($info);
$inst_version = $reg->packageInfo($package, 'version', $channel);
$inst_state = $reg->packageInfo($package, 'release_state', $channel);
if (version_compare("$version", "$inst_version", "le")) {
// installed version is up-to-date
continue;
}
if ($filesize >= 20480) {
$filesize += 1024 - ($filesize % 1024);
$fs = sprintf("%dkB", $filesize / 1024);
} elseif ($filesize > 0) {
$filesize += 103 - ($filesize % 103);
$fs = sprintf("%.1fkB", $filesize / 1024.0);
} else {
$fs = " -"; // XXX center instead
}
$data['data'][] = array($channel, $pkg, "$inst_version ($inst_state)", "$version ($state)", $fs);
}
if (isset($options['channelinfo'])) {
if (empty($data['data'])) {
unset($data['headline']);
if (count($inst) == 0) {
$data['data'] = '(no packages installed)';
} else {
$data['data'] = '(no upgrades available)';
}
}
$this->ui->outputData($data, $command);
} else {
$fs = " -"; // XXX center instead
if (empty($data['data'])) {
$this->ui->outputData('Channel ' . $channel . ': No upgrades available');
} else {
$this->ui->outputData($data, $command);
}
}
$data['data'][] = array($pkg, "$inst_version ($inst_state)", "$version ($state)", $fs);
}
if (empty($data['data'])) {
$this->ui->outputData('No upgrades available');
} else {
$this->ui->outputData($data, $command);
}
$this->config->set('default_channel', $savechannel);
return true;
}
// }}}
// {{{ doClearCache()
function doClearCache($command, $options, $params)
{
$cache_dir = $this->config->get('cache_dir');
$verbose = $this->config->get('verbose');
$verbose = $this->config->get('verbose');
$output = '';
if (!file_exists($cache_dir) || !is_dir($cache_dir)) {
return $this->raiseError("$cache_dir does not exist or is not a directory");
}
if (!($dp = @opendir($cache_dir))) {
return $this->raiseError("opendir($cache_dir) failed: $php_errormsg");
}
if ($verbose >= 1) {
$output .= "reading directory $cache_dir\n";
}
$num = 0;
while ($ent = readdir($dp)) {
if (preg_match('/^xmlrpc_cache_[a-z0-9]{32}$/', $ent)) {
if (preg_match('/rest.cache(file|id)\\z/', $ent)) {
$path = $cache_dir . DIRECTORY_SEPARATOR . $ent;
$ok = @unlink($path);
if (file_exists($path)) {
$ok = @unlink($path);
} else {
$ok = false;
$php_errormsg = '';
}
if ($ok) {
if ($verbose >= 2) {
$output .= "deleted $path\n";
}
$num++;
} elseif ($verbose >= 1) {
$output .= "failed to delete $path\n";
$output .= "failed to delete $path $php_errormsg\n";
}
}
}
closedir($dp);
if ($verbose >= 1) {
$output .= "$num cache entries cleared\n";
}
$this->ui->outputData(rtrim($output), $command);
return $num;
}
// }}}
}
?>
}
+109
View File
@@ -0,0 +1,109 @@
<commands version="1.0">
<remote-info>
<summary>Information About Remote Packages</summary>
<function>doRemoteInfo</function>
<shortcut>ri</shortcut>
<options />
<doc>&lt;package&gt;
Get details on a package from the server.</doc>
</remote-info>
<list-upgrades>
<summary>List Available Upgrades</summary>
<function>doListUpgrades</function>
<shortcut>lu</shortcut>
<options>
<channelinfo>
<shortopt>i</shortopt>
<doc>output fully channel-aware data, even on failure</doc>
</channelinfo>
</options>
<doc>[preferred_state]
List releases on the server of packages you have installed where
a newer version is available with the same release state (stable etc.)
or the state passed as the second parameter.</doc>
</list-upgrades>
<remote-list>
<summary>List Remote Packages</summary>
<function>doRemoteList</function>
<shortcut>rl</shortcut>
<options>
<channel>
<shortopt>c</shortopt>
<doc>specify a channel other than the default channel</doc>
<arg>CHAN</arg>
</channel>
</options>
<doc>
Lists the packages available on the configured server along with the
latest stable release of each package.</doc>
</remote-list>
<search>
<summary>Search remote package database</summary>
<function>doSearch</function>
<shortcut>sp</shortcut>
<options>
<channel>
<shortopt>c</shortopt>
<doc>specify a channel other than the default channel</doc>
<arg>CHAN</arg>
</channel>
<allchannels>
<shortopt>a</shortopt>
<doc>search packages from all known channels</doc>
</allchannels>
<channelinfo>
<shortopt>i</shortopt>
<doc>output fully channel-aware data, even on failure</doc>
</channelinfo>
</options>
<doc>[packagename] [packageinfo]
Lists all packages which match the search parameters. The first
parameter is a fragment of a packagename. The default channel
will be used unless explicitly overridden. The second parameter
will be used to match any portion of the summary/description</doc>
</search>
<list-all>
<summary>List All Packages</summary>
<function>doListAll</function>
<shortcut>la</shortcut>
<options>
<channel>
<shortopt>c</shortopt>
<doc>specify a channel other than the default channel</doc>
<arg>CHAN</arg>
</channel>
<channelinfo>
<shortopt>i</shortopt>
<doc>output fully channel-aware data, even on failure</doc>
</channelinfo>
</options>
<doc>
Lists the packages available on the configured server along with the
latest stable release of each package.</doc>
</list-all>
<download>
<summary>Download Package</summary>
<function>doDownload</function>
<shortcut>d</shortcut>
<options>
<nocompress>
<shortopt>Z</shortopt>
<doc>download an uncompressed (.tar) file</doc>
</nocompress>
</options>
<doc>&lt;package&gt;...
Download package tarballs. The files will be named as suggested by the
server, for example if you download the DB package and the latest stable
version of DB is 1.6.5, the downloaded file will be DB-1.6.5.tgz.</doc>
</download>
<clear-cache>
<summary>Clear Web Services Cache</summary>
<function>doClearCache</function>
<shortcut>cc</shortcut>
<options />
<doc>
Clear the XML-RPC/REST cache. See also the cache_ttl configuration
parameter.
</doc>
</clear-cache>
</commands>
+337
View File
@@ -0,0 +1,337 @@
<?php
/**
* PEAR_Command_Test (run-tests)
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Martin Jansen <mj@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Test.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 0.1
*/
/**
* base class
*/
require_once 'PEAR/Command/Common.php';
/**
* PEAR commands for login/logout
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Martin Jansen <mj@php.net>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 0.1
*/
class PEAR_Command_Test extends PEAR_Command_Common
{
var $commands = array(
'run-tests' => array(
'summary' => 'Run Regression Tests',
'function' => 'doRunTests',
'shortcut' => 'rt',
'options' => array(
'recur' => array(
'shortopt' => 'r',
'doc' => 'Run tests in child directories, recursively. 4 dirs deep maximum',
),
'ini' => array(
'shortopt' => 'i',
'doc' => 'actual string of settings to pass to php in format " -d setting=blah"',
'arg' => 'SETTINGS'
),
'realtimelog' => array(
'shortopt' => 'l',
'doc' => 'Log test runs/results as they are run',
),
'quiet' => array(
'shortopt' => 'q',
'doc' => 'Only display detail for failed tests',
),
'simple' => array(
'shortopt' => 's',
'doc' => 'Display simple output for all tests',
),
'package' => array(
'shortopt' => 'p',
'doc' => 'Treat parameters as installed packages from which to run tests',
),
'phpunit' => array(
'shortopt' => 'u',
'doc' => 'Search parameters for AllTests.php, and use that to run phpunit-based tests
If none is found, all .phpt tests will be tried instead.',
),
'tapoutput' => array(
'shortopt' => 't',
'doc' => 'Output run-tests.log in TAP-compliant format',
),
'cgi' => array(
'shortopt' => 'c',
'doc' => 'CGI php executable (needed for tests with POST/GET section)',
'arg' => 'PHPCGI',
),
'coverage' => array(
'shortopt' => 'x',
'doc' => 'Generate a code coverage report (requires Xdebug 2.0.0+)',
),
),
'doc' => '[testfile|dir ...]
Run regression tests with PHP\'s regression testing script (run-tests.php).',
),
);
var $output;
/**
* PEAR_Command_Test constructor.
*
* @access public
*/
function PEAR_Command_Test(&$ui, &$config)
{
parent::PEAR_Command_Common($ui, $config);
}
function doRunTests($command, $options, $params)
{
if (isset($options['phpunit']) && isset($options['tapoutput'])) {
return $this->raiseError('ERROR: cannot use both --phpunit and --tapoutput at the same time');
}
require_once 'PEAR/Common.php';
require_once 'System.php';
$log = new PEAR_Common;
$log->ui = &$this->ui; // slightly hacky, but it will work
$tests = array();
$depth = isset($options['recur']) ? 14 : 1;
if (!count($params)) {
$params[] = '.';
}
if (isset($options['package'])) {
$oldparams = $params;
$params = array();
$reg = &$this->config->getRegistry();
foreach ($oldparams as $param) {
$pname = $reg->parsePackageName($param, $this->config->get('default_channel'));
if (PEAR::isError($pname)) {
return $this->raiseError($pname);
}
$package = &$reg->getPackage($pname['package'], $pname['channel']);
if (!$package) {
return PEAR::raiseError('Unknown package "' .
$reg->parsedPackageNameToString($pname) . '"');
}
$filelist = $package->getFilelist();
foreach ($filelist as $name => $atts) {
if (isset($atts['role']) && $atts['role'] != 'test') {
continue;
}
if (isset($options['phpunit']) && preg_match('/AllTests\.php\\z/i', $name)) {
$params[] = $atts['installed_as'];
continue;
} elseif (!preg_match('/\.phpt\\z/', $name)) {
continue;
}
$params[] = $atts['installed_as'];
}
}
}
foreach ($params as $p) {
if (is_dir($p)) {
if (isset($options['phpunit'])) {
$dir = System::find(array($p, '-type', 'f',
'-maxdepth', $depth,
'-name', 'AllTests.php'));
if (count($dir)) {
foreach ($dir as $p) {
$p = realpath($p);
if (!count($tests) ||
(count($tests) && strlen($p) < strlen($tests[0]))) {
// this is in a higher-level directory, use this one instead.
$tests = array($p);
}
}
}
continue;
}
$args = array($p, '-type', 'f', '-name', '*.phpt');
} else {
if (isset($options['phpunit'])) {
if (preg_match('/AllTests\.php\\z/i', $p)) {
$p = realpath($p);
if (!count($tests) ||
(count($tests) && strlen($p) < strlen($tests[0]))) {
// this is in a higher-level directory, use this one instead.
$tests = array($p);
}
}
continue;
}
if (file_exists($p) && preg_match('/\.phpt$/', $p)) {
$tests[] = $p;
continue;
}
if (!preg_match('/\.phpt\\z/', $p)) {
$p .= '.phpt';
}
$args = array(dirname($p), '-type', 'f', '-name', $p);
}
if (!isset($options['recur'])) {
$args[] = '-maxdepth';
$args[] = 1;
}
$dir = System::find($args);
$tests = array_merge($tests, $dir);
}
$ini_settings = '';
if (isset($options['ini'])) {
$ini_settings .= $options['ini'];
}
if (isset($_ENV['TEST_PHP_INCLUDE_PATH'])) {
$ini_settings .= " -d include_path={$_ENV['TEST_PHP_INCLUDE_PATH']}";
}
if ($ini_settings) {
$this->ui->outputData('Using INI settings: "' . $ini_settings . '"');
}
$skipped = $passed = $failed = array();
$tests_count = count($tests);
$this->ui->outputData('Running ' . $tests_count . ' tests', $command);
$start = time();
if (isset($options['realtimelog']) && file_exists('run-tests.log')) {
unlink('run-tests.log');
}
if (isset($options['tapoutput'])) {
$tap = '1..' . $tests_count . "\n";
}
require_once 'PEAR/RunTest.php';
$run = new PEAR_RunTest($log, $options);
$run->tests_count = $tests_count;
if (isset($options['coverage']) && extension_loaded('xdebug')){
$run->xdebug_loaded = true;
} else {
$run->xdebug_loaded = false;
}
$j = $i = 1;
foreach ($tests as $t) {
if (isset($options['realtimelog'])) {
$fp = @fopen('run-tests.log', 'a');
if ($fp) {
fwrite($fp, "Running test [$i / $tests_count] $t...");
fclose($fp);
}
}
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
if (isset($options['phpunit'])) {
$result = $run->runPHPUnit($t, $ini_settings);
} else {
$result = $run->run($t, $ini_settings, $j);
}
PEAR::staticPopErrorHandling();
if (PEAR::isError($result)) {
$this->ui->log($result->getMessage());
continue;
}
if (isset($options['tapoutput'])) {
$tap .= $result[0] . ' ' . $i . $result[1] . "\n";
continue;
}
if (isset($options['realtimelog'])) {
$fp = @fopen('run-tests.log', 'a');
if ($fp) {
fwrite($fp, "$result\n");
fclose($fp);
}
}
if ($result == 'FAILED') {
$failed[] = $t;
}
if ($result == 'PASSED') {
$passed[] = $t;
}
if ($result == 'SKIPPED') {
$skipped[] = $t;
}
$j++;
}
$total = date('i:s', time() - $start);
if (isset($options['tapoutput'])) {
$fp = @fopen('run-tests.log', 'w');
if ($fp) {
fwrite($fp, $tap, strlen($tap));
fclose($fp);
$this->ui->outputData('wrote TAP-format log to "' .realpath('run-tests.log') .
'"', $command);
}
} else {
if (count($failed)) {
$output = "TOTAL TIME: $total\n";
$output .= count($passed) . " PASSED TESTS\n";
$output .= count($skipped) . " SKIPPED TESTS\n";
$output .= count($failed) . " FAILED TESTS:\n";
foreach ($failed as $failure) {
$output .= $failure . "\n";
}
$mode = isset($options['realtimelog']) ? 'a' : 'w';
$fp = @fopen('run-tests.log', $mode);
if ($fp) {
fwrite($fp, $output, strlen($output));
fclose($fp);
$this->ui->outputData('wrote log to "' . realpath('run-tests.log') . '"', $command);
}
} elseif (file_exists('run-tests.log') && !is_dir('run-tests.log')) {
@unlink('run-tests.log');
}
}
$this->ui->outputData('TOTAL TIME: ' . $total);
$this->ui->outputData(count($passed) . ' PASSED TESTS', $command);
$this->ui->outputData(count($skipped) . ' SKIPPED TESTS', $command);
if (count($failed)) {
$this->ui->outputData(count($failed) . ' FAILED TESTS:', $command);
foreach ($failed as $failure) {
$this->ui->outputData($failure, $command);
}
}
return true;
}
}
+54
View File
@@ -0,0 +1,54 @@
<commands version="1.0">
<run-tests>
<summary>Run Regression Tests</summary>
<function>doRunTests</function>
<shortcut>rt</shortcut>
<options>
<recur>
<shortopt>r</shortopt>
<doc>Run tests in child directories, recursively. 4 dirs deep maximum</doc>
</recur>
<ini>
<shortopt>i</shortopt>
<doc>actual string of settings to pass to php in format &quot; -d setting=blah&quot;</doc>
<arg>SETTINGS</arg>
</ini>
<realtimelog>
<shortopt>l</shortopt>
<doc>Log test runs/results as they are run</doc>
</realtimelog>
<quiet>
<shortopt>q</shortopt>
<doc>Only display detail for failed tests</doc>
</quiet>
<simple>
<shortopt>s</shortopt>
<doc>Display simple output for all tests</doc>
</simple>
<package>
<shortopt>p</shortopt>
<doc>Treat parameters as installed packages from which to run tests</doc>
</package>
<phpunit>
<shortopt>u</shortopt>
<doc>Search parameters for AllTests.php, and use that to run phpunit-based tests
If none is found, all .phpt tests will be tried instead.</doc>
</phpunit>
<tapoutput>
<shortopt>t</shortopt>
<doc>Output run-tests.log in TAP-compliant format</doc>
</tapoutput>
<cgi>
<shortopt>c</shortopt>
<doc>CGI php executable (needed for tests with POST/GET section)</doc>
<arg>PHPCGI</arg>
</cgi>
<coverage>
<shortopt>x</shortopt>
<doc>Generate a code coverage report (requires Xdebug 2.0.0+)</doc>
</coverage>
</options>
<doc>[testfile|dir ...]
Run regression tests with PHP&#039;s regression testing script (run-tests.php).</doc>
</run-tests>
</commands>
+354 -1611
View File
File diff suppressed because it is too large Load Diff
+1165 -237
View File
File diff suppressed because it is too large Load Diff
+1358
View File
File diff suppressed because it is too large Load Diff
+769
View File
@@ -0,0 +1,769 @@
<?php
/**
* PEAR_DependencyDB, advanced installed packages dependency database
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Tomas V. V. Cox <cox@idecnet.com>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: DependencyDB.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
/**
* Needed for error handling
*/
require_once 'PEAR.php';
require_once 'PEAR/Config.php';
$GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'] = array();
/**
* Track dependency relationships between installed packages
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @author Tomas V.V.Cox <cox@idec.net.com>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
class PEAR_DependencyDB
{
// {{{ properties
/**
* This is initialized by {@link setConfig()}
* @var PEAR_Config
* @access private
*/
var $_config;
/**
* This is initialized by {@link setConfig()}
* @var PEAR_Registry
* @access private
*/
var $_registry;
/**
* Filename of the dependency DB (usually .depdb)
* @var string
* @access private
*/
var $_depdb = false;
/**
* File name of the lockfile (usually .depdblock)
* @var string
* @access private
*/
var $_lockfile = false;
/**
* Open file resource for locking the lockfile
* @var resource|false
* @access private
*/
var $_lockFp = false;
/**
* API version of this class, used to validate a file on-disk
* @var string
* @access private
*/
var $_version = '1.0';
/**
* Cached dependency database file
* @var array|null
* @access private
*/
var $_cache;
// }}}
// {{{ & singleton()
/**
* Get a raw dependency database. Calls setConfig() and assertDepsDB()
* @param PEAR_Config
* @param string|false full path to the dependency database, or false to use default
* @return PEAR_DependencyDB|PEAR_Error
* @static
*/
function &singleton(&$config, $depdb = false)
{
$phpdir = $config->get('php_dir', null, 'pear.php.net');
if (!isset($GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'][$phpdir])) {
$a = new PEAR_DependencyDB;
$GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'][$phpdir] = &$a;
$a->setConfig($config, $depdb);
$e = $a->assertDepsDB();
if (PEAR::isError($e)) {
return $e;
}
}
return $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'][$phpdir];
}
/**
* Set up the registry/location of dependency DB
* @param PEAR_Config|false
* @param string|false full path to the dependency database, or false to use default
*/
function setConfig(&$config, $depdb = false)
{
if (!$config) {
$this->_config = &PEAR_Config::singleton();
} else {
$this->_config = &$config;
}
$this->_registry = &$this->_config->getRegistry();
if (!$depdb) {
$this->_depdb = $this->_config->get('php_dir', null, 'pear.php.net') .
DIRECTORY_SEPARATOR . '.depdb';
} else {
$this->_depdb = $depdb;
}
$this->_lockfile = dirname($this->_depdb) . DIRECTORY_SEPARATOR . '.depdblock';
}
// }}}
function hasWriteAccess()
{
if (!file_exists($this->_depdb)) {
$dir = $this->_depdb;
while ($dir && $dir != '.') {
$dir = dirname($dir); // cd ..
if ($dir != '.' && file_exists($dir)) {
if (is_writeable($dir)) {
return true;
}
return false;
}
}
return false;
}
return is_writeable($this->_depdb);
}
// {{{ assertDepsDB()
/**
* Create the dependency database, if it doesn't exist. Error if the database is
* newer than the code reading it.
* @return void|PEAR_Error
*/
function assertDepsDB()
{
if (!is_file($this->_depdb)) {
$this->rebuildDB();
return;
}
$depdb = $this->_getDepDB();
// Datatype format has been changed, rebuild the Deps DB
if ($depdb['_version'] < $this->_version) {
$this->rebuildDB();
}
if ($depdb['_version']{0} > $this->_version{0}) {
return PEAR::raiseError('Dependency database is version ' .
$depdb['_version'] . ', and we are version ' .
$this->_version . ', cannot continue');
}
}
/**
* Get a list of installed packages that depend on this package
* @param PEAR_PackageFile_v1|PEAR_PackageFile_v2|array
* @return array|false
*/
function getDependentPackages(&$pkg)
{
$data = $this->_getDepDB();
if (is_object($pkg)) {
$channel = strtolower($pkg->getChannel());
$package = strtolower($pkg->getPackage());
} else {
$channel = strtolower($pkg['channel']);
$package = strtolower($pkg['package']);
}
if (isset($data['packages'][$channel][$package])) {
return $data['packages'][$channel][$package];
}
return false;
}
/**
* Get a list of the actual dependencies of installed packages that depend on
* a package.
* @param PEAR_PackageFile_v1|PEAR_PackageFile_v2|array
* @return array|false
*/
function getDependentPackageDependencies(&$pkg)
{
$data = $this->_getDepDB();
if (is_object($pkg)) {
$channel = strtolower($pkg->getChannel());
$package = strtolower($pkg->getPackage());
} else {
$channel = strtolower($pkg['channel']);
$package = strtolower($pkg['package']);
}
$depend = $this->getDependentPackages($pkg);
if (!$depend) {
return false;
}
$dependencies = array();
foreach ($depend as $info) {
$temp = $this->getDependencies($info);
foreach ($temp as $dep) {
if (
isset($dep['dep'], $dep['dep']['channel'], $dep['dep']['name']) &&
strtolower($dep['dep']['channel']) == $channel &&
strtolower($dep['dep']['name']) == $package
) {
if (!isset($dependencies[$info['channel']])) {
$dependencies[$info['channel']] = array();
}
if (!isset($dependencies[$info['channel']][$info['package']])) {
$dependencies[$info['channel']][$info['package']] = array();
}
$dependencies[$info['channel']][$info['package']][] = $dep;
}
}
}
return $dependencies;
}
/**
* Get a list of dependencies of this installed package
* @param PEAR_PackageFile_v1|PEAR_PackageFile_v2|array
* @return array|false
*/
function getDependencies(&$pkg)
{
if (is_object($pkg)) {
$channel = strtolower($pkg->getChannel());
$package = strtolower($pkg->getPackage());
} else {
$channel = strtolower($pkg['channel']);
$package = strtolower($pkg['package']);
}
$data = $this->_getDepDB();
if (isset($data['dependencies'][$channel][$package])) {
return $data['dependencies'][$channel][$package];
}
return false;
}
/**
* Determine whether $parent depends on $child, near or deep
* @param array|PEAR_PackageFile_v2|PEAR_PackageFile_v2
* @param array|PEAR_PackageFile_v2|PEAR_PackageFile_v2
*/
function dependsOn($parent, $child)
{
$c = array();
$this->_getDepDB();
return $this->_dependsOn($parent, $child, $c);
}
function _dependsOn($parent, $child, &$checked)
{
if (is_object($parent)) {
$channel = strtolower($parent->getChannel());
$package = strtolower($parent->getPackage());
} else {
$channel = strtolower($parent['channel']);
$package = strtolower($parent['package']);
}
if (is_object($child)) {
$depchannel = strtolower($child->getChannel());
$deppackage = strtolower($child->getPackage());
} else {
$depchannel = strtolower($child['channel']);
$deppackage = strtolower($child['package']);
}
if (isset($checked[$channel][$package][$depchannel][$deppackage])) {
return false; // avoid endless recursion
}
$checked[$channel][$package][$depchannel][$deppackage] = true;
if (!isset($this->_cache['dependencies'][$channel][$package])) {
return false;
}
foreach ($this->_cache['dependencies'][$channel][$package] as $info) {
if (isset($info['dep']['uri'])) {
if (is_object($child)) {
if ($info['dep']['uri'] == $child->getURI()) {
return true;
}
} elseif (isset($child['uri'])) {
if ($info['dep']['uri'] == $child['uri']) {
return true;
}
}
return false;
}
if (strtolower($info['dep']['channel']) == $depchannel &&
strtolower($info['dep']['name']) == $deppackage) {
return true;
}
}
foreach ($this->_cache['dependencies'][$channel][$package] as $info) {
if (isset($info['dep']['uri'])) {
if ($this->_dependsOn(array(
'uri' => $info['dep']['uri'],
'package' => $info['dep']['name']), $child, $checked)) {
return true;
}
} else {
if ($this->_dependsOn(array(
'channel' => $info['dep']['channel'],
'package' => $info['dep']['name']), $child, $checked)) {
return true;
}
}
}
return false;
}
/**
* Register dependencies of a package that is being installed or upgraded
* @param PEAR_PackageFile_v2|PEAR_PackageFile_v2
*/
function installPackage(&$package)
{
$data = $this->_getDepDB();
unset($this->_cache);
$this->_setPackageDeps($data, $package);
$this->_writeDepDB($data);
}
/**
* Remove dependencies of a package that is being uninstalled, or upgraded.
*
* Upgraded packages first uninstall, then install
* @param PEAR_PackageFile_v1|PEAR_PackageFile_v2|array If an array, then it must have
* indices 'channel' and 'package'
*/
function uninstallPackage(&$pkg)
{
$data = $this->_getDepDB();
unset($this->_cache);
if (is_object($pkg)) {
$channel = strtolower($pkg->getChannel());
$package = strtolower($pkg->getPackage());
} else {
$channel = strtolower($pkg['channel']);
$package = strtolower($pkg['package']);
}
if (!isset($data['dependencies'][$channel][$package])) {
return true;
}
foreach ($data['dependencies'][$channel][$package] as $dep) {
$found = false;
$depchannel = isset($dep['dep']['uri']) ? '__uri' : strtolower($dep['dep']['channel']);
$depname = strtolower($dep['dep']['name']);
if (isset($data['packages'][$depchannel][$depname])) {
foreach ($data['packages'][$depchannel][$depname] as $i => $info) {
if ($info['channel'] == $channel && $info['package'] == $package) {
$found = true;
break;
}
}
}
if ($found) {
unset($data['packages'][$depchannel][$depname][$i]);
if (!count($data['packages'][$depchannel][$depname])) {
unset($data['packages'][$depchannel][$depname]);
if (!count($data['packages'][$depchannel])) {
unset($data['packages'][$depchannel]);
}
} else {
$data['packages'][$depchannel][$depname] =
array_values($data['packages'][$depchannel][$depname]);
}
}
}
unset($data['dependencies'][$channel][$package]);
if (!count($data['dependencies'][$channel])) {
unset($data['dependencies'][$channel]);
}
if (!count($data['dependencies'])) {
unset($data['dependencies']);
}
if (!count($data['packages'])) {
unset($data['packages']);
}
$this->_writeDepDB($data);
}
/**
* Rebuild the dependency DB by reading registry entries.
* @return true|PEAR_Error
*/
function rebuildDB()
{
$depdb = array('_version' => $this->_version);
if (!$this->hasWriteAccess()) {
// allow startup for read-only with older Registry
return $depdb;
}
$packages = $this->_registry->listAllPackages();
if (PEAR::isError($packages)) {
return $packages;
}
foreach ($packages as $channel => $ps) {
foreach ($ps as $package) {
$package = $this->_registry->getPackage($package, $channel);
if (PEAR::isError($package)) {
return $package;
}
$this->_setPackageDeps($depdb, $package);
}
}
$error = $this->_writeDepDB($depdb);
if (PEAR::isError($error)) {
return $error;
}
$this->_cache = $depdb;
return true;
}
/**
* Register usage of the dependency DB to prevent race conditions
* @param int one of the LOCK_* constants
* @return true|PEAR_Error
* @access private
*/
function _lock($mode = LOCK_EX)
{
if (stristr(php_uname(), 'Windows 9')) {
return true;
}
if ($mode != LOCK_UN && is_resource($this->_lockFp)) {
// XXX does not check type of lock (LOCK_SH/LOCK_EX)
return true;
}
$open_mode = 'w';
// XXX People reported problems with LOCK_SH and 'w'
if ($mode === LOCK_SH) {
if (!file_exists($this->_lockfile)) {
touch($this->_lockfile);
} elseif (!is_file($this->_lockfile)) {
return PEAR::raiseError('could not create Dependency lock file, ' .
'it exists and is not a regular file');
}
$open_mode = 'r';
}
if (!is_resource($this->_lockFp)) {
$this->_lockFp = @fopen($this->_lockfile, $open_mode);
}
if (!is_resource($this->_lockFp)) {
return PEAR::raiseError("could not create Dependency lock file" .
(isset($php_errormsg) ? ": " . $php_errormsg : ""));
}
if (!(int)flock($this->_lockFp, $mode)) {
switch ($mode) {
case LOCK_SH: $str = 'shared'; break;
case LOCK_EX: $str = 'exclusive'; break;
case LOCK_UN: $str = 'unlock'; break;
default: $str = 'unknown'; break;
}
return PEAR::raiseError("could not acquire $str lock ($this->_lockfile)");
}
return true;
}
/**
* Release usage of dependency DB
* @return true|PEAR_Error
* @access private
*/
function _unlock()
{
$ret = $this->_lock(LOCK_UN);
if (is_resource($this->_lockFp)) {
fclose($this->_lockFp);
}
$this->_lockFp = null;
return $ret;
}
/**
* Load the dependency database from disk, or return the cache
* @return array|PEAR_Error
*/
function _getDepDB()
{
if (!$this->hasWriteAccess()) {
return array('_version' => $this->_version);
}
if (isset($this->_cache)) {
return $this->_cache;
}
if (!$fp = fopen($this->_depdb, 'r')) {
$err = PEAR::raiseError("Could not open dependencies file `".$this->_depdb."'");
return $err;
}
$rt = get_magic_quotes_runtime();
set_magic_quotes_runtime(0);
clearstatcache();
fclose($fp);
$data = unserialize(file_get_contents($this->_depdb));
set_magic_quotes_runtime($rt);
$this->_cache = $data;
return $data;
}
/**
* Write out the dependency database to disk
* @param array the database
* @return true|PEAR_Error
* @access private
*/
function _writeDepDB(&$deps)
{
if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
return $e;
}
if (!$fp = fopen($this->_depdb, 'wb')) {
$this->_unlock();
return PEAR::raiseError("Could not open dependencies file `".$this->_depdb."' for writing");
}
$rt = get_magic_quotes_runtime();
set_magic_quotes_runtime(0);
fwrite($fp, serialize($deps));
set_magic_quotes_runtime($rt);
fclose($fp);
$this->_unlock();
$this->_cache = $deps;
return true;
}
/**
* Register all dependencies from a package in the dependencies database, in essence
* "installing" the package's dependency information
* @param array the database
* @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
* @access private
*/
function _setPackageDeps(&$data, &$pkg)
{
$pkg->setConfig($this->_config);
if ($pkg->getPackagexmlVersion() == '1.0') {
$gen = &$pkg->getDefaultGenerator();
$deps = $gen->dependenciesToV2();
} else {
$deps = $pkg->getDeps(true);
}
if (!$deps) {
return;
}
if (!is_array($data)) {
$data = array();
}
if (!isset($data['dependencies'])) {
$data['dependencies'] = array();
}
$channel = strtolower($pkg->getChannel());
$package = strtolower($pkg->getPackage());
if (!isset($data['dependencies'][$channel])) {
$data['dependencies'][$channel] = array();
}
$data['dependencies'][$channel][$package] = array();
if (isset($deps['required']['package'])) {
if (!isset($deps['required']['package'][0])) {
$deps['required']['package'] = array($deps['required']['package']);
}
foreach ($deps['required']['package'] as $dep) {
$this->_registerDep($data, $pkg, $dep, 'required');
}
}
if (isset($deps['optional']['package'])) {
if (!isset($deps['optional']['package'][0])) {
$deps['optional']['package'] = array($deps['optional']['package']);
}
foreach ($deps['optional']['package'] as $dep) {
$this->_registerDep($data, $pkg, $dep, 'optional');
}
}
if (isset($deps['required']['subpackage'])) {
if (!isset($deps['required']['subpackage'][0])) {
$deps['required']['subpackage'] = array($deps['required']['subpackage']);
}
foreach ($deps['required']['subpackage'] as $dep) {
$this->_registerDep($data, $pkg, $dep, 'required');
}
}
if (isset($deps['optional']['subpackage'])) {
if (!isset($deps['optional']['subpackage'][0])) {
$deps['optional']['subpackage'] = array($deps['optional']['subpackage']);
}
foreach ($deps['optional']['subpackage'] as $dep) {
$this->_registerDep($data, $pkg, $dep, 'optional');
}
}
if (isset($deps['group'])) {
if (!isset($deps['group'][0])) {
$deps['group'] = array($deps['group']);
}
foreach ($deps['group'] as $group) {
if (isset($group['package'])) {
if (!isset($group['package'][0])) {
$group['package'] = array($group['package']);
}
foreach ($group['package'] as $dep) {
$this->_registerDep($data, $pkg, $dep, 'optional',
$group['attribs']['name']);
}
}
if (isset($group['subpackage'])) {
if (!isset($group['subpackage'][0])) {
$group['subpackage'] = array($group['subpackage']);
}
foreach ($group['subpackage'] as $dep) {
$this->_registerDep($data, $pkg, $dep, 'optional',
$group['attribs']['name']);
}
}
}
}
if ($data['dependencies'][$channel][$package] == array()) {
unset($data['dependencies'][$channel][$package]);
if (!count($data['dependencies'][$channel])) {
unset($data['dependencies'][$channel]);
}
}
}
/**
* @param array the database
* @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
* @param array the specific dependency
* @param required|optional whether this is a required or an optional dep
* @param string|false dependency group this dependency is from, or false for ordinary dep
*/
function _registerDep(&$data, &$pkg, $dep, $type, $group = false)
{
$info = array(
'dep' => $dep,
'type' => $type,
'group' => $group
);
$dep = array_map('strtolower', $dep);
$depchannel = isset($dep['channel']) ? $dep['channel'] : '__uri';
if (!isset($data['dependencies'])) {
$data['dependencies'] = array();
}
$channel = strtolower($pkg->getChannel());
$package = strtolower($pkg->getPackage());
if (!isset($data['dependencies'][$channel])) {
$data['dependencies'][$channel] = array();
}
if (!isset($data['dependencies'][$channel][$package])) {
$data['dependencies'][$channel][$package] = array();
}
$data['dependencies'][$channel][$package][] = $info;
if (isset($data['packages'][$depchannel][$dep['name']])) {
$found = false;
foreach ($data['packages'][$depchannel][$dep['name']] as $i => $p) {
if ($p['channel'] == $channel && $p['package'] == $package) {
$found = true;
break;
}
}
} else {
if (!isset($data['packages'])) {
$data['packages'] = array();
}
if (!isset($data['packages'][$depchannel])) {
$data['packages'][$depchannel] = array();
}
if (!isset($data['packages'][$depchannel][$dep['name']])) {
$data['packages'][$depchannel][$dep['name']] = array();
}
$found = false;
}
if (!$found) {
$data['packages'][$depchannel][$dep['name']][] = array(
'channel' => $channel,
'package' => $package
);
}
}
}
+1554 -468
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+62 -58
View File
@@ -1,24 +1,4 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Gregory Beaver <cellog@php.net> |
// | |
// +----------------------------------------------------------------------+
//
// $Id: ErrorStack.php,v 1.7.2.5 2005/01/01 21:26:51 cellog Exp $
/**
* Error Stack Implementation
*
@@ -38,11 +18,13 @@
*
* Since version PEAR1.3.2, ErrorStack no longer instantiates an exception class. This can
* still be done quite handily in an error callback or by manipulating the returned array
* @author Greg Beaver <cellog@php.net>
* @version PEAR1.3.2 (beta)
* @package PEAR_ErrorStack
* @category Debugging
* @license http://www.php.net/license/3_0.txt PHP License v3.0
* @category Debugging
* @package PEAR_ErrorStack
* @author Greg Beaver <cellog@php.net>
* @copyright 2004-2008 Greg Beaver
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: ErrorStack.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR_ErrorStack
*/
/**
@@ -149,9 +131,14 @@ define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);
* // local error stack
* $local_stack = new PEAR_ErrorStack('MyPackage');
* </code>
* @copyright 2004 Gregory Beaver
* @package PEAR_ErrorStack
* @license http://www.php.net/license/3_0.txt PHP License
* @author Greg Beaver <cellog@php.net>
* @version 1.9.4
* @package PEAR_ErrorStack
* @category Debugging
* @copyright 2004-2008 Greg Beaver
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: ErrorStack.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR_ErrorStack
*/
class PEAR_ErrorStack {
/**
@@ -281,8 +268,10 @@ class PEAR_ErrorStack {
'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)',
false, $trace);
}
return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =
&new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error);
$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =
new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error);
return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
}
/**
@@ -487,19 +476,10 @@ class PEAR_ErrorStack {
* @param array $backtrace Protected parameter: use this to pass in the
* {@link debug_backtrace()} that should be used
* to find error context
* @return PEAR_Error|array|Exception
* if compatibility mode is on, a PEAR_Error is also
* thrown. If the class Exception exists, then one
* is returned to allow code like:
* <code>
* throw ($stack->push(MY_ERROR_CODE, 'error', array('username' => 'grob')));
* </code>
* @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
* thrown. If a PEAR_Error is returned, the userinfo
* property is set to the following array:
*
* The errorData property of the exception class will be set to the array
* that would normally be returned. If a PEAR_Error is returned, the userinfo
* property is set to the array
*
* Otherwise, an array is returned in this format:
* <code>
* array(
* 'code' => $code,
@@ -512,6 +492,8 @@ class PEAR_ErrorStack {
* //['repackage' => $err] repackaged error array/Exception class
* );
* </code>
*
* Normally, the previous array is returned.
*/
function push($code, $level = 'error', $params = array(), $msg = false,
$repackage = false, $backtrace = false)
@@ -538,16 +520,16 @@ class PEAR_ErrorStack {
'message' => $msg,
);
if ($repackage) {
$err['repackage'] = $repackage;
}
// set up the error message, if necessary
if ($this->_msgCallback) {
$msg = call_user_func_array($this->_msgCallback,
array(&$this, $err));
$err['message'] = $msg;
}
if ($repackage) {
$err['repackage'] = $repackage;
}
$push = $log = true;
$die = false;
// try the overriding callback first
@@ -586,6 +568,9 @@ class PEAR_ErrorStack {
}
if ($push) {
array_unshift($this->_errors, $err);
if (!isset($this->_errorsByLevel[$err['level']])) {
$this->_errorsByLevel[$err['level']] = array();
}
$this->_errorsByLevel[$err['level']][] = &$this->_errors[0];
}
if ($log) {
@@ -617,13 +602,8 @@ class PEAR_ErrorStack {
* @param array $backtrace Protected parameter: use this to pass in the
* {@link debug_backtrace()} that should be used
* to find error context
* @return PEAR_Error|null|Exception
* if compatibility mode is on, a PEAR_Error is also
* thrown. If the class Exception exists, then one
* is returned to allow code like:
* <code>
* throw ($stack->push(MY_ERROR_CODE, 'error', array('username' => 'grob')));
* </code>
* @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also
* thrown. see docs for {@link push()}
* @static
*/
function staticPush($package, $code, $level = 'error', $params = array(),
@@ -684,9 +664,33 @@ class PEAR_ErrorStack {
*/
function pop()
{
return @array_shift($this->_errors);
$err = @array_shift($this->_errors);
if (!is_null($err)) {
@array_pop($this->_errorsByLevel[$err['level']]);
if (!count($this->_errorsByLevel[$err['level']])) {
unset($this->_errorsByLevel[$err['level']]);
}
}
return $err;
}
/**
* Pop an error off of the error stack, static method
*
* @param string package name
* @return boolean
* @since PEAR1.5.0a1
*/
function staticPop($package)
{
if ($package) {
if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
return false;
}
return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->pop();
}
}
/**
* Determine whether there are any errors on the stack
* @param string|array Level name. Use to determine if any errors
@@ -853,7 +857,7 @@ class PEAR_ErrorStack {
'line' => $filebacktrace['line']);
// rearrange for eval'd code or create function errors
if (strpos($filebacktrace['file'], '(') &&
preg_match(';^(.*?)\((\d+)\) : (.*?)$;', $filebacktrace['file'],
preg_match(';^(.*?)\((\d+)\) : (.*?)\\z;', $filebacktrace['file'],
$matches)) {
$ret['file'] = $matches[1];
$ret['line'] = $matches[2] + 0;
@@ -910,7 +914,7 @@ class PEAR_ErrorStack {
$mainmsg = $stack->getErrorMessageTemplate($err['code']);
}
$mainmsg = str_replace('%__msg%', $err['message'], $mainmsg);
if (count($err['params'])) {
if (is_array($err['params']) && count($err['params'])) {
foreach ($err['params'] as $name => $val) {
if (is_array($val)) {
// @ is needed in case $val is a multi-dimensional array
@@ -978,4 +982,4 @@ class PEAR_ErrorStack {
}
$stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
$stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
?>
?>
+84 -54
View File
@@ -1,34 +1,27 @@
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
// +----------------------------------------------------------------------+
// | PEAR_Exception |
// +----------------------------------------------------------------------+
// | Copyright (c) 2004 The PEAR Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Tomas V.V.Cox <cox@idecnet.com> |
// | Hans Lellelid <hans@velum.net> |
// | Bertrand Mansion <bmansion@mamasam.com> |
// | Greg Beaver <cellog@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: Exception.php,v 1.4.2.2 2004/12/31 19:01:52 cellog Exp $
/**
* PEAR_Exception
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Tomas V. V. Cox <cox@idecnet.com>
* @author Hans Lellelid <hans@velum.net>
* @author Bertrand Mansion <bmansion@mamasam.com>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Exception.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.3.3
*/
/**
* Base PEAR_Exception Class
*
* WARNING: This code should be considered stable, but the API is
* subject to immediate and drastic change, so API stability is
* at best alpha
*
* 1) Features:
*
* - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception))
@@ -88,12 +81,17 @@
* }
* </code>
*
* @since PHP 5
* @package PEAR
* @version $Revision: 1.4.2.2 $
* @author Tomas V.V.Cox <cox@idecnet.com>
* @author Hans Lellelid <hans@velum.net>
* @author Bertrand Mansion <bmansion@mamasam.com>
* @category pear
* @package PEAR
* @author Tomas V.V.Cox <cox@idecnet.com>
* @author Hans Lellelid <hans@velum.net>
* @author Bertrand Mansion <bmansion@mamasam.com>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.3.3
*
*/
class PEAR_Exception extends Exception
@@ -108,19 +106,31 @@ class PEAR_Exception extends Exception
/**
* Supported signatures:
* PEAR_Exception(string $message);
* PEAR_Exception(string $message, int $code);
* PEAR_Exception(string $message, Exception $cause);
* PEAR_Exception(string $message, Exception $cause, int $code);
* PEAR_Exception(string $message, array $causes);
* PEAR_Exception(string $message, array $causes, int $code);
* - PEAR_Exception(string $message);
* - PEAR_Exception(string $message, int $code);
* - PEAR_Exception(string $message, Exception $cause);
* - PEAR_Exception(string $message, Exception $cause, int $code);
* - PEAR_Exception(string $message, PEAR_Error $cause);
* - PEAR_Exception(string $message, PEAR_Error $cause, int $code);
* - PEAR_Exception(string $message, array $causes);
* - PEAR_Exception(string $message, array $causes, int $code);
* @param string exception message
* @param int|Exception|PEAR_Error|array|null exception cause
* @param int|null exception code or null
*/
public function __construct($message, $p2 = null, $p3 = null)
{
if (is_int($p2)) {
$code = $p2;
$this->cause = null;
} elseif ($p2 instanceof Exception || is_array($p2)) {
} elseif (is_object($p2) || is_array($p2)) {
// using is_object allows both Exception and PEAR_Error
if (is_object($p2) && !($p2 instanceof Exception)) {
if (!class_exists('PEAR_Error') || !($p2 instanceof PEAR_Error)) {
throw new PEAR_Exception('exception cause must be Exception, ' .
'array, or PEAR_Error');
}
}
$code = $p3;
if (is_array($p2) && isset($p2['message'])) {
// fix potential problem of passing in a single warning
@@ -128,7 +138,7 @@ class PEAR_Exception extends Exception
}
$this->cause = $p2;
} else {
$code = null;
$code = null;
$this->cause = null;
}
parent::__construct($message, $code);
@@ -234,13 +244,33 @@ class PEAR_Exception extends Exception
$cause['line'] = $trace[0]['line'];
}
}
$causes[] = $cause;
if ($this->cause instanceof PEAR_Exception) {
$this->cause->getCauseMessage($causes);
}
if (is_array($this->cause)) {
} elseif ($this->cause instanceof Exception) {
$causes[] = array('class' => get_class($this->cause),
'message' => $this->cause->getMessage(),
'file' => $this->cause->getFile(),
'line' => $this->cause->getLine());
} elseif (class_exists('PEAR_Error') && $this->cause instanceof PEAR_Error) {
$causes[] = array('class' => get_class($this->cause),
'message' => $this->cause->getMessage(),
'file' => 'unknown',
'line' => 'unknown');
} elseif (is_array($this->cause)) {
foreach ($this->cause as $cause) {
if ($cause instanceof PEAR_Exception) {
$cause->getCauseMessage($causes);
} elseif ($cause instanceof Exception) {
$causes[] = array('class' => get_class($cause),
'message' => $cause->getMessage(),
'file' => $cause->getFile(),
'line' => $cause->getLine());
} elseif (class_exists('PEAR_Error') && $cause instanceof PEAR_Error) {
$causes[] = array('class' => get_class($cause),
'message' => $cause->getMessage(),
'file' => 'unknown',
'line' => 'unknown');
} elseif (is_array($cause) && isset($cause['message'])) {
// PEAR_ErrorStack warning
$causes[] = array(
@@ -259,7 +289,7 @@ class PEAR_Exception extends Exception
}
public function getTraceSafe()
{
{
if (!isset($this->_trace)) {
$this->_trace = $this->getTrace();
if (empty($this->_trace)) {
@@ -288,28 +318,28 @@ class PEAR_Exception extends Exception
return $this->toHtml();
}
return $this->toText();
}
}
public function toHtml()
{
$trace = $this->getTraceSafe();
$causes = array();
$this->getCauseMessage($causes);
$html = '<table border="1" cellspacing="0">' . "\n";
$html = '<table style="border: 1px" cellspacing="0">' . "\n";
foreach ($causes as $i => $cause) {
$html .= '<tr><td colspan="3" bgcolor="#ff9999">'
$html .= '<tr><td colspan="3" style="background: #ff9999">'
. str_repeat('-', $i) . ' <b>' . $cause['class'] . '</b>: '
. htmlspecialchars($cause['message']) . ' in <b>' . $cause['file'] . '</b> '
. 'on line <b>' . $cause['line'] . '</b>'
. "</td></tr>\n";
}
$html .= '<tr><td colspan="3" bgcolor="#aaaaaa" align="center"><b>Exception trace</b></td></tr>' . "\n"
. '<tr><td align="center" bgcolor="#cccccc" width="20"><b>#</b></td>'
. '<td align="center" bgcolor="#cccccc"><b>Function</b></td>'
. '<td align="center" bgcolor="#cccccc"><b>Location</b></td></tr>' . "\n";
$html .= '<tr><td colspan="3" style="background-color: #aaaaaa; text-align: center; font-weight: bold;">Exception trace</td></tr>' . "\n"
. '<tr><td style="text-align: center; background: #cccccc; width:20px; font-weight: bold;">#</td>'
. '<td style="text-align: center; background: #cccccc; font-weight: bold;">Function</td>'
. '<td style="text-align: center; background: #cccccc; font-weight: bold;">Location</td></tr>' . "\n";
foreach ($trace as $k => $v) {
$html .= '<tr><td align="center">' . $k . '</td>'
$html .= '<tr><td style="text-align: center;">' . $k . '</td>'
. '<td>';
if (!empty($v['class'])) {
$html .= $v['class'] . $v['type'];
@@ -333,9 +363,11 @@ class PEAR_Exception extends Exception
}
$html .= '(' . implode(', ',$args) . ')'
. '</td>'
. '<td>' . $v['file'] . ':' . $v['line'] . '</td></tr>' . "\n";
. '<td>' . (isset($v['file']) ? $v['file'] : 'unknown')
. ':' . (isset($v['line']) ? $v['line'] : 'unknown')
. '</td></tr>' . "\n";
}
$html .= '<tr><td align="center">' . ($k+1) . '</td>'
$html .= '<tr><td style="text-align: center;">' . ($k+1) . '</td>'
. '<td>{main}</td>'
. '<td>&nbsp;</td></tr>' . "\n"
. '</table>';
@@ -354,6 +386,4 @@ class PEAR_Exception extends Exception
}
return $causeMsg . $this->getTraceAsString();
}
}
?>
}
+7
View File
@@ -0,0 +1,7 @@
<?php
if ($skipmsg) {
$a = &new $ec($code, $mode, $options, $userinfo);
} else {
$a = &new $ec($message, $code, $mode, $options, $userinfo);
}
?>
+228
View File
@@ -0,0 +1,228 @@
<?php
/**
* PEAR_Frontend, the singleton-based frontend for user input/output
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Frontend.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
/**
* Include error handling
*/
//require_once 'PEAR.php';
/**
* Which user interface class is being used.
* @var string class name
*/
$GLOBALS['_PEAR_FRONTEND_CLASS'] = 'PEAR_Frontend_CLI';
/**
* Instance of $_PEAR_Command_uiclass.
* @var object
*/
$GLOBALS['_PEAR_FRONTEND_SINGLETON'] = null;
/**
* Singleton-based frontend for PEAR user input/output
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
class PEAR_Frontend extends PEAR
{
/**
* Retrieve the frontend object
* @return PEAR_Frontend_CLI|PEAR_Frontend_Web|PEAR_Frontend_Gtk
* @static
*/
function &singleton($type = null)
{
if ($type === null) {
if (!isset($GLOBALS['_PEAR_FRONTEND_SINGLETON'])) {
$a = false;
return $a;
}
return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
}
$a = PEAR_Frontend::setFrontendClass($type);
return $a;
}
/**
* Set the frontend class that will be used by calls to {@link singleton()}
*
* Frontends are expected to conform to the PEAR naming standard of
* _ => DIRECTORY_SEPARATOR (PEAR_Frontend_CLI is in PEAR/Frontend/CLI.php)
* @param string $uiclass full class name
* @return PEAR_Frontend
* @static
*/
function &setFrontendClass($uiclass)
{
if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], $uiclass)) {
return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
}
if (!class_exists($uiclass)) {
$file = str_replace('_', '/', $uiclass) . '.php';
if (PEAR_Frontend::isIncludeable($file)) {
include_once $file;
}
}
if (class_exists($uiclass)) {
$obj = &new $uiclass;
// quick test to see if this class implements a few of the most
// important frontend methods
if (is_a($obj, 'PEAR_Frontend')) {
$GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$obj;
$GLOBALS['_PEAR_FRONTEND_CLASS'] = $uiclass;
return $obj;
}
$err = PEAR::raiseError("not a frontend class: $uiclass");
return $err;
}
$err = PEAR::raiseError("no such class: $uiclass");
return $err;
}
/**
* Set the frontend class that will be used by calls to {@link singleton()}
*
* Frontends are expected to be a descendant of PEAR_Frontend
* @param PEAR_Frontend
* @return PEAR_Frontend
* @static
*/
function &setFrontendObject($uiobject)
{
if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], get_class($uiobject))) {
return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
}
if (!is_a($uiobject, 'PEAR_Frontend')) {
$err = PEAR::raiseError('not a valid frontend class: (' .
get_class($uiobject) . ')');
return $err;
}
$GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$uiobject;
$GLOBALS['_PEAR_FRONTEND_CLASS'] = get_class($uiobject);
return $uiobject;
}
/**
* @param string $path relative or absolute include path
* @return boolean
* @static
*/
function isIncludeable($path)
{
if (file_exists($path) && is_readable($path)) {
return true;
}
$fp = @fopen($path, 'r', true);
if ($fp) {
fclose($fp);
return true;
}
return false;
}
/**
* @param PEAR_Config
*/
function setConfig(&$config)
{
}
/**
* This can be overridden to allow session-based temporary file management
*
* By default, all files are deleted at the end of a session. The web installer
* needs to be able to sustain a list over many sessions in order to support
* user interaction with install scripts
*/
function addTempFile($file)
{
$GLOBALS['_PEAR_Common_tempfiles'][] = $file;
}
/**
* Log an action
*
* @param string $msg the message to log
* @param boolean $append_crlf
* @return boolean true
* @abstract
*/
function log($msg, $append_crlf = true)
{
}
/**
* Run a post-installation script
*
* @param array $scripts array of post-install scripts
* @abstract
*/
function runPostinstallScripts(&$scripts)
{
}
/**
* Display human-friendly output formatted depending on the
* $command parameter.
*
* This should be able to handle basic output data with no command
* @param mixed $data data structure containing the information to display
* @param string $command command from which this method was called
* @abstract
*/
function outputData($data, $command = '_default')
{
}
/**
* Display a modal form dialog and return the given input
*
* A frontend that requires multiple requests to retrieve and process
* data must take these needs into account, and implement the request
* handling code.
* @param string $command command from which this method was called
* @param array $prompts associative array. keys are the input field names
* and values are the description
* @param array $types array of input field types (text, password,
* etc.) keys have to be the same like in $prompts
* @param array $defaults array of default values. again keys have
* to be the same like in $prompts. Do not depend
* on a default value being set.
* @return array input sent by the user
* @abstract
*/
function userDialog($command, $prompts, $types = array(), $defaults = array())
{
}
}
+564 -322
View File
File diff suppressed because it is too large Load Diff
+1306 -551
View File
File diff suppressed because it is too large Load Diff
+276
View File
@@ -0,0 +1,276 @@
<?php
/**
* PEAR_Installer_Role
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Role.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
/**
* base class for installer roles
*/
require_once 'PEAR/Installer/Role/Common.php';
require_once 'PEAR/XMLParser.php';
/**
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
class PEAR_Installer_Role
{
/**
* Set up any additional configuration variables that file roles require
*
* Never call this directly, it is called by the PEAR_Config constructor
* @param PEAR_Config
* @access private
* @static
*/
function initializeConfig(&$config)
{
if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
PEAR_Installer_Role::registerRoles();
}
foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $class => $info) {
if (!$info['config_vars']) {
continue;
}
$config->_addConfigVars($class, $info['config_vars']);
}
}
/**
* @param PEAR_PackageFile_v2
* @param string role name
* @param PEAR_Config
* @return PEAR_Installer_Role_Common
* @static
*/
function &factory($pkg, $role, &$config)
{
if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
PEAR_Installer_Role::registerRoles();
}
if (!in_array($role, PEAR_Installer_Role::getValidRoles($pkg->getPackageType()))) {
$a = false;
return $a;
}
$a = 'PEAR_Installer_Role_' . ucfirst($role);
if (!class_exists($a)) {
require_once str_replace('_', '/', $a) . '.php';
}
$b = new $a($config);
return $b;
}
/**
* Get a list of file roles that are valid for the particular release type.
*
* For instance, src files serve no purpose in regular php releases.
* @param string
* @param bool clear cache
* @return array
* @static
*/
function getValidRoles($release, $clear = false)
{
if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
PEAR_Installer_Role::registerRoles();
}
static $ret = array();
if ($clear) {
$ret = array();
}
if (isset($ret[$release])) {
return $ret[$release];
}
$ret[$release] = array();
foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
if (in_array($release, $okreleases['releasetypes'])) {
$ret[$release][] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
}
}
return $ret[$release];
}
/**
* Get a list of roles that require their files to be installed
*
* Most roles must be installed, but src and package roles, for instance
* are pseudo-roles. src files are compiled into a new extension. Package
* roles are actually fully bundled releases of a package
* @param bool clear cache
* @return array
* @static
*/
function getInstallableRoles($clear = false)
{
if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
PEAR_Installer_Role::registerRoles();
}
static $ret;
if ($clear) {
unset($ret);
}
if (isset($ret)) {
return $ret;
}
$ret = array();
foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
if ($okreleases['installable']) {
$ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
}
}
return $ret;
}
/**
* Return an array of roles that are affected by the baseinstalldir attribute
*
* Most roles ignore this attribute, and instead install directly into:
* PackageName/filepath
* so a tests file tests/file.phpt is installed into PackageName/tests/filepath.php
* @param bool clear cache
* @return array
* @static
*/
function getBaseinstallRoles($clear = false)
{
if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
PEAR_Installer_Role::registerRoles();
}
static $ret;
if ($clear) {
unset($ret);
}
if (isset($ret)) {
return $ret;
}
$ret = array();
foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
if ($okreleases['honorsbaseinstall']) {
$ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
}
}
return $ret;
}
/**
* Return an array of file roles that should be analyzed for PHP content at package time,
* like the "php" role.
* @param bool clear cache
* @return array
* @static
*/
function getPhpRoles($clear = false)
{
if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'])) {
PEAR_Installer_Role::registerRoles();
}
static $ret;
if ($clear) {
unset($ret);
}
if (isset($ret)) {
return $ret;
}
$ret = array();
foreach ($GLOBALS['_PEAR_INSTALLER_ROLES'] as $role => $okreleases) {
if ($okreleases['phpfile']) {
$ret[] = strtolower(str_replace('PEAR_Installer_Role_', '', $role));
}
}
return $ret;
}
/**
* Scan through the Command directory looking for classes
* and see what commands they implement.
* @param string which directory to look for classes, defaults to
* the Installer/Roles subdirectory of
* the directory from where this file (__FILE__) is
* included.
*
* @return bool TRUE on success, a PEAR error on failure
* @access public
* @static
*/
function registerRoles($dir = null)
{
$GLOBALS['_PEAR_INSTALLER_ROLES'] = array();
$parser = new PEAR_XMLParser;
if ($dir === null) {
$dir = dirname(__FILE__) . '/Role';
}
if (!file_exists($dir) || !is_dir($dir)) {
return PEAR::raiseError("registerRoles: opendir($dir) failed: does not exist/is not directory");
}
$dp = @opendir($dir);
if (empty($dp)) {
return PEAR::raiseError("registerRoles: opendir($dir) failed: $php_errmsg");
}
while ($entry = readdir($dp)) {
if ($entry{0} == '.' || substr($entry, -4) != '.xml') {
continue;
}
$class = "PEAR_Installer_Role_".substr($entry, 0, -4);
// List of roles
if (!isset($GLOBALS['_PEAR_INSTALLER_ROLES'][$class])) {
$file = "$dir/$entry";
$parser->parse(file_get_contents($file));
$data = $parser->getData();
if (!is_array($data['releasetypes'])) {
$data['releasetypes'] = array($data['releasetypes']);
}
$GLOBALS['_PEAR_INSTALLER_ROLES'][$class] = $data;
}
}
closedir($dp);
ksort($GLOBALS['_PEAR_INSTALLER_ROLES']);
PEAR_Installer_Role::getBaseinstallRoles(true);
PEAR_Installer_Role::getInstallableRoles(true);
PEAR_Installer_Role::getPhpRoles(true);
PEAR_Installer_Role::getValidRoles('****', true);
return true;
}
}
+106
View File
@@ -0,0 +1,106 @@
<?php
/**
* PEAR_Installer_Role_Cfg
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 2007-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Cfg.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.7.0
*/
/**
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 2007-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.7.0
*/
class PEAR_Installer_Role_Cfg extends PEAR_Installer_Role_Common
{
/**
* @var PEAR_Installer
*/
var $installer;
/**
* the md5 of the original file
*
* @var unknown_type
*/
var $md5 = null;
/**
* Do any unusual setup here
* @param PEAR_Installer
* @param PEAR_PackageFile_v2
* @param array file attributes
* @param string file name
*/
function setup(&$installer, $pkg, $atts, $file)
{
$this->installer = &$installer;
$reg = &$this->installer->config->getRegistry();
$package = $reg->getPackage($pkg->getPackage(), $pkg->getChannel());
if ($package) {
$filelist = $package->getFilelist();
if (isset($filelist[$file]) && isset($filelist[$file]['md5sum'])) {
$this->md5 = $filelist[$file]['md5sum'];
}
}
}
function processInstallation($pkg, $atts, $file, $tmp_path, $layer = null)
{
$test = parent::processInstallation($pkg, $atts, $file, $tmp_path, $layer);
if (@file_exists($test[2]) && @file_exists($test[3])) {
$md5 = md5_file($test[2]);
// configuration has already been installed, check for mods
if ($md5 !== $this->md5 && $md5 !== md5_file($test[3])) {
// configuration has been modified, so save our version as
// configfile-version
$old = $test[2];
$test[2] .= '.new-' . $pkg->getVersion();
// backup original and re-install it
PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
$tmpcfg = $this->config->get('temp_dir');
$newloc = System::mkdir(array('-p', $tmpcfg));
if (!$newloc) {
// try temp_dir
$newloc = System::mktemp(array('-d'));
if (!$newloc || PEAR::isError($newloc)) {
PEAR::popErrorHandling();
return PEAR::raiseError('Could not save existing configuration file '.
$old . ', unable to install. Please set temp_dir ' .
'configuration variable to a writeable location and try again');
}
} else {
$newloc = $tmpcfg;
}
$temp_file = $newloc . DIRECTORY_SEPARATOR . uniqid('savefile');
if (!@copy($old, $temp_file)) {
PEAR::popErrorHandling();
return PEAR::raiseError('Could not save existing configuration file '.
$old . ', unable to install. Please set temp_dir ' .
'configuration variable to a writeable location and try again');
}
PEAR::popErrorHandling();
$this->installer->log(0, "WARNING: configuration file $old is being installed as $test[2], you should manually merge in changes to the existing configuration file");
$this->installer->addFileOperation('rename', array($temp_file, $old, false));
$this->installer->addFileOperation('delete', array($temp_file));
}
}
return $test;
}
}
+15
View File
@@ -0,0 +1,15 @@
<role version="1.0">
<releasetypes>php</releasetypes>
<releasetypes>extsrc</releasetypes>
<releasetypes>extbin</releasetypes>
<releasetypes>zendextsrc</releasetypes>
<releasetypes>zendextbin</releasetypes>
<installable>1</installable>
<locationconfig>cfg_dir</locationconfig>
<honorsbaseinstall />
<unusualbaseinstall>1</unusualbaseinstall>
<phpfile />
<executable />
<phpextension />
<config_vars />
</role>
+174
View File
@@ -0,0 +1,174 @@
<?php
/**
* Base class for all installation roles.
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2006 The PHP Group
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Common.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
/**
* Base class for all installation roles.
*
* This class allows extensibility of file roles. Packages with complex
* customization can now provide custom file roles along with the possibility of
* adding configuration values to match.
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2006 The PHP Group
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
class PEAR_Installer_Role_Common
{
/**
* @var PEAR_Config
* @access protected
*/
var $config;
/**
* @param PEAR_Config
*/
function PEAR_Installer_Role_Common(&$config)
{
$this->config = $config;
}
/**
* Retrieve configuration information about a file role from its XML info
*
* @param string $role Role Classname, as in "PEAR_Installer_Role_Data"
* @return array
*/
function getInfo($role)
{
if (empty($GLOBALS['_PEAR_INSTALLER_ROLES'][$role])) {
return PEAR::raiseError('Unknown Role class: "' . $role . '"');
}
return $GLOBALS['_PEAR_INSTALLER_ROLES'][$role];
}
/**
* This is called for each file to set up the directories and files
* @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
* @param array attributes from the <file> tag
* @param string file name
* @return array an array consisting of:
*
* 1 the original, pre-baseinstalldir installation directory
* 2 the final installation directory
* 3 the full path to the final location of the file
* 4 the location of the pre-installation file
*/
function processInstallation($pkg, $atts, $file, $tmp_path, $layer = null)
{
$roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' .
ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
if (PEAR::isError($roleInfo)) {
return $roleInfo;
}
if (!$roleInfo['locationconfig']) {
return false;
}
if ($roleInfo['honorsbaseinstall']) {
$dest_dir = $save_destdir = $this->config->get($roleInfo['locationconfig'], $layer,
$pkg->getChannel());
if (!empty($atts['baseinstalldir'])) {
$dest_dir .= DIRECTORY_SEPARATOR . $atts['baseinstalldir'];
}
} elseif ($roleInfo['unusualbaseinstall']) {
$dest_dir = $save_destdir = $this->config->get($roleInfo['locationconfig'],
$layer, $pkg->getChannel()) . DIRECTORY_SEPARATOR . $pkg->getPackage();
if (!empty($atts['baseinstalldir'])) {
$dest_dir .= DIRECTORY_SEPARATOR . $atts['baseinstalldir'];
}
} else {
$dest_dir = $save_destdir = $this->config->get($roleInfo['locationconfig'],
$layer, $pkg->getChannel()) . DIRECTORY_SEPARATOR . $pkg->getPackage();
}
if (dirname($file) != '.' && empty($atts['install-as'])) {
$dest_dir .= DIRECTORY_SEPARATOR . dirname($file);
}
if (empty($atts['install-as'])) {
$dest_file = $dest_dir . DIRECTORY_SEPARATOR . basename($file);
} else {
$dest_file = $dest_dir . DIRECTORY_SEPARATOR . $atts['install-as'];
}
$orig_file = $tmp_path . DIRECTORY_SEPARATOR . $file;
// Clean up the DIRECTORY_SEPARATOR mess
$ds2 = DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR;
list($dest_dir, $dest_file, $orig_file) = preg_replace(array('!\\\\+!', '!/!', "!$ds2+!"),
array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR,
DIRECTORY_SEPARATOR),
array($dest_dir, $dest_file, $orig_file));
return array($save_destdir, $dest_dir, $dest_file, $orig_file);
}
/**
* Get the name of the configuration variable that specifies the location of this file
* @return string|false
*/
function getLocationConfig()
{
$roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' .
ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
if (PEAR::isError($roleInfo)) {
return $roleInfo;
}
return $roleInfo['locationconfig'];
}
/**
* Do any unusual setup here
* @param PEAR_Installer
* @param PEAR_PackageFile_v2
* @param array file attributes
* @param string file name
*/
function setup(&$installer, $pkg, $atts, $file)
{
}
function isExecutable()
{
$roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' .
ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
if (PEAR::isError($roleInfo)) {
return $roleInfo;
}
return $roleInfo['executable'];
}
function isInstallable()
{
$roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' .
ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
if (PEAR::isError($roleInfo)) {
return $roleInfo;
}
return $roleInfo['installable'];
}
function isExtension()
{
$roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' .
ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
if (PEAR::isError($roleInfo)) {
return $roleInfo;
}
return $roleInfo['phpextension'];
}
}
?>
+28
View File
@@ -0,0 +1,28 @@
<?php
/**
* PEAR_Installer_Role_Data
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Data.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
/**
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {}
?>
+15
View File
@@ -0,0 +1,15 @@
<role version="1.0">
<releasetypes>php</releasetypes>
<releasetypes>extsrc</releasetypes>
<releasetypes>extbin</releasetypes>
<releasetypes>zendextsrc</releasetypes>
<releasetypes>zendextbin</releasetypes>
<installable>1</installable>
<locationconfig>data_dir</locationconfig>
<honorsbaseinstall />
<unusualbaseinstall />
<phpfile />
<executable />
<phpextension />
<config_vars />
</role>
+28
View File
@@ -0,0 +1,28 @@
<?php
/**
* PEAR_Installer_Role_Doc
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Doc.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
/**
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {}
?>
+15
View File
@@ -0,0 +1,15 @@
<role version="1.0">
<releasetypes>php</releasetypes>
<releasetypes>extsrc</releasetypes>
<releasetypes>extbin</releasetypes>
<releasetypes>zendextsrc</releasetypes>
<releasetypes>zendextbin</releasetypes>
<installable>1</installable>
<locationconfig>doc_dir</locationconfig>
<honorsbaseinstall />
<unusualbaseinstall />
<phpfile />
<executable />
<phpextension />
<config_vars />
</role>
+28
View File
@@ -0,0 +1,28 @@
<?php
/**
* PEAR_Installer_Role_Ext
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Ext.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
/**
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
class PEAR_Installer_Role_Ext extends PEAR_Installer_Role_Common {}
?>
+12
View File
@@ -0,0 +1,12 @@
<role version="1.0">
<releasetypes>extbin</releasetypes>
<releasetypes>zendextbin</releasetypes>
<installable>1</installable>
<locationconfig>ext_dir</locationconfig>
<honorsbaseinstall>1</honorsbaseinstall>
<unusualbaseinstall />
<phpfile />
<executable />
<phpextension>1</phpextension>
<config_vars />
</role>
+28
View File
@@ -0,0 +1,28 @@
<?php
/**
* PEAR_Installer_Role_Php
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Php.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
/**
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {}
?>
+15
View File
@@ -0,0 +1,15 @@
<role version="1.0">
<releasetypes>php</releasetypes>
<releasetypes>extsrc</releasetypes>
<releasetypes>extbin</releasetypes>
<releasetypes>zendextsrc</releasetypes>
<releasetypes>zendextbin</releasetypes>
<installable>1</installable>
<locationconfig>php_dir</locationconfig>
<honorsbaseinstall>1</honorsbaseinstall>
<unusualbaseinstall />
<phpfile>1</phpfile>
<executable />
<phpextension />
<config_vars />
</role>
+28
View File
@@ -0,0 +1,28 @@
<?php
/**
* PEAR_Installer_Role_Script
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: Script.php 313023 2011-07-06 19:17:11Z dufuz $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
/**
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.9.4
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {}
?>
+15
View File
@@ -0,0 +1,15 @@
<role version="1.0">
<releasetypes>php</releasetypes>
<releasetypes>extsrc</releasetypes>
<releasetypes>extbin</releasetypes>
<releasetypes>zendextsrc</releasetypes>
<releasetypes>zendextbin</releasetypes>
<installable>1</installable>
<locationconfig>bin_dir</locationconfig>
<honorsbaseinstall>1</honorsbaseinstall>
<unusualbaseinstall />
<phpfile />
<executable>1</executable>
<phpextension />
<config_vars />
</role>

Some files were not shown because too many files have changed in this diff Show More