diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl
index 5862f3f2970..3dda8035dc4 100755
--- a/build/makepack-dolibarr.pl
+++ b/build/makepack-dolibarr.pl
@@ -636,6 +636,12 @@ if ($nboftargetok) {
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/vendor`;
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/webmozart`;
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/autoload.php`;
+
+ $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/sabre/sabre/bin`;
+ $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/sabre/sabre/*/bin`;
+ $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/sabre/sabre/*/*/bin`;
+ $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/sabre/sabre/*/*/*/bin`;
+ $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/sabre/sabre/*/*/*/*/bin`;
}
# Build package for each target
diff --git a/dev/dolibarr_changes.txt b/dev/dolibarr_changes.txt
index a2a99bdfd5a..a87d5de3207 100644
--- a/dev/dolibarr_changes.txt
+++ b/dev/dolibarr_changes.txt
@@ -41,6 +41,14 @@ With
protected $connector;
+SABRE:
+------
+rm -fr ./htdocs/includes/sabre/sabre/bin;
+rm -fr ./htdocs/includes/sabre/sabre/*/bin;
+rm -fr ./htdocs/includes/sabre/sabre/*/*/bin;
+rm -fr ./htdocs/includes/sabre/sabre/*/*/*/bin;
+rm -fr ./htdocs/includes/sabre/sabre/*/*/*/*/bin;
+
NUSOAP:
-------
diff --git a/htdocs/includes/sabre/sabre/dav/bin/build.php b/htdocs/includes/sabre/sabre/dav/bin/build.php
deleted file mode 100755
index 4dd25d9c959..00000000000
--- a/htdocs/includes/sabre/sabre/dav/bin/build.php
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/usr/bin/env php
- [
- 'init', 'test', 'clean',
- ],
- 'markrelease' => [
- 'init', 'test', 'clean',
- ],
- 'clean' => [],
- 'test' => [
- 'composerupdate',
- ],
- 'init' => [],
- 'composerupdate' => [],
- ];
-
-$default = 'buildzip';
-
-$baseDir = __DIR__.'/../';
-chdir($baseDir);
-
-$currentTask = $default;
-if ($argc > 1) {
- $currentTask = $argv[1];
-}
-$version = null;
-if ($argc > 2) {
- $version = $argv[2];
-}
-
-if (!isset($tasks[$currentTask])) {
- echo 'Task not found: ', $currentTask, "\n";
- exit(1);
-}
-
-// Creating the dependency graph
-$newTaskList = [];
-$oldTaskList = [$currentTask => true];
-
-while (count($oldTaskList) > 0) {
- foreach ($oldTaskList as $task => $foo) {
- if (!isset($tasks[$task])) {
- echo 'Dependency not found: '.$task, "\n";
- exit(1);
- }
- $dependencies = $tasks[$task];
-
- $fullFilled = true;
- foreach ($dependencies as $dependency) {
- if (isset($newTaskList[$dependency])) {
- // Already in the fulfilled task list.
- continue;
- } else {
- $oldTaskList[$dependency] = true;
- $fullFilled = false;
- }
- }
- if ($fullFilled) {
- unset($oldTaskList[$task]);
- $newTaskList[$task] = 1;
- }
- }
-}
-
-foreach (array_keys($newTaskList) as $task) {
- echo 'task: '.$task, "\n";
- call_user_func($task);
- echo "\n";
-}
-
-function init()
-{
- global $version;
- if (!$version) {
- include __DIR__.'/../vendor/autoload.php';
- $version = Sabre\DAV\Version::VERSION;
- }
-
- echo ' Building sabre/dav '.$version, "\n";
-}
-
-function clean()
-{
- global $baseDir;
- echo " Removing build files\n";
- $outputDir = $baseDir.'/build/SabreDAV';
- if (is_dir($outputDir)) {
- system('rm -r '.$baseDir.'/build/SabreDAV');
- }
-}
-
-function composerupdate()
-{
- global $baseDir;
- echo " Updating composer packages to latest version\n\n";
- system('cd '.$baseDir.'; composer update');
-}
-
-function test()
-{
- global $baseDir;
-
- echo " Running all unittests.\n";
- echo " This may take a while.\n\n";
- system(__DIR__.'/phpunit --configuration '.$baseDir.'/tests/phpunit.xml.dist --stop-on-failure', $code);
- if (0 != $code) {
- echo "PHPUnit reported error code $code\n";
- exit(1);
- }
-}
-
-function buildzip()
-{
- global $baseDir, $version;
- echo " Generating composer.json\n";
-
- $input = json_decode(file_get_contents(__DIR__.'/../composer.json'), true);
- $newComposer = [
- 'require' => $input['require'],
- 'config' => [
- 'bin-dir' => './bin',
- ],
- 'prefer-stable' => true,
- 'minimum-stability' => 'alpha',
- ];
- unset(
- $newComposer['require']['sabre/vobject'],
- $newComposer['require']['sabre/http'],
- $newComposer['require']['sabre/uri'],
- $newComposer['require']['sabre/event']
- );
- $newComposer['require']['sabre/dav'] = $version;
- mkdir('build/SabreDAV');
- file_put_contents('build/SabreDAV/composer.json', json_encode($newComposer, JSON_PRETTY_PRINT));
-
- echo " Downloading dependencies\n";
- system('cd build/SabreDAV; composer install -n', $code);
- if (0 !== $code) {
- echo "Composer reported error code $code\n";
- exit(1);
- }
-
- echo " Removing pointless files\n";
- unlink('build/SabreDAV/composer.json');
- unlink('build/SabreDAV/composer.lock');
-
- echo " Moving important files to the root of the project\n";
-
- $fileNames = [
- 'CHANGELOG.md',
- 'LICENSE',
- 'README.md',
- 'examples',
- ];
- foreach ($fileNames as $fileName) {
- echo " $fileName\n";
- rename('build/SabreDAV/vendor/sabre/dav/'.$fileName, 'build/SabreDAV/'.$fileName);
- }
-
- //
-
- echo "\n";
- echo "Zipping the sabredav distribution\n\n";
- system('cd build; zip -qr sabredav-'.$version.'.zip SabreDAV');
-
- echo 'Done.';
-}
diff --git a/htdocs/includes/sabre/sabre/dav/bin/googlecode_upload.py b/htdocs/includes/sabre/sabre/dav/bin/googlecode_upload.py
deleted file mode 100755
index caafd5dedac..00000000000
--- a/htdocs/includes/sabre/sabre/dav/bin/googlecode_upload.py
+++ /dev/null
@@ -1,248 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006, 2007 Google Inc. All Rights Reserved.
-# Author: danderson@google.com (David Anderson)
-#
-# Script for uploading files to a Google Code project.
-#
-# This is intended to be both a useful script for people who want to
-# streamline project uploads and a reference implementation for
-# uploading files to Google Code projects.
-#
-# To upload a file to Google Code, you need to provide a path to the
-# file on your local machine, a small summary of what the file is, a
-# project name, and a valid account that is a member or owner of that
-# project. You can optionally provide a list of labels that apply to
-# the file. The file will be uploaded under the same name that it has
-# in your local filesystem (that is, the "basename" or last path
-# component). Run the script with '--help' to get the exact syntax
-# and available options.
-#
-# Note that the upload script requests that you enter your
-# googlecode.com password. This is NOT your Gmail account password!
-# This is the password you use on googlecode.com for committing to
-# Subversion and uploading files. You can find your password by going
-# to http://code.google.com/hosting/settings when logged in with your
-# Gmail account. If you have already committed to your project's
-# Subversion repository, the script will automatically retrieve your
-# credentials from there (unless disabled, see the output of '--help'
-# for details).
-#
-# If you are looking at this script as a reference for implementing
-# your own Google Code file uploader, then you should take a look at
-# the upload() function, which is the meat of the uploader. You
-# basically need to build a multipart/form-data POST request with the
-# right fields and send it to https://PROJECT.googlecode.com/files .
-# Authenticate the request using HTTP Basic authentication, as is
-# shown below.
-#
-# Licensed under the terms of the Apache Software License 2.0:
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Questions, comments, feature requests and patches are most welcome.
-# Please direct all of these to the Google Code users group:
-# http://groups.google.com/group/google-code-hosting
-
-"""Google Code file uploader script.
-"""
-
-__author__ = 'danderson@google.com (David Anderson)'
-
-import httplib
-import os.path
-import optparse
-import getpass
-import base64
-import sys
-
-
-def upload(file, project_name, user_name, password, summary, labels=None):
- """Upload a file to a Google Code project's file server.
-
- Args:
- file: The local path to the file.
- project_name: The name of your project on Google Code.
- user_name: Your Google account name.
- password: The googlecode.com password for your account.
- Note that this is NOT your global Google Account password!
- summary: A small description for the file.
- labels: an optional list of label strings with which to tag the file.
-
- Returns: a tuple:
- http_status: 201 if the upload succeeded, something else if an
- error occurred.
- http_reason: The human-readable string associated with http_status
- file_url: If the upload succeeded, the URL of the file on Google
- Code, None otherwise.
- """
- # The login is the user part of user@gmail.com. If the login provided
- # is in the full user@domain form, strip it down.
- if user_name.endswith('@gmail.com'):
- user_name = user_name[:user_name.index('@gmail.com')]
-
- form_fields = [('summary', summary)]
- if labels is not None:
- form_fields.extend([('label', l.strip()) for l in labels])
-
- content_type, body = encode_upload_request(form_fields, file)
-
- upload_host = '%s.googlecode.com' % project_name
- upload_uri = '/files'
- auth_token = base64.b64encode('%s:%s'% (user_name, password))
- headers = {
- 'Authorization': 'Basic %s' % auth_token,
- 'User-Agent': 'Googlecode.com uploader v0.9.4',
- 'Content-Type': content_type,
- }
-
- server = httplib.HTTPSConnection(upload_host)
- server.request('POST', upload_uri, body, headers)
- resp = server.getresponse()
- server.close()
-
- if resp.status == 201:
- location = resp.getheader('Location', None)
- else:
- location = None
- return resp.status, resp.reason, location
-
-
-def encode_upload_request(fields, file_path):
- """Encode the given fields and file into a multipart form body.
-
- fields is a sequence of (name, value) pairs. file is the path of
- the file to upload. The file will be uploaded to Google Code with
- the same file name.
-
- Returns: (content_type, body) ready for httplib.HTTP instance
- """
- BOUNDARY = '----------Googlecode_boundary_reindeer_flotilla'
- CRLF = '\r\n'
-
- body = []
-
- # Add the metadata about the upload first
- for key, value in fields:
- body.extend(
- ['--' + BOUNDARY,
- 'Content-Disposition: form-data; name="%s"' % key,
- '',
- value,
- ])
-
- # Now add the file itself
- file_name = os.path.basename(file_path)
- f = open(file_path, 'rb')
- file_content = f.read()
- f.close()
-
- body.extend(
- ['--' + BOUNDARY,
- 'Content-Disposition: form-data; name="filename"; filename="%s"'
- % file_name,
- # The upload server determines the mime-type, no need to set it.
- 'Content-Type: application/octet-stream',
- '',
- file_content,
- ])
-
- # Finalize the form body
- body.extend(['--' + BOUNDARY + '--', ''])
-
- return 'multipart/form-data; boundary=%s' % BOUNDARY, CRLF.join(body)
-
-
-def upload_find_auth(file_path, project_name, summary, labels=None,
- user_name=None, password=None, tries=3):
- """Find credentials and upload a file to a Google Code project's file server.
-
- file_path, project_name, summary, and labels are passed as-is to upload.
-
- Args:
- file_path: The local path to the file.
- project_name: The name of your project on Google Code.
- summary: A small description for the file.
- labels: an optional list of label strings with which to tag the file.
- config_dir: Path to Subversion configuration directory, 'none', or None.
- user_name: Your Google account name.
- tries: How many attempts to make.
- """
-
- while tries > 0:
- if user_name is None:
- # Read username if not specified or loaded from svn config, or on
- # subsequent tries.
- sys.stdout.write('Please enter your googlecode.com username: ')
- sys.stdout.flush()
- user_name = sys.stdin.readline().rstrip()
- if password is None:
- # Read password if not loaded from svn config, or on subsequent tries.
- print 'Please enter your googlecode.com password.'
- print '** Note that this is NOT your Gmail account password! **'
- print 'It is the password you use to access Subversion repositories,'
- print 'and can be found here: http://code.google.com/hosting/settings'
- password = getpass.getpass()
-
- status, reason, url = upload(file_path, project_name, user_name, password,
- summary, labels)
- # Returns 403 Forbidden instead of 401 Unauthorized for bad
- # credentials as of 2007-07-17.
- if status in [httplib.FORBIDDEN, httplib.UNAUTHORIZED]:
- # Rest for another try.
- user_name = password = None
- tries = tries - 1
- else:
- # We're done.
- break
-
- return status, reason, url
-
-
-def main():
- parser = optparse.OptionParser(usage='googlecode-upload.py -s SUMMARY '
- '-p PROJECT [options] FILE')
- parser.add_option('-s', '--summary', dest='summary',
- help='Short description of the file')
- parser.add_option('-p', '--project', dest='project',
- help='Google Code project name')
- parser.add_option('-u', '--user', dest='user',
- help='Your Google Code username')
- parser.add_option('-w', '--password', dest='password',
- help='Your Google Code password')
- parser.add_option('-l', '--labels', dest='labels',
- help='An optional list of comma-separated labels to attach '
- 'to the file')
-
- options, args = parser.parse_args()
-
- if not options.summary:
- parser.error('File summary is missing.')
- elif not options.project:
- parser.error('Project name is missing.')
- elif len(args) < 1:
- parser.error('File to upload not provided.')
- elif len(args) > 1:
- parser.error('Only one file may be specified.')
-
- file_path = args[0]
-
- if options.labels:
- labels = options.labels.split(',')
- else:
- labels = None
-
- status, reason, url = upload_find_auth(file_path, options.project,
- options.summary, labels,
- options.user, options.password)
- if url:
- print 'The file was uploaded successfully.'
- print 'URL: %s' % url
- return 0
- else:
- print 'An error occurred. Your file was not uploaded.'
- print 'Google Code upload server said: %s (%s)' % (reason, status)
- return 1
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/htdocs/includes/sabre/sabre/dav/bin/migrateto20.php b/htdocs/includes/sabre/sabre/dav/bin/migrateto20.php
deleted file mode 100755
index fb24fe599d1..00000000000
--- a/htdocs/includes/sabre/sabre/dav/bin/migrateto20.php
+++ /dev/null
@@ -1,414 +0,0 @@
-#!/usr/bin/env php
-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
-
-$driver = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
-
-switch ($driver) {
- case 'mysql':
- echo "Detected MySQL.\n";
- break;
- case 'sqlite':
- echo "Detected SQLite.\n";
- break;
- default:
- echo 'Error: unsupported driver: '.$driver."\n";
- exit(-1);
-}
-
-foreach (['calendar', 'addressbook'] as $itemType) {
- $tableName = $itemType.'s';
- $tableNameOld = $tableName.'_old';
- $changesTable = $itemType.'changes';
-
- echo "Upgrading '$tableName'\n";
-
- // The only cross-db way to do this, is to just fetch a single record.
- $row = $pdo->query("SELECT * FROM $tableName LIMIT 1")->fetch();
-
- if (!$row) {
- echo "No records were found in the '$tableName' table.\n";
- echo "\n";
- echo "We're going to rename the old table to $tableNameOld (just in case).\n";
- echo "and re-create the new table.\n";
-
- switch ($driver) {
- case 'mysql':
- $pdo->exec("RENAME TABLE $tableName TO $tableNameOld");
- switch ($itemType) {
- case 'calendar':
- $pdo->exec("
- CREATE TABLE calendars (
- id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- principaluri VARCHAR(100),
- displayname VARCHAR(100),
- uri VARCHAR(200),
- synctoken INT(11) UNSIGNED NOT NULL DEFAULT '1',
- description TEXT,
- calendarorder INT(11) UNSIGNED NOT NULL DEFAULT '0',
- calendarcolor VARCHAR(10),
- timezone TEXT,
- components VARCHAR(20),
- transparent TINYINT(1) NOT NULL DEFAULT '0',
- UNIQUE(principaluri, uri)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
- ");
- break;
- case 'addressbook':
- $pdo->exec("
- CREATE TABLE addressbooks (
- id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- principaluri VARCHAR(255),
- displayname VARCHAR(255),
- uri VARCHAR(200),
- description TEXT,
- synctoken INT(11) UNSIGNED NOT NULL DEFAULT '1',
- UNIQUE(principaluri, uri)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
- ");
- break;
- }
- break;
-
- case 'sqlite':
- $pdo->exec("ALTER TABLE $tableName RENAME TO $tableNameOld");
-
- switch ($itemType) {
- case 'calendar':
- $pdo->exec('
- CREATE TABLE calendars (
- id integer primary key asc,
- principaluri text,
- displayname text,
- uri text,
- synctoken integer,
- description text,
- calendarorder integer,
- calendarcolor text,
- timezone text,
- components text,
- transparent bool
- );
- ');
- break;
- case 'addressbook':
- $pdo->exec('
- CREATE TABLE addressbooks (
- id integer primary key asc,
- principaluri text,
- displayname text,
- uri text,
- description text,
- synctoken integer
- );
- ');
-
- break;
- }
- break;
- }
- echo "Creation of 2.0 $tableName table is complete\n";
- } else {
- // Checking if there's a synctoken field already.
- if (array_key_exists('synctoken', $row)) {
- echo "The 'synctoken' field already exists in the $tableName table.\n";
- echo "It's likely you already upgraded, so we're simply leaving\n";
- echo "the $tableName table alone\n";
- } else {
- echo "1.8 table schema detected\n";
- switch ($driver) {
- case 'mysql':
- $pdo->exec("ALTER TABLE $tableName ADD synctoken INT(11) UNSIGNED NOT NULL DEFAULT '1'");
- $pdo->exec("ALTER TABLE $tableName DROP ctag");
- $pdo->exec("UPDATE $tableName SET synctoken = '1'");
- break;
- case 'sqlite':
- $pdo->exec("ALTER TABLE $tableName ADD synctoken integer");
- $pdo->exec("UPDATE $tableName SET synctoken = '1'");
- echo "Note: there's no easy way to remove fields in sqlite.\n";
- echo "The ctag field is no longer used, but it's kept in place\n";
- break;
- }
-
- echo "Upgraded '$tableName' to 2.0 schema.\n";
- }
- }
-
- try {
- $pdo->query("SELECT * FROM $changesTable LIMIT 1");
-
- echo "'$changesTable' already exists. Assuming that this part of the\n";
- echo "upgrade was already completed.\n";
- } catch (Exception $e) {
- echo "Creating '$changesTable' table.\n";
-
- switch ($driver) {
- case 'mysql':
- $pdo->exec("
- CREATE TABLE $changesTable (
- id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- uri VARCHAR(200) NOT NULL,
- synctoken INT(11) UNSIGNED NOT NULL,
- {$itemType}id INT(11) UNSIGNED NOT NULL,
- operation TINYINT(1) NOT NULL,
- INDEX {$itemType}id_synctoken ({$itemType}id, synctoken)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
- ");
- break;
- case 'sqlite':
- $pdo->exec("
-
- CREATE TABLE $changesTable (
- id integer primary key asc,
- uri text,
- synctoken integer,
- {$itemType}id integer,
- operation bool
- );
-
- ");
- $pdo->exec("CREATE INDEX {$itemType}id_synctoken ON $changesTable ({$itemType}id, synctoken);");
- break;
- }
- }
-}
-
-try {
- $pdo->query('SELECT * FROM calendarsubscriptions LIMIT 1');
-
- echo "'calendarsubscriptions' already exists. Assuming that this part of the\n";
- echo "upgrade was already completed.\n";
-} catch (Exception $e) {
- echo "Creating calendarsubscriptions table.\n";
-
- switch ($driver) {
- case 'mysql':
- $pdo->exec("
-CREATE TABLE calendarsubscriptions (
- id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- uri VARCHAR(200) NOT NULL,
- principaluri VARCHAR(100) NOT NULL,
- source TEXT,
- displayname VARCHAR(100),
- refreshrate VARCHAR(10),
- calendarorder INT(11) UNSIGNED NOT NULL DEFAULT '0',
- calendarcolor VARCHAR(10),
- striptodos TINYINT(1) NULL,
- stripalarms TINYINT(1) NULL,
- stripattachments TINYINT(1) NULL,
- lastmodified INT(11) UNSIGNED,
- UNIQUE(principaluri, uri)
-);
- ");
- break;
- case 'sqlite':
- $pdo->exec('
-
-CREATE TABLE calendarsubscriptions (
- id integer primary key asc,
- uri text,
- principaluri text,
- source text,
- displayname text,
- refreshrate text,
- calendarorder integer,
- calendarcolor text,
- striptodos bool,
- stripalarms bool,
- stripattachments bool,
- lastmodified int
-);
- ');
-
- $pdo->exec('CREATE INDEX principaluri_uri ON calendarsubscriptions (principaluri, uri);');
- break;
- }
-}
-
-try {
- $pdo->query('SELECT * FROM propertystorage LIMIT 1');
-
- echo "'propertystorage' already exists. Assuming that this part of the\n";
- echo "upgrade was already completed.\n";
-} catch (Exception $e) {
- echo "Creating propertystorage table.\n";
-
- switch ($driver) {
- case 'mysql':
- $pdo->exec('
-CREATE TABLE propertystorage (
- id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- path VARBINARY(1024) NOT NULL,
- name VARBINARY(100) NOT NULL,
- value MEDIUMBLOB
-);
- ');
- $pdo->exec('
-CREATE UNIQUE INDEX path_property ON propertystorage (path(600), name(100));
- ');
- break;
- case 'sqlite':
- $pdo->exec('
-CREATE TABLE propertystorage (
- id integer primary key asc,
- path TEXT,
- name TEXT,
- value TEXT
-);
- ');
- $pdo->exec('
-CREATE UNIQUE INDEX path_property ON propertystorage (path, name);
- ');
-
- break;
- }
-}
-
-echo "Upgrading cards table to 2.0 schema\n";
-
-try {
- $create = false;
- $row = $pdo->query('SELECT * FROM cards LIMIT 1')->fetch();
- if (!$row) {
- $random = mt_rand(1000, 9999);
- echo "There was no data in the cards table, so we're re-creating it\n";
- echo "The old table will be renamed to cards_old$random, just in case.\n";
-
- $create = true;
-
- switch ($driver) {
- case 'mysql':
- $pdo->exec("RENAME TABLE cards TO cards_old$random");
- break;
- case 'sqlite':
- $pdo->exec("ALTER TABLE cards RENAME TO cards_old$random");
- break;
- }
- }
-} catch (Exception $e) {
- echo "Exception while checking cards table. Assuming that the table does not yet exist.\n";
- echo 'Debug: ', $e->getMessage(), "\n";
- $create = true;
-}
-
-if ($create) {
- switch ($driver) {
- case 'mysql':
- $pdo->exec('
-CREATE TABLE cards (
- id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- addressbookid INT(11) UNSIGNED NOT NULL,
- carddata MEDIUMBLOB,
- uri VARCHAR(200),
- lastmodified INT(11) UNSIGNED,
- etag VARBINARY(32),
- size INT(11) UNSIGNED NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
- ');
- break;
-
- case 'sqlite':
- $pdo->exec('
-CREATE TABLE cards (
- id integer primary key asc,
- addressbookid integer,
- carddata blob,
- uri text,
- lastmodified integer,
- etag text,
- size integer
-);
- ');
- break;
- }
-} else {
- switch ($driver) {
- case 'mysql':
- $pdo->exec('
- ALTER TABLE cards
- ADD etag VARBINARY(32),
- ADD size INT(11) UNSIGNED NOT NULL;
- ');
- break;
-
- case 'sqlite':
- $pdo->exec('
- ALTER TABLE cards ADD etag text;
- ALTER TABLE cards ADD size integer;
- ');
- break;
- }
- echo "Reading all old vcards and populating etag and size fields.\n";
- $result = $pdo->query('SELECT id, carddata FROM cards');
- $stmt = $pdo->prepare('UPDATE cards SET etag = ?, size = ? WHERE id = ?');
- while ($row = $result->fetch(\PDO::FETCH_ASSOC)) {
- $stmt->execute([
- md5($row['carddata']),
- strlen($row['carddata']),
- $row['id'],
- ]);
- }
-}
-
-echo "Upgrade to 2.0 schema completed.\n";
diff --git a/htdocs/includes/sabre/sabre/dav/bin/migrateto21.php b/htdocs/includes/sabre/sabre/dav/bin/migrateto21.php
deleted file mode 100755
index 2c15b0a217e..00000000000
--- a/htdocs/includes/sabre/sabre/dav/bin/migrateto21.php
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/usr/bin/env php
-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
-
-$driver = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
-
-switch ($driver) {
- case 'mysql':
- echo "Detected MySQL.\n";
- break;
- case 'sqlite':
- echo "Detected SQLite.\n";
- break;
- default:
- echo 'Error: unsupported driver: '.$driver."\n";
- exit(-1);
-}
-
-echo "Upgrading 'calendarobjects'\n";
-$addUid = false;
-try {
- $result = $pdo->query('SELECT * FROM calendarobjects LIMIT 1');
- $row = $result->fetch(\PDO::FETCH_ASSOC);
-
- if (!$row) {
- echo "No data in table. Going to try to add the uid field anyway.\n";
- $addUid = true;
- } elseif (array_key_exists('uid', $row)) {
- echo "uid field exists. Assuming that this part of the migration has\n";
- echo "Already been completed.\n";
- } else {
- echo "2.0 schema detected.\n";
- $addUid = true;
- }
-} catch (Exception $e) {
- echo "Could not find a calendarobjects table. Skipping this part of the\n";
- echo "upgrade.\n";
-}
-
-if ($addUid) {
- switch ($driver) {
- case 'mysql':
- $pdo->exec('ALTER TABLE calendarobjects ADD uid VARCHAR(200)');
- break;
- case 'sqlite':
- $pdo->exec('ALTER TABLE calendarobjects ADD uid TEXT');
- break;
- }
-
- $result = $pdo->query('SELECT id, calendardata FROM calendarobjects');
- $stmt = $pdo->prepare('UPDATE calendarobjects SET uid = ? WHERE id = ?');
- $counter = 0;
-
- while ($row = $result->fetch(\PDO::FETCH_ASSOC)) {
- try {
- $vobj = \Sabre\VObject\Reader::read($row['calendardata']);
- } catch (\Exception $e) {
- echo "Warning! Item with id $row[id] could not be parsed!\n";
- continue;
- }
- $uid = null;
- $item = $vobj->getBaseComponent();
- if (!isset($item->UID)) {
- echo "Warning! Item with id $item[id] does NOT have a UID property and this is required.\n";
- continue;
- }
- $uid = (string) $item->UID;
- $stmt->execute([$uid, $row['id']]);
- ++$counter;
- }
-}
-
-echo "Creating 'schedulingobjects'\n";
-
-switch ($driver) {
- case 'mysql':
- $pdo->exec('CREATE TABLE IF NOT EXISTS schedulingobjects
-(
- id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- principaluri VARCHAR(255),
- calendardata MEDIUMBLOB,
- uri VARCHAR(200),
- lastmodified INT(11) UNSIGNED,
- etag VARCHAR(32),
- size INT(11) UNSIGNED NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
- ');
- break;
-
- case 'sqlite':
- $pdo->exec('CREATE TABLE IF NOT EXISTS schedulingobjects (
- id integer primary key asc,
- principaluri text,
- calendardata blob,
- uri text,
- lastmodified integer,
- etag text,
- size integer
-)
-');
- break;
-}
-
-echo "Done.\n";
-
-echo "Upgrade to 2.1 schema completed.\n";
diff --git a/htdocs/includes/sabre/sabre/dav/bin/migrateto30.php b/htdocs/includes/sabre/sabre/dav/bin/migrateto30.php
deleted file mode 100755
index 9798cadd259..00000000000
--- a/htdocs/includes/sabre/sabre/dav/bin/migrateto30.php
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/usr/bin/env php
-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
-
-$driver = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
-
-switch ($driver) {
- case 'mysql':
- echo "Detected MySQL.\n";
- break;
- case 'sqlite':
- echo "Detected SQLite.\n";
- break;
- default:
- echo 'Error: unsupported driver: '.$driver."\n";
- exit(-1);
-}
-
-echo "Upgrading 'propertystorage'\n";
-$addValueType = false;
-try {
- $result = $pdo->query('SELECT * FROM propertystorage LIMIT 1');
- $row = $result->fetch(\PDO::FETCH_ASSOC);
-
- if (!$row) {
- echo "No data in table. Going to re-create the table.\n";
- $random = mt_rand(1000, 9999);
- echo "Renaming propertystorage -> propertystorage_old$random and creating new table.\n";
-
- switch ($driver) {
- case 'mysql':
- $pdo->exec('RENAME TABLE propertystorage TO propertystorage_old'.$random);
- $pdo->exec('
- CREATE TABLE propertystorage (
- id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- path VARBINARY(1024) NOT NULL,
- name VARBINARY(100) NOT NULL,
- valuetype INT UNSIGNED,
- value MEDIUMBLOB
- );
- ');
- $pdo->exec('CREATE UNIQUE INDEX path_property_'.$random.' ON propertystorage (path(600), name(100));');
- break;
- case 'sqlite':
- $pdo->exec('ALTER TABLE propertystorage RENAME TO propertystorage_old'.$random);
- $pdo->exec('
-CREATE TABLE propertystorage (
- id integer primary key asc,
- path text,
- name text,
- valuetype integer,
- value blob
-);');
-
- $pdo->exec('CREATE UNIQUE INDEX path_property_'.$random.' ON propertystorage (path, name);');
- break;
- }
- } elseif (array_key_exists('valuetype', $row)) {
- echo "valuetype field exists. Assuming that this part of the migration has\n";
- echo "Already been completed.\n";
- } else {
- echo "2.1 schema detected. Going to perform upgrade.\n";
- $addValueType = true;
- }
-} catch (Exception $e) {
- echo "Could not find a propertystorage table. Skipping this part of the\n";
- echo "upgrade.\n";
- echo $e->getMessage(), "\n";
-}
-
-if ($addValueType) {
- switch ($driver) {
- case 'mysql':
- $pdo->exec('ALTER TABLE propertystorage ADD valuetype INT UNSIGNED');
- break;
- case 'sqlite':
- $pdo->exec('ALTER TABLE propertystorage ADD valuetype INT');
-
- break;
- }
-
- $pdo->exec('UPDATE propertystorage SET valuetype = 1 WHERE valuetype IS NULL ');
-}
-
-echo "Migrating vcardurl\n";
-
-$result = $pdo->query('SELECT id, uri, vcardurl FROM principals WHERE vcardurl IS NOT NULL');
-$stmt1 = $pdo->prepare('INSERT INTO propertystorage (path, name, valuetype, value) VALUES (?, ?, 3, ?)');
-
-while ($row = $result->fetch(\PDO::FETCH_ASSOC)) {
- // Inserting the new record
- $stmt1->execute([
- 'addressbooks/'.basename($row['uri']),
- '{http://calendarserver.org/ns/}me-card',
- serialize(new Sabre\DAV\Xml\Property\Href($row['vcardurl'])),
- ]);
-
- echo serialize(new Sabre\DAV\Xml\Property\Href($row['vcardurl']));
-}
-
-echo "Done.\n";
-echo "Upgrade to 3.0 schema completed.\n";
diff --git a/htdocs/includes/sabre/sabre/dav/bin/migrateto32.php b/htdocs/includes/sabre/sabre/dav/bin/migrateto32.php
deleted file mode 100755
index 09ac55d13ee..00000000000
--- a/htdocs/includes/sabre/sabre/dav/bin/migrateto32.php
+++ /dev/null
@@ -1,258 +0,0 @@
-#!/usr/bin/env php
-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
-
-$driver = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
-
-switch ($driver) {
- case 'mysql':
- echo "Detected MySQL.\n";
- break;
- case 'sqlite':
- echo "Detected SQLite.\n";
- break;
- default:
- echo 'Error: unsupported driver: '.$driver."\n";
- exit(-1);
-}
-
-echo "Creating 'calendarinstances'\n";
-$addValueType = false;
-try {
- $result = $pdo->query('SELECT * FROM calendarinstances LIMIT 1');
- $result->fetch(\PDO::FETCH_ASSOC);
- echo "calendarinstances exists. Assuming this part of the migration has already been done.\n";
-} catch (Exception $e) {
- echo "calendarinstances does not yet exist. Creating table and migrating data.\n";
-
- switch ($driver) {
- case 'mysql':
- $pdo->exec(<<exec('
-INSERT INTO calendarinstances
- (
- calendarid,
- principaluri,
- access,
- displayname,
- uri,
- description,
- calendarorder,
- calendarcolor,
- transparent
- )
-SELECT
- id,
- principaluri,
- 1,
- displayname,
- uri,
- description,
- calendarorder,
- calendarcolor,
- transparent
-FROM calendars
-');
- break;
- case 'sqlite':
- $pdo->exec(<<exec('
-INSERT INTO calendarinstances
- (
- calendarid,
- principaluri,
- access,
- displayname,
- uri,
- description,
- calendarorder,
- calendarcolor,
- transparent
- )
-SELECT
- id,
- principaluri,
- 1,
- displayname,
- uri,
- description,
- calendarorder,
- calendarcolor,
- transparent
-FROM calendars
-');
- break;
- }
-}
-try {
- $result = $pdo->query('SELECT * FROM calendars LIMIT 1');
- $row = $result->fetch(\PDO::FETCH_ASSOC);
-
- if (!$row) {
- echo "Source table is empty.\n";
- $migrateCalendars = true;
- }
-
- $columnCount = count($row);
- if (3 === $columnCount) {
- echo "The calendars table has 3 columns already. Assuming this part of the migration was already done.\n";
- $migrateCalendars = false;
- } else {
- echo 'The calendars table has '.$columnCount." columns.\n";
- $migrateCalendars = true;
- }
-} catch (Exception $e) {
- echo "calendars table does not exist. This is a major problem. Exiting.\n";
- exit(-1);
-}
-
-if ($migrateCalendars) {
- $calendarBackup = 'calendars_3_1_'.$backupPostfix;
- echo "Backing up 'calendars' to '", $calendarBackup, "'\n";
-
- switch ($driver) {
- case 'mysql':
- $pdo->exec('RENAME TABLE calendars TO '.$calendarBackup);
- break;
- case 'sqlite':
- $pdo->exec('ALTER TABLE calendars RENAME TO '.$calendarBackup);
- break;
- }
-
- echo "Creating new calendars table.\n";
- switch ($driver) {
- case 'mysql':
- $pdo->exec(<<exec(<<exec(<<0):
- print "Bytes to go before we hit threshold:", bytes
- else:
- print "Threshold exceeded with:", -bytes, "bytes"
- dir = os.listdir(cacheDir)
- dir2 = []
- for file in dir:
- path = cacheDir + '/' + file
- dir2.append({
- "path" : path,
- "atime": os.stat(path).st_atime,
- "size" : os.stat(path).st_size
- })
-
- dir2.sort(lambda x,y: int(x["atime"]-y["atime"]))
-
- filesunlinked = 0
- gainedspace = 0
-
- # Left is the amount of bytes that need to be freed up
- # The default is the 'min_erase setting'
- left = min_erase
-
- # If the min_erase setting is lower than the amount of bytes over
- # the threshold, we use that number instead.
- if left < -bytes :
- left = -bytes
-
- print "Need to delete at least:", left;
-
- for file in dir2:
-
- # Only deleting files if we're not simulating
- if not simulate: os.unlink(file["path"])
- left = int(left - file["size"])
- gainedspace = gainedspace + file["size"]
- filesunlinked = filesunlinked + 1
-
- if(left<0):
- break
-
- print "%d files deleted (%d bytes)" % (filesunlinked, gainedspace)
-
-
- time.sleep(sleep)
-
-
-
-def main():
- parser = OptionParser(
- version="naturalselection v0.3",
- description="Cache directory manager. Deletes cache entries based on accesstime and free space thresholds.\n" +
- "This utility is distributed alongside SabreDAV.",
- usage="usage: %prog [options] cacheDirectory",
- )
- parser.add_option(
- '-s',
- dest="simulate",
- action="store_true",
- help="Don't actually make changes, but just simulate the behaviour",
- )
- parser.add_option(
- '-r','--runs',
- help="How many times to check before exiting. -1 is infinite, which is the default",
- type="int",
- dest="runs",
- default=-1
- )
- parser.add_option(
- '-n','--interval',
- help="Sleep time in seconds (default = 5)",
- type="int",
- dest="sleep",
- default=5
- )
- parser.add_option(
- '-l','--threshold',
- help="Threshold in bytes (default = 10737418240, which is 10GB)",
- type="int",
- dest="threshold",
- default=10737418240
- )
- parser.add_option(
- '-m', '--min-erase',
- help="Minimum number of bytes to erase when the threshold is reached. " +
- "Setting this option higher will reduce the number of times the cache directory will need to be scanned. " +
- "(the default is 1073741824, which is 1GB.)",
- type="int",
- dest="min_erase",
- default=1073741824
- )
-
- options,args = parser.parse_args()
- if len(args)<1:
- parser.error("This utility requires at least 1 argument")
- cacheDir = args[0]
-
- print "Natural Selection"
- print "Cache directory:", cacheDir
- free = getfreespace(cacheDir);
- print "Current free disk space:", free
-
- runs = options.runs;
- while runs!=0 :
- run(
- cacheDir,
- sleep=options.sleep,
- simulate=options.simulate,
- threshold=options.threshold,
- min_erase=options.min_erase
- )
- if runs>0:
- runs = runs - 1
-
-if __name__ == '__main__' :
- main()
diff --git a/htdocs/includes/sabre/sabre/dav/bin/sabredav b/htdocs/includes/sabre/sabre/dav/bin/sabredav
deleted file mode 100755
index 032371ba8bc..00000000000
--- a/htdocs/includes/sabre/sabre/dav/bin/sabredav
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-php -S 0.0.0.0:8080 `dirname $0`/sabredav.php
diff --git a/htdocs/includes/sabre/sabre/dav/bin/sabredav.php b/htdocs/includes/sabre/sabre/dav/bin/sabredav.php
deleted file mode 100755
index 71047b8f8b9..00000000000
--- a/htdocs/includes/sabre/sabre/dav/bin/sabredav.php
+++ /dev/null
@@ -1,51 +0,0 @@
-stream = fopen('php://stdout', 'w');
- }
-
- public function log($msg)
- {
- fwrite($this->stream, $msg."\n");
- }
-}
-
-$log = new CliLog();
-
-if ('cli-server' !== php_sapi_name()) {
- exit('This script is intended to run on the built-in php webserver');
-}
-
-// Finding composer
-
-$paths = [
- __DIR__.'/../vendor/autoload.php',
- __DIR__.'/../../../autoload.php',
-];
-
-foreach ($paths as $path) {
- if (file_exists($path)) {
- include $path;
- break;
- }
-}
-
-use Sabre\DAV;
-
-// Root
-$root = new DAV\FS\Directory(getcwd());
-
-// Setting up server.
-$server = new DAV\Server($root);
-
-// Browser plugin
-$server->addPlugin(new DAV\Browser\Plugin());
-
-$server->exec();
diff --git a/htdocs/includes/sabre/sabre/event/bin/.empty b/htdocs/includes/sabre/sabre/event/bin/.empty
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/htdocs/includes/sabre/sabre/http/bin/.empty b/htdocs/includes/sabre/sabre/http/bin/.empty
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/htdocs/includes/sabre/sabre/vobject/bin/bench.php b/htdocs/includes/sabre/sabre/vobject/bin/bench.php
deleted file mode 100755
index 0a2736fa6d5..00000000000
--- a/htdocs/includes/sabre/sabre/vobject/bin/bench.php
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env php
-parse->start();
-
-$vcal = Sabre\VObject\Reader::read(fopen($inputFile, 'r'));
-
-$bench->parse->stop();
-
-$repeat = 100;
-$start = new \DateTime('2000-01-01');
-$end = new \DateTime('2020-01-01');
-$timeZone = new \DateTimeZone('America/Toronto');
-
-$bench->fb->start();
-
-for ($i = 0; $i < $repeat; ++$i) {
- $fb = new Sabre\VObject\FreeBusyGenerator($start, $end, $vcal, $timeZone);
- $results = $fb->getResult();
-}
-$bench->fb->stop();
-
-echo $bench,"\n";
-
-function formatMemory($input)
-{
- if (strlen($input) > 6) {
- return round($input / (1024 * 1024)).'M';
- } elseif (strlen($input) > 3) {
- return round($input / 1024).'K';
- }
-}
-
-unset($input, $splitter);
-
-echo 'peak memory usage: '.formatMemory(memory_get_peak_usage()), "\n";
-echo 'current memory usage: '.formatMemory(memory_get_usage()), "\n";
diff --git a/htdocs/includes/sabre/sabre/vobject/bin/bench_manipulatevcard.php b/htdocs/includes/sabre/sabre/vobject/bin/bench_manipulatevcard.php
deleted file mode 100644
index df6d9f23d66..00000000000
--- a/htdocs/includes/sabre/sabre/vobject/bin/bench_manipulatevcard.php
+++ /dev/null
@@ -1,64 +0,0 @@
-parse->start();
- $vcard = $splitter->getNext();
- $bench->parse->pause();
-
- if (!$vcard) {
- break;
- }
-
- $bench->manipulate->start();
- $vcard->{'X-FOO'} = 'Random new value!';
- $emails = [];
- if (isset($vcard->EMAIL)) {
- foreach ($vcard->EMAIL as $email) {
- $emails[] = (string) $email;
- }
- }
- $bench->manipulate->pause();
-
- $bench->serialize->start();
- $vcard2 = $vcard->serialize();
- $bench->serialize->pause();
-
- $vcard->destroy();
-}
-
-echo $bench,"\n";
-
-function formatMemory($input)
-{
- if (strlen($input) > 6) {
- return round($input / (1024 * 1024)).'M';
- } elseif (strlen($input) > 3) {
- return round($input / 1024).'K';
- }
-}
-
-unset($input, $splitter);
-
-echo 'peak memory usage: '.formatMemory(memory_get_peak_usage()), "\n";
-echo 'current memory usage: '.formatMemory(memory_get_usage()), "\n";
diff --git a/htdocs/includes/sabre/sabre/vobject/bin/fetch_windows_zones.php b/htdocs/includes/sabre/sabre/vobject/bin/fetch_windows_zones.php
deleted file mode 100755
index 2361dc3093f..00000000000
--- a/htdocs/includes/sabre/sabre/vobject/bin/fetch_windows_zones.php
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env php
-xpath('//mapZone') as $mapZone) {
- $from = (string) $mapZone['other'];
- $to = (string) $mapZone['type'];
-
- list($to) = explode(' ', $to, 2);
-
- if (!isset($map[$from])) {
- $map[$from] = $to;
- }
-}
-
-ksort($map);
-echo "Writing to: $outputFile\n";
-
-$f = fopen($outputFile, 'w');
-fwrite($f, " testdata.vcf
-
-HI;
-
- fwrite(STDERR, $help);
- exit(2);
-}
-
-$count = (int)$argv[1];
-if ($count < 1) {
- fwrite(STDERR, "Count must be at least 1\n");
- exit(2);
-}
-
-fwrite(STDERR, "sabre/vobject " . Version::VERSION . "\n");
-fwrite(STDERR, "Generating " . $count . " vcards in vCard 4.0 format\n");
-
-/**
- * The following list is just some random data we compiled from various
- * sources online.
- *
- * Very little thought went into compiling this list, and certainly nothing
- * political or ethical.
- *
- * We would _love_ more additions to this to add more variation to this list.
- *
- * Send us PR's and don't be shy adding your own first and last name for fun.
- */
-
-$sets = array(
- "nl" => array(
- "country" => "Netherlands",
- "boys" => array(
- "Anno",
- "Bram",
- "Daan",
- "Evert",
- "Finn",
- "Jayden",
- "Jens",
- "Jesse",
- "Levi",
- "Lucas",
- "Luuk",
- "Milan",
- "René",
- "Sem",
- "Sibrand",
- "Willem",
- ),
- "girls" => array(
- "Celia",
- "Emma",
- "Fenna",
- "Geke",
- "Inge",
- "Julia",
- "Lisa",
- "Lotte",
- "Mila",
- "Sara",
- "Sophie",
- "Tess",
- "Zoë",
- ),
- "last" => array(
- "Bakker",
- "Bos",
- "De Boer",
- "De Groot",
- "De Jong",
- "De Vries",
- "Jansen",
- "Janssen",
- "Meyer",
- "Mulder",
- "Peters",
- "Smit",
- "Van Dijk",
- "Van den Berg",
- "Visser",
- "Vos",
- ),
- ),
- "us" => array(
- "country" => "United States",
- "boys" => array(
- "Aiden",
- "Alexander",
- "Charles",
- "David",
- "Ethan",
- "Jacob",
- "James",
- "Jayden",
- "John",
- "Joseph",
- "Liam",
- "Mason",
- "Michael",
- "Noah",
- "Richard",
- "Robert",
- "Thomas",
- "William",
- ),
- "girls" => array(
- "Ava",
- "Barbara",
- "Chloe",
- "Dorothy",
- "Elizabeth",
- "Emily",
- "Emma",
- "Isabella",
- "Jennifer",
- "Lily",
- "Linda",
- "Margaret",
- "Maria",
- "Mary",
- "Mia",
- "Olivia",
- "Patricia",
- "Roxy",
- "Sophia",
- "Susan",
- "Zoe",
- ),
- "last" => array(
- "Smith",
- "Johnson",
- "Williams",
- "Jones",
- "Brown",
- "Davis",
- "Miller",
- "Wilson",
- "Moore",
- "Taylor",
- "Anderson",
- "Thomas",
- "Jackson",
- "White",
- "Harris",
- "Martin",
- "Thompson",
- "Garcia",
- "Martinez",
- "Robinson",
- ),
- ),
-);
-
-$current = 0;
-
-$r = function($arr) {
-
- return $arr[mt_rand(0,count($arr)-1)];
-
-};
-
-$bdayStart = strtotime('-85 years');
-$bdayEnd = strtotime('-20 years');
-
-while($current < $count) {
-
- $current++;
- fwrite(STDERR, "\033[100D$current/$count");
-
- $country = array_rand($sets);
- $gender = mt_rand(0,1)?'girls':'boys';
-
- $vcard = new Component\VCard(array(
- 'VERSION' => '4.0',
- 'FN' => $r($sets[$country][$gender]) . ' ' . $r($sets[$country]['last']),
- 'UID' => UUIDUtil::getUUID(),
- ));
-
- $bdayRatio = mt_rand(0,9);
-
- if($bdayRatio < 2) {
- // 20% has a birthday property with a full date
- $dt = new \DateTime('@' . mt_rand($bdayStart, $bdayEnd));
- $vcard->add('BDAY', $dt->format('Ymd'));
-
- } elseif ($bdayRatio < 3) {
- // 10% we only know the month and date of
- $dt = new \DateTime('@' . mt_rand($bdayStart, $bdayEnd));
- $vcard->add('BDAY', '--' . $dt->format('md'));
- }
- if ($result = $vcard->validate()) {
- ob_start();
- echo "\nWe produced an invalid vcard somehow!\n";
- foreach($result as $message) {
- echo " " . $message['message'] . "\n";
- }
- fwrite(STDERR, ob_get_clean());
- }
- echo $vcard->serialize();
-
-}
-
-fwrite(STDERR,"\nDone.\n");
diff --git a/htdocs/includes/sabre/sabre/vobject/bin/generateicalendardata.php b/htdocs/includes/sabre/sabre/vobject/bin/generateicalendardata.php
deleted file mode 100755
index 019ed97450e..00000000000
--- a/htdocs/includes/sabre/sabre/vobject/bin/generateicalendardata.php
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env php
-add('VEVENT');
- $event->DTSTART = 'bla';
- $event->SUMMARY = 'Event #'.$ii;
- $event->UID = md5(microtime(true));
-
- $doctorRandom = mt_rand(1, 1000);
-
- switch ($doctorRandom) {
- // All-day event
- case 1:
- $event->DTEND = 'bla';
- $dtStart = clone $currentDate;
- $dtEnd = clone $currentDate;
- $dtEnd->modify('+'.mt_rand(1, 3).' days');
- $event->DTSTART->setDateTime($dtStart);
- $event->DTSTART['VALUE'] = 'DATE';
- $event->DTEND->setDateTime($dtEnd);
- break;
- case 2:
- $event->RRULE = 'FREQ=DAILY;COUNT='.mt_rand(1, 10);
- // no break intentional
- default:
- $dtStart = clone $currentDate;
- $dtStart->setTime(mt_rand(1, 23), mt_rand(0, 59), mt_rand(0, 59));
- $event->DTSTART->setDateTime($dtStart);
- $event->DURATION = 'PT'.mt_rand(1, 3).'H';
- break;
- }
-
- $currentDate->modify('+ '.mt_rand(0, 3).' days');
-}
-fwrite(STDERR, "Validating\n");
-
-$result = $calendar->validate();
-if ($result) {
- fwrite(STDERR, "Errors!\n");
- fwrite(STDERR, print_r($result, true));
- exit(-1);
-}
-
-fwrite(STDERR, "Serializing this beast\n");
-
-echo $calendar->serialize();
-
-fwrite(STDERR, "done.\n");
diff --git a/htdocs/includes/sabre/sabre/vobject/bin/mergeduplicates.php b/htdocs/includes/sabre/sabre/vobject/bin/mergeduplicates.php
deleted file mode 100755
index 31b2c14ab61..00000000000
--- a/htdocs/includes/sabre/sabre/vobject/bin/mergeduplicates.php
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/env php
- 0,
- 'No FN property' => 0,
- 'Ignored duplicates' => 0,
- 'Merged values' => 0,
- 'Error' => 0,
- 'Unique cards' => 0,
- 'Total written' => 0,
-];
-
-function writeStats()
-{
- global $stats;
- foreach ($stats as $name => $value) {
- echo str_pad($name, 23, ' ', STR_PAD_RIGHT), str_pad($value, 6, ' ', STR_PAD_LEFT), "\n";
- }
- // Moving cursor back a few lines.
- echo "\033[".count($stats).'A';
-}
-
-function write($vcard)
-{
- global $stats, $output;
-
- ++$stats['Total written'];
- fwrite($output, $vcard->serialize()."\n");
-}
-
-while ($vcard = $splitter->getNext()) {
- ++$stats['Total vcards'];
- writeStats();
-
- $fn = isset($vcard->FN) ? (string) $vcard->FN : null;
-
- if (empty($fn)) {
- // Immediately write this vcard, we don't compare it.
- ++$stats['No FN property'];
- ++$stats['Unique cards'];
- write($vcard);
- $vcard->destroy();
- continue;
- }
-
- if (!isset($collectedNames[$fn])) {
- $collectedNames[$fn] = $vcard;
- ++$stats['Unique cards'];
- continue;
- } else {
- // Starting comparison for all properties. We only check if properties
- // in the current vcard exactly appear in the earlier vcard as well.
- foreach ($vcard->children() as $newProp) {
- if (in_array($newProp->name, $ignoredProperties)) {
- // We don't care about properties such as UID and REV.
- continue;
- }
- $ok = false;
- foreach ($collectedNames[$fn]->select($newProp->name) as $compareProp) {
- if ($compareProp->serialize() === $newProp->serialize()) {
- $ok = true;
- break;
- }
- }
-
- if (!$ok) {
- if ('EMAIL' === $newProp->name || 'TEL' === $newProp->name) {
- // We're going to make another attempt to find this
- // property, this time just by value. If we find it, we
- // consider it a success.
- foreach ($collectedNames[$fn]->select($newProp->name) as $compareProp) {
- if ($compareProp->getValue() === $newProp->getValue()) {
- $ok = true;
- break;
- }
- }
-
- if (!$ok) {
- // Merging the new value in the old vcard.
- $collectedNames[$fn]->add(clone $newProp);
- $ok = true;
- ++$stats['Merged values'];
- }
- }
- }
-
- if (!$ok) {
- // echo $newProp->serialize() . " does not appear in earlier vcard!\n";
- ++$stats['Error'];
- if ($debug) {
- fwrite($debug, "Missing '".$newProp->name."' property in duplicate. Earlier vcard:\n".$collectedNames[$fn]->serialize()."\n\nLater:\n".$vcard->serialize()."\n\n");
- }
-
- $vcard->destroy();
- continue 2;
- }
- }
- }
-
- $vcard->destroy();
- ++$stats['Ignored duplicates'];
-}
-
-foreach ($collectedNames as $vcard) {
- // Overwriting any old PRODID
- $vcard->PRODID = '-//Sabre//Sabre VObject '.Version::VERSION.'//EN';
- write($vcard);
- writeStats();
-}
-
-echo str_repeat("\n", count($stats)), "\nDone.\n";
diff --git a/htdocs/includes/sabre/sabre/vobject/bin/rrulebench.php b/htdocs/includes/sabre/sabre/vobject/bin/rrulebench.php
deleted file mode 100644
index 69008002e33..00000000000
--- a/htdocs/includes/sabre/sabre/vobject/bin/rrulebench.php
+++ /dev/null
@@ -1,32 +0,0 @@
-parse->start();
-
-echo "Parsing.\n";
-$vobj = Sabre\VObject\Reader::read(fopen($inputFile, 'r'));
-
-$bench->parse->stop();
-
-echo "Expanding.\n";
-$bench->expand->start();
-
-$vobj->expand(new DateTime($startDate), new DateTime($endDate));
-
-$bench->expand->stop();
-
-echo $bench,"\n";
diff --git a/htdocs/includes/sabre/sabre/vobject/bin/vobject b/htdocs/includes/sabre/sabre/vobject/bin/vobject
deleted file mode 100755
index 2aca7e72965..00000000000
--- a/htdocs/includes/sabre/sabre/vobject/bin/vobject
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env php
-main($argv));
-
diff --git a/htdocs/includes/sabre/sabre/xml/bin/.empty b/htdocs/includes/sabre/sabre/xml/bin/.empty
deleted file mode 100644
index e69de29bb2d..00000000000