summaryrefslogtreecommitdiffstats
path: root/settings/l10n/sq.js
diff options
context:
space:
mode:
authorNextcloud bot <bot@nextcloud.com>2016-07-06 13:28:06 +0000
committerNextcloud bot <bot@nextcloud.com>2016-07-06 13:28:06 +0000
commitda2363a1dd08bc3ca4e0736a97516082700e846d (patch)
tree329fcc974cd16b0537adcfebbf436fce923d9d73 /settings/l10n/sq.js
parente1abe5a62b34d5de94b258b665ca612a973e2dbd (diff)
downloadnextcloud-server-da2363a1dd08bc3ca4e0736a97516082700e846d.tar.gz
nextcloud-server-da2363a1dd08bc3ca4e0736a97516082700e846d.zip
[tx-robot] updated from transifex
Diffstat (limited to 'settings/l10n/sq.js')
-rw-r--r--settings/l10n/sq.js11
1 files changed, 1 insertions, 10 deletions
diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js
index f8f6ab10897..65a4f199e75 100644
--- a/settings/l10n/sq.js
+++ b/settings/l10n/sq.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"settings",
{
"Wrong password" : "Fjalëkalim i gabuar",
+ "Saved" : "U ruajt",
"No user supplied" : "S’u dha përdorues",
"Authentication error" : "Gabim mirëfilltësimi",
"Please provide an admin recovery password, otherwise all user data will be lost" : "Ju lutemi, jepni një fjalëkalim rikthimesh për përgjegjësin, në të kundërt të gjitha të dhënat do të humbasin",
@@ -19,7 +20,6 @@ OC.L10N.register(
"Unable to add group." : "S’arrin të shtojë grup.",
"Unable to delete group." : "S’arrin të fshijë grup.",
"log-level out of allowed range" : "nivel regjistrimi jashtë intervalit të lejuar",
- "Saved" : "U ruajt",
"test email settings" : "testoni rregullime email-i",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ndodhi një gabim gjatë dërgimit të email-it. Ju lutemi, rishikoni rregullimet tuaja. (Error: %s)",
"Email sent" : "Email-i u dërgua",
@@ -64,7 +64,6 @@ OC.L10N.register(
"All" : "Krejt",
"No apps found for your version" : "S’u gjetën aplikacione për versionin tuaj",
"The app will be downloaded from the app store" : "Aplikacioni do të shkarkohet nga shitorja e aplikacioneve",
- "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Aplikacionet zyrtare ndërtohen brenda bashkësisë Nextcloud. Ato ofrojnë funksione qendrore për Nextcloud dhe janë gati për t’u përdorur në prodhim.",
"Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Aplikacionet e miratuara ndërtohen nga zhvillues të besuar dhe kanë kaluar një kontroll të përciptë sigurie. Mirëmbahen aktivisht në një depo të hapur kodi dhe mirëmbajtësit e tyre i konsiderojnë të qëndrueshme për përdorime nga të rastit deri në ato normale.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ky aplikacion s’është kontrolluar për probleme sigurie dhe është i ri ose i njohur si i paqëndrueshëm. Instalojeni duke e mbajtur vetë përgjegjësinë.",
"Update to %s" : "Përditësoje me %s",
@@ -175,7 +174,6 @@ OC.L10N.register(
"Enable server-side encryption" : "Aktivizo fshehtëzim më anë të shërbyesit",
"Please read carefully before activating server-side encryption: " : "Ju lutemi, lexoni me kujdes përpara aktivizimit të fshehtëzimeve më anë shërbyesi: ",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Pasi të jetë aktivizuar fshehtëzimi, krejt kartelat e ngarkuara te shërbyesi nga kjo pikë e tutje do të fshehtëzohen pasi të jenë depozituar në shërbyes. Çaktivizimi i fshehtëzimit në një datë të mëvonshme do të jetë i mundur vetëm nëse moduli aktiv i fshehtëzimeve e mbulon këtë funksion, dhe nëse plotësohen krejt parakushtet (p.sh. caktimi i një kyçi rimarrjesh).",
- "Encryption alone does not guarantee security of the system. Please see ownCloud documentation for more information about how the encryption app works, and the supported use cases." : "Fshehtëzimi, dhe vetëm kaq, s’garanton sigurinë e sistemit. Ju lutemi, për më tepër të dhëna se si funksionon aplikacioni i fshehtëzimeve, dhe për raste përdorimi që mbulon, lexoni dokumentimin e ownCloud-it.",
"Be aware that encryption always increases the file size." : "Kini parasysh që fshehtëzimi e rrit gjithnjë madhësinë e kartelës.",
"It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Është gjithmonë ide e mirë të krijohen kopjeruajtje të rregullta të të dhënave tuaja, në rast fshehtëzimi sigurohuni që bëni kopjeruajtje të kyçeve të fshehtëzimit, tok me të dhënat tuaja.",
"This is the final warning: Do you really want to enable encryption?" : "Ky është sinjalizimi përfundimtar: Doni vërtet të aktivizohet fshehtëzimi?",
@@ -228,8 +226,6 @@ OC.L10N.register(
"Show description …" : "Shfaq përshkrim …",
"Hide description …" : "Fshihe përshkrimin …",
"This app has an update available." : "Ka gati një përditësim për këtë aplikacion.",
- "This app has no minimum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "Ky aplikacion nuk ka të përcaktuar version minimum për ownCloud-in. Kjo do të përbëjë një gabim për ownCloud 11 dhe të mëvonshëm.",
- "This app has no maximum ownCloud version assigned. This will be an error in ownCloud 11 and later." : "Ky aplikacion nuk ka të përcaktuar version maksimum për ownCloud-in. Kjo do të përbëjë një gabim për ownCloud 11 dhe të mëvonshëm.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Ky aplikacion s’mund të instalohet, ngaqë për të nuk plotësohen varësitë vijuese:",
"Enable only for specific groups" : "Aktivizoje vetëm për grupe të veçantë",
"Uninstall App" : "Çinstaloje Aplikacionin",
@@ -265,13 +261,11 @@ OC.L10N.register(
"No email address set" : "S’është caktuar adresë email",
"You are member of the following groups:" : "Jeni anëtar i grupeve vijuese:",
"Password" : "Fjalëkalim",
- "Unable to change your password" : "S’arrin të ndryshojë fjalëkalimin tuaj",
"Current password" : "Fjalëkalimi i tanishëm",
"New password" : "Fjalëkalimi i ri",
"Change password" : "Ndrysho fjalëkalimin",
"Language" : "Gjuhë",
"Help translate" : "Ndihmoni në përkthim",
- "These are the web, desktop and mobile clients currently logged in to your ownCloud." : "Këta janë klientët web, desktop dhe celular të futur në këtë çast në ownCloud-in tuaj.",
"Browser" : "Shfletues",
"Most recent activity" : "Veprimtaria më e freskët",
"You've linked these apps." : "I keni lidhur këto aplikacione.",
@@ -279,16 +273,13 @@ OC.L10N.register(
"An app password is a passcode that gives an app or device permissions to access your %s account." : "Fjalëkalimet e aplikacioneve janë kodkalime që u japin leje një aplikacioni ose pajisjeje të hyjnë në llogarinë tuaj %s.",
"App name" : "Emër aplikacioni",
"Create new app password" : "Krijoni fjalëkalim aplikacioni të ri",
- "Use the credentials below to configure your app or device." : "Përdorni kredencialet më poshtë për të formësuar aplikacionin apo pajisjen tuaj.",
"Username" : "Emër përdoruesi",
"Done" : "U bë",
"Get the apps to sync your files" : "Merrni aplikacionet për njëkohësim të kartelave tuaja",
"Desktop client" : "Klient desktopi",
"Android app" : "Aplikacion për Android",
"iOS app" : "Aplikacion për iOS",
- "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Nëse doni ta përkrahni projektin\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">merrni pjesë te zhvillimi i tij</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">përhapni fjalën për të</a>!",
"Show First Run Wizard again" : "Shfaqe sërish Ndihmësin e Herës së Parë",
- "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Krijuar nga {communityopen}bashkësia ownCloud{linkclose}, {githubopen}kodi burim{linkclose} mund të përdoret sipas licencës {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.",
"Show storage location" : "Shfaq vendndodhje depozite",
"Show last log in" : "Shfaq hyrjen e fundit",
"Show user backend" : "Shfaq programin klient të përdoruesit",
'>450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871
<?php

class DatabaseSetupException extends Exception
{
	private $hint;

	public function __construct($message, $hint, $code = 0, Exception $previous = null) {
		$this->hint = $hint;
		parent::__construct($message, $code, $previous);
	}

	public function __toString() {
		return __CLASS__ . ": [{$this->code}]: {$this->message} ({$this->hint})\n";
	}

	public function getHint() {
		return $this->hint;
	}
}

class OC_Setup {

	public static function getTrans(){
		return OC_L10N::get('lib');
	}

	public static function install($options) {
		$l = self::getTrans();

		$error = array();
		$dbtype = $options['dbtype'];

		if(empty($options['adminlogin'])) {
			$error[] = $l->t('Set an admin username.');
		}
		if(empty($options['adminpass'])) {
			$error[] = $l->t('Set an admin password.');
		}
		if(empty($options['directory'])) {
			$options['directory'] = OC::$SERVERROOT."/data";
		}

		if($dbtype == 'mysql' or $dbtype == 'pgsql' or $dbtype == 'oci' or $dbtype == 'mssql') { //mysql and postgresql needs more config options
			if($dbtype == 'mysql')
				$dbprettyname = 'MySQL';
			else if($dbtype == 'pgsql')
				$dbprettyname = 'PostgreSQL';
			else if ($dbtype == 'mssql')
				$dbprettyname = 'MS SQL Server';
			else
				$dbprettyname = 'Oracle';


			if(empty($options['dbuser'])) {
				$error[] = $l->t("%s enter the database username.", array($dbprettyname));
			}
			if(empty($options['dbname'])) {
				$error[] = $l->t("%s enter the database name.", array($dbprettyname));
			}
			if(substr_count($options['dbname'], '.') >= 1) {
				$error[] = $l->t("%s you may not use dots in the database name", array($dbprettyname));
			}
			if($dbtype != 'oci' && empty($options['dbhost'])) {
				$error[] = $l->t("%s set the database host.", array($dbprettyname));
			}
		}

		if(count($error) == 0) { //no errors, good
			$username = htmlspecialchars_decode($options['adminlogin']);
			$password = htmlspecialchars_decode($options['adminpass']);
			$datadir = htmlspecialchars_decode($options['directory']);

			if (OC_Util::runningOnWindows()) {
				$datadir = rtrim(realpath($datadir), '\\');
			}

			//use sqlite3 when available, otherise sqlite2 will be used.
			if($dbtype=='sqlite' and class_exists('SQLite3')) {
				$dbtype='sqlite3';
			}

			//generate a random salt that is used to salt the local user passwords
			$salt = OC_Util::generate_random_bytes(30);
			OC_Config::setValue('passwordsalt', $salt);

			//write the config file
			OC_Config::setValue('datadirectory', $datadir);
			OC_Config::setValue('dbtype', $dbtype);
			OC_Config::setValue('version', implode('.', OC_Util::getVersion()));
			if($dbtype == 'mysql') {
				$dbuser = $options['dbuser'];
				$dbpass = $options['dbpass'];
				$dbname = $options['dbname'];
				$dbhost = $options['dbhost'];
				$dbtableprefix = isset($options['dbtableprefix']) ? $options['dbtableprefix'] : 'oc_';

				OC_Config::setValue('dbname', $dbname);
				OC_Config::setValue('dbhost', $dbhost);
				OC_Config::setValue('dbtableprefix', $dbtableprefix);

				try {
					self::setupMySQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username);
				} catch (DatabaseSetupException $e) {
					$error[] = array(
						'error' => $e->getMessage(),
						'hint' => $e->getHint()
					);
					return($error);
				}
			}
			elseif($dbtype == 'pgsql') {
				$dbuser = $options['dbuser'];
				$dbpass = $options['dbpass'];
				$dbname = $options['dbname'];
				$dbhost = $options['dbhost'];
				$dbtableprefix = isset($options['dbtableprefix']) ? $options['dbtableprefix'] : 'oc_';

				OC_Config::setValue('dbname', $dbname);
				OC_Config::setValue('dbhost', $dbhost);
				OC_Config::setValue('dbtableprefix', $dbtableprefix);

				try {
					self::setupPostgreSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username);
				} catch (DatabaseSetupException $e) {
					$error[] = array(
						'error' => $l->t('PostgreSQL username and/or password not valid'),
						'hint' => $l->t('You need to enter either an existing account or the administrator.')
					);
					return $error;
				}
			}
			elseif($dbtype == 'oci') {
				$dbuser = $options['dbuser'];
				$dbpass = $options['dbpass'];
				$dbname = $options['dbname'];
				$dbtablespace = $options['dbtablespace'];
				$dbhost = isset($options['dbhost'])?$options['dbhost']:'';
				$dbtableprefix = isset($options['dbtableprefix']) ? $options['dbtableprefix'] : 'oc_';

				OC_Config::setValue('dbname', $dbname);
				OC_Config::setValue('dbtablespace', $dbtablespace);
				OC_Config::setValue('dbhost', $dbhost);
				OC_Config::setValue('dbtableprefix', $dbtableprefix);

				try {
					self::setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace, $username);
				} catch (DatabaseSetupException $e) {
					$error[] = array(
						'error' => $l->t('Oracle connection could not be established'),
						'hint' => $e->getMessage().' Check environment: ORACLE_HOME='.getenv('ORACLE_HOME')
							.' ORACLE_SID='.getenv('ORACLE_SID')
							.' LD_LIBRARY_PATH='.getenv('LD_LIBRARY_PATH')
							.' NLS_LANG='.getenv('NLS_LANG')
							.' tnsnames.ora is '.(is_readable(getenv('ORACLE_HOME').'/network/admin/tnsnames.ora')?'':'not ').'readable'
					);
					return $error;
				}
			}
			elseif ($dbtype == 'mssql') {
				$dbuser = $options['dbuser'];
				$dbpass = $options['dbpass'];
				$dbname = $options['dbname'];
				$dbhost = $options['dbhost'];
				$dbtableprefix = isset($options['dbtableprefix']) ? $options['dbtableprefix'] : 'oc_';

				OC_Config::setValue('dbname', $dbname);
				OC_Config::setValue('dbhost', $dbhost);
				OC_Config::setValue('dbuser', $dbuser);
				OC_Config::setValue('dbpassword', $dbpass);
				OC_Config::setValue('dbtableprefix', $dbtableprefix);

				try {
					self::setupMSSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix);
				} catch (DatabaseSetupException $e) {
					$error[] = array(
						'error' => 'MS SQL username and/or password not valid',
						'hint' => 'You need to enter either an existing account or the administrator.'
					);
					return $error;
				}
			}
			else {
				//delete the old sqlite database first, might cause infinte loops otherwise
				if(file_exists("$datadir/owncloud.db")) {
					unlink("$datadir/owncloud.db");
				}
				//in case of sqlite, we can always fill the database
				error_log("creating sqlite db");
				OC_DB::createDbFromStructure('db_structure.xml');
			}

			//create the user and group
			try {
				OC_User::createUser($username, $password);
			}
			catch(Exception $exception) {
				$error[] = 'Error while trying to create admin user: ' . $exception->getMessage();
			}

			if(count($error) == 0) {
				OC_Appconfig::setValue('core', 'installedat', microtime(true));
				OC_Appconfig::setValue('core', 'lastupdatedat', microtime(true));
				OC_AppConfig::setValue('core', 'remote_core.css', '/core/minimizer.php');
				OC_AppConfig::setValue('core', 'remote_core.js', '/core/minimizer.php');

				OC_Group::createGroup('admin');
				OC_Group::addToGroup($username, 'admin');
				OC_User::login($username, $password);

				//guess what this does
				OC_Installer::installShippedApps();

				//create htaccess files for apache hosts
				if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) {
					self::createHtaccess();
				}

				//and we are done
				OC_Config::setValue('installed', true);
			}
		}

		return $error;
	}

	private static function setupMySQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username) {
		//check if the database user has admin right
		$l = self::getTrans();
		$connection = @mysql_connect($dbhost, $dbuser, $dbpass);
		if(!$connection) {
			throw new DatabaseSetupException($l->t('MySQL username and/or password not valid'),
				$l->t('You need to enter either an existing account or the administrator.'));
		}
		$oldUser=OC_Config::getValue('dbuser', false);

		//this should be enough to check for admin rights in mysql
		$query="SELECT user FROM mysql.user WHERE user='$dbuser'";
		if(mysql_query($query, $connection)) {
			//use the admin login data for the new database user

			//add prefix to the mysql user name to prevent collisions
			$dbusername=substr('oc_'.$username, 0, 16);
			if($dbusername!=$oldUser) {
				//hash the password so we don't need to store the admin config in the config file
				$dbpassword=OC_Util::generate_random_bytes(30);

				self::createDBUser($dbusername, $dbpassword, $connection);

				OC_Config::setValue('dbuser', $dbusername);
				OC_Config::setValue('dbpassword', $dbpassword);
			}

			//create the database
			self::createMySQLDatabase($dbname, $dbusername, $connection);
		}
		else {
			if($dbuser!=$oldUser) {
				OC_Config::setValue('dbuser', $dbuser);
				OC_Config::setValue('dbpassword', $dbpass);
			}

			//create the database
			self::createMySQLDatabase($dbname, $dbuser, $connection);
		}

		//fill the database if needed
		$query='select count(*) from information_schema.tables'
			." where table_schema='$dbname' AND table_name = '{$dbtableprefix}users';";
		$result = mysql_query($query, $connection);
		if($result) {
			$row=mysql_fetch_row($result);
		}
		if(!$result or $row[0]==0) {
			OC_DB::createDbFromStructure('db_structure.xml');
		}
		mysql_close($connection);
	}

	private static function createMySQLDatabase($name, $user, $connection) {
		//we cant use OC_BD functions here because we need to connect as the administrative user.
		$l = self::getTrans();
		$query = "CREATE DATABASE IF NOT EXISTS  `$name`";
		$result = mysql_query($query, $connection);
		if(!$result) {
			$entry = $l->t('DB Error: "%s"', array(mysql_error($connection))) . '<br />';
			$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
			\OC_Log::write('setup.mssql', $entry, \OC_Log::WARN);
		}
		$query="GRANT ALL PRIVILEGES ON  `$name` . * TO  '$user'";

		//this query will fail if there aren't the right permissions, ignore the error
		mysql_query($query, $connection);
	}

	private static function createDBUser($name, $password, $connection) {
		// we need to create 2 accounts, one for global use and one for local user. if we don't specify the local one,
		// the anonymous user would take precedence when there is one.
		$l = self::getTrans();
		$query = "CREATE USER '$name'@'localhost' IDENTIFIED BY '$password'";
		$result = mysql_query($query, $connection);
		if (!$result) {
			throw new DatabaseSetupException($l->t("MySQL user '%s'@'localhost' exists already.",
				array($name)), $l->t("Drop this user from MySQL", array($name)));
		}
		$query = "CREATE USER '$name'@'%' IDENTIFIED BY '$password'";
		$result = mysql_query($query, $connection);
		if (!$result) {
			throw new DatabaseSetupException($l->t("MySQL user '%s'@'%%' already exists", array($name)),
				$l->t("Drop this user from MySQL."));
		}
	}

	private static function setupPostgreSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $username) {
		$e_host = addslashes($dbhost);
		$e_user = addslashes($dbuser);
		$e_password = addslashes($dbpass);
		$l = self::getTrans();

		//check if the database user has admin rights
		$connection_string = "host='$e_host' dbname=postgres user='$e_user' password='$e_password'";
		$connection = @pg_connect($connection_string);
		if(!$connection) {
			throw new DatabaseSetupException($l->t('PostgreSQL username and/or password not valid'));
		}
		$e_user = pg_escape_string($dbuser);
		//check for roles creation rights in postgresql
		$query="SELECT 1 FROM pg_roles WHERE rolcreaterole=TRUE AND rolname='$e_user'";
		$result = pg_query($connection, $query);
		if($result and pg_num_rows($result) > 0) {
			//use the admin login data for the new database user

			//add prefix to the postgresql user name to prevent collisions
			$dbusername='oc_'.$username;
			//create a new password so we don't need to store the admin config in the config file
			$dbpassword=OC_Util::generate_random_bytes(30);

			self::pg_createDBUser($dbusername, $dbpassword, $connection);

			OC_Config::setValue('dbuser', $dbusername);
			OC_Config::setValue('dbpassword', $dbpassword);

			//create the database
			self::pg_createDatabase($dbname, $dbusername, $connection);
		}
		else {
			OC_Config::setValue('dbuser', $dbuser);
			OC_Config::setValue('dbpassword', $dbpass);

			//create the database
			self::pg_createDatabase($dbname, $dbuser, $connection);
		}

		// the connection to dbname=postgres is not needed anymore
		pg_close($connection);

		// connect to the ownCloud database (dbname=$dbname) and check if it needs to be filled
		$dbuser = OC_Config::getValue('dbuser');
		$dbpass = OC_Config::getValue('dbpassword');

		$e_host = addslashes($dbhost);
		$e_dbname = addslashes($dbname);
		$e_user = addslashes($dbuser);
		$e_password = addslashes($dbpass);

		$connection_string = "host='$e_host' dbname='$e_dbname' user='$e_user' password='$e_password'";
		$connection = @pg_connect($connection_string);
		if(!$connection) {
			throw new DatabaseSetupException($l->t('PostgreSQL username and/or password not valid'));
		}
		$query = "select count(*) FROM pg_class WHERE relname='{$dbtableprefix}users' limit 1";
		$result = pg_query($connection, $query);
		if($result) {
			$row = pg_fetch_row($result);
		}
		if(!$result or $row[0]==0) {
			OC_DB::createDbFromStructure('db_structure.xml');
		}
	}

	private static function pg_createDatabase($name, $user, $connection) {

		//we cant use OC_BD functions here because we need to connect as the administrative user.
		$l = self::getTrans();
		$e_name = pg_escape_string($name);
		$e_user = pg_escape_string($user);
		$query = "select datname from pg_database where datname = '$e_name'";
		$result = pg_query($connection, $query);
		if(!$result) {
			$entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '<br />';
			$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
			\OC_Log::write('setup.pg', $entry, \OC_Log::WARN);
		}
		if(! pg_fetch_row($result)) {
			//The database does not exists... let's create it
			$query = "CREATE DATABASE \"$e_name\" OWNER \"$e_user\"";
			$result = pg_query($connection, $query);
			if(!$result) {
				$entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '<br />';
				$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
				\OC_Log::write('setup.pg', $entry, \OC_Log::WARN);
			}
			else {
				$query = "REVOKE ALL PRIVILEGES ON DATABASE \"$e_name\" FROM PUBLIC";
				pg_query($connection, $query);
			}
		}
	}

	private static function pg_createDBUser($name, $password, $connection) {
		$l = self::getTrans();
		$e_name = pg_escape_string($name);
		$e_password = pg_escape_string($password);
		$query = "select * from pg_roles where rolname='$e_name';";
		$result = pg_query($connection, $query);
		if(!$result) {
			$entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '<br />';
			$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
			\OC_Log::write('setup.pg', $entry, \OC_Log::WARN);
		}

		if(! pg_fetch_row($result)) {
			//user does not exists let's create it :)
			$query = "CREATE USER \"$e_name\" CREATEDB PASSWORD '$e_password';";
			$result = pg_query($connection, $query);
			if(!$result) {
				$entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '<br />';
				$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
				\OC_Log::write('setup.pg', $entry, \OC_Log::WARN);
			}
		}
		else { // change password of the existing role
			$query = "ALTER ROLE \"$e_name\" WITH PASSWORD '$e_password';";
			$result = pg_query($connection, $query);
			if(!$result) {
				$entry = $l->t('DB Error: "%s"', array(pg_last_error($connection))) . '<br />';
				$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
				\OC_Log::write('setup.pg', $entry, \OC_Log::WARN);
			}
		}
	}

	private static function setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace,
		$username) {
		$l = self::getTrans();
		$e_host = addslashes($dbhost);
		$e_dbname = addslashes($dbname);
		//check if the database user has admin right
		if ($e_host == '') {
			$easy_connect_string = $e_dbname; // use dbname as easy connect name
		} else {
			$easy_connect_string = '//'.$e_host.'/'.$e_dbname;
		}
		\OC_Log::write('setup oracle', 'connect string: ' . $easy_connect_string, \OC_Log::DEBUG);
		$connection = @oci_connect($dbuser, $dbpass, $easy_connect_string);
		if(!$connection) {
			$e = oci_error();
			if (is_array ($e) && isset ($e['message'])) {
				throw new DatabaseSetupException($e['message']);
			}
			throw new DatabaseSetupException($l->t('Oracle username and/or password not valid'));
		}
		//check for roles creation rights in oracle

		$query='SELECT count(*) FROM user_role_privs, role_sys_privs'
			." WHERE user_role_privs.granted_role = role_sys_privs.role AND privilege = 'CREATE ROLE'";
		$stmt = oci_parse($connection, $query);
		if (!$stmt) {
			$entry = $l->t('DB Error: "%s"', array(oci_last_error($connection))) . '<br />';
			$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
			\OC_Log::write('setup.oci', $entry, \OC_Log::WARN);
		}
		$result = oci_execute($stmt);
		if($result) {
			$row = oci_fetch_row($stmt);
		}
		if($result and $row[0] > 0) {
			//use the admin login data for the new database user

			//add prefix to the oracle user name to prevent collisions
			$dbusername='oc_'.$username;
			//create a new password so we don't need to store the admin config in the config file
			$dbpassword=OC_Util::generate_random_bytes(30);

			//oracle passwords are treated as identifiers:
			//  must start with aphanumeric char
			//  needs to be shortened to 30 bytes, as the two " needed to escape the identifier count towards the identifier length.
			$dbpassword=substr($dbpassword, 0, 30);

			self::oci_createDBUser($dbusername, $dbpassword, $dbtablespace, $connection);

			OC_Config::setValue('dbuser', $dbusername);
			OC_Config::setValue('dbname', $dbusername);
			OC_Config::setValue('dbpassword', $dbpassword);

			//create the database not neccessary, oracle implies user = schema
			//self::oci_createDatabase($dbname, $dbusername, $connection);
		} else {

			OC_Config::setValue('dbuser', $dbuser);
			OC_Config::setValue('dbname', $dbname);
			OC_Config::setValue('dbpassword', $dbpass);

			//create the database not neccessary, oracle implies user = schema
			//self::oci_createDatabase($dbname, $dbuser, $connection);
		}

		//FIXME check tablespace exists: select * from user_tablespaces

		// the connection to dbname=oracle is not needed anymore
		oci_close($connection);

		// connect to the oracle database (schema=$dbuser) an check if the schema needs to be filled
		$dbuser = OC_Config::getValue('dbuser');
		//$dbname = OC_Config::getValue('dbname');
		$dbpass = OC_Config::getValue('dbpassword');

		$e_host = addslashes($dbhost);
		$e_dbname = addslashes($dbname);

		if ($e_host == '') {
			$easy_connect_string = $e_dbname; // use dbname as easy connect name
		} else {
			$easy_connect_string = '//'.$e_host.'/'.$e_dbname;
		}
		$connection = @oci_connect($dbuser, $dbpass, $easy_connect_string);
		if(!$connection) {
			throw new DatabaseSetupException($l->t('Oracle username and/or password not valid'));
		}
		$query = "SELECT count(*) FROM user_tables WHERE table_name = :un";
		$stmt = oci_parse($connection, $query);
		$un = $dbtableprefix.'users';
		oci_bind_by_name($stmt, ':un', $un);
		if (!$stmt) {
			$entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
			$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
			\OC_Log::write('setup.oci', $entry, \OC_Log::WARN);
		}
		$result = oci_execute($stmt);

		if($result) {
			$row = oci_fetch_row($stmt);
		}
		if(!$result or $row[0]==0) {
			OC_DB::createDbFromStructure('db_structure.xml');
		}
	}

	/**
	 *
	 * @param String $name
	 * @param String $password
	 * @param String $tablespace
	 * @param resource $connection
	 */
	private static function oci_createDBUser($name, $password, $tablespace, $connection) {
		$l = self::getTrans();
		$query = "SELECT * FROM all_users WHERE USERNAME = :un";
		$stmt = oci_parse($connection, $query);
		if (!$stmt) {
			$entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
			$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
			\OC_Log::write('setup.oci', $entry, \OC_Log::WARN);
		}
		oci_bind_by_name($stmt, ':un', $name);
		$result = oci_execute($stmt);
		if(!$result) {
			$entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
			$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
			\OC_Log::write('setup.oci', $entry, \OC_Log::WARN);
		}

		if(! oci_fetch_row($stmt)) {
			//user does not exists let's create it :)
			//password must start with alphabetic character in oracle
			$query = 'CREATE USER '.$name.' IDENTIFIED BY "'.$password.'" DEFAULT TABLESPACE '.$tablespace; //TODO set default tablespace
			$stmt = oci_parse($connection, $query);
			if (!$stmt) {
				$entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
				$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
				\OC_Log::write('setup.oci', $entry, \OC_Log::WARN);
			}
			//oci_bind_by_name($stmt, ':un', $name);
			$result = oci_execute($stmt);
			if(!$result) {
				$entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
				$entry .= $l->t('Offending command was: "%s", name: %s, password: %s',
					array($query, $name, $password)) . '<br />';
				\OC_Log::write('setup.oci', $entry, \OC_Log::WARN);
			}
		} else { // change password of the existing role
			$query = "ALTER USER :un IDENTIFIED BY :pw";
			$stmt = oci_parse($connection, $query);
			if (!$stmt) {
				$entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
				$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
				\OC_Log::write('setup.oci', $entry, \OC_Log::WARN);
			}
			oci_bind_by_name($stmt, ':un', $name);
			oci_bind_by_name($stmt, ':pw', $password);
			$result = oci_execute($stmt);
			if(!$result) {
				$entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
				$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
				\OC_Log::write('setup.oci', $entry, \OC_Log::WARN);
			}
		}
		// grant necessary roles
		$query = 'GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER, UNLIMITED TABLESPACE TO '.$name;
		$stmt = oci_parse($connection, $query);
		if (!$stmt) {
			$entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
			$entry .= $l->t('Offending command was: "%s"', array($query)) . '<br />';
			\OC_Log::write('setup.oci', $entry, \OC_Log::WARN);
		}
		$result = oci_execute($stmt);
		if(!$result) {
			$entry = $l->t('DB Error: "%s"', array(oci_error($connection))) . '<br />';
			$entry .= $l->t('Offending command was: "%s", name: %s, password: %s',
				array($query, $name, $password)) . '<br />';
			\OC_Log::write('setup.oci', $entry, \OC_Log::WARN);
		}
	}

	private static function setupMSSQLDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix) {
		$l = self::getTrans();

		//check if the database user has admin right
		$masterConnectionInfo = array( "Database" => "master", "UID" => $dbuser, "PWD" => $dbpass);

		$masterConnection = @sqlsrv_connect($dbhost, $masterConnectionInfo);
		if(!$masterConnection) {
			$entry = null;
			if( ($errors = sqlsrv_errors() ) != null) {
				$entry='DB Error: "'.print_r(sqlsrv_errors()).'"<br />';
			} else {
				$entry = '';
			}
			throw new DatabaseSetupException($l->t('MS SQL username and/or password not valid: %s', array($entry)));
		}

		OC_Config::setValue('dbuser', $dbuser);
		OC_Config::setValue('dbpassword', $dbpass);

		self::mssql_createDBLogin($dbuser, $dbpass, $masterConnection);

		self::mssql_createDatabase($dbname, $masterConnection);

		self::mssql_createDBUser($dbuser, $dbname, $masterConnection);

		sqlsrv_close($masterConnection);

		self::mssql_createDatabaseStructure($dbhost, $dbname, $dbuser, $dbpass, $dbtableprefix);
	}

	private static function mssql_createDBLogin($name, $password, $connection) {
		$query = "SELECT * FROM master.sys.server_principals WHERE name = '".$name."';";
		$result = sqlsrv_query($connection, $query);
		if ($result === false) {
			if ( ($errors = sqlsrv_errors() ) != null) {
				$entry='DB Error: "'.print_r(sqlsrv_errors()).'"<br />';
			} else {
				$entry = '';
			}
			$entry.='Offending command was: '.$query.'<br />';
			\OC_Log::write('setup.mssql', $entry, \OC_Log::WARN);
		} else {
			$row = sqlsrv_fetch_array($result);

			if ($row === false) {
				if ( ($errors = sqlsrv_errors() ) != null) {
					$entry='DB Error: "'.print_r(sqlsrv_errors()).'"<br />';
				} else {
					$entry = '';
				}
				$entry.='Offending command was: '.$query.'<br />';
				\OC_Log::write('setup.mssql', $entry, \OC_Log::WARN);
			} else {
				if ($row == null) {
					$query = "CREATE LOGIN [".$name."] WITH PASSWORD = '".$password."';";
					$result = sqlsrv_query($connection, $query);
					if (!$result or $result === false) {
						if ( ($errors = sqlsrv_errors() ) != null) {
							$entry='DB Error: "'.print_r(sqlsrv_errors()).'"<br />';
						} else {
							$entry = '';
						}
						$entry.='Offending command was: '.$query.'<br />';
						\OC_Log::write('setup.mssql', $entry, \OC_Log::WARN);
					}
				}
			}
		}
	}

	private static function mssql_createDBUser($name, $dbname, $connection) {
		$query = "SELECT * FROM [".$dbname."].sys.database_principals WHERE name = '".$name."';";
		$result = sqlsrv_query($connection, $query);
		if ($result === false) {
			if ( ($errors = sqlsrv_errors() ) != null) {
				$entry='DB Error: "'.print_r(sqlsrv_errors()).'"<br />';
			} else {
				$entry = '';
			}
			$entry.='Offending command was: '.$query.'<br />';
			\OC_Log::write('setup.mssql', $entry, \OC_Log::WARN);
		} else {
			$row = sqlsrv_fetch_array($result);

			if ($row === false) {
				if ( ($errors = sqlsrv_errors() ) != null) {
					$entry='DB Error: "'.print_r(sqlsrv_errors()).'"<br />';
				} else {
					$entry = '';
				}
				$entry.='Offending command was: '.$query.'<br />';
				\OC_Log::write('setup.mssql', $entry, \OC_Log::WARN);
			} else {
				if ($row == null) {
					$query = "USE [".$dbname."]; CREATE USER [".$name."] FOR LOGIN [".$name."];";
					$result = sqlsrv_query($connection, $query);
					if (!$result || $result === false) {
						if ( ($errors = sqlsrv_errors() ) != null) {
							$entry = 'DB Error: "'.print_r(sqlsrv_errors()).'"<br />';
						} else {
							$entry = '';
						}
						$entry.='Offending command was: '.$query.'<br />';
						\OC_Log::write('setup.mssql', $entry, \OC_Log::WARN);
					}
				}

				$query = "USE [".$dbname."]; EXEC sp_addrolemember 'db_owner', '".$name."';";
				$result = sqlsrv_query($connection, $query);
				if (!$result || $result === false) {
					if ( ($errors = sqlsrv_errors() ) != null) {
						$entry='DB Error: "'.print_r(sqlsrv_errors()).'"<br />';
					} else {
						$entry = '';
					}
					$entry.='Offending command was: '.$query.'<br />';
					\OC_Log::write('setup.mssql', $entry, \OC_Log::WARN);
				}
			}
		}
	}

	private static function mssql_createDatabase($dbname, $connection) {
		$query = "CREATE DATABASE [".$dbname."];";
		$result = sqlsrv_query($connection, $query);
		if (!$result || $result === false) {
			if ( ($errors = sqlsrv_errors() ) != null) {
				$entry='DB Error: "'.print_r(sqlsrv_errors()).'"<br />';
			} else {
				$entry = '';
			}
			$entry.='Offending command was: '.$query.'<br />';
			\OC_Log::write('setup.mssql', $entry, \OC_Log::WARN);
		}
	}

	private static function mssql_createDatabaseStructure($dbhost, $dbname, $dbuser, $dbpass, $dbtableprefix) {
		$connectionInfo = array( "Database" => $dbname, "UID" => $dbuser, "PWD" => $dbpass);

		$connection = @sqlsrv_connect($dbhost, $connectionInfo);

		//fill the database if needed
		$query = "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{$dbname}' AND TABLE_NAME = '{$dbtableprefix}users'";
		$result = sqlsrv_query($connection, $query);
		if ($result === false) {
			if ( ($errors = sqlsrv_errors() ) != null) {
				$entry='DB Error: "'.print_r(sqlsrv_errors()).'"<br />';
			} else {
				$entry = '';
			}
			$entry.='Offending command was: '.$query.'<br />';
			\OC_Log::write('setup.mssql', $entry, \OC_Log::WARN);
		} else {
			$row = sqlsrv_fetch_array($result);

			if ($row === false) {
				if ( ($errors = sqlsrv_errors() ) != null) {
					$entry='DB Error: "'.print_r(sqlsrv_errors()).'"<br />';
				} else {
					$entry = '';
				}
				$entry.='Offending command was: '.$query.'<br />';
				\OC_Log::write('setup.mssql', $entry, \OC_Log::WARN);
			} else {
				if ($row == null) {
					OC_DB::createDbFromStructure('db_structure.xml');
				}
			}
		}

		sqlsrv_close($connection);
	}

	/**
	 * create .htaccess files for apache hosts
	 */
	private static function createHtaccess() {
		$content = "<IfModule mod_fcgid.c>\n";
		$content.= "<IfModule mod_setenvif.c>\n";
		$content.= "<IfModule mod_headers.c>\n";
		$content.= "SetEnvIfNoCase ^Authorization$ \"(.+)\" XAUTHORIZATION=$1\n";
		$content.= "RequestHeader set XAuthorization %{XAUTHORIZATION}e env=XAUTHORIZATION\n";
		$content.= "</IfModule>\n";
		$content.= "</IfModule>\n";
		$content.= "</IfModule>\n";
		$content.= "ErrorDocument 403 ".OC::$WEBROOT."/core/templates/403.php\n";//custom 403 error page
		$content.= "ErrorDocument 404 ".OC::$WEBROOT."/core/templates/404.php\n";//custom 404 error page
		$content.= "<IfModule mod_php5.c>\n";
		$content.= "php_value upload_max_filesize 512M\n";//upload limit
		$content.= "php_value post_max_size 512M\n";
		$content.= "php_value memory_limit 512M\n";
		$content.= "php_value mbstring.func_overload 0\n";
		$content.= "<IfModule env_module>\n";
		$content.= "  SetEnv htaccessWorking true\n";
		$content.= "</IfModule>\n";
		$content.= "</IfModule>\n";
		$content.= "<IfModule mod_rewrite.c>\n";
		$content.= "RewriteEngine on\n";
		$content.= "RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n";
		$content.= "RewriteRule ^.well-known/host-meta /public.php?service=host-meta [QSA,L]\n";
		$content.= "RewriteRule ^.well-known/carddav /remote.php/carddav/ [R]\n";
		$content.= "RewriteRule ^.well-known/caldav /remote.php/caldav/ [R]\n";
		$content.= "RewriteRule ^apps/([^/]*)/(.*\.(css|php))$ index.php?app=$1&getfile=$2 [QSA,L]\n";
		$content.= "RewriteRule ^remote/(.*) remote.php [QSA,L]\n";
		$content.= "</IfModule>\n";
		$content.= "<IfModule mod_mime.c>\n";
		$content.= "AddType image/svg+xml svg svgz\n";
		$content.= "AddEncoding gzip svgz\n";
		$content.= "</IfModule>\n";
		$content.= "<IfModule dir_module>\n";
		$content.= "DirectoryIndex index.php index.html\n";
		$content.= "</IfModule>\n";
		$content.= "AddDefaultCharset utf-8\n";
		$content.= "Options -Indexes\n";
		@file_put_contents(OC::$SERVERROOT.'/.htaccess', $content); //supress errors in case we don't have permissions for it

		self::protectDataDirectory();
	}

	public static function protectDataDirectory() {
		$content = "deny from all\n";
		$content.= "IndexIgnore *";
		file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/.htaccess', $content);
		file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/index.html', '');
	}

	/**
	 * @brief Post installation checks
	 */
	public static function postSetupCheck($params) {
		// setup was successful -> webdav testing now
		$l = self::getTrans();
		if (OC_Util::isWebDAVWorking()) {
			header("Location: ".OC::$WEBROOT.'/');
		} else {

			$error = $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.');
			$hint = $l->t('Please double check the <a href=\'%s\'>installation guides</a>.',
				'http://doc.owncloud.org/server/5.0/admin_manual/installation.html');

			$tmpl = new OC_Template('', 'error', 'guest');
			$tmpl->assign('errors', array(1 => array('error' => $error, 'hint' => $hint)));
			$tmpl->printPage();
			exit();
		}
	}
}