diff --git a/apps/contacts/appinfo/app.php b/apps/contacts/appinfo/app.php index 85c383c4c3..0ff8fd29ef 100644 --- a/apps/contacts/appinfo/app.php +++ b/apps/contacts/appinfo/app.php @@ -20,7 +20,7 @@ OC_App::addNavigationEntry( array( 'order' => 10, 'href' => OC_Helper::linkTo( 'contacts', 'index.php' ), 'icon' => OC_Helper::imagePath( 'settings', 'users.svg' ), - 'name' => OC_Contacts_App::$l10n->t('Contacts') )); + 'name' => OC_L10N::get('contact')->t('Contacts') )); OC_APP::registerPersonal('contacts','settings'); diff --git a/apps/user_ldap/appinfo/app.php b/apps/user_ldap/appinfo/app.php index 5c56ca8191..4e4da56f05 100644 --- a/apps/user_ldap/appinfo/app.php +++ b/apps/user_ldap/appinfo/app.php @@ -21,7 +21,9 @@ * */ +require_once('apps/user_ldap/lib_ldap.php'); require_once('apps/user_ldap/user_ldap.php'); +require_once('apps/user_ldap/group_ldap.php'); OC_APP::registerAdmin('user_ldap','settings'); @@ -33,6 +35,7 @@ define('OC_USER_BACKEND_LDAP_DEFAULT_DISPLAY_NAME', 'uid'); // register user backend OC_User::useBackend( 'LDAP' ); +OC_Group::useBackend( 'LDAP' ); // add settings page to navigation $entry = array( diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php new file mode 100644 index 0000000000..b9d00fc78a --- /dev/null +++ b/apps/user_ldap/group_ldap.php @@ -0,0 +1,82 @@ +. + * + */ + + class OC_GROUP_LDAP extends OC_Group_Backend { +// //group specific settings + protected $ldapGroupFilter; + protected $ldapGroupDisplayName; + + public function __construct() { + $this->ldapGroupFilter = OC_Appconfig::getValue('user_ldap', 'ldap_group_filter', '(objectClass=posixGroup)'); + $this->ldapGroupDisplayName = OC_Appconfig::getValue('user_ldap', 'ldap_group_display_name', 'cn'); + } + + /** + * @brief is user in group? + * @param $uid uid of the user + * @param $gid gid of the group + * @returns true/false + * + * Checks whether the user is member of a group or not. + */ + public function inGroup($uid, $gid) { + return array(); + } + + /** + * @brief Get all groups a user belongs to + * @param $uid Name of the user + * @returns array with group names + * + * This function fetches all groups a user belongs to. It does not check + * if the user exists at all. + */ + public function getUserGroups($uid) { + return array(); + } + + /** + * @brief get a list of all users in a group + * @returns array with user ids + */ + public function getUsersInGroup($gid) { + return array(); + } + + /** + * @brief get a list of all groups + * @returns array with group names + * + * Returns a list with all groups + */ + public function getGroups() { + $groups = OC_LDAP::search($this->ldapGroupFilter, $this->ldapGroupDisplayName); + + if(count($groups) == 0 ) + return array(); + else { + return array_unique($groups, SORT_LOCALE_STRING); + } + } + + } \ No newline at end of file diff --git a/apps/user_ldap/lib_ldap.php b/apps/user_ldap/lib_ldap.php new file mode 100644 index 0000000000..62e478597b --- /dev/null +++ b/apps/user_ldap/lib_ldap.php @@ -0,0 +1,118 @@ +. + * + */ + + class OC_LDAP { + static protected $ldapConnectionRes = false; + static protected $configured = false; + + //cached settings + static protected $ldapHost; + static protected $ldapPort; + static protected $ldapBase; + static protected $ldapAgentName; + static protected $ldapAgentPassword; + static protected $ldapTLS; + static protected $ldapNoCase; + + static public function init() { + self::readConfiguration(); + self::establishConnection(); + } + + /** + * @brief executes an LDAP search + * @param $filter the LDAP filter for the search + * @param $attr optional, when a certain attribute shall be filtered out + * @returns array with the search result + * + * Executes an LDAP search + */ + static public function search($filter, $attr = null) { + $sr = ldap_search(self::getConnectionResource(), self::$ldapBase, $filter); + $findings = ldap_get_entries(self::getConnectionResource(), $sr ); + + if(!is_null($attr)) { + $selection = array(); + foreach($findings as $item) { + if(isset($item[strtolower($attr)])) { + $selection[] = $item[strtolower($attr)][0]; + } + } + return $selection; + } + + return $findings; + } + + /** + * Returns the LDAP handler + */ + static private function getConnectionResource() { + if(!self::$ldapConnectionRes) { + self::init(); + } + return self::$ldapConnectionRes; + } + + /** + * Caches the general LDAP configuration. + */ + static private function readConfiguration() { + if(!self::$configured) { + self::$ldapHost = OC_Appconfig::getValue('user_ldap', 'ldap_host', ''); + self::$ldapPort = OC_Appconfig::getValue('user_ldap', 'ldap_port', OC_USER_BACKEND_LDAP_DEFAULT_PORT); + self::$ldapAgentName = OC_Appconfig::getValue('user_ldap', 'ldap_dn',''); + self::$ldapAgentPassword = OC_Appconfig::getValue('user_ldap', 'ldap_password',''); + self::$ldapBase = OC_Appconfig::getValue('user_ldap', 'ldap_base',''); + self::$ldapTLS = OC_Appconfig::getValue('user_ldap', 'ldap_tls',0); + self::$ldapNoCase = OC_Appconfig::getValue('user_ldap', 'ldap_nocase', 0); + + //TODO: sanity checking + self::$configured = true; + } + } + + /** + * Connects and Binds to LDAP + */ + static private function establishConnection() { + if(!self::$ldapConnectionRes) { + self::$ldapConnectionRes = ldap_connect(self::$ldapHost, self::$ldapPort); + if(ldap_set_option(self::$ldapConnectionRes, LDAP_OPT_PROTOCOL_VERSION, 3)) { + if(ldap_set_option(self::$ldapConnectionRes, LDAP_OPT_REFERRALS, 0)) { + if(self::$ldapTLS) { + ldap_start_tls(self::$ldapConnectionRes); + } + } + } + + //TODO: Check if it works. Before, it was outside the resource-condition + $ldapLogin = @ldap_bind(self::$ldapConnectionRes, self::$ldapAgentName, self::$ldapAgentPassword ); + if(!$ldapLogin) { + return false; + } + } + } + + + } \ No newline at end of file diff --git a/apps/user_ldap/tests/group_ldap.php b/apps/user_ldap/tests/group_ldap.php new file mode 100644 index 0000000000..277a234892 --- /dev/null +++ b/apps/user_ldap/tests/group_ldap.php @@ -0,0 +1,36 @@ +. +* +*/ + +class Test_Group_Ldap extends UnitTestCase { + function setUp(){ + OC_Group::clearBackends(); + } + + function testSingleBackend(){ + OC_Group::useBackend(new OC_GROUP_LDAP()); + $group_ldap = new OC_GROUP_LDAP(); + + $this->assertIsA(OC_Group::getGroups(),gettype(array())); + $this->assertIsA($group_ldap->getGroups(),gettype(array())); + } + +} diff --git a/core/js/js.js b/core/js/js.js index 7e8ca6164c..e3941fba6d 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -297,7 +297,10 @@ function object(o) { * Fills height of window. (more precise than height: 100%;) */ function fillHeight(selector) { - var height = parseFloat($(window).height())-parseFloat(selector.css('top')); + if (selector.length == 0) { + return; + } + var height = parseFloat($(window).height())-selector.offset().top; selector.css('height', height + 'px'); if(selector.outerHeight() > selector.height()) selector.css('height', height-(selector.outerHeight()-selector.height()) + 'px'); @@ -307,8 +310,11 @@ function fillHeight(selector) { * Fills height and width of window. (more precise than height: 100%; or width: 100%;) */ function fillWindow(selector) { + if (selector.length == 0) { + return; + } fillHeight(selector); - var width = parseFloat($(window).width())-parseFloat(selector.css('left')); + var width = parseFloat($(window).width())-selector.offset().left; selector.css('width', width + 'px'); if(selector.outerWidth() > selector.width()) selector.css('width', width-(selector.outerWidth()-selector.width()) + 'px'); diff --git a/lib/app.php b/lib/app.php index db2df7c243..5fccf1fe68 100755 --- a/lib/app.php +++ b/lib/app.php @@ -35,6 +35,7 @@ class OC_App{ static private $adminForms = array(); static private $personalForms = array(); static private $appInfo = array(); + static private $appTypes = array(); /** * @brief loads all apps @@ -85,11 +86,7 @@ class OC_App{ if(is_string($types)){ $types=array($types); } - $appData=self::getAppInfo($app); - if(!isset($appData['types'])){ - return false; - } - $appTypes=$appData['types']; + $appTypes=self::getAppTypes($app); foreach($types as $type){ if(array_search($type,$appTypes)!==false){ return true; @@ -97,6 +94,32 @@ class OC_App{ } return false; } + + /** + * get the types of an app + * @param string $app + * @return array + */ + private static function getAppTypes($app){ + //load the cache + if(count(self::$appTypes)==0){ + self::$appTypes=OC_Appconfig::getValues(false,'types'); + } + + //get it from info.xml if we haven't cached it + if(!isset(self::$appTypes[$app])){ + $appData=self::getAppInfo($app); + if(isset($appData['types'])){ + self::$appTypes[$app]=$appData['types']; + }else{ + self::$appTypes[$app]=array(); + } + + OC_Appconfig::setValue($app,'types',implode(',',self::$appTypes[$app])); + } + + return explode(',',self::$appTypes[$app]); + } /** * get all enabled apps diff --git a/lib/appconfig.php b/lib/appconfig.php index 2b5cef59ad..5aaaadd9c4 100644 --- a/lib/appconfig.php +++ b/lib/appconfig.php @@ -163,4 +163,38 @@ class OC_Appconfig{ return true; } + + /** + * get multiply values, either the app or key can be used as wildcard by setting it to false + * @param app + * @param key + * @return array + */ + public static function getValues($app,$key){ + if($app!==false and $key!==false){ + return false; + } + $where='WHERE'; + $fields='configvalue'; + $params=array(); + if($app!==false){ + $where.=' appid = ?'; + $fields.=', configkey'; + $params[]=$app; + $key='configkey'; + }else{ + $fields.=', appid'; + $where.=' configkey = ?'; + $params[]=$key; + $key='appid'; + } + $queryString='SELECT '.$fields.' FROM *PREFIX*appconfig '.$where; + $query=OC_DB::prepare($queryString); + $result=$query->execute($params); + $values=array(); + while($row=$result->fetchRow()){ + $values[$row[$key]]=$row['configvalue']; + } + return $values; + } } diff --git a/lib/db.php b/lib/db.php index d2552bff8f..2f74cc6dd9 100644 --- a/lib/db.php +++ b/lib/db.php @@ -434,7 +434,7 @@ class OC_DB { self::connect(); // We need Database type and table prefix if(is_null(self::$type)){ - self::$type=OC_Config::getValue( "dbtype", "oc_" ); + self::$type=OC_Config::getValue( "dbtype", "sqlite" ); } $type = self::$type; if(is_null(self::$prefix)){ @@ -501,7 +501,7 @@ class OC_DB { } /** - * @breif replaces the owncloud tables with a new set + * @brief replaces the owncloud tables with a new set * @param $file string path to the MDB2 xml db export file */ public static function replaceDB( $file ){ diff --git a/lib/files.php b/lib/files.php index aacd2c9e00..a7b8314957 100644 --- a/lib/files.php +++ b/lib/files.php @@ -104,15 +104,15 @@ class OC_Files { header('Content-Type: application/zip'); header('Content-Length: ' . filesize($filename)); }else{ - header('Content-Type: ' . OC_Filesystem::getMimeType($filename)); - header('Content-Length: ' . OC_Filesystem::filesize($filename)); + $fileData=OC_FileCache::get($filename); + header('Content-Type: ' . $fileData['mimetype']); + header('Content-Length: ' . $fileData['size']); } }elseif($zip or !OC_Filesystem::file_exists($filename)){ header("HTTP/1.0 404 Not Found"); $tmpl = new OC_Template( '', '404', 'guest' ); $tmpl->assign('file',$filename); $tmpl->printPage(); -// die('404 Not Found'); }else{ header("HTTP/1.0 403 Forbidden"); die('403 Forbidden'); diff --git a/lib/migrate.php b/lib/migrate.php index 1ce8619899..dfc3494896 100644 --- a/lib/migrate.php +++ b/lib/migrate.php @@ -57,7 +57,7 @@ class OC_Migrate{ } /** - * @breif finds and loads the providers + * @brief finds and loads the providers */ static private function findProviders(){ // Find the providers @@ -72,7 +72,7 @@ class OC_Migrate{ } /** - * @breif exports a user, or owncloud instance + * @brief exports a user, or owncloud instance * @param optional $uid string user id of user to export if export type is user, defaults to current * @param ootional $type string type of export, defualts to user * @param otional $path string path to zip output folder @@ -190,7 +190,7 @@ class OC_Migrate{ } /** - * @breif imports a user, or owncloud instance + * @brief imports a user, or owncloud instance * @param $path string path to zip * @param optional $type type of import (user or instance) * @param optional $uid userid of new user @@ -298,7 +298,7 @@ class OC_Migrate{ } /** - * @breif recursively deletes a directory + * @brief recursively deletes a directory * @param $dir string path of dir to delete * $param optional $deleteRootToo bool delete the root directory * @return bool @@ -323,7 +323,7 @@ class OC_Migrate{ } /** - * @breif copies recursively + * @brief copies recursively * @param $path string path to source folder * @param $dest string path to destination * @return bool @@ -354,7 +354,7 @@ class OC_Migrate{ } /** - * @breif tries to extract the import zip + * @brief tries to extract the import zip * @param $path string path to the zip * @return string path to extract location (with a trailing slash) or false on failure */ @@ -396,7 +396,7 @@ class OC_Migrate{ } /** - * @breif creates a migration.db in the users data dir with their app data in + * @brief creates a migration.db in the users data dir with their app data in * @return bool whether operation was successfull */ private static function exportAppData( ){ @@ -444,7 +444,7 @@ class OC_Migrate{ /** - * @breif generates json containing export info, and merges any data supplied + * @brief generates json containing export info, and merges any data supplied * @param optional $array array of data to include in the returned json * @return bool */ @@ -479,7 +479,7 @@ class OC_Migrate{ } /** - * @breif connects to migration.db, or creates if not found + * @brief connects to migration.db, or creates if not found * @param $db optional path to migration.db, defaults to user data dir * @return bool whether the operation was successful */ @@ -538,7 +538,7 @@ class OC_Migrate{ } /** - * @breif creates the tables in migration.db from an apps database.xml + * @brief creates the tables in migration.db from an apps database.xml * @param $appid string id of the app * @return bool whether the operation was successful */ @@ -592,7 +592,7 @@ class OC_Migrate{ } /** - * @breif tries to create the zip + * @brief tries to create the zip * @param $path string path to zip destination * @return bool */ @@ -612,7 +612,7 @@ class OC_Migrate{ } /** - * @breif returns an array of apps that support migration + * @brief returns an array of apps that support migration * @return array */ static public function getApps(){ @@ -627,7 +627,7 @@ class OC_Migrate{ } /** - * @breif imports a new user + * @brief imports a new user * @param $db string path to migration.db * @param $info object of migration info * @param $uid optional uid to use @@ -690,7 +690,7 @@ class OC_Migrate{ } /* - * @breif creates a new user in the database + * @brief creates a new user in the database * @param $uid string user_id of the user to be created * @param $hash string hash of the user to be created * @return bool result of user creation diff --git a/lib/migration/content.php b/lib/migration/content.php index d304051f3e..7ef88f36e4 100644 --- a/lib/migration/content.php +++ b/lib/migration/content.php @@ -33,7 +33,7 @@ class OC_Migration_Content{ private $tmpfiles=false; /** - * @breif sets up the + * @brief sets up the * @param $zip ZipArchive object * @param optional $db a MDB2 database object (required for exporttype user) * @return bool @@ -51,7 +51,7 @@ class OC_Migration_Content{ } - // @breif prepares the db + // @brief prepares the db // @param $query the sql query to prepare public function prepare( $query ){ @@ -74,7 +74,7 @@ class OC_Migration_Content{ } /** - * @breif processes the db query + * @brief processes the db query * @param $query the query to process * @return string of processed query */ @@ -130,7 +130,7 @@ class OC_Migration_Content{ } /** - * @breif saves a sql data set into migration.db + * @brief saves a sql data set into migration.db * @param $data a sql data set returned from self::prepare()->query() * @param $options array of copyRows options * @return void @@ -175,7 +175,7 @@ class OC_Migration_Content{ } /** - * @breif adds a directory to the zip object + * @brief adds a directory to the zip object * @param $dir string path of the directory to add * @param $recursive bool * @param $internaldir string path of folder to add dir to in zip @@ -209,7 +209,7 @@ class OC_Migration_Content{ } /** - * @breif adds a file to the zip from a given string + * @brief adds a file to the zip from a given string * @param $data string of data to add * @param $path the relative path inside of the zip to save the file to * @return bool @@ -228,7 +228,7 @@ class OC_Migration_Content{ } /** - * @breif closes the zip, removes temp files + * @brief closes the zip, removes temp files * @return bool */ public function finish(){ @@ -241,7 +241,7 @@ class OC_Migration_Content{ } /** - * @breif cleans up after the zip + * @brief cleans up after the zip */ private function cleanup(){ // Delete tmp files @@ -249,4 +249,4 @@ class OC_Migration_Content{ unlink( $i ); } } -} \ No newline at end of file +} diff --git a/lib/migration/provider.php b/lib/migration/provider.php index feae29f135..91336f3019 100644 --- a/lib/migration/provider.php +++ b/lib/migration/provider.php @@ -17,19 +17,19 @@ abstract class OC_Migration_Provider{ } /** - * @breif exports data for apps + * @brief exports data for apps * @return array appdata to be exported */ abstract function export( ); /** - * @breif imports data for the app + * @brief imports data for the app * @return void */ abstract function import( ); /** - * @breif sets the OC_Migration_Content object to $this->content + * @brief sets the OC_Migration_Content object to $this->content * @param $content a OC_Migration_Content object */ public function setData( $uid, $content, $info=null ){ @@ -43,7 +43,7 @@ abstract class OC_Migration_Provider{ } /** - * @breif returns the appid of the provider + * @brief returns the appid of the provider * @return string */ public function getID(){ diff --git a/settings/js/apps.js b/settings/js/apps.js index bd7a8e9f84..12d09ac69d 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -29,14 +29,14 @@ $(document).ready(function(){ if(app){ if(active){ $.post(OC.filePath('settings','ajax','disableapp.php'),{appid:app},function(result){ - if(!result || result.status!='succes'){ + if(!result || result.status!='success'){ OC.dialogs.alert('Error','Error while disabling app'); } },'json'); $('#leftcontent li[data-id="'+app+'"]').removeClass('active'); }else{ $.post(OC.filePath('settings','ajax','enableapp.php'),{appid:app},function(result){ - if(!result || result.status!='succes'){ + if(!result || result.status!='success'){ OC.dialogs.alert('Error','Error while enabling app'); } },'json');